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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
20
1 год назад
0
А если помечать в комментариях, то кто будет их читать?
В нормальных ЯП есть аннотации, и IDE сразу начинает варнами сыпать.
Не самый правильный пример, ибо в ЯП есть неймспейсы, которыми можно "выпилить" устаревшие функции и т.д. Во всяких юнити/анриале и т.д. такое не получится сделать без костылей, да и там тоже не церемонятся на эту тему, оповещают на сайте, что будет выпилено и сразу выпиливают.
0
29
1 год назад
0
Во всяких юнити/анриале и т.д. такое не получится сделать без костылей
Ну я вот нагуглил аналог deprecated на С#. Он вроди с коробки есть, зачем костыли?
0
20
1 год назад
0
Во всяких юнити/анриале и т.д. такое не получится сделать без костылей
Ну я вот нагуглил аналог deprecated на С#. Он вроди с коробки есть, зачем костыли?
Ты опять приводишь примеры не связанные с джассом. Метод в С++ тоже можно объявить "устаревшим", а в джассе - это как сделаешь, магией? И ещё раз, когда что-то собираются удалить из движка (речь не об языках), то оно пишется что будет удалено и потом удаляется. Зайди на форум Unreal Engine что ли.
0
29
1 год назад
Отредактирован Волчачка
0
Можно просто сделать библиотеку deprecated.j как костыльный вариант, или написать компилятор куда функциональный чем jasshelper)
cJass
#include "deprecated.cj"
define {
deprecatedFunc(...) = freshFunc(...)
// ...
}
vJass
//!import "D:\\WC3Scripts\\deprecated.j"
library Deprecated
	constant	function deprecatedFunc takes <paremetrs> returns <value | nothing>
		<return|call> freshFunc( <paremetrs> ) | DoNothing()
	endfunction
endlibrary
Свой компилятор:
deprecated japi deprecatedNative1 replaced  freshNative1
deprecated japi deprecatedNative2(p1,p2,p3) replaced  freshNative2(p1,p2)
deprecated japi deprecatedNative3 remove
4
20
1 год назад
4
Вышла новая версия! Прокрутить к ресурсу

v1.0.18.74

  1. Новые Константы:
constant originframetype ORIGIN_FRAME_CURSOR_FRAME = ConvertOriginFrameType(44)
  1. Новые Нативные Функции:
native BitwiseGetBit takes integer number, integer bitIndex returns integer
native BitwiseGetByte takes integer number, integer byteIndex returns integer
native StringCount takes string s, string whichString, boolean caseSensitive returns integer
native StringTrimLeft takes string s, boolean caseSensitive returns string
native StringTrimRight takes string s, boolean caseSensitive returns string
native StringTrim takes string s, boolean caseSensitive returns string
native StringReverse takes string s, boolean caseSensitive returns string
native StringReplace takes string s, string whichString, string replaceWith, boolean caseSensitive returns string
native StringInsert takes string s, string whichString, integer whichPosition, boolean caseSensitive returns string
native GetTriggerSyncPlayer takes nothing returns player this is simply mimicking GetTriggerPlayer, added for simplicity.
native IsTextTagVisible takes texttag whichTextTag returns boolean
native IsTextTagSuspended takes texttag whichTextTag returns boolean
native IsTextTagPermanent takes texttag whichTextTag returns real
native GetTextTagX takes texttag whichTextTag returns real
native SetTextTagX takes texttag whichTextTag, real x returns nothing
native GetTextTagY takes texttag whichTextTag returns real
native SetTextTagY takes texttag whichTextTag, real y returns nothing
native GetTextTagZ takes texttag whichTextTag returns real
native SetTextTagZ takes texttag whichTextTag, real z returns nothing
native GetTextTagHeight takes texttag whichTextTag returns real
native SetTextTagHeight takes texttag whichTextTag, real height returns nothing
native GetTextTagLocation takes texttag whichTextTag returns location
native SetTextTagPositionLocation takes texttag whichTextTag, location whichLocation returns nothing
native GetTextTagColour takes texttag whichTextTag returns integer
native GetTextTagAlpha takes texttag whichTextTag returns integer
native SetTextTagAlpha takes texttag whichTextTag, integer alpha returns nothing
native GetTextTagVelocityX takes texttag whichTextTag returns real
native SetTextTagVelocityX takes texttag whichTextTag, real velX returns nothing
native GetTextTagVelocityY takes texttag whichTextTag returns real
native SetTextTagVelocityY takes texttag whichTextTag, real velY returns nothing
native GetTextTagVelocityZ takes texttag whichTextTag returns real
native SetTextTagVelocityZ takes texttag whichTextTag, real velZ returns nothing
native GetTextTagAge takes texttag whichTextTag returns real
native GetTextTagLifespan takes texttag whichTextTag returns real
native GetTextTagFadepoint takes texttag whichTextTag returns real
native GetTextTagShadowColour takes texttag whichTextTag returns integer
native SetTextTagShadowColour takes texttag whichTextTag, integer colour returns nothing
native GetTextTagShadowAlpha takes texttag whichTextTag returns integer
native SetTextTagShadowAlpha takes texttag whichTextTag, integer alpha returns nothing
native GetTextTagText takes texttag whichTextTag returns string
  1. Добавлены недостающие константы из предыдущей версии.
  2. Версия UjAPI теперь прописывается в главном меню Warcraft.
  3. Добавлена опция "Load Library" в главную секцию. Это включает/выключает подгрузку UjAPI.mpq и нативных функций.
Пометка: эта опция по стандарту включена и смена этой опции на уже запущенном Warctaft не будет работать.
  1. Добавлена опция "Load Library" для секции LUA. Это включает/выключает подгрузку библиотеки war3_lua.dll.
Пометка: эта опция по стандарту выключена и смена этой опции на уже запущенном Warctaft не будет работать.
  1. Добавлена "CLI" обработка в UjAPI, теперь каждый последующий запуск приложения UjAPI будет просто на просто отправлять аргументы запуска в уже запущенное приложение.
Пример 1: "D:\Files\Work Files\Programming\uJAPI\Release\UjAPILauncher.exe" -ujapi "dev" -lua "dev console nowarnings" -multiwindow -window -loadfile "Maps\Test\WorldEditTestMap.w3x"
Пометка 1: Это выполнит UjAPI и включит его режим разработчика, а так же включит луа с заданными к ней параметрами, игра будет в мультиоконном режиме и в режиме окна. Затем будет запущена карта заданная в loadfile аргументе.
Пример 2 (полный): "D:\Files\Work Files\Programming\uJAPI\Release\UjAPILauncher.exe" -ujapi "dev" -lua "dev console nowarnings" -multiwindow -window -launch "Warcraft" -gamepath "D:\Games\Warcraft III TFT\war3.exe" -loadfile "Maps\Test\WorldEditTestMap.w3x"
Пометка 2: Это выполнит всё, что описано в Примере 1, однако если присутствуют (-gamepath или -editorpath) оно также "переопределит" путь игры/редактора основываясь на аргументах поданных в них.
  1. CLI команды:
Пометка: пояснения команд будут в скобочках, вот так - (информация).
-justdoupdate (просто на просто выполнит форсированное скачивание последней версии и выполнит автообновление UjAPI, остальные команды будут проигнорированы).
-ujapi (даёт возможность переопределения некоторых базовых настроек UjAPI, пример: -ujapi "dev"), "" (кавычки) обязательны!
noload (отключает подгрузку UjAPI.mpq и UjAPI нативных функций).
dev (включает режим разработчика, который также включит консоль).
-lua (даёт возможность переопределения некоторых базовых настроек war3_lua.dll, пример: -lua "dev console nowarnings"), "" (кавычки) обязательны!
dev (включает режим разработчика).
console (включает консоль для луа ошибок и так далее).
nowarnings (отключает некоторые внутренние ошибки типов).
-multiwindow (включает режим Multi-Window и загружает необходимый модуль).
-window (запустит приложение в оконном режиме).
-launch (даёт возможность переопределения/указания пути для запуска игры или редактора, по стандарту будет запускаться игра, пример: -launch "Editor"), "" (кавычки) обязательны!
-gamepath (переопределяет и использует путь игры заданный в UjAPI Launcher, пример: -gamepath "D:\Games\Warcraft III TFT\war3.exe"), "" (кавычки) обязательны!
-editorpath (переопределяет и использует путь редактора заданный в UjAPI Launcher, пример: -editorpath "D:\Programs\WC3 Tools\JNPG-R1.4-Prometheus-Edition\NewGen WE.exe"), "" (кавычки) обязательны!
-loadfile (повторяет 1 в 1 метод запуска карт, путь до карты для игры ВСЕГДА относителен пути игры, однако для редактора нужно указывать ПОЛНЫЙ путь до карты).
  1. Добавлена -loadfile команда для секции World Editor, однако путь до карты НЕ относителен пути игры, нужно указывать полный путь до карты.
  2. Добавлена опция "Load Library" в секции World Editor.
  3. Добавлена опция "Dev Mode" в секции World Editor.
