Welcome

Welcome to the community where modding your favorite game can be possible, and supported by a nice and warm community. Here you will find resources which will help you to develop your projects faster. Additionally you can show your projects and share with a growing community, even be part of the Blizzard Modding Network, which aims to gather all the projects and clans around this game.

Please enjoy your stance here.

Warcraft III Spells & systems

Double Spinning Blade v1.1.1


By Rheiko

Double Spinning Blade
The User throw a spinning blade towards the target point, for set amount of time the blade will destroyed and the user's illusion will appeared at blade's location. Then he throw a spinning blade again to the user's current location.
Level 1 - 75 damage.
Level 2 - 100 damage.
Level 3 - 125 damage.

READ!! IMPORTANT!!
How to Import
Go to World Editor => file => Preferences => Check the "Automatically create unknown Variable while pasting trigger data" => ok
Copy all triggers (except "Do not import this" trigger) to your map
then open Object Editor, copy the "Spinning Blade" and "Rokhan Dummy" to your map. and store them into Configuration Trigger
(Set DSB_Dummy_Type = Spinning Blade and Set DSB_Dummy_Type2 = Rokhan Dummy)
remember, the first dummy type is for the blade, and the second dummy type is for the illusion

Triggers
Configuration
Trigger: Configuration
    Events
        Map initialization
    Conditions
    Actions
        -------- --------------------------------------------- --------
        -------- Store your ability id here --------
        Set DSB_Ability_ID = Double Spinning Blade
        -------- Store your dummy here --------
        Set DSB_Dummy_Type = Spinning Blade
        Set DSB_Dummy_Type2 = Rokhan Dummy
        -------- Your Caster's animation when cast the spell --------
        Set DSB_Animation = attack
        -------- Your Dummy's animation when cast the spell --------
        Set DSB_Dummy2_Animation = attack
        -------- Your 2nd Dummy's expiration timer --------
        Set DSB_Dummy2_Lifetime = 1.50
        -------- Your 2nd Dummy's color (RGB) --------
        Set DSB_Dummy2_RED = 40.00
        Set DSB_Dummy2_GREEN = 40.00
        Set DSB_Dummy2_BLUE = 40.00
        -------- Your 2nd Dummy's transparency --------
        Set DSB_Dummy2_Transparency = 40.00
        -------- Your ability's damage when it's hit enemies in the line --------
        Set DSB_Damage[1] = 75.00
        Set DSB_Damage[2] = 100.00
        Set DSB_Damage[3] = 125.00
        -------- Area of Effect of the ability --------
        Set DSB_AoE = 150.00
        -------- How far your blade travels --------
        Set DSB_Distance = 1000.00
        -------- How far your blade spawns --------
        Set DSB_Start_Range = 100.00
        -------- Special Effect which spawn when the blade hits your enemies --------
        Set DSB_Special_Effect = Abilities\Spells\Other\Stampede\StampedeMissileDeath.mdl
        -------- which point your special effect will spawned at? head/chest/hand/overhead/origin, etc --------
        Set DSB_Special_Effect_Location = chest
        -------- Yes = Will Destroy Trees / No = Won't Destroy Trees --------
        Set DSB_Destroy_Tree = True
        -------- --------------------------------------------- --------
        -------- Conditions Configuration --------
        -------- --------------------------------------------- --------
        -------- Units Belongs to enemy player --------
        Set DSB_Conditions[1] = True
        -------- Units is Alive --------
        Set DSB_Conditions[2] = True
        -------- Units is Magic Immune --------
        Set DSB_Conditions[3] = False
        -------- Units is a Structure --------
        Set DSB_Conditions[4] = False
        -------- Units is in UnDamage Group (to prevent damage looping) --------
        Set DSB_Conditions[5] = False
        -------- --------------------------------------------- --------
        -------- DO NOT CHANGE THIS --------
        -------- --------------------------------------------- --------
        Set TempPoint = (Center of (Playable map area))
        Unit - Create 1 Peasant for Player 1 (Red) at TempPoint facing Default building facing degrees
        Custom script:   call RemoveLocation(udg_TempPoint)
        Set DSB_Destroyer = (Last created unit)
        Unit - Hide DSB_Destroyer
        -------- --------------------------------------------- --------
