Injection 2014 !

General Injection issues

Moderators: Murderator+, Murderator

Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

1403.10

Список изменений:
    - Убрано ограничение на кол-во символов в Original Text в диалоге Replaces
    - Исправлено сохранение Replaces. Для корректной замены кастов необходимо в Original Text ставить пробел после текста каста
    - Изменено действие Nearest для комманд uo.FindType и uo.FindList. При Nearest равном -1 производится поиск по всему списку предметов, при удачном поиске в finditem и в return_value будет самый ближайший к персонажу предмет (при поиске на земле)
    - Исправлено изменение разрешения игрового окна УО. Теперь клиент запускается без ошибок и разрешение устанавливается согласно заданным параметрам
    - Исправлен краш на стадии входа в игру (при закрытии клиента на окне выборе сервера или выбора персонажа)
    - _msg работает с русским текстом (заглавные и прописные)
    - Исправлена работа Clear Memory. Теперь мир чистится правильно и без ошибок
    - Основная часть галок с вкладки Main собрана в отдельный список (пока только список)
    - Добавлена галка Linked Logs. При включенной галке на стадии входа в игру создает файл в папке %injection%\logs\log_%account%_%data%(%time).txt и пишет лог туда отдельно для каждой сессии. Включение/выключение этой галки уже в игре ни к чему не приведет, актуальна только до начала коннекта к серверу.
    - Исправлена работа Notoriety в коммандах uo.FindType и uo.FindList. Если кто-то обнаружил проблеммы с ней - забудьте.
    - Добавлен параметр Nearest в комманду uo.FindMan([Notoriety],[Distance],[Nearest]). Работает аналогично uo.FindType и uo.FindList. Так же исправлена Notoriety
    - На вкладке Skills кнопка Reset переименована в Refresh, удалена кнопка Req
    - Добавлена функция uo.InJournalBetweenTimes(Text,StartTime,[EndTime],[MaxLines/IgnoreCase])
    осуществляет поиск текста Text (фраза/набор фраз разделенных | ) в журнале за время от StartTime до EndTime
    Если EndTime не указано - берется текущее время
    MaxLines - количество строк в журнале, в котором производить поиск. Если указано -1 то поиск ведется без учета регистра
    Изменено время сообщения в журнале. Раньше оно сохранялось как Now()/100, теперь же просто Now(). Что повлекло изменения в uo.JournalTimer() если кто-то пользовался ею - обратите внимание.
    В Script.dll добавлена функция Now() - возвращает текущее время в мс. Вызывается без UO.*
    - Добавлены комманды:
    - uo.AddIgnoreList(ListName,Graphic,[Color]) - добавить тип,[цвет] в список игнорируемых типов с названием ListName
    - uo.DeleteIgnoreList(ListName,Graphic,[Color]) - удалить тип,[цвет] их списка игнорируемых типов с названием ListName
    - uo.ClearIgnoreList(ListName) - очистить игнорируемый список типов с названием ListName
    - uo.SelectIgnoreList(ListName) - выбрать игнор-лист для использования в коммандах uo.FindType и uo.FindList
    Если список не выбран - комманды поиска не будут игнорировать указанные в нем типы
    Для выключения списка игнора достаточно вызвать uo.SelectIgnoreList(-1) - тогда поиск будет производиться без учета игнор-листа
    uo.SelectIgnoreList можно вызвать 1 раз (в том же автостарте) и он будет учитываться поисковиками пока не выбрать другой список или не отключить список
    - Добавлена локализация Лаунчера и Инжекта. Файл с русским текстом прилагается
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Injection 2014 !

Post by Incorrect User »

Ой, еще же нужно было и
WaitJournalLine

function WaitJournalLine(StartTime : TDateTime; Str : String; MaxWaitTimeMS : Integer) : Boolean

ожидание появления строки в журнале
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

Incorrect User wrote:Ой, еще же нужно было и
WaitJournalLine

