Очень желательно на GUI, либо чёткий JASS.
Есть необходимость сделать автокаст восстановления маны. Кастует фея. Поигрался сначала с колодцами Ночных Эльфов и статуей Нежити, но сразу бросил, когда способности срабатывали при клике раненных по фее, а не клике феи по раненным. Решил сделать триггерный автокаст на основе Духовного пламени, но столкнулся с такими проблемами:
  • Если выбрать всех фей, а потом вокруг каждой в радиусе 700 союзных юнитов с неполной маной и видимых владельцу феи, то как потом лучше выбрать эту фею, вокруг которой юниты выбирались? Заносить сначала её в переменную (массив), в хеш-таблицу, в цикл, ещё как-то?
  • Как именно отсеять из выбранных юнитов того, кто ближе всего к фее или имеет меньше всего маны?
  • Если способность приведена в действие/началось её применение, то нужно ли отслеживать через 0,01 секунды на цели способности бафф, либо она уже точно сработает на союзнике?

Принятый ответ

8gabriel8:
Это тот же принцип для второго пункта, мне казалось, что могут быть способы изящнее. Лучше по другим пунктам подскажите.
первый вопрос так и не понял, насчет третьего вопроса:
там весь прикол в ивентах, есть начало когда наводишь на цель, тогда даже анимация не проигрывается и мана не забирается.
Приводит в действие это уже когда ману сняло и проигралась анимация.
Где то был текст на всё это, но я не могу найти.
Ну а далее чекаешь уровень бафа у цели, если он больше 0 - значит хиляешь и удаляешь баф
Хотя возможно это я неправильно понял, можно просто отловить начало каста абилки и восстанавливать ману триггерно.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
16
6 лет назад
Отредактирован Патиссончик
0
UrsaBoss:
8gabriel8:
Не только, ещё срабатывает при клике лишённых маны по статуе, а не только при клике статуей по лишённым маны.
нашел одну способность
Это "Восстановить ману" её равкод Amb2
Ошибся, у неё минус - это то что она передает всю свою ману тому кому нужно восстановить ману
А почему нельзя отследить ее применение и установить ману кастеру и цели на необходимое количество единиц?
  1. По этому не понял зачем. Это уже для каких-то последующих наработок? Или это для применения "автокаста"?
  2. Самый очевидный способ нахождения расстояния — знать Х.У координаты юнитов. Получаем 2 катета в прямоугольном треугольнике — считаем гипотенузу, записываем ее, если она меньше, чем у предыдущего юнита. Уверен, есть и попроще пути, но этот самый простой в понимании. АХ, да, ну или просто проверить дистанцию между ними))).
С маной намного проще. Проверить ее количество (в процентах или фактическом кол-ве) у всех юнитов, перезаписывая в переменную того, у кого ее меньше, чем у предыдущего.
Но с этим не увлекайся. И не забудь сделать фею имунной к магии. Иначе 2 таких юнита могут до скончания веков друг друга "хилять", если этот спел стоит маны.
А проблема Духовного пламени в том, что оно не кастуется автокастно вне боя. Лучше замени на восполнить ману, отслеживай ее и устанавливай свои значения.
  1. Тут проще проверить самому, чтобы запомнить.
0
28
6 лет назад
Отредактирован PT153
0
По второму пункту.
globals
    real Mana = 0.
    unit BadUnit = null
    real Range = 700.
    group CastGroup = CreateGroup()
endglobals

function Conditions takes nothing returns boolean
    local real mana = GetUnitState(GetFilterUnit(), UNIT_STATE_MANA)
    if inRange and mana > Mana then // Чтобы отсеять с наибольшей маной.
    // Чтобы отсеять с наименьшей, нужно написать mana < Mana и начальное значение Mana должно быть 999999.
    // Это значение также должно восстанавливаться после каста.
    // Аналогично и с расстоянием до феи.
        set Mana = mana
        set BadUnit = GetFilterUnit()
    endif
    return true
endfunction

function Trig_Cast_Actions takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    local real x = GetUnitX(caster)
    local real y = GetUnitY(caster)
    call GroupEnumUnitsInRange(CastGroup, x, y, Range, function Conditions)
    call GroupRemoveUnit(CastGroup, BadUnit)
    // Другие действия.
    call GroupClear(CastGroup)
    set caster = null
endfunction

// Функция для расстояния:
function GetDistancePoints takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
endfunction

function GetDistanceUnitPoint takes unit u, real x, real y returns real
    local real dx = GetUnitX(u) - x
    local real dy = GetUnitY(u) - y
    return SquareRoot(dx * dx + dy * dy)
endfunction

function GetDistanceUnits takes unit u1, unit u2 returns real
    local real dx = GetUnitX(u1) - GetUnitX(u2)
    local real dy = GetUnitY(u1) - GetUnitY(u2)
    return SquareRoot(dx * dx + dy * dy)
endfunction
0
26
6 лет назад
0
Это тот же принцип для второго пункта, мне казалось, что могут быть способы изящнее. Лучше по другим пунктам подскажите.
0
18
6 лет назад
Отредактирован Hodor
0
8gabriel8:
Это тот же принцип для второго пункта, мне казалось, что могут быть способы изящнее. Лучше по другим пунктам подскажите.
первый вопрос так и не понял, насчет третьего вопроса:
там весь прикол в ивентах, есть начало когда наводишь на цель, тогда даже анимация не проигрывается и мана не забирается.
Приводит в действие это уже когда ману сняло и проигралась анимация.
Где то был текст на всё это, но я не могу найти.
Ну а далее чекаешь уровень бафа у цели, если он больше 0 - значит хиляешь и удаляешь баф
Хотя возможно это я неправильно понял, можно просто отловить начало каста абилки и восстанавливать ману триггерно.
Принятый ответ
0
26
6 лет назад
0
UrsaBoss:
первый вопрос так и не понял
Это уже обсуждалось несколько раз, но так давно, что затрудняюсь найти. Более оптимальным вариантом при работе со способностями и вообще является сохранение в переменную (массив), в хэш-таблицу, во что-то ещё?
А в третьем вопросе смысл в том, что, например, атакующие способности могут не сработать, если у противника есть предмет, который блокирует заклинания, либо триггерно включается неуязвимость, либо противник стал неязвимым к магии. Часто это демонстрируют скилловые игроки, ловя молоток Горного Короля Божественным щитом, либо зельем нуязвимости, либо блинком тюремщицы Иллидана. Таким образом и мана на молоток потрачена, и кд на него пошёл, и урон не нанесён. А вот для союзников восстановление маны может по каким-то причинам не произойти? Происходит восстановление маны аналогично Лечению Целителя.
0
28
6 лет назад
0
Обращение в массив быстрее обращения в хеш, но юзай то, что больше нравится.
8gabriel8:
А вот для союзников восстановление маны может по каким-то причинам не произойти?
Если союзник имеет иммун к заклинаниям, то возможно.
0
26
6 лет назад
0
PT153:
Если союзник имеет иммун к заклинаниям, то возможно.
Ну это очевидно, что в таком случае просто изначально наложение не сработает.
Ладно, буду считать, что на союзников всегда можно делать срабатывание триггера.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.