PDA

Просмотр полной версии : Скрипт на продажу


NLObP
24.04.2008, 02:53
Выкладываю скрипт продажи вещей. Как пользоваться, написано в начале скрипта. Основа из скрипта рыбалки.
//Автоматизация продажи by NLObP для L2PacketHack v.3.1.8+//
//version 0.1
program SellBot;

{
Скрипт распространяется как есть, и я не несу ответственности
за то, что ВЫ натворили у себя, его используя.

Проверялось на TheAbyss.ru (С6-interlude) и www.lagam.net(c4)

Перед использованием скрипта изменяем под свой сервер, один раз:
Name='NLObP'; //имя чара для которого включаем скрипт
max=80; //размер инвентаря чара
//установить константу в зависимости от типа игры (С4 или C6-Интерлюд)
IL=true; //true - IL, false - C4
//оставить один из них или поставить свой
kID=1000000; //коэфф вычитаемый из NpcID C4 www.lagam.net
kID=1023000; //коэфф вычитаемый из NpcID C6 theAbyss.ru
//ID продавца
TraderID=8573; //Фишерман Monakan в Гиран-харборе
//сюда вписываем ItemID предметов для автопродажи (продается за 1 раз не более 99999 штук)
//например 1467=Soulshot: S-grade
TradeSellItem=[1467,1467,1467,1467]; //повторим 4 раза продажу Soulshot: S-grade не более 99999 за каждый раз
//количество предметов в массиве TradeSellItem (например, повторов продаж одной вещи)
TradeSellItemCount=4;

Затем для осуществления продажи, делаем каждый раз:
1)Для получения TraderOID требуется отбежать от него (например продавца TraderID=8573
Фишерман Monakan в Гиран-харборе) на причал влево к самой воде и вернуться.

2)На Абисе S>Пакет UserInfo #$04 очень тяжело дождаться, а он нужен для инициализации
скрипта. Нужно купить или продать не нужную вещицу и Пакет UserInfo #$04 прийдет от сервера.
На www.lagam.net(c4) проще, открываем инвентарь, сняли/одели оружие.

3)Увидим сообщение, что скрипт готов к работе:
msg.Lines.Add('Скрипт инициализирован!');
msg.Lines.Add('Социальное действие YES - начать!');
msg.Lines.Add('Социальное действие NO - остановиться!');

На форме кнопки старт и стоп дублируют социальные действия.
Всё остальное на форме в разработке и не используется в текущее время.

}

const
Name='NLObP'; //имя чара для которого включаем скрипт
max=80; //размер инвентаря чара

//установить константу в зависимости от типа игры (С4 или C6-Интерлюд)
IL=true; //true - IL, false - C4

// kID=1000000; //коэфф вычитаемый из NpcID C4 www.lagam.net
kID=1023000; //коэфф вычитаемый из NpcID C6 theAbyss.ru
TraderID=8573; //Фишерман Monakan в Гиран-харборе

//C4 www.lagam.net и на C6 TheAbyss.ru
getselllist='menu_select?ask=-1&reply=8';

//сюда вписываем ItemID предметов для автопродажи
TradeSellItem=[6904,6905,6906,6907,6920,6921,6922,6923,6924,6925, 7686,7695,7696,7697,7698,7699,7700];
//количество предметов в массиве TradeSellItem
TradeSellItemCount=17;

//************************************************** *************
var
SellItemOID, SellItemID, SellItemValue, trade: integer;
TraderOID: integer;
ListID, i: integer;
Trade1: TTimer;
MaxHP, CurHP, MyID, but, MyXpos, MyYpos, MyZpos: integer;
ColvoHP, NeedBuy, ColvoItm, ColvoItm2, SocialID : integer;
ReadyToBuy, ReadyToSell, ReadyToMultiSell, add, status : boolean;
trd, TradeCount, TradeID, EndTradeID, UpdType, ItemOID, ItemID, Lvl: integer;

ItemBase: array[1..3,1..max] of integer; //все предметы в инвентаре
ItemBase2: array[1..3,1..max] of integer; //найденные по ItemID
{
1 - ObjectID
2 - ItemID
3 - ItemCount
}

offs1, offs2, offs3, offs4, offs5 : integer;

Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;

ComboBox1: TComboBox;
ComboBox2: TComboBox;

Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;

Button1: TButton;
Button2: TButton;

msg: TMemo;
frm: TForm;

//************************************************** *************
//Вызывается при включении скрипта
//************************************************** *************
procedure Init;
begin
if IL then begin //Interlude
//CreateItemBase
offs1:=24;
//InventoryUpdate
offs2:=22;
//UserInfo, основной цикл
offs3:=48;
//InventoryUpdate, основной цикл
offs4:=38;
//ItemList, основной цикл
offs5:=36;
end else begin //C4
offs1:=16;
offs2:=14;
offs3:=44;
offs4:=30;
offs5:=28;
end;
//ПАНЕЛЬКА
frm:=TForm.Create(nil);
with frm do
begin
Caption:='SellBot by NLObP';
BorderStyle := bsSizeable;
Position := poScreenCenter;
Left := 0;
Top := 0;
ClientHeight := 310;
ClientWidth := 418;
end;
//кнопка1
Button1:=TButton.Create(frm);
with Button1 do
begin
Name:='Button1';
Parent:=frm;
// SetBounds(112, 96, 75, 25);
Left:=112;
Top:=96;
Width:=75;
Height:=25;
Caption:='Start';
OnClick:=@Button1Click; { same as b.OnClick := 'ButtonClick' }
end;
//кнопка2
Button2:=TButton.Create(frm);
with Button2 do
begin
Name:='Button2';
Parent:=frm;
// SetBounds(112, 96, 75, 25);
Left:=190;
Top:=96;
Width:=75;
Height:=25;
Caption:='Stop';
OnClick:=@Button2Click; { same as b.OnClick := 'ButtonClick' }
end;
ComboBox1:=TComboBox.Create(frm);
with ComboBox1 do
begin
Name:='ComboBox1';
Parent:=frm;
Left := 8;
Top := 24;
Width := 145;
Height := 21;
ItemHeight := 13;
ItemIndex := 0;
TabOrder := 0;
Text := 'ComboBox1';
OnChange:=@ComboBox1Change;
// OnClick:=@ComboBox1Click;
end;
ComboBox2:=TComboBox.Create(frm);
with ComboBox2 do
begin
Name:='ComboBox2';
Parent:=frm;
Left := 8;
Top := 72;
Width := 145;
Height := 21;
ItemHeight := 13;
TabOrder := 2;
Text := 'ComboBox2';
OnChange:=@ComboBox2Change;
// OnClick:=@ComboBox2Click;
end;
Label1:=TLabel.Create(frm);
with Label1 do
begin
Name:='Label1';
Parent := frm;
Left := 8;
Top := 5;
Width := 50;
Height := 13;
Caption := 'Name NPC';
end;
Label2:=TLabel.Create(frm);
with Label2 do
begin
Name:='Label2';
Parent := frm;
Left := 159;
Top := 5;
Width := 34;
Height := 13;
Caption := 'NPC ID';
end;
Label3:=TLabel.Create(frm);
with Label3 do
begin
Name:='Label3';
Parent := frm;
Left := 8;
Top := 53;
Width := 52;
Height := 13;
Caption := 'Name Item';
end;
Label4:=TLabel.Create(frm);
with Label4 do
begin
Name:='Label4';
Parent := frm;
Left := 159;
Top := 53;
Width := 36;
Height := 13;
Caption := 'Item ID';
end;
Label5:=TLabel.Create(frm);
with Label5 do
begin
Name:='Label5';
Parent := frm;
Left := 288;
Top := 5;
Width := 34;
Height := 13;
Caption := 'ByPass';
end;
Label6:=TLabel.Create(frm);
with Label6 do
begin
Name:='Label6';
Parent := frm;
Left := 286;
Top := 53;
Width := 26;
Height := 13;
Caption := 'Value';
end;
Edit1:=TEdit.Create(frm);
with Edit1 do
begin
Name:='Edit1';
Parent := frm;
Left := 159;
Top := 24;
Width := 121;
Height := 21;
TabOrder := 1;
Text := '0';
end;
Edit2:=TEdit.Create(frm);
with Edit2 do
begin
Name:='Edit2';
Parent := frm;
Left := 159;
Top := 72;
Width := 121;
Height := 21;
TabOrder := 3;
Text := '0';
end;
Edit3:=TEdit.Create(frm);
with Edit3 do
begin
Name:='Edit3';
Parent := frm;
Left := 286;
Top := 24;
Width := 121;
Height := 21;
TabOrder := 4;
Text := 'menu_select?ask=-1&reply=8';
end;
Edit4:=TEdit.Create(frm);
with Edit4 do
begin
Name:='Edit4';
Parent := frm;
Left := 288;
Top := 72;
Width := 121;
Height := 21;
TabOrder := 5;
Text := '0';
end;
msg:=TMemo.Create(frm);
with msg do
begin
Parent := frm;
align:=alBottom;
ReadOnly:=true;
ScrollBars:=2;
Width:=418;
Height:=180;
Lines.Add('...');
end;
frm.Show;

