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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
20
это "маленькое" изменение потребовало более 1000 строк кода, что же я делаю со своей жизнью...
А как же protobuf или другие решения, в которых декларативно описываем форматы файлов и потом удобно достаем все что хотим?
Да... и мы удобно игнорируем методы выделения памяти, расширения памяти в том виде, который нужен игре, а так же оффсеты и т.д. и т.п. Это во всяких вебах +- всё открыто, а тут... ну ты понял.
38
Ну, порядочные либы предоставляют возможность указать свои аллокаторы)
20
Ну, порядочные либы предоставляют возможность указать свои аллокаторы)
Ну, вот тебе один из примеров:
Удачи (тм)?
Загруженные файлы
38
А как луы всякие прикручивали к 1.26, вызовом этой функции из lualib?
20
А как луы всякие прикручивали к 1.26, вызовом этой функции из lualib?
Это вообще не связано с луа... я понимаю к чему ты ведёшь, но ты очень поверхностно судишь о реверс-инженерии, я бы даже сказал через-чур.
20
Вышла новая версия! Прокрутить к ресурсу

v1.0.27.100

  1. Новые Константы
constant playercolor PLAYER_COLOR_MAROON = ConvertPlayerColor(12)
constant playercolor PLAYER_COLOR_NAVY = ConvertPlayerColor(13)
constant playercolor PLAYER_COLOR_TURQUOISE = ConvertPlayerColor(14)
constant playercolor PLAYER_COLOR_VIOLET = ConvertPlayerColor(15)
constant playercolor PLAYER_COLOR_WHEAT = ConvertPlayerColor(16)
constant playercolor PLAYER_COLOR_PEACH = ConvertPlayerColor(17)
constant playercolor PLAYER_COLOR_MINT = ConvertPlayerColor(18)
constant playercolor PLAYER_COLOR_LAVENDER = ConvertPlayerColor(19)
constant playercolor PLAYER_COLOR_COAL = ConvertPlayerColor(20)
constant playercolor PLAYER_COLOR_SNOW = ConvertPlayerColor(21)
constant playercolor PLAYER_COLOR_EMERALD = ConvertPlayerColor(22)
constant playercolor PLAYER_COLOR_PEANUT = ConvertPlayerColor(23)

constant integer CORNER_FLAG_UPPER_LEFT = 1
constant integer CORNER_FLAG_UPPER_RIGHT = 2
constant integer CORNER_FLAG_BOTTOM_LEFT = 4
constant integer CORNER_FLAG_BOTTOM_RIGHT = 8
constant integer CORNER_FLAG_TOP = 16
constant integer CORNER_FLAG_LEFT = 32
constant integer CORNER_FLAG_BOTTOM = 64
constant integer CORNER_FLAG_RIGHT = 128
constant integer CORNER_FLAG_ALL = 255
  1. Новые Нативные Функции:
constant native GetBJMaxPlayers takes nothing returns integer
constant native GetBJPlayerNeutralVictim takes nothing returns integer
constant native GetBJPlayerNeutralExtra takes nothing returns integer
constant native GetBJMaxPlayerSlots takes nothing returns integer
constant native GetPlayerNeutralPassive takes nothing returns integer
constant native GetPlayerNeutralAggressive takes nothing returns integer

native SaveCode takes hashtable table, integer parentKey, integer childKey, code whichCode returns boolean
native SaveHandleList takes hashtable table, integer parentKey, integer childKey, handlelist whichHandleList returns boolean
native LoadCode takes hashtable table, integer parentKey, integer childKey returns code
native LoadHandleList takes hashtable table, integer parentKey, integer childKey returns handlelist