function WaitJournalLine(StartTime : TDateTime; Str : String; MaxWaitTimeMS : Integer) : Boolean

ожидание появления строки в журнале

А чем это хуже?)
Juicy Fruit wrote:- Добавлена комманда uo.WaitingForJournalText(MaxDelay,Text,[Equals],[IgnoreCase],[SkillName/ObjectID])
Работает по принципу uo.WaitingForMenu()
MaxDelay - время в мс за которое должно появиться сообщение
Text - текст, или наборы текста, разделенные символом "|"
Equals - 0 - поиск фрагмента в пришедшем сообщении, 1 - точное соответствие строк (стандартно 0)
IgnoreCase - 0 поиск с учетом регистра, 1 - поиск без учета регистра (стандартно 0)
SkillName/ObjectID - название скилла или ИД объекта для использования (если требуется)
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Injection 2014 !

Post by Incorrect User »

Не указывается время с которого начинать ждать. В этом случае не нужна очистка журнала в общем.
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

А uo.InJournalBetweenTimes тогда на что оО?
Проверить наличие в журнале через uo.InJournalBetweenTimes, если нет - то uo.WaitingForJournalText с текущего момента.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Injection 2014 !

Post by Incorrect User »

ненене, ты ен писал в стелсе мининг например? вот как все происходит

Code: Select all

repeat
   starttime:=Now;   
      Waittargettile('1341',i,j,mz);
      Usetype($0E85);
      WaitJournalLine(starttime,allmsg,10000);
until injournalbetweentimes(endmsg,starttime,now);
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Injection 2014 !

Post by Incorrect User »

То есть нам больше не нужно ни timer = uo.timer() + 10 и until uo.injournal(msg) or uo.timer() > timer и очистка журнала не нужна и тд и т.п
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

Incorrect User wrote:ненене, ты ен писал в стелсе мининг например? вот как все происходит

Code: Select all

repeat
   starttime:=Now;   
      Waittargettile('1341',i,j,mz);
      Usetype($0E85);
      WaitJournalLine(starttime,allmsg,10000);
until injournalbetweentimes(endmsg,starttime,now);

У меня работало и так

Code: Select all

      Usetype($0E85);
      WaitJournalLine(Now,allmsg,10000);
Задержки между вызовами функций нет, а пакет от сервера приходит через несколько мс после запроса +время на прием и отправку таргета и если руды там нет то и ответное сообщение.
Твой вариант правильный по логике, но по факту можно и просто юзануть эту функцию после юза кирки/лопаты без временной переменной.
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

Code: Select all

   uo.useobject(0x400906F2)
   uo.print(str(uo.WaitingForJournalText(200,'reach that')))
Сейчас проверил на объекте, до которого не может достать. 15/15 выдало что фраза получена)
В таких случаях можешь пока мою функцию заюзать, потом допилю туда старттайм.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Injection 2014 !

Post by Incorrect User »

А я как-то забыл про это все, помню что только удобно было, в прошлом году весной еще этот сьелс пытались пд ми потребности настроить с игорем, так как инжа падала со страшной силой, но так и ничего не вышло. получаетсянужно не только время starttime но и время сколько ждать сообщения. и уже забываем про всякие уотаймеры и очистки журнала. Макс делай это оно и есть я так понял.
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

На ближайшие недели 2-3 остановлю разработку, буду бороться с виндовскими ошибками.
Если что-то будет для фиксов за неделю - на выходных поправлю и выложу фиксы.
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

Incorrect User wrote:Кстати, сытость чара как-то можно узнать?
Только если сервер пришлет тебе это значение, а в пакетах не приходит.
Можно анатомию, или анимал лор заюзать на себя, или какой там скилл показывает на сколько сыт персонаж, смотреть на это сообщение и узнавать нужно ли тебе есть или нет, но это извращение)
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Injection 2014 !

Post by Incorrect User »

