Script.dll + include

ASM, Perl, IRW, other injections and script modules

Moderators: Murderator+, Murderator

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

Re: Script.dll + include

Post by Juicy Fruit »

Если сам чар ещё не вышел из УО - возможно такое, надо дождаться логаута чара, или зайти тем, что открылось в зону, с моментальным логаутом (если такая имеется).
После того как чар оффнется из мира - заходит под нормальным конфигом)
Это баг клиента, он, видимо, грузит конфиг при выборе чара, если выбора нет - использует последний открытый конфиг.
Ибо даже в окошке трэйда при этом глюке ник не чара, которым ты зашёл, а чара, конфиг которого подгрузился)
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Script.dll + include

Post by Gromiz »

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

Re: Script.dll + include

Post by Juicy Fruit »

Gromiz wrote:кстати,
при первом запуске инжекта, если сразу открыть окно "с 2я ячейками" и нажать на скрипт, то будет выдавать ошибку, а если эту же процедуру провернуть в самом окне инжекта в макросах "с 3я ячейками", то запускается хорошо и после этого запускаются скрипты из окна "с 2я ячейками" без ошибки

Хмм, какую именно ошибку?
Не найден скрипт? Или чото про Access violation at address ..?
У меня скрипт, загружаемый из другого файла, без замены текущего скрипта - запускался нормально.
Из текущего скрипта - тоже без проблемм.
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Script.dll + include

Post by Gromiz »

захожу в игру, в нжекте активирую всплывающее окошко, в окошке запускаю любой скрипт из другого файла, выдает:
Image
хотя из основного окна инжекта с 3мя ячейками все запускает сразу и после можно запускать из всплывающего окна.

хотя 825 строка не связана с этими скриптами в целом.

825 строка : Sub Meditation()
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

825 строка, которая видна при включённой галочке Show.
Все строки, ошибки в которых выдаёт модуль - пока что из окна редактора с включённой Show.

Щас проверю что там не так на счёт запуска)

//add
http://rghost.ru/39376321
Исправил этот глюк.
Теперь всё нормально обрабатывает.
Заодно исправил сохранение файла с макросами, теперь он всегда сохраняется в корневую папку инжи, от куда был запущен модуль, а не куда-то ещё))
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Script.dll + include

Post by Gromiz »

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

Re: Script.dll + include

Post by Juicy Fruit »

Опять при клике во всплывающем окошке?
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Script.dll + include

Post by Gromiz »

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

Re: Script.dll + include

Post by Juicy Fruit »

Поправил классики Buffer и FindPath.
В Buffer - только незначительные фиксы.
Конструктор в FindPath теперь объявляется с 3 переменными
PathFind(UOPath,MapIndex,Z)
UOPath - путь к *.mul файлам
MapIndex - индекс карты, для которой вычислять путь (map0/map1/etc...)
Z - координата Z чара, в коде ищет путь по Z +/-20
Думает дольше, но без глобальных глюков)
Пока что не реагирует на игровые предметы УО (заборы, дома, фонари и т.п.), это как нибудь впилю.

Добавил функцию Remain(Val1,Val2).
Возвращает true если есть остаток деления Val1/Val2, false - если делится без остатка.

Code: Select all

sub RemainTest()
   if remain(9,3) then
      uo.print('Деление с остатком.')
   else
      uo.print('Деление без остатка.')
   endif
end sub


Добавил аналог PrivateGetTile():
GetTileXYM(X,Y,M,Tile1,Tile2,UOPath)
X - координата X тайла
Y - координата Y тайла
M - карта, на которой происходит действие
Tile1,Tile2 - диапазон от Tile1 до Tile2
UOPath - путь к папке с *.mul файлами

Теперь, при ошибке в скрипте, парсер выдаёт информацию с названием файла, в котором содержится строка с ошибкой, и, соответственно, строку с ошибкой.
Может глючить и указывать на пустые строки, если это произошло - ошибка на последней не пустой строке, перед этими пустыми строками %)

Пофиксил "зависание" Ctrl при макросах Ctrl+S/O/F/G/H. Теперь всё работает как нужно.

*Для дллки с доп. окошком:
Координаты и размеры окна теперь сохраняются и загружаются при старте.
Размеры ячеек изменяются только программно, размер ячейки с номером заметно уменьшился.

Ссылки обновил в 1 посте.
Last edited by Juicy Fruit on 2012-08-27 06:51:49, edited 1 time in total.
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Script.dll + include

Post by Gromiz »

cool, thnx ^^,


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

Re: Script.dll + include

Post by Juicy Fruit »

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

Re: Script.dll + include

Post by Juicy Fruit »

Реализовал поддержку else if в конструкции if else endif.

else if должно записываться только так, записи elseif/elif и т.п. не допустимы.
Регистр не важен.

Теперь громоздкие конструкции типо:

Code: Select all

if ... then
else
   if ... then
   else
      ...
   endif
endif

можно записывать как:

Code: Select all

if ... then
else if ... then
else if ... then
endif


Работает это с учётом вложенности циклов, как видно на фрагменте ниже.

Не заморачивался с условиями настоящего синтаксиса, это просто для наглядности учета всех циклов и строк:

Code: Select all

sub ghd()
   if fgh
      ...
      for hg
         ...
         while gg
            ...
            if gf
               ...
            else if h
               ...
            else if h
               ...
            endif
         wend
      next
   else if hg
      ...
   else if gh
      for hg
         ...
         while gg
            ...
            if gf
               ...
               repeat
                  ...
                  if ...
                     ...
                  else if ???
                     ...
                  endif
               until fff
            else if h
            else if h
            endif
         wend
      next
   else if gh
      ...
   else if gh
      ...
   endif
end sub


Данный фрагмент будет рассматриваться парсером как:

Code: Select all

sub ghd()
   if fgh
      ...
      for hg
         ...
         while gg
            ...
            if gf
               ...
            else
               if h
                  ...
               else
                  if h
                     ...
                  endif
               endif
            endif
         wend
      next
   else
      if hg
         ...
      else
         if gh
            for hg
               ...
               while gg
                  ...
                  if gf
                     ...
                     repeat
                        ...
                        if ...
                           ...
                        else
                           if ???
                              ...
                           endif
                        endif
                     until fff
                  else
                     if h
                     else
                        if h
                        endif
                     endif
                  endif
               wend
            next
         else
            if gh
               ...
            else
               if gh
                  ...
               endif
            endif
         endif
      endif
   endif
end sub
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Добавил возможность вызова скрипта с параметрами из хоткеев (или создание нового трида из уже запущенного скрипта)

,exec FunctionName#Params1#...#ParamN

FunctionName - соответственно имя функции;
Params - передаваемые в неё параметры.

Params перечисляются используя разделитель не запятую, а #.
Ограничение по кол-ву параметров - 20.
Параметры строчного типа должны и быть вковычках.
Числовые параметры или имена переменных нужно записывать без ковычек.
Если в строчке необходим пробел - он должен быть заменён на $, ибо в обработку дллкой приходит функция уже без пробелов.

Пример:
Требуется вызвать функцию asd с параметрами: Переменная,Число,Строка

Где-то на просторах скрипта находится:

Code: Select all

var Param1='Param1_data'

sub asd(a1,a2,a3)
   uo.print(a1)
   uo.print(str(a2))
   uo.print(a3)
   wait(10000)
end sub


В окне УО (или забиваем в хоткей) пишем

Code: Select all

,exec asd#Param1#123#'Param3$with$spaces'


script.dll обработает этот запрос на вызов функции, создаст временную функцию с названием <FunName>_WithParams(), запустит её и из неё вызовет необходимую функцию

Code: Select all

sub asd_WithParams()
   asd(Param1,123,'Param3 with spaces')
end sub


В итоге в систем чате УО имеем:

Code: Select all

Param1_data
123
Param3 with spaces


В списке запущенных скриптов, 10 секунд, будет висеть созданная функция asd_WithParams

///////////////// Добавлено позже.
Теперь диалоги открытия/сохранения скрипта не блокируют доступ к инжекту и окну УО.

///////////////// 29.09.2012
Исправлена ошибка, возникающая при использовании в скриптах else if.
Теперь всё работает так, как и должно)
Обновил ссылки.
oldguy
Posts: 3
Joined: 2012-10-26 02:10:01

Re: Script.dll + include

Post by oldguy »

вы могли бы реализовать такие вещи, как:
http://agrs.info/asm/filesru.html
Это уже существует?

Благодарю вас за ваше время и усилия!
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Можно, но толку от этого? Эта дллка нормально работает с АСМ, глюков не возникало) когда время будет и если будет еще актуально – поковыряю)
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Script.dll + include

Post by Gromiz »

эта модификация никак же не может повлиять на стабильность работы инжекта на высоких клиентах +6...?

может в курсе, можно как-то скрипт проверить на работоспособность?
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Gromiz wrote:эта модификация никак же не может повлиять на стабильность работы инжекта на высоких клиентах +6...?

Вообще на 6+ клиентах не играл, но на Olmer'e (там 6+ какой-то клиент) не жаловались на дллку.

Gromiz wrote:может в курсе, можно как-то скрипт проверить на работоспособность?

Всмысле? Запустить и посмотреть как работает, нэ?)
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Добавил функции (по-сути аналог SetGlobal/GetGlobal, только чуть более функциональные) по работе с глобальными переменными:

Code: Select all

UO.GListSet(String Name, String Value) #Добавить/заменить глобальную переменную
UO.GListGet(String Name) #Получить значение глобальной переменной
UO.GListClear() #Очистить список глобальных переменных
UO.GListSize() #Узнать размер списка (кол-во позиций) глобальных переменных
UO.GListPosName(Number Position) #Получить имя глобальной переменной, которая находится в позиции Position
UO.GListPosValue(Number Position) #Получить значение глобальной переменной, которая находится в позиции Position

Индексы позиций от 0 до Size-1

Теперь при возникновении ошибки "Unhandled exception in parser." функция, в которой возникла данная ошибка незамедлительно стирается из списка запущенных функций.

Добавлена проверка на то, запущенна ли функция в данный момент или нет.

Code: Select all

UO.FunRunning(String Name)


Смысл от неё - держать запущенным, помимо основной функции, трид, который проверяет основную функцию на работоспособность, если её нет - перезапускать основной трид (при появлении "Unhandled exception in parser." не особо актуально), закрывать окно УО (лесоруба/минёра/т.п. чтоб не убили во время срыва добычи при "обстоятельствах") или ещё какие-то действия.

P.S. Новое оформление без "окна макро" не выпускаю из-за не актуальности)
Last edited by Juicy Fruit on 2012-11-10 09:30:38, edited 2 times in total.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Script.dll + include

Post by Mirage »

Как всегда молодец. Но насчет игнорирования ошибки спорно. Ошибка сигнализирует что игра либо запущена не правильно (многоядерный проц) либо ошибка в скрипте. А когда она будет молча закрываться пользователь будет сидеть и тыкать в кнопку.

PS попробуй поискать функцию Pathfind для передвижения. Хотя хз - если за столько лет создатели не раскололись...
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Ошибка осталась, выскакивает когда случсется, только функция, которая вызвала этот еррор удаляется из списка)

На счет функции для перемещения поподробнее, зачем поискать? Путь мое деяние не правильно расчитывает?) Или к чему это?)
Locked