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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
30
Обновил свой репозиторий. Всегда актуальный TESH лежит здесь.
18
Вопрос по HandleList, как я понял с помощью него можно сделать в карте свой условный Garbage Collector?
20
Вопрос по HandleList, как я понял с помощью него можно сделать в карте свой условный Garbage Collector?
И да и нет, он создан как альтернатива группе, которая может хранить лишь юнитов. Но в целом, можно собирать туда вообще всё и потом проверять, вообще хендл что в себе хранит и т.д.
23
Unryze, аналог группы - это круто! Только непонятно 3 момента:
Разве у объектов типа agent существуют координаты х и у, чтобы находить их в радиусе или в области? Они конечно есть где то в памяти, но не на карте же...
Будет ли аналог функции first of group, чтобы делать ручные переборы объектов в handle list?
Что тогда делать с предыдущими нативками по перебору предметов/эффектов/итд в радиусе, имеют ли они теперь смысл?
20
Unryze, аналог группы - это круто! Только непонятно 3 момента:
Разве у объектов типа agent существуют координаты х и у, чтобы находить их в радиусе или в области? Они конечно есть где то в памяти, но не на карте же...
Будет ли аналог функции first of group, чтобы делать ручные переборы объектов в handle list?
Что тогда делать с предыдущими нативками по перебору предметов/эффектов/итд в радиусе, имеют ли они теперь смысл?
На деле хендл - это обёртка agent. HandleListGetAgentByIndex и аналоги для чего? Я не хочу делать FirstOfGroup, ибо он банально бесполезен, всегда пихать индекс 0 и далее удалять этот хендл из Листа.
Переборы те не требуют "группы" (листа), там можно просто обработать данные не записывая их в Лист, что юзать - дело пользователя.
23
Unryze, Тогда я не врубаюсь, как писать код ручного перебора, без first of group... Какое условие вешать на цикл и какой объект заносить в локалку? Пример бы.
20
Эх, а ведь он ещё индексаторами типов не пользовался. Без спойлеров
31
Unryze, Тогда я не врубаюсь, как писать код ручного перебора, без first of group... Какое условие вешать на цикл и какой объект заносить в локалку? Пример бы.
наверное, как-нибудь так...
выбираешь нужную группу, к примеру через HandleListEnumUnitsInRect
у тебя на руках будет группа HandleList
first of group - это первый элемент листа по индексу [0]
и просто прогоняешь цикл от индекса [0] до [размер HandleList (наверняка есть метод получения размера группы) - 1]
или вон нативка есть.
native HandleListForEach takes handlelist whichHandleList, code c returns nothing
ну это как я понял...
23
Alan_Gu, ну да, похоже на то. Плюс упомянуто выше про Get by index. Только вот последняя нативка, которая HandleListForEach - она как аналог ForGroup - она неудобная в плане того, что туда нельзя загружать аргументы, без хеш таблиц, массивов и глобальных переменных. Поэтому что у неё Функция в виде аргумента.
20
Alan_Gu, ну да, похоже на то. Плюс упомянуто выше про Get by index. Только вот последняя нативка, которая HandleListForEach - она как аналог ForGroup - она неудобная в плане того, что туда нельзя загружать аргументы, без хеш таблиц, массивов и глобальных переменных. Поэтому что у неё Функция в виде аргумента.
HandleListForEach сделан для тех, кому не хочется заниматься переборами и перетасковками. Да и опять же, что мешает сделать код вот так:
local integer size = HandleListGetCount( list )
local integer i = 0
local agent a = null

loop
	exitwhen i == size
	set a = HandleListGetAgentByIndex( list, i )
	
	// действия пройдут по всему списку, и не нужно делать FirstOfList и удалять из группы, чтобы следующий хендл занял его позицию
	
	set i = i + 1
endloop
Зачем усложнять себе жизнь? Я думал это было и так понятно, но видать костыли групп очень вжились. :D
П.С. Я только заметил, что я не добавил именно получение хендла по индексу, добавлю и обновлю в ближайшее время. Хотя на деле agent == handle как я и писал выше, но будет удобнее таки с ними.

Эх, а ведь он ещё индексаторами типов не пользовался. Без спойлеров
Есть методы получения размера определённых типов, что позволит делать одинаковый код по логике и не париться про индексы разных типов в одном листе, надо будет я блин заполню UjAPI тему примерами, чтобы ты уже перестал без понимания "осуждать" то, что реально удобнее, чем ты себе представляешь.
23
Unryze, Спасибо! Теперь понятно)) так костыль группы - это единственная альтернатива фор групп, чтобы передать аргументы каждому юниту, вот и используется)
А примеры - это очень хорошо, чтобы люди имели понимание, как то или другое использовать. Особенно если название функции не совсем понятное на первый взгляд или непонятное.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.