#DeltaSCR Posted December 7, 2018 Share Posted December 7, 2018 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
miiguelz Posted December 8, 2018 Share Posted December 8, 2018 (edited) 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 December 8, 2018 by Mewjas Link to comment
Jonas^ Posted December 8, 2018 Share Posted December 8, 2018 (edited) 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 December 8, 2018 by OverKILL Link to comment
Jonas^ Posted December 8, 2018 Share Posted December 8, 2018 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 Lord Henry Posted December 8, 2018 Other Languages Moderators Share Posted December 8, 2018 (edited) 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 December 8, 2018 by Lord Henry 1 Link to comment
Jonas^ Posted December 8, 2018 Share Posted December 8, 2018 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
#DeltaSCR Posted December 8, 2018 Author Share Posted December 8, 2018 (edited) Então de todas as respostas, qual seria a correta no caso de: um player der o comando /190, e aparecer o texto somente para a polícia, criar um blip; após a chegada no qth, o blip ser destruído? Edited December 8, 2018 by danblemes1 Link to comment
Other Languages Moderators Lord Henry Posted December 8, 2018 Other Languages Moderators Share Posted December 8, 2018 (edited) 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 December 8, 2018 by Lord Henry 1 Link to comment
#DeltaSCR Posted December 8, 2018 Author Share Posted December 8, 2018 5 minutes ago, Lord Henry said: 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. qth? O que é isso? Local Link to comment
Other Languages Moderators Lord Henry Posted December 8, 2018 Other Languages Moderators Share Posted December 8, 2018 (edited) Destruir o blip quando um policial chegar perto do player que usou /190, é isso? Edited December 8, 2018 by Lord Henry Link to comment
#DeltaSCR Posted December 8, 2018 Author Share Posted December 8, 2018 2 minutes ago, Lord Henry said: Destruir o blip quando um policial chegar perto do player que usou /190, é isso? Positivo Link to comment
Other Languages Moderators Lord Henry Posted December 8, 2018 Other Languages Moderators Share Posted December 8, 2018 (edited) 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 December 8, 2018 by Lord Henry Deixei o código comentado. Link to comment
Jonas^ Posted December 9, 2018 Share Posted December 9, 2018 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
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