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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
38
nazarpunk, плохой пример. Тут как раз аггрегация должна быть. Точек у юнита может быть много для разных целей

Интерфейс - это контракт в первую очередь. Когда мы пишем функционал для применения в различных ситуациях, описываем контракты, по которым функционал заявляет свою работу
Виджет мог бы таким послужить, если бы близзы не реализовывали функции-клоны для наследников виджета. А раз реализовали - значит, они отличаются и это не очень похоже на наследование/реализацию
20
nazarpunk, плохой пример. Тут как раз аггрегация должна быть. Точек у юнита может быть много для разных целей

Интерфейс - это контракт в первую очередь. Когда мы пишем функционал для применения в различных ситуациях, описываем контракты, по которым функционал заявляет свою работу
Виджет мог бы таким послужить, если бы близзы не реализовывали функции-клоны для наследников виджета. А раз реализовали - значит, они отличаются и это не очень похоже на наследование/реализацию
Не совсем так с виджетами. Просто у юнитов есть больше данных, нежели у разрушаемых и предметов (они используют CSpriteMini), но большая часть функционала идентична. Потом я и добавил целый пак виджетАПИ, который фактически объединяет всё нужное/общее, если лень типизировать. Но до реального интерфейса там кот наплакал... :(
23
Kokomi, ну если посмотреть на этот пример, то получается, что в функции типа interface можно добавить в виде аргумента другую функцию типа interface, а в функцию типа method можно добавить обычные функции. Что то вроде call Execute Func, куда можно любую строку вставить, и создать базу функций в виде string массива. Но вообще, по честному говоря, я запутался. Слишком тяжело, имхо, разбираться во всех этих наворотах, да и ошибиться намного легче...
20
EugeAl, это не функция типа интерфейс, а объект, реализующий интерфейс. В JASS это все сложно представить и как-то юзать. Я бы посоветовал немного поковырять Java или C#, если будет скучно - JS
8
EugeAl, интерфейс это скорее абстрактный тип, но не функция, он только содержит их сигнатуры, а реализация ложится на тех, кто наследует интерфейс.
20
Такой вопрос (только к тем, кто использует джасс), добавлять ли возможность ExecuteFunc/Code с вариативными аргументами таким образом:
function Multiply takes integer num, real multiplier returns real
	return num * multiplier
endfunction

function TestSomething takes nothing returns nothing
local real result = 0.
call PushInteger( 100 )
call PushReal( 1.5 )
set result = VarToReal( ExecuteVariedFunc( "Multiply" ) )
endfunction
Это уже конечно "велосипед" (зато какой). То бишь ExecuteVariedFunc будет возвращать хендл типа Var, который можно будет кастить в другие типы. Думаю это всё явно лишнее, но интересно что скажете.

v1.0.12.59

  1. Исправлена критическая ошибка на 1.28.5.
Пояснение: данная ошибка была связана с выполнением какого-либо действия, допустим нажатия системных фреймов, выделением юнита и так далее. Обычное движение мышки и камеры не вызывало ошибки.
  1. Исправлены CastAbilityGround и CastAbilityTarget нативные функции.
Дополнение: НЕ ИСПОЛЬЗУЙТЕ эти функции без какой-либо задержки из main функции, так как игра может не успеть подготовить события под этим заклинания и т.д.
  1. Исправлена критическая ошибка при создании фреймов в lua через war3_lua.dll.
20
Такой вопрос (только к тем, кто использует джасс), добавлять ли возможность ExecuteFunc/Code с вариативными аргументами таким образом:
Скопировать в буфер
А почему бы и нет? Выглядит неплохо, я только за.
30
Думаю это всё явно лишнее, но интересно что скажете.
А функцию можно аргументом передать?
20
Думаю это всё явно лишнее, но интересно что скажете.
А функцию можно аргументом передать?
Это выше возможностей джасса уже. Функции нельзя передавать, лишь их результат.
20
Вышла новая версия! Прокрутить к ресурсу

v1.0.12.60

  1. Откат изменения нативных функций CreateFrame/CreateFrameByType, так как данное исправление изменяла "ломала" внутреннюю логику позиции фреймов в памяти игры.
    Дополнение: чтобы избежать критической ошибки на выходе из карты/игры, НЕ СОЗДАВАЙТЕ фреймы из main функции без какой-либо задержки с помощью таймера.
  2. Добавлен перехват всех Frames/SimpleFrames/SimpleTextures/SimpleFonts для того, чтобы предотвратить попытку очищения пустой памяти фреймами.
    Дополнение: это исправление "контрмера" для нужды использования таймеров, как было сказано в пункте #1.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.