Мне требуется пассивная способность, которая увеличивает скорость атаки с каждым ударом по одному противнику, скорость сбрасывается при смене цели. Как мне сообщили, аналогичная способность Рвение (Fervor) у Тролля из DotA. Попробовал найти в карте OpenDotA на сайте её наработку, но этой способности там нет, да и многого другого тоже. Может у кого есть открытая DotA с этой наработкой, либо представляет хорошо, как сделать?

Рунные браслеты давать тем, на ком хочешь распознать тип урона(лучше всем сразу). Нет не надо... просто событие на отлов урона с проверкой что урон меньше 0 и сразу нанести такой же урон только больше 0( так как все заклинания с нанесением урона будут исцелять).
Проще говоря "браслеты", это как детект на то, что урон не может исцелять, а поскольку браслеты реагируют только на маг урон, соответсвенно любой "исцеляющий урон" и есть магическим.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Лови карту.
ответ
Steal nerves:
есть такая стандартная способность у орков.
второй вариант - триггерный. с помощью системы урона
ответ
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
ответ
  1. В кампании орды за Рекксара медведь призывается без ограничения по времени.
  2. Любая способность призыва, в которой указать количество призываемых юнитов = 0.
ответ
Кину наработку, в триггерах разбираешься?
ЛПХОХЫОПЫ, сделано. Как делается. можно посмотреть в триггерах.

22
Враг получает урон
Атакующий равен способность пасивка 1 уровня, то заносить базу атакующий и повреждение и количеств атак и время, при атаки заносим +1 каждый данные а таймер каждый время увеличивает если время увеличен макс то удаляем то есть обнуляем... Это даже новички понять нарисовать на бумаге пример механика
26
pro100master, механику я понимаю, меня интересует, как именно это должно быть реализовано, чтобы потом не было разных конфликтов (в DotA об этом, наверное, позаботились). Увеличивать скорость стакающимся баффом, способностью или триггерно; отслеживать юнита через сравнение с целью предыдущего удара, либо иначе можно; с увеличением уровня способности во время атаки одного юнита, что будет?
3
hiveworkshop.com/threads/jass-custom-stat-system-css-v1-5g.229885/#resource-46764 за удар даешь скорость атаки а потом сбрасываешь
32
8gabriel8, В доте это сделано на jass, а так же имеется в опен доте, но не у тролля а у Рексара.
26
Valeera, вижу систему, которая показывает характеристики предметов. Может смысл в каком-то комментарии, но мне он не открылся.
quq_CCCP, там у Рексара самое близкое рёв медвежий, который прибавляет процент скорости атаки юнитам.
Нашёл другую OpenDotA, где эта способность есть, а значит и триггер к ней скорее всего тоже. Но выглядит для меня устрашающе, там более 700 неотсортированных триггеров, при этом в JASS я почти не понимаю. Попробую ориентироваться на raw-код способности.
Загруженные файлы
28
8gabriel8,
через абилку предмета на скорость атаки делай. Если у тебя один герой с такой абилкой будет. То 2 глобалок будет достаточно. Да даже одной. При атаке (даже обычное событие с замахом подойдёт), заносишь цель атаки в переменную, перед занесением делаешь проверку что если цель атаки == юниту в переменной повысить лвл абилки на скорость боя на 1, если же не ровно то сделать уровень абилки 1.
На 1 лвл абилки можно сделать бонус ноль. Чтобы не надо было удалять/добавлять.
32
8gabriel8, Нет, раньше у рекрсара она была, точно так же вроде называлась и имела ту же иконку.
Подобная способность довольно примитивна, счетчик + таймер чтобы снимать бонус.
26
quq_CCCP, причём тут таймер? Бонус снимается после атаки другого юнита.
22
8gabriel8, таймер для тех если ты долго не бил цель то обнуляет оно...
26
pro100master, в DotA это очень нужно, конечно, невероятно просто! Там все атакуют юнита один раз, потом часик где-то бегают, никого не атакуя, потом возвращаются к атакованному юниту, чтобы снова драться)))
43
...боже...
Прочитал вопрос и ответы к нему, понять не могу в чём проблема то запилить такую способность? Всё просто как дважды два, только нужно делать через отлов, так как если атака будет не удачной, то будет бредово как то... Прирост можно сделать почти через любую способность (кроме предмет (можно, но придется делать много копий для прироста)). Даже можно лучше сделать чем в доте.
26
molot39, ещё один гениальный коммент?
Чего-то нынче вопросы и ответы хгм тухнут, уже человек со стороны просто скинул мне ссылку на реализацию способностей тролля в DotA:
32
8gabriel8, Ты зря надеяшся слепить в 3 гуи дейсвия с вейтами такую способность, либо из опен доты бери либо пили сам дикими костылями, отлов физ урона на гуи то еще удовольствие не говоря про хештаблицу и прочее.
43
8gabriel8:
molot39, ещё один гениальный коммент?
Чего-то нынче вопросы и ответы хгм тухнут, уже человек со стороны просто скинул мне ссылку на реализацию способностей тролля в DotA:
лол
quq_CCCP:
8gabriel8, Ты зря надеяшся слепить в 3 гуи дейсвия с вейтами такую способность, либо из опен доты бери либо пили сам дикими костылями, отлов физ урона на гуи то еще удовольствие не говоря про хештаблицу и прочее.
А я сделал, только не на скорость, на gui, всё работает как часы и без всяких заморочек
26
quq_CCCP, я раньше просил только на GUI триггеры, в этот раз не знаю, понадобятся ли они.
32
molot39, уже не первый раз такое слышу, но не дале, баги, работает ваще не так как описано в примере и так далее...
Хочешь похвастаться - код в студию
32
8gabriel8, ты знаешь ГУИ меньше всего подходит для создание нестандартных способностей героя, а больше всего подходит под создание карт кампаний и роликов.
// OpenDota 6.41 deprotected by NETRAT and DioD
// inspired by everyone who posted on forum threads and feedback page
// based on OpenDota 6.32b, deprotected by DimonT, NETRAT and TheBloodiest
// http://dimon.xgm.ru/opendota/
// Visit our modmaking community at http://xgm.ru/

