Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MAX_INTERACTION_SLOT 10 // сколько хранить последних взаимодействий
- #define MAX_INTERACTION_TYPE 3 // виды взаимодействий
- new PlayersInteraction_UID[MAX_PLAYERS][MAX_INTERACTION_TYPE][MAX_INTERACTION_SLOT];
- new PlayersInteraction_Time[MAX_PLAYERS][MAX_INTERACTION_TYPE][MAX_INTERACTION_SLOT];
- enum {
- E_INTERACTION_QUEST_MED_CARD,
- E_INTERACTION_QUEST_HALL,
- E_INTERACTION_HALL_KILL_ZOMBIE,
- }
- public OnPlayerConnect(playerid)
- {
- for(new i = 0; i < MAX_INTERACTION_TYPE; i++) {
- for(new j = 0; j < MAX_INTERACTION_SLOT; j++) {
- PlayersInteraction_UID[playerid][i][j] = 0;
- PlayersInteraction_Time[playerid][i][j] = 0;
- }
- }
- #if defined interac_OnPlayerConnect
- return interac_OnPlayerConnect(playerid);
- #else
- return true;
- #endif
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- #define OnPlayerConnect interac_OnPlayerConnect
- #if defined interac_OnPlayerConnect
- forward interac_OnPlayerConnect(playerid);
- #endif
- stock IsPlayerInteraction(playerid, id, type, time) {
- new replace_slot = -1;
- for(new i = 0; i < MAX_INTERACTION_SLOT; i++)
- {
- if(PlayersInteraction_UID[playerid][type][i] == PI[id][pID])
- {
- if(unix-PlayersInteraction_Time[playerid][type][i] < time) {
- // игрок playerid взаимодействовал уже с игроком id за указанный промежуток времени
- return true;
- }
- else {
- // игрок playerid взаимодействовал уже с игроком id, но прошло больше времени чем указано
- // поэтому достаточно заменить время взаимодействия с игроком id
- replace_slot = i;
- break;
- }
- }
- }
- if(replace_slot != -1) {
- // заменяем время взаимодействия с найденным игроком id выше
- /* ("UPDATE `PlayersInteraction` SET `time`='%d' WHERE `playerid_id`='%d' AND `id_uid`='%d';",
- unix,
- PlayersInteraction_UID[playerid][type][replace_slot],
- PlayersInteraction_UID[playerid][type][replace_slot]);
- */
- PlayersInteraction_Time[playerid][type][replace_slot] = unix;
- }
- else {
- // игрок playerid НЕ взаимодействовал с игроком id
- // поэтому ищем пустой слот (чтобы добавить туда игрока), или слот в котором прошло уже указанное время (чтобы заменить в нём игрока)
- for(new i = 0; i < MAX_INTERACTION_SLOT; i++)
- {
- if(PlayersInteraction_Time[playerid][type][i] == 0 || unix-PlayersInteraction_Time[playerid][type][i] >= time) {
- /*
- if(PlayersInteraction_ID[playerid][type][i] == 0) {
- ("INSERT INTO `PlayersInteraction` (`player_uid`,`id_uid`,`type`,`time`) VALUES ('%d','%d','%d','%d');",
- PI[playerid][pID],
- PI[id][pID],
- type,
- unix);
- }
- else {
- ("UPDATE `PlayersInteraction` SET `id_uid`='%d', `time`='%d' WHERE `playerid_id`='%d' AND `id_uid`='%d';",
- PI[id][pID],
- unix,
- PI[playerid][pID],
- PlayersInteraction_UID[playerid][type][i]);
- }
- */
- PlayersInteraction_UID[playerid][type][i] = PI[id][pID];
- PlayersInteraction_Time[playerid][type][i] = unix;
- replace_slot = i;
- break;
- }
- }
- if(replace_slot == -1) {
- // если вдруг было взаимодействие со всеми из массива за указанное время, то заменить просто рандомный слот
- new rand = random(MAX_INTERACTION_SLOT);
- /* ("UPDATE `PlayersInteraction` SET `id_uid`='%d', `time`='%d' WHERE `playerid_id`='%d' AND `id_uid`='%d';",
- PI[id][pID],
- unix,
- PlayersInteraction_UID[playerid][type][rand],
- PlayersInteraction_UID[playerid][type][rand]);
- */
- PlayersInteraction_UID[playerid][type][rand] = PI[id][pID];
- PlayersInteraction_Time[playerid][type][rand] = unix;
- }
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement