JR_Anti-Jumpers
Os Jumpers(Saltadores, puladores) estão em todo lugar, uns usam pra se dar bem, outros para se mover mais rápido, mas se você tem um servidor RolePlay, como eu, vai ver que isso não condiz com a realidade, não pelo fato de se pular várias vezes sem cansar ou cair. Este simples Script é para ajudar você a punir de um jeito Roleplay um Jumper.
Informações:
Os Jumpers(Saltadores, puladores) estão em todo lugar, uns usam pra se dar bem, outros para se mover mais rápido, mas se você tem um servidor RolePlay, como eu, vai ver que isso não condiz com a realidade, não pelo fato de se pular várias vezes sem cansar ou cair. Este simples Script é para ajudar você a punir de um jeito Roleplay um Jumper.
Informações:
Tudo está bem explicativo no próprio Script e o objetivo é claro: Caso um player tente pular repetidas vezes ele será punido, como mostrará o código abaixo.
O Script
Você pode usar tanto em um Filter Script como em seu próprio Game Mode, sem problemas:
Você pode usar tanto em um Filter Script como em seu próprio Game Mode, sem problemas:
pawn Code:
//==========================================================// // // // JR_Anti-Jumpers // // Learn to Run v1.1 // // Autor: JR_Junior // // // //==========================================================// #include <a_samp> new ApertouPraPular[MAX_PLAYERS]; new TempoPulo[MAX_PLAYERS]; new TempoPulo2[MAX_PLAYERS]; new PlayerJaFoiPunido[MAX_PLAYERS]; stock PararAnimacoesAtivas(playerid) { SetPlayerSpecialAction(playerid,SPECIAL_ACTION_NONE); ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0); ClearAnimations(playerid); return 1; } stock LoopingAnim(playerid,animlib[],animname[], Float:Speed, looping, lockx, locky, lockz, lp) { ApplyAnimation(playerid, animlib, animname, Speed, looping, lockx, locky, lockz, lp); } public OnPlayerConnect(playerid) { ApertouPraPular[playerid] = 0; PlayerJaFoiPunido[playerid] = 0; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if((newkeys & KEY_JUMP)) { if(!IsPlayerInAnyVehicle(playerid))//Verifica se está fora de um veículo... { new iKey,iCheck; GetPlayerKeys(playerid, iKey, iCheck, iCheck); if((iKey & KEY_FIRE) || (iKey & KEY_HANDBRAKE)) {} else { //Aqui setamos uma variável pra marcar quantas vezes seguidas foi apertado pra pular... //Também setamos um determinado tempo pra resetar essa contagem... ApertouPraPular[playerid] ++; KillTimer(TempoPulo[playerid]); //Aqui definimos o tempo mínimo entre cada pulo (5000 = 5 segundos)... TempoPulo[playerid] = SetTimerEx("ResetarNumeroDePulos", 5000, false, "d", playerid); /*O mínimo de vezes seguidas que vamos limitar tem que ser de 3, pois para pular um muro, subir em um telhado, etc, exige que se aperte 2 vezes portanto se o limite for menos de 3 vai dar conflito.*/ if(ApertouPraPular[playerid] >= 3 && PlayerJaFoiPunido[playerid] == 0) { new Float:Vida; //Tiramos uma certa quantia de vida pra deixar mais realista... GetPlayerHealth(playerid, Vida); SetPlayerHealth(playerid, Vida-3); ApertouPraPular[playerid] = 0; KillTimer(TempoPulo[playerid]); KillTimer(TempoPulo2[playerid]); TempoPulo2[playerid] = SetTimerEx("DeixarPlayerCansado", 2500, false, "d", playerid); //Aqui aplicamos uma animação como punição, como se o player tivesse pulado muito e caido de cara no chão... ApplyAnimation(playerid, "GYMNASIUM", "gym_jog_falloff",4.1,0,1,1,0,0); //Evita que se aplique essa punição quando já está sendo aplicada... PlayerJaFoiPunido[playerid] = 1; return 1; } } } } return 0; } forward RestaurarPlayer(playerid); public RestaurarPlayer(playerid) { //Aqui liberamos o player da punição... PararAnimacoesAtivas(playerid); ApertouPraPular[playerid] = 0; PlayerJaFoiPunido[playerid] = 0; return 1; } forward DeixarPlayerCansado(playerid); public DeixarPlayerCansado(playerid) { PararAnimacoesAtivas(playerid); LoopingAnim(playerid,"PED","IDLE_tired",3.0,1,0,0,0,0); KillTimer(TempoPulo2[playerid]); //Deixamos o player cansado por 3 segundos(3000)e depois restauramos ele... TempoPulo2[playerid] = SetTimerEx("RestaurarPlayer", 3000, false, "d", playerid); return 1; } forward ResetarNumeroDePulos(playerid); public ResetarNumeroDePulos(playerid) { ApertouPraPular[playerid] = 0; return 1; }
Há 99,9% de chances de não haver conflitos com seu GameMode, mas eu aconselho analisar/estudar o Script e adaptar da melhor forma ao seu servidor.
Creditos: [DkS]JR_Junior
Creditos: [DkS]JR_Junior
0 comentários:
Postar um comentário