public HideAndSeekTimer()
{
// Check that a Hide and Seek game is active, if not exit here
if (HideAndSeekStatus != 1) return 1;
// Check target player id is connected, if not exit here
if (!IsPlayerConnected(ActualHideAndSeekTarget)) return 1;
// Create variables
new Float:TargetPlayerPosX;
new Float:TargetPlayerPosY;
new Float:TargetPlayerPosZ;
new Float:PlayerPosX;
new Float:PlayerPosY;
new Float:PlayerPosZ;
new Float:DistanceBetween;
new Float:a;
new string[256];
// Get target player name
new pname[MAX_PLAYER_NAME];
GetPlayerName(ActualHideAndSeekTarget, pname, sizeof(pname));
// Debug
if (debuglevel > 0) printf("** Hide and Seek Timer -> Target is %s (ID:%d)", pname, ActualHideAndSeekTarget);
// Check if player is in a vehicle
if (IsPlayerInAnyVehicle(ActualHideAndSeekTarget))
{
GetVehiclePos(GetPlayerVehicleID(ActualHideAndSeekTarget), TargetPlayerPosX, TargetPlayerPosY, TargetPlayerPosZ);
}
else
{
GetPlayerPos(ActualHideAndSeekTarget, TargetPlayerPosX, TargetPlayerPosY, TargetPlayerPosZ);
}
// Loop
for (new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
// Check player is connected
if (IsPlayerConnected(playerid))
{
// Check direction updates are enabled
if (DirectionUpdates[playerid] == 1)
{
// Dont give updates to the target player
if (playerid != ActualHideAndSeekTarget)
{
// Debug
if (debuglevel > 0) printf("** Hide and Seek Timer -> ID %d has Direction Updates On", playerid);
// Check if player is in a vehicle
if (IsPlayerInAnyVehicle(playerid))
{
GetVehiclePos(GetPlayerVehicleID(playerid), PlayerPosX, PlayerPosY, PlayerPosZ);
GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
}
else
{
GetPlayerPos(playerid, PlayerPosX, PlayerPosY, PlayerPosZ);
GetPlayerFacingAngle(playerid, a);
}
// Get distance between players
DistanceBetween = GetPointDistanceToPoint(PlayerPosX, PlayerPosY, PlayerPosZ, TargetPlayerPosX, TargetPlayerPosY, TargetPlayerPosZ);
// Format string
format(string, sizeof(string), " ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~n~Distance to~n~%s (ID:%d)~n~%0.2fm", pname, ActualHideAndSeekTarget, DistanceBetween);
// Display distance to player
GameTextForPlayer(playerid, string, 5000, 6);
//a = atan2(TargetPlayerPosX-PlayerPosX, TargetPlayerPosY-PlayerPosY);
new bearing = atan2(PlayerPosX-TargetPlayerPosX, PlayerPosY-TargetPlayerPosY);
if (bearing < 0) bearing = bearing + 360;
// Get pos 5m in front of player
PlayerPosX += (5 * floatsin(-a, degrees));
PlayerPosY += (5 * floatcos(-a, degrees));
// Debug
if (debuglevel > 0) printf("** Hide and Seek Timer -> Bearing %0.2f", bearing);
// Create variable
new objectnumber = CreateObject(1318, PlayerPosX, PlayerPosY, PlayerPosZ, 0, 120, bearing);
// Create object
DirectionObjects[objectnumber] = objectnumber;
// Set a timer to destroy the object
SetTimerEx("DestroyDirectionObject", 5000, 0, "d", objectnumber);
}
}
}
}
// Exit here
return 1;
}