Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Скрипт на получение BulkOrder RunUO

Only working scripts
Post Reply
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Скрипт на получение BulkOrder RunUO

Post by shinma »

Code: Select all

Program Order;
//Made by Shinma
//Положите в сумку книгу для заказов.
//Вбейте ID NPC у которого брать заказы в переменную vendor_ID.
//запустите скрипт.
//между получением булок бот уходит в офлайн. Это не баг так задумано.
//тестировал на RunUO
//запускайте хоть 40 ботов. так же этот скрипт удобно прикрутить к глобальному скрипту.
const
//////////////////////////////
/////////////////////////////
vendor_ID=$000203C1 ;     // <<<<<<<<<< СЮДА вбить ID НПС у которого брать булки.
///////////////////////////////////////// ПОЛУЧИТЬ его можно командой ,info в игре.
/////////////////////////////
////////////////////////////
BulkOrderDeed=$2258 ; 
BulkOrderBook=$2259 ;       
getwordinc_IgnoreQuotes = false;
var
Time,jtime: TDateTime; 
m,v,vv,i,j,TimeDisc:integer;
s,ss:string;
procedure init;
begin
FindVertical := 5;
SetPauseScriptOnDisconnectStatus(false);
SetARStatus(false);
m:=0;
WaitGump('1'); 
TimeDisc:=0;
end;
procedure givemeorder;
var 
a:integer;
begin
wait(2000);
checklag(60000);
//AddToSystemJournal('3');
while GetDistance(vendor_ID)>1 do
begin
//AddToSystemJournal('4');
NewMoveXY(GetX(vendor_ID),GetY(vendor_ID),true,1,true);
wait(2000);
end;
checklag(60000);
a := GetGumpsCount;
wait(2000);
//AddToSystemJournal('5');
RequestContextMenu(vendor_ID);
wait(2000);
checklag(60000);
//AddToSystemJournal('6');
SetContextMenuHook(vendor_ID,3);
wait(2000);
if a < GetGumpsCount then
begin
checklag(60000);
WaitGump('1'); 
wait(10000);
v:=Count(BulkOrderDeed);
end;
//if a = GetGumpsCount then
while InJournalBetweenTimes('available in about',jtime,now)<0 do
begin
  checklag(60000);
AddToSystemJournal('Опять чтото работает через жопу, но мы нашли болт.');
wait(2000);
RequestContextMenu(vendor_ID);
wait(2000);
checklag(60000);
//AddToSystemJournal('6');
SetContextMenuHook(vendor_ID,3);
wait(2000);
end;
end;

procedure mainchar;
begin
//SetGlobal('stealth',' startchar', '0');
end;
//За эту функцию спасибо NoSilence
function GetWord(const Text: string; BreakSymbol: char; Index: integer):string;
var
  i: integer;
  quote, lastbreak: boolean;
begin
lastbreak:= true;
quote:= false;
result:= '';

