nbdyson

Untitled

May 19th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.20 KB | None | 0 0
  1. #if defined _OnPlayerPause_included
  2.     #endinput
  3. #endif
  4. #define _OnPlayerPause_included
  5.  
  6. #include <a_samp>
  7.  
  8. #define MinTimeWithoutUpdates 6 // Time in seconds after which a player will be considered as paused.
  9. //#define PRINTPAUSE // Define this if you want this script to print messages on your server console. This
  10. //  is useful for example for admin filterscripts.
  11.  
  12. new stock TimeOfLastUpdate[MAX_PLAYERS];
  13. new stock bool:Paused[MAX_PLAYERS];
  14. new stock bool:InClassSelection[MAX_PLAYERS];
  15.  
  16. stock IsPlayerPaused(playerid)
  17. {
  18.     if(Paused[playerid] == true)
  19.     {
  20.         return 1;
  21.     }
  22.     return 0;
  23. }
  24.  
  25. stock IsPlayerInClassSelection(playerid)
  26. {
  27.     if(InClassSelection[playerid] == true)
  28.     {
  29.         return 1;
  30.     }
  31.     return 0;
  32. }
  33.  
  34. #define MinTimeWithoutUpdates2 (MinTimeWithoutUpdates * 1000)
  35.  
  36. forward SearchForNewlyPausedPlayers();
  37. public SearchForNewlyPausedPlayers()
  38. {
  39.     new CurrentTime, PlayerState;
  40.     CurrentTime = GetTickCount();
  41.     for(new i = 0; i < MAX_PLAYERS; i ++)
  42.     {
  43.         if(Paused[i] == false)
  44.         // If the player is already paused, there's no point in calling OnPlayerPause again.
  45.         {
  46.             if(InClassSelection[i] == false)
  47.             // When a player enters the class selection screen, he stops sending updates just
  48.             //  like when he pauses, so we need to know if he's selecting class.
  49.             {
  50.                 if(IsPlayerConnected(i))
  51.                 {
  52.                     if( (CurrentTime - TimeOfLastUpdate[i]) >= MinTimeWithoutUpdates2 )
  53.                     {
  54.                         PlayerState = GetPlayerState(i);
  55.                         if( (PlayerState == PLAYER_STATE_ONFOOT) || (PlayerState == PLAYER_STATE_DRIVER) || (PlayerState == PLAYER_STATE_PASSENGER) )
  56.                         {
  57.                             OnPlayerPause(i);
  58.                         }
  59.                     }
  60.                 }
  61.             }
  62.         }
  63.     }
  64.     return 1;
  65. }
  66.  
  67. forward OnPlayerPause(playerid);
  68. forward OnPlayerUnpause(playerid);
  69.  
  70. static gOnPlPa_HasCB[7];
  71.  
  72. public OnGameModeInit()
  73. {
  74.     SetTimer("SearchForNewlyPausedPlayers", 500, true);
  75.  
  76.     gOnPlPa_HasCB[0] = funcidx("OnPlPa_OnPlayerConnect") != -1;
  77.     gOnPlPa_HasCB[1] = funcidx("OnPlPa_OnPlayerDisconnect") != -1;
  78.     gOnPlPa_HasCB[2] = funcidx("OnPlPa_OnPlayerRequestClass") != -1;
  79.     gOnPlPa_HasCB[3] = funcidx("OnPlPa_OnPlayerSpawn") != -1;
  80.     gOnPlPa_HasCB[4] = funcidx("OnPlPa_OnPlayerUpdate") != -1;
  81.     gOnPlPa_HasCB[5] = funcidx("OnPlPa_OnPlayerPause") != -1;
  82.     gOnPlPa_HasCB[6] = funcidx("OnPlPa_OnPlayerUnpause") != -1;
  83.     if (funcidx("OnPlPa_OnGameModeInit") != -1)
  84.     {
  85.         return CallLocalFunction("OnPlPa_OnGameModeInit", "");
  86.     }
  87.  
  88.     return 1;
  89. }
  90.  
  91. #if defined _ALS_OnGameModeInit
  92.     #undef OnGameModeInit
  93. #else
  94.     #define _ALS_OnGameModeInit
  95. #endif
  96. #define OnGameModeInit OnPlPa_OnGameModeInit
  97. forward OnPlPa_OnGameModeInit();
  98.  
  99. public OnPlayerConnect(playerid)
  100. {
  101.     Paused[playerid] = false;
  102.     InClassSelection[playerid] = false;
  103.  
  104.     if (gOnPlPa_HasCB[0])
  105.     {
  106.         return CallLocalFunction("OnPlPa_OnPlayerConnect", "i",playerid);
  107.     }
  108.     return 1;
  109. }
  110. #if defined _ALS_OnPlayerConnect
  111.     #undef OnPlayerConnect
  112. #else
  113.     #define _ALS_OnPlayerConnect
  114. #endif
  115. #define OnPlayerConnect OnPlPa_OnPlayerConnect
  116. forward OnPlPa_OnPlayerConnect(playerid);
  117.  
  118. public OnPlayerDisconnect(playerid,  reason)
  119. {
  120.     Paused[playerid] = false;
  121.     InClassSelection[playerid] = false;
  122.  
  123.     if (gOnPlPa_HasCB[1])
  124.     {
  125.         return CallLocalFunction("OnPlPa_OnPlayerDisconnect", "ii",playerid,  reason);
  126.     }
  127.     return 1;
  128. }
  129. #if defined _ALS_OnPlayerDisconnect
  130.     #undef OnPlayerDisconnect
  131. #else
  132.     #define _ALS_OnPlayerDisconnect
  133. #endif
  134. #define OnPlayerDisconnect OnPlPa_OnPlayerDisconnect
  135. forward OnPlPa_OnPlayerDisconnect(playerid,  reason);
  136.  
  137. public OnPlayerRequestClass(playerid,  classid)
  138. {
  139.     #if defined PRINTPAUSE
  140.         if(InClassSelection[playerid] == false)
  141.         {
  142.             new NickName[MAX_PLAYER_NAME + 1];
  143.             GetPlayerName( playerid, NickName, sizeof(NickName) );
  144.             printf("[class] %s (id: %i) has entered class selection screen", NickName, playerid);
  145.         }
  146.     #endif
  147.     InClassSelection[playerid] = true;
  148.  
  149.     if (gOnPlPa_HasCB[2])
  150.     {
  151.         return CallLocalFunction("OnPlPa_OnPlayerRequestClass", "ii",playerid,  classid);
  152.     }
  153.     return 1;
  154. }
  155. #if defined _ALS_OnPlayerRequestClass
  156.     #undef OnPlayerRequestClass
  157. #else
  158.     #define _ALS_OnPlayerRequestClass
  159. #endif
  160. #define OnPlayerRequestClass OnPlPa_OnPlayerRequestClass
  161. forward OnPlPa_OnPlayerRequestClass(playerid,  classid);
  162.  
  163. public OnPlayerSpawn(playerid)
  164. {
  165.     InClassSelection[playerid] = false;
  166.     #if defined PRINTPAUSE
  167.         new NickName[MAX_PLAYER_NAME + 1];
  168.         GetPlayerName( playerid, NickName, sizeof(NickName) );
  169.         printf("[spawn] %s (id: %i) has spawned", NickName, playerid);
  170.     #endif
  171.  
  172.     if (gOnPlPa_HasCB[3])
  173.     {
  174.         return CallLocalFunction("OnPlPa_OnPlayerSpawn", "i",playerid);
  175.     }
  176.     return 1;
  177. }
  178. #if defined _ALS_OnPlayerSpawn
  179.     #undef OnPlayerSpawn
  180. #else
  181.     #define _ALS_OnPlayerSpawn
  182. #endif
  183. #define OnPlayerSpawn OnPlPa_OnPlayerSpawn
  184. forward OnPlPa_OnPlayerSpawn(playerid);
  185.  
  186. public OnPlayerUpdate(playerid)
  187. {
  188.     TimeOfLastUpdate[playerid] = GetTickCount();
  189.     if(Paused[playerid] == true)
  190.     // If the player was paused and now he sends an update, it's because he has just resumed his game.
  191.     {
  192.         OnPlayerUnpause(playerid);
  193.     }
  194.  
  195.     if (gOnPlPa_HasCB[4])
  196.     {
  197.         return CallLocalFunction("OnPlPa_OnPlayerUpdate", "i",playerid);
  198.     }
  199.     return 1;
  200. }
  201. #if defined _ALS_OnPlayerUpdate
  202.     #undef OnPlayerUpdate
  203. #else
  204.     #define _ALS_OnPlayerUpdate
  205. #endif
  206. #define OnPlayerUpdate OnPlPa_OnPlayerUpdate
  207. forward OnPlPa_OnPlayerUpdate(playerid);
  208.  
  209. public OnPlayerPause(playerid)
  210. {
  211.     Paused[playerid] = true;
  212.     #if defined PRINTPAUSE
  213.         new NickName[MAX_PLAYER_NAME + 1];
  214.         GetPlayerName( playerid, NickName, sizeof(NickName) );
  215.         printf("[pause] %s (id: %i) has paused", NickName, playerid);
  216.     #endif
  217.  
  218.     if (gOnPlPa_HasCB[5])
  219.     {
  220.         return CallLocalFunction("OnPlPa_OnPlayerPause", "i",playerid);
  221.     }
  222.     return 1;
  223. }
  224. #if defined _ALS_OnPlayerPause
  225.     #undef OnPlayerPause
  226. #else
  227.     #define _ALS_OnPlayerPause
  228. #endif
  229. #define OnPlayerPause OnPlPa_OnPlayerPause
  230. forward OnPlPa_OnPlayerPause(playerid);
  231.  
  232. public OnPlayerUnpause(playerid)
  233. {
  234.     Paused[playerid] = false;
  235.     #if defined PRINTPAUSE
  236.         new NickName[MAX_PLAYER_NAME + 1];
  237.         GetPlayerName( playerid, NickName, sizeof(NickName) );
  238.         printf("[resume] %s (id: %i) has returned from pausing", NickName, playerid);
  239.     #endif
  240.  
  241.     if (gOnPlPa_HasCB[6])
  242.     {
  243.         return CallLocalFunction("OnPlPa_OnPlayerUnpause", "i",playerid);
  244.     }
  245.     return 1;
  246. }
  247. #if defined _ALS_OnPlayerUnpause
  248.     #undef OnPlayerUnpause
  249. #else
  250.     #define _ALS_OnPlayerUnpause
  251. #endif
  252. #define OnPlayerUnpause OnPlPa_OnPlayerUnpause
  253. forward OnPlPa_OnPlayerUnpause(playerid);
Advertisement
Add Comment
Please, Sign In to add comment