Ах да, руны же три. Вот переделал под 3 раздельных файла. Смотри, сначала по первой руне собираешь координаты и сохраняешь файл, его имя будет trees.dat, убираешь его из папки отдельно чтобы не перезаписался. Летишь по второй руне и собираешь там координаты, новый файл trees.dat переименовываешь в trees1.dat С третьей руной то же самое, только файл назовешь trees2.dat Скидываешь их все назад в папку, куда они записываются, меняешь в скрипте read на 1 и вперед. Укажешь в Lumberjacking, в значение guardian - type гварда.
Останавливается возможно из за сообщений неправильных, поруби деревья скопируй возможные сообщения из журнала _showjournal 50, там важен регистр и правильное написание так что лучше копировать, у меня рубил хорошо.
В целом скрипт будет работать так: запускает выгрузку и добор регов, летит в лес и рубит.
Code:
sub Lumberjacking()
; Read 0/1 - Вкл/Выкл сбор координат в файл. Distance - расстояние в тайлах, на которое нужно подойти к дереву. Weight - максимальный вес, при достижении которого рекол в дом. Hatchet - type топора. Msg - список всех возможных сообщений при рубке дерева. Endmsg - список сообщений при которых переходим к новому дереву.
var read = 1, distance = 3, weight = 650, hatchet = "0x0F43", guardian = "Type гварда", msg = "You hack|no logs|far away|log in your|logs in your", endmsg = "no logs|far away", starttime, endtime, flag, number, treecount = 0, clicks, TopX = 324, TopY = 65, i = 0, j = 0, k = 0, r = 0, q = 0, ii, jj, f
dim TreeX[5000], TreeY[5000], TreeT[5000]
dim TreeTile[29]
TreeTile[0]=3277
TreeTile[1]=3280
TreeTile[2]=3283
TreeTile[3]=3286
TreeTile[4]=3289
TreeTile[5]=3291
TreeTile[6]=3294
TreeTile[7]=3296
TreeTile[8]=3299
TreeTile[9]=3302
TreeTile[10]=3393
TreeTile[11]=3394
TreeTile[12]=3395
TreeTile[13]=3396
TreeTile[14]=3415
TreeTile[15]=3416
TreeTile[16]=3417
TreeTile[17]=3418
TreeTile[18]=3419
TreeTile[19]=3438
TreeTile[20]=3439
TreeTile[21]=3440
TreeTile[22]=3441
TreeTile[23]=3442
TreeTile[24]=3460
TreeTile[25]=3461
TreeTile[26]=3462
TreeTile[27]=3290
TreeTile[28]=3288
dim RuneID[3]
RuneID[0] = "ID руны"
RuneID[1] = "ID руны"
RuneID[2] = "ID руны"
uo.deletejournal()
if read == 0 then
uo.print("Собираем координаты из клиента...")
repeat
clicks = 0
flag = 0
uo.usetype("0x0E21")
wait(500)
while uo.targeting()
wait(100)
wend
flag = 0
for k = 0 to 28
if uo.lasttile(0) == TreeTile[k] then
flag = 1
end if
next
if uo.lasttile(1) == uo.getx() and uo.lasttile(2) == uo.gety() then
flag = 2
end if
if flag == 1 then
treecount = treecount + 1
TreeX[treecount] = uo.lasttile(1)
TreeY[treecount] = uo.lasttile(2)
TreeT[treecount] = uo.lasttile(0)
uo.print("Найдено дерево "+str(treecount)+" : X = "+str(uo.Lasttile(1))+" Y = "+str(uo.LastTile(2))+" "+str(treecount))
end if
until (flag == 2) or (treecount == 5000)
SaveToFile(treecount, TreeX, TreeY, TreeT)
uo.print("Координаты деревьев сохранены!")
uo.print("Деревьев найдено: " + str(treecount))
return
end if
for number = 0 to 2
uo.ignorereset()
if number == 0 then
f = file("C:\trees.dat")
else
if number == 1 then
f = file("C:\trees1.dat")
else
f = file("C:\trees2.dat")
end if
end if
uo.print("Загружаем координаты из файла...")
f.open()
treecount = safe call f.ReadNumber()
for i = 1 to treecount
TreeT[i] = safe call f.ReadNumber()
TreeX[i] = safe call f.ReadNumber()
TreeY[i] = safe call f.ReadNumber()
uo.print("Next")
next
f.close()
TakePut()
RecallToWood(RuneID[number])
repeat
for i = 1 to treecount
uo.pmove(TreeX[i], TreeY[i], distance)
repeat
uo.deletejournal(msg)
if uo.findtype(guardian, -1, "ground", 18) then
uo.usetype("0x0F08")
wait("500")
uo.ignore("finditem")
end if
uo.waittargettile(TreeT[i], TreeX[i], TreeY[i], uo.GetZ())
uo.usetype(hatchet)
starttime = now()
endtime = now() + 6000
repeat
Save()
wait(100)
until uo.injournalbetweentimes(msg, starttime, endtime) or uo.dead()
until uo.injournal(endmsg) or uo.weight >= weight or uo.dead()
if uo.weight >= weight then
RecallToHome()
end if
next
until i == treecount or uo.dead()
if not uo.dead() then
RecallToHome()
else
uo.print("You Dead!")
uo.exec("Terminate all")
end if
next
uo.print("Облетел все руны!")
end sub
sub SaveToFile(treecount, TreeX, TreeY, TreeT)
var f=file("C:\trees.dat")
var s = 0, i = 0
f.open()
f.create()
s=safe call f.writeln(treecount)
for i = 1 to treecount
s=safe call f.writeln(str(TreeT[i])+" "+str(TreeX[i])+" "+str(TreeY[i]))
next
f.close()
end sub
sub RecallToHome()
var runeid = "id руны в дом", x = 000, y = 000, starttime, endtime, msg = "spell fizzles|anti-magic field disturbs|lack reagents", endmsg = "anti-magic field disturbs|lack reagents"
uo.deletejournal()
if uo.getglobal("Recall") == "Off" then
uo.setglobal("Recall", "On")
repeat
uo.deletejournal(msg)
uo.waittargetobject(runeid)
uo.cast("Recall")
starttime = now() + 500
endtime = now() + 2700
repeat
Save()
wait(100)
until (uo.getx() == x and uo.gety() == y) or uo.injournalbetweentimes(msg, starttime, endtime) or uo.dead()
until (uo.getx() == x and uo.gety() == y) or uo.injournal(endmsg) or uo.dead()
uo.setglobal("Recall", "Off")
end if
end sub
sub RecallToWood(runeid)
var starttime, endtime, msg = "spell fizzles|anti-magic field disturbs|lack reagents", endmsg = "anti-magic field disturbs|lack reagents"
uo.deletejournal()
if uo.getglobal("Recall") == "Off" then
uo.setglobal("Recall", "On")
repeat
uo.deletejournal(msg)
uo.waittargetobject(runeid)
uo.cast("Recall")
starttime = now() + 500
endtime = now() + 2700
repeat
Save()
wait(100)
until (uo.getx() == 000 and uo.gety() == 000) or (uo.getx() == 000 and uo.gety() == 000) or (uo.getx() == 000 and uo.gety() == 000) or uo.injournalbetweentimes(msg, starttime, endtime) or uo.dead()
until (uo.getx() == 000 and uo.gety() == 000) or (uo.getx() == 000 and uo.gety() == 000) or (uo.getx() == 000 and uo.gety() == 000) or uo.injournal(endmsg) or uo.dead()
uo.setglobal("Recall", "Off")
end if
end sub
sub TakePut()
var box = "0x4006FCA1", logs = "0x1BDD", i, r, s, info, food, quantity
dim Reg[5]
Reg[0] = "0x0F7A 10 Black Pearl"
Reg[1] = "0x0F7B 10 Blood Moss"
Reg[2] = "0x0F86 10 Mandrake Roots"
Reg[3] = "0x0F08 1 Invisibility potion"
Reg[4] = "0x09D0 5 Food"
uo.opencontainer(box, 500)
while uo.findtype(logs, -1, "my")
uo.moveitem("finditem", 0, box)
wait(2000)
wend
for i = 0 to 4
r = getword(Reg[i], 1)
s = val(getword(Reg[i], 2))
if not uo.findtype(r, -1, "my") then
if not uo.findtype(r, -1, box) then
info = getword(Reg[i], 3)
uo.print("Закончились " + info)
else
Save()
uo.moveitem("finditem", s, "backpack")
wait(2000)
end if
else
if uo.getquantity("finditem") < s then
quantity = s - uo.getquantity("finditem")
if not uo.findtype(r, -1, box) then
info = getword(Reg[i], 3)
uo.print("Закончились " + info)
else
Save()
uo.moveitem("finditem", quantity, "backpack")
wait(2000)
end if
end if
end if
next
for food = 1 to 5
uo.usetype("0x09D0")
wait(500)
next
uo.print("Собрал!")
end sub
sub Save()
if uo.injournal("World save has been initiated") then
uo.deletejournal("backpack|World save has been initiated")
uo.click("backpack")
while not uo.injournal("backpack")
wait(100)
wend
end if
end sub