if Index > 0 then
  for i:= 1 to Length(Text) do
    if (Text[i] = #27) and (not getwordinc_IgnoreQuotes) then
       quote:= not quote
    else if (Text[i] = BreakSymbol) and (not quote) then begin
      if not lastbreak then begin
        Index:= Index - 1;
        lastbreak:= true;
      end;
      if Index < 1 then break;
    end else begin
      lastbreak:= false;
      if Index = 1 then
        result:= result + Text[i];
    end
else
  for i:= Length(Text) downto 1 do
    if (Text[i] = #27) and (not getwordinc_IgnoreQuotes) then
       quote:= not quote
    else if (Text[i] = BreakSymbol) and (not quote) then begin
      if not lastbreak then begin
        Index:= Index + 1;
        lastbreak:= true;
      end;
      if Index > -1 then break;
    end else begin
      lastbreak:= false;
      if Index = -1 then
        result:= Text[i] + result;
    end
end;
procedure checkbolck;
begin
while count(BulkOrderDeed)>0 do
  begin
    MoveItem(FindType(BulkOrderDeed,backpack),1,FindType(BulkOrderBook,backpack), 0,0,0);
    wait(500); 
  end;
end;

begin
init;

while not dead do
 begin   
   while not Connected do
    begin
    Connect;
    wait(10000);  
    end;
    wait(2000); 
    checkbolck;
    for i:=0 to  GetGumpsCount do 
    begin      
    wait(500);
    CloseSimpleGump(i); 
    end;
    AddToSystemJournal('Булок = '+inttostr(Count(BulkOrderDeed)));
    v:=Count(BulkOrderDeed);
    vv:=Count(BulkOrderDeed); 
    jtime:=now;
    repeat 
    
    givemeorder;  
    AddToSystemJournal('Жду булку');  
    if  InJournalBetweenTimes('available in about',jtime,now)>=0 then
      begin        
      s:=Journal(InJournalBetweenTimes('available in about',jtime,now));   
      ss:=GetWord(s, ' ', 10); 
      TimeDisc:=strtoint(ss);
      AddToSystemJournal('Ptint Number ss ='+ss);     
      v:=Count(BulkOrderDeed);    
   
      end
      else
      AddToSystemJournal('Хер тебе а не булка, чтото не сработало.');

    until dead or (TimeDisc>2);   
    
    AddToSystemJournal('2');  
    wait(2000); 
    AddToSystemJournal('Булок = '+inttostr(Count(BulkOrderDeed)));
    Disconnect; 
    //SetGlobal( 'stealth','TestVar2', (TimeToStr(now+EncodeTime(0,TimeDisc,0,0))));            
    AddToSystemJournal('Начало = '+TimeToStr(now));   
        if TimeDisc > 59 then
    begin
    wait((TimeDisc-59)*60*1000);
    AddToSystemJournal('Превышение лимита времени ='+ inttostr(TimeDisc));
    TimeDisc:=59;
    end;
    AddToSystemJournal('Конец = '+TimeToStr(now+EncodeTime(0,TimeDisc,0,0)));
    while  m < (TimeDisc*60) do
      begin   
      Time:=now;
      wait(1000);
      //SetGlobal( 'stealth','TestVar1', (TimeToStr(now))); 
      m:=m+1;
      end; 
      TimeDisc:=0;
      m:=0;  
  end;   
end.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Скрипт на получение BulkOrder RunUO

Post by shinma »

update
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
maza
Neophyte
Neophyte
Posts: 14
Joined: 21.04.2014 16:43

Re: Скрипт на получение BulkOrder RunUO

Post by maza »

Помогите настроить под шард Demise
Скрипт тыкает на вендора и выберает Sell вместо Bulk order info
Меню такое:
Open paperdoll
Bulk order info
Buy
Sell
Half-Life
Novice
Novice
Posts: 86
Joined: 30.10.2012 12:06
Location: Одесса
Contact:

Re: Скрипт на получение BulkOrder RunUO

Post by Half-Life »

На вот я на нём собирал на демисе.
BoDCollector

Code: Select all

program BoDCollector;
{
Autor: Костяк скрипта написан Gauhar. Всё что связано с получением бодов реализовал Half-Life;
Description: Скрипт на автовзятие бодов. По умолчанию собирает боды и кузнеца и тейлора. Сортирует боды по двум книгам - для БС'а и Тейлора.
UOStealthClientVersion: 6.2.1;
Warning! Будьте бдительны! - Администрация многих игровых серверов враждебно относится к использованию стелс клиента на своих серверах. Заподозрив вас в использовании стелс клиента и других неправославных программ они начинают сатанеть и в порыве слепой ярости могут попасть по вам Банхаммером;
}
const
GumpIgnoredID=0; //ID незакрывающегося гампа. Если у вас на сервере такого не сущесвует установите значение 0;
TailorVendor=$00008646;    //ID NPC Тейлора;
ContextMenuHookTailor=1;   //Номер пункта контекстного меню отвечающего за взятие бода тейлора;
BSVendor=$00008643;        //ID NPC Блексмитера;
ContextMenuHookBS=1;       //Номер пункта контекстного меню отвечающего за взятие бода блексмитера;
BodType=$2258;             //Тип бода;
BodClrT=$0483;             //Цвет тейлор бодов;
BoDClrBS=$044E;            //Цвет бс бодов;
Trash=$400F78FB;
TakeTailor=False;          //Брать боды у тейлора. Чтобы отключить установите значение False;
TakeBS=True;               //Брать боды у блексмитера. Чтобы отключить установите значение False;
TBook=0;                   //ID книги в которую слаживать тейлор боды. Установите значение 0 если не хотите слаживать боды в книгу;
BSBook=0;                  //ID книги в которую слаживать блексмит боды. Установите значение 0 если не хотите слаживать боды в книгу;
TMsg='Taking Tailor BOD';
BSMsg='Taking BS BOD';
WaitTime=500;              //Время минимальной задержки. Лучше не менять.
WaitLag=10000;
var
MyProfiles:array of String;
TimeOrder:array of TDateTime;
nProfile:Integer;

procedure CollectBoD(Msg:String;Vendor:Cardinal;MenuHook:Integer;BodColor:Integer;BulkBook:Cardinal);
var
StringList:TStringList;
Text:String;
begin
  AddToSystemJournal(Msg);
  Wait(WaitTime);
  SetContextMenuHook(Vendor, MenuHook);
  CheckLag(WaitLag);
  RequestContextMenu(Vendor);
  Wait(WaitTime*2);
  WaitGump('1');
  Wait(WaitTime*4);
  if BulkBook=0 then AddToSystemJournal('Количество бодов = ' + IntToStr(CountEx(BodType,BodColor,backpack)));
  if BulkBook<>0 then begin
    while (FindTypeEx(BodType,BodColor,backpack,false)>1) do begin
      MoveItem(FindItem,1,BulkBook,0,0,0);
      Wait(WaitTime*2);
      While IsGump do CloseSimpleGump(GetGumpsCount-1);
      StringList:=TStringList.Create;
      StrBreakApart(GetCliloc(BulkBook),'stone|',StringList);
      Text:=StringList.strings[1];
      StrBreakApart(Text,'|',StringList);
      Text:=StringList.strings[0];
      Wait(WaitTime);
      CheckLag(WaitLag);
      AddToDebugJournal(Text);
    end;
  end;
end;

function CheckBackpack:Boolean;
var
StringList:TStringList;
Text:String;
begin
  StringList:=TStringList.Create;
  StrBreakApart(GetCliloc(Backpack),'Contents: ',StringList);
  Text:=StringList.strings[1];
  StrBreakApart(Text,'/',StringList);
  Text:=StringList.strings[0];
  if StrToInt(Text)=125 then begin
    AddToSystemJournal(myProfiles[nProfile]+' Ваш рюкзак полон.');
    Result:=True;
  end;
end;

begin
  AddGumpIgnoreByID(GumpIgnoredID);
  if not TakeTailor and not TakeBS then begin
    AddToSystemJournal('Внимание ошибка! Хотя бы один из параметров TakeTailor или TakeBS должен быть True. Скрипт остановлен.')
    Halt;
  end;
  myProfiles:=['Boder_I_I','Boder_I_II','Boder_I_III','Boder_I_IV','Boder_I_V','Boder_I_VI','Boder_I_VII']; //Сюда вписываем названия профилей. 1 чар = 1 профиль.

  //Дальше, если вы не уверены в том, что вы делаете то лучше не лезть.
  SetLength(timeOrder, Length(myProfiles));
  for nProfile:=0 to (Length(timeOrder)-1) do timeOrder[nProfile]:=0;

  repeat
    for nProfile:=0 to Length(myProfiles)-1 do begin
      if (Now>timeOrder[nProfile]) then begin
        ChangeProfile(myProfiles[nProfile]);
        SetARStatus(True);
        Connect;
        While not Connected() do Wait(2000);
       // if not CheckBackpack then begin
          While IsGump do CloseSimpleGump(GetGumpsCount-1);
          if TakeTailor then CollectBoD(TMsg,TailorVendor,ContextMenuHookTailor,BoDClrT,TBook);
          if TakeBS then CollectBoD(BSMsg,BSVendor,ContextMenuHookBS,BoDClrBS,BSBook);
       // end;
        SetARStatus(False);
        While Connected do begin
          Disconnect;
          Wait(5000);                  // Ждем пока бодер не выйдет из игры.
        end;
        timeOrder[nProfile]:=Now + 1.0 / 24;     // Следующий заказ брать через час.
      end;
    end;
    wait(1000);
  until False;
end.
maza
Neophyte
Neophyte
Posts: 14
Joined: 21.04.2014 16:43

Re: Скрипт на получение BulkOrder RunUO

Post by maza »

Спс скрипт пашет отлично
А то в ручную 21 чарами каждый час брать напрягало )
Sonick071
Neophyte
Neophyte
Posts: 41
Joined: 21.04.2015 22:27

Re: Скрипт на получение BulkOrder RunUO

Post by Sonick071 »

Я раньше писал скрипт на взятие бодов, у меня менялись не только аккаунты, но и чары по номеру, например I_dont_remember_function(char0-6). Проходил все это дело вложеными форами, щя вот снова пишу скрипт подобный, но блин, забыл и не могу найти как переключать чаров! Хелп гвардс криминал!
Если б не было stealth, то его следовало б придумать!
Sonick071
Neophyte
Neophyte
Posts: 41
Joined: 21.04.2015 22:27

Re: Скрипт на получение BulkOrder RunUO

Post by Sonick071 »

Вообщем так и не вспомнил фунцкию, потому как ее скорей всего и нет, зато вспомнил как делал =) Вдруг кому пригодится, делаете профайл под каждого чара(1-n), и потом уже через changeprofile меняете акк и чара.
Если б не было stealth, то его следовало б придумать!
Sol
Posts: 1
Joined: 21.06.2015 16:25

