Page 1 of 1

Непрерывный контроль журнала

Posted: 2006-06-21 07:39:40
by insider
Возникла такая проблема, надо непрерывно контрольровать записи появляющиеся в журнале и свевременно на них реагировать.
Пытался написать скрипт типа:

Code: Select all

while true<>false
 if uo.injournal("---") then
  [делаем что-то там]
  wait(1000)
  uо.deletejournal()
 else
  [делаем что-то там
wend

Даже при проверке журнала раз в секунду начинаются злые торможения в системе. Это как-то можно обойти?

Posted: 2006-06-21 08:41:04
by Edred
viewtopic.php?t=3491

В этом случае действия внутри if...endif не выполняются, и цикл while...wend становится пустым, то есть в нем не производится никаких действий. Скриптовый модуль инжекта устроен так, что в этом случае вы получите 100%-загрузку процессора вашего компьютера (зависнет) и, быстрее всего, креш игры или системы. Как избежать такого конца? Очень просто. Предусмотреть чтобы в скрипте всегда какие-нибудь действия производились. В данном случае вполне достаточно добавить Else


Проверь внимательно свой скрипт. Где-то у тебя пустой цикл.

Posted: 2006-06-22 07:17:32
by insider
Edred wrote:https://yoko.uokit.com/viewtopic.php?t=3491

Проверь внимательно свой скрипт. Где-то у тебя пустой цикл.


В том-то и дело, что пустых циклов нет. Все предусмотрено. Но загрузка получается хоть и не 100%, но система тормозит порядочно.

Posted: 2006-06-22 09:22:17
by Scripts Writer

Code: Select all

while true<>false 
 if uo.injournal("---") then
  [делаем что-то там]
  wait(1000)
  uо.deletejournal()
 else
  [делаем что-то там
wend


А закрыть цикл if? =\

Posted: 2006-06-22 13:58:39
by klonuk
я делала так

Code: Select all

repeat 
if UO.InJournal("Что ждем") then
     действия
        else
UO.DeleteJournal()
CheckLag()
endif
until Uo.Dead()       



хз работало на ура ) :wink:

Posted: 2006-06-22 14:17:29
by DerMeister =)
Хмм... ты с чеклагом стока трафа сожреш, что скрипт золотой окажется :wink:
ЗЫ: Я сам на анлиме, мне пофиг.

Posted: 2006-06-22 14:19:12
by klonuk
DerMeister =) wrote:Хмм... ты с чеклагом стока трафа сожреш, что скрипт золотой окажется :wink:
ЗЫ: Я сам на анлиме, мне пофиг.


ЗЫ: не на анлиме но но тариф на стока дешвевый что мне как то =)

Posted: 2006-06-22 14:20:04
by klonuk

Code: Select all

repeat 
if UO.InJournal("Что ждем") then
     действия
        else
UO.DeleteJournal()
wait(100)
endif
until Uo.Dead()       


если жалко денег то вот )

Posted: 2006-06-22 14:32:48
by DerMeister =)
=_)
АГА, бюджетный вариант :P :P

Posted: 2006-06-22 14:59:19
by Edred
insider wrote:В том-то и дело, что пустых циклов нет. Все предусмотрено. Но загрузка получается хоть и не 100%, но система тормозит порядочно.


Пустой цикл - это не цикл, в котором ничего нет. В нем вполне могут быть действия, которые не содержат внутренних пауз в инжекте. Пример таких команд - работа с журналом, использование объектов и т. д. Проверить себя просто: добавить в конец цикла wait(50) - если нагрузка на проц резко снизилась - значит был пустой цикл.

Posted: 2006-06-23 08:32:44
by insider
Короче, скрипт вот он. Если в тределах визимости кастуют празайз, то надо жрать травленую рыбу.
Проверка журнала раз в секунду. В таком варианте он не реазирует на условные фразы. Где я туплю?

Code: Select all

sub main()
    repeat
    if UO.Injournal("AN EX POR") then
      UO.UseType(0x097B)
                  wait(1000)
                  UO.Deletejournal();
                 else
     if UO.Injournal("VAS LOR") then   
                    UO.UseType(0x097B)
                    wait(1000)
                    UO.Deletejournal();
                   else
                    wait(1000)
                    UO.Deletejournal();
     endif
                endif
   until Uo.dead()
