Page 1 of 1

резка трупа

Posted: 2010-11-10 17:35:25
by Gromiz
Добрый день!

Ранее использовал скрипт с командой "lascorpse" для резки трупа, все хорошо работает, но когда убиваешь подряд несколько мобов, то скрипт естественно режет только последнего убитого(даже не открывая трупа), остальных приходилось резать "ручками"
- дабл клик на даггер и потом на тело(главное попасть - не всегда с первого раза). Выходом из положения нашел комманду по последнему контейнеру, но что берут сомнения в правильности и скрипта и его влияние на вылет из игры:

Code: Select all

sub POREZ()
  uo.Set('finddistance','3')
  uo.WaitTargetObject('lastcontainer')
  uo.usetype('0x0F52','0x0000')
end sub


сей скрипт можно использовать или возможен другой гибкий вариант?

Re: резка трупа

Posted: 2010-11-11 09:29:45
by Mirage
у меня вот так:

Code: Select all

Sub REZ()
   var body = '0x2006'
   var dagger = '0x0F51'
   var corpse
   UO.Set('quiet','1')
   ;uo.ignorereset()
   uo.set('finddistance', '3')
   UO.filterspeech('clear')
   UO.filterspeech('add','[Surprize ! Fast loot detected!]')
   UO.filterspeech('add','[Зафиксирована ловкость рук]')
   UO.filterspeech('on')
   uo.findtype(body, -1, 'ground')
   if uo.findcount() and Uo.GetDistance( 'finditem' ) < 3  then
      var x = uo.GetGraphic(uo.ObjAtLayer('Lhand'))
      var y = uo.GetGraphic(uo.ObjAtLayer('Rhand'))
      uo.warmode(0)
      wait(500)
      corpse = uo.getSerial("finditem")
      UO.WaitTargetObject(corpse)
      UO.UseType(dagger)
      wait(1000)
      uo.Equipt('Lhand',x)
      uo.Equipt('Rhand',y)
      Loot()
      uo.warmode(1)
   endif
   UO.Set('quiet','0')
end sub


в луталке после оббирания прописаны 2 строки
UO.Hide(corpse)
UO.Ignore(corpse)
Так что при запуске резки после облутивания каждый раз будет резаться другой труп.

Re: резка трупа

Posted: 2010-11-11 11:14:54
by Gromiz
автохайд не возможен(на данный момент), т.к. в трупе иногда появляются вещи, которые еще в луталке не указаны.
так их потерять можно.

мой вариант в принципе работает, а хайд сам на тела бросаю, если они наложились друг на друга.


просто, при таком значении ( uo.WaitTargetObject('lastcontainer') - заместо трупа) какие-нибудь конфликты возможно?

Re: резка трупа

Posted: 2010-11-11 11:34:52
by Mirage
Возможные варианты проблемы в не моем скрипте:
1) у тела TYPE и ID один, у порезанного тела (костей человеческих) другие. Если лутать НЕ мобов то будет глюк.
2) часто на шардах если тело открыто и его порезать окошко лута закрывается - придется юзать тело опять чтобы полутить.
3)если ты охотишься не один (на экране еще один охотник/ПК) ты убиваешь когото и собираешься нажать кнопку резки/лута и тут в углу экрана ктото умирает то последний контейнер будет в углу экрана а не рядом с тобой.
Если будешь тело игнорить то ловушка на ластконтейнер будет либо 0xfffffffff либо ты сам =>

Code: Select all

if uo.getSerial('lastcontainer')<>'my' then
loot
endif

Можно так частично обезопаситься

ХЗ Мне всегда было проще организовать поиск на земле тела чем оперировать малопонятными и слетающими командами тило ласткорпс и ластконтейнер. Но это мое ИМХО.


В моем варианте резки и лута я сделал по следующему принципу
ищу труп
режу труп и открываю его
ИГНОРИРУЮ все не нужные мне предметы
лутаю НУЖНЫЕ мне предметы
лутаю все оставшиеся предметы.
прячу труп и игнорирую его.

Отдельно список игнора и список нужных предметов которые лутаются в первую очередь.

Re: резка трупа

Posted: 2010-11-14 08:20:44
by Gromiz
супер, вроде все пашет и без ошибок.

добавил:
проверку на даггеры для резки
и сообщение, если тел для резки нет
Вроде все хорошо.

Code: Select all

sub POREZ()
   var body = '0x2006'
   var corpse
   uo.set('finddistance', '3')
   uo.findtype(body, -1, 'ground')
   if uo.findcount() and Uo.GetDistance( 'finditem' ) < 3  then
      wait(500)
      corpse = uo.getSerial("finditem")
      uo.UseObject(corpse)
      UO.WaitTargetObject(corpse)
if UO.Count('0x0F51','0x0000') || UO.Count('0x0F52','0x0000')  then
     if UO.Count('0x0F51','0x0000') then
      UO.UseType('0x0F51','0x0000')
     else
      UO.UseType('0x0F52','0x0000')
      endif
      else
    UO.Print('Gde Dagger?')
     return
    endif
    uo.DeleteJournal()
          wait(1000)
#      Loot1() ; запускаю другой кнопкой при необходимости, а так можно автоматом
#     UO.Hide(corpse) ; запускаю другой кнопкой при необходимости, а так можно автоматом
      UO.Ignore(corpse)
      ELSE
         uo.print(' No Corpse ')   
   endif
end sub


благодарю, твой скрипт лучше )))