123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- --Minetest
- --Copyright (C) 2022 rubenwardy
- --
- --This program is free software; you can redistribute it and/or modify
- --it under the terms of the GNU Lesser General Public License as published by
- --the Free Software Foundation; either version 2.1 of the License, or
- --(at your option) any later version.
- --
- --This program is distributed in the hope that it will be useful,
- --but WITHOUT ANY WARRANTY; without even the implied warranty of
- --MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- --GNU Lesser General Public License for more details.
- --
- --You should have received a copy of the GNU Lesser General Public License along
- --with this program; if not, write to the Free Software Foundation, Inc.,
- --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- --------------------------------------------------------------------------------
- local function register_formspec(dialogdata)
- local title = fgettext("Joining $1", dialogdata.server and dialogdata.server.name or dialogdata.address)
- local buttons_y = 4 + 1.3
- if dialogdata.error then
- buttons_y = buttons_y + 0.8
- end
- local retval = {
- "formspec_version[4]",
- "size[8,", tostring(buttons_y + 1.175), "]",
- "set_focus[", (dialogdata.name ~= "" and "password" or "name"), "]",
- "label[0.375,0.8;", title, "]",
- "field[0.375,1.575;7.25,0.8;name;", core.formspec_escape(fgettext("Name")), ";",
- core.formspec_escape(dialogdata.name), "]",
- "pwdfield[0.375,2.875;7.25,0.8;password;", core.formspec_escape(fgettext("Password")), "]",
- "pwdfield[0.375,4.175;7.25,0.8;password_2;", core.formspec_escape(fgettext("Confirm Password")), "]"
- }
- if dialogdata.error then
- table.insert_all(retval, {
- "box[0.375,", tostring(buttons_y - 0.9), ";7.25,0.6;darkred]",
- "label[0.625,", tostring(buttons_y - 0.6), ";", core.formspec_escape(dialogdata.error), "]",
- })
- end
- table.insert_all(retval, {
- "container[0.375,", tostring(buttons_y), "]",
- "button[0,0;2.5,0.8;dlg_register_confirm;", fgettext("Register"), "]",
- "button[4.75,0;2.5,0.8;dlg_register_cancel;", fgettext("Cancel"), "]",
- "container_end[]",
- })
- return table.concat(retval, "")
- end
- --------------------------------------------------------------------------------
- local function register_buttonhandler(this, fields)
- this.data.name = fields.name
- this.data.error = nil
- if fields.dlg_register_confirm or fields.key_enter then
- if fields.name == "" then
- this.data.error = fgettext("Missing name")
- return true
- end
- if fields.password ~= fields.password_2 then
- this.data.error = fgettext("Passwords do not match")
- return true
- end
- gamedata.playername = fields.name
- gamedata.password = fields.password
- gamedata.address = this.data.address
- gamedata.port = this.data.port
- gamedata.allow_login_or_register = "register"
- gamedata.selected_world = 0
- assert(gamedata.address and gamedata.port)
- local server = this.data.server
- if server then
- serverlistmgr.add_favorite(server)
- gamedata.servername = server.name
- gamedata.serverdescription = server.description
- else
- gamedata.servername = ""
- gamedata.serverdescription = ""
- serverlistmgr.add_favorite({
- address = gamedata.address,
- port = gamedata.port,
- })
- end
- core.settings:set("name", fields.name)
- core.settings:set("address", gamedata.address)
- core.settings:set("remote_port", gamedata.port)
- core.start()
- end
- if fields["dlg_register_cancel"] then
- this:delete()
- return true
- end
- return false
- end
- --------------------------------------------------------------------------------
- function create_register_dialog(address, port, server)
- assert(address)
- assert(type(port) == "number")
- local retval = dialog_create("dlg_register",
- register_formspec,
- register_buttonhandler,
- nil)
- retval.data.address = address
- retval.data.port = port
- retval.data.server = server
- retval.data.name = core.settings:get("name") or ""
- return retval
- end
|