под CustomScript вы имеете в виду секцию "Нестандартный код" в Trigger Editor меню?
Да, или в любой другой участок кода. Традиционно пишут в CustomScript. STORM_:
каким образом *.j файлы добавляются в карту
Код из файлов просто копируется в код карты по месту импорта. STORM_:
есть ли тулы для автоматизации данного процесса?
Нету, каждый импорт каждого файла прописывается вручную. Исключение - компилятор языка Wurst, он сам импортирует все файлы из соответствующей директории карты. Но с эти нужно еще разбираться.
Ну на самом деле для этого не обязательно использовать Jass, в GUI есть проверка, находится ли юнит в области, именно области, а не в регионе, ее должно хватить. PT153:
А открывать сделанную в JNPG карту в стандартном редакторе нет смысла.
Есть, как его может не быть? Игра обновляется, в новых версиях JNGP больше недоступен, а отказываться от появившихся возможностей как-то кощунственно. Соответственно поработав в JNGP на 1.30 и ниже, в более новых версиях карту уже не откроешь, а там могут появиться очень даже важные функции. pAxsIs:
Все верно, это мне и нужно, пока регионы у меня не пересекаются, а значит можно проверять находится ли юнит в обоих регионах, как написал:
Ну по ссылке проверить в любом случае не получится. Дело в том, что событие "Юнит входит в регион" скрытно создает новый регион, в который включает указанную область, и получить доступ к этому региону из GUI мы никак не можем.
Никак. Регионы и области не сравниваются параметрически, то есть координатами, которые покрывают. Но можно узнать, находится ли точка в том или ином регионе. То есть, в твоем примере, проверить, находится ли юнит одновременно и в tempReg и в tempReg2.
Blizzard еще ничего не переиздали. Они только начали собирать деньги на то, чего еще не сделали. А вообще тут уже есть тема с обсуждением и обновлением последней информации, зачем еще одна. В самом деле, одна из первых в ленте уже на протяжении нескольких дней.
Можно. Но понадобится массив для хранения всех экземпляров структуры. Дело в том, что таймер обходит все экземпляры чтобы убавить оставшееся время воскрешения на 1 каждую секунду, это происходит внутри функции
static nothing update()
Ну и разумеется внутри функциий create и destroy вносить и убирать отработанные экземпляры в/из этого массива.
В гугле. Это общая концепция программирования. Суть проста - каждый экземпляр какого-то типа хранит в себе ссылку на предыдущий экземпляр этого типа и на следующий (в твоем примере это массивы next и prev), таким образом позволяя пройтись по всем экземплярам этого типа. Но в показанном тобой коде реализация стремная, поскольку использование статичных массивов в виде
set next[prev[this]] = next[this]
set prev[next[this]] = prev[this]
это просто избыток. Если next и prev изменить из массва в обычные атрибуты, работа алгоритма не изменится, но код станет на много проще.
Никак, вместо этого используется перегрузка операторов. Vitalik8:
что такое опциональная реализация модуля?
Это означает, что модуля может не быть. То есть, при использовании модуля внутри структуры с указанием ключевого слова optional, при отсутствии этого модуля в коде карты, компиляция не прервется, ошибки выдано не будет.
struct Test
static string s = "Hello, World!"
method MyMethod takes nothing returns nothing
call DysplayTextToPlayer(GetLocalPlayer(), 0, 0, thistype.s) // <- "thistype" вместо имени структуры "Test"
endmethod
endstruct
Как работает эта часть кода?
И эта
Это реализация двусвязного списка.
В показанном тобой коде ужасная помесь vJass и cJass, а используемый подход с this делает логику запутанной. Не рекомендую пытаться на нём учиться.
Как всё работает через один таймер.
Код воскрешает юнита через некоторое время после его смерти. Для этого нужен таймер. Но вместо того чтобы создавать новый таймер для каждого экземпляра структуры, автор создал 1 общий таймер, а в экземплярах хранит оставшееся время до воскрешения юнита, отнимая 1 через каждую секунду работы общего таймера. Так себе подход.
Да и в целом, что за манипуляции с thistype и this.
Если есть статья и я её пропустил, сори c:
Какая чушь. Помойкой разве что становится. Типо петров.
Ну никто не отрицает, что это работает в обе стороны. Но я бы задался тогда другим вопросом, почему моя карта привлекает только тех, кто производит помои. Почему моя карта вдохновляет делать помои. Быть может исходный материал другого не предполагает. Не такой шедевр, каким я его считал. В общем, посмотрел бы сначала на себя.
Практического смысла в этом никакого. Особенно странно смотреть на борцов за свои "авторские права" с пиратки. На практике карта становится действительно интересной после того как пройдёт через множество рук и впитает в себя множество идей сообщества. Так было с любой успешной картой. А почему это работает иначе в головах, что боятся Пети из 5-го Б, никто не знает.
По коду честно говоря ничего не понятно. Но в отлове урона это обычная ошибка, когда урон наносится внутри триггера, отлавливающего урон или если он вызывает действия которые наносят урон и снова вызывают этот триггер. Бесконечная рекурсия в общем роняет игру.
Ну как раз возможности сверх редактора он даёт, удобство и автоматизация, это те самые возможности. Возможностей сверх игры он не даёт, так будет сказать вернее.
PyCCKuu_4eJl, а ты проверь уровень этой способности у юнита и вспомни назойливую настройку в РО для канала, которая уже всю плешь проела. Нужно включить отображение способности на панели.
Для канала, к стати, так же предусмотрен индивидуальный пакет ChannelAbilityPreset, он удобнее.
Пойду страдать над системой отлова урона, ибо система плавного движения даммиков мне пока не под силу :d
Посмотри, может тебе этого хватит с лихвой, в стандартной библиотеке пакет DamageDetection. К нему так же прилагается пакет DamageType, для определения типа отловленного через DamageDetection урона.
Даже если в редакторе создать молоток без бафов, и использовать его в AbilityDefinition('новый молоток', 'молоток из редактора'), то при очистке бафов, стан всё равно есть, но без эффекта.
К сожалению да, бафф это по большей части просто визуал в статусе героя. На механику мало влияет.
Не получается через UnitDefinition() сделать копию Сильваны 'Hvwd'(Хуманы, компания),
Вроде никаких проблем
Код
package Hello
import NoWurst
import UnitObjEditing
import Unit
@compiletime function createSilvanas()
new UnitDefinition('NSlv', 'Hvwd')
..setName("Двурукий Стреломёт")
init
createUnit(Player(0), 'NSlv', vec2(0, 0), angle(0))
Результат
Разница между UnitDefinition и HeroDefinition в отсутствии в первой полей из второго.
Проверь, может в файле wurst_run.args, что в папке проекта, отсутствуют строки
-runcompiletimefunctions
-injectobjects
Или забыл аннотацию compiletime перед объявлением функции, в которой генерируется юнит.
Как и всегда - для тебя это не имеет значения. В Wc ты не будешь писать алгоритмы во много десятков тысяч операций ежесекундно, а следовательно и выбора перед тобой не стоит.
С другой стороны, используя массивы ты будешь производить дополнительные операции связанные с алгоритмами поиска/рассчета ячеек или данных в массиве, что с лихвой перекрывает всякое туманное преимущество.
Ред. GetLocalPlayer
» WarCraft 3 / Подсветка синтаксиса JASS для Sublime Text 2/3 и TextMate
Ред. GetLocalPlayer
» WarCraft 3 / Подсветка синтаксиса JASS для Sublime Text 2/3 и TextMate
STORM_:
STORM_:
» WarCraft 3 / Подсветка синтаксиса JASS для Sublime Text 2/3 и TextMate
Ред. GetLocalPlayer
» WarCraft 3 / Region comparison?
PT153:
pAxsIs:
» WarCraft 3 / Region comparison?
Ред. GetLocalPlayer
» WarCraft 3 / Возможно ли использовать переменные в событиях в JASS?
pAxsIs:
» WarCraft 3 / Возможно ли использовать переменные в событиях в JASS?
» WarCraft 3 / Логистика и сохранение данных
» WarCraft 3 / Переиздание WarCrafr III - Чего ждать?
» WarCraft 3 / Переиздание WarCrafr III - Чего ждать?
» WarCraft 3 / thistype и струкруты
» WarCraft 3 / thistype и струкруты
Ред. GetLocalPlayer
» WarCraft 3 / Как это работает
Vitalik8:
Ред. GetLocalPlayer
» WarCraft 3 / thistype и струкруты
В показанном тобой коде ужасная помесь vJass и cJass, а используемый подход с this делает логику запутанной. Не рекомендую пытаться на нём учиться. Код воскрешает юнита через некоторое время после его смерти. Для этого нужен таймер. Но вместо того чтобы создавать новый таймер для каждого экземпляра структуры, автор создал 1 общий таймер, а в экземплярах хранит оставшееся время до воскрешения юнита, отнимая 1 через каждую секунду работы общего таймера. Так себе подход.
Ред. GetLocalPlayer
» WarCraft 3 / Не работает понижение уровня исследования
» WarCraft 3 / Не работает понижение уровня исследования
» WarCraft 3 / Голосовалка: Купите ли вы ремастер или нет?
Ред. GetLocalPlayer
» WarCraft 3 / Два события в триггер
Ред. GetLocalPlayer
» WarCraft 3 / Работает ли функция GetLocalPlayer с SetAbilityTooltip?
Иконки и положение кнопок так же можно менять локально.
» Мир безумного / Diablo Immortal - BlizzCon 2018
» WarCraft 3 / и снова Wurst
Ред. GetLocalPlayer
» WarCraft 3 / и снова Wurst
Для канала, к стати, так же предусмотрен индивидуальный пакет ChannelAbilityPreset, он удобнее.
Ред. GetLocalPlayer
» WarCraft 3 / и снова Wurst
Ред. GetLocalPlayer
» WarCraft 3 / и снова Wurst
» WarCraft 3 / Нагрузка: ХТ vs Массивы