[General] AI Threat, Emergency and Formation System ( OUTDATED)

Level 16
Joined
Feb 22, 2025
Messages
315
Update 4: The current system is here.


Update 3: Added complete system and new video. Now this works as it should, still would appreciate any suggestions or changes rly!

Issue: Threat target sometimes fails to be removed properly.




  • Config AI
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set AI_HordeGroup = (Units owned by Player 13 (Maroon) of type Warsong Grunt)
      • Set AI_ForsakenGroup = (Units owned by Player 4 (Purple) of type Forsaken Deathguard)
      • Set AI_Sylvanas = Sylvanas 0004 <gen>
      • Set AI_Thrall = Thrall (Unmounted) 0013 <gen>
      • Set AI_Voljin = Vol'jin 0037 <gen>
      • Set AI_Mort = Royal Forsaken Captain Mort 0012 <gen>
      • Set AI_ThreatRange = 800.00
      • Set AI_SafeDistance = 600.00
      • Set AI_FormationSpacing = 250.00
      • Set AI_Emergency_Protection_Range = 400.00
      • Set AI_EmegencyTight_Radius = 150.00
      • Set AI_EmergencyWide_Radius = 250.00
      • Set AI_Emegency_I = 40.00
      • Set AI_Mort_GuardRange = 300.00
      • Set AI_Mort_MaxCombatDistance = 500.00
      • Set AI_Mort_FollowDistance = 150.00
      • Set AI_Groups_MaxCombatDistance = 600.00
      • -------- ---------------------------- --------
      • Set AI_Cinematic = False
      • Set AI_Emergency = False
      • Set AI_Emergency_Previous = False
      • Set AI_Enabled = True
      • Set AI_Voljin_Fleeing = False
      • Set AI_EnemiesNearHero_Previous = False
      • Set AI_Voljin_HealRange = 800.00
      • Set AI_Voljin_HealTreshold = 80.00
      • Set AI_Voljin_SafeDistance = 400.00
      • Set AI_Voljin_FleeDistance = 600.00
  • AI Detection
    • Events
      • Time - Every 0.33 seconds of game time
    • Conditions
      • AI_Enabled Equal to True
      • AI_Cinematic Equal to False
    • Actions
      • Set AI_Sylvanas_P = (Position of AI_Sylvanas)
      • Set AI_TempGroup = (Units within AI_ThreatRange of AI_Sylvanas_P matching ((((Matching unit) belongs to an enemy of (Owner of AI_Sylvanas).) Equal to True) and (((Matching unit) is alive) Equal to True)).)
      • Custom script: call RemoveLocation( udg_AI_Sylvanas_P)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_ThreatTarget_F Equal to No unit
          • (Number of units in AI_TempGroup) Greater than 0
        • Then - Actions
          • Set AI_ThreatTarget_F = (Random unit from AI_TempGroup)
        • Else - Actions
      • Custom script: call DestroyGroup( udg_AI_TempGroup)
      • Set AI_Thrall_P = (Position of AI_Thrall)
      • Set AI_TempGroup = (Units within AI_ThreatRange of AI_Thrall_P matching ((((Matching unit) belongs to an enemy of (Owner of AI_Thrall).) Equal to True) and (((Matching unit) is alive) Equal to True)).)
      • Custom script: call RemoveLocation( udg_AI_Thrall_P)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_ThreatTarget_H Equal to No unit
          • (Number of units in AI_TempGroup) Greater than 0
        • Then - Actions
          • Set AI_ThreatTarget_H = (Random unit from AI_TempGroup)
        • Else - Actions
      • Custom script: call DestroyGroup( udg_AI_TempGroup)
  • AI Response
    • Events
      • Time - Every 0.33 seconds of game time
    • Conditions
      • AI_Enabled Equal to True
      • AI_Emergency Equal to False
      • AI_Cinematic Equal to False
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_ThreatTarget_F Not equal to No unit
          • (AI_ThreatTarget_F is alive) Equal to True
        • Then - Actions
          • Set AI_ThreatTargetB_F = True
          • Unit Group - Pick every unit in AI_ForsakenGroup and do (Actions)
            • Loop - Actions
              • Unit - Order (Picked unit) to Attack AI_ThreatTarget_F
        • Else - Actions
          • Set AI_ThreatTargetB_F = False
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_ThreatTarget_H Not equal to No unit
          • (AI_ThreatTarget_H is alive) Equal to True
        • Then - Actions
          • Set AI_ThreatTargetB_H = True
          • Unit Group - Pick every unit in AI_HordeGroup and do (Actions)
            • Loop - Actions
              • Unit - Order (Picked unit) to Attack AI_ThreatTarget_H
        • Else - Actions
          • Set AI_ThreatTargetB_H = False
  • AI Threat Timeout
    • Events
      • Time - Every 0.50 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_ThreatTarget_F Not equal to No unit
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (AI_ThreatTarget_F is alive) Equal to False
            • Then - Actions
              • Set AI_ThreatTarget_F = No unit
              • Set AI_ThreatTargetB_F = False
              • Unit Group - Pick every unit in AI_ForsakenGroup and do (Actions)
                • Loop - Actions
                  • Unit - Order (Picked unit) to Stop.
            • Else - Actions
              • Set AI_ThreatTarget_P = (Position of AI_ThreatTarget_F)
              • Set AI_Sylvanas_P = (Position of AI_Sylvanas)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between AI_Sylvanas_P and AI_ThreatTarget_P) Greater than or equal to AI_ThreatRange
                • Then - Actions
                  • Set AI_ThreatTarget_F = No unit
                  • Set AI_ThreatTargetB_F = False
                • Else - Actions
              • Custom script: call RemoveLocation( udg_AI_ThreatTarget_P)
              • Custom script: call RemoveLocation( udg_AI_Sylvanas_P)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_ThreatTarget_H Not equal to No unit
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (AI_ThreatTarget_H is alive) Equal to False
            • Then - Actions
              • Set AI_ThreatTarget_H = No unit
              • Set AI_ThreatTargetB_H = False
              • Unit Group - Pick every unit in AI_HordeGroup and do (Actions)
                • Loop - Actions
                  • Unit - Order (Picked unit) to Stop.
            • Else - Actions
              • Set AI_ThreatTarget_P = (Position of AI_ThreatTarget_H)
              • Set AI_Thrall_P = (Position of AI_Thrall)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between AI_Thrall_P and AI_ThreatTarget_P) Greater than or equal to AI_ThreatRange
                • Then - Actions
                  • Set AI_ThreatTarget_H = No unit
                  • Set AI_ThreatTargetB_H = False
                • Else - Actions
              • Custom script: call RemoveLocation( udg_AI_ThreatTarget_P)
              • Custom script: call RemoveLocation( udg_AI_Thrall_P)
        • Else - Actions
  • AI Threat Target Recycle F
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Dying unit) Equal to AI_ThreatTarget_F
    • Actions
      • Set AI_ThreatTarget_F = No unit
      • Set AI_ThreatTargetB_F = False
  • AI Threat Target Recycle H
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Dying unit) Equal to AI_ThreatTarget_H
    • Actions
      • Set AI_ThreatTarget_H = No unit
      • Set AI_ThreatTargetB_H = False
  • AI Threat Target Emergency Recycle
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Dying unit) Equal to AI_ThreatTarget
    • Actions
      • Set AI_ThreatTarget = No unit
      • Set AI_Enemies_nearHero = False
  • AI E Check
    • Events
      • Time - Every 0.30 seconds of game time
    • Conditions
      • AI_Enabled Equal to True
    • Actions
      • Set AI_Emergency_Previous = AI_Emergency
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ((Percentage life of AI_Sylvanas) Less than or equal to 30.00) or ((Percentage life of AI_Thrall) Less than or equal to 30.00)
        • Then - Actions
          • Set AI_Emergency = True
        • Else - Actions
          • Set AI_Emergency = False
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_Emergency_Previous Equal to False
          • AI_Emergency Equal to True
        • Then - Actions
          • Unit Group - Pick every unit in AI_ForsakenGroup and do (Actions)
            • Loop - Actions
              • Unit - Order (Picked unit) to Human Footman - Defend.
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_Emergency_Previous Equal to True
          • AI_Emergency Equal to False
        • Then - Actions
          • Unit Group - Pick every unit in AI_ForsakenGroup and do (Actions)
            • Loop - Actions
              • Unit - Order (Picked unit) to Human Footman - Stop Defend.
        • Else - Actions
  • AI E Response
    • Events
      • Time - Every 0.50 seconds of game time
    • Conditions
      • AI_Emergency Equal to True
      • AI_Cinematic Equal to False
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Percentage life of AI_Sylvanas) Less than (Percentage life of AI_Thrall)
        • Then - Actions
          • Set AI_Emergency_Hero = AI_Sylvanas
        • Else - Actions
          • Set AI_Emergency_Hero = AI_Thrall
      • Set AI_LoopIndex_F = 0
      • Set AI_LoopIndex_H = 0
      • Set AI_TempPoint = (Position of AI_Emergency_Hero)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_Enemies_nearHero Equal to False
        • Then - Actions
          • Unit Group - Pick every unit in AI_ForsakenGroup and do (Actions)
            • Loop - Actions
              • Set AI_FormationAngle_F = ((Facing of AI_Emergency_Hero) + (0.00 + (((Real(AI_LoopIndex_F)) mod 8.00) x 45.00)))
              • Set AI_FormationRadius_F = (AI_EmegencyTight_Radius + (((Real(AI_LoopIndex_F)) / 8.00) x AI_Emegency_I))
              • Set AI_FormationP_FG = (AI_TempPoint offset by AI_FormationRadius_F towards AI_FormationAngle_F degrees.)
              • Set AI_PickedUnit_F = (Position of (Picked unit))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between AI_PickedUnit_F and AI_FormationP_FG) Greater than or equal to 250.00
                • Then - Actions
                  • Unit - Order (Picked unit) to Move To AI_FormationP_FG
                • Else - Actions
                  • Unit - Make (Picked unit) face AI_FormationAngle_F over 0.00 seconds
              • Custom script: call RemoveLocation( udg_AI_PickedUnit_F)
              • Custom script: call RemoveLocation( udg_AI_FormationP_FG)
              • Set AI_LoopIndex_F = (AI_LoopIndex_F + 1)
          • Unit Group - Pick every unit in AI_HordeGroup and do (Actions)
            • Loop - Actions
              • Set AI_Formation_Angle = ((Facing of AI_Emergency_Hero) + (0.00 + (((Real(AI_LoopIndex_H)) mod 8.00) x 45.00)))
              • Set AI_Formation_Radius = (AI_EmergencyWide_Radius + (((Real(AI_LoopIndex_H)) / 8.00) x AI_Emegency_I))
              • Set AI_FormationP_HG = (AI_TempPoint offset by AI_Formation_Radius towards AI_Formation_Angle degrees.)
              • Set AI_PickedUnit_P = (Position of (Picked unit))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between AI_PickedUnit_P and AI_FormationP_HG) Greater than or equal to 250.00
                • Then - Actions
                  • Unit - Order (Picked unit) to Move To AI_FormationP_HG
                • Else - Actions
                  • Unit - Make (Picked unit) face AI_Formation_Angle over 0.00 seconds
              • Custom script: call RemoveLocation( udg_AI_FormationP_HG)
              • Custom script: call RemoveLocation( udg_AI_PickedUnit_P)
              • Set AI_LoopIndex_H = (AI_LoopIndex_H + 1)
          • Custom script: call RemoveLocation( udg_AI_TempPoint)
        • Else - Actions
  • AI E Protection
    • Events
      • Time - Every 0.50 seconds of game time
    • Conditions
      • AI_Emergency Equal to True
      • AI_Cinematic Equal to False
      • AI_Emergency_Hero Not equal to No unit
    • Actions
      • Set AI_EnemiesNearHero_Previous = AI_Enemies_nearHero
      • Set AI_TempPoint = (Position of AI_Emergency_Hero)
      • Set AI_TempGroup = (Units within AI_Emergency_Protection_Range of AI_TempPoint matching ((((Matching unit) belongs to an enemy of (Owner of AI_Emergency_Hero).) Equal to True) and (((Matching unit) is alive) Equal to True)).)
      • Custom script: call RemoveLocation( udg_AI_TempPoint)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in AI_TempGroup) Greater than 0
        • Then - Actions
          • Set AI_Enemies_nearHero = True
          • Set AI_ThreatTarget = No unit
          • Set AI_Closest_Distance = (AI_Emergency_Protection_Range + 1.00)
          • Set AI_TempPoint = (Position of AI_Emergency_Hero)
          • Unit Group - Pick every unit in AI_TempGroup and do (Actions)
            • Loop - Actions
              • Set AI_PickedUnit_P = (Position of (Picked unit))
              • Set AI_Distance = (Distance between AI_TempPoint and AI_PickedUnit_P)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AI_Distance Less than AI_Closest_Distance
                • Then - Actions
                  • Set AI_Closest_Distance = AI_Distance
                  • Set AI_ThreatTarget = (Picked unit)
                • Else - Actions
          • Custom script: call RemoveLocation( udg_AI_TempPoint)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AI_ThreatTarget Not equal to No unit
            • Then - Actions
              • Unit Group - Pick every unit in AI_HordeGroup and do (Actions)
                • Loop - Actions
                  • Unit - Order (Picked unit) to Attack AI_ThreatTarget
              • Unit Group - Pick every unit in AI_ForsakenGroup and do (Actions)
                • Loop - Actions
                  • Unit - Order (Picked unit) to Attack AI_ThreatTarget
            • Else - Actions
        • Else - Actions
          • Set AI_Enemies_nearHero = False
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_EnemiesNearHero_Previous Equal to True
          • AI_Enemies_nearHero Equal to False
        • Then - Actions
          • Unit Group - Pick every unit in AI_HordeGroup and do (Actions)
            • Loop - Actions
              • Unit - Order (Picked unit) to Stop.
          • Unit Group - Pick every unit in AI_ForsakenGroup and do (Actions)
            • Loop - Actions
              • Unit - Order (Picked unit) to Stop.
        • Else - Actions
      • Custom script: call DestroyGroup( udg_AI_TempGroup)
  • AI Formation Forsaken
    • Events
      • Time - Every 0.33 seconds of game time
    • Conditions
      • AI_Emergency Equal to False
      • AI_Cinematic Equal to False
      • (Number of units in AI_ForsakenGroup) Greater than 0
    • Actions
      • Set AI_LoopIndex_F = 0
      • Set AI_TempPoint_FG = (Position of AI_Sylvanas)
      • Unit Group - Pick every unit in AI_ForsakenGroup and do (Actions)
        • Loop - Actions
          • Set AI_FormationAngle_F = ((Facing of AI_Sylvanas) + (180.00 + (((Real(AI_LoopIndex_F)) mod 8.00) x 45.00)))
          • Set AI_FormationRadius_F = (AI_FormationSpacing + (((Real(AI_LoopIndex_F)) / 8.00) x 80.00))
          • Set AI_FormationFacing_Angle = ((Facing of AI_Sylvanas) + 180.00)
          • Set AI_FormationP_FG = (AI_TempPoint_FG offset by AI_FormationRadius_F towards AI_FormationAngle_F degrees.)
          • Set AI_PickedUnit_F = (Position of (Picked unit))
          • Set AI_DistanceToHero = (Distance between AI_PickedUnit_F and AI_FormationP_FG)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (AI_ThreatTargetB_F Equal to False) and (AI_ThreatTarget_F Equal to No unit)
                  • AI_DistanceToHero Greater than AI_Groups_MaxCombatDistance
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between AI_PickedUnit_F and AI_FormationP_FG) Greater than 100.00
                • Then - Actions
                  • Unit - Order (Picked unit) to Move To AI_FormationP_FG
                • Else - Actions
            • Else - Actions
          • Custom script: call RemoveLocation( udg_AI_FormationP_FG)
          • Custom script: call RemoveLocation( udg_AI_PickedUnit_F)
          • Set AI_LoopIndex_F = (AI_LoopIndex_F + 1)
      • Custom script: call RemoveLocation( udg_AI_TempPoint_FG)
  • AI Formation Horde
    • Events
      • Time - Every 0.33 seconds of game time
    • Conditions
      • AI_Emergency Equal to False
      • AI_Cinematic Equal to False
      • (Number of units in AI_HordeGroup) Greater than 0
    • Actions
      • Set AI_LoopIndex_H = 0
      • Set AI_TempPoint_HG = (Position of AI_Thrall)
      • Unit Group - Pick every unit in AI_HordeGroup and do (Actions)
        • Loop - Actions
          • Set AI_Formation_Angle = ((Facing of AI_Thrall) + (180.00 + (((Real(AI_LoopIndex_H)) mod 8.00) x 45.00)))
          • Set AI_Formation_Radius = (AI_FormationSpacing + (((Real(AI_LoopIndex_H)) / 8.00) x 80.00))
          • Set AI_FormationFacing_Angle = ((Facing of AI_Thrall) + 180.00)
          • Set AI_FormationP_HG = (AI_TempPoint_HG offset by AI_Formation_Radius towards AI_Formation_Angle degrees.)
          • Set AI_PickedUnit_P = (Position of (Picked unit))
          • Set AI_DistanceToHero = (Distance between AI_PickedUnit_P and AI_FormationP_FG)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (AI_ThreatTargetB_H Equal to False) and (AI_ThreatTarget_H Equal to No unit)
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between AI_PickedUnit_P and AI_FormationP_HG) Greater than 100.00
                • Then - Actions
                  • Unit - Order (Picked unit) to Move To AI_FormationP_HG
                • Else - Actions
            • Else - Actions
          • Custom script: call RemoveLocation( udg_AI_FormationP_HG)
          • Custom script: call RemoveLocation( udg_AI_PickedUnit_P)
          • Set AI_LoopIndex_H = (AI_LoopIndex_H + 1)
      • Custom script: call RemoveLocation( udg_AI_TempPoint_HG)
  • Clean Dead Units in groups
    • Events
      • Time - Every 3.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in AI_ForsakenGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked unit) is alive) Equal to False
            • Then - Actions
              • Unit Group - Remove (Picked unit) from AI_ForsakenGroup.
            • Else - Actions
      • Unit Group - Pick every unit in AI_HordeGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked unit) is alive) Equal to False
            • Then - Actions
              • Unit Group - Remove (Picked unit) from AI_HordeGroup.
            • Else - Actions
  • AI Voljin Follow
    • Events
      • Time - Every 0.50 seconds of game time
    • Conditions
      • AI_Enabled Equal to True
      • AI_Cinematic Equal to False
      • AI_Voljin_Fleeing Equal to False
      • AI_Voljin Not equal to No unit
    • Actions
      • Set AI_Voljin_TempPoint = (Position of AI_Thrall)
      • Set AI_Voljin_TempPoint2 = (AI_Voljin_TempPoint offset by AI_Voljin_SafeDistance towards ((Facing of AI_Thrall) + 180.00) degrees.)
      • Set AI_Voljin_TempPoint3 = (Position of AI_Voljin)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Distance between AI_Voljin_TempPoint3 and AI_Voljin_TempPoint2) Greater than 100.00
        • Then - Actions
          • Unit - Order AI_Voljin to Move To AI_Voljin_TempPoint2
        • Else - Actions
      • Custom script: call RemoveLocation( udg_AI_Voljin_TempPoint)
      • Custom script: call RemoveLocation( udg_AI_Voljin_TempPoint2)
      • Custom script: call RemoveLocation( udg_AI_Voljin_TempPoint3)
  • AI Voljin Healing
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
      • AI_Cinematic Equal to False
      • AI_Enabled Equal to True
      • AI_Voljin Not equal to No unit
    • Actions
      • Set AI_Voljin_TempPoint = (Position of AI_Voljin)
      • Set AI_Voljin_TempGroup = (Units within AI_Voljin_HealRange of AI_Voljin_TempPoint matching ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an ally of (Owner of AI_Voljin).) Equal to True)).)
      • Custom script: call RemoveLocation( udg_AI_Voljin_TempPoint)
      • Set AI_Voljin_TempUnit = No unit
      • Set AI_Voljin_ClosestDistance = 101.00
      • Unit Group - Pick every unit in AI_Voljin_TempGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Percentage life of (Picked unit)) Less than AI_Voljin_HealTreshold
              • ((Picked unit) is A Hero) Equal to True
              • (Picked unit) Not equal to AI_Voljin
            • Then - Actions
              • Set AI_Voljin_Distance = (Percentage life of (Picked unit))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AI_Voljin_Distance Less than AI_Voljin_ClosestDistance
                • Then - Actions
                  • Set AI_Closest_Distance = AI_Voljin_Distance
                  • Set AI_Voljin_TempUnit = (Picked unit)
                • Else - Actions
            • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_Voljin_TempUnit Equal to No unit
        • Then - Actions
          • Set AI_Voljin_ClosestDistance = 101.00
          • Unit Group - Pick every unit in AI_Voljin_TempGroup and do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Percentage life of (Picked unit)) Less than AI_Voljin_HealTreshold
                  • (Picked unit) Not equal to AI_Voljin
                • Then - Actions
                  • Set AI_Voljin_Distance = (Percentage life of (Picked unit))
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AI_Voljin_Distance Less than AI_Voljin_ClosestDistance
                    • Then - Actions
                      • Set AI_Closest_Distance = AI_Voljin_Distance
                      • Set AI_Voljin_TempUnit = (Picked unit)
                    • Else - Actions
                • Else - Actions
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_Voljin_TempUnit Not equal to No unit
        • Then - Actions
          • Unit - Order AI_Voljin to Orc Shadow Hunter - Healing Wave AI_Voljin_TempUnit
        • Else - Actions
      • Custom script: call DestroyGroup( udg_AI_Voljin_TempGroup)
  • AI Voljin Flee
    • Events
      • Unit - Vol'jin 0037 <gen> Takes damage
    • Conditions
      • AI_Enabled Equal to True
      • AI_Cinematic Equal to False
    • Actions
      • Set AI_Voljin_Fleeing = True
      • Set AI_Voljin_FleeTarget = (Damage source)
      • Set AI_Voljin_TempPoint = (Position of AI_Voljin)
      • Set AI_Voljin_TempPoint2 = (Position of AI_Voljin_FleeTarget)
      • Set AI_Voljin_TempPoint3 = (AI_Voljin_TempPoint offset by AI_Voljin_FleeDistance towards (Angle from AI_Voljin_TempPoint2 to AI_Voljin_TempPoint) degrees.)
      • Unit - Order AI_Voljin to Move To AI_Voljin_TempPoint3
      • Custom script: call RemoveLocation( udg_AI_Voljin_TempPoint)
      • Custom script: call RemoveLocation( udg_AI_Voljin_TempPoint2)
      • Custom script: call RemoveLocation( udg_AI_Voljin_TempPoint3)
      • Countdown Timer - Start AI_Voljin_FleeTimer as a One-shot timer that will expire in 3.00 seconds
  • AI Voljin Timer Reset
    • Events
      • Time - AI_Voljin_FleeTimer expires
    • Conditions
    • Actions
      • Set AI_Voljin_Fleeing = False
  • AI Mort Follow
    • Events
      • Time - Every 0.40 seconds of game time
    • Conditions
      • AI_Enabled Equal to True
      • AI_Cinematic Equal to False
      • AI_Sylvanas Not equal to No unit
      • AI_Mort Not equal to No unit
    • Actions
      • Set AI_Mort_TempPoint = (Position of AI_Sylvanas)
      • Set AI_Mort_TempPoint2 = (AI_Mort_TempPoint offset by AI_Mort_FollowDistance towards ((Facing of AI_Sylvanas) + 90.00) degrees.)
      • Set AI_Mort_TempPoint3 = (Position of AI_Mort)
      • Set AI_Mort_Distance = (Distance between AI_Mort_TempPoint3 and AI_Mort_TempPoint)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Or - Any (Conditions) are true
            • Conditions
              • (Current order of AI_Mort) Not equal to (Order(attack))
              • AI_Mort_Distance Greater than AI_Mort_MaxCombatDistance
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Distance between AI_Mort_TempPoint2 and AI_Mort_TempPoint3) Greater than 100.00
            • Then - Actions
              • Unit - Order AI_Mort to Move To AI_Mort_TempPoint2
            • Else - Actions
        • Else - Actions
      • Custom script: call RemoveLocation( udg_AI_Mort_TempPoint)
      • Custom script: call RemoveLocation( udg_AI_Mort_TempPoint2)
      • Custom script: call RemoveLocation( udg_AI_Mort_TempPoint3)
  • AI Mort Protection
    • Events
      • Unit - Sylvanas 0004 <gen> Takes damage
    • Conditions
      • AI_Cinematic Equal to False
      • AI_Enabled Equal to True
      • AI_Mort Not equal to No unit
      • (Damage source) Not equal to No unit
    • Actions
      • Set AI_Mort_LastAttacker = (Damage source)
      • Unit - Order AI_Mort to Attack AI_Mort_LastAttacker
  • AI Mort Scan
    • Events
      • Time - Every 0.50 seconds of game time
    • Conditions
      • AI_Enabled Equal to True
      • AI_Mort Not equal to No unit
      • AI_Sylvanas Not equal to No unit
      • AI_Cinematic Equal to False
    • Actions
      • Set AI_Mort_TempPoint = (Position of AI_Sylvanas)
      • Set AI_Mort_TempGroup = (Units within AI_Mort_GuardRange of AI_Mort_TempPoint matching ((((Matching unit) belongs to an enemy of (Owner of AI_Sylvanas).) Equal to True) and (((Matching unit) is alive) Equal to True)).)
      • Custom script: call RemoveLocation( udg_AI_Mort_TempPoint)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in AI_Mort_TempGroup) Greater than 0
        • Then - Actions
          • Set AI_Mort_ClosestDistance = (AI_Mort_GuardRange + 1.00)
          • Set AI_Mort_TempUnit = No unit
          • Set AI_Mort_TempPoint = (Position of AI_Sylvanas)
          • Unit Group - Pick every unit in AI_Mort_TempGroup and do (Actions)
            • Loop - Actions
              • Set AI_Mort_TempPoint2 = (Position of (Picked unit))
              • Set AI_Mort_Distance = (Distance between AI_Mort_TempPoint and AI_Mort_TempPoint2)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AI_Mort_Distance Less than AI_Mort_ClosestDistance
                • Then - Actions
                  • Set AI_Mort_ClosestDistance = AI_Mort_Distance
                  • Set AI_Mort_TempUnit = (Picked unit)
                • Else - Actions
              • Custom script: call RemoveLocation( udg_AI_Mort_TempPoint2)
          • Custom script: call RemoveLocation( udg_AI_Mort_TempPoint)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AI_Mort_TempUnit Not equal to No unit
            • Then - Actions
              • Unit - Order AI_Mort to Attack AI_Mort_TempUnit
            • Else - Actions
        • Else - Actions
      • Custom script: call DestroyGroup( udg_AI_Mort_TempGroup)



 
Last edited:
Back
Top