1 [Spell][vJASS] Instant Justice Lun Abr 16, 2012 10:36 pm
lukario!
Administrador
Hola!
Ahora les traigo otro spell vJASS(agradecimientos a Sauron por ayudarme a corregir los errores), Instant Justice (es una skill que dieron en un tutorial, pero debido a los leaks y a su innecesaria complejidad decidí rehacerlo pero más ligero) :
Instant Justice
Cooldown: 10s
Si la cantidad de enemigos en el AoE es mayor a la de los aliados, cura 25hp a cada aliado. Si la cantidad de aliados es mayor, hace 25 de daño. Si hay igual cantidad de aliados y enemigos, cura y daña a los alidados y enemigos respectivamente.
Por si tienen alguna duda, el mapa con el spell:
EpicWar
Saludos!
Ahora les traigo otro spell vJASS(agradecimientos a Sauron por ayudarme a corregir los errores), Instant Justice (es una skill que dieron en un tutorial, pero debido a los leaks y a su innecesaria complejidad decidí rehacerlo pero más ligero) :
Instant Justice
Cooldown: 10s
Si la cantidad de enemigos en el AoE es mayor a la de los aliados, cura 25hp a cada aliado. Si la cantidad de aliados es mayor, hace 25 de daño. Si hay igual cantidad de aliados y enemigos, cura y daña a los alidados y enemigos respectivamente.
- Código:
//===========================================================================
//Spell Instant Justice por Flaming-Phoenix, re-hecha por lukario!
//===========================================================================
scope Justicia initializer Init
//===========================================================================
//============================CONFIGURACION==================================
//===========================================================================
globals
private constant integer SPELL_ID = 'A000' //ID de la habilidad
private constant real HEAL = 25. //Lo que cura a cada unidad
private constant real DAMAGE = 50. //El daño que hace a cada enemigo
private constant string AOE_EFFECT = "Units\\NightElf\\Wisp\\WispExplode.mdl"
private constant string HEAL_EFFECT = "Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl"
private constant string DAMAGE_EFFECT = "Abilities\\Weapons\\Bolt\\BoltImpact.mdl"
//===========================================================================
//=========================FIN CONFIGURACION=================================
//===========================================================================
endglobals
private function Actions takes nothing returns boolean
local player p
local unit caster
local real x
local real y
local integer enemies = 0
local integer allies = 0
local unit u
if (GetSpellAbilityId() == SPELL_ID) then
set caster = GetTriggerUnit()
set x = GetSpellTargetX()
set y = GetSpellTargetY()
set p = GetTriggerPlayer()
call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, 300., null)
loop
set u = FirstOfGroup(bj_lastCreatedGroup)
exitwhen u == null
call GroupRemoveUnit(bj_lastCreatedGroup, u)
if (GetWidgetLife(u) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL)) then
if IsUnitEnemy(u, p) then
set enemies = enemies + 1
else
set allies = allies + 1
endif
endif
endloop
call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, 300., null)
loop
set u = FirstOfGroup(bj_lastCreatedGroup)
exitwhen u == null
call GroupRemoveUnit(bj_lastCreatedGroup, u)
if allies > enemies then
if IsUnitAlly(u, p) then
call DestroyEffect(AddSpecialEffectTarget(HEAL_EFFECT, u, "origin"))
call SetWidgetLife(u, GetWidgetLife(u) + HEAL)
endif
endif
if enemies > allies then
if IsUnitEnemy(u, p) then
call DestroyEffect(AddSpecialEffectTarget(DAMAGE_EFFECT, u, "origin"))
call UnitDamageTarget(caster, u, DAMAGE, true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, null)
endif
endif
if allies == enemies then
if IsUnitAlly(u, p) then
call DestroyEffect(AddSpecialEffectTarget(HEAL_EFFECT, u, "origin"))
call SetWidgetLife(u, GetWidgetLife(u) + HEAL)
else
call DestroyEffect(AddSpecialEffectTarget(DAMAGE_EFFECT, u, "origin"))
call UnitDamageTarget(caster, u, DAMAGE, true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, null)
endif
endif
endloop
endif
return false
endfunction
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t, Condition(function Actions))
call Preload(AOE_EFFECT)
call Preload(HEAL_EFFECT)
call Preload(DAMAGE_EFFECT)
set t = null
endfunction
endscope
Por si tienen alguna duda, el mapa con el spell:
EpicWar
Saludos!
Última edición por lukario! el Jue Feb 06, 2014 12:10 am, editado 2 veces