• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[Trigger] help pls. I have a knockback system need some little help.

Status
Not open for further replies.
Level 19
Joined
Feb 15, 2008
Messages
2,184
  • Knockback 2D Copy
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Custom script: set udg_KB2D_Hash = InitHashtable()
      • -------- -------------------------------------------- --------
      • -------- Creating Tree Cutter --------
      • -------- -------------------------------------------- --------
      • Set KB2D_Loc = (Center of (Playable map area))
      • Unit - Create 1 Peasant for Neutral Passive at KB2D_Loc facing Default building facing degrees
      • Set KB2D_Cutter = (Last created unit)
      • Unit - Hide KB2D_Cutter
      • Custom script: call UnitAddAbility(udg_KB2D_Cutter,'Aloc')
      • Custom script: call RemoveLocation(udg_KB2D_Loc)
      • -------- -------------------------------------------- --------
      • -------- Determines the Knockback Loop --------
      • -------- -------------------------------------------- --------
      • Set KB2D_Loop = 0.03
      • -------- -------------------------------------------- --------
      • -------- -------------------------------------------- --------
      • Custom script: call ExecuteFunc("InitKnockback2D")
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function destroys knockback --------
      • -------- -------------------------------------------- --------
      • Custom script: function DestroyKnockback takes nothing returns nothing
      • Hashtable - Clear all child hashtables of child KB2D_Key in KB2D_Hash
      • Unit Group - Remove KB2D_U from KB2D_LoopGroup
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function applies knockback to unit --------
      • -------- -------------------------------------------- --------
      • -------- Requires --------
      • -------- KB2D_Target --------
      • -------- KB2D_Angle --------
      • -------- KB2D_Duration --------
      • -------- KB2D_Distance --------
      • -------- KB2D_SFX --------
      • -------- KB2D_AllowDestroyTree --------
      • -------- -------------------------------------------- --------
      • Custom script: function ApplyKnockbackEffect takes nothing returns nothing
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • (KB2D_Target is A structure) Equal to False
              • (KB2D_Target is A flying unit) Equal to False
              • (KB2D_Target is alive) Equal to True
              • (KB2D_Target is in KB2D_LoopGroup) Equal to False
        • Then - Actions
          • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_TempKey,1,udg_KB2D_Angle)
          • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_TempKey,2,udg_KB2D_Duration)
          • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_TempKey,3,udg_KB2D_Distance)
          • Hashtable - Save KB2D_SFX as 5 of KB2D_TempKey in KB2D_Hash
          • Hashtable - Save KB2D_AllowTreeDestroy as 6 of KB2D_TempKey in KB2D_Hash
          • Unit Group - Add KB2D_Target to KB2D_LoopGroup
        • Else - Actions
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function applies speed --------
      • -------- -------------------------------------------- --------
      • Custom script: function ApplyKnockbackSpeed takes nothing returns real
      • Custom script: local real velocity = (udg_KB2D_Distance/udg_KB2D_Duration) * (udg_KB2D_Loop * 2)
      • Custom script: local real friction = (velocity/udg_KB2D_Duration) * (udg_KB2D_Loop * udg_KB2D_Loop)
      • Custom script: return velocity - friction
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function applies knockback coordinates --------
      • -------- -------------------------------------------- --------
      • Custom script: function ApplyKnockbackCoordinates takes nothing returns nothing
      • Custom script: local real speed = ApplyKnockbackSpeed()
      • Custom script: call SetUnitX(udg_KB2D_U, GetUnitX(udg_KB2D_U) + speed * Cos(udg_KB2D_Angle * bj_DEGTORAD))
      • Custom script: call SetUnitY(udg_KB2D_U, GetUnitY(udg_KB2D_U) + speed * Sin(udg_KB2D_Angle * bj_DEGTORAD))
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function checks the collision size --------
      • -------- -------------------------------------------- --------
      • Custom script: function GetUnitCollisionSize takes nothing returns integer
      • -------- -------------------------------------------- --------
      • -------- This is based from tier 3 halls,thanks to Vexorian for this code :D --------
      • -------- -------------------------------------------- --------
      • Custom script: local integer maxcollision = 196
      • Custom script: local integer a = 0
      • Custom script: local integer radius = maxcollision
      • Custom script: local real x = GetUnitX(udg_KB2D_U)
      • Custom script: local real y = GetUnitY(udg_KB2D_U)
      • Custom script: loop
      • Custom script: if IsUnitInRangeXY(udg_KB2D_U, x + radius, y, 0) then
      • Custom script: set a = radius
      • Custom script: else
      • Custom script: set maxcollision = radius
      • Custom script: endif
      • Custom script: exitwhen maxcollision - a <= 1
      • Custom script: set radius = (maxcollision + a) / 2
      • Custom script: endloop
      • Custom script: set radius = radius - maxcollision + a
      • Custom script: return radius
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function applies the bouncing angle --------
      • -------- -------------------------------------------- --------
      • Custom script: function GetKnockbackAngle takes nothing returns nothing
      • Custom script: set udg_KB2D_TouchRadius = I2R(GetUnitCollisionSize()) + 50
      • Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
      • Set KB2D_Hit = False
      • Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
        • Loop - Actions
          • Set KB2D_Dest = (Picked destructible)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Current life of KB2D_Dest) Greater than 0.00
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • KB2D_AllowTreeDestroy Equal to False
                • Then - Actions
                  • Unit - Order KB2D_Cutter to Harvest (Picked destructible)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Current order of KB2D_Cutter) Equal to (Order(harvest))
                    • Then - Actions
                      • Destructible - Kill (Picked destructible)
                    • Else - Actions
                • Else - Actions
              • Set KB2D_Hit = True
            • Else - Actions
          • Unit - Order KB2D_Cutter to Stop
      • Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Or - Any (Conditions) are true
            • Conditions
              • (Number of units in KB2D_TempGroup) Greater than 0
              • (Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
              • KB2D_Hit Equal to True
        • Then - Actions
          • Set KB2D_Angle = (360.00 - KB2D_Angle)
          • Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
          • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_Key,3,udg_KB2D_Distance * 0.4)
          • Set KB2D_Hit = False
          • Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
            • Loop - Actions
              • Set KB2D_Dest = (Picked destructible)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Current life of KB2D_Dest) Greater than 0.00
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • KB2D_AllowTreeDestroy Equal to False
                    • Then - Actions
                      • Unit - Order KB2D_Cutter to Harvest (Picked destructible)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Current order of KB2D_Cutter) Equal to (Order(harvest))
                        • Then - Actions
                          • Destructible - Kill (Picked destructible)
                        • Else - Actions
                    • Else - Actions
                  • Set KB2D_Hit = True
                • Else - Actions
              • Unit - Order KB2D_Cutter to Stop
          • Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Number of units in KB2D_TempGroup) Greater than 0
                  • (Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
                  • KB2D_Hit Equal to True
            • Then - Actions
              • Set KB2D_Angle = ((KB2D_Angle + 180.00) mod 360.00)
              • Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
              • Set KB2D_Hit = False
              • Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
                • Loop - Actions
                  • Set KB2D_Dest = (Picked destructible)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Current life of KB2D_Dest) Greater than 0.00
                    • Then - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • KB2D_AllowTreeDestroy Equal to False
                        • Then - Actions
                          • Unit - Order KB2D_Cutter to Harvest (Picked destructible)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Current order of KB2D_Cutter) Equal to (Order(harvest))
                            • Then - Actions
                              • Destructible - Kill (Picked destructible)
                            • Else - Actions
                        • Else - Actions
                      • Set KB2D_Hit = True
                    • Else - Actions
                  • Unit - Order KB2D_Cutter to Stop
              • Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (Number of units in KB2D_TempGroup) Greater than 0
                      • (Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
                      • KB2D_Hit Equal to True
                • Then - Actions
                  • Set KB2D_Angle = (360.00 - KB2D_Angle)
                  • Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
                  • Set KB2D_Hit = False
                  • Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
                    • Loop - Actions
                      • Set KB2D_Dest = (Picked destructible)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Current life of KB2D_Dest) Greater than 0.00
                        • Then - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • KB2D_AllowTreeDestroy Equal to False
                            • Then - Actions
                              • Unit - Order KB2D_Cutter to Harvest (Picked destructible)
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Current order of KB2D_Cutter) Equal to (Order(harvest))
                                • Then - Actions
                                  • Destructible - Kill (Picked destructible)
                                • Else - Actions
                            • Else - Actions
                          • Set KB2D_Hit = True
                        • Else - Actions
                      • Unit - Order KB2D_Cutter to Stop
                  • Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Or - Any (Conditions) are true
                        • Conditions
                          • (Number of units in KB2D_TempGroup) Greater than 0
                          • (Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
                          • KB2D_Hit Equal to True
                    • Then - Actions
                      • Custom script: call DestroyKnockback()
                    • Else - Actions
                  • Custom script: call RemoveLocation(udg_KB2D_Offset)
                  • Custom script: call DestroyGroup(udg_KB2D_TempGroup)
                • Else - Actions
              • Custom script: call RemoveLocation(udg_KB2D_Offset)
              • Custom script: call DestroyGroup(udg_KB2D_TempGroup)
            • Else - Actions
          • Custom script: call RemoveLocation(udg_KB2D_Offset)
          • Custom script: call DestroyGroup(udg_KB2D_TempGroup)
        • Else - Actions
      • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_Key,1,udg_KB2D_Angle)
      • Custom script: call RemoveLocation(udg_KB2D_Offset)
      • Custom script: call DestroyGroup(udg_KB2D_TempGroup)
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function will move the unit --------
      • -------- -------------------------------------------- --------
      • Custom script: function MoveKnockbackUnit takes nothing returns nothing
      • Set KB2D_Loc = (Position of KB2D_U)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • KB2D_Timer Less than KB2D_Duration
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (KB2D_U is dead) Equal to True
            • Then - Actions
              • Custom script: call DestroyKnockback()
            • Else - Actions
              • Custom script: call GetKnockbackAngle()
              • Custom script: call ApplyKnockbackCoordinates()
              • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_Key,4,udg_KB2D_Timer + udg_KB2D_Loop)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Random integer number between 1 and 5) Less than 2
                • Then - Actions
                  • Special Effect - Create a special effect at KB2D_Loc using KB2D_SFX
                  • Special Effect - Destroy (Last created special effect)
                • Else - Actions
        • Else - Actions
          • Custom script: call DestroyKnockback()
      • Custom script: call RemoveLocation(udg_KB2D_Loc)
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function will be run periodically --------
      • -------- -------------------------------------------- --------
      • Custom script: function Knockback2DLoop takes nothing returns nothing
      • Unit Group - Pick every unit in KB2D_LoopGroup and do (Actions)
        • Loop - Actions
          • Set KB2D_U = (Picked unit)
          • Custom script: set udg_KB2D_Key = GetHandleId(udg_KB2D_U)
          • -------- -------------------------------------------- --------
          • -------- Load --------
          • -------- -------------------------------------------- --------
          • Set KB2D_Angle = (Load 1 of KB2D_Key from KB2D_Hash)
          • Set KB2D_Duration = (Load 2 of KB2D_Key from KB2D_Hash)
          • Set KB2D_Distance = (Load 3 of KB2D_Key from KB2D_Hash)
          • Set KB2D_Timer = (Load 4 of KB2D_Key from KB2D_Hash)
          • Set KB2D_SFX = (Load 5 of KB2D_Key from KB2D_Hash)
          • Set KB2D_AllowTreeDestroy = (Load 6 of KB2D_Key from KB2D_Hash)
          • Custom script: call ExecuteFunc("MoveKnockbackUnit")
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- Reset Trigger --------
      • -------- -------------------------------------------- --------
      • Custom script: function InitKnockback2D takes nothing returns nothing
      • Custom script: local trigger t = GetTriggeringTrigger()
      • Custom script: call TriggerClearActions(t)
      • Custom script: call TriggerAddAction(t, function Knockback2DLoop)
      • Trigger - Add to (This trigger) the event (Time - Every KB2D_Loop seconds of game time)
  • Example Copy
    • Events
      • Unit - A unit Is attacked
    • Conditions
    • Actions
      • Set KB2D_Source = (Attacking unit)
      • Set KB2D_Target = (Attacked unit)
      • Custom script: set udg_KB2D_TempKey = GetHandleId(udg_KB2D_Target)
      • Set KB2D_SFX = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
      • Set KB2D_Distance = 500.00
      • Set KB2D_Duration = 1.50
      • Set KB2D_Loc = (Position of KB2D_Source)
      • Set KB2D_Offset = (Position of KB2D_Target)
      • Set KB2D_Angle = (Angle from KB2D_Loc to KB2D_Offset)
      • Set KB2D_AllowTreeDestroy = True
      • Custom script: call ExecuteFunc("ApplyKnockbackEffect")
      • Custom script: call RemoveLocation(udg_KB2D_Offset)
      • Custom script: call RemoveLocation(udg_KB2D_Loc)
