Цитата:
Сообщение от NLObP
Готовь пакет на все 80 предметов
Код:
c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)
d(BuyCount) - сколько будет повторов -> i(ItemID)d( Count)
к примеру
Код:
id - #$1F
h(ListID) - #$1234567
d(BuyCount) - 80
i(ItemID) - #$123
d( Count) - 1
... ( повторяем в цикле)
i(ItemID) - #$800
d( Count) - 1
|
Так у меня ведь не RequestBuyItem, а RequestMultiSell, тоесть обмен. А там такого нет.
Добавлено через 13 часов 42 минуты
Переделал обменную часть от рыбалки. Но периодически он останавливается. И постоянно слетает коннект. Посмотрите, что я не так сделал:
delphi Код:
//******************************************************************************
//..............................................................................
// Закупка
procedure Shoping(Sender: TObject);
begin
timer.Enabled:=False;
Change.Enabled:=False;
// if ShopMode=1 then begin
if NeedToBuy then exit; //если еще не обменяли предыдущую вещь, то выходим сразу
if (RoyOID=0) then begin //(RoyOID=0) or
Shops.Enabled:=False; //останавливаем торговлю
stats.Lines.Add('Не определены OID! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if (Adena<ItemPrice) then begin
Shops.Enabled:=False; //останавливаем
stats.Lines.Add('Не хватает денег.');
NeedToChange:=True;
// Shops.Enabled:=True;
exit;
end;
if (EmptySlots<=2) then begin //проверка на выход
Shops.Enabled:=False; //останавливаем торговлю
TargetAttacker('Roy', RoyOID); //таргет
msg.Lines.Add('Всё закупили!');
CurEnchLvl:=0;
Edit2.text:=IntToStr(CurEnchLvl);
EditBuyDelay.Enabled:=False;
timer.Enabled:=True;
end
else
begin
msg.Lines.Add('Цель Roy >');
TargetAttacker('Roy', RoyOID); //таргет
msg.Lines.Add('Готовы обменять: '+IntToStr(EmptySlots-2));
NeedToBuy:=True; //готовы обменивать
end;
end;
//..............................................................................
//..............................................................................
// Обмен
procedure OnChange(Sender: TObject);
begin
timer.Enabled:=False;
Shops.Enabled:=False;
if NeedToChange then exit; //если еще не обменяли предыдущую вещь, то выходим сразу
if (WinnieOID=0) then begin //(RoyOID=0) or
Change.Enabled:=False; //останавливаем торговлю
stats.Lines.Add('Не определены OID! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if (Adena>=1900000000) then begin //проверка на выход
Change.Enabled:=False; //останавливаем
TargetAttacker('Roy', RoyOID); //таргет
msg.Lines.Add('Всё обменяли!');
timer.Enabled:=True;
end
else
begin
msg.Lines.Add('Цель Winnie >');
TargetAttacker('Winnie', WinnieOID); //таргет
msg.Lines.Add('Готовы обменять: '+IntToStr(ColChangeCount));
NeedToChange:=True; //готовы обменивать
end;
end;
//..............................................................................
//******************************************************************************
//******************************************************************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.Text:=IntToStr(SumItem(ItemID));
EditScrollVal.Text:=IntToStr(SumItem(ScrollID));
if (Adena<=99000000) then begin
stats.Lines.Add('Деньги закончились! Меняем...');
timer.Enabled:=False;
NeedToChange:=True;// else exit;
Change.Enabled:=True;
end;
if (CurEnchLvl>=StrToInt(Edit1.Text)) then begin
stats.Lines.Add('Sum '+IntToStr(SumItem(ItemID))+' lvl'+IntToStr(CurEnchLvl)+' Ed'+(Edit1.Text));
timer.enabled:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
delay(50);
stats.Lines.Add('Достигнут требуемый уровень! Закупаем...');
stats.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));
if (EmptySlots>0) then begin
ButtonBuyItems.Enabled:=True;
ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');
end;
{ if (SumItem(ItemID)>=10) and (CurEnchLvl>=StrToInt(Edit1.Text)) then begin
stats.Lines.Add('Max '+IntToStr(MaxEnchLvl));
stats.Lines.Add('Заточено 10шт '+IntToStr(MaxEnchLvl)+' уровня!');
inc(MaxEnchLvl);
stats.Lines.Add('Увеличиваем уровень: '+IntToStr(MaxEnchLvl));
Edit1.Text:=(IntToStr(MaxEnchLvl));
end; }
NeedToBuy:=True;
Shops.Enabled:=True;
//exit;
end;
if (SumItem(ItemID)<=StrToInt(EditKeepItems.Text)) then begin
timer.enabled:=false;
buf:=hstr('0F');
SendToServerEx(Name);
stats.Lines.Add('Ограничение по поломкам - '+IntToStr(EditKeepItems.Text)+'! Закупаем...');
delay(50);
NeedToBuy:=True;
Shops.Enabled:=True;
end;
ScrollOID:=GetItem(ScrollID,0);
if (ScrollOID<=3) then begin
stats.Lines.Add('Свитки закончились! Покупаем...');
timer.enabled:=False;
//***** Закупка заточек *
BuyScroll;
//***********************
delay(50);
timer.enabled:=True;
//exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
end;
//==============================================================================
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
Begin
//****************************************************************************
if pck='' then exit;
//****************************************************************************
if NeedToChange and (WinnieOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
msg.Lines.Add(IntToStr(ReadD(4)));
if (ReadD(2)=WinnieOID) then begin
delay(350);
RequestByPassToServer('menu_select?ask=-303&reply=576');
msg.Lines.Add('C>Пакет RequestBypassToServer');
end;
end;
#$D0: begin
msg.Lines.Add('S>Пакет MultiSellList #$D0');
delay(350);
RequestMultiSellItem(576, 3, 100);
NeedToChange:=False;
end;
end;
end;
end;
if NeedToBuy and (RoyOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
msg.Lines.Add(IntToStr(ReadD(4)));
if (ReadD(2)=RoyOID) then begin
delay(350);
RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));
msg.Lines.Add('C>Пакет RequestBypassToServer '+IntToStr(ItemListID));
end;
end;
#$D0: begin
msg.Lines.Add('S>Пакет MultiSellList #$D0');
delay(350);
RequestMultiSellItem(ItemListID, ItemEntryID, ItemCount);
NeedToBuy:=False;
end;
end;
end;
end;
//****************************************************************************
Может зря я два таймера использовал, и можно на одном это сделать?