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
Вышла новая версия! Прокрутить к ресурсу

v1.0.22.88

  1. Новые Типы:
type pathingaitype extends handle
type collisiontype extends handle
type textfilehandle extends handle
  1. Новые Конвертеры:
constant native ConvertPathingAIType takes integer i returns pathingaitype
constant native ConvertCollisionType takes integer i returns collisiontype
  1. Новые Константы:
constant pathingaitype PATHING_AI_TYPE_FOOT = ConvertPathingAIType(0)
constant pathingaitype PATHING_AI_TYPE_AMPHIBIOUS = ConvertPathingAIType(64)
constant pathingaitype PATHING_AI_TYPE_FLOAT = ConvertPathingAIType(128)
constant pathingaitype PATHING_AI_TYPE_FLY = ConvertPathingAIType(192) MOVE_TYPE_AMPHIBIOUS | MOVE_TYPE_FLOAT
constant collisiontype COLLISION_TYPE_NONE = ConvertCollisionType(0)
constant collisiontype COLLISION_TYPE_ANY = ConvertCollisionType(1)
constant collisiontype COLLISION_TYPE_FOOT = ConvertCollisionType(2)
constant collisiontype COLLISION_TYPE_AIR = ConvertCollisionType(4)
constant collisiontype COLLISION_TYPE_BUILDING = ConvertCollisionType(8)
constant collisiontype COLLISION_TYPE_HARVESTER = ConvertCollisionType(16)
constant collisiontype COLLISION_TYPE_BLIGHTED = ConvertCollisionType(32)
constant collisiontype COLLISION_TYPE_FLOAT = ConvertCollisionType(64)
constant collisiontype COLLISION_TYPE_AMPHIBIOUS = ConvertCollisionType(128)
constant collisiontype COLLISION_TYPE_GROUND = ConvertCollisionType(202) COLLISION_TYPE_FOOT | COLLISION_TYPE_BUILDING | COLLISION_TYPE_FLOAT | COLLISION_TYPE_AMPHIBIOUS
constant originframetype ORIGIN_FRAME_INVENTORY_COVER_FRAME = ConvertOriginFrameType(45)
constant originframetype ORIGIN_FRAME_UNIT_TIP = ConvertOriginFrameType(46)
constant unitevent EVENT_UNIT_DECAY_FINISHED = ConvertUnitEvent(318)
constant playerunitevent EVENT_PLAYER_UNIT_DECAY_FINISHED = ConvertPlayerUnitEvent(319)
constant frameeventtype FRAMEEVENT_CHECKBOX_CHANGED = ConvertFrameEventType(17)
constant frameeventtype FRAMEEVENT_CONTROL_RELEASE = ConvertFrameEventType(18)
constant frameeventtype FRAMEEVENT_CONTROL_DRAG = ConvertFrameEventType(19)
constant unitintegerfield UNIT_IF_COLLISION_TYPE = ConvertUnitIntegerField('ucot')
constant unitintegerfield UNIT_IF_PATHING_AI = ConvertUnitIntegerField('upai')
constant unitintegerfield UNIT_IF_PATHING_TYPE = ConvertUnitIntegerField('upat')
  1. Удалённые Нативные Функции:
native SetUnitMoveTypeByIndex takes unit whichUnit, integer moveIndex returns nothing
  1. Новые Нативные Функции:
native IntToChar takes integer i returns string
native BitwiseSetBit takes integer i, integer bitIndex, integer bitValue returns integer
native BitwiseSetByte takes integer i, integer byteIndex, integer byteValue returns integer
native BitwiseToInteger takes integer byte1, integer byte2, integer byte3, integer byte4 returns integer

native GetTimeStamp takes boolean isLocalTime, integer isMiliseconds returns string
native ConsoleEnable takes boolean flag returns nothing
native ConsolePrint takes string s returns nothing

native TextFileOpen takes string filePath returns textfilehandle
native TextFileGetPath takes textfilehandle whichTextFile returns string
native TextFileClose takes textfilehandle whichTextFile returns nothing
native TextFileClear takes textfilehandle whichTextFile returns nothing
native TextFileErase takes textfilehandle whichTextFile returns nothing
native TextFileCountLines takes textfilehandle whichTextFile returns integer
native TextFileReadLine takes textfilehandle whichTextFile, integer lineNumber returns string
native TextFileReadAll takes textfilehandle whichTextFile returns string
native TextFileWriteLine takes textfilehandle whichTextFile, string text returns nothing

