Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 24.04.2008, 02:53   #1
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Скрипт на продажу

Выкладываю скрипт продажи вещей. Как пользоваться, написано в начале скрипта. Основа из скрипта рыбалки.
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.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился 5 спасибками от:
Старый 26.04.2008, 23:16   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

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

для этого просто выделяете скрипт и жмёте в редакторе сообщения самую правую кнопочку на панеле инструментов на которой нарисовано # и указываете в качестве параметра delphi
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 28.04.2008, 11:14   #3
Новичок
 
Регистрация: 28.04.2008
Сообщений: 3
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
soel2 пока неопределено
По умолчанию

можно усовершенствовать скрипт чтобы не было такой ерунды типа
прописывания в переменной кол-ва вещей в инвентаре. кол-во вещей передаётся сразу после входа в игру. приходит пакет с полным описанием предметов в инвентарей.
soel2 вне форума   Ответить с цитированием
Старый 28.04.2008, 12:03   #4
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от soel2 Посмотреть сообщение
можно усовершенствовать скрипт чтобы не было такой ерунды типа прописывания в переменной кол-ва вещей в инвентаре. кол-во вещей передаётся сразу после входа в игру. приходит пакет с полным описанием предметов в инвентарей.
По моему ты не там спросил. Это скрипт на движение.
По вопросу. Ты про это?
Код:
max=80;        //размер инвентаря чара
Скрипт обычно при входе в игру отключен. На версии 3.1.8 при включении без входа в игру выдает ошибку, так как завязан на имя подключения. Так что надо доработывать, чтобы была возможность включения скрипта до подключения чара.
NLObP вне форума   Ответить с цитированием
Старый 28.04.2008, 13:14   #5
Рыцарь
 
Аватар для VORON
 
Регистрация: 06.08.2007
Сообщений: 209
Сказал Спасибо: 6
Имеет 67 спасибок в 34 сообщенях
VORON пока неопределено
По умолчанию

Цитата:
Сообщение от NLObP Посмотреть сообщение
По моему ты не там спросил. Это скрипт на движение.
По вопросу. Ты про это?
Код:
max=80;        //размер инвентаря чара
Скрипт обычно при входе в игру отключен. На версии 3.1.8 при включении без входа в игру выдает ошибку, так как завязан на имя подключения. Так что надо доработывать, чтобы была возможность включения скрипта до подключения чара.
зачем??.. инвентарь стабильно вызывается в произвольный момент при отправке пакета 0F
смотреть ответ и узнавать размер пакета можно... а следовательно из размера пакета можно и кол-во предметов там узнать..
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
VORON вне форума   Ответить с цитированием
Старый 28.04.2008, 19:05   #6
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от VORON Посмотреть сообщение
зачем??.. инвентарь стабильно вызывается в произвольный момент при отправке пакета 0F
смотреть ответ и узнавать размер пакета можно... а следовательно из размера пакета можно и кол-во предметов там узнать..
Да, я просто глянул что у чара размер инвентаря 80 и прописал в переменной. Можно и по количеству вещей в инвентаре делать массив.

Последний раз редактировалось NLObP, 29.04.2008 в 23:23.
NLObP вне форума   Ответить с цитированием
Старый 29.04.2008, 13:25   #7
Новичок
 
Регистрация: 09.12.2007
Сообщений: 24
Сказал Спасибо: 9
Имеет 12 спасибок в 12 сообщенях
alxabay
По умолчанию

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

delphi Код:
// //  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.

Последний раз редактировалось alxabay, 29.04.2008 в 13:52.
alxabay вне форума   Ответить с цитированием
Старый 29.04.2008, 15:01   #8
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

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 всегда разный и ИМХО с нулем не будет работать.
NLObP вне форума   Ответить с цитированием
Старый 29.04.2008, 22:03   #9
Новичок
 
Регистрация: 09.12.2007
Сообщений: 24
Сказал Спасибо: 9
Имеет 12 спасибок в 12 сообщенях
alxabay
По умолчанию

Цитата:
Сообщение от NLObP
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 то согласен они различатся будут ну их и посмотреть нет проблем.

Последний раз редактировалось alxabay, 29.04.2008 в 22:11.
alxabay вне форума   Ответить с цитированием
Старый 29.04.2008, 23:22   #10
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

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

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 21:53.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!