Portal SAMP
[Ajuda] Localizar policia - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Localizar policia (/showthread.php?tid=4705)

Páginas: 1 2


Localizar policia - Sr_Nublein - 20/04/2024

Alguem pode me ajuda como que eu crio um sistema de /localizar para policias mas ele so consegue localizar se estiver procurado e vai mostra no minimapa de vermelho


RE: Localizar policia - White_Blue - 20/04/2024

Basta criar um timer que atualiza a cada X segundos e criar um mapicon na posição do player localizado usando a função SetPlayerMapIcon.


RE: Localizar policia - Sr_Nublein - 20/04/2024

Mas qual é a funçao que localiza no player?


RE: Localizar policia - White_Blue - 20/04/2024

(20/04/2024 11:39)Sr_Nublein Escreveu: Mas qual é a funçao que localiza no player?

https://www.open.mp/docs/scripting/functions/GetPlayerPos


RE: Localizar policia - escobarzinhu - 20/04/2024

Código:
CMD:locate(playerid, params[])
{
    new id, procurado, Float:p1, Float:p2, Float:p3;

    if(sscanf(params, "d", id)) return SendClientMessage(playerid, Vermelho, "Use /locate [id]");

    procurado = GetPlayerWantedLevel(id);
    if(procurado == 0)
    {
        SendClientMessage(playerid, -1, "Você não pode localizar um jogador que não está procurado.");
    }
    else
    {
        GetPlayerPos(id, p1, p2, p3);
        SetPlayerCheckpoint(playerid, p1, p2, p3, 2.0);
    }
    return 1;
}
ponha uma funçao para verificar se o player é da policia ou não


RE: Localizar policia - Sr_Nublein - 23/04/2024

como que coloca o timer certo? eu coloquei o timer e ele fico marcando para mim toda hora ao invez do id


RE: Localizar policia - escobarzinhu - 25/04/2024

CMD:locate(playerid, params[])
{
new id, procurado, Float:p1, Float:p2, Float:p3;

if(sscanf(params, "d", id)) return SendClientMessage(playerid, Vermelho, "Use /locate [id]");

procurado = GetPlayerWantedLevel(id);
if(procurado == 0)
{
SendClientMessage(playerid, -1, "Você não pode localizar um jogador que não está procurado.");
}
else
{
GetPlayerPos(id, p1, p2, p3);
SetTimerEx( "Locate", 1200, true, "i",playerid);
SetPlayerCheckpoint(playerid, p1, p2, p3, 2.0);
}
return 1;
}
public Locate(playerid);
public Locate(playerid)
{
new id, Float:p1, Float:p2, Float:p3;
GetPlayerPos(id, p1,p2,p3);
SetPlayerCheckPoint(playerid, p1,p2,p3, 1.0);
return 1;
}


RE: Localizar policia - White_Blue - 25/04/2024

(23/04/2024 18:53)Sr_Nublein Escreveu: como que coloca o timer certo? eu coloquei o timer e ele fico marcando para mim toda hora ao invez do id

É por que você está colocando o especificador no timer para seu ID, não para o ID do jogador que está sendo localizado.

Basta adaptar de acordo com suas necessidades:

Código PHP:
new UpdateLocationTimer[MAX_PLAYERS], bool:IsLocationActive[MAX_PLAYERS];

forward UpdateLocation(playeridid);

public 
OnPlayerDisconnect(playeridreason) {
       
// É importante que sempre cancelemos o timer quando o jogador se desconectar (o mesmo vale para resetar variáveis), para evitar que os valores sejam herdados por outro jogador que se conectar posteriormente (OBS: Utilize a função IsValidTimer aqui para verificar se o timer "UpdateLocationTimer" é válido caso estiver usando o plugin TimerFix ou open.mp)
       
KillTimer(UpdateLocationTimer[playerid]);
       
IsLocationActive[playerid] = false;
       return 
1;
}

CMD:localizar(playeridparams[]) {
    new 
id;

    if(
sscanf(params"u"id)) return SendClientMessage(playerid, -1"/localizar [id]");
    if(!
IsPlayerConnected(id)) return SendClientMessage(playerid, -1"ID não conectado");

    if(!
IsLocationActive[playerid]) {
       
UpdateLocationTimer[playerid] = SetTimerEx("UpdateLocation"800true"ii"playeridid); // Ativa o timer que atualiza a cada 800 milisegundos, e passa os especificadores do ID do jogador atualizando e o ID do jogador sendo localizado para o time
       
IsLocationActive[playerid] = true;
    }
    else {
      
// Caso o jogador já estiver localizando alguém e digitar o comando /localizar novamente, a localização é cancelada
      
RemovePlayerMapIcon(playerid0);
      
IsLocationActive[playerid] = false;
      
KillTimer(UpdateLocationTimer[playerid]);
    }
    return 
1;
}


public 
UpdateLocation(playeridid) {
    new 
Float:XFloat:YFloat:Z;
    GetPlayerPos(idXYZ); // Pega a posição do jogador sendo localizado e armazena nas variáveis X, Y, Z

    
SetPlayerMapIcon(playerid0XYZ410MAPICON_GLOBAL); // Coloca um mapicon apenas visível para o jogador localizando na posição do jogador localizado

    
if(GetDistanceBetweenPlayers(playeridid) <= 8.0) {
        
// Caso a distância entre o jogador localizando e o jogador sendo localizado for menor ou igual a 8.0, remove o ícone do mapa e cancela o timer
        
RemovePlayerMapIcon(playerid0);
        
IsLocationActive[playerid] = false;
        
KillTimer(UpdateLocationTimer[playerid]);
    }
    return 
1;
}

stock Float:GetDistanceBetweenPlayers(playeridtargetid) {
    static Float:XFloat:YFloat:Z;
    GetPlayerPos(targetidXYZ);
    return GetPlayerDistanceFromPoint(playeridXYZ);




RE: Localizar policia - Sr_Nublein - 25/04/2024

se eu por com checkpoint sera que fica bom tambem? ou set map icon é melhor?

funciono mas tem um problema no meu quando ele vai ficar toda hora mundando de lugar o mapicon ele chega em mim e depois ele chega no id que localizei nao sei o por que


RE: Localizar policia - White_Blue - 25/04/2024

(25/04/2024 16:59)Sr_Nublein Escreveu: se eu por com checkpoint sera que fica bom tambem? ou set map icon é melhor?

funciono mas tem um problema no meu quando ele vai ficar toda hora mundando de lugar o mapicon ele chega em mim e depois ele chega no id que localizei nao sei o por que

Eu havia esquecido de colocar o parâmetro de repetição no timer e também havia errado o nome do timer.

Troque a linha:
Código PHP:
UpdateLocationTimer[playerid] = SetTimerEx("Localizar", 800, "ii", playerid, id); // Ativa o timer que atualiza a cada 800 milisegundos, e passa os especificadores do ID do jogador atualizando e o ID do jogador sendo localizado para o time 

Pela linha:
Código PHP:
UpdateLocationTimer[playerid] = SetTimerEx("UpdateLocation"800true"ii"playeridid); // Ativa o timer que atualiza a cada 800 milisegundos, e passa os especificadores do ID do jogador atualizando e o ID do jogador sendo localizado para o time 


Quanto a questão do checkpoint, vai de sua preferência, eu pessoalmente prefiro utilizar mapicon.