В теме 1 сообщение

С помощью этой системы можно ограничить время бездействия игрока. Также просто просматривать время бездействия игрока.
Введя команду /setafk - можно получить меню настроек, где можно настроить время определения AFK (время определения - время, через которое, над головой игрока появляется 3D Text о том, что игрок находится в AFK). Также можно включить/выключить кик за долгое AFK. Время кика Вы можете также настроить, введя команду/setafk. 
При первом запуске скрипта - в папке scriptfiles создастся файл "OP_AFK_Dostup.cfg". В этом файле, через переход на другую строку, можно прописывать ники игроков, кому разрешён доступ к изменению режимов AFK.

Спойлер

#define DAFK 1360
#define COLOR_WHITE 0xFFFFFFFF

 

Спойлер

new afkoprtime = 120, bool:afkkick,afktime[MAX_PLAYERS],afkmaxtime = 1800, bool:afksystem = true;

 

Спойлер

new File:_File_Open = fopen("OP_AFK_Dostup.cfg", io_read);
if(_File_Open) fclose(_File_Open);
else
{
new File:_File_Create = fopen("OP_AFK_Dostup.cfg", io_write);
fclose(_File_Create);
print("Файл \"OP_AFK_Dostup.cfg\" не был найден. Файл был создан системой.");
}

 

Спойлер

SetTimerEx("@AFKUpdate", 10000, false, "i", playerid);
afktime[playerid] = 0;

 

Спойлер

afktime[playerid] = 0 && 0;

 

Спойлер

if(!strcmp(cmdtext, "/setafk", true))
{
   if(!DostupYes(playerid)) return 1;
   new string[300];
format(string, sizeof(string), "Функция\tЗначение\nВремя определения AFK\t{0000FF}%d секунд",afkoprtime);
new _afkkick[90];
if(afkkick == true) format(_afkkick, sizeof(_afkkick), "\nКик за долгое AFK\t{00FF00}Включено\nКоличество секунд в AFK до кика\t{0000FF}%d секунд", afkmaxtime) ,strcat(string, _afkkick);
else strcat(string, "\nКик за долгое AFK\t{FF0000}Выключено");
ShowPlayerDialog(playerid, DAFK, DIALOG_STYLE_LIST, "Система AFK",string,"Далее","Назад");
       return 1;
}
if(!strcmp(cmdtext, "/afkon", true) || !strcmp(cmdtext, "/afkoff", true))
{
   if(!DostupYes(playerid)) return 1;
   if(afksystem == true) afksystem = false, ShowPlayerDialog(playerid, DAFK+3, DIALOG_STYLE_MSGBOX, "AFK-система", "Вы выключили AFK-систему.\nИгроки смогут стоять в AFK сколько захотят.\nНад никами игроков не будет показано время AFK.", "Понятно","");
else if(afksystem == false)
{
afksystem = true;
new string[150];
format(string, sizeof(string), "Вы включили AFK-систему.\nНад никами игроков, при бездействии, появится\nтекст, показывающий время, находящееся игроком в AFK.\nТекст над никами появится в течении %d секунд.", afkoprtime);
ShowPlayerDialog(playerid, DAFK+3, DIALOG_STYLE_MSGBOX, "AFK-система", string, "Понятно", "");
return 1;
}
return 1;
}

 

Спойлер

afktime[playerid] = 0;

 

Спойлер

switch(dialogid)
{
     case DAFK:
   {
if(!response) return 1;
switch(listitem)
{
   case 0: return ShowPlayerDialog(playerid, DAFK+1, DIALOG_STYLE_INPUT, "Время определения AFK", "Введите новое время определения AFK.\n\nСтандартное время: 120 секунд.\nНельзя вводить число, менее 60 секунд.\nВремя вводится в секундах.","Далее","Отмена");
case 1:
{
if(afkkick == false) return ShowPlayerDialog(playerid, DAFK+2, DIALOG_STYLE_MSGBOX, "Кик за AFK", "Вы хотите включить кик за долгое AFK?\n\nВремя, за которое игрок будет кикнут - можно изменить.\nСтандартное время = 1800 секунд.", "Далее","Назад");
else return ShowPlayerDialog(playerid, DAFK+2, DIALOG_STYLE_MSGBOX, "Кик за AFK", "Вы хотите выключить кик за долгое AFK?\n\nИгрок сможет стоять в AFK сколько захочет.", "Далее","Назад");
}
case 2: return ShowPlayerDialog(playerid, DAFK+4, DIALOG_STYLE_INPUT, "Время кика за AFK", "Введите новое время определения AFK.\n\nСтандартное время: 1800 секунд.\nНельзя вводить число, менее 120 секунд.\nНельзя вводить время, менее времени по определению AFK.\nВремя вводится в секундах.","Далее","Отмена");
}
   return 1;
   }
   case DAFK+1:
{
   if(!response) return OnPlayerCommandText(playerid, "/setafk");
if(!strlen(inputtext) || strval(inputtext) < 60) return ShowPlayerDialog(playerid, DAFK+1, DIALOG_STYLE_INPUT, "Время определения AFK", "Введите новое время определения AFK.\n\nСтандартное время: 120 секунд.\nНельзя вводить число, менее 60 секунд.\nВремя вводится в секундах.","Далее","Отмена");
afkoprtime = strval(inputtext);
return 1;
}
case DAFK+2:
{
   if(!response) return OnPlayerCommandText(playerid, "/setafk");
afkkick = (afkkick == false) ? true : false;
   OnPlayerCommandText(playerid, "/setafk");
   return 1;
}
case DAFK+3: return 1;
case DAFK+4:
{
if(!response) return OnPlayerCommandText(playerid, "/setafk");
if(!strlen(inputtext) || strval(inputtext) < 120 || strval(inputtext) < afkoprtime) return ShowPlayerDialog(playerid, DAFK+4, DIALOG_STYLE_INPUT, "Время кика за AFK", "Введите новое время определения AFK.\n\nСтандартное время: 1800 секунд.\nНельзя вводить число, менее 120 секунд.\nНельзя вводить время, менее времени по определению AFK.\nВремя вводится в секундах.","Далее","Отмена");
afkmaxtime = strval(inputtext);
return 1;
}
}

 

