Portal SAMP
[Ajuda] Mudar animação do Actor - 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] Mudar animação do Actor (/showthread.php?tid=3745)



Mudar animação do Actor - Usuário Aleatório - 03/07/2023

Gostaria de fazer um sistema em q quando algum player disparar uma arma enquanto está perto do actor,ou simplesmente quando alguém disparar no actor ou mirar nele,a animação do actor mudasse,mas n sei quais funções usar ou como fazer.


RE: Mudar animação do Actor - Dr Editor - 03/07/2023

Utilize OnPlayerWeaponShot para detectar o disparo e verifique se o jogador está próximo da posição do ator pegando sua posição e realizando a busca com a função IsPlayerInRangeOfPoint.
Depois mude a animação do Ator com ApplyActorAnimation.


RE: Mudar animação do Actor - xbruno1000x - 03/07/2023

Para detectar se um jogador está mirando em um NPC, use GetPlayerTargetDynamicActor(playerid); caso o Actor seja dynamic e GetPlayerTargetActor(playerid); se não for.


RE: Mudar animação do Actor - White_Blue - 03/07/2023

(03/07/2023 09:01)Usuário Aleatório Escreveu: Gostaria de fazer um sistema em q quando algum player disparar uma arma enquanto está perto do actor,ou simplesmente quando alguém disparar no actor ou mirar nele,a animação do actor mudasse,mas n sei quais funções usar ou como fazer.

Exemplo:
Código PHP:
// Variáveis
new actorTimerActor[MAX_PLAYERS];

// Criação do actor
public OnGameModeInit() {
       
actor CreateActor(skinidXYZR); // Troque as coordenadas X, Y, Z, R pelas coordenadas XYZ e rotação do actor.
       
return 1;
}

// Função do timer
forward AttRoubo(playerid);
public 
AttRoubo(playerid) {
      new 
target GetPlayerTargetActor(playerid);

      if(
target != actor) return 1;
    
      
// Caso o jogador esteja mirando no actor correto, executa a ação aqui. 
      
return 1;
}

// No evento quando o jogador entra no interior, inicia um timer para fazer a verificação
TimerActor[playerid] = SetTimerEx("AttRoubo"2500true"d"playerid);

// No evento quando o jogador sair do interior, para o timer
KillTimer(TimerActor[playerid]);

// Caso ao invés de mirar no actor, o jogador atire perto do ator, para isso usaremos a callback OnPlayerWeaponShot junto com uma verificação de distância usando a função IsPlayerInRangeOfPoint:
public OnPlayerWeaponShot(playeridweaponidhittypehitidFloat:fXFloat:fYFloat:fZ) {
       if(
IsPlayerInRangeOfPoint(playerid10.0rangeXrangeYrangeZ)) /* Troque os parâmetros range pelas coordenadas XYZ do actor */ {
        
// Caso o jogador que atirou esteja a 10 metros ou menos do actor, executa algo aqui
       
}
       return 
1;


Documentação dos recursos usados:
https://www.open.mp/docs/scripting/callbacks/OnPlayerWeaponShot
https://www.open.mp/docs/scripting/functions/IsPlayerInRangeOfPoint
https://www.open.mp/docs/scripting/functions/CreateActor
https://www.open.mp/docs/scripting/functions/GetPlayerTargetActor
https://www.open.mp/docs/scripting/functions/SetTimerEx