Advertisement
Guest User

[FS] Actor Test v0.1 R4-2

a guest
May 23rd, 2015
2,094
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 20.48 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.     v0.1 R3 - 08/05/2015:
  12.         - Comando /criaractor alterado. Agora actors podem ser identificados com nomes.
  13.         - Novo comando: /reviveractor. Ele revive o actor na mesma posição.
  14.         - Labels identificam os actors com seu id e nome.
  15.         - Novo comando: /alteraractornome. Alterar o nome do actor.
  16.         - Os comandos só podem ser utilizados por administradores (RCON).
  17.         - Comando /veractors exibe agora 25 resultados por página.
  18.     v0.1 R4 - 24/05/2015:
  19.         - Comando /exportaractors. Gera um script semi pronto com todos os actors criados para um arquivo desejado.
  20.  
  21.  
  22. *******************************************************************************/
  23. #include <a_samp>
  24. #include <zcmd>
  25. #include <sscanf2>
  26.  
  27. #define DIALOG_ACTORCMDS 32002
  28. #define DIALOG_VERACTORS 32003
  29.  
  30. enum cmd_infos
  31. {
  32.     Comando[128],
  33.     Descricao[128]
  34. };
  35. new cmds_Actor[][cmd_infos] = {
  36.     {"/criaractor [skin id] [nome]", "Cria um actor com a skin desejada e com um nome"},
  37.     {"/destruiractor [actor id]", "Destroi um actor"},
  38.     {"/destruirtodosactors", "Destrói todos os actors do servidor"},
  39.     {"/animaractor [actor id] [animlib] [animname] [loop]", "Anima um actor"},
  40.     {"/pararanimactor [actor id]", "Para a animação de um actor"},
  41.     {"/animtodosactors [animlib] [animname] [loop]", "Anima todos os actors do servidor"},
  42.     {"/pararanimtodosactors", "Para a animação de todos os actors"},
  43.     {"/actorpos [actor id] [x] [y] [z] [rotação]", "Seta a posição de um actor"},
  44.     {"/actormundo [actor id] [mundo virtual]", "Seta o mundo virtual de um actor"},
  45.     {"/actorvuneravel [actor id]", "Deixa um actor vuneravel/invuneravel"},
  46.     {"/actorvida [actor id] [vida]", "Seta a vida de um actor"},
  47.     {"/reviveractor [actor id]", "Revive um actor"},
  48.     {"/alteraractornome [actor id] [novo nome]", "Altera o nome de um actor"},
  49.     {"/veractors", "Visualiza os actors criados"},
  50.     {"/exportaractors [arquivo.pwn]", "Gera um script semi-pronto para uso dos actors criados"}
  51. };
  52.  
  53. enum i_actor
  54. {
  55.     ActorNome[32],
  56.     ActorSkin,
  57.     Text3D:ActorLabel
  58. };
  59. new ActorData[MAX_ACTORS][i_actor];
  60.  
  61. public OnFilterScriptInit()
  62. {
  63.     for(new i; i < MAX_ACTORS; i++) {
  64.         ActorData[i][ActorSkin] = -1;
  65.         ActorData[i][ActorLabel] = Text3D:INVALID_3DTEXT_ID;
  66.         format(ActorData[i][ActorNome], 32, "");
  67.     }
  68.     print("*****************************************");
  69.     print("**** Actor debug - básico [CARREGADO]****");
  70.     print("*****************************************");
  71.     return 1;
  72. }
  73.  
  74. public OnFilterScriptExit()
  75. {
  76.     for(new i; i <= GetActorPoolSize(); i++) {
  77.         if(!IsValidActor(i)) continue;
  78.         if(ActorData[i][ActorSkin] != -1) {
  79.             DestroyActor(i);
  80.             ActorData[i][ActorSkin] = -1;
  81.             Delete3DTextLabel(ActorData[i][ActorLabel]);
  82.             format(ActorData[i][ActorNome], 32, "");
  83.         }
  84.     }
  85.     print("*****************************************");
  86.     print("**** Actor debug - básico [DESLIGADO]****");
  87.     print("*****************************************");
  88.     return 1;
  89. }
  90.  
  91.  
  92. CMD:criaractor(playerid, params[]) {
  93.     if(!IsPlayerAdmin(playerid)) return 0;
  94.     new skin_actor, Nome[32];
  95.     if(sscanf(params, "is[32]", skin_actor, Nome)) return SendClientMessage(playerid, -1, "{FF0000}Use: /criaractor [skin id] [nome]");
  96.     if(skin_actor < 0 || skin_actor > 311) return SendClientMessage(playerid, -1, "{FF0000}O id é inválido!");
  97.     new Float:pP[4], Msg[144], Actorid;
  98.     GetPlayerPos(playerid, pP[0], pP[1], pP[2]);
  99.     GetPlayerFacingAngle(playerid, pP[3]);
  100.     Actorid = CreateActor(skin_actor, pP[0], pP[1], pP[2], pP[3]);
  101.     if(!IsValidActor(Actorid)) return SendClientMessage(playerid, -1, "{FF0000}Ocorreu um erro. Provavelmente o máximo de actors foi atingido!");
  102.     ActorData[Actorid][ActorSkin] = skin_actor;
  103.     format(ActorData[Actorid][ActorNome], 32, Nome);
  104.     format(Msg, 144, "{FFFF00}Actor id: %i (Skin: %i) (Nome: %s)", Actorid, skin_actor, Nome);
  105.     SendClientMessage(playerid, -1, Msg);
  106.     SetActorVirtualWorld(Actorid, GetPlayerVirtualWorld(playerid));
  107.     format(Msg, 144, "%s (%i)", Nome, Actorid);
  108.     ActorData[Actorid][ActorLabel] = Create3DTextLabel(Msg, 0xFFFF00AA, pP[0], pP[1], pP[2] + 1.0, 30.0, GetPlayerVirtualWorld(playerid));
  109.     SetPlayerPos(playerid, pP[0] + 1.0, pP[1] + 1.0, pP[2]);
  110.     return 1;
  111. }
  112. CMD:destruiractor(playerid, params[]) {
  113.     if(!IsPlayerAdmin(playerid)) return 0;
  114.     new actorid;
  115.     if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use: /destruiractor [actor id]");
  116.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  117.     new Msg[144];
  118.     DestroyActor(actorid);
  119.     format(Msg, 144, "{FFFF00}Actor %s (%i) foi destruido.", ActorData[actorid][ActorNome], actorid);
  120.     SendClientMessage(playerid, -1, Msg);
  121.     ActorData[actorid][ActorSkin] = -1;
  122.     Delete3DTextLabel(ActorData[actorid][ActorLabel]);
  123.     format(ActorData[actorid][ActorNome], 32, "");
  124.     return 1;
  125. }
  126. CMD:destruirtodosactors(playerid, params[]) {
  127.     if(!IsPlayerAdmin(playerid)) return 0;
  128.     new Msg[144], actors;
  129.     for(new i; i <= GetActorPoolSize(); i++) {
  130.         if(!IsValidActor(i)) continue;
  131.         DestroyActor(i);
  132.         ActorData[i][ActorSkin] = -1;
  133.         Delete3DTextLabel(ActorData[i][ActorLabel]);
  134.         format(ActorData[i][ActorNome], 32, "");
  135.         actors++;
  136.     }
  137.     if(actors==0) return SendClientMessage(playerid, -1, "{FF0000}Não há actors!");
  138.     format(Msg, 144, "{FFFF00}Foram destruidos %i actors.", actors);
  139.     SendClientMessage(playerid, -1, Msg);
  140.     return 1;
  141. }
  142. CMD:animaractor(playerid, params[]) {
  143.     if(!IsPlayerAdmin(playerid)) return 0;
  144.     new actorid, animlib[32], animname[32], loop;
  145.     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)");
  146.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  147.     new Msg[144];
  148.     ClearActorAnimations(actorid);
  149.     ApplyActorAnimation(actorid, animlib, animname, 4.1, loop, 1, 1, 0, 0);
  150.     format(Msg, 144, "{00FF00}Actor %s (%i) executando animação da lib %s animação %s (%s)", ActorData[actorid][ActorNome], actorid, animlib, animname, (loop == 0 ? ("sem loop") : ("com loop")));
  151.     SendClientMessage(playerid, -1, Msg);
  152.     return 1;
  153. }
  154. CMD:pararanimactor(playerid, params[]) {
  155.     if(!IsPlayerAdmin(playerid)) return 0;
  156.     new actorid;
  157.     if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use: /pararanimactor [actor id]");
  158.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  159.     new Msg[144];
  160.     ClearActorAnimations(actorid);
  161.     format(Msg, 144, "{a9c4e4}Animação do actor %s (%i) foi parada!", ActorData[actorid][ActorNome], actorid);
  162.     SendClientMessage(playerid, -1, Msg);
  163.     return 1;
  164. }
  165. CMD:animtodosactors(playerid, params[]) {
  166.     if(!IsPlayerAdmin(playerid)) return 0;
  167.     new animlib[32], animname[32], loop;
  168.     if(sscanf(params, "s[32]s[32]i", animlib,animname,loop)) return SendClientMessage(playerid, -1, "{FF0000}Use: /animtodosactos [animlib] [animname] [loop (0-1)]");
  169.     new Msg[144];
  170.     for(new i; i <= GetActorPoolSize(); i++) {
  171.         if(!IsValidActor(i)) continue;
  172.         ClearActorAnimations(i);
  173.         ApplyActorAnimation(i, animlib, animname, 4.1, loop, 1, 1, 0, 0);
  174.     }
  175.     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")));
  176.     SendClientMessage(playerid, -1, Msg);
  177.     return 1;
  178. }
  179. CMD:pararanimtodosactors(playerid, params[]) {
  180.     if(!IsPlayerAdmin(playerid)) return 0;
  181.     for(new i; i <= GetActorPoolSize(); i++) {
  182.         if(!IsValidActor(i)) continue;
  183.         ClearActorAnimations(i);
  184.     }
  185.     SendClientMessage(playerid, -1, "{FFFF00}A animação de todos os actors existentes foram paradas.");
  186.     return 1;
  187. }
  188. CMD:actorpos(playerid, params[]) {
  189.     if(!IsPlayerAdmin(playerid)) return 0;
  190.     new actorid, Float:apos[4];
  191.     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]");
  192.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  193.     new Msg[144];
  194.     SetActorPos(actorid, apos[0], apos[1], apos[2]);
  195.     SetActorFacingAngle(actorid, apos[3]);
  196.     format(Msg, 144, "{a9c4e4}Actor %s (%i) em x=%4.2f - y=%4.2f - z=%4.2f - rotação=%4.2f", ActorData[actorid][ActorNome], actorid, apos[0], apos[1], apos[2], apos[3]);
  197.     SendClientMessage(playerid, -1, Msg);
  198.     Delete3DTextLabel(ActorData[actorid][ActorLabel]);
  199.     format(Msg, 144, "%s (%i)", ActorData[actorid][ActorNome], actorid);
  200.     ActorData[actorid][ActorLabel] = Create3DTextLabel(Msg, 0xFFFF00AA, apos[0], apos[1], apos[2] + 1.0, 30.0, GetActorVirtualWorld(actorid));
  201.     return 1;
  202. }
  203. CMD:actormundo(playerid, params[]) {
  204.     if(!IsPlayerAdmin(playerid)) return 0;
  205.     new actorid, amundo;
  206.     if(sscanf(params, "ii", actorid, amundo)) return SendClientMessage(playerid, -1, "{FF0000}Use: /actormundo [actorid] [mundo]");
  207.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  208.     new Msg[144], Float:apos[3];
  209.     GetActorPos(actorid, apos[0], apos[1], apos[2]);
  210.     SetActorVirtualWorld(actorid, amundo);
  211.     format(Msg, 144, "{a9c4e4}Actor %s (%i) em mundo %i.", ActorData[actorid][ActorNome], actorid, amundo);
  212.     SendClientMessage(playerid, -1, Msg);
  213.     Delete3DTextLabel(ActorData[actorid][ActorLabel]);
  214.     format(Msg, 144, "%s (%i)", ActorData[actorid][ActorNome], actorid);
  215.     ActorData[actorid][ActorLabel] = Create3DTextLabel(Msg, 0xFFFF00AA, apos[0], apos[1], apos[2] + 1.0, 30.0, amundo);
  216.     return 1;
  217. }
  218. CMD:actorvuneravel(playerid, params[]) {
  219.     if(!IsPlayerAdmin(playerid)) return 0;
  220.     new actorid;
  221.     if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use:/actorvuneravel [actorid]");
  222.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  223.     new Msg[144];
  224.     if(IsActorInvulnerable(actorid)) {
  225.         SetActorInvulnerable(actorid, false);
  226.         format(Msg, 144, "{FFFF00}Actor %s (%i) agora é vunerável.", ActorData[actorid][ActorNome], actorid);
  227.     }
  228.     else {
  229.         SetActorInvulnerable(actorid, true);
  230.         format(Msg, 144, "{FFFF00}Actor %s (%i) agora é invunerável.", ActorData[actorid][ActorNome], actorid);
  231.     }
  232.     SendClientMessage(playerid, -1, Msg);
  233.     return 1;
  234. }
  235. CMD:actorvida(playerid, params[]) {
  236.     if(!IsPlayerAdmin(playerid)) return 0;
  237.     new actorid, Float:avida;
  238.     if(sscanf(params, "if", actorid, avida)) return SendClientMessage(playerid, -1, "{FF0000}Use: /actorvida [actorid] [vida]");
  239.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  240.     new Msg[144];
  241.     SetActorHealth(actorid, avida);
  242.     format(Msg, 144, "{a9c4e4}Vida do actor %s (%i) foi setada para: %4.2f", ActorData[actorid][ActorNome], actorid, avida);
  243.     SendClientMessage(playerid, -1, Msg);
  244.     return 1;
  245. }
  246. CMD:reviveractor(playerid, params[]) {
  247.     if(!IsPlayerAdmin(playerid)) return 0;
  248.     new actorid;
  249.     if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use: /reviveractor [actorid]");
  250.     if(!ResyncActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Ocorreu um erro e o actor não pode reviver :(");
  251.     new Msg[144];
  252.     format(Msg, 144, "{FFFF00}Actor %s (%i) revivido!", ActorData[actorid][ActorNome], actorid);
  253.     SendClientMessage(playerid, -1, Msg);
  254.     return 1;
  255. }
  256. CMD:alteraractornome(playerid,params[]) {
  257.     if(!IsPlayerAdmin(playerid)) return 0;
  258.     new actorid, novoNome[32];
  259.     if(sscanf(params, "is[32]", actorid, novoNome)) return SendClientMessage(playerid, -1, "{FF0000}Use: /alteraractornome [actor id] [novo nome]");
  260.     if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido.");
  261.     if(!strcmp(ActorData[actorid][ActorNome], novoNome, true)) return SendClientMessage(playerid, -1, "{FF0000}O novo nome é o atual do actor!");
  262.     new Msg[144];
  263.     format(Msg, 144, "{a9c4e4}Você alterou o nome do actor %s (%i) para %s.", ActorData[actorid][ActorNome], actorid, novoNome);
  264.     SendClientMessage(playerid, -1, Msg);
  265.     format(ActorData[actorid][ActorNome], 32, "%s", novoNome);
  266.     format(Msg, 144, "%s (%i)", novoNome, actorid);
  267.     Update3DTextLabelText(ActorData[actorid][ActorLabel], 0xFFFF00AA, Msg);
  268.     return 1;
  269. }
  270. CMD:exportaractors(playerid, params[]) {
  271.     if(!IsPlayerAdmin(playerid)) return 0;
  272.     new arquivo_nome[128];
  273.     if(sscanf(params, "s[128]", arquivo_nome)) return SendClientMessage(playerid, -1, "{FF0000}Use: /exportaractors [nome do arquivo.pwn]");
  274.     if(fexist(arquivo_nome)) return SendClientMessage(playerid, -1, "{FF0000}Este arquivo existe no diretório. Por favor insira outro nome!");
  275.     new File:pActor, str[100], Msg[144];
  276.     pActor = fopen(arquivo_nome, io_append);
  277.     fwrite(pActor, "#include a_samp\r\n\r\n");
  278.     format(str, sizeof(str), "new xActors[%i];\r\n", GetActorPoolSize() + 1);
  279.     fwrite(pActor, str);
  280.     fwrite(pActor, "\r\npublic OnFilterScriptInit()\r\n{\r\n");
  281.     for(new i; i <= GetActorPoolSize(); i++) {
  282.         new Float:posAc[4];
  283.         GetActorPos(i, posAc[0], posAc[1], posAc[2]);
  284.         GetActorFacingAngle(i, posAc[3]);
  285.         format(str, sizeof(str), "\txActors[%i] = CreateActor(%i, %4.2f, %4.2f, %4.2f, %4.2f); // %s \r\n", i, ActorData[i][ActorSkin], posAc[0], posAc[1], posAc[2], posAc[3], ActorData[i][ActorNome]);
  286.         fwrite(pActor, str);
  287.     }
  288.     fwrite(pActor, "\tprint(\"[FS EXPORTADO] Actors criados!\");\r\n\treturn 1;\r\n}\r\n");
  289.     fwrite(pActor, "public OnFilterScriptExit()\r\n{\r\n\tfor(new x; x < sizeof(xActors); x++) {\r\n\
  290.                    \t\tDestroyActor(xActors[x]);\r\n\t}\r\n\treturn 1;\r\n}");
  291.     fwrite(pActor, "\r\n\r\n/**************************************************\r\n\
  292.                            Este FilterScript foi exportado pelo Test Actor\r\n\
  293.                            \t\twww.brasilmegatrucker.com\r\n\
  294.                            ***************************************************/");
  295.     fclose(pActor);
  296.     format(Msg, 144, "{a9c4e4}Exportado actors para o arquivo {ffffff}%s{a9c4e4} com sucesso!", arquivo_nome);
  297.     SendClientMessage(playerid, -1, Msg);
  298.     return 1;
  299. }
  300. CMD:veractors(playerid, params[]) {
  301.     if(!IsPlayerAdmin(playerid)) return 0;
  302.     SetPVarInt(playerid,"dialog_lista", 0);
  303.     return VerActors(playerid);
  304. }
  305. CMD:comandosactor(playerid) {
  306.     if(!IsPlayerAdmin(playerid)) return 0;
  307.     new di_actor[1000];
  308.     strcat(di_actor, "Comando\tDescrição\n");
  309.     for(new i; i < sizeof(cmds_Actor); i++) {
  310.         strcat(di_actor, cmds_Actor[i][Comando]);
  311.         strcat(di_actor, "\t");
  312.         strcat(di_actor, cmds_Actor[i][Descricao]);
  313.         strcat(di_actor, "\n");
  314.     }
  315.     ShowPlayerDialog(playerid, DIALOG_ACTORCMDS, DIALOG_STYLE_TABLIST_HEADERS, "{FF0000}# {FFFFFF}Comando de actors", di_actor, "Ok", "");
  316.     return 1;
  317. }
  318.  
  319. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  320.     switch (dialogid) {
  321.         case DIALOG_ACTORCMDS: {
  322.             if(!response) return 0;
  323.             new Msg[144];
  324.             format(Msg, 144, "{FFFF00}%s - %s", cmds_Actor[listitem][Comando], cmds_Actor[listitem][Descricao]);
  325.             SendClientMessage(playerid, -1, Msg);
  326.             return 0;
  327.         }
  328.         case DIALOG_VERACTORS: {
  329.             if(!response) return 0;
  330.             new actors;
  331.             if(listitem > 25) {
  332.                 SetPVarInt(playerid, "dialog_lista", GetPVarInt(playerid, "dialog_proxima_lista"));
  333.                 SetPVarInt(playerid, "dialog_proxima_lista", 0);
  334.                 VerActors(playerid);
  335.                 return 0;
  336.             }
  337.             for(new i = GetPVarInt(playerid, "dialog_lista"); i <= GetActorPoolSize(); i++) {
  338.                 if(!IsValidActor(i)) continue;
  339.                 if(listitem == actors) {
  340.                     new Float:apos[4], Msg[144];
  341.                     GetActorPos(i, apos[0], apos[1], apos[2]);
  342.                     GetActorFacingAngle(i, apos[3]);
  343.                     SetPlayerPos(playerid, apos[0] + 1.0, apos[1] + 1.0, apos[2] + 1.5);
  344.                     SetPlayerFacingAngle(i, apos[3]);
  345.                     format(Msg, 144, "{a9c4e4}Você foi teleportado ao actor %s (%i)", ActorData[i][ActorNome], i);
  346.                     SendClientMessage(playerid, -1, Msg);
  347.                     break;
  348.                 }
  349.                 actors++;
  350.             }
  351.             return 0;
  352.         }
  353.     }
  354.     return 1;
  355. }
  356.  
  357. public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float:amount, weaponid, bodypart)
  358. {
  359.     //printf("[DEBUG] OnPlayerGiveDamageActor(%i, %i, %f, %i, %i)", playerid, damaged_actorid, amount, weaponid, bodypart);
  360.     if(!IsActorInvulnerable(damaged_actorid)) {
  361.         new Float:aVida;
  362.         GetActorHealth(damaged_actorid, aVida);
  363.         SetActorHealth(damaged_actorid, aVida-amount);
  364.         /*new Msg[144];
  365.         format(Msg, 144, "{FF0000}* Actor %i sofreu %4.2f de dano. Agora ele tem %4.2f de vida.", damaged_actorid, amount, (aVida-amount));
  366.         SendClientMessage(playerid, -1, Msg);    */
  367.     }
  368.     return 1;
  369. }
  370.  
  371. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  372. {
  373.     //printf("[DEBUG] OnPlayerWeaponShot(%i, %i, %i, %i, %f, %f, %f)", playerid, weaponid, hittype, hitid, fX, fY, fZ);
  374.     return 1;
  375. }
  376.  
  377. stock VerActors(playerid) {
  378.     new di[2500], actors;
  379.     strcat(di, "Actor\tCoordenadas de Posição\tMundo - Skin\tVida\n");
  380.     for(new i = GetPVarInt(playerid, "dialog_lista"); i <= GetActorPoolSize(); i++) {
  381.         if(!IsValidActor(i)) continue;
  382.         if(actors > 25) {
  383.             SetPVarInt(playerid, "dialog_proxima_lista", i);
  384.             strcat(di, "{FFFF00}Próxima página\n");
  385.             break;
  386.         }
  387.         new Float:pA[3], Float:aVida;
  388.         GetActorPos(i, pA[0], pA[1], pA[2]);
  389.         GetActorHealth(i, aVida);
  390.         format(di, sizeof(di), "%s%s (%i)\tx=%4.2f y=%4.2f z=%4.2f\t%i - %i\t%4.2f\n", di,ActorData[i][ActorNome], i,pA[0],pA[1],pA[2],GetActorVirtualWorld(i),ActorData[i][ActorSkin],aVida);
  391.         actors++;
  392.     }
  393.     if(actors==0) return SendClientMessage(playerid, -1, "{FF0000}Não há actors!");
  394.     ShowPlayerDialog(playerid, DIALOG_VERACTORS, DIALOG_STYLE_TABLIST_HEADERS, "{FF0000}# {FFFFFF}Visualizando actors", di, "Ok", "Cancelar");
  395.     return 1;
  396. }
  397. //by Emmet
  398. stock ResyncActor(actorid)
  399. {
  400.     if(IsValidActor(actorid))
  401.     {
  402.         new  Float:x,Float:y, Float:z,
  403.         worldid = GetActorVirtualWorld(actorid);
  404.         GetActorPos(actorid, x, y, z);
  405.         SetActorPos(actorid, 1000.0, -2000.0, 500.0);
  406.         SetActorVirtualWorld(actorid, random(cellmax));
  407.         SetTimerEx("RestoreActor", 850, 0, "iifff", actorid, worldid, x, y, z);
  408.         return 1;
  409.     }
  410.     return 0;
  411. }
  412.  
  413. forward RestoreActor(actorid, worldid, Float:x, Float:y, Float:z);
  414. public RestoreActor(actorid, worldid, Float:x, Float:y, Float:z)
  415. {
  416.     SetActorVirtualWorld(actorid, worldid);
  417.     SetActorPos(actorid, x, y, z);
  418.     SetActorHealth(actorid, 100.0);
  419.     return 1;
  420. }
  421. /*********************************************************************************************************
  422. **********                                                                                    ************
  423. **********                  Gerado em 07/05/2015 por Nícolas Corrêa                           ************
  424. **********                         www.brasilmegatrucker.com                                  ************
  425. **********                                                                                    ************
  426. *********************************************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement