Как перезаписать последний труп ?

Ask for scripts here

Moderators: Murderator+, Murderator

Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Как перезаписать последний труп ?

Post by Mirage »

у всех трупов тип один "0x2006" - он в скрипте присутствует. Другое дело в скрипте Incorrect User нет некоторых условий которые превратят его частнослучный скрипт в универсальный.
1) не учитываются кости людей, это пофигу - не режте просто. Но для ПВП все таки не очень хорошо.
2) пауза после открытия трупа - минимум 300 а лучше 500.
3)

Code: Select all

 uo.moveitem("finditem", 0, "backpack")
               wait(100)

так можно делать только на 55 и раньше сфере. В новой 56 и рануо вшита пауза минимальная 300 секунд. Соответственно минимум 300 а лучше 500. А еще лучше проверку на перемещение предмета, но это много строк.
4) uo.print("Закончил!") лучше заменить на uo.charprint('self', '1069', 'Закончил!') красивее, виднее и менее падуче.

Получится правда слегка громоздко зато универсально.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Как перезаписать последний труп ?

Post by Incorrect User »

Mirage wrote:1) не учитываются кости людей, это пофигу - не режте просто.

У меня с резкой всё ок.
some
Posts: 197
Joined: 2007-05-23 19:51:18

Re: Как перезаписать последний труп ?

Post by some »

видео в лс отправил
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Как перезаписать последний труп ?

Post by Incorrect User »

Mirage wrote:2) пауза после открытия трупа - минимум 300 а лучше 500.
3)

Code: Select all

 uo.moveitem("finditem", 0, "backpack")
               wait(100)

так можно делать только на 55 и раньше сфере.

1 - 200 хватает
2 - с задержкой 100 лутает без всяких крашей, сам удивился когда тестил подбирая задержку, походу в новых версиях инжи что-то с мувитем намутили, но что не падает - факт. Скрипт проверен, все в нем рабочее, и собственно у автора проблемы были не из за моего скрипта, а из за своих косяков с чем уже разобрались.
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Как перезаписать последний труп ?

Post by kobol »

Code: Select all

uo.findtype(-1, -1, box)
            if uo.findcount() and not Instring(uo.getgraphic("finditem"), notake) then
               uo.moveitem("finditem", 0, "backpack")
               wait(100)
            else
               if uo.findcount() then
                  uo.ignore("finditem")
               end if
               if not uo.findcount() then
                  find = 0
               end if
               wait(100)
            end if
         until find == 0



А почему будет быстрее по сравнению с поиском по конкретному типу?
Если мы задаем uo.findtype(-1, -1, box), то это значит, что будут искаться вообще все вещи. И если вещей 50, то и крутится цикл будет 50 раз, потому что все равно находит по одной вещи.
А если нам нужна вещь MyType и мы зададим uo.findtype(MyType, -1, box) и таких вещей всего 10 из 50, то цикл будет крутиться только 10 раз. И без поиска подстроки Instring(uo.getgraphic("finditem"), notake).
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Как перезаписать последний труп ?

Post by kobol »

Что-то уже глаз замылился, не вижу ошибки.
Скрипт отрабатывает 1 раз нормально, из списка запущенных функций исчезает.
Но если после этого вручную потаскать вещи обратно на труп - вылетает неисправимая ошибка (или как там) и предлагает закрыть UO.
Вплоть до ошибки в какой-то dll. Такое впечатление, что в памяти что-то остается и продолжает крутить.

Code: Select all

####
# based on "Loot script"  by Incorrect User, 2014, http://forum.yoko.com.ua/viewtopic.php?f=17&t=17411&hilit=0x2006#p96654
# modified by Kobol, March2014
var clr=38, clo=43, cly=53, clg=63, clb=3, cla=89, clda=83, clp=120 , clgr=1088, clw=1156, cldg=1162
# красный   - "38" или "0x0026"  # темно-бирюзовый - "83" или "0x0053"
# оранжевый - "43" или "0x002B"  # голубой    - "89"  или "0x0059"
# желтый    - "53" или "0x0035"  # синий      - "3"   или "0x0003"
# зеленый   - "63" или "0x003F"  # фиолетовый - "120" или "0x0078"
# "1088" - по умолчанию
# 1152 - бирюзовый 1151 - черный 1155 - фиолетовый 1156 - белый  1158 - кр 1161 - синий 1162 - темно зел 1166 ткр 1169 сз
# 2500 2524 - оранж  2517 кр 2567 малин 2566=0x0A06 белый
#  2998 - белый 3008 3221 3600 и выше - контур
###########################################
sub LootMinoc()
   var box, i, itemT, dist  ;, find = 1
   dim Nado[10]
   Nado[0] = "0x0F91"   ; wyrms hearts
   Nado[1] = "0x0F78"   ; batwings   
   Nado[2] = "0x0F87"   ; eyes of newt
   Nado[3] = "0x0F0E"   #bottle
   Nado[4] = "0x0df2"   #wand
   Nado[5] = "0x0df3"   #wand
   Nado[6] = "0x0df4"   #wand
   Nado[7] = "0x0df5"   #wand
   Nado[8] = "0x0EED"  #gold
   Nado[9] = "0x09F1"   # test meat
   
   uo.ignorereset()
   
   
   
   repeat  ; запускаем цикл поиска трупов <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      uo.findtype("0x2006", -1, "ground", 4) ;0x2006 ищем трупы по округе
      uo.charprint("0x09DC","Corpse num="+str(uo.findcount())) ; количество найденых
      
      If UO.FindCount() > 0 Then ; если нашли, то
         box = uo.getserial("finditem"); берем его сериал
         uo.charprint("0x09DC","Corpse ser="+box)
         wait (10)
         
         dist=UO.GetDistance("finditem") ; определям дистанцию до трупа
         uo.charprint("0x09DC","distance="+str(dist))
         wait (10)
         
         if dist <3 then ;" если до трупа дотянуться
            
            uo.useobject(box) ; открываем труп
            wait(300)
            
            repeat ; запускаем цикл поиска вещей на трупе ==------------------------------------==
               
               uo.findtype(-1, -1, box) ; ищем на трупе все подряд
               
               if uo.findcount()  then  ; "если труп не пустой
                  itemT=uo.getgraphic("finditem") ; берем тип того, что нашли
                  for i=0 to 9 ; сравниваем с нужными нам типами
                     ;uo.charprint("0x09D2","2. Nado T="+(Nado[i]))
                     ;uo.charprint("0x09D3","2. It T="+itemT)
                     ;wait(50)
                     if itemT==Nado[i] then ; если совпадает, то забираем себе
                        uo.moveitem("finditem", "-1", "backpack")
                        wait(600)
                     else
                        uo.ignore("finditem") ; если вещь не нужна - в игнор
                     end if
                     wait(5)
                  next
                  
                  wait(50)
               else ;" если в трупе пусто
               end if
            until not uo.findcount() ; ==------------------------------------==
         end if
         uo.ignore(box) ; закончили с трупом - в игнор его
      else
         box = 0
      end if
      wait (50)
   until box == 0 ; трупов больше нет  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   uo.ignorereset()
   wait (150)
   uo.charprint("0x09D4","Finished!")
end sub


kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Как перезаписать последний труп ?

Post by kobol »

Вот по обычной схеме, вроде не крашит. (YokoInjection 702.11 PaWn)
На задержку после uo.moveitem 500 - ругается, не 600 - уже нет ;) (DRW)

Code: Select all

####
# based on "Loot script"  by Incorrect User, 2014, http://forum.yoko.com.ua/viewtopic.php?f=17&t=17411&hilit=0x2006#p96654
# modified by Kobol, March2014
var clr=38, clo=43, cly=53, clg=63, clb=3, cla=89, clda=83, clp=120 , clgr=1088, clw=1156, cldg=1162
# красный   - "38" или "0x0026"  # темно-бирюзовый - "83" или "0x0053"
# оранжевый - "43" или "0x002B"  # голубой    - "89"  или "0x0059"
# желтый    - "53" или "0x0035"  # синий      - "3"   или "0x0003"
# зеленый   - "63" или "0x003F"  # фиолетовый - "120" или "0x0078"
# "1088" - по умолчанию
# 1152 - бирюзовый 1151 - черный 1155 - фиолетовый 1156 - белый  1158 - кр 1161 - синий 1162 - темно зел 1166 ткр 1169 сз
# 2500 2524 - оранж  2517 кр 2567 малин 2566=0x0A06 белый
#  2998 - белый 3008 3221 3600 и выше - контур
###########################################
sub LootMinoc()
   var box, i, itemT, dist  ;, find = 1
   dim Nado[10]
   Nado[0] = "0x0F91"   ; wyrms hearts
   Nado[1] = "0x0F78"   ; batwings   
   Nado[2] = "0x0F87"   ; eyes of newt
   Nado[3] = "0x0F0E"   #bottle
   Nado[4] = "0x0df2"   #wand
   Nado[5] = "0x0df3"   #wand
   Nado[6] = "0x0df4"   #wand
   Nado[7] = "0x0df5"   #wand
   Nado[8] = "0x0EED"  #gold
   Nado[9] = "0x09F1"   # test meat
   uo.ignorereset()
   repeat  ; запускаем цикл поиска трупов <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      uo.findtype("0x2006", -1, "ground", 4) ;0x2006 ищем трупы по округе
      uo.charprint("0x09DC","Corpse num="+str(uo.findcount())) ; количество найденых
      If UO.FindCount() > 0 Then ; если нашли, то
         box = uo.getserial("finditem"); берем его сериал
         uo.charprint("0x09DC","Corpse ser="+box)
         wait (10)
         dist=UO.GetDistance("finditem") ; определям дистанцию до трупа
         uo.charprint("0x09DC","distance="+str(dist))
         wait (10)
         if dist <3 then ;" если до трупа дотянуться
            uo.useobject(box) ; открываем труп
            wait(300)
            for i=0 to 9 ; сравниваем с нужными нам типами
               
               repeat ; запускаем цикл поиска вещей на трупе ==------------------------------------==
                  
                  uo.findtype(Nado[i], -1, box) ; ищем на трупе нужную вещь
                  
                  if uo.findcount()  then  ; "если труп не пустой
                     uo.moveitem("finditem", "-1", "backpack")
                     wait(600)
                     
                  else ;" если в трупе пусто
                  end if
               until not uo.findcount() ; ==------------------------------------==
            next
         end if
         uo.ignore(box) ; закончили с трупом - в игнор его
      else
         box = 0
      end if
      wait (50)
   until box == 0 ; трупов больше нет  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   uo.ignorereset()
   wait (150)
   uo.charprint("0x09D4","Finished!")
end sub

Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Как перезаписать последний труп ?

Post by Incorrect User »

kobol wrote:А почему будет быстрее по сравнению с поиском по конкретному типу?
Если мы задаем uo.findtype(-1, -1, box), то это значит, что будут искаться вообще все вещи. И если вещей 50, то и крутится цикл будет 50 раз, потому что все равно находит по одной вещи.


Правильно, 50 раз в любом случае, и нашел или не нашел вешь а проверять будет, например в трупе 5 итемов, а findtype будет включаться 50 раз хотя нужно всего 5. А так ищем все подряд, что нашли то забрали, сколько итемов в контейнере есть столько раз будет файндтайп использоваться + 1 последний раз когда ничего не найдет и скрипт офнется.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Как перезаписать последний труп ?

Post by Incorrect User »

Вообще сейчас скрипт на лут выглядит так

Code: Select all

sub Loot()
   var box
   uo.selectignorelist("NoTake")
      uo.findtype("0x2006", -1, "ground", 2)
      if uo.findcount() then
         box = uo.getserial("finditem")
         uo.useobject(box)
         wait(200)
         repeat
            uo.findtype(-1, -1, box)
            if uo.findcount() then
               uo.moveitem("finditem", 0, "backpack")
               wait(1600)
            end if
         until not uo.findcount()
         uo.ignore(box)
      end if
   uo.playwav("Alarm")
   uo.print("Закончил!")
end sub

Вот и всё :P В автостарте создаешь игнорлист с типами которые тебе брать не нужно, и при поиске их скрипт находить не будет вообще, а все остальное вылутает, причем все это без всяких лишних движений.
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Как перезаписать последний труп ?

Post by kobol »

Incorrect User wrote:
kobol wrote:А почему будет быстрее по сравнению с поиском по конкретному типу?
Если мы задаем uo.findtype(-1, -1, box), то это значит, что будут искаться вообще все вещи. И если вещей 50, то и крутится цикл будет 50 раз, потому что все равно находит по одной вещи.


Правильно, 50 раз в любом случае, и нашел или не нашел вешь а проверять будет, например в трупе 5 итемов, а findtype будет включаться 50 раз хотя нужно всего 5. А так ищем все подряд, что нашли то забрали, сколько итемов в контейнере есть столько раз будет файндтайп использоваться + 1 последний раз когда ничего не найдет и скрипт офнется.


А, у в смысле, когда в трупе мало типов вещей, а проверять надо много типов. Тогда да )
А когда наоборот, тогда выгоднее искать заданные типы.
Ну можно делать проверку
uo.findtype(-1, -1, box)
if uo.count()< числа лутаемых типов, тогда брать все, а если нет, тогда искать по типам.
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Как перезаписать последний труп ?

Post by kobol »

Incorrect User wrote:Вообще сейчас скрипт на лут выглядит так

Code: Select all

..............

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


Эх, это в новой инже. Не по теме конечно, а как лучше на нее перейти? У меня мультиклиент и ylaunch. Настройки надо руками перебивать или новый лончер втянет настройки? И как откатиться если что?
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Как перезаписать последний труп ?

Post by Incorrect User »

В новом инжекте настройки хранятся в другом файле, по него просто новую папку сделай и туда его пихай.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Как перезаписать последний труп ?

Post by Incorrect User »

kobol wrote:А когда наоборот, тогда выгоднее искать заданные типы.

Чем выгоднее, если тебе нужно брать все подряд итемы кроме тех что в игноре?) Если у него пол пака шлака то твой скрипт и будет крутить весь цикл на 50 раз и пока будешь искать кто-то другой полутает всё до тебя)
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Как перезаписать последний труп ?

Post by kobol »

Incorrect User wrote:
kobol wrote:А когда наоборот, тогда выгоднее искать заданные типы.

Чем выгоднее, если тебе нужно брать все подряд итемы кроме тех что в игноре?) Если у него пол пака шлака то твой скрипт и будет крутить весь цикл на 50 раз и пока будешь искать кто-то другой полутает всё до тебя)


Нет. Если у него 45 шлака + 5 нужных, то искать по типу будет только 5 раз.
Если у него 50 шлака а тебе нужен 1 тип, то он будет искать 1 тип 1 раз и потом выйдет из цикла.
А если задать -1 в типе, то он будет искать все 50 раз и проверять их на соответствие нужному тебе типу.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Как перезаписать последний труп ?

Post by Incorrect User »

kobol wrote:Нет. Если у него 45 шлака + 5 нужных, то искать по типу будет только 5 раз.

Ты внимателнее читай, у тебя массив на 50 нужных тебе предметов, в трупе из этих 50 будет всего 5 но искать тебе нужно всё те же 50. Если массив на 5 то и искать будет 5 это понятно но говорили мы не об этом если что :wink: а о том почему плохо использовать поиск по массиву.

