• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

BAmr Hashtable & PDD system

Level 25
Joined
Feb 9, 2009
Messages
1,800
Configuration
  • BAmr Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Hashtable - Create a hashtable
      • Set BAmr_Hashtable = (Last created hashtable)
      • -------- This value represents how often the BAmr Peridic will run. --------
      • Set BAmr_PERIODIC = 0.03
      • Trigger - Add to BAmr Periodic <gen> the event (Time - Every BAmr_PERIODIC seconds of game time)
      • -------- --------
      • -------- This value indicates what spell is being used by the caster --------
      • Set BAmr_SPELL = Bone Armor BAmr
      • -------- --------
      • -------- This value indicates which buff will be detected when the enchanted unit is struck, and which buff the enchanted unit needs to keep the effect going. --------
      • Set BAmr_BUFF = Bone Armor BAmr
      • -------- --------
      • -------- Spell stat values --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Then - Actions
          • -------- This indicates the base value for the shield --------
          • Set BAmr_BASE_HP = 100.00
          • -------- This indicates the base value for the shield --------
          • -------- --------
          • -------- This value will determine the increase in shield health if the hero invests skill points into the Ability --------
          • Set BAmr_LVL_HP_BONUS[1] = 200.00
          • Set BAmr_LVL_HP_BONUS[2] = 400.00
          • Set BAmr_LVL_HP_BONUS[3] = 600.00
          • -------- This value will determine the increase in shield health if the hero invests skill points into the Ability --------
          • -------- --------
          • -------- This value decides what percentage of the caster's Strength will be used to boost Bone Armor's Health (Default: 0.00) --------
          • Set BAmr_ATT_BONUS[1] = 0.00
          • -------- This value decides what percentage of the caster's Agility will be used to boost Bone Armor's Health (Default: 0.00) --------
          • Set BAmr_ATT_BONUS[2] = 0.00
          • -------- This value decides what percentage of the caster's Intelligence will be used to boost Bone Armor's Health (Default: 0.00) --------
          • Set BAmr_ATT_BONUS[3] = 0.00
          • -------- --------
          • -------- This value denotes of what percentage of the damage will be taken by the shield. Default:1.00 (100%) --------
          • -------- Example: 0.5 means only 50% of incoming damage will be taken by the shield and will be dealt to the unit --------
          • Set BAmr_ABSORBTION_PERCENTAGE = 1.00
          • -------- --------
          • -------- These two values determine what percentage of physical or Spell damage it will resist. Default: 1.00 (100%) --------
          • -------- Not to be confused with the previous value --------
          • -------- Example: Spell Resist at 2.00 means that spell damage will deal 200% more damage --------
          • -------- Setting either of these values to 0.00 will ignore that type of damage --------
          • Set BAmr_RESIST_SPELL = 1.00
          • Set BAmr_RESIST_PHYSICAL = 1.00
          • -------- --------
        • Else - Actions
      • -------- Spell stat values --------
      • -------- --------
      • -------- This value determines the "Flavour" of the Shield, the number corresponds with the options below, match it to get the intended effect --------
      • Set BAmr_Flavor = 23
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Then - Actions
          • -------- Flavors --------
          • -------- --------
          • -------- 23 --------
          • -------- Lime / Necro --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BAmr_Flavor Equal to 23
            • Then - Actions
              • Set BAmr_Flavor_Path[0] = Abilities\Weapons\NecromancerMissile\NecromancerMissile.mdl
              • Set BAmr_Flavor_Path[1] = Abilities\Spells\Undead\RaiseSkeletonWarrior\RaiseSkeleton.mdl
              • Set BAmr_Flavor_Path[2] = Abilities\Spells\Undead\RaiseSkeletonWarrior\RaiseSkeleton.mdl
              • Set BAmr_Flavor_Path[3] = BoneArmorCasterTC.mdx
            • Else - Actions
          • -------- 23 --------
          • -------- --------
          • -------- 1 --------
          • -------- Red / Fire --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BAmr_Flavor Equal to 1
            • Then - Actions
              • Set BAmr_Flavor_Path[0] = Abilities\Weapons\FireBallMissile\FireBallMissile.mdl
              • Set BAmr_Flavor_Path[1] = Abilities\Spells\Items\AIfb\AIfbSpecialArt.mdl
              • Set BAmr_Flavor_Path[2] = Abilities\Spells\Items\AIfb\AIfbSpecialArt.mdl
              • Set BAmr_Flavor_Path[3] = BoneArmorCasterTC.mdx
            • Else - Actions
          • -------- 1 --------
          • -------- --------
          • -------- 2 --------
          • -------- Blue / Frost --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BAmr_Flavor Equal to 2
            • Then - Actions
              • Set BAmr_Flavor_Path[0] = Abilities\Spells\Other\FrostBolt\FrostBoltMissile.mdl
              • Set BAmr_Flavor_Path[1] = Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl
              • Set BAmr_Flavor_Path[2] = Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl
              • Set BAmr_Flavor_Path[3] = BoneArmorCasterTC.mdx
            • Else - Actions
          • -------- 2 --------
          • -------- --------
          • -------- 3 --------
          • -------- Teal / Ocean --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BAmr_Flavor Equal to 3
            • Then - Actions
              • Set BAmr_Flavor_Path[0] = Abilities\Weapons\SeaElementalMissile\SeaElementalMissile.mdl
              • Set BAmr_Flavor_Path[1] = Abilities\Spells\Other\CrushingWave\CrushingWaveDamage.mdl
              • Set BAmr_Flavor_Path[2] = Abilities\Spells\Other\CrushingWave\CrushingWaveDamage.mdl
              • Set BAmr_Flavor_Path[3] = BoneArmorCasterTC.mdx
            • Else - Actions
          • -------- 3 --------
          • -------- --------
          • -------- 4 --------
          • -------- Purple / Ooze? --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BAmr_Flavor Equal to 4
            • Then - Actions
              • Set BAmr_Flavor_Path[0] = Abilities\Weapons\SludgeMissile\SludgeMissile.mdl
              • Set BAmr_Flavor_Path[1] = Abilities\Spells\Undead\DarkRitual\DarkRitualTarget.mdl
              • Set BAmr_Flavor_Path[2] = Abilities\Spells\Items\AIil\AIilTarget.mdl
              • Set BAmr_Flavor_Path[3] = BoneArmorCasterTC.mdx
            • Else - Actions
          • -------- 4 --------
          • -------- --------
          • -------- 5 --------
          • -------- Yellow / Holy --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BAmr_Flavor Equal to 5
            • Then - Actions
              • Set BAmr_Flavor_Path[0] = Abilities\Weapons\FaerieDragonMissile\FaerieDragonMissile.mdl
              • Set BAmr_Flavor_Path[1] = Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl
              • Set BAmr_Flavor_Path[2] = Abilities\Spells\Other\HealingSpray\HealBottleMissile.mdl
              • Set BAmr_Flavor_Path[3] = BoneArmorCasterTC.mdx
            • Else - Actions
          • -------- 5 --------
          • -------- --------
          • -------- 6 --------
          • -------- Orange / Drunk --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BAmr_Flavor Equal to 6
            • Then - Actions
              • Set BAmr_Flavor_Path[0] = Abilities\Spells\Other\StrongDrink\BrewmasterMissile.mdl
              • Set BAmr_Flavor_Path[1] = Abilities\Spells\Orc\SpiritLink\SpiritLinkZapTarget.mdl
              • Set BAmr_Flavor_Path[2] = Abilities\Spells\Human\Feedback\SpellBreakerAttack.mdl
              • Set BAmr_Flavor_Path[3] = BoneArmorCasterTC.mdx
            • Else - Actions
          • -------- 6 --------
          • -------- --------
          • -------- 7 --------
          • -------- Green / Nature --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BAmr_Flavor Equal to 7
            • Then - Actions
              • Set BAmr_Flavor_Path[0] = Abilities\Weapons\KeeperGroveMissile\KeeperGroveMissile.mdl
              • Set BAmr_Flavor_Path[1] = Objects\Spawnmodels\NightElf\EntBirthTarget\EntBirthTarget.mdl
              • Set BAmr_Flavor_Path[2] = Objects\Spawnmodels\NightElf\EntBirthTarget\EntBirthTarget.mdl
              • Set BAmr_Flavor_Path[3] = BoneArmorCasterTC.mdx
            • Else - Actions
          • -------- 7 --------
          • -------- --------
          • -------- 8 --------
          • -------- Pink / Darkness --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • BAmr_Flavor Equal to 8
            • Then - Actions
              • Set BAmr_Flavor_Path[0] = Abilities\Weapons\VoidWalkerMissile\VoidWalkerMissile.mdl
              • Set BAmr_Flavor_Path[1] = Abilities\Spells\Undead\OrbOfDeath\AnnihilationMissile.mdl
              • Set BAmr_Flavor_Path[2] = Abilities\Spells\Undead\OrbOfDeath\AnnihilationMissile.mdl
              • Set BAmr_Flavor_Path[3] = BoneArmorCasterTC.mdx
            • Else - Actions
          • -------- 8 --------
          • -------- --------
          • -------- Flavors --------
        • Else - Actions
      • -------- This value determines the "Flavour" of the Shield, the number corresponds with the options below, match it to get the intended effect --------
      • -------- --------
      • -------- --------
      • -------- Special effects & related values --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Then - Actions
          • -------- --------
          • -------- This path denotes what form the orbiting segments will take. --------
          • Set BAmr_EFFECTPATH[0] = BAmr_Flavor_Path[0]
          • -------- This path denotes what form the orbiting segments will take. --------
          • -------- --------
          • -------- This value indicates what effect will occur when the segments are first spawned --------
          • Set BAmr_EFFECTPATH[1] = BAmr_Flavor_Path[1]
          • -------- This value indicates what effect will occur when the segments are first spawned --------
          • -------- --------
          • -------- This value indicates what effect will occur when the segments are destroyed --------
          • Set BAmr_EFFECTPATH[2] = BAmr_Flavor_Path[2]
          • -------- This value indicates what effect will occur when the segments are destroyed --------
          • -------- --------
          • -------- This value indicates what effect will occur when the enchanted unit is struck --------
          • Set BAmr_EFFECTPATH[3] = BAmr_Flavor_Path[3]
          • -------- This value indicates what effect will occur when the enchanted unit is struck --------
          • -------- --------
          • -------- Values contained within directly influence the "shield flare" effect governed by BAmr_EFFECTPATH[3] --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
            • Then - Actions
              • -------- --------
              • -------- This Value determines whether or not you want the "Shield Flare Effect" to match the player's colour or to a specific colour --------
              • Set BAmr_Boolean[1] = False
              • -------- --------
              • -------- Offset will determine how far away the Special effect will be created from the enchanted target --------
              • -------- PLAYER COLOUR --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • BAmr_Boolean[1] Equal to False
                • Then - Actions
                  • Set BAmr_SPEF_VALUE[0] = (Real(BAmr_Flavor))
                • Else - Actions
              • -------- --------
              • -------- Offset will determine how far away the Special effect will be created from the enchanted target --------
              • -------- OFFSET --------
              • Set BAmr_SPEF_VALUE[1] = 85.00
              • -------- Offset will determine how far away the Special effect will be created from the enchanted target --------
              • -------- --------
              • -------- Height will determine at what height the Special effect will be created, starting from the enchanted target's current height & Z Height. --------
              • -------- HEIGHT --------
              • Set BAmr_SPEF_VALUE[2] = 65.00
              • -------- Height will determine at what height the Special effect will be created, starting from the enchanted target's current height --------
              • -------- --------
              • -------- Scale will determine the percentage of scale the Special effect will have --------
              • -------- SCALE --------
              • Set BAmr_SPEF_VALUE[3] = 0.90
              • -------- Scale will determine the percentage of scale the Special effect will have --------
              • -------- --------
              • -------- Timescale will determine the speed of the special effect's animation --------
              • -------- TIMESCALE --------
              • Set BAmr_SPEF_VALUE[4] = 7.50
              • -------- Timescale will determine the speed of the special effect's animation --------
              • -------- --------
              • -------- RGB value from 0 - 255 will determine what colors will be present in the special effect (note this requires a lot of experimentation) --------
              • -------- from 1 - 3 is RED, GREEN, BLUE --------
              • Set BAmr_SPEF_VALUE[5] = 255.00
              • Set BAmr_SPEF_VALUE[6] = 255.00
              • Set BAmr_SPEF_VALUE[7] = 255.00
              • -------- from 1 - 3 is RED, GREEN, BLUE --------
              • -------- RGB value from 0 - 255 will determine what colors will be present in the special effect (note this requires a lot of experimentation) --------
              • -------- --------
              • -------- YPR will determine in order of apperance, Yaw, Pitch, & Roll. --------
              • -------- Thanks to Hermit, the model provided already has an orienation to 90 degrees we need not add it, but I will leave these all the same for interesting effects! --------
              • -------- The Values are calculated as (( X * 3.14 ) / 180 ), X being the value below --------
              • -------- To flip normally horizontal models like the default spirit touch, all values below must be set to 1.57 or ((90 x 3.14 /) 180) --------
              • -------- from 8 - 10 is YAW, PITCH, ROLL --------
              • -------- --------
              • Set BAmr_SPEF_VALUE[8] = 0.00
              • -------- YAW --------
              • -------- --------
              • Set BAmr_SPEF_VALUE[9] = 0.00
              • -------- PITCH --------
              • -------- --------
              • Set BAmr_SPEF_VALUE[10] = 0.00
              • -------- ROLL --------
              • -------- --------
              • -------- YPR will determine in order of apperance, Yaw, Pitch, & Roll. --------
              • -------- --------
              • -------- This Value checks whether or not the Shield flare intensity will match the shield's current health --------
              • Set BAmr_Boolean[2] = True
              • -------- If Above Boolean is true, this handles the minimum the shield will fade to. --------
              • Set BAmr_SPEF_VALUE[11] = 50.00
              • -------- --------
            • Else - Actions
          • -------- Values contained within directly influence the "shield flare" effect governed by BAmr_EFFECTPATH[3] --------
          • -------- --------
        • Else - Actions
      • -------- Special effects & related values --------
      • -------- --------
      • -------- Segement orbit values --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Then - Actions
          • -------- --------
          • -------- This value indicates how "segments" will orbit around the enchanted Target. --------
          • Set BAmr_SEGMENT_SPAWNED = 3
          • -------- --------
          • -------- This value indicates how far away the "segments" orbit away from the enchanted Target. --------
          • Set BAmr_SEGMENT_O_OFFSET = 60.00
          • -------- This value indicates how far away the segments spawn from the their target --------
          • Set BAmr_SEGMENT_OFFSET = 120.00
          • -------- --------
          • -------- This value indicates at what height the segment will be at in addition the the unit's flying height --------
          • Set BAmr_SEGMENT_HEIGHT = 65.00
          • -------- --------
          • -------- This value indicates how far apart the segements will spawn from, this is default to a 360 --------
          • Set BAmr_SEGMENT_ANGLE = 360.00
          • -------- --------
          • -------- This value indicates where the segments will be offset from --------
          • Set BAmr_SEGMENT_SPAWN = 1
          • -------- 1 (DEFAULT) Caster's Position --------
          • -------- 2 Target's Position --------
          • -------- --------
          • -------- This value indicates how fast the "segments" orbit around the enchanted Target. --------
          • Set BAmr_SEGMENT_O_SPEED = 1.00
          • -------- --------
          • -------- This value indicates how fast the "segments" intially move towards the enchanted Target. --------
          • Set BAmr_MISSILE_SPEED = 18.00
        • Else - Actions
      • -------- Segement orbit values --------
      • -------- --------
      • -------- Preload --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Then - Actions
          • Set BAmr_Point[1] = (Center of (Playable map area))
          • Unit - Create 1 Chicken for Neutral Passive at BAmr_Point[1] facing Default building facing degrees
          • Set BAmr_Target = (Last created unit)
          • Unit - Add BAmr_SPELL to BAmr_Target
          • Unit - Add a 0.03 second Generic expiration timer to BAmr_Target
          • Custom script: call RemoveLocation(udg_BAmr_Point[1])
        • Else - Actions
      • -------- Preload --------

