Jump to content

[Question]Saving/Loading data to xml file


kieran

Recommended Posts

I have been messing with  a login panel I found on the community, made my own GUI since the one it had didn't center.

The problem is, the text from the edit box's won't save to xml file, here is what I have.

Client

Spoiler

	Login_window = {}


EnableMTAControlsOnLogin = false

    function LoginPanel()
		if not(isElement(Login_window)) then
		toggleAllControls(EnableMTAControlsOnLogin)
		local screenW, screenH = guiGetScreenSize()
        Login_window = guiCreateWindow((screenW - 462) / 2, (screenH - 225) / 2, 462, 225, "Login", false) 
        guiSetAlpha(Login_window,1)
        guiWindowSetMovable(Login_window,false)
        guiWindowSetSizable(Login_window, false)
        guiSetProperty(Login_window, "CaptionColour", "FF201BE3") 

        edit_user = guiCreateEdit(103, 62, 257, 25, "", false, Login_window)
        edit_pass = guiCreateEdit(103, 109, 257, 25, "", false, Login_window)
		checkbox_save = guiCreateCheckBox(360, 110, 91, 17, "Save", false, false, Login_window)
		
		
        button_login = guiCreateButton(103, 156, 116, 51, "Login", false, Login_window)
        button_reg = guiCreateButton(244, 156, 116, 51, "Register", false, Login_window)

        staticimage_user = guiCreateStaticImage(229, 0, 32, 26, "images/guy.png", false, edit_user) 
        staticimage_pass = guiCreateStaticImage(227, 0, 34, 25, "images/lock.png", false, edit_pass) 

        label_top = guiCreateLabel(168, 26, 127, 16, "Please log in below.", false, Login_window) 
        guiSetFont(label_top, "clear-normal") 
        guiLabelSetColor(label_top, 255, 0, 0) 
        label_log = guiCreateLabel(200, 45, 55, 15, "Username", false, Login_window) 
        guiLabelSetColor(label_log, 0, 255, 0) 
        label_reg = guiCreateLabel(201, 90, 55, 15, "Password", false, Login_window) 
        guiLabelSetColor(label_reg, 0, 255, 0)   
		

        guiSetAlpha(Login_window,0.8)
        guiWindowSetMovable(Login_window,true)
        guiWindowSetSizable(Login_window, false)
        guiSetProperty(Login_window, "CaptionColour", "FF201BE3")

		guiEditSetMaxLength ( edit_user,25)
		guiEditSetMaxLength ( edit_pass,25)
		guiEditSetMasked ( edit_pass, true )	
		guiSetVisible(Login_window,true)
		showCursor(true)	
		setPlayerHudComponentVisible ( "all", false)
		
	local username, password = loadLoginFromXML()
	
	if not( username == "" or password == "") then
		guiCheckBoxSetSelected ( checkbox_save, true )
		guiSetText ( edit_user, tostring(username))
		guiSetText ( edit_pass, tostring(password))
	else
		guiCheckBoxSetSelected ( checkbox_save, false )
		guiSetText ( edit_user, tostring(username))
		guiSetText ( edit_pass, tostring(password))
	end
		
	addEventHandler("onClientGUIClick",button_login,onClickLogin)
	addEventHandler("onClientGUIClick",button_reg,onClickReg)
	    end
	end



function start_cl_resource() 
	LoginPanel()
end
addEventHandler("onClientResourceStart",getResourceRootElement(getThisResource()),start_cl_resource)


--XML Loading and Saving

function loadLoginFromXML() 
	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) 
    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() 
		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)


function onClickLogin(button,state) 
	if(button == "left" and state == "up") then
		if (source == button_login) then
			username = guiGetText(edit_user)
			password = guiGetText(edit_pass)

				if guiCheckBoxGetSelected ( checkbox_save ) == true then
					checksave = true
				else
					checksave = false
				end
		triggerServerEvent("onRequestLogin",getLocalPlayer(),username,password)
		end
	end
end

function onClickReg(button,state) 
	if(button == "left" and state == "up") then
		if (source == button_reg) then
			username = guiGetText(edit_user)
			password = guiGetText(edit_pass)
			triggerServerEvent("onRequestRegister",getLocalPlayer(),username,password)
		end
	end
end


function hideLoginWindow() 
	guiSetInputEnabled(false)
	guiSetVisible(Login_window, false)
	destroyElement(Login_window)
	Login_window = nil
	showCursor(false)
	setPlayerHudComponentVisible ( "all", true)
	toggleAllControls(true)
