Portal SAMP
[Ajuda] ajuda a tirar uma duvida - 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] ajuda a tirar uma duvida (/showthread.php?tid=3800)



ajuda a tirar uma duvida - LOS_SANTOS - 17/07/2023

galera vcs que sao bem mais entendido no assunto para eu detectar se um player esta proximo de um outro player qualquer se usa o proxdetector ne? esse detector de aproximacao ele e uma funcao nativa do samp ou pra ele funcionar eu preciso baixar alguma include para essa funcao funcionar ? essa e minha duvida porq criei esse comando mais como ainda nao estou em casa nao testei nem compilei pra saber se tinha algum erro

CMD:reparar(playerid, const params[])
{
    //new id;
if(sscanf(params, "u", id)) return SendClientMessage(playerid, amarelo, ">>Use: /reparar[id]<<");
    //if(playerid == id) return SendClientMessage(playerid, vermelho, "* Você não pode reparar seu propio carro!");
if(ProxDetectorS(8.0, playerid, playerid)return SendClientMessage(playerid,vermelho,"esse jogador nao esta proximo de voce.");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid,amarelo,"esse jogador nao esta conectado.");
    new Float:health;
    new veh = GetPlayerVehicleID(playerid);
    GetVehicleHealth(veh, health);
    RepairVehicle(GetPlayerVehicleID(playerid));
    if(health > 500) return SendClientMessage(playerid, vermelho, ">>este veiculo nao precisa de reparo ainda!<<");
    SetVehicleHealth(veh, 1000);
    return 1;
}


RE: ajuda a tirar uma duvida - White_Blue - 18/07/2023

(17/07/2023 23:13)LOS_SANTOS Escreveu: galera vcs que sao bem mais entendido no assunto para eu detectar se um player esta proximo de um outro player qualquer se usa o proxdetector ne? esse detector de aproximacao ele e uma funcao nativa do samp ou pra ele funcionar eu preciso baixar alguma include para essa funcao funcionar ? essa e minha duvida porq criei esse comando mais como ainda nao estou em casa nao testei nem compilei pra saber se tinha algum erro

CMD:reparar(playerid, const params[])
{
    //new id;
if(sscanf(params, "u", id)) return SendClientMessage(playerid, amarelo, ">>Use: /reparar[id]<<");
    //if(playerid == id) return SendClientMessage(playerid, vermelho, "* Você não pode reparar seu propio carro!");
if(ProxDetectorS(8.0, playerid, playerid)return SendClientMessage(playerid,vermelho,"esse jogador nao esta proximo de voce.");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid,amarelo,"esse jogador nao esta conectado.");
    new Float:health;
    new veh = GetPlayerVehicleID(playerid);
    GetVehicleHealth(veh, health);
    RepairVehicle(GetPlayerVehicleID(playerid));
    if(health > 500) return SendClientMessage(playerid, vermelho, ">>este veiculo nao precisa de reparo ainda!<<");
    SetVehicleHealth(veh, 1000);
    return 1;
}

Teste a função abaixo, não testei mas creio que irá funcionar.

Código PHP:
Float:GetDistanceBetweenPlayers(playeridplayerid2Float:radius) {
      new Float:pos[3], distance;

      GetPlayerPos(playerid2pos[0], pos[1], pos[2]);

      distance GetPlayerDistanceFromPoint(playeridpos[0], pos[1], pos[2]);

      if(distance <= radius) return 1;
      return 0;


Seu código reformulado com a função:
Código PHP:
CMD:reparar(playerid, const params[])
{
   new id;
   if(sscanf(params"u"id)) return SendClientMessage(playeridamarelo">>Use: /reparar[id]<<");

   if(!GetDistanceBetweenPlayers(playeridid8.0)) return SendClientMessage(playerid,vermelho,"esse jogador nao esta proximo de voce.");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid,amarelo,"esse jogador nao esta conectado.");
    new Float:health;
    new veh GetPlayerVehicleID(id);
    GetVehicleHealth(vehhealth);
    RepairVehicle(GetPlayerVehicleID(id));
    if(health 500) return SendClientMessage(playeridvermelho">>este veiculo nao precisa de reparo ainda!<<");
    SetVehicleHealth(veh1000);
    return 1;
}

