UjAPI

Добавлен , опубликован
Лауреат премии 2023 года


Данный ресурс работает ТОЛЬКО с патчами 1.24e/1.26а/1.27a/1.27b/1.28f

Как пользоваться?

  1. Распакуйте все файлы из архива, желательно в отдельную папку, вот так:
скриншоты
  1. Запустите UjAPI.exe.
    • Если же у вас приложение не запускается, то скачайте и установите: .NET Framework 4.7.2.
    • Если же ни в игре, ни в World Editor UjAPI не работает, то скачайте и установите: C++ Redistributable 2012
  2. Установите путь для Warcraft 3, вот так:
скриншоты
  • Можно указать и на Frozen Throne.exe или же на Warcraft III.exe (но рекомендуется использовать именно war3.exe для патчей 1.27б и ниже).
  • На патче 1.28.5(f) рекомендуется использовать непосредственно Warcraft III.exe.
  1. Установите путь для World Editor, вот так:
скриншоты
  • Рекомендуется использовать JNGP версии Прометея: скачать
  • Пароль от архива: JNGP
4.1 Для удобства, добавления подсветки/автозаполнения, скачайте: [UjAPI] TESH Подсветка (спасибо DevilVsLife и Nazarpunk) и просто положите его в папку tesh/data вот так:
скриношоты
  1. Готово, вы можете теперь смело запускать как игру, так и World Editor через UjAPI Launcher.
    • Для использования оконного режима в Warcraft III нажмите галочку на "Additional command line arguments" и в появившееся окно, пропишите -window, вот так:
скриншоты

Полезные файлы