Ну что же, отлично, ждем продолжения. Ах да, еще напомню про реконнектор, опционально, если собирались такое делать, с запуском последнего скрипта.
VeL
Posts: 44
Joined: 2013-08-09 00:13:57

Re: Injection 2014 !

Post by VeL »

Incorrect User wrote:Ой, еще же нужно было и
WaitJournalLine

function WaitJournalLine(StartTime : TDateTime; Str : String; MaxWaitTimeMS : Integer) : Boolean

ожидание появления строки в журнале

Для полного счастья добавить FoundedParamID как в стелсе и неплохо было бы в скриптовый движок добавить оператор case )))
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

VeL wrote:
Incorrect User wrote:Ой, еще же нужно было и
WaitJournalLine

function WaitJournalLine(StartTime : TDateTime; Str : String; MaxWaitTimeMS : Integer) : Boolean

ожидание появления строки в журнале

Для полного счастья добавить FoundedParamID как в стелсе и неплохо было бы в скриптовый движок добавить оператор case )))

FoundedParamID - что это?)
Про case давно запланировано, но в скрипт.длл пока вломец что-то лезть.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Injection 2014 !

Post by Incorrect User »

FoundedParamId

FoundedParamId

в результате работы функций WaitJournalLine, InJournal, и им подобных функций при удачном нахождении заполняются поля типа LineID, LineType, LineTime и прочие. к ним добавил FoundedParamID.

например в поиск дается строка типа 'create|make|destroy|already'

обнаружена строка со словом destroy.

тогда в FoundedParamID будет число 2 (счет от нуля).

нашлось бы create - было бы ноль.

Только не знаю зачем оно вообще нужно :wink:
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

А, удобно.
Например, тот же скрипт на мининг.
Ищешь в журнале сообщения о физле, о том что выкопал что–то, о том что нет руды, слишком далеко, не тайл пещеры и тд, в соответствии с мсг делаешь вывод что делать дальше: перейти на другой тайл, повторить, подойти ближе...
Это как пример. Мне для тайминга это необходимо было давно, обход мессаг от игроков о фэйле тайминга, выкрик в чат тех же самых мессаг и сам тайминг, который не реагирует на эти сообщения)
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Injection 2014 !

Post by Incorrect User »

Так что там обходить? Нужно просто проверять наличие в сообщении что пришло ":" и все, если : нету значит не человек его написал. А эта функция кака тебе в этом поможет я не понимаю.
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Injection 2014 !

Post by Juicy Fruit »

Дык, так и помогала, у меня просмотр журнала был в отдельной функции, которая возвращала определенный номер в зависимости от сообщения которое нашла.
Приходилось расписывать для каждой группы сообщений свои условия. С этим параметром можно будет сразу же получать это число.
И там в тайминге фэйл у перса над головой вроде писался, не помню, появлялось там : или нет, но свои заморочки с этим были.
Можно по uo.JournalSerial смотреть систем чат это или игрок сказал что–то.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Injection 2014 !

Post by Incorrect User »

И как это будет выглядеть? Например есть

Code: Select all

            repeat
               uo.deletejournal(msg)
               uo.waittargettile(-1, uo.getx() + x, uo.gety() + y, uo.getz())
               uo.usetype("0x0E85")
               waittime = uo.timer() + 100
                  wait(100)
               until uo.dead() or uo.injournal(msg) or uo.timer() > waittime
            until uo.injournal("too far away|no ore here|have no line|mining in rock")

А будет так что ли? В любом случае шило на мыло.

Code: Select all

            repeat
               uo.deletejournal(msg)
               uo.waittargettile(-1, uo.getx() + x, uo.gety() + y, uo.getz())
               uo.usetype("0x0E85")
               waittime = uo.timer() + 100
                  wait(100)
               until uo.dead() or uo.injournal(msg) or uo.timer() > waittime
            until FoundedParamId == 2 or FoundedParamId == 6 or FoundedParamId == 10
Post Reply