Lumberjacking [stelth client 7.9.2] |
Lumberjacking [stelth client 7.9.2] |
10 марта 2017 19:35
Сообщение #1
|
|
Скрипт для тестов. Я не предоставляю помощь по настройке и если у вас что-то не работает, то я искренне соболезную. Алгоритм: - Запуск на месте где рубим. - При достижении 150 log's летит в банк (проверка не по весу). - Проверяет топоры в банке (Не крафтит! Если закончились, то выход из скрипта) - Проверяет и берет реги из банка - Проверяет заряды руны (если менее 5ти, то маркирует). - Летит обратно на место рубки - Срубив все деревья летит к банку и стоит 30 минут (восстановление усталости) И по кругу. Настройка: TileTXT = 'Scripts\Lumber_Tiles_BestUO.txt'; BankRune = $40F3FB9D; OstrovRune = $40F16ECF; Bank = $40BEA94B; TileTXT - Файл с деревьями (да, снимаем руками командой ,infotile) ID рун к банку и к месту рубки деревьев ID банка Как заполнить деревья? Подходим к дереву. Вводим ,infotile и наводим на дерево. Делаем так на все деревья которые хотим рубить Копируем все тайлы деревьев и сохраняем через блокнот (обратите внимание, что файл у меня в папке Scripts, и имеет название Lumber_Tiles_BestUO.txt) Внешний вид файлы Lumber_Tiles_BestUO.txt Tile: 3394 X: 2309 Y: 3506 Z: 0 Tile: 3395 X: 2310 Y: 3505 Z: 0 Tile: 3394 X: 2309 Y: 3501 Z: 0 Tile: 3395 X: 2310 Y: 3500 Z: 0 Tile: 3461 X: 2310 Y: 3495 Z: 0 Tile: 3394 X: 2309 Y: 3491 Z: 0 Tile: 3395 X: 2310 Y: 3490 Z: 0 Tile: 3440 X: 2310 Y: 3485 Z: 0 Tile: 3394 X: 2315 Y: 3491 Z: 0 Tile: 3395 X: 2316 Y: 3490 Z: 0 Tile: 3417 X: 2316 Y: 3500 Z: 0 Tile: 3440 X: 2322 Y: 3510 Z: 0 Tile: 3440 X: 2322 Y: 3505 Z: 0 Tile: 3417 X: 2322 Y: 3490 Z: 0 Tile: 3440 X: 2322 Y: 3485 Z: 0 Tile: 3440 X: 2322 Y: 3480 Z: 0 Сам скрипт: Program Lumber_BestUO; uses SysUtils; const TileTXT = 'Scripts\Lumber_Tiles_BestUO.txt'; BankRune = $40F3FB9D; OstrovRune = $40F16ECF; Bank = $40BEA94B; AxeType = $0F43; Log = $1BDD; var Tiles : TStringList; i,ii : integer; TilesStr : string; TileNum,TileX,TileY,TileZ : array of integer; cTime,cTime2 : TDateTime; mPathArr : TPathArray; NeedToDrop : Boolean; procedure recall(rune:cardinal); var MyX,MyY,Waiti : integer; begin MyX := GetX(Self); MyY := GetY(Self); While (getX(Self)=MyX) and (GetY(Self)=MyY) do begin If TargetPresent Then CancelTarget; Cast('Recall'); WaitForTarget(5000); TargetToObject(rune); Waiti := 0; While (getX(Self)=MyX) and (GetY(Self)=MyY) and (Waiti < 20) Do begin Wait(500); Waiti := Waiti + 1; end; Wait(650); CheckLag(10000); end; end; procedure checkrune(check_rune_id:cardinal); var CheckRunecTime : TDateTime; RuneString,OldName : String; Zariadi : integer; begin CheckRunecTime := Now; ClickOnObject(check_rune_id); WaitJournalLine(CheckRunecTime,'(',10000); If InJournalBetweenTimes('(',CheckRunecTime,Now)<>-1 then begin RuneString := Journal(InJournalBetweenTimes('(',CheckRunecTime,Now)); OldName := RuneString; Delete(OldName,Ansipos('(',RuneString)-1,99); Delete(OldName,1,Ansipos(':',RuneString)+1); Delete(RuneString,1,Ansipos('(',RuneString)); Delete(RuneString,Ansipos(')',RuneString),1); AddToSystemJournal('Зарядов осталось: '+OldName+': '+RuneString); Zariadi := StrToInt(RuneString); If Zariadi < 5 Then begin AddToSystemJournal('Мало зарядов.'); If TargetPresent Then CancelTarget; Cast('Mark'); WaitFortarget(5000); TargetToObject(check_rune_id); CheckLag(10000); Wait(10000); end; end; end; procedure CheckReags; var reags : array of integer; ireags : integer; reagtype : string; begin reags := [$0F7A,$0F7B,$0F86]; For ireags:=0 To length(reags)-1 do begin FindType(reags[ireags],backpack); if FindQuantity<10 then begin FindType(reags[ireags],bank); Case reags[ireags] of $0F7A : reagtype := 'Black Perl'; $0F7B : reagtype := 'Blood Moss'; $0F86 : reagtype := 'Mandrake Root'; end; AddToSystemJournal(reagtype+' в банке: '+IntToStr(FindQuantity)); Grab(FindItem,10); Wait(650); CheckLag(10000); end; end; end; function CheckAxe : Boolean; begin Result := True; If FindType(AxeType,BackPack)=0 Then begin AddToSystemJournal('Нужен топор.'); FindType(AxeType,Bank); If FindCount=0 Then begin AddToSystemJournal('В банке нет топоров!'); Result := False; end else begin Grab(FindItem,1); Wait(650); CheckLag(10000); AddToSystemJournal('В банке осталось: '+IntToStr(FindCount)+' топоров.'); end; end; end; procedure CheckMana; begin If WarMode Then SetWarMode(False); If Mana < 50 Then begin While Mana <> MaxMana do begin UseSkill('Meditation'); Wait(1000); end; end; end; procedure ImDead(DeadStatus:Boolean); var Deada : Integer; begin If DeadStatus Then begin AddToSystemJournal('Я умер. Летим домой.'); Deada := GetGumpsCount; NumGumpButton(GetGumpsCount-1,1); while Deada = GetGumpsCount do Wait(50); NumGumpButton(GetGumpsCount-1,2); While 1=1 Do Wait(1000); end; end; procedure LoadTiles; begin Tiles := TStringList.Create; Tiles.LoadFromFile(TileTXT); SetLength(TileNum,Tiles.Count); SetLength(TileX,Tiles.Count); SetLength(TileY,Tiles.Count); SetLength(TileZ,Tiles.Count); For i:=0 To Tiles.Count-1 Do begin TilesStr := Tiles[i]; While AnsiPos(' ',TilesStr)<>0 Do Delete(TilesStr,AnsiPos(' ',TilesStr),1); // удалить все пробелы Delete(TilesStr,1,5); // удалить tile: TileNum[i] := StrToInt(Copy(TilesStr,1,AnsiPos('X',TilesStr)-1)); Delete(TilesStr,1,AnsiPos(':',TilesStr)); TileX[i] := StrToInt(Copy(TilesStr,1,AnsiPos('Y',TilesStr)-1)); Delete(TilesStr,1,AnsiPos(':',TilesStr)); TileY[i] := StrToInt(Copy(TilesStr,1,AnsiPos('Z',TilesStr)-1)); Delete(TilesStr,1,AnsiPos(':',TilesStr)); TileZ[i] := StrToInt(TilesStr); end; AddToSystemJournal('Деревья загружены. Всего деревьев: '+IntToStr(Length(TileNum))+' шт.'); Tiles.Clear; Tiles.Free; end; procedure Lumber(tTile,tX,tY,tZ:integer); begin cTime := Now; While InJournalBetweenTimes('in the city|appears immune|nothing here|far away',cTime,Now)=-1 Do begin cTime2 := Now; If TargetPresent Then CancelTarget; if (GetType(ObjAtLayer(LhandLayer)) <> AxeType) then begin UseObject(FindType(AxeType, Backpack)); end; if (GetType(ObjAtLayer(LhandLayer)) = AxeType) then begin UseObject(ObjAtLayer(lhandLayer)); end; WaitForTarget(5000); TargetToTile(tTile,tX,tY,tZ); WaitJournalLine(cTime2,'in the city|hack at|appears immune|put the|nothing here|far away|not to chop',25000); Wait(350); end; end; procedure CheckWeight; begin FindType(Log,BackPack); If (FindFullQuantity > 150) or (NeedToDrop = True) Then begin recall(bankrune); If NeedToDrop Then begin Wait(60000*30); NeedToDrop := False; end; checkrune(bankrune); CheckLag(10000); UoSay('bank'); Wait(650); CheckLag(10000); While FindType(Log,BackPack)>0 Do begin MoveItem(FindItem,-1,Bank,0,0,0); Wait(650); CheckLag(10000); end; FindTypeEx(Log,$0000,bank,False); AddToSystemJournal('Простых логов в банке: '+IntToStr(FindFullQuantity)); CheckReags; If CheckAxe = False Then Exit; CheckMana; recall(OstrovRune); checkrune(OstrovRune); AddToSystemJournal('------------------'); end; end; begin SetARStatus(True); SetEventProc(evDeath,'ImDead'); LoadTiles; NeedToDrop := False; While 1 = 1 Do begin For ii:=0 To Length(TileNum)-1 Do begin If GetPathArray(TileX[ii],TileY[ii],True,1,mPathArr)<0 Then begin AddToSystemJournal('Не вижу деревья.'); Exit; end; NewMoveXY(TileX[ii],TileY[ii],True,1,True); Lumber(TileNum[ii],TileX[ii],TileY[ii],TileZ[ii]); CheckWeight; end; NeedToDrop := True; AddToSystemJournal('Рубку закончил. 30 минут отдых'); CheckWeight; end; end. |
|
|
|
Сейчас: 24 ноября 2024 01:03 |