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

Скрипт на мининг от Edred`a

тут можно задать вопрос по скриптингу
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Скрипт на мининг от Edred`a

Post by Antoska »

Использую второй скрипт, с разгрузкой в доме.
http://stealth.od.ua/forum/viewtopic.php?t=1000
Все отлично работает. Копал он у меня в 5-и точках. Решил увеличить количество точек до 10-и. Увеличил, но теперь выдает ошибку:

Code: Select all

Out Of Range at 28.1132
Что она означает?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

что неправильно увеличил.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Post by Antoska »

Code: Select all

      if self = Boris then 
      begin 
             MyMaxWeight := 620; 
             StartMinPoint[1] := 1896; 
             StartMinPoint[2] := 272; 
             StartMinPoint[3] := 1901; 
             StartMinPoint[4] := 271; 
             StartMinPoint[5] := 1906; 
             StartMinPoint[6] := 271; 
             StartMinPoint[7] := 1912; 
	 StartMinPoint[8] := 273; 
	 StartMinPoint[9] := 1916;
	 StartMinPoint[10] := 282;   
	 StartMinPoint[11] := 1921;
	 StartMinPoint[12] := 276; 
	 StartMinPoint[13] := 1919;
	 StartMinPoint[14] := 272; 
	 StartMinPoint[15] := 1922;
	 StartMinPoint[16] := 267;
	 StartMinPoint[17] := 1923;
	 StartMinPoint[18] := 262; 
	 StartMinPoint[19] := 1927;
	 StartMinPoint[20] := 262;             
             CaveLimit := 1930; 
         exit; 
      end;   

Code: Select all

      Case StartFlag of 
         1 : begin 
               GotoXY( StartMinPoint[1],StartMinPoint[2],0,true); 
               StartFlag := 2; 
            end; 
         2 : begin 
               GotoXY( StartMinPoint[3],StartMinPoint[4],0,true); 
               StartFlag := 3; 
            end; 
         3 : begin 
               GotoXY( StartMinPoint[5],StartMinPoint[6],0,true); 
               StartFlag := 4; 
            end; 
         4 : begin 
               GotoXY( StartMinPoint[7],StartMinPoint[8],0,true); 
               StartFlag := 5; 
            end; 
         5 : begin 
               GotoXY( StartMinPoint[9],StartMinPoint[10],0,true); 
               StartFlag := 6; 
            end; 
         6 : begin 
               GotoXY( StartMinPoint[11],StartMinPoint[12],0,true); 
               StartFlag := 7; 
            end; 
         7 : begin 
               GotoXY( StartMinPoint[13],StartMinPoint[14],0,true); 
               StartFlag := 8; 
            end; 
         8 : begin 
               GotoXY( StartMinPoint[15],StartMinPoint[16],0,true); 
               StartFlag := 9; 
            end; 
         9 : begin 
               GotoXY( StartMinPoint[17],StartMinPoint[18],0,true); 
               StartFlag := 10; 
            end; 
         10 : begin 
               GotoXY( StartMinPoint[19],StartMinPoint[20],0,true); 
               StartFlag := 1; 
            end; 	 
      end; 
Так вроде правильно все...
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

ну да, правильно.
а неправильно то, что размер StartMinPoint не изменил.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Post by Antoska »

А по подробнее можно?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

скрипт весь выложи
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Post by Antoska »

Code: Select all

program MineBot; 

// v.2.08 (c) Edred 

{$Include 'all.inc'} 

const 
r1 = 10; r2 = 12; r3 = 8; 
rmax = 12;                                 // максимальный 
M_nothing1 = 'There is nothing here'; 
M_nothing2 = 'That is too far'; 
M_nothing3 = 'Try mining elsewhere.'; 
M_nothing4 = 'You cannot mine so close'; 
M_nothing5 = 'You have no line of sight to that location'; 
M_nothing6 = 'reach'; 
M_fizzles1 = 'You loosen some rocks'; 
M_fizzles2 = 'не смогли выкопать ничего'; 
M_needwait = 'You decide not to mine'; 
M_success = 'in your pack.'; 
MaxLimit = 10;               // максимальное кол-во физлов одной точки 
Pickaxe1 = $0E85;            // Типы кирок 
Pickaxe2 = $0E86; 
AnkhID = $40009C73;            // сериал креста для реса  
Ore1 = $19B7;               // 1 Ore 
Ore2 = $19BA;               // 2 Ore 
Ore3 = $19B8;               // 3 Ore 
Ore4 = $19B9;               // 4 Ore 
Boris = $00B18697;  
Sunduk = $405DA266;  
DeadLife = 40;               // Временно - если меньше здоровья - мы мертвы 
                        // Точнее, проверить через реконнект. 

