Выкладываю скрипт продажи вещей. Как пользоваться, написано в начале скрипта. Основа из скрипта рыбалки.
delphi Код:
//Автоматизация продажи by NLObP для L2PacketHack v.3.1.8+////version 0.1program 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] ofinteger; //все предметы в инвентаре
ItemBase2: array[1..3,1..max] ofinteger; //найденные по 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;
beginif IL thenbegin//Interlude//CreateItemBase
offs1:=24;
//InventoryUpdate
offs2:=22;
//UserInfo, основной цикл
offs3:=48;
//InventoryUpdate, основной цикл
offs4:=38;
//ItemList, основной цикл
offs5:=36;
endelsebegin//C4
offs1:=16;
offs2:=14;
offs3:=44;
offs4:=30;
offs5:=28;
end;
//ПАНЕЛЬКА
frm:=TForm.Create(nil);
with frm dobegin
Caption:='SellBot by NLObP';
BorderStyle := bsSizeable;
Position := poScreenCenter;
Left := 0;
Top := 0;
ClientHeight := 310;
ClientWidth := 418;
end;
//кнопка1
Button1:=TButton.Create(frm);
with Button1 dobegin
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 dobegin
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 dobegin
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 dobegin
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 dobegin
Name:='Label1';
Parent := frm;
Left := 8;
Top := 5;
Width := 50;
Height := 13;
Caption := 'Name NPC';
end;
Label2:=TLabel.Create(frm);
with Label2 dobegin
Name:='Label2';
Parent := frm;
Left := 159;
Top := 5;
Width := 34;
Height := 13;
Caption := 'NPC ID';
end;
Label3:=TLabel.Create(frm);
with Label3 dobegin
Name:='Label3';
Parent := frm;
Left := 8;
Top := 53;
Width := 52;
Height := 13;
Caption := 'Name Item';
end;
Label4:=TLabel.Create(frm);
with Label4 dobegin
Name:='Label4';
Parent := frm;
Left := 159;
Top := 53;
Width := 36;
Height := 13;
Caption := 'Item ID';
end;
Label5:=TLabel.Create(frm);
with Label5 dobegin
Name:='Label5';
Parent := frm;
Left := 288;
Top := 5;
Width := 34;
Height := 13;
Caption := 'ByPass';
end;
Label6:=TLabel.Create(frm);
with Label6 dobegin
Name:='Label6';
Parent := frm;
Left := 286;
Top := 53;
Width := 26;
Height := 13;
Caption := 'Value';
end;
Edit1:=TEdit.Create(frm);
with Edit1 dobegin
Name:='Edit1';
Parent := frm;
Left := 159;
Top := 24;
Width := 121;
Height := 21;
TabOrder := 1;
Text := '0';
end;
Edit2:=TEdit.Create(frm);
with Edit2 dobegin
Name:='Edit2';
Parent := frm;
Left := 159;
Top := 72;
Width := 121;
Height := 21;
TabOrder := 3;
Text := '0';
end;
Edit3:=TEdit.Create(frm);
with Edit3 dobegin
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 dobegin
Name:='Edit4';
Parent := frm;
Left := 288;
Top := 72;
Width := 121;
Height := 21;
TabOrder := 5;
Text := '0';
end;
msg:=TMemo.Create(frm);
with msg dobegin
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);
beginShowMessage(Sender.ClassName);
frm.ModalResult:=mrOk;
end;
//******************************************************************************procedure ComboBox1Change(Sender: TObject);
beginShowMessage(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 с ListIDprocedure 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);
beginif ReadyToSell thenbegin
msg.Lines.Add('Продадим предмет OID:'+inttostr(ItemOID)+' ID:'+inttostr(ItemID)+' в кол-ве:'+inttostr(count));
buf:=#$1E;
WriteD(ListID);
WriteD(1);
WriteD(ItemOID);
WriteD(ItemID);
if count>99999then count:=99999; //макс количество продаваемых вещей
WriteD(Count);
SendToServerEx(Name);
end;
end;
//***************************************************************//c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(Count)//купим по одному типуprocedure RequestBuyItem(ItemID,Count:integer);
beginif ReadyToBuy thenbegin
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 thenbegin
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 thenexit; //если еще не продали предыдущую вещь, то выходим сразу//мы у фишермана, продаем всё ненужноеif TraderOID=0thenbegin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID продавца! Требуется отбежать подальше и вернуться.');
exit; //выходимend;
if(TradeCount=TradeSellItemCount)thenbegin//проверка на выход из массива
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Всё продали!');
endelsebeginif FindItem(TradeSellItem[TradeCount])<>0thenbegin//проверка, что предмет есть в инвентаре и его можно продать
TargetAttacker(TraderOID); //фишермана в таргет
msg.Lines.Add('Готовы продать:'+inttostr(TradeSellItem[TradeCount]));
ReadyToSell:=true; //готовы продаватьendelse msg.Lines.Add('Нет такого предмета:'+inttostr(TradeSellItem[TradeCount]));
inc(TradeCount); //выбираем следующий предмет
msg.Lines.Add('TradeCount/TradeSellItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeSellItemCount-1));
end;
end;
//******************************************************************************procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemIDvar
i, j, ListCount: integer;
beginfor i:=1tomaxdobegin//очищаем масив
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 соответствующие необходимым ItemIDfor i:=1to ListCount dobegin
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 по ItemIDvar
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:=1to ListCount dobegin
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 of1: beginfor ii:=1tomaxdoif(ItemBase[1,ii]=0)and(add=false)thenbegin
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: beginfor ii:=1tomaxdoif ItemBase[1,ii]=ObjID thenbegin
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: beginfor ii:=1tomaxdoif ItemBase[1,ii]=ObjID thenbegin
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; //находим в инвентаре все предметы с ItemIDvar
i, j : integer;
beginfor i:=1tomaxdobegin//очищаем масив
ItemBase2[1,i]:=0;
ItemBase2[2,i]:=0;
ItemBase2[3,i]:=0;
end;
ColvoItm2:=0;
j:=1;
for i:=1tomaxdobegin//находим подходящий предметif(ItemBase[2,i]=item)thenbegin
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=''thenexit;
//**************************************************************************//продажа состоит из следующих шагов://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)thenbeginif(ConnectName=Name)and FromServer thenbegincase pck[1] of//после того, как мы взяли в таргет продавца приходит этот пакет (#$0F)//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=TraderOID thenbegin
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 thenbegincase 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)thenbegin// 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)thenbegin
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 thenbegincase 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.
народ!, скрипты просьба выделять с помощью BBCode - [ HIGHLIGHT="delphi" ]ваш скрипт[ /HIGHLIGHT ]
а не с помощью [ PHP ][ /PHP ]
для этого просто выделяете скрипт и жмёте в редакторе сообщения самую правую кнопочку на панеле инструментов на которой нарисовано # и указываете в качестве параметра delphi
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Вот мой скрипт был такой баг у 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 prostoimax=250;
maxBG=500; //maximalno skolko xotim bagov nadelat' maxBG*maxBUY*115k
maxBUY=30; //skolko pokupaem za 1 razvar
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 igrubegin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
function listaem: integer; //nujen paket s inventaremvar
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:=1to ListCount dobegin
ObjID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
j:=j+14;
ReadD(j); //lvl propuskaemcase ItemID of
IDveshi: begin
WriteD(ObjID);
writed(IDveshi);
WriteD(1);
VM:=VM+1;
end;
end;
j:=j+10;
end;
if(VM=0)thenbeginexit;
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);
beginif status thenexit; //uje kupili exitif(countBG=maxBG)then stopit; //maxBG zakon4ili bagerit'
status:=true;
Buy;
inc(countBG);
end;
beginif pck=''thenexit;
if FromClient and(pck[1]=#$1B)thenbegin
SocialID:=ReadD(2);
case SocialID of6:beginif status thenbegin
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 thenbegin//paket o tom 4to v sumku upalo
status:=false;
listaem; //ishim i prodaemend;
end.
Последний раз редактировалось alxabay, 29.04.2008 в 13:52.
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.