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

RASTAMAN
Великий Гуру

С помощью этой системы можно ограничить время бездействия игрока. Также просто просматривать время бездействия игрока.
Введя команду /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 пользователей онлайн

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

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

    • ВасилийСталин
      От ВасилийСталин
      50% СКИДКА РОВНО 3 ДНЯ, ДО: 25.09.2025. 12:00 ПО МСК
       
       
      Здравствуйте уважаемые форумчане!
      Выкладываю на продажу мод написанный с нуля Fox rp. Мод имеет много красивого 3д маппинга, систем по типу квестов, динамического текста над актерами во время общения с ними, система загрязнения транспорта (имеется маппинг автомойки) мод подходит под основу и нуждается в доработках.
      В комплекте с модом вы получаете:
      1. Игровую сборку в которую входит:
      1.1. AVF плагин
      1.2. Приватные модели авто и скинов
      1.3. Под все транспортные средства были реалистично изменены настройки скорости и физика авто
      1.4. Изменены звуки
      !!! Чтобы скачать сборку нужно открыть txt файл в папке с модом там будет ссылка на сборку
      2. Игровой мод:
      2.1. Мод
      2.2. cef. Уже подключен на веб хостинг при необходимости можно заменить
      Мод будет дорабатываться и опубликовываться на этом форуме, ценник будет выше но если купите мод то доплачивать не придется, сможете сразу скачать новую версию.
       
      Связь: vk.com/nastelectric
       
    • ВасилийСталин
      От ВасилийСталин


      Скачать файл Fox rp | Уникальный мод с 0 под открытие | СКИДКА 50%
      50% СКИДКА РОВНО 3 ДНЯ, ДО: 25.09.2025. 12:00 ПО МСК
       
       
      Здравствуйте уважаемые форумчане!
      Выкладываю на продажу мод написанный с нуля Fox rp. Мод имеет много красивого 3д маппинга, систем по типу квестов, динамического текста над актерами во время общения с ними, система загрязнения транспорта (имеется маппинг автомойки) мод подходит под основу и нуждается в доработках.
      В комплекте с модом вы получаете:
      1. Игровую сборку в которую входит:
      1.1. AVF плагин
      1.2. Приватные модели авто и скинов
      1.3. Под все транспортные средства были реалистично изменены настройки скорости и физика авто
      1.4. Изменены звуки
      !!! Чтобы скачать сборку нужно открыть txt файл в папке с модом там будет ссылка на сборку
      2. Игровой мод:
      2.1. Мод
      2.2. cef. Уже подключен на веб хостинг при необходимости можно заменить
      Мод будет дорабатываться и опубликовываться на этом форуме, ценник будет выше но если купите мод то доплачивать не придется, сможете сразу скачать новую версию.
       
      Связь: vk.com/nastelectric
       
      Добавил ВасилийСталин Добавлено 14.08.2025 Категория Моды Автор Abeme  
    • Senwik
      От Senwik
      Всем здравствуйте, я тут решил сделать свой крмп сервер, и у меня возник вопрос, где можно достать кэш для лаунчера и сервера, как настроить лаунчер, чтоб кэш скачивался в нужное место и игра могла нормально работать. 
      P.S. Если подскажете, где можно прочитать по данной теме, то будет вообще класс, всем бобра