Jump to content

Remover jogadores da equipe ao logar


Recommended Posts

Posted

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?

  • Moderators
Posted (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.

Edited by Lord Henry

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
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.

Sim, ja esta feito isso, o ElementData esta salvando

  • Moderators
Posted

Não estou vendo nenhuma data obtida pela conta do jogador no seu código.

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
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?

  • Moderators
Posted (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 by Lord Henry

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
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

  • Moderators
Posted

Cadê a parte da mensagem que deixei pra aparecer?

Mande print do seu debug console.

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
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

  • Moderators
Posted

Então vc não está com o debugscript ativado. Ative-o com /debugscript 3

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
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

  • Moderators
Posted (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 by Lord Henry
Código comentado.

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
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?

  • Moderators
Posted

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.

 

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

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...