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.
ScorpioT1000, ExecuteCode не медленнее, ибо не нужно лишний раз искать function id по имени. Ну и ExecuteFuncEx тоже быстрее ExecuteFunc, опять же, решать выдуманную проблему костылём < снять ОП лимит и не мучаться.
EugeAl, Любой вид сфер вызывает краш артиллерии, фикс этого краша я не с проста делал. Говоря проще, игра берёт сферу и пытается запустить её по логике артиллерии (позиция функции и аргументы отличаются) и получается краш. Фикс как в рефе - банально считывает модельку сферы и меняет модель, не меняя более ничего.
EugeAl, лишние телодвижения, да и порой людям лень. А так, если карта 40МБ+ то логичнее вытаскивать файлы в отдельный .mix, чтобы обновления кода не требовали перекачивания всей карты. Этот метод часто используют аниме карты, что хорошо. Но если платформа буквально отрубит .mix поддержку, как тот же GPlay или если играть на 1.29 (где .mix не работает), то будет нужно как-то снимать лимит веса карт. :)
1, Добавлена поддержка мульти-строки для строк, что позволит избавиться от нужды """.
2. Исправлены исключения/ошибки в тяжело нагруженных строками картах, это было решено путём кэша строк на стороне AngelScript.
v1.0.2.7
1. Исправлена поддержка 1.27a/1.27b/1.28f.
v1.0.2.9
1. Добавлена поддержка литералов, то бишь 'I000' вместо FourCC( "I000" ).
2. Улучшена поддержка литералов с 1 или 4 символов до 1 до 8 символов, то бишь 'I0' and 'I000000I' оба будут валидны.
3. Исправлена критическая ошибка при присваивании нулевой строки в строку.
Пометка: это по большей части связано с LoadStr.
4. "main" функция более не вызывается в лобби.
KillUnit - устанавливает текущее значение хп на 0 и вызывает событие смерти и устанавливает юниту флаг смерти, который можно проверить через UnitAlive нативку из common.ai, даст false.
RemoveUnit - не трогает текущее хп, оно скрывает текущего юнита и создаёт внутренний таймер очистки данных. Однако оно не меняет стейт юнита. UnitAlive нативка из common.ai и тут должна дать false.
Однако, ни одна из переменных не меняет значение сохранённое в переменную, то бишь Unit всегда будет иметь какой-то хендл, который является индексом объекта. Сами же объекты обычно утилизируются игрой, потому указатель на этот объект останется активным.
Если простым языком, то ни KillUnit, ни RemoveUnit не меняют что под капотом, ибо в Джасс мы работаем с псевдоданными и используем индексы (ссылки) для работы с объектами.
И повторно ответив на твой вопрос, проверка через GetUnitState - не является де факто "подтверждением" существования юнита или же его жизни. (Можно убить юнита и насильно поставить здоровье > 0) или же установить герою отрицательное значение силы, и игра будет думать, что хп 4 миллиарда, и т.д. и т.п.
Хочешь 100% вариант? То при любом RemoveUnit - обнуляй переменную или же используй UnitAlive из common.ai. То бишь Unit = null. KillUnit же, позволяет воскрешать героя, а с юнитами - отвечает за труп.
Hellfim, всегда можно не "нерфить", а сделать отдельный режим, где всё и будет "занерфлено" для более казуальных игроков. На бумаге конечно звучит проще, чем на деле, но можно те или иные аспекты ИИ/сложности делать "модулями" как во многих играх, собственно так и будете делать что хотите, но и для простых смертных тоже что-то съедобное. (Но как по мне, если игра не доставляет никакого соревнования - это скукота, но таких "ценителей" меньшинство).
» 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
» WarCraft 3 / Фатальная ошибка у артилерии
» IntelliJASS / Функции
» WarCraft 3 / Фатальная ошибка у артилерии
Отредактирован Unryze
» IntelliJASS / Функции
» Unryze Jass API / UjAPI - Что нового?
v1.1.14.214
» Unryze Jass API / UjAPI
v1.1.14.214
» WarCraft 3 / Unlock Map Size
» WarCraft 3 / WFE - Warcraft Feature Extender
» Unryze Jass API / UjAPI - AngelScript
v1.0.2.6
v1.0.2.7
v1.0.2.9
Отредактирован Unryze
» WarCraft 3 / Как работает RemoveUnit() ?
Отредактирован Unryze
» IntelliJASS / Операторы
» Slasty: Candy Tower / Devlog 3. Денежки с Яндекс.Игр
» Unryze Jass API / UjAPI - Что нового?
v1.1.13.210
» Unryze Jass API / UjAPI
v1.1.13.210
» Unryze Jass API / UjAPI