trade1:=TTimer.Create(nil);
trade1.OnTimer:=@Ontrade1;
trade1.enabled:=false;
trade1.interval:=1000; //время задержки
end;

//************************************************** *************
//Вызывается при выключении скрипта
//************************************************** *************
procedure Free;
begin
ItemBase:=nil;
ItemBase2:=nil;
label1.Free;
label2.Free;
label3.Free;
label4.Free;
label5.Free;
label6.Free;
edit1.Free;
edit2.Free;
edit3.Free;
edit4.Free;
combobox1.Free;
combobox2.Free;
button1.Free;
button2.Free;
msg.Free;
frm.Free;

trade1.OnTimer := nil;
trade1.Enabled := false;
trade1.Interval := 0;
trade1.Free;
//считываем ID
// TraderID:=8572;
// Edit1.Text:=inttostr(TraderID);
end;

//************************************************** ****************************
procedure Button1Click(Sender: TButton);
begin
// Button1.Caption := 'Stop';
// ShowMessage(Sender.Name);
// frm.ModalResult:=mrOk;
// if not status then exit;
// TraderID:=strtoint(Edit1.Text);
msg.Lines.Add('TraderID:'+inttostr(TraderID));
{ SellItemID:=strtoint(Edit2.Text);
SellItemValue:=strtoint(Edit4.Text);
msg.Lines.Add('SellItemID:'+inttostr(SellItemID));
msg.Lines.Add('SellItemValue:'+inttostr(SellItemVa lue));
} Status:=true;
trade1.enabled:=true;
msg.Lines.Add('Начинаем продавать...');
end;
//************************************************** ****************************
procedure Button2Click(Sender: TButton);
begin
Status:=false;
trade1.enabled:=false;
msg.Lines.Add('Хватит на сегодня!');
end;

//************************************************** ****************************
procedure ComboBox1Click(Sender: TObject);
begin
ShowMessage(Sender.ClassName);
frm.ModalResult:=mrOk;
end;
//************************************************** ****************************
procedure ComboBox1Change(Sender: TObject);
begin
ShowMessage(Sender.ClassName);
frm.ModalResult:=mrOk;
ComboBox1.Items.Add('Новая строка');
Edit1.Text:=ComboBox1.Items.Strings[ComboBox1.ItemIndex];
// Edit1.text:=ComboBox1.text;
ComboBox1.Items.Delete(ComboBox1.ItemIndex);
end;
//************************************************** ****************************
procedure ComboBox2Click(Sender: TObject);
begin
// ShowMessage(Sender.Name);
// frm.ModalResult:=mrOk;
end;
//************************************************** ****************************
procedure ComboBox2Change(Sender: TObject);
begin
// ShowMessage(Sender.Name);
// frm.ModalResult:=mrOk;
end;

//************************************************** *************
//21=RequestBypassToServer:s(Cmd)
//посылаем, чтобы получить пакет BuyItem с ListID
procedure RequestByPassToServer(cmd:string);
begin
buf:=#$21;
WriteS(cmd);
SendToServerEx(Name);
end;

//************************************************** *************
//s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemTy pe1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d( ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice)

//c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectI D)i(ItemID)d(Count)
//продаем по одному типу
procedure RequestSellItem(ItemOID,ItemID,Count:integer);
begin
if ReadyToSell then begin
msg.Lines.Add('Продадим предмет OID:'+inttostr(ItemOID)+' ID:'+inttostr(ItemID)+' в кол-ве:'+inttostr(count));
buf:=#$1E;
WriteD(ListID);
WriteD(1);
WriteD(ItemOID);
WriteD(ItemID);
if count>99999 then count:=99999; //макс количество продаваемых вещей
WriteD(Count);
SendToServerEx(Name);
end;
end;

//************************************************** *************
//c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)
//купим по одному типу
procedure RequestBuyItem(ItemID,Count:integer);
begin
if ReadyToBuy then begin
msg.Lines.Add('Купим предмет ID:'+inttostr(ItemID)+' в кол-ве:'+inttostr(count));
buf:=#$1F;
WriteD(ListID);
WriteD(1);
WriteD(ItemID);
WriteD(Count);
SendToServerEx(Name);
end;
end;

//************************************************** *************
//cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount)
//продаем по одному типу
procedure RequestMultiSellItem(ListId,EntryID,Count:integer) ;
begin
msg.Lines.Add('Обменяем предмет ListID:'+inttostr(ListID)+' EntryID:'+inttostr(EntryID)+' в кол-ве:'+inttostr(count));
if ReadyToMultiSell then begin
buf:=#$A7;
WriteD(ListID);
WriteD(EntryId);
WriteD(Count);
SendToServerEx(Name);
end;
end;

//************************************************** *************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Target(Attacker: Integer);
begin
buf:=#$04;
WriteD(Attacker);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
WriteC(00);
SendToServerEx(Name);
end;

//************************************************** *************
procedure TargetAttacker(Attacker: Integer);
begin
msg.Lines.Add('Attacker='+IntToStr(Attacker)+' Player='+IntToStr(MyID));
Target(Attacker);
delay(1000);
Target(Attacker);
end;

//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
procedure OnTrade1(Sender: TObject);
begin
//-------------------------------------------------
//продаем фишерману из массива TradeSellItem
//-------------------------------------------------
if ReadyToSell then exit; //если еще не продали предыдущую вещь, то выходим сразу
//мы у фишермана, продаем всё ненужное
if TraderOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID продавца! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if (TradeCount=TradeSellItemCount) then begin //проверка на выход из массива
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Всё продали!');
end else begin
if FindItem(TradeSellItem[TradeCount])<>0 then begin //проверка, что предмет есть в инвентаре и его можно продать
TargetAttacker(TraderOID); //фишермана в таргет
msg.Lines.Add('Готовы продать:'+inttostr(TradeSellItem[TradeCount]));
ReadyToSell:=true; //готовы продавать
end else msg.Lines.Add('Нет такого предмета:'+inttostr(TradeSellItem[TradeCount]));
inc(TradeCount); //выбираем следующий предмет
msg.Lines.Add('TradeCount/TradeSellItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeSellItemCount-1));
end;
end;

//************************************************** ****************************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
var
i, j, ListCount: integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
end;
ColvoItm:=0;
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
if ListCount>max then ListCount:=max;
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
itemBase[3,i]:=ReadD(j); //ItemCount
//Say('i='+inttostr(i)+' ItemBase[1,i]='+IntToStr(ItemBase[1,i])+' ItemBase[2,i]='+IntToStr(ItemBase[2,i])+' ItemBase[3,i]='+IntToStr(ItemBase[3,i]));
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)
j:=j+offs1; //16 для С4, 24 для интерлюдии
end;
ColvoItm:=ListCount;
msg.Lines.Add('>ColvoItm='+IntToStr(Colvoitm));
end;

//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, ObjID, ItemID, ItemCount, ListCount, UpdType: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - Lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
// Say('Апдейт базы!');
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
ItemCount:=ReadD(j); //Count

// Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
case UpdType of
1: begin
for ii:=1 to max do
if (ItemBase[1,ii]=0) and (add=false) then begin
ItemBase[1,ii]:=ObjID;
ItemBase[2,ii]:=ItemID;
ItemBase[3,ii]:=ItemCount;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));
ColvoItm:=ColvoItm+ItemCount;
add:=true;
end;
end;
2: begin
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then begin
ItemBase[3,ii]:=ItemCount;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));
end;
end;
//удален
3: begin
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));
ItemBase[1,ii]:=0;
ItemBase[2,ii]:=0;
ItemBase[3,ii]:=0;
ColvoItm:=ColvoItm-ItemCount;
end;
end;
end;
j:=j+offs2; //14 для С4, 22 для интерлюдии
end;
msg.Lines.Add('>>ColvoItm='+IntToStr(Colvoitm));
end;

