mirror of
https://github.com/minetest/minetest.git
synced 2024-11-05 07:13:46 +01:00
03d86ea0b4
New users find Minetest's account system confusing. This change moves username/password to a new dialog, with login and register buttons added to the Join Game tab. The old registration confirmation dialog is removed in favour of the new dialog. Fixes #8138
124 lines
3.9 KiB
Lua
124 lines
3.9 KiB
Lua
--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
|