Yoko
http://forum.yoko.com.ua/

Скрипт на Lumberjacking
http://forum.yoko.com.ua/viewtopic.php?f=17&t=17663
Page 2 of 4

Author:  Incorrect User [ 2015-11-16 08:39:07 ]
Post subject:  Re: Помогите со скриптом на лумбер

У тебя ошибка, удали end if тут
Code:
end if
            Hide()

1. Что значит "находили"? Появился человек, или монстр, или из хайда вышел или...?
2. Добавь в условия строку
Code:
var infinity = 1 ; 0/1 Проходить по рунам один круг / Бесконечно 

Добавь строку repeat перед строками
Code:
   for number = 0 to 2
      uo.ignorereset()

Добавь строку until infinity == 0 перед строками
Code:
uo.print("Chop's done!")
end sub

Лишние end if вставлять не обязательно :roll:

Author:  Incorrect User [ 2015-11-16 12:08:52 ]
Post subject:  Re: Помогите со скриптом на лумбер

Да, и когда будет перевес, нужно будет выйти из цикла. Для этого добавь в условия
Code:
var skip

Добавь строку skip = 0 перед строками
Code:
      repeat
         for i = 1 to treecount
            uo.pmove(TreeX[i], TreeY[i], distance)

И замени часть
Code:
         if uo.weight >= weight then
            RecallToHome()
         end if
      next
   until i == treecount or uo.dead()

На
Code:
               if uo.weight >= weight then
                  skip = 1
                  break
               end if
            next
         until i == treecount or skip == 1 or uo.dead()

Author:  Hydromarine [ 2016-05-15 10:07:18 ]
Post subject:  Re: Скрипт на Lumberjacking

Подскажите на какой версии этот скрипт нормально работает?
У меня на последней, после маркировки деревьев бинтами, когда я последний бинт накладываю на себя вылетает ошибка "Unhandled exception in parser"

Author:  Incorrect User [ 2016-05-15 12:14:07 ]
Post subject:  Re: Скрипт на Lumberjacking

На последней, у всех работает. Возможно у тебя не может создать текстовый файл, из за закрытого доступа или несуществующих директорий, вот и все. Проверяй адреса и файлы по ним

file("C:\Users\Edgard\Desktop\Injection_uo\trees.dat")
else
if number == 1 then
f = file("C:\Users\Edgard\Desktop\Injection_uo\trees1.dat")
else
f = file("C:\Users\Edgard\Desktop\Injection_uo\trees2.dat")

Их все и другие в скрипте, нужно заменить на свои.

Author:  Hydromarine [ 2016-05-15 15:59:43 ]
Post subject:  Re: Скрипт на Lumberjacking

Incorrect User wrote:
На последней, у всех работает. Возможно у тебя не может создать текстовый файл, из за закрытого доступа или несуществующих директорий, вот и все. Проверяй адреса и файлы по ним

file("C:\Users\Edgard\Desktop\Injection_uo\trees.dat")
else
if number == 1 then
f = file("C:\Users\Edgard\Desktop\Injection_uo\trees1.dat")
else
f = file("C:\Users\Edgard\Desktop\Injection_uo\trees2.dat")

Их все и другие в скрипте, нужно заменить на свои.


Он у меня как то странно работает.
В сундуке инвизки руны и реги, он пытается добрать оттуда провизию, в итоге находит первую руну, реколится по ней на место и стоит ничего не делат.
Такое чувство, что ему не хватает каких то координат. Куда копать? Играю на оском фри.

Author:  Incorrect User [ 2016-05-16 08:12:44 ]
Post subject:  Re: Скрипт на Lumberjacking

Я так понимаю что ошибка "Unhandled exception in parser" ушла. Новые темы штамповать не обязательно. Смотри чтобы в строке ввода текста в клиенте всегда было пусто, иначе он не может ходить. Для начала замени все сообщения из
Code:
var msg = "Подолбив дерево|“ут не осталось пригодной древесины|Ёто слишком далеко отсюда|You put the logs|You see|Your skill|You have|What do you want to use this on?"
   var endmsg = "Тут не осталось пригодной древесины|Ёто слишком далеко отсюда|You can't reach this"