end
addEvent("hideLoginWindow", true)
addEventHandler("hideLoginWindow", getRootElement(), hideLoginWindow)

 

Server

Spoiler

function PlayerLogin(username,password,checksave)
	if not (username == "") then
		if not (password == "") then
			local account = getAccount ( username, password )
			if ( account ~= false ) then
				logIn(source, account, password)

				triggerClientEvent (source,"hideLoginWindow",getRootElement())
					if checksave == true then
						triggerClientEvent(source,"saveLoginToXML",getRootElement(),username,password)
					else
						triggerClientEvent(source,"resetSaveXML",getRootElement(),username,password)
					end
			end
		end
	end
end
addEvent("onRequestLogin",true)
addEventHandler("onRequestLogin",getRootElement(),PlayerLogin)


function registerPlayer(username,password,checksave)
	if not (username == "") then
		if not (password == "") then
			local account = getAccount (username,password)
			if (account == false) then
				local accountAdded = addAccount(tostring(username),tostring(password))
				if (accountAdded) then
				outputChatBox ("#FF0000* #00FF00You have sucessfuly registered! [Username: #FFFFFF" .. username .. " #00FF00| Password: #FFFFFF" .. password .. "#00FF00 ]",source,255,255,255,true )
				triggerClientEvent (source,"hideLoginWindow",getRootElement())
				end
			end
		end
	end
end
addEvent("onRequestRegister",true)
addEventHandler("onRequestRegister",getRootElement(),registerPlayer)

--Hide login if player logs in with bind
function hide_panel()
	triggerClientEvent (source,"hideLoginWindow",getRootElement())
end
addEventHandler("onPlayerLogin", getRootElement(), hide_panel)

 

Thanks for help, looked over code and it all looks like the working resource.

Link to comment
25 minutes ago, Randomly said:

Did the resource work with the original GUI?

Yeah, here is the original.

Server(Original)

Spoiler

function PlayerLogin(username,password,checksave)
	if not (username == "") then
		if not (password == "") then
			local account = getAccount ( username, password )
			if ( account ~= false ) then
				logIn(source, account, password)

				triggerClientEvent (source,"hideLoginWindow",getRootElement())
				
					if checksave == true then
						triggerClientEvent(source,"saveLoginToXML",getRootElement(),username,password)
					else
						triggerClientEvent(source,"resetSaveXML",getRootElement(),username,password)
					end
				
			else
				triggerClientEvent(source,"set_warning_text",getRootElement(),"Login","Wrong username and/or password!")
			end
		else
			triggerClientEvent(source,"set_warning_text",getRootElement(),"Login","Please enter your password!")
		end
	else
		triggerClientEvent(source,"set_warning_text",getRootElement(),"Login","Please enter your username!")
	end
end
addEvent("onRequestLogin",true)
addEventHandler("onRequestLogin",getRootElement(),PlayerLogin)



function registerPlayer(username,password,passwordConfirm)
	if not (username == "") then
		if not (password == "") then
			if not (passwordConfirm == "") then
				if password == passwordConfirm then
					local account = getAccount (username,password)
					if (account == false) then
						local accountAdded = addAccount(tostring(username),tostring(password))
						if (accountAdded) then
							outputChatBox ("#FF0000* #00FF00You have sucessfuly registered! [Username: #FFFFFF" .. username .. " #00FF00| Password: #FFFFFF" .. password .. "#00FF00 ]",source,255,255,255,true )
						else
							triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","Error ocurred. Choose a different username/password.")
						end
					else
						triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","An account with this username already exists")
					end
				else
					triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","Passwords do not match")
				end
			else
				triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","Please confirm your password")
			end
		else
			triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","Please enter a password")
		end
	else
		triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","Please enter a username you would like to register")
	end
end
addEvent("onRequestRegister",true)
addEventHandler("onRequestRegister",getRootElement(),registerPlayer)

 

Client(Original)

Spoiler

wdwLogin_Pannel = {}
tabPannel_Main = {}
tab_Login = {}
tab_Register = {}

--Settings
blackLoginScreen = false --True/false Black screen, while player login...
blackScreenTime = 0  --Time to complete disappearance of the black screen in seconds.

GuestEnable = false --Can a Player play as Guest, or no. [true/false]
EnableMTAControlsOnLogin = false --Set false to not open the chat when you press "t" on fields, for example. [true/false]