//************************************************** ****************************
function FindItem(item:integer) : integer; //находим в инвентаре все предметы с ItemID
var
i, j : integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase2[1,i]:=0;
ItemBase2[2,i]:=0;
ItemBase2[3,i]:=0;
end;
ColvoItm2:=0;
j:=1;
for i:=1 to max do begin
//находим подходящий предмет
if (ItemBase[2,i]=item) then begin
msg.Lines.Add('i='+inttostr(i)+' ItemBase[1,i]='+IntToStr(ItemBase[1,i])+' ItemBase[2,i]='+IntToStr(ItemBase[2,i])+' ItemBase[3,i]='+IntToStr(ItemBase[3,i]));
ItemBase2[1,j]:=ItemBase[1,i];
ItemBase2[2,j]:=ItemBase[2,i];
ItemBase2[3,j]:=ItemBase[3,i];
ColvoItm2:=ColvoItm2+ItemBase[3,i];
inc(j);
end;
end;
result:=colvoitm2;
msg.Lines.Add('ColvoItm2='+IntToStr(Colvoitm2));
end;

//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** ************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** ************************
//продажа состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemTy pe1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d( ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectI D)i(ItemID)d(Count)
//************************************************** ************************
if ReadyToSell and (TraderOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того, как мы взяли в таргет продавца приходит этот пакет (#$0F)
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=TraderOID then begin
delay(1000); //делаем небольшую паузу, чтобы пакеты шли в правильном порядке
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
RequestByPassToServer(GetSellList);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');
end;
end;
//после выбора пункта - продажа, приходит этот пакет (#$10)
//s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemTy pe1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d( ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice)
#$10: begin
delay(1000); //делаем небольшую паузу, чтобы пакеты шли в правильном порядке
msg.Lines.Add('S>Пакет SellList #$10');
ListID:=ReadD(6); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на продажу
//c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectI D)i(ItemID)d(Count)
msg.Lines.Add('C>Пакет RequestSellItem #$1E');
//продадим первый из списка
msg.Lines.Add('FindItem: OID:'+IntToStr(ItemBase2[1,1])+' ID:'+IntToStr(ItemBase2[2,1])+' Count:'+IntToStr(ItemBase2[3,1]));
RequestSellItem(ItemBase2[1,1],ItemBase2[2,1],ItemBase2[3,1]);
ReadyToSell:=false; //закончили с предметом
end;
end;
end;
end;
//************************************************** **************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$04: begin
//msg.Lines.Add('S>Пакет UserInfo #$04');
//пакет с инфой о моём чаре
i:=2;
MyXpos:=ReadD(i); //получаю координату х моего чара
MyYpos:=ReadD(i); //получаю координату у моего чара
MyZpos:=ReadD(i); //получаю координату z моего чара
//Запоминаем ИД
i:=18;
MyID:=ReadD(i); //получаю ид моего чара
//смещение переменное, зависит от имени (LenName*2+2)
i:=i+(Length(Name)*2+2)+offs3; //44 для С4, 48 для IL
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
//************************************************** ******************
//проверка на готовность скрипта
if (MyID<>0) and (TraderOID<>0) and (TraderID<>0) then begin // and (TraderOID<>0) and (TraderID<>0) and (SellItemOID<>0) and (SellItemID<>0) and (SellItemValue<>0) and not status
msg.Lines.Add('Скрипт инициализирован!');
msg.Lines.Add('Социальное действие YES - начать!');
msg.Lines.Add('Социальное действие NO - остановиться!');
end;
end;
//************************************************** *************
//16=NpcInfo:h(ObjectID)d(NpcTypeID)d(IsAttackable)d (X)d(Y)d(Z)d(Heading)d(d)d(Maspd)d(Paspd)d(runSpd) d(walkSpd)d(swimRSpd)d(swimWSpd)d(flRSpd)d(flWSpd) d(FlyRSpd)d(FlyWSpd)f(ProperMul)f(Paspd)f(CollisRa dius)f(CollisHeight)d(RHand)d(d)d(LHand)b(nameabov e)b(isRun)b(isInFight)b(isAlikeDead)b(isSummoned)s (Name)s(Title)d(d)d(d)d(karma?)d(abnEffect)d(d)d(d )d(d)d(d)b(c)b(Team)f(collisRadius)f(collisHeight) d(d)
#$16: begin
msg.Lines.Add('S>Пакет NpcInfo #$16');
//считываем ID
// TraderID:=strtoint(Edit1.Text);
if ReadD(6)=(kID+TraderID) then begin
TraderOID:=ReadD(2);
msg.Lines.Add('TraderOID='+inttostr(TraderOID));
end;
end;
//************************************************** *************
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
//ItemList - 28 для C4, 36 - IL
#$1B: begin
msg.Lines.Add('S>Пакет ItemListPacket #$1B');
CreateItemBase; //создание базы предметов
end;
//************************************************** *************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
//необходимо уточнить ItemID для своего сервера!!!
//запоминаем ObjectID Lure и ColvoLure
#$27: begin // 41(42) для IL, 32(34) для С4
msg.Lines.Add('S>Пакет InventoryUpdate #$27');
UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
end;
end;
end;
//************************************************** **************************
if (ConnectName=Name) and FromClient then begin
case pck[1] of
//Социальные действия
#$1B: begin
//msg.Lines.Add('C>Пакет RequestSicialAction #$1B');
case ReadD(2) of
//социальное действие Yes для начала ловли
6: begin
// if not status then exit;
Status:=true;
trade1.enabled:=true;
msg.Lines.Add('Начинаем продавать...');
//не передаем серверу
pck:='';
end;
//социальное действие No для окончания
5: begin
Status:=false;
trade1.enabled:=false;
msg.Lines.Add('Хватит на сегодня!');
//не передаем серверу
pck:='';
end;
end;
end;
//ValidatePosition пакет от клиента с моими кординатами
#$48: begin
//msg.Lines.Add('C>Пакет ValidatePosition #$48');
MyXpos:=ReadD(2); //получаю координату х моего чара
MyYpos:=ReadD(6); //получаю координату у моего чара
MyZpos:=ReadD(10); //получаю координату z моего чара
end;
end;
end;
end.

ЗЫЖ что-то отзывов нет, не работает что ли? :)

xkor
26.04.2008, 23:16
народ!, скрипты просьба выделять с помощью BBCode - [ HIGHLIGHT="delphi" ]ваш скрипт[ /HIGHLIGHT ]
а не с помощью [ PHP ][ /PHP ]

для этого просто выделяете скрипт и жмёте в редакторе сообщения самую правую кнопочку на панеле инструментов на которой нарисовано # и указываете в качестве параметра delphi

soel2
28.04.2008, 11:14
можно усовершенствовать скрипт чтобы не было такой ерунды типа
прописывания в переменной кол-ва вещей в инвентаре. кол-во вещей передаётся сразу после входа в игру. приходит пакет с полным описанием предметов в инвентарей.

NLObP
28.04.2008, 12:03
можно усовершенствовать скрипт чтобы не было такой ерунды типа прописывания в переменной кол-ва вещей в инвентаре. кол-во вещей передаётся сразу после входа в игру. приходит пакет с полным описанием предметов в инвентарей.

По моему ты не там спросил. Это скрипт на движение.
По вопросу. Ты про это?
max=80; //размер инвентаря чара

Скрипт обычно при входе в игру отключен. На версии 3.1.8 при включении без входа в игру выдает ошибку, так как завязан на имя подключения. Так что надо доработывать, чтобы была возможность включения скрипта до подключения чара.

VORON
28.04.2008, 13:14
По моему ты не там спросил. Это скрипт на движение.
По вопросу. Ты про это?
max=80; //размер инвентаря чара

Скрипт обычно при входе в игру отключен. На версии 3.1.8 при включении без входа в игру выдает ошибку, так как завязан на имя подключения. Так что надо доработывать, чтобы была возможность включения скрипта до подключения чара.

зачем??.. инвентарь стабильно вызывается в произвольный момент при отправке пакета 0F
смотреть ответ и узнавать размер пакета можно... а следовательно из размера пакета можно и кол-во предметов там узнать..

NLObP
28.04.2008, 19:05
зачем??.. инвентарь стабильно вызывается в произвольный момент при отправке пакета 0F
смотреть ответ и узнавать размер пакета можно... а следовательно из размера пакета можно и кол-во предметов там узнать..

Да, я просто глянул что у чара размер инвентаря 80 и прописал в переменной. Можно и по количеству вещей в инвентаре делать массив.

alxabay
29.04.2008, 13:25
Вот мой скрипт был такой баг у GMSHOP, что покупка-продажа меча берсек давала прибыль примерно 115к
скрипт что и делает автоматом может не совсем по вашей теме ну автопродажа..


//
// Script auto buy-sell v.4.0 (c)2007-2008 by Alxabay
// For home use only:)
// ()
// 2.1 работает на одну вещь
// 3.8 покупка стопки вещей
// +устранил косяк с буфером
// 4.0 все сделал как нада :)
// (выделить GMSHOP и Yes) проверял только на локальном сервере Interlude ява, на других может нету этого бг

const
Name='qqq'; //svoi nick
IDveshi=5286; //bersek prostoi
max=250;

maxBG=500; //maximalno skolko xotim bagov nadelat' maxBG*maxBUY*115k
maxBUY=30; //skolko pokupaem za 1 raz

var
status: boolean; //status pokupki - prodaji
SocialID,countBG:integer;
Timer1:TTimer;
VM: integer;

procedure Init;
begin
Timer1:=TTimer.Create(nil);
Timer1.OnTimer:=@OnTimer1;
Timer1.enabled:=false;
Timer1.interval:=400; //интервал таймера в милисекундах //bistree mojet kicknut' za flood
status:=false;
countBG:=0;
VM:=0;
end;
procedure Free;
begin
Timer1.Free;
end;
procedure Say(msg:string); //pisat' v igru
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;

function listaem: integer; //nujen paket s inventarem
var
i, j, ObjID, ItemID, ListCount: integer;
begin
Result:=0;
VM:=0;
j:=4; //смещение для ListCount
ListCount:=ReadH(j);
if ListCount>max then ListCount:=max;
j:=8; //смещение для ObjectID
buf:=hstr('1E 00 00 00 00');
writed(VM);
for i:=1 to ListCount do begin
ObjID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
j:=j+14;
ReadD(j); //lvl propuskaem
case ItemID of
IDveshi: begin
WriteD(ObjID);
writed(IDveshi);
WriteD(1);
VM:=VM+1;
end;
end;
j:=j+10;
end;
if (VM=0) then begin
exit;
end;
writed(VM,6);
status:=true;
sendtoserverex(Name);
end;

procedure Buy;
begin
buf:=hstr('A7 96 02 00 00 A0 BB 0D 00'); //pokupka v GMSHOP (тут номер списка и итема в нем, может быть по разному зависит от GMSHOPa)
writed(maxBUY);
writed(0);
SendToServerex(Name);
end;
procedure stopit;
begin
Timer1.Enabled:=false;//закончили :)
status:=false; //**********************************************
Say('bagernuli deneg: ~'+floattostr(maxBUY*115*countBG/1000)+'kk za '+floattostr(countBG*Timer1.interval/10/60)+'sec');
VM:=0;
countBG:=0;
end;



procedure OnTimer1(Sender: TObject);
begin
if status then exit; //uje kupili exit
if (countBG=maxBG) then stopit; //maxBG zakon4ili bagerit'
status:=true;
Buy;
inc(countBG);
end;


begin
if pck='' then exit;
if FromClient and (pck[1]=#$1B) then
begin
SocialID:=ReadD(2);
case SocialID of
6:begin if status then begin
Say('uje rabotaet ili xz ERROR!');
exit;
end;
Say('Bagerim: '+inttostr(maxBG)+' raz po '+inttostr(maxBUY)+' pushek');
countBG:=0;
VM:=0;
Timer1.Enabled:=true;//начали
end;
5:begin
stopit;
end;
end;
end;

if FromServer and (pck[1]=#$1B) and status then begin //paket o tom 4to v sumku upalo
status:=false;
listaem; //ishim i prodaem
end;
end.

NLObP
29.04.2008, 15:01
alxabay, 1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectID )i(ItemID)d(Count)
A7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Amo unt)w(ench)

В реале, на ПТС, ListID всегда разный и ИМХО с нулем не будет работать.

alxabay
29.04.2008, 22:03
1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectID )i(ItemID)d(Count)
A7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Amo unt)w(ench)
В реале, на ПТС, ListID всегда разный и ИМХО с нулем не будет работать.
тот сервер снесли ну скрипт работал дай боже:))
почему ListID(в 1E продажа) не может быть 0 вроде он и есть 0
а на счет h(ListID)d(EntryID) в А7 то согласен они различатся будут ну их и посмотреть нет проблем.

