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

Мининг + ходилка

тут можно задать вопрос по скриптингу
Post Reply
-=#MIB#=-
Posts: 9
Joined: 11.03.2011 18:13

Мининг + ходилка

Post by -=#MIB#=- »

Прошу объяснить что происходит в этой функции, взятой из скрипта на мининг DRW автор v26RuS (http://stealth.od.ua/forum/viewtopic.php?t=1106)

Code: Select all

   function MiningAround : Integer ; 
   // копаем вокруг чара 
   // параметр - максимальный вес. 
   // возвращаем: 
   // 1 - вокруг чара все вскопано успешно 
   // 2 - превышен максимальный вес 
   // 3 - чар под атакой 
   // 4 - нет кирки 
   // 5 - PK 
   var k, r, x, y : Integer; 
   var mn1, mn2, mn3, mn4, mn5, mn6, mf1, mw1, ms1 : Integer; 
   var ctime : TDateTime; 
   begin 
      Result := 1; 
      addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight)); 
      for x := -4 to 4 do 
      begin 
         for y := -4 to 4 do 
         begin 
            r := 0; 
            repeat 
               waitconnection(5000); 
               if not CheckPickaxe then 
               begin 
                  Result := 4; 
                  exit; 
               end; 
               CheckHide; 
               if TargetPresent then CancelTarget; 
               if WarMode = true then SetWarMode(false); 
               ctime := Now; 
               UseObject(ObjAtLayerEx(RhandLayer,self)); 
               WaitForTarget(1000); 
               If TargetPresent then TargetToTile(1342, GetX(self)+x, GetY(self)+y, GetZ(self)); 
               k := 0; 
               repeat 
                  wait(100); 
                  k := k + 1; 
                  checksave; 
                  mn1 := InJournalBetweenTimes(M_nothing1, ctime, Now); 
                  mn2 := InJournalBetweenTimes(M_nothing2, ctime, Now); 
                  mn3 := InJournalBetweenTimes(M_nothing3, ctime, Now); 
                  mn4 := InJournalBetweenTimes(M_nothing4, ctime, Now); 
                  mn5 := InJournalBetweenTimes(M_nothing5, ctime, Now); 
                  mn6 := InJournalBetweenTimes(M_nothing6, ctime, Now); 
                  mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now); 
                  ms1 := InJournalBetweenTimes(M_success, ctime, Now); 
               until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mf1<>-1) or (ms1<>-1) or Dead or (k > 300); 

          if InJournalBetweenTimes('heavy', ctime, Now) <> -1 then 
      begin 
        Result := 6 
        exit; 
          end; 
    
          if redcheck = true then 
      begin 
        Result := 5 
        exit; 
          end; 

               if Weight > MyMaxWeight then 
               begin 
                  Result := 2; 
                  exit; 
               end; 
               if (mf1<>-1) then 
               begin 
                  r := r + 1; 
                  if r >= 10 then break 
                  else continue; 
               end; 
               if (mw1<>-1) then wait(3000); 
            until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1); 
         end; 
      end; 
   end; 
На сколько я понимаю, чар копает в радиусе 4 тайлов вокруг себя, проверяет на наличие пк, сверяет критический вес для рекола. Особенно интересует вот эта часть функции:

Code: Select all

               if (mf1<>-1) then 
               begin 
                  r := r + 1; 
                  if r >= 10 then break 
                  else continue; 
               end; 
               if (mw1<>-1) then wait(3000); 
            until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1); 
p.s: хочу добавить ходилку для этого скрипта, но не знаю с какой строны подойти...
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Post by Fenix »

Code: Select all

if (mf1<>-1) then
begin
  r := r + 1;
  if r >= 10 then break
  else continue;
end;
Этот кусок позволяет перейдти к другой точке добычи после 10 фейлов на одном месте.

Code: Select all

if (mw1<>-1) then wait(3000);
Это ХЗ, mw1 нигде не инициализируется, возможно просто использовалось для отладки и забыли удалить.

Code: Select all

until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1)
Это позволяет выйдти из цикла добычи когда в текущем тайле нет руды.

P.S.: Может где чего и напутал.
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
Post Reply