Supposing your saving/loading system functions are right (didnt checked them) and the rest itself is ok, this should work:
(I also did some small tweaks, like you werent checking the terms checkbox, nor filling back the edit boxes on panel creation)
--[[-------------------------------------------------
Notes:
> This code is using a relative image filepath. This will only work as long as the location it is from always exists, and the resource it is part of is running.
To ensure it does not break, it is highly encouraged to move images into your local resource and reference them there.
--]]-------------------------------------------------
function createLoginWindow()
Loginpanel = {
tab = {},
staticimage = {},
tabpanel = {},
edit = {},
button = {},
window = {},
label = {},
checkbox = {}
}
Loginpanel.window[1] = guiCreateWindow(681, 346, 542, 428, "Suomisisu", false)
guiWindowSetSizable(Loginpanel.window[1], false)
Loginpanel.tabpanel[1] = guiCreateTabPanel(9, 20, 523, 398, false, Loginpanel.window[1])
Loginpanel.tab[1] = guiCreateTab("Login", Loginpanel.tabpanel[1])
Loginpanel.staticimage[1] = guiCreateStaticImage(10, 5, 503, 90, ":lol/logo.png", false, Loginpanel.tab[1])
edtUser = guiCreateEdit(190, 155, 161, 24, "", false, Loginpanel.tab[1])
edtPass = guiCreateEdit(190, 226, 161, 24, "", false, Loginpanel.tab[1])
local uss, pass = loadLoginFromXML()
guiSetText(edtUser, uss)
guiSetText(edtPass, pass)
Loginpanel.label[1] = guiCreateLabel(191, 135, 156, 15, "Username:", false, Loginpanel.tab[1])
guiSetFont(Loginpanel.label[1], "default-bold-small")
Loginpanel.label[2] = guiCreateLabel(191, 211, 156, 15, "Password:", false, Loginpanel.tab[1])
guiSetFont(Loginpanel.label[2], "default-bold-small")
Loginpanel.checkbox[1] = guiCreateCheckBox(190, 265, 157, 15, "Remember me", true, false, Loginpanel.tab[1])
guiSetFont(Loginpanel.checkbox[1], "default-bold-small")
btnLogin = guiCreateButton(188, 336, 163, 18, "Login", false, Loginpanel.tab[1])
guiSetFont(Loginpanel.button[1], "default-bold-small")
Loginpanel.tab[2] = guiCreateTab("Register", Loginpanel.tabpanel[1])
Loginpanel.staticimage[2] = guiCreateStaticImage(10, 5, 503, 90, ":lol/logo.png", false, Loginpanel.tab[2])
edtUserR = guiCreateEdit(188, 141, 165, 24, "", false, Loginpanel.tab[2])
edtPass1 = guiCreateEdit(188, 198, 165, 24, "", false, Loginpanel.tab[2])
edtPass2 = guiCreateEdit(188, 247, 165, 24, "", false, Loginpanel.tab[2])
btnRegister = guiCreateButton(188, 339, 166, 18, "Register", false, Loginpanel.tab[2])
guiSetFont(Loginpanel.button[2], "default-bold-small")
Loginpanel.label[3] = guiCreateLabel(192, 121, 155, 15, "Username:", false, Loginpanel.tab[2])
guiSetFont(Loginpanel.label[3], "default-bold-small")
Loginpanel.label[4] = guiCreateLabel(189, 183, 164, 15, "Password:", false, Loginpanel.tab[2])
guiSetFont(Loginpanel.label[4], "default-bold-small")
Loginpanel.label[5] = guiCreateLabel(189, 232, 164, 15, "Password:", false, Loginpanel.tab[2])
guiSetFont(Loginpanel.label[5], "default-bold-small")
Loginpanel.checkbox[2] = guiCreateCheckBox(188, 286, 200, 15, "I accept suomisisu terms of use", true, false, Loginpanel.tab[2])
guiSetFont(Loginpanel.checkbox[2], "default-bold-small")
Loginpanel.tab[3] = guiCreateTab("Rules", Loginpanel.tabpanel[1])
Loginpanel.label[6] = guiCreateLabel(1, 3, 518, 366, " 1. Ei hakkerointia, tai muuta mikä häiritsee serverin toimintaa.\n 2. Chattiin spämminen on kiellettyä.\n 3. Älä kerjaa admin/mode oikeuksia\n 4. Tottele henkilökuntaa kaikissa tilanteissa\n 5. Älä sabotoi serveriä\n 6. Älä varasta toisen käyttäjätiliä / yritä onkia salasanoja\n 7. Älä mainosta muita palvelimia\n 8. Älä häiritse muita pelaajia jatkuvasti tappamalla heitä\n 9. Älä warp-tapa\n 10. Älä spawn-tapa\n 11. Henkilökuntaa ei saa häiritä jos hän on on-duty tilassa\n 12. Henkilökunnan jäsentä ei saa tappaa jos hän on on-duty tilassa..\n 13. Trainereiden käyttö on kiellettyä.\n 14. Bugien hyödyntäminen on kiellettyä, jos löydät bugin ilmoita siitä adminille.\n 15. Ilkivalta henkilökunnan & vippien autoja kohtaan on kiellettyä.\n 16. Et saa käyttää toisten pelaajien nimiä\n\n Jos et noudata yllämainittuja sääntöjä on henkilökunalla oikeus antaa sinulle porttikielto\n palvelimelle.\n\n Porttikiellon kesto riippuu sääntörikkeestä ja sen vakavuudesta.\n\n Nämä säännöt hyväksyt joka kerta kun menet palvelimelle.\n Pidämme kaikki oikeudet sääntöjenmuutoksiin.\n", false, Loginpanel.tab[3])
guiSetFont(Loginpanel.label[6], "default-bold-small")
guiLabelSetHorizontalAlign(Loginpanel.label[6], "left", true)
Loginpanel.tab[4] = guiCreateTab("Info", Loginpanel.tabpanel[1])
Loginpanel.label[7] = guiCreateLabel(3, 5, 515, 359, "Suomisisu mtapalvelin aloitettiin lainelaitoksen kaatumisen aikoina, serveri oli alunperin suuniteltu vain sanden ja vlackin hauskanpito serveriksi. Serverille alkoi kuitenkin virrata pelaajia ja päätimme aloittaa ihan operoimaan serveriä.\n\nSuomisisun ylläpitotiimiin kuuluu:\nSisuviina - Omistaja\nSuokkola - Toinen omistaja\nSinetti - Ylläpitäjä\nFinnPlaya - Ylläpitäjä\nNikkop99 - Päämoderaattori\n\nErityiskiitokset:\n[Dj]Wolf_fin - Lahjoittaja\nMonkey_Dr!fter - Lahjoittaja\nJonskuGameGod - Lahjoittaja\nCookieZ - Lahjoittaja\nMrEllux - Lahjoittaja\n\nSuomisisun omistaa BGSOF eli Best gaming servers of finland yhteisö jota Sisuviina ylläpitää.\n\nServerin nettisivut:\nbgsof.com - Pääsivu\nbgsof.com/Forkka - Foorumi\nbgsof.com/Filecenter - Tiedostopalvelu\n\n© Suomisisu & Bgsof 2012-2014", false, Loginpanel.tab[4])
guiSetFont(Loginpanel.label[7], "default-bold-small")
guiLabelSetHorizontalAlign(Loginpanel.label[7], "left", true)
addEventHandler("onClientGUIClick", btnLogin, clientSubmitLogin, false)
addEventHandler("onClientGUIClick", btnRegister, clientSubmitRegister, false)
end
function show()
-- create the log in window and its components
createLoginWindow()
-- output a brief welcome message to the player
--outputChatBox("Welcome to My MTA:SA Server, please log in.")
-- if the GUI was successfully created, then show the GUI to the player
if (Loginpanel.window[1] ~= nil) then
guiSetVisible(Loginpanel.window[1], true)
else
-- if the GUI hasnt been properly created, tell the player
outputChatBox("An unexpected error has occurred and the log in GUI has not been created.")
end
-- enable the players cursor (so they can select and click on the components)
showCursor(true)
-- set the input focus onto the GUI, allowing players (for example) to press 'T' without the chatbox opening
guiSetInputEnabled(true)
end
addEvent("openLogin",true)
addEventHandler("openLogin",root,show)
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()),
function (username, password)
-- create the log in window and its components
createLoginWindow()
-- output a brief welcome message to the player
outputChatBox("Welcome to My MTA:SA Server, please log in.")
-- if the GUI was successfully created, then show the GUI to the player
if (Loginpanel.window[1] ~= nil) then
guiSetVisible(Loginpanel.window[1], true)
else
-- if the GUI hasnt been properly created, tell the player
outputChatBox("An unexpected error has occurred and the log in GUI has not been created.")
end
-- enable the players cursor (so they can select and click on the components)
showCursor(true)
-- set the input focus onto the GUI, allowing players (for example) to press 'T' without the chatbox opening
guiSetInputEnabled(true)
end
)
function clientSubmitLogin(button,state)
if button == "left" and state == "up" then
-- get the text entered in the 'username' field
local username = guiGetText(edtUser)
-- get the text entered in the 'password' field
local password = guiGetText(edtPass)
-- if the username and password both exist
if username and password then
-- trigger the server event 'submitLogin' and pass the username and password to it
triggerServerEvent("submitLogin", getRootElement(), username, password)
if guiCheckBoxGetSelected(Loginpanel.checkbox[1]) then
saveLoginToXML(username,password)
else
resetSaveXML()
end
-- hide the gui, hide the cursor and return control to the player
guiSetInputEnabled(false)
guiSetVisible(Loginpanel.window[1], false)
showCursor(false)
else
-- otherwise, output a message to the player, do not trigger the server
-- and do not hide the gui
outputChatBox("Please enter a username and password.")
end
end
end
function clientSubmitRegister(button,state)
if button == "left" and state == "up" then
if not guiCheckBoxGetSelected(Loginpanel.checkbox[2]) then return outputChatBox("You must accept the terms!") end
if dxGetTextWidth(edtUserR, 1, "default") <= 10 then return outputChatBox("Please type in a longer username!") end
if dxGetTextWidth(edtPass1, 1, "default") <= 10 then return outputChatBox("Please type in a longer password!") end
-- get the text entered in the 'username' field
local username = guiGetText(edtUserR)
-- get the text entered in the 'password' field
local password = guiGetText(edtPass1)
local passwordC = guiGetText(edtPass2)
-- if the username and password both exist
if username and password and password == passwordC then
-- trigger the server event 'submitLogin' and pass the username and password to it
triggerServerEvent("submitRegister", getRootElement(), username, password, passwordC)
-- hide the gui, hide the cursor and return control to the player
guiSetInputEnabled(false)
guiSetVisible(Loginpanel.window[1], false)
showCursor(false)
else
-- otherwise, output a message to the player, do not trigger the server
-- and do not hide the gui
outputChatBox("Please enter a username and password, and make sure the password boxes contains same password.")
end
end
end
function loadLoginFromXML() --Загрузка логина и пароля из XML
local xml_save_log_File = xmlLoadFile ("files/xml/userdata.xml")
if not xml_save_log_File then
xml_save_log_File = xmlCreateFile("files/xml/userdata.xml", "login")
end
local usernameNode = xmlFindChild (xml_save_log_File, "username", 0)
local passwordNode = xmlFindChild (xml_save_log_File, "password", 0)
if usernameNode and passwordNode then
return xmlNodeGetValue(usernameNode), xmlNodeGetValue(passwordNode)
else
return "", ""
end
xmlUnloadFile ( xml_save_log_File )
end
function saveLoginToXML(username, password) --Сохрание логина и пароля в XML
local xml_save_log_File = xmlLoadFile ("files/xml/userdata.xml")
if not xml_save_log_File then
xml_save_log_File = xmlCreateFile("files/xml/userdata.xml", "login")
end
if (username ~= "") then
local usernameNode = xmlFindChild (xml_save_log_File, "username", 0)
if not usernameNode then
usernameNode = xmlCreateChild(xml_save_log_File, "username")
end
xmlNodeSetValue (usernameNode, tostring(username))
end
if (password ~= "") then
local passwordNode = xmlFindChild (xml_save_log_File, "password", 0)
if not passwordNode then
passwordNode = xmlCreateChild(xml_save_log_File, "password")
end
xmlNodeSetValue (passwordNode, tostring(password))
end
xmlSaveFile(xml_save_log_File)
xmlUnloadFile (xml_save_log_File)
end
addEvent("saveLoginToXML", true)
addEventHandler("saveLoginToXML", getRootElement(), saveLoginToXML)
function resetSaveXML() --Сохрание логина и пароля в XML
local xml_save_log_File = xmlLoadFile ("files/xml/userdata.xml")
if not xml_save_log_File then
xml_save_log_File = xmlCreateFile("files/xml/userdata.xml", "login")
end
if (username ~= "") then
local usernameNode = xmlFindChild (xml_save_log_File, "username", 0)
if not usernameNode then
usernameNode = xmlCreateChild(xml_save_log_File, "username")
end
end
if (password ~= "") then
local passwordNode = xmlFindChild (xml_save_log_File, "password", 0)
if not passwordNode then
passwordNode = xmlCreateChild(xml_save_log_File, "password")
end
xmlNodeSetValue (passwordNode, "")
end
xmlSaveFile(xml_save_log_File)
xmlUnloadFile (xml_save_log_File)
end
addEvent("resetSaveXML", true)
addEventHandler("resetSaveXML", getRootElement(), resetSaveXML)