1. Базовый код AngelScript обновлён до 2.36.1.
2. Добавлено std:sleep_ns(uint64_t) как внутреннее API, которое принимает nanoseconds.
3. Добавлено std:sleep_us(uint64_t) как внутреннее API, которое принимает microseconds.
4. Добавлено std:sleep_ms(uint64_t) как внутреннее API, которое принимает milliseconds.
5. Добавлено std:sleep(double) как внутреннее API, которое принимает float/double.
6. TriggerSleepAction теперь использует std::sleep(double), раннее ничего не делало.
7. Изменены << и <<= операторы с Логических в Арифметические.
8. Изменены >>, >>> и >>= операторы с Логических в Арифметические.
9. Добавлен оператор <<< как Логическия операция.
AngelScript Parser 1.0.3.14
1. AngelScript base code updated в 2.36.1.
2. Добавлено std:sleep_ns(uint64_t) как внутреннее API, которое принимает nanoseconds.
3. Добавлено std:sleep_us(uint64_t) как внутреннее API, которое принимает microseconds.
4. Добавлено std:sleep_ms(uint64_t) как внутреннее API, которое принимает milliseconds.
5. Добавлено std:sleep(double) как внутреннее API, которое принимает float/double.
6. TriggerSleepAction теперь использует std::sleep(double), раннее ничего не делало.
7. Изменены << и <<= операторы с Логических в Арифметические.
8. Изменены >>, >>> и >>= операторы с Логических в Арифметические.
9. Добавлен оператор <<< как Логическия операция.
10. Добавлена опция RunTimers в settings.ini, это контролирует будут ли созданы и запущены таймеры.
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.
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.
Makeba, редактирование World Editor'a ужасно геморройное занятие, так что скорее нет, чем да. Ибо мне тяжко вообще оправдать трудочасы на него, учитывая все его проблемы, да и когда есть тот же w3x2lni.
PT153, ты готов писать описания 2000 нативкам, которые по факту своими именами поясняю то, за что они отвечают? Или я должен работу целой компании (в которой людям ещё и платят) делать в одиночку ещё и за "а мы попросим, но потом не прочитаем". Толку от этого комьюнити, если оно само не хочет ничего делать?
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, мои ручки умыты.
Юнита в целом можно убрать, но нужно тогда менять оффсет, а мне немного лень, да и так в целом правильнее~.
DracoL1ch, Если точнее, то любая аура автоматически накладывается на нового созданно юнита, если он входит в АоЕ ауры. То бишь не на карту, а при подходе юнита в рейндж юнита с аурой.
Пруф:
А тут смена обновления тика таймера ауры (ауры обновляются лишь при конце тика таймера) с 2 сек на .1 сек.
quq_CCCP, у тебя тоже какой-то странный миф. У каждой ауры в структуре свой таймер и каждый выстреливает отдельно, потому в UjAPI возможно менять тик ауры (сменить стандартные 2 сек, допустим на .1) пруф:
local rect world = GetWorldBounds( )
local region reg = CreateRegion( )
call RegionAddRect( reg, world )
set t = CreateTrigger( )
call TriggerRegisterEnterRegion( t, reg, null )
call TriggerAddAction( t, function OnAnyUnitEntersWorld )
set u = CreateUnit( Player( 0 ), 'Hpal', .0, .0, .0 )
call UnitAddAbility( u, 'AHad' )
call UnitAddAbility( u, 'ACac' )
set a = GetUnitAbility( u, 'ACac' )
call SetAbilityRealField( a, ABILITY_RF_AURA_REFRESH_TIME, .1 )
EugeAl, карты есть, но меня это особо не заботит. Установка и так проще некуда, а твоя затея буквально странная… ибо не нужно менять никакие .exe файлы, и вообще ужапи должна ставиться в отдельную папку. 2024 год, тяжело разархивировать файлы в папку (это вся установка) и указать путь к игре/редактору (как-то с Magos люди справлялись). Ну и закончим тем, что вдруг у кого-то несколько сборок (как у меня) и автоматом выберется не та? Да и опять же, можно буквально копипастнуть путь напрямую, а не искать по папкам.
Ну блин, реально несерьёзно как-то заявлять о сложности установки.
Borodach, а документация на джасс от Близзард была? Я что-то не помню… а, вспомнил, нет, не было.
И опять же, минимальное знание английского языка - уже служит документацией, но, если ты готов расписать 2000+ нативок, еще и документацией, я готов на это посмотреть.
EugeAl, да, `set someInts[1000] = 5000 первая установка значения так же инициализирует индексы от 0 до X` Как я и указал индексы от 0 до 1023 (ибо размер 1024) будут заполнены нулями, а индекс 1000 примет значение 5000.
Уйму статей потому я и опровергал в Jass Mythbusters, и потому был дан резкий ответ, чтобы последующие мифы не рождались.
globals
integer array someInts // массив пустой, get любого индекса вернёт 0, по указанным выше причинам.
endglobals
function TestArrayStuff takes nothing returns nothing
set someInts[1000] = 5000 // первая установка значения так же инициализирует индексы от 0 до X по мере возрастания 1/2/4/8/16/32/64 то есть после 64 индекса расти будет по 64. И того выделиться размер в 1024, то бишь от 0 до 1023.
endfunction
Поясняю, в Jass нельзя именно инициализировать массив, ибо он растёт автоматически, у него нет требования указания строго размера как допустим в AS:
array<unit> U_SelectionSelArr( 12 );
Ты путаешь вещи, и писать "проверено" - не проверив / не зная внутренности движка - и есть "дезинформация", ибо ответ твой был в корне неверный.
Ну и закончим опять же этим кодом:
//----- (6F459730) --------------------------------------------------------
int __thiscall JassVM::GetArrayValueById(uint32_t *this, unsigned int a2)
{
int result; // eax
if ( a2 < this[2] )
result = *(uint32_t *)(this[3] + 4 * a2);
else
result = 0;
return result;
}
Даже без знания ЯП у тебя лишь 2 варианта:
a2 (индекс) меньше числа (размера) - то вернуть это число по индексу a2.
a2 (индекс) больше или равен числу (размеру) - то вернуть 0.
EugeAl, ещё раз, посмотри мои скрины глазами, а не пятой точкой. То, что "null" применимо к string - не значит, что это СТОИТ использовать, джассу то пофиг, ибо строки по сути в переменной хранят индекс на текст, а не сам текст. Потому 0 = null = "", но когда это дело нужно транслировать допустим в AS, то начинаются отстрелы задниц, когда строки сравнивают с null, что недопустим в AS.
Повторяю на более простом языке, когда у тебя массив только объявлен, то размер равен нулю, так как индекс 0 >= размеру, то возвращается всегда 0, не потому что в нём есть значение, а потому что 0 - это стандартное значение. На кой болт ты споришь - непонятно.
И повторюсь в третий раз, ВЫВОД 0 НЕ ОЗНАЧАЕТ ЧТО У НАС БЫЛА ИНЦИАЛИЗАЦИЯ, то, что игра не отстреливает - как раз причина проверки индекса против размера.
1. Исправлена SetTextTagText не работающая с текстами отличными от TRIGSTR_ из-за предидущего исправления.
2. Исправлена Get/SetBlendMode с CSimpleFontString.
1. Исправлена SetTextTagText не работающая с текстами отличными от TRIGSTR_ из-за предидущего исправления.
2. Исправлена Get/SetBlendMode с CSimpleFontString.
Отредактирован Unryze
» Unryze Jass API / UjAPI - AngelScript
AngelScript v1.0.4.16
AngelScript Parser 1.0.3.14
» Unryze Jass API / UjAPI - Что нового?
v1.1.15.218
UjAPI.dll
Launcher
Отредактирован Unryze
» Unryze Jass API / UjAPI
v1.1.15.218
UjAPI.dll
Launcher
» Unryze Jass API / UjAPI - AngelScript
» Unryze Jass API / UjAPI
» Unryze Jass API / UjAPI
Отредактирован Unryze
» Unryze Jass API / UjAPI
GetHeroExperienceNeeded - внутри движка требует юнита, чтобы проверить данные и провести пересчёты, ибо юнит может иметь флаг RoC и просчёт опыта будет по-другому.
» WarCraft 3 / Проблема с ACac
Отредактирован Unryze
» WarCraft 3 / Проблема с ACac
Отредактирован Unryze
» WarCraft 3 / Проблема с ACac
» Unryze Jass API / UjAPI - Пример PopupMenu без FDF
» Unryze Jass API / UjAPI - Пример ListBox без FDF
Отредактирован Unryze
» Unryze Jass API / UjAPI - Система Выбора Героев
Отредактирован Unryze
» Unryze Jass API / UjAPI - Система Магазина
» Unryze Jass API / UjAPI - AngelScript
» Unryze Jass API / UjAPI - AngelScript
» Unryze Jass API / UjAPI - Jass vs lua vs AngelScript
Исправлен карта в архиве.
» Unryze Jass API / UjAPI
» Unryze Jass API / UjAPI
» IntelliJASS / Переменные
Отредактирован Unryze
» IntelliJASS / Переменные
» IntelliJASS / Переменные
» IntelliJASS / Переменные
» Unryze Jass API / UjAPI - Что нового?
v1.1.14.215
» Unryze Jass API / UjAPI
v1.1.14.215