// Objects used:
// 'A0O0' = Beast Rage (Beastmaster : Rexxar)
// 'A0NZ' = Beast Rage

// DEBUG Trigger Number : 12
function SafeAddSpell takes unit pEU,integer pfV,integer pfw returns nothing
	if GetUnitAbilityLevel(pEU,pfV)==0 then
		call UnitAddAbility(pEU,pfV)
	endif
	call SetUnitAbilityLevel(pEU,pfV,pfw)
endfunction

function BeastRageMain takes nothing returns nothing
	local unit lKg=GetAttacker()
	local unit lFB=GetTriggerUnit()
	local string lf5=H2Tx(lKg)
	local unit lMd=GetUnit(lf5,"BeastRage|PreviousTarget")
	local integer lMa=ReturnMax(GetInteger(lf5,"BeastRage|Counter"),0)
	local integer lmZ=GetUnitAbilityLevel(lKg,'A0O0')
	if lMd!=lFB then
		set lMa=lMa/2
	else
		set lMa=ReturnMin(lMa+1,21)
	endif
	call SafeAddSpell(lKg,'A0NZ',lMa*lmZ)
	call SetInteger(lf5,"BeastRage|Counter",lMa)
	call SetHandle(lf5,"BeastRage|PreviousTarget",lFB)
	call SetBoolean(lf5,"BeastRage|Wait",true)
	call PolledWait(.4)
	call SetBoolean(lf5,"BeastRage|Wait",false)
endfunction

function BeastRageCheck takes nothing returns boolean
	return GetUnitAbilityLevel(GetAttacker(),'A0O0')>0 and GetBoolean(H2Tx(GetAttacker()),"BeastRage|Wait")==false and IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)==false
endfunction

function BeastRageInit takes nothing returns nothing
	local trigger ltt=CreateTrigger()
	call TriggerRegisterAnyUnitEventBJ(ltt,EVENT_PLAYER_UNIT_ATTACKED)
	call TriggerAddCondition(ltt,Condition(function BeastRageCheck))
	call TriggerAddAction(ltt,function BeastRageMain)
	call SpellPreload('A0NZ')
endfunction
вот код из опен доты, примитив но с геймкешем.
8gabriel8, Это то что я чаще всего вижу в ГУИ - когда вейты пихают везде, даже там где они не нужны, если герой дальнего боя то вместо того чтобы отлавливать урон, ждут пока он замахнется и ставят вейт на мнимое время полёта снаряда, совсем забывая что можно промазать, цель может умереть и так далее.
43
quq_CCCP:
molot39, уже не первый раз такое слышу, но не дале, баги, работает ваще не так как описано в примере и так далее...
Хочешь похвастаться - код в студию
Думаю это не к месту, скоро будет новая версия робот сити, там будет реализация.
26
quq_CCCP, а мне другую реализацию скинули:
function Trig_Fervor_Conditions takes nothing returns boolean
    return GetUnitAbilityLevel(GetAttacker(),'A06C') > 0 and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)
endfunction

function Trig_Fervor_Tick takes nothing returns nothing
    local unit u
    local unit targ
    local trigger t = GetTriggeringTrigger()
    local hashtable gc = udg_HashCache
    local integer s = GetHandleId(t)
    local integer lvl = GetUnitAbilityLevel(u,'A06C')
    local integer c = 0

    if GetTriggerEventId() == EVENT_UNIT_DAMAGED then
        set u = LoadUnitHandle(gc,s,1)

        if GetEventDamageSource() == u then
            set targ = GetTriggerUnit()
            set c = GetUnitAbilityLevel(u,'A08T')

            if targ != LoadUnitHandle(gc,GetHandleId(u),StringHash("trollfervor")) then
                set c = R2I(c/2)
                call SaveUnitHandle(gc,GetHandleId(u),StringHash("trollfervor"),targ)
            else
                set c = c+1
                if c > lvl+1 then
                    set c = lvl+1
                endif
            endif
            call SetUnitAbilityLevel(u,'A08T',c)
            set targ = null
        endif
        set u = null
    endif
    call TriggerRemoveAction(t,LoadTriggerActionHandle(gc,s,2))
    call FlushChildHashtable(gc,s)
    call KillTrigger(t)
    set t = null
    set gc = null
