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

Прокачка макросных скилов DRW

Only working scripts
Post Reply
alpi
Novice
Novice
Posts: 51
Joined: 02.07.2009 17:37
Contact:

Прокачка макросных скилов DRW

Post by alpi »

Делал для себя, вдруг кому пригодится: для прокачки по очереди до 100 простых скиллов: Хайд, Стелс, АрмЛор, ИтемАйди, ТестАйди, Трекинг, Писмейк, Анатомия.
Раз в 5 минут юзает спирит спик, после входа в транс - продолжает качать выбранный скилл.
Когда все скиллы докачаны - качает спирит спик.

Code: Select all

//НЕ ПРОВЕРЯЕТ КОЛИЧЕСТВО ХАВКИ, ЛОЖИТЬ С ЗАПАСОМ !

program All_Skills;

Const
ItID = $0F9E; //предмет для прокачки итемайди   - ножницы
ArLr = $0F51; // предмет для прокачки армлора   - даггер для фенса
TsID = $0C77; //предмет для прокачки тейстайди  - морковка
Food = $09BB;  //тип еды чтоб не умереть от голода - кабан
SpiritTimer = (5.0/(24*60));
worldmessage = 'World is saving now...';
hungrymessage = 'You are starving';
messagetimer = (0.05/(24*60));

var timespirit,ctime : TDateTime;

Procedure CheckState;
  begin 
   if warmode then SetWarMode(false); 
    if InJournalBetweenTimes(worldmessage,now-2*messagetimer,now) > 0 then begin AddToSystemJournal('Сохранение мира. Ждем 60 секунд'); wait(60000); end;
     if InJournalBetweenTimes(hungrymessage,now-messagetimer,now) > 0 then 
      begin wait(500); UseObject(FindType(Food,backpack)); AddToSystemJournal('Перекус. Осталось еды в паке: '+IntToStr(GetQuantity(FindType(Food,backpack)))+' шт'); end; 
  end;
  
Procedure GoTrance;
  begin 
    repeat 
     CheckState; 
      ctime:=now; UseSkill('Spirit Speak'); 
       AddToSystemJournal('Вхожу в транс'); 
        wait(3000); 
    until InJournalBetweenTimes('You establish a connection to the netherworld',ctime,now) > 0;
    timespirit:= now;
  end;
   
Begin
AddToSystemJournal('Еды в паке: '+IntToStr(GetQuantity(FindType(Food,backpack)))+' шт');
  
  while not dead do
  begin

    while (GetSkillValue('Stealth') < 100.0) and (IsDead(self) = false) do
      begin GoTrance;  
       while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do
         begin CheckState; UseSkill('Stealth'); wait(3000); AddToSystemJournal('Учусь скрытно передвигаться'); end;
      end;
      
    while (GetSkillValue('Hiding') < 100.0) and (IsDead(self) = false) do
      begin GoTrance;  
       while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do
         begin CheckState; UseSkill('Hiding'); wait(3000); AddToSystemJournal('Учусь прятаться'); end;
      end;
      
    while (GetSkillValue('Peacemaking') < 100.0) and (IsDead(self) = false) do
      begin GoTrance;  
        while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do 
          begin CheckState; UseSkill('Peacemaking'); wait(3000); AddToSystemJournal('Играю на балалайке'); end;
        end;

    while (GetSkillValue('Anatomy') < 100.0) and (IsDead(self) = false) do
      begin GoTrance;
        while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do 
          begin CheckState; UseSkill('Anatomy'); WaitTargetObject(Self); wait(5000); AddToSystemJournal('Изучаю анатомию'); end;
      end;
      
    while (GetSkillValue('Arms Lore') < 100.0) and (IsDead(self) = false) and (GetQuantity(FindType(ArLr,backpack)) > 0) do 
      begin GoTrance;  
        while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do
          begin CheckState; UseSkill('Arms Lore'); WaitTargetObject(FindType(ArLr,backpack)); wait(5000); AddToSystemJournal('Качаю армслор'); end;
      end;
 
    while (GetSkillValue('Item Identification') < 100.0) and (IsDead(self) = false) and (GetQuantity(FindType(ItID,backpack)) > 0) do
      begin GoTrance;
        while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do
          begin CheckState; UseSkill('Item Identification'); WaitTargetObject(FindType(ItID,backpack)); wait(5000); AddToSystemJournal('Исследую предмет'); end;
      end;

    while (GetSkillValue('Taste Identification') < 100.0) and (IsDead(self) = false) and (GetQuantity(FindType(TsID,backpack)) > 0) do
      begin GoTrance;
        while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do
          begin CheckState; UseSkill('Taste Identification'); WaitTargetObject(FindType(TsID,backpack)); wait(5000); AddToSystemJournal('Качаю тейстайди'); end;
      end;
      
    while (GetSkillValue('Tracking') < 100.0) and (IsDead(self) = false) do
      begin GoTrance;
        while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do
          begin CheckState; CancelMenu; UseSkill('Tracking'); AutoMenu('Track','Anything'); wait(1500); AddToSystemJournal('Выслеживаю цель'); end;
      end;
      
    while (GetSkillValue('Spirit Speak') < 100.0) and (IsDead(self) = false) do 
      begin GoTrance; 
       while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do wait(5000);
      end;      
                           
  end;
    
