PDA

Просмотр полной версии : [Вопрос] При показе диалога. (Проверка)



Camelot
21.08.2014, 21:35
Пишу смену ника.
Структура такова:
Администратор включает возможность смены ника.
Игрок создаёт заявку с новым ником. (Ник записывается в массив)
Администратор меняет ник игроку с помощью команды: /setname ID

А теперь к делу. Если администратор пропишет /setname без "ID", то ему покажется диалог со всеми игроками, кто подал заявку.
Проблема в том, что я не понимаю как написать проверку на то, если заявок нет.


CMD:setname(playerid, params[])
{
if(PInfo[playerid][pAdmin] < 3) return true;
else if(sscanf(params, "i", params[0]))
{
static const fmt[] = "%s%s(%d) сменить на: %s";
new info[sizeof(fmt) - 2 + (sizeof(fmt)*MAX_PLAYERS) - 2 + MAX_PLAYER_NAME - 2 + 3 - 2 + MAX_PLAYER_NAME];
foreach(Player, i)
{
if(NewName[i] != 0) format(info, sizeof(info), fmt, info, Nick(i), i, NewName[i]);
}
//Если заявок нет, то выводим диалог Dialog(playerid, 1938, 0, "Заявки на смену ника", "Заявок нет", "Закрыть", "");

Dialog(playerid, 1938, 0, "Заявки на смену ника", info, "Далее", "Закрыть");
return Message(playerid, COLOR_GREEN,"(Используйте): {669966}/setname [ID Player].");
}
//Остальной код
}

L0ndl3m
21.08.2014, 22:08
Примерно как-то так это всё будет выглядеть ( не против если немного привёл код в небольшой порядок? )


CMD:setname(playerid, params[])
{
if(PInfo[playerid][pAdmin] < 3)
return 1;

extract params -> new player: targetid; else
{
static const
fmt_str[] = "%s%s (%d) сменить на: %s";

new
str[sizeof(fmt_str) - 2 + (-2 + MAX_PLAYER_NAME) + (-2 + 3) + MAX_PLAYER_NAME)];

foreach(Player, i)
{
if(NewName[i][0] != '\0')
format(str, sizeof(str), fmt_str, str, Nick(i), i, NewName[i]);
}

Dialog(playerid, 1938, DIALOG_STYLE_MSGBOX, "Заявки на смену ника", (str[0] == '\0') ? ("Заявок нет") : ("Далее"), "Закрыть", "");
}
else
{
if(0 == IsPlayerConnected(targetid))
return SendClientMessage(playerid, -1, "Такого игрока нет на сервере.");
if(NewName[targetid][0] == '\0')
return SendClientMessage(playerid, -1, "Игрок не подавал заявку на смени никнейма.");

SetPlayerName(targetid, NewName[targetid]);
// сменили ник игроку, ID которого указал администратор

NewName[targetid][0] = '\0';
// даём понять, что игрок уже сменил никнейм, либо не подавал заявку на смену никнейма
}

return 1;
}

Camelot
21.08.2014, 23:04
Спасибо за проверку, но я не понимаю, чем лучше этот код... :D

L0ndl3m
21.08.2014, 23:10
Спасибо за проверку, но я не понимаю, чем лучше этот код... :D
Оптимизированнее... Ну и готовый код для того, что ты попросил.

Camelot
22.08.2014, 00:07
Меня заинтересовала Ваша структура построения кода.
Можете скинуть пару источников на подобные темы написания? (Если, конечно, таковы имеются)
Буду признателен.

L0ndl3m
22.08.2014, 00:11
Меня заинтересовала Ваша структура построения кода.
Можете скинуть пару источников на подобные темы написания? (Если, конечно, таковы имеются)
Буду признателен.
Что именно заинтересовало? Не совсем понял суть вопроса.

Camelot
22.08.2014, 00:13
К примеру: "extract params -> new player: targetid; else".

Camelot
22.08.2014, 01:04
Всё, разобрался. Не трудно и приятно.