Re: Скрипт на получение BulkOrder RunUO

Post by Sol »

Half-Life wrote:На вот я на нём собирал на демисе.
BoDCollector

Code: Select all

program BoDCollector;
{
Autor: Костяк скрипта написан Gauhar. Всё что связано с получением бодов реализовал Half-Life;
Description: Скрипт на автовзятие бодов. По умолчанию собирает боды и кузнеца и тейлора. Сортирует боды по двум книгам - для БС'а и Тейлора.
UOStealthClientVersion: 6.2.1;
Warning! Будьте бдительны! - Администрация многих игровых серверов враждебно относится к использованию стелс клиента на своих серверах. Заподозрив вас в использовании стелс клиента и других неправославных программ они начинают сатанеть и в порыве слепой ярости могут попасть по вам Банхаммером;
}
const
GumpIgnoredID=0; //ID незакрывающегося гампа. Если у вас на сервере такого не сущесвует установите значение 0;
TailorVendor=$00008646;    //ID NPC Тейлора;
ContextMenuHookTailor=1;   //Номер пункта контекстного меню отвечающего за взятие бода тейлора;
BSVendor=$00008643;        //ID NPC Блексмитера;
ContextMenuHookBS=1;       //Номер пункта контекстного меню отвечающего за взятие бода блексмитера;
BodType=$2258;             //Тип бода;
BodClrT=$0483;             //Цвет тейлор бодов;
BoDClrBS=$044E;            //Цвет бс бодов;
Trash=$400F78FB;
TakeTailor=False;          //Брать боды у тейлора. Чтобы отключить установите значение False;
TakeBS=True;               //Брать боды у блексмитера. Чтобы отключить установите значение False;
TBook=0;                   //ID книги в которую слаживать тейлор боды. Установите значение 0 если не хотите слаживать боды в книгу;
BSBook=0;                  //ID книги в которую слаживать блексмит боды. Установите значение 0 если не хотите слаживать боды в книгу;
TMsg='Taking Tailor BOD';
BSMsg='Taking BS BOD';
WaitTime=500;              //Время минимальной задержки. Лучше не менять.
WaitLag=10000;
var
MyProfiles:array of String;
TimeOrder:array of TDateTime;
nProfile:Integer;

