25/04/2024 15:23
(Esta mensagem foi modificada pela última vez a: 25/04/2024 17:41 por White_Blue.)
(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(playerid, id);
public OnPlayerDisconnect(playerid, reason) {
// É 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(playerid, params[]) {
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", 800, true, "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
IsLocationActive[playerid] = true;
}
else {
// Caso o jogador já estiver localizando alguém e digitar o comando /localizar novamente, a localização é cancelada
RemovePlayerMapIcon(playerid, 0);
IsLocationActive[playerid] = false;
KillTimer(UpdateLocationTimer[playerid]);
}
return 1;
}
public UpdateLocation(playerid, id) {
new Float:X, Float:Y, Float:Z;
GetPlayerPos(id, X, Y, Z); // Pega a posição do jogador sendo localizado e armazena nas variáveis X, Y, Z
SetPlayerMapIcon(playerid, 0, X, Y, Z, 41, 0, MAPICON_GLOBAL); // Coloca um mapicon apenas visível para o jogador localizando na posição do jogador localizado
if(GetDistanceBetweenPlayers(playerid, id) <= 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(playerid, 0);
IsLocationActive[playerid] = false;
KillTimer(UpdateLocationTimer[playerid]);
}
return 1;
}
stock Float:GetDistanceBetweenPlayers(playerid, targetid) {
static Float:X, Float:Y, Float:Z;
GetPlayerPos(targetid, X, Y, Z);
return GetPlayerDistanceFromPoint(playerid, X, Y, Z);
}
Não estou disponível para realizar serviços relacionados ao SA-MP e não costumo responder a mensagens privadas, a menos que estejam relacionadas à moderação do fórum.