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
Зарезервировано для возможных дополнений / информации.
19
Не понял, а почему меня не позвал на открытие? 😂

P.s. надо бы всё-таки свой UjAPI.j создать тебе, чтобы сразу видеть, что было добавлено, что обьявлено.
20
Не понял, а почему меня не позвал на открытие? 😂

P.s. надо бы всё-таки свой UjAPI.j создать тебе, чтобы сразу видеть, что было добавлено, что обьявлено.
Да ты как блудный сын или же "ивент Шрёдингера". :C
Да отдельным файлом сделаю позже, пока что просто на гите висит полный common.j.
Бтв после тестов думаю начать интеграцию луа именно в либу полностью, модульность в этом думаю будет лишь проблемой для большинства.
6
Отлично! Если у меня карта с Lua, то соответсвенно она должна быть "правильной" версии для 1.24-1.28? Вот например, Lua карта от 1.31 не запустится?
Вообще скупая на слова заметка. Как минимум надо было привести добавленные нативки.
20
Отлично! Если у меня карта с Lua, то соответсвенно она должна быть "правильной" версии для 1.24-1.28? Вот например, Lua карта от 1.31 не запустится?
Вообще скупая на слова заметка. Как минимум надо было привести добавленные нативки.
1.31 ввиду отсутствия Blz "нативок" пока что не запустится, в будущем, когда я добавлю всё это во врапперы в Blizzard.j, то будет работать, да.
Список добавленных нативок оформлю думаю на гитхаб, а так там уже висит весь common.j, для поиска/ознакомления.
29
Поднял уровень проекта до 2 уровня. Как хорошо оформите главную страницу + дополните другими хорошо оформленными страницами повышу до 3-го уровня. До 4-го только под одобрение админом и менеджеров.
20
Поднял уровень проекта до 2 уровня. Как хорошо оформите главную страницу + дополните другими хорошо оформленными страницами повышу до 3-го уровня. До 4-го только под одобрение админом и менеджеров.
Скоро будет сделано, в спешке хотел хоть уже загрузить, а то я на месяц затянул с релизом (зато новый функционал добавил. :D).
15
Как хорошо, что существуют такие таланты как Unryze. Респект
37
О, милишников обратно окунули. Респект за работу 😁
30
Список добавленных нативок оформлю думаю на гитхаб, а так там уже висит весь common.j, для поиска/ознакомления.
Я, кстати, github gist прикрутил, чтоб код по триста раз не копипастить.
20
nazarpunk:
Ну, думаю тоже сделаю, просто пока такая суматоха с делами, что мысли вылетают одна за другой. :(
38
Только прямо важный сурс код в гисты не лейте, мало ли потом отключат. А для примеров использования самый раз
23
Крутая штука! Интересно, а её можно объединить с другими надстройками, например MMEngine и RenderEdge, и прочими, чтобы получилась одна большая мега надстройка? Или это слишком много возни плюс не совместимость?
19
EugeAl, технически, вы можете выбрать MME вместо war3, потому что они работают по одному принципу. На практике же никто этого не проверял. :D
23
Ev3nt, а так неудобно ) постоянно переключаться с одного на другое. А вот если бы - запустил лаунчер, а там сразу настройки - включить одно, другое, третье, и 2 кнопки - играть и редактор карт, было бы удобнее. Как в лаунчере старкрафт 2.
30
Только прямо важный сурс код в гисты не лейте, мало ли потом отключат.
Ну так может xgm.gist захостить, чтоб не отключили?
38
nazarpunk, может зря гисты ввели вообще?
Сначала создаем себе проблему, потом её решаем костылями.
19
EugeAl, не забывайте, что лаунчер обновляется, а это значит, что многое ещё может поменяться.
20
Крутая штука! Интересно, а её можно объединить с другими надстройками, например MMEngine и RenderEdge, и прочими, чтобы получилась одна большая мега надстройка? Или это слишком много возни плюс не совместимость?
Если та или иная система может выступать как модуль, то можно это легко добавить. MMEngine - немного отличается в этом плане и не в обиду Ev3nt, но пока она не доведена до уровня модуля, я даже смотреть в сторону её поддержки не хочу. :(
RenderEdge технически я уже могу добавить, но в данный момент он будет мешаться тестам, потому с этим я повременю. В идеале вообще убрать его "внутренние" настройки и сделать по принципу WFE, но опять же - это в низком приоритете.
30
может зря гисты ввели вообще?
Они удобны, если в статье много кода, то править её боль и страдания. Да и подсветка кода на xgm ужасна, гитхаб лучше с этим справляется.
29
nazarpunk, ScorpioT1000 что нам мешает создать собственный?
На всякий случай, по типу gist.xgm.guru
23
Ev3nt, ну это то понятно.
Unryze, что ж, это хорошо, что планируете. Если хотите сделать красивый лаунчер, с красивыми кнопками, рамкой, фоном и т д - пишите в лс, попробую помочь, нарисовать. Только мне потребуется эскиз и список картинок с параметрами: формат и размер в пикселях. За основу возьму интерфейс главного меню вк3.
38
Или бахнуть на webview xD
20
Ev3nt, ну это то понятно.
Unryze, что ж, это хорошо, что планируете. Если хотите сделать красивый лаунчер, с красивыми кнопками, рамкой, фоном и т д - пишите в лс, попробую помочь, нарисовать. Только мне потребуется эскиз и список картинок с параметрами: формат и размер в пикселях. За основу возьму интерфейс главного меню вк3.
Спасибо, но стилистику War 3 я вряд ли в целом буду использовать, текущий лаунчер - просто пустышка, визуально будет конечно переделываться. По дизайну я склоняюсь ближе к лаунчеру Battle.net, нежели именно Вар 3 тематики, но когда руки до этого дойдут, буду знать к кому обращаться. :)
30
Спасибо, но стилистику War 3 я вряд ли в целом буду использовать
И правильно, на лаунчер не нужно луюбоваться, им пользоваться нужно. ИМХО нарисовать всё на системном ui с поддержкой тем и обязательно опциональную восьмибитную музычку.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.1.9

  1. Новые нативные функции:
    native ForceHasPlayer takes force whichForce, player whichPlayer returns boolean
    native ForceCountPlayers takes force whichForce returns integer
    native GetUnitBuff takes unit whichUnit, integer buffId returns buff
    native GetUnitBuffLevel takes unit whichUnit, integer buffId returns integer
    native GetBuffLevel takes buff whichBuff returns integer
    native RefreshBuff takes buff whichBuff returns boolean
    native SetBuffDuration takes buff whichBuff, real duration returns boolean
  1. Исправлена ошибка по которой утекало 20 байт в CScriptEvent ввиду повторного выделения памяти.
  2. Исправлено неверное название нативной функции (SetFrameFront) на SetFrameFont.
  3. Включены эти нативные функции:
    1. TriggerRegisterFrameEvent
    2. GetTriggerFrame
    3. GetTriggerFrameEvent
  4. Исправлена критическая ошибка, если была использована какая-либо нативная функция фреймов, где в аргументах фигурировал string.
  5. Все кейсы HotKey исправлены на Hotkey.
  6. Все новые геттеры и сеттеры связанные с кнопками используют тип oskeytype.
  7. MorphUnitToTypeIdEx расшифрована, теперь все аргументы имеют правильные названия.
  8. Исправлена ошибка, по которой новые нативки работали лишь у хоста в локальной/игре по сети.
  9. Исправлен запуск w3l и прочих сторонних "запускаторов" игры через UjAPI.exe.
    Пометка: сторонние "запускаторы" не поддерживают мульти-окно и War3Lua дебаг режим, для их работы нужно запускать игру через war3.exe и прочее.
  10. Добавлен модуль War3_Lua.dll в папку Modules.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.2.12

  1. Новые нативные функции:
    native SaveFrameHandle takes hashtable table, integer parentKey, integer childKey, framehandle whichFrame returns boolean
    native LoadFrameHandle takes hashtable table, integer parentKey, integer childKey returns framehandle

    native GetEventPreDamage takes nothing returns real
  1. Весь common.j был отредактирован и "оттабулирован" (это изменение никак не влияет на производительность, только на семантику и синтаксис).
  2. Нативные функции GroupAddGroupEx и GroupRemoveGroupEx теперь возвращают целочисленное значение, вместо флага (то есть сколько юнитов было добавлено/удалено).
  3. Добавлены новые нативные типы вместе с их конвертаторами и глобальными константами:
    type abilityintegerfield extends handle
    type abilityrealfield extends handle
    type abilitybooleanfield extends handle
    type abilitystringfield extends handle
    type abilityintegerlevelfield extends handle
    type abilityreallevelfield extends handle
    type abilitybooleanlevelfield extends handle
    type abilitystringlevelfield extends handle
    type abilityintegerlevelarrayfield extends handle
    type abilityreallevelarrayfield extends handle
    type abilitybooleanlevelarrayfield extends handle
    type abilitystringlevelarrayfield extends handle
    type unitintegerfield extends handle
    type unitrealfield extends handle
    type unitbooleanfield extends handle
    type unitstringfield extends handle
    type unitweaponintegerfield extends handle
    type unitweaponrealfield extends handle
    type unitweaponbooleanfield extends handle
    type unitweaponstringfield extends handle
    type itemintegerfield extends handle
    type itemrealfield extends handle
    type itembooleanfield extends handle
    type itemstringfield extends handle
  1. Исправлена критическая ошибка от нативной функции CreateFrameByType на патче 1.27a.
  2. Исправлены все нативные функции SpecialEffectAPI, большинство из них не работало/вызывало краш.
30
только на сменатику и синтаксис
Сменатика очень важна для для работы)
20
Вышла новая версия!
Прокрутить к ресурсу
только на сменатику и синтаксис
Сменатика очень важна для для работы)
Ой, произошла дислексия, вместо "семантика" написал какого-то смегола. Спасибо, поправлю. :)

v1.0.3.15

  1. Исправлена критическая ошибка от нативных функций имеющих string в аргументах из Item API.
  2. Новые нативные функции:
    native BitwiseNOT takes integer i returns integer
    native BitwiseAND takes integer bit1, integer bit2 returns integer
    native BitwiseOR takes integer bit1, integer bit2 returns integer
    native BitwiseXOR takes integer bit1, integer bit2 returns integer
    native BitwiseShiftLeft takes integer bit1, integer bitsToShift returns integer
    native BitwiseShiftRight takes integer bit1, integer bitsToShift returns integer
    native Id2String takes integer i returns string
    native String2Id takes string idString returns integer
    native GetUnitBaseDescriptionById takes integer unitTypeId returns string
    native SetUnitBaseDescriptionById takes integer unitTypeId, string name returns nothing
    native GetUnitBaseIconById takes integer unitTypeId returns string
    native SetUnitBaseIconById takes integer unitTypeId, string name returns nothing
    native GetUnitBaseDescription takes unit whichUnit returns string
    native SetUnitBaseDescription takes unit whichUnit, string name returns nothing
    native GetUnitBaseIcon takes unit whichUnit returns string
    native SetUnitBaseIcon takes unit whichUnit, string name returns nothing
    native GetItemBaseDescriptionById takes takes integer itemId returns string
    native SetItemBaseDescriptionById takes integer itemId, string name returns nothing
    native GetItemBaseDescription takes item whichItem returns string
    native SetItemBaseDescription takes item whichItem, string name returns nothing
  1. Внутренние флаги MorphUnitToTypeId isUpdateHealthState, isUpdateManaState и isResetBuildingAnimation теперь являются "истиной", ранее были "ложью".
  2. MorphUnitToTypeId теперь также восстанавливает "белое" значение атаки до оригинального показателя.
  3. SetUnitBaseProperNameById изменена последовательность аргументов на "unit, integer, string" заместо "unit, string, integer".
  4. Исправлены все "сеттеры" для SpecialEffectAPI.
  5. Исправлены эти нативные функции:
    native GroupGetUnitByIndex takes group whichGroup, integer index returns unit
    native GroupForEachUnit takes group whichGroup returns unit
    native GroupAddGroupEx takes group destGroup, group sourceGroup returns integer
    native GroupRemoveGroupEx takes group destGroup, group sourceGroup returns integer
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.4.22

  1. Нативная функция IsAbilityShown переименована в IsAbilityVisible.
  2. Все возвращаемые типы сеттеров в AbilityAPI были изменены с "integer" на "nothing", ввиду того, что возвращаемые данные были не валидными.
  3. Новые нативные функции:
    native I2C takes integer i returns code
    native C2I takes code c returns integer
    native MathRound takes real r returns integer
    native MathRealRound takes real r returns real
    native MathRealFloor takes real r returns real
    native MathRealCeil takes real r returns real
    native MathRealAbs takes real r returns real
    native MathRealLog takes real r returns real
    native MathRealLn takes real r returns real
    native MathIntegerAbs takes integer i returns integer
    native MathIntegerLog takes integer i returns real
    native MathIntegerLn takes integer i returns real
    native StringContains takes string s, string whichString returns boolean
    native StringFind takes string s, string whichString returns integer
    native StringFindFirstOf takes string s, string whichString returns integer
    native StringFindFirstNotOf takes string s, string whichString returns integer
    native StringFindLastOf takes string s, string whichString returns integer
    native StringFindLastNotOf takes string s, string whichString returns integer
    native IsOperationLimitEnabled takes nothing returns boolean
    native EnableOperationLimit takes boolean enable returns nothing
    native ExecuteFuncEx takes string funcName returns nothing
    native GetUnitDamageReduction takes unit whichUnit returns real
    native IsUnitAbilityVisible takes unit whichUnit, integer abilityId returns integer
    native ShowUnitAbility takes unit whichUnit, integer abilityId, boolean flag returns nothing
  4. Расшифрованы эти нативные функции:
    native SilenceAbility takes ability whicAbility, boolean hide, boolean disable returns nothing
    native UnsilenceAbility takes ability whicAbility, boolean show, boolean enable returns nothing
Теперь аргументы этих функций имеют нормальные названия.
  1. Исправлена нативная функция GetUnitAblity, по каким-то причинам, она не брала заклинания выше 1 уровня.
  2. Пере-пере-исправлены сеттеры x/y/z в SpecialEffectAPI.
  3. Исправлена неправильная проверка флагов в нативной функции IsAbilityOnCooldown.
  4. Исправлена неправильная проверка флагов в нативной функции IsFrameVisible.
  5. Исправлена нативная функция SetUnitCurrentSight.
  6. TriggerRegisterFrameEvent теперь работает верно и полноценно создаёт новый ивент для заданного фрейма.
    Пометка: пока что реализованы не все ивенты, а так же эти ивенты пока что локальные, однако скоро они будут работать и в мультиплеере.
  7. Исправлена критическая ошибка когда Нейтральный Пассивный игрок был подвержен урону.
  8. Исправлена критическая ошибка при запуске карты на 1.28.5.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.5.31

  1. Новые типы:
    type timetype extends handle
  2. Новые конвертеры:
    constant native ConvertTimeType takes integer i returns timetype
  3. Новые константы:
    constant timetype TIME_TYPE_YEAR = ConvertTimeType( 0 )
    constant timetype TIME_TYPE_MONTH = ConvertTimeType( 1 )
    constant timetype TIME_TYPE_DAY_OF_WEEK = ConvertTimeType( 2 )
    constant timetype TIME_TYPE_DAY = ConvertTimeType( 3 )
    constant timetype TIME_TYPE_HOUR = ConvertTimeType( 4 )
    constant timetype TIME_TYPE_MINUTE = ConvertTimeType( 5 )
    constant timetype TIME_TYPE_SECOND = ConvertTimeType( 6 )
    constant timetype TIME_TYPE_MILLISECOND = ConvertTimeType( 7 )
  4. Новые нативные функции:
    native GetSystemTime takes timetype whichTimeType returns integer
    native GetLocalTime takes timetype whichTimeType returns integer
    native ExecuteCode takes code c returns nothing
    native SyncInteger takes string variableName returns nothing
    native SyncReal takes string variableName returns nothing
    native SyncBoolean takes string variableName returns nothing
    native SyncString takes string variableName returns nothing
    native SyncHandle takes string variableName returns nothing
    native SyncSavedInteger takes hashtable table, integer parentKey, integer childKey returns nothing
    native SyncSavedReal takes hashtable table, integer parentKey, integer childKey returns nothing
    native SyncSavedBoolean takes hashtable table, integer parentKey, integer childKey returns nothing
    native SyncSavedHandle takes hashtable table, integer parentKey, integer childKey returns nothing
    native SyncSavedString takes hashtable table, integer parentKey, integer childKey returns nothing
  5. Улучшение кода и увеличение производительности.
38
Millisecond - с двумя l пишется. Велосипед изобретал вместо готовой либы?)
20
Millisecond - с двумя l пишется. Велосипед изобретал вместо готовой либы?)
Провтыкал. Поправлю По поводу "готовой" либы не понял, ибо какие готовые либы и на что...?
38
Думал, формат времени из строки-шаблона планируешь делать (есть готовый strftime)
20
Думал, формат времени из строки-шаблона планируешь делать (есть готовый strftime)
Это я может и добавлю тоже, просто это стандартное получение просто времени, а дальше юзверь может что угодно делать. Это Jass, а не lua, тут нужна максимальная простота. :D
19
На счёт Jass, а не Lua, я хз, как будет работать синхронизация на Lua, т.к. ты её реализовал по имени переменной. :D
20
На счёт Jass, а не Lua, я хз, как будет работать синхронизация на Lua, т.к. ты её реализовал по имени переменной. :D
Оно строго берёт значения из джасс, ей пофиг на луа. Технически я могу и под луа это сделать... но желания 0.
19
Я так и понял. Не проще ли тогда было сделать, чтобы она принимала не название переменной, а её значение?

Хотяяя, с другой стороны, у нас есть доступ к Jass переменным из Lua, так что временно пофиг. 😁
20
Я так и понял. Не проще ли тогда было сделать, чтобы она принимала не название переменной, а её значение?

Хотяяя, с другой стороны, у нас есть доступ к Jass переменным из Lua, так что временно пофиг. 😁
И куда мне это значение синхать? Пример кода:
globals
    integer GlobalInteger = 0
endglobals

function TestSync takes nothing returns nothing
    if GetLocalPlayer( ) == Player( 0 ) then
        set GlobalInteger = 999
        call SyncInteger( "GlobalInteger" )
    endif
endfunction
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.6.34

  1. Новые Типы:
type variabletype extends handle
  1. Новые Конверторы:
constant native ConvertVariableType takes integer i returns variabletype
  1. Новые Константы:
constant variabletype VARIABLE_TYPE_NOTHING = ConvertVariableType(0)
constant variabletype VARIABLE_TYPE_UNKNOWN = ConvertVariableType(1)
constant variabletype VARIABLE_TYPE_NULL = ConvertVariableType(2)
constant variabletype VARIABLE_TYPE_CODE = ConvertVariableType(3)
constant variabletype VARIABLE_TYPE_INTEGER = ConvertVariableType(4)
constant variabletype VARIABLE_TYPE_REAL = ConvertVariableType(5)
constant variabletype VARIABLE_TYPE_STRING = ConvertVariableType(6)
constant variabletype VARIABLE_TYPE_HANDLE = ConvertVariableType(7)
constant variabletype VARIABLE_TYPE_BOOLEAN = ConvertVariableType(8)
constant variabletype VARIABLE_TYPE_INTEGER_ARRAY = ConvertVariableType(9)
constant variabletype VARIABLE_TYPE_REAL_ARRAY = ConvertVariableType(10)
constant variabletype VARIABLE_TYPE_STRING_ARRAY = ConvertVariableType(11)
constant variabletype VARIABLE_TYPE_HANDLE_ARRAY = ConvertVariableType(12)
constant variabletype VARIABLE_TYPE_BOOLEAN_ARRAY = ConvertVariableType(13)
  1. Новые Нативные Функции:
native GetSyncedVariableType takes nothing returns variabletype
native GetSyncedVariableName takes nothing returns string
native GetSyncedInteger takes nothing returns integer
native GetSyncedReal takes nothing returns real
native GetSyncedString takes nothing returns string
native GetSyncedHandle takes nothing returns handle
native GetSyncedBoolean takes nothing returns boolean
native TriggerRegisterPlayerVariableSyncEvent takes trigger whichTrigger, player whichPlayer, string variableName returns event
native GetSyncSavedVariableType takes nothing returns variabletype
native GetSyncSavedHashtable takes nothing returns hashtable
native GetSyncSavedParentKey takes nothing returns integer
native GetSyncSavedChildKey takes nothing returns integer
native TriggerRegisterPlayerHashtableDataSyncEvent takes trigger whichTrigger, player whichPlayer, hashtable whichHashtable returns event
native GetTriggerFrameVariableType takes nothing returns variabletype
native GetTriggerFrameInteger takes nothing returns integer
native GetTriggerFrameReal takes nothing returns real
native GetTriggerFrameBoolean takes nothing returns boolean
native GetTriggerFrameString takes nothing returns string
native GetMouseScreenX takes nothing returns real
native GetMouseScreenY takes nothing returns real
native SetMouseScreenX takes real x returns nothing
native SetMouseScreenY takes real y returns nothing
native SetMouseScreenPosition takes real x, real y returns nothing
native GetMouseScreenPixelX takes nothing returns integer
native GetMouseScreenPixelY takes nothing returns integer
native SetMouseScreenPixelX takes integer x returns nothing
native SetMouseScreenPixelY takes integer y returns nothing
native SetMouseScreenPixelPosition takes integer x, integer y returns nothing
native GetMouseWorldX takes nothing returns real
native GetMouseWorldY takes nothing returns real
native GetMouseWorldZ takes nothing returns real
  1. Исправлен обработчик Net пакетов синхронизации, теперь он более не сталкивается с оригинальным обработчиком, приводя к потере пакетов.
  2. Исправлена критическая ошибка вызываемая этими нативными функциями:
native SilenceAbility takes ability whichAbility, boolean hide, boolean disable returns nothing
native UnsilenceAbility takes ability whichAbility, boolean show, boolean enable returns nothing
23
Unryze, Эти variabletype позволяют менять типы переменных в процессе исполнения кода, что ли? Или это просто для базы данных типов объектов? Если первое, то это очень удобно.
20
Unryze, Эти variabletype позволяют менять типы переменных в процессе исполнения кода, что ли? Или это просто для базы данных типов объектов? Если первое, то это очень удобно.
Кастинг типов можно делать через тайпкастеры, а так для понимания что пришло в синх триггере, получаешь тип через GetSyncedVariableType допустим 4 (Integer) и берёшь значение через GetSyncedInteger для получения значения, вот и всё.
23
Unryze, кастинг типов... тайпкастер... это очень тяжело для меня))) но я так понял, типы можно только определять, но не менять самому.
20
Unryze, кастинг типов... тайпкастер... это очень тяжело для меня))) но я так понял, типы можно только определять, но не менять самому.
Тип переменной менять то можно, но это бессмысленно на уровне джасс кода, ибо потом начнётся вакханалия, что старые данные пытаются обращаться к integer типу, а там уже сидит real.
38
Когда хромиум встроите?)
23
Unryze, Здесь согласен, но это бы упростило написание кода, чтобы не создавать кучу локалок разных типов.
20
Когда хромиум встроите?)
Та за шо… :(
EugeAl:
Unryze, Здесь согласен, но это бы упростило написание кода, чтобы не создавать кучу локалок разных типов.
Ну, это как раз приблизило бы к С#/JS стилю, но это потребует очень много усилий для «исправлений», которые вряд ли того стоят. :(
Ибо эта логика как раз с handle типом, который является общим, просто функции которые требует дочерний класс, его не примут, но наоборот можно. Но эту проблему решает HandleToUnit и прочие функции, что я добавил. (Это и есть тайпкаст).
20
EugeAl, есть lua или tstl.
Если сильно замотивтруете, мб сделаю tstl штуку, где можно писать ООП код
19
Kokomi, ясно, теперь и тут свой транспилятор распространяет. The cult of tstl. 😂
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.7.36

Список изменений:
  1. Добавлен Авто Апдейтер (пока что он работает в "тихом" режиме при нажатии кнопки "Yes").
  2. Исправлены критические ошибки связанные с CreateFrameByType.
  3. Исправлены критические ошибки связанные с SetFrameTexture.
  4. Исправлена нерабочая нативная функция SetFrameVertexColour связанная с CSimpleStatusBar.
  5. Исправлен NetCode обработчик, который ломался если два или более игрока одновременно отсылали пакеты.
  6. Добавлена новая опция IsNoWarnings для LUA.
  7. Настройки LUA были вынесены в отдельную секцию.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.8.39

  1. Новые Константы:
constant raritycontrol RARITY_QUEUE = ConvertRarityControl(2)
constant oskeytype OSKEY_LBUTTON = ConvertOsKeyType(0x01)
constant oskeytype OSKEY_RBUTTON = ConvertOsKeyType(0x02)
constant oskeytype OSKEY_CANCEL = ConvertOsKeyType(0x03)
constant oskeytype OSKEY_MBUTTON = ConvertOsKeyType(0x04)
constant oskeytype OSKEY_XBUTTON1 = ConvertOsKeyType(0x05)
constant oskeytype OSKEY_XBUTTON2 = ConvertOsKeyType(0x06)
constant oskeytype OSKEY_UNDEFINED = ConvertOsKeyType(0x07)
constant integer META_KEY_NONE = 0
constant integer META_KEY_SHIFT = 1
constant integer META_KEY_CONTROL = 2
constant integer META_KEY_ALT = 4
constant integer META_KEY_WINDOWS = 8
constant playerevent EVENT_PLAYER_MOUSE_DOWN = ConvertPlayerEvent(305)
constant playerevent EVENT_PLAYER_MOUSE_UP = ConvertPlayerEvent(306)
constant playerevent EVENT_PLAYER_MOUSE_MOVE = ConvertPlayerEvent(307)
constant playerevent EVENT_PLAYER_SYNC_DATA = ConvertPlayerEvent(309) currently not active
constant playerevent EVENT_PLAYER_KEY = ConvertPlayerEvent(311)
constant playerevent EVENT_PLAYER_KEY_DOWN = ConvertPlayerEvent(312)
constant playerevent EVENT_PLAYER_KEY_UP = ConvertPlayerEvent(313)
  1. Новые Нативные Функции:
native GetFramePriority takes framehandle whichFrame returns integer
native SetFrameSpriteAnimationWithRarityByIndex takes framehandle whichFrame, integer animIndex, integer rarity returns nothing
native SetFrameSpriteAnimationByIndex takes framehandle whichFrame, integer animIndex returns nothing
native QueueFrameSpriteAnimationByIndex takes framehandle whichFrame, integer animIndex returns nothing
native SetFrameSpriteAnimationWithRarity takes framehandle whichFrame, string animationName, integer rarity returns nothing
native SetFrameSpriteAnimation takes framehandle whichFrame, string animationName returns nothing
native QueueFrameSpriteAnimation takes framehandle whichFrame, string animationName returns nothing
native GetTriggerSyncPrefix takes nothing returns string
native GetTriggerSyncData takes nothing returns string
native SendSyncData takes string prefix, string data returns boolean
native TriggerRegisterPlayerSyncEvent takes trigger whichTrigger, player whichPlayer, string prefix, boolean fromServer returns event
native GetTriggerPlayerKey takes nothing returns oskeytype
native GetTriggerPlayerMetaKey takes nothing returns integer
native GetTriggerPlayerIsKeyDown takes nothing returns boolean
native TriggerRegisterPlayerKeyEvent takes trigger whichTrigger, player whichPlayer, oskeytype whichKey, integer whichMetaKey, boolean isKeyDown returns event
native PauseUnitEx takes unit whichUnit, boolean flag returns nothing this is pretty much a copy of SetUnitStunned
native GetTriggerPlayerMouseWorldX takes nothing returns real
native GetTriggerPlayerMouseWorldY takes nothing returns real
native GetTriggerPlayerMouseWorldZ takes nothing returns real
native GetTriggerPlayerMouseScreenX takes nothing returns real
native GetTriggerPlayerMouseScreenY takes nothing returns real
  1. Исправлена критическая ошибка, если были слишком быстро/одновременно вызваны новые нативные функции синхронизации (как пример вызов синхронизации по ,01 таймеру).
  2. Все нативные функции связанные с анимациями с раритетом теперь используют тип raritycontrol тип вместо integer.
  3. Исправлена нативная функция SetUnitStunned, она более не перекрывает саму себя и не устанавливает неверные флаги.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.9.44

  1. Новые Типы:
type mousebuttontype extends handle
  1. Новые Константы:
constant mousebuttontype MOUSE_BUTTON_TYPE_LEFT = ConvertMouseButtonType(1)
constant mousebuttontype MOUSE_BUTTON_TYPE_MIDDLE = ConvertMouseButtonType(2)
constant mousebuttontype MOUSE_BUTTON_TYPE_RIGHT = ConvertMouseButtonType(3)
  1. Новые Конверторы:
constant native ConvertMouseButtonType takes integer i returns mousebuttontype
  1. Новые Нативные Функции:
native GetTriggerPlayerMouseButton takes nothing returns mousebuttontype
native GetFrameSpriteScale takes framehandle whichFrame returns real
native SetFrameSpriteScale takes framehandle whichFrame, real scale returns nothing
native GetFrameSpriteTimeScale takes framehandle whichFrame returns real
native SetFrameSpriteTimeScale takes framehandle whichFrame, real timescale returns nothing
native GetFrameSpriteColour takes framehandle whichFrame returns integer
native SetFrameSpriteColour takes framehandle whichFrame, integer colour returns boolean
native SetFrameSpriteAlpha takes framehandle whichFrame, integer alpha returns boolean
native SetFrameSpriteVertexColour takes framehandle whichFrame, integer red, integer green, integer blue, integer alpha returns boolean
native SetFrameSpriteOrientationEx takes framehandle whichFrame, real yaw, real pitch, real roll, integer eulerOrder returns boolean
native GetFrameSpriteYaw takes framehandle whichFrame returns real
native SetFrameSpriteYaw takes framehandle whichFrame, real yaw returns boolean
native GetFrameSpriteFacing takes framehandle whichFrame returns real
native SetFrameSpriteFacing takes framehandle whichFrame, real facing returns boolean
native GetFrameSpritePitch takes framehandle whichFrame returns real
native SetFrameSpritePitch takes framehandle whichFrame, real pitch returns boolean
native GetFrameSpriteRoll takes framehandle whichFrame returns real
native SetFrameSpriteRoll takes framehandle whichFrame, real roll returns boolean
native SetFrameSpriteOrientation takes framehandle whichFrame, real yaw, real pitch, real roll returns nothing
native SetFrameSpriteModel takes framehandle whichFrame, string modelName returns nothing
native SetFrameSpriteModelEx takes framehandle whichFrame, string modelName, integer playerColour returns nothing
  1. Исправлена критическая ошибка при пинга по миникарте.
  2. Исправлено событие MOUSE_MOVE, которое поглощало все другие действия, приводя как игнорированию других комманд.
  3. Исправлена критическая ошибка от нативной функции SetFrameTooltip.
  4. Исправлена нерабочая нативная функция SetFrameEnabled.
  5. Исправлена нативная функция GetTriggerFrameEvent, ранее возвращала неверные значения.
  6. Исправлена нативная функция GetTriggerPlayerKey, ранее возвращала неверные значения кнопки мышки.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.10.49

  1. Новые Типы:
type missile extends agent
type playermissileevent extends eventid
  1. Новые Конверторы:
constant native ConvertPlayerMissileEvent takes integer i returns playermissileevent
  1. Новые Константы:
constant playermissileevent EVENT_PLAYER_MISSILE_LAUNCH = ConvertPlayerMissileEvent(600)
constant playermissileevent EVENT_PLAYER_MISSILE_HIT = ConvertPlayerMissileEvent(601)
  1. Новые Нативные Функции:
native KillMissile takes missile whichMissile returns nothing
native IsMissileVisible takes missile whichMissile returns boolean
native SetMissileVisibility takes missile whichMissile, boolean visibility returns nothing
native GetMissileX takes missile whichMissile returns real
native SetMissileX takes missile whichMissile, real x returns nothing
native GetMissileY takes missile whichMissile returns real
native SetMissileY takes missile whichMissile, real y returns nothing
native GetMissileZ takes missile whichMissile returns real
native SetMissileZ takes missile whichMissile, real z returns nothing
native GetMissileHeight takes missile whichMissile returns real
native SetMissileHeight takes missile whichMissile, real height returns nothing
native GetMissilePositionLocation takes missile whichMissile returns location
native SetMissilePositionWithZ takes missile whichMissile, real x, real y, real z returns nothing
native SetMissilePosition takes missile whichMissile, real x, real y returns nothing
native SetMissilePositionLocation takes missile whichMissile, location loc returns nothing
native GetMissileScale takes missile whichMissile returns real
native SetMissileScale takes missile whichMissile, real scale returns nothing
native GetMissileTimeScale takes missile whichMissile returns real
native SetMissileTimeScale takes missile whichMissile, real timescale returns nothing
native GetMissileColour takes missile whichMissile returns integer
native SetMissileColour takes missile whichMissile, integer colour returns boolean
native SetMissileAlpha takes missile whichMissile, integer alpha returns boolean
native SetMissileVertexColour takes missile whichMissile, integer red, integer green, integer blue, integer alpha returns boolean
native SetMissileAnimationWithRarityByIndex takes missile whichMissile, integer animIndex, raritycontrol rarity returns nothing
native SetMissileAnimationWithRarity takes missile whichMissile, string animation, raritycontrol rarity returns nothing
native SetMissileAnimationByIndex takes missile whichMissile, integer animIndex returns nothing
native SetMissileAnimation takes missile whichMissile, string animation returns nothing
native QueueMissileAnimationByIndex takes missile whichMissile, integer animIndex returns nothing
native QueueMissileAnimation takes missile whichMissile, string animation returns nothing
native ResetMissileMatrix takes missile whichMissile returns nothing
native SetMissileOrientationEx takes missile whichMissile, real yaw, real pitch, real roll, integer eulerOrder returns boolean
native GetMissileYaw takes missile whichMissile returns real
native SetMissileYaw takes missile whichMissile, real yaw returns boolean
native GetMissileFacing takes missile whichMissile returns real
native SetMissileFacing takes missile whichMissile, real facing returns boolean
native GetMissilePitch takes missile whichMissile returns real
native SetMissilePitch takes missile whichMissile, real pitch returns boolean
native GetMissileRoll takes missile whichMissile returns real
native SetMissileRoll takes missile whichMissile, real roll returns boolean
native SetMissileOrientation takes missile whichMissile, real yaw, real pitch, real roll returns nothing
native SetMissileModel takes missile whichMissile, string modelName returns nothing
native SetMissileModelEx takes missile whichMissile, string modelName, integer playerColour returns nothing
native GetMissileSource takes missile whichMissile returns unit
native SetMissileSource takes missile whichMissile, unit whichUnit returns nothing
native GetMissileTarget takes missile whichMissile returns widget
native SetMissileTarget takes missile whichMissile, widget whichWidget returns nothing
native GetMissileAttackType takes missile whichMissile returns attacktype
native SetMissileAttackType takes missile whichMissile, attacktype whichAttackType returns nothing
native GetMissileDamage takes missile whichMissile returns real
native SetMissileDamage takes missile whichMissile, real damage returns nothing
native GetMissileSpeed takes missile whichMissile returns real
native SetMissileSpeed takes missile whichMissile, real speed returns nothing
native GetMissileArc takes missile whichMissile returns real
native SetMissileArc takes missile whichMissile, real arc returns nothing
native GetMissileWeaponType takes missile whichMissile returns weapontype
native SetMissileWeaponType takes missile whichMissile, weapontype whichWeaponType returns nothing
native GetMissileDamageType takes missile whichMissile returns damagetype
native SetMissileDamageType takes missile whichMissile, damagetype whichDamageType returns nothing
native GetMissileDamageFlags takes missile whichMissile returns integer
native SetMissileDamageFlags takes missile whichMissile, integer flags returns nothing
native SaveMissileHandle takes hashtable whichHashtable, integer parentKey, integer childKey, missile whichMissile returns boolean
native LoadMissileHandle takes hashtable whichHashtable, integer parentKey, integer childKey returns missile
native GetTriggerMissile takes nothing returns missile
native GetTriggerMissileSource takes nothing returns unit
native GetTriggerMissileTarget takes nothing returns unit
native TriggerRegisterPlayerMissileEvent takes trigger whichTrigger, player whichPlayer, playermissileevent whichMissileEvent returns event
  1. Исправлены все получатели/установщики типов атаки/урона/оружия, теперь они используют соответствующие хендлы заместо типа integer.
  2. Все нативные функции связанные с главным аттрибутом героя теперь используют тип heroattribute заместо типа integer.
  3. Исправлена нативная функция GetTriggerFrameReal вызванная при ивенте MOUSE_WHEEL, теперь она возвращает дельту мышки, как на Рефорджеде.
27
Unryze, есть ли события фреймов? И синхронизируются 🙂 а вот все нашел, есть они. Близзард еще не дождешься

Как lua использовать на 1.26 и выше?

Unryze, а где очередь приказов как в рефе?
20
Как lua использовать на 1.26 и выше?
Закинуть файл war3map.lua в карту и всё, lua идёт c UjAPI из коробки.

Unryze, а где очередь приказов как в рефе?
Ещё не доделал, приоритет этой нишевой фигни очень низкий. Человек один, а работы тьма. :(
30
Человек один, а работы тьма. :(
Сделай как сейчас принято в опенсурсе - реквест фич через денюжку.

Закинуть файл war3map.lua в карту и всё, lua идёт c UjAPI из коробки.
В какой момент инициализируется lua, и нет ли проблемы, как в рефе, с созданием объектов?
20
Сделай как сейчас принято в опенсурсе - реквест фич через денюжку.
Опенсорсом ни WFE ни UjAPI никогда не будут. Фичи и так реквестили (по крайней мере на ВФЕ) за шекели. Я очень-очень противлюсь опенсорса, ибо не для того столько времени влил, чтобы проект вот так взяли и себе присвоили.

В какой момент инициализируется lua, и нет ли проблемы, как в рефе, с созданием объектов?
В момент обработки джасс кода, проблем как в рефе не наблюдаются, но есть свои. + пока что есть зависимость от war3map.j для слотов, в будущем помогу Ev3nt'у убрать нужду war3map,j для слотов и т.д.
30
Опенсорсом ни WFE ни UjAPI никогда не будут. Фичи и так реквестили (по крайней мере на ВФЕ) за шекели. Я очень-очень противлюсь опенсорса, ибо не для того столько времени влил, чтобы проект вот так взяли и себе присвоили.
В каком месте я предлагал код одкрывать?
Просто исходя из информации на xgm нельзя понять, что функция новых фич за шекели доступна. Например сколько стоит возможность работать в режиме папки прямо из JNGP?
20
В каком месте я предлагал код одкрывать?
Тьфу, неправильно прочитал. Сорян.
Просто исходя из информации на xgm нельзя понять, что функция новых фич за шекели доступна. Например сколько стоит возможность работать в режиме папки прямо из JNGP?
Хм... технически если перехватить обработку файлов/импорт и т.д. реализуемо, но очень геморно. Особо не задумывался об этом. Я больше по варику, с редактором много разбора не делал, кроме нужных мне фич.
Я потыкаю в скором времени редактор, когда с нативками +- будет всё нужное сделано и лаунчер станет человеческим, затем постараюсь выкатить хотя бы частичную поддержку DzAPI и Blz нативок, а вот потом уже можно и редактор потыкать.
30
пока что есть зависимость от war3map.j для слотов
Тоесть в карте может быть одновременно jass код и lua? Если так, то это огонь, ибо можно старые карты постепенно на lua переписать.
20
пока что есть зависимость от war3map.j для слотов
Тоесть в карте может быть одновременно jass код и lua? Если так, то это огонь, ибо можно старые карты постепенно на lua переписать.
Я помог Ev3nt'у получить доступ как к глобалкам (пока что лишь к чтению), так и абсолютно ко всем функциям из blizzard.j/war3map.j (изначально я сделал лишь blizzard.j, но потом понял что можно и war3map.j получить, в итоге дал полный метод).
В идеале я постараюсь потом сделать нативку DoScript, которая будет выполнять lua скрипт. Если я осилю Jass парсер (внутриигровой), то может даже получится сделать выполнение джасс скрипта, что позволит делить .j на файлы, как с луа.
38
Unryze, опенсорс - это когда как раз не присваивают, а делятся форками
20
Unryze, опенсорс - это когда как раз не присваивают, а делятся форками
И в чём разница между -> форканул и продолжил -> выдал за свой продукт с другой информацией от присваивания? Или что им помешает, Будда?
30
Unryze, тоесть сейчас возможна паралельная работа jass и lua? Общение между ними не особо и нужно.~ScorpioT1000:
опенсорс - это когда как раз не присваивают, а делятся форками
Но история знает примеры с нескучными обоями.
38
Unryze, что помешает один раз купить и сделать то же самое?)
20
Unryze, тоесть сейчас возможна паралельная работа jass и lua? Общение между ними не особо и нужно.~ScorpioT1000:
опенсорс - это когда как раз не присваивают, а делятся форками
Но история знает примеры с нескучными обоями.
Из Джасс не получится общаться с луа, а луа может общаться с джасс.
ScorpioT1000:
Unryze, что помешает один раз купить и сделать то же самое?)
Ну, когда купят - вопросов 0, но я пока такого предложения не увидел, да и кому оно нужно.
19
Unryze, тоесть сейчас возможна паралельная работа jass и lua? Общение между ними не особо и нужно.
Да, всё верно, у вас в карте могут использоваться помимо jass скриптов, ещё и lua.
27
Ev3nt, можно в качестве мрдуля прдключать разные луа скрипты? В рефе это нафиг выкл
38
МрачныйВорон, а wlpm на что?) или ты про рилтайм?
27
wlpm не пробовал. Я про то, что в карту грузим несколько скриптов. А там в каждом по смыслу, пример: в первом математическая библиотека, вл втором скилы итд. Если ошибка, то исправляем нужный скрипт, не х.. целый скрипт каждый раз ковырять

wlpm я даже не понимаю, что это такое))
19
Ev3nt, можно в качестве мрдуля прдключать разные луа скрипты? В рефе это нафиг выкл
Да, конечно. Я сделал так, чтобы в обычном режиме вам была доступна подгрудка модулей исключительно с карты, однако, если вы переключитесь в режим разработчика, то помимо этого вы сможете грузить скрипты ещё с вашего диска. Мы часто это используем, когда тестируем новый функционал на наличие ошибок.

Ах да, забыл сказать. Если использовать war3_lua с UjAPI, то в lua появится доступ ко всем новым нативкам.
30
Ev3nt, require для lua реализован или самому сборкой заниматься?
38
Ну вот, тем более require в рилтайме работает, можно удаленно скрипты скачивать)
20
ScorpioT1000, и пока скрипт не скачается игрок будет лагать)))
30
и пока скрипт не скачается игрок будет лагать)))
Нехай асинхронно качает.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.11.53

  1. Новые Нативные Функции:
Unit
native IsUnitAlive takes unit whichUnit returns boolean
native SetUnitModelEx takes unit whichUnit, string modelName, integer playercolourId returns nothing
native SetUnitMaterialTexture takes unit whichUnit, string textureName, integer materialId, integer textureIndex returns nothing
native SetUnitTexture takes unit whichUnit, string textureName, integer textureIndex returns nothing

Item
native SetItemModelEx takes item whichItem, string modelFile, integer playerColourId returns nothing
native SetItemMaterialTexture takes item whichItem, string textureName, integer materialId, integer textureIndex returns nothing
native SetItemTexture takes item whichItem, string textureName, integer textureIndex returns nothing
native SetItemReplaceableTexture takes item whichItem, string textureName, integer textureIndex returns nothing

Missile
native GetMissileTargetUnit takes missile whichMissile returns unit
native GetMissileTargetItem takes missile whichMissile returns item
native GetMissileTargetDestructable takes missile whichMissile returns destructable
native GetTriggerMissileTargetUnit takes nothing returns unit
native GetTriggerMissileTargetItem takes nothing returns item
native GetTriggerMissileTargetDestructable takes nothing returns destructable
Widget
native IsWidgetVisible takes widget whichWidget returns boolean
native SetWidgetVisible takes widget whichWidget, boolean visible returns nothing
native IsWidgetInvulnerable takes widget whichWidget returns boolean
native SetWidgetInvulnerable takes widget whichWidget, boolean invulnerable returns nothing
native GetWidgetPositionLocation takes widget whichWidget returns location
native SetWidgetPosition takes widget whichWidget, real x, real y returns nothing
native SetWidgetPositionLocation takes widget whichWidget, location whichLocation returns nothing
native SetWidgetX takes widget whichWidget, real x returns nothing
native SetWidgetY takes widget whichWidget, real y returns nothing
native GetWidgetVertexColour takes widget whichWidget returns integer
native SetWidgetVertexColour takes widget whichWidget, integer red, integer green, integer blue, integer alpha returns nothing
native GetWidgetTimeScale takes widget whichWidget returns real
native SetWidgetTimeScale takes widget whichWidget, real timeScale returns nothing
native GetWidgetScale takes widget whichWidget returns real
native SetWidgetScale takes widget whichWidget, real scale returns nothing
native GetWidgetFacing takes widget whichWidget returns real
native SetWidgetFacing takes widget whichWidget, real facing, boolean isInstant returns nothing
native SetWidgetSpaceRotation takes widget whichWidget, real yaw, real pitch, real roll, integer eulerOrder returns nothing
native SetWidgetOrientation takes widget whichWidget, real yaw, real pitch, real roll returns nothing
native GetWidgetYaw takes widget whichWidget returns real
native SetWidgetYaw takes widget whichWidget, real yaw returns nothing
native GetWidgetPitch takes widget whichWidget returns real
native SetWidgetPitch takes widget whichWidget, real pitch returns nothing
native GetWidgetRoll takes widget whichWidget returns real
native SetWidgetRoll takes widget whichWidget, real roll returns nothing
native SetWidgetModel takes widget whichWidget, string modelFile returns nothing
native SetWidgetModelEx takes widget whichWidget, string modelFile, integer playerId returns nothing
native SetWidgetAnimationWithRarityByIndex takes widget whichWidget, integer animIndex, raritycontrol rarity returns nothing
native SetWidgetAnimationWithRarity takes widget whichWidget, string animation, raritycontrol rarity returns nothing
native SetWidgetAnimationByIndex takes widget whichWidget, integer animIndex returns nothing
native SetWidgetAnimation takes widget whichWidget, string animation returns nothing
native QueueWidgetAnimationByIndex takes widget whichWidget, integer animIndex returns nothing
native QueueWidgetAnimation takes widget whichWidget, string animation returns nothing
native SetWidgetMaterialTexture takes widget whichWidget, string textureName, integer materialId, integer textureIndex returns nothing
native SetWidgetTexture takes widget whichWidget, string textureName, integer textureIndex returns nothing
native SetWidgetReplaceableTexture takes widget whichWidget, string textureName, integer textureIndex returns nothing

Destructable
native GetDestructablePositionLocation takes destructable whichDestructable returns location
native SetDestructablePosition takes destructable whichDestructable, real x, real y returns nothing
native SetDestructablePositionLocation takes destructable whichDestructable, location whichLocation returns nothing
native SetDestructableX takes destructable whichDestructable, real x returns nothing
native SetDestructableY takes destructable whichDestructable, real y returns nothing
native SetDestructableModel takes destructable whichDestructable, string modelFile returns nothing
native SetDestructableModelEx takes destructable whichDestructable, string modelFile, integer playerColourId returns nothing
native GetDestructableVertexColour takes destructable whichDestructable returns integer
native SetDestructableVertexColour takes destructable whichDestructable, integer red, integer green, integer blue, integer alpha returns nothing
native GetDestructableTimeScale takes destructable whichDestructable returns real
native SetDestructableTimeScale takes destructable whichDestructable, real timeScale returns nothing
native GetDestructableScale takes destructable whichDestructable returns real
native SetDestructableScale takes destructable whichDestructable, real scale returns nothing
native GetDestructableFacing takes destructable whichDestructable returns real
native SetDestructableFacing takes destructable whichDestructable, real facing, boolean isInstant returns nothing
native SetDestructableSpaceRotation takes destructable whichDestructable, real yaw, real pitch, real roll, integer eulerOrder returns nothing
native SetDestructableOrientation takes destructable whichDestructable, real yaw, real pitch, real roll returns nothing
native GetDestructableYaw takes destructable whichDestructable returns real
native SetDestructableYaw takes destructable whichDestructable, real yaw returns nothing
native GetDestructablePitch takes destructable whichDestructable returns real
native SetDestructablePitch takes destructable whichDestructable, real pitch returns nothing
native GetDestructableRoll takes destructable whichDestructable returns real
native SetDestructableRoll takes destructable whichDestructable, real roll returns nothing
native SetDestructableModel takes destructable whichDestructable, string modelFile returns nothing
native SetDestructableModelEx takes destructable whichDestructable, string modelFile, integer playerId returns nothing
native SetDestructableMaterialTexture takes destructable whichDestructable, string textureName, integer materialId, integer textureIndex returns nothing
native SetDestructableTexture takes destructable whichDestructable, string textureName, integer textureIndex returns nothing
native SetDestructableReplaceableTexture takes destructable whichDestructable, string textureName, integer textureIndex returns nothing
native SetDestructableAnimationWithRarityByIndex takes destructable whichDestructable, integer animIndex, raritycontrol rarity returns nothing
native SetDestructableAnimationWithRarity takes destructable whichDestructable, string animation, raritycontrol rarity returns nothing
native SetDestructableAnimationByIndex takes destructable whichDestructable, integer animIndex returns nothing
native QueueDestructableAnimationByIndex takes destructable whichDestructable, integer animIndex returns nothing
  1. Исправлен фриз игры, когда срабатывал ивент FRAMEEVENT_SLIDER_VALUE_CHANGED после использования нативной функции SetFrameValue.
  2. Get/SetUnitArmourType теперь используют тип defensetype заместо типа integer.
  3. Исправлена критическая ошибка от нативных функций: SetUnitFacingEx and SetUnitFacingInstant.
  4. CastAbilityTarget теперь использует тип widget заместо unit.
  5. Нативная функция CastAbilityGround более не использует unit в аргументах вызова.
  6. Обновлена версия War3 lua.
20

v1.0.12.57

  1. Новые Константы:
constant abilityintegerfield ABILITY_IF_BUTTON_HOTKEY_NORMAL = ConvertAbilityIntegerField('ahky')
constant abilityintegerfield ABILITY_IF_BUTTON_HOTKEY_ACTIVATED = ConvertAbilityIntegerField('auhk')
constant abilityintegerfield ABILITY_IF_BUTTON_HOTKEY_RESEARCH = ConvertAbilityIntegerField('auhk')
constant abilitystringfield ABILITY_SF_ICON_NORMAL = ConvertAbilityStringField('aart')
constant unitintegerfield UNIT_IF_FOOD_USED = ConvertUnitIntegerField('ufoo')
constant unitintegerfield UNIT_IF_FOOD_PRODUCED = ConvertUnitIntegerField('ufma')
constant unitintegerfield UNIT_IF_GOLD_COST = ConvertUnitIntegerField('ugol')
constant unitintegerfield UNIT_IF_LUMBER_COST = ConvertUnitIntegerField('ulum')
constant unitintegerfield UNIT_IF_AGILITY_BASE = ConvertUnitIntegerField('ustr')
constant unitintegerfield UNIT_IF_INTELLIGENCE_BASE = ConvertUnitIntegerField('uagi')
constant unitintegerfield UNIT_IF_STRENGTH_BASE = ConvertUnitIntegerField('uint')
  1. Новые Нативные Функции:
utility
native GetHostPlayer takes nothing returns player
native GetHandleCount takes nothing returns integer
native GetNextHandleIndex takes nothing returns integer
native IsKeyPressed takes oskeytype key returns boolean
native IsMouseKeyPressed takes mousebuttontype mouseKey returns boolean
screen
native SetScreenFieldOfView takes real fov returns nothing
native SetWidescreenState takes boolean flag returns nothing
window
native IsWindowActive takes nothing returns boolean
native GetWindowWidth takes nothing returns integer
native GetWindowHeight takes nothing returns integer
native GetClientWidth takes nothing returns integer
native GetClientHeight takes nothing returns integer
native GetWindowX takes nothing returns integer
native GetWindowY takes nothing returns integer
native GetWindowCenterX takes nothing returns integer
native GetWindowCenterY takes nothing returns integer
Frame
native GetCFrameByName takes string frameName, integer createContext returns framehandle
native GetCSimpleFontStringByName takes string frameName, integer createContext returns framehandle
native GetCSimpleTextureByName takes string frameName, integer createContext returns framehandle
native GetCSimpleFrameByName takes string frameName, integer createContext returns framehandle
native GetFrameUnderMouse takes nothing returns framehandle
native SetFrameSpriteAnimationOffset takes framehandle whichFrame, real percent returns boolean
ability
native GetAbilityIntegerField takes ability whichAbility, abilityintegerfield whichField returns integer
native SetAbilityIntegerField takes ability whichAbility, abilityintegerfield whichField, integer value returns boolean
native GetAbilityBooleanField takes ability whichAbility, abilitybooleanfield whichField returns boolean
native SetAbilityBooleanField takes ability whichAbility, abilitybooleanfield whichField, boolean value returns boolean
native GetAbilityRealField takes ability whichAbility, abilityrealfield whichField returns real
native SetAbilityRealField takes ability whichAbility, abilityrealfield whichField, real value returns boolean
native GetAbilityStringField takes ability whichAbility, abilitystringfield whichField returns string
native SetAbilityStringField takes ability whichAbility, abilitystringfield whichField, string value returns boolean
native GetAbilityIntegerLevelField takes ability whichAbility, abilityintegerlevelfield whichField, integer level returns integer
native SetAbilityIntegerLevelField takes ability whichAbility, abilityintegerlevelfield whichField, integer level, integer value returns boolean
native GetAbilityBooleanLevelField takes ability whichAbility, abilitybooleanlevelfield whichField, integer level returns boolean
native SetAbilityBooleanLevelField takes ability whichAbility, abilitybooleanlevelfield whichField, integer level, boolean value returns boolean
native GetAbilityRealLevelField takes ability whichAbility, abilityreallevelfield whichField, integer level returns real
native SetAbilityRealLevelField takes ability whichAbility, abilityreallevelfield whichField, integer level, real value returns boolean
native GetAbilityStringLevelField takes ability whichAbility, abilitystringlevelfield whichField, integer level returns string
native SetAbilityStringLevelField takes ability whichAbility, abilitystringlevelfield whichField, integer level, string value returns boolean
native GetAbilityIntegerLevelArrayField takes ability whichAbility, abilityintegerlevelarrayfield whichField, integer level, integer index returns integer
native SetAbilityIntegerLevelArrayField takes ability whichAbility, abilityintegerlevelarrayfield whichField, integer level, integer index, integer value returns boolean
native AddAbilityIntegerLevelArrayField takes ability whichAbility, abilityintegerlevelarrayfield whichField, integer level, integer value returns boolean
native RemoveAbilityIntegerLevelArrayField takes ability whichAbility, abilityintegerlevelarrayfield whichField, integer level, integer value returns boolean
native GetAbilityBooleanLevelArrayField takes ability whichAbility, abilitybooleanlevelarrayfield whichField, integer level, integer index returns boolean
native SetAbilityBooleanLevelArrayField takes ability whichAbility, abilitybooleanlevelarrayfield whichField, integer level, integer index, boolean value returns boolean
native AddAbilityBooleanLevelArrayField takes ability whichAbility, abilitybooleanlevelarrayfield whichField, integer level, boolean value returns boolean
native RemoveAbilityBooleanLevelArrayField takes ability whichAbility, abilitybooleanlevelarrayfield whichField, integer level, boolean value returns boolean
native GetAbilityRealLevelArrayField takes ability whichAbility, abilityreallevelarrayfield whichField, integer level, integer index returns real
native SetAbilityRealLevelArrayField takes ability whichAbility, abilityreallevelarrayfield whichField, integer level, integer index, real value returns boolean
native AddAbilityRealLevelArrayField takes ability whichAbility, abilityreallevelarrayfield whichField, integer level, real value returns boolean
native RemoveAbilityRealLevelArrayField takes ability whichAbility, abilityreallevelarrayfield whichField, integer level, real value returns boolean
native GetAbilityStringLevelArrayField takes ability whichAbility, abilitystringlevelarrayfield whichField, integer level, integer index returns string
native SetAbilityStringLevelArrayField takes ability whichAbility, abilitystringlevelarrayfield whichField, integer level, integer index, string value returns boolean
native AddAbilityStringLevelArrayField takes ability whichAbility, abilitystringlevelarrayfield whichField, integer level, string value returns boolean
native RemoveAbilityStringLevelArrayField takes ability whichAbility, abilitystringlevelarrayfield whichField, integer level, string value returns boolean
item
native GetItemIntegerField takes item whichItem, itemintegerfield whichField returns integer
native SetItemIntegerField takes item whichItem, itemintegerfield whichField, integer value returns boolean
native GetItemBooleanField takes item whichItem, itembooleanfield whichField returns boolean
native SetItemBooleanField takes item whichItem, itembooleanfield whichField, boolean value returns boolean
native GetItemRealField takes item whichItem, itemrealfield whichField returns real
native SetItemRealField takes item whichItem, itemrealfield whichField, real value returns boolean
native GetItemStringField takes item whichItem, itemstringfield whichField returns string
native SetItemStringField takes item whichItem, itemstringfield whichField, string value returns boolean
unit
native GetUnitMinimumDamageByIndex takes unit whichUnit, integer attackIndex returns integer
native GetUnitMaximumDamageByIndex takes unit whichUnit, integer attackIndex returns integer
native GetUnitBooleanField takes unit whichUnit, unitbooleanfield whichField returns boolean
native GetUnitIntegerField takes unit whichUnit, unitintegerfield whichField returns integer
native GetUnitRealField takes unit whichUnit, unitrealfield whichField returns real
native GetUnitStringField takes unit whichUnit, unitstringfield whichField returns string
native SetUnitBooleanField takes unit whichUnit, unitbooleanfield whichField, boolean value returns boolean
native SetUnitIntegerField takes unit whichUnit, unitintegerfield whichField, integer value returns boolean
native SetUnitRealField takes unit whichUnit, unitrealfield whichField, real value returns boolean
native SetUnitStringField takes unit whichUnit, unitstringfield whichField, string value returns boolean
native GetUnitWeaponBooleanField takes unit whichUnit, unitweaponbooleanfield whichField, integer index returns boolean
native GetUnitWeaponIntegerField takes unit whichUnit, unitweaponintegerfield whichField, integer index returns integer
native GetUnitWeaponRealField takes unit whichUnit, unitweaponrealfield whichField, integer index returns real
native GetUnitWeaponStringField takes unit whichUnit, unitweaponstringfield whichField, integer index returns string
native SetUnitWeaponBooleanField takes unit whichUnit, unitweaponbooleanfield whichField, integer index, boolean value returns boolean
native SetUnitWeaponIntegerField takes unit whichUnit, unitweaponintegerfield whichField, integer index, integer value returns boolean
native SetUnitWeaponRealField takes unit whichUnit, unitweaponrealfield whichField, integer index, real value returns boolean
native SetUnitWeaponStringField takes unit whichUnit, unitweaponstringfield whichField, integer index, string value returns boolean
  1. Удалённые Нативные Функции:
native GetAbilityHotkey takes ability whichAbility returns oskeytype
native SetAbilityHotkey takes ability whichAbility, oskeytype whichKey returns nothing
native GetAbilityUnHotkey takes ability whichAbility returns oskeytype
native SetAbilityUnHotkey takes ability whichAbility, oskeytype whichKey returns nothing
native GetAbilityResearchHotkey takes ability whichAbility returns oskeytype
native SetAbilityResearchHotkey takes ability whichAbility, oskeytype whichKey returns nothing
native GetAbilityEffectSound takes ability whichAbility returns string
native SetAbilityEffectSound takes ability whichAbility, string text returns nothing
native GetAbilityGlobalMessage takes ability whichAbility returns string
native SetAbilityGlobalMessage takes ability whichAbility, string text returns nothing
native GetAbilityGlobalSound takes ability whichAbility returns string
native SetAbilityGlobalSound takes ability whichAbility, string text returns nothing
native GetAbilityButtonX takes ability whichAbility returns integer
native SetAbilityButtonX takes ability whichAbility, integer positionX returns nothing
native GetAbilityButtonY takes ability whichAbility returns integer
native SetAbilityButtonY takes ability whichAbility, integer positionY returns nothing
native GetAbilityUnButtonX takes ability whichAbility returns integer
native SetAbilityUnButtonX takes ability whichAbility, integer positionX returns nothing
native GetAbilityUnButtonY takes ability whichAbility returns integer
native SetAbilityUnButtonY takes ability whichAbility, integer positionY returns nothing
native GetAbilityResearchButtonX takes ability whichAbility returns integer
native SetAbilityResearchButtonX takes ability whichAbility, integer positionX returns nothing
native GetAbilityResearchButtonY takes ability whichAbility returns integer
native SetAbilityResearchButtonY takes ability whichAbility, integer positionY returns nothing
native GetAbilityMissileSpeed takes ability whichAbility returns real
native SetAbilityMissileSpeed takes ability whichAbility, real missileSpeed returns nothing
native GetAbilityMissileArc takes ability whichAbility returns real
native SetAbilityMissileArc takes ability whichAbility, real missileArc returns nothing
native GetAbilityIsMissileHoming takes ability whichAbility returns boolean
native SetAbilityIsMissileHoming takes ability whichAbility, boolean ishoming returns nothing
native GetAbilityBaseSpellDetails takes ability whichAbility returns integer
native SetAbilityBaseSpellDetails takes ability whichAbility, integer level returns nothing
native GetAbilityBaseTip takes ability whichAbility, integer level returns string
native SetAbilityBaseTip takes ability whichAbility, integer level, string text returns nothing
native GetAbilityBaseUnTip takes ability whichAbility, integer level returns string
native SetAbilityBaseUnTip takes ability whichAbility, integer level, string text returns nothing
native GetAbilityBaseUberTip takes ability whichAbility, integer level returns string
native SetAbilityBaseUberTip takes ability whichAbility, integer level, string text returns nothing
native GetAbilityBaseUnUberTip takes ability whichAbility, integer level returns string
native SetAbilityBaseUnUberTip takes ability whichAbility, integer level, string text returns nothing
native SetAbilityHotkeyEx takes ability whichAbility, oskeytype whichKey returns nothing
native GetItemBaseName takes item whichItem returns string
native SetItemBaseName takes item whichItem, string name returns nothing
native GetItemBaseDescription takes item whichItem returns string
native SetItemBaseDescription takes item whichItem, string name returns nothing
native GetItemBaseIcon takes item whichItem returns string
native SetItemBaseIcon takes item whichItem, string path returns nothing
native GetItemBaseHotkey takes item whichItem returns oskeytype
native SetItemBaseHotkey takes item whichItem, oskeytype whichKey returns nothing
native GetItemBaseTip takes item whichItem returns string
native SetItemBaseTip takes item whichItem, string tip returns nothing
native GetItemBaseUberTip takes item whichItem returns string
native SetItemBaseUberTip takes item whichItem, string tip returns nothing
native GetItemBaseGoldCost takes item whichItem returns integer
native SetItemBaseGoldCost takes item whichItem, integer goldcost returns nothing
native GetItemBaseLumberCost takes item whichItem returns integer
native SetItemBaseLumberCost takes item whichItem, integer lumbercost returns nothing
native GetItemBaseStockMaximum takes item whichItem returns integer
native SetItemBaseStockMaximum takes item whichItem, integer stockMax returns nothing
native GetItemBaseStockReplenishInterval takes item whichItem returns real
native SetItemBaseStockReplenishInterval takes item whichItem, real replenishInterval returns nothing
native GetItemBaseStockStartDelay takes item whichItem returns real
native SetItemBaseStockStartDelay takes item whichItem, real stockStartDelay returns nothing
native GetItemBasePriority takes item whichItem returns integer
native SetItemBasePriority takes item whichItem, integer priority returns nothing
native GetItemBaseLevel takes item whichItem returns integer
native SetItemBaseLevel takes item whichItem, integer level returns nothing
native GetItemBaseOldLevel takes item whichItem returns integer
native SetItemBaseOldLevel takes item whichItem, integer oldlevel returns nothing
native GetItemBaseClassification takes item whichItem returns integer
native SetItemBaseClassification takes item whichItem, integer classifictaionId returns nothing
native GetItemBaseIsMorph takes item whichItem returns boolean
native SetItemBaseIsMorph takes item whichItem, boolean flag returns nothing
native GetItemBaseIsPickRandom takes item whichItem returns boolean
native SetItemBaseIsPickRandom takes item whichItem, boolean flag returns nothing
native GetItemBaseCharges takes item whichItem returns integer
native SetItemBaseCharges takes item whichItem, integer charges returns nothing
native GetItemBaseCooldownId takes item whichItem returns integer
native SetItemBaseCooldownId takes item whichItem, integer cooldownId returns nothing
native GetItemBaseIsIgnoreCooldown takes item whichItem returns boolean
native SetItemBaseIsIgnoreCooldown takes item whichItem, boolean flag returns nothing
native GetItemBaseIsPowerUp takes item whichItem returns boolean
native SetItemBaseIsPowerUp takes item whichItem, boolean flag returns nothing
native GetItemBaseIsPawnable takes item whichItem returns boolean
native SetItemBaseIsPawnable takes item whichItem, boolean flag returns nothing
native GetItemBaseIsUsable takes item whichItem returns boolean
native SetItemBaseIsUsable takes item whichItem, boolean flag returns nothing
native GetItemBaseIsPerishable takes item whichItem returns boolean
native SetItemBaseIsPerishable takes item whichItem, boolean flag returns nothing
native GetItemBaseIsDroppable takes item whichItem returns boolean
native SetItemBaseIsDroppable takes item whichItem, boolean flag returns nothing
native GetItemBaseIsDroppableOnDeath takes item whichItem returns boolean
native SetItemBaseIsDroppableOnDeath takes item whichItem, boolean flag returns nothing
native GetItemBaseIsSellable takes item whichItem returns boolean
native SetItemBaseIsSellable takes item whichItem, boolean flag returns nothing
native GetHeroBasePrimaryStat takes unit whichUnit returns heroattribute
native SetHeroBasePrimaryStat takes unit whichUnit, heroattribute whichHeroAttribute returns nothing
native GetUnitBaseGoldCost takes unit whichUnit returns integer
native SetUnitBaseGoldCost takes unit whichUnit, integer goldCost returns nothing
native GetUnitBaseDaySight takes unit whichUnit returns real
native SetUnitBaseDaySight takes unit whichUnit, real dsight returns nothing
native GetUnitBaseNightSight takes unit whichUnit returns real
native SetUnitBaseNightSight takes unit whichUnit, real nsight returns nothing
native GetUnitBaseColour takes unit whichUnit returns integer
native SetUnitBaseColour takes unit whichUnit, integer colour returns nothing
native GetUnitBaseColourA takes unit whichUnit returns integer
native SetUnitBaseColourA takes unit whichUnit, integer alpha returns nothing
native GetUnitBaseColourR takes unit whichUnit returns integer
native SetUnitBaseColourR takes unit whichUnit, integer red returns nothing
native GetUnitBaseColourG takes unit whichUnit returns integer
native SetUnitBaseColourG takes unit whichUnit, integer green returns nothing
native GetUnitBaseColourB takes unit whichUnit returns integer
native SetUnitBaseColourB takes unit whichUnit, integer blue returns nothing
native GetUnitBaseName takes unit whichUnit returns string
native SetUnitBaseName takes unit whichUnit, string name returns nothing
native GetHeroBaseProperName takes unit whichUnit, integer nameIndex returns string
native SetHeroBaseProperName takes unit whichUnit, integer nameIndex, string properName returns nothing
native GetUnitBaseDescription takes unit whichUnit returns string
native SetUnitBaseDescription takes unit whichUnit, string name returns nothing
native GetUnitBaseModel takes unit whichUnit returns string
native SetUnitBaseModel takes unit whichUnit, string model returns nothing
native GetUnitBasePortrait takes unit whichUnit returns string
native SetUnitBasePortrait takes unit whichUnit, string portrait returns nothing
native GetUnitBaseHotkey takes unit whichUnit returns oskeytype
native SetUnitBaseHotkey takes unit whichUnit, oskeytype whichKey returns nothing
native GetUnitBaseIcon takes unit whichUnit returns string
native SetUnitBaseIcon takes unit whichUnit, string name returns nothing
native GetUnitBaseAwakenTip takes unit whichUnit returns string
native SetUnitBaseAwakenTip takes unit whichUnit, string awakenTip returns nothing
native GetUnitBaseTip takes unit whichUnit returns string
native SetUnitBaseTip takes unit whichUnit, string tip returns nothing
native GetUnitBaseUberTip takes unit whichUnit returns string
native SetUnitBaseUberTip takes unit whichUnit, string ubertip returns nothing
native GetUnitBaseReviveTip takes unit whichUnit returns string
native SetUnitBaseReviveTip takes unit whichUnit, string revivetip returns nothing
native GetUnitBaseShadowTex takes unit whichUnit returns string
native SetUnitBaseShadowTex takes unit whichUnit, string shadowTexture returns nothing
native GetUnitBaseMissileArt takes unit whichUnit, integer attackIndex returns string
native SetUnitBaseMissileArt takes unit whichUnit, integer attackIndex, string missleArt returns nothing
native GetUnitBaseMissileSpeed takes unit whichUnit, integer attackIndex returns real
native SetUnitBaseMissileSpeed takes unit whichUnit, integer attackIndex, real missleSpeed returns nothing
native GetUnitBaseSelectionScale takes unit whichUnit returns real
native SetUnitBaseSelectionScale takes unit whichUnit, real selectionScale returns nothing
  1. Добавлено ключевое слово "Base" нативкам, которые изменяли базовые параметры и не имели этого ключевого слова.
  2. Исправлена критическая ошибка от нативных функций CastAbility/CastAbilityGround/CastAbilityTarget связанных с большинтсвом "неподдерживаемых" заклинаний, теперь все заклинания должны работать.
  3. SetFrameAllPoints теперь возвращает булевое значение.
  4. SetFrameFocus теперь возвращает булевое значение.
  5. SetUnitMoveAIType теперь имеет дополнительный аргумент "flag" который управляет режимом "установки/снятия" данных.
  6. Полностью переписан метод общения Лаунчер -> Игра -> Лаунчер, теперь используется система пайпов заместо сигналов.
  7. Исправлена нативная функция GetEventDamageTarget, которая возвращала источник урона заместо цели.
  8. Исправлены все "не срабатывающие" TriggerRegister функции с новыми ивентами, которые были вызваны из потока main функции без какой-либо задержки.
  9. Добавлен практический полный функционал DzAPI, однако некоторые небезопасные нативные функции типа DzSetMemory не поддерживаются и не будут поддерживаться.
38
Как же тяжело жить без интерфейсов и их наследования)
23
ScorpioT1000, было бы интересно узнать, что это такое (в статьях из гугла ничего не понял), как создать подобие интерфейса в jass и действительно ли он упрощает работу, или он просто абстракция наподобие группирования функций по названиям, наподобие function UnitDeath, UnitSpell, UnitSpellA, UnitSpellB (имена от балды), чтобы их проще было найти в function list.
38
Kokomi, скорее контейнер общих данных
23
nazarpunk, Загуглил, но нужно кое-что прояснить. Если я например, из нативных функций делаю свои функции, из этих функций делаю более "общие" функции, и так далее вплоть до функций, запускаемых через trigger add action - это является ООП? Согласно парадигме "всё является объектом". Если да, то что тут будет интерфейсом?
23
Kokomi, Загуглил. Посмотрел примеры из Педивикии. Выглядят они как большая функция, в которой через разные условия вызываются другие функции с различающимися аргументами. Большая функция и есть интерфейс?
20
EugeAl, не идут примеры в мою сонную голову.
По факту интерфейс это просто набор методов, которые должен реализовывать класс. То есть если в классе прописано, что он реализует интерфейс - он обязан иметь все те же функции, которые прописаны в нем.
30
не идут примеры в мою сонную голову.
interface Point {
	method setPosition(x, y);
}

interface Unit impliements Point {
	method setPosition(x, y){
		SetUnitX(this, x)
		SetUnitY(this, y)
	}
}

interface Effect impliements Point {
	method setPosition(x, y){
		SetEffectX(this, x)
		SetEffectY(this, y)
	}
}
8
EugeAl, мне кажется, без полиморфизма не понять все преимущества их использования. Если брать пример выше, то можно иметь один метод, который двигает\отталкивает и т.д., и в качестве аргумента ему можно задать Point. В таком случае, в него можно будет передавать и юниты, и эффекты, и предметы, он будет работать с ними одинаково, просто исходя из того, что все они - Point.
23
Kokomi, nazarpunk, build, Судя по всему, это что-то вроде типа функции. То есть функции, также как и объекты, имеют тип и наследование, только вместо handle -> widget -> unit здесь идёт function -> method -> interface -> class. Я правильно понимаю?
20
EugeAl, мы смотрим сейчас взглядом функциональщика. Возьмем пример nazarpunk. К примеру у нас есть абилка огненный вихрь сян лин (вокруг персонажа крутится обруч, который наносит урон при пересечении с персонажами). По большому счету нам все равно что вокруг кастера крутить - юнит, эффект, или хоть texttag. Так вот при инициальзации абилки вместо конкретной реализации можно передать как параметр Point. Способность будет пользоваться переданным инстансом Point чтобы толкать его вокруг кастера. А уже конкретная реализация этих методов будет взаимодействовать с игрой, вызывая нужные методы с нужными параметрами
20

v1.0.12.58

  1. Новые Константы:
constant integer CHAT_RECIPIENT_ALL = 0
constant integer CHAT_RECIPIENT_ALLIES = 1
constant integer CHAT_RECIPIENT_REFEREES = 2
constant integer CHAT_RECIPIENT_OBSERVERS = 2
constant integer CHAT_RECIPIENT_PRIVATE = 3
constant unitweaponintegerfield UNIT_WEAPON_IF_ATTACKS_ENABLED = ConvertUnitWeaponIntegerField('uaen')
  1. Новые Нативные Функции:
native DisplayChatMessage takes player whichPlayer, integer recipient, string message returns nothing
native DisplayTimedChatMessage takes player whichPlayer, integer recipient, string message, real duration returns nothing
native SetSpecialEffectAnimationOffsetPercent takes effect whichEffect, real percent returns boolean
native SetTrackableAnimationOffsetPercent takes trackable whichTrackable, real percent returns boolean
native SetWidgetAnimationOffsetPercent takes widget whichWidget, real percent returns boolean
native SetDestructableAnimationOffsetPercent takes destructable whichDestructable, real percent returns boolean
native SetItemAnimationOffsetPercent takes item whichItem, real percent returns boolean
native SetUnitAnimationOffsetPercent takes unit whichUnit, real percent returns boolean
native SetMissileAnimationOffsetPercent takes missile whichMissile, real percent returns boolean
  1. SetFrameSpriteAnimationOffset изменена на SetFrameSpriteAnimationOffsetPercent.
  2. Исправлены все нативные функции связанные с "таблицами", они все были нерабочими.
  3. Исправлена критическая ошибка при выходе/перезагрузке карты когда какой-либо фрейм был создан через нативные функции CreateFrame, CreateSimpleFrame и CreateFrameByType с дублированием contextId.
    Пояснение: это значит, что если Вы создали фрейм вот так: CreateFrame( "SomFrame", gameUI, 0, 0 ) и создадите фрейм ещё раз через CreateFrame( "SomFrame", gameUI, 0, 0 ), то оно на деле "выкинет" предыдущий фрейм, однако этой проблемы больше нет.
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.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.13.63

  1. Новые Типы:
type buffstringfield extends handle
  1. Новые Конверторы:
constant native ConvertBuffStringField takes integer i returns buffstringfield
  1. Новые Константы:
constant buffstringfield BUFF_SF_ICON_NORMAL = ConvertBuffStringField('fart')
constant buffstringfield BUFF_SF_TOOLTIP_NORMAL = ConvertBuffStringField('ftip')
constant buffstringfield BUFF_SF_TOOLTIP_NORMAL_EXTENDED = ConvertBuffStringField('fube')
constant unitstringfield UNIT_SF_HERO_ABILITY_LIST = ConvertUnitStringField('uhab')
constant unitstringfield UNIT_SF_ABILITY_LIST = ConvertUnitStringField('uabi')
  1. Новые Нативные Функции:
native GetUjAPIVersion takes nothing returns string
native HideOriginFrames takes boolean flag returns nothing
native EditBlackBorders takes real upperHeight, real bottomHeight returns nothing
Ability
native GetAbilityOrderId takes ability whichAbility returns integer this replaced GetAbilityOrder, used wrong naming
native SetAbilityOrderId takes ability whichAbility, integer orderId returns boolean Highly experimental, may be removed if proven unstable.
native SetAbilityLevel takes ability whichAbility, integer level returns boolean
Ability Base Field API
native GetAbilityBaseIntegerFieldById takes integer aid, abilityintegerfield whichField returns integer
native SetAbilityBaseIntegerFieldById takes integer aid, abilityintegerfield whichField, integer value returns boolean
native GetAbilityBaseBooleanFieldById takes integer aid, abilitybooleanfield whichField returns boolean
native SetAbilityBaseBooleanFieldById takes integer aid, abilitybooleanfield whichField, boolean value returns boolean
native GetAbilityBaseRealFieldById takes integer aid, abilityrealfield whichField returns real
native SetAbilityBaseRealFieldById takes integer aid, abilityrealfield whichField, real value returns boolean
native GetAbilityBaseStringFieldById takes integer aid, abilitystringfield whichField returns string
native SetAbilityBaseStringFieldById takes integer aid, abilitystringfield whichField, string value returns boolean
native GetAbilityBaseIntegerLevelFieldById takes integer aid, abilityintegerlevelfield whichField, integer level returns integer
native SetAbilityBaseIntegerLevelFieldById takes integer aid, abilityintegerlevelfield whichField, integer level, integer value returns boolean
native GetAbilityBaseBooleanLevelFieldById takes integer aid, abilitybooleanlevelfield whichField, integer level returns boolean
native SetAbilityBaseBooleanLevelFieldById takes integer aid, abilitybooleanlevelfield whichField, integer level, boolean value returns boolean
native GetAbilityBaseRealLevelFieldById takes integer aid, abilityreallevelfield whichField, integer level returns real
native SetAbilityBaseRealLevelFieldById takes integer aid, abilityreallevelfield whichField, integer level, real value returns boolean
native GetAbilityBaseStringLevelFieldById takes integer aid, abilitystringlevelfield whichField, integer level returns string
native SetAbilityBaseStringLevelFieldById takes integer aid, abilitystringlevelfield whichField, integer level, string value returns boolean
native GetAbilityBaseIntegerLevelArrayFieldById takes integer aid, abilityintegerlevelarrayfield whichField, integer level, integer index returns integer
native SetAbilityBaseIntegerLevelArrayFieldById takes integer aid, abilityintegerlevelarrayfield whichField, integer level, integer index, integer value returns boolean
native AddAbilityBaseIntegerLevelArrayFieldById takes integer aid, abilityintegerlevelarrayfield whichField, integer level, integer value returns boolean
native RemoveAbilityBaseIntegerLevelArrayFieldById takes integer aid, abilityintegerlevelarrayfield whichField, integer level, integer value returns boolean
native GetAbilityBaseBooleanLevelArrayFieldById takes integer aid, abilitybooleanlevelarrayfield whichField, integer level, integer index returns boolean
native SetAbilityBaseBooleanLevelArrayFieldById takes integer aid, abilitybooleanlevelarrayfield whichField, integer level, integer index, boolean value returns boolean
native AddAbilityBaseBooleanLevelArrayFieldById takes integer aid, abilitybooleanlevelarrayfield whichField, integer level, boolean value returns boolean
native RemoveAbilityBaseBooleanLevelArrayFieldById takes integer aid, abilitybooleanlevelarrayfield whichField, integer level, boolean value returns boolean
native GetAbilityBaseRealLevelArrayFieldById takes integer aid, abilityreallevelarrayfield whichField, integer level, integer index returns real
native SetAbilityBaseRealLevelArrayFieldById takes integer aid, abilityreallevelarrayfield whichField, integer level, integer index, real value returns boolean
native AddAbilityBaseRealLevelArrayFieldById takes integer aid, abilityreallevelarrayfield whichField, integer level, real value returns boolean
native RemoveAbilityBaseRealLevelArrayFieldById takes integer aid, abilityreallevelarrayfield whichField, integer level, real value returns boolean
native GetAbilityBaseStringLevelArrayFieldById takes integer aid, abilitystringlevelarrayfield whichField, integer level, integer index returns string
native SetAbilityBaseStringLevelArrayFieldById takes integer aid, abilitystringlevelarrayfield whichField, integer level, integer index, string value returns boolean
native AddAbilityBaseStringLevelArrayFieldById takes integer aid, abilitystringlevelarrayfield whichField, integer level, string value returns boolean
native RemoveAbilityBaseStringLevelArrayFieldById takes integer aid, abilitystringlevelarrayfield whichField, integer level, string value returns boolean
Buff Base Field API
native GetBuffBaseStringFieldById takes integer aid, buffstringfield whichField returns string
native SetBuffBaseStringFieldById takes integer aid, buffstringfield whichField, string value returns boolean
Buff Field API
native GetBuffStringField takes buff whichBuff, buffstringfield whichField returns string
native SetBuffStringField takes buff whichBuff, buffstringfield whichField, string value returns boolean
Item Base Field API
native GetBaseItemIntegerFieldById takes integer itemId, itemintegerfield whichField returns integer
native SetBaseItemIntegerFieldById takes integer itemId, itemintegerfield whichField, integer value returns boolean
native GetBaseItemBooleanFieldById takes integer itemId, itembooleanfield whichField returns boolean
native SetBaseItemBooleanFieldById takes integer itemId, itembooleanfield whichField, boolean value returns boolean
native GetBaseItemRealFieldById takes integer itemId, itemrealfield whichField returns real
native SetBaseItemRealFieldById takes integer itemId, itemrealfield whichField, real value returns boolean
native GetBaseItemStringFieldById takes integer itemId, itemstringfield whichField returns string
native SetBaseItemStringFieldById takes integer itemId, itemstringfield whichField, string value returns boolean
Unit Base Field API
native GetUnitBaseIntegerFieldById takes integer unitTypeId, unitintegerfield whichField returns integer
native SetUnitBaseIntegerFieldById takes integer unitTypeId, unitintegerfield whichField, integer value returns boolean
native GetUnitBaseBooleanFieldById takes integer unitTypeId, unitbooleanfield whichField returns boolean
native SetUnitBaseBooleanFieldById takes integer unitTypeId, unitbooleanfield whichField, boolean value returns boolean
native GetUnitBaseRealFieldById takes integer unitTypeId, unitrealfield whichField returns real
native SetUnitBaseRealFieldById takes integer unitTypeId, unitrealfield whichField, real value returns boolean
native GetUnitBaseStringFieldById takes integer unitTypeId, unitstringfield whichField returns string
native SetUnitBaseStringFieldById takes integer unitTypeId, unitstringfield whichField, string value returns boolean
native GetUnitBaseWeaponIntegerFieldById takes integer unitTypeId, unitweaponintegerfield whichField, integer index returns integer
native SetUnitBaseWeaponIntegerFieldById takes integer unitTypeId, unitweaponintegerfield whichField, integer index, integer value returns boolean
native GetUnitBaseWeaponBooleanFieldById takes integer unitTypeId, unitweaponbooleanfield whichField, integer index returns boolean
native SetUnitBaseWeaponBooleanFieldById takes integer unitTypeId, unitweaponbooleanfield whichField, integer index, boolean value returns boolean
native GetUnitBaseWeaponRealFieldById takes integer unitTypeId, unitweaponrealfield whichField, integer index returns real
native SetUnitBaseWeaponRealFieldById takes integer unitTypeId, unitweaponrealfield whichField, integer index, real value returns boolean
native GetUnitBaseWeaponStringFieldById takes integer unitTypeId, unitweaponstringfield whichField, integer index returns string
native SetUnitBaseWeaponStringFieldById takes integer unitTypeId, unitweaponstringfield whichField, integer index, string value returns boolean
  1. Исправлена критическая ошибка от всех EX нативных функций, связанных с полями заклинаний.
  2. Исправлена критическая ошибка, связанная с нативной функцией CreateSimpleFrame когда не CSimpleFrame был послан как родительский в аргументах.
  3. FRAMEEVENT_CONTROL_CLICK теперь может быть использован со всеми CSimpleButtons, а точнее:
CSimpleButton
CReplayButton
CTrainableButton
CCommandButton
CHeroBarButton
CSimpleCheckbox
  1. FRAMEEVENT_MOUSE_ENTER и FRAMEEVENT_MOUSE_LEAVE теперь могут быть использованы со всеми CSimpleFrames.
    Пояснение: CSimpleTexture и CSimpleFontString (то бишь CSimpleRegions) не поддерживаются, так как у них нет внутренних событий.
  2. Добавлена поддержка этих JN Нативных Функций:
native BitOr takes integer x,integer y returns integer
native BitAnd takes integer x,integer y returns integer
native BitXor takes integer x,integer y returns integer
native BitShiftL takes integer x,integer y returns integer
native BitShiftR takes integer x,integer y returns integer
native JNI2R takes integer i returns real
native JNR2I takes real r returns integer
native JNGetMaxAttackSpeed takes nothing returns real
native IsReplayMode takes nothing returns boolean
native IsHostPlayer takes nothing returns boolean
native JNStringPos takes string str,string sub returns integer
native JNStringReverse takes string str returns string
native JNStringCount takes string str,string sub returns integer
native JNStringContains takes string str,string sub returns boolean
native JNStringReplace takes string str,string old,string newstr returns string
native JNStringInsert takes string str,integer index,string val returns string
native JNStringSub takes string str,integer start,integer length returns string
native JNStringLength takes string str returns integer
Пояснение: остальные нативные функции будут видны для UjAPI, но они не будет выполнять ничего, но возвращать "пустые", но валидные данные, для превенции крашей.
  1. Немного переделана система события урона, которая иногда посылала неверные данные, которые вызывали краш.
  2. Исправлена неверная обработка цвета для всех CControl фреймов, то бишь CTextFrame и прочих.
  3. Удалены все "эмулированные" табы через пробелы в common.j, что повлияло на снижение веса на 30 КБ.
23
Имхо, очень нужна функция
native EnumDestructablesInRange takes real x, real y, real radius, boolexpr filter, code actionFunc returns nothing, чтобы без областей обойтись. Она возможна?
27
EugeAl, возможно. Выбираете все декорации на карте, и сравниваете что попадает в радиус. Можно функц написать. Но вот посмотрим, что скажет Унруиз
20
Имхо, очень нужна функция
native EnumDestructablesInRange takes real x, real y, real radius, boolexpr filter, code actionFunc returns nothing, чтобы без областей обойтись. Она возможна?
EugeAl, возможно. Выбираете все декорации на карте, и сравниваете что попадает в радиус. Можно функц написать. Но вот посмотрим, что скажет Унруиз
Изучу и скорее всего добавлю, мне всё-равно перебор нужно будет изучить для моей будущей системы, которая сможет хранить эффекты и т.д., что будет заменой группе.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.14.65

  1. Новые Нативные Функции:
native CreateImageSimple takes string file, real sizeX, real sizeY, real posX, real posY, real posZ, integer imageType returns image
native GetImageType takes image whichImage returns integer
native GetImageX takes image whichImage returns real
native SetImageX takes image whichImage, real sizeX returns nothing
native GetImageY takes image whichImage returns real
native SetImageY takes image whichImage, real sizeY returns nothing
native GetImageZ takes image whichImage returns real
native SetImageZ takes image whichImage, real sizeZ returns nothing
native GetImagePositionLocation takes image whichImage returns location
native SetImagePositionLocation takes image whichImage, location whichLocation returns nothing
native GetImageOriginX takes image whichImage returns real
native SetImageOriginX takes image whichImage, real originX returns nothing
native GetImageOriginY takes image whichImage returns real
native SetImageOriginY takes image whichImage, real originY returns nothing
native SetImageOrigin takes image whichImage, real originX, real originY returns nothing
native GetImageSizeX takes image whichImage returns real
native SetImageSizeX takes image whichImage, real sizeX returns nothing
native GetImageSizeY takes image whichImage returns real
native SetImageSizeY takes image whichImage, real sizeY returns nothing
native SetImageSize takes image whichImage, real size returns nothing
native SetImageSizeEx takes image whichImage, real sizeX, real sizeY returns nothing
native GetImageColour takes image whichImage returns integer
native IsImageRendered takes image whichImage returns boolean
native IsImageRenderAlways takes image whichImage returns boolean
native IsImageRenderAboveWater takes image whichImage returns boolean
native IsImageVisible takes image whichImage returns boolean
native GetImageConstantHeight takes image whichImage returns real
native GetImageTexture takes image whichImage returns string
native SetImageTexture takes image whichImage, string imagePath returns nothing
  1. Исправлена Критическая Ошибка с событиями OnDamaging/OnDamage, который происходил в очень неоптимизированных картах (проблема связана с плохим кодом Jass в этих картах).
    Пометка: причина была в виду С++ оптимизации, которая просто на просто очищала данные быстрее, чем они до конца были использованы.
  2. Исправлена критическая ощибка связанная с выделением магазинов/улучшения заклинаний героя/спелбуков и т.д.
    Пометка: данная ошибка была добавлена в виду "велосипедного" метода имплементации экспериментальной функции SetAbilityOrderId.
  3. Добавлена псевдо-поддержка этих JN нативных функций:
native JNDailySave takes string MapId, string UserId, string SecretKey, string Character, string DailyType returns string
native JNDailyCheckToday takes string MapId, string UserId, string SecretKey, string Character, string DailyType returns string
native JNDailyCheckTodayList takes string MapId, string UserId, string SecretKey, string Character, string DailyType returns string
native JNDailyCountWeek takes string MapId, string UserId, string SecretKey, string Character, string DailyType, string WeekDay returns string
native JNDailyCountWeekList takes string MapId, string UserId, string SecretKey, string Character, string DailyType, string WeekDay returns string
native JNDailyCountMonth takes string MapId, string UserId, string SecretKey, string Character, string DailyType returns string
native JNDailyCountMonthList takes string MapId, string UserId, string SecretKey, string Character, string DailyType returns string
23
Unryze, Это очень хорошо. Что то вроде "handlegroup", куда можно выбирать любые объекты и перебирать их по циклу или через For*****, ну или отдельные наборы для widget, agent.
23
nazarpunk, Но ведь Ujapi не Lua. Речь шла о предложении добавить конкретную функцию в Ujapi, для jass. (просто предложение, не обязательно для себя)
30
Но ведь Ujapi не Lua
Не вижу смысла юзать ujapi c jass.
23
nazarpunk, На вкус и цвет, как говорится)
30
На вкус и цвет, как говорится)
Вкус и цвет это про cjass/vjass/zinc/gui. Работа с lua объективно занимает меньше времени.
Вот тебе к примеру баянистый баян. Сравни с реализацией на jass:
local x, y = GetSpellTargetX(), GetSpellTargetY()
TimerStart(CreateTimer(), 1, false, function()
    print(x, y)
end)
20
Но ведь Ujapi не Lua
Не вижу смысла юзать ujapi c jass.
Будешь много потыкивать ножами в жасс, я приложу усилия и прихлопну луа. :D
А если без шуток, то хватит уже переманивать людей на этот... этот "отличный" язык, у него есть свои проблемы, да и функционал, который понадобится далеко не всем.
EugeAl:
nazarpunk, На вкус и цвет, как говорится)
Именно.
nazarpunk:
На вкус и цвет, как говорится)
Вкус и цвет это про cjass/vjass/zinc/gui. Работа с lua объективно занимает меньше времени.
Вот тебе к примеру баянистый баян. Сравни с реализацией на jass:
local x, y = GetSpellTargetX(), GetSpellTargetY()
TimerStart(CreateTimer(), 1, false, function()
    print(x, y)
end)
Уже не раз писал, но анонимки - это круто до поры до времени и клепать их везде - не самая лучшая затея, ибо есть моменты, когда обыкновенный коллбек будет удобнее, ну или написать краткую "библиотеку", которая будет эти обработки сама заносить в данные ХТ и спокойно можно плодить что душе угодно, лишь бы была от этого польза.
Сойдёмся на том, что кому что удобнее, пусть то и использует, главное, чтобы не cjass.
20
Имхо, очень нужна функция
native EnumDestructablesInRange takes real x, real y, real radius, boolexpr filter, code actionFunc returns nothing, чтобы без областей обойтись. Она возможна?
Это было проще, чем я ожидал, найду оффсеты нужные на переборщики и думаю даже для предметов это добавлю, чего уж там.
Загруженные файлы
20
Unryze, а что с cjass не так? Совсем неюзабельный код выходит?
23
Unryze, О, замечательно! Да, для предметов тоже можно, но, правда, не представляю, в каких ситуациях это потребуется.
32
Unryze, а что с cjass не так? Совсем неюзабельный код выходит?
Кроме этого, зачастую фишечками cjass пользоватся не умеют норм народ, и делает только хуже код, не говоря про то что сжасс оптимизатор может ломать код, касаетсяв первую очередь карт с мемхаком - ибо считает функции тайпкасты и паразитные функции для смены типа - мусором и удаляет\оптимизирует, результат - ниче не работает на ровном месте.
30
Уже не раз писал, но анонимки
передачу переменных через замыкание ты решил не замечать...

а что с cjass не так?
Зависимость результата компиляции от фазы Луны.
20
Unryze, О, замечательно! Да, для предметов тоже можно, но, правда, не представляю, в каких ситуациях это потребуется.
Код имеет ту же логику, потому и решил добавить.
Kokomi:
Unryze, а что с cjass не так? Совсем неюзабельный код выходит?
Безбожное раздувание, которое заставит vJass прикурить, ну и в целом парсер, который мягко говоря конфликтует со всем, что дышит.
nazarpunk:
Уже не раз писал, но анонимки
передачу переменных через замыкание ты решил не замечать...
Я её заметил и я тебе с уверенностью скажу, что это даже близко не весомый аргумент, повторюсь, это удобно - да, но не является чем-то необходимым.
nazarpunk:

а что с cjass не так?
Зависимость результата компиляции от фазы Луны.
И с каждой фазой % успеха снижается. :D
20
Что-то меня занесло, но именно в ту самую сторону. Soon (tm).
23
Unryze, Да ладно, круто же! С такими нативками можно любые объекты на карте ловить и преобразовывать)
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.15.67

  1. Новые Константы
constant abilityintegerfield ABILITY_IF_BUTTON_HOTKEY_ALL = ConvertAbilityIntegerField('ahtk') Set only
constant abilitybooleanfield ABILITY_BF_HOMING = ConvertAbilityBooleanField('amho')
constant itemintegerfield ITEM_IF_TINTING_COLOR = ConvertItemIntegerField('icol')
constant itemintegerfield ITEM_IF_LEVEL_UNCLASSIFIED = ConvertItemIntegerField('ilvo')
constant itemintegerfield ITEM_IF_GOLD_COST = ConvertItemIntegerField('igol')
constant itemintegerfield ITEM_IF_LUMBER_COST = ConvertItemIntegerField('ilum')
constant itemintegerfield ITEM_IF_PRIORITY = ConvertItemIntegerField('ipri')
constant itemintegerfield ITEM_IF_STOCK_REPLENISH_INTERVAL = ConvertItemIntegerField('istr')
constant itemintegerfield ITEM_IF_STOCK_START_DELAY = ConvertItemIntegerField('isst')
constant itembooleanfield ITEM_BF_IGNORE_COOLDOWN = ConvertItemBooleanField('iicd')
constant itembooleanfield ITEM_BF_VALID_FOR_TRANSFORMATION = ConvertItemBooleanField('imor')
constant itemrealfield ITEM_RF_SELECTION_SIZE = ConvertItemRealField('issc')
constant itemstringfield ITEM_SF_NAME = ConvertItemStringField('unam')
constant itemstringfield ITEM_SF_DESCRIPTION = ConvertItemStringField('ides')
constant itemstringfield ITEM_SF_TOOLTIP_NORMAL = ConvertItemStringField('utip')
constant itemstringfield ITEM_SF_TOOLTIP_EXTENDED = ConvertItemStringField('utub')
constant unitintegerfield ITEM_IF_GOLD_COST = ConvertItemIntegerField('igol')
constant unitintegerfield ITEM_IF_LUMBER_COST = ConvertItemIntegerField('ilum')
constant unitintegerfield ITEM_IF_STOCK_MAXIMUM = ConvertItemIntegerField('isto')
constant unitintegerfield UNIT_IF_TINTING_COLOR = ConvertUnitIntegerField('ucol')
constant unitintegerfield UNIT_IF_PROPER_NAMES_COUNT = ConvertUnitIntegerField('upru') Get Only
constant unitrealfield UNIT_RF_SIGHT_RADIUS_DAY = ConvertUnitRealField('usid')
constant unitrealfield UNIT_RF_SIGHT_RADIUS_NIGHT = ConvertUnitRealField('usin')
constant unitstringfield UNIT_SF_TOOLTIP_NORMAL = ConvertUnitStringField('utip')
constant unitstringfield UNIT_SF_TOOLTIP_EXTENDED = ConvertUnitStringField('utub')
constant unitstringfield UNIT_SF_PROPER_NAME = ConvertUnitStringField('uprn')
  1. Новые Нативные Функции:
native GetHandleReferenceCount takes handle whichHandle returns integer
native GetHandleBaseTypeId takes handle whichHandle returns integer this returns '+w3u' from unit, if it was passed as handle, and so on.
native GetHandleBaseTypeName takes handle whichHandle returns string this returns CUnit from unit, if it was passed as handle, and so on.
native GetFilterHandle takes nothing returns handle
native GetEnumHandle takes nothing returns handle
native EnumHandlesOfType takes integer handleBaseTypeId, boolexpr filter, code handlerFunc returns nothing
native SetImageOrigin takes image whichImage, real origin returns nothing
native SetAbilityRemainingCooldown takes ability whichAbility, real cooldown returns boolean
native SetUnitPointValueByType takes integer unitType, integer newPointValue returns nothing
native EnumDestructablesInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native EnumItemsInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native GetTriggerSpecialEffect takes nothing returns effect
native GetFilterSpecialEffect takes nothing returns effect
native GetEnumSpecialEffect takes nothing returns effect
native EnumSpecialEffectsInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native GetTriggerTrackable takes nothing returns trackable
native GetFilterTrackable takes nothing returns trackable
native GetEnumTrackable takes nothing returns trackable
native EnumTrackablesInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native IsMissileAlive takes missile whichMissile returns boolean
native GetFilterMissile takes nothing returns missile
native GetEnumMissile takes nothing returns missile
native EnumMissilesInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native ResetAbilityFieldData takes ability whichAbility returns boolean Restores original ability data, meaning it reverts any and all changes made by Field API. Returns true if reset was needed.
native GetUnitAttackRemainingDamagePoint takes unit whichUnit returns real
native SetUnitAttackRemainingDamagePoint takes unit whichUnit real time returns nothing
native GetUnitAttackRemainingBackswing takes unit whichUnit returns real
native SetUnitAttackRemainingBackswing takes unit whichUnit real time returns nothing
  1. Удалены все "дубликаты" нативных функций типа GetAbilityBaseManaCostById, они теперь заменены API инстанса/полей. Список удалённых нативных функций:
Ability API
native GetAbilityBaseManaCostById takes integer aid, integer level returns integer
native SetAbilityBaseManaCostById takes integer aid, integer level, integer manaCost returns nothing
native GetAbilityBaseCooldownById takes integer aid, integer level returns real
native SetAbilityBaseCooldownById takes integer aid, integer level, real cooldown returns nothing
native GetAbilityBaseHotkeyById takes integer aid returns oskeytype
native SetAbilityBaseHotkeyById takes integer aid, oskeytype whichKey returns nothing
native GetAbilityBaseUnHotkeyById takes integer aid returns oskeytype
native SetAbilityBaseUnHotkeyById takes integer aid, oskeytype whichKey returns nothing
native GetAbilityBaseResearchHotkeyById takes integer aid returns oskeytype
native SetAbilityBaseResearchHotkeyById takes integer aid, oskeytype whichKey returns nothing
native GetAbilityBaseEffectSoundById takes integer aid returns string
native SetAbilityBaseEffectSoundById takes integer aid, string text returns nothing
native GetAbilityBaseGlobalMessageById takes integer aid returns string
native SetAbilityBaseGlobalMessageById takes integer aid, string text returns nothing
native GetAbilityBaseGlobalSoundById takes integer aid returns string
native SetAbilityBaseGlobalSoundById takes integer aid, string text returns nothing
native GetAbilityBaseButtonXById takes integer aid returns integer
native SetAbilityBaseButtonXById takes integer aid, integer positionX returns nothing
native GetAbilityBaseButtonYById takes integer aid returns integer
native SetAbilityBaseButtonYById takes integer aid, integer positionY returns nothing
native GetAbilityBaseUnButtonXById takes integer aid returns integer
native SetAbilityBaseUnButtonXById takes integer aid, integer positionX returns nothing
native GetAbilityBaseUnButtonYById takes integer aid returns integer
native SetAbilityBaseUnButtonYById takes integer aid, integer positionY returns nothing
native GetAbilityBaseResearchButtonXById takes integer aid returns integer
native SetAbilityBaseResearchButtonXById takes integer aid, integer positionX returns nothing
native GetAbilityBaseResearchButtonYById takes integer aid returns integer
native SetAbilityBaseResearchButtonYById takes integer aid, integer positionY returns nothing
native GetAbilityBaseMissileSpeedById takes integer aid returns real
native SetAbilityBaseMissileSpeedById takes integer aid, real missileSpeed returns nothing
native GetAbilityBaseMissileArcById takes integer aid returns real
native SetAbilityBaseMissileArcById takes integer aid, real missileArc returns nothing
native GetAbilityBaseIsMissileHomingById takes integer aid returns boolean
native SetAbilityBaseIsMissileHomingById takes integer aid, boolean ishoming returns nothing
native GetAbilityBaseSpellDetailsById takes integer aid returns integer
native SetAbilityBaseSpellDetailsById takes integer aid, integer level returns nothing
native GetAbilityBaseTipById takes integer aid, integer level returns string
native SetAbilityBaseTipById takes integer aid, integer level, string text returns nothing
native GetAbilityBaseUnTipById takes integer aid, integer level returns string
native SetAbilityBaseUnTipById takes integer aid, integer level, string text returns nothing
native GetAbilityBaseUberTipById takes integer aid, integer level returns string
native SetAbilityBaseUberTipById takes integer aid, integer level, string text returns nothing
native GetAbilityBaseUnUberTipById takes integer aid, integer level returns string
native SetAbilityBaseUnUberTipById takes integer aid, integer level, string text returns nothing
native SetAbilityBaseHotkeyByIdEx takes integer aid, oskeytype whichKey returns nothing
Item API
native GetItemBaseNameById takes integer itemId returns string
native SetItemBaseNameById takes integer itemId, string name returns nothing
native GetItemBaseDescriptionById takes integer itemId returns string
native SetItemBaseDescriptionById takes integer itemId, string name returns nothing
native GetItemBaseIconById takes integer itemId returns string
native SetItemBaseIconById takes integer itemId, string path returns nothing
native GetItemBaseHotkeyById takes integer itemId returns oskeytype
native SetItemBaseHotkeyById takes integer itemId, oskeytype whichKey returns nothing
native GetItemBaseTipById takes integer itemId returns string
native SetItemBaseTipById takes integer itemId, string tip returns nothing
native GetItemBaseUberTipById takes integer itemId returns string
native SetItemBaseUberTipById takes integer itemId, string tip returns nothing
native GetItemBaseGoldCostById takes integer itemId returns integer
native SetItemBaseGoldCostById takes integer itemId, integer goldcost returns nothing
native GetItemBaseLumberCostById takes integer itemId returns integer
native SetItemBaseLumberCostById takes integer itemId, integer lumbercost returns nothing
native GetItemBaseStockMaximumById takes integer itemId returns integer
native SetItemBaseStockMaximumById takes integer itemId, integer stockMax returns nothing
native GetItemBaseStockReplenishIntervalById takes integer itemId returns real
native SetItemBaseStockReplenishIntervalById takes integer itemId, real replenishInterval returns nothing
native GetItemBaseStockStartDelayById takes integer itemId returns real
native SetItemBaseStockStartDelayById takes integer itemId, real stockStartDelay returns nothing
native GetItemBasePriorityById takes integer itemId returns integer
native SetItemBasePriorityById takes integer itemId, integer priority returns nothing
native GetItemBaseLevelById takes integer itemId returns integer
native SetItemBaseLevelById takes integer itemId, integer level returns nothing
native GetItemBaseOldLevelById takes integer itemId returns integer
native SetItemBaseOldLevelById takes integer itemId, integer oldlevel returns nothing
native GetItemBaseClassificationById takes integer itemId returns integer
native SetItemBaseClassificationById takes integer itemId, integer classifictaionId returns nothing
native GetItemBaseIsMorphById takes integer itemId returns boolean
native SetItemBaseIsMorphById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsPickRandomById takes integer itemId returns boolean
native SetItemBaseIsPickRandomById takes integer itemId, boolean flag returns nothing
native GetItemBaseChargesById takes integer itemId returns integer
native SetItemBaseChargesById takes integer itemId, integer charges returns nothing
native GetItemBaseCooldownIdById takes integer itemId returns integer
native SetItemBaseCooldownIdById takes integer itemId, integer cooldownId returns nothing
native GetItemBaseIsIgnoreCooldownById takes integer itemId returns boolean
native SetItemBaseIsIgnoreCooldownById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsPowerUpById takes integer itemId returns boolean
native SetItemBaseIsPowerUpById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsPawnableById takes integer itemId returns boolean
native SetItemBaseIsPawnableById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsUsableById takes integer itemId returns boolean
native SetItemBaseIsUsableById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsPerishableById takes integer itemId returns boolean
native SetItemBaseIsPerishableById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsDroppableById takes integer itemId returns boolean
native SetItemBaseIsDroppableById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsDroppableOnDeathById takes integer itemId returns boolean
native SetItemBaseIsDroppableOnDeathById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsSellableById takes integer itemId returns boolean
native SetItemBaseIsSellableById takes integer itemId, boolean flag returns nothing
Unit API
native GetUnitBasePrimaryStatById takes integer unitTypeId returns heroattribute
native SetUnitBasePrimaryStatById takes integer unitTypeId, heroattribute whichHeroAttribute returns nothing
native GetUnitBaseGoldCostById takes integer unitTypeId returns integer
native SetUnitBaseGoldCostById takes integer unitTypeId, integer goldCost returns nothing
native GetUnitBaseDaySightById takes integer unitTypeId returns real
native SetUnitBaseDaySightById takes integer unitTypeId, real daySight returns nothing
native GetUnitBaseNightSightById takes integer unitTypeId returns real
native SetUnitBaseNightSightById takes integer unitTypeId, real nightSight returns nothing
native GetUnitBaseColourById takes integer unitTypeId returns integer
native SetUnitBaseColourById takes integer unitTypeId, integer colour returns nothing
native GetUnitBaseColourAById takes integer unitTypeId returns integer
native SetUnitBaseColourAById takes integer unitTypeId, integer colourA returns nothing
native GetUnitBaseColourRById takes integer unitTypeId returns integer
native SetUnitBaseColourRById takes integer unitTypeId, integer colourR returns nothing
native GetUnitBaseColourGById takes integer unitTypeId returns integer
native SetUnitBaseColourGById takes integer unitTypeId, integer colourG returns nothing
native GetUnitBaseColourBById takes integer unitTypeId returns integer
native SetUnitBaseColourBById takes integer unitTypeId, integer colourB returns nothing
native GetUnitBaseNameById takes integer unitTypeId returns string
native SetUnitBaseNameById takes integer unitTypeId, string name returns nothing
native GetUnitBaseProperNameById takes integer unitTypeId, integer properNameIndex returns string
native SetUnitBaseProperNameById takes integer unitTypeId, integer properNameIndex, string properName returns nothing
native GetUnitBaseDescriptionById takes integer unitTypeId returns string
native SetUnitBaseDescriptionById takes integer unitTypeId, string name returns nothing
native GetUnitBaseModelById takes integer unitTypeId returns string
native SetUnitBaseModelById takes integer unitTypeId, string modelName returns nothing
native GetUnitBasePortraitById takes integer unitTypeId returns string
native SetUnitBasePortraitById takes integer unitTypeId, string portraitName returns nothing
native GetUnitBaseHotkeyById takes integer unitTypeId returns oskeytype
native SetUnitBaseHotkeyById takes integer unitTypeId, oskeytype whichKey returns nothing
native GetUnitBaseIconById takes integer unitTypeId returns string
native SetUnitBaseIconById takes integer unitTypeId, string name returns nothing
native GetUnitBaseAwakenTipById takes integer unitTypeId returns string
native SetUnitBaseAwakenTipById takes integer unitTypeId, string awakenTip returns nothing
native GetUnitBaseTipById takes integer unitTypeId returns string
native SetUnitBaseTipById takes integer unitTypeId, string tip returns nothing
native GetUnitBaseUberTipById takes integer unitTypeId returns string
native SetUnitBaseUberTipById takes integer unitTypeId, string uberTip returns nothing
native GetUnitBaseReviveTipById takes integer unitTypeId returns string
native SetUnitBaseReviveTipById takes integer unitTypeId, string reviveTip returns nothing
native GetUnitBaseShadowTexById takes integer unitTypeId returns string
native SetUnitBaseShadowTexById takes integer unitTypeId, string shadowTexture returns nothing
native GetUnitBaseMissileArtById takes integer unitTypeId, integer attackIndex returns string
native SetUnitBaseMissileArtById takes integer unitTypeId, integer attackIndex, string missleArt returns nothing
native GetUnitBaseMissileSpeedById takes integer unitTypeId, integer attackIndex returns real
native SetUnitBaseMissileSpeedById takes integer unitTypeId, integer attackIndex, real realValue returns nothing
native GetUnitBaseMissileArcById takes integer unitTypeId, integer attackIndex returns real
native SetUnitBaseMissileArcById takes integer unitTypeId, integer attackIndex, real realValue returns nothing
native GetUnitBaseSelectionScaleById takes integer unitTypeId returns real
native SetUnitBaseSelectionScaleById takes integer unitTypeId, real realValue returns nothing
  1. Все SetAbilityField теперь по-настоящему следуют логике инстансирования, что значит, что изменение любых данных, включая UI будут уникальны для этого заклинания, а не изменны для всх.
  2. Прошлая функция SetImageOrigin изменена на SetImageOriginEx.
  3. Исправлена не совсем рабочая нативная функция EXSetAbilityState.
  4. Исправлено сломанное отключение для переключаемых заклинаний.
    Пометка: эта проблема всё так же была связана с новым экспериментальным методом SetAbilityOrderId... :(
  5. Добавлена внутренняя обработка полей:
ABILITY_SLF_CASTER
ABILITY_SLF_TARGET
ABILITY_SLF_SPECIAL
ABILITY_SLF_EFFECT
ABILITY_SLF_AREA_EFFECT
ABILITY_SLF_LIGHTNING_EFFECTS
ABILITY_SLF_MISSILE_ART
ABILITY_SLF_TOOLTIP_LEARN
ABILITY_SLF_TOOLTIP_LEARN_EXTENDED
ABILITY_SLF_TOOLTIP_NORMAL
ABILITY_SLF_TOOLTIP_TURN_OFF
ABILITY_SLF_TOOLTIP_NORMAL_EXTENDED
ABILITY_SLF_TOOLTIP_TURN_OFF_EXTENDED
  1. Изменены нативные функции юнитов:
Удалены:
SetUnitAttackState
UnitCancelCurrentAttackByIndex
Изменены:
GetUnitNextAttackTimeStampByIndex -> GetUnitAttackRemainingCooldown | Now it returns actual remaining time.
SetUnitNextAttackTimeStampByIndex -> SetUnitAttackRemainingCooldown | Now it sets actual remaining time.
UnitResetAttackCooldownByIndex -> UnitResetAttack
UnitAddExtraAttackByIndex -> UnitFinishAttack
Добавлены:
native GetUnitAttackRemainingDamagePoint takes unit whichUnit returns real
native SetUnitAttackRemainingDamagePoint takes unit whichUnit real time returns nothing
native GetUnitAttackRemainingBackswing takes unit whichUnit returns real
native SetUnitAttackRemainingBackswing takes unit whichUnit real time returns nothing
  1. Добавлен новый "Dev Mode" режим для UjAPI.
    Пометка: включение этого режима, даст UjAPI возможность выписывать в консоль всевозможные Jass ошибки (если карта имеет синтаксические ошибки в Jass) или же ошибки с файлами.
23
Unryze, Предложение!
Возможно ли создать функцию
native GetArrayIndex takes string ArrayName, handle Object, integer IndexMin, integer IndexMax returns integer,
С помощью которой можно получить индекс объекта, записанного в массив ArrayName в диапазоне min-max при его наличии там? Например, для использования этого индекса, если в карте есть подобие базы данных, с несколькими массивами, или для определения номера игрока, итд, итп.
20
Unryze, Предложение!
Возможно ли создать функцию
native GetArrayIndex takes string ArrayName, handle Object, integer IndexMin, integer IndexMax returns integer,
С помощью которой можно получить индекс объекта, записанного в массив ArrayName в диапазоне min-max при его наличии там? Например, для использования этого индекса, если в карте есть подобие базы данных, с несколькими массивами, или для определения номера игрока, итд, итп.
Это ужасный велосипед, но да, реально. Но я не пойму зачем такие извращения, хоть убей.
Хештаблица - чем не угодила? :(
30
Это ужасный велосипед, но да, реально. Но я не пойму зачем такие извращения, хоть убей.
Потому что нельзя массив в функцию передать и посему для каждого массива придётся одинаковую функцию костылить.
20
Это ужасный велосипед, но да, реально. Но я не пойму зачем такие извращения, хоть убей.
Потому что нельзя массив в функцию передать и посему для каждого массива придётся одинаковую функцию костылить.
А можно пример, где нужно передавать массив в функцию, который реально применим в реалиях Вар 3. И я повторю вопрос, что мешает использовать хештаблицу, которую можно передавать в функции...
23
Unryze, Да, это велосипед, но он требуется. Допустим, у героя имеется комплект абилок, при этом каждая из абилок работает на коде и состоит из нескольких стандартных абилок. Для простого кода требуется бд, из нескольких массивов, в каждом из которых записаны равкоды абилок, в одинаковой последовательности. Код определяет индекс в одном массиве, а потом его использует для взятия данных из остальных массивов.
Хештаблица - да, она может, но если абилок таких 50? 50 раз по циклу придётся вызвать функцию извлечения данных из Хештаблицы, для сравнения. А вызовы более ресурсозатратные, чем просто обращение к переменным. А в случае нативки достаточно 1 раз её вызвать, и всё, в коде она больше не потребуется.
Да, на джассе можно сделать подобное, как сказал nazarpunk, но это костыльно.
20
Unryze, Да, это велосипед, но он требуется. Допустим, у героя имеется комплект абилок, при этом каждая из абилок работает на коде и состоит из нескольких стандартных абилок. Для простого кода требуется бд, из нескольких массивов, в каждом из которых записаны равкоды абилок, в одинаковой последовательности. Код определяет индекс в одном массиве, а потом его использует для взятия данных из остальных массивов.
Хештаблица - да, она может, но если абилок таких 50? 50 раз по циклу придётся вызвать функцию извлечения данных из Хештаблицы, для сравнения. А вызовы более ресурсозатратные, чем просто обращение к переменным. А в случае нативки достаточно 1 раз её вызвать, и всё, в коде она больше не потребуется.
Да, на джассе можно сделать подобное, как сказал nazarpunk, но это костыльно.
Разница будет не такая существенная, да и твой юзкейс возвращает элемент, что можно вернуть хештаблицей, и каждый вызов элемента из массива всё-равно нужно вызывать, так что ты сам не понял что попросил. :(
Поясняю, можно передать хештаблицу и родительский ключь, раз на то пошло и сократить количество вызовов, но на деле, эта «ресурсоёмкость» повлияет ровным счётом ни на что.
Прекратите уже извращаться и выдумывать псевдо-более-быстрые велосипеды, если бы это реально было бы существенно быстрее, я бы это уже сам форсировал бы, но это не так.
30
Для простого кода требуется бд, из нескольких массивов, в каждом из которых записаны равкоды абилок, в одинаковой последовательности.
Сделать из одномерного массива n-мерный религия не позволяет?
23
Unryze, ок, я просто предложил. Нет - нет, да - да.
nazarpunk, можно конечно, у себя так и сделал, но определять индекс всё равно требуется. А несколько массивов просто для примера описал.
30
EugeAl, при инициализаци проести индексацию и положить индексы в хт?
23
nazarpunk, но у меня нет хт, только "двумерный" массив ( не люблю хт) ). Что значит провести индексацию? Заполнить массив? так это вначале делается.
30
не люблю хт
Кто тебе дохтор?
Получать элемент за О(n) всяко лучше чем за O(1)
Что значит провести индексацию?
Это значит положить в хт индекс элемента в массиве, чтоб можно было достать его без перебора.
23
nazarpunk, ок, а как его привязать например к равкоду абилки? Чтобы при касте абилки код сразу распознал её индекс в массиве, ведь без перебора это не определить. Что тогда нужно загрузить/ выгружать в/из хт? Не скажется ли это на фпс/производительности?
30
ок, а как его привязать например к равкоду абилки?
Равкод это число.
SaveInteger(Таблица, Равкод, 0, ИндексМассива)
Не скажется ли это на фпс/производительности?
Перебор массива гораздо производительней получения значения таблицы.
23
nazarpunk, Что ж, интересная концепция. Пожалуй, можно пробовать. Но вот вопрос в рациональности - если требуется перебрать всего 60 значений максимум, имеет ли такая оптимизация смысл?
30
Но вот вопрос в рациональности - если требуется перебрать всего 60 значений максимум, имеет ли такая оптимизация смысл?
Если есть возможность не перебирать, то зачем перебирать?
23
nazarpunk, может быть там внутри хт идёт свой код перебора, который в случае с маленьким количеством значений ещё хуже перебора массива, хт ведь не волшебным образом определяет и ищет данные внутри себя.
20
nazarpunk, может быть там внутри хт идёт свой код перебора, который в случае с маленьким количеством значений ещё хуже перебора массива, хт ведь не волшебным образом определяет и ищет данные внутри себя.
500 нс разницы (700 против 200), если ты делаешь чтения хотя бы 1000 раз в 1 функции, тогда да, ты ощутишь это... Добавь StringHash, вот тогда уже 400 переборов будет проявляться хоть как-то. Но опять же, ты эту скорость почти нигде не почувствуешь, пока конкретно что-то не перегрузишь.
23
Unryze, Спасибо за пояснение. Значит, с мелким количеством значений разницы не будет.
20
Unryze, Спасибо за пояснение. Значит, с мелким количеством значений разницы не будет.
Ну, всегда можешь тестировать в отдельной карте (взять МемХак карту мою или UjAPI) и проверяй задержку и т.д. если оно тебе очень интересно. Но если изначально запланировать код максимально простым, то там "нагружать" будет толком нечему. Да и многое тяжёлое можно разгрузить/разделить и т.д.
23
Unryze, Можно конечно, спасибо за предложение) но мне в приоритете важнее не отловить микросекунд, а как оно скажется на фпс и визуале. Игрокам ведь до лампочки, что там и как сделано, лишь бы работало и глюков не было, и чтобы было интересно)
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.15.67

  1. Изменения Типов:
subanimtype теперь расширяет animtype, чтобы иметь доступ к новой нативной функции GetAnimationName для получения имени анимации по её индексу.
  1. Новые Константы:
constant itemstringfield ITEM_SF_ABILITY_LIST = ConvertItemStringField('iabi')
constant itemstringfield ITEM_SF_ICON = ConvertItemStringField('iico')
constant unitstringfield UNIT_SF_ICON_NORMAL = ConvertUnitStringField('uico')
constant unitstringfield UNIT_SF_ICON_SCORE_SCREEN = ConvertUnitStringField('ussi')
constant unitstringfield UNIT_SF_MODEL = ConvertUnitStringField('umdl')
constant unitstringfield UNIT_SF_PORTRAIT = ConvertUnitStringField('upor')
constant unitstringfield UNIT_SF_SPECIAL = ConvertUnitStringField('uspa')
constant unitstringfield UNIT_SF_TOOLTIP_AWAKEN = ConvertUnitStringField('uawt')
constant unitstringfield UNIT_SF_TOOLTIP_REVIVE = ConvertUnitStringField('utpr')
  1. Новые Нативные Функции:
native HandleToHandle takes handle h returns handle
native SaveHandle takes hashtable table, integer parentKey, integer childKey, handle whichHandle returns boolean
native SaveAttackTypeHandle takes hashtable table, integer parentKey, integer childKey, attacktype whichAttackType returns boolean
native SaveDamageTypeHandle takes hashtable table, integer parentKey, integer childKey, damagetype whichDamageType returns boolean
native SaveWeaponTypeHandle takes hashtable table, integer parentKey, integer childKey, weapontype whichWeaponType returns boolean
native LoadHandle takes hashtable table, integer parentKey, integer childKey returns handle
native LoadAttackTypeHandle takes hashtable table, integer parentKey, integer childKey returns attacktype
native LoadDamageTypeHandle takes hashtable table, integer parentKey, integer childKey returns damagetype
native LoadWeaponTypeHandle takes hashtable table, integer parentKey, integer childKey returns weapontype
native GetAnimationName takes animtype whichAnim returns string
native QueueImmediateOrderById takes unit whichUnit, integer order returns boolean
native QueuePointOrderById takes unit whichUnit, integer order, real x, real y returns boolean
native QueueTargetOrderById takes unit whichUnit, integer order, widget targetWidget returns boolean
native QueueInstantPointOrderById takes unit whichUnit, integer order, real x, real y, widget instantTargetWidget returns boolean
native QueueInstantTargetOrderById takes unit whichUnit, integer order, widget targetWidget, widget instantTargetWidget returns boolean
native QueueBuildOrderById takes unit whichPeon, integer unitId, real x, real y returns boolean
native QueueNeutralImmediateOrderById takes player forWhichPlayer, unit neutralStructure, integer unitId returns boolean
native QueueNeutralPointOrderById takes player forWhichPlayer, unit neutralStructure, integer unitId, real x, real y returns boolean
native QueueNeutralTargetOrderById takes player forWhichPlayer, unit neutralStructure, integer unitId, widget target returns boolean
native GetUnitOrderCount takes unit whichUnit returns integer
native GetUnitOrderIdByIndex takes unit whichUnit, integer index returns integer
native UnitClearOrders takes unit whichUnit, boolean onlyQueued returns nothing
native UnitForceStopOrder takes unit whichUnit, boolean clearQueue returns nothing
  1. Исправлена ошибка JASS парсера, которая не отображала правильный текст ошибки.
  2. Исправлена ошибка случайно сломанной поддержки патча 1.27а.
  3. Переделана в очередной раз система обработки получения урона, которая ломалась при использовании CastTargetAbility внутри DAMAGING события.
  4. Переделан движок фреймов, который был случайно сломан в одном из предидущих обновлений.
18
Крашит при загрузке таблицы, Без лаунчера работает.
/ /! loaddata "data.slk"
Карты с UJApi могут запускаться на айкапе или ирине?
20
Borodach, карты разработанные с этими нативками работают только с лаунчером. Соответственно на iccup не поиграть. На боте надо при создании игры выбрать версию с лаунчером
18
Крашит при загрузке таблицы, Без лаунчера работает.
/ /! loaddata "data.slk"
Ошибся, совпало после добавления триггера
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.17.73

  1. Новые Типы:
    type minimapicon extends handle
    type commandbuttoneffect extends handle
  2. Новые Константы:
    constant unitrealfield UNIT_RF_COLLISION_SIZE = ConvertUnitRealField('ucol')
    constant originframetype ORIGIN_FRAME_CONSOLE_UI = ConvertOriginFrameType(18)
    constant originframetype ORIGIN_FRAME_PORTRAIT_TEXT = ConvertOriginFrameType(19)
    constant originframetype ORIGIN_FRAME_BUFF_BAR = ConvertOriginFrameType(20)
    constant originframetype ORIGIN_FRAME_BUFF_BAR_TEXT = ConvertOriginFrameType(21)
    constant originframetype ORIGIN_FRAME_BUFF_BAR_INDICATOR = ConvertOriginFrameType(22)
    constant originframetype ORIGIN_FRAME_TIME_OF_DAY_INDICATOR = ConvertOriginFrameType(23)
    constant originframetype ORIGIN_FRAME_LEADERBOARD = ConvertOriginFrameType(24)
    constant originframetype ORIGIN_FRAME_MULTIBOARD = ConvertOriginFrameType(25)
    constant originframetype ORIGIN_FRAME_INFO_BAR = ConvertOriginFrameType(26)
    constant originframetype ORIGIN_FRAME_COMMAND_BAR = ConvertOriginFrameType(27)
    constant originframetype ORIGIN_FRAME_RESOURCE_BAR = ConvertOriginFrameType(28)
    constant originframetype ORIGIN_FRAME_RESOURCE_BAR_TEXTURE = ConvertOriginFrameType(29)
    constant originframetype ORIGIN_FRAME_RESOURCE_BAR_TEXT = ConvertOriginFrameType(30)
    constant originframetype ORIGIN_FRAME_UPPERBUTTON_BAR = ConvertOriginFrameType(31)
    constant originframetype ORIGIN_FRAME_UPPERBUTTON_BAR_BUTTON = ConvertOriginFrameType(32)
    constant originframetype ORIGIN_FRAME_PEON_BAR = ConvertOriginFrameType(33)
    constant originframetype ORIGIN_FRAME_PLAYER_MESSAGE = ConvertOriginFrameType(34)
    constant originframetype ORIGIN_FRAME_UNIT_MESSAGE = ConvertOriginFrameType(35)
    constant originframetype ORIGIN_FRAME_CHAT_MESSAGE = ConvertOriginFrameType(36)
    constant originframetype ORIGIN_FRAME_TOP_MESSAGE = ConvertOriginFrameType(37)
    constant originframetype ORIGIN_FRAME_CHAT_EDITBAR = ConvertOriginFrameType(38)
    constant originframetype ORIGIN_FRAME_CINEMATIC_PANEL = ConvertOriginFrameType(39)
    constant originframetype ORIGIN_FRAME_COMMAND_BUTTON_COOLDOWN_INDICATOR = ConvertOriginFrameType(40)
    constant originframetype ORIGIN_FRAME_COMMAND_BUTTON_AUTOCAST_FRAME = ConvertOriginFrameType(41)
    constant originframetype ORIGIN_FRAME_COMMAND_BUTTON_CHARGES_FRAME = ConvertOriginFrameType(42)
    constant originframetype ORIGIN_FRAME_COMMAND_BUTTON_CHARGES_TEXT = ConvertOriginFrameType(43)
  3. Новые Нативные Функции:
    native MathRealMin takes real a, real b returns real
    native MathRealMax takes real a, real b returns real
    native MathRealSign takes real r returns integer
    native MathIntegerMin takes integer a, integer b returns integer
    native MathIntegerMax takes integer a, integer b returns integer
    native MathIntegerSign takes integer i returns integer
    native MathPointProjectionX takes real x, real angle, real distance returns real
    native MathPointProjectionY takes real y, real angle, real distance returns real
    native MathAngleBetweenPoints takes real fromX, real fromY, real toX, real toY returns real
    native MathDistanceBetweenPoints takes real fromX, real fromY, real toX, real toY returns real
    native MathAngleBetweenLocations takes location fromLoc, location toLoc returns real
    native MathDistanceBetweenLocations takes location fromLoc, location toLoc returns real
    native GetUnitZ takes unit whichUnit returns real
    native DisableUnitAbility takes unit whichUnit, integer abilityId, boolean hide, boolean disable returns nothing
    native EnableUnitAbility takes unit whichUnit, integer abilityId, boolean show, boolean enable returns nothing
    native GetUnitBuffByIndex takes unit whichUnit, integer index returns buff
    native SetSpecialEffectMatrixScale takes effect whichEffect, real x, real y, real z returns nothing\
    native SetMiniMapTexture takes string texturePath returns boolean
    native IsFrameRegion takes framehandle whichFrame returns boolean
    native IsFrameSimple takes framehandle whichFrame returns boolean
    native IsFrameComplex takes framehandle whichFrame returns boolean
  4. Добавлена упущенная константа UNIT_IF_LUMBER_COST.
  5. Добавлена упущенная константа UNIT_IF_HOTKEY.
  6. Добавлена упущенная константа UNIT_WEAPON_IF_ATTACK_WEAPON_TYPE.
  7. Исправлена критическая ошибка в нативных функциях полей при использовании UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC или UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED на юните ближнего боя.
  8. Исправлено неправильное значение в константе UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART.
  9. GetMouseScreenX и GetMouseScreenY теперь возвращают значения от .0 до 1. заместо .0 до .8 для X и .0 до .6 для Y.
  10. HideOriginFrames теперь ведёт себя почти идентично функции на Рефордже.
  11. UnitUnapplyUpdates и UnitApplyUpdates, слова Updates изменены на Upgrades, это была большая опечатка.
  12. Silence/UnsilenceAbility переименованы в Disable/EnableAbility.
  13. ITEM_IF_TINTING_COLOR значение изменено с icol на iclt.
  14. UNIT_IF_TINTING_COLOR значение изменено с ucol на uclt.
  15. Добавлены Blz нативные функции, часть из них - простые пустышки, но большая часть рабочая. Список рабочих/не пустышек функций:
    BlzGroupAddGroupFast
    BlzGroupRemoveGroupFast
    BlzGroupGetSize
    BlzGroupUnitAt
    BlzForceHasPlayer
    BlzGetTriggerPlayerMouseX
    BlzGetTriggerPlayerMouseY
    BlzGetTriggerPlayerMousePosition
    BlzGetTriggerPlayerMouseButton
    BlzSetAbilityTooltip
    BlzSetAbilityActivatedTooltip
    BlzSetAbilityExtendedTooltip
    BlzSetAbilityActivatedExtendedTooltip
    BlzSetAbilityResearchTooltip
    BlzSetAbilityResearchExtendedTooltip
    BlzGetAbilityTooltip
    BlzGetAbilityActivatedTooltip
    BlzGetAbilityExtendedTooltip
    BlzGetAbilityActivatedExtendedTooltip
    BlzGetAbilityResearchTooltip
    BlzGetAbilityResearchExtendedTooltip
    BlzSetAbilityIcon
    BlzGetAbilityIcon
    BlzSetAbilityActivatedIcon
    BlzGetAbilityActivatedIcon
    BlzGetAbilityPosX
    BlzGetAbilityPosY
    BlzSetAbilityPosX
    BlzSetAbilityPosY
    BlzGetAbilityActivatedPosX
    BlzGetAbilityActivatedPosY
    BlzSetAbilityActivatedPosX
    BlzSetAbilityActivatedPosY
    BlzGetUnitMaxHP
    BlzSetUnitMaxHP
    BlzGetUnitMaxMana
    BlzSetUnitMaxMana
    BlzSetItemName
    BlzSetItemDescription
    BlzGetItemDescription
    BlzSetItemTooltip
    BlzGetItemTooltip
    BlzSetItemExtendedTooltip
    BlzGetItemExtendedTooltip
    BlzSetItemIconPath
    BlzGetItemIconPath
    BlzSetUnitName
    BlzSetHeroProperName
    BlzGetUnitBaseDamage
    BlzSetUnitBaseDamage
    BlzGetUnitDiceNumber
    BlzSetUnitDiceNumber
    BlzGetUnitDiceSides
    BlzSetUnitDiceSides
    BlzGetUnitAttackCooldown
    BlzSetUnitAttackCooldown
    BlzSetSpecialEffectColorByPlayer
    BlzSetSpecialEffectColor
    BlzSetSpecialEffectAlpha
    BlzSetSpecialEffectScale
    BlzSetSpecialEffectPosition
    BlzSetSpecialEffectHeight
    BlzSetSpecialEffectTimeScale
    BlzSetSpecialEffectTime
    BlzSetSpecialEffectOrientation
    BlzSetSpecialEffectYaw
    BlzSetSpecialEffectPitch
    BlzSetSpecialEffectRoll
    BlzSetSpecialEffectX
    BlzSetSpecialEffectY
    BlzSetSpecialEffectZ
    BlzSetSpecialEffectPositionLoc
    BlzGetLocalSpecialEffectX
    BlzGetLocalSpecialEffectY
    BlzGetLocalSpecialEffectZ
    BlzPlaySpecialEffect
    BlzPlaySpecialEffectWithTimeScale
    BlzGetAnimName
    BlzGetUnitArmor
    BlzSetUnitArmor
    BlzUnitHideAbility
    BlzUnitDisableAbility
    BlzIsUnitSelectable
    BlzIsUnitInvulnerable
    BlzUnitInterruptAttack
    BlzGetUnitCollisionSize
    BlzGetAbilityManaCost
    BlzGetAbilityCooldown
    BlzSetUnitAbilityCooldown
    BlzGetUnitAbilityCooldown
    BlzGetUnitAbilityCooldownRemaining
    BlzEndUnitAbilityCooldown
    BlzStartUnitAbilityCooldown
    BlzGetUnitAbilityManaCost
    BlzSetUnitAbilityManaCost
    BlzGetLocalUnitZ
    BlzSetEventDamage
    BlzGetEventDamageTarget
    BlzGetEventAttackType
    BlzGetEventDamageType
    BlzGetEventWeaponType
    BlzSetEventAttackType
    BlzSetEventDamageType
    BlzSetEventWeaponType
    BlzGetEventIsAttack
    BlzGetUnitZ
    BlzGetOriginFrame
    BlzHideOriginFrames
    BlzConvertColor
    BlzLoadTOCFile
    BlzCreateFrame
    BlzCreateSimpleFrame
    BlzCreateFrameByType
    BlzDestroyFrame
    BlzFrameSetPoint
    BlzFrameSetAbsPoint
    BlzFrameClearAllPoints
    BlzFrameSetAllPoints
    BlzFrameSetVisible
    BlzFrameIsVisible
    BlzGetFrameByName
    BlzFrameGetName
    BlzFrameClick
    BlzFrameSetText
    BlzFrameGetText
    BlzFrameAddText
    BlzFrameSetTextSizeLimit
    BlzFrameGetTextSizeLimit
    BlzFrameSetTextColor
    BlzFrameSetFocus
    BlzFrameSetModel
    BlzFrameSetEnable
    BlzFrameGetEnable
    BlzFrameSetAlpha
    BlzFrameGetAlpha
    BlzFrameSetSpriteAnimate
    BlzFrameSetTexture
    BlzFrameSetScale
    BlzFrameSetTooltip
    BlzFrameCageMouse
    BlzFrameSetValue
    BlzFrameGetValue
    BlzFrameSetMinMaxValue
    BlzFrameSetStepSize
    BlzFrameSetSize
    BlzFrameSetVertexColor
    BlzFrameSetLevel
    BlzFrameSetParent
    BlzFrameGetParent
    BlzFrameGetHeight
    BlzFrameGetWidth
    BlzFrameSetFont
    BlzFrameSetTextAlignment
    BlzFrameGetChildrenCount
    BlzFrameGetChild
    BlzTriggerRegisterFrameEvent
    BlzGetTriggerFrame
    BlzGetTriggerFrameEvent
    BlzGetTriggerFrameValue
    BlzGetTriggerFrameText
    BlzTriggerRegisterPlayerSyncEvent
    BlzSendSyncData
    BlzGetTriggerSyncPrefix
    BlzGetTriggerSyncData
    BlzTriggerRegisterPlayerKeyEvent
    BlzGetTriggerPlayerKey
    BlzGetTriggerPlayerMetaKey
    BlzGetTriggerPlayerIsKeyDown
    BlzSetMousePos
    BlzGetLocalClientWidth
    BlzGetLocalClientHeight
    BlzIsLocalClientActive
    BlzGetMouseFocusUnit
    BlzChangeMinimapTerrainTex
    BlzGetSpecialEffectScale
    BlzSetSpecialEffectMatrixScale
    BlzResetSpecialEffectMatrix
    BlzGetUnitAbility
    BlzGetUnitAbilityByIndex
    BlzGetAbilityId
    BlzDisplayChatMessage
    BlzPauseUnitEx
    BlzFourCC2S
    BlzS2FourCC
    BlzSetUnitFacingEx
    BlzBitOr
    BlzBitAnd
    BlzBitXor
    BlzGetAbilityBooleanField
    BlzGetAbilityIntegerField
    BlzGetAbilityRealField
    BlzGetAbilityStringField
    BlzGetAbilityBooleanLevelField
    BlzGetAbilityIntegerLevelField
    BlzGetAbilityRealLevelField
    BlzGetAbilityStringLevelField
    BlzGetAbilityBooleanLevelArrayField
    BlzGetAbilityIntegerLevelArrayField
    BlzGetAbilityRealLevelArrayField
    BlzGetAbilityStringLevelArrayField
    BlzSetAbilityBooleanField
    BlzSetAbilityIntegerField
    BlzSetAbilityRealField
    BlzSetAbilityStringField
    BlzSetAbilityBooleanLevelField
    BlzSetAbilityIntegerLevelField
    BlzSetAbilityRealLevelField
    BlzSetAbilityStringLevelField
    BlzSetAbilityBooleanLevelArrayField
    BlzSetAbilityIntegerLevelArrayField
    BlzSetAbilityRealLevelArrayField
    BlzSetAbilityStringLevelArrayField
    BlzAddAbilityBooleanLevelArrayField
    BlzAddAbilityIntegerLevelArrayField
    BlzAddAbilityRealLevelArrayField
    BlzAddAbilityStringLevelArrayField
    BlzRemoveAbilityBooleanLevelArrayField
    BlzRemoveAbilityIntegerLevelArrayField
    BlzRemoveAbilityRealLevelArrayField
    BlzRemoveAbilityStringLevelArrayField
    BlzGetItemBooleanField
    BlzGetItemIntegerField
    BlzGetItemRealField
    BlzGetItemStringField
    BlzSetItemBooleanField
    BlzSetItemIntegerField
    BlzSetItemRealField
    BlzSetItemStringField
    BlzGetUnitBooleanField
    BlzGetUnitIntegerField
    BlzGetUnitRealField
    BlzGetUnitStringField
    BlzSetUnitBooleanField
    BlzSetUnitIntegerField
    BlzSetUnitRealField
    BlzSetUnitStringField
    BlzGetUnitWeaponBooleanField
    BlzGetUnitWeaponIntegerField
    BlzGetUnitWeaponRealField
    BlzGetUnitWeaponStringField
    BlzSetUnitWeaponBooleanField
    BlzSetUnitWeaponIntegerField
    BlzSetUnitWeaponRealField
    BlzSetUnitWeaponStringField
    BlzQueueImmediateOrderById
    BlzQueuePointOrderById
    BlzQueueTargetOrderById
    BlzQueueInstantPointOrderById
    BlzQueueInstantTargetOrderById
    BlzQueueBuildOrderById
    BlzQueueNeutralImmediateOrderById
    BlzQueueNeutralPointOrderById
    BlzQueueNeutralTargetOrderById
    BlzGetUnitOrderCount
    BlzUnitClearOrders
    BlzUnitForceStopOrder
23
Такой вопрос - как быть с патчингом ujapi? Допустим, человек начал делать карту на ujapi позапрошлой версии, написал много кода, а вышло обновление, где часть нативок удалена. Соответственно код у человека перестал работать, потому что вызывает старые нативки, а их не стало. Как быть с этим?
20
Такой вопрос - как быть с патчингом ujapi? Допустим, человек начал делать карту на ujapi позапрошлой версии, написал много кода, а вышло обновление, где часть нативок удалена. Соответственно код у человека перестал работать, потому что вызывает старые нативки, а их не стало. Как быть с этим?
Ручками править, как же ещё? Удаления нативок по идее уже завершены, ибо оставлять совсем бесполезные нативки не хотелось. Да и что World Editor что моя UjAPI в дев моде буквально будут указывать на какой строке не хватает функции.
23
Unryze, неудобно. Если у него удалённая нативка вызывается в коде в 50 местах, кучу кода править придётся... ну если удалений уже не будет, тогда ок)
30
Если у него удалённая нативка вызывается в коде в 50 местах, кучу кода править придётся...
Загруженные файлы
28
nazarpunk, ну так надо пробегаться по разным триггерам, всё равно неудобственно, и это если есть альтернатива, иначе придётся код переписывать
30
rsfghd, ну дык нечего работать в редакторе триггеров.
10
кучу кода править придётся...
Повторение, – мать учения! 🤠
20
Unryze, неудобно. Если у него удалённая нативка вызывается в коде в 50 местах, кучу кода править придётся... ну если удалений уже не будет, тогда ок)
А что ты предлагаешь? Не править косые названия и плодить клонов? И опять же, удалений было лишь 2, сейчас была мелкая правка. И если удаление нужно, значит что поделать придётся не только мне одному страдать.
23
Unryze, Честно говоря не знаю, что тут предложить...
20
Unryze, Честно говоря не знаю, что тут предложить...
Идеального решения к сожалению нет. А я - к сожалению тоже человек, ошибки допускать тоже могу. :(
23
Kokomi, о, нет, ещё долго до карт.)
Вообще я не про себя спрашивал, а про какого либо случайного человека, который будет использовать ujapi в своей карте.
Unryze, Да, здесь тяжело как то решить технически. Может быть у игровых студий есть какие то решения?
20
Kokomi, о, нет, ещё долго до карт.)
Вообще я не про себя спрашивал, а про какого либо случайного человека, который будет использовать ujapi в своей карте.
Unryze, Да, здесь тяжело как то решить технически. Может быть у игровых студий есть какие то решения?
У игровых студий решение простое, если надо удалить - удаляют. Кто будет церемониться с мододелами, либо будет фиаско в виде рефоржеда и Blz приписок.
23
либо будет фиаско в виде рефоржеда и Blz приписок.
а, ну да, яркий пример же есть, точно))
30
У игровых студий решение простое, если надо удалить - удаляют.
Сначала метят deprecated, а через несколько версий удаляют. Кто не успел, тот сам себе доктор.
20
У игровых студий решение простое, если надо удалить - удаляют.
Сначала метят deprecated, а через несколько версий удаляют. Кто не успел, тот сам себе доктор.
Пометка если в имени, то карта всё-равно сломается. А если помечать в комментариях, то кто будет их читать? Никто. :D
30
А если помечать в комментариях, то кто будет их читать?
В нормальных ЯП есть аннотации, и IDE сразу начинает варнами сыпать.
Загруженные файлы
20
А если помечать в комментариях, то кто будет их читать?
В нормальных ЯП есть аннотации, и IDE сразу начинает варнами сыпать.
Не самый правильный пример, ибо в ЯП есть неймспейсы, которыми можно "выпилить" устаревшие функции и т.д. Во всяких юнити/анриале и т.д. такое не получится сделать без костылей, да и там тоже не церемонятся на эту тему, оповещают на сайте, что будет выпилено и сразу выпиливают.
30
Во всяких юнити/анриале и т.д. такое не получится сделать без костылей
Ну я вот нагуглил аналог deprecated на С#. Он вроди с коробки есть, зачем костыли?
20
Во всяких юнити/анриале и т.д. такое не получится сделать без костылей
Ну я вот нагуглил аналог deprecated на С#. Он вроди с коробки есть, зачем костыли?
Ты опять приводишь примеры не связанные с джассом. Метод в С++ тоже можно объявить "устаревшим", а в джассе - это как сделаешь, магией? И ещё раз, когда что-то собираются удалить из движка (речь не об языках), то оно пишется что будет удалено и потом удаляется. Зайди на форум Unreal Engine что ли.
29
Можно просто сделать библиотеку deprecated.j как костыльный вариант, или написать компилятор куда функциональный чем jasshelper)
cJass
#include "deprecated.cj"
define {
deprecatedFunc(...) = freshFunc(...)
// ...
}
vJass
//!import "D:\\WC3Scripts\\deprecated.j"
library Deprecated
	constant	function deprecatedFunc takes <paremetrs> returns <value | nothing>
		<return|call> freshFunc( <paremetrs> ) | DoNothing()
	endfunction
endlibrary
Свой компилятор:
deprecated japi deprecatedNative1 replaced  freshNative1
deprecated japi deprecatedNative2(p1,p2,p3) replaced  freshNative2(p1,p2)
deprecated japi deprecatedNative3 remove
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.18.74

  1. Новые Константы:
constant originframetype ORIGIN_FRAME_CURSOR_FRAME = ConvertOriginFrameType(44)
  1. Новые Нативные Функции:
native BitwiseGetBit takes integer number, integer bitIndex returns integer
native BitwiseGetByte takes integer number, integer byteIndex returns integer
native StringCount takes string s, string whichString, boolean caseSensitive returns integer
native StringTrimLeft takes string s, boolean caseSensitive returns string
native StringTrimRight takes string s, boolean caseSensitive returns string
native StringTrim takes string s, boolean caseSensitive returns string
native StringReverse takes string s, boolean caseSensitive returns string
native StringReplace takes string s, string whichString, string replaceWith, boolean caseSensitive returns string
native StringInsert takes string s, string whichString, integer whichPosition, boolean caseSensitive returns string
native GetTriggerSyncPlayer takes nothing returns player this is simply mimicking GetTriggerPlayer, added for simplicity.
native IsTextTagVisible takes texttag whichTextTag returns boolean
native IsTextTagSuspended takes texttag whichTextTag returns boolean
native IsTextTagPermanent takes texttag whichTextTag returns real
native GetTextTagX takes texttag whichTextTag returns real
native SetTextTagX takes texttag whichTextTag, real x returns nothing
native GetTextTagY takes texttag whichTextTag returns real
native SetTextTagY takes texttag whichTextTag, real y returns nothing
native GetTextTagZ takes texttag whichTextTag returns real
native SetTextTagZ takes texttag whichTextTag, real z returns nothing
native GetTextTagHeight takes texttag whichTextTag returns real
native SetTextTagHeight takes texttag whichTextTag, real height returns nothing
native GetTextTagLocation takes texttag whichTextTag returns location
native SetTextTagPositionLocation takes texttag whichTextTag, location whichLocation returns nothing
native GetTextTagColour takes texttag whichTextTag returns integer
native GetTextTagAlpha takes texttag whichTextTag returns integer
native SetTextTagAlpha takes texttag whichTextTag, integer alpha returns nothing
native GetTextTagVelocityX takes texttag whichTextTag returns real
native SetTextTagVelocityX takes texttag whichTextTag, real velX returns nothing
native GetTextTagVelocityY takes texttag whichTextTag returns real
native SetTextTagVelocityY takes texttag whichTextTag, real velY returns nothing
native GetTextTagVelocityZ takes texttag whichTextTag returns real
native SetTextTagVelocityZ takes texttag whichTextTag, real velZ returns nothing
native GetTextTagAge takes texttag whichTextTag returns real
native GetTextTagLifespan takes texttag whichTextTag returns real
native GetTextTagFadepoint takes texttag whichTextTag returns real
native GetTextTagShadowColour takes texttag whichTextTag returns integer
native SetTextTagShadowColour takes texttag whichTextTag, integer colour returns nothing
native GetTextTagShadowAlpha takes texttag whichTextTag returns integer
native SetTextTagShadowAlpha takes texttag whichTextTag, integer alpha returns nothing
native GetTextTagText takes texttag whichTextTag returns string
  1. Добавлены недостающие константы из предыдущей версии.
  2. Версия UjAPI теперь прописывается в главном меню Warcraft.
  3. Добавлена опция "Load Library" в главную секцию. Это включает/выключает подгрузку UjAPI.mpq и нативных функций.
Пометка: эта опция по стандарту включена и смена этой опции на уже запущенном Warctaft не будет работать.
  1. Добавлена опция "Load Library" для секции LUA. Это включает/выключает подгрузку библиотеки war3_lua.dll.
Пометка: эта опция по стандарту выключена и смена этой опции на уже запущенном Warctaft не будет работать.
  1. Добавлена "CLI" обработка в UjAPI, теперь каждый последующий запуск приложения UjAPI будет просто на просто отправлять аргументы запуска в уже запущенное приложение.
Пример 1: "D:\Files\Work Files\Programming\uJAPI\Release\UjAPILauncher.exe" -ujapi "dev" -lua "dev console nowarnings" -multiwindow -window -loadfile "Maps\Test\WorldEditTestMap.w3x"
Пометка 1: Это выполнит UjAPI и включит его режим разработчика, а так же включит луа с заданными к ней параметрами, игра будет в мультиоконном режиме и в режиме окна. Затем будет запущена карта заданная в loadfile аргументе.
Пример 2 (полный): "D:\Files\Work Files\Programming\uJAPI\Release\UjAPILauncher.exe" -ujapi "dev" -lua "dev console nowarnings" -multiwindow -window -launch "Warcraft" -gamepath "D:\Games\Warcraft III TFT\war3.exe" -loadfile "Maps\Test\WorldEditTestMap.w3x"
Пометка 2: Это выполнит всё, что описано в Примере 1, однако если присутствуют (-gamepath или -editorpath) оно также "переопределит" путь игры/редактора основываясь на аргументах поданных в них.
  1. CLI команды:
Пометка: пояснения команд будут в скобочках, вот так - (информация).
-justdoupdate (просто на просто выполнит форсированное скачивание последней версии и выполнит автообновление UjAPI, остальные команды будут проигнорированы).
-ujapi (даёт возможность переопределения некоторых базовых настроек UjAPI, пример: -ujapi "dev"), "" (кавычки) обязательны!
noload (отключает подгрузку UjAPI.mpq и UjAPI нативных функций).
dev (включает режим разработчика, который также включит консоль).
-lua (даёт возможность переопределения некоторых базовых настроек war3_lua.dll, пример: -lua "dev console nowarnings"), "" (кавычки) обязательны!
dev (включает режим разработчика).
console (включает консоль для луа ошибок и так далее).
nowarnings (отключает некоторые внутренние ошибки типов).
-multiwindow (включает режим Multi-Window и загружает необходимый модуль).
-window (запустит приложение в оконном режиме).
-launch (даёт возможность переопределения/указания пути для запуска игры или редактора, по стандарту будет запускаться игра, пример: -launch "Editor"), "" (кавычки) обязательны!
-gamepath (переопределяет и использует путь игры заданный в UjAPI Launcher, пример: -gamepath "D:\Games\Warcraft III TFT\war3.exe"), "" (кавычки) обязательны!
-editorpath (переопределяет и использует путь редактора заданный в UjAPI Launcher, пример: -editorpath "D:\Programs\WC3 Tools\JNPG-R1.4-Prometheus-Edition\NewGen WE.exe"), "" (кавычки) обязательны!
-loadfile (повторяет 1 в 1 метод запуска карт, путь до карты для игры ВСЕГДА относителен пути игры, однако для редактора нужно указывать ПОЛНЫЙ путь до карты).
  1. Добавлена -loadfile команда для секции World Editor, однако путь до карты НЕ относителен пути игры, нужно указывать полный путь до карты.
  2. Добавлена опция "Load Library" в секции World Editor.
  3. Добавлена опция "Dev Mode" в секции World Editor.
Пометка: #10 и #11 работают точно так же как такие же опции в Warcraft 3.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.18.75

  1. Исправлены проблемы с полноэкранным режимом запуска игры.
20
у меня BlzSetUnitName фаталит.
Почти все эти функции фаталят, знаю. Это уже исправлено в будущей версии, думаю сегодня загружу. (Точнее функции, которые редактируют поля, а не прямо все-все).
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.19.78

  1. Новые Типы:
    type jassthread extends handle
  2. Новые Константы:
    constant widgetevent EVENT_WIDGET_DAMAGING = ConvertWidgetEvent(400)
    constant widgetevent EVENT_WIDGET_DAMAGED = ConvertWidgetEvent(401)
    constant abilityreallevelfield ABILITY_RLF_CAST_BACK_SWING = ConvertAbilityRealLevelField('acbs')
    constant abilityreallevelfield ABILITY_RLF_CAST_POINT = ConvertAbilityRealLevelField('acpt')
    constant unitintegerfield UNIT_IF_AGILITY_BONUS = ConvertUnitIntegerField('uag+') Get Only
    constant unitintegerfield UNIT_IF_INTELLIGENCE_BONUS = ConvertUnitIntegerField('uin+') Get Only
    constant unitintegerfield UNIT_IF_STRENGTH_BONUS = ConvertUnitIntegerField('ust+') Get Only
    constant unitrealfield UNIT_RF_HEALTH_FROM_BONUS_STRENGTH = ConvertUnitRealField('uhs+') Get Only
    constant unitrealfield UNIT_RF_MANA_FROM_BONUS_INTELLIGENCE = ConvertUnitRealField('umi+') Get Only
    constant unitrealfield UNIT_RF_DEFENSE_BONUS = ConvertUnitRealField('udf+') Get Only
    constant unitrealfield UNIT_RF_SPEED_BONUS = ConvertUnitRealField('umv+') Get Only
    constant unitweaponintegerfield UNIT_WEAPON_IF_ATTACK_DAMAGE_BONUS = ConvertUnitWeaponIntegerField('ud1+') Get Only | this is the + (Green) or - (Red) value next to attack.
    constant unitweaponrealfield UNIT_WEAPON_RF_ATTACK_SPEED_BONUS = ConvertUnitWeaponRealField('us1+') Get Only
  3. Новые Нативные Функции:
    Jass VM Natives
    native GetJassMainThread takes nothing returns jassthread
    native GetJassCurrentThread takes nothing returns jassthread
    native RunJassScriptEx takes string parentScriptFile, string helperScriptFile, string jassScriptFile returns jassthread
    native RunJassScript takes string helperScriptFile, string jassScriptFile returns jassthread
    native RunJassScriptSimple takes string jassScriptFile returns jassthread
    native StopJassThread takes jassthread thread returns boolean
    native GetJassGlobalInteger takes jassthread thread, string variableName returns integer
    native GetJassGlobalReal takes jassthread thread, string variableName returns real
    native GetJassGlobalString takes jassthread thread, string variableName returns string
    native GetJassGlobalHandle takes jassthread thread, string variableName returns handle
    native GetJassGlobalBoolean takes jassthread thread, string variableName returns boolean
    native SetJassGlobalInteger takes jassthread thread, string variableName, integer value returns boolean
    native SetJassGlobalReal takes jassthread thread, string variableName, real value returns boolean
    native SetJassGlobalString takes jassthread thread, string variableName, string value returns boolean
    native SetJassGlobalHandle takes jassthread thread, string variableName, handle value returns boolean
    native SetJassGlobalBoolean takes jassthread thread, string variableName, boolean value returns boolean

    native GetWidgetModel takes widget whichWidget returns string
    native TriggerRegisterWidgetEvent takes trigger whichTrigger, widget whichWidget, widgetevent whichWidgetEvent returns event
    native SetSpecialEffectPlayerColour takes effect whichEffect, playercolor color returns nothing
    native SetSpecialEffectMaterialTexture takes effect whichEffect, string textureName, integer materialId, integer textureIndex returns nothing
    native SetSpecialEffectTexture takes effect whichEffect, string textureName, integer textureIndex returns nothing
    native SetSpecialEffectReplaceableTexture takes effect whichEffect, string textureName, integer textureIndex returns nothing
    native SetTrackablePlayerColour takes trackable whichTrackable, playercolor color returns nothing
    native SetMissilePlayerColour takes missile whichMissile, playercolor color returns nothing
    native SetMissileMaterialTexture takes missile whichMissile, string textureName, integer materialId, integer textureIndex returns nothing
    native SetMissileTexture takes missile whichMissile, string textureName, integer textureIndex returns nothing
    native SetMissileReplaceableTexture takes missile whichMissile, string textureName, integer textureIndex returns nothing
    native SetFrameSpritePlayerColour takes framehandle whichFrame, playercolor color returns nothing
    native GetFrameSpriteAlpha takes framehandle whichFrame returns integer
    native SetFrameSpriteMaterialTexture takes framehandle whichFrame, string textureName, integer materialId, integer textureIndex returns nothing
    native SetFrameSpriteTexture takes framehandle whichFrame, string textureName, integer textureIndex returns nothing
    native SetFrameSpriteReplaceableTexture takes framehandle whichFrame, string textureName, integer textureIndex returns nothing
    native GetUnitInSelectionByIndex takes player whichPlayer, integer index returns unit
    native GetLastUnitInSelection takes player whichPlayer returns unit
  4. UNIT_IF_INTELLIGENCE теперь возвращает правильное значение.
  5. Добавлены эти поля во внутренний обработчик Get/SetUnitField:
    UNIT_IF_AGILITY_PERMANENT
    UNIT_IF_INTELLIGENCE_PERMANENT
    UNIT_IF_STRENGTH_PERMANENT
    UNIT_IF_AGILITY_WITH_BONUS
    UNIT_IF_INTELLIGENCE_WITH_BONUS
    UNIT_IF_STRENGTH_WITH_BONUS
  6. Добавлены эти поля во внутренний обработчик GetUnitField:
    UNIT_IF_AGILITY_BONUS
    UNIT_IF_INTELLIGENCE_BONUS
    UNIT_IF_STRENGTH_BONUS
    UNIT_RF_HEALTH_FROM_BONUS_STRENGTH
    UNIT_RF_MANA_FROM_BONUS_INTELLIGENCE
    UNIT_RF_DEFENSE_BONUS
    UNIT_RF_SPEED_BONUS
    UNIT_WEAPON_IF_ATTACK_DAMAGE_BONUS
    UNIT_WEAPON_RF_ATTACK_SPEED_BONUS
  7. Исправлено GetTriggerFrame возвращающее всегда null.
  8. BlzSetSpecialEffectColorByPlayer теперь закрашивает временные(командные) текстуры, как оно и должно было.
  9. Исправлена критическая ошибка со всеми BlzSetField.
  10. ABILITY_ILF_TARGET_TYPE добавлена во внутренний обработчик SetAbilityField.
  11. Исправлена критическая ошибка от ORIGIN_FRAME_BUFF_BAR_INDICATOR, добавлена проверка действительности, так как игра не создаёт сразу все индикаторы.
    Пояснение: игра по стандарту создаёт лишь 1 индикатор, затем, когда у игры нет "свободных" индикаторов, она создаёт ещё 1 вплоть до 7.
  12. Исправлены некоторые "опечатки" среди OSKEY_ переменных, причиной послужила моя мышка, которая устраивает дабл клик, потому при табуляциях, часть букв была удалена/заменена и так далее.
  13. Исправлено Missile API, оно "перестало работать" после поспешных исправлений/переделок.
  14. Исправлены BUFF_SF поля, теперь они возвращают реальное значение, а не "<null>".
  15. Добавлены эти поля Заклинаний во внутренний обработчик Get/SetAbilityField:
    ABILITY_RLF_CASTING_TIME
    ABILITY_RLF_CAST_BACK_SWING
    ABILITY_RLF_CAST_POINT.
23
Unryze, а что делает jassthread? Не совсем понимаю, для чего он и его нативки.
19
EugeAl, можешь свои потоки создавать. Что это даёт? Ну, допустим ты сможешь разбить код карты на несколько скриптов, а потом подключать их по-отдельности. Надеюсь, я правильно всё понял.
23
Ev3nt, а, понял. Только не понятно, зачем. Другое дело, если бы создавать внешний файл с кодом, типа bj, это да, имеет смысл. Особенно для кампаний.
20
EugeAl, это что то для тех, кто работал с прелоадом
20
EugeAl, можешь свои потоки создавать. Что это даёт? Ну, допустим ты сможешь разбить код карты на несколько скриптов, а потом подключать их по-отдельности. Надеюсь, я правильно всё понял.
Всё верно.
EugeAl:
Ev3nt, а, понял. Только не понятно, зачем. Другое дело, если бы создавать внешний файл с кодом, типа bj, это да, имеет смысл. Особенно для кампаний.
Позволяет сделать пресеты (отдельно живущий код и т.д.) и не захламлять общий код, подгрузил нужный скрипт, выполнил - отключил когда нужно.
По большей части я это добавил для избавления от косого прелоада ну и просто потому, что могу (а если точнее, чего добру пропадать?)
EugeAl, это что то для тех, кто работал с прелоадом
Угу.
18
BlzFrameGetChild(ORIGIN_FRAME_COMMAND_BAR, 0) и GetFrameChild(ORIGIN_FRAME_COMMAND_BAR, 0) ссылается на фрейм(расположение кнопки) х3 у2, а не х3 у3. х3 у3 не видно никаким индексом в диапазоне от -1 до 11.
OSKEY_LEFT и RIGHT, UP, DOWN не работают, но так понимаю в 1.19.78 работает.Обновление в дискорде и гитхабе нет, а с сайта блочит вирус( отключал антивирус и брандмауэр). Windows 7
30
Borodach, ты имеешь ввиду индексацию с единицы?

но так понимаю в 1.19.78 работает.Обновление в дискорде и гитхабе нет
Как это нет? Попробуй скриптом из этой статьи скачать.
20
BlzFrameGetChild(ORIGIN_FRAME_COMMAND_BAR, 0) и GetFrameChild(ORIGIN_FRAME_COMMAND_BAR, 0) ссылается на фрейм(расположение кнопки) х3 у2, а не х3 у3. х3 у3 не видно никаким индексом в диапазоне от -1 до 11.
Диапазон начинается от 0 (откуда вообще -1?) и внутренний код, который используется для получения кнопок используется во ВФЕ, там как-то проблем с этим не наблюдалось, собственно...)
OSKEY_LEFT и RIGHT, UP, DOWN не работают, но так понимаю в 1.19.78 работает.Обновление в дискорде и гитхабе нет, а с сайта блочит вирус( отключал антивирус и брандмауэр). Windows 7
Что значит не работают? Все кнопки работают и их код не был тронут. Эта версия и есть в данный момент последняя, и на гитхабе она тоже лежит.
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 не может быть ни в каком случае, акстись.
15
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 умеет и возможностей куда больше чем на обеих платформах вместе взятых, да и в новой версии будет ещё больше функционала.
15
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.
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, Спасибо! Теперь понятно)) так костыль группы - это единственная альтернатива фор групп, чтобы передать аргументы каждому юниту, вот и используется)
А примеры - это очень хорошо, чтобы люди имели понимание, как то или другое использовать. Особенно если название функции не совсем понятное на первый взгляд или непонятное.
20
Unryze, Спасибо! Теперь понятно)) так костыль группы - это единственная альтернатива фор групп, чтобы передать аргументы каждому юниту, вот и используется)
Потому я и дал методы, которые позволяют обходить костыли...
А примеры - это очень хорошо, чтобы люди имели понимание, как то или другое использовать. Особенно если название функции не совсем понятное на первый взгляд или непонятное.
Ну, всё следовало примеру групп + расширение их, но видать в виду обилия функций, можно запутаться.
Этот комментарий удален
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.21.85

  1. Новые Константы:
    constant targetflag TARGET_FLAG_SELF = ConvertTargetFlag(4096)
    constant targetflag TARGET_FLAG_PLAYER_UNITS = ConvertTargetFlag(8192)
    constant targetflag TARGET_FLAG_ALLIED = ConvertTargetFlag(16384)
    constant targetflag TARGET_FLAG_FRIEND = ConvertTargetFlag(24576) ALLIED | PLAYER_UNITS
    constant targetflag TARGET_FLAG_NEUTRAL = ConvertTargetFlag(32768)
    constant targetflag TARGET_FLAG_ENEMY = ConvertTargetFlag(65536)
    constant targetflag TARGET_FLAG_NOT_SELF = ConvertTargetFlag(122880) ENEMY | NEUTRAL | FRIEND
    constant targetflag TARGET_FLAG_VULNERABLE = ConvertTargetFlag(1048576)
    constant targetflag TARGET_FLAG_INVULNERABLE = ConvertTargetFlag(2097152)
    constant targetflag TARGET_FLAG_HERO = ConvertTargetFlag(4194304)
    constant targetflag TARGET_FLAG_NON_HERO = ConvertTargetFlag(8388608)
    constant targetflag TARGET_FLAG_ALIVE = ConvertTargetFlag(16777216)
    constant targetflag TARGET_FLAG_DEAD = ConvertTargetFlag(33554432)
    constant targetflag TARGET_FLAG_ORGANIC = ConvertTargetFlag(67108864)
    constant targetflag TARGET_FLAG_MECHANICAL = ConvertTargetFlag(134217728)
    constant targetflag TARGET_FLAG_NON_SUICIDAL = ConvertTargetFlag(268435456)
    constant targetflag TARGET_FLAG_SUICIDAL = ConvertTargetFlag(536870912)
    constant targetflag TARGET_FLAG_NON_ANCIENT = ConvertTargetFlag(1073741824)
    constant targetflag TARGET_FLAG_ANCIENT = ConvertTargetFlag(2147483648)
    constant targetflag TARGET_FLAG_EMPTY = ConvertTargetFlag(4294967295)

    constant abilityrealfield ABILITY_RF_AURA_REFRESH_TIME = ConvertAbilityRealField('artm')
    constant abilityintegerlevelfield ABILITY_ILF_TARGETS_ALLOWED = ConvertAbilityIntegerLevelField('atar')

    constant playerunitevent EVENT_PLAYER_UNIT_ATTACK_FINISHED = ConvertPlayerUnitEvent(317)
    constant unitevent EVENT_UNIT_ATTACK_FINISHED = ConvertUnitEvent(316)
  2. Новые Нативные Функции:
    native IsAbilityTargetAllowed takes ability whichAbility, widget whichWidget returns boolean
    native GetSpecialEffectModelObjectPositionX takes effect whichEffect, string whichObject returns real
    native GetSpecialEffectModelObjectPositionY takes effect whichEffect, string whichObject returns real
    native GetSpecialEffectModelObjectPositionZ takes effect whichEffect, string whichObject returns real
    native GetSpecialEffectModelObjectPositionLoc takes effect whichEffect, string whichObject returns location
    native GetTrackableModelObjectPositionX takes trackable whichTrackable, string whichObject returns real
    native GetTrackableModelObjectPositionY takes trackable whichTrackable, string whichObject returns real
    native GetTrackableModelObjectPositionZ takes trackable whichTrackable, string whichObject returns real
    native GetTrackableModelObjectPositionLoc takes trackable whichTrackable, string whichObject returns location
    native GetWidgetModelObjectPositionX takes widget whichWidget, string whichObject returns real
    native GetWidgetModelObjectPositionY takes widget whichWidget, string whichObject returns real
    native GetWidgetModelObjectPositionZ takes widget whichWidget, string whichObject returns real
    native GetWidgetModelObjectPositionLoc takes widget whichWidget, string whichObject returns location
    native GetDestructableModelObjectPositionX takes destructable whichDestructable, string whichObject returns real
    native GetDestructableModelObjectPositionY takes destructable whichDestructable, string whichObject returns real
    native GetDestructableModelObjectPositionZ takes destructable whichDestructable, string whichObject returns real
    native GetDestructableModelObjectPositionLoc takes destructable whichDestructable, string whichObject returns location
    native GetItemModelObjectPositionX takes item whichItem, string whichObject returns real
    native GetItemModelObjectPositionY takes item whichItem, string whichObject returns real
    native GetItemModelObjectPositionZ takes item whichItem, string whichObject returns real
    native GetItemModelObjectPositionLoc takes item whichItem, string whichObject returns location
    native GetUnitModelObjectPositionX takes unit whichUnit, string whichObject returns real
    native GetUnitModelObjectPositionY takes unit whichUnit, string whichObject returns real
    native GetUnitModelObjectPositionZ takes unit whichUnit, string whichObject returns real
    native GetUnitModelObjectPositionLoc takes unit whichUnit, string whichObject returns location
    native GetProjectileModelObjectPositionX takes projectile whichProjectile, string whichObject returns real
    native GetProjectileModelObjectPositionY takes projectile whichProjectile, string whichObject returns real
    native GetProjectileModelObjectPositionZ takes projectile whichProjectile, string whichObject returns real
    native GetProjectileModelObjectPositionLoc takes projectile whichProjectile, string whichObject returns location
    Frame API
    native GetFrameCheckState takes fremehandle whichFrame returns boolean
    native SetFrameCheckState takes framehandle whichFrame, boolean isCheck returns nothing
    native GetTriggerFrameMouseButton takes nothing returns mousebuttontype
    native RegisterFrameMouseButton takes framehandle whichFrame, mousebuttontype whichButton, boolean isAdd returns nothing
  3. Исправлены CLI команды, которые порой не посылались/приходили с ошибкой.
  4. Исправлена ошибка "дочерних" приложений UjAPI, которая мешала им посылать CLI команды главному приложению.
  5. Исправлена IsTextTagVisible, которая возвращала инверсное значение.
  6. Исправлена CastAbilityTarget вызывающая критическую ошибку при применении на поддерживаемой целевом заклинании.
  7. Переделана SetUnitSelectable, теперь она более не имитирует "смерть", чтобы достигнуть невыделяемого/ненаводимого состояния.
  8. SetFrameTexture теперь работает с CSimpleButton/CCommandButton/CSimpleCheckBox.
  9. CSimpleCheckBox теперь поддерживается, так же добавлена поддержка CLICK/CHECK событий, вместе с RegisterFrameMouseButton.
  10. CONTROL_CLICK и MOUSE_DOUBLECLICK события теперь могут быть применены к CListBoxWar3 фреймам.
  11. Исправлены почти все ABILITY_RLF_ поля, которые имеют цифру в конце их typeId, они теперь должны работать как и задумывалось.
29
native GetFrameCheckState takes fremehandle whichFrame returns boolean
native SetFrameCheckState takes framehandle whichFrame, boolean isCheck returns nothing
Ооо, это что нужно рефе было, но теперь это есть в ujapi ^^
Устанавливать чекстатус.
29
ScorpioT1000, да, они самые, я как-то говорил про них анрайзу, что близзарды не запилили установку чекстатуса заранее.
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.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.24.92

  1. Новые Нативные Функции:
    native RemoveSound takes sound whichSound returns nothing
    native ReplaceSound takes sound whichSound, string fileName, boolean looping, boolean is3D, boolean stopwhenoutofrange, integer fadeInRate, integer fadeOutRate, string eaxSetting returns sound
    native ReplaceSoundWithLabel takes sound whichSound, string fileName, boolean looping, boolean is3D, boolean stopwhenoutofrange, integer fadeInRate, integer fadeOutRate, string SLKEntryName returns sound
    native ReplaceSoundFromLabel takes sound whichSound, string soundLabel, boolean looping, boolean is3D, boolean stopwhenoutofrange, integer fadeInRate, integer fadeOutRate returns sound
    native ReplaceMIDISound takes sound whichSound, string soundLabel, integer fadeInRate, integer fadeOutRate returns sound

    native TextFileExists takes string filePath returns boolean
  2. В очередной раз исправлена функция SetFrameTexture для CBackdropFrame.
  3. Исправлена критическая ошибка в GetStringField при использовании на пустое поле.
  4. TextFileErase переименовано в TextFileDelete.
  5. Исправлен не выполняющийся EVENT_WIDGET_DEATH.
  6. GetKillingUnit теперь работает с EVENT_WIDGET_DEATH.
  7. Исправлена критическая ошибка от HandleListEnumByTypeId.
  8. Исправлены частично-сломанные функции HandleListGetTYPEByIndex, теперь они работают как и должны.
    Пометка: HandleListGetHandleByIndex и HandleListGetAgentByIndex работали без каких-либо проблем.
  9. Исправлен Jass Logger Dev Mode не открывающий Дебаг Консоль.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.25.94

  1. Новые Нативные Функции:
    native ConsolePause takes string s returns nothing
    native GetTickCount takes nothing returns integer
    native GetSpecialEffectCurrentAnimationId takes effect whichEffect returns integer
    native GetTrackableCurrentAnimationId takes trackable whichTrackable returns integer
    native GetWidgetCurrentAnimationId takes widget whichWidget returns integer
    native GetDestructableCurrentAnimationId takes destructable whichDestructable returns integer
    native GetItemCurrentAnimationId takes item whichItem returns integer
    native GetUnitCurrentAnimationId takes unit whichUnit returns integer
    native GetProjectileCurrentAnimationId takes projectile whichProjectile returns integer
    native GetFrameSpriteCurrentAnimationId takes framehandle whichFrame returns integer
    native GetFrameColourEx takes framehandle whichFrame, integer textureId returns integer
    native SetFrameColourEx takes framehandle whichFrame, integer textureId, integer colour returns nothing
    native GetFrameColour takes framehandle whichFrame returns integer
    native SetFrameColour takes framehandle whichFrame, integer colour returns nothing
    native GetFrameAlphaEx takes framehandle whichFrame, integer textureId returns integer
    native SetFrameAlphaEx takes framehandle whichFrame, integer textureId, integer alpha returns nothing
  2. Исправлена ошибка при которой HideOriginFrames также скрывала и фреймы предметов, чего быть не должно.
  3. Исправлена неправильно работающая IsFrameVisible с CSimpleRegions/CSimpleFrames и с их дочерними фреймами.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.26.97

  1. Новые Типы:
    type mappedfield extends handle
    type mappedtype extends handle
    type attachmenttype extends mappedtype
    type bonetype extends attachmenttype
    type cursoranimtype extends mappedtype
  2. Новые Конверторы:
    constant native ConvertMappedField takes integer i returns mappedfield
    constant native ConvertAttachmentType takes integer i returns attachmenttype
    constant native ConvertBoneType takes integer i returns bonetype
    constant native ConvertCursorAnimType takes integer i returns cursoranimtype
  3. Новые Константы:
    constant mappedfield MAPPED_FIELD_ATTACHMENT = ConvertMappedField(0)
    constant mappedfield MAPPED_FIELD_BONE = ConvertMappedField(1)
    constant mappedfield MAPPED_FIELD_ANIMATION = ConvertMappedField(2)
    constant mappedfield MAPPED_FIELD_SUB_ANIMATION = ConvertMappedField(3)
    constant mappedfield MAPPED_CURSOR_SUB_ANIMATION = ConvertMappedField(4)

    constant attachmenttype ATTACHMENT_TYPE_CHEST = ConvertAttachmentType('ches')
    constant attachmenttype ATTACHMENT_TYPE_FEET = ConvertAttachmentType('feet')
    constant attachmenttype ATTACHMENT_TYPE_FOOT = ConvertAttachmentType('foot')
    constant attachmenttype ATTACHMENT_TYPE_HAND = ConvertAttachmentType('hand')
    constant attachmenttype ATTACHMENT_TYPE_HEAD = ConvertAttachmentType('head')
    constant attachmenttype ATTACHMENT_TYPE_ORIGIN = ConvertAttachmentType('orig')
    constant attachmenttype ATTACHMENT_TYPE_OVERHEAD = ConvertAttachmentType('over')
    constant attachmenttype ATTACHMENT_TYPE_SPRITE = ConvertAttachmentType('spri')
    constant attachmenttype ATTACHMENT_TYPE_WEAPON = ConvertAttachmentType('weap')
    constant attachmenttype ATTACHMENT_TYPE_ALTERNATE = ConvertAttachmentType('alte')
    constant attachmenttype ATTACHMENT_TYPE_LEFT = ConvertAttachmentType('left')
    constant attachmenttype ATTACHMENT_TYPE_RIGHT = ConvertAttachmentType('righ')
    constant attachmenttype ATTACHMENT_TYPE_MOUNT = ConvertAttachmentType('moun')
    constant attachmenttype ATTACHMENT_TYPE_REAR = ConvertAttachmentType('rear')
    constant attachmenttype ATTACHMENT_TYPE_SMART = ConvertAttachmentType('smar')
    constant attachmenttype ATTACHMENT_TYPE_FIRST = ConvertAttachmentType('firs')
    constant attachmenttype ATTACHMENT_TYPE_SECOND = ConvertAttachmentType('seco')
    constant attachmenttype ATTACHMENT_TYPE_THIRD = ConvertAttachmentType('thir')
    constant attachmenttype ATTACHMENT_TYPE_FOURTH = ConvertAttachmentType('four')
    constant attachmenttype ATTACHMENT_TYPE_FIFTH = ConvertAttachmentType('fift')
    constant attachmenttype ATTACHMENT_TYPE_SIXTH = ConvertAttachmentType('sixt')
    constant attachmenttype ATTACHMENT_TYPE_SMALL = ConvertAttachmentType('smal')
    constant attachmenttype ATTACHMENT_TYPE_MEDIUM = ConvertAttachmentType('medi')
    constant attachmenttype ATTACHMENT_TYPE_LARGE = ConvertAttachmentType('larg')
    constant attachmenttype ATTACHMENT_TYPE_GOLD = ConvertAttachmentType('gold')
    constant attachmenttype ATTACHMENT_TYPE_RALLYPOINT = ConvertAttachmentType('rall')
    constant attachmenttype ATTACHMENT_TYPE_EAT_TREE = ConvertAttachmentType('eatt')

    constant bonetype BONE_TYPE_CHEST = ConvertBoneType('ches')
    constant bonetype BONE_TYPE_FOOT = ConvertBoneType('foot')
    constant bonetype BONE_TYPE_HAND = ConvertBoneType('hand')
    constant bonetype BONE_TYPE_HEAD = ConvertBoneType('head')
    constant bonetype BONE_TYPE_TURRET = ConvertBoneType('turr')
    constant bonetype BONE_TYPE_ALTERNATE = ConvertBoneType('alte')
    constant bonetype BONE_TYPE_LEFT = ConvertBoneType('left')
    constant bonetype BONE_TYPE_RIGHT = ConvertBoneType('righ')
    constant bonetype BONE_TYPE_MOUNT = ConvertBoneType('moun')
    constant bonetype BONE_TYPE_SMART = ConvertBoneType('smar')

    constant cursoranimtype CURSORANIM_TYPE_NORMAL = ConvertCursorAnimType(0)
    constant cursoranimtype CURSORANIM_TYPE_SELECT = ConvertCursorAnimType(1)
    constant cursoranimtype CURSORANIM_TYPE_TARGET = ConvertCursorAnimType(2)
    constant cursoranimtype CURSORANIM_TYPE_TARGET_SELECT = ConvertCursorAnimType(3)
    constant cursoranimtype CURSORANIM_TYPE_INVALID_TARGET = ConvertCursorAnimType(4)
    constant cursoranimtype CURSORANIM_TYPE_HOLD_ITEM = ConvertCursorAnimType(5)
    constant cursoranimtype CURSORANIM_TYPE_SCROLL = ConvertCursorAnimType(6)
    constant cursoranimtype CURSORANIM_TYPE_LEFT = ConvertCursorAnimType(7)
    constant cursoranimtype CURSORANIM_TYPE_RIGHT = ConvertCursorAnimType(8)
    constant cursoranimtype CURSORANIM_TYPE_UP = ConvertCursorAnimType(9)
    constant cursoranimtype CURSORANIM_TYPE_DOWN = ConvertCursorAnimType(10)
  1. Удалённые Нативные Функции:
    native GetAnimationName takes animtype whichAnim returns string
  2. Новые Нативные Функции:
    native GetMiscDataString takes string sectionName, string optionName, integer index returns string
    native SetMiscDataString takes string sectionName, string optionName, integer index, string value returns nothing

    native GetSkinDataString takes string raceName, string sectionName, string optionName, integer index returns string raceName can be null
    native SetSkinDataString takes string raceName, string sectionName, string optionName, integer index, string value returns nothing raceName can be null

    native GetFDFDataString takes string sectionName, string optionName returns string
    native SetFDFDataString takes string sectionName, string optionName, string value returns nothing

    native GetMappedTypeName takes mappedfield whichField, mappedtype whichMapType returns string

    native TriggerCountEvents takes trigger whichTrigger returns integer
    native TriggerCountConditions takes trigger whichTrigger returns integer
    native TriggerCountActions takes trigger whichTrigger returns integer
    native TriggerRemoveEvent takes trigger whichTrigger, event whichEvent returns nothing
    native TriggerRemoveEventId takes trigger whichTrigger, eventid whichEventId, boolean removeAllOccurences returns nothing
    native TriggerClearEvents takes trigger whichTrigger returns nothing
    native TriggerClear takes trigger whichTrigger returns nothing

    native GetSpecialEffectCurrentAnimationName takes effect whichEffect returns string
    native GetTrackableCurrentAnimationName takes trackable whichTrackable returns string
    native GetWidgetCurrentAnimationName takes widget whichWidget returns string
    native GetDestructableCurrentAnimationName takes destructable whichDestructable returns string
    native GetItemCurrentAnimationName takes item whichItem returns string
    native GetUnitCurrentAnimationName takes unit whichUnit returns string
    native GetProjectileCurrentAnimationName takes projectile whichProjectile returns string
    native GetFrameSpriteCurrentAnimationName takes framehandle whichFrame returns string

    native CreateSimpleGlueFrame takes framehandle whichSimpleParent, framehandle whichSpriteFrame returns framehandle
    native SetFrameName takes framehandle whichFrame, string contextName returns nothing
    native GetFrameContext takes framehandle whichFrame returns integer
    native SetFrameContext takes framehandle whichFrame, integer createContext returns nothing
    native SetFrameContextName takes framehandle whichFrame, string contextName, integer createContext returns nothing
  3. Исправлен неправильный typeId поля ABILITY_IF_BUTTON_HOTKEY_RESEARCH's с aukh на arhk.
  4. Переименовано поле ABILITY_ILF_RESTORED_MANA__1_FOR_CURRENT в ABILITY_ILF_RESTORED_MANA_1_FOR_CURRENT.
  5. textfilehandle тип более не использует реальный менеджмент хендлов, теперь оно использует мнимые хендлы, как fogstate, то бишь теперь оно может быть использовано в локальном блоке.
  6. Добавлен новый экспериментальный парсер w3i, который умеет читать Reforged карты и отображать данные Сил/Игроков (слотов) и информацию карты. А также дать её запускать.
    Пометка: карты написанные на "чистом" луа всё ещё не будут работать, пока Ev3nt не исправит его war3_lua.dll.
    Пометка 2: это "маленькое" изменение потребовало более 1000 строк кода, что же я делаю со своей жизнью...
  7. Технически исправлена неправильная информация в структуре связанной с MemoryAllocation, которая относился к Jass стэку и так далее.
    Пометка: хотя ранее не было ошибок/проблем связанных с этой структурой, это было либо в виду везения, либо в виду малой популярности.
  8. Исправлены все функции связанные с SetAnimationOffsetPercent.
  9. Исправлена критическая ошибка от GetFrameName.
  10. Исправлена GetFrameName, которая ранее работала только со фреймами типа CFrame и его дочерними типами.
  11. Исправлена критическая ошибка, когда GetHandleId применялся на "слишком большие" значения.
  12. ClickFrameEx теперь использует mousebuttontype заместо булевого флага.
  13. Исправлено перекрытие стандартных действий фреймов Предметов/Заклинаний, после регистрации события FRAMEEVENT_MOUSE_DOWN.
  14. Исправлена критическая ошибка от GetFrameParent.
38
это "маленькое" изменение потребовало более 1000 строк кода, что же я делаю со своей жизнью...
А как же protobuf или другие решения, в которых декларативно описываем форматы файлов и потом удобно достаем все что хотим?
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 и ниже, к сожалению не исправимо.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.29.104

  1. Новые Нативные Функции:
    native GetLightningColourA takes lightning whichBolt returns integer
    native GetLightningColourR takes lightning whichBolt returns integer
    native GetLightningColourG takes lightning whichBolt returns integer
    native GetLightningColourB takes lightning whichBolt returns integer
    native SetLightningColour takes lightning whichBolt, integer r, integer g, integer b, integer a returns boolean

    native GetLocale takes nothing returns string

    native DisplayWarningMessage takes player toPlayer, string message returns nothing
    native DisplayTimedWarningMessage takes player toPlayer, real duration, string message returns nothing
    native DisplayTopMessage takes player toPlayer, string message returns nothing
    native DisplayTimedTopMessage takes player toPlayer, real duration, string message returns nothing

    native TextFileGetSizeByPath takes string filePath returns integer
    native TextFileGetSize takes textfilehandle whichTextFile returns integer

    native CreateDoodad takes integer objectid, real x, real y, real face, real scale, integer variation returns doodad
    native CreateDoodadZ takes integer objectid, real x, real y, real z, real face, real scale, integer variation returns doodad
    native RemoveDoodad takes doodad whichDoodad returns nothing
    native GetDoodadColour takes doodad whichDoodad returns integer
    native SetDoodadColour takes doodad whichDoodad, integer colour returns nothing
    native SetDoodadVertexColour takes doodad whichDoodad, integer red, integer green, integer blue, integer alpha returns nothing
    native GetDoodadScale takes doodad whichDoodad returns real
    native SetDoodadScale takes doodad whichDoodad, real facing returns nothing
    native GetDoodadX takes doodad whichDoodad returns real
    native SetDoodadX takes doodad whichDoodad, real x returns nothing
    native GetDoodadY takes doodad whichDoodad returns real
    native SetDoodadY takes doodad whichDoodad, real y returns nothing
    native GetDoodadZ takes doodad whichDoodad returns real
    native SetDoodadZ takes doodad whichDoodad, real z returns nothing
    native SetDoodadPosition takes doodad whichDoodad, real x, real y returns nothing
    native SetDoodadPositionEx takes doodad whichDoodad, real x, real y, real z returns nothing
    native GetDoodadPositionLocation takes doodad whichDoodad returns location
    native SetDoodadPositionLocation takes doodad whichDoodad, location whichLocation returns nothing
    native GetDoodadScreenX takes doodad whichDoodad returns real
    native GetDoodadScreenY takes doodad whichDoodad returns real
    native SetDoodadMatrixScale takes doodad whichDoodad, real x, real y, real z returns nothing
    native ResetDoodadMatrix takes doodad whichDoodad returns nothing
    native SetDoodadOrientationEx takes doodad whichDoodad, real yaw, real pitch, real roll, integer eulerOrder returns nothing
    native GetDoodadYaw takes doodad whichDoodad returns real
    native SetDoodadYaw takes doodad whichDoodad, real yaw returns nothing
    native GetDoodadFacing takes doodad whichDoodad returns real
    native SetDoodadFacing takes doodad whichDoodad, real facing returns nothing
    native GetDoodadPitch takes doodad whichDoodad returns real
    native SetDoodadPitch takes doodad whichDoodad, real pitch returns nothing
    native GetDoodadRoll takes doodad whichDoodad returns real
    native SetDoodadRoll takes doodad whichDoodad, real roll returns nothing
    native SetDoodadOrientation takes doodad whichDoodad, real yaw, real pitch, real roll returns nothing
    native GetDoodadModel takes doodad whichDoodad returns string
    native SetDoodadModel takes doodad whichDoodad, string whichModel returns nothing

    native GetWidgetTypeId takes widget whichWidget returns integer

    native GetUnitTarget takes unit whichUnit returns widget
    native GetUnitTargetUnit takes unit whichUnit returns unit
    native GetUnitTargetItem takes unit whichUnit returns item
    native GetUnitTargetDestructable takes unit whichUnit returns destructable
    native UnitAttackTarget takes unit whichUnit, widget whichTarget, bool ignoreDistance, boolean isInstant returns nothing ignoreDistance only works if isInstant is set to true.
    native UnitAttackTargetPointZ takes unit whichUnit, real x, real y, real z, boolean ignoreDistance, boolean isInstant returns nothing
    native UnitAttackTargetPoint takes unit whichUnit, real x, real y, boolean ignoreDistance, boolean isInstant returns nothing
    native UnitAttackTargetPointLoc takes unit whichUnit, location whichLocation, boolean ignoreDistance, boolean isInstant returns nothing
    native UnitAttackCancel takes unit whichUnit returns boolean
    native UnitCancelTimedLife takes unit whichUnit returns nothing
    native GetUnitRemainingTimedLife takes unit whichUnit returns real
    native SetUnitRemainingTimedLife takes unit whichUnit, real duration returns nothing

    native CreateIllusion takes player whichPlayer, integer unitTypeId, real x, real y, real facing returns unit
    native CreateIllusionAtLoc takes player whichPlayer, integer unitTypeId, location whichLocation, real facing returns unit
    native CreateIllusionFromUnit takes unit whichUnit returns unit
    native GetIllusionDamageDealt takes unit whichUnit returns real
    native SetIllusionDamageDealt takes unit whichUnit, real multiplier returns nothing
    native GetIllusionDamageReceived takes unit whichUnit returns real
    native SetIllusionDamageReceived takes unit whichUnit, real multiplier returns nothing

    native SetFrameValueEx takes framehandle whichFrame, real value, boolean isFireEvent returns nothing
    native GetFrameStepSize takes framehandle whichFrame returns real
  2. Исправлены некоторые (скорее всего все) способности, которые имели приказ выключения. (Пример: "Трансформация в эльфа" из формы медведя друида).
  3. Исправлена критическая ошибка при использовании DestroyFrame с CSimpleRegion/CSimpleFrame и их дочерними типами.
  4. Исправлены нерабочие OSKEY_UP/DOWN/LEFT/RIGHT кнопки с TriggerRegisterPlayerKeyEvent, и так далее.
  5. SetFrameValue теперь вызывает SLIDER_CHANGE событие.
  6. Исправлены ошибки по которым TriggerRegisterPlayerKeyEvent иногда блокировал ввод.
  7. SetUnitModel и SetUnitModelEx теперь так же обновляют любые и все крепления/эффекты и так далее.
  8. Исправлены нерабочие поля UnitStringFields: ICON_SCORE_SCREEN/MODEL/PORTRAIT/SHADOW_IMAGE_UNIT.
  9. Обновлён TextFile API, теперь оно может читать файлы из MPQ/Карт/Патчей и так далее.
    Пометка: когда TextFile API работает только в режиме чтения с этими файлами.
  10. Исправлены неправильные значения полей UNIT_IF_STRENGTH_BASE/UNIT_IF_AGILITY_BASE/UNIT_IF_INTELLIGENCE_BASE.
  11. UnitResetAttack переименовано в UnitRestartAttack.
  12. Исправлены нерабочие нативные функции UnitRestartAttack и UnitFinishAttack.
  13. Исправлены MathAngleBetweenPoints и MathAngleBetweenLocations возвращающие обратные значения.
  14. UnitRestartAttack и UnitFinishAttack переименованы в: UnitAttackRestart и UnitAttackFinish.
  15. BlzUnitCancelTimedLife теперь работает.
  16. Исправлено нерабочее событие PROJECTILE_HIT для Артиллерии/Артиллерии (линии).
  17. Добавлена экспериментальная система SecurityProtocol для обхода истёкших сертификатов Windows 7 из-за которых C# не мог использовать WebAPI.
    Пометка: это возможно исправит авто апдейтер для последующих версий.

После выхода из игры вылетает вот это
Да, это приколы вин7 и ниже, к сожалению не исправимо.
К слову эта проблема была исправлена тоже.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.29.105

  1. Исправлена неправильная обработка геттера и сеттера поля ABILITY_ILF_TARGET_TYPE.
  2. Добавлены новые методы детекта для АнтиХака.

v1.0.29.106

  1. Исправлена критическая ошибка на 1.28f при выборе карты, при включённом Дебаг Режиме.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.29.107

  1. Исправлено быстрое меню от WFE, которое ломалось в виду Авто Инжектора.
    Пометка: это происходило потому что UjAPI имело свой код, который позволял включать/выключать быстрое меню, этот код был временно отключён.
  2. Исправлена ошибка по которой UjAPI не работала с аппликацией Frozen Throne.exe.
    Пометка: всё ещё рекомендовано запускать игру через War3.exe для патчей ниже 1.28.
  3. Начиная со следующей версии UjAPI должно без проблем удалять старую аппликацию после обновления.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.30.110

  1. Новые Типы:
    type agentdatafield extends handle
  2. Удалённые Типы:
    type buffstringfield extends agentdatafield
  3. Удалённые Нативные Функции:
    constant native ConvertBuffStringField takes integer i returns buffstringfield
    native EnableUnitInventory takes unit whichUnit, boolean enable returns nothing
    native IsUnitInventoryEnabledEx takes unit whichUnit returns boolean
    native EnableUnitInventoryEx takes unit whichUnit, boolean enable returns nothing
    native EnableUnitMovement takes unit whichUnit, boolean enable returns nothing
    native IsUnitMovementEnabledEx takes unit whichUnit returns boolean
    native EnableUnitMovementEx takes unit whichUnit, boolean enable returns nothing
    native EnableUnitAttack takes unit whichUnit, boolean enable returns nothing
    native IsUnitAttackEnabledEx takes unit whichUnit returns boolean
    native EnableUnitAttackEx takes unit whichUnit, boolean enable returns nothing
    native SetUnitControl takes unit whichUnit, integer flagValue, boolean isSetFlagValue, boolean ismove, boolean isattack, boolean isinventory returns nothing
    native SetUnitLocustFlag takes unit whichUnit, integer flag, integer mode returns nothing
  4. Новые Нативные Функции:
    native CreateAbility takes integer abilityId returns ability
    native SetAbilityOwner takes ability whichAbility, unit whichUnit returns nothing

    native GetBuffIntegerField takes buff whichBuff, abilityintegerfield whichField returns integer
    native SetBuffIntegerField takes buff whichBuff, abilityintegerfield whichField, integer value returns boolean
    native GetBuffBooleanField takes buff whichBuff, abilittybooleanfield whichField returns boolean
    native SetBuffBooleanField takes buff whichBuff, abilittybooleanfield whichField, boolean value returns boolean
    native GetBuffRealField takes buff whichBuff, abilityrealfield whichField returns real
    native SetBuffRealField takes buff whichBuff, abilityrealfield whichField, real value returns boolean

    native CreateBuff takes integer buffId returns buff
    native SetBuffOwner takes buff whichBuff, unit whichUnit returns nothing
    native ResetBuffFieldData takes buff whichBuff returns boolean Acts same as ResetAbilityFieldData, but for buffs.
    In very early stages of development, may be unstable for now.
    native UnitAddBuff takes unit whichUnit, buff whichBuff returns boolean Does not add duplicates!
    native UnitAddBuffEx takes unit whichUnit, buff whichBuff, boolean checkForDuplicates returns boolean
    native UnitAddBuffById takes unit whichUnit, integer buffId returns boolean Does not add duplicates!
    native UnitAddBuffByIdEx takes unit whichUnit, integer buffId, boolean checkForDuplicates returns boolean

    native UnitEnableInventory takes unit whichUnit, boolean enable, boolean ignoreErrorMessages returns nothing
    native UnitEnableMovement takes unit whichUnit, boolean enable, boolean ignoreErrorMessages returns nothing
    native UnitEnableAttack takes unit whichUnit, boolean enable, boolean ignoreErrorMessages returns nothing
    native IsUnitTruesightImmune takes unit whichUnit returns boolean
    native CreateBuilding takes player whichPlayer, integer unitTypeId, real x, real y, real facing returns unit
    native CreateBuildingEx takes player whichPlayer, integer unitTypeId, real x, real y, real facing, boolean isAutoBuild, boolean workersCanAssist returns unit
    native UnitGetConstructionProgress takes unit whichUnit returns real
    native UnitGetConstructionRemainingTime takes unit whichUnit returns real
    native UnitSetConstructionRemainingTime takes unit whichUnit, real time returns nothing
    native UnitGetUpgradeProgress takes unit whichUnit returns real
    native UnitGetUpgradeRemainingTime takes unit whichUnit returns real
    native UnitSetUpgradeRemainingTime takes unit whichUnit, real time returns nothing

    native HandleListGetDoodadCount takes handlelist whichHandleList returns integer
    native HandleListGetDoodadByIndex takes handlelist whichHandleList, integer index returns doodad
    native HandleListGetFilterDoodad takes nothing returns doodad
    native HandleListGetEnumDoodad takes nothing returns doodad
    native HandleListEnumDoodadsInRange takes handlelist whichHandleList, real x, real y, real radius, boolexpr filter returns nothing
    native HandleListEnumDoodadsInRangeOfLoc takes handlelist whichHandleList, location whichLocation, real radius, boolexpr filter returns nothing
    native HandleListEnumDoodadsInRect takes handlelist whichHandleList, rect whichRect, boolexpr filter returns nothing
    native HandleListEnumUnitAbilities takes handlelist whichHandleList, unit whichUnit, boolexpr filter returns nothing
    native HandleListEnumUnitBuffs takes handlelist whichHandleList, unit whichUnit, boolexpr filter returns nothing
  5. API полей баффов теперь полностью заимствует поля заклинания, это позволит предотвратить огромное количество копий переменных.
  6. BUFF_SF_ICON_NORMAL, BUFF_SF_TOOLTIP_NORMAL, BUFF_SF_TOOLTIP_NORMAL_EXTENDED сохранили свои имена, однако как и сказано выше теперь используют ConvertAbilityStringField вместо ConvertBuffStringField.
  7. Все типы связанные с полями расширяют тип agentdatafield вместо handle.
  8. ABILITY_ILF_MAX_LIFE_GAINED поле теперь работает с SetAbilityIntegerLevelField.
  9. ABILITY_ILF_HIT_POINTS_REGENERATED_PER_SECOND поле теперь работает с SetAbilityIntegerLevelField.
  10. ABILITY_ILF_DEFENSE_BONUS_IDEF поле теперь работает с SetAbilityIntegerLevelField.
  11. ABILITY_ILF_ATTACK_BONUS field поле теперь работает с SetAbilityIntegerLevelField.
  12. ABILITY_ILF_STRENGTH_BONUS_ISTR поле теперь работает с SetAbilityIntegerLevelField.
  13. ABILITY_ILF_AGILITY_BONUS field поле теперь работает с SetAbilityIntegerLevelField.
  14. ABILITY_ILF_INTELLIGENCE_BONUS поле теперь работает с SetAbilityIntegerLevelField.
  15. Исправлена ошибка OnStartPipe для UjAPIApp.exe.
  16. Проведена оптимизация события EVENT_PLAYER_MOUSE_MOVE, а так же ускорено его срабатывание.
  17. SetFrameTooltip теперь работает с Симпл Фрейм наследниками (сам же Simple Frame к сожалению не вызывает события Входа/Выхода).
  18. Исправлена ошибка в SetUnitModel/SetUnitModelEx, которая по итогу множила бонусные характеристики на 2.
    Пометка: это происходило по причине того, что я использовал метод игры "воскрешения" героя, который банально "восстанавливал" пассивные способности, что и вызывало умножение на 2.
  19. Исправлена критическая ошибка при попытке получения/смены позиции эффекта, который был прикреплён к виджету.
  20. Получение позиции эффекта, прикреплённого к виджету теперь будет возвращать позицию виджета, к которому он прикреплён.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.30.111

  1. Исправлена UnitEnableInventory не отключающая хоткей первого предмета.
  2. Очередная попытка исправления "ошибки" при попытке удаления старой версии приложения.

v1.0.30.112

  1. Исправлены UnitAddBuff/SetBuffOwner создающие копию целевого юнита для некоторых баффов.
    Пометка: данный метод был использован для теста некоторых баффов, которые требуют кастера, например баффы аур.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.31.114

  1. Новые Константы:
    constant unitrealfield UNIT_RF_DEFENSE_BASE = ConvertUnitRealField('udfb') Get Only
    constant unitweaponintegerfield UNIT_WEAPON_IF_ATTACK_DAMAGE_BASE_MINIMUM = ConvertUnitWeaponIntegerField('udm1') Get Only
    constant unitweaponintegerfield UNIT_WEAPON_IF_ATTACK_DAMAGE_BASE_MAXIMUM = ConvertUnitWeaponIntegerField('udh1') Get Only
  2. GetUnitBonusDamageByIndex теперь включает бонусы от характеристик героя.
  3. GetUnitBaseDamageByIndex теперь исключает бонусы от характеристик героя для более точных значений.
  4. Исправлена SetTextTagText отображающая тексттаг даже если он изначально был спрятан, до того как был установлен текст.
  5. PauseUnitEx теперь полностью копирует логику обычной паузы, за исключением скрытия заклинаний, как оно и должно было, более не заимствует логику SetUnitStunned метода.
  6. UjAPI консоль теперь читает/пишет данные в UTF-8 формате.
  7. Исправлена случайная критическая ошибка от добавления баффов с помощью Buff API.
  8. Исправлена критическая ошибка от добавления Mirror Image баффа с помощью Buff API.
  9. Исправлена критическая ошибка от добавления Illusion баффа с помощью Buff API.
  10. Исправлена критическая ошибка от добавления Item Monster баффа с помощью Buff API.
  11. Исправлена критическая ошибка от добавления Lava Monster баффа с помощью Buff API.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.31.115

  1. Новые Константы:
constant unitweaponintegerfield UNIT_WEAPON_IF_ATTACK_DAMAGE_BONUS_FROM_STATS = ConvertUnitWeaponIntegerField('udbs')
  1. Исправлена критическая ошибка вызванная SetBuffField/SetAbilityField, когда вызывалась внутренняя проверка IsBuff.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.31.116

  1. Исправлена критическая ошибка вызванная CreateIllusionFromUnit на отвратительном 1.28f.
  2. Исправлены ошибки UjAPI, которые иногда происходили с запуском патча 1.28f.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.32.118

  1. Новые Нативные Функции:
    native CreateIllusionFromUnitEx takes unit whichUnit, boolean copyPassives returns unit
    native GetAbilityOwningItem takes ability whichAbility returns item
    native ShowUnitAbilityEx takes unit whichUnit, integer abilityId, boolean show, boolean checkDuplicates returns nothing
    native DisableUnitAbilityEx takes unit whichUnit, integer abilityId, boolean hide, boolean disable, boolean checkDuplicates returns nothing
    native EnableUnitAbilityEx takes unit whichUnit, integer abilityId, boolean show, boolean enable, boolean checkDuplicates returns nothing
  2. SetUnitBaseDamage и его эквиваленты в виде полей теперь включают в себя дополнительный урон от главной характеристики при перерасчёте.
  3. SetUnitBaseDamage и его эквиваленты в виде полей теперь обновляют интерфейс, для отображения изменений.
  4. SetUnitArmour и его эквиваленты в виде полей теперь обновляют интерфейс, для отображения изменений.
  5. SetUnitArmourType и его эквиваленты в виде полей теперь обновляют интерфейс, для отображения изменений.
  6. SetUnitPrimaryStat и его эквиваленты в виде полей теперь обновляют интерфейс, для отображения изменений.
  7. SetUnitMoveSpeed и его эквиваленты в виде полей теперь обновляют интерфейс, для отображения изменений.
  8. SetUnitBonusMoveSpeedPercent и его эквиваленты в виде полей теперь обновляют интерфейс, для отображения изменений.
  9. Исправлено некорректное обновление дополнительных характеристик через UnitUpdateInfoBar.
  10. Добавлен перехват критических ошибок, это по большей части полезно для патчей 1.27b и 1.28f, теперь в консоль будет выводится базовый адрес game.dll.
  11. UpdateUnitInfoBar теперь возвращает null, так как оригинально возвращаемое значение являлось бесполезным.
  12. UnitUnapplyUpgrades теперь возвращает null, так как оригинально возвращаемое значение являлось бесполезным.
  13. UnitApplyUpgrades теперь возвращает null, так как оригинально возвращаемое значение являлось бесполезным.
  14. Исправлены некорректно работающие поля BUFF_SF_TOOLTIP_NORMAL и BUFF_SF_TOOLTIP_NORMAL_EXTENDED.
  15. HandleListGetBuffByIndex теперь возвращает баффы, как и должно было.
  16. ShowUnitAbility/DisableUnitAbility/EnableUnitAbility более не срабатывают на всех дубликатах, это было вынесено как флаг в Ex версию.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.33.121

  1. Новые Константы:
    constant originframetype ORIGIN_FRAME_ITEM_BUTTON_COOLDOWN_INDICATOR = ConvertOriginFrameType(47)
    constant originframetype ORIGIN_FRAME_ITEM_BUTTON_AUTOCAST_FRAME = ConvertOriginFrameType(48)
    constant originframetype ORIGIN_FRAME_ITEM_BUTTON_CHARGES_FRAME = ConvertOriginFrameType(49)
    constant originframetype ORIGIN_FRAME_ITEM_BUTTON_CHARGES_TEXT = ConvertOriginFrameType(50)
  2. Новые Нативные Функции:
    native SetProjectileMatrixScale takes projectile whichProjectile, real x, real y, real z returns nothing

    native SetWidgetMatrixScale takes widget whichWidget, real x, real y, real z returns nothing
    native ResetWidgetMatrix takes widget whichWidget returns nothing

    native SetDestructableMatrixScale takes destructable whichDestructable, real x, real y, real z returns nothing
    native ResetDestructableMatrix takes destructable whichDestructable returns nothing

    native SetItemMatrixScale takes item whichItem, real x, real y, real z returns nothing
    native ResetItemMatrix takes item whichItem returns nothing

    native IsUnitAutoOrientationEnabled takes unit whichUnit returns boolean
    native UnitEnableAutoOrientation takes unit whichUnit, boolean enable returns nothing
    native GetUnitYaw takes unit whichUnit returns real
    native SetUnitYaw takes unit whichUnit, real yaw returns boolean
    native GetUnitPitch takes unit whichUnit returns real
    native SetUnitPitch takes unit whichUnit, real pitch returns boolean
    native GetUnitRoll takes unit whichUnit returns real
    native SetUnitRoll takes unit whichUnit, real roll returns boolean
    native SetUnitMatrixScale takes unit whichUnit, real x, real y, real z returns nothing
    native ResetUnitMatrix takes unit whichUnit returns nothing
    native SetUnitOrientation takes unit whichUnit, real yaw, real pitch, real roll returns nothing
    native SetUnitOrientationEx takes unit whichUnit, real yaw, real pitch, real roll, integer eulerOrder returns nothing

    native ResetFrameSpriteMatrix takes framehandle whichFrame returns nothing
  3. ORIGIN_FRAME_COMMAND_BUTTON теперь использует тот же тип индексации что на Reforged.
  4. ORIGIN_FRAME_COMMAND_BUTTON_COOLDOWN_INDICATOR теперь использует тот же тип индексации что на Reforged.
  5. ORIGIN_FRAME_COMMAND_BUTTON_AUTOCAST_FRAME теперь использует тот же тип индексации что на Reforged.
  6. ORIGIN_FRAME_COMMAND_BUTTON_CHARGES_FRAME теперь использует тот же тип индексации что на Reforged.
  7. ORIGIN_FRAME_COMMAND_BUTTON_CHARGES_TEXT теперь использует тот же тип индексации что на Reforged.
  8. Исправлена ошибка, по которой UjAPIApp не работала со сторонними лаунчерами на 1.28f.
    Пометка: эта ошибка была "представлена" когда был оптимизирован метод запуска 1.28f.
  9. Исправлена ошибка по которой AntiHack не вызывал сделанных нововведений/изменений.
  10. Добавлена дополнительная проверка безопасности для Projectile событий.
  11. GetTriggerUnit теперь работает с Projectile событиями.
  12. Исправлена критическая ошибка от SetFrameColour при случайной комбинации цветов для CSimpleRegion/CSimpleFontString/CSimpleTexture.
  13. Ключевой набор слов SpaceRotation изменён на OrientationEx.
  14. Исправлена опечатка в ResetTrackableetMatrix на ResetTrackableMatrix.
  15. Добавлен перехват SetUnitFacingTimed для возможности поворота юнита при отключённой Авто Ориентации.
  16. Добавлен перехват SetUnitFacing для возможности поворота юнита при отключённой Авто Ориентации.
  17. Исправлены CreateProjectile/Ex возвращающие нуль вместо хендла.
  18. SetFrameSpriteMaterialScale переименовано в SetFrameSpriteMatrixScale.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.33.122

  1. Была проведена оптимизация/снижение количества проверок/срабатываний.
    Пометка 1: Дополнительные проверки наверное были перебором и скорее всего не нужны.
    Пометка 2: Возможно эти проверки в будущем будут возвращены как настраиваемые.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.34.124

  1. Новые Нативные Функции:
    native AntiHackEnableEx takes boolean enable, boolean isModuleCheck, boolean isProcessCheck returns nothing
    native AntiHackEnableModuleCheck takes boolean enable returns nothing
    native AntiHackEnableProcessCheck takes boolean enable returns nothing
  2. EnableAntiHack переименован в AntiHackEnable.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.35.127

  1. Новые Константы:
    constant originframetype ORIGIN_FRAME_TRAINABLE_BUTTON = ConvertOriginFrameType(51)
    constant originframetype ORIGIN_FRAME_CARGO_BUTTON = ConvertOriginFrameType(52)
    constant originframetype ORIGIN_FRAME_GROUP_BUTTON = ConvertOriginFrameType(53)
  2. Новые Нативные Функции:
    native RemoveProjectile takes projectile whichProjectile returns nothing
  3. Исправлена обработка Редактора Объектов, теперь стандартный РО может быть использован с UjAPI.
  4. FRAMEEVENT_DIALOG_ACCEPT теперь полноценно реализован.
  5. FRAMEEVENT_DIALOG_CANCEL теперь полноценно реализован.
  6. FRAMEEVENT_SPRITE_ANIM_UPDATE теперь полноценно реализован.
    Пометка: это событие происходит каждое обновление экрана для фрейма, я НЕ советую использовать это событие, если только оно именно необходимо.
  7. Оптимизировано и уменьшено количество отправляемых пакетов от действий Фреймов.
    Пометка: эта система банально ищет схожие/идентичные события и удаляет их из цикла посылаемых пакетов.
  8. Исправлена критическая ошибка вызываемая любым приказом на SHIFT. (это было связано с путевыми точками).
  9. Исправлена критическая ошибка при убийстве снаряда в момент его запуска.
  10. Исправлен отсутствующий пересчёт базовой скорости в MorphUnitToTypeId/Ex.
  11. FRAMEEVENT_CONTROL_CLICK теперь работает со фреймом миникарты.
  12. FRAMEEVENT_CONTROL_RELEASE теперь работает со фреймом миникарты.
  13. FRAMEEVENT_CONTROL_DRAG теперь работает со фреймом миникарты.
  14. Исправлена критическая ошибка от CreateDoodad.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.35.128

  1. Исправлена неправильная обработка GetEventDamage.
  2. Исправлена неправильная обработка Магического/Немагического урона.
    Пометка: IsEventAttack теперь работает правильно, UnitDamageTarget всегда считается "магической" атакой, однако если установлен буль isAttack, то добавится 0x100 флаг - "урон при попадании" (то бишь старая проверка на атаку).
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.35.129

  1. Исправлена ошибка по которой IsAttack некорректно срабатывала на юнитах ближнего боя имеющими Орб-Эффекты.
  2. Исправлена нерабочая кнопка проверки обновлений в UjAPIApp.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.36.132

  1. Новые Нативные Функции:
    native GetStringCount takes nothing returns integer
    native IsUnitTargetable takes unit whichUnit returns boolean
    native SetUnitTargetable takes unit whichUnit, boolean targetable returns nothing
    native GetFrameTextColourEx takes framehandle whichFrame, integer stateId returns integer 0 = font | 1 = highlighted | 2 = disabled | 3 = shadow
    native GetFrameTextColour takes framehandle whichFrame returns integer
    native SetFrameTextColourEx takes framehandle whichFrame, integer stateId, integer colour returns nothing
  2. Значительная оптимизация кода для Frame API, также было удалено большое количество теперь уже бесполезного кода.
  3. GetFrameWidth была переписана, теперь она работает успешно на всех типах фреймов и более не вызывает критическую ошибку на некоторых типах фреймов.
  4. GetFrameHeight была переписана, теперь она работает успешно на всех типах фреймов и более не вызывает критическую ошибку на некоторых типах фреймов.
  5. IsFrameEnabled теперь работает с CSimpleButton и с его дочерними фреймами.
  6. Исправлена критическая ошибка от атаки юнита с типом атаки Артиллерия, имея какой-либо орб-эффект.
    Пометка: это очень старая критическая ошибка самой игры.
  7. Исправлена критическая ошибка при подборе книг/рун на силу юнитами не героями.
  8. Исправлена критическая ошибка при подборе книг/рун на ловкость юнитами не героями.
  9. Исправлена критическая ошибка при подборе книг/рун на интеллект юнитами не героями.
  10. Исправлена критическая ошибка при подборе книг/рун на опыт юнитами не героями.
  11. Исправлена критическая ошибка при выдаче Инженерии (ANeg) юниту не герою.
  12. Исправлена критическая ошибка при движении юнита-владельца заклинаний типа Drain, которые были вызваны через CastAbilityTarget.
  13. Потенциально исправлена очень редкая ошибка, ввиду которой игрок терял контроль над своими юнитами, но мог контролировать чужих.
    Пометка 1: другие игроки МОГУТ контролировать юнитов этого игрока, так что ошибка локальная.
    Пометка 2: эта ошибка оказалась не связанной с выдачей контролей игроков.
31
native IsUnitTargetable takes unit whichUnit returns boolean
эта функция делает то же самое, что и выдача способности 'Aloc' (locust\москиты)..?
20
native IsUnitTargetable takes unit whichUnit returns boolean
эта функция делает то же самое, что и выдача способности 'Aloc' (locust\москиты)..?
SetUnitTargetable, и да, она работает по тому же принципу, только без минусов, то есть можно снять. Ну и она не выдаёт неуязвимость, её нужно выдавать отдельно.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.36.133

  1. Исправлены неверные возвращемые значения MathPointProjectionY.
  2. Исправлена EnableOPLimit, теперь она вновь может снимать лимиты Jass опкодов.
  3. Исправлены все нативные функции в Jass Thread API, они были связаны с ошибкой EnableOPLimit.
32
Надо-же, старые баги абилок уже стали от нечего делать исправлять, ну го подкину еще баганых абилок.
Apos - фаталит если кастер не докастовал способность и жертва разложилась.
20
Надо-же, старые баги абилок уже стали от нечего делать исправлять, ну го подкину еще баганых абилок.
Apos - фаталит если кастер не докастовал способность и жертва разложилась.
Не могу представить как это повторить, если дашь карту где это воспроизводится, то изучу и поправлю.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.36.134

  1. Исправлена HideOriginFrames не прячущая фрейм ClickableBlock.
  2. Исправлена критическая ошибка при использовании GetFrameText на текстовый фрейм с неинициализированным текстом.
  3. Исправлены странные комбинации аттак ввиду которых клоны начинали всегда наносить 100% урона.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.37.137

  1. Новые Типы:
    type sprite extends agent
  2. Новые Константы:
    constant camerafield CAMERA_FIELD_NEARZ = ConvertCameraField(7)
    constant camerafield CAMERA_FIELD_LOCAL_PITCH = ConvertCameraField(8)
    constant camerafield CAMERA_FIELD_LOCAL_YAW = ConvertCameraField(9)
    constant camerafield CAMERA_FIELD_LOCAL_ROLL = ConvertCameraField(10) Not implemented yet
  3. Новые Нативные Функции:
    native GetDoodadAnimationOffsetPercent takes doodad whichDoodad returns real

    native GetSpecialEffectSprite takes effect whichEffect returns sprite
    native GetSpecialEffectAnimationOffsetPercent takes effect whichEffect returns real

    native GetTrackableSprite takes trackable whichTrackable returns sprite
    native GetTrackableAnimationOffsetPercent takes trackable whichTrackable returns real

    native GetWidgetSprite takes widget whichWidget returns sprite
    native GetWidgetAnimationOffsetPercent takes widget whichWidget returns real

    native GetDestructableSprite takes destructable whichDestructable returns sprite
    native GetDestructableAnimationOffsetPercent takes destructable whichDestructable returns real

    native GetItemSprite takes item whichItem returns sprite
    native GetItemAnimationOffsetPercent takes item whichItem returns real

    native GetUnitSprite takes unit whichUnit returns sprite
    native GetUnitAnimationOffsetPercent takes unit whichUnit returns real

    native LaunchProjectileAt takes projectile whichProjectile, real x, real y, real z returns nothing
    native GetProjectileSprite takes projectile whichProjectile returns sprite
    native GetProjectileAnimationOffsetPercent takes projectile whichProjectile returns real
    native SetProjectileTargetPointX takes projectile whichProjectile, real x returns nothing
    native SetProjectileTargetPointY takes projectile whichProjectile, real y returns nothing
    native SetProjectileTargetPointZ takes projectile whichProjectile, real z returns nothing
    native SetProjectileTargetPositionLoc takes projectile whichProjectile, location loc returns nothing

    native GetFrameSprite takes framehandle whichFrame returns sprite
    native GetFrameSpriteAnimationOffsetPercent takes framehandle whichFrame returns real

    native CreateSprite takes boolean isUber returns sprite
    native AttachSpriteToTarget takes sprite whichSprite, sprite targetSprite, string attachPointName returns sprite
    native AddSpriteToTarget takes string modelName, sprite targetSprite, string attachPointName returns sprite
    native GetSpriteChildrenCount takes sprite whichSprite returns integer
    native GetSpriteChildById takes sprite whichSprite, integer index returns sprite
    native RemoveSprite takes sprite whichSprite returns nothing
    native IsSpriteUber takes sprite whichSprite returns boolean
    native GetSpriteX takes sprite whichSprite returns real
    native GetSpriteY takes sprite whichSprite returns real
    native GetSpriteZ takes sprite whichSprite returns real
    native GetSpriteHeight takes sprite whichSprite returns real
    native GetSpritePositionLoc takes sprite whichSprite returns location
    native SetSpritePositionEx takes sprite whichSprite, real x, real y, real z returns nothing
    native SetSpritePosition takes sprite whichSprite, real x, real y returns nothing
    native SetSpritePositionLoc takes sprite whichSprite, location loc returns nothing
    native SetSpriteX takes sprite whichSprite, real x returns nothing
    native SetSpriteY takes sprite whichSprite, real y returns nothing
    native SetSpriteZ takes sprite whichSprite, real z returns nothing
    native SetSpriteHeight takes sprite whichSprite, real height returns nothing
    native GetSpriteScreenX takes sprite whichSprite returns real
    native GetSpriteScreenY takes sprite whichSprite returns real
    native GetSpriteScale takes sprite whichSprite returns real
    native SetSpriteScale takes sprite whichSprite, real scale returns nothing
    native GetSpriteTimeScale takes sprite whichSprite returns real
    native SetSpriteTimeScale takes sprite whichSprite, real timescale returns nothing
    native SetSpritePlayerColour takes sprite whichSprite, playercolor color returns nothing
    native GetSpriteColour takes sprite whichSprite returns integer
    native SetSpriteColour takes sprite whichSprite, integer colour returns nothing
    native SetSpriteAlpha takes sprite whichSprite, integer alpha returns nothing
    native SetSpriteVertexColour takes sprite whichSprite, integer red, integer green, integer blue, integer alpha returns nothing
    native SetSpriteMatrixScale takes sprite whichSprite, real x, real y, real z returns nothing
    native ResetSpriteMatrix takes sprite whichSprite returns nothing
    native SetSpriteOrientationEx takes sprite whichSprite, real yaw, real pitch, real roll, integer eulerOrder returns nothing
    native GetSpriteYaw takes sprite whichSprite returns real
    native SetSpriteYaw takes sprite whichSprite, real yaw returns nothing
    native GetSpriteFacing takes sprite whichSprite returns real
    native SetSpriteFacing takes sprite whichSprite, real facing returns nothing
    native GetSpritePitch takes sprite whichSprite returns real
    native SetSpritePitch takes sprite whichSprite, real pitch returns nothing
    native GetSpriteRoll takes sprite whichSprite returns real
    native SetSpriteRoll takes sprite whichSprite, real roll returns nothing
    native SetSpriteOrientation takes sprite whichSprite, real yaw, real pitch, real roll returns nothing
    native SetSpriteMaterialTexture takes sprite whichSprite, string textureName, integer materialId, integer textureIndex returns nothing
    native SetSpriteTexture takes sprite whichSprite, string textureName, integer textureIndex returns nothing
    native SetSpriteReplaceableTexture takes sprite whichSprite, string textureName, integer textureIndex returns nothing
    native SetSpriteModel takes sprite whichSprite, string modelName returns nothing
    native SetSpriteModelEx takes sprite whichSprite, string modelName, integer playerColour returns nothing
    native GetSpriteModelObjectPositionX takes sprite whichSprite, string whichObject returns real
    native GetSpriteModelObjectPositionY takes sprite whichSprite, string whichObject returns real
    native GetSpriteModelObjectPositionZ takes sprite whichSprite, string whichObject returns real
    native GetSpriteModelObjectPositionLoc takes sprite whichSprite, string whichObject returns location
    native GetSpriteCurrentAnimationId takes sprite whichSprite returns integer
    native GetSpriteCurrentAnimationName takes sprite whichSprite returns string
    native SetSpriteAnimationWithRarityByIndex takes sprite whichSprite, integer animIndex, raritycontrol rarity returns nothing
    native SetSpriteAnimationWithRarity takes sprite whichSprite, string animationName, raritycontrol rarity returns nothing
    native SetSpriteAnimationByIndex takes sprite whichSprite, integer animIndex returns nothing
    native SetSpriteAnimation takes sprite whichSprite, string animationName returns nothing
    native QueueSpriteAnimationByIndex takes sprite whichSprite, integer animIndex returns nothing
    native QueueSpriteAnimation takes sprite whichSprite, string animationName returns nothing
    native GetSpriteAnimationOffsetPercent takes sprite whichSprite returns real
    native SetSpriteAnimationOffsetPercent takes sprite whichSprite, real percent returns nothing
  4. Исправлена критическая ошибка при использовании GetFrameName на фрейме у которого не было инициализировано имя.
  5. CORNER_FLAG переименован в BORDER_FLAG.
  6. Get/SetFrameCornerFlags переименованы в Get/SetFrameBorderFlags.
  7. Get/SetFrameCornerSize переименованы в Get/SetFrameBorderSize.
  8. UnitEnableAttack теперь полностью отключает атаку юниту.
  9. UnitEnableAttack теперь скрывает иконку заклинания атаки, но не скрывает иконку урона.
  10. GetFrameUnderMouse переименован в GetFrameUnderCursor.
  11. GetFrameUnderCursor теперь так же работает с любым типом CSimpleFrame и его дочерними типами.
    Пометка: приоритет: CSimpleFrame, CLayer (под курсором), CLayer (подсвеченный/в фокусе).
  12. SetFrameSpriteModel/SetFrameSpriteModelEx более не ломают анимации использованным моделям.
  13. Исправлена GetEventDamageTarget возвращающая неверные значения.
  14. Исправлена CreateAbility всегда возвращающая null.
  15. Все внутренние функции оперирующие на координатах теперь используют референсы, вместо указателей.
    Пометка: эта информация больше для меня, так как эти изменения никак не должны отразиться на игре.
  16. SetSpecialEffectAnimationOffsetPercent теперь возвращает nothing вместо boolean.
  17. SetTrackableAnimationOffsetPercent теперь возвращает nothing вместо boolean.
  18. SetWidgetAnimationOffsetPercent теперь возвращает nothing вместо boolean.
  19. SetDestructableAnimationOffsetPercent теперь возвращает nothing вместо boolean.
  20. SetItemAnimationOffsetPercent теперь возвращает nothing вместо boolean.
  21. SetUnitAnimationOffsetPercent теперь возвращает nothing вместо boolean.
  22. SetProjectileAnimationOffsetPercent теперь возвращает nothing вместо boolean.
  23. SetFrameSpriteAnimationOffsetPercent теперь возвращает nothing вместо boolean.
  24. SetSpecialEffectColour теперь возвращает nothing вместо boolean.
  25. SetSpecialEffectAlpha теперь возвращает nothing вместо boolean.
  26. SetSpecialEffectVertexColour теперь возвращает nothing вместо boolean.
  27. SetSpecialEffectYaw теперь возвращает nothing вместо boolean.
  28. SetSpecialEffectFacing теперь возвращает nothing вместо boolean.
  29. SetSpecialEffectPitch теперь возвращает nothing вместо boolean.
  30. SetSpecialEffectRoll теперь возвращает nothing вместо boolean.
  31. SetTrackableColour теперь возвращает nothing вместо boolean.
  32. SetTrackableAlpha теперь возвращает nothing вместо boolean.
  33. SetTrackableVertexColour теперь возвращает nothing вместо boolean.
  34. SetTrackableOrientationEx теперь возвращает nothing вместо boolean.
  35. SetTrackableYaw теперь возвращает nothing вместо boolean.
  36. SetTrackableFacing теперь возвращает nothing вместо boolean.
  37. SetTrackablePitch теперь возвращает nothing вместо boolean.
  38. SetTrackableRoll теперь возвращает nothing вместо boolean.
  39. SetProjectileColour теперь возвращает nothing вместо boolean.
  40. SetProjectileAlpha теперь возвращает nothing вместо boolean.
  41. SetProjectileVertexColour теперь возвращает nothing вместо boolean.
  42. SetProjectileOrientationEx теперь возвращает nothing вместо boolean.
  43. SetProjectileYaw теперь возвращает nothing вместо boolean.
  44. SetProjectileFacing теперь возвращает nothing вместо boolean.
  45. SetProjectilePitch теперь возвращает nothing вместо boolean.
  46. SetProjectileRoll теперь возвращает nothing вместо boolean.
  47. Исправлена TimerIsPaused возвращающая значения TimerIsPeriodic.
  48. Добавлены новые оффсеты в AntiHack.
  49. Исправлена ошибка по которой AntiHack перестал работать после первого срабатывания.
  50. Добавлена проверка целостности WorldFrame в AntiHack.
  51. Удалён лимит в 1024 символа у string литералов.
    Пометка: чтобы пользоваться этим изменением в JNGP нужно как-то обновить pjass, чтобы он позволял писать более 1024 символов в строке.
  52. Исправлены SetProjectileModel/SetProjectileModelEx не устанавливающие модель.
  53. LaunchTargetProjectile переименован в LaunchProjectileTarget.
  54. Исправлено TimerSetPeriodic.
  55. Все PositionLocation переименованы в PositionLoc, чтобы они совпадали с именами на ванилле.
  56. Все PositionEx переименованы в PositionWithZ, чтобы они совпадали с именами на ванилле.
  57. Все ModelObjectPosition(X/Y/Z) переименованы в ModelObject(X/Y/Z).
  58. Исправлена критическая ошибка при использовании UnitAddGroupEx.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.37.138

  1. Исправлена критическая ошибка от SetSpecialEffectX/Y/Z.
    Пометка: ошибка происходила из-за обрезания старого кода, новый метод не был идеален для более простых типов агентов.
  2. Исправлено "зависание" от SetUnitModel/Ex.
    Пометка: эта ошибка происходила случайно на определённых картах.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.38.140

  1. Новые Нативные Функции:
    native MathRealModulo takes real dividend, real divisor returns real
    native MathIntegerModulo takes integer dividend, integer divisor returns integer
    Note: I actually registered these natives long time ago, but forgot to add them to common.j.
    native GetSpriteModel takes sprite whichSprite returns string

    native GetSpecialEffectModel takes effect whichEffect returns string

    native GetTrackableModel takes trackable whichTrackable returns string

    native GetDestructableVariation takes destructable whichDestructable returns integer
    native SetDestructableVariation takes destructable whichDestructable, integer variation returns nothing
    native SetDestructableVariationEx takes destructable whichDestructable, integer variation, boolean ignoreStateCheck returns nothing ignoreStateCheck will skip checking for dead/alive variations of the model.
    native IsDestructableBlighted takes destructable whichDestructable returns boolean
    native SetDestructableBlighted takes destructable whichDestructable, boolean flag returns nothing
    native SetDestructablePositionWithZ takes destructable whichDestructable, real x, real y, real z returns nothing
    native SetDestructableZ takes destructable whichDestructable, real z returns nothing
    native GetDestructableModel takes destructable whichDestructable returns string

    native GetItemModel takes item whichItem returns string

    native SetUnitVisibleByPlayer takes unit whichUnit, player whichPlayer, boolean flag returns nothing
    native SetUnitDetectableByPlayer takes unit whichUnit, player whichPlayer, boolean flag returns nothing
    native GetUnitModel takes unit whichUnit returns string

    native GetProjectileModel takes projectile whichProjectile returns string

    native GetFrameSpriteModel takes framehandle whichFrame returns string
  2. Удалённые Нативные Функции:
    native GetUnitLocustFlag takes unit whichUnit returns integer
  3. Потенциально исправлена ошибка Jass Logger'а, ввиду которой иногда неправильно обрабатывался байткод.
  4. Было переделано чтение чексуммы скриптов, теперь оно должно быть более "мягким" для карт, у которых нет war3map.j.
  5. Исправлен парсер w3i, ввиду которого неправильно обрабатывался заголовок/подзаголовок/текст загрузочных экранов карт/кампаний.
  6. Удалён лимит пищи в 300 единиц.
  7. Исправлены все получатели/установщики Z для спрайтов/моделей и так далее. Поломка была создана из-за маленькой ошибки.
31
native SetDestructableZ takes destructable whichDestructable, real z returns nothing
Блин, буквально вчера сетовал, что нет такой функции. Прям мысли читаешь.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.39.142

  1. Новые Типы:
    type renderstage extends handle
  2. Новые Конверторы:
    constant native ConvertRenderStage takes integer i returns renderstage
  3. Новые Константы:
    constant renderstage RENDER_STAGE_SKYBOX = ConvertRenderStage(0)
    constant renderstage RENDER_STAGE_TERRAIN = ConvertRenderStage(1)
    constant renderstage RENDER_STAGE_FOG_OF_WAR = ConvertRenderStage(2)
    constant renderstage RENDER_STAGE_TERRAIN_SHADOW = ConvertRenderStage(3)
    constant renderstage RENDER_STAGE_WATER_SHADOW = ConvertRenderStage(4)
    constant renderstage RENDER_STAGE_BLIGHT = ConvertRenderStage(5)
    constant renderstage RENDER_STAGE_WEATHER = ConvertRenderStage(6)
    constant renderstage RENDER_STAGE_SELECTION_CIRCLE = ConvertRenderStage(7)
    constant renderstage RENDER_STAGE_INDICATOR = ConvertRenderStage(8)
    constant renderstage RENDER_STAGE_FOOTPRINT = ConvertRenderStage(9)
    constant renderstage RENDER_STAGE_DOODAD = ConvertRenderStage(10)
    constant renderstage RENDER_STAGE_SPRITE = ConvertRenderStage(11)
    constant renderstage RENDER_STAGE_SELECTION_SPRITE = ConvertRenderStage(12)
    constant renderstage RENDER_STAGE_DECORATION = ConvertRenderStage(13)
    constant renderstage RENDER_STAGE_WATER = ConvertRenderStage(14)
    constant renderstage RENDER_STAGE_SELECTION_BOX = ConvertRenderStage(15)
    constant renderstage RENDER_STAGE_TEXTURE = ConvertRenderStage(16)
    constant renderstage RENDER_STAGE_OCCLUSION_MASK = ConvertRenderStage(17)
    constant renderstage RENDER_STAGE_BUILDING = ConvertRenderStage(18)
    constant renderstage RENDER_STAGE_UBERSPLAT = ConvertRenderStage(19)
    constant renderstage RENDER_STAGE_LIGHTNING = ConvertRenderStage(20)
    constant renderstage RENDER_STAGE_TEXTTAG = ConvertRenderStage(21)
  4. Новые Нативные Функции:
    native GetFPS takes nothing returns real

    native GetAttackSpeedMinBonus takes nothing returns real
    native SetAttackSpeedMinBonus takes real value returns nothing
    native GetAttackSpeedMaxBonus takes nothing returns real
    native SetAttackSpeedMaxBonus takes real value returns nothing
    native GetMoveSpeedMinAllowed takes nothing returns real
    native SetMoveSpeedMinAllowed takes real value returns nothing
    native GetMoveSpeedMaxAllowed takes nothing returns real
    native SetMoveSpeedMaxAllowed takes real value returns nothing

    native IsSelectionEnabled takes nothing returns boolean
    native EnableSelection takes boolean enable returns nothing
    native IsSelectionCircleEnabled takes nothing returns boolean
    native EnableSelectionCircle takes boolean enable returns nothing
    native IsTargetIndicatorEnabled takes nothing returns boolean
    native EnableTargetIndicator takes boolean enable returns nothing
    native IsRenderStage takes renderstage renderStage returns boolean
    native EnableRenderStage takes renderstage renderStage, boolean enable returns nothing
    native IsStatbarEnabled takes nothing returns boolean
    native EnableStatbar takes boolean enable returns nothing

    native HandleListGetSpriteCount takes handlelist whichHandleList returns integer
    native HandleListGetSpriteByIndex takes handlelist whichHandleList, integer index returns sprite
    native HandleListGetFilterSprite takes nothing returns sprite
    native HandleListGetEnumSprite takes nothing returns sprite

    native SaveSpriteHandle takes hashtable table, integer parentKey, integer childKey, sprite whichsprite returns boolean
    native SaveDoodadHandle takes hashtable table, integer parentKey, integer childKey, doodad whichDoodad returns boolean
    native SaveTextFileHandle takes hashtable table, integer parentKey, integer childKey, textfilehandle whichFile returns boolean
    native LoadSpriteHandle takes hashtable table, integer parentKey, integer childKey returns sprite
    native LoadDoodadHandle takes hashtable table, integer parentKey, integer childKey returns doodad
    native LoadTextFileHandle takes hashtable table, integer parentKey, integer childKey returns textfilehandle
  5. Исправлена критическая ошибка при создании SIMPLETEXT/SIMPLETEXTURE через CreateFrame/CreateFrameByType с родителем не являющимся простым фреймом.
  6. Исправлена IsFrameVisible для SimpleFrames, всегда возвращающая "истину".
31
Карта начала вылетать на новой версии.
Попробовал запустить на предыдущей, 1.0.38.140, крита не словил...
Теперь искать, где фаталит...
Загруженные файлы
20
Скрины - бесполезные. Пожалуйста, на будуще, прикладывай error.txt и желательно .dmp файл. Но скорее всего ошибка связана с HandleList ибо я переделывал её код.
Ну или же прикрепил бы карту, чтобы я запустил и мог сам увидеть ошибку.
Редактирование: Ошибку нашёл и поправил, если на хотфиксе у тебя всё ещё будет фатал, то пожалуйста txt/dmp или же карту, ну или хотя бы кусок кода, который вызывает фатал.
Спасибо.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.39.143

  1. ParseTags теперь работает с данными заклинаний.
  2. Исправлена критическая ошибка от любого типа HandleListGetCount.
31
Исправлена критическая ошибка от любого типа HandleListGetCount.
Спасибо, помогло.

SetWidgetX() ломает отображение модели юнита.
Сама моделька остается в месте где изначально юнит и был и не двигается дальше вместе с юнитом. Сам юнит теперь отображается только в виде тени с кругом выделения.
Загруженные файлы
20
SetWidgetX() ломает отображение модели юнита.
Не нужно использовать Get/SetWidgetX/Y/Z на юнитах, это бесполезно, ибо по скорости разницы толком нет. Ошибку поправил.
Спасибо.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.39.144

  1. Исправлены SetWidgetX/Y/Z отделяющие спрайт от виджета.
  2. Проведена оптимизация внутреннего кода, а также удаление некоторых данных для уменьшения веса файла.
31
Не нужно использовать Get/SetWidgetX/Y/Z на юнитах, это бесполезно, ибо по скорости разницы толком нет. Ошибку поправил.
Мне это было удобно. т.к. в моей системе перемещения хранится вообще хендл. и это может быть как юнит, так и декорация или эффект.
38
Нужно instanceof в мире хендлов)
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.39.145

  1. Исправлено SetSpecialEffectX/Y/Z, предыдущее исправление для SetWidgetX/Y/Z повлияло на эту ошибку.
20
Unryze, когда автотесты?
Надеюсь никогда. )0
20
Вышла новая версия!
Прокрутить к ресурсу

v1.0.40.147

  1. Новые Нативные Функции:
    native GetWheelDelta takes nothing returns integer
    native GetVisionMax takes nothing returns real
    native SetVisionMax takes real value returns nothing
  2. Исправлена критическая ошибка от GetAbilityStringField при применении на заклинание у которого "одно" описание на все уровни, то бишь когда нет описаний на каждый уровень отдельно.
    Пометка: эта проблема связана с SLK оптимизацией.
  3. Добавлен метод реаллокации для описаний заклинаний с несколькими уровням, у которых отсутствуют тексты для всех уровней.
    Пример: "Ubertip=text", это значит, что заклинание на всех уровнях разделяет "text" как подсказку, однако внутри движка выделяется лишь 1 индекс.
  4. Пере-пере-исправлено SetDestructableZ, эта функция вновь сломалась из-за другого фикса для виджетов.
  5. Исправлены CreateBuff/UnitAddBuff/UnitAddBuffEx/UnitAddBuffById/UnitAddBuffByIdEx, которые не работали с SLK-оптимизированными картами.
  6. Добавлен хук на CreateImage, теперь эта функция использует CreateImageSimple как базу, чтобы смена размера более не ломала изображение.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.0.152

  1. Новые Типы:
type destructablestringfield extends agentdatafield
  1. Новые Конверторы:
constant native ConvertDestructableStringField takes integer i returns destructablestringfield
  1. Новые Константы:
constant destructablestringfield DESTRUCTABLE_SF_NAME = ConvertDestructableStringField('bnam')
constant destructablestringfield DESTRUCTABLE_SF_MODEL = ConvertDestructableStringField('bfil')
  1. Удалённые Нативные Функции:
native GetEventDamageAbilityId takes nothing returns integer
  1. Новые Нативные Функции:
native GetGameVersion takes nothing returns string
native GetDestructableStringField takes destructable whichDestructable, destructablestringfield whichField returns string
native SetDestructableStringField takes destructable whichDestructable, destructablestringfield whichField, string value returns boolean
native ItemAddAbility takes item whichItem, ability whichAbility returns boolean
native ItemRemoveAbility takes item whichItem, ability whichAbility returns boolean
native ItemAddAbilityId takes item whichItem, integer abilCode returns boolean
native ItemRemoveAbilityId takes item whichItem, integer abilCode returns boolean
native GetProjectileSourceAbility takes projectile whichProjectile returns ability
  1. Проведён большой рефакторинг кода, полностью переписаны все методы логирования на утилизацию нового std::format для полного отброса строк C-стиля.
Пометка: это изменение повлекло увеличение веса на 200кб, так как std::format достаточно увесистый.
  1. BlzSetItemName теперь полноценно реализован с его SetItemStringField эквивалентом.
  2. BlzSetItemDescription теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  3. BlzGetItemDescription теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  4. BlzSetItemTooltip теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  5. BlzGetItemTooltip теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  6. BlzSetItemExtendedTooltip теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  7. BlzGetItemExtendedTooltip теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  8. BlzSetItemIconPath теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  9. BlzGetItemIconPath теперь полноценно реализован с его SetItemStringField SetItemStringField эквивалентом.
  10. BlzSetUnitName теперь полноценно реализован с его SetItemStringField SetUnitStringField эквивалентом.
  11. BlzSetHeroProperName теперь полноценно реализован с его SetItemStringField SetUnitStringField эквивалентом.
  12. GetDestructableName теперь будет возвращать нестандартное значение, если оно существует.
  13. GetItemName теперь будет возвращать нестандартное значение, если оно существует.
  14. GetUnitName теперь будет возвращать нестандартное значение, если оно существует.
  15. GetHeroProperName теперь будет возвращать нестандартное значение, если оно существует.
  16. Исправлено неправильное поведение события OnDamaged когда входящий урон был равен нулю, так как игра посылала общий указатель, который подвергался изменению через SetEventDamage, тем самым ломая почти всю игру.
  17. Исправлена критическая ошибка от RemoveDoodad.
  18. GetUnitPrimaryStat переименован в GetHeroPrimaryAttribute.
  19. SetUnitPrimaryStat переименован в SetHeroPrimaryAttribute.
  20. GetItemAbility переименован в GetItemAbilityById.
  21. HandleListGetHandleByTypeId переименован в HandleListGetHandleById.
  22. HandleListEnumByTypeId переименован в HandleListEnumById.
  23. HandleListEnumByTypeIdEx переименован в HandleListEnumByIdEx.
  24. HandleListForEachByTypeId переименован в HandleListForEachById.
  25. HandleListForEachByTypeIdEx переименован в HandleListForEachByIdEx.
  26. BlzItemAddAbility теперь полноценно реализован с его UjAPI эквивалентом ItemAddAbilityById.
  27. BlzItemRemoveAbility теперь полноценно реализован с его UjAPI эквивалентом ItemRemoveAbilityById.
29
О да! Больше гаек, болтов и прочего... Мои гаечные ключи так и ждут, когда начнут закручиваться гайки, болты. Да и отвёртка тоже в деле будет. Близзарды курят нервно в сторонке. Анрайз делает годное, что даже рефорджед переплюнуло. Рефорджед близзардасов не рефорджед. UjAPI - вот он истинный рефорджед, которого все хотели. Или нет.
По сему я скажу: WarCraft III ReUnryzed
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.0.153

  1. Исправлена критическая ошибка от GetBuffBaseStringFieldById.
  2. Исправлена критическая ошибка от SetBuffBaseStringFieldById.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.0.154

  1. Удалено бесполезное логирование для ExecuteCode и схожих нативных функций.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.0.155

  1. Исправлена обработка пустой строки, которая вызывала тихое закрытие игры.
    Пометка: это произошло из-за внутренней рекурсии, которую я же и создал, если получаемый текст был пустой или равен nullptr.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.0.156

  1. Переделана обработка OnDamage, дабы избежать новую проблему, из-за которой юниты становились неуязвимыми.
    Пометка: это было связано с предыдущим исправлением 0-левого урона.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.1.158

  1. Новые Константы:
    constant playerunitevent EVENT_PLAYER_UNIT_ABILITY_ADDED = ConvertPlayerUnitEvent(503)
    constant playerunitevent EVENT_PLAYER_UNIT_ABILITY_REMOVED = ConvertPlayerUnitEvent(504)
    constant playerunitevent EVENT_PLAYER_UNIT_ABILITY_AUTOCAST_ON = ConvertPlayerUnitEvent(505)
    constant playerunitevent EVENT_PLAYER_UNIT_ABILITY_AUTOCAST_OFF = ConvertPlayerUnitEvent(506)
    constant unitevent EVENT_UNIT_ABILITY_ADDED = ConvertUnitEvent(513)
    constant unitevent EVENT_UNIT_ABILITY_REMOVED = ConvertUnitEvent(514)
    constant unitevent EVENT_UNIT_ABILITY_AUTOCAST_ON = ConvertUnitEvent(515)
    constant unitevent EVENT_UNIT_ABILITY_AUTOCAST_OFF = ConvertUnitEvent(516)
    constant originframetype ORIGIN_FRAME_FPS_TEXT = ConvertOriginFrameType(54)
    constant originframetype ORIGIN_FRAME_MEMORY_TEXT = ConvertOriginFrameType(55)
  2. Новые Нативные Функции:
    native GetMapFogZ takes nothing returns real
    native SetMapFogZ takes real z returns nothing
    native GetMapFogColour takes nothing returns integer
    native SetMapFogColour takes integer colour returns nothing
    native IsAbilityAutocastEnabled takes ability whichAbility returns boolean
  3. GetSpellAbility теперь работает с событиями баффов и новыми событиями заклинаний.
  4. GetSpellAbilityId теперь работает с событиями баффов и новыми событиями заклинаний.
  5. Исправлена SetAbilityOwner, которая не до конца работала с активными заклинаниями (они не отображались в панели, если были созданы напрямую через CreateAbility).
  6. Исправлена критическая ошибка от SetDoodadZ на 1.28f.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.1.159

  1. Исправлено взаимодействие UNIT_ABILITY_REMOVED с RemoveUnit, которое приводило к "замораживанию" процесса игры.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.1.160

  1. Исправлен баг связанный с добавлением/удалением заклинаний скрытому юниту.
    Пометка: это в целом плохой подход, когда юнит спрятан вы не должны ничего с ним делать, отобразите его в начале, а потом уже делайте что нужно!
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.2.163

  1. Новые Нативные Функции:
    native TextFileRead takes textfilehandle whichTextFile returns string
    native UnitAddItemToSlot takes unit whichUnit, item whichItem, integer itemSlot returns boolean
    native ReviveUnit takes unit whichUnit, real x, real y returns boolean
    native ReviveUnitLoc takes unit whichUnit, location loc returns boolean
  2. TextFileReadAll переименован в TextFileReadAllLines, теперь оно читает именно текст, а не сам файл.
  3. Добавлена экспериментальная поддержка CSimpleFrame в АПИ CBackdropFrame.
  4. Исправлена критическая ошибка от всех вариантов SetModel, эта ошибка связана с не-Ex вариациями, ибо цвет обрабатывался неверно.
  5. Добавлена более точная, но менее строгая внутренняя проверка на "активность" Агента (то, что он не удалён).
    Пометка: это изменение по большей части затрагивает новое АПИ юнитов, которое было через-чур строгое к скрытым/убитым/удалённым юнитам.
38
Вообще писать все эти Ex это плохие практики, когда разработчик не может придумать правильное имя функции. В винапи оно имеет смысл, т.к. добавляет огромный набор параметров, но все еще является примером плохой архитектуры
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.3.165

  1. Новые Типы:
    type connectiontype extends handle
  2. Новые Конверторы:
    constant native ConvertConnectionType takes integer i returns connectiontype
  3. Новые Константы:
    constant connectiontype CONNECTION_TYPE_SINGLE_PLAYER = ConvertConnectionType(0)
    constant connectiontype CONNECTION_TYPE_LOCAL_GAME = ConvertConnectionType(1)
    constant connectiontype CONNECTION_TYPE_BATTLE_NET = ConvertConnectionType(2)
    constant connectiontype CONNECTION_TYPE_REPLAY = ConvertConnectionType(3)
  4. Новые Нативные Функции:
    native GetConnectionType takes nothing returns connectiontype
  5. Исправлена некорректная работа GetFrameUnderCursor со фреймами не CSimpleFrame типа.
  6. Исправлено некорректное поведение GetEventIsAttack в DAMAGED событии.
  7. Добавлена поддержка CommandButton_0 по CommandButton_11 в GetFrameByName с contextId 0.
    Пометка: эти имена отвечают за кнопки заклинаний. Пример: GetFrameByName( "CommandButton_0", 0 ).
  8. Добавлена поддержка CommandButton_0 по CommandButton_5 в GetFrameByName с contextId 1.
    Пометка: эти имена отвечают за кнопки предметов. Пример: GetFrameByName( "CommandButton_0", 1 ).
  9. Исправлена некорректная обработка цвета в SetModel.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.4.167

1. Новые Типы:
	type war3image											extends agent
	type styleflag											extends handle
	type layerstyleflag										extends flagtype
	type controlstyleflag									extends flagtype
2. Новые Конверторы:
	constant native ConvertLayerStyleFlag					takes integer i returns layerstyleflag
	constant native ConvertControlStyleFlag					takes integer i returns controlstyleflag
3. Новые Константы:
	constant originframetype			ORIGIN_FRAME_SIMPLE_TOP										= ConvertOriginFrameType(56) // This frame contains all CSimpleRegions/CSimpleFrames.
	//
	constant layerstyleflag				LAYER_STYLE_SVIEWPOINT										= ConvertLayerStyleFlag(1)
	constant layerstyleflag				LAYER_STYLE_IGNORE_TRACK_EVENTS								= ConvertLayerStyleFlag(2)
	constant layerstyleflag				LAYER_STYLE_SHADING											= ConvertLayerStyleFlag(4)
	constant layerstyleflag				LAYER_STYLE_NO_DEPTH_SET									= ConvertLayerStyleFlag(16)
	constant layerstyleflag				LAYER_STYLE_NO_DEPTH_TEST									= ConvertLayerStyleFlag(32)
	//
	constant controlstyleflag 			CONTROL_STYLE_AUTOTRACK										= ConvertControlStyleFlag(1)
	constant controlstyleflag 			CONTROL_STYLE_CLICK_MOUSE_DOWN								= ConvertControlStyleFlag(2)
	constant controlstyleflag 			CONTROL_STYLE_RELEASE_NOTIFY								= ConvertControlStyleFlag(4)
	constant controlstyleflag 			CONTROL_STYLE_DRAG											= ConvertControlStyleFlag(8)
	constant controlstyleflag 			CONTROL_STYLE_HIGHLIGHT_FOCUS								= ConvertControlStyleFlag(32)
	constant controlstyleflag 			CONTROL_STYLE_HIGHLIGHT_HOVER								= ConvertControlStyleFlag(64)
	constant controlstyleflag 			CONTROL_STYLE_SLIDER_STEP									= ConvertControlStyleFlag(128)
	constant controlstyleflag 			CONTROL_STYLE_EXCLUSIVE										= ConvertControlStyleFlag(512)
	constant controlstyleflag 			CONTROL_STYLE_AT_LEAST_ONE									= ConvertControlStyleFlag(1024)
4. Удалённые Нативные Функции:
	native IsFrameDraggable									takes framehandle whichFrame returns boolean
	native SetFrameDraggable								takes framehandle whichFrame, boolean enabled returns nothing
	native GetFrameTrackState								takes framehandle whichFrame returns integer
	native SetFrameTrackState								takes framehandle whichFrame, integer trackState returns nothing // 0 - NONE | 1 - Track | 2 - Ignore Track
5. Новые Нативные Функции:
	native GetWar3ImagePlayerColour							takes war3image whichWar3Image returns playercolor // This gets glow/team colour.
	native SetWar3ImagePlayerColour							takes war3image whichWar3Image, playercolor color returns nothing // This sets Glow and Team Colour. Mimics the SetUnitColor.
	native SetWar3ImageMaterialTexture						takes war3image whichWar3Image, string textureName, integer materialId, integer textureIndex returns nothing
	native SetWar3ImageTexture								takes war3image whichWar3Image, string textureName, integer textureIndex returns nothing
	native SetWar3ImageReplaceableTexture					takes war3image whichWar3Image, string textureName, integer textureIndex returns nothing // 1 - TeamColour | 2 - TeamGlow | 11 - Cliff0/1 |  21 - "grabbed texture" for CCursorFrame | 31-37 trees.
	native GetWar3ImageModel								takes war3image whichWar3Image returns string
	native SetWar3ImageModel								takes war3image whichWar3Image, string modelName returns nothing
	native SetWar3ImageModelEx								takes war3image whichWar3Image, string modelName, integer playerColour returns nothing // 0-15, -1 to ignore the colour.
	native GetWidgetUnderCursor								takes nothing returns widget // Async
	native GetWidgetPlayerColour							takes widget whichWidget returns playercolor
	native SetWidgetPlayerColour							takes widget whichWidget, playercolor color returns nothing
	native GetDestructableUnderCursor						takes nothing returns destructable // Async
	native GetDestructablePlayerColour						takes destructable whichDestructable returns playercolor
	native SetDestructablePlayerColour						takes destructable whichDestructable, playercolor color returns nothing
	native GetItemUnderCursor								takes nothing returns item // Async
	native GetItemPlayerColour								takes item whichItem returns playercolor
	native SetItemPlayerColour								takes item whichItem, playercolor color returns nothing
	native IsItemDroppable									takes item whichItem returns boolean
	native GetUnitPlayerColour								takes unit whichUnit returns playercolor
	native SetUnitPlayerColour								takes unit whichUnit, playercolor color returns nothing
	native IsUnitGhosted									takes unit whichUnit returns boolean
	native SetUnitGhosted									takes unit whichUnit, boolean state, real transitionTime returns nothing // Attacking from this state does not cause the unit to exit Ghost state.
    native GetProjectilePlayerColour						takes projectile whichProjectile returns playercolor
	native GetDoodadPlayerColour							takes doodad whichDoodad returns playercolor
	native SetDoodadPlayerColour							takes doodad whichDoodad, playercolor color returns nothing
	native SetDoodadModelEx									takes doodad whichDoodad, string modelFile, integer playerId returns nothing
	native SetDoodadMaterialTexture							takes doodad whichDoodad, string textureName, integer materialId, integer textureIndex returns nothing
	native SetDoodadTexture									takes doodad whichDoodad, string textureName, integer textureIndex returns nothing
	native SetDoodadReplaceableTexture						takes doodad whichDoodad, string textureName, integer textureIndex returns nothing
	native IsFrameLayerFlag									takes framehandle whichFrame, layerstyleflag whichLayerStyle returns boolean
	native SetFrameLayerFlag								takes framehandle whichFrame, layerstyleflag whichLayerStyle, boolean isSet returns nothing
	native IsFrameControlFlag								takes framehandle whichFrame, controlstyleflag whichControlStyle returns boolean
	native SetFrameControlFlag								takes framehandle whichFrame, controlstyleflag whichControlStyle, boolean isSet returns nothing
	native GetFrameSpritePlayerColour						takes framehandle whichFrame returns playercolor
	native GetFrameMinMaxValues								takes framehandle whichFrame, integer valueId returns real // 0 = min | 1 = max
6. SetSpecialEffectVisibility переименован в SetSpecialEffectVisible.
7. SetTrackableVisibility переименован в SetTrackableVisible.
8. Исправлено PauseUnitEx позволяющая мёртвым юнитам атаковать.
	Пометка: это связано с неполным скрытием заклинаний, теперь заклинание атаки насильно скрывается.
9. Частично изменена обработка "RETURN" операции в JassVM, теперь она полностью обрабатывается через UjAPI и более не полагается на оригинальную функцию обработки байткода.
10. Исправлена критическая ошибка от CreateIllusion, так как оно ссылалась на изменённный код CAbilityInventory где я забыл, что GetIntegerField к сожалению работает со значениями с точкой в самом движке.
	Пометка: это было связано с проверкой размером инвентаря.
11. Исправлена работа с характеристиками заклинания "Бонусные Характеристики" (Aamk) через Field API.
12. Исправлено GetItemStringField возвращающая неверные значения.
13. Частично переделано внутреннее API Снарядов, чтобы предотвратить критические ошибки связанные с неправильным использованием API в коде.
14. Полностью переделано GetProjectileTargetX/Y/Z, теперь их значения хранятся в std::unordered_map, так как игра к сожалению не хранит эти точки, а если и хранит, то не так явно.
15. Исправлена критическая ошибка от HandleListGetHandleById.
16. Исправлена HandleListContainsTypeId срабатывающая только на первый индекс.
	Пометка: эта проблема появилась пару версий назад, после большого рефактора кода.
17. Исправлены поведения SetProjectileTargetX/Y/Z, которыеп запускали снаряд, заместо лишь установки точки цели.
	Пометка: если снаряд уже был запущен, то эти функции будут "перезапускать" снаряд на новую установленную точку, как и должны были.
18. Исправлена SetProjectileArc устанавливающая неверное значение.
19. Исправлено инвертирование событие CHECKBOX.
20. Добавлен темплейт для фреймов типа CHECKBOX.
21. SetFrameTexture теперь работает со всеми фреймами типа CControl.
22. SetFrameTexture теперь может менять текстуру галочки через эти индексы: 5 - галочка, 6 - галочка отключённая (серая).
23. widget теперь расширяет тип war3image вместо agent.
24. sprite теперь расширяет тип war3image вместо agent.
25. projectile теперь расширяет тип war3image вместо agent.
26. doodad теперь расширяет тип war3image вместо agent.
24. racepreference теперь расширяет тип flagtype вместо handle.
25. gametype теперь расширяет тип flagtype вместо handle.
26. mapflag теперь расширяет тип flagtype вместо handle.
27. movetype теперь расширяет тип flagtype вместо handle.
28. pathingaitype теперь расширяет тип flagtype вместо handle.
29. collisiontype теперь расширяет тип flagtype вместо handle.
30. targetflag теперь расширяет тип flagtype вместо handle.
31. unitcategory теперь расширяет тип flagtype вместо handle.
32. pathingflag теперь расширяет тип flagtype вместо handle.
33. GetUnitAbilityLevel now also properly works with buffs.
38
Похоже, тебе пора заключать блоки в ```, а то комментарии ловятся txt2
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.5.168

1. Новые Нативные Функции:
	native GetJassLocalInteger								takes string variableName returns integer
	native GetJassLocalReal									takes string variableName returns real
	native GetJassLocalString								takes string variableName returns string
	native GetJassLocalHandle								takes string variableName returns handle
	native GetJassLocalBoolean								takes string variableName returns boolean
	//
	native SetJassLocalInteger								takes string variableName, integer value returns boolean
	native SetJassLocalReal									takes string variableName, real value returns boolean
	native SetJassLocalString								takes string variableName, string value returns boolean
	native SetJassLocalHandle								takes string variableName, handle value returns boolean
	native SetJassLocalBoolean								takes string variableName, boolean value returns boolean
	//
	native GetOperationLimit								takes nothing returns integer
	native SetOperationLimit								takes integer opLimit returns nothing
	//
	native GetAbilityOwningAbility							takes ability whichAbility returns ability
2. Добавлена поддержка баффов CBuffLightningShield (Blsh) в CreateBuff/UnitAddBuff/ById.
3. Добавлена поддержка баффов CBuffPermImmolation (BNpi) в CreateBuff/UnitAddBuff/ById.
4. Добавлена поддержка баффов CBuffItemCloakOfFlames (BIcf) в CreateBuff/UnitAddBuff/ById.
5. Добавлена поддержка баффов CBuffPandaImmolation (Bpig) в CreateBuff/UnitAddBuff/ById.
6. Добавлена поддержка баффов CBuffAntiMagicShell (Bams) в CreateBuff/UnitAddBuff/ById.
7. Добавлена поддержка баффов CBuffAntiMagicShellTwo (Bam2) в CreateBuff/UnitAddBuff/ById.
8. Добавлена поддержка баффов CBuffFrostArmor (BUfa) в CreateBuff/UnitAddBuff/ById.
9. Исправлена критическая ошибка от SetImageTexture.
10. Восстановлен парсинг оффсетов для АнтиХака, он был выключен для тестов, затем я забыл включить его обратно.
11. Полностью переписан код CNetData::EVENT_TURNS::Process (НетСобытия/Пакеты), это должно исправить ошибку, по которой определённый игрок терял контролю над юнитом.
12. Отключён бесполезный принт внутренних сообщений OnWidgetDamage.
32
Ух ты наконец то, можно создавать баффы, и ненужно возится с аурой торнадо.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.6.169

1. Новые Константы:
	constant unitintegerfield			UNIT_IF_PROPER_NAME_INDEX									= ConvertUnitIntegerField('uprd') // Gets/Sets currently active name from the list | Instance Unit Only.
	constant unitintegerfield			UNIT_IF_PROPER_NAME_GENERATION								= ConvertUnitIntegerField('uprg') // This sets the Roman numeration of the unit, a number is contained. | Instance Unit Only.
2. Новые Нативные Функции:
	native IntToRoman takes integer i returns string
3. Исправлена неправильная работа BlzSetUnitAbilityCooldown изменяющая данные заклинаний глобально, а не на базе Instance API.
4. Исправлена неправильная работа BlzGetUnitAbilityCooldown изменяющая данные заклинаний глобально, а не на базе Instance API.
5. Исправлена неправильная работа BlzGetUnitAbilityManaCost изменяющая данные заклинаний глобально, а не на базе Instance API.
6. Исправлена неправильная работа BlzSetUnitAbilityManaCost изменяющая данные заклинаний глобально, а не на базе Instance API.
7. Добавлен метод LoadBoolean( null, 0, StringHash( "ujapi" ) ) для проверки на то, что карта на UjAPI без использования нативных функций.
	Пометка: данный метод будет всегда возвращать false на Reforged и так далее.
8. Исправлены все Widget/Destructable/Item/Unit Get/SetStringField нативные функции возвращающие/устанавливающие неправильные значения.
9. Исправлена неправильная обработка GetUnitAbilityLevel (возвращаемое значение было индексом, а не уровнем, где уровень = индекс + 1.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.7.171

1. Новые Типы:
type orderhandle extends agent
2. Новые Нативные Функции:
native GetLightningWidth takes lightning whichBolt returns real
native SetLightningWidth takes lightning whichBolt, real value returns nothing
//
native GetUnitOrderByIndex takes unit whichUnit, integer index returns orderhandle
native GetUnitOrderByOrderId takes unit whichUnit, integer orderId, integer index returns orderhandle // since units can queue same orders, this allows to differentiate between them.
native UnitRemoveOrderByIndex takes unit whichUnit, integer index returns boolean
native UnitRemoveOrderByOrderId takes unit whichUnit, integer orderId, boolean eraseAllSimilar returns boolean
native UnitReverseOrders takes unit whichUnit returns nothing
//
native GetTriggerOrder takes nothing returns orderhandle
native OrderGetNext takes orderhandle whichOrder returns orderhandle
native OrderGetId takes orderhandle whichOrder returns integer // returns actual order id, "move" as 851986.
native OrderGetTargetX takes orderhandle whichOrder returns real
native OrderGetTargetY takes orderhandle whichOrder returns real
native OrderGetTargetLoc takes orderhandle whichOrder returns location
// Patrol orders only?
native OrderGetSourceX takes orderhandle whichOrder returns real
native OrderGetSourceY takes orderhandle whichOrder returns real
native OrderGetSourceLoc takes orderhandle whichOrder returns location
//
native OrderGetTarget takes orderhandle whichOrder returns widget
native OrderGetTargetDestructable takes orderhandle whichOrder returns destructable
native OrderGetTargetItem takes orderhandle whichOrder returns item
native OrderGetTargetUnit takes orderhandle whichOrder returns unit
//
native HandleListGetOrderCount takes handlelist whichHandleList returns integer
native HandleListGetOrderByIndex takes handlelist whichHandleList, integer index returns orderhandle
native HandleListGetFilterOrder takes nothing returns orderhandle
native HandleListGetEnumOrder takes nothing returns orderhandle
native HandleListEnumUnitOrders takes handlelist whichHandleList, unit whichUnit, boolexpr filter returns nothing
//
3. Исправлены некорректно работающие SetBuffInteger/Real/Boolean API полей с некоторыми баффами.
4. Исправлены все нативные функции Queue API, которые не добавляли приказы в очередь.

v1.1.7.172 (Хотфикс):

1. Пере-исправлено SetBuffInteger/Real/Boolean некорректная обработка в API полей, на некоторых баффах.
2. Исправлена некорректная обработка CBuffSilence через API.
3. Исправлена некорректная обработка CBuffCripple через API.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.7.173 (Хотфикс)

1. Исправлена инвертированная работа EnableUnitAbility и DisableUnitAbility.
2. Очередное большое изменение Buff API полей, на некоторые баффы работало лишь последнее изменённое поле.
	Пометка: данное исправление потребовало куда больше кода, чем ожидалось, однако это должно быть последнее исправление, так как старых или же новых проблем не было выявлено.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.7.174 (Хотфикс)

1. Исправлена некорректная обработка длительности CBuffSpeed и её дочерних баффов: CBuffSpeedBonus/CBuffEarthquake/CBuffSlow.
2. Исправлено неверное поведение SetBuffOwner с баффами созданными через CreateBuff.
3. SetBuffRemainingDuration теперь работает с баффами, изначальная длительность которых равна 0.
4. CBuffSilence созданное через CreateBuff/UnitAddBuffById/Ex теперь правильно накладывает безмолвие на нужные заклинания/атаки.
5. Исправлена критическая ошибка от изменения любых полей у CBuffSilence через Buff Field API.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.8.178

1. Новые Типы:
	type layoutstyleflag									extends flagtype
	type gridstyleflag										extends flagtype
2. Новые Конверторы:
	constant native ConvertLayoutStyleFlag					takes integer i returns layoutstyleflag
	constant native ConvertGridStyleFlag					takes integer i returns gridstyleflag
3. Новые Константы:
	constant layoutstyleflag			LAYOUT_STYLE_BOUNDING_FRAME_POSITION						= ConvertLayoutStyleFlag(1)
	constant layoutstyleflag			LAYOUT_STYLE_ALWAYS_TRACK									= ConvertLayoutStyleFlag(2)
	constant layoutstyleflag			LAYOUT_STYLE_NO_ENV											= ConvertLayoutStyleFlag(4)
	//
	constant gridstyleflag				GRID_STYLE_JUSTIFY_LEFT										= ConvertGridStyleFlag(8)
	constant gridstyleflag				GRID_STYLE_JUSTIFY_RIGHT									= ConvertGridStyleFlag(16)
	constant gridstyleflag				GRID_STYLE_JUSTIFY_TOP										= ConvertGridStyleFlag(32)
	constant gridstyleflag				GRID_STYLE_JUSTIFY_BOTTOM									= ConvertGridStyleFlag(64)
	constant gridstyleflag				GRID_STYLE_JUSTIFY_MIDDLE									= ConvertGridStyleFlag(128)
	constant gridstyleflag				GRID_STYLE_JUSTIFY_CENTER									= ConvertGridStyleFlag(256)
	constant gridstyleflag				GRID_STYLE_PACK_ITEMS										= ConvertGridStyleFlag(512)
	//
	constant layerstyleflag				LAYER_STYLE_SCROLL											= ConvertLayerStyleFlag(8)
	//
	constant controlstyleflag 			CONTROL_STYLE_HIGHLIGHT_ON_FOCUS							= ConvertControlStyleFlag(16)
	constant controlstyleflag 			CONTROL_STYLE_HIGHLIGHT										= ConvertControlStyleFlag(256)
	//
	constant abilitytype				ABILITY_TYPE_POSITIVE										= ConvertAbilityType(0)
	constant abilitytype				ABILITY_TYPE_NEGATIVE										= ConvertAbilityType(1)
	constant abilitytype				ABILITY_TYPE_AURA											= ConvertAbilityType(2)
	constant abilitytype				ABILITY_TYPE_BUFF											= ConvertAbilityType(3)
	constant abilitytype				ABILITY_TYPE_TIMED_LIFE										= ConvertAbilityType(4)
	constant abilitytype				ABILITY_TYPE_PHYSICAL										= ConvertAbilityType(5)
	constant abilitytype				ABILITY_TYPE_MAGICAL										= ConvertAbilityType(6)
	constant abilitytype				ABILITY_TYPE_AUTODISPEL										= ConvertAbilityType(7)
4. Новые Нативные Функции:
	native GetUnitAbilityEx									takes unit whichUnit, integer aid, integer id returns ability  // Allows you to search through duplicates.
	native GetUnitBuffEx									takes unit whichUnit, integer buffId, integer id returns buff // Allows you to search through duplicates.
	native IsAbilityType									takes ability whichAbility, abilitytype whichAbilityType returns boolean
	native IsBuffDispelleable								takes buff whichBuff returns boolean
	native SetBuffDispelleable								takes buff whichBuff, boolean isSet returns nothing
	native PauseBuff										takes buff whichBuff, boolean pause returns nothing
	native IsFrameLayoutFlag								takes framehandle whichFrame, layoutstyleflag whichLayoutStyle returns boolean
	native SetFrameLayoutFlag								takes framehandle whichFrame, layoutstyleflag whichLayoutStyle, boolean isSet returns nothing
	native IsFrameGridFlag									takes framehandle whichFrame, gridstyleflag whichGridStyle returns boolean
	native SetFrameGridFlag									takes framehandle whichFrame, gridstyleflag whichGridStyle, boolean isSet returns nothing
	native GetFrameGridRows 								takes framehandle grid returns integer
	native GetFrameGridColumns 								takes framehandle grid returns integer
	native SetFrameGridSize 								takes framehandle grid, integer row, integer column returns nothing
	native GetFrameGridFrame 								takes framehandle grid, integer row, integer column returns framehandle
	native GetFrameGridFrameById 							takes framehandle grid, integer id returns framehandle
	native SetFrameGridFrame 								takes framehandle grid, integer row, integer column, framehandle whichFrame returns nothing
	native IsBuffBarRenderDuplicates 						takes nothing returns boolean
	native SetBuffBarRenderDuplicates 						takes boolean allow returns nothing // this will allow the rendering (drawing) of duplicate (similar) buffs. By default is off.
6. CONTROL_STYLE_HIGHLIGHT_HOVER переименован в CONTROL_STYLE_HIGHLIGHT_ON_MOUSE_OVER.
5. Исправлено получение текстур через Get/SetFrameTexture с Console UI.
6. SetBuffRemainingDuration теперь возвращает nothing вместо boolean.
7. Исправлена ошибка по которой SetBuffRemainingDuration стартовало бафф, даже если юнит в паузе.
8. Исправлена ошибка по которой SetBuffRemainingDuration не сохраняло оставшееся значение когда юнит в паузе.
9. RefreshBuff теперь возвращает nothing вместо boolean.
10. RefreshBuff теперь вызывает события EVENT_PLAYER_UNIT_BUFF_REFRESHED и EVENT_UNIT_BUFF_REFRESHED.
11. SetFrameGridSize теперь полноценно поддерживает ORIGIN_FRAME_BUFF_BAR.
12. SetFrameGridSize теперь полноценно поддерживает ORIGIN_FRAME_COMMAND_BAR.
	Пометка: Хоткеи тоже работают.
13. Исправлена критическая ошибка от CBuffAuraEndurance при использовании через Buff API.
14. Исправлена критическая ошибка от CBuffAuraSlow при использовании через Buff API.
15. Исправлена критическая ошибка от CBuffAuraThorns при использовании через Buff API.
16. PauseUnitEx полностью переделана, теперь она более не прячет Атаку, но и не позволяет мёртвым юнитам атаковать.
Загруженные файлы
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.9.181

1. Новые Константы:
	constant itemintegerfield			ITEM_IF_HOTKEY												= ConvertItemIntegerField('ihot')
2. Новые Нативные Функции:
	// Base Field API
	native GetBuffBaseIntegerFieldById						takes integer bid, abilityintegerfield whichField returns integer
	native SetBuffBaseIntegerFieldById						takes integer bid, abilityintegerfield whichField, integer value returns boolean
	native GetBuffBaseBooleanFieldById						takes integer bid, abilitybooleanfield whichField returns boolean
	native SetBuffBaseBooleanFieldById						takes integer bid, abilitybooleanfield whichField, boolean value returns boolean
	native GetBuffBaseRealFieldById							takes integer bid, abilityrealfield whichField returns real
	native SetBuffBaseRealFieldById							takes integer bid, abilityrealfield whichField, real value returns boolean
	native GetBuffBaseIntegerArrayFieldById					takes integer bid, abilityintegerfield whichField, integer index returns integer
	native SetBuffBaseIntegerArrayFieldById					takes integer bid, abilityintegerfield whichField, integer index, integer value returns boolean
	native AddBuffBaseIntegerArrayFieldById					takes integer bid, abilityintegerfield whichField, integer value returns boolean
	native RemoveBuffBaseIntegerArrayFieldById				takes integer bid, abilityintegerfield whichField, integer value returns boolean
	native GetBuffBaseBooleanArrayFieldById					takes integer bid, abilitybooleanfield whichField, integer index returns boolean
	native SetBuffBaseBooleanArrayFieldById					takes integer bid, abilitybooleanfield whichField, integer index, boolean value returns boolean
	native AddBuffBaseBooleanArrayFieldById					takes integer bid, abilitybooleanfield whichField, boolean value returns boolean
	native RemoveBuffBaseBooleanArrayFieldById				takes integer bid, abilitybooleanfield whichField, boolean value returns boolean
	native GetBuffBaseRealArrayFieldById					takes integer bid, abilityrealfield whichField, integer index returns real
	native SetBuffBaseRealArrayFieldById					takes integer bid, abilityrealfield whichField, integer index, real value returns boolean
	native AddBuffBaseRealArrayFieldById					takes integer bid, abilityrealfield whichField, real value returns boolean
	native RemoveBuffBaseRealArrayFieldById					takes integer bid, abilityrealfield whichField, real value returns boolean
	native GetBuffBaseStringArrayFieldById					takes integer bid, abilitystringfield whichField, integer index returns string
	native SetBuffBaseStringArrayFieldById					takes integer bid, abilitystringfield whichField, integer index, string value returns boolean
	native AddBuffBaseStringArrayFieldById					takes integer bid, abilitystringfield whichField, string value returns boolean
	native RemoveBuffBaseStringArrayFieldById				takes integer bid, abilitystringfield whichField, string value returns boolean
	//
	// Field API
	native GetBuffIntegerArrayField							takes buff whichBuff, abilityintegerfield whichField, integer index returns integer
	native SetBuffIntegerArrayField							takes buff whichBuff, abilityintegerfield whichField, integer index, integer value returns boolean
	native AddBuffIntegerArrayField							takes buff whichBuff, abilityintegerfield whichField, integer value returns boolean
	native RemoveBuffIntegerArrayField						takes buff whichBuff, abilityintegerfield whichField, integer value returns boolean
	native GetBuffBooleanArrayField							takes buff whichBuff, abilitybooleanfield whichField, integer index returns boolean
	native SetBuffBooleanArrayField							takes buff whichBuff, abilitybooleanfield whichField, integer index, boolean value returns boolean
	native AddBuffBooleanArrayField							takes buff whichBuff, abilitybooleanfield whichField, boolean value returns boolean
	native RemoveBuffBooleanArrayField						takes buff whichBuff, abilitybooleanfield whichField, boolean value returns boolean
	native GetBuffRealArrayField							takes buff whichBuff, abilityrealfield whichField, integer index returns real
	native SetBuffRealArrayField							takes buff whichBuff, abilityrealfield whichField, integer index, real value returns boolean
	native AddBuffRealArrayField							takes buff whichBuff, abilityrealfield whichField, real value returns boolean
	native RemoveBuffRealArrayField							takes buff whichBuff, abilityrealfield whichField, real value returns boolean
	native GetBuffStringArrayField							takes buff whichBuff, abilitystringfield whichField, integer index returns string
	native SetBuffStringArrayField							takes buff whichBuff, abilitystringfield whichField, integer index, string value returns boolean
	native AddBuffStringArrayField							takes buff whichBuff, abilitystringfield whichField, string value returns boolean
	native RemoveBuffStringArrayField						takes buff whichBuff, abilitystringfield whichField, string value returns boolean
	//
3. SetFrameGridFrame теперь поддерживает CSimpleFontString и CSimpleTexture.
4. Переделана логика метода копирования CAbilityBase и CAbilityUIDef, теперь они должны работать полноценно.
5. SetAbility/BuffStringField теперь полноценно работают с ABILITY_SLF_CASTER, ABILITY_SLF_TARGET, ABILITY_SLF_SPECIAL, ABILITY_SLF_EFFECT и ABILITY_SLF_AREA_EFFECT.
6. ABILITY_SLF_CASTER, ABILITY_SLF_TARGET, ABILITY_SLF_SPECIAL, ABILITY_SLF_EFFECT and ABILITY_SLF_AREA_EFFECT теперь могут быть обработаны как массивы полей.
7. Исправлен старый визуальный баг "ванилы" связанный с перезарядкой предметов, анимация которых начиналась с нуля, а не сохраняла текущую позицию.
8. Исправлена ошибка по которой GetTriggerFrameMouseButton не работала с FRAMEEVENT_MOUSE_UP и FRAMEEVENT_MOUSE_DOWN.
9. Исправлена некорректная обработка нетКода фреймов для FRAMEEVENT_CONTROL_CLICKED и FRAMEEVENT_CONTROL_DRAG.
10. ITEM_IF_HOTKEY теперь может быть использовано для установки уникальных для предмета хоткеев, которые не привязаны к NUMPAD.
11. Убран 1024 лимит символов для подсказок (обычно используемый для имени) для Заклинаний.
12. Убран 1024 лимит символов для расширенных подсказок для Заклинаний.
13. Убран 1024 лимит символов для Researchtip/Learntip для Заклинаний.
14. Убран 96 лимит символов для подсказок (обычно используемый для имени) для баффов.
15. Убран 1024 лимит символов для расширенных подсказок для баффов.
16. Убран 96 лимит символов для подсказок (обычно используемый для имени) для предметов.
17. Убран 1024 лимит символов для расширенных подсказок для предметов.

v1.1.9.182 (Хотфикс)

1. Исправлена критическая ошибка от наведения на "предметы" в магазинах, то бишь Asud, AHer и так далее.

v1.1.9.183 (Хотфикс)

1. Исправлена критическая ошибка от оставшихся Заклинаний/Пустых заклинаний.

v1.1.9.184 (Хотфикс)

1. Исправлены бесконечно-дублюирующиеся визуалы баффов выданных аурами.
	Пометка: это происходило только если был включен режим прорисовки "дубликатов" (схожих) баффов.
2. Исправлена проблема по которой баффы выданные аурами не имели описаний.

v1.1.9.185 (Хотфикс)

1. Исправлена некорректная обработка GetItemUseSlotId, которая иногда приводила к перекрыванию других приказов.

v1.1.9.186 (Хотфикс)

1. Исправлены неправильные значения виртуальной таблицы функций CBuffIndicator для 1.27a/1.27b/1.28f.

v1.1.9.187 (Хотфикс)

1. Исправлена критическая ошибка от RemoveSprite.
Загруженные файлы
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.10.190

1. Новые Типы:
	type framestate 										extends flagtype
2. Новые Конверторы:
	constant native ConvertFrameState						takes integer i returns framestate
3. Новые Константы:
	constant framestate					FRAME_STATE_SIMPLE_BUTTON_ENABLED							= ConvertFrameState(0)
	constant framestate					FRAME_STATE_SIMPLE_BUTTON_DISABLED							= ConvertFrameState(1)
	constant framestate					FRAME_STATE_SIMPLE_BUTTON_PUSHED							= ConvertFrameState(2)
	constant framestate					FRAME_STATE_SIMPLE_BUTTON_CURRENT							= ConvertFrameState(3)
	//
	constant framestate					FRAME_STATE_CONTROL_CURRENT									= ConvertFrameState(0)
	constant framestate					FRAME_STATE_CONTROL_ENABLED									= ConvertFrameState(1)
	constant framestate					FRAME_STATE_CONTROL_PUSHED									= ConvertFrameState(2)
	constant framestate					FRAME_STATE_CONTROL_DISABLED								= ConvertFrameState(3)
	constant framestate					FRAME_STATE_CONTROL_CHECK_ENABLED							= ConvertFrameState(5)
	constant framestate					FRAME_STATE_CONTROL_CHECK_DISABLED							= ConvertFrameState(6)
4. Новые Нативные Функции:
	native GetFrameState									takes framehandle whichFrame returns framestate
	native SetFrameState									takes framehandle whichFrame, framestate whichFrameState returns nothing
5. Исправлена критическая ошибка от SetFramePriority при установке приоритета выше 8 на CSimpleFrames.
6. Исправлена критическая ошибка от SetFramePriority при установке приоритета выше 4 на CSimpleRegions.
7. Исправлено инвертированное поведение SetFrameEnabled с CSimpleButtons.
8. Исправлена неправильная обработка цвета в SetFrameColour (внутренние функции были исправлены раннее, но не само АПИ).
9. Исправлена неправильная обработка некоторых полей через SetAbilityIntegerField.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.10.191

1. Сделан откат фикса "эксплоита", который позволял прятать некоторые кнопки на командной панели благодаря отрицательным X/Y значениям.
	Пометка: теперь это работает универсально для всех поддерживаемых патчей, то бишь если X или же Y отрицательны, то эта кнопка не будет прорисована.
2. Исправлена критическая ошибка от виджетов у которых отсутствует описание или же расширенное описание.

v1.1.10.192

1. Исправлена застревающая на 99.99% (то бишь в самом конце) анимация перезарядки предметов.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.11.199

1. Добавлен AngelScript - новый скрпитовый язык с синтаксическим стилем C++ у которого есть строгая типизация как у Jass.
	Пометка: вы можете сравнить этот язык с vJass в плане синтаксиса. Этот язык во много раз быстрее Jass и имеет множество современных парадигм.
2. Новые Константы:
	constant gameevent					EVENT_GAME_AGENT_DESTROYED									= ConvertGameEvent(800)
	constant gameevent					EVENT_GAME_AGENT_ARRIVAL									= ConvertGameEvent(801)
	constant gameevent					EVENT_GAME_AGENT_CANT_PATH									= ConvertGameEvent(802)
	constant gameevent					EVENT_GAME_AGENT_WARP_START									= ConvertGameEvent(803)
	constant gameevent					EVENT_GAME_AGENT_WARP_END									= ConvertGameEvent(804)
	constant gameevent					EVENT_GAME_WIDGET_DAMAGING									= ConvertGameEvent(805)
	constant gameevent					EVENT_GAME_WIDGET_DAMAGED									= ConvertGameEvent(806)
	constant gameevent					EVENT_GAME_WIDGET_DEATH										= ConvertGameEvent(807)
	//
	constant playerevent				EVENT_PLAYER_WIDGET_TRACK									= ConvertPlayerEvent(320)
	constant playerevent				EVENT_PLAYER_WIDGET_GHOST_TRACK								= ConvertPlayerEvent(321)
	constant playerevent				EVENT_PLAYER_WIDGET_CLICK									= ConvertPlayerEvent(322)
	constant playerevent				EVENT_PLAYER_WIDGET_GHOST_CLICK								= ConvertPlayerEvent(323)
	constant playerevent				EVENT_PLAYER_TERRAIN_CLICK									= ConvertPlayerEvent(324)
3. Новые Нативные Функции:
	native HexToInt											takes string hex returns integer
	//
	native ResetAbilityOrder								takes ability whichAbility returns nothing
	//
	native GetWidgetZ										takes widget whichWidget returns real
	native SetWidgetZ										takes widget whichWidget, real z returns nothing
	native ResetWidgetZ										takes widget whichWidget returns nothing // returns Z control to game.
	native GetWidgetHeight									takes widget whichWidget returns real
	native SetWidgetHeight									takes widget whichWidget, real height returns nothing
	native SetWidgetPositionWithZ							takes widget whichWidget, real x, real y, real z returns nothing
	//
	native GetDestructableHeight							takes destructable whichDestructable returns real
	native SetDestructableHeight							takes destructable whichDestructable, real height returns nothing
	native GetDestructableZ									takes destructable whichDestructable returns real
	native ResetDestructableZ								takes destructable whichDestructable returns nothing // returns Z control to game.
	//
	constant native GetTriggerItem							takes nothing returns item
	native GetItemOwner										takes item whichItem returns unit
	native GetItemZ											takes item whichItem returns real
	native SetItemX											takes item whichItem, real x returns nothing
	native SetItemY											takes item whichItem, real y returns nothing
	native SetItemZ											takes item whichItem, real z returns nothing
	native SetItemPositionWithZ								takes item whichItem, real x, real y, real z returns nothing
	native ResetItemZ										takes item whichItem returns nothing // returns Z control to game.
	native GetItemHeight									takes item whichItem returns real
	native SetItemHeight									takes item whichItem, real height returns nothing
	//
	native SaveBuffHandle									takes hashtable table, integer parentKey, integer childKey, buff whichBuff returns boolean
	native SaveWar3Image									takes hashtable table, integer parentKey, integer childKey, war3image whichWar3Image returns boolean
	native LoadBuffHandle									takes hashtable table, integer parentKey, integer childKey returns buff
	native LoadWar3ImageHandle								takes hashtable table, integer parentKey, integer childKey returns war3image
	//
	native SetUnitPositionEx								takes unit whichUnit, boolean breakOrder, boolean checkPathing, real x, real y, real z returns nothing
	native SetUnitPositionWithZ								takes unit whichUnit, real x, real y, real z returns nothing
	native SetUnitZ											takes unit whichUnit, real z returns nothing
	native ResetUnitZ										takes unit whichUnit returns nothing // returns Z control to game.
	native GetUnitHeight									takes unit whichUnit returns real
	native SetUnitHeight									takes unit whichUnit, real height returns nothing
	native SetUnitResourceCurrent							takes unit whichUnit, integer amount returns nothing // only works on units that can "keep" gathered resources.
	native GetUnitResourceCapacity							takes unit whichUnit, integer resourceType returns integer // 0 for gold, 1 for lumber.
	native SetUnitResourceCapacity							takes unit whichUnit, integer resourceType, integer amount returns nothing // only works on units that can "keep" gathered resources.
	native GetUnitResourcePerGather							takes unit whichUnit, integer resourceType returns integer
	native SetUnitResourcePerGather							takes unit whichUnit, integer resourceType, integer amount returns nothing // for gold simply changes capacity
	native GetUnitResourceGatherInterval					takes unit whichUnit, returns real // wisp only
	native SetUnitResourceGatherInterval					takes unit whichUnit, real interval returns nothing
4. Удалён предыдущий механизм обработки netCode пакетов, который удалял дубликаты "событий", для избежания лимита в 1024 байта.
	Пометка: это был достаточно медленный процесс, который не особо нужен после полноценной переделки обработки NetCode.
5. Лимит в 1024 байтов был зафиксирован для нестадартных NetCode событий, так как если лимит был достигнут, то игра отвергала оставшиеся пакеты.
	Пометка: превышение лимита может вызывать проблемы, такие как неправильная обработка полученных пакетов, типа приказов юнитов и так далее.
6. Исправлена критическая ошибка от использования предметов на 1.27a/1.27b/1.28f.
7. Исправлена критическая ошибка от переноса предмета в другой слот на 1.27a/1.27b/1.28f.
8. Добавлено выведение текста загрузки UjAPI в World Editor.
9. Исправлена инвертированное поведение CBuffHowlOfTerror.
10. Исправлена критическая ошибка от SetBuffRemainingDuration на неподдерживаемых/удалённых баффах.
11. Добавлена поддержка CBuffAcidBomb в Buff API.
12. Добавлена поддержка CBuffSlowPoison в Buff API.
13. Исправлена критическая ошибка от SetFrameAlpha на 1.27a/1.27b/1.28f.
14. Исправлена GetBuffOwner всегда возвращающая 0.
15. Исправлена GetBuffTypeId всегда возвращающая 0.
16. GetUnitCurrentResources переименовано в GetUnitResourceCurrent.
17. Исправлена GetBuffIntegerField возвращающая неверные значения.
18. Исправлена SetBuffIntegerField устанавливающая неверные значения.
19. Исправлена CBuffRegenLife обработка DataC и DataD в Buff API.
20. Исправлена CBuffRegenMana обработка DataC и DataD в Buff API.
21. Исправлена CBuffRegeneration обработка DataC и DataE в Buff API.
22. Исправлена CBuffRejuvination обработка DataC и DataD в Buff API.
23. Исправлена CBuffDrunkenHaze обработка DataA в Buff API.
24. Исправлена CBuffLavaMonster обработка DataC и DataF в Buff API.
25. Исправлена CBuffSlowPoison обработка DataD в Buff API.
26. Исправлена критическая ошибка от SetFrameParent с CFrames на 1.27a.
27. SetFrameVertexColourEx теперь дополнительно берёт аргумент textureId.
28. SetFrameVertexColour теперь использует предыдущую декларацию SetFrameVertexColourEx без использования индекса текстуры.
29. SetFrameVertexColour and SetFrameVertexColourEx colour order fixed from ARBG to ARGB.
30. GetFrameAlpha/Ex теперь работает с CModelFrame/CBackdropFrame/CChatEditBar.
31. GetFrameAlpha/Ex теперь работает с CModelFrame/CBackdropFrame/CChatEditBar.
32. GetFrameColour/Ex теперь работает с CModelFrame/CBackdropFrame/CChatEditBar.
33. SetFrameColour/Ex/VertexColour/Ex теперь работает с CModelFrame/CBackdropFrame/CChatEditBar.
	Пометка: 30 - 33 работают только с моделями добавленными в CModelFrame/CBackdropFrame/CChatEditBar, а не на текстуры.
34. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_ABILITY_ADDED.
35. Полностью переписана внутренняя обработка EVENT_UNIT_ABILITY_ADDED.
36. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_ABILITY_REMOVED.
37. Полностью переписана внутренняя обработка EVENT_UNIT_ABILITY_REMOVED.
38. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_ABILITY_AUTOCAST_ON.
39. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_ABILITY_AUTOCAST_OFF.
40. Полностью переписана внутренняя обработка EVENT_UNIT_ABILITY_AUTOCAST_ON.
41. Полностью переписана внутренняя обработка EVENT_UNIT_ABILITY_AUTOCAST_OFF.
42. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_BUFF_RECEIVED.
43. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_BUFF_REFRESHED.
44. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_BUFF_ENDED.
45. Полностью переписана внутренняя обработка EVENT_UNIT_BUFF_RECEIVED.
46. Полностью переписана внутренняя обработка EVENT_UNIT_BUFF_REFRESHED.
47. Полностью переписана внутренняя обработка EVENT_UNIT_BUFF_ENDED.
48. Полностью переписана внутренняя обработка EVENT_WIDGET_DAMAGING.
49. Полностью переписана внутренняя обработка EVENT_WIDGET_DAMAGED.
50. Полностью переписана внутренняя обработка EVENT_WIDGET_DEATH.
51. Полностью переписана внутренняя обработка EVENT_GAME_WIDGET_DAMAGING.
52. Полностью переписана внутренняя обработка EVENT_GAME_WIDGET_DAMAGED.
53. Полностью переписана внутренняя обработка EVENT_GAME_WIDGET_DEATH.
54. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_DAMAGING.
55. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_DAMAGED.
56. Полностью переписана внутренняя обработка EVENT_UNIT_DAMAGING.
57. Полностью переписана внутренняя обработка EVENT_UNIT_DAMAGED.
58. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_PROJECTILE_LAUNCHED.
59. Полностью переписана внутренняя обработка EVENT_PLAYER_UNIT_PROJECTILE_HIT.
60. Полностью переписана внутренняя обработка EVENT_UNIT_PROJECTILE_LAUNCHED.
61. Полностью переписана внутренняя обработка EVENT_UNIT_PROJECTILE_HIT.
62. Полностью переписаны оффсеты Антихака для 1.24e.
	Пометка: 14 оффсетов было добавлено.
63. Полностью переписаны оффсеты Антихака для 1.26a.
	Пометка: 30 оффсетов было добавлено.
64. Полностью переписаны оффсеты Антихака для 1.27a.
	Пометка: 20 оффсетов было добавлено.
65. Полностью переписаны оффсеты Антихака для 1.27b.
	Пометка: 12 оффсетов было добавлено.
66. Полностью переписаны оффсеты Антихака для 1.28f.
	Пометка: 2 оффсетов было добавлено.
67. Юнит фрейма CTrainableButton теперь посылается в событие FRAMEEVENT_MOUSE_ENTER/FRAMEEVENT_MOUSE_LEAVE/FRAMEEVENT_MOUSE_UP/FRAMEEVENT_MOUSE_DOWN/FRAMEEVENT_CONTROL_CLICK.
68. Предмет/заклинание фрейма CCommandButton теперь посылается в событие FRAMEEVENT_MOUSE_ENTER/FRAMEEVENT_MOUSE_LEAVE/FRAMEEVENT_MOUSE_UP/FRAMEEVENT_MOUSE_DOWN/FRAMEEVENT_CONTROL_CLICK.
69. Юнит фрейма CCargoButton теперь посылается в событие FRAMEEVENT_MOUSE_ENTER/FRAMEEVENT_MOUSE_LEAVE/FRAMEEVENT_MOUSE_UP/FRAMEEVENT_MOUSE_DOWN/FRAMEEVENT_CONTROL_CLICK.
70. Юнит фрейма CHeroBarButton теперь посылается в событие FRAMEEVENT_MOUSE_ENTER/FRAMEEVENT_MOUSE_LEAVE/FRAMEEVENT_MOUSE_UP/FRAMEEVENT_MOUSE_DOWN/FRAMEEVENT_CONTROL_CLICK.
71. Бафф фрейма CBuffIndicator теперь посылается в событие FRAMEEVENT_MOUSE_ENTER/FRAMEEVENT_MOUSE_LEAVE/FRAMEEVENT_MOUSE_UP/FRAMEEVENT_MOUSE_DOWN/FRAMEEVENT_CONTROL_CLICK.
72. Исправлены SetDestructableX/Y/Z/Position/PositionWithZ/PositionLoc не двигающие карту путей.
	Пометка: тени карты путей не могут быть сдвинуты, так как они не привязаны к объекту.
73. Исправлены строки не работающие во второстепенных потоках. (В прелоаде, а так же в ExecuteFunc которые были вызваны из ExecuteFunc).
74. ClickFrame и ClickFrameEx теперь вызывают событие FRAMEEVENT_CONTROL_CLICK для CSimpleButton и дочерних фреймов.
75. Исправлена SetAbilityField API не обновляющая некоторые данные заклинания.
76. Исправлена CBuffAuraDevotion не дающая никаких бонусов при создании через buff API.
77. Исправлена CBuffAuraRegenLife не дающая никаких бонусов при создании через buff API.
78. Исправлена CBuffAuraRegenMana не дающая никаких бонусов при создании через buff API.
79. Исправлена CBuffAuraBrilliance не дающая никаких бонусов при создании через buff API.
80. Исправлена CBuffAuraBlightRegen не дающая никаких бонусов при создании через buff API.
81. Исправлена CBuffAuraUnholy не дающая никаких бонусов при создании через buff API.
82. Исправлена CBuffAuraEndurance не дающая никаких бонусов при создании через buff API.
83. Исправлена CBuffAuraSlow не дающая никаких бонусов при создании через buff API.
84. Исправлена CBuffAuraThorns не дающая никаких бонусов при создании через buff API.
85. Исправлена CBuffAuraVampiric не дающая никаких бонусов при создании через buff API.
86. Исправлена ошибка по которой фреймы предметов ломались если HideOriginFrames было использовано.
87. Исправлена критическая ошибка от DisplayTimedTopMessage.
88. Исправлены критические ошибки от некоторых заклинаний, которые были подвергнуты SetAbilityOrder.
89. Исправлено неправильное поведение SetAbilityOrder с CAbilityChannel.
90. Исправлена ошибка SetAbilityLevel позволяющая установить уровень выше максимального.
91. SetAbilityOrderId теперь возвращает nothing вместо boolean.
92. SetAbilityCooldown теперь возвращает nothing вместо boolean.
93. SetAbilityRemainingCooldown теперь возвращает nothing вместо boolean.
94. Все хендлы расширяющие agentdatafield теперь используют мнимые хендлы.
	Пометка: настоящие хендлы были использованы на значениях выше 0x100000, дабы луа не крашилось, это более не является приоритетом.
95. war3_lua был удалён из Modules, он будет доступен для скачивания отдельно.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.11.202

1. Исправлено повторение события WIDGET_DEATH если уже умерший виджет получал урон.
2. Исправлено событие EVENT_PLAYER_MOUSE_MOVE не возвращающее позиции на экране.
3. Обработчик событий KEY/MOUSE нажатия/отжатия был перенесён в WndProc для более стабильной обработки.
	Пометка: это должно поправить часть игнорируемых клавиш, так я более не ориентируюсь на кнопки, которые обработала игра.
4. Добавлена поддержка XButton1 кнопки в событии KEY/MOUSE нажатия/отжатия.
5. Добавлена поддержка XButton2 кнопки в событии KEY/MOUSE нажатия/отжатия.
6. Исправлена обработка клавиш SHIFT/LSHIFT/RSHIFT. LSHIFT/RSHIFT будут посылать отдельное событие после SHIFT.
7. Исправлена обработка клавиш ALT/LALT/RALT. LALT/RALT будут посылать отдельное событие после ALT.
8. Исправлена обработка клавиш CTRL/LCTRL/RCTRL. LCTRL/RCTRL будут посылать отдельное событие после CTRL.
9. Исправлен десинх, который был обнаружен с версии 1.1.11.199.
10. Исправлена LaunchProjectileAt не сохраняющая координаты цели.
11. Исправлена LaunchProjectile не работающая через SetProjectileTargetPositionWithZ.
12. GetFrameTexture теперь работает с CSimpleFrame.
13. Исправлено кеширование текстур в SetFrameTexture с CSimpleFrame которое не позволяло вернуть оригинальную текстуру.
14. Обновлён модуль UnlockMapSize до версии 1.0.1.3.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.12.205

1. Новые Нативные Функции:
	native BenchmarkStart									takes nothing returns nothing
	native BenchmarkEnd										takes nothing returns nothing
	native BenchmarkReset									takes nothing returns nothing
	native BenchmarkGetElapsed								takes integer benchType returns string // 0 for nanoseconds, 1 for microseconds, 2 for milliseconds
	//
	native GetFrameScreenX									takes framehandle whichFrame returns real
	native GetFrameScreenY									takes framehandle whichFrame returns real
	native GetFrameRelativePointParent						takes framehandle whichFrame, framepointtype point returns framehandle
	native GetFrameRelativePointType						takes framehandle whichFrame, framepointtype point returns framepointtype
	native GetFrameRelativePointX							takes framehandle whichFrame, framepointtype point returns real
	native GetFrameRelativePointY							takes framehandle whichFrame, framepointtype point returns real
	native GetFrameAbsolutePointX							takes framehandle whichFrame, framepointtype point returns real
	native GetFrameAbsolutePointY							takes framehandle whichFrame, framepointtype point returns real
	native GetFrameBackdrop									takes framehandle whichFrame, integer backdropId returns framehandle
	native IsFrameBorderEnabled 							takes framehandle whichFrame, integer backdropId returns boolean
	native SetFrameBorderEnabled 							takes framehandle whichFrame, integer backdropId, boolean isEnable returns nothing
	native GetFrameSlider 									takes framehandle whichFrame returns framehandle
	native AddFrameSlider 									takes framehandle whichFrame returns framehandle
2. Удалён стандартный темплейт LISTBOX, все настройки теперь возможны через API.
	Пометка: полная настройка возможна через код.
3. Удалён стандартный темплейт CHECKBOX, все настройки теперь возможны через API.
	Пометка: полная настройка возможна через код.
4. SetFrameFont теперь работает с CTextArea.
5. SetFrameText теперь работает с CTextArea.
6. AddFrameText теперь работает с CTextArea.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.13.208

1. Новые Константы:
	constant integer					CHAT_RECIPIENT_UNKNOWN										= 4
2. Новые Нативные Функции:
	native DisplayChatMessageEx								takes player whichPlayer, integer recipient, real duration, boolean addToLog, string message returns nothing
	//
	native UnitGetTrainingProgress 							takes unit whichUnit returns real
	native UnitSetTrainingProgress 							takes unit whichUnit, integer trainingPercentage returns nothing
	native UnitGetTrainingRemainingTime						takes unit whichUnit returns real
	native UnitSetTrainingRemainingTime						takes unit whichUnit, real time returns nothing
	native UnitGetTrainingTypeIdAt 							takes unit whichUnit, integer index returns integer
	native UnitCancelTrainingAt 							takes unit whichUnit, integer index returns nothing
	native UnitSetTrainingTypeIdAt 							takes unit whichUnit, integer index, integer typeId returns nothing
	//
	native UnitGetResearchProgress 							takes unit whichUnit returns real
	native UnitSetResearchProgress 							takes unit whichUnit, integer trainingPercentage returns nothing
	native UnitGetResearchRemainingTime						takes unit whichUnit returns real
	native UnitSetResearchRemainingTime						takes unit whichUnit, real time returns nothing
	native UnitGetResearchTypeIdAt 							takes unit whichUnit, integer index returns integer
	native UnitCancelResearchAt 							takes unit whichUnit, integer index returns nothing
	native UnitSetResearchTypeIdAt 							takes unit whichUnit, integer index, integer typeId returns nothing
3. Исправлена неверная обработка damagetype в UnitDamageTarget.
4. Исправлены два неверных оффсета в АнтиХаке для 1.26a.
5. Добавлено отображение сообщения о десинхронизации, когда какой-либо игрок вылетит от десинхронизации.
6. Переисправлена ошибка по которой фреймы предметов не перерисовывались после HideOriginFrames.
7. Исправлена GetDestructableName всегда возвращающая "Default String" вместо действительного значения.
8. Исправлена GetItemName всегда возвращающая "Default String" вместо действительного значения.
9. Исправлена GetUnitName всегда возвращающая "Default String" вместо действительного значения.
10. Исправлена GetHeroProperName всегда возвращающая "Default String" вместо действительного значения.
11. Добавлены CLI настройки AngelScript.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.13.209

1. Исправлен некорректный посыл события EVENT_PLAYER_WIDGET_GHOST_CLICK вместо EVENT_PLAYER_WIDGET_CLICK.
2. Добавлен пуш виджета под мышкой в GetTriggerWidget в событии EVENT_PLAYER_TERRAIN_CLICK.
15
А можно как-то с помощью Unryze API организовать управление на джойстике?
20
DarkLigthing, если совсем делать нечего, то при желании - возможно. Но страдать такой вакханалией я не особо горю. :)
38
Unryze, там у винды есть универсальное апи, но тот же стим позволяет off-game controls, можно и без поддержки геймпада это делать
15
Unryze, Да, я понимаю что это маловостребовано ведь в кто играет в Wc3 на джойстиках. Просто сейчас все больше становятся актуальны портативные устройства как Steam Deck и теоретически карты, адаптированные под управление на подобных устройствах могли бы привлечь новых людей в Wc3. (:
38
DarkLigthing, steam deck работает на линуксе, а wine будет жрать аккум как не в себя
15
ScorpioT1000, Steam Deck работает на той OS которую ты туда захочешь поставить. Но по дефолту на ней действительно Linux семейства Arch Linux, который Valve адаптировала под свои нужды назвав SteamOS.
А wine это предшественник современной эмуляции, который называется Proton.
На моей деке, которой я уже пользуюсь как единственным пк стоит Windows 11 и батарейка это откровенно не проблема. Вот для портативного устройства x86 архитектура процессора это проблема для батарейки, лучше был бы ARM, но тогда игры с пк не запустились бы... А в целом это просто офигенная штука, для многих игр клавиатура и мышь по моему опыту это избыточность.
38
DarkLigthing, ну, мы же про стим дек для целевой аудитории говорим как стандартный стим ос с линуксом без подключенной зарядке на постоянке, x86 есть и на смартфонах, и кто-то даже ставил туда винду, но это единицы
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.13.210

1. Исправлена внутренняя ошибка Id2S.
	Пометка: эта ошибка ломала Buff API для слк-оптимизированных карт.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.14.214

1. Изменение типов:
	type effect												extends war3image
	type trackable											extends war3image
2. Новые Константы:
	constant abilityintegerfield		ABILITY_IF_BUTTON_POSITION_SPELLBOOK_X						= ConvertAbilityIntegerField('asbx') // Ability Instance only
	constant abilityintegerfield		ABILITY_IF_BUTTON_POSITION_SPELLBOOK_Y						= ConvertAbilityIntegerField('asby') // Ability Instance only
3. Новые Нативные Функции:
	native GetMouseMoveEventScreenAxisEnabled				takes nothing returns boolean
	native SetMouseMoveEventScreenAxisEnabled				takes boolean enable returns nothing // Enables GetTriggerPlayerMouseScreenX/Y, default: on.
	native GetMouseMoveEventWorldAxisEnabled				takes nothing returns boolean
	native SetMouseMoveEventWorldAxisEnabled				takes boolean enable returns nothing // Enables GetTriggerPlayerMouseWorldX/Y/Z, default: off.
	native GetMouseMoveEventDelay							takes nothing returns integer
	native SetMouseMoveEventDelay							takes integer delay returns nothing // delay is in ticks (ms), default: 10
	//
	native IsHandleDestroyed								takes handle whichHandle returns boolean // this returns internal state of the object, whenever it's nullptr or CAgentBaseAbs was removed.
	//
	native GetWar3ImageSprite								takes war3image whichWar3Image returns sprite
	native IsWar3ImageVisible								takes war3image whichWar3Image returns boolean
	native SetWar3ImageVisible								takes war3image whichWar3Image, boolean visible returns nothing
	native IsWar3ImageInvulnerable							takes war3image whichWar3Image returns boolean
	native SetWar3ImageInvulnerable							takes war3image whichWar3Image, boolean invulnerable returns nothing
	native GetWar3ImageX									takes war3image whichWar3Image returns real
	native GetWar3ImageY									takes war3image whichWar3Image returns real
	native GetWar3ImageZ									takes war3image whichWar3Image returns real
	native GetWar3ImagePositionLoc							takes war3image whichWar3Image returns location
	native SetWar3ImagePositionLoc							takes war3image whichWar3Image, location whichLocation returns nothing
	native SetWar3ImagePosition								takes war3image whichWar3Image, real x, real y returns nothing
	native SetWar3ImagePositionWithZ						takes war3image whichWar3Image, real x, real y, real z returns nothing
	native SetWar3ImageX									takes war3image whichWar3Image, real x returns nothing
	native SetWar3ImageY									takes war3image whichWar3Image, real y returns nothing
	native SetWar3ImageZ									takes war3image whichWar3Image, real z returns nothing
	native ResetWar3ImageZ									takes war3image whichWar3Image returns nothing // returns Z control to game.
	native GetWar3ImageHeight								takes war3image whichWar3Image returns real
	native SetWar3ImageHeight								takes war3image whichWar3Image, real height returns nothing
	native GetWar3ImageScreenX								takes war3image whichWar3Image returns real
	native GetWar3ImageScreenY								takes war3image whichWar3Image returns real
	native GetWar3ImageVertexColour							takes war3image whichWar3Image returns integer
	native SetWar3ImageVertexColour							takes war3image whichWar3Image, integer red, integer green, integer blue, integer alpha returns nothing
	native GetWar3ImageTimeScale							takes war3image whichWar3Image returns real
	native SetWar3ImageTimeScale							takes war3image whichWar3Image, real timeScale returns nothing
	native GetWar3ImageScale								takes war3image whichWar3Image returns real
	native SetWar3ImageScale								takes war3image whichWar3Image, real scale returns nothing
	native GetWar3ImageFacing								takes war3image whichWar3Image returns real
	native SetWar3ImageFacing								takes war3image whichWar3Image, real facing, boolean isInstant returns nothing
	native SetWar3ImageMatrixScale							takes war3image whichWar3Image, real x, real y, real z returns nothing
	native ResetWar3ImageMatrix								takes war3image whichWar3Image returns nothing
	native SetWar3ImageOrientationEx						takes war3image whichWar3Image, real yaw, real pitch, real roll, integer eulerOrder returns nothing
	native SetWar3ImageOrientation							takes war3image whichWar3Image, real yaw, real pitch, real roll returns nothing
	native GetWar3ImageYaw									takes war3image whichWar3Image returns real
	native SetWar3ImageYaw									takes war3image whichWar3Image, real yaw returns nothing
	native GetWar3ImagePitch								takes war3image whichWar3Image returns real
	native SetWar3ImagePitch								takes war3image whichWar3Image, real pitch returns nothing
	native GetWar3ImageRoll									takes war3image whichWar3Image returns real
	native SetWar3ImageRoll									takes war3image whichWar3Image, real roll returns nothing
	native GetWar3ImageModelObjectX							takes war3image whichWar3Image, string whichObject returns real
	native GetWar3ImageModelObjectY							takes war3image whichWar3Image, string whichObject returns real
	native GetWar3ImageModelObjectZ							takes war3image whichWar3Image, string whichObject returns real
	native GetWar3ImageModelObjectPositionLoc				takes war3image whichWar3Image, string whichObject returns location
	native GetWar3ImageCurrentAnimationId					takes war3image whichWar3Image returns integer
	native GetWar3ImageCurrentAnimationName					takes war3image whichWar3Image returns string
	native SetWar3ImageAnimationWithRarityByIndex			takes war3image whichWar3Image, integer animIndex, raritycontrol rarity returns nothing
	native SetWar3ImageAnimationWithRarity					takes war3image whichWar3Image, string animationName, raritycontrol rarity returns nothing
	native SetWar3ImageAnimationByIndex						takes war3image whichWar3Image, integer animIndex returns nothing
	native SetWar3ImageAnimation							takes war3image whichWar3Image, string animationName returns nothing
	native QueueWar3ImageAnimationByIndex					takes war3image whichWar3Image, integer animIndex returns nothing
	native QueueWar3ImageAnimation							takes war3image whichWar3Image, string animationName returns nothing
	native GetWar3ImageAnimationOffsetPercent				takes war3image whichWar3Image returns real
	native SetWar3ImageAnimationOffsetPercent				takes war3image whichWar3Image, real percent returns nothing
	//
	native SetAbilityOwningAbility							takes ability whichAbility, ability whichSpellbook returns nothing
	native SetAbilityOwningItem								takes ability whichAbility, item whichItem returns nothing
	//
	native GetFrameBlendMode								takes framehandle whichFrame, integer textureId returns blendmode // 0 for CSimpleRegions.
	native SetFrameBlendMode								takes framehandle whichFrame, integer textureId, blendmode whichBlendMode returns nothing
	native GetFrameHighlight								takes framehandle whichFrame, integer highlightId returns framehandle // Gets highlights of CControl
	native GetFrameHighlightTexture							takes framehandle whichFrame, integer highlightId returns string // If highlighframe type is sent, it will modify itself instead, if ccontrol or its children, then it will check possible highlights.
	native SetFrameHighlightTexture							takes framehandle whichFrame, integer highlightId, string texturePath, blendmode blendMode returns nothing // 0 - FOCUS | 1 - ON HOVER
4. Исправлена GetUnitStringField всегда возвращающая "Default String" с UNIT_SF_HERO_ABILITY_LIST.
5. Исправлена UNIT_SF_ABILITY_LIST всегда возвращающая "Default String" с UNIT_SF_HERO_ABILITY_LIST.
6. GetTriggerPlayerMouseWorldX/Y/Z теперь отключено по стандарту для сохранения 12 байтов нетКода. Используйте SetMouseMoveEventWorldAxisEnabled для того, чтобы включить эту опцию.
7. Исправлена OnCommandBarProcessKey не работающая со спеллбуками.
8. Исправлена обработка TRIGSTR_ в SetTextTagText.
9. Добавлен хук на CGameState::ToHandle.
10. Исправлена критическая ошибка с картами содержащими w3i от версии 1.29 и выше. Критическая ошибка связана с максимальным индексом игрока.
11. SetFramePriority более не работает с CSimpleRegions, так как они не имеют приоритет, а эта функция меняла blendmode.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.14.215

1. Исправлена SetTextTagText не работающая с текстами отличными от TRIGSTR_ из-за предидущего исправления.
2. Исправлена Get/SetBlendMode с CSimpleFontString.
Этот комментарий удален
23
Посмотрел тут инструкцию по установке. Не кажется ли, что она довольно громоздкая для аудитории? Особенно для молодых "зумеров", которые выросли на Google play и подобных сервисах, где установка делается в 1 клик? Они, если увидят подобную длинную установку, скажут, "что за кривая хрень" и не станут ничего ставить)) Возможно ли переделать установку так, чтобы после запуска установщика поиск путей, размещение файлов выполнялись сами собой? Плюс в идеале, чтобы заменялись файлы war3 exe и world editor exe на новые, с сохранением путей от ярлыков с рабочего стола? Чтобы юзер мог запускать игру как обычно, как привык, без поиска и запуска дополнительных exe? Я конечно понимаю, что это душно, но вряд-ли понравится, если ujapi будут юзать 3,5 олда (по крайней мере, я за последний год не видел карт на хгм, сделанных с помощью ujapi, максимум одну)
30
EugeAl, молодые зумеры и так не смогут пользоваться утилитой ибо там нужно думать через мозг. Коей способностью эволюция их обделила.
20
EugeAl, карты есть, но меня это особо не заботит. Установка и так проще некуда, а твоя затея буквально странная… ибо не нужно менять никакие .exe файлы, и вообще ужапи должна ставиться в отдельную папку. 2024 год, тяжело разархивировать файлы в папку (это вся установка) и указать путь к игре/редактору (как-то с Magos люди справлялись). Ну и закончим тем, что вдруг у кого-то несколько сборок (как у меня) и автоматом выберется не та? Да и опять же, можно буквально копипастнуть путь напрямую, а не искать по папкам.
Ну блин, реально несерьёзно как-то заявлять о сложности установки.
18
И еще, хотя б краткая документация, а то много функций нужно по названию на "ощупь" пробовать как оно работает
30
Borodach, никто тебя не останавливает. Пощупал функциию - написал статью как ей пользоваться. И самому шпаргалка и комьюнити полезно.
20
Borodach, а документация на джасс от Близзард была? Я что-то не помню… а, вспомнил, нет, не было.
И опять же, минимальное знание английского языка - уже служит документацией, но, если ты готов расписать 2000+ нативок, еще и документацией, я готов на это посмотреть.
23
nazarpunk, это верно, но им для игры придётся как то ставить утилиту )
Unryze, это для нас проще некуда. Для модмейкера проще некуда. Но обычный игрок совершенно другая категория. Его не заботят технические детали, да и не должны заботиться, его смысл потреблять продукт. Допустим, распаковать в папку с игрой и пользоваться - годится, равно как и установка в 1 клик, но не более. Иначе игрофирмы не делали бы никаких простых установок )
30
EugeAl, ну так они играть то не смогут по вышеперечисленной причине.
28
Unryze, то, что Blizzard не создавала доку по жассу, не оправдывает отсутствие документации в этом проекте. Тем более, что jass изначально и не создавался для широкой публики (хотя и в этом случае отсутствие документации осуждаю). А вот в гуи документация +/- имеется.
Я могу посоветовать следующее: при создании новых функций сразу писать документацию к ним, а к старым постепенно добавлять.
20
PT153, ты готов писать описания 2000 нативкам, которые по факту своими именами поясняю то, за что они отвечают? Или я должен работу целой компании (в которой людям ещё и платят) делать в одиночку ещё и за "а мы попросим, но потом не прочитаем". Толку от этого комьюнити, если оно само не хочет ничего делать?
28
native GetHeroMaxLevelExperienceNeeded takes unit whichUnit returns integer
native GetHeroExperienceNeeded takes unit whichUnit, integer forLevel returns integer
Эти функции возвращают exp_required - exp_present или только exp_required? Если второе, то зачем тогда передаётся юнит?
28
Тесты показали, что возвращает exp_required, тогда передачу юнита можно убрать, от героя к герою эти значения не меняются.
Также, GetHeroExperienceNeeded возвращает неверные значения. Так, для уровня 1 будет возвращено 200, хотя все герои изначально имеют уровень 1, то есть верный ответ 0. Для уровня 0 и негативных значений также возвращается 200. Для уровня 2 вернётся 500, хотя для достижения второго уровня нужно 200. И так далее, как будто внутри функция увеличивает переданный уровень на единицу.
28
То, я что ожидаю от функции GetHeroExperienceNeeded:
Значение level <= 1 - возвращает 0.
level = 2 - возвращает 200 или другое значение из таблицы в константах.
level = 3 - 500 или другое значение по формуле/из таблицы.
level = 4 - 900 или другое значение по формуле/из таблицы.
И так далее.
20
PT153, GetHeroMaxLevelExperienceNeeded возвращает сколько нужно ещё опыта до достижения уровня.
GetHeroExperienceNeeded - внутри движка требует юнита, чтобы проверить данные и провести пересчёты, ибо юнит может иметь флаг RoC и просчёт опыта будет по-другому.
//----- (6F207760) --------------------------------------------------------
int __stdcall Game::Data::GetExperienceNeededForLevel(int a1)
{
  int v1; // esi
  unsigned int v2; // eax

  v1 = a1;
  v2 = (unsigned int)Engine::Config::ReadInteger((int)"Misc", (int)"MaxHeroLevel", 0) - 1;
  if ( a1 - 1 > v2 )
    v1 = (v2 & ~((a1 - 1) >> 31)) + 1;
  return sub_6F00B0E0(v1 - 1);
}

int __thiscall CUnit::GetLevelExperienceNeeded(uint32_t *this, int a1) // unit, level
{
  int result; // eax

  if ( this[124] )
    result = Game::Data::GetExperienceNeededForLevel(a1);
  else
    result = 0;
  return result;
}
int32_t CUnit::GetHeroExperienceNeeded( CUnit* unit, int32_t level )
{
	return ( pOffsets[ Enum::Offsets::GetHeroXPNeeded ] && CUnit::IsOkay( unit ) && CUnit::IsHero( unit ) && !CUnit::IsTower( unit ) ) ? this_call<int32_t>( pOffsets[ Enum::Offsets::GetHeroXPNeeded ], unit, level ) : NULL;
}
Индексации видать у них под капотом даже для уровней идут с нуля. Ты можешь идти оспаривать эту логику с Blizzard, мои ручки умыты.
Юнита в целом можно убрать, но нужно тогда менять оффсет, а мне немного лень, да и так в целом правильнее~.
28
Unryze, ну индексация если что легко правится и юзером, но почему для 0 и ниже возвращается первое значение?
20
PT153, потому что внутри игры функция правит всё на нулевой индекс, посылая 1 -> 0, а ниже 0 правятся до 0.
20
Вышла новая версия!
Прокрутить к ресурсу

v1.1.15.218

UjAPI.dll

1. Новые Константы:
	constant frameeventtype				FRAMEEVENT_FRAME_ITEM_CHANGED								= ConvertFrameEventType(10)
	constant controlstyleflag 			CONTROL_STYLE_DRAW											= ConvertControlStyleFlag(32)
2. Новые Нативные Функции:
	native BitwiseShiftLeftLogical							takes integer i, integer bitsToShift returns integer
	native BitwiseShiftRightLogical							takes integer i, integer bitsToShift returns integer
	//
	native CountUnitAbilities								takes unit whichUnit, boolean alsoCountBuffs returns integer
	native CountUnitBuffs									takes unit whichUnit returns integer
	//
	native GetBuffOwningAbility								takes buff whichbuff returns ability // experimental
	native SetBuffOwningAbility								takes buff whichBuff, ability whichAbility returns nothing // experimental
	//
	native SetProjectileSourceAbility						takes projectile whichProjectile, ability whichAbility returns nothing
	//
	native GetFrameChildrenCountEx							takes framehandle whichFrame, integer listId returns integer // listId: CFrames: 0 for default | 1 for layouts (will return CLayer) | CSimpleFrames 0 - 6 | CSimpleRegions any number, as they only have 1 child node.
	native GetFrameChildEx									takes framehandle whichFrame, integer listId, integer index returns framehandle
	native GetFrameTextAlignmentValue						takes framehandle whichFrame, integer id returns real // CSimpleFontString: 0 - x, 1 - y | CTextFrame: 0 - x, 1 - y, 2 - x Shadow, 3 - y Shadow, 4 = FontJustificationOffset
	native SetFrameTextAlignmentValue						takes framehandle whichFrame, integer id, real offset returns nothing
	native GetTriggerFrameTargetFrame						takes nothing returns framehandle
3. Исправлена поддержка отрицательных чисел с сеттерами цифровых полей, ранее они обрабатывались без знака.
4. CListBox API теперь работает с CMenu.
5. CListBox API теперь работает с CPopupMenu.
6. CListBox API теперь работает с CRadioGroup.
7. GetFrameTextColourEx теперь работает с CListBoxItem.
8. SetFrameTextColourEx теперь работает с CListBoxItem.
9. SetFrameFont теперь работает с CTimerTextFrame.
10. SetFrameFont теперь работает с CListBoxItem.
11. SetFrameTextAlignment теперь работает с CTimerTextFrame.
12. SetFrameTextAlignment теперь работает с CListBoxItem.
13. SetFrameTextVerticalAlignment теперь работает с CTimerTextFrame.
14. SetFrameTextVerticalAlignment теперь работает с CListBoxItem.
15. SetFrameTextHorizontalAlignment теперь работает с CTimerTextFrame.
16. SetFrameTextHorizontalAlignment теперь работает с CListBoxItem.
17. FRAMEEVENT_POPUPMENU_ITEM_CHANGED теперь работает с CListBox.
18. AddFrameListItem теперь работает с CRadioGroup.
19. FRAMEEVENT_POPUPMENU_ITEM_CHANGED теперь работает с CRadioGroup.
20. Исправлено SetLightningTargetX устанавливающее x источника, вместо цели.
21. Исправлено SetLightningTargetY устанавливающее y источника, вместо цели.
22. Исправлено SetLightningTargetZ устанавливающее z источника, вместо цели.
23. Исправлено SetLightningTargetPositionLoc устанавливающее позицию источника, вместо цели.
24. Исправлено GroupContainsUnit всегда возвращающее true.
25. Перенесён весь внутренний код jFramea API во FrameAPI. Это пометка для себя, данное изменение не должно повлиять ни на что.
26. Исправлено BlzSetUnitMaxMana устанавливающее максимальное здоровье вместо маны.
27. Исправлено не работающее SetFrameTextHorizontalAlignment.
28. Исправлено SetFrameTextColourEx для CSimpleFontString.

Launcher

1. CLI теперь может обрабатывать эти warcraft 3 комманды: d3d, opengl, swtnl, classic, datadir, gametype, fullscreen.
2. Добавлена опция Dev Mode для AngelScript.
3. Добавлена опция Console для AngelScript.
4. Добавлена опция No Warnings для AngelScript.
5. Добавлена опция "dev" CLI команда для AngelScript.
6. Добавлена опция "console" CLI команда для AngelScript.
7. Добавлена опция "nowarnings" CLI команда для AngelScript.
8. Добавлен модуль FastMenu.dll в Modules.
9. Добавлена опция Fast Menu для Launcher.
10. Добавлена -fastmenu CLI команда для Launcher.
35
Запустили конкурс наработок xgm.guru/p/ujapi/ujapi-konkurs-narabotok-2024 вливайтесь
3
Мне нравится эта идея.
Проект может решить проблему ванильного варкрафта с недостающим функционалом.
Надеюсь у автора не опустятся руки.
Для развития проекта неплохо бы сделать подробную документацию по функциям. Так как отсутствие таковой отталкивает новичков, а старички рано или поздно закончатся.
30
Для развития проекта неплохо бы сделать подробную документацию по функциям.
Никто тебя не останавливает.
3
nazarpunk,
Я не знаю, всегда ли ты так пишешь\писал - но твои сообщения очень странные.
  1. Я не жаловался, что меня кто-то останавливает.
Но, скорее всего, у тебя такая манера общения, которую я могу назвать бескультурной\провокационной. И на самом деле, ты имел в виду это "Если у тебя есть желание, то ты можешь сделать это. Мы бы были тебе благодарны!".
Если это так, то на это я уже ответил, вот тут "Для развития проекта неплохо бы сделать подробную документацию по функциям. Так как отсутствие таковой отталкивает новичков, а старички рано или поздно закончатся.".
  1. Я новичок, который 3 дня тыкается в документацию и у него с трудом получается что-либо.
Я тот, кому нужна помощь, а не тот, кто может оказать её (по крайней мере в оформлении документации я точно не могу помочь).
Чтобы оставить комментарий, пожалуйста, войдите на сайт.