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

опять миниг зедеает

тут можно задать вопрос по скриптингу
Post Reply
olimpik
Neophyte
Neophyte
Posts: 26
Joined: 07.11.2016 13:34

опять миниг зедеает

Post by olimpik »

Целиком скрипт выкладывал ранее, дабы не повторяться объясню на словах. Как пониманию заедание происходит из-за глюка, лага, сбоя сервера. После лага не может юзать кирку, которой пользовался, понимаю что он дергает кирку довольно часто, но как это заменить пока не допер ...

Code: Select all

[22:02:46:654] System: I am already doing something else.
[22:02:53:960] System: I am already doing something else.
[22:03:01:376] System: I am already doing something else.
[22:03:08:546] System: I am already doing something else.
[22:03:15:767] System: I am already doing something else.
[22:03:23:294] System: I am already doing something else.
[22:03:30:538] System: I am already doing something else.
[22:03:37:471] System: I am already doing something else.
[22:03:44:740] System: I am already doing something else.
[22:03:52:279] System: I am already doing something else.
[22:03:59:489] System: I am already doing something else.
[22:04:06:826] System: I am already doing something else.
[22:04:14:197] System: I am already doing something else.
[22:04:21:286] System: I am already doing something else.
[22:04:28:510] System: I am already doing something else.
[22:04:35:968] System: I am already doing something else.
[22:04:45:662] System: I am already doing something else.
[22:04:53:117] System: I am already doing something else.
[22:05:00:698] System: I am already doing something else.
[22:05:08:056] System: I am already doing something else.
[22:05:16:048] System: I am already doing something else.
[22:05:23:929] System: I am already doing something else.
[22:05:31:929] System: I am already doing something else.
[22:05:39:514] System: I am already doing something else.
[22:05:46:650] System: I am already doing something else.
[22:05:53:850] System: I am already doing something else.
[22:06:01:489] System: I am already doing something else.
[22:06:08:928] System: I am already doing something else.
[22:06:16:154] System: I am already doing something else.
[22:06:23:981] System: I am already doing something else.
[22:06:31:876] System: I am already doing something else.
[22:06:39:488] System: I am already doing something else.
без сбоя идет вот так

Code: Select all

[22:12:57:050] You see: You dig some ore and put it in your backpack.
[22:12:57:812] System: You start mining...
[22:13:01:101] System: I am already doing something else.
[22:13:03:853] You see: You dig some ore and put it in your backpack.
[22:13:04:796] System: You start mining...
[22:13:08:328] System: I am already doing something else.
[22:13:10:626] You see: You dig some ore and put it in your backpack.
[22:13:11:680] System: You start mining...
[22:13:16:094] System: I am already doing something else.
[22:13:17:553] You see: You loosen some rocks but fail to find any useable ore.
[22:13:17:557] System: You stop mining.
[22:13:24:209] You see: Where do you wish to dig?
[22:13:24:944] System: You start mining...
[22:13:26:709] System: I am already doing something else.
сама процедура копки выглядит так

Code: Select all

Procedure DoitBaby(f_tile:TFoundTile);
var
k :integer;
ctime : TDateTime;
TimeStart : TDateTime;
begin
 k:=0;
 TimeStart:=Now;
Cancel;
repeat
 waitconnection(5000);
   if not CheckPickaxe then
            if TargetPresent then CancelTarget;
            if WarMode = true then SetWarMode(false);
            if Dead then 
            begin 
            exit; 
            end; 
            ctime := Now;
            UseObject(ObjAtLayerEx(RhandLayer,self));
            WaitForTarget(5000); 
TargetToTile(f_tile.Tile,f_tile.X,f_tile.Y,f_tile.Z);
ctime := Now;

wait(2000);
k := k + 1;
until (InJournalBetweenTimes('Oh no your tool breaks|It seems, that|stop|You find a chunk of fossilized sap|you can|There is no metal|no your tool|You loosen|fail|You cannot| that you must|fail| have|destroyed|anything there', TimeStart, Now)<>-1) or (k > 300);
end;
помогает в данной ситуации только реконект, как то можно сообразить что бы при синхронной повторяемости он делал реконет?
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: опять миниг зедеает

Post by drabadan »

olimpik wrote:Целиком скрипт выкладывал ранее, дабы не повторяться объясню на словах. Как пониманию заедание происходит из-за глюка, лага, сбоя сервера. После лага не может юзать кирку, которой пользовался, понимаю что он дергает кирку довольно часто, но как это заменить пока не допер ...

Code: Select all

[22:02:46:654] System: I am already doing something else.
[22:02:53:960] System: I am already doing something else.
[22:03:01:376] System: I am already doing something else.
[22:03:08:546] System: I am already doing something else.
[22:03:15:767] System: I am already doing something else.
[22:03:23:294] System: I am already doing something else.
[22:03:30:538] System: I am already doing something else.
[22:03:37:471] System: I am already doing something else.
[22:03:44:740] System: I am already doing something else.
[22:03:52:279] System: I am already doing something else.
[22:03:59:489] System: I am already doing something else.
[22:04:06:826] System: I am already doing something else.
[22:04:14:197] System: I am already doing something else.
[22:04:21:286] System: I am already doing something else.
[22:04:28:510] System: I am already doing something else.
[22:04:35:968] System: I am already doing something else.
[22:04:45:662] System: I am already doing something else.
[22:04:53:117] System: I am already doing something else.
[22:05:00:698] System: I am already doing something else.
[22:05:08:056] System: I am already doing something else.
[22:05:16:048] System: I am already doing something else.
[22:05:23:929] System: I am already doing something else.
[22:05:31:929] System: I am already doing something else.
[22:05:39:514] System: I am already doing something else.
[22:05:46:650] System: I am already doing something else.
[22:05:53:850] System: I am already doing something else.
[22:06:01:489] System: I am already doing something else.
[22:06:08:928] System: I am already doing something else.
[22:06:16:154] System: I am already doing something else.
[22:06:23:981] System: I am already doing something else.
[22:06:31:876] System: I am already doing something else.
[22:06:39:488] System: I am already doing something else.
без сбоя идет вот так