native IsCursorEnabled takes nothing returns boolean
native SetCursorEnabled takes boolean enable returns nothing
native IsCursorAnimationLocked takes nothing returns boolean
native SetCursorAnimationLocked takes boolean isLock returns nothing
native IsFrameDraggable takes framehandle whichFrame returns boolean
native SetFrameDraggable takes framehandle whichFrame, boolean enabled returns nothing
native GetFrameModel takes framehandle whichFrame returns string
native SetFrameSpriteMaterialScale takes framehandle whichFrame, real sizeX, real sizeY, real sizeZ returns nothing
native IsWidgetTipEnabled takes nothing returns boolean
native SetWidgetTipEnabled takes boolean enable returns nothing
native IsAbilityBaseTargetAllowed takes integer abilityId, widget source, widget target returns boolean source can be null
native IsWidgetTargetAllowed takes widget source, widget target, targetflag whichFlags returns boolean

native GetUnitCollisionType takes unit whichUnit returns collisiontype
native SetUnitCollisionType takes unit whichUnit, collisiontype collisionType returns nothing
  1. Изменение Констант:
JASS_MAX_ARRAY_SIZE increased from 8192 to 262144.
  1. Исправлена IsSpecialEffectVisible, ранее возвращала инверсное значение.
  2. Исправлена ShowFrame, теперь она полноценно работает с CSimpleRegion/CSimpleTexture/CSimpleFrame и со всеми их дочерними типами.
  3. SetFrameTexture изменено имя аргумента "flag" на "textureId".
  4. SetFrameTexture теперь работает на CConsoleUI.
Пример: call SetFrameTexture( frm, "UI\\Console\\Orc\\OrcUITile01.blp", 0, false )
Пояснение: Консоль имеет 4 "части" потому индексы 0-3.
  1. Исправлена IsAbilityTargetAllowed, теперь она правильно определяет все флаги целей.
  2. Тип хендла targetflag type теперь работает по принципу CDataFieldWar3, чтобы избежать критической ошибки на флагах выше 0x100000 конвертируемые через ConvertTargetFlag.
  3. Исправлено поле ITEM_SF_ABILITY_LIST возвращающая "<null>".
  4. Исправлена критическая ошибка вызванная ABILITY_SLF_SPELL_LIST.
  5. ABILITY_SLF_SPELL_LIST опция теперь так же работает и на базовом заклинании и на интстанцируемом (Get и Set).
Примечание: данное поле игнорирует минимальное/максимальное количество заклинании, потому что мне было лень это делать.
Пример использования: call SetAbilityStringLevelField( GetUnitAbility( u, 'Aspb' ), ABILITY_SLF_SPELL_LIST, 0, "AHad,AHhb,AHbz,AUau" )
  1. SetFrameTexture теперь автоматически будет проверять расширения .tga/.blp (в этом порядке) если в пути файла отсутствует расширение файла.
Пример: call SetFrameTexture( frm, "UI\\Console\\Orc\\OrcUITile01", 0, false ), автоматически добавит .blp в конец пути.
  1. Исправлено по-большей части сломанное API синхронизации, пометка для себя попытка инстансирования CGameWar3 - была ужасно тупой затеей.
  2. Исправлен очень-очень старый баг со спеллбуком, когда он был частью предмета и этот предмет был переложен из одного слота в другой, тем самым применение предмета не прорисовывало эти заклинания.
Пометка: старый метод "исправления" этой ошибки являлся банальным выбрасыванием и подбором предмета.
  1. Значительно улучшено Frame API для CCursor фрейма.
  2. Удалён (или по крайней мере сильно увеличен) лимит RCString (Джасс строки).