end sub

Posted: 2006-06-23 09:32:13
by Edred
"Причесал":

Code: Select all

sub main()
   msg1 = "AN EX POR"
   msg2 = "VAS LOR"
   repeat
      if UO.Injournal(msg1 + '|' + msg2) then
         UO.UseType(0x097B)
      endif
      wait(1000)
      UO.Deletejournal()
   until Uo.dead()
end sub


Если все равно не работает - проверяй написание заклов. Команды работы с журналом чувствительны к регистру. Набери
,showjournal 100
после кастов и посмотри, что именно попало в журнал.

Posted: 2006-06-25 20:45:08
by insider
Edred wrote:"Причесал":

Если все равно не работает - проверяй написание заклов. Команды работы с журналом чувствительны к регистру. Набери
,showjournal 100
после кастов и посмотри, что именно попало в журнал.


Регистр я с самого начала проверял. Скрипт работает, но только в том случае, если ключевые фразы были в журнале _до_ запуска скрипта. Если в процессе выполнения скрипта эти фразы появляются, то реакции никакой нету.
Жаль, что нету отладки...

Posted: 2006-06-25 20:53:14
by DerMeister =)
Edred wrote:"Причесал":

Code: Select all

sub main()
   msg1 = "AN EX POR"
   msg2 = "VAS LOR"
   repeat
      if UO.Injournal(msg1 + '|' + msg2) then
         UO.UseType(0x097B)
      endif
      wait(1000)
      UO.Deletejournal()
   until Uo.dead()
end sub



Это не "причёска", а "полировка"...

Почему сначало ждём, а потом делетим журнал? Естессьно работать не будет...

ЗА: кароч поменяй местами:

Code: Select all

wait(1000) 
UO.Deletejournal()

на

Code: Select all

UO.Deletejournal()
wait(1000)

и всё будет ок... :wink:

Posted: 2006-06-25 20:53:43
by insider
Проблема решилась неожиданно. Пришлось делать через заднее место, а именно, использовать дополнительный флаг, который отмечал появление в журнале ключевых фраз. Финальный вариант выглядит так:
CENSORED

2 DerMeister =)
туплю. Действительно, всего-то надо было поменять ))

Сразу оговорюсь, скрипт не причесан в плане выравнивания строк; кое-где можно оптимизировать код (убрать лишние строки) и прочее.

Засим прошу Модераторов закрыть тему

Posted: 2006-06-25 20:55:40
by DerMeister =)
insider wrote:Проблема решилась неожиданно. Пришлось делать через заднее место, а именно, использовать дополнительный флаг, который отмечал появление в журнале ключевых фраз. Финальный вариант выглядит так:

Code: Select all

sub main() 
var   msg1 = "AN EX POR"
var   msg2 = "VAS LOR"
var   tmp = False
   repeat
      if UO.Injournal(msg1 + "|" + msg2) then
         tmp = True
         if tmp then
            UO.UseType(0x097B)
            Uo.Deletejournal();
            tmp = false 
          endif
         else
          tmp = false
      endif
      wait(1000)
   until Uo.dead()
end sub


Сразу оговорюсь, скрипт не причесан в плане выравнивания строк; кое-где можно оптимизировать код (убрать лишние строки) и прочее.

Засим прошу Модераторов закрыть тему


Убей ся ап стену... нахер в соседний магазин через америку ездить??? :wink: читай на 1 пост выше, я нашел в чём была фигня...

Posted: 2006-06-25 20:58:45
by Grin
нее вы все кренделя...
Обхеснити за чем каждую секунду нужо чистить журнал???

Code: Select all

sub main() 
var   msg1 = "AN EX POR"
var   msg2 = "VAS LOR"
   repeat
      if UO.Injournal(msg1 + "|" + msg2) then
         UO.UseType(0x097B)
         Uo.Deletejournal()
      endif
      wait(1000)
   until Uo.dead()
end sub

Posted: 2006-06-25 21:04:13
by insider
Все. Закрывайте тему.
Всем спасибо за помощь. Скрипт-таки написан.
©losed

Posted: 2006-06-25 21:05:22
by DerMeister =)
Ты прав как всегда :wink:

ОФФТОП:
Когда меня на мирке разбанят то?