Прежде всего вам понадобится умение программирования на Object Pascal (или Delphi, что примерно тоже самое) и для манипуляций с пакетами естественно понадобится знать что они из себя представляют, о пакетах подробнее можно почитать в соответствующем разделе.
В этой теме я лиш приведу описания внутренних функций и переменных программы.
Описание FastScript: (это скриптовой движек использованный в программе)
http://forum.coderx.ru/uploads/fs.rtf
Доступные переменные:
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+)
(по умолчанию закрытия разрешены)
DisconnectServer - закрывает соединение с сервером (
v. 3.2.0+)
DisconnectClient - закрывает соединение с клиентом (
v. 3.2.0+)
ConnectNameByID(id:integer):string - возвращает имя соединения по его ID (
v. 3.2.0+)
ConnectIDByName(name:string):integer - возвращает ID соединения по его имени (
v. 3.2.0+)
SetName(Name:string) - устанавливает имя соединения (
v. 3.2.0+)
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+)
Пример:
buf=HStr('AA BB CC DD EE');
Если вызвать функцию WriteD(10,1), то получим buf=[0A 00 00 00 EE].
А если просто WriteD(10), то [AA BB CC DD EE 0A 00 00 00].
Например скрипт:
	Код:
	begin
  if FromClient and (ConnectName='SokolA') 
  and (pck=HStr('1b 04 00 00 00')) then begin
    buf:=HStr('45 00 00 00 00 00 00 00 00 00');
    SendToServerEx('SokolB');
    pck:='';
  end;
end.
 При получении от клиента играющего за чара с ником SokolA пакета 1b 04 00 00 00 (социальное действие "Victory") непропустит этот пакет и отправит пакет 45 00 00 00 00 00 00 00 00 00 (команда сесть) от имени клиента играющего за чара с ником SokolB, тоесть играете вы в два окна, в одном SokolA, в другом SokolB, нажимаете в первом Victory, и SokolB садится.
Пример вызова функций из системных библиотек:
	Код:
	var
  lib,Lib1:Integer;
  Res:variant;
  ar:array of variant;
begin
  lib := loadLibrary('User32.dll');
  lib1 := loadLibrary('GDI32.dll');
  Res := CallFunction(lib,'MessageBoxW',4,[nil,'Text1','text2',0]);
  Res := CallFunction(lib,'GetDC',1,[0]);
  CallFunction(lib1,'LineTo',3,[Res,100,100]);
  CallFunction(lib,'ReleaseDC',2,[0,Res]);
  FreeLibrary(lib);
  FreeLibrary(lib1);
end.
 На вкладке Скрипты:
Процедура 
OnConnect(WithClient: Boolean) вызывается при установке соединения, флаг 
WithClient указывает с клиентом ли произошло соединение (
v. 3.1.9+)
Процедура 
OnDisconnect(WithClient: Boolean) вызывается при потере соединения (
v. 3.1.9+)
Процедура 
Init вызывается когда вы устанавливаете рядом со скриптом галочку.
Процедура 
Free вызывается когда вы убираете рядом со скриптом галочку.
Основное тело скрипта (между 
begin и 
end) вызывается каждый раз при получении пакета от сервера или клиента если скрипт отмечен галочкой.
На вкладке Дополнительно:
Основное тело скрипта (между 
begin и 
end) вызывается по нажатию кнопки 
Выполнить, и прекращается либо по нажатию 
Стоп, либо по окончанию работы скрипта.