Пометка: оригинальный лимит был 4097 (4096 + 1 для нуль-терминирования).
  1. Отладчик Jass ошибок, теперь печатает ошибки сгруппировано.
  2. Исправлена ошибка ввиду которой функция GetFrameChildByIndex не выдавала фрейм на 0 индексе.
  3. Исправлена критическая ошибка с SetFrameEnabled и BlzSetFrameEnable на Backdrop фреймах.
  4. Исправлен нерабочий внутренний обработчик ITEM_IF полей. (одним из этих полей являлся ITEM_IF_GOLD_COST).
  5. Переделаны GetFrameChild и GetFrameChildrenCount.
  6. FRAMEEVENT_MOUSE_ENTER и FRAMEEVENT_MOUSE_LEAVE теперь могут быть применены с IconDamage, IconHero, IconArmor, и т.д..
  7. Исправлены некоторые "неподдерживаемые" клавиши, такие как OSKEY_TAB, VK_SHIFT, и т.д..
  8. Потенциально полностью исправлена ошибка "паузы игры", которая ломала одиночный режим при альт-табе, если какой-либо KeyEvent был зарегистрирован.
Пояснение: этот баг только "преследовал" режим одиночной игры и никак не мог произойти в локальной/мультиплеерном режиме.
  1. Исправлены нерабочие события FRAMEEVENT_MOUSE_DOWN и FRAMEEVENT_MOUSE_UP для всех CControl фреймов.
  2. Исправлена RegisterFrameMouseButton неправильно обрабатывающая mousebuttontype, MIDDLE считывался как RIGHT, а RIGHT как MIDDLE.
  3. Исправлена ошибка в UjAPILauncher.exe, которая порой не позволяла запустить игру в виду полноэкранного режима.
  4. Исправлена ошибка в UjAPILauncher.exe, которая не позволяла CLI обработчику запустить игру, если все настройки были пустые.
  5. Поле юнита COLLISION_SIZE теперь работает в уникальном/инстанцируемом типа. Данное поле не меняет базовые данные, для изменения базовых данных используйте SetUnitBaseRealField, и т.д..
  6. Get/SetUnitMoveAIType "Move" переименован в "Pathing" и они теперь используют pathingaitype как аргументы.
  7. Get/SetUnitMoveType "Move" переименован в "Pathing" и они теперь используют pathingtype как аргументы.
  8. Добавлен модуль UnlockMapSizeLimit.dll.
  9. Добавлена опция Remove Map Size Limit в UjAPILauncher.
  10. Добавлена CLI команда -nomapsizelimit, для загрузки UnlockMapSizeLimit модуля
38
Теперь никакого трахания с арифметикой

TextFileOpen
Если это есть, должен быть и SendHttpRequest xD ну или хотябы socket/bind/accept/send
20
Теперь никакого трахания с арифметикой

TextFileOpen
Если это есть, должен быть и SendHttpRequest xD ну или хотябы socket/bind/accept/send
TextFileOpen ограничен очень сильно в плане папок, а вот ограничить SendHttpRequest, чтобы не было "ддос" атак или банально флуда - куда сложнее. Я и так хожу на ОЧЕНЬ тонкой грани безопасности и такое давать думаю - слишком дикий риск отстрелить не только себе, но и другим пятую точку.
30
чтобы не было "ддос" атак или банально флуда - куда сложнее
Выдумай заголовок и проверяй ответ сервера. При отсутствии этого заголовка полностью блокируй возможность отправлять запросы куда либо и не отдавай ответ.
С лимитом в один активный запрос на игрока, потенциальный спамофлудер сможет отправить только 12 запросов в сессии, от которых он не получит ответа.
38
Можно в роли инициации (с каждым из доменов по хешмапу) слать сначала HEAD действительно с заголовком типа X-UJAPI-TOKEN: (рандом токен, может какие-то ещё данные по текущей игре), на который должен прийти ответ тоже с заголовком.
Если ответ был без заголовка или с пустым - дропаем всю игру. Если таймаут или 502 - запрещаем слать запросы на 1-5 минут. Серверы не всегда могут быть доступны.
Описать эти правила в механизме работы с нативкой
20
Ну, это всё конечно интересно, но юзкейс очень тяжело оправдать, а так, ну +- да, можно сделать.
30
но юзкейс очень тяжело оправдать
Да изи, рынок шмота в браузере между всеми игроками карты.
20
Да изи, рынок шмота в браузере между всеми игроками карты.
Кому ещё что-то продавать в СНГ то...
Загруженные файлы
38
Мессенджер уже встроить) может поучаствовали бы в интеграшке, мы давно хотим апишки пилить околоигровые
30
Кому ещё что-то продавать в СНГ то...
Лягушку нужно варить медленно и посему трейдинг для начала реализуется через внутриигровую валюту.
20
Вышла новая версия! Прокрутить к ресурсу

