Версия 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: Select all
InjID - узнать ИДшник гампа в памяти инжекта (грубо говоря его адрес, можно скармливать его инжекту что бы не было конфликтов с другими гампами, у которых одинаковые Serial и GumpID InClient - узнать, отображен ли гамп в клиенте, или был обработан инжектом и ответ отправлен на сервер минуя клиент, либо клиент уже закрыл этот гамп- Расширена возможность работы с шоплистами. А точнее - с текущими списками покупки/продажи вендоров:Code: Select all
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:Функции VendorReply:Code: Select all
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) - имя предметаФункции инжекта по работе с магазином:Code: Select all
var reply = VendorReply(VendorSerial, MaxCount) - создать тело ответа для шоппинга. Принимает параметры: серийник вендора, с которым оперируем и максимальное колчество предметов в ответе (list.Count()) reply.Count(count) - указать реальное количество предметов в ответе. Задается после формирования списка. reply.ItemSerial(index, serial) - задать серийник предмета в указанном порядковом номере (от 0 до MaxCount - 1) reply.ItemCount(index, count) - задать количество предметовПример кода для скупки:Code: Select all
var list = UO.GetShopList() - получить класс VendorList() UO.SendShopReply(VendorReply) - послать заранее сформированный запрос о купле/продаже на серверПример скрипта для докупки регов до 50 штук:Code: Select all
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- Исправлен учет трейдеров (UO.TradeCount() и прочие).Code: Select all
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
- Добавлена возможность задания цветов полоскам во внешнем статусбаре для <33%, 34-66% и >67% значения характеристики.
- Созданы адекватные интерфейсы для функций ожидания и событий.
- Equipment (Arm/Dress/Disarm и прочие) переписан полностью и работает адекватно.
- В лаунчере добавлена возможность сделать мульти-клиент, пока еще нормально не проверил.
- Возможность самому создавать настройки расположения и названия элементов в окнах инжекта с помощью Injection Forms Designer (в архиве, должен находиться в папке с инжектом, пока что не применим к окну от Script.dll).
- Все доступные на данный момент функции с возможными принимаемыми параметрами выведены в Injection.chm, для большинства функций описание пока что отсутствует, только параметры.