Cast Trigger
Trigger: Double Spinning Blade
    Events
        Unit - A unit Starts the effect of an ability
    Conditions
        (Ability being cast) Equal to DSB_Ability_ID
    Actions
        Set DSB_Max_Index = (DSB_Max_Index + 1)
        Set DSB_Owner[DSB_Max_Index] = (Triggering player)
        Set DSB_Caster[DSB_Max_Index] = (Triggering unit)
        Set DSB_Ability_Level[DSB_Max_Index] = (Level of DSB_Ability_ID for DSB_Caster[DSB_Max_Index])
        Animation - Play DSB_Caster[DSB_Max_Index]'s DSB_Animation animation
        Set TempPoint = (Position of DSB_Caster[DSB_Max_Index])
        Set TempPoint2 = (Target point of ability being cast)
        Set DSB_Angle[DSB_Max_Index] = (Angle from TempPoint to TempPoint2)
        Set TempPoint3 = (TempPoint offset by DSB_Start_Range towards DSB_Angle[DSB_Max_Index] degrees)
        Unit - Create 1 DSB_Dummy_Type for DSB_Owner[DSB_Max_Index] at TempPoint3 facing DSB_Angle[DSB_Max_Index] degrees
        Set DSB_Dummy[DSB_Max_Index] = (Last created unit)
        Unit - Add a ((DSB_Distance x 0.03) x 0.03) second Generic expiration timer to DSB_Dummy[DSB_Max_Index]
        Set DSB_Stage[DSB_Max_Index] = 1
        Custom script:   set udg_DSB_UnDamage_Group[udg_DSB_Max_Index] = CreateGroup()
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                DSB_Max_Index Equal to 1
            Then - Actions
                Trigger - Turn on DSB Loop <gen>
            Else - Actions
        Custom script:   call RemoveLocation(udg_TempPoint)
        Custom script:   call RemoveLocation(udg_TempPoint2)
        Custom script:   call RemoveLocation(udg_TempPoint3)
