- Joined
- Jul 19, 2007
- Messages
- 971
I have problem with an item-ability on my map that should cast a magic shield on a target friendly unit or self and it's meant to absorb damage equal to 20% of the casting hero's current mana but it seems like it doesn't absorb any damage at all, the shield is destroyed immediately...
The triggers.
The triggers.
-
Nature ProtectionIni
-

Events
-


Time - Elapsed game time is 0.01 seconds
-
-

Conditions
-

Actions
-


-------- Set this to true if you want three of the orbit dummies for an effect, otherwise set it to false for an effect above the unit. --------
-


Set VariableSet SP_Effect_Boolean = False
-


-------- Set this to true if you want three of the orbit dummies for an effect, otherwise set it to false for an effect above the unit. --------
-


-------- --------
-


-------- This denotes whether or not the shield displays remaining life when struck or damage spill when destroyed.. --------
-


Set VariableSet SP_Display_Boolean = True
-


-------- This denotes whether or not the shield displays remaining life when struck or damage spill when destroyed.. --------
-


-------- --------
-


-------- This denotes whether or not the shield life stacks on subsequent casts --------
-


Set VariableSet SP_Stack_Boolean = False
-


-------- This denotes whether or not the shield life stacks on subsequent casts --------
-


-------- --------
-


-------- This is the Life of the shield per level. NOTE: the shield life is calculated as SP_Life + (SP_Life x lvl) --------
-


Set VariableSet SP_Life = (Mana of (Triggering unit))
-


-------- This is the Life of the shield per level. NOTE: the shield life is calculated as SP_Life + (SP_Life x lvl) --------
-


-------- --------
-


-------- This is the duration of the shield --------
-


Set VariableSet SP_Duration = 15.00
-


-------- This is the duration of the shield --------
-


-------- --------
-


Set VariableSet SP_Ability = Nature Protection
-


Set VariableSet SP_Buff = Nature Protection
-


Set VariableSet SP_LifeBonus = Protection Life Bonus
-


Hashtable - Create a hashtable
-


Set VariableSet SP_Hashtabe = (Last created hashtable)
-
-
-
Nature ProtectionCast
-

Events
-


Unit - A unit Starts the effect of an ability
-
-

Conditions
-


(Ability being cast) Equal to SP_Ability
-
-

Actions
-


-------- Shield Life --------
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




SP_Stack_Boolean Equal to True
-
-



Then - Actions
-




Set VariableSet SP_Real = (Load 0 of (Key (Target unit of ability being cast).) from SP_Hashtabe.)
-




Hashtable - Save (0.00 + (0.00 + (SP_Life x 0.20))) as 0 of (Key (Target unit of ability being cast).) in SP_Hashtabe.
-




Hashtable - Save (0.00 + (0.00 + (SP_Life x 0.20))) as (Key Maxlife.) of (Key (Target unit of ability being cast).) in SP_Hashtabe.
-
-



Else - Actions
-




Hashtable - Save (0.00 + (0.00 + (SP_Life x 0.20))) as 0 of (Key (Target unit of ability being cast).) in SP_Hashtabe.
-




Hashtable - Save (0.00 + (0.00 + (SP_Life x 0.20))) as (Key Maxlife.) of (Key (Target unit of ability being cast).) in SP_Hashtabe.
-
-
-


-------- Shield Life --------
-


-------- --------
-


-------- Duration --------
-


Hashtable - Save SP_Duration as 1 of (Key (Target unit of ability being cast).) in SP_Hashtabe.
-


-------- Duration --------
-


-------- --------
-


-------- Shield effect --------
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




SP_Effect_Boolean Equal to True
-
-



Then - Actions
-




Special Effect - Create a special effect attached to the origin of (Target unit of ability being cast) using Spells\NatureBlessing\GaiaShield.mdx
-




Special Effect - Destroy (Last created special effect)
-




Hashtable - Save 0 as (Key Distance.) of (Key (Target unit of ability being cast).) in SP_Hashtabe.
-