type Rail = array[1..rmax] of Integer; 

var 
Rail_1, Rail_2, Rail_3, StartMinPoint : Rail; 
minret, MyMaxWeight,StartFlag, CaveLimit : integer; 
IronCnt,BronzeCnt,CopperCnt,OzoneCnt,ShadowCnt : Integer; 
BlueSteelCnt,CrinitCnt,SkyCnt,SteelCnt,DarkSteelCnt : Integer; 
BlackSteelCnt,MytherilCnt,SilverCnt,GoldenCnt,PlutoniumCnt,HowManyDischarge : Integer; 
ResCnt : Integer; 
ScriptStartTime : TDateTime; 

flag1 : Boolean; 


   function InitConfig : Boolean; 
   // Настройка переменных под конкретного чара 
   begin 
      Result := true; 
      // Rail_1: сундук - шахта 
      Rail_1[1] := 1887; Rail_1[2] := 266; 
      Rail_1[3] := 1888; Rail_1[4] := 266; 
      Rail_1[5] := 1888; Rail_1[6] := 272; 
      Rail_1[7] := 1893; Rail_1[8] := 272; 
      Rail_1[9] := 1896; Rail_1[10] := 272;  
      // Rail_2: сундук - ГЗ 
      Rail_2[1] := 1887; Rail_2[2] := 266; 
      Rail_2[3] := 1888; Rail_2[4] := 266; 
      Rail_2[5] := 1888; Rail_2[6] := 272; 
      Rail_2[7] := 1856; Rail_2[8] := 272; 
      Rail_2[9] := 1847; Rail_2[10] := 281; 
      Rail_2[11] := 1845; Rail_2[12] := 333;  
      // Rail_3: ГЗ - крест 
      Rail_3[1] := 1845; Rail_3[2] := 333; 
      Rail_3[3] := 1845; Rail_3[4] := 359; 
      Rail_3[5] := 1834; Rail_3[6] := 359; 
      Rail_3[7] := 1834; Rail_3[8] := 360;  
      // Счетчики разгруженной руды 
      IronCnt := 0; 
      BronzeCnt := 0; 
      CopperCnt := 0; 
      OzoneCnt := 0; 
      ShadowCnt := 0; 
      BlueSteelCnt := 0; 
      CrinitCnt := 0; 
      SkyCnt := 0; 
      SteelCnt := 0; 
      DarkSteelCnt := 0; 
      BlackSteelCnt := 0; 
      MytherilCnt := 0; 
      SilverCnt := 0; 
      GoldenCnt := 0; 
      PlutoniumCnt := 0; 
      ResCnt := 0;  
 
      if self = Boris then 
      begin 
         MyMaxWeight := 620; 
         StartMinPoint[1] := 1896; 
         StartMinPoint[2] := 272; 
         StartMinPoint[3] := 1901; 
         StartMinPoint[4] := 271; 
         StartMinPoint[5] := 1906; 
         StartMinPoint[6] := 271; 
	 StartMinPoint[7] := 1912; 
	 StartMinPoint[8] := 273; 
	 StartMinPoint[9] := 1916;
	 StartMinPoint[10] := 282;   
	 StartMinPoint[11] := 1921;
	 StartMinPoint[12] := 276; 
	 StartMinPoint[13] := 1919;
	 StartMinPoint[14] := 272; 
	 StartMinPoint[15] := 1922;
	 StartMinPoint[16] := 267;
	 StartMinPoint[17] := 1923;
	 StartMinPoint[18] := 262; 
	 StartMinPoint[19] := 1927;
	 StartMinPoint[20] := 262;             
         CaveLimit := 1930; 
         exit; 
      end;   
      // Если дошли до сюда - это плохо! 
      Result := false; 
      addtosystemjournal('Error: Не могу настроиться под чара!'); 
      exit; 
   end; 

   procedure PrintStatistic; 
   // выводит в файл с именем charname.log суммарную статистику с запуска скрипта 
   begin 
      with TStringList.Create do 
         try 
         Add('Скрипт начал работу: ' + DateTimeToStr(ScriptStartTime)); 
         Add('             Сейчас: ' + DateTimeToStr(Now)); 
         Add(' '); 
         Add('Количество разгрузок: ' + inttostr(HowManyDischarge)); 
         Add(' '); 
         Add('Добыто:'); 
         Add('   Iron ' + inttostr(IronCnt)); 
         Add('   Bronze ' + inttostr(BronzeCnt)); 
         Add('   Copper ' + inttostr(CopperCnt)); 
         Add('   Ozone ' + inttostr(OzoneCnt)); 
         Add('   Shadow ' + inttostr(ShadowCnt)); 
         Add('   Blue Steel ' + inttostr(BlueSteelCnt)); 
         Add('   Crinit ' + inttostr(CrinitCnt)); 
         Add('   Sky ' + inttostr(SkyCnt)); 
         Add('   Steel ' + inttostr(SteelCnt)); 
         Add('   Dark Steel ' + inttostr(DarkSteelCnt)); 
         Add('   Black Steel ' + inttostr(BlackSteelCnt)); 
         Add('   Mytheril ' + inttostr(MytherilCnt)); 
         Add('   Silver ' + inttostr(SilverCnt)); 
	 Add('   Golden ' + inttostr(GoldenCnt)); 
	 Add('   Plutonium ' + inttostr(PlutoniumCnt)); 
         Add(' '); 
         Add('Количество ресов чара: ' + inttostr(ResCnt)); 
         SaveToFile('__' + GetName(self) + '.log'); 
         finally 
         free; 
      end; 
   end; 

   procedure CheckDead; 
      begin 
         if Dead then exit; 
         if HP < 40 then 
         begin 
            SetARStatus(False); 
            Disconnect; 
            wait(5000); 
            Connect; 
            SetARStatus(True); 
            repeat 
               wait(100); 
            until Connected; 
         end; 
      end; 

   function CheckPickaxe : Boolean; 
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку 
   // возвращаем true - если все ок, false - если нет кирки 
   // Проверка на то, что в руке у чара не кирка не производится! 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      if (ObjAtLayerEx(RhandLayer,self) = 0) then 
      begin 
         // ничего в руках нету 
         tmpser := findtype(Pickaxe1,backpack); 
         if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack); 
         if tmpser = 0 then 
         begin 
            Result := false; 
            exit; 
         end; 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
      end; 
   end; 

   procedure CheckHide; 
   begin 
      if Hidden then exit; 
      if WarMode = true then SetWarMode(false); 
      repeat 
         UseSkill('Hiding'); 
         wait(4500); 
         checksave; 
      until Hidden or (not Connected); 
   end; 

   function MiningAround : Integer ; 
   // копаем вокруг чара 
   // параметр - максимальный вес. 
   // возвращаем: 
   // 1 - вокруг чара все вскопано успешно 
   // 2 - превышен максимальный вес 
   // 3 - чар под атакой 
   // 4 - нет кирки 
   var k, r, x, y : Integer; 
   var mn1, mn2, mn3, mn4, mn5, mn6, mf1, mf2, mw1, ms1 : Integer; 
   var ctime : TDateTime; 
   begin 
      Result := 1; 
      if (HP < MaxHP) or Dead then 
      begin 
         Result := 3; 
         exit; 
      end; 
      addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight)); 
      for x := -2 to 2 do 
      begin 
         for y := -2 to 2 do 
         begin 
            r := 0; 
            repeat 
               waitconnection(5000); 
               if (HP < MaxHP) or Dead then 
               begin 
                  Result := 3; 
                  exit; 
               end; 
               if not CheckPickaxe then 
               begin 
                  Result := 4; 
                  exit; 
               end; 
               if TargetPresent then CancelTarget; 
               if WarMode = true then SetWarMode(false); 
               ctime := Now; 
               UseObject(ObjAtLayerEx(RhandLayer,self)); 
               WaitForTarget(5000); 
               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); 
                  mf2 := InJournalBetweenTimes(M_fizzles2, 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 (mf2<>-1) or (ms1<>-1) or (HP < MaxHP) or Dead or (k > 300); 
               if (HP < MaxHP) or Dead then 
               begin 
                  Result := 3; 
                  exit; 
               end; 
               if Weight > MyMaxWeight then 
               begin 
                  Result := 2; 
                  exit; 
               end; 
               if (mf1<>-1) or (mf2<>-1) then 
               begin 
                  r := r + 1; 
                  if r >= 10 then break 
                  else continue; 
               end; 
               if (mw1<>-1) then wait(100); 
            until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1); 
         end; 
      end; 
   end; 

   procedure GotoXY(x,y,prec : integer; runflag : boolean); 
   // x,y - координаты, в которые идем 
   // prec - точность подхода 
   // runflag - бежать или идти 
   // v. 1.04 (с) Edred, скрипт портирован с инжекта 
   // оригинальная версия Yoko с доработкой AGRS и Edred. 
   var ld, ldc, dx, dy, mx, my : Integer; 
   begin 
      ld := 0; ldc := 0; 
      while true do 
      begin 
	CheckSave;
         dx := GetX(self) - x; if dx < 0 then dx := 0 - dx; 
         dy := GetY(self) - y; if dy < 0 then dy := 0 - dy; 
         if dy > dx then dx := dy; 
         if dx <= prec then exit; 
         mx := GetX(self); my := GetY(self); 
         dx := mx - x; if dx < 0 then dx := 0 - dx; 
         dy := my - y; if dy < 0 then dy := 0 - dy; 
         if dy > dx then dx := dy; 
         if dx <= prec then exit; 
         if ld = dx then begin 
            ldc := ldc + 1; 
            if ldc > 100 then begin addtosystemjournal( 'GotoXY: Cannot reach location!' ); exit; end; 
         end 
         else ld := dx; 
         waitconnection(5000); 
         if mx = x then begin 
            if my = y then exit; 
            // North 
            if my > y then begin Raw_Move(0,runflag); continue; end; 
            // South 
            Raw_Move(4,runflag); continue; 
         end; 
         if mx < x then begin 
            // Northeast 
            if my > y then begin Raw_Move(1,runflag); continue; end; 
            // East 
            if my = y then begin Raw_Move(2,runflag); continue; end; 
            // Southeast 
            Raw_Move(3,runflag); continue; 
         end; 
         // Southwest 
         if my < y then begin Raw_Move(5,runflag); continue; end; 
         // West 
         if my = y then begin Raw_Move(6,runflag); continue; end; 
         // Nortwest 
         Raw_Move(7,runflag); continue; 
      end; 
   end; 

   procedure GotoRail(TmpR : Rail; TmpRD : Integer; dir, guard : Boolean); 
   // TmpR - маршрут, по которому двигаться 
   // TmpRD - размер этого массива 
   // dir - направление перемещения по маршруту (true - прямое, false - обратное) 
   // guard - звать гвардов если бьют по дороге или нет (true - звать, false - нет) 
   // v.1.21 (c) Edred, основана на моих аналогичных функциях для Инжекта и Изи. 
   var i,k,x,y : Integer; 
   begin 
      // число элементов в массиве четное. Каждые два - это координаты. 
      // 1 : 1,2      2 : 3,4      3 : 5,6      n : n*2-1,n*2 
      // обратное направление: 
      // 1 : max-1,max   2 : max-3,max-2      n : max-n*2+1,max-n*2+2 
      k := TmpRD/2; 
      for i := 1 to k do 
      begin 
         if dir then 
            begin x := TmpR[i*2 - 1]; y := TmpR[i*2]; end 
         else 
            begin x := TmpR[TmpRD - i*2 + 1]; y := TmpR[TmpRD - i*2 + 2]; end; 
         if guard AND (HP < MaxHP) then 
            begin UOSay( 'GUARDS' ); wait(100); end; 
         repeat 
            wait(1000); 
         addtosystemjournal('Отладка: идем в ' + inttostr(x) + ', ' + inttostr(y) + ' [GotoRail]'); 
            GotoXY(x,y,0,true); 
	 addtosystemjournal('Отладка: пришли в ' + inttostr(x) + ', ' + inttostr(y) + ' [GotoRail]');          
         until (GetX(self)=x) and (GetY(self)=y); 
      end; 
   end; 

   procedure Medita; 
   // медитация до полного восстановления маны 
   var 
      tmptime : TDateTime; 
      k : Integer; 
   begin 
      if WarMode = true then SetWarMode(false); 
      waitconnection(5000); 
      if (Mana <= MaxMana) then 
      begin 
         tmptime := Now; 
         k:=0; 
         repeat 
            useskill('meditation'); 
            wait(2000); 
            k := k + 1; 
            checksave; 
         until (InJournalBetweenTimes('reached full mana', tmptime, Now)<>-1) or (k = 100); 
         addtosystemjournal('медитация закончена'); 
      end; 
   end; 

   procedure HealChar; 
   // лечение чара спирит спиком до полного здоровья 
   var 
      tmptime : TDateTime; 
      k : Integer; 
   begin 
      while (HP<MaxHP) do 
      begin 
         waitconnection(3000); 
         tmptime := Now; 
         k := 0 
         UseSkill('Spirit Speak'); 
         repeat 
            wait(100); 
            k := k + 1; 
         until (InJournalBetweenTimes('You fail|You channel|You lack|You establish', tmptime, Now)<>-1) or (Mana < (MaxMana - 50)) or (k > 300); 
         wait(500); 
         if Mana < 30 then Medita; 
      end; 
   end; 

   function ResChar : Boolean; 
   // Рес чара с креста 
   begin 
      Result := true; 
      WaitConnection(5000); 
      if WarMode = true then SetWarMode(false); 
      UseObject(AnkhID); 
      wait(2000); 
      checksave; 
      if Dead then 
      begin 
         addtosystemjournal('Error: не могу реснуться!'); 
         Result := false; 
         exit; 
      end; 
      ResCnt := ResCnt + 1; 
      //HealChar; 
   end; 

   procedure RestoreStamina; 
   // если стамины мало, восстанавливаем ее чару до полной 
   begin 
      if Stam < 20 then 
      begin 
         AddToSystemJournal('Необходимо восстановить стамину. Текущий уровень: ' + inttostr(Stam)); 
         repeat 
            waitconnection(5000); 
            wait(1000); 
         until Stam >= MaxStam - 50; 
         AddToSystemJournal('Минимальная стамина восстановлена. Текущий уровень: ' + inttostr(Stam)); 
      end; 
   end; 

   function GetPickaxe : Boolean; 
   // проверяем, есть ли кирка у чара в паке или на нужном слое. 
   // если ее нет - открываем сундук и мешок, берем кирку. Если кирки нет 
   // в мешке - выход. 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      waitconnection(3000); 
      CheckDead; 
      if Dead then 
      begin 
         Result := false; 
         exit; 
      end; 
      if (ObjAtLayerEx(RhandLayer,self) <> 0) or (count(Pickaxe1)<>0) or (count(Pickaxe2)<>0) then exit; 
      // нет у чара кирки 
      repeat 
         CheckDead; 
         if Dead then 
         begin 
            Result := false; 
            exit; 
         end; 
         waitconnection(3000); 
         UseObject(Sunduk); 
         wait(1000); 
         checksave; 
         tmpser := findtype(Pickaxe1,Sunduk); 
         if tmpser = 0 then tmpser := findtype(Pickaxe2,Sunduk); 
         if tmpser <> 0 then 
         begin 
            Grab(tmpser,1); 
            wait(1000); 
            checksave; 
         end; 
      until (count(Pickaxe1)<>0) or (count(Pickaxe2)<>0); 
   end; 

   function GetOreColor(c : cardinal) : string; 
   // сравниваем цвет указанного итема с табличкой и возвращаем 
   // название этого цвета с пробелом в начале 
   begin 
      Result := ' unknown'; 
      Case GetColor(c) of 
         $0000 : begin Result := ' Iron'; IronCnt := IronCnt + GetQuantity(c); end; 
         $0488 : begin Result := ' Bronze'; BronzeCnt := BronzeCnt + GetQuantity(c); end; 
         $0641 : begin Result := ' Copper'; CopperCnt := CopperCnt + GetQuantity(c); end; 
         $048F : begin Result := ' Ozone'; OzoneCnt := OzoneCnt + GetQuantity(c); end; 
         $0770 : begin Result := ' Shadow'; ShadowCnt := ShadowCnt + GetQuantity(c); end; 
         $1BF2 : begin Result := ' Blue Steel'; BlueSteelCnt := BlueSteelCnt + GetQuantity(c); end; 
         $0487 : begin Result := ' Crinit'; CrinitCnt := CrinitCnt + GetQuantity(c); end; 
         $0492 : begin Result := ' Sky'; SkyCnt := SkyCnt + GetQuantity(c); end; 
         $042C : begin Result := ' Steel'; SteelCnt := SteelCnt + GetQuantity(c); end; 
         $03A4 : begin Result := ' Dark Steel'; DarkSteelCnt := DarkSteelCnt + GetQuantity(c); end; 
         $0485 : begin Result := ' Black Steel'; BlackSteelCnt := BlackSteelCnt + GetQuantity(c); end; 
         $042A : begin Result := ' Mytheril'; MytherilCnt := MytherilCnt + GetQuantity(c); end; 
         $0482 : begin Result := ' Silver'; SilverCnt := SilverCnt + GetQuantity(c); end; 
         $0445 : begin Result := ' Golden'; GoldenCnt := GoldenCnt + GetQuantity(c); end; 
         $0498 : begin Result := ' Plutonium'; PlutoniumCnt := PlutoniumCnt + GetQuantity(c); end;
      end; 
   end; 

