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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
20
nazarpunk, плохой пример. Тут как раз аггрегация должна быть. Точек у юнита может быть много для разных целей

Интерфейс - это контракт в первую очередь. Когда мы пишем функционал для применения в различных ситуациях, описываем контракты, по которым функционал заявляет свою работу
Виджет мог бы таким послужить, если бы близзы не реализовывали функции-клоны для наследников виджета. А раз реализовали - значит, они отличаются и это не очень похоже на наследование/реализацию
Не совсем так с виджетами. Просто у юнитов есть больше данных, нежели у разрушаемых и предметов (они используют CSpriteMini), но большая часть функционала идентична. Потом я и добавил целый пак виджетАПИ, который фактически объединяет всё нужное/общее, если лень типизировать. Но до реального интерфейса там кот наплакал... :(
23
Kokomi, ну если посмотреть на этот пример, то получается, что в функции типа interface можно добавить в виде аргумента другую функцию типа interface, а в функцию типа method можно добавить обычные функции. Что то вроде call Execute Func, куда можно любую строку вставить, и создать базу функций в виде string массива. Но вообще, по честному говоря, я запутался. Слишком тяжело, имхо, разбираться во всех этих наворотах, да и ошибиться намного легче...
20
EugeAl, это не функция типа интерфейс, а объект, реализующий интерфейс. В JASS это все сложно представить и как-то юзать. Я бы посоветовал немного поковырять Java или C#, если будет скучно - JS
8
EugeAl, интерфейс это скорее абстрактный тип, но не функция, он только содержит их сигнатуры, а реализация ложится на тех, кто наследует интерфейс.
20
Такой вопрос (только к тем, кто использует джасс), добавлять ли возможность ExecuteFunc/Code с вариативными аргументами таким образом:
function Multiply takes integer num, real multiplier returns real
	return num * multiplier
endfunction

function TestSomething takes nothing returns nothing
local real result = 0.
call PushInteger( 100 )
call PushReal( 1.5 )
set result = VarToReal( ExecuteVariedFunc( "Multiply" ) )
endfunction
Это уже конечно "велосипед" (зато какой). То бишь ExecuteVariedFunc будет возвращать хендл типа Var, который можно будет кастить в другие типы. Думаю это всё явно лишнее, но интересно что скажете.

v1.0.12.59

  1. Исправлена критическая ошибка на 1.28.5.
Пояснение: данная ошибка была связана с выполнением какого-либо действия, допустим нажатия системных фреймов, выделением юнита и так далее. Обычное движение мышки и камеры не вызывало ошибки.
  1. Исправлены CastAbilityGround и CastAbilityTarget нативные функции.
Дополнение: НЕ ИСПОЛЬЗУЙТЕ эти функции без какой-либо задержки из main функции, так как игра может не успеть подготовить события под этим заклинания и т.д.
  1. Исправлена критическая ошибка при создании фреймов в lua через war3_lua.dll.
20
Такой вопрос (только к тем, кто использует джасс), добавлять ли возможность ExecuteFunc/Code с вариативными аргументами таким образом:
Скопировать в буфер
А почему бы и нет? Выглядит неплохо, я только за.
30
Думаю это всё явно лишнее, но интересно что скажете.
А функцию можно аргументом передать?
20
Думаю это всё явно лишнее, но интересно что скажете.
А функцию можно аргументом передать?
Это выше возможностей джасса уже. Функции нельзя передавать, лишь их результат.
20
Вышла новая версия! Прокрутить к ресурсу

v1.0.12.60

  1. Откат изменения нативных функций CreateFrame/CreateFrameByType, так как данное исправление изменяла "ломала" внутреннюю логику позиции фреймов в памяти игры.
    Дополнение: чтобы избежать критической ошибки на выходе из карты/игры, НЕ СОЗДАВАЙТЕ фреймы из main функции без какой-либо задержки с помощью таймера.
  2. Добавлен перехват всех Frames/SimpleFrames/SimpleTextures/SimpleFonts для того, чтобы предотвратить попытку очищения пустой памяти фреймами.
    Дополнение: это исправление "контрмера" для нужды использования таймеров, как было сказано в пункте #1.
20
Вышла новая версия! Прокрутить к ресурсу

v1.0.13.63

  1. Новые Типы:
type buffstringfield extends handle
  1. Новые Конверторы:
constant native ConvertBuffStringField takes integer i returns buffstringfield
  1. Новые Константы:
constant buffstringfield BUFF_SF_ICON_NORMAL = ConvertBuffStringField('fart')
constant buffstringfield BUFF_SF_TOOLTIP_NORMAL = ConvertBuffStringField('ftip')
constant buffstringfield BUFF_SF_TOOLTIP_NORMAL_EXTENDED = ConvertBuffStringField('fube')
constant unitstringfield UNIT_SF_HERO_ABILITY_LIST = ConvertUnitStringField('uhab')
constant unitstringfield UNIT_SF_ABILITY_LIST = ConvertUnitStringField('uabi')
  1. Новые Нативные Функции:
native GetUjAPIVersion takes nothing returns string
native HideOriginFrames takes boolean flag returns nothing
native EditBlackBorders takes real upperHeight, real bottomHeight returns nothing
Ability
native GetAbilityOrderId takes ability whichAbility returns integer this replaced GetAbilityOrder, used wrong naming
native SetAbilityOrderId takes ability whichAbility, integer orderId returns boolean Highly experimental, may be removed if proven unstable.
native SetAbilityLevel takes ability whichAbility, integer level returns boolean
Ability Base Field API
native GetAbilityBaseIntegerFieldById takes integer aid, abilityintegerfield whichField returns integer
native SetAbilityBaseIntegerFieldById takes integer aid, abilityintegerfield whichField, integer value returns boolean
native GetAbilityBaseBooleanFieldById takes integer aid, abilitybooleanfield whichField returns boolean
native SetAbilityBaseBooleanFieldById takes integer aid, abilitybooleanfield whichField, boolean value returns boolean
native GetAbilityBaseRealFieldById takes integer aid, abilityrealfield whichField returns real
native SetAbilityBaseRealFieldById takes integer aid, abilityrealfield whichField, real value returns boolean
native GetAbilityBaseStringFieldById takes integer aid, abilitystringfield whichField returns string
native SetAbilityBaseStringFieldById takes integer aid, abilitystringfield whichField, string value returns boolean
native GetAbilityBaseIntegerLevelFieldById takes integer aid, abilityintegerlevelfield whichField, integer level returns integer
native SetAbilityBaseIntegerLevelFieldById takes integer aid, abilityintegerlevelfield whichField, integer level, integer value returns boolean
native GetAbilityBaseBooleanLevelFieldById takes integer aid, abilitybooleanlevelfield whichField, integer level returns boolean
native SetAbilityBaseBooleanLevelFieldById takes integer aid, abilitybooleanlevelfield whichField, integer level, boolean value returns boolean
native GetAbilityBaseRealLevelFieldById takes integer aid, abilityreallevelfield whichField, integer level returns real
native SetAbilityBaseRealLevelFieldById takes integer aid, abilityreallevelfield whichField, integer level, real value returns boolean
native GetAbilityBaseStringLevelFieldById takes integer aid, abilitystringlevelfield whichField, integer level returns string
native SetAbilityBaseStringLevelFieldById takes integer aid, abilitystringlevelfield whichField, integer level, string value returns boolean
native GetAbilityBaseIntegerLevelArrayFieldById takes integer aid, abilityintegerlevelarrayfield whichField, integer level, integer index returns integer
native SetAbilityBaseIntegerLevelArrayFieldById takes integer aid, abilityintegerlevelarrayfield whichField, integer level, integer index, integer value returns boolean
native AddAbilityBaseIntegerLevelArrayFieldById takes integer aid, abilityintegerlevelarrayfield whichField, integer level, integer value returns boolean
native RemoveAbilityBaseIntegerLevelArrayFieldById takes integer aid, abilityintegerlevelarrayfield whichField, integer level, integer value returns boolean
native GetAbilityBaseBooleanLevelArrayFieldById takes integer aid, abilitybooleanlevelarrayfield whichField, integer level, integer index returns boolean
native SetAbilityBaseBooleanLevelArrayFieldById takes integer aid, abilitybooleanlevelarrayfield whichField, integer level, integer index, boolean value returns boolean
native AddAbilityBaseBooleanLevelArrayFieldById takes integer aid, abilitybooleanlevelarrayfield whichField, integer level, boolean value returns boolean
native RemoveAbilityBaseBooleanLevelArrayFieldById takes integer aid, abilitybooleanlevelarrayfield whichField, integer level, boolean value returns boolean
native GetAbilityBaseRealLevelArrayFieldById takes integer aid, abilityreallevelarrayfield whichField, integer level, integer index returns real
native SetAbilityBaseRealLevelArrayFieldById takes integer aid, abilityreallevelarrayfield whichField, integer level, integer index, real value returns boolean
native AddAbilityBaseRealLevelArrayFieldById takes integer aid, abilityreallevelarrayfield whichField, integer level, real value returns boolean
native RemoveAbilityBaseRealLevelArrayFieldById takes integer aid, abilityreallevelarrayfield whichField, integer level, real value returns boolean
native GetAbilityBaseStringLevelArrayFieldById takes integer aid, abilitystringlevelarrayfield whichField, integer level, integer index returns string
native SetAbilityBaseStringLevelArrayFieldById takes integer aid, abilitystringlevelarrayfield whichField, integer level, integer index, string value returns boolean
native AddAbilityBaseStringLevelArrayFieldById takes integer aid, abilitystringlevelarrayfield whichField, integer level, string value returns boolean
native RemoveAbilityBaseStringLevelArrayFieldById takes integer aid, abilitystringlevelarrayfield whichField, integer level, string value returns boolean
Buff Base Field API
native GetBuffBaseStringFieldById takes integer aid, buffstringfield whichField returns string
native SetBuffBaseStringFieldById takes integer aid, buffstringfield whichField, string value returns boolean
Buff Field API
native GetBuffStringField takes buff whichBuff, buffstringfield whichField returns string
native SetBuffStringField takes buff whichBuff, buffstringfield whichField, string value returns boolean
Item Base Field API
native GetBaseItemIntegerFieldById takes integer itemId, itemintegerfield whichField returns integer
native SetBaseItemIntegerFieldById takes integer itemId, itemintegerfield whichField, integer value returns boolean
native GetBaseItemBooleanFieldById takes integer itemId, itembooleanfield whichField returns boolean
native SetBaseItemBooleanFieldById takes integer itemId, itembooleanfield whichField, boolean value returns boolean
native GetBaseItemRealFieldById takes integer itemId, itemrealfield whichField returns real
native SetBaseItemRealFieldById takes integer itemId, itemrealfield whichField, real value returns boolean
native GetBaseItemStringFieldById takes integer itemId, itemstringfield whichField returns string
native SetBaseItemStringFieldById takes integer itemId, itemstringfield whichField, string value returns boolean
Unit Base Field API
native GetUnitBaseIntegerFieldById takes integer unitTypeId, unitintegerfield whichField returns integer
native SetUnitBaseIntegerFieldById takes integer unitTypeId, unitintegerfield whichField, integer value returns boolean
native GetUnitBaseBooleanFieldById takes integer unitTypeId, unitbooleanfield whichField returns boolean
native SetUnitBaseBooleanFieldById takes integer unitTypeId, unitbooleanfield whichField, boolean value returns boolean
native GetUnitBaseRealFieldById takes integer unitTypeId, unitrealfield whichField returns real
native SetUnitBaseRealFieldById takes integer unitTypeId, unitrealfield whichField, real value returns boolean
native GetUnitBaseStringFieldById takes integer unitTypeId, unitstringfield whichField returns string
native SetUnitBaseStringFieldById takes integer unitTypeId, unitstringfield whichField, string value returns boolean
native GetUnitBaseWeaponIntegerFieldById takes integer unitTypeId, unitweaponintegerfield whichField, integer index returns integer
native SetUnitBaseWeaponIntegerFieldById takes integer unitTypeId, unitweaponintegerfield whichField, integer index, integer value returns boolean
native GetUnitBaseWeaponBooleanFieldById takes integer unitTypeId, unitweaponbooleanfield whichField, integer index returns boolean
native SetUnitBaseWeaponBooleanFieldById takes integer unitTypeId, unitweaponbooleanfield whichField, integer index, boolean value returns boolean
native GetUnitBaseWeaponRealFieldById takes integer unitTypeId, unitweaponrealfield whichField, integer index returns real
native SetUnitBaseWeaponRealFieldById takes integer unitTypeId, unitweaponrealfield whichField, integer index, real value returns boolean
native GetUnitBaseWeaponStringFieldById takes integer unitTypeId, unitweaponstringfield whichField, integer index returns string
native SetUnitBaseWeaponStringFieldById takes integer unitTypeId, unitweaponstringfield whichField, integer index, string value returns boolean
  1. Исправлена критическая ошибка от всех EX нативных функций, связанных с полями заклинаний.
  2. Исправлена критическая ошибка, связанная с нативной функцией CreateSimpleFrame когда не CSimpleFrame был послан как родительский в аргументах.
  3. FRAMEEVENT_CONTROL_CLICK теперь может быть использован со всеми CSimpleButtons, а точнее:
CSimpleButton
CReplayButton
CTrainableButton
CCommandButton
CHeroBarButton
CSimpleCheckbox
  1. FRAMEEVENT_MOUSE_ENTER и FRAMEEVENT_MOUSE_LEAVE теперь могут быть использованы со всеми CSimpleFrames.
    Пояснение: CSimpleTexture и CSimpleFontString (то бишь CSimpleRegions) не поддерживаются, так как у них нет внутренних событий.
  2. Добавлена поддержка этих JN Нативных Функций:
native BitOr takes integer x,integer y returns integer
native BitAnd takes integer x,integer y returns integer
native BitXor takes integer x,integer y returns integer
native BitShiftL takes integer x,integer y returns integer
native BitShiftR takes integer x,integer y returns integer
native JNI2R takes integer i returns real
native JNR2I takes real r returns integer
native JNGetMaxAttackSpeed takes nothing returns real
native IsReplayMode takes nothing returns boolean
native IsHostPlayer takes nothing returns boolean
native JNStringPos takes string str,string sub returns integer
native JNStringReverse takes string str returns string
native JNStringCount takes string str,string sub returns integer
native JNStringContains takes string str,string sub returns boolean
native JNStringReplace takes string str,string old,string newstr returns string
native JNStringInsert takes string str,integer index,string val returns string
native JNStringSub takes string str,integer start,integer length returns string
native JNStringLength takes string str returns integer
Пояснение: остальные нативные функции будут видны для UjAPI, но они не будет выполнять ничего, но возвращать "пустые", но валидные данные, для превенции крашей.
  1. Немного переделана система события урона, которая иногда посылала неверные данные, которые вызывали краш.
  2. Исправлена неверная обработка цвета для всех CControl фреймов, то бишь CTextFrame и прочих.
  3. Удалены все "эмулированные" табы через пробелы в common.j, что повлияло на снижение веса на 30 КБ.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.