Move position caching to server-side entirely
parent
6bb6b4072c
commit
2516fac8af
82
init.lua
82
init.lua
|
@ -4,38 +4,44 @@
|
||||||
-- quantity is paid. Ideal to charge admission from visitors to your
|
-- quantity is paid. Ideal to charge admission from visitors to your
|
||||||
-- buildings
|
-- buildings
|
||||||
farebox = {}
|
farebox = {}
|
||||||
|
-- Is used to keep the formspec information server-side
|
||||||
|
farebox.players = {}
|
||||||
|
|
||||||
function farebox.show_formspec(pos, player)
|
function farebox.show_formspec(pos, player)
|
||||||
local spos = pos.x .. "," .. pos.y .. "," .. pos.z
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
local owner = meta:get_string("owner")
|
local owner = meta:get_string("owner")
|
||||||
local formspec = ""
|
local player_name = player:get_player_name()
|
||||||
if owner and player:get_player_name() == owner then
|
|
||||||
formspec = "size[8,10]"..
|
farebox.players[player_name] = vector.new(pos)
|
||||||
"label[0.5,0.5;Entrance fee:]" ..
|
if player_name == owner then
|
||||||
"list[nodemeta:" .. spos .. ";request;2.5,0.25;1,1;]" ..
|
local loc = "nodemeta:" .. pos.x .. "," .. pos.y .. "," .. pos.z
|
||||||
|
minetest.show_formspec(player_name, "farebox:farebox",
|
||||||
|
"size[8,10]"..
|
||||||
|
"label[0.5,0.5; Entrance fee:]" ..
|
||||||
|
"list[" .. loc .. ";request;2.5,0.25;1,1;]" ..
|
||||||
"button_exit[6,0.25;2,1;open;Open]" ..
|
"button_exit[6,0.25;2,1;open;Open]" ..
|
||||||
"list[nodemeta:" .. spos .. ";main;0,1.5;8,4]" ..
|
"list[" .. loc .. ";main;0,1.5;8,4]" ..
|
||||||
"list[current_player;main;0,5.75;8,1;]" ..
|
"list[current_player;main;0,5.75;8,1;]" ..
|
||||||
"list[current_player;main;0,7;8,3;8]" ..
|
"list[current_player;main;0,7;8,3;8]" ..
|
||||||
"listring[]" .. default.get_hotbar_bg(0, 4.25)
|
"listring[]" .. default.get_hotbar_bg(0, 4.25)
|
||||||
|
)
|
||||||
else
|
else
|
||||||
formspec = "size[8,4]" ..
|
minetest.show_formspec(player_name, "farebox:farebox",
|
||||||
|
"size[8,4]" ..
|
||||||
"label[0.5,1.5; Owner Wants:]" ..
|
"label[0.5,1.5; Owner Wants:]" ..
|
||||||
"item_image_button[2.5,1.25;1,1;" ..
|
"item_image_button[2.5,1.25;1,1;" ..
|
||||||
inv:get_stack("request",1):get_name() .. ";buy;\n\n\b\b\b\b\b" ..
|
inv:get_stack("request", 1):get_name() .. ";buy;\n\n\b\b\b\b\b" ..
|
||||||
inv:get_stack("request",1):get_count() .. "]" ..
|
inv:get_stack("request", 1):get_count() .. "]" ..
|
||||||
"label[3.5,1.5; (Click on the item to pay)]"
|
"label[3.5,1.5; (Click on the item to pay)]"
|
||||||
|
)
|
||||||
end
|
end
|
||||||
minetest.after(0.1, function(gui, name)
|
|
||||||
minetest.show_formspec(name, "farebox:" .. spos, gui)
|
|
||||||
end, formspec, player:get_player_name())
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
farebox.rules = {
|
farebox.rules = {
|
||||||
{x=0, y=-2, z=0},
|
{x=0, y=-2, z=0},
|
||||||
{x=0, y=2, z=0}
|
{x=0, y=2, z=0},
|
||||||
}
|
}
|
||||||
|
|
||||||
function farebox.open_faregate(pos)
|
function farebox.open_faregate(pos)
|
||||||
|
@ -59,45 +65,59 @@ function farebox.close_faregate(pos)
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_on_player_receive_fields(function(player, form, pressed)
|
minetest.register_on_player_receive_fields(function(player, formname, pressed)
|
||||||
if string.sub(form,1,string.len("farebox:")) == "farebox:" then
|
if formname ~= "farebox:farebox" then
|
||||||
local spos = string.sub(form, string.len("farebox:") + 1, -1)
|
return -- Not My Job
|
||||||
local pos = minetest.string_to_pos(spos)
|
end
|
||||||
|
local pname = player:get_player_name()
|
||||||
|
local pos = farebox.players[pname]
|
||||||
|
if not pos then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local nodename = minetest.get_node(pos).name
|
||||||
|
if nodename ~= "farebox:farebox" and nodename ~= "farebox:faregate" then
|
||||||
|
-- Node was removed. Make reference invalid.
|
||||||
|
farebox.players[pname] = nil
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local pinv = player:get_inventory()
|
local pinv = player:get_inventory()
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
local pname = player:get_player_name()
|
local owner = meta:get_string("owner")
|
||||||
local nodename = minetest.get_node(pos).name
|
|
||||||
local open = false
|
local open = false
|
||||||
if pressed.buy then
|
if pressed.buy then
|
||||||
if pinv:contains_item("main", inv:get_stack("request", 1))
|
local request = inv:get_stack("request", 1)
|
||||||
and inv:room_for_item("main", inv:get_stack("request", 1)) then
|
if pinv:contains_item("main", request)
|
||||||
|
and inv:room_for_item("main", request) then
|
||||||
if not (creative and creative.is_enabled_for
|
if not (creative and creative.is_enabled_for
|
||||||
and creative.is_enabled_for(pname)) then
|
and creative.is_enabled_for(pname)) then
|
||||||
pinv:remove_item("main", inv:get_stack("request", 1))
|
pinv:remove_item("main", request)
|
||||||
end
|
end
|
||||||
inv:add_item("main", inv:get_stack("request",1))
|
inv:add_item("main", request)
|
||||||
open = true
|
open = true
|
||||||
elseif not pinv:contains_item("main", inv:get_stack("request", 1)) then
|
elseif not pinv:contains_item("main", request) then
|
||||||
minetest.chat_send_player(pname, "You don't have enough items to enter")
|
minetest.chat_send_player(pname, "You don't have enough items to enter")
|
||||||
elseif not inv:room_for_item("main", inv:get_stack("request", 1)) then
|
elseif not inv:room_for_item("main", request) then
|
||||||
minetest.chat_send_player(pname, "Owner's inventory is full")
|
minetest.chat_send_player(pname, "Owner's inventory is full")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if pressed.open or open then
|
if (pressed.open and pname == owner) or open then
|
||||||
minetest.chat_send_player(pname, "Payment accepted.")
|
minetest.chat_send_player(pname, "Payment accepted.")
|
||||||
if nodename == "farebox:farebox" then
|
if nodename == "farebox:farebox" then
|
||||||
mesecon.receptor_on(pos,farebox.rules)
|
mesecon.receptor_on(pos, farebox.rules)
|
||||||
minetest.after(1, mesecon.receptor_off, pos, farebox.rules)
|
minetest.after(1, mesecon.receptor_off, pos, farebox.rules)
|
||||||
elseif nodename == "farebox:faregate" then
|
elseif nodename == "farebox:faregate" then
|
||||||
farebox.open_faregate(pos)
|
farebox.open_faregate(pos)
|
||||||
end
|
end
|
||||||
minetest.close_formspec(pname, form)
|
minetest.close_formspec(pname, formname)
|
||||||
end
|
end
|
||||||
end -- if string.sub(...)
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_leaveplayer(function(player)
|
||||||
|
farebox.players[player:get_player_name()] = nil
|
||||||
|
end)
|
||||||
|
|
||||||
minetest.register_node("farebox:farebox", {
|
minetest.register_node("farebox:farebox", {
|
||||||
description = "Farebox",
|
description = "Farebox",
|
||||||
|
|
Loading…
Reference in New Issue