Serve para limitar a velocidade do players do server
CREDITOS:
Blackwave
OBS: So copiei a stock de um tutorial em inglês, de um velocimetro. O resto, eu que fiz.
Antes de começar, coloque no topo:
Agora, coloque no seu OnGameModeInit ou OnFilterScriptInit (GM e FS respectivamente), esse Text3D:
new speed_limit_is_actived[MAX_PLAYERS];#define AMARELO 0xFFFF00FF
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
public OnFilterScriptInit()
{
Create3DTextLabel("RADAR!", AMARELO, 2046.52, 1302.56, 18.83, 100, 0); // 3D label do radar
// 2046.52, 1302.56, 18.83 == coordenadas | 100 a distancia de que pode ser visto | 0 = Virtual world
return 1;}
No OnPlayerCommandText:
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(speedon,7,cmdtext); // Ativar o comando de limite de speed
dcmd(speedoff,8,cmdtext); // Desativar o comando de limite de speed
return 0;
}
E, no OnPlayerUpdate:
public OnPlayerUpdate(playerid)
{
if(IsPlayerInAnyVehicle(playerid)) // Se o jogador estiver em um veiculo qualquer
{
for(new i = 0; i < MAX_PLAYERS; i++) // Para todos os players
{
if(IsPlayerInRangeOfPoint(playerid, 50, 2046.52, 1302.56, 18.83)) // Se estiver há 50m do radar
{
if(speed_limit_is_actived[i]==1) // Se o limite de velocidade estiver ativo
{
new str[128]; // String
new v; v = GetPlayerVehicleID(playerid); // String v, que define o veiculo que o player está
new sp; sp = GetPlayerSpeed(playerid); // Obtem a velocidade do carro do player
//format(str,sizeof(str),"KM/H: %d", sp); // Formata a string com a velocidade obtida (opcinal)
if(sp >= 50) // SP = Speed. Se a velocidade for igual ou maior a 50. "Pode ser mudada"
{
GameTextForPlayer(playerid, "~g~Limite maximo antigido ~r~@", 1000, 5); // Retorna isso
RemovePlayerFromVehicle(playerid); // E isso(remove jogador do carro)
}
}
}
}
return 1;
}
return 1;
}
Dps de todas as callbacks (publics), coloque isto:
dcmd_speedon(playerid,params[])IMPORTANTE:
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(speed_limit_is_actived[i] == 1) return SendClientMessage(playerid, AMARELO, "Limite ja ativado");
else
{
speed_limit_is_actived[i] = 1; // Ativado
SoundForAll(1133);
return SendClientMessageToAll(AMARELO, "@ Limite de velocidade setado para 100km/h");
}
}
}
dcmd_speedoff(playerid,params[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(speed_limit_is_actived[i] == 0) return SendClientMessage(playerid, AMARELO, "Limite já desativado. Ative-o antes");
else
{
speed_limit_is_actived[i] = 0; // Desativado
SoundForAll(1133);
return SendClientMessageToAll(AMARELO, "@ Limite de velocidade desativado!");
}
}
}
stock GetPlayerSpeed(playerid)
{
new Float:ST[4];
if(IsPlayerInAnyVehicle(playerid))
GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 100.3;
return floatround(ST[3]);
}
0 comentários:
Postar um comentário
Nao Divugue Outros Sites