NLObP
29.04.2008, 23:22
ListID каждый раз новое, его нужно узнавать в момент торговли.
EntryID конечно можно заранее подсмотреть. В обмене вещей на пруфы я так и сделал.

Витя
25.08.2008, 17:49
а на камели или Hellbound будет работать?

Grinch
25.08.2008, 19:01
проверь

Витя
25.08.2008, 20:35
проверил не работает, запуская скрипт начинает виснуть и все время появляется надпись
>Пакет InventoryUpdate #$27
>>ColvoItm=0

QaK
26.08.2008, 08:36
проверил не работает, запуская скрипт начинает виснуть и все время появляется надпись
>Пакет InventoryUpdate #$27
>>ColvoItm=0хроники какие?

Витя
26.08.2008, 10:52
Цитата:
Сообщение от Витя Посмотреть сообщение
проверил не работает, запуская скрипт начинает виснуть и все время появляется надпись
>Пакет InventoryUpdate #$27
>>ColvoItm=0
хроники какие?

Hellbound

QaK
26.08.2008, 11:00
HellboundСкорее всего потому, что пакеты отличаются у Хелбаунда.Скрипт вроде под ИЛ адаптирован, насколько я помню.

NLObP
26.08.2008, 20:34
program SellBot;
Скрипт под Интерлюд и С4, для Хеллбонда надо исправлять ID пакетов.

Breadfan
27.08.2008, 14:34
Кстати, в моем случае (Камаель) необходимо править не только ID пакетов, но и делать процедуру получающую необходимый код для отправки в RequestBypassToServer, так как он постоянно разный, а за отправку неверного - АвтоБан :)

Витя
04.09.2008, 13:20
хмм поменял все ID пакетов, но все рано не работает, не получается найти ID итема и NPC.. хотя я их вписывал ID=268475707; //Фишерман Linnaeus в Адене
TradeSellItem=1462

Витя
08.09.2008, 19:53
кому не жалко поделитесь скриптом на продажу для камеля или хела =)

Добавлено через 10 часов 9 минут
Вот скрипт переделаный для камеля
//Автоматизация продажи by NLObP для L2PacketHack v.3.1.8+//
//version 0.1
program SellBot;

{
Скрипт распространяется как есть, и я не несу ответственности
за то, что ВЫ натворили у себя, его используя.

Проверялось на TheAbyss.ru (С6-interlude) и www.lagam.net(c4)

Перед использованием скрипта изменяем под свой сервер, один раз:
Name='NLObP'; //имя чара для которого включаем скрипт
max=80; //размер инвентаря чара
//установить константу в зависимости от типа игры (С4 или C6-Интерлюд)
IL=true; //true - IL, false - C4
//оставить один из них или поставить свой
kID=1000000; //коэфф вычитаемый из NpcID C4 www.lagam.net
kID=1023000; //коэфф вычитаемый из NpcID C6 theAbyss.ru
//ID продавца
TraderID=8573; //Фишерман Monakan в Гиран-харборе
//сюда вписываем ItemID предметов для автопродажи (продается за 1 раз не более 99999 штук)
//например 1467=Soulshot: S-grade
TradeSellItem=[1467,1467,1467,1467]; //повторим 4 раза продажу Soulshot: S-grade не более 99999 за каждый раз
//количество предметов в массиве TradeSellItem (например, повторов продаж одной вещи)
TradeSellItemCount=4;

Затем для осуществления продажи, делаем каждый раз:
1)Для получения TraderOID требуется отбежать от него (например продавца TraderID=8573
Фишерман Monakan в Гиран-харборе) на причал влево к самой воде и вернуться.

2)На Абисе S>Пакет UserInfo #$04 очень тяжело дождаться, а он нужен для инициализации
скрипта. Нужно купить или продать не нужную вещицу и Пакет UserInfo #$04 прийдет от сервера.
На www.lagam.net(c4) проще, открываем инвентарь, сняли/одели оружие.

