[Ajuda] Sistema de Abordagem
#1

Criei um sistema de abordagem mas estou com alguns problemas: Quando o policial aborda o procurado e ele se Rende era para mandar uma mensagem para o policial em que o procurado se rendeu e desativar o settimerex da abordagem, mas nгo sei como fazer isso

PHP Code:
    if(strcmp(cmd"/abordar"true) == 0)
    {
       if(
IsPlayerConnected(playerid))
        {
            if(!
IsACop(playerid))
            {
                
SendClientMessage(playeridCOLOR_GREY"   Vocк nгo й um policial!");
                return 
true;
            }
            if(
OnDuty[playerid] != 1)
            {
                
SendClientMessage(playeridCOLOR_GREY"   Vocк nгo Bateu o cartгo!");
                return 
true;
            }
            
tmp strtok(cmdtextidx);
            if(!
strlen(tmp))
            {
                
SendClientMessage(playeridCOLOR_LIGHTBLUE"Use: /abordar [id]");
                return 
true;
            }
            
giveplayerid ReturnUser(tmp);
            if(
IsPlayerConnected(giveplayerid))
            {
                if(
giveplayerid != INVALID_PLAYER_ID)
                {
                    if(
WantedPoints[giveplayerid] == 0)
                    {
                        
SendClientMessage(playeridCOLOR_LIGHTBLUE"   Este jogador nгo estб sendo procurado!");
                        return 
true;
                    }
                    if(
Abordagem[giveplayerid] == 1)
                    {
                        
SendClientMessage(playeridCOLOR_LIGHTBLUE"  O jogador ja estб sendo Abordado.");
                        return 
true;
                    }
                    if(
VozDePrisao[giveplayerid] == 1)
                    {
                     
SendClientMessage(playeridCOLOR_LIGHTBLUE"  O jogador jб sendo perseguido.");
                     return 
true;
                     }
                    if (
ProxDetectorS(9.0playeridgiveplayerid))
                    {
                        if(
giveplayerid == playerid) { SendClientMessage(playeridCOLOR_GREY"Vocк nгo pode abordar se abordar."); return 1; }
                        
GetPlayerName(giveplayeridgiveplayersizeof(giveplayer));
                        
GetPlayerName(playeridsendernamesizeof(sendername));
                        
format(stringsizeof(string), "[POLICIA] O jogador %s tem 15s para se render."giveplayer);
                        
SendClientMessage(playeridCOLOR_LIGHTBLUEstring);
                        
format(stringsizeof(string), "[POLICIA] Se o jogador nгo se render inicie uma perseguiзгo com o comando /vdp [id]");
                        
SendClientMessage(playeridCOLOR_LIGHTBLUEstring);
                        
format(stringsizeof(string), "Vocк foi abordado pelo policial %s[%d] e tem 15s para se render."sendernameplayerid);
                        
SendClientMessage(giveplayeridCOLOR_LIGHTBLUEstring);
                        
GameTextForPlayer(playerid"  ~r~Policia, ~b~Pare "50003);
                        
format(stringsizeof(string), "    Digite /render para se render."sendernameplayerid);
                        
SendClientMessage(giveplayeridCOLOR_LIGHTBLUEstring);
                        
SetTimerEx("Abordagemm"150000"ii"playeridgiveplayerid);
                        
Abordagem[giveplayerid] = 1;
                        }
                        else
                        
SendClientMessage(playeridCOLOR_LIGHTBLUE"   Jogador estб longe de vocк");
                        return 
true;
                    }
                }
            }
        } 