function open_log_reg_pannel()
if not(isElement(wdwLogin_Pannel)) then
	
	if blackLoginScreen == true then
		fadeCamera(false,0,0,0,0)
	end
	
	toggleAllControls(EnableMTAControlsOnLogin)


        wdwLogin_Pannel = guiCreateWindow(434,276,488,213,"Xperia^ Login",false)
        guiSetAlpha(wdwLogin_Pannel,1)
        guiWindowSetMovable(wdwLogin_Pannel,true)
        guiWindowSetSizable(wdwLogin_Pannel,false)
	
	tabPannel_Main = guiCreateTabPanel(9,25,470,179,false,wdwLogin_Pannel)
	
	tab_Login = guiCreateTab("Login                                                ",tabPannel_Main)
	
	lbl_Login = guiCreateLabel(66,24,175,26,"Login:",false,tab_Login)
    guiSetFont(lbl_Login,"default-bold-small")
	
	edit_Login = guiCreateEdit(133,18,301,27,"",false,tab_Login)
	edit_password = guiCreateEdit(133,56,301,27,"",false,tab_Login)
	guiEditSetMaxLength ( edit_Login,25)
	guiEditSetMaxLength ( edit_password,25)
	guiEditSetMasked ( edit_password, true )

	
	lbl_Password = guiCreateLabel(66,62,175,26,"Register:",false,tab_Login)
        guiSetFont(lbl_Password,"default-bold-small")
	
	
	checkbox_save = guiCreateCheckBox(23,106,91,17,"Save",false,false,tab_Login)
	
	btn_Login = guiCreateButton(132,95,304,41,"Login",false,tab_Login)
    guiSetFont(btn_Login,"default-bold-small")
	
	login_tab_error_msg = guiCreateLabel(0,112,350,25,"Error_login_tab",false,tab_Login)
	guiLabelSetColor(login_tab_error_msg,255,0,0)
	guiLabelSetVerticalAlign(login_tab_error_msg,"center")
	guiLabelSetHorizontalAlign(login_tab_error_msg,"center",false)
	guiSetFont(login_tab_error_msg,"default-bold-small")
	
	--Guest func
	if GuestEnable == true then
		btnGuest = guiCreateButton(29,168,94,32,"Play as Guest",false,tab_Login)
		guiSetFont(btnGuest,"default-small")
		guiSetVisible(btnGuest,true)
	else
		if isElement(btnGuest) then guiSetVisible(btnGuest,false) end
		btnGuest = nil
	end
	
	
	tab_Register = guiCreateTab("Register                                          ",tabPannel_Main)
	
	lbl_account_name = guiCreateLabel(37,18,216,31,"Account name:",false,tab_Register)
    guiSetFont(lbl_account_name,"default-bold-small")
	
	edit_account_name = guiCreateEdit(158,10,293,29,"",false,tab_Register)
	
	lbl__reg_tab_password = guiCreateLabel(37,58,216,31,"Password:",false,tab_Register)
    guiSetFont(lbl__reg_tab_password,"default-bold-small")
	
	edit__reg_tab_password = guiCreateEdit(158,49,293,29,"",false,tab_Register)
	
	edit__reg_tab_Repassword = guiCreateEdit(158,87,293,29,"",false,tab_Register)
	guiEditSetMaxLength ( edit__reg_tab_Repassword,25)
	
	lvl_reg_tab_Repassword = guiCreateLabel(37,94,216,31,"Repeat password:",false,tab_Register)
    guiSetFont(lvl_reg_tab_Repassword,"default-bold-small")
	
	btn_reg_tab_register = guiCreateButton(35,120,418,27,"Register",false,tab_Register)
	guiSetFont(btn_reg_tab_register,"default-bold-small")
	
	reg_tab_error_msg = guiCreateLabel(0,170,350,31,"Error_reg_ttab",false,tab_Register)
	guiLabelSetColor(reg_tab_error_msg,255,20,0)
	guiLabelSetVerticalAlign(reg_tab_error_msg,"center")
	guiLabelSetHorizontalAlign(reg_tab_error_msg,"center",false)
	guiSetFont(reg_tab_error_msg,"default-bold-small")
	
	guiEditSetMasked(edit__reg_tab_password, true)
	guiEditSetMasked(edit__reg_tab_Repassword, true)
	
	guiSetVisible(wdwLogin_Pannel,true)
	--guiSetInputEnabled(true)
	showCursor(true)
	
	--Изменение надписей:
	guiSetText(reg_tab_error_msg, "") --Поле ошибки в Reg табе
	guiSetText(login_tab_error_msg, "") --Поле ошибки в Login табе
	
	
	local username, password = loadLoginFromXML()
	
	if not( username == "" or password == "") then
		guiCheckBoxSetSelected ( checkbox_save, true )
		guiSetText ( edit_Login, tostring(username))
		guiSetText ( edit_password, tostring(password))
	else
		guiCheckBoxSetSelected ( checkbox_save, false )
		guiSetText ( edit_Login, tostring(username))
		guiSetText ( edit_password, tostring(password))
	end

	--Эвенты
	addEventHandler("onClientGUIClick",btn_Login,onClickBtnLogin)
	addEventHandler("onClientGUIClick",btn_reg_tab_register,onClickBtnRegister)
	if GuestEnable == true then addEventHandler("onClientGUIClick",btnGuest,onClickGuest) end
	
	
