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

Помогите со скриптом пжл

тут можно задать вопрос по скриптингу
Post Reply
Denis
Posts: 2
Joined: 12.02.2015 16:51

Помогите со скриптом пжл

Post by Denis »

Помогите пожалуйсто со скриптом на ламбер. Скрипт рабочий, все норм, НО!!! если его остановить на середине маршрута или еще что то с ним случается то он стопарится и выдает UseObject error: Object not found.. Раньше настраивал его (года3-4 назад) все было норм, работал отлично. При выключении и повторном включении чар просто шел к сундуку и стартовал заного. Помогите исправте ошибку что б скрипт работал.
lumber Lyntik.sc
(13.54 KiB) Downloaded 297 times
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Помогите со скриптом пжл

Post by drabadan »

Denis wrote:Помогите пожалуйсто со скриптом на ламбер. Скрипт рабочий, все норм, НО!!! если его остановить на середине маршрута или еще что то с ним случается то он стопарится и выдает UseObject error: Object not found.. Раньше настраивал его (года3-4 назад) все было норм, работал отлично. При выключении и повторном включении чар просто шел к сундуку и стартовал заного. Помогите исправте ошибку что б скрипт работал.
lumber Lyntik.sc
попробуй авдруг!

Code: Select all

program LambIsengard101; 
// В папке D:\Games\Railes есть файл имя_чара.txt и файл res.txt 
// Первый - это маршрут перемещения чара по лесу от сундука и обратно к 
// сундуку. При килле чар идет дальше по маршруту вплоть до сундука. 
// Второй файл - маршрут от сундука до креста для реса. 
// Вырубленные логи скидывать в сундук. Топоры брать из мешка оттуда же. 
// В общем, как в мининге. 
// 
// v.1.01 (c) Edred 

{$Include 'all.inc'} 

const 
MyMaxWeight = 350; 
Msg1 = 'You put the'; 
Msg2 = 'reach this'; 
Msg3 = 'fail to'; 
Msg4 = 'There are no logs here to chop'; 
Msg5 = 'There is nothing';
Msg6 = 'OOPS !!!';
Msg7 = 'far away';
Hatchet1 = $0F43; 
Hatchet2 = $0F48; 
AnkhID = $4000721A; 
Sunduk = $4023A375; 
BagHatchets = $4023D4BC; 
DeadLife = 10; 
Logs = $1BDD; 
WoodType = $0F90; 

Procedure Take;
begin
UseObject($4023A375);        //ид суднука с кирками
wait(3000)
FindTypeEx($0F43,$FFFF,$4023A375,True);  //ид суднука с кирками
wait(1000)
MoveItem(FindItem,1,Backpack,0,0,0);
wait(3000)
FindTypeEx($0E85,$FFFF,$4023A375,True);      //ид суднука с кирками
wait(1000)
MoveItem(FindItem,1,Backpack,0,0,0);
wait(3000)
end;

type LumbRecord = Record 
   x,y,tt,tx,ty,tz : integer; 
   end; 

var 
LumberDim : array [0..5000] of LumbRecord; 
ResDim : array [0..5000] of  LumbRecord; 
Regs : array [1..3] of Cardinal; 
MaxPosL, MaxPosR, k : integer;               // длины соответствующих массивов 
CharRail, ResRail : String; 
LumberFlag : Boolean;      // true - работаем, false - нет (разгрузка или смерть) 
ctime : TDateTime; 
  

   procedure GetLumberRail(s : String; WPos : Integer; flag : Boolean); 
   // flag - true - маршрут для ламбера, false - маршрут для реса 
   begin 
      s := s + ' '; 
      if flag then 
      begin 
         LumberDim[WPos].x := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         LumberDim[WPos].y := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         LumberDim[WPos].tt := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         LumberDim[WPos].tx := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         LumberDim[WPos].ty := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         LumberDim[WPos].tz := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
      end 
      else 
      begin 
         ResDim[WPos].x := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         ResDim[WPos].y := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         ResDim[WPos].tt := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         ResDim[WPos].tx := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         ResDim[WPos].ty := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
         ResDim[WPos].tz := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
         Delete(s,1,Pos(' ',s)); 
      end; 
   end; 

   procedure GetRail(FileNam : String; Flagoffile : boolean); 
   var 
   List : TStringList; 
   i : integer; 
   begin 
      List := TStringList.Create; 
      List.LoadFromFile(FileNam); 
      for i := 0 to List.Count-1 do GetLumberRail(List.strings[i],i,FlagOfFile); 
      if Flagoffile then MaxPosL := i 
      else MaxPosR := i; 
   end; 

   procedure CheckDead; 
   begin 
      if Dead then exit; 
      if HP < 10 then 
      begin 
         Disconnect; 
         wait(5000); 
         Connect; 
         repeat 
            wait(1000); 
         until Connected; 
      end; 
   end; 


   procedure RestoreStamina; 
   // если стамины мало, восстанавливаем ее чару до полной 
   begin 
      if Stam < 20 then 
      begin 
         repeat 
            waitconnection(3000); 
            wait(1000); 
         until Stam = MaxStam; 
      end; 
   end; 

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

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



   procedure ResChar; 
   // идем по маршруту на рес, ресаем чара, восстанавливаем здоровье, возвращаемся 
   // по тому же маршруту в обратную сторону 
   var 
   n : integer; 
   tmptime : TDateTime; 
   begin 
