Есть функция
SendClientMessage в которой ещё с мезозойских времён имеется вот такой баг:
То бишь, если в функцию передать спецификатор (спецификатор - это "%s", "%d" и т.п.), который не был форматирован до этого в том же format, то сервер из-за этого упадёт (точнее, падает он, вроде, только от спецификатора "%s". Но про это я в теме говорил).
Куй исправил тему с OnPlayerText и OnPlayerCommandText, обрабатывая введённый игроком текст и заменяя все "%" на "#", но с диалогами он этого не сделал (а это самый распространённый пример. Авось ещё где-то можно подобный баг провернуть).
Эта функция является более функциональным аналогом тех вариаций, что гуляют в интернете (опять же, я об этом писал в теме: про способы, которые заменяют все "%" на "#"). Хотя что те варианты, что мой - все рабочие, хотя логичнее использовать мой, ибо тогда обрабатываться будут не все диалоги, а только нужные.
P.S. Если я неправильно понял вопроса и ты спрашивал о том, как работает сей баг, который исправляет функция, вставь этот код:
PHP код:
public OnPlayerSpawn(playerid)
{
ShowPlayerDialog(playerid, 1112, DIALOG_STYLE_INPUT, "Crash", "Crash", "Да", "Нет (Да)");
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1112)
{
new inputtext_buff[145];
strcat(inputtext_buff, inputtext, 128);
//FindSpecifiersInString(inputtext_buff, true);
format(inputtext_buff, sizeof(inputtext_buff), "Написал: %s.", inputtext_buff);
return SendClientMessage(playerid, -1, inputtext_buff);
}
return 1;
}
А после попробуй ввести в это диалоговое окно что-то подобное
И смотри что будет :)
А потом убери комментирование строки с вызовом функции + вставь код самой функции из урока и посмотри что выйдет после
- - - Добавлено - - -
Да или просто в OnPlayerConnect добавь
PHP код:
SendClientMessage(playerid, -1, "%s");
И при первом вошедшем игроке на сервер, его просто крашнет