PDA

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



I'm Cobra
28.01.2015, 20:50
Здравствуйте, ув. пользователи Pro-Pawn! Сегодня я столкнулся с такой проблемой, нужно было сделать динамический диалог. А я никогда не работал с ними. В просторах интернета видел только инклуды. Помогите пожалйуста. Дайте ссылку на какой-нибудь урок, или если не составит труда, распишите все.

Hidden
28.01.2015, 21:07
Диалоги, которые Вы формируете сами какой-либо функцией/циклом.
Например, кусок кода:

foreach(new i: Player)
{
if(IsPlayerNPC(i) || player_is_logged{i} == 0) continue;
if(PlayerInfo[playerid][pMember] == PlayerInfo[i][pMember])
{
MEMBERS++;
f(str, "{FFFFFF}%d.{1E90FF} %s[%d] {FFFFFF}(%s[%d])\n", MEMBERS, Name(i), i, FracRank[PlayerInfo[i][pMember]][PlayerInfo[i][pRank]], PlayerInfo[i][pRank]);
strcat(sctring,str);
f(string, "{FFFFFF}Членов организации онлайн: {1E90FF}%i", MEMBERS);
SPD(playerid, D_EMPTY, MSGBOX, string, sctring, "ENTER", "");
}
}
if(strlen(str) < 1) SCM(playerid, COLOR_WHITE, "[SERVER]: Нет членов организации онлайн.");

Показывает, сколько членов организации онлайн на момент ввода команды.
Получается, заведомо неизвестно, сколько строк будет в диалоге и будут ли они там вообще. Вот и вся суть динамического диалога. (моё мнение)

I'm Cobra
28.01.2015, 21:10
Диалоги, которые Вы формируете сами какой-либо функцией/циклом.
Например, кусок кода:

foreach(new i: Player)
{
if(IsPlayerNPC(i) || player_is_logged{i} == 0) continue;
if(PlayerInfo[playerid][pMember] == PlayerInfo[i][pMember])
{
MEMBERS++;
f(str, "{FFFFFF}%d.{1E90FF} %s[%d] {FFFFFF}(%s[%d])\n", MEMBERS, Name(i), i, FracRank[PlayerInfo[i][pMember]][PlayerInfo[i][pRank]], PlayerInfo[i][pRank]);
strcat(sctring,str);
f(string, "{FFFFFF}Членов организации онлайн: {1E90FF}%i", MEMBERS);
SPD(playerid, D_EMPTY, MSGBOX, string, sctring, "ENTER", "");
}
}
if(strlen(str) < 1) SCM(playerid, COLOR_WHITE, "[SERVER]: Нет членов организации онлайн.");

Показывает, сколько членов организации онлайн на момент ввода команды.
Получается, заведомо неизвестно, сколько строк будет в диалоге и будут ли они там вообще. Вот и вся суть динамического диалога. (моё мнение)

Например, при вводе команды /test у игрока выскакивает диалог со стилем INPUT и он вводит текст. Потом при вводе команда /showtest диалог со стилем LIST и в этом диалоге все что было введено в /test.

Hidden
28.01.2015, 21:20
Например, при вводе команды /test у игрока выскакивает диалог со стилем INPUT и он вводит текст. Потом при вводе команда /showtest диалог со стилем LIST и в этом диалоге все что было введено в /test.

Быстро схватываете.

I'm Cobra
28.01.2015, 21:24
Быстро схватываете.

Вообще-то, это была просьба показать примерный код, или объяснить как это сделать :)

Hidden
29.01.2015, 02:34
Ну вот пример:

new some_text[20];
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 0)
{
if(!response) return true;
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "Test", "Введите какой-нибудь текст:", "Далее", "Отмена");
strmid(some_text, inputtext, 0, strlen(inputtext), 21);
}
return true;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/test", cmdtext, true, 10) == 0)
{
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "Test", "Введите какой-нибудь текст:", "Далее", "Отмена");
return 1;
}
else if(strcmp("/showtest", cmdtext, true, 10) == 0)
{
if(!strlen(some_text)) return SendClientMessage(playerid, -1, "В переменной ничего не записано!");
new string[20];
format(string, sizeof(string), "%s", some_text);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Test", string, "Выбрать", "Отмена");
return 1;
}
return 0;
}

Mazzilla
29.01.2015, 08:11
new string[20];
format(string, sizeof(string), "%s", some_text);
Извращенец какой-то.

Hidden
29.01.2015, 16:28
new string[20];
format(string, sizeof(string), "%s", some_text);
Извращенец какой-то.

Да, затупил :D

L0ndl3m
29.01.2015, 17:33
Погоня за количествами строк объявляется открытой.


if (0 == strcmp("/showtest", cmdtext, true, 9)) {
return (0 == strlen(some_text))
? SendClientMessage(playerid, -1, "В переменной ничего не записано!")
: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Test", string, "Выбрать", "Отмена");
}