На другом форуме ради фана показывал вариант с скреплением массивов. На деле же, как мне кажется, это будет самый адекватный вариант в случае, когда команды для /ahelp хранятся именно в массиве.
Открыть/закрыть
Сообщение от
DeIMoS
А теперь я покажу вам немного магии
Описание команд для каждого уровня в отдельном массиве
(ВАЖНО что бы они всегда стояли вместе и в такой же последовательности)
PHP код:
new acmd_list__moderator1[] =
{
"1 Уровень:\n\
команда 1 - описание\n\
команда 2 - описание\n\
команда 3 - описание\n\
команда 4 - описание\n\
команда 5 - описание\n\
команда 6 - описание\n\
команда 7 - описание\n\
команда 8 - описание\n\
команда 9 - описание\n\
команда 10 - описание\n"
};
new acmd_list__moderator2[] =
{
"2 Уровень:\n\
команда 1 - описание\n\
команда 2 - описание\n\
команда 3 - описание\n\
команда 4 - описание\n\
команда 5 - описание\n\
команда 6 - описание\n\
команда 7 - описание\n\
команда 8 - описание\n\
команда 9 - описание\n\
команда 10 - описание\n"
};
new acmd_list__moderator3[] =
{
"3 Уровень:\n\
команда 1 - описание\n\
команда 2 - описание\n\
команда 3 - описание\n\
команда 4 - описание\n\
команда 5 - описание\n\
команда 6 - описание\n\
команда 7 - описание\n\
команда 8 - описание\n\
команда 9 - описание\n\
команда 10 - описание\n"
};
new acmd_list__administrator1[] =
{
"4 Уровень:\n\
команда 1 - описание\n\
команда 2 - описание\n\
команда 3 - описание\n\
команда 4 - описание\n\
команда 5 - описание\n\
команда 6 - описание\n\
команда 7 - описание\n\
команда 8 - описание\n\
команда 9 - описание\n\
команда 10 - описание\n"
};
new acmd_list__administrator2[] =
{
"5 Уровень:\n\
команда 1 - описание\n\
команда 2 - описание\n\
команда 3 - описание\n\
команда 4 - описание\n\
команда 5 - описание\n\
команда 6 - описание\n\
команда 7 - описание\n\
команда 8 - описание\n\
команда 9 - описание\n\
команда 10 - описание\n"
};
new acmd_list__developer[] =
{
"6 Уровень:\n\
команда 1 - описание\n\
команда 2 - описание\n\
команда 3 - описание\n\
команда 4 - описание\n\
команда 5 - описание\n\
команда 6 - описание\n\
команда 7 - описание\n\
команда 8 - описание\n\
команда 9 - описание\n\
команда 10 - описание\n"
};
Макрос чисто для удобства
PHP код:
#define admin_commands_list acmd_list__moderator1
Превращаем отдельные массивы в один большой (отобразить его можно вызовом первого массива - "acmd_list__moderator1")
PHP код:
public OnGameModeInit()
{
acmd_list__moderator1[sizeof(acmd_list__moderator1)-1] = '\n';// Заменяем нуль-символы массивов на спец.символ переноса строки
acmd_list__moderator2[sizeof(acmd_list__moderator2)-1] = '\n';// Тем самым убирая "границы" между двумя массивами
acmd_list__moderator3[sizeof(acmd_list__moderator3)-1] = '\n';// И когда сервер начнёт обрабатывать массив, выводя все символы до первого нуль-символа
acmd_list__administrator1[sizeof(acmd_list__administrator1)-1] = '\n';// Он найдёт его только в последнем массиве
acmd_list__administrator2[sizeof(acmd_list__administrator2)-1] = '\n';//Следовательно, выведет содержимое всех массивов сразу
acmd_list__developer[sizeof(acmd_list__developer)-1] = '\0';
return 1;
}
Отображаем данные игроку
PHP код:
if(!strcmp(cmd, "/ahelp", true) || !strcmp(cmd, "/ah", true))
{
if (!PlayerInfo[playerid][pAdmin]) return 1;
ShowPlayerDialog(playerid, 675, DIALOG_STYLE_MSGBOX, "Админ-Команды", admin_commands_list, "Ок", "");
return 1;
}
Если нужно, например, вывести с 1 по 3 уровень, просто делаем так:
PHP код:
if(!strcmp(cmd, "/ahelp", true) || !strcmp(cmd, "/ah", true))
{
if (!PlayerInfo[playerid][pAdmin]) return 1;
acmd_list__moderator3[sizeof(acmd_list__moderator3)-1] = '\0';// Вновь возвращаем нуль-символ в конец третьего массива
ShowPlayerDialog(playerid, 675, DIALOG_STYLE_MSGBOX, "Админ-Команды", admin_commands_list, "Ок", "");// Отображаем все данные с 1 по 3-ий массив
acmd_list__moderator3[sizeof(acmd_list__moderator3)-1] = '\n';// Вновь возвращаем символ переноса строки
return 1;
}
То же самое можно провернуть, например, если нужно отобразить только 5-ий уровень
PHP код:
if(!strcmp(cmd, "/ahelp", true) || !strcmp(cmd, "/ah", true))
{
if (!PlayerInfo[playerid][pAdmin]) return 1;
acmd_list__administrator2[sizeof(acmd_list__administrator2)-1] = '\0';// Возвращаем нуль-символ для пятого массива (дабы данные из 6-го массива не попали в диалог)
ShowPlayerDialog(playerid, 675, DIALOG_STYLE_MSGBOX, "Админ-Команды", acmd_list__administrator2, "Ок", "");// Отображаем массив с пятым уровнем
acmd_list__administrator2[sizeof(acmd_list__administrator2)-1] = '\n';// И опять возвращаем символ переноса строки
return 1;
}
И не нужно никакое форматирование использовать.
- - - Добавлено - - -
Можно для удобства такой говнокод написать
PHP код:
stock ShowAdminList(playerid, lower_level = 1, top_level = 6)
{
if(!(1 <= lower_level <= 6))
return 0;
if(!(1 <= top_level <= 6))
return 0;
switch(top_level)
{
case 1: acmd_list__moderator1[sizeof(acmd_list__moderator1)-1] = '\0';
case 2: acmd_list__moderator2[sizeof(acmd_list__moderator2)-1] = '\0';
case 3: acmd_list__moderator3[sizeof(acmd_list__moderator3)-1] = '\0';
case 4: acmd_list__administrator1[sizeof(acmd_list__administrator1)-1] = '\0';
case 5: acmd_list__administrator2[sizeof(acmd_list__administrator2)-1] = '\0';
}
switch(lower_level)
{
case 1: ShowPlayerDialog(playerid, 675, DIALOG_STYLE_MSGBOX, "Админ-Команды", acmd_list__moderator1, "Ок", "");
case 2: ShowPlayerDialog(playerid, 675, DIALOG_STYLE_MSGBOX, "Админ-Команды", acmd_list__moderator2, "Ок", "");
case 3: ShowPlayerDialog(playerid, 675, DIALOG_STYLE_MSGBOX, "Админ-Команды", acmd_list__moderator3, "Ок", "");
case 4: ShowPlayerDialog(playerid, 675, DIALOG_STYLE_MSGBOX, "Админ-Команды", acmd_list__administrator1, "Ок", "");
case 5: ShowPlayerDialog(playerid, 675, DIALOG_STYLE_MSGBOX, "Админ-Команды", acmd_list__administrator2, "Ок", "");
case 6: ShowPlayerDialog(playerid, 675, DIALOG_STYLE_MSGBOX, "Админ-Команды", acmd_list__developer, "Ок", "");
}
switch(top_level)
{
case 1: acmd_list__moderator1[sizeof(acmd_list__moderator1)-1] = '\n';
case 2: acmd_list__moderator2[sizeof(acmd_list__moderator2)-1] = '\n';
case 3: acmd_list__moderator3[sizeof(acmd_list__moderator3)-1] = '\n';
case 4: acmd_list__administrator1[sizeof(acmd_list__administrator1)-1] = '\n';
case 5: acmd_list__administrator2[sizeof(acmd_list__administrator2)-1] = '\n';
}
return 1;
}
И выводить так:
PHP код:
if(!strcmp(cmd, "/ahelp", true) || !strcmp(cmd, "/ah", true))
return ShowAdminList(playerid, 1, PlayerInfo[playerid][pAdmin]);//Выведет все команды с 1 уровня по тот, который у админа
// В самой функции уже встроена проверка на уровень, поэтому в команде дополнительные проверки не обязательны
То бишь
PHP код:
ShowAdminList(playerid, с_какого_уровня, по_какой);