End.
По-хорошему, можно было бы часть однотипных скиллов вынести в отдельную процедуру и сократить размер скрипта раза в 1,5-2, но не вижу особо смысла возиться.
Если обнаружите косяки - пожалуйста сообщайте, я только учусь :)
just student
Roe
Posts: 2
Joined: 09.04.2012 2:12

Re: Прокачка макросных скилов DRW

Post by Roe »

Пригодиться.
Автору Респект. :D
Nearga
Novice
Novice
Posts: 58
Joined: 04.03.2012 22:03
Location: DRW
Contact:

Re: Прокачка макросных скилов DRW

Post by Nearga »

Мелкие заметки:
1) да, лучше пораскидывай весь одинаковый код по функциям.. передавай 2 параметра: название скилла и фразу, которую стоит говорить
2) для ТестИД нож также подходит
3) кстати, нож может лежать в другую сторону - у него будет другой айдишник, $0F52

А в целом - для начала неплохо :)
alpi
Novice
Novice
Posts: 51
Joined: 02.07.2009 17:37
Contact:

Re: Прокачка макросных скилов DRW

Post by alpi »

По п1 - ок, давно хотел переделать :)
Новая версия
С дополнительными проверками на наличие вещей для прокачки в паке, чтоб не юзать скил, если вещь не найдена (кроме peacemaking - если не инструмента - скрипт все равно будет работать вхолостую)
Решил передавать не 2 параметра - скилл и текст, а скилл, значение задержки для скила, и таргет
Кроме того, в процедуру передается максимальное значение, до которого качать скилл - для того, чтобы можно было легко выключить ненужный - например, детект, который качается только когда происходит обнаружение.
По умолчанию для всех скиллов "100.0", для того чтобы выключить скилл - нужно подставить "0", например : RiseSkill('Detect Hidden',4000,0,0);

Code: Select all

program All_Skills_v2;

Const
ItID = $0000; //предмет для прокачки итемайди   
ArLr = $0000; // предмет для прокачки армлора  
TsID = $0000; //предмет для прокачки тейстайди 
Food = $09BB;  //тип еды чтоб не умереть от голода 
SpiritTimer = (5.0/(24*60));
worldmessage = 'World is saving now...';
hungrymessage = 'You are starving';
messagetimer = (0.05/(24*60));

var timespirit,ctime : TDateTime;


Procedure CheckState;
  begin 
   if warmode then SetWarMode(false); 
    if InJournalBetweenTimes(worldmessage,now-2*messagetimer,now) > 0 then begin AddToSystemJournal('Сохранение мира. Ждем 60 секунд'); wait(60000); end;
     if InJournalBetweenTimes(hungrymessage,now-messagetimer,now) > 0 then 
      begin 
       wait(500); 
        FindType(Food,backpack);
         if findcount > 0 then begin UseObject(finditem); AddToSystemJournal('Перекус. Осталось еды в паке: '+IntToStr(GetQuantity(FindType(Food,backpack)))+' шт'); end
         else AddToSystemJournal('Не найдена еда! Положите еду в пак!'); 
      end;
  end;
  
Procedure GoTrance;
  begin 
    repeat 
     CheckState; 
      ctime:=now; UseSkill('Spirit Speak'); 
       AddToSystemJournal('Вхожу в транс'); 
        wait(3000); 
    until InJournalBetweenTimes('You establish a connection to the netherworld',ctime,now) > 0;
     timespirit:= now;
      AddToSystemJournal('Связь с духами установлена. Качаю скилл.');
  end;
  
Procedure RiseSkill(skillname:string;skilldelay:integer;maxskill:double;skilltarget:cardinal);
  begin
   while (GetSkillValue(skillname) < maxskill) and (IsDead(self) = false) do
    begin 
     GoTrance;  
      while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do
         begin 
          CheckState; 
           UseSkill(skillname);
            if skilltarget <> 0 then WaitTargetObject(skilltarget); 
            wait(skilldelay); 
             AddToSystemJournal('Качаю '+skillname); 
         end;
      end;
  end;
   
Begin

 ClearJournal;
 AddToSystemJournal('ПРОВЕРЬТЕ КОНСТАНТЫ И НАЛИЧИЕ МУЗЫКАЛЬНОГО ИНСТРУМЕНТА');
 AddToSystemJournal('Еды в паке: '+IntToStr(GetQuantity(FindType(Food,backpack)))+' шт');
 AddToSystemJournal('ПРЕДУПРЕЖДЕНИЕ! Скиллы начнут качаться ПОСЛЕ первого успешного входа в транс!');
  
  while not dead do
  
  begin
    
   RiseSkill('Stealth',3000,100.0,0);
   RiseSkill('Hiding',3000,100.0,0);
   RiseSkill('Anatomy',5000,100.0,self);
   RiseSkill('Peacemaking',3000,100.0,0);
   RiseSkill('Detect Hidden',4000,100.0,0);   
           
   if FindType(ArLr,backpack) <> 0 then RiseSkill('Arms Lore',5000,100.0,FindType(ArLr,backpack)) 
    else AddToSystemJournal('!!! Не найден предмет для прокачки Arms Lore !!!');
   
   if FindType(ItID,backpack) <> 0 then RiseSkill('Item Identification',5000,100.0,FindType(ItID,backpack)) 
    else AddToSystemJournal('!!! Не найден предмет для прокачки Item Identification !!!');
   
   if FindType(TsID,backpack) <> 0 then RiseSkill('Taste Identification',5000,100.0,FindType(TsID,backpack)) 
    else AddToSystemJournal('!!! Не найден предмет для прокачки Taste Identification !!!');

   while (GetSkillValue('Tracking') < 100.0) and (IsDead(self) = false) do
     begin GoTrance;
       while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do
         begin CheckState; CancelMenu; UseSkill('Tracking'); AutoMenu('Track','Anything'); wait(1500); AddToSystemJournal('Качаю Tracking'); end;
     end;
      
   while (GetSkillValue('Spirit Speak') < 100.0) and (IsDead(self) = false) do 
     begin GoTrance; 
       while (IsDead(self) = false) and (timespirit+SpiritTimer > now) do wait(5000);
     end;      
                           
  end;
    
End.
по 2 и 3 пункту - никто не мешает выставить нужные константы, вдруг на каком-то шарде включили логику, и тестайди все-таки не качается на ножике ;)
just student
Post Reply