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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
По второму пункту.
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
26
Это тот же принцип для второго пункта, мне казалось, что могут быть способы изящнее. Лучше по другим пунктам подскажите.
18
8gabriel8:
Это тот же принцип для второго пункта, мне казалось, что могут быть способы изящнее. Лучше по другим пунктам подскажите.
первый вопрос так и не понял, насчет третьего вопроса:
там весь прикол в ивентах, есть начало когда наводишь на цель, тогда даже анимация не проигрывается и мана не забирается.
Приводит в действие это уже когда ману сняло и проигралась анимация.
Где то был текст на всё это, но я не могу найти.
Ну а далее чекаешь уровень бафа у цели, если он больше 0 - значит хиляешь и удаляешь баф
Хотя возможно это я неправильно понял, можно просто отловить начало каста абилки и восстанавливать ману триггерно.
Принятый ответ
26
UrsaBoss:
первый вопрос так и не понял
Это уже обсуждалось несколько раз, но так давно, что затрудняюсь найти. Более оптимальным вариантом при работе со способностями и вообще является сохранение в переменную (массив), в хэш-таблицу, во что-то ещё?
А в третьем вопросе смысл в том, что, например, атакующие способности могут не сработать, если у противника есть предмет, который блокирует заклинания, либо триггерно включается неуязвимость, либо противник стал неязвимым к магии. Часто это демонстрируют скилловые игроки, ловя молоток Горного Короля Божественным щитом, либо зельем нуязвимости, либо блинком тюремщицы Иллидана. Таким образом и мана на молоток потрачена, и кд на него пошёл, и урон не нанесён. А вот для союзников восстановление маны может по каким-то причинам не произойти? Происходит восстановление маны аналогично Лечению Целителя.
28
Обращение в массив быстрее обращения в хеш, но юзай то, что больше нравится.
8gabriel8:
А вот для союзников восстановление маны может по каким-то причинам не произойти?
Если союзник имеет иммун к заклинаниям, то возможно.
26
PT153:
Если союзник имеет иммун к заклинаниям, то возможно.
Ну это очевидно, что в таком случае просто изначально наложение не сработает.
Ладно, буду считать, что на союзников всегда можно делать срабатывание триггера.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.