Advertisement
Guest User

[FS] Actor Test v0.1 R2

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