3)Увидим сообщение, что скрипт готов к работе:
msg.Lines.Add('Скрипт инициализирован!');
msg.Lines.Add('Социальное действие YES - начать!');
msg.Lines.Add('Социальное действие NO - остановиться!');

На форме кнопки старт и стоп дублируют социальные действия.
Всё остальное на форме в разработке и не используется в текущее время.

}

const
Name='zShaDoWz'; //имя чара для которого включаем скрипт
max=148; //размер инвентаря чара

//установить константу в зависимости от типа игры (С4 или C6-Интерлюд)
IL=true; //true - IL, false - C4

// kID=1000000; //коэфф вычитаемый из NpcID C4 www.lagam.net
kID=1023000; //коэфф вычитаемый из NpcID C6 theAbyss.ru
TraderID=8573; //Фишерман Monakan в Гиран-харборе

//C4 www.lagam.net и на C6 TheAbyss.ru
getselllist='menu_select?ask=-1&reply=8';

//сюда вписываем ItemID предметов для автопродажи
TradeSellItem=[1462,1462,1462,1462,1462,1462,1462,1462,1462,1462, 1462,1462,1462,1462,1462,1462,1462];
//количество предметов в массиве TradeSellItem
TradeSellItemCount=17;

//************************************************** *************
var
SellItemOID, SellItemID, SellItemValue, trade: integer;
TraderOID: integer;
ListID, i: integer;
Trade1: TTimer;
MaxHP, CurHP, MyID, but, MyXpos, MyYpos, MyZpos: integer;
ColvoHP, NeedBuy, ColvoItm, ColvoItm2, SocialID : integer;
ReadyToBuy, ReadyToSell, ReadyToMultiSell, add, status : boolean;
trd, TradeCount, TradeID, EndTradeID, UpdType, ItemOID, ItemID, Lvl: integer;

ItemBase: array[1..3,1..max] of integer; //все предметы в инвентаре
ItemBase2: array[1..3,1..max] of integer; //найденные по ItemID
{
1 - ObjectID
2 - ItemID
3 - ItemCount
}

offs1, offs2, offs3, offs4, offs5 : integer;

Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;

ComboBox1: TComboBox;
ComboBox2: TComboBox;

Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;

Button1: TButton;
Button2: TButton;

msg: TMemo;
frm: TForm;

//************************************************** *************
//Вызывается при включении скрипта
//************************************************** *************
procedure Init;
begin
if IL then begin //Interlude
//CreateItemBase
offs1:=24;
//InventoryUpdate
offs2:=22;
//UserInfo, основной цикл
offs3:=48;
//InventoryUpdate, основной цикл
offs4:=38;
//ItemList, основной цикл
offs5:=36;
end else begin //C4
offs1:=16;
offs2:=14;
offs3:=44;
offs4:=30;
offs5:=28;
end;
//ПАНЕЛЬКА
frm:=TForm.Create(nil);
with frm do
begin
Caption:='SellBot by NLObP';
BorderStyle := bsSizeable;
Position := poScreenCenter;
Left := 0;
Top := 0;
ClientHeight := 310;
ClientWidth := 418;
end;
//кнопка1
Button1:=TButton.Create(frm);
with Button1 do
begin
Name:='Button1';
Parent:=frm;
// SetBounds(112, 96, 75, 25);
Left:=112;
Top:=96;
Width:=75;
Height:=25;
Caption:='Start';
OnClick:=@Button1Click; { same as b.OnClick := 'ButtonClick' }
end;
//кнопка2
Button2:=TButton.Create(frm);
with Button2 do
begin
Name:='Button2';
Parent:=frm;
// SetBounds(112, 96, 75, 25);
Left:=190;
Top:=96;
Width:=75;
Height:=25;
Caption:='Stop';
OnClick:=@Button2Click; { same as b.OnClick := 'ButtonClick' }
end;
ComboBox1:=TComboBox.Create(frm);
with ComboBox1 do
begin
Name:='ComboBox1';
Parent:=frm;
Left := 8;
Top := 24;
Width := 145;
Height := 21;
ItemHeight := 13;
ItemIndex := 0;
TabOrder := 0;
Text := 'ComboBox1';
OnChange:=@ComboBox1Change;
// OnClick:=@ComboBox1Click;
end;
ComboBox2:=TComboBox.Create(frm);
with ComboBox2 do
begin
Name:='ComboBox2';
Parent:=frm;
Left := 8;
Top := 72;
Width := 145;
Height := 21;
ItemHeight := 13;
TabOrder := 2;
Text := 'ComboBox2';
OnChange:=@ComboBox2Change;
// OnClick:=@ComboBox2Click;
end;
Label1:=TLabel.Create(frm);
with Label1 do
begin
Name:='Label1';
Parent := frm;
Left := 8;
Top := 5;
Width := 50;
Height := 13;
Caption := 'Name NPC';
end;
Label2:=TLabel.Create(frm);
with Label2 do
begin
Name:='Label2';
Parent := frm;
Left := 159;
Top := 5;
Width := 34;
Height := 13;
Caption := 'NPC ID';
end;
Label3:=TLabel.Create(frm);
with Label3 do
begin
Name:='Label3';
Parent := frm;
Left := 8;
Top := 53;
Width := 52;
Height := 13;
Caption := 'Name Item';
end;
Label4:=TLabel.Create(frm);
with Label4 do
begin
Name:='Label4';
Parent := frm;
Left := 159;
Top := 53;
Width := 36;
Height := 13;
Caption := 'Item ID';
end;
Label5:=TLabel.Create(frm);
with Label5 do
begin
Name:='Label5';
Parent := frm;
Left := 288;
Top := 5;
Width := 34;
Height := 13;
Caption := 'ByPass';
end;
Label6:=TLabel.Create(frm);
with Label6 do
begin
Name:='Label6';
Parent := frm;
Left := 286;
Top := 53;
Width := 26;
Height := 13;
Caption := 'Value';
end;
Edit1:=TEdit.Create(frm);
with Edit1 do
begin
Name:='Edit1';
Parent := frm;
Left := 159;
Top := 24;
Width := 121;
Height := 21;
TabOrder := 1;
Text := '0';
end;
Edit2:=TEdit.Create(frm);
with Edit2 do
begin
Name:='Edit2';
Parent := frm;
Left := 159;
Top := 72;
Width := 121;
Height := 21;
TabOrder := 3;
Text := '0';
end;
Edit3:=TEdit.Create(frm);
with Edit3 do
begin
Name:='Edit3';
Parent := frm;
Left := 286;
Top := 24;
Width := 121;
Height := 21;
TabOrder := 4;
Text := 'menu_select?ask=-1&reply=8';
end;
Edit4:=TEdit.Create(frm);
with Edit4 do
begin
Name:='Edit4';
Parent := frm;
Left := 288;
Top := 72;
Width := 121;
Height := 21;
TabOrder := 5;
Text := '0';
end;
msg:=TMemo.Create(frm);
with msg do
begin
Parent := frm;
align:=alBottom;
ReadOnly:=true;
ScrollBars:=2;
Width:=418;
Height:=180;
Lines.Add('...');
end;
frm.Show;

trade1:=TTimer.Create(nil);
trade1.OnTimer:=@Ontrade1;
trade1.enabled:=false;
trade1.interval:=1000; //время задержки
end;

//************************************************** *************
//Вызывается при выключении скрипта
//************************************************** *************
procedure Free;
begin
ItemBase:=nil;
ItemBase2:=nil;
label1.Free;
label2.Free;
label3.Free;
label4.Free;
label5.Free;
label6.Free;
edit1.Free;
edit2.Free;
edit3.Free;
edit4.Free;
combobox1.Free;
combobox2.Free;
button1.Free;
button2.Free;
msg.Free;
frm.Free;

trade1.OnTimer := nil;
trade1.Enabled := false;
trade1.Interval := 0;
trade1.Free;
//считываем ID
// TraderID:=8572;
// Edit1.Text:=inttostr(TraderID);
end;

//************************************************** ****************************
procedure Button1Click(Sender: TButton);
begin
// Button1.Caption := 'Stop';
// ShowMessage(Sender.Name);
// frm.ModalResult:=mrOk;
// if not status then exit;
// TraderID:=strtoint(Edit1.Text);
msg.Lines.Add('TraderID:'+inttostr(TraderID));
{ SellItemID:=strtoint(Edit2.Text);
SellItemValue:=strtoint(Edit4.Text);
msg.Lines.Add('SellItemID:'+inttostr(SellItemID));
msg.Lines.Add('SellItemValue:'+inttostr(SellItemVa lue));
} Status:=true;
trade1.enabled:=true;
msg.Lines.Add('Начинаем продавать...');
end;
//************************************************** ****************************
procedure Button2Click(Sender: TButton);
begin
Status:=false;
trade1.enabled:=false;
msg.Lines.Add('Хватит на сегодня!');
end;

