Сталкнулся с такой проблемой: после первого запуска некоторых скриптов на крафт начинаются постоянные 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
|