причем направлением "верх" для них является вовсе не верх а "лево"
Верх, лево, право, это относительные понятия, не существует единого стандарта. В Warcraft 3, "вверх", это положительное направление по оси Z.
Вращение объекта в пространстве задается углами Эйлера, матрицей поворота или кватернионами.
Нативка
native BlzSetSpecialEffectOrientation takes effect whichEffect, real yaw, real pitch, real roll returns nothing
Задает вращение углами Эйлера, где
yaw - вращение вокруг оси X
pitch - вращение вокруг оси Y
roll - вращение вокруг оси Z
Порядок вращения объекта углами Эйлера сильно влияет на конечный результат и Warcraft использует порядок, установленный в атрибутах упомянутой выше нативки, то есть X-Y-Z.
Для работы с эффектами тебе в любом случае придется использовать матрицы поворота, преобразуя их в углы Эйлера.
каким образом можно заставит эффект "смотреть" в определенную точку пространства
Для этого тебе нужно построить матрицу поворота исходя из текущего положения эффекта и точки наблюдения.
Скажем что p1, это точка положения эффекта, а p2, это точка наблюдения. Операцией (p2 - p1) ты получишь вектор, назовем его v1, направленный из точки p1 к точке p2. Нормализуя полученный вектор v1 ты получишь ось X матрицы поворота искомой ориентации твоего эффекта. Исходя из текущей ориентации объекта, тебе нужно получить вектор оси X текущей матрицы поворта. Векторное произведение вектора v1 и текущей оси X объекта тебе даст вектор v2, перпендикулярный вектору v1. Нормализуя вектор v2 ты получишь ось Z новой матрицы поворта. Векторное произведение векторов v1 и v2 даст вектор v3, перпендикулярный им обоим, а именно - ось Y матрицы поворота искомой ориентации. Таким образом вектора v1, v2 и v3 станут матрицей поворта искомой ориентации.
Остается преобразовать полученную матрицу в углы Эйлера и передать полученные значения эффекту.
Совсем костыльный способ. Для каждой способности в РО создавать юнита, что будет олицетворять школу. В требованиях способности выставить существования юнита, соответствующего школе способности. Если каст сбит зуботычиной - удаляем соответствующего школе юнита с карты, а через 4 секунды создаем нового.
Один минус, если способность уже имеет какое-то требование к юнитам/улучшениям, получится мешанина.
Ну или банально блокировать/удалять способность юнита на время прерывания, заменяя ее пустышкой с аналогичной иконкой.
Записавшись на конкурс я решил перечитать пост с правилами, дабы не выйти за пределы этих правил и... ничего не понял. Так и не дошло, что в конечном итоге требуется. Ладно, было решил отступить, посмотрим кто в финале окажется и как оно нужно на самом деле.
Вот он финал, распределение мест и... ничего не понятно.
Из темы конкурса, казалось бы, способность и должна быть нагромождением спецэффектов. Конечно, осмысленным нагромождением, но суть ведь в зрелищности? Но в данном случае некто Андреич, что пытался проявить фантазию, оказался далеко позади quq_CCCP, который просто продемонстрировал еще одну возможность мемхака. Получается, требовалась интересная и универсальная механика?
Никак не уразумею.
Редкий кодер пользуется стандартным Jass, обычно не обходится без того или иного парсера. vJass поддерживает структуры, Wurst классы. И то и другое удовлетворяет требованиям.
То есть по умолчанию в GetEventDamage() записан урон с вычитом брони?
По умолчанию, событие на получение урона срабатывает уже после всех снижающий факторов от брони, способностей, баффов. Технически, GetEventDamage это уже не урон, а прямое изменение здоровья, так что описанное выше поведение вряд ли можно назвать сюрпризом.
От чего же оффтоп. Была тут карта Heroic Town, автор обменивал донат на права кикать во время игры. Не удивлюсь если действительно увижу купленную рекламу в карте на новый патч.
А потом, когда вскроется обман, работника "которому стало скучно" уволят задним числом? Или близарду уже настолько нас**ть и комунити-манагерами у них работают откровенные клоуны и тролли?
Какой обман, какие тролли, какие клоуны. Автор составил общий список пожеланий, чтобы пользователи с ним ознакомились и не повторялись. Обмолвился, дескать, что-то может быть, вполне возможно, когда-нибудь войдет в какой-то там патч.
А вот у вас уже началась клоунада. У вас уже и новость, и объявление, и патч не за горами. Нафантазировали полные штаны.
Т.е.? Какое еще официальное объявление нужно? Гейм продюсер запостил тред и он же отписал что часть хотелок уже на подвозе.
Детский сад, честное слово.
Новость, это пост на главной новостной странице Blizzard, со скриншотами и видео игрового процесса, как это было с WoW Classic, как это было с ремастером Starcraft. На худой конец, это тема на соответствующем форуме.
Какому-то там работнику, какого-то там отдела стало скучно, решил запостить от безделья тему на фанатском ресурсе. Это не новость и не объявление.
не дает всех плюсов таймеров, основная выгода от их использования на jass где их создают и запускают с конкретной функцией, после удаляют из за ненадобности, на гуи так сделать нельзя...
Дает, но вместо постоянного создания/удаления таймеров инициализировать массив глобальных, раз и навсегда. Вместо коллбека, так же при инициализации, привязать каждый таймер событием Timer Expires к одному общему триггеру. Функции GetHandleId и GetExpiredTimer, для взаимодействия с хэш-таблицей, так же доступны в стандартном GUI.
Но придется кликать, кликать и кликать. Результат вряд ли проще чем с параллельными массивами.
Начинать можно с любого. Базовая концепция в основе любого ЯП практически не отличается, а поднаторев в одном, ты без особого труда переключишься на другой. Программист в принципе не ограничивается знанием только одного языка.
» WarCraft 3 / Ориентация эффекта в пространстве
Скажем что p1, это точка положения эффекта, а p2, это точка наблюдения. Операцией (p2 - p1) ты получишь вектор, назовем его v1, направленный из точки p1 к точке p2. Нормализуя полученный вектор v1 ты получишь ось X матрицы поворота искомой ориентации твоего эффекта. Исходя из текущей ориентации объекта, тебе нужно получить вектор оси X текущей матрицы поворта. Векторное произведение вектора v1 и текущей оси X объекта тебе даст вектор v2, перпендикулярный вектору v1. Нормализуя вектор v2 ты получишь ось Z новой матрицы поворта. Векторное произведение векторов v1 и v2 даст вектор v3, перпендикулярный им обоим, а именно - ось Y матрицы поворота искомой ориентации. Таким образом вектора v1, v2 и v3 станут матрицей поворта искомой ориентации.
Остается преобразовать полученную матрицу в углы Эйлера и передать полученные значения эффекту.
Ред. GetLocalPlayer
» WarCraft 3 / Помогите с созданием этого спелла
Один минус, если способность уже имеет какое-то требование к юнитам/улучшениям, получится мешанина.
» WarCraft 3 / Новые нативные функции в 1.29
Ред. GetLocalPlayer
» XGM Конкурсы / Результаты Fun Spell Contest 2018
Вот он финал, распределение мест и... ничего не понятно.
Никак не уразумею.
» WarCraft 3 / Свои типы данных
vJass поддерживает структуры, Wurst классы. И то и другое удовлетворяет требованиям.
» WarCraft 3 / Патч 1.29 вышел на основных серверах
» WarCraft 3 / Новые нативные функции в 1.29
Ред. GetLocalPlayer
» WarCraft 3 / Новые нативные функции в 1.29
Ред. GetLocalPlayer
» WarCraft 3 / Патч 1.29 вышел на основных серверах
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
Ред. GetLocalPlayer
» XGM Конкурсы / Fun Spell Contest 2018
Инструмент имеет значение? Jass/vJass/cJass/ZINC/Wurst
Ред. GetLocalPlayer
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
А вот у вас уже началась клоунада. У вас уже и новость, и объявление, и патч не за горами. Нафантазировали полные штаны.
Ред. GetLocalPlayer
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
Новость, это пост на главной новостной странице Blizzard, со скриншотами и видео игрового процесса, как это было с WoW Classic, как это было с ремастером Starcraft. На худой конец, это тема на соответствующем форуме.
Какому-то там работнику, какого-то там отдела стало скучно, решил запостить от безделья тему на фанатском ресурсе. Это не новость и не объявление.
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
Ред. GetLocalPlayer
» WarCraft 3 / Как заменить Wait на Таймер?
В действиях триггера, это раздел "Обратный отсчет".
» WarCraft 3 / Нужен гайд по таймерам.
Но придется кликать, кликать и кликать. Результат вряд ли проще чем с параллельными массивами.
Ред. GetLocalPlayer
» WarCraft 3 / Помогите с jass
» WarCraft 3 / GetTimerUserData
Ред. GetLocalPlayer
» Dune the Endless Wars / Dune Ultimate
Имхо, такое нужно до полноценного мода развивать, ибо для стратегической игры одной карты мало.
» WarCraft 3 / Jass как первый ЯП?
Ред. GetLocalPlayer
» WarCraft 3 / Hashtable или array