Portal SAMP
[Ajuda] Verificar se o player está atirando com uma arma ou não. - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Verificar se o player está atirando com uma arma ou não. (/showthread.php?tid=4486)



Verificar se o player está atirando com uma arma ou não. - BitSain - 31/01/2024

Alguém poderia fornecer um código já pronto pra eu usar como base? 
Assim, eu tenho minhas lógicas, mas, deu um nó em mim pois as ideias e lógicas são muitas, e também há possibilidades de não dar certo.
Precisaria de uma stock que verificasse se o jogador está atirando ou não para eu aprimorar um sistema da minha Gamemode.

De primeira eu pensei em criar uma variável bool e usar o OnPlayerWeaponShot pra setar como true a variável, e depois um timer pra deixar a variável como false. Mas não deu muito certo, não sei se foi por causa do tempo do timer...


RE: Verificar se o player está atirando com uma arma ou não. - xbruno1000x - 01/02/2024

Tenta assim:
Código:
stock bool:IsPlayerShooting(playerid)
{
    new index = GetPlayerAnimationIndex(playerid);
    return(index == 1167 || index == 363);
}

Dessa forma vai verificar pela animação do jogador.


RE: Verificar se o player está atirando com uma arma ou não. - BitSain - 01/02/2024

Criei uma simples forma de verificar se está ou não, usando essa stock que você me forneceu.
Mas diz que não está atirando.
Código:
Chat(playerid, -1, IsPlayerShooting(playerid) == true ? ("Atirando") : ("Não atirando"));

Fiz uma única alteração na stock transformando em public pois tava dando warning 208.
Sei que também há outra forma de resolver essa warning que é arrastar a stock para o topo mas preferi fazer a inversão de stock para public


RE: Verificar se o player está atirando com uma arma ou não. - xbruno1000x - 01/02/2024

Tenta dessa maneira:
Código:
stock bool:IsPlayerShooting(playerid)
{
    new index = GetPlayerAnimationIndex(playerid);
    switch(index)
    {
        case 361..366: return true;        //Anim Pistola    
        case 1365..1369: return true;    //Anim Rifles
        case 1382..1386: return true;    //Anim Lança-foguete
    }
    return false;
}

Eu adicionei todas animações de pistolas, rifles e lança-foguetes a verificação. Antes eram apenas duas animações.

Caso queira remover alguma, busque na documentação dentro dos intervalos
Link:
https://www.open.mp/docs/scripting/resources/animations


RE: Verificar se o player está atirando com uma arma ou não. - BitSain - 01/02/2024

Mesma coisa, diz que não está atirando.

Eu fiz um esquema pra ver a lib e o nome da animação mas os valores são Null (até mesmo o index)
Código PHP:
new index GetPlayerAnimationIndex(playerid), libname[32], animname[32], formated_msg[128];
GetAnimationName(indexlibnamesizeof libnameanimnamesizeof animname);
format(formated_msgsizeof formated_msg"Lib Name: %s | Anim Name: %s | Index: %d"libnameanimnameindex);
Chat(playerid, -1formated_msg); 
Provavelmente verificar se o jogador está atirando por Anim, não dá certo.


RE: Verificar se o player está atirando com uma arma ou não. - BitSain - 01/02/2024

Alguém tem outra ideia pra compartilhar? Se não aparecer mais nenhuma vou gastar um tempinho pra criar uma lógica e se der certo eu compartilho com vocês, caso contrário, tempo perdido kk.


RE: Verificar se o player está atirando com uma arma ou não. - Carlos Victor - 02/02/2024

Utilize a callback OnPlayerWeaponShot, você pode usar o tick para verificar se o jogador está atirando, aliás, pode fazer várias verificações, como a quantidade de munições, arma em mão e usando a callback OnPlayerWeaponShot poderá chegar ao que você deseja.


RE: Verificar se o player está atirando com uma arma ou não. - BitSain - 02/02/2024

(02/02/2024 00:55)Carlos Victor Escreveu: Utilize a callback OnPlayerWeaponShot, você pode usar o tick para verificar se o jogador está atirando, aliás, pode fazer várias verificações, como a quantidade de munições, arma em mão e usando a callback OnPlayerWeaponShot poderá chegar ao que você deseja.

Isso mesmo o que eu irei fazer. Já era pra eu ter melhorado a minha lógica antes mesmo de criar o tópico.


RE: Verificar se o player está atirando com uma arma ou não. - BitSain - 03/02/2024

Pra facilitar, criei uma include chamada ShotDetect.
No momento está em fase primária mas já está funcionando.
Qualquer bug, crie uma issue para correção do código.

Não está 100% finalizada mas já vou disponibilizando para vocês: https://github.com/BitSain/SAMP-ShotDetect/

Lembrando modo de uso ->
Exemplo:
Código PHP:
if(GetPlayerWeapon(playerid) != && IsPlayerShooting(playerid))
{
    
SendClientMessage(playerid, -1"Você está com uma arma em mãos e está atirando");


Em breve após término completo da include irei fazer um post aqui no portalsamp.com

OBS.: Explosivos e armas brancas entre outros são ignorados. Apenas pistolas, fuzis, metralhadoras e Snipers/Rifles são detectados.
Mas isso pode ser alterado deixando uma tal arma como valid.


RE: Verificar se o player está atirando com uma arma ou não. - Carlos Victor - 04/02/2024

Muito bom! Boa sorte.