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

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

`
ОЖИДАНИЕ РЕКЛАМЫ...
3
29
2 года назад
3
может зря гисты ввели вообще?
Они удобны, если в статье много кода, то править её боль и страдания. Да и подсветка кода на xgm ужасна, гитхаб лучше с этим справляется.
0
29
2 года назад
Отредактирован Волчачка
0
nazarpunk, ScorpioT1000 что нам мешает создать собственный?
На всякий случай, по типу gist.xgm.guru
0
18
2 года назад
0
Ev3nt, ну это то понятно.
Unryze, что ж, это хорошо, что планируете. Если хотите сделать красивый лаунчер, с красивыми кнопками, рамкой, фоном и т д - пишите в лс, попробую помочь, нарисовать. Только мне потребуется эскиз и список картинок с параметрами: формат и размер в пикселях. За основу возьму интерфейс главного меню вк3.
0
37
2 года назад
0
Или бахнуть на webview xD
2
20
2 года назад
2
Ev3nt, ну это то понятно.
Unryze, что ж, это хорошо, что планируете. Если хотите сделать красивый лаунчер, с красивыми кнопками, рамкой, фоном и т д - пишите в лс, попробую помочь, нарисовать. Только мне потребуется эскиз и список картинок с параметрами: формат и размер в пикселях. За основу возьму интерфейс главного меню вк3.
Спасибо, но стилистику War 3 я вряд ли в целом буду использовать, текущий лаунчер - просто пустышка, визуально будет конечно переделываться. По дизайну я склоняюсь ближе к лаунчеру Battle.net, нежели именно Вар 3 тематики, но когда руки до этого дойдут, буду знать к кому обращаться. :)
4
29
2 года назад
4
Спасибо, но стилистику War 3 я вряд ли в целом буду использовать
И правильно, на лаунчер не нужно луюбоваться, им пользоваться нужно. ИМХО нарисовать всё на системном ui с поддержкой тем и обязательно опциональную восьмибитную музычку.
5
20
2 года назад
Отредактирован Unryze
5
Вышла новая версия!

v1.0.1.9

  1. Новые нативные функции:
    native ForceHasPlayer takes force whichForce, player whichPlayer returns boolean
    native ForceCountPlayers takes force whichForce returns integer
    native GetUnitBuff takes unit whichUnit, integer buffId returns buff
    native GetUnitBuffLevel takes unit whichUnit, integer buffId returns integer
    native GetBuffLevel takes buff whichBuff returns integer
    native RefreshBuff takes buff whichBuff returns boolean
    native SetBuffDuration takes buff whichBuff, real duration returns boolean
  1. Исправлена ошибка по которой утекало 20 байт в CScriptEvent ввиду повторного выделения памяти.
  2. Исправлено неверное название нативной функции (SetFrameFront) на SetFrameFont.
  3. Включены эти нативные функции:
    1. TriggerRegisterFrameEvent
    2. GetTriggerFrame
    3. GetTriggerFrameEvent
  4. Исправлена критическая ошибка, если была использована какая-либо нативная функция фреймов, где в аргументах фигурировал string.
  5. Все кейсы HotKey исправлены на Hotkey.
  6. Все новые геттеры и сеттеры связанные с кнопками используют тип oskeytype.
  7. MorphUnitToTypeIdEx расшифрована, теперь все аргументы имеют правильные названия.
  8. Исправлена ошибка, по которой новые нативки работали лишь у хоста в локальной/игре по сети.
  9. Исправлен запуск w3l и прочих сторонних "запускаторов" игры через UjAPI.exe.
    Пометка: сторонние "запускаторы" не поддерживают мульти-окно и War3Lua дебаг режим, для их работы нужно запускать игру через war3.exe и прочее.
  10. Добавлен модуль War3_Lua.dll в папку Modules.
3
20
2 года назад
Отредактирован Unryze
3
Вышла новая версия!

v1.0.2.12

  1. Новые нативные функции:
    native SaveFrameHandle takes hashtable table, integer parentKey, integer childKey, framehandle whichFrame returns boolean
    native LoadFrameHandle takes hashtable table, integer parentKey, integer childKey returns framehandle

    native GetEventPreDamage takes nothing returns real
  1. Весь common.j был отредактирован и "оттабулирован" (это изменение никак не влияет на производительность, только на семантику и синтаксис).
  2. Нативные функции GroupAddGroupEx и GroupRemoveGroupEx теперь возвращают целочисленное значение, вместо флага (то есть сколько юнитов было добавлено/удалено).
  3. Добавлены новые нативные типы вместе с их конвертаторами и глобальными константами:
    type abilityintegerfield extends handle
    type abilityrealfield extends handle
    type abilitybooleanfield extends handle
    type abilitystringfield extends handle
    type abilityintegerlevelfield extends handle
    type abilityreallevelfield extends handle
    type abilitybooleanlevelfield extends handle
    type abilitystringlevelfield extends handle
    type abilityintegerlevelarrayfield extends handle
    type abilityreallevelarrayfield extends handle
    type abilitybooleanlevelarrayfield extends handle
    type abilitystringlevelarrayfield extends handle
    type unitintegerfield extends handle
    type unitrealfield extends handle
    type unitbooleanfield extends handle
    type unitstringfield extends handle
    type unitweaponintegerfield extends handle
    type unitweaponrealfield extends handle
    type unitweaponbooleanfield extends handle
    type unitweaponstringfield extends handle
    type itemintegerfield extends handle
    type itemrealfield extends handle
    type itembooleanfield extends handle
    type itemstringfield extends handle
  1. Исправлена критическая ошибка от нативной функции CreateFrameByType на патче 1.27a.
  2. Исправлены все нативные функции SpecialEffectAPI, большинство из них не работало/вызывало краш.
2
29
2 года назад
2
только на сменатику и синтаксис
Сменатика очень важна для для работы)
5
20
2 года назад
Отредактирован Unryze
5
Вышла новая версия!
только на сменатику и синтаксис
Сменатика очень важна для для работы)
Ой, произошла дислексия, вместо "семантика" написал какого-то смегола. Спасибо, поправлю. :)

v1.0.3.15

  1. Исправлена критическая ошибка от нативных функций имеющих string в аргументах из Item API.
  2. Новые нативные функции:
    native BitwiseNOT takes integer i returns integer
    native BitwiseAND takes integer bit1, integer bit2 returns integer
    native BitwiseOR takes integer bit1, integer bit2 returns integer
    native BitwiseXOR takes integer bit1, integer bit2 returns integer
    native BitwiseShiftLeft takes integer bit1, integer bitsToShift returns integer
    native BitwiseShiftRight takes integer bit1, integer bitsToShift returns integer
    native Id2String takes integer i returns string
    native String2Id takes string idString returns integer
    native GetUnitBaseDescriptionById takes integer unitTypeId returns string
    native SetUnitBaseDescriptionById takes integer unitTypeId, string name returns nothing
    native GetUnitBaseIconById takes integer unitTypeId returns string
    native SetUnitBaseIconById takes integer unitTypeId, string name returns nothing
    native GetUnitBaseDescription takes unit whichUnit returns string
    native SetUnitBaseDescription takes unit whichUnit, string name returns nothing
    native GetUnitBaseIcon takes unit whichUnit returns string
    native SetUnitBaseIcon takes unit whichUnit, string name returns nothing
    native GetItemBaseDescriptionById takes takes integer itemId returns string
    native SetItemBaseDescriptionById takes integer itemId, string name returns nothing
    native GetItemBaseDescription takes item whichItem returns string
    native SetItemBaseDescription takes item whichItem, string name returns nothing
  1. Внутренние флаги MorphUnitToTypeId isUpdateHealthState, isUpdateManaState и isResetBuildingAnimation теперь являются "истиной", ранее были "ложью".
  2. MorphUnitToTypeId теперь также восстанавливает "белое" значение атаки до оригинального показателя.
  3. SetUnitBaseProperNameById изменена последовательность аргументов на "unit, integer, string" заместо "unit, string, integer".
  4. Исправлены все "сеттеры" для SpecialEffectAPI.
  5. Исправлены эти нативные функции:
    native GroupGetUnitByIndex takes group whichGroup, integer index returns unit
    native GroupForEachUnit takes group whichGroup returns unit
    native GroupAddGroupEx takes group destGroup, group sourceGroup returns integer
    native GroupRemoveGroupEx takes group destGroup, group sourceGroup returns integer
4
20
2 года назад
Отредактирован Unryze
4
Вышла новая версия!

v1.0.4.22

  1. Нативная функция IsAbilityShown переименована в IsAbilityVisible.
  2. Все возвращаемые типы сеттеров в AbilityAPI были изменены с "integer" на "nothing", ввиду того, что возвращаемые данные были не валидными.
  3. Новые нативные функции:
    native I2C takes integer i returns code
    native C2I takes code c returns integer
    native MathRound takes real r returns integer
    native MathRealRound takes real r returns real
    native MathRealFloor takes real r returns real
    native MathRealCeil takes real r returns real
    native MathRealAbs takes real r returns real
    native MathRealLog takes real r returns real
    native MathRealLn takes real r returns real
    native MathIntegerAbs takes integer i returns integer
    native MathIntegerLog takes integer i returns real
    native MathIntegerLn takes integer i returns real
    native StringContains takes string s, string whichString returns boolean
    native StringFind takes string s, string whichString returns integer
    native StringFindFirstOf takes string s, string whichString returns integer
    native StringFindFirstNotOf takes string s, string whichString returns integer
    native StringFindLastOf takes string s, string whichString returns integer
    native StringFindLastNotOf takes string s, string whichString returns integer
    native IsOperationLimitEnabled takes nothing returns boolean
    native EnableOperationLimit takes boolean enable returns nothing
    native ExecuteFuncEx takes string funcName returns nothing
    native GetUnitDamageReduction takes unit whichUnit returns real
    native IsUnitAbilityVisible takes unit whichUnit, integer abilityId returns integer
    native ShowUnitAbility takes unit whichUnit, integer abilityId, boolean flag returns nothing
  4. Расшифрованы эти нативные функции:
    native SilenceAbility takes ability whicAbility, boolean hide, boolean disable returns nothing
    native UnsilenceAbility takes ability whicAbility, boolean show, boolean enable returns nothing
Теперь аргументы этих функций имеют нормальные названия.
  1. Исправлена нативная функция GetUnitAblity, по каким-то причинам, она не брала заклинания выше 1 уровня.
  2. Пере-пере-исправлены сеттеры x/y/z в SpecialEffectAPI.
  3. Исправлена неправильная проверка флагов в нативной функции IsAbilityOnCooldown.
  4. Исправлена неправильная проверка флагов в нативной функции IsFrameVisible.
  5. Исправлена нативная функция SetUnitCurrentSight.
  6. TriggerRegisterFrameEvent теперь работает верно и полноценно создаёт новый ивент для заданного фрейма.
    Пометка: пока что реализованы не все ивенты, а так же эти ивенты пока что локальные, однако скоро они будут работать и в мультиплеере.
  7. Исправлена критическая ошибка когда Нейтральный Пассивный игрок был подвержен урону.
  8. Исправлена критическая ошибка при запуске карты на 1.28.5.
2
20
1 год назад
Отредактирован Unryze
2
Вышла новая версия!

v1.0.5.31

  1. Новые типы:
    type timetype extends handle
  2. Новые конвертеры:
    constant native ConvertTimeType takes integer i returns timetype
  3. Новые константы:
    constant timetype TIME_TYPE_YEAR = ConvertTimeType( 0 )
    constant timetype TIME_TYPE_MONTH = ConvertTimeType( 1 )
    constant timetype TIME_TYPE_DAY_OF_WEEK = ConvertTimeType( 2 )
    constant timetype TIME_TYPE_DAY = ConvertTimeType( 3 )
    constant timetype TIME_TYPE_HOUR = ConvertTimeType( 4 )
    constant timetype TIME_TYPE_MINUTE = ConvertTimeType( 5 )
    constant timetype TIME_TYPE_SECOND = ConvertTimeType( 6 )
    constant timetype TIME_TYPE_MILLISECOND = ConvertTimeType( 7 )
  4. Новые нативные функции:
    native GetSystemTime takes timetype whichTimeType returns integer
    native GetLocalTime takes timetype whichTimeType returns integer
    native ExecuteCode takes code c returns nothing
    native SyncInteger takes string variableName returns nothing
    native SyncReal takes string variableName returns nothing
    native SyncBoolean takes string variableName returns nothing
    native SyncString takes string variableName returns nothing
    native SyncHandle takes string variableName returns nothing
    native SyncSavedInteger takes hashtable table, integer parentKey, integer childKey returns nothing
    native SyncSavedReal takes hashtable table, integer parentKey, integer childKey returns nothing
    native SyncSavedBoolean takes hashtable table, integer parentKey, integer childKey returns nothing
    native SyncSavedHandle takes hashtable table, integer parentKey, integer childKey returns nothing
    native SyncSavedString takes hashtable table, integer parentKey, integer childKey returns nothing
  5. Улучшение кода и увеличение производительности.
0
37
1 год назад
0
Millisecond - с двумя l пишется. Велосипед изобретал вместо готовой либы?)
2
20
1 год назад
2
Millisecond - с двумя l пишется. Велосипед изобретал вместо готовой либы?)
Провтыкал. Поправлю По поводу "готовой" либы не понял, ибо какие готовые либы и на что...?
0
37
1 год назад
Отредактирован ScorpioT1000
0
Думал, формат времени из строки-шаблона планируешь делать (есть готовый strftime)
0
20
1 год назад
0
Думал, формат времени из строки-шаблона планируешь делать (есть готовый strftime)
Это я может и добавлю тоже, просто это стандартное получение просто времени, а дальше юзверь может что угодно делать. Это Jass, а не lua, тут нужна максимальная простота. :D
0
19
1 год назад
0
На счёт Jass, а не Lua, я хз, как будет работать синхронизация на Lua, т.к. ты её реализовал по имени переменной. :D
0
20
1 год назад
0
На счёт Jass, а не Lua, я хз, как будет работать синхронизация на Lua, т.к. ты её реализовал по имени переменной. :D
Оно строго берёт значения из джасс, ей пофиг на луа. Технически я могу и под луа это сделать... но желания 0.
0
19
1 год назад
0
Я так и понял. Не проще ли тогда было сделать, чтобы она принимала не название переменной, а её значение?

Хотяяя, с другой стороны, у нас есть доступ к Jass переменным из Lua, так что временно пофиг. 😁
2
20
1 год назад
2
Я так и понял. Не проще ли тогда было сделать, чтобы она принимала не название переменной, а её значение?

Хотяяя, с другой стороны, у нас есть доступ к Jass переменным из Lua, так что временно пофиг. 😁
И куда мне это значение синхать? Пример кода:
globals
    integer GlobalInteger = 0
endglobals

function TestSync takes nothing returns nothing
    if GetLocalPlayer( ) == Player( 0 ) then
        set GlobalInteger = 999
        call SyncInteger( "GlobalInteger" )
    endif
endfunction
2
20
1 год назад
Отредактирован Unryze
2
Вышла новая версия!

v1.0.6.34

  1. Новые Типы:
type variabletype extends handle
  1. Новые Конверторы:
constant native ConvertVariableType takes integer i returns variabletype
  1. Новые Константы:
constant variabletype VARIABLE_TYPE_NOTHING = ConvertVariableType(0)
constant variabletype VARIABLE_TYPE_UNKNOWN = ConvertVariableType(1)
constant variabletype VARIABLE_TYPE_NULL = ConvertVariableType(2)
constant variabletype VARIABLE_TYPE_CODE = ConvertVariableType(3)
constant variabletype VARIABLE_TYPE_INTEGER = ConvertVariableType(4)
constant variabletype VARIABLE_TYPE_REAL = ConvertVariableType(5)
constant variabletype VARIABLE_TYPE_STRING = ConvertVariableType(6)
constant variabletype VARIABLE_TYPE_HANDLE = ConvertVariableType(7)
constant variabletype VARIABLE_TYPE_BOOLEAN = ConvertVariableType(8)
constant variabletype VARIABLE_TYPE_INTEGER_ARRAY = ConvertVariableType(9)
constant variabletype VARIABLE_TYPE_REAL_ARRAY = ConvertVariableType(10)
constant variabletype VARIABLE_TYPE_STRING_ARRAY = ConvertVariableType(11)
constant variabletype VARIABLE_TYPE_HANDLE_ARRAY = ConvertVariableType(12)
constant variabletype VARIABLE_TYPE_BOOLEAN_ARRAY = ConvertVariableType(13)
  1. Новые Нативные Функции:
native GetSyncedVariableType takes nothing returns variabletype
native GetSyncedVariableName takes nothing returns string
native GetSyncedInteger takes nothing returns integer
native GetSyncedReal takes nothing returns real
native GetSyncedString takes nothing returns string
native GetSyncedHandle takes nothing returns handle
native GetSyncedBoolean takes nothing returns boolean
native TriggerRegisterPlayerVariableSyncEvent takes trigger whichTrigger, player whichPlayer, string variableName returns event
native GetSyncSavedVariableType takes nothing returns variabletype
native GetSyncSavedHashtable takes nothing returns hashtable
native GetSyncSavedParentKey takes nothing returns integer
native GetSyncSavedChildKey takes nothing returns integer
native TriggerRegisterPlayerHashtableDataSyncEvent takes trigger whichTrigger, player whichPlayer, hashtable whichHashtable returns event
native GetTriggerFrameVariableType takes nothing returns variabletype
native GetTriggerFrameInteger takes nothing returns integer
native GetTriggerFrameReal takes nothing returns real
native GetTriggerFrameBoolean takes nothing returns boolean
native GetTriggerFrameString takes nothing returns string
native GetMouseScreenX takes nothing returns real
native GetMouseScreenY takes nothing returns real
native SetMouseScreenX takes real x returns nothing
native SetMouseScreenY takes real y returns nothing
native SetMouseScreenPosition takes real x, real y returns nothing
native GetMouseScreenPixelX takes nothing returns integer
native GetMouseScreenPixelY takes nothing returns integer
native SetMouseScreenPixelX takes integer x returns nothing
native SetMouseScreenPixelY takes integer y returns nothing
native SetMouseScreenPixelPosition takes integer x, integer y returns nothing
native GetMouseWorldX takes nothing returns real
native GetMouseWorldY takes nothing returns real
native GetMouseWorldZ takes nothing returns real
  1. Исправлен обработчик Net пакетов синхронизации, теперь он более не сталкивается с оригинальным обработчиком, приводя к потере пакетов.
  2. Исправлена критическая ошибка вызываемая этими нативными функциями:
native SilenceAbility takes ability whichAbility, boolean hide, boolean disable returns nothing
native UnsilenceAbility takes ability whichAbility, boolean show, boolean enable returns nothing
0
18
1 год назад
0
Unryze, Эти variabletype позволяют менять типы переменных в процессе исполнения кода, что ли? Или это просто для базы данных типов объектов? Если первое, то это очень удобно.
2
20
1 год назад
2
Unryze, Эти variabletype позволяют менять типы переменных в процессе исполнения кода, что ли? Или это просто для базы данных типов объектов? Если первое, то это очень удобно.
Кастинг типов можно делать через тайпкастеры, а так для понимания что пришло в синх триггере, получаешь тип через GetSyncedVariableType допустим 4 (Integer) и берёшь значение через GetSyncedInteger для получения значения, вот и всё.
0
18
1 год назад
0
Unryze, кастинг типов... тайпкастер... это очень тяжело для меня))) но я так понял, типы можно только определять, но не менять самому.
2
20
1 год назад
2
Unryze, кастинг типов... тайпкастер... это очень тяжело для меня))) но я так понял, типы можно только определять, но не менять самому.
Тип переменной менять то можно, но это бессмысленно на уровне джасс кода, ибо потом начнётся вакханалия, что старые данные пытаются обращаться к integer типу, а там уже сидит real.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.