Спойлер

@AFKUpdate(playerid);
@AFKUpdate(playerid)
{
if(afksystem == false) goto AFKTIMER;
afktime[playerid]++;
new string[20];
if(afktime[playerid] > afkoprtime) format(string,sizeof(string),"[AFK] %d секунд",afktime[playerid]), SetPlayerChatBubble(playerid,string,0xFFFFFFAA,10.0,1000);
if(afkkick == true && afktime[playerid] >= afkmaxtime) SendClientMessage(playerid, COLOR_WHITE, "[{0000FF}AFK{FFFFFF}] Вы были кикнуты за долгое бездействие (AFK)."), KickEx(playerid);
AFKTIMER: SetTimerEx("@AFKUpdate", 1000, false, "i", playerid);
return 1;
}
stock KickEx(playerid) return SetTimerEx("@KicK", 100, false, "i", playerid);
@KicK(playerid);
@KicK(playerid) return Kick(playerid);

stock DostupYes(playerid)
{
new nameplayerid[MAX_PLAYER_NAME];
GetPlayerName(playerid, nameplayerid, MAX_PLAYER_NAME);
new File:_File_Open = fopen("OP_AFK_Dostup.cfg", io_read);
if(_File_Open)
{
   new and[128];
   while(fread(_File_Open, and)) if(!strcmp(nameplayerid, and, true)) return 1;
   fclose(_File_Open);
}
else return print("Файл \"OP_AFK_Dostup.cfg\" не был создан. Вы можете создать файл вручную или перезапустить скрипт.") && 0;
return 0;
}

 

Спойлер

   post-3703-0-13365300-1442432842_thumb.jpg.51ea24b63d62bbd17693f4c2d6c691f3.jpgpost-3703-0-20049400-1442432841_thumb.jpg.95119ad2d27fd2eb8066ef6566ad32ee.jpgpost-3703-0-23128900-1442432840_thumb.jpg.7858782ccd8f3dcbc3b8b3779f5d0ff6.jpgpost-3703-0-61957800-1442432841_thumb.jpg.3821a81efe0c3f5337e88d484e6faba5.jpgpost-3703-0-68359000-1442432838_thumb.jpg.bb58989aa2ed626d91008b62d28b45d3.jpgpost-3703-0-69487300-1442432840_thumb.jpg.ead5a4208bf49bcf8a90367c0cfcaa1a.jpgpost-3703-0-72018300-1442432837_thumb.jpg.7c883e2193ca1e13a94e7e38ff7f336c.jpg

Автор: Oleg_Petrow

Отредактировано пользователем RASTAMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • gooding
      От gooding


      Скачать файл ELITE RP | МОД БОНУСНОГО ПРОЕКТА
      Доброго времени суток, уважаемые читатели, я выставил на продажу мод ELITE RP !
      Что же в этом моде уникального?
      - Работы из реальной жизни. (Яндекс Еда  CDEK  Инкассатор)
      - Кланы. (Тиктокеры, Блоггеры, Хамы, Министры, Звери, Сосиски, Сладкие, Ублюдки, Цари и Прокуроры)
      - Радужный, Мигающий клист.
      - Донат-плюшки.
      - Неон на автомобиль, Supreme-наклейка.
      - Брони-транспорт.
      - Кейсы. (SILVER, MEGA, SUPER)
      - ДМ-зона.
      - Эксклюзивные аксессуары.
      - Lamborgini Gold.
      - Новые мафии. (ОПГ)
      - Привилегии для машины. (10.000 HP, телепортация личного транспорта)
      - Система банкоматов.
      - Таксопарки. (VIP-класса и Business)
      - Уникальная система управления личным транспортом. (/cars)
      - Новая система казино.
      - Свой маппинг.
      И многое другое!

      Мод будет дополняться!
      Добавил gooding Добавлено 20.04.2024 Категория Моды Автор gooding  
    • tivan666ban
      От tivan666ban
      Скажите пожалуйста почему этот код(знаю что ещё не допиленный) 
      выдаёт эти ошибки