function DischargeSunduk : Boolean; 
   // Разгружаем пак чара в сундук. Возвращаем: 
   // 1 - все ок, пак разгружен. 
   // 0 - не получилось. 
   var tmpcnt : Integer; 
      tmpid, tmpstack : Cardinal; 
      tmpconnect : TDateTime; 
   begin 
      Result := true; 
      waitconnection(3000); 
      tmpconnect := ConnectedTime; 
      CheckDead; 
      if Dead then 
      begin 
         Result := false; 
         exit; 
      end; 
      UseObject(Sunduk); 
      wait(1000); 
      checksave; 

      // Переместим руду 
      tmpcnt := 0; 
      repeat 
         tmpid := Findtype(Ore1,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore2,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore3,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore4,backpack); 
         if tmpid = 0 then break; 
         addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + GetOreColor(tmpid) +' ore'); 
         tmpcnt := tmpcnt + 1; 
         if tmpcnt > 10 then 
         begin 
            addtosystemjournal('Ошибка: не могу переместить руду!'); 
            Result := false; 
            exit; 
         end; 
         repeat 
            tmpstack := FindtypeEx(Ore1,GetColor(tmpid),Sunduk,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore2,GetColor(tmpid),Sunduk,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore3,GetColor(tmpid),Sunduk,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore4,GetColor(tmpid),Sunduk,False); 
            if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack); 
         until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000); 
         // Если не найден в сундуке - тогда просто в контейнер 
         if tmpstack = 0 then tmpstack := Sunduk; 
         waitconnection(3000); 
         MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      HowManyDischarge := HowManyDischarge + 1; 
      PrintStatistic; 
      IgnoreReset; 
   end; 


