M6vsKGB, скрипт писать надо с создания заготовки, в пакетхаке это создать "новый скрипт".
Шаблон
delphi Код:
procedure Init; //Вызывается при включении скрипта
begin
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin
end;
procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
end.
Далее, начинаешь наполнять переменными, вспомогательными функциями/процедурами, таймерами и в основном теле обработчиками пакетов.
Заполняем шаблон
delphi Код:
//имя программы (не обязательно)
program newscript;
//здесь надо описывать константы
const
Name='Имя чара';
maxitems=250; //max количество предметов в базе
{...}
//далее описывать переменные
var
MyX, MyY, MyZ : integer;
//требуется для поддержки БД BuyList
BaseBuyItems: array[1..maxitems, 1..2] of integer; //все предметы в инвентаре продавца
BuyListID: integer; //ID списка на продажу (всегда новый)
{...}
procedure Init; //Вызывается при включении скрипта
begin
//в этой процедуре обычно описываем переменные, которые надо инициализировать
//также здесь описываем создание форм и объектов
{...}
end;
procedure Free; //Вызывается при выключении скрипта
begin
//здесь описываем освобождение занятых ресурсов объектами и формами
{...}
end;
procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin
end;
procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin
end;
//здесь надо описывать процедуры и функции
{...}
procedure BuyList;
{Создаем базу BaseBuyItems}
var
i, j, k: integer;
ListCount: integer;
begin
j:=6; //смещение для ListID
BuyListID:=ReadD(j);
ListCount:=ReadH(j); //количество итемов не должно превышать max!
for i:=1 to maxitems do
begin
if (i<=ListCount) then
begin
inc(j,6);
BaseBuyItems[i,1]:=ReadD(j); //ItemID
inc(j,18);
BaseBuyItems[i,2]:=ReadD(j); //Price*TaxRate
inc(j,32);
end else
for k:=1 to 2 do BaseBuyItems[i,k]:=0; // забиваем нулями
end;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//здесь описываем вызовы обработчиков пакетов или если обработчики короткие, то можно писать их и здесь
//не обрабатываем пустые пакеты, сразу на выход
if pck='' then exit;
//пошли обработчики серверных пакетов
if (ConnectName=Name) and FromServer then
begin
case pck[1] of
#$07: begin //07=BuyList
BuyList; //вызываем процедуру обработки пакета BuyList
end;
{...}
end;
end;
//пошли обработчики клиентских пакетов
if (ConnectName=Name) and FromClient then
begin
case pck[1] of
//ValidatePosition пакет от клиента с моими кординатами
//59=ValidatePosition:d(X)d(Y)d(Z)d(Heading)d(Data)
#$59: begin
//обрабатываем пакет без вызова обработчика
MyX:=ReadD(2); //получаю координату х моего чара
MyY:=ReadD(6); //получаю координату у моего чара
MyZ:=ReadD(10); //получаю координату z моего чара
end;
{...}
end;
end;
end.
PS: скрипт можно вставить в пакетхак и проверить