SHARE
TWEET

ReviveActor

Rhayziin May 11th, 2015 (edited) 218 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //By Rhayziin (http://forum.sa-mp.com/showthread.php?t=573829)
  2.  
  3. //Topo do Gm
  4. enum ActorSystem
  5. {
  6.         Float:Pos[3],
  7.         TimerActor[2]
  8. }
  9. new Actor[MAX_ACTORS][ActorSystem];
  10.  
  11. public OnFilterScriptInit()
  12. {
  13.     return 1;
  14. }
  15.  
  16. public OnFilterScriptExit()
  17. {
  18.         for(new i = 0; i <= MAX_ACTORS; ++i)
  19.         {
  20.             Actor[i][Pos][0] = Actor[i][Pos][1] = Actor[i][Pos][2] = 0.0;
  21.             KillTimer(Actor[i][TimerActor][0]), KillTimer(Actor[i][TimerActor][1]);
  22.         }
  23.         return 1;
  24. }
  25.  
  26. public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float: amount, weaponid, bodypart)
  27. {
  28.     new StringActor[150], WeaponName[24]; //Criando as variáveis que amazenará o nome da arma(WeaponName) e a mensagem que será transmitida no chat(StringActor)
  29.  
  30.     GetWeaponName(weaponid, WeaponName, sizeof (WeaponName)); //Pegando o nome da arma que foi usada para causa dano ao Ator
  31.  
  32.     if(!IsActorInvulnerable(damaged_actorid)) //Verificando se o Ator é vulnerável, se sim, segue o código. Se não, o código abaixo não é executado
  33.     {
  34.         new Float:Actor_Health; //Criando a variável que armazenará a vida do Ator
  35.         GetActorHealth(damaged_actorid, Actor_Health); //Pegando a vida atual do Ator
  36.         SetActorHealth(damaged_actorid, Actor_Health-amount); //Aplicando o dano ao Ator
  37.  
  38.         format(StringActor, sizeof(StringActor), "ActorID: %d | VW: %d | Arma: %s | BodyPartID: %d | Dano: %.0f | Vida: %.0f", damaged_actorid, GetActorVirtualWorld(damaged_actorid), WeaponName, bodypart, amount, Actor_Health-amount); //Formatando a mensagem que será enviada no chat
  39.         SendClientMessage(playerid, -1, StringActor); //Enviando a mensagem no chat
  40.  
  41.         if(Actor_Health-amount <= 0.0) //Se a vida do Ator (damaged_actorid) chegar a 0 (ou menos), executa o código abaixo:
  42.         {
  43.             //Dá um intervalo de 2 segundos e teleporta o Ator para outro lugar
  44.             Actor[damaged_actorid][TimerActor][0] = SetTimerEx("TeleportActor", 2000, false, "i", damaged_actorid);
  45.         }
  46.     }
  47.     return 1;
  48. }
  49.  
  50. forward TeleportActor(ActorID);
  51. public TeleportActor(ActorID)
  52. {
  53.     GetActorPos(ActorID, Actor[ActorID][Pos][0], Actor[ActorID][Pos][1], Actor[ActorID][Pos][2]); //Pegando a posição do Ator e atribuindo-a as variaveis criadas no inicio do GM/FS
  54.     SetActorHealth(ActorID, 100.0); //Setando a vida do Ator para 100
  55.     SetActorPos(ActorID, 0.0+ActorID, 0.0+ActorID, 0.0); //Colocando o Ator em outro lugar.
  56.     Actor[ActorID][TimerActor][1] = SetTimerEx("ReviveActor", 1500, false, "i", ActorID); //Dá um intervalo de 1 segndo e meio, e chama a função que irá recolocar o Ator na posição que foi 'morto'
  57.     return 1;
  58. }
  59.  
  60. forward ReviveActor(ActorID);
  61. public ReviveActor(ActorID)
  62. {
  63.     SetActorPos(ActorID, Actor[ActorID][Pos][0], Actor[ActorID][Pos][1], Actor[ActorID][Pos][2]); //Colocando o Ator na posição que 'morreu'
  64.     return 1;
  65. }
RAW Paste Data
Top