Begin 
   ScriptStartTime := Now; 
   HowManyDischarge := 0; 
   if not InitConfig then exit; 
   StartFlag := 1; 
   repeat 
   // стартуем от сундука 
      CheckDead; 
      if not Dead then 
      begin 
         HealChar; 
         CheckDead; 
         If not dead then RestoreStamina; 
      end; 
      if (GetX(self) = Rail_1[1]) and (GetY(self) = Rail_1[2]) then
      begin 
         If not dead then if not GetPickaxe then exit; 
         addtosystemjournal('Скрипт начинает работу от сундука, идем в шахту'); 
         GotoRail(Rail_1,r1,true,false); 
      end; 
      addtosystemjournal('Я в шахте. Начнем с точки ' + inttostr(StartFlag)); 
      Case StartFlag of 
         1 : begin 
               GotoXY( StartMinPoint[1],StartMinPoint[2],0,true); 
               StartFlag := 2; 
            end; 
         2 : begin 
               GotoXY( StartMinPoint[3],StartMinPoint[4],0,true); 
               StartFlag := 3; 
            end; 
         3 : begin 
               GotoXY( StartMinPoint[5],StartMinPoint[6],0,true); 
               StartFlag := 4; 
            end; 
         4 : begin 
               GotoXY( StartMinPoint[7],StartMinPoint[8],0,true); 
               StartFlag := 5; 
            end; 
         5 : begin 
               GotoXY( StartMinPoint[9],StartMinPoint[10],0,true); 
               StartFlag := 6; 
            end; 
         6 : begin 
               GotoXY( StartMinPoint[11],StartMinPoint[12],0,true); 
               StartFlag := 7; 
            end; 
         7 : begin 
               GotoXY( StartMinPoint[13],StartMinPoint[14],0,true); 
               StartFlag := 8; 
            end; 
         8 : begin 
               GotoXY( StartMinPoint[15],StartMinPoint[16],0,true); 
               StartFlag := 9; 
            end; 
         9 : begin 
               GotoXY( StartMinPoint[17],StartMinPoint[18],0,true); 
               StartFlag := 10; 
            end; 
         10 : begin 
               GotoXY( StartMinPoint[19],StartMinPoint[20],0,true); 
               StartFlag := 1; 
            end; 	 
      end; 
      repeat 
         CheckDead; 
         if Dead then break; 
         minret := MiningAround; 
         CheckDead; 
         if Dead then break; 
         if minret = 1 then GotoXY(GetX(self)-3,GetY(self),0,false); 
         if GetX(self) < (CaveLimit + 3) then break; 
      until minret <> 1; 
      addtosystemjournal('Пора на разгрузку'); 
      GotoRail(Rail_1,r1,false,false); 
      CheckDead; 
      if not Dead then 
      begin 
         repeat 
            WaitConnection(5000); 
            CheckDead; 
            if Dead then break; 
            addtosystemjournal('Пришли на разгрузку'); 
            flag1 := DischargeSunduk; 
            wait(100); 
         until flag1 = true; 
         addtosystemjournal('Разгрузка закончена'); 
      end; 
      CheckDead; 
      if Dead then 
      begin 
         GotoRail(Rail_2,r2,true,false); 
         GotoRail(Rail_3,r3,true,false); 
         addtosystemjournal('Надо ресаться'); 
         repeat 
            WaitConnection(5000); 
            flag1 := ResChar; 
            wait(1000); 
         until flag1 = true; 
         RestoreStamina; 
         GotoRail(Rail_3,r3,false,true); 
         GotoRail(Rail_2,r2,false,false); 
      end; 
   until false; 
