paused.inc 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //VERSION 2.1
  2. #define ACCURACY 500 //Lowering this it will make it more accurate, but it could use more CPU. (Do not lower it above 500 MS)
  3. forward C_Paused(playerid);
  4. forward OnPlayerPause(playerid);
  5. forward OnPlayerUnPause(playerid);
  6. new g_Paused[MAX_PLAYERS];
  7. new g_Timer[MAX_PLAYERS];
  8. new bool:g_Requesting[MAX_PLAYERS];
  9. new bool:g_IsPaused[MAX_PLAYERS];
  10. P_OnPlayerConnect(playerid)
  11. {
  12. g_IsPaused[playerid] = false;
  13. g_Requesting[playerid] = false;
  14. g_Timer[playerid] = SetTimerEx("C_Paused", ACCURACY, 1, "i", playerid);
  15. return 1;
  16. }
  17. P_OnPlayerUpdate(playerid)
  18. {
  19. g_Paused[playerid] = GetTickCount();
  20. return 1;
  21. }
  22. P_OnPlayerRequestClass(playerid)
  23. {
  24. g_Requesting[playerid] = true;
  25. g_IsPaused[playerid] = false;
  26. return 1;
  27. }
  28. P_OnPlayerDisconnect(playerid)
  29. {
  30. KillTimer(g_Timer[playerid]);
  31. g_Requesting[playerid] = false;
  32. g_IsPaused[playerid] = false;
  33. return 1;
  34. }
  35. P_OnPlayerSpawn(playerid)
  36. {
  37. g_Requesting[playerid] = false;
  38. g_IsPaused[playerid] = false;
  39. return 1;
  40. }
  41. public C_Paused(playerid)
  42. {
  43. if(GetTickCount()-g_Paused[playerid] > ACCURACY && g_Requesting[playerid] != true && g_IsPaused[playerid] != true && InvalidStates(playerid) != 1)
  44. {
  45. OnPlayerPause(playerid);
  46. g_IsPaused[playerid] = true;
  47. }
  48. else if(GetTickCount()-g_Paused[playerid] < ACCURACY && g_Requesting[playerid] != true && g_IsPaused[playerid] != false && InvalidStates(playerid) != 1)
  49. {
  50. OnPlayerUnPause(playerid);
  51. g_IsPaused[playerid] = false;
  52. }
  53. return 1;
  54. }
  55. stock IsPlayerPaused(playerid)
  56. {
  57. return g_IsPaused[playerid];
  58. }
  59. stock InvalidStates(playerid)
  60. {
  61. new pState = GetPlayerState(playerid);
  62. if(pState == 0 || pState == 7)
  63. {
  64. return 1;
  65. }
  66. else
  67. {
  68. return 0;
  69. }
  70. }