[Tutorial] Criando uma arma de choque (taser)
#1

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(
!= 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);

E O TUTORIAL EU CRIEI NO SUBLIME (CRIANDO E COMENTANDO, ENTГO EU GARANTO QUE VOCКS ENTENDERAM OQUE ESTБ COMENTADO).

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(playerid0); //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(playerid01864260.060.010.08180.00.00.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(playeridnewkeysoldkeys)
{
    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.010000); //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(vitimavida); //getamos
        
SetPlayerHealth(vitimavida 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(
!= 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));

Reply
#2

+REP
Reply
#3

COMO CONVERTO PRO MEU GAMEMODE? LA TEM POLICIA.
Reply
#4

'-' men ai so e tu ir colocando no seu gm, a public ketstate etc, stock e as novas publics coloquem no final do gamemode(seila)
Reply
#5

Faltou explicar a GetDistanceBetweenPlayers2, GetDistanceBetweenPlayers, GetClosestPlayer.

E melhora o tуpico.


Razoбvel.
Reply
#6

nao gostei
Reply
#7

Quote:
Originally Posted by SerjaumBerranteiro
Посмотреть сообщение
COMO CONVERTO PRO MEU GAMEMODE? LA TEM POLICIA.
Puta que pariu...

Se o gamemode й seu vocк sabe pow


pega a variavel da profissгo e bota no inicio dos cmds para sу os PMs puderem usar.
Reply
#8

Quote:
Originally Posted by SerjaumBerranteiro
Посмотреть сообщение
COMO CONVERTO PRO MEU GAMEMODE? LA TEM POLICIA.
Eu aumentei pra tirar mais vida, seloco man kk me amarrei nisso vei, kk seloco fico foda meu..
Coloquei pra policial, fiz nada praticamente, so dei o ctrl c e ctrl v. Vou grava um vнdeo de como o boneco fica kk, ele fica gemendo e saindo vida man, e massa.
Reply
#9

Quote:
Originally Posted by ThiagoMikael
Посмотреть сообщение
Eu aumentei pra tirar mais vida, seloco man kk me amarrei nisso vei, kk seloco fico foda meu..
Coloquei pra policial, fiz nada praticamente, so dei o ctrl c e ctrl v. Vou grava um vнdeo de como o boneco fica kk, ele fica gemendo e saindo vida man, e massa.
Grava e bota aqui pra nos ver.
Reply
#10

Quote:
Originally Posted by ThiagoMikael
Посмотреть сообщение
Eu aumentei pra tirar mais vida, seloco man kk me amarrei nisso vei, kk seloco fico foda meu..
Coloquei pra policial, fiz nada praticamente, so dei o ctrl c e ctrl v. Vou grava um vнdeo de como o boneco fica kk, ele fica gemendo e saindo vida man, e massa.
Vlw bicho <3 tmj.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)