|
Руководитель проекта |
|
Joined: 31 Jul 2008, 19:08 Posts: 37392
|
* Данное сообщение является копией сообщения разработчика Juicy Fruit. Оригинал здесь:Это официальное описание релиза, для того, чтобы перейти к FAQ по установке и часто задаваемым вопросам, перейдите по ссылке.Версия 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, для большинства функций описание пока что отсутствует, только параметры. Данное сообщение является копией сообщения разработчика Juicy Fruit. Оригинал: http://forum.yoko.com.ua/viewtopic.php?f=1&t=17527
|
|