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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
18
Нашел "кнопку" обновления. И сейчас при установке флажка "LoadLibrary" крашит варкрафт. Путь на war3.exe указан.
Если не стоит, то карта не открывается с одной глобальной
framehandle Frame
30
Borodach, чует моё сердце, такое название зарезервировано.
18
Название примерное, смысл что любые "доп. услуги" из UJAPI не откроют карту.
20
BlzFrameGetChild(ORIGIN_FRAME_COMMAND_BAR, 0) и GetFrameChild(ORIGIN_FRAME_COMMAND_BAR, 0) ссылается на фрейм(расположение кнопки) х3 у2, а не х3 у3. х3 у3 не видно никаким индексом в диапазоне от -1 до 11.
И да, забыл добавить, Y2 ограничение имеет, откуда Y3? Напоминаю, что столбов (X) 4 (0-3) а строк (Y) 3 (0-2). И получается 4 * 3 = 12 (11 индекс). А ты хочешь получить 4 * 4 = 16ый индекс, вопрос откуда и куда.
Borodach:
Название примерное, смысл что любые "доп. услуги" из UJAPI не откроют карту.
Краш лог в студию, я не могу угадать что и как может крашить, когда у других пользователей такой проблемы нет. Ну и версию варкрафта - тоже гадать не особо хочется.
18
И да, забыл добавить, Y2 ограничение имеет, откуда Y3? Напоминаю, что столбов (X) 4 (0-3) а строк (Y) 3 (0-2). И получается 4 * 3 = 12 (11 индекс). А ты хочешь получить 4 * 4 = 16ый индекс, вопрос откуда и куда.
Я ошибся с обозначением х,у. Позиция х2 и у2 = Child(0). -1 индекс указал чисто проверить, думал если Child(0) = x2;y2 и Child(10) = x0;y0 то -1 может быть x3;y2
ОШИБКА
This application has encountered a critical error:

FATAL ERROR!

Program:	D:\Games\WarCraft3\Warcraft 3 Frozen Throne\war3.exe
Exception:	0xC0000005 (ACCESS_VIOLATION) at 0023:0222279A

The instruction at '0x0222279A' referenced memory at '0x00000010'.
The memory could not be 'read'. 
20
-1 не может быть ни в каком случае, акстись.
14
Unryze
Планируется ли поддержка карт, для которых требуется JN Loader ?
Например карты от корейца z1z1z1 (скачка карт ниже) - он делает уникальные интересные карты, при этом всегда они многопользовательские. т.е. заточены на командную работу. и т.к. ирина их не поддерживает - остается только один вариант RadminVPN, но там пинг очень плохой (если много игроков). Поэтому идеальным вариантом была бы поддержка JN карт на ирине.
Как это проще сделать?
  1. переписывать все нативки или
  2. может как то можно подключить dll от JN лоадера? может быть в UjAPILauncher.exe можно добавить путь к папке JN лоадера и он его как посредник подключит через себя к ирине?
  3. или может быть Kirill78 и Kokomi смогут прикрутить JN Loader к ирине? Чтобы запускать через JN loader.exe и справа от создания карты выбрать что-то типа "JN"
Мы уже 2 или 3 года играем в карты от z1z1z1, и последнее время он делает только для JN, в которые нипаиграть на ирине с нормальным пингом. При этом мы всегда покупаем випку на всю команду и приходится играть в его карты старых версий "до-JN" эпохи
Также есть и другие игроки, так называемые "игроки в корейские RPG", которые тоже играют через JN loader в корейские карты
Вот пример карт от z1z1z1 (Скачивать карты на синюю кнопку):
  1. m16tool.xyz/Game/8BitRaidId - 8 BIT RAID - кооперативный 2D платформер с убийством боссов
  2. m16tool.xyz/Game/OM150/Main/Main - 주황버섯의 소개팅 - Orange Mushroom Story Blind Date - 2D action головоломки
  3. m16tool.xyz/Game/DM/Main/Main - Death Maze - 3D хоррор лабиринт
