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; }