Хочется при критическом ударе с руки еще и оглушать цель
Сабж - как лучше реализовывается стан без помощи спеллов?

ssbbssc, достаточно указать у молота бурь требование уровня больше 2 и в разрешенные цели добавить Уязвимые-Неуязвимые, то даммик сможет пулять стан в имунных к магии юнитов, с щитами проще пареной репы - даммика создавай за нейтрально пассивных и он не собьет амулет защиты, но нужно указать в допустимых целях союзников.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
30
оглушай на здоровье!
library StunStack initializer Init
{
    #define private STACK_LIMIT = 8190
    #define private TICK_PERIOD = 0.05
    #define private STUN_EFFECT = "Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl"

            timer   globalTimer = CreateTimer() // Can be replaced with main map timer

    private unit    unitsStack[]
    private effect  effectsStack[]              // Stun effect storage
    private float    timeRemaining[]             // Time of stun left
    private int     stackCounter = 0


    // Looking for id of specified unit in stack
    private int StackSearch(unit givenUnit) {
        int i = -1
        while(i++ < stackCounter) {
            if (givenUnit == unitsStack[i]) {
                return i
            }
        }
        return -1
    }

    // Add unit to stack with overflow check
    private void StackIncrement(unit givenUnit, float duration) {
        if(stackCounter < STACK_LIMIT) {
            PauseUnit(givenUnit, true)
            unitsStack   [stackCounter] = givenUnit
            effectsStack [stackCounter] = AddSpecialEffectTarget(STUN_EFFECT, givenUnit, "overhead")
            timeRemaining[stackCounter] = duration
            stackCounter++
        } else {
            BJDebugMsg("Stunned units stack overflow!")
        }
    }

    // Remove unit from stack
    private void StackDecrement(unit givenUnit, int id) {
        DestroyEffect(effectsStack[id])
        PauseUnit(givenUnit, false)
        stackCounter--
        unitsStack   [id] = unitsStack   [stackCounter]
        effectsStack [id] = effectsStack [stackCounter]
        timeRemaining[id] = timeRemaining[stackCounter]
        unitsStack   [stackCounter] = null
        effectsStack [stackCounter] = null
        timeRemaining[stackCounter] = 0.0
    }

    void StunUnit(unit givenUnit, float duration) {
        int stackedUnitId = StackSearch(givenUnit)
        if (stackedUnitId == -1) {
            StackIncrement(givenUnit, duration)
        } elseif (timeRemaining[stackedUnitId] < duration) {
            timeRemaining[stackedUnitId] = duration
        }
    }

    private void TimerCallback() {
        int i = -1
        while(i++ < stackCounter) {

            timeRemaining[i] -= TICK_PERIOD

            if (timeRemaining[i] <= 0.0) {
                StackDecrement(unitsStack[i], i)
            }
        }
    }

    private void Init() {
        TimerStart(globalTimer, TICK_PERIOD, true, function TimerCallback)
    }
}
32
Clamp, вот серьезно? Что за фигня? Пауза скрывает панель приказов, пауза останавливает внутренний таймер баффов юнита - пауза как стан очень хреновая идея.
30
quq_CCCP, если ищется способ не использовать способности для реализации оглушения, то, по моему убеждению, целью является отказ от дефолтных способностей в принципе => это не имеет значения.
32
Clamp:
quq_CCCP, если ищется способ не использовать способности для реализации оглушения, то, по моему убеждению, целью является отказ от дефолтных способностей в принципе => это не имеет значения.
Ценой бесконечных багов? Пауза придумана близзардами для кинематиков и имеет тучу побочных эффектов, темболее когда есть более безопасная альтернатива - приказы или кастом стан на мемхаке (требуется триггер)
30
безопасная альтернатива - приказы
Не помню приказа оглушения \о/
Ценой бесконечных багов?
У меня никаких багов нет, хз в чём ваша проблема.
32
Clamp, ну вопервых - событие что юнит отдал любой приказ кроме stop-hold-stan (Да есть приказ стана), тут же приказ stop + пауза на 1 фрейм, юнит стоит и не двигается, не дергается анимация, панель приказов свободна, единственное но можно кастануть мгновенные абилки вроде виндвалка.
Либо стан мемхаком как я уже писал...
Во вторых то что у тебя их нету, не значит что их не у кого нету...
Твой стан будет продлят все другие станы, номально да? когда они не складываются, так же отказатся от всех дефолтных абилок подчас недоступная роскошь для многих картоделов.
30
Твой стан будет продлят все другие станы
Если ты внимательно посмотришь на код мимо PauseUnit, то заметишь, что он рассчитан на использование в качестве единственного источника станов на карте и учитывает возможность нескольких последовательных станов. Ну и офк никто не мешает в TimerCallback() воткнуть приказ "stop" для юнитов из стека, убрав действия с паузой. наезд, конечно, аргументированный, но по сути это тупо копипаст из одной моей карты, где использование паузы абсолютно оправдано \о/
29
Про паузу уже 500 раз мусолили. Её использовать просто не нужно.
16
минусы паузы:
юнит не может поставить следующий приказ на выполнение;
зависают все стандартные бафы;
нужно самому вести учет навешанных и снимаемых пауз.
минусы болта:
??*?????
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.