Yaroslav_Magiev

Strix RP Test

Mar 4th, 2021 (edited)
245
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*Переменные, массивы, енумы*/
  2. enum dialogs {
  3.     d_select_spawn = 10,
  4.     d_menu_members = 30
  5. };
  6.  
  7. enum players {
  8.     id,
  9.     rang,
  10.     skin,
  11.     fraction_id,#ид фракции
  12.     vacation_type[64],#тип отпуска/пропуска/прогула
  13.     vacation_value[128],#значение отпуска/пропуска/прогула
  14. };
  15. new PI[MAX_PLAYERS][players];
  16.  
  17. #define MAX_FRACTIONS 3 #максиимальное количество фрак + 1 нулевая (без фраки)
  18. enum fractions {
  19.     id,#ид фракции
  20.     name[128], #название фракции
  21.     start_work_time[2], #два элемента массива начала раб.дня (часы и минуты)
  22.     end_work_time[2], #два элемента массива конца раб.дня (часы и минуты)
  23.     start_dinner_time[2], ##два элемента массива начала обеда (часы и минуты)
  24.     end_dinner_time[2] #два элемента массива конца обеда (часы и минуты)
  25. };
  26. new FI[MAX_FRACTIONS][fractions] = {
  27.     {0, "Отсутствует", {00, 00}, {00, 00}, {00, 00}, {00, 00}},
  28.     {1, "Полиция ПГТ Бусаево", {10, 00}, {18, 00},{12, 00}, {13, 00}},
  29.     {2, "Администрация ПГТ Бусаево", {10, 00}, {18, 00}, {12, 00}, {13, 00}},
  30. };
  31.  
  32. public OnPlayerConnect(playerid)
  33. {
  34.     /*Тут пропускаем все проверки и сразу приступаем к спавну*/
  35.     new str_dialog[256];
  36.     format(str_dialog, sizeof(str_dialog), "- База вашей организации {ff6600}[%s]\n- Место проживания {ff6600}[%s]",
  37.     (IsCanPlayerFinishWorkDay(playerid)) ? ("{228B22}Раб.день окончен"):("{#FF0000}Раб.день НЕ окончен"),
  38.     (IsCanPlayerFinishWorkDay(playerid)) ? ("{228B22}Возможно"):("{#FF0000}Невозможно"));
  39.     ShowPlayerDialog(playerid, d_select_spawn, DIALOG_STYLE_LIST, "Где желаете появится?", str_dialog, "Выбрать", "Выйти");
  40. }
  41.  
  42. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  43. {
  44.     switch(dialogid)
  45.     {
  46.         case d_select_spawn: {
  47.             if(!response) return Kick(playerid);
  48.             if(listitem == 0)
  49.             {
  50.                 #Спавним игрока во фраке
  51.             }
  52.             else if(listitem == 1)
  53.             {
  54.                 if(IsCanPlayerFinishWorkDay(playerid))
  55.                 {
  56.                     #спавним игрока во фраке
  57.                 }
  58.                 else спавним игрока дома
  59.             }
  60.         }
  61.         case d_menu_members: {
  62.             if(!response) return true;
  63.             ShowPlayerDialog(playerid, d_menu_members+1, DIALOG_STYLE_INPUT, "Действие на сотрудником Offline",
  64.             "Введите NickName сотрудника из предыдущего списка", "Далее", "Закрыть");
  65.         }
  66.         case d_menu_members+1: {
  67.             if(!response) return true;
  68.             SetPVarString(playerid, "SELECT_PLAYERS_NAME", inputtext);
  69.             ShowPlayerDialog(playerid, d_menu_members+2, DIALOG_STYLE_LIST, "Действие на сотрудником Offline",
  70.             "- Дать отпуск до определенного дня\n- Дать уйти по-раньше", "Выбрать", "Закрыть");
  71.         }
  72.         case d_menu_members+2: {
  73.             if(!response) return true;
  74.             switch(listitem)
  75.             {
  76.                 case 0: {
  77.                     ShowPlayerDialog(playerid, d_menu_members+3, DIALOG_STYLE_INPUT, "Введите дату конца отгула",
  78.                     "Введите дату до которой у сотрудника будет отгул\nФормат: дд.мм.гг\n\nПример: 26.04.21", "Выбрать", "Закрыть");              
  79.                 }
  80.                 case 1: {
  81.                     ShowPlayerDialog(playerid, d_menu_members+4, DIALOG_STYLE_INPUT, "Введите время начала отгула",
  82.                     "Введите время, когда сотрудник может покинуть раб.день.\nФормат: чч:мм\n\nПример: 16:00", "Выбрать", "Закрыть");              
  83.                 }
  84.             }
  85.         }
  86.         case d_menu_members+3: {
  87.             if(!response) return DeletePVar(playerid, "SELECT_PLAYERS_NAME");
  88.             mysql_format(database, query, sizeof(query), "UPDATE `users` SET 'vacation_type' =  '%s', 'vacation_value' = '%s' WHERE 'name' = '%s'", "until_day", inputtext, GetPVarString(playerid, "SELECT_PLAYERS_NAME"));
  89.             if(mysql_query(database, query)) return SendClientMessage(playerid, 0xff77ffff, "Вы успешно выдали выдали отгул!");
  90.             else return SendClientMessage(playerid, 0xff77ffff, "Ошибка!");          
  91.         }
  92.         case d_menu_members+4: {
  93.             if(!response) return DeletePVar(playerid, "SELECT_PLAYERS_NAME");
  94.             mysql_format(database, query, sizeof(query), "UPDATE `users` SET 'vacation_type' =  '%s', 'vacation_value' = '%s' WHERE 'name' = '%s'", "until_time", inputtext, GetPVarString(playerid, "SELECT_PLAYERS_NAME"));
  95.             if(mysql_query(database, query)) return SendClientMessage(playerid, 0xff77ffff, "Вы успешно выдали выдали отгул!");
  96.             else return SendClientMessage(playerid, 0xff77ffff, "Ошибка!");          
  97.         }  
  98.     }
  99. }
  100.  
  101. stock IsCanPlayerFinishWorkDay(playerid)
  102. {
  103.     new hour,minute,second;
  104.     gettime(hour,minute,second);
  105.     new frac_id = PI[playerid][fraction_id];
  106.    
  107.     new start_work_hour, start_work_minute;
  108.     start_work_hour = FI[frac_id][start_work_time][0];
  109.     start_work_minute = FI[frac_id][start_work_time][1];
  110.    
  111.     new end_work_hour, end_work_minute;
  112.     end_work_hour = FI[frac_id][end_work_time][0];
  113.     end_work_minute = FI[frac_id][end_work_time][1];
  114.  
  115.     new start_dinner_hour, start_dinner_minute;
  116.     start_dinner_hour = FI[frac_id][start_dinner_time][0];
  117.     start_dinner_minute = FI[frac_id][start_dinner_time][1];
  118.    
  119.     new end_dinner_hour, end_dinner_minute;
  120.     end_dinner_hour = FI[frac_id][end_dinner_time][0];
  121.     end_dinner_minute = FI[frac_id][end_dinner_time][1];
  122.    
  123.     if(((hour < start_work_hour && minute < start_work_minute) || (hour > end_work_hour && minute > end_work_minute)) || ((hour < start_dinner_hour && minute < start_dinner_minute) || (hour > end_dinner_hour && minute > end_dinner_minute)))
  124.     {
  125.         return true;
  126.     }
  127.     else
  128.     {
  129.         new v_type = PI[playerid][vacation_value];
  130.         new v_value = PI[playerid][vacation_value];
  131.         if(strcmp(v_type, "until_time") == 0) #Если отгул ДО ОПРЕДЕЛЕННОГО ВРЕМЕНИ
  132.         {
  133.             new until_hour, until_minute;
  134.             sscanf(v_value , " p<:>dd", until_hour, until_minute)
  135.             if(hour < until_hour && minute < until_minute) return true;
  136.             else return false;
  137.         }
  138.         else if(strcmp(v_type, "until_day") == 0) #Если отгул ДО ОПРЕДЕЛЕННОГО ДНЯ
  139.         {
  140.             new year, month,day;
  141.             getdate(year, month, day)
  142.             new date[64];
  143.             format(date, sizeof(date), "%02d.%02d.%d", day, month, year);
  144.             if(strcmp(v_value, date) == 0) return false;
  145.             else return true;
  146.         }
  147.     }
  148. }
  149.  
  150. CMD:memlist(playerid)
  151. {
  152.     if(PI[playerid][rang] < 8) return SendClientMessage(playerid, 0xff0066ff, "Недоступно!");
  153.     new query[128];    
  154.     mysql_format(database, query, sizeof(query), "SELECT * FROM `users` WHERE `fraction_id` = '%d'", PI[playerid][fraction_id]);
  155.     mysql_query_callback(database, query, "MemberList", "d", playerid);
  156. }
  157.  
  158. forward MembersList(playerid);
  159. {
  160.     new rows, fields;
  161.     cache_get_data(rows, fields);
  162.     if(rows)
  163.     {
  164.         new str_dialog[1024];
  165.         new str_strcat[154];
  166.         format(str_strcat, sizeof(str_strcat), "{808080}ID {FFFFFF}- {008000}NickName {FFFFFF}- {20B2AA}Ранг {FFFFFF}- {FFD700}Скин");
  167.         strcat(str_dialog, str_strcat);
  168.         for(new i; i <= rows; i++)
  169.         {
  170.             format(str_strcat, sizeof(str_strcat), "{808080}%d {FFFFFF}- {008000}%s {FFFFFF}- {20B2AA}%d {FFFFFF}- {FFD700}%d",
  171.             cache_get_field_content_int(i, "id"), cache_get_field_content(i, "name"), cache_get_field_content_int(i, "rang")
  172.             cache_get_field_content_int(i, "skin"));
  173.             strcat(str_dialog, str_strcat);    
  174.         }
  175.         ShowPlayerDialog(playerid, d_menu_members, DIALOG_STYLE_MSGBOX, "Список сотрудников Offline", str_dialog, "Действие", "Выйти");      
  176.     }
  177.     else return SendClientMessage(playerid, 0xff6600ff, "Список сотрудников пуст!");
  178. }
RAW Paste Data