14.09.2017, 23:32
(
Последний раз редактировалось Jonorusc; 15.09.2017 в 02:13.
)
TLG QUE VOCКS SABE QUE TEM UM TASER NO GTA SAN ANDRES. RESOLVI CRIAR UM JEITO DE DБ CHOQUE EM VAGABUNDO SE O TEU SERVIDOR TIVER POLICIA.
PRIMEIRAMENTE. USEI 2 FUNЗХES:
PHP код:
forward GetClosestPlayer(playerid);
public GetClosestPlayer(p1)
{
new x,Float:dis,Float:dis2,player;
player = -1;
dis = 99999.99;
for (x=0;x<MAX_PLAYERS;x++)
{
if(IsPlayerConnected(x))
{
if(x != p1)
{
dis2 = GetDistanceBetweenPlayers2(x,p1);
if(dis2 < dis && dis2 != -1.00)
{
dis = dis2;
player = x;
}
}
}
}
return player;
}
stock GetDistanceBetweenPlayers(playerid,playerid2)
{
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
new Float:tmpdis;
GetPlayerPos(playerid,x1,y1,z1);
GetPlayerPos(playerid2,x2,y2,z2);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
return floatround(tmpdis);
}
PHP код:
#include "a_samp"
#include "ZMCD"
//usaremos no timer (macros)
#define minutos(%0) (1000 * %0 * 60)
#define horas(%0) (1000 * %0 * 60 * 60)
#define segundos(%0) (1000 * %0)
new PlayerComTaser[MAX_PLAYERS]; //variavel para mostrar se o jogador estб com o taser ou nгo!
new SofrendoChoque[MAX_PLAYERS]; //variavel que contaremos 10 segundos, para a vitima volta a conciкncia;
new TimerEstribuchando[MAX_PLAYERS];
PHP код:
CMD:equipartaser(playerid,params[]) //comando criado com o processador de comandos "ZCMD"
{
if(PlayerComTaser[playerid] == 1) //checagem para ver se o jogador estб com taser, se true, o taser ira ser destruido
{
RemovePlayerAttachedObject(playerid, 0); //retiramos o taser da mгo do jogador!
PlayerComTaser[playerid] = 0; // retornamos 0 a variavel, para quando ele for usar o comando, a checagem de quipado nгo o detectar
SendClientMessage(playerid, -1, "[TASER] Vocк desequipou o taser /equipartaser");
}
else //se nao estiver equipado, o jogador irб equipar-lo
{
SetPlayerAttachedObject(playerid, 0, 18642, 6, 0.06, 0.01, 0.08, 180.0, 0.0, 0.0); //colocamos o taser na mгo do jogador
PlayerComTaser[playerid] = 1; //retornamos 1 para quando a checagem de equipado checar, detectar que o jogador estб com taser
SendClientMessage(playerid, -1, "[TASER] Vocк equipou seu taser aperte botгo esquerdo do mouse, perto de algъem!");
}
return 1;
}
PHP код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_FIRE) //se ele clicar o botгo esquerdo do mause!
{
if(PlayerComTaser[playerid] == 1) //e se ele aperta o botгo direito do mouse, e estiver com o taser equipado ira retorna verdadeiro
{
//usaremos uma funзгo chamada: GetClosestPlayer para verificar se o jogador estб perto de outro jogador, (para usar o taser, assim como usa a faca);
new vitima = GetClosestPlayer(playerid); //comentada na public
if(GetDistanceBetweenPlayers(playerid,vitima) < 2)
{
//nesse intervalo de tempo, o processsador ja verificou se tem player perto do playerid, se tiver acontecerб o "choque"
//if(GetDistanceBetweenPlayers(playerid,vitima) < 2) se o playerid, estiver em uma distancai menor que 2 da vitima o choque irб de acontecer
//ent se a distancia estiver correta retornamos verdeiro
ApplyAnimation(playerid,"KNIFE","knife_3",4.1,0,1,1,0,0,1); //o playerid, vai da o efeito que ele meteu o taser no pescoзo da vitima, (podem muda para 2 ou 1 (tasezada no bucho));
//agora vamos tentar coloca uma animaзгo para a vitimar fica estribuchando...
//Vamos Criar um timerEx, para deixa a vitima estribuchando por 10 segundos;
TimerEstribuchando[vitima] = SetTimerEx("Estribuchando", segundos(1), true, "i", vitima); //1000*1 = 1 segundos, true, pra fica repetindo, quadno chegar a 10, vms para de deixa ele estribuchando
PlayAudioStreamForPlayer(vitima, "https://dl.dropboxusercontent.com/s/ajblgj77pjw7wvl/10convert.com_Som-De-Eletricidade-Audio-Enegia-Eletrica_04EnHH5G2qc.mp3");
}
}
else
{
return 0; // se n tiver com o taser nada acontece, (vc pode optar por nгo usar esse else);
}
}
return 1;
}
PHP код:
stock Estribuchando(vitima) //aqui e a funзгo chamada pelo o timerex: SetTimerEx("Estribuchando", 1000*10, false, "i", vitima);
{
SofrendoChoque[vitima]++; //+1 a cada 1 segundo.
if(SofrendoChoque[vitima] == 18) //se a cada 1 segundo, ira chamar essa stock e a cada segundo ela criara mais um valor, ent se chega a 10, se passaram 10 segundos
//aumentei para 18 pq achei um audio de 18 segundos, um audio de choque, 18 segundos levando choque.
{
SendClientMessage(vitima, -1, "[TASER] De volta а conciкncia");
ClearAnimations(vitima,1); //tiramos a animaзгo da vitima.
StopAudioStreamForPlayer(vitima); //retirar o som de choque, mas ele ira para automaticamente, pq e 18 segundos...
KillTimer(TimerEstribuchando[vitima]);
SofrendoChoque[vitima] = 0;
}
else //se nгo ele vai ficar se estribuchando...
{
//nгo echei uma animaзгo de estribuchando, (quem achar e somente substituir)
ApplyAnimation(vitima, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0); //overdose
//http://www.samp-vicio.tk/2014/07/tut-animacoes.html
new Float:vida; //criamos uma variavel com o valor float, para getar a vida da vitima
GetPlayerHealth(vitima, vida); //getamos
SetPlayerHealth(vitima, vida - 1.0); //aplicamos a vida da vitima em - 10
//a cada 1 segungo ele perderб vida, ao total perderб 18 de life.
//som que upei no dropbox:
//https://www.dropbox.com/home?preview=10convert.com_Som-De-Eletricidade-Audio-Enegia-Eletrica_04EnHH5G2qc.
}
return 1;
}
PHP код:
//a funзгo getclosetplayer, ela verifica o player que estб perto do playerid, e retorna ele!
forward GetClosestPlayer(playerid);
public GetClosestPlayer(p1)
{
new x,Float:dis,Float:dis2,player;
player = -1;
dis = 99999.99;
for (x=0;x<MAX_PLAYERS;x++)
{
if(IsPlayerConnected(x))
{
if(x != p1)
{
dis2 = GetDistanceBetweenPlayers2(x,p1);
if(dis2 < dis && dis2 != -1.00)
{
dis = dis2;
player = x;
}
}
}
}
return player;
}
PHP код:
stock GetDistanceBetweenPlayers(playerid,playerid2) //verifica a distancia entre os players escolhidos e retorna algo
{
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
new Float:tmpdis;
GetPlayerPos(playerid,x1,y1,z1);
GetPlayerPos(playerid2,x2,y2,z2);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
return floatround(tmpdis);
}
PHP код:
//FAZ PARTE DA CHECAGEM
forward Float:GetDistanceBetweenPlayers2(p1,p2);
public Float:GetDistanceBetweenPlayers2(p1,p2)
{
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
{
return -1.00;
}
GetPlayerPos(p1,x1,y1,z1);
GetPlayerPos(p2,x2,y2,z2);
return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}