AddToSystemJournal('TEST: нужен рес чара'); 
      For n := 0 to MaxPosR-1 do 
      begin 
         repeat 
            NewMoveXY(ResDim[n].x,ResDim[n].y,False,0,true); 
            wait(300); 
         until (GetX(self)=ResDim[n].x) and (GetY(self)=ResDim[n].y); 
      end; 
      // чар у креста 
AddToSystemJournal('TEST: чар у креста'); 
      WaitConnection(5000); 
      if WarMode = true then SetWarMode(false); 
      repeat 
         UseObject(AnkhID); 
         wait(2000); 
         checksave; 
      until not Dead; 
      // лечим чара 
AddToSystemJournal('TEST: лечим чара'); 
      while (HP<MaxHP) do 
      begin 
         waitconnection(3000); 
         tmptime := Now; 
         n := 0 
         UseSkill('Spirit Speak'); 
         repeat 
            wait(2000); 
            n := n + 1; 
         until (InJournalBetweenTimes('You fail|You channel|You lack|You establish', tmptime, Now)<>-1) or (Mana < (MaxMana - 50)) or (n > 300); 
         wait(500); 
         if Mana < 30 then 
         begin 
            tmptime := Now; 
            n := 0; 
            repeat 
               waitconnection(3000); 
               useskill('meditation'); 
               wait(2000); 
               n := n + 1; 
               checksave; 
            until (InJournalBetweenTimes('reached full mana', tmptime, Now)<>-1) or (n = 100); 
         end; 
      end;
      // пойдем обратно 
AddToSystemJournal('TEST: идем обратно к сундуку'); 
      For n := 0 to MaxPosR-1 do 
      begin 
         repeat 
            NewMoveXY(ResDim[MaxPosR-1-n].x,ResDim[MaxPosR-1-n].y,False,0,true); 
            wait(3000); 
         until (GetX(self)=ResDim[MaxPosR-1-n].x) and (GetY(self)=ResDim[MaxPosR-1-n].y); 
      end; 
   end; 

   procedure Discharge; 
   // разгружаем нарубленное в сундук 
   // нарубленное - реги в массиве Regs[1..3] 
   // логи - константа Logs 
   var m, tmpcnt : integer; 
      tmpid, tmpstack, tmpcolor : Cardinal; 
      tmpname : String; 
   begin 
AddToSystemJournal('TEST: разгрузка'); 
      waitconnection(3000); 
      CheckDead; 
      if Dead then exit; 
	  NewMoveXY(GetX(Sunduk), GetY(Sunduk), true, 1, true);
      UseObject(Sunduk); 
      wait(1000); 
      checksave; 
      // выложим реги 
      for m := 1 to 3 do 
      begin 
         tmpcnt := 0; 
         Repeat 
            tmpid := Findtype(Regs[m],backpack); 
            if tmpid = 0 then break; 
            addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + ' regs'); 
            tmpcnt := tmpcnt + 1; 
            if tmpcnt > 10 then 
            begin 
               addtosystemjournal('Ошибка: не могу переместить regs!'); 
               wait(15000); 
            end; 
            tmpstack := Findtype(Regs[m],Sunduk); 
            // Если не найден в банке - тогда просто в контейнер 
            if tmpstack = 0 then tmpstack := Sunduk; 
            MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0); 
            wait(1000); 
            CheckSave; 
         until tmpid = 0; 
      end; 
      // выложим дид вуды 
      tmpcnt := 0; 
      Repeat 
         tmpid := Findtype(WoodType,backpack); 
         if tmpid = 0 then break; 
         addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + ' dead woods'); 
         tmpcnt := tmpcnt + 1; 
         if tmpcnt > 10 then 
         begin 
            addtosystemjournal('Ошибка: не могу переместить dead woods!'); 
            wait(15000); 
         end; 
         tmpstack := Findtype(WoodType,Sunduk); 
         // Если не найден в банке - тогда просто в контейнер 
         if tmpstack = 0 then tmpstack := Sunduk; 
         MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      // выложим логи 
      tmpcnt := 0; 
      Repeat 
         tmpid := Findtype(Logs,backpack); 
         if tmpid = 0 then break; 
         tmpcolor := GetColor(tmpid); 
         tmpname := ' unknown logs'; 
         case tmpcolor of 
            $0000 : tmpname := ' logs'; 
            $037F : tmpname := ' Grave logs'; 
            $0039 : tmpname := ' Willow logs'; 
            $0026 : tmpname := ' Maple logs'; 
            $0405 : tmpname := ' Oak logs'; 
            $0994 : tmpname := ' Bloody logs'; 
            $048A : tmpname := ' Nature logs'; 
            $0898 : tmpname := ' Spirits logs'; 
         end; 
         addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + tmpname); 
         tmpcnt := tmpcnt + 1; 
         if tmpcnt > 10 then 
         begin 
            addtosystemjournal('Ошибка: не могу переместить логи'); 
            wait(15000); 
         end; 
         repeat 
            tmpstack := FindtypeEx(Logs,tmpcolor,Sunduk,False); 
            if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack); 
         until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000); 
         // Если не найден в сундуке - тогда просто в контейнер 
         if tmpstack = 0 then tmpstack := Sunduk; 
         MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      IgnoreReset; 
