Maaster Posted February 23, 2021 Share Posted February 23, 2021 Meu script de equipes esta bugado, quando alguem sai de uma equipe, é expulso ou ate mesmo deleta a equipe, após reconectar o jogador volta para ela, mesmo se remover depois pelo painel admin, qnd o jogador reconectar, sempre volta pra equipe. Oque eu estou tentando fazer pra arrumar isso é sempre que um jogador entrar, verificar se esta com o ElementData "gangue" (pois quando esta em uma equipe, sempre tem esse ElementData), então tentei colocar pra caso o jogador estiver com o ElementData "gangue" não acontecer nada, mas se ele não estiver, ai o jogador é removido da equipe, tentei varios jeitos e nada deu certo, ai esta meu codigo: addEventHandler("onPlayerLogin", root, function (thePlayer) outputChatBox( "#000000[#FF0000 GFB #000000]#FFFFFF Voce logou com sucesso!", source, 255, 51, 36, true ) setTimer ( function () if getElementData(source,"gangue") then outputChatBox( "ativo!", source, 255, 51, 36, true ) else if not getElementData(source,"gangue") then outputChatBox( "desativado!", source, 255, 51, 36, true ) local theTeam = getPlayerTeam ( source ) if theTeam then setPlayerTeam(source, nil) end end end end, 1000, 1) end) Coloquei os outputChatBox "desativado" e "ativo" pra ver se realmente esta ou não com o ElementData, mas se o jogador logar e estiver ou não estiver com o ElementData, sempre aparece 'desativado!' e não acontece mas nada, criei outro codigo pra verificar se o jogador realmente não estava com o ElementData "gangue" ao logar, que é este ai: function verefic (thePlayer) if getElementData(thePlayer,"gangue") then outputChatBox( "Data 'gangue esta ativo!", thePlayer, 255, 51, 36, true ) else outputChatBox( "Data 'gangue esta desativado!", thePlayer, 255, 51, 36, true ) end end addCommandHandler("verdata", verefic) E sim, mesmo com o ElementData "gangue" ativo, ao logar mostra "desativado!". Tentei ver se pelo menos estava removendo o jogador da equipe se não estive-se com o ElementData "gangue", mas não esta, o jogador sempre volta para a equipe. Tambem não esta dando nenhum ERROR ou WARNING no debug. Bom, tem algo errado no meu codigo? como posso resolver isso? Link to comment
Other Languages Moderators Lord Henry Posted February 23, 2021 Other Languages Moderators Share Posted February 23, 2021 (edited) ElementDatas são temporárias e se perdem ao desconectar do servidor. Você deve salvar na conta do jogador se quiser que os dados sejam recuperados após o jogador se conectar novamente. setAccountData getAccountData Edited February 23, 2021 by Lord Henry 1 Link to comment
Maaster Posted February 23, 2021 Author Share Posted February 23, 2021 Just now, Lord Henry said: ElementDatas são temporárias e se perdem ao desconectar do servidor. Você deve salvar na conta do jogador se quiser que os dados sejam recuperados após o jogador se conectar novamente. setAccountData getAccountData Sim, ja esta feito isso, o ElementData esta salvando Link to comment
Other Languages Moderators Lord Henry Posted February 23, 2021 Other Languages Moderators Share Posted February 23, 2021 Não estou vendo nenhuma data obtida pela conta do jogador no seu código. 1 Link to comment
Maaster Posted February 23, 2021 Author Share Posted February 23, 2021 1 minute ago, Lord Henry said: Não estou vendo nenhuma data obtida pela conta do jogador no seu código. A Data esta salvando em outro script, que é o das equipes, sei que realmente esta salvando pois se eu entrar em uma equipe, reconectar e dar /verdata (comando pra verificar se esta com o ElementData) mostra que esta ativo, se eu sair da equipe, reconectar e usar novamente, mostra que esta desativado. Just now, Maaster said: A Data esta salvando em outro script, que é o das equipes, sei que realmente esta salvando pois se eu entrar em uma equipe, reconectar e dar /verdata (comando pra verificar se esta com o ElementData) mostra que esta ativo, se eu sair da equipe, reconectar e usar novamente, mostra que esta desativado. Verefiquei com outro jogador logando e esta dando WARNING sim, sendo eles linha 5: Bad argument @'getElementData' [Expected player at argument 1, got nil] linha 8: Bad argument @'getElementData' [Expected player at argument 1, got nil] linha 10: Bad argument @'getPlayerTeam' [Expected player at argument 1, got nil] Isso seria o argument 'source', mas ele não esta certo? devo usar outro argumento? Link to comment
Other Languages Moderators Lord Henry Posted February 23, 2021 Other Languages Moderators Share Posted February 23, 2021 (edited) Vou te mostrar o porquê de não estar funcionando. addEventHandler ("onPlayerLogin", root, function (prevAcc, currAcc) -- Parâmetro estava errado, veja na wiki do onPlayerLogin. outputChatBox ("[#FF0000 GFB #000000]#FFFFFF Você logou com sucesso!", source, 0, 0, 0, true) setTimer (function () print ("ElementData 'gangue' = "..tostring(getElementData(source,"gangue"))) -- Mostra no chat o valor do elementData "gangue" do jogador. if getElementData (source, "gangue") then outputChatBox ("ativo!", source, 255, 51, 36, true) else -- Não é necessário usar "if not getElementData" pois ele só vai entrar aqui se a condição de cima não for atendida. outputChatBox ("desativado!", source, 255, 51, 36, true) local theTeam = getPlayerTeam (source) if theTeam then setPlayerTeam (source, nil) end end end, 1000, 1) end) Edited February 23, 2021 by Lord Henry 1 Link to comment
Maaster Posted February 23, 2021 Author Share Posted February 23, 2021 5 minutes ago, Lord Henry said: Vou te mostrar o porquê de não estar funcionando. addEventHandler ("onPlayerLogin", root, function (prevAcc, currAcc) -- Parâmetro estava errado, veja na wiki do onPlayerLogin. outputChatBox ("[#FF0000 GFB #000000]#FFFFFF Você logou com sucesso!", source, 0, 0, 0, true) setTimer (function () print ("ElementData 'gangue' = "..tostring(getElementData(source,"gangue"))) -- Mostra no chat o valor do elementData "gangue" do jogador. if getElementData (source, "gangue") then outputChatBox ("ativo!", source, 255, 51, 36, true) else -- Não é necessário usar "if not getElementData" pois ele só vai entrar aqui se a condição de cima não for atendida. outputChatBox ("desativado!", source, 255, 51, 36, true) local theTeam = getPlayerTeam (source) if theTeam then setPlayerTeam (source, nil) end end end, 1000, 1) end) Tentei usar aqui é ainda não deu certo, eu estou em uma equipe, dei /reconnect, loguei e apareceu desativado no chat, dei /verdata e estava ativo. Ai as mensagens no chat: [ GFB ] Você logou com sucesso! login: You successfully logged in desativado! Data 'gangue esta ativo! Tambem sai da equipe, dei reconnect, loguei e continuo na equipe, não estou sendo removido dela. Poderia me explicar melhor sobre os parametros tambem? dei uma olhada na wiki do OnPlayerLogin e não entendi muita coisa Link to comment
Other Languages Moderators Lord Henry Posted February 23, 2021 Other Languages Moderators Share Posted February 23, 2021 Cadê a parte da mensagem que deixei pra aparecer? Mande print do seu debug console. 1 Link to comment
Maaster Posted February 23, 2021 Author Share Posted February 23, 2021 1 minute ago, Lord Henry said: Cadê a parte da mensagem que deixei pra aparecer? A Da linha 5? se for, não esta aparecendo nada, reconectei mais 2 vezes aqui pra testar e n deu Link to comment
Other Languages Moderators Lord Henry Posted February 23, 2021 Other Languages Moderators Share Posted February 23, 2021 Então vc não está com o debugscript ativado. Ative-o com /debugscript 3 1 Link to comment
Maaster Posted February 23, 2021 Author Share Posted February 23, 2021 2 minutes ago, Lord Henry said: Então vc não está com o debugscript ativado. Ative-o com /debugscript 3 Vi aqui agora, tinha pensado que apareceria no chat, pedi pra um jogador reconectar, esta aparecendo a mensagem "ElementData 'gangue' = false" e os mesmos 3 WARNINGS que citei acima. Tambem pedi pro jogador que reconectou dar /verdata quando logou e apareceu "Data 'gangue' esta Ativo!". Aumentei o tempo do timer pra 2.5 segundos, pra caso ele estive-se verificando antes de o jogador ganhar o ElementData e a equipe ao entrar, mas deu a mesma coisa Link to comment
Other Languages Moderators androksi Posted February 23, 2021 Other Languages Moderators Share Posted February 23, 2021 Você não passou os parâmetros para a função setTimer. 1 Link to comment
Maaster Posted February 23, 2021 Author Share Posted February 23, 2021 19 minutes ago, andr0xy said: Você não passou os parâmetros para a função setTimer. Voce fala pra deixar assim: setTimer (function (prevAcc, currAcc) ?, se for tentei aqui e n mudou nada Link to comment
Other Languages Moderators Lord Henry Posted February 23, 2021 Other Languages Moderators Share Posted February 23, 2021 (edited) Sobre os parâmetros faltando no setTimer. Ele quis dizer que o Warning acontece pois dentro do setTimer o source deixa de existir, então vc precisa passar o source por parâmetro. Ou seja, para resolver os warnings, faça isso: addEventHandler ("onPlayerLogin", root, function (prevAcc, currAcc) -- Parâmetro estava errado, veja na wiki do onPlayerLogin. outputChatBox ("[#FF0000 GFB #000000]#FFFFFF Você logou com sucesso!", source, 0, 0, 0, true) -- Fora do setTimer, source ainda existe. setTimer (function (thePlayer) -- O valor de thePlayer foi definido lá em baixo, após a quantidade de repetições do timer. Ou seja, thePlayer = source. print ("ElementData 'gangue' = "..tostring (getElementData (thePlayer, "gangue"))) -- Mostra no chat o valor do elementData "gangue" do jogador. if getElementData (thePlayer, "gangue") then outputChatBox ("ativo!", thePlayer, 255, 51, 36, true) else -- Não é necessário usar "if not getElementData" pois ele só vai entrar aqui se a condição de cima não for atendida. outputChatBox ("desativado!", thePlayer, 255, 51, 36, true) local theTeam = getPlayerTeam (thePlayer) if theTeam then setPlayerTeam (thePlayer, nil) end end end, 1000, 1, source) -- source será o primeiro parâmetro da função. end) Edited February 23, 2021 by Lord Henry Código comentado. 1 Link to comment
Maaster Posted February 24, 2021 Author Share Posted February 24, 2021 4 hours ago, Lord Henry said: Sobre os parâmetros faltando no setTimer. Ele quis dizer que o Warning acontece pois dentro do setTimer o source deixa de existir, então vc precisa passar o source por parâmetro. Ou seja, para resolver os warnings, faça isso: addEventHandler ("onPlayerLogin", root, function (prevAcc, currAcc) -- Parâmetro estava errado, veja na wiki do onPlayerLogin. outputChatBox ("[#FF0000 GFB #000000]#FFFFFF Você logou com sucesso!", source, 0, 0, 0, true) -- Fora do setTimer, source ainda existe. setTimer (function (thePlayer) -- O valor de thePlayer foi definido lá em baixo, após a quantidade de repetições do timer. Ou seja, thePlayer = source. print ("ElementData 'gangue' = "..tostring (getElementData (thePlayer, "gangue"))) -- Mostra no chat o valor do elementData "gangue" do jogador. if getElementData (thePlayer, "gangue") then outputChatBox ("ativo!", thePlayer, 255, 51, 36, true) else -- Não é necessário usar "if not getElementData" pois ele só vai entrar aqui se a condição de cima não for atendida. outputChatBox ("desativado!", thePlayer, 255, 51, 36, true) local theTeam = getPlayerTeam (thePlayer) if theTeam then setPlayerTeam (thePlayer, nil) end end end, 1000, 1, source) -- source será o primeiro parâmetro da função. end) Agora deu certo aqui, obrigado!! ultima coisa, poderia me explicar melhor como funciona esses parâmetros? Link to comment
Other Languages Moderators Lord Henry Posted February 25, 2021 Other Languages Moderators Share Posted February 25, 2021 O source é uma variável cujo valor depende diretamente do evento ativador da função. Por exemplo: Se sua função estiver sendo ativada por onPlayerLogin, então o source será o jogador que logou. Mas se a função for ativada por um onVehicleEnter, o source será o veículo que o jogador entrou e não o jogador em si. Ao usar a função setTimer, o source que antes tinha o valor do evento ativador da função passa a ter valor nulo. Por isso que não dá pra usar source dentro do setTimer, pois o valor dele será nulo dentro do setTimer. Para resolver isso, passamos o source por parâmetro do setTimer, colocando ele depois da quantidade de repetições do setTimer. setTimer (function (parametro) -- Parametro vai receber o valor que estiver após o 1 lá em baixo, que no caso é o valor de source. -- CODE end, 1000, 1, source) -- Source será o parâmetro 1 da função que será executada pelo timer, se quiser adicionar outros parâmetros, só ir declarando após o source e assim por diante. 1 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