tacigar / maidroid

Minetest modpack: Provides cute maid robots
GNU Lesser General Public License v2.1
14 stars 12 forks source link

get_staticdata と on_activate を修正 #139

Closed tacigar closed 7 years ago

tacigar commented 7 years ago

BBS でご指摘いただいた. 以下引用.

get_staticdata() / on_activate()でデータの保存・復帰を行っている部分で インベントリーの保存・復帰の方法に現時点だと以下の問題点があると思います。 (1) 空のスロットを無視しているので復帰後のインベントリーが整理された状態になる (2) add_itemで追加しているので同じアイテムがスタックしてしまう (3) wearやmetadataを保存していないのでツールが初期状態になる ですのでnameやcountを個別にテーブルに保存するのではなく、 下の例のようにto_string()を使うとmetadataも含めてすべて保存できるのではと思います。

tacigar commented 7 years ago

ほほ~, ItemStack ってこんなに賢く使えるのか... 😓

ghost commented 7 years ago

mainだけでなくcoreやwieldの方もメタデータを保持するべきなので、以下のようにまとめてもいいかもしれません。

for list_name, list in pairs(inventory:get_lists()) do
  data["inventory"][list_name] = {}

  for i, item in ipairs(list) do
    data["inventory"][list_name][i] = item:to_string()
  end
end
ghost commented 7 years ago

ついでに、復帰部分もこうでいいと思います。

for list_name, list in pairs(data["inventory"]) do
    inventory:set_list(list_name, list)
end
tacigar commented 7 years ago

wield_itemcore は一つしかないということで, テーブルを避けてたんですが, 確かにその方がまとまっていて良いですね 😄

tacigar commented 7 years ago

あ, あと明けましておめでとうございます.

ghost commented 7 years ago

明けましておめでとうございます。 本年もよろしくお願いいたします。

tacigar commented 7 years ago

ついでに、復帰部分もこうでいいと思います。

これ, 動くんですね... 一つずつ辿って ItemStack 化しないとダメなのかと思っていました... 勉強になります.

tacigar commented 7 years ago

core_name と list とで, 二重にコアの情報を管理している意味が全然分からない. どういう考えでこういう実装にしたのか...思い出せない...

直すか... こういうの直すのが一番つらい.

ghost commented 7 years ago

maidroid:dummy_itemのコードを見ていて思ったのですが、wielditemってtextureに{""}を指定すれば透明になってくれた気がします。(間違っていたらすみません…)

tacigar commented 7 years ago

わお! そうだったんですね... 最初 "air" を指定していてダメだったんで, ダメなのかぁと思ってました...

ghost commented 7 years ago

0.4.13の頃は(おそらく)そうでした。 今通用するかは分からないので、お手数をおかけしますが、確認していただければと思います…。

tacigar commented 7 years ago

0.4.15 で試してみたのですが, textures={""} では変な物体が表示されてしまいました... textures="", textures=nil では unknown な感じに表示されました.

とりあえず今のままにしておきます... 😢