Пометка: #10 и #11 работают точно так же как такие же опции в Warcraft 3.
2
20
1 год назад
Отредактирован Unryze
2
Вышла новая версия! Прокрутить к ресурсу

v1.0.18.75

  1. Исправлены проблемы с полноэкранным режимом запуска игры.
2
31
2
у меня BlzSetUnitName фаталит.
0
20
1 год назад
Отредактирован Unryze
0
у меня BlzSetUnitName фаталит.
Почти все эти функции фаталят, знаю. Это уже исправлено в будущей версии, думаю сегодня загружу. (Точнее функции, которые редактируют поля, а не прямо все-все).
1
20
1 год назад
1
Вышла новая версия! Прокрутить к ресурсу

v1.0.19.78

  1. Новые Типы:
    type jassthread extends handle
  2. Новые Константы:
    constant widgetevent EVENT_WIDGET_DAMAGING = ConvertWidgetEvent(400)
    constant widgetevent EVENT_WIDGET_DAMAGED = ConvertWidgetEvent(401)
    constant abilityreallevelfield ABILITY_RLF_CAST_BACK_SWING = ConvertAbilityRealLevelField('acbs')
    constant abilityreallevelfield ABILITY_RLF_CAST_POINT = ConvertAbilityRealLevelField('acpt')
    constant unitintegerfield UNIT_IF_AGILITY_BONUS = ConvertUnitIntegerField('uag+') Get Only
    constant unitintegerfield UNIT_IF_INTELLIGENCE_BONUS = ConvertUnitIntegerField('uin+') Get Only
    constant unitintegerfield UNIT_IF_STRENGTH_BONUS = ConvertUnitIntegerField('ust+') Get Only
    constant unitrealfield UNIT_RF_HEALTH_FROM_BONUS_STRENGTH = ConvertUnitRealField('uhs+') Get Only
    constant unitrealfield UNIT_RF_MANA_FROM_BONUS_INTELLIGENCE = ConvertUnitRealField('umi+') Get Only
    constant unitrealfield UNIT_RF_DEFENSE_BONUS = ConvertUnitRealField('udf+') Get Only
    constant unitrealfield UNIT_RF_SPEED_BONUS = ConvertUnitRealField('umv+') Get Only
    constant unitweaponintegerfield UNIT_WEAPON_IF_ATTACK_DAMAGE_BONUS = ConvertUnitWeaponIntegerField('ud1+') Get Only | this is the + (Green) or - (Red) value next to attack.
    constant unitweaponrealfield UNIT_WEAPON_RF_ATTACK_SPEED_BONUS = ConvertUnitWeaponRealField('us1+') Get Only
  3. Новые Нативные Функции:
    Jass VM Natives
    native GetJassMainThread takes nothing returns jassthread
    native GetJassCurrentThread takes nothing returns jassthread
    native RunJassScriptEx takes string parentScriptFile, string helperScriptFile, string jassScriptFile returns jassthread
    native RunJassScript takes string helperScriptFile, string jassScriptFile returns jassthread
    native RunJassScriptSimple takes string jassScriptFile returns jassthread
    native StopJassThread takes jassthread thread returns boolean
    native GetJassGlobalInteger takes jassthread thread, string variableName returns integer
    native GetJassGlobalReal takes jassthread thread, string variableName returns real
    native GetJassGlobalString takes jassthread thread, string variableName returns string
    native GetJassGlobalHandle takes jassthread thread, string variableName returns handle
    native GetJassGlobalBoolean takes jassthread thread, string variableName returns boolean
    native SetJassGlobalInteger takes jassthread thread, string variableName, integer value returns boolean
    native SetJassGlobalReal takes jassthread thread, string variableName, real value returns boolean
    native SetJassGlobalString takes jassthread thread, string variableName, string value returns boolean
    native SetJassGlobalHandle takes jassthread thread, string variableName, handle value returns boolean
    native SetJassGlobalBoolean takes jassthread thread, string variableName, boolean value returns boolean

    native GetWidgetModel takes widget whichWidget returns string
    native TriggerRegisterWidgetEvent takes trigger whichTrigger, widget whichWidget, widgetevent whichWidgetEvent returns event
    native SetSpecialEffectPlayerColour takes effect whichEffect, playercolor color returns nothing
    native SetSpecialEffectMaterialTexture takes effect whichEffect, string textureName, integer materialId, integer textureIndex returns nothing
    native SetSpecialEffectTexture takes effect whichEffect, string textureName, integer textureIndex returns nothing
    native SetSpecialEffectReplaceableTexture takes effect whichEffect, string textureName, integer textureIndex returns nothing
    native SetTrackablePlayerColour takes trackable whichTrackable, playercolor color returns nothing
    native SetMissilePlayerColour takes missile whichMissile, playercolor color returns nothing
    native SetMissileMaterialTexture takes missile whichMissile, string textureName, integer materialId, integer textureIndex returns nothing
    native SetMissileTexture takes missile whichMissile, string textureName, integer textureIndex returns nothing
    native SetMissileReplaceableTexture takes missile whichMissile, string textureName, integer textureIndex returns nothing
    native SetFrameSpritePlayerColour takes framehandle whichFrame, playercolor color returns nothing
    native GetFrameSpriteAlpha takes framehandle whichFrame returns integer
    native SetFrameSpriteMaterialTexture takes framehandle whichFrame, string textureName, integer materialId, integer textureIndex returns nothing
    native SetFrameSpriteTexture takes framehandle whichFrame, string textureName, integer textureIndex returns nothing
    native SetFrameSpriteReplaceableTexture takes framehandle whichFrame, string textureName, integer textureIndex returns nothing
    native GetUnitInSelectionByIndex takes player whichPlayer, integer index returns unit
    native GetLastUnitInSelection takes player whichPlayer returns unit
  4. UNIT_IF_INTELLIGENCE теперь возвращает правильное значение.
  5. Добавлены эти поля во внутренний обработчик Get/SetUnitField:
    UNIT_IF_AGILITY_PERMANENT
    UNIT_IF_INTELLIGENCE_PERMANENT
    UNIT_IF_STRENGTH_PERMANENT
    UNIT_IF_AGILITY_WITH_BONUS
    UNIT_IF_INTELLIGENCE_WITH_BONUS
    UNIT_IF_STRENGTH_WITH_BONUS
  6. Добавлены эти поля во внутренний обработчик GetUnitField:
    UNIT_IF_AGILITY_BONUS
    UNIT_IF_INTELLIGENCE_BONUS
    UNIT_IF_STRENGTH_BONUS
    UNIT_RF_HEALTH_FROM_BONUS_STRENGTH
    UNIT_RF_MANA_FROM_BONUS_INTELLIGENCE
    UNIT_RF_DEFENSE_BONUS
    UNIT_RF_SPEED_BONUS
    UNIT_WEAPON_IF_ATTACK_DAMAGE_BONUS
    UNIT_WEAPON_RF_ATTACK_SPEED_BONUS
  7. Исправлено GetTriggerFrame возвращающее всегда null.
  8. BlzSetSpecialEffectColorByPlayer теперь закрашивает временные(командные) текстуры, как оно и должно было.
  9. Исправлена критическая ошибка со всеми BlzSetField.
  10. ABILITY_ILF_TARGET_TYPE добавлена во внутренний обработчик SetAbilityField.
  11. Исправлена критическая ошибка от ORIGIN_FRAME_BUFF_BAR_INDICATOR, добавлена проверка действительности, так как игра не создаёт сразу все индикаторы.
    Пояснение: игра по стандарту создаёт лишь 1 индикатор, затем, когда у игры нет "свободных" индикаторов, она создаёт ещё 1 вплоть до 7.
  12. Исправлены некоторые "опечатки" среди OSKEY_ переменных, причиной послужила моя мышка, которая устраивает дабл клик, потому при табуляциях, часть букв была удалена/заменена и так далее.
  13. Исправлено Missile API, оно "перестало работать" после поспешных исправлений/переделок.
  14. Исправлены BUFF_SF поля, теперь они возвращают реальное значение, а не "<null>".
  15. Добавлены эти поля Заклинаний во внутренний обработчик Get/SetAbilityField:
    ABILITY_RLF_CASTING_TIME
    ABILITY_RLF_CAST_BACK_SWING
    ABILITY_RLF_CAST_POINT.
0
18
1 год назад
0
Unryze, а что делает jassthread? Не совсем понимаю, для чего он и его нативки.
0
19
1 год назад
0
EugeAl, можешь свои потоки создавать. Что это даёт? Ну, допустим ты сможешь разбить код карты на несколько скриптов, а потом подключать их по-отдельности. Надеюсь, я правильно всё понял.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.