native GetFrameTypeName takes framehandle whichFrame returns string
native GetFrameCornerFlags takes framehandle whichFrame, integer backdropId returns integer
native SetFrameCornerFlags takes framehandle whichFrame, integer backdropId, integer cornerFlag returns nothing
native GetFrameCornerSize takes framehandle whichFrame, integer backdropId returns real
native SetFrameCornerSize takes framehandle whichFrame, integer backdropId, real value returns nothing
native GetFrameBackgroundSize takes framehandle whichFrame, integer backdropId returns real
native SetFrameBackgroundSize takes framehandle whichFrame, integer backdropId, real value returns nothing
native GetFrameBackgroundInsetById takes framehandle whichFrame, integer backdropId, integer insetId returns real
native SetFrameBackgroundInsets takes framehandle whichFrame, integer backdropId, real minX, real minY, real maxX, real maxY returns nothing
native SetFrameBackgroundInsetById takes framehandle whichFrame, integer backdropId, integer insetId, real value returns nothing
native SetFrameBackdropTexture takes framehandle whichFrame, integer textureId, string backgroundTextureFile, boolean allowTransparency, boolean blend, string borderTextureFile, integer borderFlags, boolean isControlBackdrop returns nothing
  1. Изменена последовательность аргументов SetFrameTextureEx.
  2. Исправлен анализатор опкодов Jass секции, а точнее: GREATER/LESSER/GREATEROREQUAL/LESSEROREQUAL, числовые сравнения изменены с uint32_t на int32_t.
Пометка: это была очень глупая ошибка, которую заметил N1ghtSiren.
  1. Исправлена неверное возвращаемо значение нативной функцией I2C.
Пометка: Оказывается хоть сама переменная code хранит индекс функции, в неё нельзя посылать его напрямую, а нужно посылать адрес Opcode...
Спасибо N1ghtSiren за то, что заметил эту проблему.
  1. Исправлена критическая ошибка от SetWidgetModel и SetWidgetModelEx.
Пометка: Юниты/Предметы/Разрушаемые имели эту же проблему.
Спасибо PinkieNecro за то, что заметил эту проблему.
  1. Исправлена "форсированная" загрузка библиотеки в UjAPIApp даже если опция "Load Library" была отключена.
  2. Исправлен форсированный запуск карты UjAPI приложением, если был указан -loadfile даже при выключенном "Additional Command Line Arguments".
  3. Исправлена ошибка по которой UjAPI приложение не могло удалить старый "инстанс" после обновления.
  4. Исправлено событие EVENT_UNIT_DAMAGED теряющее GetUnitDamageSource когда UnitDamageTarget был вызван внутри него.
20
Вышла новая версия! Прокрутить к ресурсу

