G
gonecase
Guest
Code:
function Dummy_Unit takes nothing returns integer
return 'e000'
endfunction
// ----------------- Shining Ogremace --------------------
function Shining_Ogremace_Abi takes nothing returns integer
return 'A007'
endfunction
function Shining_Ogremace_Debuff_Abi takes nothing returns integer
return 'A002'
endfunction
function Shining_Ogremace_Mana_Cost takes nothing returns integer
return 15
endfunction
function Shining_Ogremace_Damage takes integer l returns real
return 4.*l
endfunction
function Shining_Ogremace_Cooldown takes integer l returns real
return 3.5 - 0.5*l
endfunction
//===========================================================
// Shining Ogremace
//===========================================================
function shining_ogremace_learned_cond takes nothing returns boolean
return GetLearnedSkill() == Shining_Ogremace_Abi()
endfunction
function shining_ogremace_cond takes nothing returns boolean
return GetSpellAbilityId() == Shining_Ogremace_Abi()
endfunction
function shining_ogremace_add_debuff takes unit c, unit v returns nothing
local unit u = CreateUnitAtLoc(GetOwningPlayer(c), Dummy_Unit(), GetUnitLoc(c), 0.)
local integer l = GetUnitAbilityLevel(c,Shining_Ogremace_Abi())
call UnitDamageTarget(c,v,Shining_Ogremace_Damage(l),true,false, ATTACK_TYPE_HERO, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS)
call IssueTargetOrder(v, "attack", c)
call UnitAddAbility(u, Shining_Ogremace_Debuff_Abi())
call SetUnitAbilityLevel(u, Shining_Ogremace_Debuff_Abi(), l)
call IssueTargetOrder(u, "acidbomb", v)
call UnitApplyTimedLife(u, 'BTFL', 0.6)
set u = null
endfunction
function shining_ogremace_action takes nothing returns nothing
local unit c = GetTriggerUnit()
local unit v = GetSpellTargetUnit()
call shining_ogremace_add_debuff(c,v)
set v = null
set c = null
endfunction
function shining_ogremace_autocast_action takes nothing returns nothing
local trigger t = null
if GetIssuedOrderId() == 852255 then //flamingarrows turn on autocast
set t = GetHandleTrigger(GetTriggeringTrigger(), "t")
call EnableTrigger(t)
call EnableTrigger(GetHandleTrigger(GetTriggeringTrigger(), "f"))
if GetUnitState(GetTriggerUnit(), UNIT_STATE_MANA) >= Shining_Ogremace_Mana_Cost() then
call SetHandleBoolean(t, "b", true)
endif
set t = null
//call DebugMsg("Shining Ogremace Autocast On")
endif
if GetIssuedOrderId() == 852256 then //flamingarrows turn off autocast
call DisableTrigger(GetHandleTrigger(GetTriggeringTrigger(), "t"))
call DisableTrigger(GetHandleTrigger(GetTriggeringTrigger(), "f"))
//call DebugMsg("Shining Ogremace Autocast Off")
endif
endfunction
function shining_ogremace_cooldown_timer takes nothing returns nothing
local trigger t = GetHandleTrigger(GetExpiredTimer(), "t")
//call DebugMsg("Cooldown Over")
call SetHandleHandle(t, "p", null)
call FlushHandleLocals(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
set t = null
endfunction
function auto_casted_shining_ogremace_action takes nothing returns nothing
local trigger t = GetTriggeringTrigger()
local unit c = GetHandleUnit(t, "c")
local unit v = GetTriggerUnit()
local integer l = GetUnitAbilityLevel(c, Shining_Ogremace_Abi())
local boolean b = GetHandleBoolean(t, "b")
local boolean m
local timer p = GetHandleTimer(t, "p")
if GetAttacker() == c and p == null and IsUnitEnemy(v, GetOwningPlayer(c)) and not(IsUnitType(v, UNIT_TYPE_STRUCTURE)) and not(IsUnitType(v, UNIT_TYPE_MAGIC_IMMUNE)) then
set m = GetUnitState(c, UNIT_STATE_MANA) >= Shining_Ogremace_Mana_Cost()
if b or m then
call shining_ogremace_add_debuff(c,v)
if not(m) then
call SetHandleBoolean(t, "b", false)
endif
set p = CreateTimer()
call SetHandleHandle(t, "p", p)
call SetHandleHandle(p, "t", t)
call TimerStart(p, Shining_Ogremace_Cooldown(l), false, function shining_ogremace_cooldown_timer)
set p = null
endif
endif
set t = null
set v = null
set c = null
endfunction
function shining_ogremace_autocast_has_mana takes nothing returns nothing
local trigger t = GetHandleTrigger(GetTriggeringTrigger(), "t")
//call DebugMsg("Tgrale has mana again")
call SetHandleBoolean(t, "b", true)
set t = null
endfunction
function InitTrig_shining_ogremace takes nothing returns nothing
local trigger t = CreateTrigger()
local trigger p = CreateTrigger()
local trigger k = CreateTrigger()
local trigger f = CreateTrigger()
local trigger r = CreateTrigger()
call TriggerRegisterUnitEvent(t, GetTriggerUnit(), EVENT_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t, Condition(function shining_ogremace_cond))
call TriggerAddAction(t, function shining_ogremace_action)
//used for auto-cast shining ogremace
call TriggerRegisterAnyUnitEventBJ(r, EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddAction(r, function auto_casted_shining_ogremace_action)
call SetHandleHandle(r, "c", GetTriggerUnit())
call SetHandleBoolean(r, "b", GetUnitState(GetTriggerUnit(), UNIT_STATE_MANA) >= Shining_Ogremace_Mana_Cost())
call SetHandleHandle(r, "k", k)
call DisableTrigger(r)
call TriggerRegisterUnitManaEvent(f, GetTriggerUnit(), GREATER_THAN, Shining_Ogremace_Mana_Cost() )
call TriggerAddAction(f, function shining_ogremace_autocast_has_mana)
call SetHandleHandle(f, "t", t)
call TriggerRegisterUnitEvent(k, GetTriggerUnit(), EVENT_UNIT_ISSUED_ORDER)
call TriggerAddAction(k, function shining_ogremace_autocast_action)
call SetHandleHandle(k, "t", r)
call SetHandleHandle(k, "f", f)
call DestroyTrigger(GetTriggeringTrigger())
set t = null
set p = null
endfunction
this is suppose to reduce armor n slow the unit when attack or auto casted