`
ОЖИДАНИЕ РЕКЛАМЫ...
1
20
6 месяцев назад
Отредактирован Unryze
1
Скрины - бесполезные. Пожалуйста, на будуще, прикладывай error.txt и желательно .dmp файл. Но скорее всего ошибка связана с HandleList ибо я переделывал её код.
Ну или же прикрепил бы карту, чтобы я запустил и мог сам увидеть ошибку.
Редактирование: Ошибку нашёл и поправил, если на хотфиксе у тебя всё ещё будет фатал, то пожалуйста txt/dmp или же карту, ну или хотя бы кусок кода, который вызывает фатал.
Спасибо.
2
20
6 месяцев назад
2
Вышла новая версия! Прокрутить к ресурсу

v1.0.39.143

  1. ParseTags теперь работает с данными заклинаний.
  2. Исправлена критическая ошибка от любого типа HandleListGetCount.
0
31
6 месяцев назад
0
Исправлена критическая ошибка от любого типа HandleListGetCount.
Спасибо, помогло.

SetWidgetX() ломает отображение модели юнита.
Сама моделька остается в месте где изначально юнит и был и не двигается дальше вместе с юнитом. Сам юнит теперь отображается только в виде тени с кругом выделения.
Загруженные файлы
1
20
6 месяцев назад
Отредактирован Unryze
1
SetWidgetX() ломает отображение модели юнита.
Не нужно использовать Get/SetWidgetX/Y/Z на юнитах, это бесполезно, ибо по скорости разницы толком нет. Ошибку поправил.
Спасибо.
2
20
6 месяцев назад
2
Вышла новая версия! Прокрутить к ресурсу

v1.0.39.144

  1. Исправлены SetWidgetX/Y/Z отделяющие спрайт от виджета.
  2. Проведена оптимизация внутреннего кода, а также удаление некоторых данных для уменьшения веса файла.
0
31
6 месяцев назад
0
Не нужно использовать Get/SetWidgetX/Y/Z на юнитах, это бесполезно, ибо по скорости разницы толком нет. Ошибку поправил.
Мне это было удобно. т.к. в моей системе перемещения хранится вообще хендл. и это может быть как юнит, так и декорация или эффект.
0
37
6 месяцев назад
0
Нужно instanceof в мире хендлов)
0
20
6 месяцев назад
0
ScorpioT1000, увы, это сложнореалезуемо
0
20
6 месяцев назад
0
Вышла новая версия! Прокрутить к ресурсу

v1.0.39.145

  1. Исправлено SetSpecialEffectX/Y/Z, предыдущее исправление для SetWidgetX/Y/Z повлияло на эту ошибку.
0
20
6 месяцев назад
0
Unryze, когда автотесты?
0
20
6 месяцев назад
0
Unryze, когда автотесты?
Надеюсь никогда. )0
2
20
6 месяцев назад
Отредактирован Unryze
2
Вышла новая версия! Прокрутить к ресурсу

v1.0.40.147

  1. Новые Нативные Функции:
    native GetWheelDelta takes nothing returns integer
    native GetVisionMax takes nothing returns real
    native SetVisionMax takes real value returns nothing
  2. Исправлена критическая ошибка от GetAbilityStringField при применении на заклинание у которого "одно" описание на все уровни, то бишь когда нет описаний на каждый уровень отдельно.
    Пометка: эта проблема связана с SLK оптимизацией.
  3. Добавлен метод реаллокации для описаний заклинаний с несколькими уровням, у которых отсутствуют тексты для всех уровней.
    Пример: "Ubertip=text", это значит, что заклинание на всех уровнях разделяет "text" как подсказку, однако внутри движка выделяется лишь 1 индекс.
  4. Пере-пере-исправлено SetDestructableZ, эта функция вновь сломалась из-за другого фикса для виджетов.
  5. Исправлены CreateBuff/UnitAddBuff/UnitAddBuffEx/UnitAddBuffById/UnitAddBuffByIdEx, которые не работали с SLK-оптимизированными картами.
  6. Добавлен хук на CreateImage, теперь эта функция использует CreateImageSimple как базу, чтобы смена размера более не ломала изображение.
3
20
5 месяцев назад
3
Вышла новая версия! Прокрутить к ресурсу

v1.1.0.152

  1. Новые Типы:
type destructablestringfield extends agentdatafield
  1. Новые Конверторы:
constant native ConvertDestructableStringField takes integer i returns destructablestringfield
  1. Новые Константы:
constant destructablestringfield DESTRUCTABLE_SF_NAME = ConvertDestructableStringField('bnam')
constant destructablestringfield DESTRUCTABLE_SF_MODEL = ConvertDestructableStringField('bfil')
  1. Удалённые Нативные Функции:
native GetEventDamageAbilityId takes nothing returns integer
  1. Новые Нативные Функции:
native GetGameVersion takes nothing returns string
native GetDestructableStringField takes destructable whichDestructable, destructablestringfield whichField returns string
native SetDestructableStringField takes destructable whichDestructable, destructablestringfield whichField, string value returns boolean
native ItemAddAbility takes item whichItem, ability whichAbility returns boolean
native ItemRemoveAbility takes item whichItem, ability whichAbility returns boolean
native ItemAddAbilityId takes item whichItem, integer abilCode returns boolean
native ItemRemoveAbilityId takes item whichItem, integer abilCode returns boolean
native GetProjectileSourceAbility takes projectile whichProjectile returns ability
  1. Проведён большой рефакторинг кода, полностью переписаны все методы логирования на утилизацию нового std::format для полного отброса строк C-стиля.
Пометка: это изменение повлекло увеличение веса на 200кб, так как std::format достаточно увесистый.
  1. BlzSetItemName теперь полноценно реализован с его SetItemStringField эквивалентом.
  2. BlzSetItemDescription теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  3. BlzGetItemDescription теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  4. BlzSetItemTooltip теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  5. BlzGetItemTooltip теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  6. BlzSetItemExtendedTooltip теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  7. BlzGetItemExtendedTooltip теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  8. BlzSetItemIconPath теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  9. BlzGetItemIconPath теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  10. BlzSetUnitName теперь полноценно реализован с его SetItemStringField SetUnitStringField эквивалентом.
  11. BlzSetHeroProperName теперь полноценно реализован с его SetItemStringField SetUnitStringField эквивалентом.
  12. GetDestructableName теперь будет возвращать нестандартное значение, если оно существует.
  13. GetItemName теперь будет возвращать нестандартное значение, если оно существует.
  14. GetUnitName теперь будет возвращать нестандартное значение, если оно существует.
  15. GetHeroProperName теперь будет возвращать нестандартное значение, если оно существует.
  16. Исправлено неправильное поведение события OnDamaged когда входящий урон был равен нулю, так как игра посылала общий указатель, который подвергался изменению через SetEventDamage, тем самым ломая почти всю игру.
  17. Исправлена критическая ошибка от RemoveDoodad.
  18. GetUnitPrimaryStat переименован в GetHeroPrimaryAttribute.
  19. SetUnitPrimaryStat переименован в SetHeroPrimaryAttribute.
  20. GetItemAbility переименован в GetItemAbilityById.
  21. HandleListGetHandleByTypeId переименован в HandleListGetHandleById.
  22. HandleListEnumByTypeId переименован в HandleListEnumById.
  23. HandleListEnumByTypeIdEx переименован в HandleListEnumByIdEx.
  24. HandleListForEachByTypeId переименован в HandleListForEachById.
  25. HandleListForEachByTypeIdEx переименован в HandleListForEachByIdEx.
  26. BlzItemAddAbility теперь полноценно реализован с его UjAPI эквивалентом ItemAddAbilityById.
  27. BlzItemRemoveAbility теперь полноценно реализован с его UjAPI эквивалентом ItemRemoveAbilityById.
1
29
5 месяцев назад
1
О да! Больше гаек, болтов и прочего... Мои гаечные ключи так и ждут, когда начнут закручиваться гайки, болты. Да и отвёртка тоже в деле будет. Близзарды курят нервно в сторонке. Анрайз делает годное, что даже рефорджед переплюнуло. Рефорджед близзардасов не рефорджед. UjAPI - вот он истинный рефорджед, которого все хотели. Или нет.
По сему я скажу: WarCraft III ReUnryzed
1
20
5 месяцев назад
1
Вышла новая версия! Прокрутить к ресурсу

v1.1.0.153

  1. Исправлена критическая ошибка от GetBuffBaseStringFieldById.
  2. Исправлена критическая ошибка от SetBuffBaseStringFieldById.
1
20
5 месяцев назад
1
Вышла новая версия! Прокрутить к ресурсу

v1.1.0.154

  1. Удалено бесполезное логирование для ExecuteCode и схожих нативных функций.
3
20
5 месяцев назад
3
Вышла новая версия! Прокрутить к ресурсу

v1.1.0.155

  1. Исправлена обработка пустой строки, которая вызывала тихое закрытие игры.
    Пометка: это произошло из-за внутренней рекурсии, которую я же и создал, если получаемый текст был пустой или равен nullptr.
0
29
5 месяцев назад
0
Чую,что ещё три hotfix'а будет)
1
20
5 месяцев назад
1
Вышла новая версия! Прокрутить к ресурсу

v1.1.0.156

  1. Переделана обработка OnDamage, дабы избежать новую проблему, из-за которой юниты становились неуязвимыми.
    Пометка: это было связано с предыдущим исправлением 0-левого урона.
0
20
5 месяцев назад
0
Вышла новая версия! Прокрутить к ресурсу

v1.1.1.158

  1. Новые Константы:
    constant playerunitevent EVENT_PLAYER_UNIT_ABILITY_ADDED = ConvertPlayerUnitEvent(503)
    constant playerunitevent EVENT_PLAYER_UNIT_ABILITY_REMOVED = ConvertPlayerUnitEvent(504)
    constant playerunitevent EVENT_PLAYER_UNIT_ABILITY_AUTOCAST_ON = ConvertPlayerUnitEvent(505)
    constant playerunitevent EVENT_PLAYER_UNIT_ABILITY_AUTOCAST_OFF = ConvertPlayerUnitEvent(506)
    constant unitevent EVENT_UNIT_ABILITY_ADDED = ConvertUnitEvent(513)
    constant unitevent EVENT_UNIT_ABILITY_REMOVED = ConvertUnitEvent(514)
    constant unitevent EVENT_UNIT_ABILITY_AUTOCAST_ON = ConvertUnitEvent(515)
    constant unitevent EVENT_UNIT_ABILITY_AUTOCAST_OFF = ConvertUnitEvent(516)
    constant originframetype ORIGIN_FRAME_FPS_TEXT = ConvertOriginFrameType(54)
    constant originframetype ORIGIN_FRAME_MEMORY_TEXT = ConvertOriginFrameType(55)
  2. Новые Нативные Функции:
    native GetMapFogZ takes nothing returns real
    native SetMapFogZ takes real z returns nothing
    native GetMapFogColour takes nothing returns integer
    native SetMapFogColour takes integer colour returns nothing
    native IsAbilityAutocastEnabled takes ability whichAbility returns boolean
  3. GetSpellAbility теперь работает с событиями баффов и новыми событиями заклинаний.
  4. GetSpellAbilityId теперь работает с событиями баффов и новыми событиями заклинаний.
  5. Исправлена SetAbilityOwner, которая не до конца работала с активными заклинаниями (они не отображались в панели, если были созданы напрямую через CreateAbility).
  6. Исправлена критическая ошибка от SetDoodadZ на 1.28f.
0
20
5 месяцев назад
0
Вышла новая версия! Прокрутить к ресурсу

v1.1.1.159

  1. Исправлено взаимодействие UNIT_ABILITY_REMOVED с RemoveUnit, которое приводило к "замораживанию" процесса игры.
0
20
5 месяцев назад
Отредактирован Unryze
0
Вышла новая версия! Прокрутить к ресурсу

v1.1.1.160

  1. Исправлен баг связанный с добавлением/удалением заклинаний скрытому юниту.
    Пометка: это в целом плохой подход, когда юнит спрятан вы не должны ничего с ним делать, отобразите его в начале, а потом уже делайте что нужно!
1
20
5 месяцев назад
1
Вышла новая версия! Прокрутить к ресурсу

v1.1.2.163

  1. Новые Нативные Функции:
    native TextFileRead takes textfilehandle whichTextFile returns string
    native UnitAddItemToSlot takes unit whichUnit, item whichItem, integer itemSlot returns boolean
    native ReviveUnit takes unit whichUnit, real x, real y returns boolean
    native ReviveUnitLoc takes unit whichUnit, location loc returns boolean
  2. TextFileReadAll переименован в TextFileReadAllLines, теперь оно читает именно текст, а не сам файл.
  3. Добавлена экспериментальная поддержка CSimpleFrame в АПИ CBackdropFrame.
  4. Исправлена критическая ошибка от всех вариантов SetModel, эта ошибка связана с не-Ex вариациями, ибо цвет обрабатывался неверно.
  5. Добавлена более точная, но менее строгая внутренняя проверка на "активность" Агента (то, что он не удалён).
    Пометка: это изменение по большей части затрагивает новое АПИ юнитов, которое было через-чур строгое к скрытым/убитым/удалённым юнитам.
0
37
5 месяцев назад
Отредактирован ScorpioT1000
0
Вообще писать все эти Ex это плохие практики, когда разработчик не может придумать правильное имя функции. В винапи оно имеет смысл, т.к. добавляет огромный набор параметров, но все еще является примером плохой архитектуры
2
20
5 месяцев назад
2
Вышла новая версия! Прокрутить к ресурсу

v1.1.3.165

  1. Новые Типы:
    type connectiontype extends handle
  2. Новые Конверторы:
    constant native ConvertConnectionType takes integer i returns connectiontype
  3. Новые Константы:
    constant connectiontype CONNECTION_TYPE_SINGLE_PLAYER = ConvertConnectionType(0)
    constant connectiontype CONNECTION_TYPE_LOCAL_GAME = ConvertConnectionType(1)
    constant connectiontype CONNECTION_TYPE_BATTLE_NET = ConvertConnectionType(2)
    constant connectiontype CONNECTION_TYPE_REPLAY = ConvertConnectionType(3)
  4. Новые Нативные Функции:
    native GetConnectionType takes nothing returns connectiontype
  5. Исправлена некорректная работа GetFrameUnderCursor со фреймами не CSimpleFrame типа.
  6. Исправлено некорректное поведение GetEventIsAttack в DAMAGED событии.
  7. Добавлена поддержка CommandButton_0 по CommandButton_11 в GetFrameByName с contextId 0.
    Пометка: эти имена отвечают за кнопки заклинаний. Пример: GetFrameByName( "CommandButton_0", 0 ).
  8. Добавлена поддержка CommandButton_0 по CommandButton_5 в GetFrameByName с contextId 1.
    Пометка: эти имена отвечают за кнопки предметов. Пример: GetFrameByName( "CommandButton_0", 1 ).
  9. Исправлена некорректная обработка цвета в SetModel.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.