Перейти к содержанию
Форум шарда Middle-Earth
Вирд

Скрипты / просьбы скриптов

Рекомендуемые сообщения

а ты где стоишь? Если на лодке, то вставать надо на тайл трюма

нее... вообще. Я в доме режу - и то не работает. Я несколько разных скриптов попробовал - не пашет. - по одной вещи работает (ручками)

Вот это:

sub main()
while not uo.dead()
DIM Boot[8] 
;режет обувку на кожу
   Boot[0]  =  0x170A    
   Boot[1]  =  0x170B   
   Boot[2]  =  0x170C    
   Boot[3]  =  0x170D    
   Boot[4]  =  0x170E    
   Boot[5]  =  0x170F     
   Boot[6]  =  0x1710   
   Boot[7]  =  0x1711    
   VAR i 

   For i = 0 To 7

              UO.FindType(Boot[i], '-1', 'backpack')
         if UO.FindCount() > 0 Then
                  wait(200)
            UO.WaitTargetobject( 'finditem' ) 
            UO.UseType(0x0F9E) #ножницы
      wait(350)
    uo.deletejournal()
    repeat
      wait(250)
            until uo.count(Boot[i]) > 0
                        wait(500)
     End if
    next
    wend
end sub

тоже работало раньше.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

странно как он у тебя работал...

sub main()

DIM Boot[8] 
;режет обувку на кожу
   Boot[0]  =  0x170A    
   Boot[1]  =  0x170B   
   Boot[2]  =  0x170C    
   Boot[3]  =  0x170D    
   Boot[4]  =  0x170E    
   Boot[5]  =  0x170F     
   Boot[6]  =  0x1710   
   Boot[7]  =  0x1711    

   VAR i 

while not uo.dead()
   For i = 0 To 7
         UO.FindType(Boot[i], '-1', 'backpack')
         repeat
            if UO.FindCount() > 0 Then
              wait(200)
              UO.WaitTargetobject( 'finditem' ) 
              UO.UseType(0x0F9E) #ножницы
              wait(350)
            End if
            wait(500)
          until uo.count(Boot[i]) > 0
    next
wend
end sub

попробуй так...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
странно как он у тебя работал...

sub main()

DIM Boot[8] 
;режет обувку на кожу
   Boot[0]  =  0x170A    
   Boot[1]  =  0x170B   
   Boot[2]  =  0x170C    
   Boot[3]  =  0x170D    
   Boot[4]  =  0x170E    
   Boot[5]  =  0x170F     
   Boot[6]  =  0x1710   
   Boot[7]  =  0x1711    

   VAR i 

while not uo.dead()
   For i = 0 To 7
         UO.FindType(Boot[i], '-1', 'backpack')
         repeat
            if UO.FindCount() > 0 Then
              wait(200)
              UO.WaitTargetobject( 'finditem' ) 
              UO.UseType(0x0F9E) #ножницы
              wait(350)
            End if
            wait(500)
          until uo.count(Boot[i]) > 0
    next
wend
end sub

попробуй так...

Попробовал:

Надпись итем фоунд 0 и все на этом.

 

Я тут от безысходности такое вот натворил:

sub Boots()
DIM Boot[9] 
;режет обувку на кожу
   Boot[0]  = 0x170A    
   Boot[1]  = 0x170B   
   Boot[2]  = 0x170C    
   Boot[3]  = 0x170D    
   Boot[4]  = 0x170E    
   Boot[5]  = 0x170F     
   Boot[6]  = 0x1710   
   Boot[7]  = 0x1711  
   Boot[8]  = 0x0DC8 #сеть
   VAR i 

   For i = 0 To 8

      UO.FindType( Boot[i], '-1', 'backpack') 
      if UO.FindCount() > 0 Then

            UO.WaitTargetobject( 'finditem' ) 
            UO.UseType(0x0F9E) #ножницы
            repeat
            wait(3500)
     End if
    next
Boots()
end sub

оно - работает. блин. Хочется нормально написать - но знаний не хватает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подсобите, пожалуйста, скриптом на плавку руды по 2. Тут есть 3 скрипта, но они некорректно у меня работают, один тупо пишет: Стыковка этих предметов запрещена. Перезапустите клиент. Второй на моменте, где надо отделить 2 руды от тех, которые на полу, говорит Grab 2 what? и кидает таргет, чтобы самому тыкать каждый раз. Это единственный косяк этого скрипта, ибо остальные части работают стабильно. А третий тупо все, что попадает из руд в пак сразу переплавляет. В общем, большое спасибо))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

решил сам попробовать скрипт написать на плавку руды по 2...но, учитывая, что нуб, взял за основу скрипт из этой темы, вот этот:

sub Smelt()
  while true
    uo.findtype("ore", -1, "ground")
    uo.waittargetobject('finditem')
    uo.exec("grab 2")
    repeat
      wait(250)
    until uo.count("ore") > 0
    uo.usetype("ore")

    uo.deletejournal()
    repeat
      wait(500)
    until uo.injournal("You")
  wend
end sub

У меня он на моменте взятия руды спрашивает Grab 2 what? И дает таргет, чтобы я тыркнул в руду на полу. И так каждый раз.

Решил заменить именно эту часть, взяв за основу скрипт MeSSiRa на БК (где шафты с пола берет) и попутно избавился от ,addobject ore.

Вот что получилось:

sub Smelt()
uo.set('finddistance','2')
  while uo.countground('0x19B9') >0
    uo.findtype('0x19B9', -1, 'ground')
    uo.waittargetobject('finditem')
    uo.grab('2', 'finditem')
    repeat
      wait(250)
    until uo.count('0x19B9') > 0
    uo.usetype('0x19B9')

    uo.deletejournal()
    repeat
      wait(500)
    until uo.injournal("You")
  wend
end sub

Все работает: и берет по 2 руды с пола и плавит их, и стекует, но почему-то он после 3-4 раза, а иногда и после первого просто останавливается. Подскажите, пожалуйста, где собака зарыта)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собака зарыта в том, что ты когда поднимаешь руду с пола (даже часть) она исчезает на некоторое время. Скрипт ее не видит, и, соответственно, выходит из цикла.

У тебя в скрипте несколько ошибок.

Во-первых команда grab немного для другого предназначенна. Тебе же нужна moveitem для надежности... мало того, утебя не правильно описан цикл findtype... Посмотри повнимательней мой скрипт на БК и процедуру поиска..

работа с журналом в данном скрипте не нужна...

не подключил еду..

Если ставишь команду рипит, то делай счетчики туда же, так как у тебя к примеру фразы, на которую ссылается выход из цикла может и не быть, или команда удаления журнала позже нужного сработает... и тогда скрипт у тебя встанет на мертвой точке...

В общем дорабатывай)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чумааааа :)) вроде получилось, хотя и с задержками косяк: 1 - я так смотрю, вроде он может и побыстрее брать руду и плавить, 2 - при еде на 3-й раз пишется, что слишком быстро.

А так стабильно работает. Посмотри, пожалуйста, комментарии, правильно ли я понимаю принцип работы функций, я ж говорю, нуб.

var food='0x097B' ## рыба-'0x097B' мясо-'0x09F2', банан-'0x171F' 

sub Smelt()
uo.set('finddistance','2')
  while uo.countground('0x19B9') >0 ## работай, пока руда есть на полу
    uo.findtype('0x19B9', -1, 'ground') ## определить руду на полу
    if uo.findcount() then 
        saving()
        uo.moveitem('finditem', '2') ## взял 2 руды с пола
        wait(500)
        uo.usetype('0x19B9') ## плавит
        wait(800)
        saving()
        eda()
    endif
  wend
end sub

Sub eda()
uo.findtype(food)
    if uo.findcount() then
        uo.usetype(food)
    else
           uo.print("Нет еды!")
    endif
end sub

Sub saving()
if uo.injournal("Saving") then
    repeat
        wait(1000)
    until uo.injournal("complete.")
    uo.deletejournal()
endif
end sub

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Знаю что у многих есть) скрипт на телепорт и скупку товара.

 

Нужно чтобы:

.брал деньги

.заряжал рунбуку

.закупался

.выкладывал то что купил

 

выложите плз!

заранее спасибо!)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
чумааааа :))

Быстро схватываешь! Молодец. Только функцию moveitem Немного неправильно сделал).

 

uo.moveitem(object,[quantity,containerobject/ground,[x,y,z]])

у тебя по этой схеме указан только сам объект и количество которое надо взять. А вот куда положить не указано...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Быстро схватываешь! Молодец. Только функцию moveitem Немного неправильно сделал).

 

uo.moveitem(object,[quantity,containerobject/ground,[x,y,z]])

у тебя по этой схеме указан только сам объект и количество которое надо взять. А вот куда положить не указано...

ааа, а я подумал, что это "откуда брать" и, учитывая, что он искал руду на полу, то по умолчанию должно было оттуда браться.

т.е. туда надо дописать тип бэкпака?

Например: uo.moveitem('finditem', '2', '0x0E75') ?

Или id лучше, а то, как я понимаю, если в паке будут еще другие backpack, то он в любой из них положить может?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Третий параметр может быть либо словом ground (выкладывать на землю) либо обьектом контейнером object (выкладывать в контейнер). На земле или в контейнере находился обьект до этого не важно.

Координаты означают абсолютные или относительные мировые, если контейнер указан как ground. Если контейнер это обьект, то координаты это точное место в нём. Не указаные координаты считаются нулевыми.

Контейнером по умолчанию является backpack (ранец персонажа).

 

Обычно я использую параметр 'my' или 'backpack'

 

ссылка на источник

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну да, я оттуда и брал синтаксис, только не дочитал до конца.

Тогда, может и с другим скриптом поможешь, авось и сам научусь писать :) Он даже попроще, чем этот, я вчера парился с ним, но что-то походу цикл неправильный сделал и комп повис))) удалил нафиг скрипт и не трогал его больше))

Суть такая: я частенько на ночь ренжа оставляю рыбачить. Итог - куча сапогов разных и сеток, которые можно пустить на ресурсы.

Вот ручками влом тыкать, тем более, когда пак забит так, что просвета в нем не видно.

Сейчас данные какие есть (сами типы предметов и простенький скрипт на резку вещей):

#### items: 0x1711, 0x1710, 0x0DC8, 0x170C, 0x170E, 0x170F,
#### 0x170B, 0x170D
sub rezka()
    while uo.count('0x1711')>0 
        uo.waittargettype('0x1711')
        uo.usetype('0x0F9E')
        wait(5000)
    wend
end sub

Соответственно, пока я просто замещаю тип вещи и перезапускаю скрипт.

Собственно, проблема то вся в том, как бы обобщить все перечисленные типы предметов. То ли массив сделать, то ли как-то по-другому. Причем, когда некоторые типы обуви кончаются, то в игре пишется, что You must have the item in your backpack, а при некоторых ничего не пишется и скрипт просто завершает свою работу.

Мне бы хоть направление, в котором двигаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну да.. тебе нужен перебор массива с типами обуви.

Только внутри цикла резки тебе нужна та же функция, что и с переплавкой с поиском по типу конкретного объекта, и потом резать этот объект... так надежней будет.

Просто пойми, чем меньше скрипт будет сам выбирать что ему делать, тем больше у тебя будет надежность скрипта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну я вроде проникся немного этой темой))

вот такое сейчас накидал, но за неимением пака с этими вещами не проверял еще, посмотри своим опытным взглядом, может, что не так будет. Сам скрипт простой, но хз, правильно ли поставил счетчик(?). По-моему, принцип такой: смотрит, есть ли boots[1] в начале, режет их, пока boots[1] не закончатся, потом i = i +1, т.е. 2, а значит он должен перейти к boots[2] и так далее до i = 8. И eda() туда ли вставил или лучше после wend? Так он будет есть после каждой порезанной вещи, а во втором случае, как я понимаю, между boots и boots[i+1] или вообще никогда не выполнится?

var food='0x097B'

DIM boots[8]
boots[1] = '0x1711'
boots[2] = '0x1710'
boots[3] = '0x0DC8'
boots[4] = '0x170C'
boots[5] = '0x170E'
boots[6] = '0x170F'
boots[7] = '0x170B'
boots[8] = '0x170D'

sub rezka()
while uo.targeting()
wait(100)
wend
for i = 1 to 8
    while uo.count(boots[i]) > 0 
        uo.waittargettype(boots[i])
        uo.usetype('0x0F9E')
        wait(5000)
        saving()
        eda()
        i = i + 1
    wend
end sub

Sub eda()
uo.findtype(food)
    if uo.findcount() then
        uo.usetype(food)
    else
           uo.print("Нет еды!")
    endif
end sub

Sub saving()
if uo.injournal("Saving") then
    repeat
        wait(1000)
    until uo.injournal("complete.")
    uo.deletejournal()
endif
end sub

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не.. ты чего... счетчиком является for.. он будет сам перебирать... только он описан у тебя не правильно!

 

for

...

next

 

и опять ты внутри цикла поиск объекта не указываешь чтоб его резать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

for i = 1 to 8
    while uo.count(boots[i]) > 0
        uo.findtype(boots[i], -1, 'backpack')
        uo.waittargettype(boots[i])
        uo.usetype('0x0F9E')
        wait(5000)
        saving()
        eda()
    wend
next

вот так?

Или после uo.findtype(boots, -1, 'backpack')

надо писать не

uo.waittargettype(boots), а уже

uo.waittargettype('finditem')?

 

на выходных надо будет на йоко форуме посидеть в теме Learn Scripting, там 10 уроков есть аж.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

во-первых после uo.findtype(boots, -1, 'backpack') у тебя должна быть строчка if uo.findcount() then

Потом у тебя неопнимание... есть типы вещей ( 0x0000 ), а есть объекты ( 0x00000000 ). Так вот объект - это уникальный ИД конкретной вещи. Финдтайп ищет по типу в параметрах и если находит, то в параметре 'finditem' будет значение конкретного найденнного объекта!

