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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
20
2 месяца назад
2
Вышла новая версия!

v1.1.11.202

1. Исправлено повторение события WIDGET_DEATH если уже умерший виджет получал урон.
2. Исправлено событие EVENT_PLAYER_MOUSE_MOVE не возвращающее позиции на экране.
3. Обработчик событий KEY/MOUSE нажатия/отжатия был перенесён в WndProc для более стабильной обработки.
	Пометка: это должно поправить часть игнорируемых клавиш, так я более не ориентируюсь на кнопки, которые обработала игра.
4. Добавлена поддержка XButton1 кнопки в событии KEY/MOUSE нажатия/отжатия.
5. Добавлена поддержка XButton2 кнопки в событии KEY/MOUSE нажатия/отжатия.
6. Исправлена обработка клавиш SHIFT/LSHIFT/RSHIFT. LSHIFT/RSHIFT будут посылать отдельное событие после SHIFT.
7. Исправлена обработка клавиш ALT/LALT/RALT. LALT/RALT будут посылать отдельное событие после ALT.
8. Исправлена обработка клавиш CTRL/LCTRL/RCTRL. LCTRL/RCTRL будут посылать отдельное событие после CTRL.
9. Исправлен десинх, который был обнаружен с версии 1.1.11.199.
10. Исправлена LaunchProjectileAt не сохраняющая координаты цели.
11. Исправлена LaunchProjectile не работающая через SetProjectileTargetPositionWithZ.
12. GetFrameTexture теперь работает с CSimpleFrame.
13. Исправлено кеширование текстур в SetFrameTexture с CSimpleFrame которое не позволяло вернуть оригинальную текстуру.
14. Обновлён модуль UnlockMapSize до версии 1.0.1.3.
3
20
2 месяца назад
3
Вышла новая версия!

v1.1.12.205

1. Новые Нативные Функции:
	native BenchmarkStart									takes nothing returns nothing
	native BenchmarkEnd										takes nothing returns nothing
	native BenchmarkReset									takes nothing returns nothing
	native BenchmarkGetElapsed								takes integer benchType returns string // 0 for nanoseconds, 1 for microseconds, 2 for milliseconds
	//
	native GetFrameScreenX									takes framehandle whichFrame returns real
	native GetFrameScreenY									takes framehandle whichFrame returns real
	native GetFrameRelativePointParent						takes framehandle whichFrame, framepointtype point returns framehandle
	native GetFrameRelativePointType						takes framehandle whichFrame, framepointtype point returns framepointtype
	native GetFrameRelativePointX							takes framehandle whichFrame, framepointtype point returns real
	native GetFrameRelativePointY							takes framehandle whichFrame, framepointtype point returns real
	native GetFrameAbsolutePointX							takes framehandle whichFrame, framepointtype point returns real
	native GetFrameAbsolutePointY							takes framehandle whichFrame, framepointtype point returns real
	native GetFrameBackdrop									takes framehandle whichFrame, integer backdropId returns framehandle
	native IsFrameBorderEnabled 							takes framehandle whichFrame, integer backdropId returns boolean
	native SetFrameBorderEnabled 							takes framehandle whichFrame, integer backdropId, boolean isEnable returns nothing
	native GetFrameSlider 									takes framehandle whichFrame returns framehandle
	native AddFrameSlider 									takes framehandle whichFrame returns framehandle
2. Удалён стандартный темплейт LISTBOX, все настройки теперь возможны через API.
	Пометка: полная настройка возможна через код.
3. Удалён стандартный темплейт CHECKBOX, все настройки теперь возможны через API.
	Пометка: полная настройка возможна через код.
4. SetFrameFont теперь работает с CTextArea.
5. SetFrameText теперь работает с CTextArea.
6. AddFrameText теперь работает с CTextArea.
1
20
2 месяца назад
1
Вышла новая версия!

v1.1.13.208

1. Новые Константы:
	constant integer					CHAT_RECIPIENT_UNKNOWN										= 4
