Yoko
http://forum.yoko.com.ua/

Injection 2015
http://forum.yoko.com.ua/viewtopic.php?f=1&t=17527
Page 1 of 15

Author:  Juicy Fruit [ 2015-01-18 00:24:19 ]
Post subject:  Injection 2015

Ждём новых релизов и обсуждаем новые баги тут


Версия 1508.09 <--- Injection качать тут

Список изменений:
    - Исправлено зависание скриптов в окошке скриптов.
    - Исправлена ошибка с появлением предупреждения "Creation thread error".
    - Добавлена проверка на нахождение функции в теле скрипта UO.SubExists(SubName).
    - Реализована возможность вызова функции через UO.CallSub(SubName, Params...)
    Может принимать различное количество параметров (минимум 1 - название функции), сканирует тело скрипта на предмет нахождения указанной функции в нем с указанным количеством параметров и выполняет ее в стандартном режиме.
    - Исправлена работа функции UO.FunRunning(SubName), теперь работает правильно и без сбоев.
    - Некоторые корректировки в Script.dll.
    - Исправления в поисковых функциях.
    - Исправлена работа UO.mfgi.
    - Реализован доступ к списку найденного с помощью поисковых фукнций (FindItem/FindList) через UO.FindItem(index). Индексы от 0 до UO.FindCount() - 1.
    - Добавлен спецификатор вызова __runonce#ScriptName. При вызове скрипта с таким спецификатором через хоткеи или через uo.exec('exec __runonce#MyScript') - скриптовый движок проверит, запущена ли функция MyScript в данный момент, если запущена - ничего не произойдет, иначе - запустит скрипт в штатном режиме.
    - Улучшена стабильность инжекта.



Версия 1503.08

