| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- //VERSION 2.1
- #define ACCURACY 500 //Lowering this it will make it more accurate, but it could use more CPU. (Do not lower it above 500 MS)
- forward C_Paused(playerid);
- forward OnPlayerPause(playerid);
- forward OnPlayerUnPause(playerid);
- new g_Paused[MAX_PLAYERS];
- new g_Timer[MAX_PLAYERS];
- new bool:g_Requesting[MAX_PLAYERS];
- new bool:g_IsPaused[MAX_PLAYERS];
- P_OnPlayerConnect(playerid)
- {
- g_IsPaused[playerid] = false;
- g_Requesting[playerid] = false;
- g_Timer[playerid] = SetTimerEx("C_Paused", ACCURACY, 1, "i", playerid);
- return 1;
- }
- P_OnPlayerUpdate(playerid)
- {
- g_Paused[playerid] = GetTickCount();
- return 1;
- }
- P_OnPlayerRequestClass(playerid)
- {
- g_Requesting[playerid] = true;
- g_IsPaused[playerid] = false;
- return 1;
- }
- P_OnPlayerDisconnect(playerid)
- {
- KillTimer(g_Timer[playerid]);
- g_Requesting[playerid] = false;
- g_IsPaused[playerid] = false;
- return 1;
- }
- P_OnPlayerSpawn(playerid)
- {
- g_Requesting[playerid] = false;
- g_IsPaused[playerid] = false;
- return 1;
- }
- public C_Paused(playerid)
- {
- if(GetTickCount()-g_Paused[playerid] > ACCURACY && g_Requesting[playerid] != true && g_IsPaused[playerid] != true && InvalidStates(playerid) != 1)
- {
- OnPlayerPause(playerid);
- g_IsPaused[playerid] = true;
- }
- else if(GetTickCount()-g_Paused[playerid] < ACCURACY && g_Requesting[playerid] != true && g_IsPaused[playerid] != false && InvalidStates(playerid) != 1)
- {
- OnPlayerUnPause(playerid);
- g_IsPaused[playerid] = false;
- }
- return 1;
- }
- stock IsPlayerPaused(playerid)
- {
- return g_IsPaused[playerid];
- }
- stock InvalidStates(playerid)
- {
- new pState = GetPlayerState(playerid);
- if(pState == 0 || pState == 7)
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
|