Ждём новых релизов и обсуждаем новые баги тут
Версия 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, для большинства функций описание пока что отсутствует, только параметры.