set CastX = CastX + Blizzard_Range * GetRandomReal( -1, 1 ) //Спавн эффекта в случайной точке в радиусе 300
set CastY = CastY + Blizzard_Range * GetRandomReal( -1, 1 ) //Спавн эффекта в случайной точке в радиусе 300
Это не радиус, это квадрат. Радиус выглядит следующим образом.
set theta = GetRandomReal(0, 2 * bj_PI)
set rho = r * SquareRoot(GetRandomReal(0, 1)) // r это радиус
set x = cx + rho * Cos(theta)
set y = cy + rho * Sin(theta)
LastUchiha, но ты же их вводишь в заблуждение и они думают про окружность. Нужно явно написать, что для простоты расчётов мы используем квадрат вместо окружности.
Зачем ты здесь объявляешь одноимённую локалку Tick?
function InitTrig_Blizzard takes nothing returns nothing //Функция инициализации триггера (из функции main вызывается InitCustomTriggers() которая вызывает инициализацию всех триггеров на карте)
local trigger t = CreateTrigger() //Создание триггера
local integer Tick = 0 //Объявление целочисленной переменной
Притом со странным для этого контекста именем? Чем тебе стандартная i не угодила?
Убери меня из помощи, у новичков это вызовет недоверие. У нас одно сообщество и помогать в порядке вещей. Если писать каждого, то это будет ужас. Да и человеку со стороны эта информация никакой пользы не приносит. А если он заинтересуется, то всё есть в комментах.
ИМХО необходимо снижать градус комментирования.
loop //Начало цикла
Лучше в шапке написать, что для понимания сути происходящего ознакомьтесь с предыдущим ресурсом. А здесь убрать комментарии открытия и закрытия блоков. Оно замыливает глаза и отвлекает от происходящего. А у новичков на данном этапе скила чтения кода ещё нет, так что ты им медвежью услугу оказываешь.
LastUchiha, но и насколько я помню, кастом код карты вставляется после объявления функций. Соответственно в дефолт эдиторе у тебя не получится объявить глобалки и UnitAlive. Соответственно в требованиях необходимо указать JNGP или альтернативный способ пробросить глобалки и UnitAlive.
LastUchiha, ну и Спелл сделан без кастомных функций. режет глаза. Ибо твои функции по определению кастомные. Да и требуемые моды в обязательном порядке указываются. Так что если у тебя ничего не указано, то автоматически подразумевается запуск на ваниле.
LastUchiha, ну блин, красота же. Только вот описание на фоне такой красоты смотрится просто ужасно.
Язык исполнения принято ставить перед названием. Да и JASS это аббревиатура, посему лучшим выбором будет [JASS] - Буран.
Ну и само описание тоже сделано ужасно. Можно же было нечто подобное сделать:
Простое заклинание для новичков. Добавляет к стандартному Буран дополнительный AOE урон раз в секунду. Код намеренно упрощён из-за обучающего характера материала. Более продвинутую версию можете посмотреть по следущей >ссылке<.
LastUchiha, не нужно делать Франкенштейна из ресурса. Изначальный Буран был прекрасен своей простотой. Оставь его как есть, убери скриншоты и запиши короткое видео с прокастом. Притом желательно для целей юзать всяких футманов и прочую тир1 шушпару.
Картинку для предосмотра лучше вставляй только в предосмотр. Для это в коротком описании ресурса первой строкой сделай так:
<- картинка
А продвинутый буран опубликуй следующим ресурсом. Для примера глянь на количество вариаций AOE Благодати.
function SpellBlizzardCallback1 takes nothing returns nothing
local integer i // Номер тика
local integer last // Номер последнего тика
local integer xk // Ключ для x
local integer yk // Ключ для y
local real x // Координата x
local real y // Координата y
set Timer = GetExpiredTimer()
set TimerId = GetHandleId(Timer)
set Caster = LoadUnitHandle(HT, TimerId, 'cstr')
set CasterX = LoadReal(HT, TimerId, 'cstX')
set CasterY = LoadReal(HT, TimerId, 'cstY')
set i = LoadInteger(HT, TimerId, 'tick') // Получаем номер тика
call SaveInteger(HT, TimerId, 'tick', i + 1) // Увеличиваем тик на единицу
set last = LoadInteger(HT, TimerId, 'last') // Получаем номер последнего тика
// Проверяем флаг и рандомим плямбу
if HaveSavedBoolean(HT, TimerId, 'ends') and GetRandomInt(1, 100) <= 30 then
// Рандомим координаты плямбы.
set x = CasterX + SpellBlizzardRange * GetRandomReal(-1, 1)
set y = CasterY + SpellBlizzardRange * GetRandomReal(-1, 1)
set last = last + 8 // Откладываем на восемь тиков
call SaveInteger(HT, TimerId, 'last', last) // Сохраняем тик последнего урона
// Расчитываем ключ для сохранения
set xk = last * 2
set yk = xk + 1
// Сохраняем координаты
call SaveReal(HT, TimerId, xk, x)
call SaveReal(HT, TimerId, yk, y)
// Спавним эффект
// DestroyEffect ... лень писать
endif
// Проверяем плямбу на текущем тике
set xk = i * 2
set yk = xk + 1
// Для проверки тупо проверяем, сохранено ли что либо на ячейке
if HaveSavedReal(HT, TimerId, xk) then
set x = LoadReal(HT, TimerId, xk)
set y = LoadReal(HT, TimerId, yk)
// Наносим урон в координанах
endif
// Проверяем приказ и пишем флаг
if GetUnitCurrentOrder(Caster) != 0xd0079 then // blizzard
call SaveBoolean(HT, TimerId, 'ends', true)
endif
// Останавливаем каст если выполнены условия
if HaveSavedBoolean(HT, TimerId, 'ends') and i >= last then
call PauseTimer(Timer)
call DestroyTimer(Timer)
call FlushChildHashtable(HT, TimerId)
endif
endfunction
Вместо этого не умножаю на два, а просто вместо единицы прибавляю 100 для уверенности.
Не нужно писать числа наугад. Перечитай коммент. Тут же всё просто:
set i = 14 // Номер тика, integer
set xk = i * 2 // Ключ x, integer
set yk = xk + 1 // Ключ y, integer
set x = GetReal(xk) // Значение x, real
set y = GetReal(yk) // Значение y, real
Среднестатистическому автору удобей работать со своим кодом_Копировать_Копировать_Копировать_Копировать_Копировать_Копировать_Копировать_Копировать_Копировать_002
Ну смотри, что нам нужно? Через 8 тиков нанести урон по точке. Для этого нужно сохранить точку на номер тика. В хэштаблице нам доступно миллион индексов, поэтому не паримся что индексы закончатся. Так как мы упаковываем двумерные массивы [x,y] в одномерный, то индексов у нас становится в два раза меньше, но полмиллиона нам точно хватит.
Назовём ключи [xk, yk], а номер тика i. Тогда номер ключа будет находиться таким образом:
xk = i * 2
yk = i * 2 + 1
Когда с упаковкой точек разобрались, разберёмся с тиками. Допустим мы хотим плодить плямбы со случайными промежутками. Единственное ограничение, мы не сможем сделать две плямбы в один тик. Разберём тики тупо по порядку:
1 2 3 - Рандом сработал, через 8 тиков на нужно нанести урон. Значит i = 8 + 3 = 11. Сохраняем на 11 тик координаты. 4 5 - Рандом сработал, через 8 тиков на нужно нанести урон. Значит i = 8 + 5 = 13. Сохраняем на 13 тик координаты. 6 7 - Кастер прервал заклинание, но i=13, а 7 < 13, пишем флаг, что плодить плямбы больше не нужно и продолжаем тикать 8 9 10 11 - В этой ячейке есть координаты, наносим урон 12 13 - В этой ячейке есть координаты, наносим урон, заодно прерываем заклинание ибо есть флаг и 13 >= 13
» WarCraft 3 / [JASS] - Цветной Буран
Ред. nazarpunk
» WarCraft 3 / [JASS] - Цветной Буран
Ред. nazarpunk
» WarCraft 3 / [JASS] - Цветной Буран
Ред. nazarpunk
» WarCraft 3 / [JASS] - Цветной Буран
Ред. nazarpunk
» WarCraft 3 / [JASS] - Цветной Буран
» WarCraft 3 / [JASS] - Цветной Буран
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / Сталкер - Война в зоне
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / [JASS] - Буран
Ред. nazarpunk
» WarCraft 3 / [JASS] - Буран
Ред. nazarpunk
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / Небольшой вопрос касательно хэш-таблиц
» WarRaft / Order
Прокрутить к ресурсу
» WarCraft 3 / [JASS] - Буран
» WarCraft 3 / [JASS] - Буран
Ред. nazarpunk
» WarCraft 3 / [JASS] - Буран
2
3 - Рандом сработал, через 8 тиков на нужно нанести урон. Значит i = 8 + 3 = 11. Сохраняем на 11 тик координаты.
4
5 - Рандом сработал, через 8 тиков на нужно нанести урон. Значит i = 8 + 5 = 13. Сохраняем на 13 тик координаты.
6
7 - Кастер прервал заклинание, но i=13, а 7 < 13, пишем флаг, что плодить плямбы больше не нужно и продолжаем тикать
8
9
10
11 - В этой ячейке есть координаты, наносим урон
12
13 - В этой ячейке есть координаты, наносим урон, заодно прерываем заклинание ибо есть флаг и 13 >= 13
» WarCraft 3 / [JASS] - Буран