Arantes Posted May 27, 2020 Share Posted May 27, 2020 Gostaria de verificar se nome que o jogador escrever no painel , é igual a outro nome definido no elementData de outro jogador. No client-side esta assim : local Nick = guiGetText(NickBoxText) setElementData(localPlayer, "checknick", Nick) local check = getElementData(localPlayer, "checknick") if check then triggerServerEvent("checkNick", getLocalPlayer()) end function successNick() CloseDxPanelCreate () triggerServerEvent ("changename", getLocalPlayer()) end addEvent("successNick", true) addEventHandler("successNick", getRootElement(), successNick) E no server-side assim : function haveOtherNick (myName) for i, player in ipairs (getElementsByType("player")) do if (getElementData (player, "checknick") and getElementData (player, "checknick") == myName) then return true end end return false end function checkNick() local nome = getElementData (source, "checknick") if (nome) then if (haveOtherNick(nome)) then outputChatBox ("Já tem alguém com esse nome online.") else triggerClientEvent("successNick", getRootElement()) setElementData(source, "playername", nome) end end end addEvent("checkNick", true) addEventHandler("checkNick", getRootElement(), checkNick) O erro e que sempre retorna o outputChatBox, mesmo colocando outro nome diferente. Tive ajuda de alguns membros do forum , mas não consegui solucionar . Link to comment
_Ace Posted May 27, 2020 Share Posted May 27, 2020 (edited) 2 hours ago, Arantes said: O erro e que sempre retorna o outputChatBox, mesmo colocando outro nome diferente haveOtherNick sempre retorna true pq ele ta passando o for em todos os players, inclusive o proprio que acabou de setar o nick em si mesmo, pra comparar vc precisa excluir o player que deu trigger, antes faz essa alteração de source pra client, na wiki diz o seguinte: Atenção: vc deve usar a variavel global client no serverside ao invés de passar localPlayer ou por parametro ou source, Senão falsificação de evento (passar outro player invés de localPlayer) poderia ser possível (triggerServerEvent) ps: essa alteração source pra client é só no server, o script client fica igual tava o script server ficaria assim: function haveOtherNick (myName) for i, player in ipairs (getElementsByType("player")) do if player~=client and (getElementData (player, "checknick") and getElementData (player, "checknick") == myName) then return true--se todos os players exceto eu não tem elementdata checknick igual a myName end end return false end function checkNick() local nome = getElementData (client, "checknick") if (nome) then if (haveOtherNick(nome)) then outputChatBox ("Já tem alguém com esse nome online.") removeElementData(client,"checknick")--opcional: remover o elementdata de quem nao foi aprovado pra nao ocupar o checknick em 2+ players else triggerClientEvent("successNick", getRootElement()) setElementData(client, "playername", nome) end end end addEvent("checkNick", true) addEventHandler("checkNick", getRootElement(), checkNick) Edited May 27, 2020 by _Ace 1 Link to comment
Arantes Posted May 27, 2020 Author Share Posted May 27, 2020 Muito obrigado pela ajuda e explicação , mas não consigo entender porque ainda consigo register o mesmo nome. Link to comment
Arantes Posted May 27, 2020 Author Share Posted May 27, 2020 (edited) Estou utilizando a seguinte maneira para salvar os dados : -- Salvar o checknick quando sair. local checkNick = getElementData ( source, "checknick" ) or "Error Save Login" setAccountData ( conta, "checknick", checkNick ) -- Carregar o checknick quando o jogador entrar e quando a resource iniciar. local check = getAccountData ( conta, "checknick" ) or "Error Load Login" setElementData ( source, "checknick", check ) Edited May 27, 2020 by Arantes Link to comment
_Ace Posted May 27, 2020 Share Posted May 27, 2020 @Arantes estranho pq eu testei com 2 players, e funcionou perfeito, unica coisa diferente foi que inseri o nome por comando e nao por painel, mas seria o mesmo ja que passa como texto tbm, pra testar vc pode inserir no chat como outputChatBox os dados e ver onde ta o problema: function haveOtherNick (myName) outputChatBox("funcao haveothernick recebeu: "..myName.." de player: "..getPlayerName(client)) for i, player in ipairs (getElementsByType("player")) do outputChatBox("for leu o checknick: "..getElementData (player, "checknick").." de "..getPlayerName(player)) if player~=client and (getElementData (player, "checknick") and getElementData (player, "checknick") == myName) then return true--se todos os players exceto eu não tem elementdata checknick igual a myName end end return false end function checkNick() local nome = getElementData (client, "checknick") outputChatBox("funcao checknick: leu elementdata: "..nome.." de "..getPlayerName(client)) if (nome) then if (haveOtherNick(nome)) then outputChatBox ("Já tem alguém com esse nome online.") removeElementData(client,"checknick")--opcional: remover o elementdata de quem nao foi aprovado pra nao ocupar o checknick em 2+ players else triggerClientEvent("successNick", getRootElement()) setElementData(client, "playername", nome) end end end addEvent("checkNick", true) addEventHandler("checkNick", getRootElement(), checkNick) e nessas funções de account data deu algum erro ou warning? e no caso esse sistema de nick que vc ta fazendo seria um nome secundario? pq vc poderia usar direto o getPlayerName pra checar nick/nome Link to comment
Arantes Posted May 28, 2020 Author Share Posted May 28, 2020 Os dados retornaram certinho pelo outputChatBox : funcao checknick: leu elementdata: Arantes de Sem_Registro funcao haveothernick recebeu: Arantes de player: Sem_Registro for leu o checknick: Arantes de Sem_Registro Mas por motivo desconhecido , consigo registar o mesmo Nick/Nome em outras contas. Esse sistema de nick é para deixar o nick do jogador fixo quando o mesmo definir no painel , sendo assim quando o jogador entrar , verificar se o nick dele e igual o do elementData playername , se nao for ele seta oque esta no playername e se nao encontrar deixa como Sem_Registro. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now