End.
Когда были задействованы только первые 5 точек, все прекрасно работало...
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

Antoska wrote:

Code: Select all

const 
rmax = 12;                                 // максимальный 

type Rail = array[1..rmax] of Integer; 
от 1 до 12.
а у тебя

Code: Select all

             StartMinPoint[1] := 1896; 
             StartMinPoint[2] := 272; 
             StartMinPoint[3] := 1901; 
             StartMinPoint[4] := 271; 
             StartMinPoint[5] := 1906; 
             StartMinPoint[6] := 271; 
             StartMinPoint[7] := 1912; 
    StartMinPoint[8] := 273; 
    StartMinPoint[9] := 1916; 
    StartMinPoint[10] := 282;    
    StartMinPoint[11] := 1921; 
    StartMinPoint[12] := 276; 
    StartMinPoint[13] := 1919; 
    StartMinPoint[14] := 272; 
    StartMinPoint[15] := 1922; 
    StartMinPoint[16] := 267; 
    StartMinPoint[17] := 1923; 
    StartMinPoint[18] := 262; 
    StartMinPoint[19] := 1927; 
    StartMinPoint[20] := 262;
а у тебя от 1 до 20.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Post by Antoska »

Поставил на 20 все равно ошибку выдает.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

ищи дальше в диапазонах, мне лень внимательно вычитывать скрипт.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Post by Antoska »

Я первым делом проверил диапозоны...
Надо ждать Edred`a, может он сможет помочь.
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Ух как тяжело вспоминать скриптовый язык...

На первый взгляд все правильно, потому - на какую именно строку ошибка указывает?
оставил на 20 все равно ошибку выдает.
Какую ошибку, конкретно?

И начало скрипта заново запостить. До процедуры PrintStatistic.
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Post by Antoska »

Ну когда запускаю скрипт с 10-ю точками для обкопки, выдает ошибку

Code: Select all

Out Of Range at 28.1132
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Ну, вот я и хочу увидеть 28-ую строку твоего скрипта. Мне что, самому ее отсчитывать?

Так что:

1. Запостить начало скрипта до процедуры PrintStatistic.

2. Отдельно указать на 28-ую строку.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

чот на 28 строке вообще не то....
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply