Добавлен N1ghtSiren
Пытался сделать какое-то подобие спелла, но споткнулся об это:
TimerStart(ti,0.01,false,null)
ta[tc] = CreateTrigger()
..registerTimerExpireEvent(ti)
при попытке добавления второго события в этот же триггер, вар крашится
TriggerRegisterUnitEvent(GetTriggeringTrigger(),t[co], EVENT_UNIT_DAMAGED)
Код на Wurst'e
TimerStart(ti,0.01,false,null)
ta[tc] = CreateTrigger()
..registerTimerExpireEvent(ti)
при попытке добавления второго события в этот же триггер, вар крашится
TriggerRegisterUnitEvent(GetTriggeringTrigger(),t[co], EVENT_UNIT_DAMAGED)
Код на Wurst'e
раскрыть
function damageadder()
int debug = 0
int co = 0
int h
if debug == 0
h = GetHandleId(GetExpiredTimer())
DestroyTimer(GetExpiredTimer())
co = LoadInteger(GHT,h,0)
FlushChildHashtable(GHT,h)
//TriggerRegisterUnitEvent(GetTriggeringTrigger(),t[co], EVENT_UNIT_DAMAGED)
debug++
/*if debug == 1
debug++
print("|cff009900co: "+I2S(co))
if GetEventDamageSource() == da[co]
print("|c00000000Damage?")
UnitDamageTarget(c[co],t[co],dmg[co],true,false,pure,norm,wk)
DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\SpiritLink\\SpiritLinkTarget.mdx", t[co], "origin"))
DestroyTrigger(GetTriggeringTrigger())*/
function alliesQQ()
unit ca = c[tc]
tc++
if tc >= 500
tc = 0
unit dummy
unit u
u=FirstOfGroup(al)
GroupRemoveUnit(al,u)
if u !=null
dummy = createDummy(ca,null)
UnitAddAbility(dummy,'A0A1')
IssueTargetOrder(dummy,"thunderbolt",u)
c[tc] = ca
t[tc] = u
da[tc] = dummy
dmg[tc] = I2R(GetHeroAgi(c[tc],true)*1000)
timer ti = CreateTimer()
SaveInteger(GHT,GetHandleId(ti),0,tc)
TimerStart(ti,0.01,false,null)
ta[tc] = CreateTrigger()
..registerTimerExpireEvent(ti)
..addAction(function damageadder)
ti = null
DestroyTimer(GetExpiredTimer())
print("Timer Destroyed.")
function actionsQQ()
unit u
tc++
if tc >= 500
tc = 0
group g = CreateGroup()
c[tc] = GetSpellAbilityUnit()
GroupEnumUnitsInRange(g,GetUnitX(GetSpellAbilityUnit()),GetUnitY(GetSpellAbilityUnit()),1500+75.,null)
for i = 0 to 20
u=FirstOfGroup(g)
print("i: "+I2S(i))
print("u: "+GetUnitName(u))
if u == null
return
GroupRemoveUnit(g,u)
if isUnitAliveAndAlly(u,GetSpellAbilityUnit())
GroupAddUnit(al,u)
TimerStart(CreateTimer(),0.01,true,function alliesQQ)
DestroyGroup(g)
print("Enumed")
print("Enemys: "+I2S(CountUnitsInGroup(en)))
print("Allies: "+I2S(CountUnitsInGroup(al)))
init
CreateTrigger()//Shot
registerSpellEffectEvent('A0A2', function actionsQQ)
Может быть фича, может баг, но такое ещё не встречал
Принятый ответ
По коду честно говоря ничего не понятно. Но в отлове урона это обычная ошибка, когда урон наносится внутри триггера, отлавливающего урон или если он вызывает действия которые наносят урон и снова вызывают этот триггер. Бесконечная рекурсия в общем роняет игру.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Есть метод проще, да еще одно но, при касте негативной абилки - сначала 0.00 урона в цель, потом после попадания 0.00 урона + дебафф если он есть. Проверили бы все обьекты, да и откуда GetTriggeringTrigger() в потоке вызванном таймером?
Я юзаю примерно следующий код:
Отредактирован GetLocalPlayer