Yoko

All sides of Injection
It is currently 2024-03-28 23:19:32

All times are UTC+02:00




Post new topic  Reply to topic  [ 1 post ] 
Author Message
PostPosted: 2006-12-10 20:05:03 
Offline
User avatar

Joined: 2006-11-06 21:45:23
Posts: 137
Сталкнулся с такой проблемой: после первого запуска некоторых скриптов на крафт начинаются постоянные failed, при том что стоит динамическая пауза, а перед паузой DeleteJournal. Устанавливал дополничельную паузу, но почему-то инжект упорно игнорировал эти паузы после первого запуска скрипта. Проблема решалась только перезапуском скрипта.
Не думаю что проблема в моих скриптах, так как они принципиально ничем не отличаются от того что пишут другие.
И решил я написать функцию которая устанавливала бы паузу после нескольких подряд идущих fail и вставить ее вызов сразу же после динамической паузы.
И, о чудо, моя проблема разрешилась. Может эта функция еще кому-то поможет, или подскажите мне как боротся с failed другим способом.
Code:
      # Версия YokoInjection: 505.18 VeNdOr
      # Автор: GAUHAR
SUB InterruptFizzles(fraza,pause)
   # ПрерватьЗафизливание('текст',число)
   # fraza - сообщение которое постояно выскакивает при беспрерывно
   #         идущих физзлах. Пример такого сообщения:
   #         ИмяИгровогоПерсонажа: You fail to create the item.
   #         В переменной можно указывать часть сообщения или слова
   #         (например: 'fail' или 'You fa')
   # pause - пауза в миллисекундах, необходимая для завершения действия,
   #         чтобы прервать физзлы.
   VAR i
   VAR flag = 0                # Флаг для физзлов.
   VAR text = UO.Journal(0)
   VAR MaxCounterFizzles = 5   # Устанавливаем максимальное количество
                               # подряд идущих физзлов после которых
                               # делается пауза (можно изменять).
   VAR CounterFizzles = 0      # Счетчик физзлов.
   CounterFizzles = CounterFizzles + val(UO.GetGlobal('Cycl'))
   # Ищим часть сообщения в последнем сообщении.
   for i = 0 to len(text)
      # Почему здесь len(text), а не ( len(text) - len(fraza) - 1 ),
      # потому что если UO.Journal(0) в журнале нет, то цикл FOR...NEXT
      # будет от i=0 до -x и тогда произойдет зацикливание, а потом и
      # вылет инжи с клиентом.
      if mid(text,i,len(fraza)) == fraza then
         flag = 1              # Найден физзл.
         i = len(text)
      endif
   next
   # Считаем количество идущих подряд физзлов, если физзла не было,
   # то счетчик обнуляется.
   if flag == 1 then
      CounterFizzles = CounterFizzles + 1
      UO.SetGlobal('Fizzles',CounterFizzles)
    else
      UO.SetGlobal('Fizzles',0)
   endif
   # Если счетчик физзлов достиг максимума делаем паузу.
   if val(UO.GetGlobal('Fizzles')) >= MaxCounterFizzles then
      UO.Print("-= Пауза " + str(pause/1000) + " cек. =-")
      wait(pause)
      UO.SetGlobal('Fizzles',0)
      UO.Print("-= Пауза закончилась =-")
   endif
endsub

Если кому захочется протестить функцию, то:
Code:
############ FIZZLE, FAIL, etc. ############
# Для теста функции InterruptFizzles бросить в бекпак персонажа
# немного инготов и инструмент тинкера.
# Будем пытаться делать бутылки. А так как крафт не будет полностью
# завершаться, то будут идти постоянные failed.
sub TEST()
   while 1 == 1
      if UO.WaitingMenu() then
         UO.CancelMenu()
      endif
      UO.DeleteJournal()
      UO.WaitMenu('Tinkering','Tools','Tools','empty bottle')
      UO.UseType('0x1EBC')
      # Небольшой wait и пропущенная динамическая пауза сделаны специально.
      wait(1000)
      InterruptFizzles('fail',6000)
   wend
endsub


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1 post ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 12 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited