В общем столкнулся с проблемой сделал скрипт, на нём поставил условие, что если от клиента идёт соц действие, то отослать на сервер пакет:
жму соц действие - на сервер шлётся пакет, всё нормально
делаю скрипт сложнее и нахожу вещь такую, что, если более простым языком, то засунув пакет соц действия в посылку, условие не выполняется, в скрипте это выглядит так, например чар что-то делает и в определённый момент подходит к нпс...ставлю чтоб когда он стоял в точке с координатой x y z(около нпс) , он писал в чат что-либо(то есть пакет от клиента) и условие, когда от клиента пакет (на сообщение), чтоб делал что-то, результат - не работает, но если в условие ставить пакет от сервера который показывает, что чар мой, что-то написал, то пашет.
Вот вопрос - дело в условии ? нельзя ставить в данном случае fromclient? или что ?я не пойму...
Была догадка что, когда шлём пакет с программы, это не совсем является пакетом от клиента, мб бред, но это единственное что приходит на ум.
Коды скриптов не выкладывают потому, что это для любого случая.
пакет отправляет оди скрипт, а ловишь в другом? тогда, если не ошибаюсь, пакеты проходят цепочку скритов от первого в списке к последнему начиная с отправившего скрипт
__________________
Intel® Core™2 Duo Processor E6400 @ 2.64GHz
Nvidia GeForce 9800GT
3 G Ram
1T HDD
Gentoo Linux x64
вот написал только-что результат на лицо.
Скрипт устроен так(чтоб вы голову особо не забивали) если от клиента приходит пакет say то чар шлёт на сервер пакет p1, в моём случае say - сказать в чат "сесть" , а p1 - пакет на то чтоб сесть.
Врубаем скрипт в нём каждые 6000милисекунд отправляеться на сервер пакет say, и чар пишет в чат "сесть", но пакет p1 не шлёться на сервер, но стоит мне с клиента самому набрать в чате "сесть" тоесть отправить пакет say вручную , то чар садиться, вот код:
delfi Код:
const
p1='56 00 00 00 00 00 00 00 00 00';
nik='JealouS';
say='49 41 04 35 04 41 04 42 04 4C 04 00 00 00 00 00 00';
var
i:integer;
timer:TTimer;
timer2:TTimer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=3000;
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=true;
timer2.interval:=6000;
end;
procedure OnTimer(Sender: TObject);
begin
buf:=hstr(p1);
SendToServerex(nik);
timer.enabled:=false;
end;
procedure OnTimer2(Sender: TObject);
begin
buf:=hstr(say);
SendToServerex(nik);
end;
procedure Free;
begin
timer.Free;
timer2.Free;
end;
begin
if fromclient and (ConnectName=nik) and (pck=hstr(say)) then
timer.enabled:=true;
end.
отправляемый скриптом пакет к этому же скрипту не приходит. Это вполне логично иначе возможна была ситуация зацикливания на одном пакете (обработка - отправка - обработка -отправка). У вас получится только если вы напишете 2 скрипта, один управляющий, второй исполняющий. То есть в чат сесть писать будет один скрипт, а исполнять это другой. С одной стороны, а с другой если это в пределах одного скрипта, то зачем ставить такой изощренный метод, почему не написать так:
procedure OnTimer2(Sender: TObject);
begin
OnTimer;
end;
результат будет одинаковый
отправляемый скриптом пакет к этому же скрипту не приходит. Это вполне логично иначе возможна была ситуация зацикливания на одном пакете (обработка - отправка - обработка -отправка). У вас получится только если вы напишете 2 скрипта, один управляющий, второй исполняющий. То есть в чат сесть писать будет один скрипт, а исполнять это другой. С одной стороны, а с другой если это в пределах одного скрипта, то зачем ставить такой изощренный метод, почему не написать так:
procedure OnTimer2(Sender: TObject);
begin
OnTimer;
end;
результат будет одинаковый
Мне это нужно совершенно для другого скрипта) где кокрас это пригодиться, щас попробую в 2 скрипта написать.
Нет с двумя скриптами тоже не выходит...
Последний раз редактировалось kpa9pt, 02.02.2010 в 13:07.
у тебя в окне скриптов справа список. так вот пакеты обрабатываются в порядке живой очереди (сверху вниз)
а вообще-нафига тебе это? хреновый способ обмена данными...
__________________
Intel® Core™2 Duo Processor E6400 @ 2.64GHz
Nvidia GeForce 9800GT
3 G Ram
1T HDD
Gentoo Linux x64
у тебя в окне скриптов справа список. так вот пакеты обрабатываются в порядке живой очереди (сверху вниз)
а вообще-нафига тебе это? хреновый способ обмена данными...
Мне нужно было зациклить несколько скриптов.
Пакеты от клиента, которые про те, что я вас спрашивал, они (соц действия, текст в чат, там ещё, что нить мб) не меняются у меня на сервере при рестарте, что очень удобно - не надо делать что-то дополнительного перед включением или выключением, а поскольку от клиента не работает приходиться брать от сервера , а они меняются при рестартах из-за смены char id. Вот зачем мне надо).