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

Лучший ответ:
ssbbssc, достаточно указать у молота бурь требование уровня больше 2 и в разрешенные цели добавить Уязвимые-Неуязвимые, то даммик сможет пулять стан в имунных к магии юнитов, с щитами проще пареной репы - даммика создавай за нейтрально пассивных и он не собьет амулет защиты, но нужно указать в допустимых целях союзников.



Просмотров: 774

» Лучшие комментарии


ImbaStyle #1 - 6 месяцев назад 2
Как ты сделаешь стан без спелов? Тебе нужно отловить момент критического удара и к примеру создать дамика, дать ему стан и скастовать на цель
GetLocalPlayer #2 - 6 месяцев назад 0
  • дать даммику молот бурь и применить на цель.
  • дать даммику баш и атаковать цель (преодолевает иммунитет)
  • запаузить цель
  • каждую 0.01 сек выдавать цели команду "stop"
Diaboliko #3 - 6 месяцев назад 2
Так то руны никто не отменял. Да и баш+крит вроде срабатывают одновременно в пассивках, разве нет?
ClotPh #4 - 6 месяцев назад 0
ImbaStyle, вроде стан без спеллов как-то мемхаком делается, но вроде там свои причуды были.
JaBeN_Симфер #5 - 6 месяцев назад 0
Читай интересные факты в статье xgm.guru/p/wc3/attackmod
quq_CCCP #6 - 6 месяцев назад 1
Эмм у критов и так есть настройки баша, да и баша есть настройки крита, т.е баши могут множить урон как и криты, криты и баши - способности клоны, с разными ветками действий в коде...
ssbbssc #7 - 6 месяцев назад (отредактировано ) 0
Сорян, надо было дописать - у меня есть возможность отловить момент крита, так как он у меня триггерный
GetLocalPlayer:
  • дать даммику баш и атаковать цель (преодолевает иммунитет)
вот этот вариант мне и интересен, хочется узнать настройки баша и дамми юнита, т.е. должен он быть мили\ренж, каким действием отдавать приказ на атаку (вроде видел attack once), а в самом баше что нужно отметить, чтобы дамми не промахнулся по цели
Diaboliko:
Так то руны никто не отменял. Да и баш+крит вроде срабатывают одновременно в пассивках, разве нет?
quq_CCCP:
Эмм у критов и так есть настройки баша, да и баша есть настройки крита, т.е баши могут множить урон как и криты, криты и баши - способности клоны, с разными ветками действий в коде...
Все верно, и изначально способность так и была реализована, но с внедрением новых технологий :D требуется и новый баш
ImbaStyle:
дать ему стан и скастовать на цель
GetLocalPlayer:
  • дать даммику молот бурь и применить на цель.
этот способ самый простой, но он сбивает щиты от магии\амулеты
JaBeN_Симфер:
Читай интересные факты в статье xgm.guru/p/wc3/attackmod
свежие статьи я читаю, и мелисскину статью прочел не один раз
quq_CCCP #8 - 6 месяцев назад (отредактировано ) 3

ssbbssc, достаточно указать у молота бурь требование уровня больше 2 и в разрешенные цели добавить Уязвимые-Неуязвимые, то даммик сможет пулять стан в имунных к магии юнитов, с щитами проще пареной репы - даммика создавай за нейтрально пассивных и он не собьет амулет защиты, но нужно указать в допустимых целях союзников.
ssbbssc #9 - 6 месяцев назад 0
quq_CCCP:
требования уровня героя или технологии исследований?
quq_CCCP #10 - 6 месяцев назад 1
На мемхаке стан довольно геморойный, нет сама функция в 1 строчку, но вы не оберетесь багов, если не будите следить за юнитом, ибо если юнит умрет и это герой, который потом воскреснет то он не будет больше оглашаться хоть ты тресни. Нужно удалять кастом стан до смерти, юнита, но как вы это будите ловить, если у юнита есть крест перерождения (или аналог), то он тоже багнется....
Есть одно событие EVENT_WIDGET_DEATH - которое какраз срабатывает до смерти юнита, при падении хп меньше минимума и если его юзать то какраз можно удалить кастом стан, но это единичное событие, на конкретный виджет, для него придется создавать отдельный триггер, в общем с даммиками проще... Кроме редких исключений где длительность стана за ранее не известна да и этот стан может быть отменён спецефичискими действиями, пример - купол войда из доты, аналог ульта атропса (если че то магические сети не стак, пока висит одна вторую не повешать)..
ssbbssc, требования героя, скилл сделать для героя...
ImbaStyle #11 - 6 месяцев назад -3
ssbbssc:
Сорян, надо было дописать - у меня есть возможность отловить момент крита, так как он у меня триггерный
GetLocalPlayer:
  • дать даммику баш и атаковать цель (преодолевает иммунитет)
