Advertisement
Guest User

[FS] Actors Test

a guest
May 7th, 2015
753
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.64 KB | None | 0 0
  1. /*******************************************************************************
  2.                         # Changelog
  3.     v0.1 - 07/05/2015:
  4.         - Script Criado.
  5.         - Comandos para criar, destruir e alterar actors.
  6.         - Lista de comandos para saber de todos os comandos disponíveis.
  7.         - Possível executar/parar animação em um ou todos actors.
  8.  
  9.  
  10. *******************************************************************************/
  11. #include <a_samp>
  12. #include <zcmd>
  13. #include <sscanf2>
  14.  
  15. #define DIALOG_ACTORCMDS 32002
  16. #define DIALOG_VERACTORS 32003
  17. enum cmd_infos
  18. {
  19.     Comando[128],
  20.     Descricao[128]
  21. };
  22. new cmds_Actor[][cmd_infos] = {
  23.     {"/criaractor [skin id]", "Cria um actor com a skin desejada"},
  24.     {"/destruiractor [actor id]", "Destroi um actor"},
  25.     {"/destruirtodosactors", "Destrói todos os actors do servidor"},
  26.     {"/animaractor [actor id] [animlib] [animname] [loop]", "Anima um actor"},
  27.     {"/pararanimactor [actor id]", "Para a animação de um actor"},
  28.     {"/animtodosactors [animlib] [animname] [loop]", "Anima todos os actors do servidor"},
  29.     {"/pararanimtodosactors", "Para a animação de todos os actors"},
  30.     {"/actorpos [actor id] [x] [y] [z] [rotação]", "Seta a posição de um actor"},
  31.     {"/actormundo [actor id] [mundo virtual]", "Seta o mundo virtual de um actor"},
  32.     {"/actorvuneravel [actor id]", "Deixa um actor vuneravel/invuneravel"},
  33.     {"/actorvida [actor id] [vida]", "Seta a vida de um actor"},
  34.     {"/veractors", "Visualiza os actors criados"}
  35. };
  36.  
  37. public OnFilterScriptInit()
  38. {
  39.     print("*****************************************");
  40.     print("**** Actor debug - básico [CARREGADO]****");
  41.     print("*****************************************");
  42.     return 1;
  43. }
  44.  
  45. public OnFilterScriptExit()
  46. {
  47.     print("*****************************************");
  48.     print("**** Actor debug - básico [DESLIGADO]****");
  49.     print("*****************************************");
  50.     return 1;
  51. }
  52.  
  53.  
  54. CMD:criaractor(playerid, params[]) {
  55.     new skin_actor;
  56.     if(sscanf(params, "i", skin_actor)) return SendClientMessage(playerid, -1, "{FF0000}Use: /criaractor [skin id]");
  57.     if(skin_actor < 0 || skin_actor > 311) return SendClientMessage(playerid, -1, "{FF0000}O id é inválido!");
  58.     new Float:pP[4], Msg[144], Actorid;
  59.     GetPlayerPos(playerid, pP[0], pP[1], pP[2]);
  60.     GetPlayerFacingAngle(playerid, pP[3]);
  61.     Actorid = CreateActor(skin_actor, pP[0], pP[1], pP[2], pP[3]);
  62.     format(Msg, 144, "{FFFF00}Actor id: %i", Actorid);
  63.     SendClientMessage(playerid, -1, Msg);
  64.     return 1;
  65. }
  66. CMD:destruiractor(playerid, params[]) {
  67.     new actorid;
  68.     if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use: /destruiractor [actor id]");
  69.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  70.     new Msg[144];
  71.     DestroyActor(actorid);
  72.     format(Msg, 144, "{FFFF00}Actor id %i foi destruido.", actorid);
  73.     SendClientMessage(playerid, -1, Msg);
  74.     return 1;
  75. }
  76. CMD:destruirtodosactors(playerid, params[]) {
  77.     new Msg[144], actors;
  78.     for(new i; i <= GetActorPoolSize(); i++) {
  79.         if(!IsValidActor(i)) continue;
  80.         DestroyActor(i);
  81.         actors++;
  82.     }
  83.     if(actors==0) return SendClientMessage(playerid, -1, "{FF0000}Não há actors!");
  84.     format(Msg, 144, "{FFFF00}Foram destruidos %i actors.", actors);
  85.     SendClientMessage(playerid, -1, Msg);
  86.     return 1;
  87. }
  88. CMD:animaractor(playerid, params[]) {
  89.     new actorid, animlib[32], animname[32], loop;
  90.     if(sscanf(params, "is[32]s[32]i", actorid, animlib, animname, loop)) return SendClientMessage(playerid, -1, "{FF0000}Use: /animaractor [actor id] [animlib] [animname] [loop (0-1)");
  91.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  92.     new Msg[144];
  93.     ClearActorAnimations(actorid);
  94.     ApplyActorAnimation(actorid, animlib, animname, 4.1, loop, 1, 1, 0, 0);
  95.     format(Msg, 144, "{00FF00}Actor id %i executando animação da lib %s animação %s (%s)", actorid, animlib, animname, (loop == 0 ? ("sem loop") : ("com loop")));
  96.     SendClientMessage(playerid, -1, Msg);
  97.     return 1;
  98. }
  99. CMD:pararanimactor(playerid, params[]) {
  100.     new actorid;
  101.     if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use: /pararanimactor [actor id]");
  102.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  103.     new Msg[144];
  104.     ClearActorAnimations(actorid);
  105.     format(Msg, 144, "{a9c4e4}Animação do actor %i foi parada!", actorid);
  106.     SendClientMessage(playerid, -1, Msg);
  107.     return 1;
  108. }
  109. CMD:animtodosactors(playerid, params[]) {
  110.     new animlib[32], animname[32], loop;
  111.     if(sscanf(params, "s[32]s[32]i", animlib,animname,loop)) return SendClientMessage(playerid, -1, "{FF0000}Use: /animtodosactos [animlib] [animname] [loop (0-1)]");
  112.     new Msg[144];
  113.     for(new i; i <= GetActorPoolSize(); i++) {
  114.         if(!IsValidActor(i)) continue;
  115.         ClearActorAnimations(i);
  116.         ApplyActorAnimation(i, animlib, animname, 4.1, loop, 1, 1, 0, 0);
  117.     }
  118.     format(Msg, 144, "{00FF00}Todos os actors estão executando a animação da lib %s animação %s (%s)", animlib, animname, (loop == 0 ? ("sem loop") : ("com loop")));
  119.     SendClientMessage(playerid, -1, Msg);
  120.     return 1;
  121. }
  122. CMD:pararanimtodosactors(playerid, params[]) {
  123.     for(new i; i <= GetActorPoolSize(); i++) {
  124.         if(!IsValidActor(i)) continue;
  125.         ClearActorAnimations(i);
  126.     }
  127.     SendClientMessage(playerid, -1, "{FFFF00}A animação de todos os actors existentes foram paradas.");
  128.     return 1;
  129. }
  130. CMD:actorpos(playerid, params[]) {
  131.     new actorid, Float:apos[4];
  132.     if(sscanf(params, "iffff", actorid, apos[0], apos[1], apos[2], apos[3])) return SendClientMessage(playerid, -1, "{FF0000}Use: /actorpos [actorid] [x] [y] [z] [rotação]");
  133.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  134.     new Msg[144];
  135.     SetActorPos(actorid, apos[0], apos[1], apos[2]);
  136.     SetActorFacingAngle(actorid, apos[3]);
  137.     format(Msg, 144, "{a9c4e4}Actor %i em x=%4.2f - y=%4.2f - z=%4.2f - rotação=%4.2f", actorid, apos[0], apos[1], apos[2], apos[3]);
  138.     SendClientMessage(playerid, -1, Msg);
  139.     return 1;
  140. }
  141. CMD:actormundo(playerid, params[]) {
  142.     new actorid, amundo;
  143.     if(sscanf(params, "ii", actorid, amundo)) return SendClientMessage(playerid, -1, "{FF0000}Use: /actormundo [actorid] [mundo]");
  144.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  145.     new Msg[144];
  146.     SetActorVirtualWorld(actorid, amundo);
  147.     format(Msg, 144, "{a9c4e4}Actor %i em mundo %i.", actorid, amundo);
  148.     SendClientMessage(playerid, -1, Msg);
  149.     return 1;
  150. }
  151. CMD:actorvuneravel(playerid, params[]) {
  152.     new actorid;
  153.     if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use:/actorvuneravel [actorid]");
  154.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  155.     new Msg[144];
  156.     if(IsActorInvulnerable(actorid)) {
  157.         SetActorInvulnerable(actorid, false);
  158.         format(Msg, 144, "{FFFF00}Actor %i agora é vunerável.", actorid);
  159.     }
  160.     else {
  161.         SetActorInvulnerable(actorid, true);
  162.         format(Msg, 144, "{FFFF00}Actor %i agora é invunerável.", actorid);
  163.     }
  164.     SendClientMessage(playerid, -1, Msg);
  165.     return 1;
  166. }
  167. CMD:actorvida(playerid, params[]) {
  168.     new actorid, Float:avida;
  169.     if(sscanf(params, "if", actorid, avida)) return SendClientMessage(playerid, -1, "{FF0000}Use: /actorvida [actorid] [vida]");
  170.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  171.     new Msg[144];
  172.     SetActorHealth(actorid, avida);
  173.     format(Msg, 144, "{a9c4e4}Vida do actor %i foi setada para: %4.2f", actorid, avida);
  174.     SendClientMessage(playerid, -1, Msg);
  175.     return 1;
  176. }
  177.  
  178. CMD:veractors(playerid, params[]) {
  179.     new di[1000], actors;
  180.     strcat(di, "Actor id\tCoordenadas de Posição\tMundo Virtual\tVida\n");
  181.     for(new i; i <= GetActorPoolSize(); i++) {
  182.         if(!IsValidActor(i)) continue;
  183.         new Float:pA[3], Float:aVida;
  184.         GetActorPos(i, pA[0], pA[1], pA[2]);
  185.         GetActorHealth(i, aVida);
  186.         format(di, sizeof(di), "%s%i\tx=%4.2f y=%4.2f z=%4.2f\t%i\t%4.2f\n", di, i,pA[0],pA[1],pA[2],GetActorVirtualWorld(i),aVida);
  187.         actors++;
  188.     }
  189.     if(actors==0) return SendClientMessage(playerid, -1, "{FF0000}Não há actors!");
  190.     ShowPlayerDialog(playerid, DIALOG_VERACTORS, DIALOG_STYLE_TABLIST_HEADERS, "{FF0000}# {FFFFFF}Visualizando actors", di, "Ok", "Cancelar");
  191.     return 1;
  192. }
  193. CMD:comandosactor(playerid) {
  194.     new di_actor[1000];
  195.     strcat(di_actor, "Comando\tDescrição\n");
  196.     for(new i; i < sizeof(cmds_Actor); i++) {
  197.         strcat(di_actor, cmds_Actor[i][Comando]);
  198.         strcat(di_actor, "\t");
  199.         strcat(di_actor, cmds_Actor[i][Descricao]);
  200.         strcat(di_actor, "\n");
  201.     }
  202.     ShowPlayerDialog(playerid, DIALOG_ACTORCMDS, DIALOG_STYLE_TABLIST_HEADERS, "{FF0000}# {FFFFFF}Comando de actors", di_actor, "Ok", "");
  203.     return 1;
  204. }
  205.  
  206. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  207.     switch (dialogid) {
  208.         case DIALOG_ACTORCMDS: {
  209.             if(!response) return 0;
  210.             new Msg[144];
  211.             format(Msg, 144, "{FFFF00}%s - %s", cmds_Actor[listitem][Comando], cmds_Actor[listitem][Descricao]);
  212.             SendClientMessage(playerid, -1, Msg);
  213.             return 0;
  214.         }
  215.         case DIALOG_VERACTORS: {
  216.             if(!response) return 0;
  217.             new actors;
  218.             for(new i; i <= GetActorPoolSize(); i++) {
  219.                 if(!IsValidActor(i)) continue;
  220.                 if(listitem == actors) {
  221.                     new Float:apos[4];
  222.                     GetActorPos(i, apos[0], apos[1], apos[2]);
  223.                     GetActorFacingAngle(i, apos[3]);
  224.                     SetPlayerPos(playerid, apos[0] + 1.0, apos[1] + 1.0, apos[2] + 1.5);
  225.                     SetPlayerFacingAngle(i, apos[3]);
  226.                     break;
  227.                 }
  228.                 actors++;
  229.             }
  230.             return 0;
  231.         }
  232.     }
  233.     return 1;
  234. }
  235.  
  236. public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float:amount, weaponid, bodypart)
  237. {
  238.     printf("[DEBUG] OnPlayerGiveDamageActor(%i, %i, %f, %i, %i)", playerid, damaged_actorid, amount, weaponid, bodypart);
  239.     if(!IsActorInvulnerable(damaged_actorid)) {
  240.         new Float:aVida, Msg[144];
  241.         GetActorHealth(damaged_actorid, aVida);
  242.         SetActorHealth(damaged_actorid, aVida-amount);
  243.         format(Msg, 144, "{FF0000}* Actor %i sofreu %4.2f de dano. Agora ele tem %4.2f de vida.", damaged_actorid, amount, (aVida-amount));
  244.         SendClientMessage(playerid, -1, Msg);
  245.     }
  246.     return 1;
  247. }
  248.  
  249. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  250. {
  251.     printf("[DEBUG] OnPlayerWeaponShot(%i, %i, %i, %i, %f, %f, %f)", playerid, weaponid, hittype, hitid, fX, fY, fZ);
  252.     return 1;
  253. }
  254.  
  255. /*********************************************************************************************************
  256. **********                                                                                    ************
  257. **********                  Gerado em 07/05/2015 por Nícolas Corrêa                           ************
  258. **********                         www.brasilmegatrucker.com                                  ************
  259. **********                                                                                    ************
  260. *********************************************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement