Name | Type | is_array | initial_value |
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope spell initializer KnightOfLight
globals
hashtable triggerT = InitHashtable()
hashtable KnightOfLightTabla = InitHashtable()
group KnightOfLightGrupo = CreateGroup()
endglobals
//===========================================================================
// Trigger: KnightOfLight Activacion
//===========================================================================
function KnightOfLight_Activacion_Acciones takes nothing returns nothing
//Variables Locales
local unit array u
local location array p
local integer n
local integer i
local lightning r
local effect e
//Fin de Variables Locales
if ( GetUnitTypeId(GetSummonedUnit()) == 'h000' ) then
// Guardado de tablas hash
// Invocador
set u[1] = GetSummoningUnit()
// Invocacion
set u[2] = GetSummonedUnit()
// Inicio de invocacion animada
// Metadatos
set p[1] = GetUnitLoc(u[1])
set p[2] = GetUnitLoc(u[2])
set i = GetHandleId(u[1])
set e = LoadEffectHandle(KnightOfLightTabla,i,StringHash("AlasConjurador"))
set u[3] = LoadUnitHandle(KnightOfLightTabla,i,StringHash("Invocacion"))
call KillUnit(u[3])
call DestroyEffect( e )
call DestroyLightning(LoadLightningHandle(KnightOfLightTabla,i,StringHash("Relampago")))
call FlushChildHashtable(KnightOfLightTabla,i )
call GroupAddUnit( KnightOfLightGrupo, u[1] )
// Efectos especiales
set e = AddSpecialEffectTarget("HolyBlastEfecto.mdl", u[1], "chest")
set r = AddLightningEx("DRAB", true, GetUnitX(u[1]), GetUnitY(u[1]), GetLocationZ(p[1]) + 50, GetUnitX(u[2]), GetUnitY(u[2]), GetLocationZ(p[2]) + 150)
call SaveBoolean( triggerT, StringHash("Relampagos"), StringHash("Caballero de luz"), true)
call AddUnitAnimationProperties( u[2], "alternate", true )
call SetUnitAnimation( u[2], "morph" )
// Fin de los efectos especiales
call EnableTrigger( LoadTriggerHandle( triggerT, StringHash("Detonadores"), StringHash("KnightOfLightHechizo") ) )
call SaveEffectHandle( KnightOfLightTabla, i, StringHash("AlasConjurador"), e)
call SaveUnitHandle( KnightOfLightTabla, i, StringHash("Invocacion"), u[2] )
call SaveLightningHandle(KnightOfLightTabla, i, StringHash("Relampago"), r )
// Limpiando fugas
set e = null
set n = 1
loop
exitwhen n == 3
call RemoveLocation(p[n])
set p[n] = null
set n = n + 1
endloop
set n = 1
loop
exitwhen n == 4
set u[n] = null
set n = n + 1
endloop
else
call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_017" )
endif
endfunction
//===========================================================================
// Trigger: KnightOfLight Hechizo
//===========================================================================
function KnightOfLight_Hechizo_AccionesDeGrupo takes nothing returns nothing
//Variables Locales
local unit array u
local location array p
local effect array e
local integer i
local lightning r
local integer n
local real x
local real y
//Fin de Variables Locales
set u[1] = GetEnumUnit()
set i = GetHandleId(u[1])
set r = LoadLightningHandle( KnightOfLightTabla, i, StringHash("Relampago") )
set u[2] = LoadUnitHandle(KnightOfLightTabla, i, StringHash("Invocacion"))
set e[1] = LoadEffectHandle( KnightOfLightTabla, i, StringHash("AlasConjurador"))
if( GetUnitState(u[1], UNIT_STATE_LIFE) > 0 ) and ( GetUnitState(u[2], UNIT_STATE_LIFE) > 0 ) then
set p[1] = GetUnitLoc(u[1])
set p[2] = GetUnitLoc(u[2])
if ( ( DistanceBetweenPoints(p[1], p[2]) <= 800.00 ) ) then
call MoveLightningEx(r, true, GetUnitX(u[1]), GetUnitY(u[1]), GetLocationZ(p[1]) + 50, GetUnitX(u[2]), GetUnitY(u[2]), GetLocationZ(p[2]) + 150)
call SaveBoolean( triggerT, StringHash("Relampagos"), StringHash("Caballero de luz"), true)
else
call DestroyEffect( AddSpecialEffectLoc( "HolyBlast.mdl", p[2] ) )
call DestroyEffect( AddSpecialEffectTarget( "HolyBlast.mdl", u[2], "origin" ) )
set x = GetLocationX(p[1]) + 256 * Cos(GetUnitFacing(u[1]) * 3.14159/180.0)
set y = GetLocationY(p[1]) + 256 * Sin(GetUnitFacing(u[1]) * 3.14159/180.0)
set p[3] = Location(x, y)
call SetUnitPositionLoc(u[2],p[3] )
call SetUnitFacing(u[2], GetUnitFacing(u[1]))
call IssueTargetOrder( u[2], "smart", u[1] )
endif
call RemoveLocation(p[1])
call RemoveLocation(p[2])
call RemoveLocation(p[3])
else
call DestroyLightning( r )
call SaveBoolean( triggerT, StringHash("Relampagos"), StringHash("Caballero de luz"), false)
call FlushChildHashtable(KnightOfLightTabla, 1 )
call GroupRemoveUnit( KnightOfLightGrupo, u[1] )
// Eliminando Invocacion
if ( GetUnitState(u[1], UNIT_STATE_LIFE) <= 0 ) then
call KillUnit( u[2] )
else
// Eliminando efecto del invocador
call DestroyEffect( e[1] )
set e[1] = null
endif
// Limpiador de fugas y desactivador del detonador
if ( ( CountUnitsInGroup(KnightOfLightGrupo) == 0 ) ) then
call DisableTrigger( GetTriggeringTrigger() )
set n = 1
loop
exitwhen n == 4
call DestroyEffect( e[n] )
set p[n] = null
set n = n + 1
endloop
set n = 1
loop
exitwhen n == 3
set u[n] = null
set n = n + 1
endloop
set r = null
set e[1] = null
else
endif
endif
endfunction
function KnightOfLight_Hechizo_Acciones takes nothing returns nothing
call ForGroup( KnightOfLightGrupo, function KnightOfLight_Hechizo_AccionesDeGrupo )
endfunction
//===========================================================================
function KnightOfLight takes nothing returns nothing
local trigger t = CreateTrigger()
local integer index
// Caballero de luz Activacion
set t = CreateTrigger()
set index = 0
loop
call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_SUMMON, null )
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction( t, function KnightOfLight_Activacion_Acciones )
// Caballero de luz Hechizo
set t = CreateTrigger()
call DisableTrigger( t )
call TriggerRegisterTimerEvent(t, 0.03, true)
call TriggerAddAction( t, function KnightOfLight_Hechizo_Acciones )
call SaveTriggerHandle( triggerT, StringHash("Detonadores"), StringHash("KnightOfLightHechizo"), t)
set t = null
endfunction
endscope