「松明の上に落下したノードが・・・」 今回も「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:やっと終わった(ね)・・・(^^)
コメント
コメントを投稿