PDA

Просмотр полной версии : Диалог с НПС


Martin
12.12.2009, 21:17
Вопрос такого характера.
Интересует реализация диалога с НПС.
а именно , написал все алгоритм примерно такой
как только пришел пакет о таргете, отправляем опять экшен
пришел НТМЛ от НПС, проверили что именно тот НТМЛ
отправляем команду что нужно нажать
приходит НТМЛ от НПС, отправляем команду
и вот тут загвоздка

если делать через таймер то диалоги работают, пытался как выше описано по принятому пакету с ХТМЛ от сервера и не получается
может кто подскажет или выложет примерный код реализации диалога до 3 - 4 уровня вложения

alexteam
12.12.2009, 21:35
не знаю как ты делал, но вот это простейшее и работать должно.
главное правильно задавать ключевые фразы которые бы были присущи только этому диалогу и соблюдать регистр.


var
npcoid : integer;
html, cmd : string;
Timer:ttimer;


procedure init;
begin
useforconnectname := 'ИмяСоединения';
timer := ttimer.create(nil);
timer.enabled := false;
timer.interval := 300;
timer.ontimer := @TimerHandler;
end;

procedure free;
begin
timer.free;
end;

procedure TimerHandler(Sender:tobject);
begin
timer.enabled := false;
buf := #$23;
writes(cmd);
sendtoserver;
end;

begin
if fromserver and (pck[1] = #$19) then
begin
npcoid := readd(2);
html := reads(6);

if (pos('Trader Silvia', html)>0) and (pos('Buy Accessories', html)>0) then
begin
cmd:= format('npc_%d_Buy 3000300',[npcoid]);
timer.enabled := true;
exit;
end;
if pos('Ключевая фраза', html)>0 then
begin
cmd := format('действие_%d_действие',[npcoid]);
timer.enabled := true;
exit;
end;
end;
end.

Martin
13.12.2009, 18:56
Спасибо что ответили
Но все равно не получается.
l2phx использую версия 3.5.28.151, можно скачать и последней версии но думаю разницы не будет

я пишу все тоже самое как вы и предложили, но не получается вот почему

пакет с командой что нужно сделать уходит до того как пакет с сервера с ХТМЛ попадает в клиент.

Вообщем если все сделать через таймер задержка в 300мс. то после получения пакета с сервера, если пакет тот, то команда отсылается через таймер на сервер и все работает. Не знаю с чем связано, думаю тут много ГУРУ которые знают это.

alexteam
13.12.2009, 20:14
пакет с командой что нужно сделать уходит до того как пакет с сервера с ХТМЛ попадает в клиент.
Но сервер то об этом не знает. он отослал пакет хтмла клиенту, и получил ответ. для него все выглядит так как и должно выглядеть. разве что на сервере есть контроль скорости ответа на диалог.

Добавлено через 5 минут
Поправил скрипт.

Martin
14.12.2009, 01:16
Ну я так и сделал.
Просто опыта маловато в написании скриптов для серверов, поэтому думал мало ли руки кривые))))

Спасибочки за ответ