Вход

Просмотр полной версии : Не срабатывает Init


guplen
17.11.2009, 19:28
Нужно чтобы при включении скрипта у сервера запрашивался инвентарь. Делаю это так:

procedure Init; //Вызывается при включении скрипта
begin
buf:=#$14;
SendToServer;
end;

Но ничего не происходит.
В чем проблема?

ПС: вчера мучился, не всегда запускался скрипт... то есть ставишь галочку и ничего не происходило.

alexteam
17.11.2009, 19:36
а теперь пошевелим мозгами.
инит вызываеться при включении скрипта. правильно ?
SendToServer отсылает данные из buf от имени текущего соединения.
текущее соединение назначается только в момент отработки тела скрипта (переменные connectionname и connectionid заполнены только в теле "begin .... end.", в инит, фри и событиях таймера они не заданы.)
вывод: "голый" SendToServer не будет отправлять данные в ините. т.к. не задано имя соединения.
2 решения.
1. использовать sendtoserverex
2. задать useforconnectionname в начале инита, в таком случае sendtoserver будет знать кому отправлять данные. и будет это делать.

зы. когда ставишь галочку напротив скрипта "чтото" точно происходит.

guplen
17.11.2009, 19:41
Спасибо за разъяснение.
Т.е. сделать универсальный запрос инвентаря из Init для любого чара не получится?

alexteam
17.11.2009, 19:57
Разве что реализовать функцию бродкаста с помошю плагинов. и использовать ее в скриптах.

guplen
17.11.2009, 21:21
Это уже через чур для простенького скрипта =)
Спасибо за ответы, значит буду как то по другому выкручиваться =)

Добавлено через 1 час 20 минут
Хотелось бы еще вот что узнать: для каждого соединения запускается отдельная копия скрипта? Или для всех соединений один скрипт?

alexteam
17.11.2009, 21:25
для всех соединений один экземпляр фастскрипта (скрипт).
в момент прихода пакета от/к клиенту ему присываиваются переменные (пцк, коннектионнейм, коннектионайди) и он запускается на исполнение (тело скрипта).

guplen
17.11.2009, 21:42
Хм.. а есть ли проверка FromServer, только для конкретного соединения (что-то вроде FromServerEx(name))? А то когда заношу свой OID в переменную, то туда попадает ОИД с того окна, в котором последним пришел пакет UserInfo. Возможно ли делать проверку под конкретного чара?

Вспомнил! Я делал так когда-то. Надо в условие добавить проверку connectname=name.

ПС: в версии пакет хака 3.4 я спокойно из инита отправлял пакет на сервер. Почему в версии 3.5 так нельзя? Логика работы со скриптом поменялась?

alexteam
17.11.2009, 22:28
логика.. хм.
сейчас, в момент когда не выполняется тело скрипта переменные по которым sento отпределяет каковому из соединений пакет слать - обнуляются. что есть правильно по многим соображениям.
раньше этого не было.

Надо в условие добавить проверку connectname=name.
либо назначить useforconnectionname = 'xxxx'; в ините. тогда тело скрипта будет выполняться только для данного соединения и игнорироваться для остальных. так же sendtoserver будет работать аналогично sendtoserverex(useforconnectionname)
это вообще, замечательная переменная. снижающая нагрузку на скриптовый енджин и сокращающая кол-во кода.

все функции описаны в faq... кстати..

guplen
17.11.2009, 22:36
Да, с такой штукой скрипт работает нормально.
либо назначить useforconnectionname = 'xxxx'; в ините.
Пробовал как написано, выдавало ошибку. Если убрать красное, то все пучком =)

alexteam
17.11.2009, 22:37
ну, я по памяти пишу... а так... ctrl+space..