//************************************************** ****************************
procedure ComboBox1Click(Sender: TObject);
begin
ShowMessage(Sender.ClassName);
frm.ModalResult:=mrOk;
end;
//************************************************** ****************************
procedure ComboBox1Change(Sender: TObject);
begin
ShowMessage(Sender.ClassName);
frm.ModalResult:=mrOk;
ComboBox1.Items.Add('Новая строка');
Edit1.Text:=ComboBox1.Items.Strings[ComboBox1.ItemIndex];
// Edit1.text:=ComboBox1.text;
ComboBox1.Items.Delete(ComboBox1.ItemIndex);
end;
//************************************************** ****************************
procedure ComboBox2Click(Sender: TObject);
begin
// ShowMessage(Sender.Name);
// frm.ModalResult:=mrOk;
end;
//************************************************** ****************************
procedure ComboBox2Change(Sender: TObject);
begin
// ShowMessage(Sender.Name);
// frm.ModalResult:=mrOk;
end;

//************************************************** *************
//21=RequestBypassToServer:s(Cmd)
//посылаем, чтобы получить пакет BuyItem с ListID
procedure RequestByPassToServer(cmd:string);
begin
buf:=#$23;
WriteS(cmd);
SendToServerEx(Name);
end;

//************************************************** *************
//s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemTy pe1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d( ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice)

//c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectI D)i(ItemID)d(Count)
//продаем по одному типу
procedure RequestSellItem(ItemOID,ItemID,Count:integer);
begin
if ReadyToSell then begin
msg.Lines.Add('Продадим предмет OID:'+inttostr(ItemOID)+' ID:'+inttostr(ItemID)+' в кол-ве:'+inttostr(count));
buf:=#$37;
WriteD(ListID);
WriteD(1);
WriteD(ItemOID);
WriteD(ItemID);
if count>80000 then count:=80000; //макс количество продаваемых вещей
WriteD(Count);
SendToServerEx(Name);
end;
end;

//************************************************** *************
//c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)
//купим по одному типу
procedure RequestBuyItem(ItemID,Count:integer);
begin
if ReadyToBuy then begin
msg.Lines.Add('Купим предмет ID:'+inttostr(ItemID)+' в кол-ве:'+inttostr(count));
buf:=#$40;
WriteD(ListID);
WriteD(1);
WriteD(ItemID);
WriteD(Count);
SendToServerEx(Name);
end;
end;

//************************************************** *************
//cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount)
//продаем по одному типу
procedure RequestMultiSellItem(ListId,EntryID,Count:integer) ;
begin
msg.Lines.Add('Обменяем предмет ListID:'+inttostr(ListID)+' EntryID:'+inttostr(EntryID)+' в кол-ве:'+inttostr(count));
if ReadyToMultiSell then begin
buf:=#$B0;
WriteD(ListID);
WriteD(EntryId);
WriteD(Count);
SendToServerEx(Name);
end;
end;

//************************************************** *************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Target(Attacker: Integer);
begin
buf:=#$1F;
WriteD(Attacker);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
WriteC(00);
SendToServerEx(Name);
end;

//************************************************** *************
procedure TargetAttacker(Attacker: Integer);
begin
msg.Lines.Add('Attacker='+IntToStr(Attacker)+' Player='+IntToStr(MyID));
Target(Attacker);
delay(1000);
Target(Attacker);
end;

//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
procedure OnTrade1(Sender: TObject);
begin
//-------------------------------------------------
//продаем фишерману из массива TradeSellItem
//-------------------------------------------------
if ReadyToSell then exit; //если еще не продали предыдущую вещь, то выходим сразу
//мы у фишермана, продаем всё ненужное
if TraderOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID продавца! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if (TradeCount=TradeSellItemCount) then begin //проверка на выход из массива
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Всё продали!');
end else begin
if FindItem(TradeSellItem[TradeCount])<>0 then begin //проверка, что предмет есть в инвентаре и его можно продать
TargetAttacker(TraderOID); //фишермана в таргет
msg.Lines.Add('Готовы продать:'+inttostr(TradeSellItem[TradeCount]));
ReadyToSell:=true; //готовы продавать
end else msg.Lines.Add('Нет такого предмета:'+inttostr(TradeSellItem[TradeCount]));
inc(TradeCount); //выбираем следующий предмет
msg.Lines.Add('TradeCount/TradeSellItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeSellItemCount-1));
end;
end;

//************************************************** ****************************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
var
i, j, ListCount: integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
end;
ColvoItm:=0;
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
if ListCount>max then ListCount:=max;
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
itemBase[3,i]:=ReadD(j); //ItemCount
//Say('i='+inttostr(i)+' ItemBase[1,i]='+IntToStr(ItemBase[1,i])+' ItemBase[2,i]='+IntToStr(ItemBase[2,i])+' ItemBase[3,i]='+IntToStr(ItemBase[3,i]));
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)
j:=j+offs1; //16 для С4, 24 для интерлюдии
end;
ColvoItm:=ListCount;
msg.Lines.Add('>ColvoItm='+IntToStr(Colvoitm));
end;

//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, ObjID, ItemID, ItemCount, ListCount, UpdType: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - Lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
// Say('Апдейт базы!');
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
ItemCount:=ReadD(j); //Count

// Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
case UpdType of
1: begin
for ii:=1 to max do
if (ItemBase[1,ii]=0) and (add=false) then begin
ItemBase[1,ii]:=ObjID;
ItemBase[2,ii]:=ItemID;
ItemBase[3,ii]:=ItemCount;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));
ColvoItm:=ColvoItm+ItemCount;
add:=true;
end;
end;
2: begin
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then begin
ItemBase[3,ii]:=ItemCount;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));
end;
end;
//удален
3: begin
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));
ItemBase[1,ii]:=0;
ItemBase[2,ii]:=0;
ItemBase[3,ii]:=0;
ColvoItm:=ColvoItm-ItemCount;
end;
end;
end;
j:=j+offs2; //14 для С4, 22 для интерлюдии
end;
msg.Lines.Add('>>ColvoItm='+IntToStr(Colvoitm));
end;

//************************************************** ****************************
function FindItem(item:integer) : integer; //находим в инвентаре все предметы с ItemID
var
i, j : integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase2[1,i]:=0;
ItemBase2[2,i]:=0;
ItemBase2[3,i]:=0;
end;
ColvoItm2:=0;
j:=1;
for i:=1 to max do begin
//находим подходящий предмет
if (ItemBase[2,i]=item) then begin
msg.Lines.Add('i='+inttostr(i)+' ItemBase[1,i]='+IntToStr(ItemBase[1,i])+' ItemBase[2,i]='+IntToStr(ItemBase[2,i])+' ItemBase[3,i]='+IntToStr(ItemBase[3,i]));
ItemBase2[1,j]:=ItemBase[1,i];
ItemBase2[2,j]:=ItemBase[2,i];
ItemBase2[3,j]:=ItemBase[3,i];
ColvoItm2:=ColvoItm2+ItemBase[3,i];
inc(j);
end;
end;
result:=colvoitm2;
msg.Lines.Add('ColvoItm2='+IntToStr(Colvoitm2));
end;