--else
	--destroyElement(wdwLogin_Pannel)
	--guiSetInputEnabled(false)
	--wdwLogin_Pannel = nil
	--showCursor(false)
end
end




function start_cl_resource() --При старте
	open_log_reg_pannel()
end
addEventHandler("onClientResourceStart",getResourceRootElement(getThisResource()),start_cl_resource)


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)








function onClickBtnLogin(button,state) --При нажатии на кнопку Login
	if(button == "left" and state == "up") then
		if (source == btn_Login) then
			username = guiGetText(edit_Login)
			password = guiGetText(edit_password)
				if guiCheckBoxGetSelected ( checkbox_save ) == true then
					checksave = true
				else
					checksave = false
				end
			triggerServerEvent("onRequestLogin",getLocalPlayer(),username,password,checksave)
		end
	end
end



function onClickBtnRegister(button,state) --При нажатии на кнопку Register and Cofirm
	if(button == "left" and state == "up") then
		if (source == btn_reg_tab_register) then
			username = guiGetText(edit_account_name)
			password = guiGetText(edit__reg_tab_password)
			passwordConfirm = guiGetText(edit__reg_tab_Repassword)
			triggerServerEvent("onRequestRegister",getLocalPlayer(),username,password,passwordConfirm)
		end
	end
end



function Error_msg(Tab, Text)
	if Tab == "Login" then 
		guiSetText(login_tab_error_msg, tostring(Text))
		setTimer(function() guiSetText(login_tab_error_msg, "") end,6000,1)
	elseif Tab == "Register" then
		guiSetText(reg_tab_error_msg, tostring(Text))
		setTimer(function() guiSetText(reg_tab_error_msg, "") end,6000,1)
	end
end
addEvent("set_warning_text",true)
addEventHandler("set_warning_text",getRootElement(),Error_msg)


function onClickGuest(button,state)
	if(button == "left" and state == "up") then
		if (source == btnGuest) then
			guiSetVisible(wdwLogin_Pannel, false)
			guiSetInputEnabled(false)
			showCursor(false)
			if blackLoginScreen == true then
				fadeCamera(true,blackScreenTime)
			end
		end
	end
end


function hideLoginWindow() --Функция закрытия логин панели
	guiSetInputEnabled(false)
	guiSetVisible(wdwLogin_Pannel, false)
	destroyElement(wdwLogin_Pannel)
	wdwLogin_Pannel = nil
	showCursor(false)
	
	removeEventHandler("onClientGUIClick",btn_Login,onClickBtnLogin)
	if GuestEnable == true then removeEventHandler("onClientGUIClick",btnGuest,onClickGuest) end

	if blackLoginScreen == true then
		fadeCamera(true,blackScreenTime)
	end
	
	toggleAllControls(true)
end
addEvent("hideLoginWindow", true)
addEventHandler("hideLoginWindow", getRootElement(), hideLoginWindow)

 

You can see that a tab panel is used originally, which is not that nice on a login panel...  And also there are error messages if you put wrong name/password in which I removed.

Edited by kieran
Link to comment
11 minutes ago, Randomly said:

So I found a problem. When you trigger the onRequestLogin, you send the localPlayer, the username and the password but the server side needs the username, the password and the checkbox state. Basically it handles username as the player element, password as the username and checkbox state as the password.

My hero xD thanks, can't believe I missed that.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...