procedure CollectBoD(Msg:String;Vendor:Cardinal;MenuHook:Integer;BodColor:Integer;BulkBook:Cardinal);
var
StringList:TStringList;
Text:String;
begin
  AddToSystemJournal(Msg);
  Wait(WaitTime);
  SetContextMenuHook(Vendor, MenuHook);
  CheckLag(WaitLag);
  RequestContextMenu(Vendor);
  Wait(WaitTime*2);
  WaitGump('1');
  Wait(WaitTime*4);
  if BulkBook=0 then AddToSystemJournal('Количество бодов = ' + IntToStr(CountEx(BodType,BodColor,backpack)));
  if BulkBook<>0 then begin
    while (FindTypeEx(BodType,BodColor,backpack,false)>1) do begin
      MoveItem(FindItem,1,BulkBook,0,0,0);
      Wait(WaitTime*2);
      While IsGump do CloseSimpleGump(GetGumpsCount-1);
      StringList:=TStringList.Create;
      StrBreakApart(GetCliloc(BulkBook),'stone|',StringList);
      Text:=StringList.strings[1];
      StrBreakApart(Text,'|',StringList);
      Text:=StringList.strings[0];
      Wait(WaitTime);
      CheckLag(WaitLag);
      AddToDebugJournal(Text);
    end;
  end;
