したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

DSB用スレ

7356:2015/09/01(火) 21:46:19 ID:3TmyF/qU
昔、カスタムダンジョンを作っていた時に作ったアイテムです。
制作自体は休止状態ですが。そんなに難しい仕組みでもないし、
もうほかに誰かがこういうものを公開しているかも、と考えて二年経ちました。
せっかくなのでここで公開します。私もあまりコードを書くことに自信は無いし、
なにかミスがあるかもしれません。

--- chest4d.lua ---
-- 入れたアイテムの重量が加算されない箱

function format_chest4d(arch, id)
    -- LIMBO に箱を生成
    exvar[id] = { subst = dsb_spawn("chest", LIMBO, 0, 0, 0) }
    -- 配置時に入っていたアイテムを LIMBO の箱の中に移動
    for iobj in dsb_in_obj(id) do
        dsb_move(iobj, IN_OBJ, exvar[id].subst, VARIABLE, 0)
    end
end

-- 配置時にアイテムを入れておいても大丈夫だが、champion の初期所持品に
-- 入れて生成すると使用時に強制終了する。DSB 0.57 で確認。
-- champion の所持品は on_spawn が呼ばれないらしい。

obj[ROOT_NAME] = clone_arch(obj.chest, {
    name = "CHEST 4D",
    -- ここ以外では使わないので無名関数にする
    subrenderer = function(arch, id)
        -- 箱を開けた時、LIMBO にある箱の中を見せる
        basic_8_object_subrenderer(arch, exvar[id].subst)
    end,
    on_spawn = format_chest4d,
    -- この箱自体には何も入らないので以下の変数は不要なはず
    capacity = nil,
    inside_gfx = nil,
} )

-- champion の初期所持品に入れたい場合、ゲーム開始時に function_caller で
-- この関数を呼び出す。 function_caller の exvar に c4d というリストを作り
-- その中に champion 達が所持している chest4d の id をすべて入れる。
-- 地面に置いてあるものなど、所持品でない id は入れない。
-- champion が chest4d を所持しない場合、この関数を呼ぶ必要はない。

function chest4d_formatter(id)
    for k, v in pairs(exvar[id].c4d) do
        format_chest4d(nil, v)
    end
    -- 不要になった exvar を消去
    exvar[id].c4d = nil
end


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板