помогите с эвакуационным скриптом плз :)

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
plotney
Posts: 5
Joined: 2010-11-15 06:54:09

помогите с эвакуационным скриптом плз :)

Post by plotney »

смысл скрипта таков:
если жизни не полные то он проверяет: бинты, еду, топоры, вес, атакуют-ли, переменную hometime, дохлость.
проблема такова:
когда жизни не полные, он начинает считать. бинтов выдает 27, еды 26, топоров 25. на самом деле в паке 300 бинтов, 20 еды, 5 топоров. после первого круга, бинтов уже 24, еды 23, и 22 топора. так делает пока бинтов не становиться меньше 15, реколиться домой, пишет что проблема с бинтами, выходит из уо.

в чем проблема? все никак немогу понять


Code: Select all

hometime=0
sub gohome_reags()
   var exit=0
   while exit==0
      while not uo.life == uo.str
         uo.ignore('finditem')
         uo.findtype('bandages',-1,2)
         if uo.findcount() <15 then
            uo.exec("terminate autoLumber")
            wait(300)
            uo.disarm()
            uo.cast('Recall',runebook)
            wait(5000)
            uo.msg('No bandages')
            exit=1
         else
            uo.print('Bandages:'+str(uo.findcount()))
         endif
         
         uo.ignore('finditem')
         uo.findtype('food',-1,2)
         if uo.findcount() <1 then
            uo.exec("terminate autoLumber")
            wait(300)
            uo.disarm()
            uo.cast('Recall',runebook)
            wait(5000)
            uo.msg('No food')
            exit=1
         else
            uo.print('Food:'+str(uo.findcount()))
         endif
      
         uo.ignore('finditem')
         uo.findtype('hatchet',-1,2)
         if uo.findcount() <1 then
            uo.exec("terminate autoLumber")
            wait(300)
            uo.disarm()
            uo.cast('Recall',runebook)
            wait(5000)
            uo.msg('No tools')
            exit=1
         else
            uo.print('Tools:'+str(uo.findcount()))
         endif
      
         if uo.weight >20000 then
            uo.exec("terminate autoLumber")
            wait(300)
            uo.disarm()
            uo.cast('Recall',runebook)
            wait(5000)
            uo.msg('Overweight')
            exit=1
         endif
      
         if uo.injournal('attacking') then
            uo.exec("terminate autoLumber")
            wait(300)
            uo.disarm()
            uo.cast('Recall',runebook)
            wait(5000)
            uo.msg('Under attack!')
            exit=1
         
         endif
      
         if hometime==1 then
            uo.exec("terminate autoLumber")
            wait(300)
            uo.disarm()
            uo.cast('Recall',runebook)
            wait(5000)
            uo.msg('Enough for today...')
            exit=1
         endif
      
         if uo.dead() then
            uo.moveon()
            uo.showjournal(50)
            exit=2
         endif
         wait(3000)
         wend
   wend
   
   if exit==1 then
      uo.closeuo()
   endif
end sub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: помогите с эвакуационным скриптом плз :)

Post by Mirage »

Команда uo.msg('Overweight') ПРОИЗНОСИТ это слово. Тоесть все окружающие будут видеть что у тебя перевес.

для стакующихся предметов (еда, отмычки, банки пустые, реги, бинты) используется
Str(UO.GetQuantity('finditem'))

Для не стакующихся (топоры, лопаты, кирки, полные бутылки)
Str( UO.FindCount())

PS Я слышал частая передергивался UO.Print вызывает краши. Не знаю так ли это но я в своих скриптах использую"

Code: Select all

UO.FindType( item, -1, Container)
uo.charprint(printcolour,'Банок в банке: '+Str(UO.GetQuantity('finditem')))

UO.FindType( item , -1, Container)
uo.charprint(printcolour,'Кинжалов в мешке: '+Str( UO.FindCount()))
plotney
Posts: 5
Joined: 2010-11-15 06:54:09

Re: помогите с эвакуационным скриптом плз :)

Post by plotney »

Да, я в курсе, оставил на так для отладки, потом поменяю.

тоесть в иф условие вставлять Str(UO.GetQuantity('finditem')) и Str( UO.FindCount()) соответственно?
plotney
Posts: 5
Joined: 2010-11-15 06:54:09

Re: помогите с эвакуационным скриптом плз :)

Post by plotney »

всеравно правильно считать он не хочет. без понятия что с ним делать (
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: помогите с эвакуационным скриптом плз :)

Post by Mirage »

Ну во-первых ты алгоритм скрипта не правильно строишь.
Если бы твой скрипт работал то получилось так:
У тебя меньше 15 бинтов - чар улетает на базу и выставляет exit=1, ЗАТЕМ проверяет еду. И если ее мало то ОПЯТЬ летит на базу.
ИМХО проще сделать 1 условие при котором чар полетит на базу:

Code: Select all

 if uo.count('bandages')<15 || uo.count('eda')<15 ||uo.count('topor')<1 then
летим на базу

Во вторых при проверке сообщения в журнале ты не используешь стирание журнала => проверка будет срабатывать ВСЕГДА.
В третьих что за uo.ignore('finditem') понатыканный везде? ЧТО именно ты игноришь - ты же даже ничего не находишь перед игнорированием этого чегото.
В четвертых

Code: Select all

   uo.cast('Recall',runebook)
   wait(5000)

А если филзанет? Делай выносную функцию с проверкой на филз и "улетел\не улетел".

Ну и в последних зачем пробовать делать салат не умея пользоваться ножом? Тестирую куски скрипта по отдельности, потом склеивай в 1 скрипт или в выносные процедуры.

К слову

Code: Select all

sub gohome_reags()
var bandages = '0x0E21'
        uo.findtype(bandages,-1,'my')
         if UO.GetQuantity('finditem') < 15 then
            uo.msg('No bandages')
         else
            uo.print('Bandages:'+Str(UO.GetQuantity('finditem')))
         endif
end sub
прекрасно работает.
Post Reply