Sistema de Abordagem -
MateGPlay - 28.09.2018
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(playerid, COLOR_GREY, " Vocк nгo й um policial!");
return true;
}
if(OnDuty[playerid] != 1)
{
SendClientMessage(playerid, COLOR_GREY, " Vocк nгo Bateu o cartгo!");
return true;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Use: /abordar [id]");
return true;
}
giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(WantedPoints[giveplayerid] == 0)
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, " Este jogador nгo estб sendo procurado!");
return true;
}
if(Abordagem[giveplayerid] == 1)
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, " O jogador ja estб sendo Abordado.");
return true;
}
if(VozDePrisao[giveplayerid] == 1)
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, " O jogador jб sendo perseguido.");
return true;
}
if (ProxDetectorS(9.0, playerid, giveplayerid))
{
if(giveplayerid == playerid) { SendClientMessage(playerid, COLOR_GREY, "Vocк nгo pode abordar se abordar."); return 1; }
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "[POLICIA] O jogador %s tem 15s para se render.", giveplayer);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "[POLICIA] Se o jogador nгo se render inicie uma perseguiзгo com o comando /vdp [id]");
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "Vocк foi abordado pelo policial %s[%d] e tem 15s para se render.", sendername, playerid);
SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
GameTextForPlayer(playerid, " ~r~Policia, ~b~Pare ", 5000, 3);
format(string, sizeof(string), " Digite /render para se render.", sendername, playerid);
SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
SetTimerEx("Abordagemm", 15000, 0, "ii", playerid, giveplayerid);
Abordagem[giveplayerid] = 1;
}
else
SendClientMessage(playerid, COLOR_LIGHTBLUE, " Jogador estб longe de vocк");
return true;
}
}
}
}
PHP Code:
if(strcmp(cmd, "/render", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(Abordagem[playerid] == 0)
{
SendClientMessage(playerid, COLOR_ORANGE, " Vocк nгo esta sendo abordado.");
return true;
}
if(Abordagem[playerid] == 1)
{
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_HANDSUP);
Rendido[playerid] = 1;
SetTimerEx("Rendidoo", segundos(30), 0, "i", playerid);
return true;
}
}
}
Re: Sistema de Abordagem -
GSantana - 28.09.2018
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(playerid, pos[0], pos[1], pos[2]);//pega a pos do player
for(new i; i < MAX_PLAYERS; i ++)//lop para a mensagem
{
if(IsPlayerInRangeOfPoint(i, 10, pos[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!");
}
}
}
Re: Sistema de Abordagem -
AutoMatic2 - 29.09.2018
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
Re: Sistema de Abordagem -
GSantana - 29.09.2018
olhб irmгo se precisar de ajuda ou ficou confuso o meio que lhe expliquei me avise que faзo o comando para vocк
Re: Sistema de Abordagem -
Malandrin - 29.09.2018
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(playerid, COLOR_GREY, "Vocк nгo й um policial!"); //Verifica se o player й um COP
if(OnDuty[playerid] != 1) return SendClientMessage(playerid, COLOR_GREY, "Vocк nгo Bateu o cartгo!"); //Verifica se bateu o cartгo
if(sscanf(params, "u", idAbordado)) return SendClientMessage(playerid, COLOR_GREY, "Use /abordar (ID)"); //Caso ele digite somente /abordar irб aparecer essa mensagem "[...]/abordar (id)"
if(!ProxDetector_Jogador(15.0, playerid, idAbordado) return SendClientMessage(playerid, COLOR_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", 40000, false, "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(playerid, COLOR_GREY, "Vocк nгo estб sendo abordado"); //Verifica se a variбvel estб setado a 0, se estiver irб cortar o comando.
format(String, sizeof(String)), "O Jogador se rendeu!"); //Formata a "String"
Rendeu[playerid] = 1; //Seta a variбvel em 1
TogglePlayerControllable(playerid, false); //Congela ele (Use TogglePlayerControlabble(playerid, true) para descongelar)
ProxDetector_Ao_Falar(20.0, playerid, String, ROXO_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(playerid, PegandoNick, 24);
if(Rendeu[playerid] == 0) //Caso ele nao tenha se rendido
{
SetPlayerWantedLevel(playerid, 3); //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:radi, playerid, targetid)
{
if(IsPlayerConnected(playerid)&&IsPlayerConnected(targetid))
{
new Float:posx, Float:posy, Float:posz;
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
//radi = 2.0; //Trigger Radius
GetPlayerPos(targetid, posx, posy, posz);
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:radi, playerid, string[], col1, col2, col3, col4, col5)
{
new Float:oldposx, Float:oldposy, Float:oldposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(GetPlayerVirtualWorld(i) == GetPlayerVirtualWorld(playerid) && GetPlayerInterior(i) == GetPlayerInterior(playerid))
{
if(IsPlayerInRangeOfPoint(i, radi/16,oldposx, oldposy, oldposz)) SendClientMessage(i, col1, string);
else if(IsPlayerInRangeOfPoint(i, radi/8,oldposx, oldposy, oldposz)) SendClientMessage(i, col2, string);
else if(IsPlayerInRangeOfPoint(i, radi/4,oldposx, oldposy, oldposz)) SendClientMessage(i, col3, string);
else if(IsPlayerInRangeOfPoint(i, radi/2,oldposx, oldposy, oldposz)) SendClientMessage(i, col4, string);
else if(IsPlayerInRangeOfPoint(i, radi,oldposx, oldposy, oldposz)) SendClientMessage(i, col5, string);
}
}
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
Re: Sistema de Abordagem -
MateGPlay - 30.09.2018
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.