на сообщения вашего сервера и пробуй, причём сообщения лучше копировать из журнала _showjournal 50 Инжект чувствителен к регистру, так что от руки лучше не писать, чтобы не наделать ошибок.

Author:  Hydromarine [ 2016-05-16 08:47:57 ]
Post subject:  Re: Скрипт на Lumberjacking

Да, ошибку парсера победил, не хватало видимо галки в мэйн.
Месаджи с сервера все заменил копипастом из журнала, но результата это не дает.
Чар стоит у сундука, смотрит что там есть, добирает реги, находит руну, летит по ней в лес, подходит к дереву на дистанцию 2, но рубить не начинает, а слева бегут просто строки "What do you want to use this on?"

Author:  Incorrect User [ 2016-05-16 09:20:03 ]
Post subject:  Re: Скрипт на Lumberjacking

Скриншот журнала покажи, журнал клиента, разверни полностью в этот момент. И часть скрипта с сообщениями что ты переписал, сюда скопируй.

Author:  Hydromarine [ 2016-05-16 10:01:14 ]
Post subject:  Re: Скрипт на Lumberjacking

Code:
var msg = "What do you want to use this on?|You put the logs in your pack.|You hack the tree for a while, but fail to produce any useable wood."
   var endmsg = "Тут не осталось пригодной древесины. Нечего рубить.|Вы вне прямого доступа к этому месту.", starttime, endtime, flag, number, treecount = 0, clicks, TopX = 324, TopY = 65, i = 0, j = 0, k = 0, r = 0, q = 0, ii, jj, f

Image
Image

Author:  Incorrect User [ 2016-05-16 10:04:00 ]
Post subject:  Re: Скрипт на Lumberjacking

А, ну понятно. В msg должны быть вообще все сообщения после рубки. Парень которому делал намутил там что-то свое, я переделал нормально, сейчас дам целую версию. Пока на вкладке main сними все галки и проставишь обязательно: Undead, Light, Premit Vars Loopback, Clear memory, Autostart, Track World Items.

Author:  Incorrect User [ 2016-05-16 10:09:48 ]
Post subject:  Re: Скрипт на Lumberjacking

А топор тыкал без остановки потому что ты сообщение о его использовании вписал, что совершенно ни к чему. Ставишь галки на вкладке Main как я сказал, копируешь заново весь скрипт что ниже, заполняешь в каждой функции свои данные, которые неверны или неуказаны(id сундуков, координаты рун, сообщения хайда и тд) и перезапускаешь клиент и вперед. Возможно потом появятся еще какие либо сообщения, нужно будет просто их добавить. Вот как должно было выглядеть все
Code:
sub Autostart()
   uo.setglobal("Recall", "Off")
end sub

