PDA

Просмотр полной версии : [Вопрос] Как правильно форматировать строку



newbie01
14.03.2016, 20:14
1)



new string[415+MAX_PLAYER_NAME];
format(string, sizeof(string), DEFINE_TEXT, pInfo[playerid][pName]);
SPD(playerid, dRegister, DSI, "Название диалога", string, "Кнопка 1", "Кнопка 2");


Есть такой код, но я подумал что записывать большой текст диалога в один стринг будет слишком, и хочу записывать туда только имя игрока а остальной текст выводить дефайном. Так вот как это сделать? Хочу вот так:



new name[MAX_PLAYER_NAME];
format(name, sizeof(name), name, pInfo[playerid][pName]);
SPD(playerid, 1, DSI, "Название диалога", DEFINE_TEXT, "Кнопка 1", "Кнопка 2");
Куда надо вставлять стринг?


2)

В уроки от Деймоса есть такой код который присваивает диалогам действия. Не могу никак разобраться какая функция что выполняет. И еще проблемы с установкой стрингов (Имя игрока) в некоторые его места.


switch(dialogid)
{
case dRegister:
{
if(!response)
{
ShowPlayerDialog(playerid, dKickMessage, DIALOG_STYLE_MSGBOX, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Отказ от регистрации.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Выход", "");
return Kick(playerid); - (Тут когда меняю на своё, что бы выводилось просто окно с инфой то оно не выводится и диалог обновляется с ошибкой нельзя продолжить регистрация не вводя пароль)
}
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "{FF0000}Ошибка: {FFFFFF}Вы не можете продолжить регистрацию не введя пароль!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).", "Регистрация", "Выход");
else if(strlen(inputtext) < 4) return ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "{FF0000}Ошибка: {FFFFFF}Пароль слишком короткий!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).", "Регистрация", "Выход"); - (Сюда не понимаю как вставить стринг что бы выводило имя игрока вместе с текстом из дейфайна)
else if(strlen(inputtext) > 30) return ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "{FF0000}Ошибка: {FFFFFF}Пароль слишком длинный!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).", "Регистрация", "Выход"); - (Сюда не понимаю как вставить стринг что бы выводило имя игрока вместе с текстом из дейфайна)
for(new i = strlen(inputtext)-1; i != -1; i--)
{
switch(inputtext[i])
{
case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
default: return ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "{FF0000}Ошибка: {FFFFFF}Пароль содержит запрещённые символы!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).", "Регистрация", "Выход"); (Сюда не понимаю как вставить стринг что бы выводило имя игрока вместе с текстом из дейфайна)
}
}
pInfo[playerid][pPassword][0] = EOS;
strins(pInfo[playerid][pPassword], inputtext, 0);
CreateNewAccount(playerid, pInfo[playerid][pPassword]);
return 1;
}
case dLogin:
{
if(!response)
{
ShowPlayerDialog(playerid, dKickMessage, DIALOG_STYLE_MSGBOX, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Отказ от авторизации.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Выход", "");
return Kick(playerid); - (Тут когда меняю на своё, что бы выводилось просто окно с инфой то оно не выводится и диалог обновляется с ошибкой нельзя продолжить авторизацию не вводя пароль)
}
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы не можете продолжить авторизацию не введя пароль!\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
for(new i = strlen(inputtext)-1; i != -1; i--)
{
switch(inputtext[i])
{
case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
default: return ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Введённый пароль содержит запрещённые символы!\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
}
}
if(!strcmp(pInfo[playerid][pPassword], inputtext))
{
new query_string[52+MAX_PLAYER_NAME];
format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `player_name` = '%s'", pInfo[playerid][pName]);
mysql_function_query(mysql_connect_id, query_string, true, "UploadPlayerAccount","i", playerid);
}
else
{
switch(GetPVarInt(playerid, "WrongPassword"))
(И всё что ниже тоже не понимаю как надо правильно создавать стринг + вывод текста из дефайна)
{
case 0: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 3 попытки.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
case 1: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 2 попытки.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
case 2: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 1 попытка.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
case 3: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталась последняя попытка, после чего Вас кикнет.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
default:
{
ShowPlayerDialog(playerid, dKickMessage, DIALOG_STYLE_MSGBOX, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Превышен лимит попыток на ввод пароля.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Выход", "");
return Kick(playerid);
}
}
SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")+1);
}
return 1;
}
}

Иван Бубнов
14.03.2016, 20:19
http://wiki.sa-mp.com/wiki/Strcat
http://pro-pawn.ru/showthread.php?5249-Pawn-%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B5%D1%81%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%B2%D0%B5%D1%82%D1%8B-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B&p=19594&viewfull=1#post19594

newbie01
15.03.2016, 09:41
Иван, а если мне надо вывести диалог в случае с strcat?

Excel_Smit.
15.03.2016, 11:49
Иван, а если мне надо вывести диалог в случае с strcat?


new
str[size];
str = "Текст";
strcat(str, "Текст");
strcat(str, "Текст");

Как-то так.

newbie01
15.03.2016, 14:04
new
str[size];
str = "Текст";
strcat(str, "Текст");
strcat(str, "Текст");

Как-то так.

Всё ровно ничего не понял, можешь объяснить принцип действия? Смотри у меня есть дефайн с текстом, далее я хочу вывести эту информацию с текстом в диалог и плюс ко всему еще нужно создать стринг в котором я получаю имя игрока и его тоже вывести в диалог. Как это сделать?