So how do i set so the knockback system work for damage instead of attack?
Like if my hero gets damaged he will get knockback instead of attacked? is this possible?
 
Level 19
Joined
Feb 15, 2008
Messages
2,184
ok so how do i set it up i have this now.

  • Knockback 2D Copy
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Custom script: set udg_KB2D_Hash = InitHashtable()
      • -------- -------------------------------------------- --------
      • -------- Creating Tree Cutter --------
      • -------- -------------------------------------------- --------
      • Set KB2D_Loc = (Center of (Playable map area))
      • Unit - Create 1 Peasant for Neutral Passive at KB2D_Loc facing Default building facing degrees
      • Set KB2D_Cutter = (Last created unit)
      • Unit - Hide KB2D_Cutter
      • Custom script: call UnitAddAbility(udg_KB2D_Cutter,'Aloc')
      • Custom script: call RemoveLocation(udg_KB2D_Loc)
      • -------- -------------------------------------------- --------
      • -------- Determines the Knockback Loop --------
      • -------- -------------------------------------------- --------
      • Set KB2D_Loop = 0.03
      • -------- -------------------------------------------- --------
      • -------- -------------------------------------------- --------
      • Custom script: call ExecuteFunc("InitKnockback2D")
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function destroys knockback --------
      • -------- -------------------------------------------- --------
      • Custom script: function DestroyKnockback takes nothing returns nothing
      • Hashtable - Clear all child hashtables of child KB2D_Key in KB2D_Hash
      • Unit Group - Remove KB2D_U from KB2D_LoopGroup
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function applies knockback to unit --------
      • -------- -------------------------------------------- --------
      • -------- Requires --------
      • -------- KB2D_Target --------
      • -------- KB2D_Angle --------
      • -------- KB2D_Duration --------
      • -------- KB2D_Distance --------
      • -------- KB2D_SFX --------
      • -------- KB2D_AllowDestroyTree --------
      • -------- -------------------------------------------- --------
      • Custom script: function ApplyKnockbackEffect takes nothing returns nothing
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • (KB2D_Target is A structure) Equal to False
              • (KB2D_Target is A flying unit) Equal to False
              • (KB2D_Target is alive) Equal to True
              • (KB2D_Target is in KB2D_LoopGroup) Equal to False
        • Then - Actions
          • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_TempKey,1,udg_KB2D_Angle)
          • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_TempKey,2,udg_KB2D_Duration)
          • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_TempKey,3,udg_KB2D_Distance)
          • Hashtable - Save KB2D_SFX as 5 of KB2D_TempKey in KB2D_Hash
          • Hashtable - Save KB2D_AllowTreeDestroy as 6 of KB2D_TempKey in KB2D_Hash
          • Unit Group - Add KB2D_Target to KB2D_LoopGroup
        • Else - Actions
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function applies speed --------
      • -------- -------------------------------------------- --------
      • Custom script: function ApplyKnockbackSpeed takes nothing returns real
      • Custom script: local real velocity = (udg_KB2D_Distance/udg_KB2D_Duration) * (udg_KB2D_Loop * 2)
      • Custom script: local real friction = (velocity/udg_KB2D_Duration) * (udg_KB2D_Loop * udg_KB2D_Loop)
      • Custom script: return velocity - friction
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function applies knockback coordinates --------
      • -------- -------------------------------------------- --------
      • Custom script: function ApplyKnockbackCoordinates takes nothing returns nothing
      • Custom script: local real speed = ApplyKnockbackSpeed()
      • Custom script: call SetUnitX(udg_KB2D_U, GetUnitX(udg_KB2D_U) + speed * Cos(udg_KB2D_Angle * bj_DEGTORAD))
      • Custom script: call SetUnitY(udg_KB2D_U, GetUnitY(udg_KB2D_U) + speed * Sin(udg_KB2D_Angle * bj_DEGTORAD))
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function checks the collision size --------
      • -------- -------------------------------------------- --------
      • Custom script: function GetUnitCollisionSize takes nothing returns integer
      • -------- -------------------------------------------- --------
      • -------- This is based from tier 3 halls,thanks to Vexorian for this code :D --------
      • -------- -------------------------------------------- --------
      • Custom script: local integer maxcollision = 196
      • Custom script: local integer a = 0
      • Custom script: local integer radius = maxcollision
      • Custom script: local real x = GetUnitX(udg_KB2D_U)
      • Custom script: local real y = GetUnitY(udg_KB2D_U)
      • Custom script: loop
      • Custom script: if IsUnitInRangeXY(udg_KB2D_U, x + radius, y, 0) then
      • Custom script: set a = radius
      • Custom script: else
      • Custom script: set maxcollision = radius
      • Custom script: endif
      • Custom script: exitwhen maxcollision - a <= 1
      • Custom script: set radius = (maxcollision + a) / 2
      • Custom script: endloop
      • Custom script: set radius = radius - maxcollision + a
      • Custom script: return radius
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function applies the bouncing angle --------
      • -------- -------------------------------------------- --------
      • Custom script: function GetKnockbackAngle takes nothing returns nothing
      • Custom script: set udg_KB2D_TouchRadius = I2R(GetUnitCollisionSize()) + 50
      • Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
      • Set KB2D_Hit = False
      • Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
        • Loop - Actions
          • Set KB2D_Dest = (Picked destructible)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Current life of KB2D_Dest) Greater than 0.00
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • KB2D_AllowTreeDestroy Equal to False
                • Then - Actions
                  • Unit - Order KB2D_Cutter to Harvest (Picked destructible)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Current order of KB2D_Cutter) Equal to (Order(harvest))
                    • Then - Actions
                      • Destructible - Kill (Picked destructible)
                    • Else - Actions
                • Else - Actions
              • Set KB2D_Hit = True
            • Else - Actions
          • Unit - Order KB2D_Cutter to Stop
      • Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Or - Any (Conditions) are true
            • Conditions
              • (Number of units in KB2D_TempGroup) Greater than 0
              • (Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
              • KB2D_Hit Equal to True
        • Then - Actions
          • Set KB2D_Angle = (360.00 - KB2D_Angle)
          • Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
          • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_Key,3,udg_KB2D_Distance * 0.4)
          • Set KB2D_Hit = False
          • Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
            • Loop - Actions
              • Set KB2D_Dest = (Picked destructible)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Current life of KB2D_Dest) Greater than 0.00
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • KB2D_AllowTreeDestroy Equal to False
                    • Then - Actions
                      • Unit - Order KB2D_Cutter to Harvest (Picked destructible)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Current order of KB2D_Cutter) Equal to (Order(harvest))
                        • Then - Actions
                          • Destructible - Kill (Picked destructible)
                        • Else - Actions
                    • Else - Actions
                  • Set KB2D_Hit = True
                • Else - Actions
              • Unit - Order KB2D_Cutter to Stop
          • Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Number of units in KB2D_TempGroup) Greater than 0
                  • (Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
                  • KB2D_Hit Equal to True
            • Then - Actions
              • Set KB2D_Angle = ((KB2D_Angle + 180.00) mod 360.00)
              • Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
              • Set KB2D_Hit = False
              • Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
                • Loop - Actions
                  • Set KB2D_Dest = (Picked destructible)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Current life of KB2D_Dest) Greater than 0.00
                    • Then - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • KB2D_AllowTreeDestroy Equal to False
                        • Then - Actions
                          • Unit - Order KB2D_Cutter to Harvest (Picked destructible)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Current order of KB2D_Cutter) Equal to (Order(harvest))
                            • Then - Actions
                              • Destructible - Kill (Picked destructible)
                            • Else - Actions
                        • Else - Actions
                      • Set KB2D_Hit = True
                    • Else - Actions
                  • Unit - Order KB2D_Cutter to Stop
              • Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (Number of units in KB2D_TempGroup) Greater than 0
                      • (Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
                      • KB2D_Hit Equal to True
                • Then - Actions
                  • Set KB2D_Angle = (360.00 - KB2D_Angle)
                  • Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
                  • Set KB2D_Hit = False
                  • Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
                    • Loop - Actions
                      • Set KB2D_Dest = (Picked destructible)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Current life of KB2D_Dest) Greater than 0.00
                        • Then - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • KB2D_AllowTreeDestroy Equal to False
                            • Then - Actions
                              • Unit - Order KB2D_Cutter to Harvest (Picked destructible)
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Current order of KB2D_Cutter) Equal to (Order(harvest))
                                • Then - Actions
                                  • Destructible - Kill (Picked destructible)
                                • Else - Actions
                            • Else - Actions
                          • Set KB2D_Hit = True
                        • Else - Actions
                      • Unit - Order KB2D_Cutter to Stop
                  • Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Or - Any (Conditions) are true
                        • Conditions
                          • (Number of units in KB2D_TempGroup) Greater than 0
                          • (Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
                          • KB2D_Hit Equal to True
                    • Then - Actions
                      • Custom script: call DestroyKnockback()
                    • Else - Actions
                  • Custom script: call RemoveLocation(udg_KB2D_Offset)
                  • Custom script: call DestroyGroup(udg_KB2D_TempGroup)
                • Else - Actions
              • Custom script: call RemoveLocation(udg_KB2D_Offset)
              • Custom script: call DestroyGroup(udg_KB2D_TempGroup)
            • Else - Actions
          • Custom script: call RemoveLocation(udg_KB2D_Offset)
          • Custom script: call DestroyGroup(udg_KB2D_TempGroup)
        • Else - Actions
      • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_Key,1,udg_KB2D_Angle)
      • Custom script: call RemoveLocation(udg_KB2D_Offset)
      • Custom script: call DestroyGroup(udg_KB2D_TempGroup)
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function will move the unit --------
      • -------- -------------------------------------------- --------
      • Custom script: function MoveKnockbackUnit takes nothing returns nothing
      • Set KB2D_Loc = (Position of KB2D_U)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • KB2D_Timer Less than KB2D_Duration
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (KB2D_U is dead) Equal to True
            • Then - Actions
              • Custom script: call DestroyKnockback()
            • Else - Actions
              • Custom script: call GetKnockbackAngle()
              • Custom script: call ApplyKnockbackCoordinates()
              • Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_Key,4,udg_KB2D_Timer + udg_KB2D_Loop)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Random integer number between 1 and 5) Less than 2
                • Then - Actions
                  • Special Effect - Create a special effect at KB2D_Loc using KB2D_SFX
                  • Special Effect - Destroy (Last created special effect)
                • Else - Actions
        • Else - Actions
          • Custom script: call DestroyKnockback()
      • Custom script: call RemoveLocation(udg_KB2D_Loc)
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- This function will be run periodically --------
      • -------- -------------------------------------------- --------
      • Custom script: function Knockback2DLoop takes nothing returns nothing
      • Unit Group - Pick every unit in KB2D_LoopGroup and do (Actions)
        • Loop - Actions
          • Set KB2D_U = (Picked unit)
          • Custom script: set udg_KB2D_Key = GetHandleId(udg_KB2D_U)
          • -------- -------------------------------------------- --------
          • -------- Load --------
          • -------- -------------------------------------------- --------
          • Set KB2D_Angle = (Load 1 of KB2D_Key from KB2D_Hash)
          • Set KB2D_Duration = (Load 2 of KB2D_Key from KB2D_Hash)
          • Set KB2D_Distance = (Load 3 of KB2D_Key from KB2D_Hash)
          • Set KB2D_Timer = (Load 4 of KB2D_Key from KB2D_Hash)
          • Set KB2D_SFX = (Load 5 of KB2D_Key from KB2D_Hash)
          • Set KB2D_AllowTreeDestroy = (Load 6 of KB2D_Key from KB2D_Hash)
          • Custom script: call ExecuteFunc("MoveKnockbackUnit")
      • Custom script: endfunction
      • -------- -------------------------------------------- --------
      • -------- Reset Trigger --------
      • -------- -------------------------------------------- --------
      • Custom script: function InitKnockback2D takes nothing returns nothing
      • Custom script: local trigger t = GetTriggeringTrigger()
      • Custom script: call TriggerClearActions(t)
      • Custom script: call TriggerAddAction(t, function Knockback2DLoop)
      • Trigger - Add to (This trigger) the event (Time - Every KB2D_Loop seconds of game time)
  • Example Copy
    • Events
      • Unit - A unit Is attacked
    • Conditions
    • Actions
      • Set KB2D_Source = (Attacking unit)
      • Set KB2D_Target = (Attacked unit)
      • Custom script: set udg_KB2D_TempKey = GetHandleId(udg_KB2D_Target)
      • Set KB2D_SFX = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
      • Set KB2D_Distance = 500.00
      • Set KB2D_Duration = 1.50
      • Set KB2D_Loc = (Position of KB2D_Source)
      • Set KB2D_Offset = (Position of KB2D_Target)
      • Set KB2D_Angle = (Angle from KB2D_Loc to KB2D_Offset)
      • Set KB2D_AllowTreeDestroy = True
      • Custom script: call ExecuteFunc("ApplyKnockbackEffect")
      • Custom script: call RemoveLocation(udg_KB2D_Offset)
      • Custom script: call RemoveLocation(udg_KB2D_Loc)