AddToSystemJournal('TEST: разгрузка закончена'); 
   end; 
     

   function LumbCurTree(tile,x,y,z : Integer) : Boolean; 
   // рубим указанный тайл. Возвращаем false если перевес или чар мертв. 
   var q, m1, m2, m3, m4, m5, m6, CountFizzle : integer;
   begin 
      Result := true; 
      CountFizzle := 0;
      CheckHide; 
      repeat 
         if WarMode = true then SetWarMode(false); 
         if TargetPresent then CancelTarget; 
         ctime := Now; 
         if Dead then begin Result := false; exit; end; 
         if UseType(Hatchet1,$FFFF) = 0 then 
         begin 
            if UseType(Hatchet2,$FFFF) = 0 then 
            begin 
               Result := false; 
               exit; 
            end;
         end; 
         WaitForTarget(1000); 
         If TargetPresent then TargetToTile(tile, x, y, z); 
         q := 0; 
         repeat 
            wait(1000); 
            q := q + 1; 
            checksave;
            m1 := InJournalBetweenTimes(Msg1, ctime, Now); 
            m2 := InJournalBetweenTimes(Msg2, ctime, Now); 
            m3 := InJournalBetweenTimes(Msg3, ctime, Now); 
            m4 := InJournalBetweenTimes(Msg4, ctime, Now); 
            m5 := InJournalBetweenTimes(Msg5, ctime, Now);
            m6 := InJournalBetweenTimes(Msg6, ctime, Now); 
         until (m1<>-1) or (m2<>-1) or (m3<>-1) or (m4<>-1) or (m5<>-1) or Dead or (q > 300); 
         if (m2<>-1) or (m3<>-1) or (m4<>-1) then CountFizzle := CountFizzle + 1; 
         if Dead or (Weight > MyMaxWeight) then begin Result := false; exit; end; 
      until (m5<>-1) OR (CountFizzle = 7); 
   end; 

Begin 
   Regs[1] := $0F85;      // ginseng 
   Regs[2] := $0F88;      // Nightshade 
   Regs[3] := $0F86;      // Mandrake Roots 
      GetRail(CharRail,true); 
   AddToSystemJournal('Маршрут ' + CharRail + ' загружен'); 
   GetRail(ResRail,false); 
   AddToSystemJournal('Маршрут ' + ResRail + ' загружен'); 
   // Стартуем от сундука 
   repeat 
      CheckDead; 
      if Dead then LumberFlag := false else LumberFlag := true; 
      if LumberFlag then 
      begin 
         if not CheckHatchet then exit; 
         For k := 0 to MaxPosL-1 do 
         begin 
            // идем по маршруту 
            repeat 
               RestoreStamina; 
               NewMoveXY(LumberDim[k].x,LumberDim[k].y,False,0,true); 
               wait(3000); 
            until (GetX(self)=LumberDim[k].x) and (GetY(self)=LumberDim[k].y); 
AddToSystemJournal('TEST (' + inttostr(k) + ' of ' + inttostr(MaxPosL-1) + '): пришел в координаты ' + inttostr(LumberDim[k].x) + ',' + inttostr(LumberDim[k].y)); 
            if LumberFlag and (LumberDim[k].tt <> 0) then 
               // Будем рубить 
               LumberFlag := LumbCurTree(LumberDim[k].tt,LumberDim[k].tx,LumberDim[k].ty,LumberDim[k].tz); 
         end; 
      end; 
      // мы снова у сундука 
      if not Dead then Discharge else ResChar; 
      if ((GetX(self) = 1124) AND (GetY(self) = 2730)) then NewMoveXY(1124,2730,False,0,true);       
   until False; 
End.

Denis
Posts: 2
Joined: 12.02.2015 16:51

Re: Помогите со скриптом пжл

Post by Denis »

спасибо...НО...не помогло...к большему сожалению
Post Reply