| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- // This global timer runs every second and checks if a player is about to fail his mission (by getting out of his vehicle during a job)
- forward GlobalTimer();
- public GlobalTimer()
- {
- // Setup local variables
- new OldVehicleID, NewVehicleID, OldTrailerID, NewTrailerID;
- // Loop through all players
- for (new playerid; playerid < MAX_PLAYERS; playerid++)
- {
- // Check if this player is logged in
- if (APlayerData[playerid][LoggedIn] == true)
- {
- // Get the vehicle-id's from this player
- OldVehicleID = APlayerData[playerid][VehicleID];
- NewVehicleID = GetPlayerVehicleID(playerid);
- OldTrailerID = APlayerData[playerid][TrailerID];
- NewTrailerID = GetVehicleTrailer(GetPlayerVehicleID(playerid));
- // Check the class of the player
- switch (APlayerData[playerid][PlayerClass])
- {
- case ClassTruckDriver:
- {
- // Check if the trucker has a job
- if (APlayerData[playerid][JobStarted] == true)
- {
- // Check if the vehicletimer didn't run out yet
- if (APlayerData[playerid][VehicleTimerTime] != 0)
- {
- // If VehicleID and TrailerID are still the same as when the player accepted the job
- if ((OldVehicleID == NewVehicleID) && (OldTrailerID == NewTrailerID))
- APlayerData[playerid][VehicleTimerTime] = Job_TimeToFailMission; // Reset the time before the mission fails
- else // One (or both) aren't still the same (player lost his trailer or vehicle)
- PlayerLeftVehicle(playerid); // Inform the player that he left his vehicle and that he must re-enter it
- }
- else // Time left has reached 0
- FailJob(playerid);
- }
- }
- case ClassBusDriver:
- {
- // Check if the busdriver has a job
- if (APlayerData[playerid][JobStarted] == true)
- {
- if (APlayerData[playerid][VehicleTimerTime] != 0)
- {
- // If VehicleID is still the same as when the player accepted the job
- if (OldVehicleID == NewVehicleID)
- APlayerData[playerid][VehicleTimerTime] = Job_TimeToFailMission; // Reset the time before the mission fails
- else // Player got out of his bus
- PlayerLeftVehicle(playerid); // Inform the player that he left his vehicle and that he must re-enter it
- }
- else // Time left has reached 0
- FailJob(playerid);
- }
- }
- case ClassMafia:
- {
- // Check if the mafia has a job
- if (APlayerData[playerid][JobStarted] == true)
- {
- if (APlayerData[playerid][VehicleTimerTime] != 0)
- {
- // If VehicleID is still the same as when the player accepted the job
- if (OldVehicleID == NewVehicleID)
- APlayerData[playerid][VehicleTimerTime] = Job_TimeToFailMission; // Reset the time before the mission fails
- else // Player left his vehicle
- PlayerLeftVehicle(playerid); // Inform the player that he left his vehicle and that he must re-enter it
- }
- else // Time left has reached 0
- FailJob(playerid);
- }
- }
- case ClassCourier:
- {
- // Check if the courier has a job
- if (APlayerData[playerid][JobStarted] == true)
- {
- if (APlayerData[playerid][VehicleTimerTime] != 0)
- {
- // If VehicleID and TrailerID are still the same as when the player accepted the job
- if (OldVehicleID == NewVehicleID)
- APlayerData[playerid][VehicleTimerTime] = Job_TimeToFailMission; // Reset the time before the mission fails
- else // Player stepped out of his vehicle
- PlayerLeftVehicle(playerid); // Inform the player that he left his vehicle and that he must re-enter it
- }
- else // Time left has reached 0
- FailJob(playerid);
- }
- }
- case ClassRoadWorker:
- {
- // Check if the roadworker has a job
- if (APlayerData[playerid][JobStarted] == true)
- {
- // Check if the vehicletimer didn't run out yet
- if (APlayerData[playerid][VehicleTimerTime] != 0)
- {
- // If VehicleID and TrailerID are still the same as when the player accepted the job
- // In case of the "tow broken vehicle" jobtype, the mission starts without a trailer (so it's 0),
- // but gets updated when the player enters the checkpoint to set the broken vehicle as trailer
- if ((OldVehicleID == NewVehicleID) && (OldTrailerID == NewTrailerID))
- APlayerData[playerid][VehicleTimerTime] = Job_TimeToFailMission; // Reset the time before the mission fails
- else // VehicleID isn't still the same (player lost his vehicle or trailer)
- PlayerLeftVehicle(playerid); // Inform the player that he left his vehicle and that he must re-enter it
- }
- else // Time left has reached 0
- FailJob(playerid);
- }
- }
- }
- }
- }
- return 1;
- }
- // This function is called by the global vehicletimer to fail a job
- FailJob(playerid)
- {
- // Check the class of the player
- switch (APlayerData[playerid][PlayerClass])
- {
- case ClassTruckDriver:
- {
- // End the player's job
- Trucker_EndJob(playerid);
- // If the player is part of a convoy, kick him from it (as he failed his mission, the rest of the convoy would be stuck)
- Convoy_Leave(playerid);
- }
- case ClassBusDriver:
- {
- // End the player's job
- BusDriver_EndJob(playerid);
- }
- case ClassMafia:
- {
- // End the player's job
- Mafia_EndJob(playerid);
- }
- case ClassCourier:
- {
- // End the player's job
- Courier_EndJob(playerid);
- }
- case ClassRoadWorker:
- {
- // End the player's job
- Roadworker_EndJob(playerid);
- }
- }
- // Inform the player that he failed the mission
- GameTextForPlayer(playerid, TXT_FailedMission, 5000, 4);
- // Reduce the player's cash by 1000
- RewardPlayer(playerid, -1000, 0);
- }
- // This function is used by the global vehicletimer and informs the player that he left his vehicle and must re-enter it
- PlayerLeftVehicle(playerid)
- {
- // Setup local variables
- new TimeLeft[5];
- // Reduce the time left by 1
- APlayerData[playerid][VehicleTimerTime] = APlayerData[playerid][VehicleTimerTime] - 1;
- // Convert the time left to a string for displaying
- valstr(TimeLeft, APlayerData[playerid][VehicleTimerTime]);
- // Display the time left
- GameTextForPlayer(playerid, TimeLeft, 1000, 4);
- // Send only one message to inform the player what he must do
- if (APlayerData[playerid][VehicleTimerTime] == (Job_TimeToFailMission - 1))
- {
- // Check the class of the player and inform them what to do
- switch (APlayerData[playerid][PlayerClass])
- {
- case ClassTruckDriver:
- SendClientMessage(playerid, 0xFFFFFFFF, TXT_TruckerMustEnterVehicle);
- case ClassBusDriver:
- SendClientMessage(playerid, 0xFFFFFFFF, TXT_BusDriverMustEnterBus);
- case ClassMafia:
- SendClientMessage(playerid, 0xFFFFFFFF, TXT_MafiaMustEnterVehicle);
- case ClassCourier:
- SendClientMessage(playerid, 0xFFFFFFFF, TXT_CourierMustEnterVehicle);
- case ClassRoadWorker:
- SendClientMessage(playerid, 0xFFFFFFFF, TXT_RoadworkerMustEnterVehicle);
- }
- }
- }
|