ykos

Untitled

Oct 22nd, 2021
949
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define MAX_INTERACTION_SLOT    10      // сколько хранить последних взаимодействий
  2. #define MAX_INTERACTION_TYPE    3       // виды взаимодействий
  3.  
  4. new PlayersInteraction_UID[MAX_PLAYERS][MAX_INTERACTION_TYPE][MAX_INTERACTION_SLOT];
  5. new PlayersInteraction_Time[MAX_PLAYERS][MAX_INTERACTION_TYPE][MAX_INTERACTION_SLOT];
  6.  
  7.  
  8. enum {
  9.     E_INTERACTION_QUEST_MED_CARD,
  10.     E_INTERACTION_QUEST_HALL,
  11.     E_INTERACTION_HALL_KILL_ZOMBIE,
  12. }
  13.  
  14. public OnPlayerConnect(playerid)
  15. {
  16.     for(new i = 0; i < MAX_INTERACTION_TYPE; i++) {
  17.         for(new j = 0; j < MAX_INTERACTION_SLOT; j++) {
  18.             PlayersInteraction_UID[playerid][i][j] = 0;
  19.             PlayersInteraction_Time[playerid][i][j] = 0;
  20.         }
  21.     }
  22.    
  23.     #if defined interac_OnPlayerConnect
  24.         return interac_OnPlayerConnect(playerid);
  25.     #else
  26.         return true;
  27.     #endif
  28. }
  29.  
  30. #if defined _ALS_OnPlayerConnect
  31.     #undef OnPlayerConnect
  32. #else
  33.     #define _ALS_OnPlayerConnect
  34. #endif
  35. #define OnPlayerConnect interac_OnPlayerConnect
  36. #if defined interac_OnPlayerConnect
  37.     forward interac_OnPlayerConnect(playerid);
  38. #endif
  39.  
  40. stock IsPlayerInteraction(playerid, id, type, time) {
  41.     new replace_slot = -1;
  42.     for(new i = 0; i < MAX_INTERACTION_SLOT; i++)
  43.     {
  44.         if(PlayersInteraction_UID[playerid][type][i] == PI[id][pID])
  45.         {
  46.             if(unix-PlayersInteraction_Time[playerid][type][i] < time) {
  47.                 // игрок playerid взаимодействовал уже с игроком id за указанный промежуток времени
  48.  
  49.                 return true;
  50.             }
  51.             else {
  52.                 // игрок playerid взаимодействовал уже с игроком id, но прошло больше времени чем указано
  53.                 // поэтому достаточно заменить время взаимодействия с игроком id
  54.  
  55.                 replace_slot = i;
  56.                 break;
  57.             }
  58.         }
  59.     }
  60.  
  61.     if(replace_slot != -1) {
  62.         // заменяем время взаимодействия с найденным игроком id выше
  63.  
  64.         /* ("UPDATE `PlayersInteraction` SET `time`='%d' WHERE `playerid_id`='%d' AND `id_uid`='%d';",
  65.                 unix,
  66.                 PlayersInteraction_UID[playerid][type][replace_slot],
  67.                 PlayersInteraction_UID[playerid][type][replace_slot]);     
  68.         */ 
  69.    
  70.         PlayersInteraction_Time[playerid][type][replace_slot] = unix;
  71.     }
  72.     else {
  73.         // игрок playerid НЕ взаимодействовал с игроком id
  74.  
  75.         // поэтому ищем пустой слот (чтобы добавить туда игрока), или слот в котором прошло уже указанное время (чтобы заменить в нём игрока)
  76.         for(new i = 0; i < MAX_INTERACTION_SLOT; i++)
  77.         {
  78.             if(PlayersInteraction_Time[playerid][type][i] == 0 || unix-PlayersInteraction_Time[playerid][type][i] >= time) {
  79.                 /*
  80.                 if(PlayersInteraction_ID[playerid][type][i] == 0) {
  81.                     ("INSERT INTO `PlayersInteraction` (`player_uid`,`id_uid`,`type`,`time`) VALUES ('%d','%d','%d','%d');",
  82.                         PI[playerid][pID],
  83.                         PI[id][pID],
  84.                         type,
  85.                         unix);     
  86.                 }
  87.                 else {
  88.                     ("UPDATE `PlayersInteraction` SET `id_uid`='%d', `time`='%d' WHERE `playerid_id`='%d' AND `id_uid`='%d';",
  89.                         PI[id][pID],
  90.                         unix,
  91.                         PI[playerid][pID],
  92.                         PlayersInteraction_UID[playerid][type][i]);        
  93.                 }
  94.                 */
  95.                 PlayersInteraction_UID[playerid][type][i] = PI[id][pID];
  96.                 PlayersInteraction_Time[playerid][type][i] = unix;
  97.                 replace_slot = i;
  98.                 break;
  99.             }
  100.         }
  101.        
  102.         if(replace_slot == -1) {
  103.             // если вдруг было взаимодействие со всеми из массива за указанное время, то заменить просто рандомный слот
  104.  
  105.            
  106.             new rand = random(MAX_INTERACTION_SLOT);
  107.  
  108.             /* ("UPDATE `PlayersInteraction` SET `id_uid`='%d', `time`='%d' WHERE `playerid_id`='%d' AND `id_uid`='%d';",
  109.                     PI[id][pID],
  110.                     unix,
  111.                     PlayersInteraction_UID[playerid][type][rand],
  112.                     PlayersInteraction_UID[playerid][type][rand]);     
  113.             */
  114.  
  115.             PlayersInteraction_UID[playerid][type][rand] = PI[id][pID];
  116.             PlayersInteraction_Time[playerid][type][rand] = unix;
  117.         }
  118.     }
  119.     return false;
  120. }
RAW Paste Data