вот этот вариант мне и интересен, хочется узнать настройки баша и дамми юнита, т.е. должен он быть мили\ренж, каким действием отдавать приказ на атаку (вроде видел attack once), а в самом баше что нужно отметить, чтобы дамми не промахнулся по цели
Diaboliko:
Так то руны никто не отменял. Да и баш+крит вроде срабатывают одновременно в пассивках, разве нет?
quq_CCCP:
Эмм у критов и так есть настройки баша, да и баша есть настройки крита, т.е баши могут множить урон как и криты, криты и баши - способности клоны, с разными ветками действий в коде...
Все верно, и изначально способность так и была реализована, но с внедрением новых технологий :D требуется и новый баш
ImbaStyle:
дать ему стан и скастовать на цель
GetLocalPlayer:
  • дать даммику молот бурь и применить на цель.
этот способ самый простой, но он сбивает щиты от магии\амулеты
JaBeN_Симфер:
Читай интересные факты в статье xgm.guru/p/wc3/attackmod
свежие статьи я читаю, и мелисскину статью прочел не один раз
СОбытие, условие - твой крит
Действия
Создать юнит Дамми(любой юнит, у которого убираешь модель, атаку и тд)
добавить способность юниту (твой стан(например молот бурь))
Результат приказа при наведении на цель - юнит (приказать Дамми "молот бурь" атакованный юнит)
Удалить Дамми из игры
quq_CCCP #12 - 6 месяцев назад 0
Кстати а как гуру собрались отлавливать криты, срабатывание крита просто так не отследить.
ClotPh #13 - 6 месяцев назад 2
quq_CCCP, я мб не так тебя понимаю, человек же вон выше написал, что у него триггерный крит...
quq_CCCP #14 - 6 месяцев назад 0
ClotPh:
quq_CCCP, я мб не так тебя понимаю, человек же вон выше написал, что у него триггерный крит...
Я так понял он хочет сделать триггерный крит, т.к щяс у него дефолт крит с башем и чем то не устраивает...
ssbbssc #15 - 6 месяцев назад 0
quq_CCCP:
смотри, триггерный крит у меня уже сделан
дефолт не устраивает потому, что я сменил систему крита в целом - теперь все абилки добавляют только % к шансу, и крит будет один, а не куча разных от разных итемов
как в LOL система
Крит уже готов и работает, теперь интересует баш привинтить
я попробую сделать через дамми каст по твоим настройкам
3 комментария удалено
JaBeN_Симфер #19 - 6 месяцев назад 0
ssbbssc, а твоя система как-то имитирует срабатывание анимации крита у юнита?
ssbbssc #20 - 6 месяцев назад 0
JaBeN_Симфер:
система не моя, это скорее просто маленький плагин или настройка
анимацию не имитирует, так как расчеты урона идут уже после удара
но в теории можно рассчитывать шансы еще до замаха и добавлять тег для анимации
Clamp #21 - 6 месяцев назад (отредактировано ) 0
» оглушай на здоровье!
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)
    }
}
Doc #22 - 6 месяцев назад 0
PauseUnit(givenUnit, true)
xd
ssbbssc #23 - 6 месяцев назад 0
всем спасибо, способ quq_CCCP работает
quq_CCCP #24 - 6 месяцев назад 0
Clamp, вот серьезно? Что за фигня? Пауза скрывает панель приказов, пауза останавливает внутренний таймер баффов юнита - пауза как стан очень хреновая идея.
Clamp #25 - 6 месяцев назад 2
quq_CCCP, если ищется способ не использовать способности для реализации оглушения, то, по моему убеждению, целью является отказ от дефолтных способностей в принципе => это не имеет значения.
quq_CCCP #26 - 6 месяцев назад 0
Clamp:
quq_CCCP, если ищется способ не использовать способности для реализации оглушения, то, по моему убеждению, целью является отказ от дефолтных способностей в принципе => это не имеет значения.
Ценой бесконечных багов? Пауза придумана близзардами для кинематиков и имеет тучу побочных эффектов, темболее когда есть более безопасная альтернатива - приказы или кастом стан на мемхаке (требуется триггер)
Clamp #27 - 6 месяцев назад 0
безопасная альтернатива - приказы
Не помню приказа оглушения \о/
Ценой бесконечных багов?
У меня никаких багов нет, хз в чём ваша проблема.
quq_CCCP #28 - 6 месяцев назад 0
Clamp, ну вопервых - событие что юнит отдал любой приказ кроме stop-hold-stan (Да есть приказ стана), тут же приказ stop + пауза на 1 фрейм, юнит стоит и не двигается, не дергается анимация, панель приказов свободна, единственное но можно кастануть мгновенные абилки вроде виндвалка.
Либо стан мемхаком как я уже писал...
Во вторых то что у тебя их нету, не значит что их не у кого нету...
Твой стан будет продлят все другие станы, номально да? когда они не складываются, так же отказатся от всех дефолтных абилок подчас недоступная роскошь для многих картоделов.
Clamp #29 - 6 месяцев назад 0
Твой стан будет продлят все другие станы
Если ты внимательно посмотришь на код мимо PauseUnit, то заметишь, что он рассчитан на использование в качестве единственного источника станов на карте и учитывает возможность нескольких последовательных станов. Ну и офк никто не мешает в TimerCallback() воткнуть приказ "stop" для юнитов из стека, убрав действия с паузой. наезд, конечно, аргументированный, но по сути это тупо копипаст из одной моей карты, где использование паузы абсолютно оправдано \о/
Doc #30 - 6 месяцев назад 0
Про паузу уже 500 раз мусолили. Её использовать просто не нужно.
DracoL1ch #31 - 6 месяцев назад 0
минусы паузы:
юнит не может поставить следующий приказ на выполнение;
зависают все стандартные бафы;
нужно самому вести учет навешанных и снимаемых пауз.
минусы болта:
??*?????
Clamp #32 - 6 месяцев назад (отредактировано ) 0
Да успокойтесь вы уже, неугомонные искатели правды, влюблённые в "стандартные бафы". Если непонятно, как заменить так нелюбимую вами паузу на приказ, то пожалуйста:
» раскрыть
library StunUnit initializer Init
{
    private timer   periodicTimer = 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

    #define private TICK_PERIOD  = 0.05
    #define private STACK_LIMIT  = 8190
    #define private STUN_EFFECT  = "Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl"
    #define private ORDERID_STOP = 0xD0004


    // 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 StackPush(unit givenUnit, float duration) {
        if(stackCounter < STACK_LIMIT) {
            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 StackPop(int id) {

        DestroyEffect(effectsStack[id])

        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) {
            StackPush(givenUnit, duration)
        } elseif (timeRemaining[stackedUnitId] < duration) {		// <=!!
            timeRemaining[stackedUnitId] = duration
        }
    }

    private void TimerCallback() {

        int i = -1

        while(i++ < stackCounter) {

            timeRemaining[i] -= TICK_PERIOD
            IssueImmediateOrderById(unitsStack[i], ORDERID_STOP)

            if (timeRemaining[i] <= 0.0) {
                StackPop(i)
            }
        }
    }

    private void Init() {
        TimerStart(periodicTimer, TICK_PERIOD, true, function TimerCallback)
    }
}

нужно самому вести учет навешанных и снимаемых пауз
Ты удивишься, но умение следить за результатами выполнения кода из этого самого кода в принципе полезный навык, если ты планируешь что-нибудь помимо варкрафта любить. В коде выше специально указал место, где этот самый "учёт" происходит вот такими комментами: <=!!.

минусы болта
Возня в РО, даммикаст.

Постарайтесь больше не бампать вопрос, ответ на него уже был дан, а претензии к паузе были нивелированы сим постом.
2 комментария удалено