--- Server Shops Nodes -- -- @topic nodes local ss = server_shop local S = core.get_translator(ss.modname) -- ################################################################# -- ## GEMEINSAME FUNKTIONEN -- ################################################################# local function after_place_node(pos, placer, itemstack) local meta = core.get_meta(pos) if itemstack:get_name() == "server_shop:shop_large" then meta:get_inventory():set_size("main", 20) else meta:get_inventory():set_size("main", 10) end meta:set_string("owner", placer:get_player_name()) meta:set_string("prices", core.serialize({})) meta:set_int("cash_reserve", 0) meta:set_string("name", S("@1's Shop", placer:get_player_name())) ss.update_infotext(pos) end local function on_rightclick(pos, node, player, itemstack, pointed_thing) if core.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == ss.modname..":shop_large_bottom" then pos.y = pos.y - 1 end local pmeta = player:get_meta() pmeta:set_string(ss.modname .. ":pos", core.serialize(pos)) if not (ss.is_shop_owner(pos, player) or ss.is_shop_admin(player)) then pmeta:set_int(ss.modname..":session_credit", 0) end ss.show_formspec(pos, player) end local function can_dig(pos, player) local owner_pos = {x=pos.x, y=pos.y, z=pos.z} if core.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == ss.modname..":shop_large_bottom" then owner_pos.y = pos.y - 1 end return ss.is_shop_owner(owner_pos, player) or ss.is_shop_admin(player) end -- ################################################################# -- ## SHOP-DEFINITIONEN -- ################################################################# -- Kleiner Shop (1 Block) core.register_node(ss.modname..":shop_small", { description = S("Shop"), paramtype2 = "facedir", groups = {choppy=1, oddly_breakable_by_hand=1}, sounds = default.node_sound_stone_defaults(), tiles = { "server_shop_side.png", "server_shop_side.png", "server_shop_side.png", "server_shop_side.png", "server_shop_side.png", "server_shop_front.png", }, after_place_node = after_place_node, on_rightclick = on_rightclick, can_dig = can_dig, }) -- Großer Shop, unterer Teil (enthält alle Daten) core.register_node(ss.modname..":shop_large_bottom", { description = S("Großer Shop"), paramtype2 = "facedir", drop = ss.modname..":shop_large_bottom", groups = {choppy=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, sounds = default.node_sound_stone_defaults(), tiles = { "server_shop_side.png", "server_shop_side.png", "server_shop_side.png", "server_shop_side.png", "server_shop_side.png", "server_shop_front_large_bottom.png", }, after_place_node = function(pos, placer) local meta = core.get_meta(pos) meta:get_inventory():set_size("main", 20) meta:set_string("owner", placer:get_player_name()) meta:set_string("prices", core.serialize({})) meta:set_int("cash_reserve", 0) meta:set_string("name", S("@1's Großer Shop", placer:get_player_name())) ss.update_infotext(pos) local above = {x=pos.x, y=pos.y+1, z=pos.z} core.set_node(above, {name=ss.modname..":shop_large_top", param2=core.get_node(pos).param2}) end, on_destruct = function(pos) local above = {x=pos.x, y=pos.y+1, z=pos.z} if core.get_node(above).name == ss.modname..":shop_large_top" then core.set_node(above, {name="air"}) end end, on_rightclick = on_rightclick, can_dig = can_dig, }) -- Großer Shop, oberer Teil core.register_node(ss.modname..":shop_large_top", { description = S("Großer Shop"), paramtype2 = "facedir", diggable = false, drop = "", groups = {not_in_creative_inventory=1}, sounds = default.node_sound_stone_defaults(), tiles = { "server_shop_side.png", "server_shop_side.png", "server_shop_side.png", "server_shop_side.png", "server_shop_side.png", "server_shop_front_large_top.png", }, -- KORREKTUR: on_destruct-Funktion hier komplett entfernt, um die Schleife zu verhindern. on_rightclick = on_rightclick, }) -- Alias für den give-Befehl core.register_alias(ss.modname..":shop", ss.modname..":shop_small") core.register_alias(ss.modname..":shop_large", ss.modname..":shop_large_bottom")