init repo

This commit is contained in:
Rainer 2025-08-11 16:15:02 +02:00
commit 692f547daf
26 changed files with 1098 additions and 0 deletions

121
node.lua Normal file
View file

@ -0,0 +1,121 @@
--- 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")