Cast
  • BAmr Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to BAmr_SPELL
    • Actions
      • Set BAmr_Caster = (Triggering unit)
      • Set BAmr_Target = (Target unit of ability being cast)
      • Set BAmr_Point[1] = (Position of BAmr_Caster)
      • Set BAmr_Point[2] = (Position of BAmr_Target)
      • Set BAmr_ATTRIBUTE[1] = ((Real((Strength of BAmr_Caster (Include bonuses)))) x BAmr_ATT_BONUS[1])
      • Set BAmr_ATTRIBUTE[2] = ((Real((Agility of BAmr_Caster (Include bonuses)))) x BAmr_ATT_BONUS[2])
      • Set BAmr_ATTRIBUTE[3] = ((Real((Intelligence of BAmr_Caster (Include bonuses)))) x BAmr_ATT_BONUS[3])
      • Set BAmr_Health = ((BAmr_BASE_HP + BAmr_LVL_HP_BONUS[(Level of BAmr_SPELL for BAmr_Caster)]) + (BAmr_ATTRIBUTE[1] + (BAmr_ATTRIBUTE[2] + BAmr_ATTRIBUTE[3])))
      • Set BAmr_Max = BAmr_Health
      • Set BAmr_Damage_Taken = 0.00
      • -------- Convert Values to Hashtable --------
      • Hashtable - Save BAmr_Health as (Key Health) of (Key (Target unit of ability being cast)) in BAmr_Hashtable
      • Hashtable - Save BAmr_Max as (Key Max) of (Key (Target unit of ability being cast)) in BAmr_Hashtable
      • Hashtable - Save BAmr_SEGMENT_SPAWNED as (Key S_Count) of (Key (Target unit of ability being cast)) in BAmr_Hashtable
      • Hashtable - Save BAmr_Damage_Taken as (Key Total) of (Key (Target unit of ability being cast)) in BAmr_Hashtable
      • For each (Integer BAmr_Loop) from 1 to BAmr_SEGMENT_SPAWNED, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Load (Key (state + (String(BAmr_Loop)))) of (Key (Target unit of ability being cast)) from BAmr_Hashtable) Not equal to Alive
            • Then - Actions
              • Set BAmr_Point[3] = (BAmr_Point[BAmr_SEGMENT_SPAWN] offset by BAmr_SEGMENT_OFFSET towards ((BAmr_SEGMENT_ANGLE / (Real(BAmr_SEGMENT_SPAWNED))) x (Real(BAmr_Loop))) degrees)
              • Special Effect - Create a special effect at BAmr_Point[3] using BAmr_EFFECTPATH[0]
              • Hashtable - Save Handle Of(Last created special effect) as (Key (Seg + (String(BAmr_Loop)))) of (Key (Target unit of ability being cast)) in BAmr_Hashtable
              • Hashtable - Save Alive as (Key (state + (String(BAmr_Loop)))) of (Key (Target unit of ability being cast)) in BAmr_Hashtable
            • Else - Actions
              • Set BAmr_Point[3] = (Point((Position - X of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Target unit of ability being cast)) in BAmr_Hashtable)), (Position - Y of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Target unit of ability being cast)) in BAmr_Hashtable))))
          • Special Effect - Create a special effect at BAmr_Point[3] using BAmr_EFFECTPATH[1]
          • Special Effect - Destroy (Last created special effect)
          • Custom script: call RemoveLocation(udg_BAmr_Point[3])
      • Custom script: call RemoveLocation(udg_BAmr_Point[1])
      • Custom script: call RemoveLocation(udg_BAmr_Point[2])
      • Unit Group - Add BAmr_Target to BAmr_GROUP
      • Set BAmr_Instances = (BAmr_Instances + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • BAmr_Instances Equal to 1
        • Then - Actions
          • Trigger - Turn on BAmr Periodic <gen>
          • Trigger - Turn on BAmr Block <gen>
        • Else - Actions

Block
  • BAmr Periodic
    • Events
    • Conditions
    • Actions
      • Unit Group - Pick every unit in BAmr_GROUP and do (Actions)
        • Loop - Actions
          • Set BAmr_Picked_Unit = (Picked unit)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (BAmr_Picked_Unit is alive) Equal to True
              • (BAmr_Picked_Unit has buff BAmr_BUFF) Equal to True
            • Then - Actions
              • For each (Integer BAmr_Loop) from 1 to BAmr_SEGMENT_SPAWNED, do (Actions)
                • Loop - Actions
                  • Set BAmr_Point[1] = (Position of BAmr_Picked_Unit)
                  • Set BAmr_Point[3] = (Point((Position - X of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable)), (Position - Y of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable))))
                  • Custom script: set udg_BAmr_Spef_Current_Height = GetLocationZ(udg_BAmr_Point[1])
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between BAmr_Point[1] and BAmr_Point[3]) Less than (BAmr_SEGMENT_O_OFFSET + 15.00)
                    • Then - Actions
                      • Set BAmr_Current_Rot_Speed = (Load (Key Rotation Speed) of (Key (Picked unit)) from BAmr_Hashtable)
                      • Set BAmr_Current_Rot_Speed = (BAmr_Current_Rot_Speed + BAmr_SEGMENT_O_SPEED)
                      • Hashtable - Save BAmr_Current_Rot_Speed as (Key Rotation Speed) of (Key (Picked unit)) in BAmr_Hashtable
                      • Set BAmr_Point[2] = (BAmr_Point[1] offset by BAmr_SEGMENT_O_OFFSET towards (((360.00 / (Real(BAmr_SEGMENT_SPAWNED))) x (Real(BAmr_Loop))) + BAmr_Current_Rot_Speed) degrees)
                      • Special Effect - Set Position of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable) to x: (X of BAmr_Point[2]), y: (Y of BAmr_Point[2]), z: ((BAmr_Spef_Current_Height + BAmr_SEGMENT_HEIGHT) + (Current flying height of BAmr_Picked_Unit))
                      • Special Effect - Set Roll of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable) to: (((Angle from BAmr_Point[3] to BAmr_Point[2]) x 3.14) / 180.00)
                    • Else - Actions
                      • Set BAmr_Point[2] = (BAmr_Point[3] offset by BAmr_MISSILE_SPEED towards (Angle from BAmr_Point[3] to BAmr_Point[1]) degrees)
                      • Special Effect - Set Position of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable) to x: (X of BAmr_Point[2]), y: (Y of BAmr_Point[2]), z: ((BAmr_Spef_Current_Height + BAmr_SEGMENT_HEIGHT) + (Current flying height of BAmr_Picked_Unit))
                      • Special Effect - Set Roll of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable) to: (((Angle from BAmr_Point[3] to BAmr_Point[2]) x 3.14) / 180.00)
                  • Custom script: call RemoveLocation(udg_BAmr_Point[1])
                  • Custom script: call RemoveLocation(udg_BAmr_Point[2])
                  • Custom script: call RemoveLocation(udg_BAmr_Point[3])
                  • -------- --------
            • Else - Actions
              • For each (Integer BAmr_Loop) from 1 to BAmr_SEGMENT_SPAWNED, do (Actions)
                • Loop - Actions
                  • Hashtable - Save Dead as (Key (State + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable
                  • Special Effect - Destroy (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable)
                  • Set BAmr_Point[3] = (Point((Position - X of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable)), (Position - Y of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable))))
                  • Special Effect - Create a special effect at BAmr_Point[3] using BAmr_EFFECTPATH[2]
                  • Special Effect - Destroy (Last created special effect)
                  • Custom script: call RemoveLocation(udg_BAmr_Point[3])
              • Unit Group - Remove BAmr_Picked_Unit from BAmr_GROUP
              • Set BAmr_Instances = (BAmr_Instances - 1)
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in BAmr_Hashtable
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • BAmr_Instances Less than 1
                • Then - Actions
                  • Trigger - Turn off BAmr Periodic <gen>
                  • Trigger - Turn off BAmr Block <gen>
                • Else - Actions
              • -------- --------

Periodic
  • BAmr Periodic
    • Events
    • Conditions
    • Actions
      • Unit Group - Pick every unit in BAmr_GROUP and do (Actions)
        • Loop - Actions
          • Set BAmr_Picked_Unit = (Picked unit)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (BAmr_Picked_Unit is alive) Equal to True
              • (BAmr_Picked_Unit has buff BAmr_BUFF) Equal to True
            • Then - Actions
              • For each (Integer BAmr_Loop) from 1 to BAmr_SEGMENT_SPAWNED, do (Actions)
                • Loop - Actions
                  • Set BAmr_Point[1] = (Position of BAmr_Picked_Unit)
                  • Set BAmr_Point[3] = (Point((Position - X of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable)), (Position - Y of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable))))
                  • Custom script: set udg_BAmr_Spef_Current_Height = GetLocationZ(udg_BAmr_Point[1])
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between BAmr_Point[1] and BAmr_Point[3]) Less than (BAmr_SEGMENT_O_OFFSET + 15.00)
                    • Then - Actions
                      • Set BAmr_Current_Rot_Speed = (Load (Key Rotation Speed) of (Key (Picked unit)) from BAmr_Hashtable)
                      • Set BAmr_Current_Rot_Speed = (BAmr_Current_Rot_Speed + BAmr_SEGMENT_O_SPEED)
                      • Hashtable - Save BAmr_Current_Rot_Speed as (Key Rotation Speed) of (Key (Picked unit)) in BAmr_Hashtable
                      • Set BAmr_Point[2] = (BAmr_Point[1] offset by BAmr_SEGMENT_O_OFFSET towards (((360.00 / (Real(BAmr_SEGMENT_SPAWNED))) x (Real(BAmr_Loop))) + BAmr_Current_Rot_Speed) degrees)
                      • Special Effect - Set Position of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable) to x: (X of BAmr_Point[2]), y: (Y of BAmr_Point[2]), z: ((BAmr_Spef_Current_Height + BAmr_SEGMENT_HEIGHT) + (Current flying height of BAmr_Picked_Unit))
                      • Special Effect - Set Roll of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable) to: (((Angle from BAmr_Point[3] to BAmr_Point[2]) x 3.14) / 180.00)
                    • Else - Actions
                      • Set BAmr_Point[2] = (BAmr_Point[3] offset by BAmr_MISSILE_SPEED towards (Angle from BAmr_Point[3] to BAmr_Point[1]) degrees)
                      • Special Effect - Set Position of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable) to x: (X of BAmr_Point[2]), y: (Y of BAmr_Point[2]), z: ((BAmr_Spef_Current_Height + BAmr_SEGMENT_HEIGHT) + (Current flying height of BAmr_Picked_Unit))
                      • Special Effect - Set Roll of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable) to: (((Angle from BAmr_Point[3] to BAmr_Point[2]) x 3.14) / 180.00)
                  • Custom script: call RemoveLocation(udg_BAmr_Point[1])
                  • Custom script: call RemoveLocation(udg_BAmr_Point[2])
                  • Custom script: call RemoveLocation(udg_BAmr_Point[3])
                  • -------- --------
            • Else - Actions
              • For each (Integer BAmr_Loop) from 1 to BAmr_SEGMENT_SPAWNED, do (Actions)
                • Loop - Actions
                  • Hashtable - Save Dead as (Key (State + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable
                  • Special Effect - Destroy (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable)
                  • Set BAmr_Point[3] = (Point((Position - X of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable)), (Position - Y of (Load (Key (Seg + (String(BAmr_Loop)))) of (Key (Picked unit)) in BAmr_Hashtable))))
                  • Special Effect - Create a special effect at BAmr_Point[3] using BAmr_EFFECTPATH[2]
                  • Special Effect - Destroy (Last created special effect)
                  • Custom script: call RemoveLocation(udg_BAmr_Point[3])
              • Unit Group - Remove BAmr_Picked_Unit from BAmr_GROUP
              • Set BAmr_Instances = (BAmr_Instances - 1)
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in BAmr_Hashtable
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • BAmr_Instances Less than 1
                • Then - Actions
                  • Trigger - Turn off BAmr Periodic <gen>
                  • Trigger - Turn off BAmr Block <gen>
                • Else - Actions
              • -------- --------

Attachments

  • Bone Armor v1.11 HASTABLE AND PDD SYSTEM.w3x
    63.9 KB · Views: 246
Last edited:
Top