Тут научимся кидать данные с сервера в клиент парой окольных путей.
- Путь №1 - использование HTML файлов для передачи параметров.
Возьмём простейшую хтмлку и докинем ей пару параметров:
HTML:
<html><head><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.
</body></html>
ParameterInt=123
ParameterString=text
Пора зайти в интерфейс, класс NPCDialogWnd.uc. Конкретно нас интересует функция HandleLoadHtmlFromString.
Находим кусочек:
C:
ParseString(param, "HTMLString", htmlString);
Это и есть наша стринга, которая уже содержит вышеуказанные параметры. Да, можно парсить новые параметры сразу с param, как хотите, в целом и так и так будет работать.
Далее всё просто - мы ещё раз парсим эти данные, указав тип и имя параметра.
C:
local int int_param;
local string string_param;
ParseInt(htmlString, "ParameterInt", int_param);
ParseString(htmlString, "ParameterString", string_param);
int_param = 123
string_param = text
Самое простое для чего это используется - изменение размеров окна хтмлки. Что бы работало корректно, необходимо маленько скорректировать абсолютные размеры элементов.
- Путь №2 - UIEvent, AITimer или как я "придумал" систему эвентов в системе эвентов
Позволяет она швырнуть 2(3) ИНТа + 6 стрингов, но блоки стрингов ограничены размером пакета, так что бесконечные тексты туда не засунешь
В клиент уходит запрос, который состоит, из:
- 90000 - выдуманный нами и уникальный ИД эвента, что бы разделять то, что мы шлём
- 100, 200 и text - полноценная информация, которую мы будем использовать
C:
SendUIEvent(talker, 90000, 100, 200, "text", "", "", "", "", "");
Далее снова переходим в клиент и начинаем допихивать куски, которые помогут принимать этот пакет в любом окне:
C:
RegisterEvent( EV_AITimer );
function OnEvent(int Event_ID, string param)
{
case EV_AITimer:
AIOnEvent(Param);
break;
}
}
C:
function AIOnEvent(string Param)
{
local int Event;
local int i1, i2;
local string s1;
Parseint(Param, "EventID", Event);
switch(Event)
{
case 90000:
Parseint(Param, "Ask", i1);
Parseint(Param, "Reply", i2);
ParseString(Param, "Param1", s1);
break;
}
}
Где переменные в клиенте заполнились тем, что мы в них кинули из сервера:
i1 = 100
i2 = 200
s1 = text
Как использовать - решайте сами.