summaryrefslogtreecommitdiff
path: root/xban2/gui.lua
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2016-04-01 20:02:19 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2016-04-01 21:09:33 -0400
commitda66780a569712c23ae4f2996cfb4608a9f9d69d (patch)
tree217556029a78bc23ad4564720afc86de97228a04 /xban2/gui.lua
parent615b22df4d423aded3613db7716943a2f389b047 (diff)
downloaddreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar.gz
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar.bz2
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar.xz
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.zip
copy all standard Dreambuilder mods in from the old subgame
(exactly as last supplied there, updates to these mods will follow later)
Diffstat (limited to 'xban2/gui.lua')
-rw-r--r--xban2/gui.lua90
1 files changed, 90 insertions, 0 deletions
diff --git a/xban2/gui.lua b/xban2/gui.lua
new file mode 100644
index 0000000..544f3be
--- /dev/null
+++ b/xban2/gui.lua
@@ -0,0 +1,90 @@
+
+local FORMNAME = "xban2:main"
+
+local states = { }
+
+local table_insert, table_concat =
+ table.insert, table.concat
+
+local ESC = minetest.formspec_escape
+
+local function make_fs(name)
+ local state = states[name]
+ if not state then return end
+ local list, index, filter = state.list, state.index, state.filter
+ if index > #list then
+ index = #list
+ end
+ local fs = {
+ "size[10,8]",
+ "label[0.5,0.6;Filter]",
+ "field[1.5,0.5;6,2;filter;;"..ESC(filter).."]",
+ "button[7.5,0.5;2,1;search;Search]",
+ }
+ table_insert(fs,
+ ("textlist[0.5,2;3,5.5;player;%s;%d;0]"):
+ format(table_concat(list, ","), index))
+ local record_name = list[index]
+ if record_name then
+ local record, err = xban.get_record(record_name)
+ if record then
+ local reclist = { }
+ for _, r in ipairs(record) do
+ table_insert(reclist, ESC(r))
+ end
+ table_insert(fs,
+ ("textlist[4,2;5,5.5;entry;%s;0;0]"):
+ format(table_concat(reclist, ",")))
+ else
+ table_insert(fs,
+ "textlist[4,2;5,5.5;entry;"..ESC(err)..";0]")
+ end
+ end
+ return table_concat(fs)
+end
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ if formname ~= FORMNAME then return end
+ local name = player:get_player_name()
+ local state = states[name]
+ if fields.player then
+ local t = minetest.explode_textlist_event(fields.player)
+ if (t.type == "CHG") or (t.type == "DCL") then
+ state.index = t.index
+ minetest.show_formspec(name, FORMNAME, make_fs(name))
+ end
+ return
+ end
+ if fields.search then
+ local filter = fields.filter or ""
+ state.filter = filter
+ local list = { }
+ state.list = list
+ for k in pairs(minetest.auth_table) do
+ if k:find(filter, 1, true) then
+ table_insert(list, k)
+ end
+ end
+ table.sort(list)
+ minetest.show_formspec(name, FORMNAME, make_fs(name))
+ end
+end)
+
+minetest.register_chatcommand("xban_gui", {
+ description = "Show XBan GUI",
+ params = "",
+ func = function(name, params)
+ local state = states[name]
+ if not state then
+ state = { index=1, filter="" }
+ states[name] = state
+ local list = { }
+ state.list = list
+ for k in pairs(minetest.auth_table) do
+ table_insert(list, k)
+ end
+ table.sort(list)
+ end
+ minetest.show_formspec(name, FORMNAME, make_fs(name))
+ end,
+})