UjAPI

UjAPI — полноценная модификация для Warcraft III версий 1.24e/1.26а/1.27a/1.27b/1.28f кардинально расширяющая функционал игры, добавляющая новые native-функции и типы доступные в редакторе, исправляющая известные проблемы (утечки, неработающие функции и т.п.)
Дополнительно планируется интегрировать и другие проекты, такие как UjAPI - AngelScript, War3 LUA.
В данный момент для тестов и нахождения недочётов доступен альфа-релиз.
Лауреат премии 2023 года
347 7 866
23
Посмотрел тут инструкцию по установке. Не кажется ли, что она довольно громоздкая для аудитории? Особенно для молодых "зумеров", которые выросли на Google play и подобных сервисах, где установка делается в 1 клик? Они, если увидят подобную длинную установку, скажут, "что за кривая хрень" и не станут ничего ставить)) Возможно ли переделать установку так, чтобы после запуска установщика поиск путей, размещение файлов выполнялись сами собой? Плюс в идеале, чтобы заменялись файлы war3 exe и world editor exe на новые, с сохранением путей от ярлыков с рабочего стола? Чтобы юзер мог запускать игру как обычно, как привык, без поиска и запуска дополнительных exe? Я конечно понимаю, что это душно, но вряд-ли понравится, если ujapi будут юзать 3,5 олда (по крайней мере, я за последний год не видел карт на хгм, сделанных с помощью ujapi, максимум одну)
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.14.215

1. Исправлена SetTextTagText не работающая с текстами отличными от TRIGSTR_ из-за предидущего исправления.
2. Исправлена Get/SetBlendMode с CSimpleFontString.
20
Вышла новая версия!
Прокрутить к ресурсу

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.
38
DarkLigthing, ну, мы же про стим дек для целевой аудитории говорим как стандартный стим ос с линуксом без подключенной зарядке на постоянке, x86 есть и на смартфонах, и кто-то даже ставил туда винду, но это единицы
15
ScorpioT1000, Steam Deck работает на той OS которую ты туда захочешь поставить. Но по дефолту на ней действительно Linux семейства Arch Linux, который Valve адаптировала под свои нужды назвав SteamOS.
А wine это предшественник современной эмуляции, который называется Proton.
На моей деке, которой я уже пользуюсь как единственным пк стоит Windows 11 и батарейка это откровенно не проблема. Вот для портативного устройства x86 архитектура процессора это проблема для батарейки, лучше был бы ARM, но тогда игры с пк не запустились бы... А в целом это просто офигенная штука, для многих игр клавиатура и мышь по моему опыту это избыточность.
38
DarkLigthing, steam deck работает на линуксе, а wine будет жрать аккум как не в себя
Ресурс предназначенный для логирования изменений в проекте UjAPI, а так же для краткого ознакомления со внесёнными изменениями.
90 2 143
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.14.215

1. Исправлена SetTextTagText не работающая с текстами отличными от TRIGSTR_ из-за предидущего исправления.
2. Исправлена Get/SetBlendMode с CSimpleFontString.
20
Вышла новая версия!
Прокрутить к ресурсу

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.

UjAPI - AngelScript

Ресурс предназначенный для под-проекта UjAPI - AngelScript (это интерпретируемый язык программирования, разработанный специально для использования в качестве скриптового языка в приложениях).
В данном ресурсе будет вестись логирование изменений, а так же всяческие описания, примеры и прочее.
Программы
26 1 288
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.2.6

1, Добавлена поддержка мульти-строки для строк, что позволит избавиться от нужды """.
2. Исправлены исключения/ошибки в тяжело нагруженных строками картах, это было решено путём кэша строк на стороне AngelScript.

v1.0.2.7

1. Исправлена поддержка 1.27a/1.27b/1.28f.

v1.0.2.9

1. Добавлена поддержка литералов, то бишь 'I000' вместо FourCC( "I000" ).
2. Улучшена поддержка литералов с 1 или 4 символов до 1 до 8 символов, то бишь 'I0' and 'I000000I' оба будут валидны.
3. Исправлена критическая ошибка при присваивании нулевой строки в строку.
	Пометка: это по большей части связано с LoadStr.
4. "main" функция более не вызывается в лобби.