stock Float:GetDistanceBetweenPlayers(playeridplayerid2Float:radius) {
      new Float:pos[3], distance;

      GetPlayerPos(playerid2pos[0], pos[1], pos[2]);

      distance GetPlayerDistanceFromPoint(playeridpos[0], pos[1], pos[2]);

      if(distance <= radius) return 1;
      return 0;


Vale lembrar que você estava verificando se o jogador estava próximo dele mesmo, não do outro jogador e estava consertando o veículo do playerid(O veículo da própria pessoa que executa o comando) não do ID digitado.


RE: ajuda a tirar uma duvida - xbruno1000x - 18/07/2023

Cara, eu te enviei um exemplo de código e enviei a função ProxDetector junto... está lá no outro tópico. Não crie mais de um tópico com um mesmo assunto.


RE: ajuda a tirar uma duvida - LOS_SANTOS - 18/07/2023

(18/07/2023 02:03)xbruno1000x Escreveu: Cara, eu te enviei um exemplo de código e enviei a função ProxDetector junto... está lá no outro tópico. Não crie mais de um tópico com um mesmo assunto.

foi sim bruno eu so quis saber de algo novo tipo eu queria saber se esse proxdetector se ele e uma funcao nativa do samp ou se precisava de alguma include so isso , agradeço pelo seu codigo foi útil para mim porq quando eu for crisr novos codigos eu usaria ele para saber se um determinado player estsria proximo tendeu , tipo se eu quiser usar um comando de dargrana a um player e ele nao tivesse proximo de mim , no caso eu usando o codigo dargrana receberia uma mensagem dizendo vc nao esta proclximo a esse player , era so isso , se essa funcao proxdetector se serviria para isso mas obg e peço  desculpa se fiz algo errado ou se eu nao soube se explicar


RE: ajuda a tirar uma duvida - xbruno1000x - 18/07/2023

ProxDetector não é função nativa, toda vez que precisar inserir a função no gamemode ela não será nativa. Mas uma vez inserida, ela funciona em qualquer lugar do gamemode, idêntica as funções nativas.

Sobre o erro no código que enviei:
A parte do giveplayer é apenas para pegar o nome do jogador. Se você tiver alguma função como GetPlayerNameEx é até melhor substituir. Mas caso queira manter, basta criar uma variável new giveplayer[MAX_PLAYER_NAME]; e new sendername[MAX_PLAYER_NAME];


RE: ajuda a tirar uma duvida - White_Blue - 18/07/2023

(18/07/2023 15:12)xbruno1000x Escreveu: ProxDetector não é função nativa, toda vez que precisar inserir a função no gamemode ela não será nativa. Mas uma vez inserida, ela funciona em qualquer lugar do gamemode, idêntica as funções nativas.

Sobre o erro no código que enviei:
A parte do giveplayer é apenas para pegar o nome do jogador. Se você tiver alguma função como GetPlayerNameEx é até melhor substituir. Mas caso queira manter, basta criar uma variável new giveplayer[MAX_PLAYER_NAME]; e new sendername[MAX_PLAYER_NAME];

Apenas para complementar, a função GetPlayerNameEx é muito útil e poupa muita memória do servidor pelo fato de você não ter que declarar uma variável toda vez que quiser retornar o nome do jogador como uma string.

Aqui está a função GetPlayerNameEx:

Código PHP:
stock GetPlayerNameEx(playerid) {
     static 
Name[MAX_PLAYER_NAME];
     
GetPlayerName(playeridNameMAX_PLAYER_NAME);
     return 
Name;
}

// Exemplo de uso
if(!strcmp(GetPlayerNameEx(playerid), "Joao")) return SendClientMessage(playerid, -1"Olá, João!"); // Verifica se o nome do jogador é "João" e retorna uma mensagem caso o nome for João 



RE: ajuda a tirar uma duvida - LOS_SANTOS - 18/07/2023

vlw pela explicação foi muito útil para mim