Jump to content

Blip relacionado com o Player?


Recommended Posts

Então eu to tentando criar uma especie de /190, ou seja, quando o player usa esse comando, eu queria que aparecesse o chatbox somente pra quem ta na acl da policia, e queria tambem que fosse criado um blip atachado com o player que realizou o chamado...

function chat ()
local jogador = getPlayerName (source)
local zona = getElementZoneName (source)
	if
	outputChatBox ( "O jogador #8B0000"..jogador.." #FFFFFFesta precisando da policia em "..zona.."", getRootElement(), 255, 255, 255, true)
end
addCommandHandler ("190", chat)

Estou tentando fazer isso, mas não da nenhum resultado!

Link to comment

A programação não está completamente errada, só está faltando "recursos". Quando estamos falando de verificação de ACL você usa o isObjectInACLGroup, para fazer a verificação se o player está na ACL. (Vou deixar o link do wiki pra deixar mais explicado).

Wiki: https://wiki.multitheftauto.com/wiki/IsObjectInACLGroup

Me corrigam se eu estiver errado!

Edited by Mewjas
Link to comment
function chamarPolice (thePlayer)
	local acc = getAccountName (getPlayerAccount (thePlayer))
    if isObjectInACLGroup ("user."..acc, aclGetGroup ( "ACLName" )) then -- Quando um jogador executar o comando então: 
		outputChatBox ( "O jogador #8B0000"..getPlayerName (thePlayer).." #FFFFFFesta precisando da policia em "..getElementZoneName (thePlayer), getRootElement(), 255, 255, 255, true ) -- Ira enviar essa mensagem apenas para quem tiver na acl acima.
		createBlipAttachedTo (thePlayer, 56) -- Cria um BLIP no jogador que executou o comando.
	end
end	
addCommandHandler ("190", chamarPolice)

 

Edited by OverKILL
Link to comment

Dessa forma que mandei iria ser igual você pediu, porém já vou prevenir problemas futuros como: Nunca destruir o BLIP, jogador ficar floodando o /190 etc.

Teste o código, não testei:

local timerTempo = {}	
local timerChamar = 60000 -- 1 minuto em milesegundos. se quiser alterar procure uma calculadora online e faça a conta;
local blipPlayer = {}
function chamarPolice (thePlayer)
	if timerTempo[thePlayer] and timerTempo[thePlayer] + timerChamar > getTickCount() then
		return outputChatBox ( "Você fez um chamado a pouco tempo, espere 1 minuto", thePlayer, 255, 0, 0)
	else
		timerTempo[thePlayer] = getTickCount()
	end
	local acc = getAccountName (getPlayerAccount (thePlayer))
    if isObjectInACLGroup ("user."..acc, aclGetGroup ( "ACLNAME" )) then -- Quando um jogador executar o comando então: 
		outputChatBox ( "O jogador #8B0000"..getPlayerName (thePlayer).." #FFFFFFesta precisando da policia em "..getElementZoneName (thePlayer), thePlayer, 255, 255, 255, true ) -- Ira enviar essa mensagem apenas para quem tiver na acl acima.
		blipPlayer[thePlayer] = createBlipAttachedTo (thePlayer, 56) -- Cria um BLIP no jogador que executou o comando.
	end
end	
addCommandHandler ("190", chamarPolice)

addEventHandler( "onPlayerWasted", root,
	function()
		if blipPlayer[source] and isElement(blipPlayer[source]) then 
			destroyElement( blipPlayer[source] )
		end
	end
)

 

 

Link to comment
  • Other Languages Moderators
On 07/12/2018 at 12:39, danblemes1 said:

Então eu to tentando criar uma especie de /190, ou seja, quando o player usa esse comando, eu queria que aparecesse o chatbox somente pra quem ta na acl da policia, e queria tambem que fosse criado um blip atachado com o player que realizou o chamado...


function chat ()
local jogador = getPlayerName (source)
local zona = getElementZoneName (source)
	if
	outputChatBox ( "O jogador #8B0000"..jogador.." #FFFFFFesta precisando da policia em "..zona.."", getRootElement(), 255, 255, 255, true)
end
addCommandHandler ("190", chat)

Estou tentando fazer isso, mas não da nenhum resultado!

Primeiramente vamos ao que está errado no seu código.

  • Por se tratar de um código server-side, está faltando parâmetros na sua função, como thePlayer. Que fica ali dentro do ( ).
  • addCommandHandler é uma função que não possui source. Para obter o jogador que digitou o comando, você precisa obrigatoriamente declarar um parâmetro de função, como foi dito no item anterior. Por isso que nada dará certo a partir da segunda linha, pois source não existe.
  • Você tem uma condição vazia em aberto e não chega a fechá-la. Se você pelo menos usasse o /debugscript 3, já teria percebido erros de sintaxe.
  • No seu outputChatBox, você está declarando root como segundo argumento, isso significa que a mensagem está indo pra todo mundo, inclusive quem não é policial.
  • Também há erros de indentação no seu código.

Vou deixar o seu código do jeito que está, mas corrigido para ficar melhor de entender:

function chat (thePlayer)
	local jogador = getPlayerName (thePlayer)
	local zona = getElementZoneName (thePlayer)
	outputChatBox ( "O jogador #8B0000"..jogador.." #FFFFFFestá precisando da policia em "..zona.."", getRootElement(), 255, 255, 255, true) -- Vai mandar isso pra todo mundo.
end
addCommandHandler ("190", chat)

 

