function DLK takes nothing returns nothing
local integer i
local timer t = GetExpiredTimer()
local integer h = GetHandleId(t)
local lightning l = LoadLightningHandle(udg_GHT,h,1)
local real r = GetLightningColorR(l)
local real g = GetLightningColorG(l)
local real b = GetLightningColorB(l)
call BJDebugMsg(I2S(i))
if i <=31 then
set i = i+1
set r = r-5
set g = g-5
set b = b-5
call SetLightningColor(l,r,g,b,GetLightningColorA(l))
call BJDebugMsg(I2S(i))
else
call DestroyLightning(l)
call DestroyTimer(t)
call FlushChildHashtable(udg_GHT,h)
endif
set t = null
set l = null
endfunction
function DL takes lightning l, real r returns nothing
local timer t = CreateTimer()
local integer h = GetHandleId(t)
call SaveLightningHandle(udg_GHT,h,1,l)
//call TimerStart(t,r,false,function DLK_old)
call TimerStart(t,r/30,true,function DLK)
set t = null
set l = null
endfunction
Так работать тоже не хочет, думаю что что-то с не так с лупом =-=
Попробуй сделать шаблон под 1 квадрат, и используя конкретные х/у, заполнить область:
0 = квадрата нет, 1= он есть
0|1|1|1|0
1|0|1|0|1
1|1|x|1|1
1|0|1|0|1
0|1|1|1|0
Х - это центр, где нет квадрата
возьмём 2 за единицу меры, на основе от неё уже будем считать
т.е. допустим 0:0 - это сам центр твоего круга
квадраты сторонами 2х2
имея это, получаем точки центров квадратов: x:y
-4:4 | -2:4 | 0:4 | 2:4 | 4:4
-4:2 | -2:2 | 0:2 | 2:2 | 4:2
-4:0 | -2:0 | 0:0 | 2:0 | 4:0
-4:-2 | -2:-2 | 0:-2 | 2:-2 | 2:-2
-4:-4 | -2:-4 | 0:-4 | 2:-4 | 4:-4
Берём эти координаты, умножаем единицу например на 20, и получаем круг с квадратами 40х40, и общей площадью 200х200
Дальше лупом расставляешь центры квадратов и создаёшь их. Можешь пронумеровать, типо 1-16, а 17-25 закрасить
В идеале, можешь сделать круги:
1й круг - 1 клетка 1х1
2й круг - 9 клеток 3х3
3й круг - 25 клеток 5х5
4й круг - 49 клеток 7х7
5й круг - 81 клетка 9х9
6й круг - 121 клетка 11х11
7й круг - 169 клеток 13х13
8й круг - 225 клеток 15х15
9й круг - 289 клеток 17х17
10й круг - 361 клетка 19х19
МБ легче будет написать алгоритм центров для этих кругов
например
-38:38| ... | 38:38
...........................
-38:-38| ... | 38:-38
и уже нарисовав один раз полный "круг" из необходимого кол-ва квадратов, уже будет понятно, какие квадраты зашриховывать, а какие нет
quq_CCCP,
ПодEлитесь секретом отлова физ урона через маг резист? xD
...
Решил проблему наитупейшим из возможных способов:
раскрыть
function MDWC takes unit c, unit t, real dmg,real sd, real cc, real cm, string color returns nothing
local real hp1
local real hp2 = GetUnitState(t,UNIT_STATE_LIFE) // <---
local real dt
....
...
set dmg = DamageCalculatorMagic(dmg,t)
call UnitDamageTarget(c,t,dmg,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_MAGIC,WEAPON_TYPE_WHOKNOWS)
set hp1 = GetUnitState(t,UNIT_STATE_LIFE) // <----
set dt = hp2-hp1 // <--- Вот урон
call SetTextTagText(ttc,color+I2S(R2I(dt)),16*.0023)
endfunction
Лучшее, что мог придумать мой невыспавшийся мозг, но однако, оно сработало.
Прогресс :3
Самое тупое решение - каждые 0.03125 сек сбрасывать выборку любого игрока с этого юнита.
Не очень тупое - сделать 2 одинаковых юнита, одному дав способность москиты, и на время меняя их местами
Сергей4,
Перенесите hero = Атакующий до развилки IF/Then/Else
Вы пытаетесь посчитать ловкость от того, кого ещё нет, и уже после прока (которого нет, так как ловкость считывается из воздуха), вы присваиваете hero = атакующий герой.
Быть может она улучшается, но так как цифры в описаниях стоят одинаковые, то визуально как бы ничего не меняется. Если с активками работает, то просто дай юниту
1й лвл: 100% крит шанс на х1
2й лвл: 100% крит шанс на х2
И отлавливай по значениям. (Дебагер на коленке)
Если работать не будет, то уже лезь в триггерную часть и добавляй всё оттуда
8gabriel8
Обычно проблемы с ретекстуром решаются обычным перезапуском редактора.
Настройки -> убрать при запуске "создание новой пустой карты" (дабы не подхватывал нормальные текстуры)
Сохранить карту -> Закрыть редактор
Открыть редактор -> Открыть карту
На WEX'е так прокатывает (:
Возможно, до перезапуска Варика, но не компа.
Думаю замечал, что при выходе из некоторых карт вар не просто закрывается, а крашится.
Возможно это вызвано кривым использованием мемхака и прочих ништяков, которые вар определяет как ошибку, не может обработать и в следствии чего крашится.
Думаю что уже в самых глубинах, так что копай в сторону Начала инициализации и Выходе игрока из карты с загрузкой меню
Как показывает практика, это не сильно сложно :D
Правда некоторые модельки сами нарезают себе нужные куски, и в итоге обрезают по 2-3 пикселя с каждой стороны, что в целом выглядит не очень:
Берёшь модельку Светящихся глаз, и прикрепляешь к голове ("head") юнита с помощью триггеров
Насчёт свечения - если я правильно понял, то уже редактировать саму модельку, или же попытаться добавить свечение героя тоже как спецэффект, который будет отображаться под ногами юнита ("origin")
Есть идея - добавлять скрытую пассивку по типу "Боевого марша" на [время действия промахов], действующую на врагов, и через неё вешать эффект черепов над головами
Начинает направлять способность - выбирает цель для способности
EVENT_PLAYER_UNIT_SPELL_CHANNEL
Начинает применять способность - Начинается каст абилки.
EVENT_PLAYER_UNIT_SPELL_CAST
Прекращает применение способности - Отменяет каст абилки. (Сбивают как пример)
EVENT_PLAYER_UNIT_SPELL_ENDCAST
Приводит способность в действие - Заканчивает каст абилки. (Происходит эффект(дамаг))
EVENT_PLAYER_UNIT_SPELL_EFFECT
Завершает применение способности - Заканчивает каст абилки. (Заканчивается приказ
EVENT_PLAYER_UNIT_SPELL_FINISH
Если поле "Следовать в течении времени" не равно 0 ( =2 сек например), то сперва идёт
Приводит способность в действие
а после 2х секунд -
Завершает применение способности
У меня в голову приходит только одна идея реализации - сделать даммиков под героем на каждого юнита, кастовать абилку-пустышку с навесной траэкторией и автонаведением, и путём отлова урона от этого каждого даммика пускать эффект молнии в связанную с ним цель.
Опечаточка вышла
и путём отлова урона от каждого даммика запускать эффект молнии от героя в каждую цель.
Но думаю некритично.
Интересует именно система "Навесного" даммика-снаряда с регулировкой высоты, и если можно - скорости полёта(для одновременного приземления на всех).
И такой вот вопрос:
Есть ли смысл использовать ОДИН тип даммика, для всех эффектов на карте, просто прикрепляя к ним нужный эффект?
Первый триггер:
Событие: Юнит вошёл на карту.
Действие: Добавить событие "юнит атакован" во второй триггер.
Второй триггер:
Действие: Если DamageTaken>0
То Написать DamageTaken в чат.
Ну как-то так в двух словах.
Событие - Конкретный юнит получает урон.( НЕ атакован! - ибо отлавливается в момент отдачи приказа атаковать, и может быть забагано простым застопыванием )
Дальше конвертируешь это в текст, и заменяешь Конкретного юнита на глобалку, или на юнита, стоящего на карте (если это даммик, и нужна инфа по всему урону)
Вот мой отлавлятор:
function t2a takes nothing returns nothing
local unit u = GetEventDamageSource() // Кто нанёс урон (имя)
local real r = GetEventDamage() // Сколько урона
call BJDebugMsg(GetUnitName(u)+" = Attacker") // Отображение игроку
call BJDebugMsg(R2S(r)+" = Damage") // Отображение игроку
endfunction
//===========================================================================
function InitTrig_t2 takes nothing returns nothing
local unit u = gg_unit_H000_0000 // Вот наш юнит, можешь заменить на глобалку
set gg_trg_t2 = CreateTrigger()
call TriggerRegisterUnitEvent(gg_trg_t2,u,EVENT_UNIT_DAMAGED) //Юнит продамажен
call TriggerAddAction( gg_trg_t2, function t2a )
endfunction
Можешь добавить по типу атакованного юнита (Отображать только боссов/хероев/крипов), или по имеющейся у Атакующего конкретной абилки
...
Пропала кнопочка "Редактировать"
Случайно удалил кусок оптимизации:
function t2a takes nothing returns nothing
local unit u = GetEventDamageSource() // Кто нанёс урон (имя)
local real r = GetEventDamage() // Сколько урона
call BJDebugMsg(GetUnitName(u)+" = Attacker") // Отображение игроку
call BJDebugMsg(R2S(r)+" = Damage") // Отображение игроку
set u = null // Это вот должно быть тут
endfunction
//===========================================================================
function InitTrig_t2 takes nothing returns nothing
local unit u = gg_unit_H000_0000 // Вот наш юнит, можешь заменить на глобалку
set gg_trg_t2 = CreateTrigger()
call TriggerRegisterUnitEvent(gg_trg_t2,u,EVENT_UNIT_DAMAGED) //Юнит продамажен
call TriggerAddAction( gg_trg_t2, function t2a )
endfunction
В крайнем случае, сделай пустой спеллбук на предмет, и добавляй туда абилку при подъёме предмета.
При сбросе кд, удаляй эту абилку, и давай заного. =====================================================================
Функция HideAbility Убирает способность игроку, но при обратном действии возвращает свой кд.
Под горизонтальной осью подразумевается мифический "Угол крена?"
Решение тупое, но если тебе нужно не сильно много юнитов поворачивать, то используй вот это:
Ставишь галочку в редакторе на использование отрицательных хначений
Копируешь своего юнита, и указываешь разный угол крена
Зажимая Шифт, открываешь поле крена и делая -90, получаешь лежачего юнита
Сек, прикреплю скрины.
Вот начальное:
Вот итог:
А тип юнита можешь заменять триггерно
Либо же, если совсем нужно, то можешь взять юнита и пририсовать ему пару нужных анимаций с нужным углом поворота
ДаниилОрк,
Замени инициализация карты на "Игровое время - 0.05 секунд" и поставь "Стартовую позицию" в точку камеры, камера после загрузки появляется именно там
Ибо движок вара После инициализации перемещает камеру в Стартовую позицию, а ты перемещаешь её До конца инициализации (при обработке триггеров при загрузке карты)
Как-то так. Воть :3
Diaboliko, Вопрос был про косяк с тем, что юниты ресаются мгновенно, а не про получение ценных лекций о пользе чистого джазза и оптимизации.
Задачей этого скрипта было показать, как можно переделать обычный триггер с Wait на скрипт с использованием локалок.
Можно подключить хэш таблицу, чтобы сохранять тип юнита там, но в данный момент нам нужна простота, а не оптимизация.
Думаю что косяк с тем, что GetDyingUnit() проходит сквозь все временные промежутки и вызывается в момент смерти юнита.
Стас Орлов, Проблема в том, что Wait может растягиваться до бесконечности, в зависимости от нагрузки. Могу помочь в изучении Jass, ибо легче его выучить и не париться, чем мучаться с гуишными функциями
» WarCraft 3 / Молнии
» WarCraft 3 / Алгоритм для создания круговой области
0 = квадрата нет, 1= он есть
0|1|1|1|0
1|0|1|0|1
1|1|x|1|1
1|0|1|0|1
0|1|1|1|0
возьмём 2 за единицу меры, на основе от неё уже будем считать
т.е. допустим 0:0 - это сам центр твоего круга
квадраты сторонами 2х2
имея это, получаем точки центров квадратов: x:y
-4:4 | -2:4 | 0:4 | 2:4 | 4:4
-4:2 | -2:2 | 0:2 | 2:2 | 4:2
-4:0 | -2:0 | 0:0 | 2:0 | 4:0
-4:-2 | -2:-2 | 0:-2 | 2:-2 | 2:-2
-4:-4 | -2:-4 | 0:-4 | 2:-4 | 4:-4
В идеале, можешь сделать круги:
1й круг - 1 клетка 1х1
2й круг - 9 клеток 3х3
3й круг - 25 клеток 5х5
4й круг - 49 клеток 7х7
5й круг - 81 клетка 9х9
6й круг - 121 клетка 11х11
7й круг - 169 клеток 13х13
8й круг - 225 клеток 15х15
9й круг - 289 клеток 17х17
10й круг - 361 клетка 19х19
МБ легче будет написать алгоритм центров для этих кругов
например
-38:38| ... | 38:38
...........................
-38:-38| ... | 38:-38
и уже нарисовав один раз полный "круг" из необходимого кол-ва квадратов, уже будет понятно, какие квадраты зашриховывать, а какие нет
Ред. N1ghtSiren
» WarCraft 3 / УУУУ Функции
ПодEлитесь секретом отлова физ урона через маг резист? xD
...
Решил проблему наитупейшим из возможных способов:
Прогресс :3
Ред. N1ghtSiren
» WarCraft 3 / Анимации
Не то поле менял
Следовать в течении времени = "Касттайм с используемой анимацией"
Ред. N1ghtSiren
» WarCraft 3 / Не могу найти подходящую ауру
Эффект на них работает, но без иконки снизу.
Только что потестил на "Доспехах веры"
Ред. N1ghtSiren
» WarCraft 3 / Невыделяемость на время
Не очень тупое - сделать 2 одинаковых юнита, одному дав способность москиты, и на время меняя их местами
Ред. N1ghtSiren
» WarCraft 3 / Не работает
Перенесите hero = Атакующий до развилки IF/Then/Else
Вы пытаетесь посчитать ловкость от того, кого ещё нет, и уже после прока (которого нет, так как ловкость считывается из воздуха), вы присваиваете hero = атакующий герой.
» WarCraft 3 / Исследование и пасивка
1й лвл: 100% крит шанс на х1
2й лвл: 100% крит шанс на х2
И отлавливай по значениям. (Дебагер на коленке)
Если работать не будет, то уже лезь в триггерную часть и добавляй всё оттуда
» WarCraft 3 / Порченные пни
Обычно проблемы с ретекстуром решаются обычным перезапуском редактора.
Настройки -> убрать при запуске "создание новой пустой карты" (дабы не подхватывал нормальные текстуры)
Сохранить карту -> Закрыть редактор
Открыть редактор -> Открыть карту
На WEX'е так прокатывает (:
» WarCraft 3 / Функция, к-рая по выходу из вара чистит данные скиллов из таблиц
Думаю замечал, что при выходе из некоторых карт вар не просто закрывается, а крашится.
Возможно это вызвано кривым использованием мемхака и прочих ништяков, которые вар определяет как ошибку, не может обработать и в следствии чего крашится.
Думаю что уже в самых глубинах, так что копай в сторону Начала инициализации и Выходе игрока из карты с загрузкой меню
» WarCraft 3 / Текстуры склона
Правда некоторые модельки сами нарезают себе нужные куски, и в итоге обрезают по 2-3 пикселя с каждой стороны, что в целом выглядит не очень:
» WarCraft 3 / Скрипт для вара?
Ред. N1ghtSiren
» WarCraft 3 / Свечение
Насчёт свечения - если я правильно понял, то уже редактировать саму модельку, или же попытаться добавить свечение героя тоже как спецэффект, который будет отображаться под ногами юнита ("origin")
» WarCraft 3 / Дефолтные аттачи с кастов
» WarCraft 3 / Формат файла сохранения игры.
» WarCraft 3 / Навесная траэктория
Ред. N1ghtSiren
» WarCraft 3 / Пара вопросов
EVENT_PLAYER_UNIT_SPELL_CHANNEL
Начинает применять способность - Начинается каст абилки.
EVENT_PLAYER_UNIT_SPELL_CAST
Прекращает применение способности - Отменяет каст абилки. (Сбивают как пример)
EVENT_PLAYER_UNIT_SPELL_ENDCAST
Приводит способность в действие - Заканчивает каст абилки. (Происходит эффект(дамаг))
EVENT_PLAYER_UNIT_SPELL_EFFECT
Завершает применение способности - Заканчивает каст абилки. (Заканчивается приказ
EVENT_PLAYER_UNIT_SPELL_FINISH
Приводит способность в действие
а после 2х секунд -
Завершает применение способности
Ред. N1ghtSiren
» WarCraft 3 / Навесная траэктория
и путём отлова урона от каждого даммика запускать эффект молнии от героя в каждую цель.
Но думаю некритично.
Интересует именно система "Навесного" даммика-снаряда с регулировкой высоты, и если можно - скорости полёта(для одновременного приземления на всех).
Есть ли смысл использовать ОДИН тип даммика, для всех эффектов на карте, просто прикрепляя к ним нужный эффект?
Ред. N1ghtSiren
» WarCraft 3 / Не могу создать систему отлова урона при атаке, событии-Атакован
Дальше конвертируешь это в текст, и заменяешь Конкретного юнита на глобалку, или на юнита, стоящего на карте (если это даммик, и нужна инфа по всему урону)
Вот мой отлавлятор:
...
Пропала кнопочка "Редактировать"
Случайно удалил кусок оптимизации:
» WarCraft 3 / Сброс перезарядки предмета.
При сбросе кд, удаляй эту абилку, и давай заного.
=====================================================================
Функция HideAbility Убирает способность игроку, но при обратном действии возвращает свой кд.
» WarCraft 3 / Как вращать юнита вокруг точки?
Решение тупое, но если тебе нужно не сильно много юнитов поворачивать, то используй вот это:
Ставишь галочку в редакторе на использование отрицательных хначений
Копируешь своего юнита, и указываешь разный угол крена
Зажимая Шифт, открываешь поле крена и делая -90, получаешь лежачего юнита
Сек, прикреплю скрины.
Вот начальное:
Либо же, если совсем нужно, то можешь взять юнита и пририсовать ему пару нужных анимаций с нужным углом поворота
» WarCraft 3 / Камера показывает не то, что должна
Замени инициализация карты на "Игровое время - 0.05 секунд" и поставь "Стартовую позицию" в точку камеры, камера после загрузки появляется именно там
Ибо движок вара После инициализации перемещает камеру в Стартовую позицию, а ты перемещаешь её До конца инициализации (при обработке триггеров при загрузке карты)
Как-то так. Воть :3
Ред. N1ghtSiren
» WarCraft 3 / Рес юнитов
Задачей этого скрипта было показать, как можно переделать обычный триггер с Wait на скрипт с использованием локалок.
Можно подключить хэш таблицу, чтобы сохранять тип юнита там, но в данный момент нам нужна простота, а не оптимизация.
» WarCraft 3 / Сложное время
Хороший план для рекламы.
» WarCraft 3 / Я хз