kingkingyyk3
Visitor (Welcome to the Jungle, Baby!)
- Reaction score
- 216
JASS:
//////////////////////////////////////////////
// JASS Spells Handler (For GUI users)
// v1.0.0
// by kingking
//
// What is JASS Spells Handler?
// JASS Spells Handler is a trigger system for handling spell triggers.
//
// Why use JASS Spell Handler?
// When your map has many spell triggers, those triggers will fire the condition,
// even they are not the trigger for the spell. This will lower the efficiency of your
// map.
// JASS Spell Handler will only fire the one needed.
// For vJass users, you can have better option than this.
//
// How to implement?
// 1) Go to the main window of World Editor.
// 2) Select File -> Preference.
// 3) Tick "Automatically create unknown variables...".
// 4) Press Ok.
// 5) Copy InitJASSSpellsHandler into your map.
// 6) Copy this script to your map header.
//
// How to use?
// -> Register all spells under InitJASSSpellsHandler.
//
// There are some spell events provided :
// RegisterSpell_OnCast(gg_trg_<trigger's name>,<rawcode of ability>) -> Unit starts casting the spell
// RegisterSpell_OnEffect(gg_trg_<trigger's name>,<rawcode of ability>) -> Unit starts the effect of spell
// RegisterSpell_OnChannel(gg_trg_<trigger's name>,<rawcode of ability>) -> Unit starts channeling the spell
// RegisterSpell_OnEndCast(gg_trg_<trigger's name>,<rawcode of ability>) -> Unit stops casting the spell
// RegisterSpell_OnFinish(gg_trg_<trigger's name>,<rawcode of ability>) -> Unit finishs casting the spell
// RegisterSpell_OnLearn(gg_trg_<trigger's name>,<rawcode of ability>) -> Unit learnt a skill.
//
// Example :
// Spell's trigger name : Bomb, Rawcode of ability is 'A000'
// call RegisterSpell_OnEffect(gg_trg_Bomb,'A000')
//
// Don't forget to remove event and AbilityBeingCast condition in your spells' trigger if you used this on them.
//
// Advantage :
// -> Easy to use.
// -> Can be used in vanilla world editor.
//
// Disadvantage :
// -> Supports one trigger per spell event only.
//
// Requires : Your brain, =D
//
/////////////////////////////////////////////////
function RegisterSpell_OnCast takes trigger whichTrigger, integer abil_id returns nothing
call SaveTriggerHandle(udg_SpellHandler_hasht,0,abil_id,whichTrigger)
endfunction
function RegisterSpell_OnEffect takes trigger whichTrigger, integer abil_id returns nothing
call SaveTriggerHandle(udg_SpellHandler_hasht,1,abil_id,whichTrigger)
endfunction
function RegisterSpell_OnChannel takes trigger whichTrigger, integer abil_id returns nothing
call SaveTriggerHandle(udg_SpellHandler_hasht,2,abil_id,whichTrigger)
endfunction
function RegisterSpell_OnEndCast takes trigger whichTrigger, integer abil_id returns nothing
call SaveTriggerHandle(udg_SpellHandler_hasht,3,abil_id,whichTrigger)
endfunction
function RegisterSpell_OnFinish takes trigger whichTrigger, integer abil_id returns nothing
call SaveTriggerHandle(udg_SpellHandler_hasht,4,abil_id,whichTrigger)
endfunction
function RegisterSpell_OnLearn takes trigger whichTrigger, integer abil_id returns nothing
call SaveTriggerHandle(udg_SpellHandler_hasht,5,abil_id,whichTrigger)
endfunction
function SpellHandler_Callback takes nothing returns boolean
local eventid eventz = GetTriggerEventId()
local integer id
local trigger trig = null
if eventz == EVENT_PLAYER_UNIT_SPELL_CAST then
set id = GetSpellAbilityId()
set trig = LoadTriggerHandle(udg_SpellHandler_hasht,0,id)
elseif eventz == EVENT_PLAYER_UNIT_SPELL_EFFECT then
set id = GetSpellAbilityId()
set trig = LoadTriggerHandle(udg_SpellHandler_hasht,1,id)
elseif eventz == EVENT_PLAYER_HERO_SKILL then
set id = GetLearnedSkill()
set trig = LoadTriggerHandle(udg_SpellHandler_hasht,5,id)
elseif eventz == EVENT_PLAYER_UNIT_SPELL_CHANNEL then
set id = GetSpellAbilityId()
set trig = LoadTriggerHandle(udg_SpellHandler_hasht,2,id)
elseif eventz == EVENT_PLAYER_UNIT_SPELL_ENDCAST then
set id = GetSpellAbilityId()
set trig = LoadTriggerHandle(udg_SpellHandler_hasht,3,id)
elseif eventz == EVENT_PLAYER_UNIT_SPELL_FINISH then
set id = GetSpellAbilityId()
set trig = LoadTriggerHandle(udg_SpellHandler_hasht,4,id)
endif
if trig != null and TriggerEvaluate(trig) then
call TriggerExecute(trig)
endif
set eventz = null
set trig = null
return false
endfunction
function SpellHandler_Init takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_SPELL_CHANNEL)
call TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_SPELL_ENDCAST)
call TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_HERO_SKILL)
call TriggerAddCondition(trig,Condition(function SpellHandler_Callback))
set udg_SpellHandler_hasht = InitHashtable()
endfunction
/// <- system ends -> ////