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, вот так:
скриншоты

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

`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
30
ок, а как его привязать например к равкоду абилки?
Равкод это число.
SaveInteger(Таблица, Равкод, 0, ИндексМассива)
Не скажется ли это на фпс/производительности?
Перебор массива гораздо производительней получения значения таблицы.
23
nazarpunk, Что ж, интересная концепция. Пожалуй, можно пробовать. Но вот вопрос в рациональности - если требуется перебрать всего 60 значений максимум, имеет ли такая оптимизация смысл?
30
Но вот вопрос в рациональности - если требуется перебрать всего 60 значений максимум, имеет ли такая оптимизация смысл?
Если есть возможность не перебирать, то зачем перебирать?
23
nazarpunk, может быть там внутри хт идёт свой код перебора, который в случае с маленьким количеством значений ещё хуже перебора массива, хт ведь не волшебным образом определяет и ищет данные внутри себя.
20
nazarpunk, может быть там внутри хт идёт свой код перебора, который в случае с маленьким количеством значений ещё хуже перебора массива, хт ведь не волшебным образом определяет и ищет данные внутри себя.
500 нс разницы (700 против 200), если ты делаешь чтения хотя бы 1000 раз в 1 функции, тогда да, ты ощутишь это... Добавь StringHash, вот тогда уже 400 переборов будет проявляться хоть как-то. Но опять же, ты эту скорость почти нигде не почувствуешь, пока конкретно что-то не перегрузишь.
23
Unryze, Спасибо за пояснение. Значит, с мелким количеством значений разницы не будет.
20
Unryze, Спасибо за пояснение. Значит, с мелким количеством значений разницы не будет.
Ну, всегда можешь тестировать в отдельной карте (взять МемХак карту мою или UjAPI) и проверяй задержку и т.д. если оно тебе очень интересно. Но если изначально запланировать код максимально простым, то там "нагружать" будет толком нечему. Да и многое тяжёлое можно разгрузить/разделить и т.д.
23
Unryze, Можно конечно, спасибо за предложение) но мне в приоритете важнее не отловить микросекунд, а как оно скажется на фпс и визуале. Игрокам ведь до лампочки, что там и как сделано, лишь бы работало и глюков не было, и чтобы было интересно)
20
Вышла новая версия! Прокрутить к ресурсу

v1.0.15.67

  1. Изменения Типов:
subanimtype теперь расширяет animtype, чтобы иметь доступ к новой нативной функции GetAnimationName для получения имени анимации по её индексу.
  1. Новые Константы:
constant itemstringfield ITEM_SF_ABILITY_LIST = ConvertItemStringField('iabi')
constant itemstringfield ITEM_SF_ICON = ConvertItemStringField('iico')
constant unitstringfield UNIT_SF_ICON_NORMAL = ConvertUnitStringField('uico')
constant unitstringfield UNIT_SF_ICON_SCORE_SCREEN = ConvertUnitStringField('ussi')
constant unitstringfield UNIT_SF_MODEL = ConvertUnitStringField('umdl')
constant unitstringfield UNIT_SF_PORTRAIT = ConvertUnitStringField('upor')
constant unitstringfield UNIT_SF_SPECIAL = ConvertUnitStringField('uspa')
constant unitstringfield UNIT_SF_TOOLTIP_AWAKEN = ConvertUnitStringField('uawt')
constant unitstringfield UNIT_SF_TOOLTIP_REVIVE = ConvertUnitStringField('utpr')
  1. Новые Нативные Функции:
native HandleToHandle takes handle h returns handle
native SaveHandle takes hashtable table, integer parentKey, integer childKey, handle whichHandle returns boolean
native SaveAttackTypeHandle takes hashtable table, integer parentKey, integer childKey, attacktype whichAttackType returns boolean
native SaveDamageTypeHandle takes hashtable table, integer parentKey, integer childKey, damagetype whichDamageType returns boolean
native SaveWeaponTypeHandle takes hashtable table, integer parentKey, integer childKey, weapontype whichWeaponType returns boolean
native LoadHandle takes hashtable table, integer parentKey, integer childKey returns handle
native LoadAttackTypeHandle takes hashtable table, integer parentKey, integer childKey returns attacktype
native LoadDamageTypeHandle takes hashtable table, integer parentKey, integer childKey returns damagetype
native LoadWeaponTypeHandle takes hashtable table, integer parentKey, integer childKey returns weapontype
native GetAnimationName takes animtype whichAnim returns string
native QueueImmediateOrderById takes unit whichUnit, integer order returns boolean
native QueuePointOrderById takes unit whichUnit, integer order, real x, real y returns boolean
native QueueTargetOrderById takes unit whichUnit, integer order, widget targetWidget returns boolean
native QueueInstantPointOrderById takes unit whichUnit, integer order, real x, real y, widget instantTargetWidget returns boolean
native QueueInstantTargetOrderById takes unit whichUnit, integer order, widget targetWidget, widget instantTargetWidget returns boolean
native QueueBuildOrderById takes unit whichPeon, integer unitId, real x, real y returns boolean
native QueueNeutralImmediateOrderById takes player forWhichPlayer, unit neutralStructure, integer unitId returns boolean
native QueueNeutralPointOrderById takes player forWhichPlayer, unit neutralStructure, integer unitId, real x, real y returns boolean
native QueueNeutralTargetOrderById takes player forWhichPlayer, unit neutralStructure, integer unitId, widget target returns boolean
native GetUnitOrderCount takes unit whichUnit returns integer
native GetUnitOrderIdByIndex takes unit whichUnit, integer index returns integer
native UnitClearOrders takes unit whichUnit, boolean onlyQueued returns nothing
native UnitForceStopOrder takes unit whichUnit, boolean clearQueue returns nothing
  1. Исправлена ошибка JASS парсера, которая не отображала правильный текст ошибки.
  2. Исправлена ошибка случайно сломанной поддержки патча 1.27а.
  3. Переделана в очередной раз система обработки получения урона, которая ломалась при использовании CastTargetAbility внутри DAMAGING события.
  4. Переделан движок фреймов, который был случайно сломан в одном из предидущих обновлений.
18
Крашит при загрузке таблицы, Без лаунчера работает.
/ /! loaddata "data.slk"
Карты с UJApi могут запускаться на айкапе или ирине?
20
Borodach, карты разработанные с этими нативками работают только с лаунчером. Соответственно на iccup не поиграть. На боте надо при создании игры выбрать версию с лаунчером
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.