Проверка резки трупа |
Проверка резки трупа |
Сообщений: 275 Рег. 10.03.2017 |
13 августа 2017 09:32
Сообщение #1
|
Имеется скрипт лута с резкой. Периодически, по тем или иным причинам, пропускает резку трупа и лутает, с последующим игнором. Есть идея добавить что то типа проверки резки, но есть проблемы, не все трупы одинаково режутся, где то кожа появляется, где то нет, где то крови нет и т.п. Может кто подскажет в каком направлении двигаться? Сам скрипт Sub Looting1() UO.AddFindList('loot', 0x0F3F) ; arrow UO.AddFindList('loot', 0x1078) ; pile of hides UO.AddFindList('loot', 0x0EED) ; golden coins var count=0 var i,kol,Ser if UO.FindType(0x2006, -1, 'ground', 2) <> '' then Ser=uo.GetSerial('finditem') if not UO.WaitingForJournalText(Now(), 500, "You can't") && UO.Count(Nozhik) > 0 then UO.WaitTargetObject(Ser) checklag() UO.UseType(Nozhik) Wait(500) UO.UseObject(Ser) Wait(200) end if UO.FindList('loot', Ser) While UO.FindCount(finditem) > 0 && UO.GetDistance(Ser)<=2 ; Пока количество найденного больше 0 UO.MoveItem('finditem', -1, LootPack) ; Забираем найденное в пак wait(200) UO.FindList('loot', Ser) Wend UO.Print( 'The loot was finished' ) UO.Ignore(Ser) end if end sub |
|
|
|
13 августа 2017 10:19
Сообщение #2
|
|
Когда ты режешь труп, появляется сообщение: |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
13 августа 2017 11:48
Сообщение #3
|
Премного благодарен, буду реализовывать и тестировать. |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
14 августа 2017 06:10
Сообщение #4
|
Организовал повтор резки, стало получше, но иногда дальние трупы просто не достает. Не понятно, вроде на 2 тайла должен резать, иногда вроде режет иногда нет. На 1 тайл делал, не удобно, слишком узко. |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
14 августа 2017 09:49
Сообщение #5
|
Специфика 6 клиента что он не квадратов вокруг чара достает а кругом. Вообще чар достает на 3 тайла, но диагональные точки только на 2. не знаю как сейчас но раньше у меня резал почти всегда (по крайней мере на пауках отрабатывал). Возможно сообщение проверка стоит расширить. Sub REZall(Type_Cleaver,Colour_Cleaver); в функцию залетали параметры для нуби или простого кливера uo.findtype(body, -1, 'ground', LootDist); LootDist = 2 тайла, задана выше в var if uo.findcount() then corpse = uo.getSerial("finditem") if CheckFlag('Carve') then UO.DeleteJournal() UO.WaitTargetObject(corpse) UO.UseType(Type_Cleaver, Colour_Cleaver) LastTimer=UO.Timer() repeat wait(100) until UO.InJournal('ou carve') or UO.Timer()>LastTimer+2; пауза ожидания сообщения порезки или 2 секунды endif if UO.Weight > str(uo.str*3.66) then Loot(corpse) else uo.charprint('self', printcolour, 'Перегруз!') endif endif end sub |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
14 августа 2017 17:26
Сообщение #6
|
Ну я думал с паузой, в принципе можно попробовать. Но только тогда нужно через 1 сек сообщение, типа не порезал, чтобы подвинуться к трупу, если не достает и дорезать его пока не проигнорился. Но вот удобно ли будет так, надо потестировать. |
|
|
|
14 августа 2017 18:05
Сообщение #7
|
|
братишка руками реж и не прогадаешь! |
|
|
|
Сообщений: 1043 Рег. 18.06.2011 |
14 августа 2017 20:35
Сообщение #8
|
vovan, Ты реально заморачиваешься :) Ну не порезал ресендни и порежб еще раз :) |
|
|
|
Сообщений: 6208 Рег. 27.11.2009 |
14 августа 2017 21:36
Сообщение #9
|
Цитата: vovan UO.WaitTargetObject(Ser) checklag() UO.UseType(Nozhik) Не слушай никого, просто переставь чеклаг после юзтайпа: UO.WaitTargetObject(Ser) UO.UseType(Nozhik) checklag() Вот и весь фокус. У меня вот такой кусок скрипта: UO.waittargetobject(corpse) uo.usetype('0x1EBA') # 0x1EBA - victorinoxkit # 0x0EC3 - butcher wait(75) checklag() Никогда не бывает такого, чтобы труп не порезал. А дальность резки тут - по прямой и под небольшим углом = 2 тайла. По диагонали только 1 тайл. |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
15 августа 2017 07:57
Сообщение #10
|
С чеклагом надо попробовать, а вот с диагональю просто засада, именно она в куче мобов периодически видимо и выплывает. Если так, то тут начего не поделать, остается лишь добавть условие на игнор трупа, если не порезал то не игнорить. |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
15 августа 2017 08:57
Сообщение #11
|
Цитата: Ggthxbye А дальность резки тут - по прямой и под небольшим углом = 2 тайла. Перепутал с лутом :Р Я вообще без чеклага делаю. От него спама много на постоянно используемом действии. Можно заморочиться конечно проверкой на направление трупа - если труп находится в 20 доступных клеточках то режем. Если в 4 недоступных то пишем/подходим/вырубаем комп (нужное подчеркнуть). Но проще не заморачиваться ;) |
|
|
|
Сообщений: 6208 Рег. 27.11.2009 |
15 августа 2017 19:18
Сообщение #12
|
Цитата: vovan остается лишь добавть условие на игнор трупа Можно добавить проверку не на дистанцию, а на диагональ, мол если труп в 2-х тайлах по диагонали, то открывать, лутать и писать над головой "для резки сделайте шаг на 'NW' (тут направление), если дистанция изменилась до доступной для резки, то режет. Но это к Зомби лучше. |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
16 августа 2017 07:49
Сообщение #13
|
Проверку на диагональ на 2 тайла идея хорошая, только лучше не лутать их вообще, максимум сообщение какое нибудь. После лута в скрипте предусмотреть Hide трупа, и когда вся куча будет порезана и залутана и спрятана, останутся все остальные к которым надо подойти ближе. Буду пробовать придумать проверку на диагональ на 2 тайла. |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
16 августа 2017 11:46
Сообщение #14
|
Костыль, шамань. var test_id = '0x404DFB9A'; пофигуче на земле sub main() if UO.GetDistance(test_id) <= 2 && coord(test_id) then uo.print('Skin') else uo.print('Not skin') endif 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 |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
16 августа 2017 12:09
Сообщение #15
|
Спасибо!! Но почему костыль?? Правда у меня в голове был немного другой вариант, буду пробовать и твой и свой, потом отпишусь. |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
16 августа 2017 13:47
Сообщение #16
|
Костыль потому что помогает играть игроку у которого не очень получается играть :Р Свой вариант какой был, алгоритм опиши. |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
16 августа 2017 21:21
Сообщение #17
|
Ну почему не получается, все получается, просто немного бесит когда труп недорезается, приходится ножиком вручную тыкать, не люблю рутину, давно мысли роились доработать, вот решился. Мой вариант попробовать условие с uo.GetDir и UO.GetDistance в одном флаконе, если выполняется по диагональному ориентиру и расстоянию, то просто не резать. Когда все что порезанные захайдятся, останутся эти лежать, сразу видно куда перемещаться для следующей резки. Немного разгребусь с делами буду пробовать. |
|
|
|
Сообщений: 1043 Рег. 18.06.2011 |
16 августа 2017 21:32
Сообщение #18
|
через getdir мне кажется будет сложнее реализовать. Она показывает направление взгляда объекта не относительно чара а относительно мира. Тоесть объект повернут на северовосток. В моем варианте тоже есть небольшой косяк. Иногда (на 203 клиенте чаще) не верно отображаются координаты чара. Я добавлял resend. Хотя пока полчаса тестил скрипт вроде не сбивалось. Но если вдруг имей ввиду. Можно еще трековую стрелку прилепить для извращенного эстетизму. Типо того uo.track(tx,ty) wait(700) uo.track(0) на 0,7 секунды будет появляться стрелка указывающая на труп который лутишь :) PS ©Mirage |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
17 августа 2017 00:28
Сообщение #19
|
Исходя из описания функции getdir, она возвращает направление на объект с заданным сериалом, относительно чара. И лишь, без указания сериала показывает направления взгляда чара, относительно координат мира. Если я не правильно понял описание функции, тогда действительно будет сложнее. Но тут, я не уверен. Надо пробовать. |
|
|
|
Сообщений: 275 Рег. 10.03.2017 |
17 августа 2017 08:50
Сообщение #20
|
Я сильно ошибался, оказалось что getdir указывает направление положения трупа относительно координат мира. Ну тогда вариант предложенный Mirage, подходит как никогда лучше. Буду тестить. |
|
|
|
Сейчас: 23 ноября 2024 01:26 |