PHP код:
/*
Функция:
ShowPlayerAdminBotRequestInfo
Аргументы:
playerid - ID игрока, которому показываем
Вернёт:
1 - Показан успешно
0 - Не удалось показать
Заметки:
Показываем информацию о запросе выбранного из списка.
*/
stock ShowPlayerAdminBotRequestInfo(playerid)
{
if(pAdminChoseRequest{playerid} == ADMIN_BOT_INVALID_REQUEST_ID)
return 0;
new
count = pAdminChoseRequest{playerid},
string[MAX_CHATBUBBLE_LEGNTH + 1]
;
format(string, sizeof string, "\n\
{C0F08E}Запросил: {FFFFFF}%s\n\
{ED8473}Наказать: {FFFFFF}%s\n\n\
Тип: %s\n\
Время: %d мин\n\
Причина: %s\n\n\n\
%s",
PlayerName(AdminBotInfo[count][aBot_adminid]),
PlayerName(AdminBotInfo[count][aBot_targetid]),
ADMIN_BOT_PUNISH_NAME[AdminBotInfo[count][aBot_punish_type]],
AdminBotInfo[count][aBot_punish_time],
AdminBotInfo[count][aBot_punish_reason],
ADMIN_BOT_LEVEL_USING_CMD[AdminBotInfo[count][aBot_punish_type]] > AdminLevel(playerid)
? ("{AFAFAF}Вы не можете принять запрос") : ("{E2BE1D}Вы можете принять запрос")
);
return ShowPlayerDialog(
playerid,
dAbot_reqinfo,
DIALOG_STYLE_MSGBOX,
!" ",
string,
!"Хорошо", !""
);
}
/*
Функция:
ShowPlayerAdminBotRequestMenu
Аргументы:
playerid - ID игрока, которому показываем
Вернёт:
1 - Показан успешно
0 - Не удалось показать
Заметки:
Показываем меню запроса из списка.
*/
stock ShowPlayerAdminBotRequestMenu(playerid)
{
if(pAdminChoseRequest{playerid} == ADMIN_BOT_INVALID_REQUEST_ID)
return 0;
return ShowPlayerDialog(
playerid,
dAbot_reqmenu,
DIALOG_STYLE_LIST,
PlayerName(AdminBotInfo[pAdminChoseRequest{playerid}][aBot_targetid]),
!"{C0F08E}Наказать\n{FFFFFF}Информация\nОтклонить",
!"Далее", !"Выход"
);
}
/*
Функция:
ShowPlayerAdminBotRequestList
Аргументы:
playerid - ID игрока, которому показываем
Вернёт:
1 - Показан успешно
Заметки:
Показываем весь список запросов.
*/
stock ShowPlayerAdminBotRequestList(playerid)
{
new
string[(4 + ((MAX_PLAYER_NAME + 1 - 2) * 2) + (- 2 + MAX_ADMIN_BOT_PUNISH_REASON) + (- 2 + MAX_ADMIN_BOT_PUNISN_NAME_LENGTH)
+ (- 2 + 4)) * MAX_ADMIN_BOT_SUPPORT_COUNT + 46] =
{
"Запросил\tДейсвтие(время)\tНаказать\tПричина\n"
},
count = 0
;
for(new iter = 0; iter < MAX_ADMIN_BOT_SUPPORT_COUNT; iter ++)
{
if(IsEmptyRequestInAdminBotList(iter))
continue;
format(string, sizeof string, "%s%s\t%s(%d мин)\t%s\t%s\n",
string,
PlayerName(AdminBotInfo[iter][aBot_adminid]),
ADMIN_BOT_PUNISH_NAME[AdminBotInfo[iter][aBot_punish_type]],
AdminBotInfo[iter][aBot_punish_time],
PlayerName(AdminBotInfo[iter][aBot_targetid]),
AdminBotInfo[iter][aBot_punish_reason]
);
PlayerListitem[playerid][count++] = iter;
}
return ShowPlayerDialog(
playerid,
dAbot_reqlist,
DIALOG_STYLE_TABLIST_HEADERS,
!"Запросы админ-боту",
string,
!"Далее", !""
);
}
/*
Функция:
GetLastRequestInAdminBot
Аргументы:
-
Вернёт:
Вернёт ID последнего запроса.
Вернёт -1, если спиоск запросов пуст.
Заметки:
Получить ID последнего добавленного запроса.
*/
stock GetLastRequestInAdminBot()
{
new
tmp_ = -1;
if(CountRequestInAdminBotList() == MIN_ADMIN_BOT_SUPPORT_COUNT)
return tmp_;
for(new iter = 0; iter < MAX_ADMIN_BOT_SUPPORT_COUNT; iter ++)
{
if(IsEmptyRequestInAdminBotList(iter))
continue;
if((tmp_ == -1) || (tmp_ != -1 && AdminBotInfo[iter][aBot_unix_time] > AdminBotInfo[tmp_][aBot_unix_time]))
{
tmp_ = iter;
}
}
return tmp_;
}
/*
Функция:
CountRequestInAdminBotList
Аргументы:
-
Вернёт:
Число созданных запросов.
Заметки:
-
*/
stock CountRequestInAdminBotList()
{
return gADMIN_BOT_SUPPORT_TOTAL_COUNT;
}
/*
Функция:
CheckAvailabilityInAdminBot
Аргументы:
playerid - ID игрока, подающий запрос
parmas[] - Массив с хранением запроса
Вернёт:
CA_REQUEST_NOT_FOUND - Запрос не найден
CA_REQUEST_FOUND - Запрос создан/найден
CA_NO_PLACE_IN_REQUEST - Лист с запросами переполнен
CA_MISSING_ARGUMENT - Указаны не все аргументы
CA_INVALID_TARGET_ID - Наказуемый не в сети
Заметки:
Проверяем наличие элементов запроса.
*/
stock CheckAvailabilityInAdminBot(playerid, params[])
{
new
bool:IsFinedCommand = false,
strFindPos,
supportCommand[MAX_ADMIN_BOT_REQUEST_LENGTH + 1],
supportTargetid,
supportTime,
supportReason[MAX_ADMIN_BOT_PUNISH_REASON + 1],
supportUnixtTime = gettime(),
string[MAX_CHATBUBBLE_LENGTH + 1]
;
for(new i = 0; i < MAX_ADMIN_BOT_REQUEST; ++i)
{
if((strFindPos = strfind(params, ADMIN_BOT_SUPPORT_COMMAND[i], true)) != -1)
{
if(CountRequestInAdminBotList() >= MAX_ADMIN_BOT_SUPPORT_COUNT)
return CA_NO_PLACE_IN_REQUEST;
strdel(params, 0, strFindPos);
if(sscanf(params, "s[8]uds[50]",
supportCommand, supportTargetid, supportTime, supportReason))
return CA_MISSING_ARGUMENT;
if(supportTargetid == INVALID_PLAYER_ID)
return CA_INVALID_TARGET_ID;
for(new j = 0; j < MAX_ADMIN_BOT_SUPPORT_COUNT; j ++)
{
if(!IsEmptyRequestInAdminBotList(j))
continue;
format(string, sizeof string, "[ADMIN-BOT] {FFFFFF}%s запросил %s игрока %s на %d мин, причина: %s",
PlayerName(playerid),
ADMIN_BOT_PUNISH_NAME[i],
PlayerName(supportTargetid),
supportTime,
supportReason
);
SendAdminMessage(ADMIN_BOT_HEX_COLOR, string);
SendAdminMessage(ADMIN_BOT_HEX_COLOR, !"Нажмите Y для одобрения, N для отказа. (/viewreq для просмотра всех запросов)");
SetRequestInAdminBotList(
j,
i,
supportTime,
playerid,
supportTargetid,
supportUnixtTime,
supportReason
);
IsFinedCommand = true;
break;
}
break;
}
}
return (IsFinedCommand ? CA_REQUEST_FOUND : CA_REQUEST_NOT_FOUND);
}
/*
Функция:
RejectRequestInAdminBotList
Аргументы:
playerid - ID игрока, отклоняющий запрос
index - ID запроса
Вернёт:
-
Заметки:
Отклоняем запрос.
*/
stock RejectRequestInAdminBotList(playerid, index)
{
new
string[MAX_CHATBUBBLE_LENGTH + 1];
format(string, sizeof string, "[ADMIN-BOT] {FFFFFF}%s отклонил запрос №%d",
PlayerName(playerid), index + 1);
SendAdminMessage(ADMIN_BOT_HEX_COLOR, string);
format(string, sizeof string, "(Отправитель: %s | Просьба: %s | Наказуемый: %s | Причина: %s)",
PlayerName(AdminBotInfo[index][aBot_targetid]),
ADMIN_BOT_PUNISH_NAME[AdminBotInfo[index][aBot_punish_type]],
PlayerName(AdminBotInfo[index][aBot_adminid]),
AdminBotInfo[index][aBot_punish_reason]
);
SendAdminMessage(ADMIN_BOT_HEX_COLOR, string);
DeleteRequestInAdminBotList(index);
}
/*
Функция:
ApproveRequestInAdminBotList
Аргументы:
playerid - ID игрока, принимающий запрос
index - ID запроса
Вернёт:
-
Заметки:
Принимаем запрос.
*/
stock ApproveRequestInAdminBotList(playerid, index)
{
new
string[MAX_CHATBUBBLE_LENGTH + 1];
format(string, MAX_CHATBUBBLE_LENGTH + 1, "%s %d %d %s // %s",
ADMIN_BOT_SUPPORT_COMMAND[AdminBotInfo[index][aBot_punish_type]],
AdminBotInfo[index][aBot_targetid],
AdminBotInfo[index][aBot_punish_time],
AdminBotInfo[index][aBot_punish_reason],
PlayerName(AdminBotInfo[index][aBot_adminid])
);
PC_EmulateCommand(playerid, string);
DeleteRequestInAdminBotList(index);
}
/*
Функция:
IsEmptyRequestInAdminBotList
Аргументы:
index - ID запроса
Вернёт:
1 - Запрос пустой
0 - Запрос не пустой
Заметки:
Смотрим, пустой ли запрос.
*/
stock IsEmptyRequestInAdminBotList(index)
{
return ((AdminBotInfo[index][aBot_punish_reason][0] == '\0') ? (1) : (0));
}
/*
Функция:
DeleteRequestInAdminBotList
Аргументы:
index - ID запроса
Вернёт:
1 - Запрос успешно удалён
0 - Запрос не был удалён
Заметки:
Удаляем запрос из списка.
*/
stock DeleteRequestInAdminBotList(index)
{
if(!IsEmptyRequestInAdminBotList(index))
{
AdminBotInfo[index][aBot_targetid] = INVALID_PLAYER_ID;
AdminBotInfo[index][aBot_punish_reason][0] = '\0';
gADMIN_BOT_SUPPORT_TOTAL_COUNT --;
return 1;
}
else
{
return 0;
}
}
/*
Функция:
SetRequestInAdminBotList
Аргументы:
index - ID запроса
type - Тип запроса (заглушка и т.п.)
&time - Время в минутах
&adminid - ID админа, оставившего запрос
&targetid - ID наказуемого
&unix_time - Unix время на момент добавления запроса
reason[] - Причина наказания
size - Размер массива с причиной (по-умолчании установлен)
Вернёт:
-
Заметки:
Добавляем запрос в список
*/
stock SetRequestInAdminBotList(index, type, &time, &adminid, &targetid, &unix_time, reason[], const size = sizeof reason)
{
AdminBotInfo[index][aBot_punish_type] = type;
AdminBotInfo[index][aBot_punish_time] = time;
strmid(
AdminBotInfo[index][aBot_punish_reason],
reason,
0,
MAX_ADMIN_BOT_PUNISH_REASON,
size
);
AdminBotInfo[index][aBot_targetid] = targetid;
AdminBotInfo[index][aBot_adminid] = adminid;
AdminBotInfo[index][aBot_unix_time] = unix_time;
gADMIN_BOT_SUPPORT_TOTAL_COUNT ++;
}