Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$Include 'std.sinc'}
- {$Include 'types.sinc'}
- {$Include 'ptimer.sinc'}
- {$Include 'recall.sinc'}
- {$Include 'debug.sinc'}
- {$Include 'escape.sinc'}
- function findCreatures(creatures : array of word) : cardinal;
- var
- i : integer;
- begin
- result := 0;
- for i := 0 to getArrayLength(creatures) - 1 do
- begin
- result := findType(creatures[i], ground);
- if (result <> 0) then exit;
- end;
- end;
- function returnTreesArray(x1, y1, x2, y2 : integer) : array of TFoundTile;
- var foundTiles : TFoundTilesArray;
- trees : array of TFoundTile;
- treeTiles : array of word;
- i, j, n, tilesCnt : integer;
- begin
- treeTiles := [3230, 3277, 3280, 3283, 3286, 3289, 3291, 3294, 3296, 3299, 3302];
- for i := 0 to getArrayLength(treeTiles) - 1 do
- begin
- tilesCnt := getStaticTilesArray(x1, y1, x2, y2, worldNum, treeTiles[i], foundTiles);
- n := getArrayLength(trees);
- setArrayLength(trees, n + tilesCnt);
- for j := 0 to tilesCnt - 1 do
- trees[n + j] := foundTiles[j];
- end;
- result := trees;
- addToSystemJournal('Total ' + intToStr(getArrayLength(result)) + ' tiles');
- end;
- var
- lastHp : integer;
- function checkHarm : boolean;
- begin
- result := hp < lastHp;
- lastHp := hp;
- // èùåì ñëèìà
- if not result then result := findCreatures([$0033, $000E]) <> 0;
- end;
- var
- lumberTimer : TTimer;
- function lumber(tile : word; x, y, z : integer) : boolean;
- var okMsg, failMsg, stopMsg, errMsg : string;
- ok, fail, err, stop : integer;
- lastTime : TDateTime;
- timeout : TTimer;
- begin
- okMsg := 'You place|I am already|A slime oozes over to';
- failMsg := 'You fail to get';
- stopMsg := 'There''s not enough|Guard Zone any more';
- errMsg := 'how to use|broke|stop|can''t see|far away';
- scheduleTimer(timeout, 2*60*1000);
- wait(randomRange(1,2)*1000);
- repeat
- while not isTimerExpire(lumberTimer) do wait(100);
- if targetPresent then cancelTarget;
- waitTargetTile(tile, x, y, z);
- useObject(ObjAtLayer(LhandLayer));
- lastTime := now;
- repeat
- wait(100);
- result := checkHarm;
- ok := inJournalBetweenTimes(okMsg, lastTime, now);
- fail := inJournalBetweenTimes(failMsg, lastTime, now);
- err := inJournalBetweenTimes(errMsg, lastTime, now);
- stop := inJournalBetweenTimes(stopMsg, lastTime, now);
- until (ok >= 0) or (fail >= 0) or (err >= 0) or (stop >=0) or isTimerExpire(timeout) or result;
- if ok >= 0 then scheduleTimer(lumberTimer, 1300);
- if fail >= 0 then scheduleTimer(lumberTimer, 1450);
- until (stop >= 0) or (err >= 0) or isTimerExpire(timeout) or result;
- end;
- procedure RecallToForest();
- begin
- recallWithCheck(makeDestination($44C505B9, round(randomRange(8,16))), rcRegs);
- wait(500);
- end;
- procedure RecallToBank();
- begin
- recallWithCheck(makeDestination($44C505B9, 2), rcRegs); //bank
- wait(randomRange(1, 3)*1000);
- end;
- procedure checkRegs();
- begin
- if ((count(reg_bm) < 10) or (count(reg_mr) < 10) or (count(reg_bp) < 10)) then
- _critical(getName(self) + ' ìàëî ðåãîâ');
- if (count(reg_bm) < 10) then get(findtype($0E75, objAtLayer(BankLayer)), backpack, reg_bm, 30 - count(reg_bm));
- if (count(reg_mr) < 10) then get(findtype($0E75, objAtLayer(BankLayer)), backpack, reg_mr, 30 - count(reg_mr));
- if (count(reg_bp) < 10) then get(findtype($0E75, objAtLayer(BankLayer)), backpack, reg_bp, 30 - count(reg_bp));
- end;
- function checkWeight : boolean;
- var p : TPoint;
- begin
- result := Weight > 280;
- if (Weight > 280) then
- begin
- addToSystemJournal('Overweight!!');
- RecallToBank();
- uoSay('bank');
- wait(randomRange(1, 3)*1000);
- get(backpack, findtype($0E75, objAtLayer(BankLayer)), log_type, count(log_type));
- checklag;
- get(backpack, findtype($0E75, objAtLayer(BankLayer)), log_type, count($0F90)); //deadwood
- checklag;
- checkRegs;
- wait(randomRange(1, 3)*1000);
- RecallToForest();
- if findPassable(p, 30) then doEscape(p);
- wait(500);
- end;
- end;
- var
- currentSquare : array of TFoundTile;
- t : integer;
- p : TPoint;
- begin
- lastHp := hp;
- moveThroughNPC := 1;
- scheduleTimer(lumberTimer, 7000);
- cancelTimer(lumberTimer);
- RecallToForest();
- while not Dead do
- begin
- currentSquare := returnTreesArray(getX(self) - 9, getY(self) - 9, getX(self) + 9, getY(self) + 12);
- t := 0;
- while t < getArrayLength(currentSquare) - 1 do
- begin
- addToSystemJournal('Tile: ' + intToStr(currentSquare[t].tile) + ', X: ' + intToStr(currentSquare[t].x) + ', Y: ' + intToStr(currentSquare[t].y));
- newMoveXY(currentSquare[t].x, currentSquare[t].y, true, 1, true);
- if lumber(currentSquare[t].tile, currentSquare[t].x, currentSquare[t].y, 0) then
- begin
- if findPassable(p, 40) then doEscape(p);
- t := 0;
- currentSquare := returnTreesArray(getX(self) - 9, getY(self) - 9, getX(self) + 9, getY(self) + 12);
- continue;
- end;
- wait(randomRange(1,3)*1000);
- if checkWeight then
- begin
- t := 0;
- currentSquare := returnTreesArray(getX(self) - 9, getY(self) - 9, getX(self) + 9, getY(self) + 12);
- continue;
- end;
- Inc(t);
- end;
- RecallToForest();
- if findPassable(p, 30) then doEscape(p);
- end;
- end.
Add Comment
Please, Sign In to add comment