PDA

Просмотр полной версии : [Руководство] Гайд по написанию скриптов для L2phx


xxxReeZodeR=
06.09.2010, 16:39
Эта программа написанна на Delphi(Pascal), в ней используется скриптовый движек под названием Fast Script , к теме я прикрепил файл , в котором подробно описан этот движек со всеми его возможностями , я рекомендую вам прочитать этот файл , прежде чем читать тему далее.

Итак, я думаю вы уже прочитали информацию о FS , приступим к изучению синтаксиса скриптов с примерами.

Переменные

pck (string) - текущий обрабатываемый пакет (без первых двух байт с размером)
FromClient (boolean) - пакет (pck) пришел от клиента (всёравно что not FromServer)
FromServer (boolean) - пакет (pck) пришел от сервера (всёравно что not FromClient)
buf (string) - буфер, используемый некоторыми функциями
ConnectName (string) - имя чара от или к которому идёт пакет (v. 3.1.3+)
ConnectID (integer) - номер соединения для которого выполняется скрип

Функции

ShowTab и HideTab - для отображения/скрытия панели (UserTab), управлять которой можно из скрипта
Для рисования на ней контролов надо указывать UserTab в качестве родителя
SendToClient - отправляет клиенту содержимое переменной buf
SendToServer - отправляет серверу содержимое переменной buf
SendToClientEx(CharName: string) - отправляет клиенту с именем CharName содержимое переменной buf (v. 3.1.3+)
SendToServerEx(CharName: string) - отправляет серверу с именем CharName содержимое переменной buf (v. 3.1.3+)
(к пакету buf автоматически добавляются 2 байта длины)

NoFreeOnClientDisconnect - запрещает закрытие соединения при дисконекте клиента (v. 3.1.9+)
NoFreeOnServerDisconnect - запрещает закрытие соединения при дисконекте сервера (v. 3.1.9+)
YesFreeOnClientDisconnect - разрешает закрытие соединения при дисконекте клиента (v. 3.1.9+)
YesFreeOnServerDisconnect - разрешает закрытие соединения при дисконекте сервера (v. 3.1.9+)
(по умолчанию закрытия разрешены)

ReadC(var index:integer):byte - читает из переменной pck байт
ReadH(var index:integer):word - читает из переменной pck число (2 байта) (v. 3.1.8+)
ReadD(var index:integer):integer - читает из переменной pck число (4 байта)
ReadF(var index:integer): double - читает из переменной pck число c плавающей запятой(8 байт) (v. 3.1.8+)
ReadS(var index:integer):string - читает из переменной pck строку (в пакете строка unicode нультерминированная, а результирующая строка обычная паскалевская)
Index - начальная позиция чтения, которая модифицируется функцией (сдвигается на число считанных байт)

HStr(h:string):string - преобразует строку в HEX-последовательность
К примеру, HStr('AA 00 BB 00 CC 00') вернёт цепочку байт #$AA#$00#$BB#$00#$CC#$00. Можно передавать строку как с пробелами, так и без них; регистр символов не имеет значения.

WriteC(v:byte; ind:integer=0) - пишет в переменную buf один байт
WriteH(v:word; ind:integer=0) - пишет в переменную buf число (2 байта) (v. 3.1.8+)
WriteD(v:integer; ind:integer=0) - пишет в переменную buf число (4 байта)
WriteF(v: double; ind:integer=0) - пишет в переменную buf число c плавающей запятой(8 байт) (v. 3.1.8+)
WriteS(v:string) - пишет в переменную buf строку (автоматический перевод в unicode)
В первых четырёх процедурах присутствует необязательный параметр ind. Если параметр не указан, то переменная buf дополняется байтом/числом, иначе модифицируется часть буфера.

LoadLibrary(LibName:String):Integer - подгружает к программе библиотеку LibName и возвращает указатель на неё (v. 3.1.8+)
FreeLibrary(LibHandle:Integer):Boolean - выгружает из памяти программы библиотеку (v. 3.1.8+)
CallFunction(LibHandle:integer;FunctionName:String ;Count:Integ er;Params:array of variant):variant - вызывает функцию FunctionName из зарание подгруженной библиотеки с указателем LibHandle и параметрами перечисленными в Params (v. 3.1.8+)

Вкладка скрипты

Процедура OnConnect(WithClient: Boolean) вызывается при установке соединения, флаг WithClient указывает с клиентом ли произошло соединение (v. 3.1.9+)
Процедура OnDisconnect(WithClient: Boolean) вызывается при потере соединения (v. 3.1.9+)
Процедура Init вызывается когда вы устанавливаете рядом со скриптом галочку.
Процедура Free вызывается когда вы убираете рядом со скриптом галочку.
Основное тело скрипта (между begin и end) вызывается каждый раз при получении пакета от сервера или клиента если скрипт отмечен галочкой.

Вкладка дополнительно

Основное тело скрипта (между begin и end) вызывается по нажатию кнопки Выполнить, и прекращается либо по нажатию Стоп, либо по окончанию работы скрипта.

Рассмотрим пример простого скрипта

Итак , например, мы имеем двух чаров (2 окна) char1 и char2 , постараемся написать скрипт, который бы при определенном действии char1 сделал бы так , чтобы char2 повторил действие , не разворачивая окна.
Пусть char1 должен будет выполнить действие Victory и после чего char2 повторит его.
Пакет социального действия Victory - 1b 04 00 00 00 , а значит , исходя из изложенного выше мы можем написать простой скрипт:

begin
if FromClient and (ConnectName='char1')
and (pck=HStr('1b 04 00 00 00')) then begin
buf:=HStr('1b 04 00 00 00');
SendToServerEx('char2');
pck:='';
end;
end.
Файл ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
Вот и все , пора заканчивать гайд , спасибо за внимание , права на гайд частично принадлежат Mmoworld.info ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) и частично создателю программы Xkor.

если повтор просьба //delete , но я не нашёл такую тему