Я раньше залипал в доту-имбу, когда ещё гарена жива была (2011-2015 года). Собирали фуллы по 5х5 за пару минут, порой не успеваешь зайти они уже поехали.
Сейчас увидел её кто-то схостил на ирине, другая версия конечно, но схожая. Игра всего-то 2х2, я уж думал что всё, фигня это... но через пару дней я влился в костяк постоянных игроков (среди которых даже узбеки были) и их оказалось на много больше. Так что мыуже собирали 5х5 и катали нормально. Только осталось подгадать время, у меня так выходило с этими ребятами собираться с 16 до 20 часов по МСК, в остальное время - их поменьше, но они есть. В другие карты других игроков так же может быть довольно много, так что просто надо мониторить и не стесняться контактировать с адекватными игроками.
Chongoyuto, если делать совсем топорно, то за основу можно взять дефолтный "веер клинков" Варденки, и в нём выставить базовый урон 20/40/60/80. Далее триггерно отлавливать момент каста, и выбирая всех вокруг наносить им дополнительный урон, который надо как-то посчитать...
Я бы сделал триггерный дебафф, который считал бц стаки на конкретном юните, а при попытке нанести ему урон - проверял бы наличие баффа. Если он есть, то +1 стак и урон от числа стаков. Если нету - то просто добавить бафф и первый стак + урон от этого стака (я не помню получает ли он урон первого стака в момент его получения, или же только после первого).
Chongoyuto, ну здесь же всё подписано, и можно изменить.
Базовый урон, расчет мин/макс значений для пика Силы/Ловкости, отталкивание (хоть и мгновенное), время стана...
Chongoyuto, ты уверен что оно тебе надо?
Вот тебе как из доты, только тут базовый урон сразу 20/40/60/80 и плюс ещё от 25% до 50/100/150/200% (от Ловкости). А оглушение от 0.25 до 0.75/1.5/2.25/3.0 секунды.
local unit CASTER = GetTriggerUnit()
local unit TARGET = GetSpellTargetUnit()
local integer LEVEL = GetUnitAbilityLevel(CASTER,'A0G6') // A0G6 - равкод от "Adaptive Strike"
local integer AGI = GetHeroAgi(CASTER,true)
local integer STR = GetHeroStr(CASTER,true)
local real AxS = I2R(AGI) / I2R(STR)
local real SxA = I2R(STR) / I2R(AGI)
local real AGI_BONUS = 0.25
local real DAMAGE_BASE = LEVEL * 20.
local real STUN = 0.25
local real PUSH = 100.
local real DAMAGE_TOTAL
local real ANGLE = Atan2(GetUnitY(TARGET)-GetUnitY(CASTER),GetUnitX(TARGET)-GetUnitX(CASTER))
local location POINT
if AxS > 1.5 then
set AGI_BONUS = LEVEL * 0.5
elseif AxS >= 0.5 then
set AGI_BONUS = AGI_BONUS + (AxS-0.5) * (0.5*LEVEL-0.25)
endif
if SxA > 1.5 then
set STUN = LEVEL * 0.75
set PUSH = 300.
elseif SxA >= 0.5 then
set PUSH = PUSH + (SxA-0.5) * 200
set STUN = STUN + (SxA-0.5) * (0.75*LEVEL-0.25)
endif
set DAMAGE_TOTAL = DAMAGE_BASE + AGI_BONUS * AGI
// толчок + ломает деревья
set POINT = Location(GetUnitX(TARGET)+PUSH*Cos(ANGLE),GetUnitY(TARGET)+PUSH*Sin(ANGLE))
call SetUnitPositionLoc(TARGET,POINT)
call DestroyTree(GetLocationX(POINT),GetLocationY(POINT),200.) // ломает деревья в радиусе 200
call RemoveLocation(POINT)
// наносит урон конкретного типа
call DealDamage(CASTER,TARGET,1,DAMAGE_TOTAL)
// даммикаст оглушения (ротация на 24 уровня от 0.25 до 4.00)
call DStun_cast(CASTER,TARGET,STUN)
Изначально ульт СФа из доты базировался на 2м скилле Горного Короля (клэп), только урон на 0 выставлен и добавлено время подготовки. Сам по себе он обеспечивал только лишь кратковременно замедляющий дебафф (не знаю как там сейчас, не слежу). Раз от деформации рельефа избавились, то полагаю что можно использовать вместо него любой другой скилл, например Рёв (без наложения эффекта), а дебафф - накладывать вручную (не говоря уже об уроне от так же вручную создаваемых волн).
IceFog, странная штука. У меня она так не делает.
У меня на карте стоят "рынки" у которых есть абилки Aneu,Apit,Avul (выбор, скупка, инвул).
Я кучу раз прогонял множества версий своей карты через Lni, и у меня ни разу не было такой проблемы.
А проблема только в иконке? или что-то не работает?
Где-то тут давно поднимали тему на счет того что после загрузки абилки кэшируются не в том порядке и что-то в таком духе... Кароче, надо тестить эту фигню. И найти тот древний топик, где про это писали. Но мне кажется вылечить это врядли получится, максимум - придумать костыль для момента загрузки.
human1, можно, я же написал выше пример для GUI - просто юзаешь арифметику, и оно нормально считает результат и задаёт это значение. Для jass ограничение вроде в 10 символов, дальше то ли смысла нет писать, то ли оно просто не выводит результаты конда проверяешь, но считает правильно... Ну там посмотреть самому можно, если тебе прям нужно уточнить эту информацию.
Makeba, смысл не в том что оно меньше (спойлер - оно не меньше), а в том что не нужно вручную забивать все знаки после точки, ибо 1/64 = 0.0158730158...
Можно в тупую без особого напряга - каждые 1/32 сек проверять хп юнита
Ну я ж так делал у себя, только мне там было достаточно и 0.1 секунды Это та самая абилка которая при понижении ХП возвращала 20/40/60% от потери, и при повышении - докидывала ещё 20/40/60% сверху.
Нужно сделать отдельную функцию для "лечения", и внедрить её везде.
Внутри этой функции будет идти проверка на бафф, либо вообще на ряд баффов и суммарное изменение эффективности лечения.
Потихоньку все те хилки, где у тебя стоит функция "становить ХП юнита как его ткущее ХП + число" будешь заменять на эту новую, которая внутри будет проверять/считать что нужно и регулировать отхил.
Вполне можно юзать абилку Благославение Элуны
При её правильной настройке она просто множит урон на некое значение.
В стандарте число менее 1.00 будет уменьшать урон, а более - увеличивать.
Я у себя её юзаю на 6-ти секундном баффе, который уменьшает входящий маг.урон на 15/30/45/60% (это 0.85/0.70/0.55/0.40 от урона).
Еще есть другой дебафф, который временно повышает входящий маг.урон по указанному врагу на 20/25/30% (это 1.20/1.25/1.30 от урона).
rsfghd, можно просто рандомить координаты и при этом, если X выпадает в ненужный промежуток - рандомить Y немного иначе, вот и всё.
Такой вариант, с примером:
Допустим область B имеет размер 6000x6000, а область C в её центре имеет размер 2000x2000. Ищем случайный X для B - это случайное число от 0 до 6000, т.е. мин/макс. координата X для B.
Если случайно полученная координата X выпадает на область C (т.е. между 2000 и 4000), то нужно указать для следующих расчётов что мы будем мнимо сдвигать диапазон в меньшую сторону, поэтому запишем set Y0 = 2000 (иначе оно должно быть равно 0, т.к. проще всегда считать его, но с разным результатом).
Теперь мы ищем координату Y, которая будет равна случайному числу от 0 до 6000 - Y0, т.е. для случаев когда нет наложения - это от 0 до 6000, а когда есть наложение - от 0 до 4000.
Далее, если наше случайно найденное значение для Y удовлетворяет условие Y > 2000 то можно докинуть к нему Y0 (т.е. обратно увеличить на мнимый сдвиг set Y = Y + Y0), который будет равен 0 или 2000 (в случае если диапазон был уменьшен).
На выходе мы получим Y от 0 до 6000 при Y0 = 0 без сдвига.
А со сдвигом - от 0 до 4000 при Y0 = 2000, что даст нам от 0 до 2000 если Y меньше 2000, или от 2000+2000 до 4000+2000 со сдвигом (т.е. от 4000 до 6000).
примерно такой набросочек, может что запамятовал...
rect B = ... // зона спавна
rect C = ... // чистая зона
local real xC_min = GetRectMinX(C)
local real xC_max = GetRectMaxX(C)
local real xR = GetRandomReal(GetRectMinX(B),GetRectMaxX(B))
local real yR
local real y0 = 0.
if xR > xC_min and xR < xC_max then
set y0 = xC_max - xC_min
endif
set yR = GetRandomReal(GetRectMinY(B),GetRectMaxY(B)-y0)
if yR < GetRectMinX then
set yR = yR + y0
endif
Ред. Extremator
» WarCraft 3 / Поиск игроков
Ред. Extremator
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
Архивом не пускает
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Способности и алгоритмы на заказ
Базовый урон, расчет мин/макс значений для пика Силы/Ловкости, отталкивание (хоть и мгновенное), время стана...
Ред. Extremator
» WarCraft 3 / Способности и алгоритмы на заказ
Вот тебе как из доты, только тут базовый урон сразу 20/40/60/80 и плюс ещё от 25% до 50/100/150/200% (от Ловкости). А оглушение от 0.25 до 0.75/1.5/2.25/3.0 секунды.
Ред. Extremator
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Анимация юнита при нажатии способности
Ред. Extremator
» WarCraft 3 / SLK оптимизация при помощи w3x2lni
У меня на карте стоят "рынки" у которых есть абилки Aneu,Apit,Avul (выбор, скупка, инвул).
Я кучу раз прогонял множества версий своей карты через Lni, и у меня ни разу не было такой проблемы.
» WarCraft 3 / SLK оптимизация при помощи w3x2lni
Или всё же сделанную с неё копию?
» WarCraft 3 / Как узнать есть ли цель способности за кастующим юнитом
» WarCraft 3 / Сбрасываются триггерные способности
» WarCraft 3 / Эффект снижения лечения
» WarCraft 3 / Эффект снижения лечения
Ред. Extremator
» WarCraft 3 / Эффект снижения лечения
А так ты можешь указать и 0.01 * 0.01, и он тебе посчитает 0.0001
Ред. Extremator
» WarCraft 3 / Эффект снижения лечения
Это та самая абилка которая при понижении ХП возвращала 20/40/60% от потери, и при повышении - докидывала ещё 20/40/60% сверху.
» WarCraft 3 / Эффект снижения лечения
Внутри этой функции будет идти проверка на бафф, либо вообще на ряд баффов и суммарное изменение эффективности лечения.
» WarCraft 3 / Как была сделана карта Dota LoD?
» WarCraft 3 / процентное увеличение маг урона как сделать?
Ред. Extremator
» WarCraft 3 / процентное увеличение маг урона как сделать?
При её правильной настройке она просто множит урон на некое значение.
В стандарте число менее 1.00 будет уменьшать урон, а более - увеличивать.
» WarCraft 3 / Конкатенация переменной и строки vjass, для получения нового имени переменной
» WarCraft 3 / Конкатенация переменной и строки vjass, для получения нового имени переменной
» WarCraft 3 / Спавн в зоне, исключая внутреннюю зону.
Ред. Extremator
» WarCraft 3 / Спавн в зоне, исключая внутреннюю зону.
Ред. Extremator
» WarCraft 3 / Спавн в зоне, исключая внутреннюю зону.
Ред. Extremator
» WarCraft 3 / Спавн в зоне, исключая внутреннюю зону.
А со сдвигом - от 0 до 4000 при Y0 = 2000, что даст нам от 0 до 2000 если Y меньше 2000, или от 2000+2000 до 4000+2000 со сдвигом (т.е. от 4000 до 6000).