do i need to add something like if unit gets damaged of this spell type etc?
 
Level 19
Joined
Feb 15, 2008
Messages
2,184
sry but dont understand. do you mean i just add the the spell in the example trigger?

And how do i make this?

Can you show me an example pls?

now i have a spell that throws a boomerang. and make damages. it goes away and comes back to the hero.

attachment.php


  • Example Copy
    • Events
      • Unit - The Grouchy 0023 <gen> Takes damage
      • Unit - The Grouchy 0013 <gen> Takes damage
      • Unit - The Grouchy 0001 <gen> Takes damage
      • Unit - The Grouchy 0009 <gen> Takes damage
      • Unit - The Grouchy 0010 <gen> Takes damage
      • Unit - The Grouchy 0025 <gen> Takes damage
      • Unit - The Grouchy 0015 <gen> Takes damage
      • Unit - The Grouchy 0011 <gen> Takes damage
      • Unit - The Grouchy 0014 <gen> Takes damage
      • Unit - The Grouchy 0024 <gen> Takes damage
    • Conditions
    • Actions
      • Set KB2D_Source = (Attacking unit)
      • Set KB2D_Target = (Attacked unit)
      • Custom script: set udg_KB2D_TempKey = GetHandleId(udg_KB2D_Target)
      • Set KB2D_SFX = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
      • Set KB2D_Distance = 500.00
      • Set KB2D_Duration = 1.50
      • Set KB2D_Loc = (Position of KB2D_Source)
      • Set KB2D_Offset = (Position of KB2D_Target)
      • Set KB2D_Angle = (Angle from KB2D_Loc to KB2D_Offset)
      • Set KB2D_AllowTreeDestroy = True
      • Custom script: call ExecuteFunc("ApplyKnockbackEffect")
      • Custom script: call RemoveLocation(udg_KB2D_Offset)
      • Custom script: call RemoveLocation(udg_KB2D_Loc)
i made trigger like this have i missed anything?
 

Attachments

  • Blade knockback.JPG
    Blade knockback.JPG
    174.1 KB · Views: 212
Last edited by a moderator:
Status
Not open for further replies.
Top