Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- scope QuilSpray initializer init
- globals
- private constant integer ABIL_ID = 'A000'
- private constant attacktype ATTACK_TYPE = ATTACK_TYPE_NORMAL
- private constant damagetype DAMAGE_TYPE = DAMAGE_TYPE_NORMAL
- private constant string EFFECT_ID = "Abilities\\Spells\\NightElf\\FanOfKnives\\FanOfKnivesCaster.mdl"
- private hashtable HASH = InitHashtable()
- endglobals
- private constant function Damage takes integer level returns real
- return 20.00*level
- endfunction
- private constant function DamageIncrease takes nothing returns real
- return 30.00
- endfunction
- private constant function DamageCap takes nothing returns real
- return 180.00
- endfunction
- private constant function Duration takes nothing returns real
- return 10.00
- endfunction
- private constant function AreaOfEffect takes nothing returns real
- return 625.00
- endfunction
- private struct QuilSpray
- static QuilSpray array Data
- unit caster = null
- player owner = null
- integer level = 0
- static method onCreate takes unit whichUnit,player whichPlayer,integer abilityLevel returns QuilSpray
- local QuilSpray q=QuilSpray.allocate()
- local unit t
- local integer h
- local real l
- local real b
- local real d
- local group g = CreateGroup()
- set q.caster=whichUnit
- set h=GetHandleId(q.caster)
- set q.owner=whichPlayer
- set q.level=abilityLevel
- set l=LoadReal(HASH,h,1)
- set b=l+DamageIncrease
- set d=Damage(q.level)+l
- call SaveReal(HASH,h,1,b)
- if (d>=DamageCap) then
- set d=DamageCap
- endif
- call DestroyEffect(AddSpecialEffect(EFFECT_ID,GetUnitX(q.caster),GetUnitY(q.caster)))
- call GroupEnumUnitsInRange(g,GetUnitX(q.caster),GetUnitY(q.caster),AreaOfEffect,null)
- loop
- set t=FirstOfGroup(g)
- exitwhen t==null
- if (IsUnitEnemy(t,q.owner)) then
- if not (IsUnitType(t,UNIT_TYPE_MAGIC_IMMUNE)) then
- if not (IsUnitType(t,UNIT_TYPE_STRUCTURE)) then
- static if (Library_Damage) then
- call Damage_Physical(q.caster,t,d,ATTACK_TYPE,true,false)
- else
- call DisableTrigger(GetTriggeringTrigger())
- call UnitDamageTarget(q.caster,t,d,true,false,ATTACK_TYPE,DAMAGE_TYPE,null)
- call EnableTrigger(GetTriggeringTrigger())
- endif
- endif
- endif
- endif
- endloop
- static if (Library_PWait2) then
- call PolledWait2(Duration)
- else
- call TriggerSleepAction(Duration)
- endif
- set b=0
- call FlushChildHashtable(HASH,h)
- call DestroyGroup(g)
- set t=null
- set g=null
- return q
- endmethod
- endstruct
- private function Actions takes nothing returns boolean
- local unit u = GetTriggerUnit()
- local player p = GetTriggerPlayer()
- local integer l = GetUnitAbilityLevel(u,ABIL_ID)
- call QuilSpray.onCreate(u,p,l)
- set u=null
- set p=null
- return true
- endfunction
- private function init takes nothing returns nothing
- local trigger trig = CreateTrigger()
- call GT_RegisterStartsEffectEvent(trig,ABIL_ID)
- call TriggerAddCondition(trig,Condition(function Actions))
- set trig=null
- endfunction
- endscope
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement