Page 2 of 3
Re: Как перезаписать последний труп ?
Posted: 2014-03-15 07:00:05
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', 'Закончил!') красивее, виднее и менее падуче.
Получится правда слегка
громоздко зато универсально.
Re: Как перезаписать последний труп ?
Posted: 2014-03-15 10:48:11
by Incorrect User
Mirage wrote:1) не учитываются кости людей, это пофигу - не режте просто.
У меня с резкой всё ок.
Re: Как перезаписать последний труп ?
Posted: 2014-03-15 11:48:47
by some
видео в лс отправил
Re: Как перезаписать последний труп ?
Posted: 2014-03-15 23:10:57
by Incorrect User
Mirage wrote:2) пауза после открытия трупа - минимум 300 а лучше 500.
3)
Code: Select all
uo.moveitem("finditem", 0, "backpack")
wait(100)
так можно делать только на 55 и раньше сфере.
1 - 200 хватает
2 - с задержкой 100 лутает без всяких крашей, сам удивился когда тестил подбирая задержку, походу в новых версиях инжи что-то с мувитем намутили, но что не падает - факт. Скрипт проверен, все в нем рабочее, и собственно у автора проблемы были не из за моего скрипта, а из за своих косяков с чем уже разобрались.
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 17:01:48
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).
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 17:25:08
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
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 17:37:35
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
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 18:28:51
by Incorrect User
kobol wrote:А почему будет быстрее по сравнению с поиском по конкретному типу?
Если мы задаем uo.findtype(-1, -1, box), то это значит, что будут искаться вообще все вещи. И если вещей 50, то и крутится цикл будет 50 раз, потому что все равно находит по одной вещи.
Правильно, 50 раз в любом случае, и нашел или не нашел вешь а проверять будет, например в трупе 5 итемов, а findtype будет включаться 50 раз хотя нужно всего 5. А так ищем все подряд, что нашли то забрали, сколько итемов в контейнере есть столько раз будет файндтайп использоваться + 1 последний раз когда ничего не найдет и скрипт офнется.
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 18:34:45
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
Вот и всё

В автостарте создаешь игнорлист с типами которые тебе брать не нужно, и при поиске их скрипт находить не будет вообще, а все остальное вылутает, причем все это без всяких лишних движений.
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 20:48:55
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()< числа лутаемых типов, тогда брать все, а если нет, тогда искать по типам.
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 20:51:43
by kobol
Incorrect User wrote:Вообще сейчас скрипт на лут выглядит так
Вот и всё

В автостарте создаешь игнорлист с типами которые тебе брать не нужно, и при поиске их скрипт находить не будет вообще, а все остальное вылутает, причем все это без всяких лишних движений.
Эх, это в новой инже. Не по теме конечно, а как лучше на нее перейти? У меня мультиклиент и ylaunch. Настройки надо руками перебивать или новый лончер втянет настройки? И как откатиться если что?
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 21:21:50
by Incorrect User
В новом инжекте настройки хранятся в другом файле, по него просто новую папку сделай и туда его пихай.
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 21:24:52
by Incorrect User
kobol wrote:А когда наоборот, тогда выгоднее искать заданные типы.
Чем выгоднее, если тебе нужно брать все подряд итемы кроме тех что в игноре?) Если у него пол пака шлака то твой скрипт и будет крутить весь цикл на 50 раз и пока будешь искать кто-то другой полутает всё до тебя)
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 21:44:59
by kobol
Incorrect User wrote:kobol wrote:А когда наоборот, тогда выгоднее искать заданные типы.
Чем выгоднее, если тебе нужно брать все подряд итемы кроме тех что в игноре?) Если у него пол пака шлака то твой скрипт и будет крутить весь цикл на 50 раз и пока будешь искать кто-то другой полутает всё до тебя)
Нет. Если у него 45 шлака + 5 нужных, то искать по типу будет только 5 раз.
Если у него 50 шлака а тебе нужен 1 тип, то он будет искать 1 тип 1 раз и потом выйдет из цикла.
А если задать -1 в типе, то он будет искать все 50 раз и проверять их на соответствие нужному тебе типу.
Re: Как перезаписать последний труп ?
Posted: 2014-03-29 23:00:34
by Incorrect User
kobol wrote:Нет. Если у него 45 шлака + 5 нужных, то искать по типу будет только 5 раз.
Ты внимателнее читай, у тебя массив на 50 нужных тебе предметов, в трупе из этих 50 будет всего 5 но искать тебе нужно всё те же 50. Если массив на 5 то и искать будет 5 это понятно но говорили мы не об этом если что

а о том почему плохо использовать поиск по массиву.
Обьясню подробнее, если предметов великое множество, типы от оружия до ресурсов то представь какой массив на всё это нужно расписать и как долго он все это будет искать. В новом инжекте есть такая функция FindList, создаешь список типов которые нужно искать и он ищет все одновременно за один раз а не по очереди как массив, но и тут для большого количества расписывать каждый тип слишком напряжно, проще заигнорить то что не нужно брать и смело лутать все остальное. FindList удобно использовать когда тебе нужно найти исключительно определенные итемы и их не особо много, за одну проверку ты ищешь все типы сразу. В общем для лута массив в любом случае не актуален.
Re: Как перезаписать последний труп ?
Posted: 2014-03-30 12:37:50
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
Быстрее ли будет лутать через финдлист, если мне нужно лутать именно
по порядку нужные мне итемы?
Re: Как перезаписать последний труп ?
Posted: 2014-03-30 12:52:05
by Juicy Fruit
Ага, в последней версии список упорядочен и обрабатывается быстрее, чем скриптом (там разница в мс, но всеже

)
Шо за Ад?) У нее нет параметров)
И uo.FindType()/uo.FindList() теперь возвращают серийник, можешь сделать while uo.FindType(...)
Re: Как перезаписать последний труп ?
Posted: 2014-03-30 13:04:49
by Incorrect User
Да, и лутать будет в том порядке в котором ты добавляешь их в лист. Он ищет сразу весь список, из того что находит выберет первым то что есть из списка в той очередности в которой ты добавлял. Если ничего нету он сразу же прекратит работу так как ищет всё сразу, а не будет гонять циклы на каждый тип по очереди.
Re: Как перезаписать последний труп ?
Posted: 2014-03-30 13:35:52
by CxC
Juicy Fruit wrote:Шо за Ад?)
это не ад, это кривописание

)))
насколько велика разница и есть ли смысл переписывать, вот что интересно

если там разница в 30 мс на весь скрипт, то и смысла не вижу. На лут 50+- итемов
Re: Как перезаписать последний труп ?
Posted: 2014-03-30 13:47:46
by Incorrect User
Ну смотри, 50 итемов нужно найти, в случае неудачи задержку на файндтайп ставим 100, просто задержка в пустом цикле. 100х50 = 5сек крутится твой скрипт даже если инчего в трупе нет. Если же использовать FindList например в том же пустом контейнере то результат ты получишь сразу а не через 5 сек. А так же например в списке есть итем например он десятый, то скрипт сразу же на него среагирует а не будет крутить 9 проверок типов которые идут до него. В этом же и суть лута, полутать все максимально быстро пока не полутали до тебя)