Поэтому в твоем случае будет uo.waittargetobject('finditem'). А вот ножницы тебе надо лишь юзануть, поэтому ты их юзаешь по финдтайпу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну да, вроде понятно. Т.е. двух вещей с одинаковыми ID не существует? И он присваивается при выпадении/покупке/создании итд предмета?

 

p.s. а для чего findcout нужен?

Вот прочитал:

Синтакс: number uo.FindCount()

Возвращает количество обьектов, найденых последней командой findtype. Обычно чтобы взять новый обьект, текущий обьект (finditem) игнорируется командой ignore и поиск командой findtype повторяется.

 

Т.е. мы сначала findtype определили, есть ли вещи указанного типа, которые находится в указанном месте (паке), а файндкаунт что сделает? Определит их количество? Получается, если я пишу findtype в скрипте, то у меня обязательно следующим действием должно быть if findcount() then?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, обязательно.. читается так:

uo.findtype('.......') # ищем нужный тип в нужном месте

if findcount() then # Если нашли то переходим на ступень дальше..

 

Анекдот есть про программиста:

- Зачем когда вы ложитесь спать ставите 2 стакана: один полный, второй пустой?

- Один когда хочу пить, второй когда не хочу!

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нарыбачил, решил проверить скрипт:

var food='0x097B'

DIM boots[8]
boots[1] = '0x1711'
boots[2] = '0x1710'
boots[3] = '0x0DC8'
boots[4] = '0x170C'
boots[5] = '0x170E'
boots[6] = '0x170F'
boots[7] = '0x170B'
boots[8] = '0x170D'

sub rezka()
while uo.targeting
wait(100)
wend
for i = 1 to 8
    while uo.count(boots[i]) > 0
        uo.findtype(boots[i], '-1', 'backpack')
        if uo.findcount() then
            uo.waittargettype('finditem')
            uo.usetype('0x0F9E')
            wait(5000)
            saving()
            eda()
        endif
    wend
next
end sub

Sub eda()
uo.findtype(food)
    if uo.findcount() then
           uo.usetype(food)
    else
          uo.print("Нет еды!")
    endif
end sub

Sub saving()
if uo.injournal("Saving") then
    repeat
        wait(1000)
    until uo.injournal("complete.")
    uo.deletejournal()
endif
end sub

вроде все исправил, как ты сказал, а пишет unhandled exception in parser. Порылся на форуме йоко, там целая тема про это, но так и не разобрался что к чему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну ты же вайттаргеттип делаешь.. а в переменной у тебя значение объекта! Вот и парсит..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот сейчас не очень понял...

загвоздка, вот в этом, значит - uo.waittargettype('finditem')

Ты писал вот как "Поэтому в твоем случае будет uo.waittargetobject('finditem'). А вот ножницы тебе надо лишь юзануть, поэтому ты их юзаешь по финдтайпу."

я поменял на uo.waittargetobject('finditem') сейчас, все равно парсит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Допущенные ошибки в скрипте:

1) Массив выведен вне скрипта, в котором используется. - причина парса.

2) Переменная i не объявленна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

upd.

вот конечный вариант на данный момент, потом еще думаю в начало цикла поставить checkitems() проверку на наличие ножниц. Ну и потом добавить перемещение карт, бутылок и маг рыбы в разные контейнеры.

А пока есть проблема: не разрезались 0x170D и 0x170B. НИчего не произошло, разрезались остальные боты, сетки, в журнале ничего не видно. Скрипт в инже загружен в процессах, а действий никаких не предпринимает. Отменил его, еще раз включил, также ничего. Подождал несколько минут, мало ли, пока он дойдет до i = 7 и 8

 

VAR food = '0x097B'
VAR i ## в этом скрипте вынес переменную за сам скрипт (глобальная вроде бы называется в таком случае?), 
         ## но это тут не влияет, она все равно в 1 функции упоминается.

sub rezka()

DIM boots[8]
boots[1] = '0x1711'
boots[2] = '0x1710'
boots[3] = '0x0DC8'
boots[4] = '0x170C'
boots[5] = '0x170E'
boots[6] = '0x170F'
boots[7] = '0x170B'
boots[8] = '0x170D'

for i = 1 to 8
    while uo.count(boots[i]) > 0
        uo.findtype(boots[i], '-1', 'backpack')
            if uo.findcount() then
                uo.waittargetobject('finditem')
                uo.usetype('0x0F9E')
                wait(5000)
                saving()
                wait(100)
                eda()
                wait(100)
            endif
    wend
next
end sub

Sub eda()
uo.findtype(food)
    if uo.findcount() then
        uo.usetype(food)
    else
           uo.print("Нет еды!")
    endif
end sub

Sub saving()
if uo.injournal("Saving") then
    repeat
        wait(1000)
    until uo.injournal("complete.")
    uo.deletejournal()
endif
end sub

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...