//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** ************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** ************************
//продажа состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemTy pe1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d( ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectI D)i(ItemID)d(Count)
//************************************************** ************************
if ReadyToSell and (TraderOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того, как мы взяли в таргет продавца приходит этот пакет (#$0F)
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$19: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$19');
if ReadD(2)=TraderOID then begin
delay(1000); //делаем небольшую паузу, чтобы пакеты шли в правильном порядке
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
RequestByPassToServer(GetSellList);
msg.Lines.Add('C>Пакет RequestBypassToServer #$23 (sell)');
end;
end;
//после выбора пункта - продажа, приходит этот пакет (#$10)
//s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemTy pe1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d( ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice)
#$06: begin
delay(1000); //делаем небольшую паузу, чтобы пакеты шли в правильном порядке
msg.Lines.Add('S>Пакет SellList #$06');
ListID:=ReadD(6); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на продажу
//c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectI D)i(ItemID)d(Count)
msg.Lines.Add('C>Пакет RequestSellItem #$37');
//продадим первый из списка
msg.Lines.Add('FindItem: OID:'+IntToStr(ItemBase2[1,1])+' ID:'+IntToStr(ItemBase2[2,1])+' Count:'+IntToStr(ItemBase2[3,1]));
RequestSellItem(ItemBase2[1,1],ItemBase2[2,1],ItemBase2[3,1]);
ReadyToSell:=false; //закончили с предметом
end;
end;
end;
end;
//************************************************** **************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$32: begin
//msg.Lines.Add('S>Пакет UserInfo #$32');
//пакет с инфой о моём чаре
i:=2;
MyXpos:=ReadD(i); //получаю координату х моего чара
MyYpos:=ReadD(i); //получаю координату у моего чара
MyZpos:=ReadD(i); //получаю координату z моего чара
//Запоминаем ИД
i:=18;
MyID:=ReadD(i); //получаю ид моего чара
//смещение переменное, зависит от имени (LenName*2+2)
i:=i+(Length(Name)*2+2)+offs3; //44 для С4, 48 для IL
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
//************************************************** ******************
//проверка на готовность скрипта
if (MyID<>0) and (TraderOID<>0) and (TraderID<>0) then begin // and (TraderOID<>0) and (TraderID<>0) and (SellItemOID<>0) and (SellItemID<>0) and (SellItemValue<>0) and not status
msg.Lines.Add('Скрипт инициализирован!');
msg.Lines.Add('Социальное действие YES - начать!');
msg.Lines.Add('Социальное действие NO - остановиться!');
end;
end;
//************************************************** *************
//16=NpcInfo:h(ObjectID)d(NpcTypeID)d(IsAttackable)d (X)d(Y)d(Z)d(Heading)d(d)d(Maspd)d(Paspd)d(runSpd) d(walkSpd)d(swimRSpd)d(swimWSpd)d(flRSpd)d(flWSpd) d(FlyRSpd)d(FlyWSpd)f(ProperMul)f(Paspd)f(CollisRa dius)f(CollisHeight)d(RHand)d(d)d(LHand)b(nameabov e)b(isRun)b(isInFight)b(isAlikeDead)b(isSummoned)s (Name)s(Title)d(d)d(d)d(karma?)d(abnEffect)d(d)d(d )d(d)d(d)b(c)b(Team)f(collisRadius)f(collisHeight) d(d)
#$0C: begin
msg.Lines.Add('S>Пакет NpcInfo #$0С');
//считываем ID
// TraderID:=strtoint(Edit1.Text);
if ReadD(6)=(kID+TraderID) then begin
TraderOID:=ReadD(2);
msg.Lines.Add('TraderOID='+inttostr(TraderOID));
end;
end;
//************************************************** *************
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
//ItemList - 28 для C4, 36 - IL
#$11: begin
msg.Lines.Add('S>Пакет ItemListPacket #$11');
CreateItemBase; //создание базы предметов
end;
//************************************************** *************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
//необходимо уточнить ItemID для своего сервера!!!
//запоминаем ObjectID Lure и ColvoLure
#$21: begin // 41(42) для IL, 32(34) для С4
msg.Lines.Add('S>Пакет InventoryUpdate #$21');
UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
end;
end;
end;
//************************************************** **************************
if (ConnectName=Name) and FromClient then begin
case pck[1] of
//Социальные действия
#$34: begin
//msg.Lines.Add('C>Пакет RequestSicialAction #$34');
case ReadD(2) of
//социальное действие Yes для начала ловли
6: begin
// if not status then exit;
Status:=true;
trade1.enabled:=true;
msg.Lines.Add('Начинаем продавать...');
//не передаем серверу
pck:='';
end;
//социальное действие No для окончания
5: begin
Status:=false;
trade1.enabled:=false;
msg.Lines.Add('Хватит на сегодня!');
//не передаем серверу
pck:='';
end;
end;
end;
//ValidatePosition пакет от клиента с моими кординатами
#$59: begin
//msg.Lines.Add('C>Пакет ValidatePosition #$59');
MyXpos:=ReadD(2); //получаю координату х моего чара
MyYpos:=ReadD(6); //получаю координату у моего чара
MyZpos:=ReadD(10); //получаю координату z моего чара
end;
end;
end;
end.



когда запускаю скрипт, начинаю торговать появляться надпись
"Нет такого предмета:1462"

NLObP
08.09.2008, 21:43
Ошибку вижу в
procedure CreateItemBase;
и
procedure UpdateItemBase;

ты не заметил вкрапления данных
d(ObjectID)d(ItemID:Get.Func01)d(LocationSlot)d(Co unt)
и
d(ObjectID)d(ItemID:Get.Func01)d(Location)d(Count)

11=ItemList:h(ShowWindow)h(ListSize:Loop.01.0021)h (ItemType1)d(ObjectID)d(ItemID:Get.Func01)d(Locati onSlot)d(Count)h(ItemType2)h(CustomType1)h(isEquip ped)d(BodyPart)h(EnchantLevel)h(CustType2)d(Augmen tationID)d(Mana)d(AttackAttrElement)d(AttackAttrEl ementVal)d(DefAttrFire)d(DefAttrWater)d(DefAttrWin d)d(DefAttrEarth)d(DefAttrHoly)d(DefAttrUnholy)
21=InventoryUpdate:h(ListSize:Loop.01.0021)h(Chang e)h(ItemType1)d(ObjectID)d(ItemID:Get.Func01)d(Loc ation)d(Count)h(ItemType2)h(CustomType1)h(isEquipp ed)d(BodyPart)h(EnchantLevel)h(CustType2)d(Augment ationBonus)d(Mana)d(AttackAttrElement)d(AttackAttr ElementVal)d(DefAttrFire)d(DefAttrWater)d(DefAttrW ind)d(DefAttrEarth)d(DefAttrHoly)d(DefAttrUnholy)

Витя
10.09.2008, 11:52
Понятно, так все поменял... теперь появляется сообщение в игре "Custom message with address: "ru.l2f.util.IllegalAction.case!" is unsupported!"
и происходит разрыв соединения

Breadfan
10.09.2008, 16:38
Я повторюсь: Кстати, в моем случае (Камаель) необходимо править не только ID пакетов, но и делать процедуру получающую необходимый код для отправки в RequestBypassToServer, так как он постоянно разный Выложи NpcHtmlMessage пакеты свои, и на каком месте появляется ошибка?

Витя
10.09.2008, 18:03
Я повторюсь: Выложи NpcHtmlMessage пакеты свои, и на каком месте появляется ошибка?

Вот пакет
19 45 9B 00 10 3C 00 68 00 74 00 6D 00 6C 00 3E 00 3C 00 62 00 6F 00 64 00 79 00 3E 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 4C 00 45 00 56 00 45 00 4C 00 22 00 3E 00 46 00 69 00 73 00 68 00 65 00 72 00 6D 00 65 00 6E 00 27 00 73 00 20 00 47 00 75 00 69 00 6C 00 64 00 20 00 4D 00 61 00 73 00 74 00 65 00 72 00 20 00 4D 00 6F 00 6E 00 61 00 6B 00 61 00 6E 00 3A 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 3C 00 62 00 72 00 3E 00 48 00 69 00 20 00 74 00 68 00 65 00 72 00 65 00 21 00 20 00 49 00 27 00 6D 00 20 00 4D 00 6F 00 6E 00 61 00 6B 00 61 00 6E 00 2C 00 20 00 61 00 20 00 6D 00 65 00 6D 00 62 00 65 00 72 00 20 00 6F 00 66 00 20 00 74 00 68 00 65 00 20 00 46 00 69 00 73 00 68 00 65 00 72 00 6D 00 65 00 6E 00 27 00 73 00 20 00 47 00 75 00 69 00 6C 00 64 00 2E 00 3C 00 62 00 72 00 3E 00 49 00 20 00 73 00 65 00 6C 00 6C 00 20 00 66 00 69 00 73 00 68 00 69 00 6E 00 67 00 20 00 73 00 75 00 70 00 70 00 6C 00 69 00 65 00 73 00 20 00 61 00 6E 00 64 00 20 00 74 00 65 00 61 00 63 00 68 00 20 00 66 00 69 00 73 00 68 00 69 00 6E 00 67 00 20 00 74 00 65 00 63 00 68 00 6E 00 69 00 71 00 75 00 65 00 73 00 20 00 74 00 6F 00 20 00 61 00 6C 00 6C 00 20 00 6C 00 65 00 76 00 65 00 6C 00 73 00 20 00 6F 00 66 00 20 00 66 00 69 00 73 00 68 00 65 00 72 00 6D 00 65 00 6E 00 2E 00 20 00 42 00 72 00 69 00 6E 00 67 00 20 00 6D 00 65 00 20 00 74 00 68 00 65 00 20 00 66 00 69 00 73 00 68 00 20 00 79 00 6F 00 75 00 20 00 63 00 61 00 74 00 63 00 68 00 20 00 61 00 6E 00 64 00 20 00 49 00 27 00 6C 00 6C 00 20 00 70 00 61 00 79 00 20 00 79 00 6F 00 75 00 20 00 66 00 6F 00 72 00 20 00 69 00 74 00 21 00 20 00 42 00 61 00 73 00 69 00 63 00 61 00 6C 00 6C 00 79 00 2C 00 20 00 77 00 68 00 65 00 6E 00 20 00 69 00 74 00 20 00 63 00 6F 00 6D 00 65 00 73 00 20 00 74 00 6F 00 20 00 66 00 69 00 73 00 68 00 69 00 6E 00 67 00 2C 00 20 00 49 00 27 00 6D 00 20 00 74 00 68 00 65 00 20 00 6F 00 6E 00 65 00 20 00 74 00 6F 00 20 00 73 00 65 00 65 00 21 00 20 00 48 00 61 00 21 00 3C 00 62 00 72 00 3E 00 3C 00 61 00 20 00 61 00 63 00 74 00 69 00 6F 00 6E 00 3D 00 22 00 62 00 79 00 70 00 61 00 73 00 73 00 20 00 2D 00 68 00 20 00 30 00 30 00 62 00 35 00 61 00 39 00 66 00 35 00 65 00 61 00 32 00 30 00 31 00 39 00 31 00 38 00 22 00 3E 00 46 00 69 00 73 00 68 00 69 00 6E 00 67 00 20 00 49 00 6E 00 73 00 74 00 72 00 75 00 63 00 74 00 69 00 6F 00 6E 00 73 00 3C 00 2F 00 61 00 3E 00 3C 00 62 00 72 00 3E 00 3C 00 61 00 20 00 61 00 63 00 74 00 69 00 6F 00 6E 00 3D 00 22 00 62 00 79 00 70 00 61 00 73 00 73 00 20 00 2D 00 68 00 20 00 36 00 62 00 35 00 31 00 36 00 38 00 34 00 36 00 35 00 61 00 36 00 39 00 33 00 32 00 64 00 31 00 22 00 3E 00 54 00 68 00 65 00 20 00 46 00 69 00 73 00 68 00 69 00 6E 00 67 00 20 00 4B 00 69 00 6E 00 67 00 20 00 43 00 68 00 61 00 6D 00 70 00 69 00 6F 00 6E 00 73 00 69 00 70 00 20 00 54 00 6F 00 75 00 72 00 6E 00 61 00 6D 00 65 00 6E 00 74 00 3C 00 2F 00 61 00 3E 00 3C 00 62 00 72 00 3E 00 3C 00 61 00 20 00 61 00 63 00 74 00 69 00 6F 00 6E 00 3D 00 22 00 62 00 79 00 70 00 61 00 73 00 73 00 20 00 2D 00 68 00 20 00 61 00 30 00 34 00 61 00 34 00 36 00 35 00 37 00 34 00 66 00 36 00 61 00 33 00 36 00 32 00 39 00 22 00 3E 00 22 00 49 00 20 00 77 00 61 00 6E 00 74 00 20 00 74 00 6F 00 20 00 69 00 6D 00 70 00 72 00 6F 00 76 00 65 00 20 00 6D 00 79 00 20 00 66 00 69 00 73 00 68 00 69 00 6E 00 67 00 20 00 73 00 6B 00 69 00 6C 00 6C 00 73 00 2E 00 22 00 3C 00 2F 00 61 00 3E 00 3C 00 62 00 72 00 3E 00 3C 00 61 00 20 00 61 00 63 00 74 00 69 00 6F 00 6E 00 3D 00 22 00 62 00 79 00 70 00 61 00 73 00 73 00 20 00 2D 00 68 00 20 00 62 00 36 00 36 00 66 00 31 00 39 00 65 00 32 00 35 00 36 00 64 00 62 00 30 00 36 00 65 00 66 00 22 00 3E 00 22 00 49 00 20 00 77 00 61 00 6E 00 74 00 20 00 74 00 6F 00 20 00 70 00 75 00 72 00 63 00 68 00 61 00 73 00 65 00 20 00 66 00 69 00 73 00 68 00 69 00 6E 00 67 00 20 00 65 00 71 00 75 00 69 00 70 00 6D 00 65 00 6E 00 74 00 2E 00 22 00 3C 00 2F 00 61 00 3E 00 3C 00 62 00 72 00 3E 00 3C 00 61 00 20 00 61 00 63 00 74 00 69 00 6F 00 6E 00 3D 00 22 00 62 00 79 00 70 00 61 00 73 00 73 00 20 00 2D 00 68 00 20 00 30 00 64 00 33 00 65 00 62 00 38 00 37 00 34 00 38 00 39 00 35 00 63 00 38 00 37 00 37 00 38 00 22 00 3E 00 53 00 65 00 6C 00 6C 00 3C 00 2F 00 61 00 3E 00 3C 00 62 00 72 00 3E 00 3C 00 61 00 20 00 61 00 63 00 74 00 69 00 6F 00 6E 00 3D 00 22 00 62 00 79 00 70 00 61 00 73 00 73 00 20 00 2D 00 68 00 20 00 61 00 66 00 37 00 61 00 36 00 30 00 61 00 30 00 39 00 66 00 35 00 66 00 34 00 32 00 32 00 64 00 22 00 3E 00 22 00 49 00 20 00 77 00 61 00 6E 00 74 00 20 00 74 00 6F 00 20 00 74 00 72 00 61 00 64 00 65 00 2E 00 22 00 3C 00 2F 00 61 00 3E 00 3C 00 62 00 72 00 3E 00 3C 00 61 00 20 00 61 00 63 00 74 00 69 00 6F 00 6E 00 3D 00 22 00 62 00 79 00 70 00 61 00 73 00 73 00 20 00 2D 00 68 00 20 00 38 00 32 00 62 00 39 00 35 00 36 00 63 00 33 00 33 00 32 00 36 00 30 00 31 00 34 00 37 00 30 00 22 00 3E 00 22 00 57 00 68 00 6F 00 20 00 69 00 73 00 20 00 74 00 68 00 65 00 20 00 4C 00 6F 00 72 00 64 00 20 00 6F 00 66 00 20 00 74 00 68 00 65 00 20 00 6D 00 61 00 6E 00 6F 00 72 00 20 00 61 00 6E 00 64 00 20 00 77 00 68 00 61 00 74 00 20 00 69 00 73 00 20 00 74 00 68 00 65 00 20 00 74 00 61 00 78 00 20 00 72 00 61 00 74 00 65 00 3F 00 22 00 3C 00 2F 00 61 00 3E 00 3C 00 62 00 72 00 3E 00 3C 00 61 00 20 00 61 00 63 00 74 00 69 00 6F 00 6E 00 3D 00 22 00 62 00 79 00 70 00 61 00 73 00 73 00 20 00 2D 00 68 00 20 00 64 00 38 00 39 00 31 00 38 00 61 00 61 00 65 00 65 00 64 00 37 00 63 00 36 00 62 00 66 00 35 00 22 00 3E 00 51 00 75 00 65 00 73 00 74 00 3C 00 2F 00 61 00 3E 00 0A 00 3C 00 2F 00 62 00 6F 00 64 00 79 00 3E 00 3C 00 2F 00 68 00 74 00 6D 00 6C 00 3E 00 00 00 00 00 00 00


ошибка появляется после того как открывается окно разговора с NPC
вот так выглядит в скрипте:
Начинаем продавать...
i=1 ItemBase[1,i]=272856470 ItemBase[2,i]=1462 ItemBase[3,i]=175104876
ColvoItm2=175104876
Attacker=268475205 Player=0
Готовы продать:1462
TradeCount/TradeSellItemCount:1/16
S>Пакет NpcHtmlMessage #$19
C>Пакет RequestBypassToServer #$23 (sell)
S>Пакет NpcHtmlMessage #$19
C>Пакет RequestBypassToServer #$23 (sell)