-----------------------Введение.
Скрипт написан для RunUO в сентябре 2003г.Ходилка в скрипте использована от Йоко(Спасибо!)
Реколы использует паладинские(Sacred Journey).Соответственно скил чивалри(Chivalry) должен
быть достаточен для этого и в книге(Book of Chivalry) должны быть деньги(Tithing points)
Чар начинает работу у своего дома,где берет из сундука кирки,потом реколится в шахту
и начинает копать в первой точке согласно файлу пути.Если все выкопал-идет в точку 2 ит.д.
Если превышен вес реколится к дому,плавит руду,инги складывает в сундук.Если кирок меньше 2
берет кирки.При создании файла пути следует располагать точки по прямой
(без препятствий между ними).Скрипт закончит работу если чар умрет:) или если закончатся кирки
в сундуке.
------------------------Настройка скрипта
-Требуется ввести значения 3 переменных
-Создать файл точек в которых будет копать чар
Но все не так уж и страшно:)
1.В бекпек чару кладем Runebuk. Набираем в УО ,info далее таргетом на Runebuk
получаем в текстовом окне нечто вида:
Code: ID=0x4001435E Type=0x22C5 CWBWJMD Name= Quantity: 1 Colour: 0x084B Layer: 0 Has: 1 X=66 Y=66 Z=0 C=0x400A2007 F=0x00
Нам нужен ID. Это значение вставляем в скрипт в переменную MyRunebuk
Code: var MyRunebuk='0x4001435E'
2,3.Рядом с домом(платформой) марчим руну.Таким образом чтобы с этого места чар мог достать Forge и сундук в который будет выкладывать инги.Эту руну кладем первой(!!!!! это важно) в Runebuk. С помощью ,info узнаем ID Forge и сундука.Соответственно изменяем значения
Code: Var Forg='0x4000898C' Var Box='0x40013750'
Приступаем к созданию файла пути. Зайдите в шахту в которой собираетесь копать.Станете вы на входе в шахту или посередине ее особого значения не имеет. Далее марчим руну в этом месте.Эту руну кладем второй(!!!!! это важно) в Runebuk.Набираем в УО ,infotile далее таргетом на пол шахты, делаем по прямой 4-5 шагов -снова ,infotile таргет на пол шахты и т. д. Так насобирали допустим 6 точек.Открываем текстовое окно Инжекта.Там видим например:
Code: 1343 1198 1417 -95 1340 1183 1425 -95
1351 1179 1424 -95
1340 1173 1414 -95
1340 1171 1427 -95
В блокноте создаем файл например с именем Mine1.txt далее копируем туда наши точки, удаляем пустые строки и сохраняем файл Mine1.txt Вот как он выглядит.
Code: 1343 1198 1417 -95 1340 1183 1425 -95 1351 1179 1424 -95 1340 1173 1414 -95 1340 1171 1427 -95
Внимание!Для коректного опознания Инжектом конца файла нужно чтобы курсор находился в первой позиции последней строки.(хм чтобы стрелками на клавиатуре его можно было туда опусить... может быть так понятнее?:))
Первая строка скрипта-путь к этому файлу.
Code: Var FileName='E:\GAMES\Injection\Mine1.txt'
Измените на свой.
Вот собственно и все!Совсем не сложно!Правда?:) ---------------------Возможные проблемы -Чар реколится к сундуку,берет кирки,реколится в шахту и появляется ошибка Инжекта Unhandled exeception in parser Возможные причины- неправильно указан путь к файлу точек копания.Либо неправильное имя самого файла.Проверьте не имеет ли файл имя например Mine1.txt.txt )
Удачи!!!
Code: ;***********************************************************************************
Var FileName='E:\GAMES\Injection\Mine1.txt'
Var ore = '0x19B9' Var MaxWeight Var Pickaxe= '0x0E86' Var MoveDelay=1000 # Промежуток между шагами Var MoveNumber=1 # Количество шагов при смене дислокации Var Ep=0.172 # Значение ширины угла хождения при определении направления. #Если на пути встречаются сложные и широкие препятствия - увеличить. #0.172 - сбалансированный. var XN = 1117 var YN = 1462 var Stoplocation
Var RecToForg = '7' Var RecToMine = '13' Var Forg='0x4000898C' Var Box='0x40013750' var MyRunebuk='0x4001435E'
MaxWeight= ((uo.STR*3.5)+39) if MaxWeight >= 410 then MaxWeight=410 endif
;--------------------------------------- Sub Main() uo.set('norbcalc','1') uo.set('norbcheck','1') uo.set('injectecho','1')
if uo.count(Pickaxe) < 1 then Recaling(RecToForg) GrAxe() end if Mine() EndSub ;--------------------------------------- Sub Mine() Var Tl,T,X,Y,Z Var F var Tim var Jurn Dim Сli[9] Сli[0]="cliloc# 0xA867" ;You can't mine... Сli[1]="cliloc# 0xAD03" ;You loosen Сli[2]="cliloc# 0xAD00" ;there no metal Сli[3]="cliloc# 0x6B31" ;backpack full Сli[4]="cliloc# 0xEE46" ;worn out tool! Сli[5]="cliloc# 0x5DE1" ;dull cuper Сli[6]="cliloc# 0x5DE6" ;agapit Сli[7]="cliloc# 0xA2DE" ;is too far away Сli[8]="cliloc# 0xACF9" ;where do you wish to dig Сli[9]="cliloc# 0xA866" ;You can't mine... ;---------------------------- Begin: Recaling(RecToMine)
Stoplocation = 0 F=File(FileName) F.Open() Beg: Tl=safecall F.Readln() Tl=Trim(Tl) If Tl=='File read error' Then GoTo Ext EndIf T=GetNumb(Tl,0) X=GetNumb(Tl,1) Y=GetNumb(Tl,2) Z=GetNumb(Tl,3)
UO.Print('GoTo hext point') gotoxy(X,Y,1) if Stoplocation == 1 then Recaling(RecToForg) SmOre() GrOre() GrAxe() GoTo Ext EndIf
REPEAT uo.deletejournal() UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z)) UO.usetype(Pickaxe) wait(200) Tim = UO.Timer() REPEAT wait(150) Jurn=UO.Journal(0) UNTIL ((UO.Timer()-Tim) > 40 or (not UO.Weight < MaxWeight) or Jurn[10] == "5" or Jurn == Сli[1] or Jurn == Сli[2] or Jurn == Сli[3] or Jurn == Сli[4] or Jurn == Сli[0] or Jurn == Сli[9] or UO.GetHP()==0)
UNTIL Jurn == Сli[3] or (not UO.Weight < MaxWeight) or Jurn == Сli[2] or uo.count(Pickaxe)==0 or Jurn == Сli[7] or Jurn == Сli[0] or Jurn == Сli[9] If Jurn == Сli[2] or Jurn == Сli[0] or Jurn == Сli[7] or Jurn == Сli[9] then UO.Print('there no metal !!!') GoTo Beg EndIf If Jurn == Сli[3] or (not UO.Weight < MaxWeight) or uo.count(Pickaxe)==0 then UO.Print('backpack full!!!') Recaling(RecToForg) SmOre() GrOre() GrAxe() EndIf Ext: F.Close() UO.Print('S T O P!!!') GoTo Begin EndSub
Sub GetNumb(C,I) var J,T,K J=0 K=1 While K>0 J=J+1 If (Mid(C,J,1)==' ') Or (J>=Len(C)-1) Then If I==0 Then T=Val(Left(C,J)) Else T=GetNumb(Right(C,Len(C)-J-1),I-1) EndIf K=0 EndIf wend UO.Print(T) return T endsub ;--------------------------------------------- sub SmOre() var Сli="cliloc# 0xA2DE" ;is too far away uo.deletejournal() repeat uo.findtype(ore) uo.waittargetobject(Forg) uo.useobject("finditem") wait(900) If uo.InJournal(Сli) > 0 then Recaling(RecToForg) EndIf until not uo.count(ore) end sub ;--------------------------------------------- sub GrOre() repeat uo.findtype('0x1BF2') #ingots uo.moveitem('finditem','0',Box) wait(700) until not uo.count('0x1BF2') end sub ;--------------------------------------------- sub GrAxe() var Mes='Contains' var Tim uo.deletejournal()
if uo.count(Pickaxe) < 2 then uo.useobject(Box) Tim = UO.Timer() repeat Wait(100) until uo.InJournal(Mes) or (UO.Timer()-Tim) > 30 Wait(200) uo.findtype(Pickaxe,'-1',Box) Wait(200) if uo.findCount()>2 then repeat uo.findtype(Pickaxe,'-1',Box) UO.grab('1','finditem') Wait(1200) until uo.count(Pickaxe)==2 else UO.print("--NET KIROK!!!!----") UO.Exec('terminate all') end if end if end sub
;************************************************************************** Sub Recaling(Num) var myx, myy,Tim var Cli="cliloc# 0xA8B6" var Cli2="cliloc# 0xAA57" var recOk = false
if uo.Waiting() then uo.canceltarget() wait(200) end if
wait(800) myx=uo.getx() myy=uo.gety() uo.deletejournal() REPEAT uo.recall(MyRunebuk,Num) Tim = UO.Timer() repeat wait(100) until (UO.Timer()-Tim) > 50 or myx<>uo.getx() or myy<>uo.gety() or uo.InJournal(Cli) If myx<>uo.getx() or myy<>uo.gety() or uo.InJournal(Cli) Then recOk = True else if uo.InJournal(Cli2) then uo.findtype(ore) uo.moveitem('finditem','1','ground') wait(500) end if EndIf UNTIL recOk End Sub
;--------------------------------- sub gotoxy(x,y,prec) var ld=0,ldc=0 var dx,dy var mx,my var ox,oy,mk,k #uo.print(">") #uo.track("1",str(x),str(y)) start: mx=UO.GetX() my=UO.GetY() dx=mx-x if dx<0 then dx=0-dx endif dy=my-y if dy<0 then dy=0-dy endif if dy>dx then dx=dy end if if dx<=prec then return end if if not ldc then ;uo.print(STR(dx)) end if if dx<3 then mk=70 else mk=15 end if
ox=mx oy=my for k=1 to mk mx=UO.GetX() my=UO.GetY() if mx<>ox or my<>oy then goto sdidapl end if wait(10) next sdidapl:
mx=UO.GetX() my=UO.GetY() dx=mx-x if dx<0 then dx=0-dx endif dy=my-y if dy<0 then dy=0-dy endif if dy>dx then dx=dy end if
if dx<=prec then return end if if ld==dx then ldc=ldc+1 if ldc>100 then uo.print("Can not reach location!") Stoplocation = 1 return end if else ld=dx end if
if mx==x then if my==y then return endif if my>y then #UO.Print("UR") UO.Press(33) goto start endif #UO.Print("DL") UO.Press(35) goto start end if if mx<x then if my>y then #UO.Print("R") UO.Press(39) goto start endif if my==y then #UO.Print("DR") UO.Press(34) goto start endif #UO.Print("D") UO.Press(40) goto start end if if my<y then #UO.Print("L") UO.Press(37) goto start endif if my==y then #UO.Print("LU") UO.Press(36) goto start endif #UO.Print("U") UO.Press(38) goto start end sub
|