Проверка резки трупа |
Проверка резки трупа |
Сообщений: 3319 Рег. 19.11.2013 |
17 августа 2017 09:59
Сообщение #21
|
Я же писал. :) Я тестировал на коне. Куда лошать смотрела ту координату и показывало, а не относительно положения чара. Хотя не совсем ясно как было изначально. Это либо фишечка либо глюк. Уточню. Вообще можно через формулу вычислить используя getdir. Если мы знаем расстояние до объекта, направление взгляда чара, направление лежащего объекта... Но имхо исключив всего 4 точки из 24 быстрее сделать. |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
17 августа 2017 10:10
Сообщение #22
|
Не, я пытался использовать getdir(serial corpse), и как я протестировал, ку да бы чар не смотрел, и где бы не был относительно трупа, результат был один и тот же. Следовательно я сделал вывод, что он показывает в каком направлении лежит труп, ну типа головой на восток. |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
18 августа 2017 00:10
Сообщение #23
|
Последний вариант: 1. Чеклаг убран, работает быстрее, если из-за лагов не порезал, предусмотрено повторное действие. 2. Диагональ больше 1 тайла, тоже не режет, труп не игнорит. Работал стабильно 3 часа фарма. Sub Looting() UO.AddFindList('loot', 0x0F3F) ; arrow UO.AddFindList('loot', 0x1078) ; pile of hides UO.AddFindList('loot', 0x0EED) ; golden coins var Ser if UO.FindType(0x2006, -1, 'ground', 2) <> '' then Ser=uo.GetSerial('finditem') if UO.GetDistance(Ser) <= 2 && coord(Ser) then if not UO.WaitingForJournalText(Now(), 500, "You can't") && UO.Count(Nozhik) > 0 then UO.WaitTargetObject(Ser) UO.UseType(Nozhik) if not UO.WaitingForJournalText(Now(), 500, "You skin|You carve") then UO.Print( 'Повторно режим!' ) UO.WaitTargetObject(Ser) UO.UseType(Nozhik) Wait(500) end if UO.UseObject(Ser) Wait(200) end if UO.FindList('loot', Ser) While UO.FindCount(finditem) > 0 && UO.GetDistance(Ser)<=2 UO.MoveItem('finditem', -1, LootPack) wait(200) UO.FindList('loot', Ser) Wend UO.Print( 'Залутал!!!' ) UO.Ignore(Ser) else uo.print('Not skin') endif end if end sub Sub coord(id) var tX = str(uo.getx('self')-uo.getx(id)) var tY = str(uo.gety('self')-uo.gety(id)) if (val(tX)==-2 && val(tY)==-2) || (val(tX)==2 && val(tY)==-2) || (val(tX)==2 && val(tY)==2) || (val(tX)==-2 && val(tY)==2) then return 0 else return 1 endif endsub |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
18 августа 2017 09:09
Сообщение #24
|
Если работает то конечно ничего но пару мест можно пооптимальнее расписать: UO.UseObject(Ser) Wait(200) на timemove=UO.Timer() uo.useobject(Ser) repeat wait(lootwait); 100 until (UO.GetSerial(Ser)<>uo.GetSerial('lastcontainer') && uo.GetSerial('lastcontainer')<>'0xFFFFFFFF') || timemove+10>UO.Timer() || Uo.GetDistance(Ser) <= LootDist И вот тут паузу: UO.FindList('loot', Ser) While UO.FindCount(finditem) > 0 && UO.GetDistance(Ser)<=2 UO.MoveItem('finditem', -1, LootPack) wait(200); <----- с такой скоростью не слутишь а будешь попусту гонять цикл и дергать предмет UO.FindList('loot', Ser) Wend я примерно так расписал: timemove=UO.Timer() uo.MoveItem(itemID,0,uo.getGlobal('LootBag')) repeat wait(lootwait) until UO.ContainerOf(itemID)<>uo.getGlobal('LootBag') || timemove+30>UO.Timer() || Uo.GetDistance(corpse) <= LootDist Ждать пока контейнер предмета не равен целевому контейнеру куда перемещаешь либо три секунды либо не отбежал от трупа. Как только предмет переместился - цикл скидывается. И на предмет тоже лучше константу повесить. Если учесть что в среднем предмет двигается за 0,6 секунды то вполне может прилететь какой нибудь новый finditem и скрипт будет двигать новый объект который может находиться где вне трупа. |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
18 августа 2017 19:23
Сообщение #25
|
Отличные предложения, динамические паузы будут кстати, и константа тоже не лишней будет. Но перемещение между контейнерами как по мне, слишком медленновато, я так понимаю ускорить не вариант, это настройка сферы? |
|
|
|
Сообщений: 1043 Рег. 18.06.2011 |
18 августа 2017 20:20
Сообщение #26
|
По дефолту на сфере 300 мсек. Если не изменяет память то Хосан сделал 600 для всех и 300 для трешера Мы как то с другом даже хотели написать скрипт когда трешер бегал ботом сзади и собирал лут за лучниками :) |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
19 августа 2017 09:45
Сообщение #27
|
Вариант с оптимизацией пауз при луте и открытии трупа. 2 часа фарма, работает как часы. Скорость лута невооруженным взглядом стала выше. Sub Looting() UO.AddFindList('loot', 0x0F3F); arrow UO.AddFindList('loot', 0x1078); pile of hides UO.AddFindList('loot', 0x0EED); golden coins var Ser, ItemID, TimeMove var LootWait = 100 ; время в цикле динамической паузы лута var LootDist = 2 ; расстояние лута трупа if UO.FindType(0x2006, -1, 'ground', LootDist) <> '' then Ser=uo.GetSerial('finditem') if UO.GetDistance(Ser) <= LootDist && coord(Ser) then if not UO.WaitingForJournalText(Now(), 500, "You can't") && UO.Count(Nozhik) > 0 then UO.WaitTargetObject(Ser) UO.UseType(Nozhik) if not UO.WaitingForJournalText(Now(), 500, "You skin|You carve") then UO.Print( 'Блин!!! Режем еще раз' ) UO.WaitTargetObject(Ser) UO.UseType(Nozhik) Wait(500) end if TimeMove=UO.Timer() UO.UseObject(Ser) repeat wait(LootWait) until (UO.GetSerial(Ser)<>uo.GetSerial('lastcontainer') && uo.GetSerial('lastcontainer')<>'0xFFFFFFFF') || TimeMove+10>UO.Timer() || Uo.GetDistance(Ser) <= LootDist end if UO.FindList('loot', Ser) While UO.FindCount('finditem') > 0 && UO.GetDistance(Ser)<=LootDist; Пока количество найденного больше 0 ItemID = uo.GetSerial('finditem') TimeMove=UO.Timer() UO.MoveItem(ItemID, -1, LootPack); Забираем найденное в пак repeat wait(LootWait) until UO.ContainerOf(ItemID)<>uo.GetSerial(LootPack) || TimeMove+20>UO.Timer() || Uo.GetDistance(Ser) <= LootDist UO.FindList('loot', Ser) Wend UO.Print( 'Залутано!!!' ) UO.Ignore(Ser) else uo.print('НЕ ПОРЕЗАЛ!!!') endif end if end sub Sub coord(id) var tX = str(uo.getx('self')-uo.getx(id)) var tY = str(uo.gety('self')-uo.gety(id)) ;UO.Print(tX+', '+tY) if (val(tX)==-2 && val(tY)==-2) || (val(tX)==2 && val(tY)==-2) || (val(tX)==2 && val(tY)==2) || (val(tX)==-2 && val(tY)==2) then return 0 else return 1 endif endsub Желающие могут добавить после UO.Ignore(Ser) еще UO.Hide(Ser), для скрытия трупа, у меня он стоит в дополнительном скрипте. |
|
|
|
18 сентября 2017 00:32
Сообщение #28
|
|
vovan, А где прописан ножик, контейнер и т.д.? точно полный скрипт? и у меня инжа почему-то этот скрпит не видит |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
18 сентября 2017 01:05
Сообщение #29
|
Пропиши в начале скрипта до всех sub VAR Nozhik = '0x0EC4';0x0F51 - dagger, 0x0EC2 - cleaver, 0x0EC4 - skinning knife, 0x13F6 - Butcher Knife VAR LootPack = '0x40B61574'; Сумка для лута укажи свой ID сумки для лута, если ее нет то указать backpack а чтобы скрипт был видет поменяй заглавную Sub на маленькую sub |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
18 сентября 2017 06:24
Сообщение #30
|
Это сткрипт для хоткея по этому заглавная S и по этому инжа «не видит» :) |
|
|
|
18 сентября 2017 10:40
Сообщение #31
|
|
чуть его доработал. Спасибо огромное, отличный скрипт |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
18 сентября 2017 11:56
Сообщение #32
|
vovan молодец, почти сам все сделал. |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
18 сентября 2017 15:43
Сообщение #33
|
Ты мне льстишь. Это результат совместных трудов, и Mirage внес существенный вклад в конечный результат. |
|
|
|
Сообщений: 13 Рег. 4.05.2017 |
22 сентября 2017 23:49
Сообщение #34
|
в зомби скрипте же есть все нужные скрипты на лут ! |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
23 сентября 2017 09:11
Сообщение #35
|
Все верно. Но этот отличается от тех что там есть. |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
23 сентября 2017 20:40
Сообщение #36
|
End of the game, Ты не считаешь что лучше разобраться самому чем тупо пользоваться непонятными скриптами? :) Даже мне, не плохо разбирающемуся в скриптах инжи иногда тяжело с наскока читать скрипты Зомбика. Тем более что там для общего пользования а тут уже более узконаправленный с дополнительными условиями. Если есть возможность и желание то лучше писать своё (в крайнем случае пользуясь доступными вариантами для костяка и обучения). Так проще будет что то поменять при необходимости. |
|
|
|
Сообщений: 1 Рег. 9.05.2016 |
28 сентября 2017 10:29
Сообщение #37
|
все работает супер |
|
|
|
Сейчас: 23 ноября 2024 01:41 |