v1.0.28.102

  1. Новые Константы:
    constant integer TEXT_TAG_MAX_SIZE = GetTextTagLimit( ) Original 100 limit raised to 1024, this is subject to change if needed.
  2. Новые Нативные Функции:
    constant native GetJassArrayLimit takes nothing returns integer
    constant native GetTextTagLimit takes nothing returns integer

    native GetCodeByName takes string funcName returns code

    native TimerIsPaused takes timer whichTimer returns boolean
    native TimerRestart takes timer whichTimer returns nothing
    native TimerIsPeriodic takes timer whichTimer returns boolean
    native TimerSetPeriodic takes timer whichTimer, boolean isPeriodic returns nothing
    native TimerSetRemaining takes timer whichTimer, real remaining returns nothing
    native TimerSetTimeout takes timer whichTimer, real timeout returns nothing
    native TimerGetCallback takes timer whichTimer returns code
    native TimerSetCallback takes timer whichTimer, code whichFunction returns nothing

    native GetDoodadModel takes doodad whichDoodad returns string
    native SetDoodadModel takes doodad whichDoodad, string whichModel returns nothing
    native IsDoodadVisible takes doodad whichDoodad returns boolean
    native ShowDoodad takes doodad whichDoodad, boolean isShow returns nothing

    native GetLightningSourceX takes lightning whichBolt returns real
    native SetLightningSourceX takes lightning whichBolt, real value returns nothing
    native GetLightningSourceY takes lightning whichBolt returns real
    native SetLightningSourceY takes lightning whichBolt, real value returns nothing
    native GetLightningSourceZ takes lightning whichBolt returns real
    native SetLightningSourceZ takes lightning whichBolt, real value returns nothing
    native GetLightningSourcePositionLocation takes lightning whichBolt returns location
    native SetLightningSourcePositionLocation takes lightning whichBolt, location whichLocation returns nothing
    native GetLightningTargetX takes lightning whichBolt returns real
    native SetLightningTargetX takes lightning whichBolt, real value returns nothing
    native GetLightningTargetY takes lightning whichBolt returns real
    native SetLightningTargetY takes lightning whichBolt, real value returns nothing
    native GetLightningTargetZ takes lightning whichBolt returns real
    native SetLightningTargetZ takes lightning whichBolt, real value returns nothing
    native GetLightningTargetPositionLocation takes lightning whichBolt returns location
    native SetLightningTargetPositionLocation takes lightning whichBolt, location whichLocation returns nothing
    native GetLightningScreenX takes lightning whichBolt returns real
    native GetLightningScreenY takes lightning whichBolt returns real
    native GetLightningColour takes lightning whichBolt returns integer
    native GetLightningLength takes lightning whichBolt returns real
    native SetLightningLength takes lightning whichBolt, real value returns nothing
    native GetLightningNoiseScaling takes lightning whichBolt returns real
    native SetLightningNoiseScaling takes lightning whichBolt, real value returns nothing
    native GetLightningTextureCoordinates takes lightning whichBolt returns real
    native SetLightningTextureCoordinates takes lightning whichBolt, real value returns nothing
    native GetLightningDuration takes lightning whichBolt returns real
    native SetLightningDuration takes lightning whichBolt, real value returns nothing
    native GetLightningTexture takes lightning whichBolt returns string
    native SetLightningTexture takes lightning whichBolt, string textureName returns nothing

    native GetTextTagScreenX takes texttag whichTextTag returns real
    native GetTextTagScreenY takes texttag whichTextTag returns real

    native GetImageScreenX takes image whichImage returns real
    native GetImageScreenY takes image whichImage returns real

    native GetSpecialEffectScreenX takes effect whichEffect returns real
    native GetSpecialEffectScreenY takes effect whichEffect returns real

    native GetTrackableScreenX takes trackable whichTrackable returns real
    native GetTrackableScreenY takes trackable whichTrackable returns real

    native GetWidgetScreenX takes widget whichWidget returns real
    native GetWidgetScreenY takes widget whichWidget returns real

    native GetDestructableScreenX takes destructable whichDestructable returns real
    native GetDestructableScreenY takes destructable whichDestructable returns real

    native GetItemScreenX takes item whichItem returns real
    native GetItemScreenY takes item whichItem returns real

    native GetUnitScreenX takes unit whichUnit returns real
    native GetUnitScreenY takes unit whichUnit returns real

    native GetProjectileScreenX takes projectile whichProjectile returns real
    native GetProjectileScreenY takes projectile whichProjectile returns real

    native HandleListContainsTypeId takes handlelist whichHandleList, integer typeId returns boolean
    native HandleListGetHandleByTypeId takes handlelist whichHandleList, integer typeId, integer index returns handle
    native HandleListRemoveEmpty takes handlelist whichHandleList returns integer
  3. Лимит TextTag'ов был увеличен со 100 до 1024.
    Пометка: использование 512 тексттагов никак не повлияло на фпс, однако тесты проведённые на 8192 увенчались 20 средними фпс, потому лимит был установлен в 1024, так как при этом лимите фпс тоже не пострадал.
  4. Исправлена ошибка в HandleListContainsHandle, по которой оно не определяло содержится хендл или нет.
  5. Исправлена критическая ошибка, при попытке получения индекса превышающего размер массива, если массив был инициализирован.
    Пометка: такой проблемы не было на "ванилле".
  6. Исправлена критическая ошибка от установки RESEARCH/ACTIVATED иконок через SetAbilityStringField, и т.д..
  7. ICON_RESEARCH теперь срабатывает на AHer (Изучение способностей героя) способность и всё связанное с изучением/наёмом и т.д..
  8. Исправлена SetFrameTexture, которая использовала неправильные внутренний аргументы.
  9. Исправлена HideOriginFrames вызывающая критическую ошибку, если была вызвана из main потока без задержки таймера.
  10. Исправлена критическая ошибка для пользователей на Windows 7, которая случалась в виду банально медленного запуска Warcraft III на Windows 7...
    Пометка: ошибка происходила потому, что UjAPI пытался получать доступ к CGlueManager для перезаписи "версии" и добавлении текста версии UjAPI, но это по итогу происходило на "чёрном" экране.
37
Установил нет фраемворк 4.72
Установил патч 1.27а
Сделал как всему описание
Запустил
Выхожу - выкидывает ошибка что варкрафт перестал
Запускаю и на карту китайскую нажимаю и происходит вылет
Теперь при запуске игры не видит ужапи
После этого ужапи перестал запускаться
37
После выхода из игры вылетает вот это
Загруженные файлы
20
После выхода из игры вылетает вот это
Да, это приколы вин7 и ниже, к сожалению не исправимо.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.