Set VariableSet SP_T_Point = (Position of (Target unit of ability being cast))
-




For each (Integer A) from 1 to 3, do (Actions)
-





Loop - Actions
-






Set VariableSet SP_T_Point_2 = (SP_T_Point offset by 50.00 towards (120.00 x (Real((Integer A)))) degrees.)
-






Unit - Create 1 Watch Tower for (Owner of (Target unit of ability being cast)) at SP_T_Point_2 facing Default building facing degrees
-






Hashtable - Save Handle Of(Last created unit) as (Key (Buff + (String((Integer A)))).) of (Key (Target unit of ability being cast).) in SP_Hashtabe.
-






Custom script: call RemoveLocation(udg_SP_T_Point_2)
-
-
-




Custom script: call RemoveLocation(udg_SP_T_Point)
-
-



Else - Actions
-




Special Effect - Destroy (Load 0 of (Key (Target unit of ability being cast).) in SP_Hashtabe.)
-




Special Effect - Create a special effect attached to the origin of (Target unit of ability being cast) using Spells\NatureBlessing\GaiaShield.mdx
-




Hashtable - Save Handle Of(Last created special effect) as 0 of (Key (Target unit of ability being cast).) in SP_Hashtabe.
-
-
-


-------- Shield effect --------
-


Unit Group - Add (Target unit of ability being cast) to SP_Group
-


Trigger - Turn on Nature ProtectionLoop <gen>
-


Trigger - Turn on Nature ProtectionBlock <gen>
-
-
-
Nature ProtectionLoop
-

Events
-


Time - Every 0.05 seconds of game time
-
-

Conditions
-

Actions
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




(Number of units in SP_Group) Greater than 0
-
-



Then - Actions
-




Unit Group - Pick every unit in SP_Group and do (Actions)
-





Loop - Actions
-






Set VariableSet SP_Real = ((Load 1 of (Key (Picked unit).) from SP_Hashtabe.) - 0.05)
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








(((Picked unit) has buff SP_Buff) Equal to False) or (SP_Real Less than or equal to 0.00)
-
-







Then - Actions
-








Set VariableSet SP_T_Point = (Position of (Picked unit))
-








Unit - Remove SP_Buff buff from (Picked unit)
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










SP_Effect_Boolean Equal to True
-
-









Then - Actions
-










For each (Integer A) from 1 to 3, do (Actions)
-











Loop - Actions
-












Unit - Kill (Load (Key (Buff + (String((Integer A)))).) of (Key (Picked unit).) in SP_Hashtabe.)
-
-
-
-









Else - Actions
-










Special Effect - Destroy (Load 0 of (Key (Picked unit).) in SP_Hashtabe.)
-










-------- This is the effect when the shield is destroyed. --------
-










Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\KeeperGroveMissile\KeeperGroveMissile.mdl
-










-------- This is the effect when the shield is destroyed. --------
-










Special Effect - Destroy (Last created special effect)
-
-
-








Unit Group - Remove (Picked unit) from SP_Group.
-








Hashtable - Clear all child hashtables of child (Key (Picked unit).) in SP_Hashtabe.
-








If ((SP_Group is empty) Equal to True) then do (Trigger - Turn off (This trigger)) else do (-------- Do Nothing --------)
-








Trigger - Turn off Nature ProtectionBlock <gen>
-








Custom script: call RemoveLocation(udg_SP_T_Point)
-
-







Else - Actions
-








Hashtable - Save SP_Real as 1 of (Key (Picked unit).) in SP_Hashtabe.
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










SP_Effect_Boolean Equal to True
-
-









Then - Actions
-










Set VariableSet Distance = ((Load (Key Distance.) of (Key (Picked unit).) from SP_Hashtabe.) + 12.50)
-










Hashtable - Save Distance as (Key Distance.) of (Key (Picked unit).) in SP_Hashtabe.
-










For each (Integer A) from 1 to 3, do (Actions)
-











Loop - Actions
-












Set VariableSet SP_T_Point = (Position of (Picked unit))
-