Loop Trigger
Trigger: DSB Loop
    Events
        Time - Every 0.03 seconds of game time
    Conditions
    Actions
        For each (Integer DSB_Current_Index) from 1 to DSB_Max_Index, do (Actions)
            Loop - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        DSB_Stage[DSB_Current_Index] Equal to 1
                    Then - Actions
                        Set TempPoint = (Position of DSB_Dummy[DSB_Current_Index])
                        Set TempPoint2 = (TempPoint offset by (DSB_Distance x 0.03) towards DSB_Angle[DSB_Current_Index] degrees)
                        Unit - Move DSB_Dummy[DSB_Current_Index] instantly to TempPoint2
                        Set DSB_Damage_Group[DSB_Current_Index] = (Units within DSB_AoE of TempPoint)
                        Unit Group - Pick every unit in DSB_Damage_Group[DSB_Current_Index] and do (Actions)
                            Loop - Actions
                                Set TempUnit = (Picked unit)
                                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    If - Conditions
                                        (TempUnit belongs to an enemy of DSB_Owner[DSB_Current_Index]) Equal to DSB_Conditions[1]
                                        (TempUnit is alive) Equal to DSB_Conditions[2]
                                        (TempUnit is Magic Immune) Equal to DSB_Conditions[3]
                                        (TempUnit is A structure) Equal to DSB_Conditions[4]
                                        (TempUnit is in DSB_UnDamage_Group[DSB_Current_Index]) Equal to DSB_Conditions[5]
                                    Then - Actions
                                        Unit - Cause DSB_Caster[DSB_Current_Index] to damage TempUnit, dealing DSB_Damage[DSB_Ability_Level[DSB_Current_Index]] damage of attack type Spells and damage type Normal
                                        Special Effect - Create a special effect attached to the DSB_Special_Effect_Location of TempUnit using DSB_Special_Effect
                                        Special Effect - Destroy (Last created special effect)
                                        Unit Group - Add TempUnit to DSB_UnDamage_Group[DSB_Current_Index]
                                    Else - Actions
                        Custom script:   call DestroyGroup(udg_DSB_Damage_Group[udg_DSB_Current_Index])
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                DSB_Destroy_Tree Equal to True
                            Then - Actions
                                Destructible - Pick every destructible within DSB_AoE of TempPoint and do (Actions)
                                    Loop - Actions
                                        Set TempDest = (Picked destructible)
                                        Unit - Order DSB_Destroyer to Harvest TempDest
                                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                            If - Conditions
                                                (Current order of DSB_Destroyer) Equal to (Order(harvest))
                                            Then - Actions
                                                Destructible - Kill TempDest
                                            Else - Actions
                                        Unit - Order DSB_Destroyer to Stop
                            Else - Actions
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (DSB_Dummy[DSB_Current_Index] is dead) Equal to True
                            Then - Actions
                                Custom script:   call DestroyGroup(udg_DSB_UnDamage_Group[udg_DSB_Current_Index])
                                Custom script:   set udg_DSB_UnDamage_Group[udg_DSB_Max_Index] = CreateGroup()
                                Set DSB_Stage[DSB_Current_Index] = 2
                                Custom script:   call RemoveLocation(udg_TempPoint2)
                                Set TempPoint2 = (Position of DSB_Caster[DSB_Current_Index])
                                Unit - Create 1 DSB_Dummy_Type2 for DSB_Owner[DSB_Current_Index] at TempPoint facing TempPoint2
                                Set DSB_Dummy2[DSB_Current_Index] = (Last created unit)
                                Unit - Add a DSB_Dummy2_Lifetime second Generic expiration timer to DSB_Dummy2[DSB_Current_Index]
                                Animation - Change DSB_Dummy2[DSB_Current_Index]'s vertex coloring to (DSB_Dummy2_RED%, DSB_Dummy2_GREEN%, DSB_Dummy2_BLUE%) with DSB_Dummy2_Transparency% transparency
                                Animation - Play DSB_Dummy2[DSB_Current_Index]'s DSB_Dummy2_Animation animation
                                Custom script:   call RemoveLocation(udg_TempPoint)
                                Set TempPoint = (Position of DSB_Dummy2[DSB_Current_Index])
                                Set DSB_Angle[DSB_Current_Index] = (Angle from TempPoint to TempPoint2)
                                Set TempPoint3 = (TempPoint offset by DSB_Start_Range towards DSB_Angle[DSB_Current_Index] degrees)
                                Unit - Remove DSB_Dummy[DSB_Current_Index] from the game
                                Unit - Create 1 DSB_Dummy_Type for DSB_Owner[DSB_Current_Index] at TempPoint3 facing DSB_Angle[DSB_Current_Index] degrees
                                Set DSB_Dummy[DSB_Current_Index] = (Last created unit)
                                Unit - Add a ((DSB_Distance x 0.03) x 0.03) second Generic expiration timer to DSB_Dummy[DSB_Current_Index]
                                Custom script:   call RemoveLocation(udg_TempPoint)
                                Custom script:   call RemoveLocation(udg_TempPoint3)
                            Else - Actions
                                Custom script:   call RemoveLocation(udg_TempPoint)
                        Custom script:   call RemoveLocation(udg_TempPoint2)
                    Else - Actions
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                DSB_Stage[DSB_Current_Index] Equal to 2
                            Then - Actions
                                Set TempPoint = (Position of DSB_Dummy[DSB_Current_Index])
                                Set TempPoint2 = (TempPoint offset by (DSB_Distance x 0.03) towards DSB_Angle[DSB_Current_Index] degrees)
                                Unit - Move DSB_Dummy[DSB_Current_Index] instantly to TempPoint2
                                Set DSB_Damage_Group[DSB_Current_Index] = (Units within DSB_AoE of TempPoint)
                                Unit Group - Pick every unit in DSB_Damage_Group[DSB_Current_Index] and do (Actions)
                                    Loop - Actions
                                        Set TempUnit = (Picked unit)
                                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                            If - Conditions
                                                (TempUnit belongs to an enemy of DSB_Owner[DSB_Current_Index]) Equal to DSB_Conditions[1]
                                                (TempUnit is alive) Equal to DSB_Conditions[2]
                                                (TempUnit is Magic Immune) Equal to DSB_Conditions[3]
                                                (TempUnit is A structure) Equal to DSB_Conditions[4]
                                                (TempUnit is in DSB_UnDamage_Group[DSB_Current_Index]) Equal to DSB_Conditions[5]
                                            Then - Actions
                                                Unit - Cause DSB_Caster[DSB_Current_Index] to damage TempUnit, dealing DSB_Damage[DSB_Ability_Level[DSB_Current_Index]] damage of attack type Spells and damage type Normal
                                                Special Effect - Create a special effect attached to the DSB_Special_Effect_Location of TempUnit using DSB_Special_Effect
                                                Special Effect - Destroy (Last created special effect)
                                                Unit Group - Add TempUnit to DSB_UnDamage_Group[DSB_Current_Index]
                                            Else - Actions
                                Custom script:   call DestroyGroup(udg_DSB_Damage_Group[udg_DSB_Current_Index])
                                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    If - Conditions
                                        DSB_Destroy_Tree Equal to True
                                    Then - Actions
                                        Destructible - Pick every destructible within DSB_AoE of TempPoint and do (Actions)
                                            Loop - Actions
                                                Set TempDest = (Picked destructible)
                                                Unit - Order DSB_Destroyer to Harvest TempDest
                                                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                    If - Conditions
                                                        (Current order of DSB_Destroyer) Equal to (Order(harvest))
                                                    Then - Actions
                                                        Destructible - Kill TempDest
                                                    Else - Actions
                                                Unit - Order DSB_Destroyer to Stop
                                    Else - Actions
                                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    If - Conditions
                                        (DSB_Dummy[DSB_Current_Index] is dead) Equal to True
                                    Then - Actions
                                        Custom script:   call DestroyGroup(udg_DSB_UnDamage_Group[udg_DSB_Current_Index])
                                        Unit - Remove DSB_Dummy[DSB_Current_Index] from the game
                                        Set DSB_Dummy[DSB_Current_Index] = DSB_Dummy[DSB_Max_Index]
                                        Set DSB_Dummy[DSB_Max_Index] = No unit
                                        Set DSB_Caster[DSB_Current_Index] = DSB_Caster[DSB_Max_Index]
                                        Set DSB_Caster[DSB_Max_Index] = No unit
                                        Set DSB_Angle[DSB_Current_Index] = DSB_Angle[DSB_Max_Index]
                                        Set DSB_Angle[DSB_Max_Index] = 0.00
                                        Set DSB_Ability_Level[DSB_Current_Index] = DSB_Ability_Level[DSB_Max_Index]
                                        Set DSB_Ability_Level[DSB_Max_Index] = 0
                                        Set DSB_Stage[DSB_Current_Index] = DSB_Stage[DSB_Max_Index]
                                        Set DSB_Stage[DSB_Max_Index] = 0
                                        Set DSB_Current_Index = (DSB_Current_Index - 1)
                                        Set DSB_Max_Index = (DSB_Max_Index - 1)
                                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                            If - Conditions
                                                DSB_Max_Index Equal to 0
                                            Then - Actions
                                                Trigger - Turn off (This trigger)
                                            Else - Actions
                                    Else - Actions
                                Custom script:   call RemoveLocation(udg_TempPoint)
                                Custom script:   call RemoveLocation(udg_TempPoint2)
                            Else - Actions
