「松明の上に落下したノードが・・・」 今回も「Digall」です

 今回は、Digallを使っている時に

落下ブロック(砂等)によって松明(等)が壊されると

Minetestが落ちるというバグを直していきます



まずは、前回までの「digall」関係のブログです

(本編はその後です)


前回は、使われていない「minetest.get_node_group」を

メッセージに従って、「minetest.get_item_group」にしました


まだ見てない方は

前回の「Deprecated usage of 」を読んで下さいね(^^)

リンクです


それ以前の「Digallの赤い文字を消す」も、あります

リンクです


「conf」の「none」エラー修正もあります(^^)

リンクです


と、3つブログがあります

よかったら、読んでくださいね



では、今日の部分始まりです(^^)


※Minetestの使用やMODの使用は自己責任でお願いします※

※MODの改造も自己責任でお願いします※



デフォルトのMinetestでは、

松明の上にノードが落下すると、

松明がアイテム化されてフィールドにドロップされますね


Digallを入れて下に松明を付けて

落下ブロック(砂とか砂利)を落とすとエラーになりました


Digallって、

壊したプレイヤーの情報を使って

メソッドを判定してるみたいですので、

「ブロック」が壊すと、「ブロック」がプレイヤーとして認識されて

処理が続けられるようです

(diggerがnilになってました)

もちろん、

ブロックはプレイヤーではありませんので、

エラーになるというわけです

これを理解するまでに時間がかかりました・・・(32:それは、内緒です)



今回のコードは、前回や前々回等で、書き換えたものをベースにしています

修正後のコードの行ですので、

行番号等に気を付けて読んでくださいね(^^)



まずは、「api.lua」からです


223行から264行目です(書き換え後の行番号です)


この中に書き加えていきます


「local poss = {}」の次の行に


local range = {}


を加えます



「if not (state and state == 1) then」の次の行に


if digger == nil then

range = { x = 1, y = 1, z = 1 }

else


3行加えます


次の行の「local」を消します



その次の行に

「end」を加えます



253行あたりになりますが、


if digger ~= nil then


を加えます


「for _, pos in ipairs(poss) do」の1つ前の行ですね



263行です

「end」を加えます





-- add」がある行が加えられた行です



これで、「api.lua」は終わりです

「保存」して終了です




次は「init.lua」です



26行から56行の「function」の中です


27行に


if digger ~= nil then


を加えます



49行と50行は最初からあったものですね

(少しずらしていますが、元々あったコードです)


49 local method = digall.registered_methods[assoc.methodname]

50 method.body(pos, oldnode, oldmetadata, digger, pos, oldnode)




51行から54行です



else

local method = digall.registered_methods["digall:falling_node"]

method.body(pos, oldnode, oldmetadata, digger, pos, oldnode)

end


加えます



-- add」がある行が加えられた行です


「init.lua」は終わりです

「保存」して終了です




これで、松明の上に落下ブロックが落ちた時、松明がフィールドドロップされます

松明等を壊した時に、毎回、「digall」を無効化し起動して、終了して、有効化、起動・・・

こんな事をしていましたが、

これで、暗い場所での砂等の除去にも松明で照らしながらdigallの作業が安心してできます

松明の上に落下ブロックが落ちても大丈夫ですね(^^)


今回はここまでです(^^)



では、また次回(^^)



-----------------------------------------------------------


33:今回も「digall」でしたね(^^)


32:はい


33:エラー直ってよかったですね(^^)


32:そうですね(^^)

 一時はどうなるかと思いました


33:何回かあきらめそうになってましたね(^^)


32:はい(^^)

 作者さんにお願いするしかないか?って思いました


33:でも、できましたよね?


32:急に発想が変わって、

 ヒントが、ひらめきました(^^)


33:煮詰まってましたもんね

 ひらめいてよかったですね(^^)


32:そうですね(^^)

 糸口が見つかったので、あとはやるだけでしたね


33:で、なにがどうなっていたのでしょうか?


32:簡単に言うと、

 「ブロックが人の振る舞いをしていた」ってことですね


33:?

 よくわかりません


32:「digger」っていう変数があるのですが、

 ブロックを壊した人の情報が入ってるんですが、

 落ちたブロックが松明を破壊した場合・・・


33:あっ・・・

 ブロックが壊した人になる


32:そうですね

 それでエラーになっていました

 digall内の「.lua」の中の「digger」部分を見つけて

 書き直しや、書き加えたが今回ですね


33:これで、松明に落下ブロックが落ちてもエラーにならず、

 松明がドロップ・・・ですね(^^)


32:そうですね(^^)

 今まで、テストしてましたが、

 大丈夫そうなので、ブログにしてみました


ナレーター:そろそろ時間です

 今回もDigall回でしたが、まだまだDigall回は続くのか?

 待て次回!!


33:ナレーターさんがノリノリでしたが、

「Digall」回、続くんですか?


32:今のところネタ切れですので、

「Digall」は今回までですね(^^)


33:次回は決まっていますか?


32:「足場MOD」のちょっとした改良版か、

 「インスタントスモールハウス(ishouse)」ですね


33:「ishouse」MODって完成してました?


32:はい

 今は複数個持ち歩いてテスト中ですが、

 行けそうですね(^^)


33:前は、1つしか持てませんでしたもんね(^^)

 その後の予定は?


32:全くの未定ですね

 なので、

 ブログで分かり辛いものを動画で紹介していきたいですね(^^)

 誰かの作ったMODの紹介とか・・・


33:何年ぶりの動画ですか?(^^)


32:そう言わないでください(T_T)


33:私の登場はありますか?


32:今のところは考えてません

 初心に戻ってやらないといけませんから、

 「冒険(?)はその後で」ってことですね(^^)


33:動画楽しみにしています(^^)


32:ありがとうございます(^^)


ナレーター:あの~っ

 そろそろ帰りませんか?


33:そうですね


32:私はもう少しアイデアを考えて・・・


33:えっ!!

 どうしたんですか?

 熱でも?


32:あの~っ

 それ(CPUグリス)塗るのやめてください


33:熱が下がると思って(^^)


ナレーター:良い子(普通の人も)はマネしないでくださいね

 32号さんは特殊な訓練を受けてますから(^^)


32:もう・・・(-"-;)

 いいです・・・

 アイデア浮かばないです

 帰りましょう(^^)


ナレーター&33:やっと終わった(ね)・・・(^^)




コメント

このブログの人気の投稿

Minetestのメニュー言語の変え方 2017/06/17

MODを入れよう!

額縁MOD