Set VariableSet SP_T_Point_2 = (SP_T_Point offset by 50.00 towards ((120.00 x (Real((Integer A)))) + Distance) degrees.)
-












Unit - Make (Load (Key (Buff + (String((Integer A)))).) of (Key (Picked unit).) in SP_Hashtabe.) face SP_T_Point_2 over 0.01 seconds
-












Unit - Move (Load (Key (Buff + (String((Integer A)))).) of (Key (Picked unit).) in SP_Hashtabe.) instantly to SP_T_Point_2
-












Custom script: call RemoveLocation(udg_SP_T_Point)
-












Custom script: call RemoveLocation(udg_SP_T_Point_2)
-
-
-
-









Else - Actions
-
-
-
-
-
-
-



Else - Actions
-
-
-
-
Nature ProtectionBlock
-

Events
-


Game - GDD_Event becomes Equal to 0.00
-
-

Conditions
-


(GDD_DamagedUnit has buff SP_Buff) Equal to True
-
-

Actions
-


Custom script: set udg_SP_UnitID = GetHandleId(udg_GDD_DamagedUnit)
-


Set VariableSet SP_Real = (Load 0 of SP_UnitID from SP_Hashtabe.)
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




SP_Real Greater than 0.00
-
-



Then - Actions
-




If (SP_Target Not equal to No unit) then do (Trigger - Run Nature ProtectionHeal <gen> (ignoring conditions)) else do (-------- Do Nothing --------)
-




Set VariableSet SP_Damage = GDD_Damage
-




Set VariableSet SP_Real = (SP_Real - SP_Damage)
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






SP_Effect_Boolean Equal to True
-
-





Then - Actions
-






For each (Integer A) from 1 to 3, do (Actions)
-







Loop - Actions
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










SP_Real Less than or equal to ((Load (Key Maxlife.) of SP_UnitID from SP_Hashtabe.) - (((Load (Key Maxlife.) of SP_UnitID from (Last created hashtable).) / 3.00) x (Real((Integer A)))))
-
-









Then - Actions
-










Unit - Kill (Load (Key (Buff + (String((Integer A)))).) of SP_UnitID in SP_Hashtabe.)
-
-









Else - Actions
-
-
-
-
-





Else - Actions
-
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






SP_Real Less than or equal to 0.00
-
-





Then - Actions
-






Unit - Remove SP_Buff buff from GDD_DamagedUnit
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








SP_Real Less than 0.00
-
-







Then - Actions
-








Set VariableSet SP_T_Point = (Position of GDD_DamagedUnit)
-








Unit - Cause GDD_DamageSource to damage GDD_DamagedUnit, dealing (SP_Real x -1.00) damage of attack type Hero and damage type Divine
-








Custom script: call RemoveLocation(udg_SP_T_Point)
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










SP_Display_Boolean Equal to True
-
-









Then - Actions
-










Floating Text - Create floating text that reads (String((Integer(SP_Real)))) above GDD_DamagedUnit with Z offset 0.00, using font size 10.00, color (80.00%, 0.00%, 0.00%), and 20.00% transparency
-










Set VariableSet SP_FText = (Last created floating text)
-










Set VariableSet SP_PlayerGroup = (Player group((Owner of GDD_DamagedUnit)))
-










Floating Text - Hide SP_FText for (All players)
-










Floating Text - Show SP_FText for SP_PlayerGroup
-










Floating Text - Set the velocity of SP_FText to 90.00 towards 90.00 degrees
-










Floating Text - Change SP_FText: Disable permanence
-










Floating Text - Change the lifespan of SP_FText to 2.00 seconds
-










Floating Text - Change the fading age of SP_FText to 1.00 seconds
-










Custom script: call DestroyForce(udg_SP_PlayerGroup)
-
-









Else - Actions
-
-
-







Else - Actions
-
-






Set VariableSet SP_Damage = SP_Real
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








SP_Effect_Boolean Equal to True
-
-







Then - Actions
-








For each (Integer A) from 1 to 3, do (Actions)
-