end;

function CheckBackpack:Boolean;
var
StringList:TStringList;
Text:String;
begin
  StringList:=TStringList.Create;
  StrBreakApart(GetCliloc(Backpack),'Contents: ',StringList);
  Text:=StringList.strings[1];
  StrBreakApart(Text,'/',StringList);
  Text:=StringList.strings[0];
  if StrToInt(Text)=125 then begin
    AddToSystemJournal(myProfiles[nProfile]+' Ваш рюкзак полон.');
    Result:=True;
  end;
end;

begin
  AddGumpIgnoreByID(GumpIgnoredID);
  if not TakeTailor and not TakeBS then begin
    AddToSystemJournal('Внимание ошибка! Хотя бы один из параметров TakeTailor или TakeBS должен быть True. Скрипт остановлен.')
    Halt;
  end;
  myProfiles:=['Boder_I_I','Boder_I_II','Boder_I_III','Boder_I_IV','Boder_I_V','Boder_I_VI','Boder_I_VII']; //Сюда вписываем названия профилей. 1 чар = 1 профиль.

  //Дальше, если вы не уверены в том, что вы делаете то лучше не лезть.
  SetLength(timeOrder, Length(myProfiles));
  for nProfile:=0 to (Length(timeOrder)-1) do timeOrder[nProfile]:=0;

  repeat
    for nProfile:=0 to Length(myProfiles)-1 do begin
      if (Now>timeOrder[nProfile]) then begin
        ChangeProfile(myProfiles[nProfile]);
        SetARStatus(True);
        Connect;
        While not Connected() do Wait(2000);
       // if not CheckBackpack then begin
          While IsGump do CloseSimpleGump(GetGumpsCount-1);
          if TakeTailor then CollectBoD(TMsg,TailorVendor,ContextMenuHookTailor,BoDClrT,TBook);
          if TakeBS then CollectBoD(BSMsg,BSVendor,ContextMenuHookBS,BoDClrBS,BSBook);
       // end;
        SetARStatus(False);
        While Connected do begin
          Disconnect;
          Wait(5000);                  // Ждем пока бодер не выйдет из игры.
        end;
        timeOrder[nProfile]:=Now + 1.0 / 24;     // Следующий заказ брать через час.
      end;
    end;
    wait(1000);
  until False;
end.
Доброго времени суток, Ув. Форумчане! :wink:
Ребят, нужна ваша помощь. Что нужно подправить в этом скрипте, что бы перс брал три раза подряд, а не один заказ у одного и того же вендора? (думаю переделать скрипт под специфику сервера uo shadow age).

Спасибо большое за любую помощь :)
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Скрипт на получение BulkOrder RunUO

Post by drabadan »

3 раза повторить вот это ->

Code: Select all

 if TakeTailor then CollectBoD(TMsg,TailorVendor,ContextMenuHookTailor,BoDClrT,TBook);
Post Reply