12/02/2024 15:13
(Esta mensagem foi modificada pela última vez a: 12/02/2024 15:32 por White_Blue.)
Este código está totalmente mal otimizado e desatualizado. Recomendo o uso de processadores de comando como y_commands ou Pawn.CMD, pois strcmp para criar comandos é muito lento e completamente obsoleto.
Segue um código simplificado utilizando Pawn.CMD, com a verificação de farda em uma função reutilizável (adapte conforme suas necessidades):
Segue um código simplificado utilizando Pawn.CMD, com a verificação de farda em uma função reutilizável (adapte conforme suas necessidades):
Código PHP:
// Esse comando de abordar faria mais sentido ser por ID e não por proximidade para evitar situações em que dois jogadores estão próximos e o policial pode acabar abordando o jogador errado
CMD:abordar(playerid) {
if(!Fardado(playerid)) return SendClientMessage(playerid, -1, "Você não está fardado");
for(new i = 0; i < MAX_PLAYERS; i++) /* Para este tipo de loop recomendo o uso do foreach, basta trocar para foreach(new i : Player) caso esteja usando YSI */ {
if(GetDistanceBetweenPlayers(playerid, i) > 8.0) continue;
format(string, sizeof(string), "[{FFD700}%s][%s] ENCOSTA!! ENCOSTA!! ABORDAGEM DE ROTINA.", corp, PlayerName(playerid));
SendClientMessage(i, COR_AMARELO, string);
}
return 1;
}
// Essa verificação gigante aqui também é completamente desnecessária na minha opinião, faz muito mais sentido criar uma variável booleana para determinar se o jogador está fardado ou não ao invés de todas essas verificações.
stock bool:Fardado(playerid) {
if(GetPlayerSkin(playerid) == 265 ||
GetPlayerSkin(playerid) == 267 ||
GetPlayerSkin(playerid) == 266 ||
GetPlayerSkin(playerid) == 281 ||
GetPlayerSkin(playerid) == 282 ||
GetPlayerSkin(playerid) == 283 ||
GetPlayerSkin(playerid) == 284 ||
GetPlayerSkin(playerid) == 285 ||
GetPlayerSkin(playerid) == 286 ||
GetPlayerSkin(playerid) == 287 ||
GetPlayerSkin(playerid) == 288 ||
GetPlayerSkin(playerid) == 289 ||
GetPlayerSkin(playerid) == 306 ||
GetPlayerSkin(playerid) == 307 ||
GetPlayerSkin(playerid) == 308 ||
GetPlayerSkin(playerid) == 309 ||
GetPlayerSkin(playerid) == 310 ||
GetPlayerSkin(playerid) == 311) return true;
return false;
}
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.