Список изменений:
    - Исправлено отображение дистанции до цели при стягивании статуса.
    - Исправлено добавление системных сообщений в журнал (с серийником 0).
    - Добавлены опции для команды _set:
    - corpsetimer - задает таймер (в мс) для очереди трупов для открытия;
    - autoparty - автовыбор действий при приглашении в группу: 1 - принять; 2 - отклонить; другое значение - дать выбор пользователю.
    - Теперь автооткрытие трупов ожидает, когда персонаж приблизится к трупу, стандартное время ожидания 30 сек с момента появления трупа на экране, после чего, труп удаляется из очереди.
    - Добавлена возможность замены текста в Replace по фрагменту текста. Для этого необходимо в начало поисковой строки дописать /*
    - Добавлена функция ClientMarkChar(ActionIndex, Serial), при ActionIndex:
    1 - устанавливает LastTarget клиента на Serial (отображает полоску ХП под чаром);
    2 - устанавливает LastAttack клиента на Serial (подсвечивает персонажа и отображает полоску ХП);
    3 - совместно первые 2 вариации.
    - Вход на шард Xhearon. В лаунчере прописать /xhearon и заиметь UserKeys:
    [Keys]
    Key1=0x2E43ED9D
    Key2=0x2E43ED9D
    Key3=0xA234227F
    SeedKey=0x00001357
    Type=5
    - Вход на шард Naderia. В лаунчере прописать /naderia, шифрование 2.0.3.
    - Вход на шард Nebula. В лаунчере прописать /nebula и заиметь UserKeys:
    [Keys]
    Key1=0x2E43ED9D
    Key2=0x2E43ED9D
    Key3=0xA234227F
    SeedKey=0x00001357
    Type=5
    - Вход на шард Empire UO. В лаунчере прописать /empireuo, шифрование 2.0.3.
    - Исправлены недочеты в работе с магазином.
    - Косметические баги в окнах инжекта.
    - Работа хоткеев, исправлены ошибки по сохранению/загрузке/удалению. Необходимо перезаписать хоткеи с использованием Insert/Home/Delete/End/PgUp/Down/Стрелки.
    - Исправлено отображение элементов в окне Object Types.
    - Исправлена работа massmove, emptycontainer. Выполнение этих функций больше не вешает клиент. Во время выполнения НЕЛЬЗЯ вручную перетаскивать какие-либо предметы до завершения работы функции. Все глюки/краши/потери потерь при несоблюдении этого условия - вина юзера.
    - Добавлена возможность изменять цвет абсолютно всех сообщений от сервера одним цветом (Соответствующая галочка и текстовое окно расположено на главной вкладке инжекта).
    - Исправлена работа функций UseType/UseFromGround.
    - Добавлена возможность поиска/использования гапов по одному из параметров Serial/ID, второй параметр указать как 0.
    - Добавлена возможность скармливать функции Uo.GetDistance различное количество параметров:
    UO.GetDistance(Serial) - стандартный вызов;
    UO.GetDistance(X, Y) - Расстояние от персонажа до заданных координат;
    UO.GetDistance(X1, Y1, X2, Y2) - Расстояние между заданными координатами.
    - Исправлено сохранение значений для LastStatusX, LastStatusY, LastTargetX, LastTargetY.
    - Добавлены функции для работы с вышеперечисленными переменными:
    UO.LastStatusX()
    UO.LastStatusY()
    UO.LastTargetX()
    UO.LastTargetY()
    - Добавлены глобальные переменные работы с журналом:
    UO.GetFoundedTextIndex() - получить индекс строки найденного текста;
    UO.GetFoundedTextSerial() - получить серийник, связанный со строкой текста в журнале;
    UO.GetFoundedTextTimer() - получить время добавления текста в журнал;
    UO.GetFoundedTextColor() - получить цвет.
    - Исправлено игнорирование банка при использовании UseType-подобных комманд.
    - Исправлена работа FPS патча для всех клиентов.
    - Размер игрового окна теперь не изменяется при применении настроек в опциях клиента и сообщение с пожеланиями разработчиков на этот счет не показывается.
    - Добавлена функция UO.Exists(Serial) для проверки наличия в памяти инжекта объекта.
    - Добавлена функция UO.UpdateObject(Serial) для синхронизации координат предмета в памяти инжекта с предметом в памяти клиента (актуально для своего персонажа).
    - Исправлена работа указателя * в элементах заголовка.
    - Изменения/исправления/добавления в Injection.chm.
    - Некоторые корректировки в Script.dll.



Версия 1501.17

Список изменений:
    - Переписаны системы хранения и обработки данных.
    - Переписана и исправлена отрисовка заголовка окна УО.
    - Появилась возможность самому задавать фон заголовка.
    - Исправлена работа Display On/Off.
    - Доабвлена возможность изменять цвет ника персонажа в заголовке. Текущий конфиг необходимо подкорректировать.
    - Добавлена возможность переключения стиля статусбаров в заголовке, командой _set sbgreen 0/1
    - Исправлены проблеммы, которые возникали при чтении/записи конфига.
    - Переписана работа с гампами:
    Для LastGump появились пара новых идентификаторов:
    Code:
    InjID - узнать ИДшник гампа в памяти инжекта (грубо говоря его адрес, можно скармливать его инжекту что бы не было конфликтов с другими гампами, у которых одинаковые Serial и GumpID
    InClient - узнать, отображен ли гамп в клиенте, или был обработан инжектом и ответ отправлен на сервер минуя клиент, либо клиент уже закрыл этот гамп


    Функции по работе с гампами:
    Code:
    UO.GetGumpCount() - получить количество гампов в памяти инжекта
    UO.SelectGump(InjID) - выбрать гамп, с которым будем работать
    UO.GumpExists(InjID) / UO.GumpExists(Serial, GumpID) - проверить, есть ли указанный гамп в памяти
    UO.GetGump(ident [n]) - работа с гампом, аналогично работе с LastGump, но, если первым параметром является InjID то:
       UO.GetGump(ident, GumpIndex) / UO.GetGump(ident, Serial, GumpID) - будут возвращать InjID гампа в строке, либо пустую строку. GumpIndex - порядковый номер гампа от 0 до GumpCount() - 1
    UO.SetGump(ident, id, state) - работа с гампом, который выбрали в UO.SelectGump(), если гамп исчез - ничего не произойдет.
       ident может быть: checkbox, radio, state для этого случая число 0 или 1. Переключает значения чекбоксов и радио-кнопок. Для радио кнопок срабатывает только на 1.
          textentry - для этого случая, state - строка, на которую нужно заменить текст
    И уже давно существующая функция UO.SendGumpSelect(index, ...) - index это номер кнопки, которую нужно нажать.
    Параметры:
    UO.SendGumpSelect(index) - нажать в последнем гампе
    UO.SendGumpSelect(index, gump_index) - нажать в гампе с порядковым номером
    UO.SendGumpSelect(index, serial, gump_id) - нажать в гампе по серийнику и ид
    UO.SendGumpSelect(index, serial = 0, gump_id = 0, InjID) - нажать в гампе по InjID гампа, серийник и ИД гампа могут быть любыми значениями и не используются в этом варианте.


    - Расширена возможность работы с шоплистами. А точнее - с текущими списками покупки/продажи вендоров:
    Добавлены классы: VendorList и VendorReply

    Функции VendorList:
    Code:
    var list = VendorList() - создать лист. Создавать самому его не нужно, для этого есть функция (после описания классов)
    list.Serial() - получить серийник вендора
    list.Count() - получить количество предметов в листе
    list.IsBuyList() - бай/селл лист
    list.InClient() - гамп ушел клиенту или был обработан инжектом, минуя клиент. (пока что работает не как нужно)
    list.ItemSerial(index) - серийник предмета по порядковому номеру (от 0 до list.Count() - 1)
    list.ItemGraphic(index) - тип предмета
    list.ItemColor(index) - цвет предмета
    list.ItemPrice(index) - цена предмета
    list.ItemCount(index) - доступное количество
    list.ItemName(index) - имя предмета


    Функции VendorReply:
    Code:
    var reply = VendorReply(VendorSerial, MaxCount) - создать тело ответа для шоппинга. Принимает параметры: серийник вендора, с которым оперируем и максимальное колчество предметов в ответе (list.Count())
    reply.Count(count) - указать реальное количество предметов в ответе. Задается после формирования списка.
    reply.ItemSerial(index, serial) - задать серийник предмета в указанном порядковом номере (от 0 до MaxCount - 1)
    reply.ItemCount(index, count) - задать количество предметов


    Функции инжекта по работе с магазином:
    Code:
    var list = UO.GetShopList() - получить класс VendorList()
    UO.SendShopReply(VendorReply) - послать заранее сформированный запрос о купле/продаже на сервер


    Пример кода для скупки:
    Code:
    sub testshop()
       var list = uo.GetShopList() #получим доступный лист из инжекта
     
       #тут можно будет сделать всякие проверки list.IsBuyList() и list.InClient() для коррекции
     
       var i, item = '', count = list.Count()
       if count then
          uo.print(str(count)) 
          uo.textclear()
          count = count - 1
          for i = 0 to count #вывод вендор листа в текстовое окошко
             uo.print(str(i)) 
             item = 'serial=' + list.ItemSerial(i) + ' graphic=' + list.ItemGraphic(i)
             item = item + ' color=' + list.ItemColor(i) + ' price=' + str(list.ItemPrice(i))
             item = item + ' count=' + str(list.ItemCount(i)) + ' name=' + list.ItemName(i)
             uo.textprint(item)
          next
          uo.textopen()
          count = count + 1
         
          var reply = VendorReply(list.Serial(), count) #создадим ответ для указанного вендора
          reply.ItemSerial(0, list.ItemSerial(1)) #укажем серийник предмета в позиции 0
          uo.print('send count of items = ' + str(reply.ItemCount(0, 2))) #укажем количество предметов в 0 позиции списка равное 2 (двум)
          reply.Count(1) #Реальное количество предетов в ответе, если известно заранее - можно указатьв  самом начале
          uo.SendShopReply(reply) #отправка запроса на сервер
       endif
    end sub


    Пример скрипта для докупки регов до 50 штук:
    Code:
    sub testshop()
       uo.msg('bye')
       wait(500)
       uo.msg('buy')
       wait(500)
       
       var BuyItemsCount = 8 #Сколько предметов проверяем для докупки
       var BuyDelay = 300 #Задержка для покупки одного итема
       
       dim BuyType[20], BuyColor[20], BuyCount[20]
       
       #Описание предмета 1:
       BuyType[0] = 'bm' #Тип предмета
       BuyColor[0] = 0 #Цвет предмета
       BuyCount[0] = 50 #До какого количества докупаем
       
       #Описание предмета 2:
       BuyType[1] = 'bp'
       BuyColor[1] = 0
       BuyCount[1] = 50
       
       #Описание предмета 3:
       BuyType[2] = 'ga'
       BuyColor[2] = 0
       BuyCount[2] = 50
       
       BuyType[3] = 'gs'
       BuyColor[3] = 0
       BuyCount[3] = 50
       
       BuyType[4] = 'mr'
       BuyColor[4] = 0
       BuyCount[4] = 50
       
       BuyType[5] = 'ns'
       BuyColor[5] = 0
       BuyCount[5] = 50
       
       BuyType[6] = 'sa'
       BuyColor[6] = 0
       BuyCount[6] = 50
       
       BuyType[7] = 'ss'
       BuyColor[7] = 0
       BuyCount[7] = 50
       
       if BuyItemsCount < 1 then
          uo.print('Не указано количество предметов для докупки.')
          return
       endif
       
       var list = uo.GetShopList() #получим доступный лист из инжекта
       
       if not list.IsBuyList() then
          uo.print('Это не байлист.')
          return
       endif
       
       if not list.InClient() then
          uo.print('Этот байлист уже обработан инжектом/клиентом.')
          return
       endif
       
       var i = 0, j = 0, ReplyCount = 0, want = 0, count = list.Count()
       
       if count then
          count = count - 1
         
          var reply = VendorReply(list.Serial(), BuyItemsCount) #создадим ответ для указанного вендора
         
          BuyItemsCount = BuyItemsCount - 1
         
          for i = 0 to count
             for j = 0 to BuyItemsCount
               
                want = BuyCount[j] - uo.Count(BuyType[j], BuyColor[j])
               
                if want > 0 && list.ItemGraphic(i) == uo.GetGraphic(BuyType[j]) then
                   if BuyColor[j] == -1 || list.ItemColor(i) == uo.GetGraphic(BuyColor[j]) then
                     
                      if want > list.ItemCount(i) then
                         want = list.ItemCount(i)
                      endif

                      if want > 0 then #На всякий случай
                         reply.ItemSerial(ReplyCount, list.ItemSerial(i))
                         reply.ItemCount(ReplyCount, want)
                     
                         ReplyCount = ReplyCount + 1
                      endif
                   endif
                endif
             next
          next
         
          if ReplyCount then
             uo.print('ReplyCount = ' + str(ReplyCount) + ' waiting ' + str(BuyDelay * ReplyCount) + ' ms')
             wait(BuyDelay * ReplyCount)
             
             reply.Count(ReplyCount) #Реальное количество предетов в ответе, если известно заранее - можно указатьв  самом начале
             uo.SendShopReply(reply) #отправка запроса на сервер
          else
             uo.print('На вендоре нет доступных предметов для докупки')
          endif
       else
          uo.print('Это пустой байлист')
       endif
    end sub


    - Исправлен учет трейдеров (UO.TradeCount() и прочие).
    - Добавлена возможность задания цветов полоскам во внешнем статусбаре для <33%, 34-66% и >67% значения характеристики.
    - Созданы адекватные интерфейсы для функций ожидания и событий.
    - Equipment (Arm/Dress/Disarm и прочие) переписан полностью и работает адекватно.
    - В лаунчере добавлена возможность сделать мульти-клиент, пока еще нормально не проверил.
    - Возможность самому создавать настройки расположения и названия элементов в окнах инжекта с помощью Injection Forms Designer (в архиве, должен находиться в папке с инжектом, пока что не применим к окну от Script.dll).
    - Все доступные на данный момент функции с возможными принимаемыми параметрами выведены в Injection.chm, для большинства функций описание пока что отсутствует, только параметры.

Author:  Gromiz [ 2015-01-31 10:20:25 ]
Post subject:  Re: Injection 2015

господа, как добавить во вкладке "Displey" отмычки или другой предмет в игре? постоянно разделитель ставится

Author:  Juicy Fruit [ 2015-02-01 13:51:42 ]
Post subject:  Re: Injection 2015

Gromiz wrote:
господа, как добавить во вкладке "Displey" отмычки или другой предмет в игре? постоянно разделитель ставится
Проверил.
На вкладке Display жмем Add. В появившемся окне вводим в Identifier: - тип предмета, ниже - цвет предмета, устанавливаем галочку Have Image и нажимаем Done. Предмет появляется в заголовке.

Author:  Gromiz [ 2015-02-01 14:32:22 ]
Post subject:  Re: Injection 2015

Juicy Fruit wrote:
Gromiz wrote:
господа, как добавить во вкладке "Displey" отмычки или другой предмет в игре? постоянно разделитель ставится
Проверил.
На вкладке Display жмем Add. В появившемся окне вводим в Identifier: - тип предмета, ниже - цвет предмета, устанавливаем галочку Have Image и нажимаем Done. Предмет появляется в заголовке.


сейчас все получилось и без картинки добавляет предмет в строку, и хоть как.
В прошлый раз делал также, но постоянно разделитель ставился.
сегодня отказался работать таргет на ножницы в скрипте, для порезки кожи.
перезапуск клиента с инжектом помог. Затрудняюсь описать действия предшествующие этому, т.к. не сразу обратил внимание.
В общем, присутствуют странности в этой сборке о.О.

Author:  peke [ 2015-02-03 05:13:30 ]
Post subject:  Re: Injection 2015

Any help on this? client 5.0.8.3 runuo shard named Cataclystuo. log below is the furthest ive come so far, i can come to select shard page but not to character page..
Autoaccount, login.cataclysmuo.com,2593

i come this far with both noencrypt ignintion and noencrypt sphere

Clear log. Juicy Fruit

Author:  Juicy Fruit [ 2015-02-05 15:11:33 ]
Post subject:  Re: Injection 2015

Еще что–либо негативное замечено? Или у остальных все работает без сбоев?

2Gromiz
С таргетом от ножниц – ножницы лежали в паке или в закрытой сумке в паке?
Если были открыты некоторые сумки в паке и после этого был открыт основной пак персонажа – содержимое открытых сумок удалится из памяти до следующего открытия их.

Author:  Gromiz [ 2015-02-05 20:32:36 ]
Post subject:  Re: Injection 2015

Juicy Fruit wrote:
Еще что–либо негативное замечено? Или у остальных все работает без сбоев?

2Gromiz
С таргетом от ножниц – ножницы лежали в паке или в закрытой сумке в паке?
Если были открыты некоторые сумки в паке и после этого был открыт основной пак персонажа – содержимое открытых сумок удалится из памяти до следующего открытия их.


лежали в открытой подсумке.
И как следствие после этого скрипта, при клике на ножницы, они резали кожу сами, как бы таргет перешел на кожу и ее порезал.
да мож глюк какой был или типо того.

Author:  Juicy Fruit [ 2015-02-05 22:43:56 ]
Post subject:  Re: Injection 2015

Gromiz wrote:
Juicy Fruit wrote:
Еще что–либо негативное замечено? Или у остальных все работает без сбоев?

2Gromiz
С таргетом от ножниц – ножницы лежали в паке или в закрытой сумке в паке?
Если были открыты некоторые сумки в паке и после этого был открыт основной пак персонажа – содержимое открытых сумок удалится из памяти до следующего открытия их.


лежали в открытой подсумке.
И как следствие после этого скрипта, при клике на ножницы, они резали кожу сами, как бы таргет перешел на кожу и ее порезал.
да мож глюк какой был или типо того.
А, ну waittargettype() успешно завершился, а вот ножницы не нашлись для юза...

Author:  Mirage [ 2015-02-05 23:21:21 ]
Post subject:  Re: Injection 2015

У меня скрипт при луте режет кожу. Иногда кожа порезана, а прицел все еще висит. :roll:

Author:  Juicy Fruit [ 2015-02-05 23:49:28 ]
Post subject:  Re: Injection 2015

Прицел инжекта (waittargettype)? Или в клиенте таргет виден?

Author:  Mirage [ 2015-02-06 10:21:19 ]
Post subject:  Re: Injection 2015

В клиенте таргет виден. При клике на предмет пишет - неверная цель. У меня паузы минимальные на изменение свойст предмета настроены.
Порезали кожу
ждем пока есть кожа.
С другой стороны прицел же должен после действия пропасть как бы. Не особо напрягает но нипонятно. :shock:

PS Немного поправил 1 пост, а то были моменты недопонимания :roll:

Author:  Juicy Fruit [ 2015-02-06 11:04:32 ]
Post subject:  Re: Injection 2015

А, ну то что в клиенте он периодически остается – это вполне нормально. Если кожа кончилась, но цикл все еще воспроизвелся из–за маленьких задержек то ловушка не поставится, но ножницы юзанутся, и после дальнейших действий таргет на сервере отменится, а в клиенте останется, при попытке тыка на предме или отмене напишется Unexpected target (что–то подобное).
Не, когда инжект ставит ловушку на таргет – графичаски ничего не изменяется, просто пакет с таргетом клиенту не приходит.

Author:  Juicy Fruit [ 2015-02-07 00:49:49 ]
Post subject:  Re: Injection 2015

peke wrote:
Any help on this? client 5.0.8.3 runuo shard named Cataclystuo. log below is the furthest ive come so far, i can come to select shard page but not to character page..
Autoaccount, login.cataclysmuo.com,2593

i come this far with both noencrypt ignintion and noencrypt sphere
With this connection config I can login:
Image

I use clean client.

Author:  peke [ 2015-02-07 01:55:53 ]
Post subject:  Re: Injection 2015

i still cant.... what could be wrong :S do you use other version of injection then me? i use 1501.17

nevermind i reinstalled injection without pearl and it worked! Thanks a million

Author:  Juicy Fruit [ 2015-02-07 16:00:41 ]
Post subject:  Re: Injection 2015

VeL wrote:
Спасибо за релиз)))
Нашел ошибку:
UO.GetFoundedTextID() - возвращает неправильный результат
Кхм, у меня все правильно выдает. Индексы результата поиска с 0 до <кол-во>-1.

Author:  VeL [ 2015-02-14 04:13:17 ]
Post subject:  Re: Injection 2015

Ошибка в UO.WaitingForJournalText, после первого запуска начинает пролетать. Ощущение такое, что не с того места в журнале начинается поиск, если чистить журнал, то работает правильно.

Code:
sub Test()  
  UO.WaitingForJournalText(Now(), 5000, '0|1|2')
  switch UO.GetFoundedTextID()
    case 0
      UO.CharPrint('self', 0x0026, '[0]')
    case 1
      UO.CharPrint('self', 0x0026, '[1]')
    case 2
      UO.CharPrint('self', 0x0026, '[2]')
  end switch
end sub

Author:  Gromiz [ 2015-02-14 09:44:53 ]
Post subject:  Re: Injection 2015

Изменил путь к макросам в файле и пошло поехало:

Image
при запуске из окна макросов,
удалил файлик и по новой все вбил в игре - норм


недавно не мог в чат писать, помог перезаход

Author:  Juicy Fruit [ 2015-02-16 08:14:23 ]
Post subject:  Re: Injection 2015

Gromiz wrote:
Изменил путь к макросам в файле и пошло поехало:

Image
при запуске из окна макросов,
удалил файлик и по новой все вбил в игре - норм


недавно не мог в чат писать, помог перезаход
Проверю.

2 snaiperr
Баг уже исправлен, в релизе все будет впорядке.

Author:  VeL [ 2015-02-17 14:25:30 ]
Post subject:  Re: Injection 2015

Quote:
Имя оно и есть полное, а то что видно сколько предметов – сервер посылает это сообщение клиенту как пакет речи, там может быть написано что угодно, если нужно сконструировать эту строку – добавь к имени нужный суффикс, количество итемов можно узнать используя uo.FindType(–1, –1, container), или ткнув на предмет и взяв последнюю строчку журнала (или последнюю, связанную с этим объектом).

Полное имя так же нужно для получения приписки к вендорам, приписки к игрокам ну и т.д. Как раз и надо то что падает в журнал после клика. Но в некоторых случаях тыкать по объектам не вариант, так как каждый раз приходится ждать прихода сообщения в журнал, тогда как UO.GetAltName() достаточно 1 раз вызвать и имя будет храниться в памяти инжекта и можно обращаться к нему без каких либо задержек. Можно конечно сохранять имена и ID в массивах, но опять же в инжекте нет массивов к которым можно обращаться из разных макросов.

uo.Ignore( '0x12345678') для слабаков?
В поиске игроков я использую игнор "друзей", так же есть игнор "извесных" НПС, так же игнор некоторых НПС по типу и цвету, так же приходится вносить НПС в игнор как говориться по ходу дела. Я в принципе решил эту проблему, но там есть свои неудобства.

Написал как раз под эти все вещи, но было бы неплохо реализовать это со стороны скриптового движка:
Code:
;------------------------------------------------------------------
; Работа со списками
;------------------------------------------------------------------

;--------------------------------------------------------
; Добавить элемент в список
;--------------------------------------------------------

Sub AddList(ListName, ListElem)
  UO.SetGlobal(ListName + Str(CountList(ListName)), ListElem)
  UO.SetGlobal(ListName + 'Count', Str(CountList(ListName) + 1))
end sub

;--------------------------------------------------------
; Удалить элемент из списка
;--------------------------------------------------------

Sub DeleteList(ListName, ListElem)
var Index, Flag = False
  if CountList(ListName) > 0 then
    for Index = 0 to CountList(ListName) - 1
      Flag = Flag || GetList(ListName, Index) == ListElem
      UO.SetGlobal(ListName + Str(Index), GetList(ListName, Index + Flag))
    next
    UO.SetGlobal(ListName + 'Count', Str(CountList(ListName) - Flag))
  end if
  return Flag
end sub

;--------------------------------------------------------
; Поиск элемента в списке
;--------------------------------------------------------

Sub FindList(ListName, Elem)
var Index
  if CountList(ListName) > 0 then
    for Index = 0 to CountList(ListName) - 1
      if GetList(ListName, Index) == Elem then
        return Index
      end if
    next
  end if
  return -1
end sub

;--------------------------------------------------------
; Очистить список
;--------------------------------------------------------

Sub ClearList(ListName)
  UO.SetGlobal(ListName + 'Count', '0')
end sub

;--------------------------------------------------------
; Извлечь элемент из списка
;--------------------------------------------------------

Sub GetList(ListName, ElemIndex)
  return UO.GetGlobal(ListName + Str(ElemIndex))
end sub

;--------------------------------------------------------
; Число элементов в списке
;--------------------------------------------------------

Sub CountList(ListName)
  return Val(UO.GetGlobal(ListName + 'Count'))
end sub

;--------------------------------------------------------
; Снять/установить игнор на список
;--------------------------------------------------------

Sub IgnoreList(ListName, Flag)
var Index
  if CountList(ListName) > 0 then
    for Index = 0 to CountList(ListName) - 1
      UO.Ignore(GetList(ListName, Index), Flag)
    next
  end if
end sub

Author:  VeL [ 2015-02-18 07:26:18 ]
Post subject:  Re: Injection 2015

Code:
Ага, похоже что они так и получают это имя. Такой вариант не подходит, проще скриптом это сделать)

Да я уже понял)))

Вот еще бы добавить:
- возможность задавать дальность поиска по высоте 'findvertical' по типу 'finddistance'

Page 1 of 15 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/