или все 3 карты одной ссылкой www.mediafire.com/?59w9pnbo4wwk845 (тут есть скриншоты карт, по которым можно убедиться в их уникальности и непохожести на обычные карты для варкрафта)
  1. JN Loader (только для warcraft 1.28.5.7680 + multifont) github.com/BlacklightsC/JassNative/releases/latest/download/JNLo... или m16.pw
я вчера проверял все 3 карты на UjAPI 1.0.19.78 - ни одна не запустилась, карта не инициализировалась и не дошла до выбора команд в лобби (а с JN loader они конечно же запускаются прекрасно)
20
JN использует слишком много небезопасных нативок, множество из них необходимы для карт, потому полной поддержки не будет, это слишком муторно и не принесёт буквально никакой пользы. Из JN полноценно поддерживаются лишь эти нативки:
BitOr
BitAnd
BitXor
BitShiftL
BitShiftR
JNI2R
JNR2I
JNGetMaxAttackSpeed
IsReplayMode
IsHostPlayer
JNStringPos
JNStringReverse
JNStringTrim
JNStringTrimStart
JNStringTrimEnd
JNStringCount
JNStringContains
JNStringReplace
JNStringInsert
JNStringSub
JNStringLength
Говоря проще, JN поддержку я наверное даже уберу, ибо от неё больше проблем, чем пользы ибо 99% карт использует банально небезопасные функции, некоторые даже используют JNProcessStart и JNGetModuleHandle (это очень-очень опасные штуки, которые если же в МемХаке ещё как-то ограничены, то на С++ стороне можно сделать много неприятных приколов).
Потому правильнее будет переписать карту, ибо всё что с Dz и даже больше UjAPI умеет и возможностей куда больше чем на обеих платформах вместе взятых, да и в новой версии будет ещё больше функционала.
14
JNProcessStart и JNGetModuleHandle (это очень-очень опасные штуки)
format c: и cmd.exe это тоже очень очень опасные штуки, что не мешает успешно пользоваться bat-скриптами по всему миру
ну нет так нет, шо
20
JNProcessStart и JNGetModuleHandle (это очень-очень опасные штуки)
format c: и cmd.exe это тоже очень очень опасные штуки, что не мешает успешно пользоваться bat-скриптами по всему миру
ну нет так нет, шо
Логика поражает, одно - локально у юзера, другое - картодел может тебе System32 отправить в Вальгаллу, разницы не видно?
П.С. Список очень "безопасных" нативок:
JNProcessStart / JNGetModule / JNFindModuleHandle / JNMemoryGetByte / JNMemorySetByte / JNMemoryGetInteger / JNMemorySetInteger / JNMemoryGetReal / JNMemorySetReal / JNMemoryGetString / JNMemorySetString / JNProcCall / JNOpenBrowser.
20
Вышла новая версия! Прокрутить к ресурсу

v1.0.20.84

  1. UjAPI.exe более не "заставляет" последующие запуски UjAPI запускаться от админ прав, теперь последующие запуски будут просто посылать свои команды в главное приложение. Это должно упростить создание "макетов запуска".
  2. Missile API переделан в Projectile API.
  3. Удалённые нативные функции:
    native GetAbilityCooldownEx takes ability whichAbility returns real
    native TriggerRegisterPlayerProjectileEvent takes trigger whichTrigger, player whichPlayer, playermissileevent whichEvent returns event
    Пометка: события теперь регистрируются через определённых игроков/юнитов используя TriggerRegisterPlayerUnitEvent and TriggerRegisterUnitEvent.
  4. Новые типы:
    type doodad extends agent
  5. Новые конвертеры:
    constant native ConvertProjectileType takes integer i returns projectiletype
  6. Новыее константы:
    constant playerunitevent EVENT_PLAYER_UNIT_BUFF_RECEIVED = ConvertPlayerUnitEvent(500)
    constant playerunitevent EVENT_PLAYER_UNIT_BUFF_REFRESHED = ConvertPlayerUnitEvent(501)
    constant playerunitevent EVENT_PLAYER_UNIT_BUFF_ENDED = ConvertPlayerUnitEvent(502)
    constant playerunitevent EVENT_PLAYER_UNIT_PROJECTILE_LAUNCH = ConvertPlayerUnitEvent(600)
    constant playerunitevent EVENT_PLAYER_UNIT_PROJECTILE_HIT = ConvertPlayerUnitEvent(601)
    constant unitevent EVENT_UNIT_BUFF_RECEIVED = ConvertUnitEvent(510)
    constant unitevent EVENT_UNIT_BUFF_REFRESHED = ConvertUnitEvent(511)
    constant unitevent EVENT_UNIT_BUFF_ENDED = ConvertUnitEvent(512)
    constant unitevent EVENT_UNIT_PROJECTILE_LAUNCH = ConvertUnitEvent(610)
    constant unitevent EVENT_UNIT_PROJECTILE_HIT = ConvertUnitEvent(611)
    constant projectiletype PROJECTILE_TYPE_BULLET = ConvertProjectileType(0)
    constant projectiletype PROJECTILE_TYPE_MISSILE = ConvertProjectileType(1)
    constant projectiletype PROJECTILE_TYPE_ARTILLERY = ConvertProjectileType(2)
    constant projectiletype PROJECTILE_TYPE_VISIBLE = ConvertProjectileType(4)
    constant projectiletype PROJECTILE_TYPE_DEAD = ConvertProjectileType(5)
  7. Новые нативные функции:
    native IsProjectileType takes projectile whichProjectile, projectiletype whichType returns boolean
    native GetProjectileTargetPointX takes projectile whichProjectile returns real
    native GetProjectileTargetPointY takes projectile whichProjectile returns real
    native GetProjectileTargetPointZ takes projectile whichProjectile returns real
    native GetProjectileTargetPoint takes projectile whichProjectile returns location
    native GetProjectileAreaOfEffectFullDamage takes projectile whichProjectile returns real
    native SetProjectileAreaOfEffectFullDamage takes projectile whichProjectile, real area returns nothing
    native GetProjectileAreaOfEffectMediumDamage takes projectile whichProjectile returns real
    native SetProjectileAreaOfEffectMediumDamage takes projectile whichProjectile, real area returns nothing
    native GetProjectileAreaOfEffectSmallDamage takes projectile whichProjectile returns real
    native SetProjectileAreaOfEffectSmallDamage takes projectile whichProjectile, real area returns nothing
    native GetProjectileAreaOfEffectMediumDamageFactor takes projectile whichProjectile returns real
    native SetProjectileAreaOfEffectMediumDamageFactor takes projectile whichProjectile, real factor returns nothing
    native GetProjectileAreaOfEffectSmallDamageFactor takes projectile whichProjectile returns real
    native SetProjectileAreaOfEffectSmallDamageFactor takes projectile whichProjectile, real factor returns nothing
    native EnumProjectilesInRect takes rect whichRect, boolexpr filter, code handlerFunc returns nothing
    native GetUnitRallyPointX takes unit whichUnit returns real
    native GetUnitRallyPointY takes unit whichUnit returns real
    native SetUnitKiller takes unit whichUnit, unit killer returns nothing
    native KillUnitEx takes unit whichUnit, unit killer returns nothing
    native GetAbilityOwner takes ability whichAbility returns unit
    native GetFilterAbility takes nothing returns ability
    native GetEnumAbility takes nothing returns ability
    native EnumUnitAbilities takes unit whichUnit, boolexpr whichBoolexpr, code whichCode returns boolean
    native GetBuffTypeId takes buff whichBuff returns integer
    native GetBuffBaseTypeId takes buff whichBuff returns integer
    native GetBuffOwner takes buff whichbuff returns unit
    native SetBuffLevel takes buff whichBuff, integer level returns nothing
    native GetFilterBuff takes nothing returns buff
    native GetEnumBuff takes nothing returns buff
    native EnumUnitBuffs takes unit whichUnit, boolexpr whichBoolexpr, code whichCode returns boolean
    native GetTriggerBuff takes nothing returns buff
    native GetTriggerBuffSourceAbility takes nothing returns ability
    native GetTriggerBuffSourceUnit takes nothing returns unit
    native GetTriggerBuffTarget takes nothing returns unit
    Doodad API
    native GetDoodadCount takes nothing returns integer
    native GetDoodadByIndex takes integer index returns doodad
    native GetDoodadIndex takes doodad whichDoodad returns integer
    native SetDoodadAnimationWithRarityByIndex takes doodad whichDoodad, integer animIndex, raritycontrol rarity returns nothing
    native SetDoodadAnimationWithRarity takes doodad whichDoodad, string animationName, raritycontrol rarity returns nothing
    native SetDoodadAnimationByIndex takes doodad whichDoodad, integer animIndex returns nothing
    native SetDoodadAnimationEx takes doodad whichDoodad, string animationName returns nothing
    native QueueDoodadAnimationByIndex takes doodad whichDoodad, integer animIndex returns nothing
    native QueueDoodadAnimation takes doodad whichDoodad, string animationName returns nothing
    native SetDoodadAnimationOffsetPercent takes doodad whichDoodad, real percent returns nothing
    native GetFilterDoodad takes nothing returns doodad
    native GetEnumDoodad takes nothing returns doodad
    native EnumDoodadsInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
    native EnumDoodadsInRangeEx takes real x, real y, real radius, integer typeId, boolean nearestOnly, boolexpr filter, code handlerFunc returns nothing
    native EnumDoodadsInRect takes rect whichRect, boolexpr filter, code handlerFunc returns nothing
    native EnumDoodadsInRectEx takes rect whichRect, integer typeId, boolean nearestOnly, boolexpr filter, code handlerFunc returns nothing
    Handle List API
    native HandleListCreate takes nothing returns handlelist
    native HandleListDestroy takes handlelist whichHandleList returns nothing
    native HandleListAddHandle takes handlelist whichHandleList, handle whichHandle returns nothing
    native HandleListRemoveHandle takes handlelist whichHandleList, handle whichHandle returns nothing
    native HandleListAddList takes handlelist destHandleList, handlelist sourceHandleList returns integer
    native HandleListRemoveList takes handlelist destHandleList, handlelist sourceHandleList returns integer
    native HandleListClear takes handlelist whichHandleList returns nothing
    native HandleListContainsHandle takes handlelist whichHandleList, handle whichHandle returns boolean
    native HandleListGetCount takes handlelist whichHandleList returns integer
    native HandleListGetCountEx takes handlelist whichHandleList, integer handleTypeId returns integer
    native HandleListGetAgentCount takes handlelist whichHandleList returns integer
    native HandleListGetWidgetCount takes handlelist whichHandleList returns integer
    native HandleListGetUnitCount takes handlelist whichHandleList returns integer
    native HandleListGetItemCount takes handlelist whichHandleList returns integer
    native HandleListGetDestructableCount takes handlelist whichHandleList returns integer
    native HandleListGetAbilityCount takes handlelist whichHandleList returns integer
    native HandleListGetBuffCount takes handlelist whichHandleList returns integer
    native HandleListGetEffectCount takes handlelist whichHandleList returns integer
    native HandleListGetMissileCount takes handlelist whichHandleList returns integer
    native HandleListGetFrameCount takes handlelist whichHandleList returns integer
    native HandleListGetHandleByIndex takes handlelist whichHandleList, integer index returns handle
    native HandleListGetHandleByIndexEx takes handlelist whichHandleList, integer handleTypeId, integer index returns handle
    native HandleListGetAgentByIndex takes handlelist whichHandleList, integer index returns agent
    native HandleListGetWidgetByIndex takes handlelist whichHandleList, integer index returns widget
    native HandleListGetUnitByIndex takes handlelist whichHandleList, integer index returns unit
    native HandleListGetItemByIndex takes handlelist whichHandleList, integer index returns item
    native HandleListGetDestructableByIndex takes handlelist whichHandleList, integer index returns destructable
    native HandleListGetAbilityByIndex takes handlelist whichHandleList, integer index returns ability
    native HandleListGetBuffByIndex takes handlelist whichHandleList, integer index returns buff
    native HandleListGetEffectByIndex takes handlelist whichHandleList, integer index returns effect
    native HandleListGetMissileByIndex takes handlelist whichHandleList, integer index returns missile
    native HandleListGetFrameByIndex takes handlelist whichHandleList, integer index returns framehandle
    native HandleListGetFilterHandle takes nothing returns handle
    native HandleListGetFilterAgent takes nothing returns agent
    native HandleListGetFilterWidget takes nothing returns widget
    native HandleListGetFilterUnit takes nothing returns unit
    native HandleListGetFilterItem takes nothing returns item
    native HandleListGetFilterDestructable takes nothing returns destructable
    native HandleListGetFilterAbility takes nothing returns ability
    native HandleListGetFilterBuff takes nothing returns buff
    native HandleListGetFilterEffect takes nothing returns effect
    native HandleListGetFilterMissile takes nothing returns missile
    native HandleListGetFilterFrame takes nothing returns framehandle
    native HandleListGetEnumHandle takes nothing returns handle
    native HandleListGetEnumAgent takes nothing returns agent
    native HandleListGetEnumWidget takes nothing returns widget
    native HandleListGetEnumUnit takes nothing returns unit
    native HandleListGetEnumItem takes nothing returns item
    native HandleListGetEnumDestructable takes nothing returns destructable
    native HandleListGetEnumAbility takes nothing returns ability
    native HandleListGetEnumBuff takes nothing returns buff
    native HandleListGetEnumEffect takes nothing returns effect
    native HandleListGetEnumMissile takes nothing returns missile
    native HandleListGetEnumFrame takes nothing returns framehandle
    native HandleListEnumInRange takes handlelist whichHandleList, real x, real y, real radius, boolexpr filter returns nothing
    native HandleListEnumInRangeEx takes handlelist whichHandleList, real x, real y, real radius, integer handleTypeId, boolexpr filter returns nothing
    native HandleListEnumAgentsInRange takes handlelist whichHandleList, real x, real y, real radius, boolexpr filter returns nothing
    native HandleListEnumWidgetsInRange takes handlelist whichHandleList, real x, real y, real radius, boolexpr filter returns nothing
    native HandleListEnumUnitsInRange takes handlelist whichHandleList, real x, real y, real radius, boolexpr filter returns nothing
    native HandleListEnumItemsInRange takes handlelist whichHandleList, real x, real y, real radius, boolexpr filter returns nothing
    native HandleListEnumDestructablesInRange takes handlelist whichHandleList, real x, real y, real radius, boolexpr filter returns nothing
    native HandleListEnumEffectsInRange takes handlelist whichHandleList, real x, real y, real radius, boolexpr filter returns nothing
    native HandleListEnumMissilesInRange takes handlelist whichHandleList, real x, real y, real radius, boolexpr filter returns nothing
    native HandleListEnumInRangeOfLoc takes handlelist whichHandleList, location whichLocation, real radius, boolexpr filter returns nothing
    native HandleListEnumInRangeOfLocEx takes handlelist whichHandleList, location whichLocation, real radius, integer handleTypeId, boolexpr filter returns nothing
    native HandleListEnumAgentsInRangeOfLoc takes handlelist whichHandleList, location whichLocation, real radius, boolexpr filter returns nothing
    native HandleListEnumWidgetsInRangeOfLoc takes handlelist whichHandleList, location whichLocation, real radius, boolexpr filter returns nothing
    native HandleListEnumUnitsInRangeOfLoc takes handlelist whichHandleList, location whichLocation, real radius, boolexpr filter returns nothing
    native HandleListEnumItemsInRangeOfLoc takes handlelist whichHandleList, location whichLocation, real radius, boolexpr filter returns nothing
    native HandleListEnumDestructablesInRangeOfLoc takes handlelist whichHandleList, location whichLocation, real radius, boolexpr filter returns nothing
    native HandleListEnumEffectsInRangeOfLoc takes handlelist whichHandleList, location whichLocation, real radius, boolexpr filter returns nothing
    native HandleListEnumMissilesInRangeOfLoc takes handlelist whichHandleList, location whichLocation, real radius, boolexpr filter returns nothing
    native HandleListEnumInRect takes handlelist whichHandleList, rect whichRect, boolexpr filter returns nothing
    native HandleListEnumInRectEx takes handlelist whichHandleList, rect whichRect, integer handleTypeId, boolexpr filter returns nothing
    native HandleListEnumAgentsInRect takes handlelist whichHandleList, rect whichRect, boolexpr filter returns nothing
    native HandleListEnumWidgetsInRect takes handlelist whichHandleList, rect whichRect, boolexpr filter returns nothing
    native HandleListEnumUnitsInRect takes handlelist whichHandleList, rect whichRect, boolexpr filter returns nothing
    native HandleListEnumItemsInRect takes handlelist whichHandleList, rect whichRect, boolexpr filter returns nothing
    native HandleListEnumDestructablesInRect takes handlelist whichHandleList, rect whichRect, boolexpr filter returns nothing
    native HandleListEnumEffectsInRect takes handlelist whichHandleList, rect whichRect, boolexpr filter returns nothing
    native HandleListEnumMissilesInRect takes handlelist whichHandleList, rect whichRect, boolexpr filter returns nothing
    native HandleListEnumByTypeId takes handlelist whichHandleList, integer typeId, boolexpr filter returns nothing
    native HandleListEnumByTypeIdEx takes handlelist whichHandleList, integer handleTypeId, integer typeId, boolexpr filter returns nothing
    native HandleListForEach takes handlelist whichHandleList, code c returns nothing
    native HandleListForEachByType takes handlelist whichHandleList, integer typeId, code c returns nothing
    native HandleListForEachByTypeEx takes handlelist whichHandleList, integer handleTypeId, integer typeId, code c returns nothing
  8. Исправлена опечатка (дополнительное слово "unit" в Get/SetUnitBaseMoveSpeed.
  9. Исправлена критическая ошибка от GetFrameText, если текст фрейма не был инициализирован.
  10. Исправлена критическая ошибка в SetUnitBonusMoveSpeedPercent.
  11. Исправлена критическая ошибка при запуске патча 1.27b.
  12. Исправлена критическая ошибка при смене "страниц" в главном меню на 1.28f.
  13. Добавлена экспериментальная поддержка карт, которые НЕ содержат W3MH (HM3W) заголовок, то бишь карты Рефоржа, у которых ТОЛЬКО MPQ заголовок, они должны теперь хотя бы отображаться в списке карт и их w3i файл должен считываться.
  14. Исправлены нативные функции SetAbilityField ломающие заклинания, максимальный уровень которых выше 4.
  15. Исправлена критическая ошибка при выходе с карты/игры после изменения заклинания типа "канал" ANcl через SetAbilityField и т.д.
  16. Исправлена некорректное изменение цвета виджетов в SetWidgetVertexColour.
  17. Добавлена "поддержка" новой нативной функции DzAPI_Map_GetPlayerUserName.
  18. Добавлена поддержка MMEngine, теперь вы можете запускать её через UjAPI.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.