v1.0.23.91

  1. Новые Нативные Функции:
native MathRealClamp takes real value, real min, real max returns real
native MathRealLerp takes real a, real b, real t returns real
native MathIntegerClamp takes integer value, integer min, integer max returns integer
native SetFrameWidth takes framehandle whichFrame, real width returns nothing
native SetFrameHeight takes framehandle whichFrame, real height returns nothing
native SetFrameTextVerticalAlignment takes framehandle whichFrame, textaligntype verticalAlign returns nothing
native SetFrameTextHorizontalAlignment takes framehandle whichFrame, textaligntype horizontalAlign returns nothing
native GetFrameTexture takes framehandle whichFrame, integer textureId returns string
native GetFrameTrackState takes framehandle whichFrame returns boolean
native SetFrameTrackState takes framehandle whichFrame, integer trackState returns nothing 0 - NONE | 1 - Track | 2 - Ignore Track
native SetFrameTextureEx takes framehandle whichFrame, string backgroundTextureFile, string borderTextureFile, integer textureId, boolean blend returns nothing
  1. CSimpleTexture теперь могут быть созданы через CreateFrameByType, используя фреймтип "SIMPLETEXTURE".
  2. CSimpleFontString теперь могут быть созданы через CreateFrameByType, используя фреймтип "SIMPLETEXT".
  3. FRAMEEVENT_MOUSE_DOWN и FRAMEEVENT_MOUSE_UP теперь полноценно работают со CSimpleButtons и со всеми их дочерними типами.
  4. Исправлено нерабочее Frame API для CScrollBar.
  5. Исправлен инверсированный флаг в BlzUnitHideAbility.
  6. Исправлены все нестандартные/новые события, которые работали лишь с последним добавленным действием.
    Спасибо пользователю Radioactive за то, что он заметил и сообщил об этой серьёзной проблеме.
  7. В очередной раз исправлены CSpellbook взимодействия и ABILITY_SF_FIELD_ABILITY_LIST.
  8. Исправлена критическая ошибка на загрузке карт на 1.27a/1.27b/1.28f.
    Пометка: это была новая ошибка, которая "всплыла" в виду снятия лимита RCString (джасс строк).
  9. Исправлена SetAbilityString не вызывающая клонирование UI данных.
  10. Исправлена ошибка, в виду которой StringReplace заменяла лишь 1 символ, заместо всех.
  11. Исправлена ошибка, в виду которой StringReplace не срабатывала, если заменяемая строка была пустой.
  12. Слегка увеличено время ожидания обработки пакетов, это должно исправить проблему, по которой UjAPI иногда не запускало карту, если она была указана в аргументах запуска.
  13. Добавлена Jass секция в UjAPI аппликацию.
  14. Добавлена опция Dev Mode в Jass секцию. Включение этой опции даст UjAPI возможность отображать имя текущей выполняемой функции в консоли.
  15. Добавлена опция Log Actions в Jass секцию. Включение этой опции даст UjAPI возможность отображать каждый шаг выполнения джасс байткода в консоли.
    Пример: ADD real -> -2816.000000 + 512.000000 = -2304.000000.
    Note: there are a total of 43 different types of operations (opcodes).
  16. Добавлена "-jass" CLI опция, для получения доступа к новому функционалу как Dev Mode и Log Actions.
  17. Добавлена "dev" опция для "-jass" CLI опции.
    Пример: "-jass dev".
  18. Добавлена "logactions" опция для "-jass" CLI опции.
    Пример: "-jass logactions".
  19. Get/SetFrameAlpha теперь должны работать с CSimpleFrames, у которых есть текстуры, а также со всеми CSimpleRegions.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.