Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
|
Скрипт на продажу
Выкладываю скрипт продажи вещей. Как пользоваться, написано в начале скрипта. Основа из скрипта рыбалки.
delphi Код:
//Автоматизация продажи by NLObP для L2PacketHack v.3.1.8+//
//version 0.1
program SellBot;
{
Скрипт распространяется как есть, и я не несу ответственности
за то, что ВЫ натворили у себя, его используя.
Проверялось на TheAbyss.ru (С6-interlude) и [url]www.lagam.net(c4[/url])
Перед использованием скрипта изменяем под свой сервер, один раз:
Name='NLObP'; //имя чара для которого включаем скрипт
max=80; //размер инвентаря чара
//установить константу в зависимости от типа игры (С4 или C6-Интерлюд)
IL=true; //true - IL, false - C4
//оставить один из них или поставить свой
kID=1000000; //коэфф вычитаемый из NpcID C4 [url]www.lagam.net[/url]
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 прийдет от сервера.
На [url]www.lagam.net(c4[/url]) проще, открываем инвентарь, сняли/одели оружие.
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 [url]www.lagam.net[/url]
kID=1023000; //коэфф вычитаемый из NpcID C6 theAbyss.ru
TraderID=8573; //Фишерман Monakan в Гиран-харборе
//C4 [url]www.lagam.net[/url] и на 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(SellItemValue));
} 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(ItemType1)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(ObjectID)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(Amount)
//продаем по одному типу
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(CustType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustType2)
j:=j+offs1; //16 для С4, 24 для интерлюдии
end;
ColvoItm:=ListCount;
msg.Lines.Add('>ColvoItm='+IntToStr(Colvoitm));
end;
//******************************************************************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(itemType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(cusType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(cusType2)
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(ItemType1)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(ObjectID)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(ItemType1)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(ObjectID)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(CollisRadius)f(CollisHeight)d(RHand)d(d)d(LHand)b(nameabove)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(CustType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustType2)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(itemType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(cusType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(cusType2)-(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.
ЗЫЖ что-то отзывов нет, не работает что ли?
Последний раз редактировалось NLObP, 25.04.2008 в 13:34.
|