121 lines
4 KiB
Lua
121 lines
4 KiB
Lua
--- 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")
|