endfunction

function Trig_Fervor takes nothing returns nothing
    local unit u = GetAttacker()
    local unit targ = GetTriggerUnit()
    local trigger t = CreateTrigger()
    local integer s = GetHandleId(t)
    local hashtable gc = udg_HashCache
    local triggeraction ta
    if GetUnitAbilityLevel(u,'A08T') == 0 then
        call UnitAddAbility(u,'A08T')
    endif
    call SaveUnitHandle(gc,s,1,u)
    call TriggerRegisterUnitEvent(t,targ,EVENT_UNIT_DAMAGED)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_ISSUED_ORDER)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_ISSUED_POINT_ORDER)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_ISSUED_TARGET_ORDER)
    call TriggerRegisterTimerEvent(t,2.5,false)
    set ta = TriggerAddAction(t,function Trig_Fervor_Tick)
    call SaveTriggerActionHandle(gc,s,2,ta)
    set u = null
    set targ = null
    set t = null
    set gc = null
    set ta = null
endfunction

function InitTrig_Fervor takes nothing returns nothing
    set gg_trg_Fervor = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Fervor, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Fervor, Condition( function Trig_Fervor_Conditions ) )
    call TriggerAddAction( gg_trg_Fervor, function Trig_Fervor)
endfunction
И в инициализации создаётся хеш-таблица udg_HashCache.
43
8gabriel8:
quq_CCCP, а мне другую реализацию скинули:
function Trig_Fervor_Conditions takes nothing returns boolean
    return GetUnitAbilityLevel(GetAttacker(),'A06C') > 0 and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)
endfunction

function Trig_Fervor_Tick takes nothing returns nothing
    local unit u
    local unit targ
    local trigger t = GetTriggeringTrigger()
    local hashtable gc = udg_HashCache
    local integer s = GetHandleId(t)
    local integer lvl = GetUnitAbilityLevel(u,'A06C')
    local integer c = 0

    if GetTriggerEventId() == EVENT_UNIT_DAMAGED then
        set u = LoadUnitHandle(gc,s,1)

        if GetEventDamageSource() == u then
            set targ = GetTriggerUnit()
            set c = GetUnitAbilityLevel(u,'A08T')

            if targ != LoadUnitHandle(gc,GetHandleId(u),StringHash("trollfervor")) then
                set c = R2I(c/2)
                call SaveUnitHandle(gc,GetHandleId(u),StringHash("trollfervor"),targ)
            else
                set c = c+1
                if c > lvl+1 then
                    set c = lvl+1
                endif
            endif
            call SetUnitAbilityLevel(u,'A08T',c)
            set targ = null
        endif
        set u = null
    endif
    call TriggerRemoveAction(t,LoadTriggerActionHandle(gc,s,2))
    call FlushChildHashtable(gc,s)
    call KillTrigger(t)
    set t = null
    set gc = null
endfunction

function Trig_Fervor takes nothing returns nothing
    local unit u = GetAttacker()
    local unit targ = GetTriggerUnit()
    local trigger t = CreateTrigger()
    local integer s = GetHandleId(t)
    local hashtable gc = udg_HashCache
    local triggeraction ta
    if GetUnitAbilityLevel(u,'A08T') == 0 then
        call UnitAddAbility(u,'A08T')
    endif
    call SaveUnitHandle(gc,s,1,u)
    call TriggerRegisterUnitEvent(t,targ,EVENT_UNIT_DAMAGED)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_ISSUED_ORDER)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_ISSUED_POINT_ORDER)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_ISSUED_TARGET_ORDER)
    call TriggerRegisterTimerEvent(t,2.5,false)
    set ta = TriggerAddAction(t,function Trig_Fervor_Tick)
    call SaveTriggerActionHandle(gc,s,2,ta)
    set u = null
    set targ = null
    set t = null
    set gc = null
    set ta = null
endfunction

function InitTrig_Fervor takes nothing returns nothing
    set gg_trg_Fervor = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Fervor, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Fervor, Condition( function Trig_Fervor_Conditions ) )
    call TriggerAddAction( gg_trg_Fervor, function Trig_Fervor)
endfunction
И в инициализации создаётся хеш-таблица udg_HashCache.
И что совсем ни как без хеша?
26
molot39, я не знаю, я почти не разбираюсь в JASS и хеш-таблицах. Покажи свою наработку
43
могу даже болванку скинуть, только малек доработаю болванку. В самом проекте исправил, а в болванке нет=)
26
Давай, только поскорее. Эта пассивка, наверное, самое маленькое из того, что потребуется сделать, а уже около недели с ней не могу справиться.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.