Обьясню подробнее, если предметов великое множество, типы от оружия до ресурсов то представь какой массив на всё это нужно расписать и как долго он все это будет искать. В новом инжекте есть такая функция FindList, создаешь список типов которые нужно искать и он ищет все одновременно за один раз а не по очереди как массив, но и тут для большого количества расписывать каждый тип слишком напряжно, проще заигнорить то что не нужно брать и смело лутать все остальное. FindList удобно использовать когда тебе нужно найти исключительно определенные итемы и их не особо много, за одну проверку ты ищешь все типы сразу. В общем для лута массив в любом случае не актуален.
CxC
Posts: 93
Joined: 2012-12-31 00:17:09

Re: Как перезаписать последний труп ?

Post by CxC »

Incorrect User wrote:Обьясню подробнее, если предметов великое множество, типы от оружия до ресурсов то представь какой массив на всё это нужно расписать и как долго он все это будет искать. В новом инжекте есть такая функция FindList, создаешь список типов которые нужно искать и он ищет все одновременно за один раз а не по очереди как массив, но и тут для большого количества расписывать каждый тип слишком напряжно, проще заигнорить то что не нужно брать и смело лутать все остальное. FindList удобно использовать когда тебе нужно найти исключительно определенные итемы и их не особо много, за одну проверку ты ищешь все типы сразу. В общем для лута массив в любом случае не актуален.

а вот тут давай поподробнее ) в скриптах на лут использую связку

Code: Select all

      PUTLootPvM('0x1869', -1, corpse) # энч
      PUTLootPvM('0x1BFB', -1, corpse) # болты
      PUTLootPvM('0x0EED', -1, corpse) # золото

Sub PUTLootPvM(Type, Color, Otkuda)
   UO.FindType(Type, Color, Otkuda)
   while UO.FindCount('finditem') > 0
      if Uo.GetDistance(Otkuda)<=2 then
         UO.Grab("0","finditem") 
         wait(300)
         UO.FindType(Type, Color, Otkuda)
      else
         waitfowcorpsedistance(Otkuda)
      end if
   wend
end sub

Быстрее ли будет лутать через финдлист, если мне нужно лутать именно по порядку нужные мне итемы?
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Как перезаписать последний труп ?

Post by Juicy Fruit »

Ага, в последней версии список упорядочен и обрабатывается быстрее, чем скриптом (там разница в мс, но всеже :D)

Code: Select all

UO.FindCount('finditem')
Шо за Ад?) У нее нет параметров)
И uo.FindType()/uo.FindList() теперь возвращают серийник, можешь сделать while uo.FindType(...)
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Как перезаписать последний труп ?

Post by Incorrect User »

Да, и лутать будет в том порядке в котором ты добавляешь их в лист. Он ищет сразу весь список, из того что находит выберет первым то что есть из списка в той очередности в которой ты добавлял. Если ничего нету он сразу же прекратит работу так как ищет всё сразу, а не будет гонять циклы на каждый тип по очереди.
CxC
Posts: 93
Joined: 2012-12-31 00:17:09

Re: Как перезаписать последний труп ?

Post by CxC »

Juicy Fruit wrote:Шо за Ад?)

это не ад, это кривописание :))))
насколько велика разница и есть ли смысл переписывать, вот что интересно :) если там разница в 30 мс на весь скрипт, то и смысла не вижу. На лут 50+- итемов
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Как перезаписать последний труп ?

Post by Incorrect User »

Ну смотри, 50 итемов нужно найти, в случае неудачи задержку на файндтайп ставим 100, просто задержка в пустом цикле. 100х50 = 5сек крутится твой скрипт даже если инчего в трупе нет. Если же использовать FindList например в том же пустом контейнере то результат ты получишь сразу а не через 5 сек. А так же например в списке есть итем например он десятый, то скрипт сразу же на него среагирует а не будет крутить 9 проверок типов которые идут до него. В этом же и суть лута, полутать все максимально быстро пока не полутали до тебя)
Post Reply