privilegeareas/gui.lua

210 lines
4.8 KiB
Lua

gui = {}
-- Chat command for opening gui
minetest.register_chatcommand("privareas", {
params = "",
description = "PrivAreas: access a formspec from the privilegeareas mod",
privs = {
privs = true,
},
func = function(name, param)
add_gui(name)
end,
})
-- The add gui
function add_gui(name)
print("Showing add area form to "..name)
gui[name]={
type="box"
}
minetest.show_formspec(name, "privilegeareas:gui_add", "size[6,5]"..
"button[2,0;2,1;type;box]"..
"field[2,2;1,1;x;X;0]"..
"field[3,2;1,1;y;Y;0]"..
"field[4,2;1,1;z;Z;0]"..
"field[2,3;1,1;x2;X;0]"..
"field[3,3;1,1;y2;Y;0]"..
"field[4,3;1,1;z2;Z;0]"..
"button_exit[2,4;2,1;submit;Add]")
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = player:get_player_name()
if (formname~="privilegeareas:gui_add") then
return false
end
if not minetest.check_player_privs(player, "privs") then
return false
end
if fields.submit then
-- Do addition stuff
print("submitting")
if gui[name].type == "box" then
table.insert(privilegeareas.areas,{
type = gui[name].type,
location = {
x=math.floor(fields.x),
y=math.floor(fields.y),
z=math.floor(fields.z),
},
location2 = {
x=math.floor(fields.x2),
y=math.floor(fields.y2),
z=math.floor(fields.z2),
},
actions = {
on_enter = {
},
on_leave = {
}
}
})
else
table.insert(privilegeareas.areas,{
type = gui[name].type,
location = {
x=math.floor(fields.x),
y=math.floor(fields.y),
z=math.floor(fields.z),
radius=math.floor(fields.rad)
},
actions = {
on_enter = {
grant = {},
take = {}
},
on_leave = {
grant = {},
take = {}
}
}
})
end
gui[name]=nil
act_gui(name,#privilegeareas.areas)
return
end
if fields.type then
-- Do toggle stuff
print("toggling")
if gui[name].type == "box" then
gui[name].type = "radius"
minetest.show_formspec(name, "privilegeareas:gui_add", "size[6,5]"..
"button[2,0;2,1;type;"..gui[name].type.."]"..
"field[2,2;1,1;x;X;"..fields.x.."]"..
"field[3,2;1,1;y;Y;"..fields.y.."]"..
"field[4,2;1,1;z;Z;"..fields.z.."]"..
"field[2,3;1,1;rad;R;0]"..
"button_exit[2,4;2,1;submit;Add]")
else
gui[name].type = "box"
minetest.show_formspec(name, "privilegeareas:gui_add", "size[6,5]"..
"button[2,0;2,1;type;"..gui[name].type.."]"..
"field[2,2;1,1;x;X;"..fields.x.."]"..
"field[3,2;1,1;y;Y;"..fields.y.."]"..
"field[4,2;1,1;z;Z;"..fields.z.."]"..
"field[2,3;1,1;x2;X;0]"..
"field[3,3;1,1;y2;Y;0]"..
"field[4,3;1,1;z2;Z;0]"..
"button_exit[2,4;2,1;submit;Add]")
end
end
end)
function act_gui(name,id)
print("Showing add action form for area "..id)
print(dump(privilegeareas.areas[id]))
if not gui[name] or not gui[name].trigger or not gui[name].type or not gui[name].value then
gui[name]={
trigger = "on_enter",
type = "grant",
value = "",
}
end
gui[name].id = id
minetest.show_formspec(name, "privilegeareas:gui_act", "size[7,4]"..
"field[2,1;4,1;name;Data;"..gui[name].value.."]"..
"button[1,2;2,1;trigger;"..gui[name].trigger.."]"..
"button[4,2;2,1;type;"..gui[name].type.."]"..
"button[1,3;2,1;submit;Add]"..
"button_exit[4,3;2,1;close;Close]")
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
if (formname~="privilegeareas:gui_act") then
return false
end
local name = player:get_player_name()
gui[name].value = fields.name
if fields.close then
return
end
if fields.submit then
-- Do addition stuff
print("submitting")
if (gui[name].id and gui[name].trigger and fields.name) then
-- this will doubtlessly be buggy
local id = gui[name].id
local trigger = gui[name].trigger
local action_type = gui[name].type
local trigger_action_types = privilegeareas.areas[id].actions[trigger]
if not trigger_action_types[action_type] then
trigger_action_types[action_type] = {}
end
table.insert(trigger_action_types[action_type],fields.name)
-- Alert user of success
minetest.chat_send_player(name, "Added data '"..fields.name.."' to '"..gui[name].type.."' in trigger "..gui[name].trigger.." in area "..gui[name].id)
-- Delete field
gui[name] = nil
-- Update
act_gui(name,id)
return
end
end
if fields.type then
-- Do toggle stuff
print("toggling type")
if gui[player:get_player_name()].type == "grant" then
gui[player:get_player_name()].type = "take"
else
gui[player:get_player_name()].type = "grant"
end
end
if fields.trigger then
-- Do toggle stuff
print("toggling trigger")
if gui[player:get_player_name()].trigger == "on_enter" then
gui[player:get_player_name()].trigger = "on_leave"
else
gui[player:get_player_name()].trigger = "on_enter"
end
end
act_gui(name,gui[name].id)
end)