Code: Select all

[22:12:57:050] You see: You dig some ore and put it in your backpack.
[22:12:57:812] System: You start mining...
[22:13:01:101] System: I am already doing something else.
[22:13:03:853] You see: You dig some ore and put it in your backpack.
[22:13:04:796] System: You start mining...
[22:13:08:328] System: I am already doing something else.
[22:13:10:626] You see: You dig some ore and put it in your backpack.
[22:13:11:680] System: You start mining...
[22:13:16:094] System: I am already doing something else.
[22:13:17:553] You see: You loosen some rocks but fail to find any useable ore.
[22:13:17:557] System: You stop mining.
[22:13:24:209] You see: Where do you wish to dig?
[22:13:24:944] System: You start mining...
[22:13:26:709] System: I am already doing something else.
сама процедура копки выглядит так

Code: Select all

Procedure DoitBaby(f_tile:TFoundTile);
var
k :integer;
ctime : TDateTime;
TimeStart : TDateTime;
begin
 k:=0;
 TimeStart:=Now;
Cancel;
repeat
 waitconnection(5000);
   if not CheckPickaxe then
            if TargetPresent then CancelTarget;
            if WarMode = true then SetWarMode(false);
            if Dead then 
            begin 
            exit; 
            end; 
            ctime := Now;
            UseObject(ObjAtLayerEx(RhandLayer,self));
            WaitForTarget(5000); 
TargetToTile(f_tile.Tile,f_tile.X,f_tile.Y,f_tile.Z);
ctime := Now;

wait(2000);
k := k + 1;
until (InJournalBetweenTimes('Oh no your tool breaks|It seems, that|stop|You find a chunk of fossilized sap|you can|There is no metal|no your tool|You loosen|fail|You cannot| that you must|fail| have|destroyed|anything there', TimeStart, Now)<>-1) or (k > 300);
end;
помогает в данной ситуации только реконект, как то можно сообразить что бы при синхронной повторяемости он делал реконет?
отключи autoloop в настройках, следи за журналом в методе откуда ето происходит и если такое приходит то делай Step(1, True); движение сбивает автолуп
olimpik
Neophyte
Neophyte
Posts: 26
Joined: 07.11.2016 13:34

Re: опять миниг зедеает

Post by olimpik »

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

Code: Select all

[22:12:57:050] 
[22:12:57:812] System: You start mining...
[22:13:01:101] System: I am already doing something else.

Code: Select all

Procedure DoitBaby(f_tile:TFoundTile);

...
         UseObject(ObjAtLayerEx(RhandLayer,self));
         WaitForTarget(1000)
         TargetToTile(f_tile.Tile,f_tile.X,f_tile.Y,f_tile.Z);
         ctime := Now;

wait(7000)
k := k + 1;
...
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: опять миниг зедеает

Post by drabadan »

Code: Select all

function TMiningEngineExtended.ResolveDigResult(Spot: TSpot): Integer;
begin
 //made here case for further updates like if we have high ore digged so we will know it and make some special moves;
 //AddToSystemJournal(FoundedParamID.ToString);
 case FoundedParamID of
   0 : SpotActions(Spot);
   1 : SpotActions(Spot);
   2 : SpotActions(Spot);
   3 : SpotActions(Spot);
   4 : begin
    if DropMapOption then
      DropMap;
    SpotActions(Spot); 
   end;
   5 : Result := 0;
   6 : Result := 0;
   7 : Result := 0;
   8 : Result := 0;
 end;
end;

function TMiningEngineExtended.SpotActions(Spot: TSpot) : Integer;
var
 bool : Boolean; 
begin
  //What to do
  if ItemsHelperInstance.CheckNotorietyArea(__NOTORIETYLEVEL) then
    begin
      Result := 2;
      Exit;
    end;

  if (Weight >= Unloader.UnloadWeight) then    
   begin
     HomeSequence;
     Exit;
   end;

  if not MoverHelper.MoveToSpot(Spot.X, Spot.Y) then
    begin
     Result := -1;
     Exit;
    end; 

  if(Dist(GetX(SelfId), GetY(SelfId), Spot.X, Spot.Y) > 1) then
   Exit;
  
  if Dead then 
   begin
    AddToSystemJournal('Died Now!');
    DeathHandler.Resurrect;
    HomeSequence;
    Exit;
   end;

  if _useSkill and UseSkillOnDigOption then
   begin   
    bool := UseCheckPickaxe(SkillOnDig);
    _useSkill := False;
   end
   else
   begin
    bool := UseCheckPickaxe;
    _useSkill := True; 
   end;

  if not bool then
    begin
      HomeSequence;
      Exit;    
    end;

  if WaitForTarget(10000) then
   begin
    Wait(300);
    TargetToXYZ(Spot.X, Spot.Y, Spot.Z);

    if (WaitJournalLineSystem(Now, 'Success|Failed|You dig some|loosen some rocks|discover a tattered map|you must go and mine|is no metal|is too far|mine or dig anything|слишком далеко', 20000)) then
     Result := ResolveDigResult(Spot);
    //else
     //AddToSystemJournal('Some error occured, while waiting mining response!');
  end;
end;
Post Reply