protected override void DoAction(BossPartStateController controller) { BossPart bossPart = controller.bossPart; Ability ability = AbilityUtils.FindAbilityByName( "Boss_MiniDebuffAoeAbility", bossPart.GetAbilityAgent().abilitiesMulti ); if (!ability || !(ability is AoeAbility)) { return; } AoeAbility aoeAbility = (AoeAbility)ability; var reachabeEnemies = WorkManager.FindReachableObjects(controller.nearbyEnemies, bossPart.transform.position, ability.range); // wait till at least 2 targets are reachable if (ability != null && ability.IsReady() && reachabeEnemies.Count > 1) { var abilityTarget = AoeUtils.GetAoeTargetPosition( ability.range, reachabeEnemies, bossPart.GetPlayer() ); bossPart.UseAbility(abilityTarget, aoeAbility); } }
protected override void DoAction(UnitStateController controller) { Unit unit = controller.unit; Ability abilityToUse = controller.abilityToUse; if (!abilityToUse || !(abilityToUse is AoeAbility)) { return; } AoeAbility aoeAbility = (AoeAbility)abilityToUse; if (controller.aoeAbilityTarget == new Vector3()) { controller.unit.UseAbility(unit.transform.position, aoeAbility); controller.abilityToUse = null; } Vector3 currentPosition = unit.transform.position; Vector3 direction = controller.aoeAbilityTarget - currentPosition; if (direction.sqrMagnitude < aoeAbility.range * aoeAbility.range) { controller.unit.UseAbility(controller.aoeAbilityTarget, aoeAbility); if (!unit.aiming) { controller.abilityToUse = null; } } }
public EarthSpirit(Unit9 owner, MultiSleeper abilitySleeper, Sleeper orbwalkSleeper, ControllableUnitMenu menu) : base(owner, abilitySleeper, orbwalkSleeper, menu) { this.ComboAbilities = new Dictionary <AbilityId, Func <ActiveAbility, UsableAbility> > { { AbilityId.earth_spirit_boulder_smash, x => this.smash = new BoulderSmash(x) }, { AbilityId.earth_spirit_rolling_boulder, x => this.rolling = new RollingBoulder(x) }, { AbilityId.earth_spirit_geomagnetic_grip, x => this.grip = new GeomagneticGrip(x) }, { AbilityId.earth_spirit_magnetize, x => this.mag = new AoeAbility(x) }, { AbilityId.earth_spirit_stone_caller, x => this.stone = new StoneRemnant(x) }, //{ AbilityId.earth_spirit_petrify, x => this.petrify = new NukeAbility(x) }, { AbilityId.item_blink, x => this.blink = new BlinkAbility(x) }, { AbilityId.item_swift_blink, x => this.blink = new BlinkAbility(x) }, { AbilityId.item_arcane_blink, x => this.blink = new BlinkAbility(x) }, { AbilityId.item_overwhelming_blink, x => this.blink = new BlinkAbility(x) }, { AbilityId.item_force_staff, x => this.force = new ForceStaff(x) }, { AbilityId.item_spirit_vessel, x => this.vessel = new DebuffAbility(x) }, { AbilityId.item_urn_of_shadows, x => this.urn = new DebuffAbility(x) }, { AbilityId.item_veil_of_discord, x => this.veil = new DebuffAbility(x) }, { AbilityId.item_blade_mail, x => this.bladeMail = new ShieldAbility(x) }, { AbilityId.item_heavens_halberd, x => this.halberd = new DisableAbility(x) }, { AbilityId.item_shivas_guard, x => this.shiva = new DebuffAbility(x) }, }; this.MoveComboAbilities.Add(AbilityId.earth_spirit_rolling_boulder, x => this.rollingBlink = new RollingBoulderBlink(x)); this.MoveComboAbilities.Add(AbilityId.earth_spirit_stone_caller, x => this.stoneBlink = new StoneRemnantBlink(x)); this.MoveComboAbilities.Add(AbilityId.earth_spirit_boulder_smash, _ => this.smash); }
public virtual void UseAbility(Vector3 position, AoeAbility ability) { if (!isBusy && ability.IsReady()) { ability.Use(position); } }
public Storm(Unit9 owner, MultiSleeper abilitySleeper, Sleeper orbwalkSleeper, ControllableUnitMenu menu) : base(owner, abilitySleeper, orbwalkSleeper, menu) { this.ComboAbilities = new Dictionary <AbilityId, Func <ActiveAbility, UsableAbility> > { { AbilityId.brewmaster_storm_cyclone, x => this.cyclone = new Cyclone(x) }, { AbilityId.brewmaster_storm_dispel_magic, x => this.dispel = new Dispel(x) }, { AbilityId.brewmaster_storm_wind_walk, x => this.windWalk = new WindWalk(x) }, { AbilityId.brewmaster_cinder_brew, x => this.cender = new DebuffAbility(x) }, }; this.MoveComboAbilities.Add(AbilityId.brewmaster_storm_wind_walk, _ => this.windWalk); }
public Enigma(Unit9 owner, MultiSleeper abilitySleeper, Sleeper orbwalkSleeper, ControllableUnitMenu menu) : base(owner, abilitySleeper, orbwalkSleeper, menu) { this.ComboAbilities = new Dictionary <AbilityId, Func <ActiveAbility, UsableAbility> > { { AbilityId.enigma_malefice, x => this.malefice = new DisableAbility(x) }, { AbilityId.enigma_midnight_pulse, x => this.pulse = new AoeAbility(x) }, { AbilityId.enigma_black_hole, x => this.blackHole = new BlackHole(x) }, { AbilityId.item_black_king_bar, x => this.bkb = new ShieldAbility(x) }, { AbilityId.item_ghost, x => this.ghost = new ShieldAbility(x) }, { AbilityId.item_blink, x => this.blink = new BlinkDaggerEnigma(x) }, { AbilityId.item_refresher, x => this.refresher = new UntargetableAbility(x) }, { AbilityId.item_refresher_shard, x => this.refresherShard = new UntargetableAbility(x) }, { AbilityId.item_shivas_guard, x => this.shiva = new DebuffAbility(x) }, }; }
public Venomancer(Unit9 owner, MultiSleeper abilitySleeper, Sleeper orbwalkSleeper, ControllableUnitMenu menu) : base(owner, abilitySleeper, orbwalkSleeper, menu) { this.ComboAbilities = new Dictionary <AbilityId, Func <ActiveAbility, UsableAbility> > { { AbilityId.venomancer_venomous_gale, x => this.gale = new DebuffAbility(x) }, { AbilityId.venomancer_plague_ward, x => this.ward = new PlagueWardAbility(x) }, { AbilityId.venomancer_poison_nova, x => this.nova = new PoisonNova(x) }, { AbilityId.item_veil_of_discord, x => this.veil = new DebuffAbility(x) }, { AbilityId.item_blink, x => this.blink = new BlinkDaggerAOE(x) }, { AbilityId.item_shivas_guard, x => this.shiva = new DebuffAbility(x) }, { AbilityId.item_force_staff, x => this.force = new ForceStaff(x) }, { AbilityId.item_orchid, x => this.orchid = new DisableAbility(x) }, { AbilityId.item_bloodthorn, x => this.bloodthorn = new Bloodthorn(x) }, }; this.MoveComboAbilities.Add(AbilityId.venomancer_venomous_gale, _ => this.gale); }
public Razor(Unit9 owner, MultiSleeper abilitySleeper, Sleeper orbwalkSleeper, ControllableUnitMenu menu) : base(owner, abilitySleeper, orbwalkSleeper, menu) { this.ComboAbilities = new Dictionary <AbilityId, Func <ActiveAbility, UsableAbility> > { { AbilityId.razor_plasma_field, x => this.plasma = new NukeAbility(x) }, { AbilityId.razor_static_link, x => this.link = new StaticLink(x) }, { AbilityId.razor_eye_of_the_storm, x => this.storm = new AoeAbility(x) }, { AbilityId.item_phase_boots, x => this.phase = new SpeedBuffAbility(x) }, { AbilityId.item_force_staff, x => this.force = new ForceStaff(x) }, { AbilityId.item_hurricane_pike, x => this.pike = new HurricanePike(x) }, { AbilityId.item_blade_mail, x => this.bladeMail = new ShieldAbility(x) }, { AbilityId.item_rod_of_atos, x => this.atos = new DisableAbility(x) }, { AbilityId.item_black_king_bar, x => this.bkb = new ShieldAbility(x) }, { AbilityId.item_shivas_guard, x => this.shiva = new DebuffAbility(x) }, { AbilityId.item_heavens_halberd, x => this.halberd = new DisableAbility(x) }, }; }
protected override void DoAction(UnitStateController controller) { Unit unit = controller.unit; WorldObject chaseTarget = controller.enemyAbilityTarget ? controller.enemyAbilityTarget : controller.chaseTarget; Ability ability = controller.abilityToUse; if (!ability) { return; } if (ability is AoeAbility) { AoeAbility aoeAbility = (AoeAbility)ability; // for now, all AoE are self-AoE controller.unit.UseAbility(unit.transform.position, aoeAbility); controller.abilityToUse = null; return; } // if no target or canтot attack, return if (!ability || chaseTarget == null || !unit.CanAttack()) { return; } Vector3 currentPosition = unit.transform.position; Vector3 currentEnemyPosition = WorkManager.GetTargetClosestPoint(unit, chaseTarget); Vector3 direction = currentEnemyPosition - currentPosition; if (direction.sqrMagnitude < ability.range * ability.range) { controller.unit.UseAbility(chaseTarget, ability); if (!unit.aiming) { controller.abilityToUse = null; } } }
public Pugna(Unit9 owner, MultiSleeper abilitySleeper, Sleeper orbwalkSleeper, ControllableUnitMenu menu) : base(owner, abilitySleeper, orbwalkSleeper, menu) { this.ComboAbilities = new Dictionary <AbilityId, Func <ActiveAbility, UsableAbility> > { { AbilityId.pugna_nether_blast, x => this.blast = new NukeAbility(x) }, { AbilityId.pugna_decrepify, x => this.decrepify = new DebuffAbility(x) }, { AbilityId.pugna_nether_ward, x => this.ward = new AoeAbility(x) }, { AbilityId.pugna_life_drain, x => this.drain = new TargetableAbility(x) }, { AbilityId.item_blink, x => this.blink = new BlinkAbility(x) }, { AbilityId.item_dagon_5, x => this.dagon = new NukeAbility(x) }, { AbilityId.item_sheepstick, x => this.hex = new DisableAbility(x) }, { AbilityId.item_orchid, x => this.orchid = new DisableAbility(x) }, { AbilityId.item_veil_of_discord, x => this.veil = new DebuffAbility(x) }, { AbilityId.item_bloodthorn, x => this.bloodthorn = new Bloodthorn(x) }, { AbilityId.item_nullifier, x => this.nullifier = new Nullifier(x) }, { AbilityId.item_rod_of_atos, x => this.atos = new DisableAbility(x) }, }; }
protected override void DoAction(UnitStateController controller) { Unit unit = controller.unit; Ability abilityToUse = controller.abilityToUse; if (!abilityToUse) { return; } if (abilityToUse is AoeAbility) { AoeAbility aoeAbility = (AoeAbility)abilityToUse; // for now, all AoE are self-AoE controller.unit.UseAbility(unit.transform.position, aoeAbility); controller.abilityToUse = null; return; } Vector3 currentPosition = unit.transform.position; List <WorldObject> reachableEnemies = controller.nearbyEnemies .Where(p => { Vector3 currentEnemyPosition = WorkManager.GetTargetClosestPoint(unit, p); Vector3 direction = currentEnemyPosition - currentPosition; return(direction.sqrMagnitude < abilityToUse.range * abilityToUse.range); }) .ToList(); if (reachableEnemies.Count > 0) { controller.unit.UseAbility(reachableEnemies, abilityToUse); controller.abilityToUse = null; } }