/******************************************************************************* # Changelog v0.1 - 07/05/2015: - Script Criado. - Comandos para criar, destruir e alterar actors. - Lista de comandos para saber de todos os comandos disponíveis. - Possível executar/parar animação em um ou todos actors. v0.1 R2 - 07/05/2015 - Comando /criaractor corrigido, setando a posição do jogador para o lado, para não ocorrer bugs. - Debugs desabilitados. *******************************************************************************/ #include #include #include #define DIALOG_ACTORCMDS 32002 #define DIALOG_VERACTORS 32003 enum cmd_infos { Comando[128], Descricao[128] }; new cmds_Actor[][cmd_infos] = { {"/criaractor [skin id]", "Cria um actor com a skin desejada"}, {"/destruiractor [actor id]", "Destroi um actor"}, {"/destruirtodosactors", "Destrói todos os actors do servidor"}, {"/animaractor [actor id] [animlib] [animname] [loop]", "Anima um actor"}, {"/pararanimactor [actor id]", "Para a animação de um actor"}, {"/animtodosactors [animlib] [animname] [loop]", "Anima todos os actors do servidor"}, {"/pararanimtodosactors", "Para a animação de todos os actors"}, {"/actorpos [actor id] [x] [y] [z] [rotação]", "Seta a posição de um actor"}, {"/actormundo [actor id] [mundo virtual]", "Seta o mundo virtual de um actor"}, {"/actorvuneravel [actor id]", "Deixa um actor vuneravel/invuneravel"}, {"/actorvida [actor id] [vida]", "Seta a vida de um actor"}, {"/veractors", "Visualiza os actors criados"} }; public OnFilterScriptInit() { print("*****************************************"); print("**** Actor debug - básico [CARREGADO]****"); print("*****************************************"); return 1; } public OnFilterScriptExit() { print("*****************************************"); print("**** Actor debug - básico [DESLIGADO]****"); print("*****************************************"); return 1; } CMD:criaractor(playerid, params[]) { new skin_actor; if(sscanf(params, "i", skin_actor)) return SendClientMessage(playerid, -1, "{FF0000}Use: /criaractor [skin id]"); if(skin_actor < 0 || skin_actor > 311) return SendClientMessage(playerid, -1, "{FF0000}O id é inválido!"); new Float:pP[4], Msg[144], Actorid; GetPlayerPos(playerid, pP[0], pP[1], pP[2]); GetPlayerFacingAngle(playerid, pP[3]); Actorid = CreateActor(skin_actor, pP[0], pP[1], pP[2], pP[3]); format(Msg, 144, "{FFFF00}Actor id: %i", Actorid); SendClientMessage(playerid, -1, Msg); SetPlayerPos(playerid, pP[0] + 1.0, pP[1] + 1.0, pP[2]); return 1; } CMD:destruiractor(playerid, params[]) { new actorid; if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use: /destruiractor [actor id]"); if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido."); new Msg[144]; DestroyActor(actorid); format(Msg, 144, "{FFFF00}Actor id %i foi destruido.", actorid); SendClientMessage(playerid, -1, Msg); return 1; } CMD:destruirtodosactors(playerid, params[]) { new Msg[144], actors; for(new i; i <= GetActorPoolSize(); i++) { if(!IsValidActor(i)) continue; DestroyActor(i); actors++; } if(actors==0) return SendClientMessage(playerid, -1, "{FF0000}Não há actors!"); format(Msg, 144, "{FFFF00}Foram destruidos %i actors.", actors); SendClientMessage(playerid, -1, Msg); return 1; } CMD:animaractor(playerid, params[]) { new actorid, animlib[32], animname[32], loop; 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)"); if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido."); new Msg[144]; ClearActorAnimations(actorid); ApplyActorAnimation(actorid, animlib, animname, 4.1, loop, 1, 1, 0, 0); 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"))); SendClientMessage(playerid, -1, Msg); return 1; } CMD:pararanimactor(playerid, params[]) { new actorid; if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use: /pararanimactor [actor id]"); if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido."); new Msg[144]; ClearActorAnimations(actorid); format(Msg, 144, "{a9c4e4}Animação do actor %i foi parada!", actorid); SendClientMessage(playerid, -1, Msg); return 1; } CMD:animtodosactors(playerid, params[]) { new animlib[32], animname[32], loop; if(sscanf(params, "s[32]s[32]i", animlib,animname,loop)) return SendClientMessage(playerid, -1, "{FF0000}Use: /animtodosactos [animlib] [animname] [loop (0-1)]"); new Msg[144]; for(new i; i <= GetActorPoolSize(); i++) { if(!IsValidActor(i)) continue; ClearActorAnimations(i); ApplyActorAnimation(i, animlib, animname, 4.1, loop, 1, 1, 0, 0); } 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"))); SendClientMessage(playerid, -1, Msg); return 1; } CMD:pararanimtodosactors(playerid, params[]) { for(new i; i <= GetActorPoolSize(); i++) { if(!IsValidActor(i)) continue; ClearActorAnimations(i); } SendClientMessage(playerid, -1, "{FFFF00}A animação de todos os actors existentes foram paradas."); return 1; } CMD:actorpos(playerid, params[]) { new actorid, Float:apos[4]; 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]"); if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido."); new Msg[144]; SetActorPos(actorid, apos[0], apos[1], apos[2]); SetActorFacingAngle(actorid, apos[3]); 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]); SendClientMessage(playerid, -1, Msg); return 1; } CMD:actormundo(playerid, params[]) { new actorid, amundo; if(sscanf(params, "ii", actorid, amundo)) return SendClientMessage(playerid, -1, "{FF0000}Use: /actormundo [actorid] [mundo]"); if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido."); new Msg[144]; SetActorVirtualWorld(actorid, amundo); format(Msg, 144, "{a9c4e4}Actor %i em mundo %i.", actorid, amundo); SendClientMessage(playerid, -1, Msg); return 1; } CMD:actorvuneravel(playerid, params[]) { new actorid; if(sscanf(params, "i", actorid)) return SendClientMessage(playerid, -1, "{FF0000}Use:/actorvuneravel [actorid]"); if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido."); new Msg[144]; if(IsActorInvulnerable(actorid)) { SetActorInvulnerable(actorid, false); format(Msg, 144, "{FFFF00}Actor %i agora é vunerável.", actorid); } else { SetActorInvulnerable(actorid, true); format(Msg, 144, "{FFFF00}Actor %i agora é invunerável.", actorid); } SendClientMessage(playerid, -1, Msg); return 1; } CMD:actorvida(playerid, params[]) { new actorid, Float:avida; if(sscanf(params, "if", actorid, avida)) return SendClientMessage(playerid, -1, "{FF0000}Use: /actorvida [actorid] [vida]"); if(!IsValidActor(actorid)) return SendClientMessage(playerid, -1, "{FF0000}Actor inválido."); new Msg[144]; SetActorHealth(actorid, avida); format(Msg, 144, "{a9c4e4}Vida do actor %i foi setada para: %4.2f", actorid, avida); SendClientMessage(playerid, -1, Msg); return 1; } CMD:veractors(playerid, params[]) { new di[1000], actors; strcat(di, "Actor id\tCoordenadas de Posição\tMundo Virtual\tVida\n"); for(new i; i <= GetActorPoolSize(); i++) { if(!IsValidActor(i)) continue; new Float:pA[3], Float:aVida; GetActorPos(i, pA[0], pA[1], pA[2]); GetActorHealth(i, aVida); 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); actors++; } if(actors==0) return SendClientMessage(playerid, -1, "{FF0000}Não há actors!"); ShowPlayerDialog(playerid, DIALOG_VERACTORS, DIALOG_STYLE_TABLIST_HEADERS, "{FF0000}# {FFFFFF}Visualizando actors", di, "Ok", "Cancelar"); return 1; } CMD:comandosactor(playerid) { new di_actor[1000]; strcat(di_actor, "Comando\tDescrição\n"); for(new i; i < sizeof(cmds_Actor); i++) { strcat(di_actor, cmds_Actor[i][Comando]); strcat(di_actor, "\t"); strcat(di_actor, cmds_Actor[i][Descricao]); strcat(di_actor, "\n"); } ShowPlayerDialog(playerid, DIALOG_ACTORCMDS, DIALOG_STYLE_TABLIST_HEADERS, "{FF0000}# {FFFFFF}Comando de actors", di_actor, "Ok", ""); return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch (dialogid) { case DIALOG_ACTORCMDS: { if(!response) return 0; new Msg[144]; format(Msg, 144, "{FFFF00}%s - %s", cmds_Actor[listitem][Comando], cmds_Actor[listitem][Descricao]); SendClientMessage(playerid, -1, Msg); return 0; } case DIALOG_VERACTORS: { if(!response) return 0; new actors; for(new i; i <= GetActorPoolSize(); i++) { if(!IsValidActor(i)) continue; if(listitem == actors) { new Float:apos[4]; GetActorPos(i, apos[0], apos[1], apos[2]); GetActorFacingAngle(i, apos[3]); SetPlayerPos(playerid, apos[0] + 1.0, apos[1] + 1.0, apos[2] + 1.5); SetPlayerFacingAngle(i, apos[3]); break; } actors++; } return 0; } } return 1; } public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float:amount, weaponid, bodypart) { //printf("[DEBUG] OnPlayerGiveDamageActor(%i, %i, %f, %i, %i)", playerid, damaged_actorid, amount, weaponid, bodypart); if(!IsActorInvulnerable(damaged_actorid)) { new Float:aVida; GetActorHealth(damaged_actorid, aVida); SetActorHealth(damaged_actorid, aVida-amount); /*new Msg[144]; format(Msg, 144, "{FF0000}* Actor %i sofreu %4.2f de dano. Agora ele tem %4.2f de vida.", damaged_actorid, amount, (aVida-amount)); SendClientMessage(playerid, -1, Msg); */ } return 1; } public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) { //printf("[DEBUG] OnPlayerWeaponShot(%i, %i, %i, %i, %f, %f, %f)", playerid, weaponid, hittype, hitid, fX, fY, fZ); return 1; } /********************************************************************************************************* ********** ************ ********** Gerado em 07/05/2015 por Nícolas Corrêa ************ ********** www.brasilmegatrucker.com ************ ********** ************ *********************************************************************************************************/