2. Новые Нативные Функции:
	native DisplayChatMessageEx								takes player whichPlayer, integer recipient, real duration, boolean addToLog, string message returns nothing
	//
	native UnitGetTrainingProgress 							takes unit whichUnit returns real
	native UnitSetTrainingProgress 							takes unit whichUnit, integer trainingPercentage returns nothing
	native UnitGetTrainingRemainingTime						takes unit whichUnit returns real
	native UnitSetTrainingRemainingTime						takes unit whichUnit, real time returns nothing
	native UnitGetTrainingTypeIdAt 							takes unit whichUnit, integer index returns integer
	native UnitCancelTrainingAt 							takes unit whichUnit, integer index returns nothing
	native UnitSetTrainingTypeIdAt 							takes unit whichUnit, integer index, integer typeId returns nothing
	//
	native UnitGetResearchProgress 							takes unit whichUnit returns real
	native UnitSetResearchProgress 							takes unit whichUnit, integer trainingPercentage returns nothing
	native UnitGetResearchRemainingTime						takes unit whichUnit returns real
	native UnitSetResearchRemainingTime						takes unit whichUnit, real time returns nothing
	native UnitGetResearchTypeIdAt 							takes unit whichUnit, integer index returns integer
	native UnitCancelResearchAt 							takes unit whichUnit, integer index returns nothing
	native UnitSetResearchTypeIdAt 							takes unit whichUnit, integer index, integer typeId returns nothing
3. Исправлена неверная обработка damagetype в UnitDamageTarget.
4. Исправлены два неверных оффсета в АнтиХаке для 1.26a.
5. Добавлено отображение сообщения о десинхронизации, когда какой-либо игрок вылетит от десинхронизации.
6. Переисправлена ошибка по которой фреймы предметов не перерисовывались после HideOriginFrames.
7. Исправлена GetDestructableName всегда возвращающая "Default String" вместо действительного значения.
8. Исправлена GetItemName всегда возвращающая "Default String" вместо действительного значения.
9. Исправлена GetUnitName всегда возвращающая "Default String" вместо действительного значения.
10. Исправлена GetHeroProperName всегда возвращающая "Default String" вместо действительного значения.
11. Добавлены CLI настройки AngelScript.
1
20
1 месяц назад
1
Вышла новая версия!

v1.1.13.209

1. Исправлен некорректный посыл события EVENT_PLAYER_WIDGET_GHOST_CLICK вместо EVENT_PLAYER_WIDGET_CLICK.
2. Добавлен пуш виджета под мышкой в GetTriggerWidget в событии EVENT_PLAYER_TERRAIN_CLICK.
0
15
1 месяц назад
0
А можно как-то с помощью Unryze API организовать управление на джойстике?
Ответы (6)
1
20
1 месяц назад
1
DarkLigthing, если совсем делать нечего, то при желании - возможно. Но страдать такой вакханалией я не особо горю. :)
1
37
1 месяц назад
1
Unryze, там у винды есть универсальное апи, но тот же стим позволяет off-game controls, можно и без поддержки геймпада это делать
0
15
1 месяц назад
Отредактирован DarkLigthing
0
Unryze, Да, я понимаю что это маловостребовано ведь в кто играет в Wc3 на джойстиках. Просто сейчас все больше становятся актуальны портативные устройства как Steam Deck и теоретически карты, адаптированные под управление на подобных устройствах могли бы привлечь новых людей в Wc3. (:
0
37
1 месяц назад
0
DarkLigthing, steam deck работает на линуксе, а wine будет жрать аккум как не в себя
0
15
1 месяц назад
Отредактирован DarkLigthing
0
ScorpioT1000, Steam Deck работает на той OS которую ты туда захочешь поставить. Но по дефолту на ней действительно Linux семейства Arch Linux, который Valve адаптировала под свои нужды назвав SteamOS.
А wine это предшественник современной эмуляции, который называется Proton.
На моей деке, которой я уже пользуюсь как единственным пк стоит Windows 11 и батарейка это откровенно не проблема. Вот для портативного устройства x86 архитектура процессора это проблема для батарейки, лучше был бы ARM, но тогда игры с пк не запустились бы... А в целом это просто офигенная штука, для многих игр клавиатура и мышь по моему опыту это избыточность.
0
37
1 месяц назад
0
DarkLigthing, ну, мы же про стим дек для целевой аудитории говорим как стандартный стим ос с линуксом без подключенной зарядке на постоянке, x86 есть и на смартфонах, и кто-то даже ставил туда винду, но это единицы
2
20
1 месяц назад
2
Вышла новая версия!

v1.1.13.210

1. Исправлена внутренняя ошибка Id2S.
	Пометка: эта ошибка ломала Buff API для слк-оптимизированных карт.
5
20
3 недели назад
5
Вышла новая версия!

v1.1.14.214

1. Изменение типов:
	type effect												extends war3image
	type trackable											extends war3image
2. Новые Константы:
	constant abilityintegerfield		ABILITY_IF_BUTTON_POSITION_SPELLBOOK_X						= ConvertAbilityIntegerField('asbx') // Ability Instance only
	constant abilityintegerfield		ABILITY_IF_BUTTON_POSITION_SPELLBOOK_Y						= ConvertAbilityIntegerField('asby') // Ability Instance only
3. Новые Нативные Функции:
	native GetMouseMoveEventScreenAxisEnabled				takes nothing returns boolean
	native SetMouseMoveEventScreenAxisEnabled				takes boolean enable returns nothing // Enables GetTriggerPlayerMouseScreenX/Y, default: on.
	native GetMouseMoveEventWorldAxisEnabled				takes nothing returns boolean
	native SetMouseMoveEventWorldAxisEnabled				takes boolean enable returns nothing // Enables GetTriggerPlayerMouseWorldX/Y/Z, default: off.
	native GetMouseMoveEventDelay							takes nothing returns integer
	native SetMouseMoveEventDelay							takes integer delay returns nothing // delay is in ticks (ms), default: 10
	//
	native IsHandleDestroyed								takes handle whichHandle returns boolean // this returns internal state of the object, whenever it's nullptr or CAgentBaseAbs was removed.
	//
	native GetWar3ImageSprite								takes war3image whichWar3Image returns sprite
	native IsWar3ImageVisible								takes war3image whichWar3Image returns boolean
	native SetWar3ImageVisible								takes war3image whichWar3Image, boolean visible returns nothing
	native IsWar3ImageInvulnerable							takes war3image whichWar3Image returns boolean
	native SetWar3ImageInvulnerable							takes war3image whichWar3Image, boolean invulnerable returns nothing
	native GetWar3ImageX									takes war3image whichWar3Image returns real
	native GetWar3ImageY									takes war3image whichWar3Image returns real
	native GetWar3ImageZ									takes war3image whichWar3Image returns real
	native GetWar3ImagePositionLoc							takes war3image whichWar3Image returns location
	native SetWar3ImagePositionLoc							takes war3image whichWar3Image, location whichLocation returns nothing
	native SetWar3ImagePosition								takes war3image whichWar3Image, real x, real y returns nothing
	native SetWar3ImagePositionWithZ						takes war3image whichWar3Image, real x, real y, real z returns nothing
	native SetWar3ImageX									takes war3image whichWar3Image, real x returns nothing
	native SetWar3ImageY									takes war3image whichWar3Image, real y returns nothing
	native SetWar3ImageZ									takes war3image whichWar3Image, real z returns nothing
	native ResetWar3ImageZ									takes war3image whichWar3Image returns nothing // returns Z control to game.
	native GetWar3ImageHeight								takes war3image whichWar3Image returns real
	native SetWar3ImageHeight								takes war3image whichWar3Image, real height returns nothing
	native GetWar3ImageScreenX								takes war3image whichWar3Image returns real
	native GetWar3ImageScreenY								takes war3image whichWar3Image returns real
	native GetWar3ImageVertexColour							takes war3image whichWar3Image returns integer
	native SetWar3ImageVertexColour							takes war3image whichWar3Image, integer red, integer green, integer blue, integer alpha returns nothing
	native GetWar3ImageTimeScale							takes war3image whichWar3Image returns real
	native SetWar3ImageTimeScale							takes war3image whichWar3Image, real timeScale returns nothing
	native GetWar3ImageScale								takes war3image whichWar3Image returns real
	native SetWar3ImageScale								takes war3image whichWar3Image, real scale returns nothing
	native GetWar3ImageFacing								takes war3image whichWar3Image returns real
	native SetWar3ImageFacing								takes war3image whichWar3Image, real facing, boolean isInstant returns nothing
	native SetWar3ImageMatrixScale							takes war3image whichWar3Image, real x, real y, real z returns nothing
	native ResetWar3ImageMatrix								takes war3image whichWar3Image returns nothing
	native SetWar3ImageOrientationEx						takes war3image whichWar3Image, real yaw, real pitch, real roll, integer eulerOrder returns nothing
	native SetWar3ImageOrientation							takes war3image whichWar3Image, real yaw, real pitch, real roll returns nothing
	native GetWar3ImageYaw									takes war3image whichWar3Image returns real
	native SetWar3ImageYaw									takes war3image whichWar3Image, real yaw returns nothing
	native GetWar3ImagePitch								takes war3image whichWar3Image returns real
	native SetWar3ImagePitch								takes war3image whichWar3Image, real pitch returns nothing
	native GetWar3ImageRoll									takes war3image whichWar3Image returns real
	native SetWar3ImageRoll									takes war3image whichWar3Image, real roll returns nothing
	native GetWar3ImageModelObjectX							takes war3image whichWar3Image, string whichObject returns real
	native GetWar3ImageModelObjectY							takes war3image whichWar3Image, string whichObject returns real
	native GetWar3ImageModelObjectZ							takes war3image whichWar3Image, string whichObject returns real
	native GetWar3ImageModelObjectPositionLoc				takes war3image whichWar3Image, string whichObject returns location
	native GetWar3ImageCurrentAnimationId					takes war3image whichWar3Image returns integer
	native GetWar3ImageCurrentAnimationName					takes war3image whichWar3Image returns string
	native SetWar3ImageAnimationWithRarityByIndex			takes war3image whichWar3Image, integer animIndex, raritycontrol rarity returns nothing
	native SetWar3ImageAnimationWithRarity					takes war3image whichWar3Image, string animationName, raritycontrol rarity returns nothing
	native SetWar3ImageAnimationByIndex						takes war3image whichWar3Image, integer animIndex returns nothing
	native SetWar3ImageAnimation							takes war3image whichWar3Image, string animationName returns nothing
	native QueueWar3ImageAnimationByIndex					takes war3image whichWar3Image, integer animIndex returns nothing
	native QueueWar3ImageAnimation							takes war3image whichWar3Image, string animationName returns nothing
	native GetWar3ImageAnimationOffsetPercent				takes war3image whichWar3Image returns real
	native SetWar3ImageAnimationOffsetPercent				takes war3image whichWar3Image, real percent returns nothing
	//
	native SetAbilityOwningAbility							takes ability whichAbility, ability whichSpellbook returns nothing
	native SetAbilityOwningItem								takes ability whichAbility, item whichItem returns nothing
	//
	native GetFrameBlendMode								takes framehandle whichFrame, integer textureId returns blendmode // 0 for CSimpleRegions.
	native SetFrameBlendMode								takes framehandle whichFrame, integer textureId, blendmode whichBlendMode returns nothing
	native GetFrameHighlight								takes framehandle whichFrame, integer highlightId returns framehandle // Gets highlights of CControl
	native GetFrameHighlightTexture							takes framehandle whichFrame, integer highlightId returns string // If highlighframe type is sent, it will modify itself instead, if ccontrol or its children, then it will check possible highlights.
	native SetFrameHighlightTexture							takes framehandle whichFrame, integer highlightId, string texturePath, blendmode blendMode returns nothing // 0 - FOCUS | 1 - ON HOVER
4. Исправлена GetUnitStringField всегда возвращающая "Default String" с UNIT_SF_HERO_ABILITY_LIST.
5. Исправлена UNIT_SF_ABILITY_LIST всегда возвращающая "Default String" с UNIT_SF_HERO_ABILITY_LIST.
6. GetTriggerPlayerMouseWorldX/Y/Z теперь отключено по стандарту для сохранения 12 байтов нетКода. Используйте SetMouseMoveEventWorldAxisEnabled для того, чтобы включить эту опцию.
7. Исправлена OnCommandBarProcessKey не работающая со спеллбуками.
8. Исправлена обработка TRIGSTR_ в SetTextTagText.
9. Добавлен хук на CGameState::ToHandle.
10. Исправлена критическая ошибка с картами содержащими w3i от версии 1.29 и выше. Критическая ошибка связана с максимальным индексом игрока.
11. SetFramePriority более не работает с CSimpleRegions, так как они не имеют приоритет, а эта функция меняла blendmode.
2
20
2 недели назад
2
Вышла новая версия!

v1.1.14.215

1. Исправлена SetTextTagText не работающая с текстами отличными от TRIGSTR_ из-за предидущего исправления.
2. Исправлена Get/SetBlendMode с CSimpleFontString.
Этот комментарий удален
0
18
2 недели назад
0
Посмотрел тут инструкцию по установке. Не кажется ли, что она довольно громоздкая для аудитории? Особенно для молодых "зумеров", которые выросли на Google play и подобных сервисах, где установка делается в 1 клик? Они, если увидят подобную длинную установку, скажут, "что за кривая хрень" и не станут ничего ставить)) Возможно ли переделать установку так, чтобы после запуска установщика поиск путей, размещение файлов выполнялись сами собой? Плюс в идеале, чтобы заменялись файлы war3 exe и world editor exe на новые, с сохранением путей от ярлыков с рабочего стола? Чтобы юзер мог запускать игру как обычно, как привык, без поиска и запуска дополнительных exe? Я конечно понимаю, что это душно, но вряд-ли понравится, если ujapi будут юзать 3,5 олда (по крайней мере, я за последний год не видел карт на хгм, сделанных с помощью ujapi, максимум одну)
Ответы (2)
0
29
2 недели назад
Отредактирован nazarpunk
0
EugeAl, молодые зумеры и так не смогут пользоваться утилитой ибо там нужно думать через мозг. Коей способностью эволюция их обделила.
0
20
2 недели назад
0
EugeAl, карты есть, но меня это особо не заботит. Установка и так проще некуда, а твоя затея буквально странная… ибо не нужно менять никакие .exe файлы, и вообще ужапи должна ставиться в отдельную папку. 2024 год, тяжело разархивировать файлы в папку (это вся установка) и указать путь к игре/редактору (как-то с Magos люди справлялись). Ну и закончим тем, что вдруг у кого-то несколько сборок (как у меня) и автоматом выберется не та? Да и опять же, можно буквально копипастнуть путь напрямую, а не искать по папкам.
Ну блин, реально несерьёзно как-то заявлять о сложности установки.
0
13
2 недели назад
Отредактирован Borodach
0
И еще, хотя б краткая документация, а то много функций нужно по названию на "ощупь" пробовать как оно работает
Ответы (4)
0
29
2 недели назад
0
Borodach, никто тебя не останавливает. Пощупал функциию - написал статью как ей пользоваться. И самому шпаргалка и комьюнити полезно.
0
20
2 недели назад
0
Borodach, а документация на джасс от Близзард была? Я что-то не помню… а, вспомнил, нет, не было.
И опять же, минимальное знание английского языка - уже служит документацией, но, если ты готов расписать 2000+ нативок, еще и документацией, я готов на это посмотреть.
0
18
2 недели назад
0
nazarpunk, это верно, но им для игры придётся как то ставить утилиту )
Unryze, это для нас проще некуда. Для модмейкера проще некуда. Но обычный игрок совершенно другая категория. Его не заботят технические детали, да и не должны заботиться, его смысл потреблять продукт. Допустим, распаковать в папку с игрой и пользоваться - годится, равно как и установка в 1 клик, но не более. Иначе игрофирмы не делали бы никаких простых установок )
1
29
2 недели назад
1
EugeAl, ну так они играть то не смогут по вышеперечисленной причине.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.