sub Lumberjacking()
   var read = 0 ; 0/1 - Выкл/Вкл сбор координат
   var infinity = 1 ; 0/1 Проходить по рунам Один круг / Бесконечно
   var distance = 3 ; Расстояние в тайлах, на которое нужно подойти к дереву
   var weight = 650 ; максимальный вес, при достижении которого реколимся домой
   var hatchet = "0x0F47" ; тип топора
   var msg = "log in your pack|logs in your pack|You hack the tree|Тут не осталось пригодной древесины|Вы вне прямого доступа к этому месту" ; все возможные сообщения после попытки рубки дерева
   var endmsg = "Тут не осталось пригодной древесины|Вы вне прямого доступа к этому месту" ; сообщения после рубки, при появлении которых переходим к другому дереву
   var skip, starttime, endtime, flag, number, treecount = 0, clicks, i, k, 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] = "0x41D24385"   ; руна в лес1
   RuneID[1] = "0x41D24387"   ; руна в лес2
   RuneID[2] = "0x41D24389"   ; руна в лес3
   if read == 1 then
      uo.print("Collecting coordinates...")
      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("tree found"+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("Coordinates collected!")
      uo.print("Trees found: " + str(treecount))
      return
   end if
   repeat
      for number = 0 to 2
         uo.ignorereset()
         if number == 0 then
            f = file("C:\Users\Desktop\Injection_uo\trees.dat")
         else
            if number == 1 then
               f = file("C:\Users\Desktop\Injection_uo\trees1.dat")
            else
               f = file("C:\Users\Desktop\Injection_uo\trees2.dat")
            end if
         end if
         uo.print("Loading from file...")
         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()
         next
         f.close()
         TakePut()
         RecallToWood(RuneID[number])
         skip = 0
         repeat
            for i = 1 to treecount
               uo.pmove(TreeX[i], TreeY[i], distance)
               repeat
                  uo.deletejournal(msg)
                  Hide()
                  uo.waittargettile(TreeT[i], TreeX[i], TreeY[i], uo.GetZ())
                  uo.usetype(hatchet)
                  starttime = now()
                  endtime = uo.timer() + 60
                  repeat
                     Save()
                     wait(100)
                  until uo.injournalbetweentimes(msg, starttime, -1) or uo.timer() > endtime or uo.dead()
               until uo.injournal(endmsg) or uo.weight >= weight or uo.dead()
               if uo.weight >= weight then
                  skip = 1
                  break
               end if
            next
         until i == treecount or skip == 1 or uo.dead()
         if not uo.dead() then
            RecallToHome()
         else
            uo.print("You Dead!")
            uo.exec("Terminate all")
         end if
      next
   until infinity == 0
end sub
sub SaveToFile(treecount, TreeX, TreeY, TreeT)
   var f=file("C:\Users\Desktop\Injection_uo\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 руны в дом", starttime, endtime, msg = "spell fizzles|anti-magic field disturbs|lack reagents", endmsg = "anti-magic field disturbs|lack reagents"
   var  x = 000, y = 000 ; Координаты X и Y тайла куда прилетаешь по руне
   uo.deletejournal(msg)
   if uo.getglobal("Recall") == "Off" then
      uo.setglobal("Recall", "On")
      repeat
         uo.deletejournal(msg)
         uo.waittargetobject(runeid)
         uo.cast("Recall")
         starttime = now()
         endtime = uo.timer() + 40
         repeat
            Save()
            wait(100)
         until (uo.getx() == x and uo.gety() == y) or uo.injournalbetweentimes(msg, starttime, -1) or uo.timer() > 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"
   var  x = 000, y = 000 ; Координаты X и Y тайла куда прилетаешь по первой руне
   var  x2 = 000, y2 = 000 ; Координаты X и Y тайла куда прилетаешь по второй руне
   var  x3 = 000, y3 = 000 ; Координаты X и Y тайла куда прилетаешь по третьей руне
   uo.deletejournal(msg)
   if uo.getglobal("Recall") == "Off" then
      uo.setglobal("Recall", "On")
      repeat
         uo.deletejournal(msg)
         uo.waittargetobject(runeid)
         uo.cast("Recall")
         starttime = now()
         endtime = uo.timer() + 40
         repeat
            Save()
            wait(100)
         until (uo.getx() == x and uo.gety() == y) or (uo.getx() == x2 and uo.gety() == y2) or (uo.getx() == x3 and uo.gety() == y3) or uo.injournalbetweentimes(msg, starttime, -1) or uo.timer() > endtime or uo.dead()
      until (uo.getx() == x and uo.gety() == y) or (uo.getx() == x2 and uo.gety() == y2) or (uo.getx() == x3 and uo.gety() == y3) or uo.injournal(endmsg) or uo.dead()
      uo.setglobal("Recall", "Off")
   end if
end sub

sub TakePut()
   var box = "ID сундука с ресурсами", logs = "0x1BDD", i, r, s, info, food, quantity
   dim Reg[4]
   Reg[0] = "0x0F7A 10 Black Pearl"
   Reg[1] = "0x0F7B 10 Blood Moss"
   Reg[2] = "0x0F86 10 Mandrake Roots" 
   Reg[3] = "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 3
      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("not enough" + 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("not enough" + 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
end sub

sub Save()
   var msg = "backpack|World save has been initiated"
   if uo.injournal("World save has been initiated") then
      uo.deletejournal(msg)
      uo.click("backpack")
      repeat
         wait(100)
      until uo.injournal("backpack")
   end if
end sub

sub Hide()
   var msg = "неудалось|is attacking you", waittime
   if not uo.hidden() then
      repeat
         uo.warmode(0)
         uo.deletejournal(msg)
         uo.useskill("Hiding")
         waittime = uo.timer() + 50
         repeat
            wait(100)
         until uo.hidden() or uo.injournal(msg) or uo.timer() > waittime or uo.dead()
      until uo.hidden() or uo.dead()
   end if
end sub

Author:  Hydromarine [ 2016-05-16 10:14:03 ]
Post subject:  Re: Скрипт на Lumberjacking

Низкий Вам поклон! Сейчас буду тестить, по результату отпишусь.

Author:  Incorrect User [ 2016-05-16 10:31:59 ]
Post subject:  Re: Скрипт на Lumberjacking

Code:
 var guardian = "0x0190"

Можно убрать, ошметки от других неизвестных частей.

Author:  Hydromarine [ 2016-05-16 12:17:52 ]
Post subject:  Re: Скрипт на Lumberjacking

Incorrect User wrote:
Code:
 var guardian = "0x0190"

Можно убрать, ошметки от других неизвестных частей.

Странно, но он теперь стоит перед сундуком и в цикле пытается среколиться по руне в лес, но при этом сам себя физлит.

Author:  Incorrect User [ 2016-05-16 13:18:30 ]
Post subject:  Re: Скрипт на Lumberjacking

В старой версии был таймер не рабочий, тут поправил, на рекол давалось 2.7 сек, увеличил до 4.
Замени в реколах домой и в лес строки
Code:
         starttime = now() + 500
         endtime = now() + 27

на
Code:
         starttime = now()
         endtime = uo.timer() + 40

Author:  Hydromarine [ 2016-05-16 13:30:45 ]
Post subject:  Re: Скрипт на Lumberjacking

Заменил, теперь улетает в лес, после чего стоит ничего не делает и надписи "Select rune to recall from" "You can`t see the target". После чего я попробовал перезапустить скрипт прямо в лесу на том тайле куда прилетаю, он подходит к дереву встает в хайд и ничего не рубит.

Author:  Incorrect User [ 2016-05-16 13:32:41 ]
Post subject:  Re: Скрипт на Lumberjacking

Он пытается реколится. Ты координаты руны правильно задал? Когда прилетаешь по руне в лес, пишешь .where и координаты которые увидишь вписываешь вместо 000 сюда
Code:
   var  x = 000, y = 000 ; Координаты X и Y тайла куда прилетаешь по первой руне
   var  x2 = 000, y2 = 000 ; Координаты X и Y тайла куда прилетаешь по второй руне
   var  x3 = 000, y3 = 000 ; Координаты X и Y тайла куда прилетаешь по третьей руне

Author:  Hydromarine [ 2016-05-16 13:38:13 ]
Post subject:  Re: Скрипт на Lumberjacking

Да вписал точно правильно, команда у меня эта where не работает, но инжект сверху на рамке пишет текущие координаты. Их и вбил.
Все среколился куда надо, подошел к дереву, встал в хайд и больше ничего не делает.

Author:  Incorrect User [ 2016-05-16 13:42:16 ]
Post subject:  Re: Скрипт на Lumberjacking

Даже топор не юзает?

Author:  Hydromarine [ 2016-05-16 14:03:59 ]
Post subject:  Re: Скрипт на Lumberjacking

Incorrect User wrote:
Даже топор не юзает?

Только что проверил положив топор в пак. Прилетает в лес, берет из пака топор в руки и на этом все! При этом ни ошибок, и скрипт запущен остается.

Page 2 of 4 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/