Loop - Actions
-










Unit - Kill (Load (Key (Buff + (String((Integer A)))).) of SP_UnitID in SP_Hashtabe.)
-
-
-
-







Else - Actions
-








Special Effect - Destroy (Load 0 of SP_UnitID in SP_Hashtabe.)
-








-------- This is the effect when the shield is destroyed. --------
-








Special Effect - Create a special effect attached to the chest of GDD_DamagedUnit using Abilities\Weapons\KeeperGroveMissile\KeeperGroveMissile.mdl
-








-------- This is the effect when the shield is destroyed. --------
-








Special Effect - Destroy (Last created special effect)
-
-
-






Unit Group - Remove GDD_DamagedUnit from SP_Group.
-






Hashtable - Clear all child hashtables of child SP_UnitID in SP_Hashtabe.
-
-





Else - Actions
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








SP_Display_Boolean Equal to True
-








SP_Damage Greater than 0.99
-
-







Then - Actions
-








Set VariableSet SP_T_Point = (Position of GDD_DamagedUnit)
-








Floating Text - Create floating text that reads (String((Integer(SP_Real)))) at (SP_T_Point offset by (Random real number between 0.00 and 50.00) towards (Random angle) degrees.) with Z offset 0.00, using font size 9.00, color (0.00%, 100.00%, 100.00%), and 20.00% transparency
-








Set VariableSet SP_FText = (Last created floating text)
-








Set VariableSet SP_PlayerGroup = (Player group((Owner of GDD_DamagedUnit)))
-








Floating Text - Hide SP_FText for (All players)
-








Floating Text - Show SP_FText for SP_PlayerGroup
-








Floating Text - Set the velocity of SP_FText to 90.00 towards 90.00 degrees
-








Floating Text - Change SP_FText: Disable suspend state
-








Floating Text - Change SP_FText: Disable permanence
-








Floating Text - Change the lifespan of SP_FText to 1.00 seconds
-








Floating Text - Change the fading age of SP_FText to 0.25 seconds
-








Custom script: call RemoveLocation(udg_SP_T_Point)
-








Custom script: call DestroyForce(udg_SP_PlayerGroup)
-
-







Else - Actions
-
-






Hashtable - Save SP_Real as 0 of SP_UnitID in SP_Hashtabe.
-
-
-




Set VariableSet SP_Target = GDD_DamagedUnit
-




-------- Using big life bonus to prevent death if damage>=max hp --------
-




Unit - Add SP_LifeBonus to SP_Target
-




Countdown Timer - Start SP_Timer as a One-shot timer that will expire in 0.00 seconds
-
-



Else - Actions
-




Unit - Remove SP_Buff buff from GDD_DamagedUnit
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






SP_Effect_Boolean Equal to True
-
-





Then - Actions
-






For each (Integer A) from 1 to 3, do (Actions)
-







Loop - Actions
-








Unit - Kill (Load (Key (Buff + (String((Integer A)))).) of SP_UnitID in SP_Hashtabe.)
-
-
-
-





Else - Actions
-






Special Effect - Destroy (Load 0 of SP_UnitID in SP_Hashtabe.)
-






-------- This is the effect when the shield is destroyed. --------
-






Special Effect - Create a special effect attached to the chest of GDD_DamagedUnit using Abilities\Weapons\KeeperGroveMissile\KeeperGroveMissile.mdl
-






-------- This is the effect when the shield is destroyed. --------
-






Special Effect - Destroy (Last created special effect)
-
-
-




Unit Group - Remove GDD_DamagedUnit from SP_Group.
-




Hashtable - Clear all child hashtables of child SP_UnitID in SP_Hashtabe.
-
-
-
-
-
Nature ProtectionHeal
-

Events
-


Time - SP_Timer expires
-
-

Conditions
-

Actions
-


Unit - Set life of SP_Target to ((Life of SP_Target) + SP_Damage)
-


Unit - Remove SP_LifeBonus from SP_Target
-


Set VariableSet SP_Target = No unit
-
-