PHP Code:
if(strcmp(cmd"/render"true) == 0)
   {
    if(
IsPlayerConnected(playerid))
        {
   if(
Abordagem[playerid] == 0)
       {
    
SendClientMessage(playeridCOLOR_ORANGE"   Vocк nгo esta sendo abordado.");
    return 
true;
    }
    if(
Abordagem[playerid] == 1)
    {
    
SetPlayerSpecialAction(playeridSPECIAL_ACTION_HANDSUP);
    
Rendido[playerid] = 1;
    
SetTimerEx("Rendidoo"segundos(30), 0"i"playerid);
    return 
true;
    }
  }

Reply
#2

vou te dar a faca e o queijo, sу adaptar isso em seu cуdigo

PHP Code:
new tTimer;//variavel para armazenar o timer
tTimer SetTimerEx("Rendidoo"segundos(30), 0"i"playerid);//cria o timer
KillTimer(tTimer);// destroi o timer
new Float:pos[3];//variavel para pegar a pos do player
GetPlayerPos(playeridpos[0], pos[1], pos[2]);//pega a pos do player
for(new iMAX_PLAYERS++)//lop para a mensagem
{
 if(
IsPlayerInRangeOfPoint(i10pos[0], pos[1], pos[2])) //troca 10 pela area que o player tem que tar pra manda a mensagem
 
{
  if(
policial >= 1)//coloca aqui a variavel que verifica se o player й policial ou nгo
  
{
  
SendClientMessage(i, -1"O Meliante se rendeu!");
  }
 }

Reply
#3

Faзa um comando com uma variбvel = 1 й um SetTimerEx faзa a public com nome do Timer e coloque a variбvel = 0 sу isso. Depende do que quer fazer

No caso se o timer acabar й a variбvel й zerada ou o cara se rende й o timer/variбvel zera tbm
Reply
#4

olhб irmгo se precisar de ajuda ou ficou confuso o meio que lhe expliquei me avise que faзo o comando para vocк
Reply
#5

Fiz issa na correria com o intuito de lhe dar uma base.

PHP Code:
//Topo Da GM
new 
    
Abordando[MAX_PLAYERS],
    
Rendeu[MAX_PLAYERS]
;    
if(
strcmp(cmd"/abordar"true) == 0
{
    new 
        
idAbordado
    
;
    if(!
IsACop(playerid)) return SendClientMessage(playeridCOLOR_GREY"Vocк nгo й um policial!");  //Verifica se o player й um COP
    
if(OnDuty[playerid] != 1) return SendClientMessage(playeridCOLOR_GREY"Vocк nгo Bateu o cartгo!"); //Verifica se bateu o cartгo
    
if(sscanf(params"u"idAbordado)) return SendClientMessage(playeridCOLOR_GREY"Use /abordar (ID)");  //Caso ele digite somente /abordar irб aparecer essa mensagem "[...]/abordar (id)"
    
if(!ProxDetector_Jogador(15.0playerididAbordado) return SendClientMessage(playeridCOLOR_GREY"Vocк estб longe demais do suspeito."); //Se vocк nгo estiver em um raio de "15.0" do suspeito o comando nao irб para frente.
    
Abordando[id] = 1//Seta a variбvel como 1, que significa que ele recebeu o sinal para parar.
    
SetTimerEx("AbordagemContador"40000false"i"idAbordado); //Cria o timer do Player abordado
    
return 1;
}
if(
strcmp(cmd"/render"true) == 0
{
    new 
        
String[126]
    ;
    if(
Abordando[playerid] == 0) return SendClientMessage(playeridCOLOR_GREY"Vocк nгo estб sendo abordado"); //Verifica se a variбvel estб setado a 0, se estiver irб cortar o comando.
    
format(Stringsizeof(String)), "O Jogador se rendeu!"); //Formata a "String"
    
Rendeu[playerid] = 1//Seta a variбvel em 1
    
TogglePlayerControllable(playeridfalse); //Congela ele (Use TogglePlayerControlabble(playerid, true) para descongelar)
    
ProxDetector_Ao_Falar(20.0playeridStringROXO_BEM_CLARO,ROXO_BEM_CLARO,ROXO_BEM_CLARO,ROXO_BEM_CLARO,ROXO_BEM_CLARO); //Manda mensagem para todos em um raio de 20.0
    
return 1;
}
forward AbordagemContador(playerid);
public 
AbordagemContador(playerid//Public do conometro
{
    new 
        
PegandoNick[24]
    ;
    
GetPlayerName(playeridPegandoNick24);
    if(
Rendeu[playerid] == 0//Caso ele nao tenha se rendido
    
{
        
SetPlayerWantedLevel(playerid3); //Seta leveis de procura no suspeito.
        
SendClientMessageToAll(COLOR_GREY"O Jogador %s nгo parou na abordagem e estб sendo perseguido"PegandoNick);
    }
    return 
1;
}
//Coloca no final da sua GM
ProxDetector_Jogador(Float:radiplayeridtargetid)
{
    if(
IsPlayerConnected(playerid)&&IsPlayerConnected(targetid))
    {
        new 
Float:posxFloat:posyFloat:posz;
        new 
Float:oldposxFloat:oldposyFloat:oldposz;
        new 
Float:tempposxFloat:tempposyFloat:tempposz;
        
GetPlayerPos(playeridoldposxoldposyoldposz);
        
//radi = 2.0; //Trigger Radius
        
GetPlayerPos(targetidposxposyposz);
        
tempposx = (oldposx -posx);
        
tempposy = (oldposy -posy);
        
tempposz = (oldposz -posz);
        
//printf(" - [%d/%d/%d]: DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
        
if (((tempposx radi) && (tempposx > -radi)) && ((tempposy radi) && (tempposy > -radi)) && ((tempposz radi) && (tempposz > -radi)))
        {
            return 
true;
        }
    }
    return 
true;
}
ProxDetector_Falar(Float:radiplayeridstring[], col1col2col3col4col5)
{
    new 
Float:oldposxFloat:oldposyFloat:oldposz;
    
GetPlayerPos(playeridoldposxoldposyoldposz);
    for(new 
i=0i<MAX_PLAYERSi++)
    {
        if(
GetPlayerVirtualWorld(i) == GetPlayerVirtualWorld(playerid) && GetPlayerInterior(i) == GetPlayerInterior(playerid))
        {
            if(
IsPlayerInRangeOfPoint(iradi/16,oldposxoldposyoldposz)) SendClientMessage(icol1string);
            else if(
IsPlayerInRangeOfPoint(iradi/8,oldposxoldposyoldposz)) SendClientMessage(icol2string);
            else if(
IsPlayerInRangeOfPoint(iradi/4,oldposxoldposyoldposz)) SendClientMessage(icol3string);
            else if(
IsPlayerInRangeOfPoint(iradi/2,oldposxoldposyoldposz)) SendClientMessage(icol4string);
            else if(
IsPlayerInRangeOfPoint(iradi,oldposxoldposyoldposz)) SendClientMessage(icol5string);
        }
    }
    return 
true;

Vocк deve estudar ou entгo adaptar na sua GM, pode ter erros e se tiver uma dъvida sу comentar.

@EDIT: Vocк vai precisar da include SSCANF2
@EDIT: os cуdigos dos Proximidades Detector nгo sгo meus, apenas tenho anotado em um bloquinho :P
Reply
#6

O problema de desativar o timer consegui resolver.
Mas ficou o outro quando o procurado se rende, nгo sei como fazer para enviar a mensagem ao policial que o abordou, que o procurado se rendeu.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)