Dummy Removal
Trigger: DSB Dummy Removal
    Events
        Unit - A unit Dies
    Conditions
    Actions
        Set TempUnit = (Triggering unit)
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                (Unit-type of TempUnit) Equal to DSB_Dummy_Type2
            Then - Actions
                Unit - Remove TempUnit from the game
            Else - Actions

Screenshot
#1
#2
#3
#4

Feedbacks and Suggestions is appreciated

Changelogs
v1.1.1
Minor Changes

v1.1
Set unit variable after hide unit action - Fixed
Remove Location (TempPoint and TempPoint2) at Cast Trigger
Store Picked Unit to TempUnit
Store Picked Dest to TempDest
Remove Current Stage Checker
Remove Location before changing stage
The Turn Off ITE is now moved to de-indexing portion of the spell
De-Index ability level

v1.0
Released

Picked from the vault...

Chidori v1.1


By Ofel

A lightning spell based from the Naruto anime, one of a character technique named Kakashi. Highly configurable!

  • Description
    Kakashi start creating a blade of lightning which can cut anything. Once finish, he move and strike the targeted unit and deals big damage. Kakashi will also drag the target back. Deals 50 bonus damage if the target collide with obstacles.
  • Levels
    Level 1 - Casting for 2 seconds, 100 strike damage, 100 dragging damage.
    Level 2 - Casting for 1.5 seconds, 150 strike damage, 125 dragging damage.
    Level 3 - Casting for 1 seconds, 200 strike damage, 150 dragging damage.
  • Code
    Init
    Trigger: Chidori Init
        Events
            Map initialization
        Conditions
        Actions
            -------- --------------------------- --------
            -------- Configuration --------
            -------- --------------------------- --------
            -------- Determines the ability --------
            Set C_Ability = Chidori
            -------- Determines the Order ID of the ability --------
            Set C_OrderId = (Order(absorb))
            -------- Determines the move animation by index --------
            -------- You may need to find the correct one if you use another model --------
            Set C_MoveAnimationIndex = 2
            -------- Determines the move animation speed --------
            Set C_MoveAnimationSpeed = 300.00
            -------- Determines how long the caster will swing his hand when is about to strike --------
            Set C_SwingTime = 0.20
            -------- Determines the swing animation by index --------
            Set C_SwingAnimationIndex = 5
            -------- Determines the casting duration --------
            Set C_CastingTime[1] = 2.00
            Set C_CastingTime[2] = 1.50
            Set C_CastingTime[3] = 1.00
            -------- Determines the dragging total damage --------
            Set C_DragDamage[1] = 100.00
            Set C_DragDamage[2] = 125.00
            Set C_DragDamage[3] = 150.00
            -------- Determines the strike damage --------
            Set C_StrikeDamage[1] = 100.00
            Set C_StrikeDamage[2] = 150.00
            Set C_StrikeDamage[3] = 200.00
            -------- Determines the collide damage (bonus damage) --------
            Set C_CollideDamage[1] = 50.00
            Set C_CollideDamage[2] = 50.00
            Set C_CollideDamage[3] = 50.00
            -------- Determines the attack type --------
            Set C_AttackType = Chaos
            -------- Determines the damage type --------
            Set C_DamageType = Lightning
            -------- Determines the collide ground effect --------
            Set C_CollideGroundSFX = Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
            -------- Determines the max distance --------
            -------- If the distance between caster and target is greater this, the spell will be cancelled --------
            Set C_MaxDistance[1] = 2000.00
            Set C_MaxDistance[2] = 2000.00
            Set C_MaxDistance[3] = 2000.00
            -------- Determines the move speed --------
            Set C_Speed[1] = 30.00
            Set C_Speed[2] = 30.00
            Set C_Speed[3] = 30.00
            -------- Determines the path type --------
            -------- If the path where the caster or target are going to move at doesn't have this ability, the spell will be cancelled --------
            Set C_PathingType = Walkability
            -------- Determines the effect attached when the caster is moving --------
            Set C_HandSFX = war3mapImported\ZapMissile.mdx
            -------- Determines the attachment point of the effect above --------
            Set C_HandSFXAttachment = hand right
            -------- Determines the effect spawn every a specific seconds during the caster is casting --------
            Set C_LoopingSFX = Abilities\Weapons\FarseerMissile\FarseerMissile.mdl
            -------- Determines the attachment point of the effect above --------
            Set C_LoopingSFXAttachment = hand right
            -------- Determines the initial interval for the looping effect above --------
            Set C_LoopingSFXInitialInterval = 0.30
            -------- Determines the default interval for the looping effect above --------
            Set C_LoopingSFXInterval = 0.06
            -------- Determines the strike effect --------
            Set C_StrikeSFX = Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
            -------- Determines the attachment point of the effect above --------
            Set C_StrikeSFXAttachment = origin
            -------- Determines the minimum distance where the strike happen --------
            Set C_MinDistance = 150.00
            -------- Determines the dragging max distance --------
            Set C_DragDistance[1] = 500.00
            Set C_DragDistance[2] = 500.00
            Set C_DragDistance[3] = 500.00
            -------- Determines the dragging speed --------
            Set C_DragSpeed[1] = 20.00
            Set C_DragSpeed[2] = 20.00
            Set C_DragSpeed[3] = 20.00
            -------- Determines the dragging ground effect --------
            Set C_DragGroundSFX = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
            -------- Determines the spawn interval of the effect above --------
            Set C_DragGroundSFXInterval = 0.06
            -------- --------------------------- --------
            -------- End of Configuration --------
            -------- =========================================================================== --------
            -------- --------------------------- --------
            -------- Note: This spell will start working if this trigger has been executed --------
            -------- --------------------------- --------
            -------- This is a configurable variable too, but this one isn't recommended to be changed --------
            -------- This is the interval of the spell, default is 0.03. Don't change this to lower value, else the game will be laggy --------
            Set C_Interval = 0.03
            -------- All actions below isn't configurable. Please don't change anything below this line --------
            -------- I don't have ability to explain it all, sorry :D --------
            -------- --------------------------- --------
            Trigger - Turn off Chidori Loop <gen>
            Trigger - Add to Chidori Loop <gen> the event (Time - Every C_Interval seconds of game time)
            Trigger - Add to Chidori Cast <gen> the event (Unit - A unit Starts the effect of an ability)
            Set C_RealTimer[1] = (C_LoopingSFXInitialInterval - C_LoopingSFXInterval)
            For each (Integer C_Index) from 1 to 3, do (Actions)
                Loop - Actions
                    Set C_DragDamage[C_Index] = (C_DragDamage[C_Index] / (C_DragDistance[C_Index] / C_DragSpeed[C_Index]))
                    Set C_MaxDistance[C_Index] = (C_MaxDistance[C_Index] x C_MaxDistance[C_Index])
                    Set C_RealTimer[0] = (C_RealTimer[1] / (C_CastingTime[C_Index] / C_Interval))
                    Set C_Speed2[C_Index] = (C_Speed[C_Index] x C_Speed[C_Index])
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    C_SwingTime Less than or equal to 1.00
                Then - Actions
                    Set C_SwingTime = (C_SwingTime x 2.00)
                Else - Actions
                    Set C_SwingTime = (C_SwingTime x C_SwingTime)
            Set C_DragDistance[0] = C_MinDistance
            Set C_MinDistance = (C_MinDistance x C_MinDistance)
            Set C_Speed2[0] = (C_Interval x C_Interval)
    Cast
    Trigger: Chidori Cast
        Events
        Conditions
            (Ability being cast) Equal to C_Ability
        Actions
            Set C_Caster[0] = (Triggering unit)
            For each (Integer C_Index) from 1 to C_MaxIndex, do (Actions)
                Loop - Actions
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            C_Caster[C_Index] Equal to C_Caster[0]
                        Then - Actions
                            Special Effect - Destroy C_HandFX[C_Index]
                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                If - Conditions
                                    C_Stage[C_Index] Equal to 2
                                Then - Actions
                                    Animation - Change C_Caster[C_Index]'s animation speed to 100.00% of its original speed
                                Else - Actions
                            Set C_Stage[C_Index] = 4
                        Else - Actions
            Set C_MaxIndex = (C_MaxIndex + 1)
            Set C_Caster[C_MaxIndex] = C_Caster[0]
            Set C_Target[C_MaxIndex] = (Target unit of ability being cast)
            Set C_Level[C_MaxIndex] = (Level of C_Ability for C_Caster[C_MaxIndex])
            Custom script:   set udg_C_CasterX[udg_C_MaxIndex] = GetUnitX(udg_C_Caster[udg_C_MaxIndex])
            Custom script:   set udg_C_CasterY[udg_C_MaxIndex] = GetUnitY(udg_C_Caster[udg_C_MaxIndex])
            Special Effect - Create a special effect attached to the C_HandSFXAttachment of C_Caster[C_MaxIndex] using C_HandSFX
            Set C_HandFX[C_MaxIndex] = (Last created special effect)
            Set C_RealTimer[C_MaxIndex] = 0.00
            Set C_RealTimer2[C_MaxIndex] = 0.00
            Set C_RealTimer3[C_MaxIndex] = C_LoopingSFXInitialInterval
            Set C_Stage[C_MaxIndex] = 3
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    C_MaxIndex Equal to 1
                Then - Actions
                    Trigger - Turn on Chidori Loop <gen>
                Else - Actions
    Loop
    Trigger: Chidori Loop
        Events
        Conditions
        Actions
            For each (Integer C_Index) from 1 to C_MaxIndex, do (Actions)
                Loop - Actions
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            C_Stage[C_Index] Equal to 1
                        Then - Actions
                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                If - Conditions
                                    (C_Caster[C_Index] is dead) Equal to False
                                    (C_Target[C_Index] is dead) Equal to False
                                    (Current order of C_Caster[C_Index]) Equal to C_OrderId
                                Then - Actions
                                    Unit - Make C_Caster[C_Index] face C_Target[C_Index] over 0.00 seconds
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        If - Conditions
                                            C_RealTimer[C_Index] Greater than 0.00
                                        Then - Actions
                                            Set C_RealTimer2[C_Index] = (C_RealTimer2[C_Index] + C_Interval)
                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                If - Conditions
                                                    C_RealTimer2[C_Index] Greater than C_LoopingSFXInterval
                                                Then - Actions
                                                    Set C_RealTimer2[C_Index] = 0.00
                                                    Custom script:   call DestroyEffect(AddSpecialEffectTarget(udg_C_LoopingSFX, udg_C_Caster[udg_C_Index], udg_C_LoopingSFXAttachment))
                                                Else - Actions
                                            Custom script:   set udg_C_X[1] = GetUnitX(udg_C_Target[udg_C_Index]) + udg_C_DragSpeed[udg_C_Level[udg_C_Index]] * Cos(udg_C_Angle[udg_C_Index])
                                            Custom script:   set udg_C_Y[1] = GetUnitY(udg_C_Target[udg_C_Index]) + udg_C_DragSpeed[udg_C_Level[udg_C_Index]] * Sin(udg_C_Angle[udg_C_Index])
                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                If - Conditions
                                                    C_Swinged[C_Index] Equal to False
                                                Then - Actions
                                                    Custom script:   call SetUnitAnimationByIndex(udg_C_Caster[udg_C_Index], udg_C_SwingAnimationIndex)
                                                    Set C_Swinged[C_Index] = True
                                                Else - Actions
                                            Set CP_Point = (Point(C_X[1], C_Y[1]))
                                            Trigger - Run Check Walkability <gen> (ignoring conditions)
                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                If - Conditions
                                                    CP_PointIsWalkable Equal to True
                                                Then - Actions
                                                    Custom script:   call SetUnitX(udg_C_Target[udg_C_Index], udg_C_X[1])
                                                    Custom script:   call SetUnitY(udg_C_Target[udg_C_Index], udg_C_Y[1])
                                                    Set C_RealTimer3[C_Index] = (C_RealTimer3[C_Index] + C_Interval)
                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                        If - Conditions
                                                            C_RealTimer3[C_Index] Greater than C_DragGroundSFXInterval
                                                        Then - Actions
                                                            Set C_RealTimer3[C_Index] = 0.00
                                                            Custom script:   call DestroyEffect(AddSpecialEffect(udg_C_DragGroundSFX, udg_C_X[1], udg_C_Y[1]))
                                                        Else - Actions
                                                    Unit - Cause C_Caster[C_Index] to damage C_Target[C_Index], dealing C_DragDamage[C_Level[C_Index]] damage of attack type C_AttackType and damage type C_DamageType
                                                    Custom script:   call SetUnitX(udg_C_Caster[udg_C_Index], udg_C_X[1] - udg_C_DragDistance[0] * Cos(udg_C_Angle[udg_C_Index]))
                                                    Custom script:   call SetUnitY(udg_C_Caster[udg_C_Index], udg_C_Y[1] - udg_C_DragDistance[0] * Sin(udg_C_Angle[udg_C_Index]))
                                                Else - Actions
                                                    Custom script:   call DestroyEffect(AddSpecialEffect(udg_C_CollideGroundSFX, udg_C_X[1], udg_C_Y[1]))
                                                    Unit - Cause C_Caster[C_Index] to damage C_Target[C_Index], dealing C_CollideDamage[C_Level[C_Index]] damage of attack type C_AttackType and damage type C_DamageType
                                                    Special Effect - Destroy C_HandFX[C_Index]
                                                    Unit - Order C_Caster[C_Index] to Stop
                                                    Set C_Stage[C_Index] = 4
                                            Custom script:   call RemoveLocation(udg_CP_Point)
                                            Set C_RealTimer[C_Index] = (C_RealTimer[C_Index] - C_DragSpeed[C_Level[C_Index]])
                                        Else - Actions
                                            Special Effect - Destroy C_HandFX[C_Index]
                                            Unit - Order C_Caster[C_Index] to Stop
                                            Set C_Stage[C_Index] = 4
                                Else - Actions
                                    Special Effect - Destroy C_HandFX[C_Index]
                                    Unit - Order C_Caster[C_Index] to Stop
                                    Set C_Stage[C_Index] = 4
                        Else - Actions
                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                If - Conditions
                                    C_Stage[C_Index] Equal to 2
                                Then - Actions
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        If - Conditions
                                            (C_Caster[C_Index] is dead) Equal to False
                                            (C_Target[C_Index] is dead) Equal to False
                                            (Current order of C_Caster[C_Index]) Equal to C_OrderId
                                        Then - Actions
                                            Unit - Make C_Caster[C_Index] face C_Target[C_Index] over 0.00 seconds
                                            Custom script:   set udg_C_X[1] = GetUnitX(udg_C_Caster[udg_C_Index])
                                            Custom script:   set udg_C_Y[1] = GetUnitY(udg_C_Caster[udg_C_Index])
                                            Custom script:   set udg_C_X[2] = GetUnitX(udg_C_Target[udg_C_Index]) - udg_C_X[1]
                                            Custom script:   set udg_C_Y[2] = GetUnitY(udg_C_Target[udg_C_Index]) - udg_C_Y[1]
                                            Set C_TempDistance = ((C_X[2] x C_X[2]) + (C_Y[2] x C_Y[2]))
                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                If - Conditions
                                                    C_TempDistance Less than or equal to C_MaxDistance[C_Level[C_Index]]
                                                Then - Actions
                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                        If - Conditions
                                                            C_TempDistance Greater than C_MinDistance
                                                        Then - Actions
                                                            Set C_RealTimer2[C_Index] = (C_RealTimer2[C_Index] + C_Interval)
                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                If - Conditions
                                                                    C_RealTimer2[C_Index] Greater than C_LoopingSFXInterval
                                                                Then - Actions
                                                                    Set C_RealTimer2[C_Index] = 0.00
                                                                    Custom script:   call DestroyEffect(AddSpecialEffectTarget(udg_C_LoopingSFX, udg_C_Caster[udg_C_Index], udg_C_LoopingSFXAttachment))
                                                                Else - Actions
                                                            Set C_TravelTime = ((C_TempDistance x C_Speed2[0]) / C_Speed2[C_Level[C_Index]])
                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                If - Conditions
                                                                    C_TravelTime Less than or equal to C_SwingTime
                                                                Then - Actions
                                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                        If - Conditions
                                                                            C_Swinged[C_Index] Equal to False
                                                                        Then - Actions
                                                                            Animation - Change C_Caster[C_Index]'s animation speed to 100.00% of its original speed
                                                                            Custom script:   call SetUnitAnimationByIndex(udg_C_Caster[udg_C_Index], udg_C_SwingAnimationIndex)
                                                                            Set C_Swinged[C_Index] = True
                                                                        Else - Actions
                                                                Else - Actions
                                                                    Custom script:   call SetUnitAnimationByIndex(udg_C_Caster[udg_C_Index], udg_C_MoveAnimationIndex)
                                                            Custom script:   set udg_C_TempAngle = Atan2(udg_C_Y[2], udg_C_X[2])
                                                            Custom script:   set udg_C_X[1] = udg_C_X[1] + udg_C_Speed[udg_C_Level[udg_C_Index]] * Cos(udg_C_TempAngle)
                                                            Custom script:   set udg_C_Y[1] = udg_C_Y[1] + udg_C_Speed[udg_C_Level[udg_C_Index]] * Sin(udg_C_TempAngle)
                                                            Set CP_Point = (Point(C_X[1], C_Y[1]))
                                                            Trigger - Run Check Walkability <gen> (ignoring conditions)
                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                If - Conditions
                                                                    CP_PointIsWalkable Equal to True
                                                                Then - Actions
                                                                    Custom script:   call SetUnitX(udg_C_Caster[udg_C_Index], udg_C_X[1])
                                                                    Custom script:   call SetUnitY(udg_C_Caster[udg_C_Index], udg_C_Y[1])
                                                                Else - Actions
                                                                    Special Effect - Destroy C_HandFX[C_Index]
                                                                    Animation - Change C_Caster[C_Index]'s animation speed to 100.00% of its original speed
                                                                    Unit - Order C_Caster[C_Index] to Stop
                                                                    Set C_Stage[C_Index] = 4
                                                            Custom script:   call RemoveLocation(udg_CP_Point)
                                                        Else - Actions
                                                            Unit - Cause C_Caster[C_Index] to damage C_Target[C_Index], dealing C_StrikeDamage[C_Level[C_Index]] damage of attack type C_AttackType and damage type C_DamageType
                                                            Custom script:   call DestroyEffect(AddSpecialEffectTarget(udg_C_StrikeSFX, udg_C_Target[udg_C_Index], udg_C_StrikeSFXAttachment))
                                                            Animation - Change C_Caster[C_Index]'s animation speed to 100.00% of its original speed
                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                If - Conditions
                                                                    (C_Target[C_Index] is dead) Equal to False
                                                                Then - Actions
                                                                    Custom script:   set udg_C_Angle[udg_C_Index] = Atan2(udg_C_Y[2], udg_C_X[2])
                                                                    Set C_RealTimer[C_Index] = C_DragDistance[C_Level[C_Index]]
                                                                    Set C_RealTimer3[C_Index] = 0.00
                                                                    Set C_Stage[C_Index] = 1
                                                                Else - Actions
                                                                    Special Effect - Destroy C_HandFX[C_Index]
                                                                    Unit - Order C_Caster[C_Index] to Stop
                                                                    Set C_Stage[C_Index] = 4
                                                Else - Actions
                                                    Special Effect - Destroy C_HandFX[C_Index]
                                                    Animation - Change C_Caster[C_Index]'s animation speed to 100.00% of its original speed
                                                    Unit - Order C_Caster[C_Index] to Stop
                                                    Set C_Stage[C_Index] = 4
                                        Else - Actions
                                            Special Effect - Destroy C_HandFX[C_Index]
                                            Animation - Change C_Caster[C_Index]'s animation speed to 100.00% of its original speed
                                            Unit - Order C_Caster[C_Index] to Stop
                                            Set C_Stage[C_Index] = 4
                                Else - Actions
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        If - Conditions
                                            C_Stage[C_Index] Equal to 3
                                        Then - Actions
                                            Custom script:   set udg_C_X[1] = GetUnitX(udg_C_Caster[udg_C_Index])
                                            Custom script:   set udg_C_Y[1] = GetUnitY(udg_C_Caster[udg_C_Index])
                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                If - Conditions
                                                    (C_Caster[C_Index] is dead) Equal to False
                                                    (C_Target[C_Index] is dead) Equal to False
                                                    (Current order of C_Caster[C_Index]) Equal to C_OrderId
                                                    C_X[1] Equal to C_CasterX[C_Index]
                                                    C_Y[1] Equal to C_CasterY[C_Index]
                                                Then - Actions
                                                    Unit - Make C_Caster[C_Index] face C_Target[C_Index] over 0.00 seconds
                                                    Set C_RealTimer[C_Index] = (C_RealTimer[C_Index] + C_Interval)
                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                        If - Conditions
                                                            C_RealTimer[C_Index] Less than C_CastingTime[C_Level[C_Index]]
                                                        Then - Actions
                                                            Set C_RealTimer2[C_Index] = (C_RealTimer2[C_Index] + C_Interval)
                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                If - Conditions
                                                                    C_RealTimer2[C_Index] Greater than C_RealTimer3[C_Index]
                                                                Then - Actions
                                                                    Set C_RealTimer2[C_Index] = 0.00
                                                                    Custom script:   call DestroyEffect(AddSpecialEffectTarget(udg_C_LoopingSFX, udg_C_Caster[udg_C_Index], udg_C_LoopingSFXAttachment))
                                                                Else - Actions
                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                If - Conditions
                                                                    C_RealTimer3[C_Index] Greater than C_LoopingSFXInterval
                                                                Then - Actions
                                                                    Set C_RealTimer3[C_Index] = (C_RealTimer3[C_Index] - C_RealTimer[0])
                                                                Else - Actions
                                                                    Set C_RealTimer3[C_Index] = C_LoopingSFXInterval
                                                            Custom script:   set udg_C_X[2] = GetUnitX(udg_C_Target[udg_C_Index]) - udg_C_CasterX[udg_C_Index]
                                                            Custom script:   set udg_C_Y[2] = GetUnitY(udg_C_Target[udg_C_Index]) - udg_C_CasterY[udg_C_Index]
                                                            Set C_TempDistance = ((C_X[2] x C_X[2]) + (C_Y[2] x C_Y[2]))
                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                If - Conditions
                                                                    C_TempDistance Greater than C_MaxDistance[C_Level[C_Index]]
                                                                Then - Actions
                                                                    Special Effect - Destroy C_HandFX[C_Index]
                                                                    Unit - Order C_Caster[C_Index] to Stop
                                                                    Set C_Stage[C_Index] = 4
                                                                Else - Actions
                                                        Else - Actions
                                                            Animation - Change C_Caster[C_Index]'s animation speed to C_MoveAnimationSpeed% of its original speed
                                                            Set C_Swinged[C_Index] = False
                                                            Set C_Stage[C_Index] = 2
                                                Else - Actions
                                                    Special Effect - Destroy C_HandFX[C_Index]
                                                    Unit - Order C_Caster[C_Index] to Stop
                                                    Set C_Stage[C_Index] = 4
                                        Else - Actions
                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                If - Conditions
                                                    C_Stage[C_Index] Equal to 4
                                                Then - Actions
                                                    Set C_Angle[C_Index] = C_Angle[C_MaxIndex]
                                                    Set C_Caster[C_Index] = C_Caster[C_MaxIndex]
                                                    Set C_CasterX[C_Index] = C_CasterX[C_MaxIndex]
                                                    Set C_CasterY[C_Index] = C_CasterY[C_MaxIndex]
                                                    Set C_HandFX[C_Index] = C_HandFX[C_MaxIndex]
                                                    Set C_Level[C_Index] = C_Level[C_MaxIndex]
                                                    Set C_RealTimer[C_Index] = C_RealTimer[C_MaxIndex]
                                                    Set C_RealTimer2[C_Index] = C_RealTimer2[C_MaxIndex]
                                                    Set C_RealTimer3[C_Index] = C_RealTimer3[C_MaxIndex]
                                                    Set C_Stage[C_Index] = C_Stage[C_MaxIndex]
                                                    Set C_Swinged[C_Index] = C_Swinged[C_MaxIndex]
                                                    Set C_Target[C_Index] = C_Target[C_MaxIndex]
                                                    Set C_Index = (C_Index - 1)
                                                    Set C_MaxIndex = (C_MaxIndex - 1)
                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                        If - Conditions
                                                            C_MaxIndex Equal to 0
                                                        Then - Actions
                                                            Trigger - Turn off (This trigger)
                                                        Else - Actions
                                                Else - Actions
  • Credits
    - Gwapogi for Kakashi model

Blizzard Modding Network News

Blizzard Modding Information Center Starcraft II Modding Information Center Wacraft III Modding Information Center WC3JASS.com - The JASS Vault Chronicles of Darkness - A Warcraft III mod Jetcraft - A Starcraft II mod Troll Smash - A Warcraft III Arena
  UDMod Mod DB - Change the Game Power of Corruption - A Warcraft III altered melee map Chaos Realm - The world of Game modders and wc3 addicts Follow us on Facebook!!