E @OverKILL, seus exemplos estão errados. No primeiro exemplo a mensagem está sendo enviada pra todo mundo, inclusive pra quem não é policial. No segundo exemplo não está sendo entregue aos policiais, só pro próprio jogador que executou o comando.

Edited by Lord Henry
  • Like 1
Link to comment
31 minutes ago, Lord Henry said:

Primeiramente vamos ao que está errado no seu código.

  • Por se tratar de um código server-side, está faltando parâmetros na sua função, como thePlayer. Que fica ali dentro do ( ).
  • addCommandHandler é uma função que não possui source. Para obter o jogador que digitou o comando, você precisa obrigatoriamente declarar um parâmetro de função, como foi dito no item anterior. Por isso que nada dará certo a partir da segunda linha, pois source não existe.
  • Você tem uma condição vazia em aberto e não chega a fechá-la. Se você pelo menos usasse o /debugscript 3, já teria percebido erros de sintaxe.
  • No seu outputChatBox, você está declarando root como segundo argumento, isso significa que a mensagem está indo pra todo mundo, inclusive quem não é policial.
  • Também há erros de indentação no seu código.

Vou deixar o seu código do jeito que está, mas corrigido para ficar melhor de entender:


function chat (thePlayer)
	local jogador = getPlayerName (thePlayer)
	local zona = getElementZoneName (thePlayer)
	outputChatBox ( "O jogador #8B0000"..jogador.." #FFFFFFestá precisando da policia em "..zona.."", getRootElement(), 255, 255, 255, true) -- Vai mandar isso pra todo mundo.
end
addCommandHandler ("190", chat)

 

E @OverKILL, seus exemplos estão errados. No primeiro exemplo a mensagem está sendo enviada pra todo mundo, inclusive pra quem não é policial. No segundo exemplo não está sendo entregue aos policiais, só pro próprio jogador que executou o comando.

Poderia em breve corrigir meu código, acho que tem que ser feito um loop né? pensei que não era necessário.

Link to comment
  • Other Languages Moderators
2 hours ago, OverKILL said:

Poderia em breve corrigir meu código, acho que tem que ser feito um loop né? pensei que não era necessário.

Sim, precisará de um loop, que passa por todos os jogadores e verifica quais deles são policiais. Se for policial, manda a mensagem pra ele.

4 minutes ago, danblemes1 said:

após a chegada no qth, o blip ser destruído?

qth? O que é isso?

Edited by Lord Henry
  • Like 1
Link to comment
  • Other Languages Moderators

Daria pra usar getDistanceBetweenPoints3D, no entanto isso exige um onClientRender para ser preciso.

Então no seu caso, é mais fácil criar um marker cilíndrico (createMarker), com um tamanho maior e totalmente transparente (invisivel), anexar ele no player com attachElements. E quando o policial colidir nesse marker, destruir esse marker e o blip do player.

--------------------------

Mas antes disso vc deve resolver o problema do outputChatBox, que deve aparecer só pros policiais.

function chat (thePlayer)
	local jogador = getPlayerName (thePlayer) -- Jogador = nome do player que executou o comando /190
	local zona = getElementZoneName (thePlayer) -- zona = cidade e bairro onde thePlayer está.
	local todoMundo = getElementsByType ("player") -- todoMundo = tabela com todos os jogadores conectados no server.
	for i, policial in ipairs (todoMundo) do -- Para cada jogador do server, faça:
		if isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (policial)), aclGetGroup ("ACLNAME")) then -- (Nome da ACL Group dos Policiais) Se o jogador está na ACL Group dos policiais, então:
			outputChatBox ("O jogador #8B0000"..jogador.." #FFFFFFestá precisando da policia em "..zona, policial, 255, 255, 255, true) -- Vai mandar isso somente pra quem for policial.
		end
	end
	outputChatBox ("Pedido de ajuda enviado aos policiais.", thePlayer, 255, 255, 0) -- Manda isso ao jogador que executou o comando /190.
end
addCommandHandler ("190", chat)

 

Edited by Lord Henry
Deixei o código comentado.
Link to comment
20 minutes ago, Lord Henry said:

Daria pra usar getDistanceBetweenPoints3D, no entanto isso exige um onClientRender para ser preciso.

Então no seu caso, é mais fácil criar um marker cilíndrico (createMarker), com um tamanho maior e totalmente transparente (invisivel), anexar ele no player com attachElements. E quando o policial colidir nesse marker, destruir esse marker e o blip do player.

--------------------------

Mas antes disso vc deve resolver o problema do outputChatBox, que deve aparecer só pros policiais.


function chat (thePlayer)
	local jogador = getPlayerName (thePlayer) -- Jogador = nome do player que executou o comando /190
	local zona = getElementZoneName (thePlayer) -- zona = cidade e bairro onde thePlayer está.
	local todoMundo = getElementsByType ("player") -- todoMundo = tabela com todos os jogadores conectados no server.
	for i, policial in ipairs (todoMundo) do -- Para cada jogador do server, faça:
		if isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (policial)), aclGetGroup ("ACLNAME")) then -- (Nome da ACL Group dos Policiais) Se o jogador está na ACL Group dos policiais, então:
			outputChatBox ("O jogador #8B0000"..jogador.." #FFFFFFestá precisando da policia em "..zona, policial, 255, 255, 255, true) -- Vai mandar isso somente pra quem for policial.
		end
	end
	outputChatBox ("Pedido de ajuda enviado aos policiais.", thePlayer, 255, 255, 0) -- Manda isso ao jogador que executou o comando /190.
end
addCommandHandler ("190", chat)

 

Verdade, esqueci do loop kk, na real pensei que não precisava

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