public void Initialize(IClassRotation specialization) { settings = RogueSettings.Current; if (settings.PartyDrinkName != "") { ToolBox.AddToDoNotSellList(settings.PartyDrinkName); } cast = new Cast(SinisterStrike, null, settings); this.specialization = specialization as Rogue; (RotationType, RotationRole) = ToolBox.GetRotationType(specialization); TalentsManager.InitTalents(settings); RangeManager.SetRangeToMelee(); AddPoisonsToNoSellList(); FightEvents.OnFightEnd += FightEndHandler; FightEvents.OnFightStart += FightStartHandler; MovementEvents.OnMoveToPulse += MoveToPulseHandler; FightEvents.OnFightLoop += FightLoopHandler; OthersEvents.OnAddBlackListGuid += BlackListHandler; EventsLuaWithArgs.OnEventsLuaStringWithArgs += EventsWithArgsHandler; Rotation(); }
public void Initialize(IClassRotation specialization) { settings = WarlockSettings.Current; if (settings.PartyDrinkName != "") { ToolBox.AddToDoNotSellList(settings.PartyDrinkName); } cast = new Cast(ShadowBolt, UseWand, settings); this.specialization = specialization as Warlock; (RotationType, RotationRole) = ToolBox.GetRotationType(specialization); TalentsManager.InitTalents(settings); WarlockPetAndConsumables.Setup(); _petPulseThread.DoWork += PetThread; _petPulseThread.RunWorkerAsync(); RangeManager.SetRange(ShadowBolt.MaxRange); // Set pet mode if (settings.PetInPassiveWhenOOC) { Lua.LuaDoString("PetPassiveMode();"); } else { Lua.LuaDoString("PetDefensiveMode();"); } FightEvents.OnFightEnd += FightEndHandler; FightEvents.OnFightStart += FightStartHandler; Rotation(); }
public void Initialize(IClassRotation specialization) { settings = ShamanSettings.Current; if (settings.PartyDrinkName != "") { ToolBox.AddToDoNotSellList(settings.PartyDrinkName); } cast = new Cast(LightningBolt, null, settings); _totemManager = new TotemManager(cast); this.specialization = specialization as Shaman; (RotationType, RotationRole) = ToolBox.GetRotationType(specialization); TalentsManager.InitTalents(settings); ToolBox.AddToDoNotSellList("Air Totem"); ToolBox.AddToDoNotSellList("Earth Totem"); ToolBox.AddToDoNotSellList("Water Totem"); ToolBox.AddToDoNotSellList("Fire Totem"); RangeManager.SetRange(_pullRange); FightEvents.OnFightEnd += FightEndHandler; FightEvents.OnFightStart += FightStartHandler; FightEvents.OnFightLoop += FightLoopHandler; Rotation(); }
private void FightEndHandler(ulong guid) { _fightingACaster = false; _isStealthApproching = false; _myBestBandage = null; RangeManager.SetRangeToMelee(); }
protected override void BuffRotation() { RangeManager.SetRange(30); if (!Me.HaveBuff("Drink") || Me.ManaPercentage > 95) { base.BuffRotation(); } }
private void Rotation() { while (Main.isLaunched) { try { if (Me.HaveBuff("Feign Death")) { Thread.Sleep(500); Move.Backward(Move.MoveAction.PressKey, 100); cast.OnTarget(AutoShot); } if (StatusChecker.BasicConditions() && !Me.IsMounted && !Me.HaveBuff("Food") && !Me.HaveBuff("Drink")) { if (_canOnlyMelee) { RangeManager.SetRangeToMelee(); } else { RangeManager.SetRange(AutoShot.MaxRange - 1); } if (Me.Level >= 10) { PetManager(); } } if (StatusChecker.OutOfCombat(RotationRole)) { specialization.BuffRotation(); } if (StatusChecker.InPull()) { specialization.Pull(); } if (StatusChecker.InCombat()) { specialization.CombatRotation(); } } catch (Exception arg) { Logging.WriteError("ERROR: " + arg, true); } Thread.Sleep(ToolBox.GetLatency() + settings.ThreadSleepCycle); } Logger.Log("Stopped."); }
// EVENT HANDLERS private void FightEndHandler(ulong guid) { _iCanUseWand = false; RangeManager.SetRange(ShadowBolt.MaxRange); _addCheckTimer.Reset(); if (settings.PetInPassiveWhenOOC) { Lua.LuaDoString("PetPassiveMode();"); } }
public void Sell() { if (ableToSell) { RangeManager rangeMan = GameObject.FindGameObjectWithTag("RangeManager").GetComponent <RangeManager>(); rangeMan.ResetRanges(); Destroy(selectedTower); totalMoney += selectedSellPrice; selectedSellPrice = 0; } }
protected override void BuffRotation() { if (!Me.HaveBuff("Drink") || Me.ManaPercentage > 95) { base.BuffRotation(); if (_knowImprovedScorch) { RangeManager.SetRange(Scorch.MaxRange); } else { RangeManager.SetRange(Fireball.MaxRange); } // Molten Armor if (!Me.HaveBuff("Molten Armor") && cast.OnSelf(MoltenArmor)) { return; } // Mage Armor if (!Me.HaveBuff("Mage Armor") && !MoltenArmor.KnownSpell && cast.OnSelf(MageArmor)) { return; } // Ice Armor if (!Me.HaveBuff("Ice Armor") && (!MoltenArmor.KnownSpell && !MageArmor.KnownSpell) && cast.OnSelf(IceArmor)) { return; } // Frost Armor if (!Me.HaveBuff("Frost Armor") && (!MoltenArmor.KnownSpell && !MageArmor.KnownSpell && !IceArmor.KnownSpell) && cast.OnSelf(FrostArmor)) { return; } // PARTY Drink if (AIOParty.PartyDrink(settings.PartyDrinkName, settings.PartyDrinkThreshold)) { return; } } }
public void Awake() { rangeMan = GameObject.FindGameObjectWithTag("RangeManager").GetComponent <RangeManager>(); if (gameObject.GetComponent <HighlightPath>() != null) { h = GetComponent <HighlightPath>(); } tim = maxTim; realTower = realTowerObject.GetComponentInChildren <Tower>(); if (range != null && realTower != null) { range.transform.localScale = new Vector3(realTower.rad * 2, range.transform.localScale.y, realTower.rad * 2); range.transform.position = transform.position; } }
protected override void Pull() { base.Pull(); // Bear Form if (!CatForm.KnownSpell && !Me.HaveBuff(BearForm.Name) && cast.OnSelf(BearForm)) { return; } // Cat Form if (!Me.HaveBuff(CatForm.Name) && cast.OnSelf(CatForm)) { return; } // Prowl if (Me.HaveBuff(CatForm.Name) && !Me.HaveBuff(Prowl.Name) && ObjectManager.Target.GetDistance > 15f && ObjectManager.Target.GetDistance < 25f && settings.StealthEngage && cast.OnSelf(Prowl)) { return; } // Pull Bear/Cat if (Me.HaveBuff("Bear Form") || Me.HaveBuff("Dire Bear Form") || Me.HaveBuff("Cat Form")) { RangeManager.SetRangeToMelee(); // Prowl approach if (Me.HaveBuff("Prowl") && ObjectManager.Target.GetDistance > 3f && !_isStealthApproching) { StealthApproach(); } return; } }
protected override void OnTouch(object sender, InfoEventArgs <Point> e) { Tile tile = Board.GetTile(e.info); if (tile.content == null) { return; } Unit unit = tile.content.GetComponent <Unit>(); if (unit && unit.turn.IsAvailable() && RoundController.RoundSide == unit.alliance) { RangeManager.GetRanges(unit); RoundController.Select(unit); owner.ChangeState <SelectActionState>(); } }
public void Initialize(IClassRotation specialization) { settings = PriestSettings.Current; if (settings.PartyDrinkName != "") { ToolBox.AddToDoNotSellList(settings.PartyDrinkName); } cast = new Cast(Smite, UseWand, settings); this.specialization = specialization as Priest; (RotationType, RotationRole) = ToolBox.GetRotationType(specialization); TalentsManager.InitTalents(settings); _wandThreshold = settings.WandThreshold > 100 ? 50 : settings.WandThreshold; RangeManager.SetRange(28f); FightEvents.OnFightEnd += FightEndHandler; FightEvents.OnFightStart += FightStartHandler; Rotation(); }
// EVENT HANDLERS private void FightEndHandler(ulong guid) { cast.IsBackingUp = false; _iCanUseWand = false; _polymorphableEnemyInThisFight = false; _isPolymorphing = false; RangeManager.SetRange(Fireball.MaxRange); if (!Fight.InFight && Me.InCombatFlagOnly && _polymorphedEnemy != null && ObjectManager.GetNumberAttackPlayer() < 1 && _polymorphedEnemy.IsAlive) { Logger.Log($"Starting fight with {_polymorphedEnemy.Name} (polymorphed)"); Fight.InFight = false; Fight.CurrentTarget = _polymorphedEnemy; ulong _enemyGUID = _polymorphedEnemy.Guid; _polymorphedEnemy = null; Fight.StartFight(_enemyGUID); } }
protected override void Pull() { base.Pull(); RangeManager.SetRangeToMelee(); // Check if caster if (_casterEnemies.Contains(ObjectManager.Target.Name)) { _fightingACaster = true; } // Remove Ghost Wolf if (Me.HaveBuff("Ghost Wolf") && cast.OnSelf(GhostWolf)) { return; } // Water Shield if (!Me.HaveBuff("Water Shield") && !Me.HaveBuff("Lightning Shield") && (settings.UseWaterShield || !settings.UseLightningShield || Me.ManaPercentage < _lowManaThreshold) && cast.OnSelf(WaterShield)) { return; } // Ligntning Shield if (Me.ManaPercentage > _lowManaThreshold && !Me.HaveBuff("Lightning Shield") && !Me.HaveBuff("Water Shield") && settings.UseLightningShield && (!WaterShield.KnownSpell || !settings.UseWaterShield) && cast.OnSelf(LightningShield)) { return; } }
public void Initialize(IClassRotation specialization) { settings = MageSettings.Current; if (settings.PartyDrinkName != "") { ToolBox.AddToDoNotSellList(settings.PartyDrinkName); } cast = new Cast(Fireball, UseWand, settings); _foodManager = new MageFoodManager(cast); this.specialization = specialization as Mage; (RotationType, RotationRole) = ToolBox.GetRotationType(specialization); TalentsManager.InitTalents(settings); RangeManager.SetRange(30); FightEvents.OnFightEnd += FightEndHandler; FightEvents.OnFightStart += FightStartHandler; FightEvents.OnFightLoop += FightLoopHandler; Rotation(); }
public void Initialize(IClassRotation specialization) { RangeManager.SetRange(28); settings = DruidSettings.Current; if (settings.PartyDrinkName != "") { ToolBox.AddToDoNotSellList(settings.PartyDrinkName); } cast = new Cast(Wrath, null, settings); this.specialization = specialization as Druid; (RotationType, RotationRole) = ToolBox.GetRotationType(specialization); TalentsManager.InitTalents(settings); FightEvents.OnFightEnd += FightEndHandler; FightEvents.OnFightStart += FightStartHandler; FightEvents.OnFightLoop += FightLoopHandler; MovementEvents.OnMoveToPulse += MoveToPulseHandler; OthersEvents.OnAddBlackListGuid += BlackListHandler; Rotation(); }
protected override void Pull() { base.Pull(); RangeManager.SetRangeToMelee(); // Check if caster in list if (_casterEnemies.Contains(ObjectManager.Target.Name)) { _fightingACaster = true; } // Charge Berserker Stance if (InBerserkStance() && ObjectManager.Target.GetDistance > 9f && ObjectManager.Target.GetDistance < 24f && ObjectManager.Target.HealthPercent < 90 && cast.OnTarget(Intercept)) { return; } }
protected override void Pull() { base.Pull(); RangeManager.SetRangeToMelee(); // Check if caster in list if (_casterEnemies.Contains(ObjectManager.Target.Name)) { _fightingACaster = true; } // Stealth if (!Me.HaveBuff("Stealth") && ObjectManager.Target.GetDistance > 15f && ObjectManager.Target.GetDistance < 25f && settings.StealthApproach && Backstab.KnownSpell && (!ToolBox.HasPoisonDebuff() || settings.StealthWhenPoisoned) && cast.OnSelf(Stealth)) { return; } // Stealth approach if (Me.HaveBuff("Stealth") && ObjectManager.Target.GetDistance > 3f && !_isStealthApproching) { StealthApproach(); } // Auto if (ObjectManager.Target.GetDistance < 6f && !Me.HaveBuff("Stealth")) { ToggleAutoAttack(true); } }
protected void StealthApproach() { RangeManager.SetRangeToMelee(); Timer stealthApproachTimer = new Timer(15000); _isStealthApproching = true; if (ObjectManager.Me.IsAlive && ObjectManager.Target.IsAlive) { while (Conditions.InGameAndConnectedAndAliveAndProductStartedNotInPause && ObjectManager.Target.GetDistance > 2.5f && (specialization.RotationType == Enums.RotationType.Party || ToolBox.GetClosestHostileFrom(ObjectManager.Target, 20f) == null) && Fight.InFight && !stealthApproachTimer.IsReady && Me.HaveBuff("Stealth")) { ToggleAutoAttack(false); Vector3 position = ToolBox.BackofVector3(ObjectManager.Target.Position, ObjectManager.Target, 2.5f); MovementManager.MoveTo(position); Thread.Sleep(50); CastOpener(); } if (stealthApproachTimer.IsReady && ToolBox.Pull(cast, settings.AlwaysPull, new List <AIOSpell> { Shoot, Throw })) { _combatMeleeTimer = new Timer(2000); return; } //ToolBox.CheckAutoAttack(Attack); _isStealthApproching = false; } }
private void FightLoopHandler(WoWUnit unit, CancelEventArgs cancelable) { float minDistance = RangeManager.GetMeleeRangeWithTarget() + 3f; // Do we need to backup? if ((ObjectManager.Target.HaveBuff("Frostbite") || ObjectManager.Target.HaveBuff("Frost Nova")) && ObjectManager.Target.GetDistance < minDistance && Me.IsAlive && ObjectManager.Target.IsAlive && !cast.IsBackingUp && !Me.IsCast && !RangeManager.CurrentRangeIsMelee() && ObjectManager.Target.HealthPercent > 5 && !_isPolymorphing) { cast.IsBackingUp = true; Timer timer = new Timer(3000); // Using CTM if (settings.BackupUsingCTM) { Vector3 position = ToolBox.BackofVector3(Me.Position, Me, 15f); MovementManager.Go(PathFinder.FindPath(position), false); Thread.Sleep(500); // Backup loop while (MovementManager.InMoveTo && Conditions.InGameAndConnectedAndAliveAndProductStartedNotInPause && ObjectManager.Target.GetDistance < minDistance && ObjectManager.Me.IsAlive && ObjectManager.Target.IsAlive && (ObjectManager.Target.HaveBuff("Frostbite") || ObjectManager.Target.HaveBuff("Frost Nova")) && !timer.IsReady) { // Wait follow path Thread.Sleep(300); if (settings.BlinkWhenBackup) { cast.OnSelf(Blink); } } MovementManager.StopMove(); Thread.Sleep(500); } // Using Keyboard else { while (Conditions.InGameAndConnectedAndAliveAndProductStartedNotInPause && ObjectManager.Me.IsAlive && ObjectManager.Target.IsAlive && ObjectManager.Target.GetDistance < minDistance && (ObjectManager.Target.HaveBuff("Frostbite") || ObjectManager.Target.HaveBuff("Frost Nova")) && !timer.IsReady) { Move.Backward(Move.MoveAction.PressKey, 500); } } cast.IsBackingUp = false; } // Polymorph if (settings.UsePolymorph && ObjectManager.GetNumberAttackPlayer() > 1 && Polymorph.KnownSpell && !cast.IsBackingUp && !cast.IsApproachingTarget && specialization.RotationType != Enums.RotationType.Party && _polymorphableEnemyInThisFight) { WoWUnit myNearbyPolymorphed = null; // Detect if a polymorph cast has succeeded if (_polymorphedEnemy != null) { myNearbyPolymorphed = ObjectManager.GetObjectWoWUnit().Find(u => u.HaveBuff("Polymorph") && u.Guid == _polymorphedEnemy.Guid); } // If we don't have a polymorphed enemy if (myNearbyPolymorphed == null) { _polymorphedEnemy = null; _isPolymorphing = true; WoWUnit firstTarget = ObjectManager.Target; WoWUnit potentialPolymorphTarget = null; // Select our attackers one by one for potential polymorphs foreach (WoWUnit enemy in ObjectManager.GetUnitAttackPlayer()) { Interact.InteractGameObject(enemy.GetBaseAddress); if ((enemy.CreatureTypeTarget == "Beast" || enemy.CreatureTypeTarget == "Humanoid") && enemy.Guid != firstTarget.Guid) { potentialPolymorphTarget = enemy; break; } } if (potentialPolymorphTarget == null) { _polymorphableEnemyInThisFight = false; } // Polymorph cast if (potentialPolymorphTarget != null && _polymorphedEnemy == null && cast.OnFocusUnit(Polymorph, potentialPolymorphTarget)) { Usefuls.WaitIsCasting(); _polymorphedEnemy = potentialPolymorphTarget; } _isPolymorphing = false; } } }
protected override void CombatRotation() { // Reactivate auto attack (after dragon's breath) if (!ToolBox.UsingWand()) { ToolBox.CheckAutoAttack(Attack); } base.CombatRotation(); WoWUnit Target = ObjectManager.Target; // Stop wand use on multipull if (_iCanUseWand && ObjectManager.GetNumberAttackPlayer() > 1) { _iCanUseWand = false; } // Remove Curse if (ToolBox.HasCurseDebuff()) { Thread.Sleep(Main.humanReflexTime); if (cast.OnSelf(RemoveCurse)) { return; } } // Mana Shield if (!Me.HaveBuff("Mana Shield") && (Me.HealthPercent < 30 && Me.ManaPercentage > 50 || Me.HealthPercent < 10) && cast.OnTarget(ManaShield)) { return; } // Use Mana Stone if ((ObjectManager.GetNumberAttackPlayer() > 1 && Me.ManaPercentage < 50 || Me.ManaPercentage < 5) && _foodManager.UseManaStone()) { return; } // Combustion if (!Me.HaveBuff("Combustion") && cast.OnSelf(Combustion)) { return; } // Blast Wave if (settings.BlastWaveOnMulti && ToolBox.GetNbEnemiesClose(10) > 1 && ObjectManager.GetNumberAttackPlayer() > 1 && cast.OnSelf(BlastWave)) { return; } // Dragon's Breath if (Target.GetDistance <= 10f && settings.UseDragonsBreath && (Target.HealthPercent > settings.WandThreshold || ObjectManager.GetNumberAttackPlayer() > 1 || Me.HealthPercent < 40 || !_iCanUseWand) && _polymorphedEnemy == null && cast.OnSelf(DragonsBreath)) { return; } // Fire Blast if (Target.HealthPercent <= settings.FireblastThreshold && (Target.HealthPercent > settings.WandThreshold || ObjectManager.GetNumberAttackPlayer() > 1 || Me.HealthPercent < 40 || !_iCanUseWand) && !Target.HaveBuff("Polymorph") && cast.OnTarget(FireBlast)) { return; } // Cone of Cold if (Target.GetDistance < 10 && settings.UseConeOfCold && _polymorphedEnemy == null && cast.OnTarget(ConeOfCold)) { return; } // FireBall if ((Target.HealthPercent > settings.WandThreshold || ObjectManager.GetNumberAttackPlayer() > 1 || Me.HealthPercent < 40 || !_iCanUseWand) && !Target.HaveBuff("Polymorph") && cast.OnTarget(Fireball)) { return; } // Stop wand if banned if (ToolBox.UsingWand() && UnitImmunities.Contains(ObjectManager.Target, "Shoot")) { if (cast.OnTarget(UseWand)) { return; } } // Spell if wand banned if (UnitImmunities.Contains(ObjectManager.Target, "Shoot")) { if (cast.OnTarget(Fireball) || cast.OnTarget(Frostbolt) || cast.OnTarget(ArcaneMissiles)) { return; } } // Use Wand if (!ToolBox.UsingWand() && _iCanUseWand && !cast.IsBackingUp && !MovementManager.InMovement) { if (cast.OnTarget(UseWand, false)) { return; } } // Go in melee because nothing else to do if (!ToolBox.UsingWand() && !UseWand.IsSpellUsable && !RangeManager.CurrentRangeIsMelee() && !cast.IsBackingUp && Target.IsAlive) { Logger.Log("Going in melee"); RangeManager.SetRangeToMelee(); return; } }
protected override void CombatRotation() { base.CombatRotation(); WoWUnit Target = ObjectManager.Target; bool _shouldBeInterrupted = ToolBox.TargetIsCasting(); bool _inMeleeRange = Target.GetDistance < RangeManager.GetMeleeRangeWithTarget(); bool _saveRage = Cleave.KnownSpell && ObjectManager.GetNumberAttackPlayer() > 1 && ToolBox.GetNbEnemiesClose(15f) > 1 && settings.UseCleave || Execute.KnownSpell && Target.HealthPercent < 40 || Bloodthirst.KnownSpell && ObjectManager.Me.Rage < 40 && Target.HealthPercent > 50; // Check Auto-Attacking ToolBox.CheckAutoAttack(Attack); // Check if we need to interrupt if (_shouldBeInterrupted) { _fightingACaster = true; if (!_casterEnemies.Contains(Target.Name)) { _casterEnemies.Add(Target.Name); } } // Intercept if (ObjectManager.Target.GetDistance > 12f && ObjectManager.Target.HealthPercent < 90 && ObjectManager.Target.GetDistance < 24f && cast.OnTarget(Intercept)) { return; } // Berserker stance if (!InBerserkStance() && cast.OnSelf(BerserkerStance)) { return; } // Interrupt if (_shouldBeInterrupted && cast.OnTarget(Pummel)) { return; } // Victory Rush if (cast.OnTarget(VictoryRush)) { return; } // Rampage if (!Me.HaveBuff("Rampage") || Me.HaveBuff("Rampage") && ToolBox.BuffTimeLeft("Rampage") < 10) { if (cast.OnTarget(Rampage)) { return; } } // Execute if (cast.OnTarget(Execute)) { return; } // Overpower if (cast.OnTarget(Overpower)) { return; } // Bloodthirst if (_inMeleeRange && cast.OnTarget(Bloodthirst)) { return; } // Whirlwind if (_inMeleeRange && Me.Rage > 30 && cast.OnTarget(Whirlwind)) { return; } // Sweeping Strikes if (_inMeleeRange && ToolBox.GetNbEnemiesClose(15f) > 1 && cast.OnTarget(SweepingStrikes)) { return; } // Cleave if (_inMeleeRange && ToolBox.GetNbEnemiesClose(15f) > 1 && (!SweepingStrikes.IsSpellUsable || !SweepingStrikes.KnownSpell) && ObjectManager.Me.Rage > 40 && settings.UseCleave && cast.OnTarget(Cleave)) { return; } // Blood Rage if (settings.UseBloodRage && Me.HealthPercent > 90 && cast.OnSelf(BloodRage)) { return; } // Hamstring if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) && _inMeleeRange && settings.UseHamstring && Target.HealthPercent < 40 && !Target.HaveBuff("Hamstring") && cast.OnTarget(Hamstring)) { return; } // Commanding Shout if (!Me.HaveBuff("Commanding Shout") && settings.UseCommandingShout && cast.OnSelf(CommandingShout)) { return; } // Battle Shout if (!Me.HaveBuff("Battle Shout") && (!settings.UseCommandingShout || !CommandingShout.KnownSpell) && cast.OnSelf(BattleShout)) { return; } // Heroic Strike (after whirlwind) if (_inMeleeRange && !HeroicStrikeOn() && Me.Rage > 60 && cast.OnTarget(HeroicStrike)) { return; } // Heroic Strike (before whirlwind) if (_inMeleeRange && !Whirlwind.KnownSpell && !HeroicStrikeOn() && (!_saveRage || Me.Rage > 60) && cast.OnTarget(HeroicStrike)) { return; } }
protected override void HealerCombat() { base.HealerCombat(); WoWUnit Target = ObjectManager.Target; WoWPlayer allyNeedBigHeal = AIOParty.GroupAndRaid .Find(a => a.IsAlive && a.HealthPercent < 40); RangeManager.SetRange(25); // Remove Ghost Wolf if (Me.HaveBuff("Ghost Wolf") && cast.OnSelf(GhostWolf)) { return; } // PARTY Healing Wave with NATURE SWIFTNESS if (Me.HaveBuff("Nature's Swiftness")) { if (allyNeedBigHeal != null && cast.OnFocusUnit(HealingWave, allyNeedBigHeal)) { return; } } // Party Nature's Swiftness if (allyNeedBigHeal != null && !Me.HaveBuff("Nature's Swiftness") && cast.OnSelf(NaturesSwiftness)) { return; } // PARTY Lesser Healing Wave List <AIOPartyMember> alliesNeedingLesserHealWave = AIOParty.GroupAndRaid .FindAll(a => a.IsAlive && a.HealthPercent < settings.PartyLesserHealingWaveThreshold) .OrderBy(a => a.HealthPercent) .ToList(); if (alliesNeedingLesserHealWave.Count > 0 && cast.OnFocusUnit(LesserHealingWave, alliesNeedingLesserHealWave[0])) { return; } // PARTY Healing Wave List <AIOPartyMember> alliesNeedingHealWave = AIOParty.GroupAndRaid .FindAll(a => a.IsAlive && a.HealthPercent < settings.PartyHealingWaveThreshold) .OrderBy(a => a.HealthPercent) .ToList(); if (alliesNeedingHealWave.Count > 0 && cast.OnFocusUnit(HealingWave, alliesNeedingHealWave[0])) { return; } // PARTY Chain Heal List <AIOPartyMember> alliesNeedChainHeal = AIOParty.GroupAndRaid .FindAll(a => a.IsAlive && a.HealthPercent < settings.PartyChainHealThreshold) .OrderBy(a => a.GetDistance) .ToList(); if (alliesNeedChainHeal.Count >= settings.PartyChainHealAmount) { if (alliesNeedChainHeal.Exists(p => p.Guid == Me.Guid) && cast.OnSelf(ChainHeal)) { return; } if (cast.OnFocusUnit(ChainHeal, alliesNeedChainHeal[0])) { return; } } // PARTY Earth Shield if (EarthShield.KnownSpell && !AIOParty.GroupAndRaid.Exists(a => a.HaveBuff("Earth Shield"))) { foreach (WoWPlayer player in AIOParty.GroupAndRaid.FindAll(p => p.IsAlive && p.WowClass != wManager.Wow.Enums.WoWClass.Shaman)) { List <WoWUnit> enemiesTargetingHim = AIOParty.EnemiesFighting .FindAll(e => e.Target == player.Guid); if (enemiesTargetingHim.Count > 1 && cast.OnFocusUnit(EarthShield, player)) { return; } } } // PARTY Cure Poison if (settings.PartyCurePoison) { WoWPlayer needCurePoison = AIOParty.GroupAndRaid .Find(m => ToolBox.HasPoisonDebuff(m.Name)); if (needCurePoison != null && cast.OnFocusUnit(CurePoison, needCurePoison)) { return; } } // PARTY Cure Disease if (settings.PartyCureDisease) { WoWPlayer needCureDisease = AIOParty.GroupAndRaid .Find(m => m.IsAlive && ToolBox.HasDiseaseDebuff(m.Name)); if (needCureDisease != null && cast.OnFocusUnit(CureDisease, needCureDisease)) { return; } } // Bloodlust if (!Me.HaveBuff("Bloodlust") && Target.HealthPercent > 80 && cast.OnSelf(Bloodlust)) { return; } // Water Shield if (!Me.HaveBuff("Water Shield") && !Me.HaveBuff("Lightning Shield") && (settings.UseWaterShield || !settings.UseLightningShield || Me.ManaPercentage <= _lowManaThreshold) && cast.OnSelf(WaterShield)) { return; } // Totems if (_totemManager.CastTotems(specialization)) { return; } }
private void Awake() { rangeMan = GameObject.FindGameObjectWithTag("RangeManager").GetComponent <RangeManager>(); }
protected override void CombatRotation() { base.CombatRotation(); bool _shouldBeInterrupted = ToolBox.TargetIsCasting(); WoWUnit Target = ObjectManager.Target; // Force melee if (_combatMeleeTimer.IsReady) { RangeManager.SetRangeToMelee(); } // Check Auto-Attacking ToolBox.CheckAutoAttack(Attack); // Check if interruptable enemy is in list if (_shouldBeInterrupted) { _fightingACaster = true; RangeManager.SetRangeToMelee(); if (!_casterEnemies.Contains(ObjectManager.Target.Name)) { _casterEnemies.Add(ObjectManager.Target.Name); } } // Kick interrupt if (_shouldBeInterrupted) { Thread.Sleep(Main.humanReflexTime); if (cast.OnTarget(Kick) || cast.OnTarget(Gouge) || cast.OnTarget(KidneyShot)) { return; } } // Adrenaline Rush if ((ObjectManager.GetNumberAttackPlayer() > 1 || Target.IsElite) && !Me.HaveBuff("Adrenaline Rush")) { if (cast.OnTarget(AdrenalineRush)) { return; } } // Blade Flurry if (ObjectManager.GetNumberAttackPlayer() > 1 && !Me.HaveBuff("Blade Flurry")) { if (cast.OnTarget(BladeFlurry)) { return; } } // Riposte if (Riposte.IsSpellUsable && (Target.CreatureTypeTarget.Equals("Humanoid") || settings.RiposteAll)) { if (cast.OnTarget(Riposte)) { return; } } // Bandage if (Target.HaveBuff("Blind")) { MovementManager.StopMoveTo(true, 500); ItemsManager.UseItemByNameOrId(_myBestBandage); Logger.Log("Using " + _myBestBandage); Usefuls.WaitIsCasting(); return; } // Blind if (Me.HealthPercent < 40 && !ToolBox.HasDebuff("Recently Bandaged") && _myBestBandage != null && settings.UseBlindBandage) { if (cast.OnTarget(Blind)) { return; } } // Evasion if (ObjectManager.GetNumberAttackPlayer() > 1 || Me.HealthPercent < 30 && !Me.HaveBuff("Evasion") && Target.HealthPercent > 50) { if (cast.OnTarget(Evasion)) { return; } } // Cloak of Shadows if (Me.HealthPercent < 30 && !Me.HaveBuff("Cloak of Shadows") && Target.HealthPercent > 50) { if (cast.OnTarget(CloakOfShadows)) { return; } } // Backstab in combat if (IsTargetStunned() && ToolBox.GetMHWeaponType().Equals("Daggers")) { if (cast.OnTarget(Backstab)) { return; } } // Slice and Dice if (!Me.HaveBuff("Slice and Dice") && Me.ComboPoint > 1 && Target.HealthPercent > 40) { if (cast.OnTarget(SliceAndDice)) { return; } } // Eviscerate logic if (Me.ComboPoint > 0 && Target.HealthPercent < 30 || Me.ComboPoint > 1 && Target.HealthPercent < 45 || Me.ComboPoint > 2 && Target.HealthPercent < 60 || Me.ComboPoint > 3 && Target.HealthPercent < 70) { if (cast.OnTarget(Eviscerate)) { return; } } // GhostlyStrike if (Me.ComboPoint < 5 && !IsTargetStunned() && (!_fightingACaster || !Kick.KnownSpell || Me.Energy > GhostlyStrike.Cost + Kick.Cost)) { if (cast.OnTarget(GhostlyStrike)) { return; } } // Hemohrrage if (Me.ComboPoint < 5 && !IsTargetStunned() && (!_fightingACaster || !Kick.KnownSpell || Me.Energy > Hemorrhage.Cost + Kick.Cost)) { if (cast.OnTarget(Hemorrhage)) { return; } } // Sinister Strike if (Me.ComboPoint < 5 && !IsTargetStunned() && (!_fightingACaster || !Kick.KnownSpell || Me.Energy > SinisterStrike.Cost + Kick.Cost)) { if (cast.OnTarget(SinisterStrike)) { return; } } }
protected override void CombatRotation() { WoWUnit Target = ObjectManager.Target; float minRange = RangeManager.GetMeleeRangeWithTarget() + settings.BackupDistance; if (Target.GetDistance < minRange && !cast.IsBackingUp) { ToolBox.CheckAutoAttack(Attack); } if (Target.GetDistance > minRange && !cast.IsBackingUp) { ReenableAutoshot(); } if (Target.GetDistance < minRange && !settings.BackupFromMelee) { _canOnlyMelee = true; } // Mend Pet if (ObjectManager.Pet.IsAlive && ObjectManager.Pet.HealthPercent <= 50 && !ObjectManager.Pet.HaveBuff("Mend Pet") && cast.OnFocusUnit(MendPet, ObjectManager.Pet)) { return; } // Aspect of the viper if (!Me.HaveBuff("Aspect of the Viper") && Me.ManaPercentage < 30 && cast.OnSelf(AspectViper)) { return; } // Aspect of the Hawk if (!Me.HaveBuff("Aspect of the Hawk") && (Me.ManaPercentage > 90 || Me.HaveBuff("Aspect of the Cheetah")) || !Me.HaveBuff("Aspect of the Hawk") && !Me.HaveBuff("Aspect of the Cheetah") && !Me.HaveBuff("Aspect of the Viper")) { if (cast.OnSelf(AspectHawk)) { return; } } // Aspect of the Monkey if (!Me.HaveBuff("Aspect of the Monkey") && !AspectHawk.KnownSpell && cast.OnSelf(AspectMonkey)) { return; } // Disengage if (settings.UseDisengage && ObjectManager.Pet.Target == Me.Target && Target.Target == Me.Guid && Target.GetDistance < minRange && cast.OnTarget(Disengage)) { return; } // Bestial Wrath if (Target.GetDistance < AutoShot.MaxRange && Target.HealthPercent >= 60 && Me.ManaPercentage > 10 && BestialWrath.IsSpellUsable && (settings.BestialWrathOnMulti && ObjectManager.GetUnitAttackPlayer().Count > 1 || !settings.BestialWrathOnMulti) && cast.OnSelf(BestialWrath)) { return; } // Rapid Fire if (Target.GetDistance < AutoShot.MaxRange && Target.HealthPercent >= 80.0 && (settings.RapidFireOnMulti && ObjectManager.GetUnitAttackPlayer().Count > 1 || !settings.RapidFireOnMulti) && cast.OnSelf(RapidFire)) { return; } // Kill Command if (ObjectManager.Pet.IsAlive && cast.OnTarget(KillCommand)) { return; } // Raptor Strike if (settings.UseRaptorStrike && Target.GetDistance < minRange && !RaptorStrikeOn() && cast.OnTarget(RaptorStrike)) { return; } // Mongoose Bite if (Target.GetDistance < minRange && cast.OnTarget(MongooseBite)) { return; } // Feign Death if ((Me.HealthPercent < 20 || (ObjectManager.GetNumberAttackPlayer() > 1 && ObjectManager.GetUnitAttackPlayer().Where(u => u.Target == Me.Guid).Count() > 0)) && cast.OnSelf(FeignDeath)) { return; } // Concussive Shot if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) && settings.UseConcussiveShot && Target.HealthPercent < 20 && !ConcussiveShot.TargetHaveBuff && cast.OnTarget(ConcussiveShot)) { return; } // Wing Clip if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) && settings.UseConcussiveShot && Target.HealthPercent < 20 && !Target.HaveBuff("Wing Clip") && cast.OnTarget(WingClip)) { return; } // Hunter's Mark if (ObjectManager.Pet.IsValid && !HuntersMark.TargetHaveBuff && Target.GetDistance > minRange && Target.IsAlive && cast.OnTarget(HuntersMark)) { return; } double lastAutoInMilliseconds = (DateTime.Now - LastAuto).TotalMilliseconds; // Steady Shot if (lastAutoInMilliseconds > 0 && lastAutoInMilliseconds < 500 && Me.ManaPercentage > 30 && cast.OnTarget(SteadyShot)) { return; } // Serpent Sting if (!Target.HaveBuff("Serpent Sting") && Target.GetDistance < AutoShot.MaxRange && Target.HealthPercent >= 60 && Me.ManaPercentage > 50u && !SteadyShot.KnownSpell && Target.GetDistance > minRange && cast.OnTarget(SerpentSting)) { return; } // Intimidation if (Target.GetDistance < AutoShot.MaxRange && Target.GetDistance > minRange && Target.HealthPercent >= 20 && Me.ManaPercentage > 10 && !settings.IntimidationInterrupt && cast.OnSelf(Intimidation)) { return; } // Intimidation interrupt if (Target.GetDistance < AutoShot.MaxRange && ToolBox.TargetIsCasting() && settings.IntimidationInterrupt && cast.OnSelf(Intimidation)) { return; } // Arcane Shot if (Target.GetDistance < AutoShot.MaxRange && Target.HealthPercent >= 30 && Me.ManaPercentage > 80 && !SteadyShot.KnownSpell && cast.OnTarget(ArcaneShot)) { return; } }
protected override void CombatRotation() { base.CombatRotation(); WoWUnit Target = ObjectManager.Target; bool _isPoisoned = ToolBox.HasPoisonDebuff(); bool _hasDisease = ToolBox.HasDiseaseDebuff(); bool _shouldBeInterrupted = ToolBox.TargetIsCasting(); // Force melee if (_combatMeleeTimer.IsReady) { RangeManager.SetRangeToMelee(); } // Check Auto-Attacking ToolBox.CheckAutoAttack(Attack); if (_shouldBeInterrupted) { _fightingACaster = true; RangeManager.SetRangeToMelee(); if (!_casterEnemies.Contains(Target.Name)) { _casterEnemies.Add(Target.Name); } } // Remove Ghost Wolf if (Me.HaveBuff("Ghost Wolf") && cast.OnSelf(GhostWolf)) { return; } // Healing Wave + Lesser Healing Wave if (Me.HealthPercent < settings.HealThreshold && (Target.HealthPercent > 15 || Me.HealthPercent < 25)) { if (cast.OnSelf(LesserHealingWave) || cast.OnSelf(HealingWave)) { return; } } // Cure Poison if (settings.CurePoison && _isPoisoned && CurePoison.KnownSpell && Me.ManaPercentage > _lowManaThreshold) { Thread.Sleep(Main.humanReflexTime); if (cast.OnSelf(CurePoison)) { return; } } // Cure Disease if (settings.CureDisease && CureDisease.KnownSpell && _hasDisease && Me.ManaPercentage > _lowManaThreshold) { Thread.Sleep(Main.humanReflexTime); if (cast.OnSelf(CureDisease)) { return; } } // Bloodlust if (!Me.HaveBuff("Bloodlust") && Target.HealthPercent > 80 && cast.OnSelf(Bloodlust)) { return; } // Water Shield if (!Me.HaveBuff("Water Shield") && !Me.HaveBuff("Lightning Shield") && (settings.UseWaterShield || !settings.UseLightningShield || Me.ManaPercentage <= _lowManaThreshold) && cast.OnSelf(WaterShield)) { return; } // Lightning Shield if (Me.ManaPercentage > _lowManaThreshold && !Me.HaveBuff("Lightning Shield") && !Me.HaveBuff("Water Shield") && settings.UseLightningShield && (!WaterShield.KnownSpell || !settings.UseWaterShield) && cast.OnTarget(LightningShield)) { return; } // Shamanistic Rage if (Me.ManaPercentage < _mediumManaThreshold && (Target.HealthPercent > 80 && !settings.ENShamanisticRageOnMultiOnly || ObjectManager.GetNumberAttackPlayer() > 1) && cast.OnSelf(ShamanisticRage)) { return; } // Earth Shock Focused if (Me.HaveBuff("Focused") && Target.GetDistance < 19f && cast.OnTarget(EarthShock)) { return; } // Frost Shock if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) && settings.ENFrostShockHumanoids && Target.HealthPercent < 40 && !Target.HaveBuff("Frost Shock") && cast.OnTarget(FrostShock)) { return; } // Earth Shock Interupt Rank 1 if (_shouldBeInterrupted && (settings.ENInterruptWithRankOne || Me.ManaPercentage <= _lowManaThreshold)) { _fightingACaster = true; if (!_casterEnemies.Contains(Target.Name)) { _casterEnemies.Add(Target.Name); } Thread.Sleep(Main.humanReflexTime); if (cast.OnTarget(EarthShockRank1)) { return; } } // Earth Shock Interupt if (_shouldBeInterrupted && !settings.ENInterruptWithRankOne) { if (!_casterEnemies.Contains(Target.Name)) { _casterEnemies.Add(Target.Name); } _fightingACaster = true; Thread.Sleep(Main.humanReflexTime); if (cast.OnTarget(EarthShock)) { return; } } // Totems if (Me.ManaPercentage > 20 && Target.GetDistance < 20 && _totemManager.CastTotems(specialization)) { return; } // Flame Shock DPS if (Me.ManaPercentage > _lowManaThreshold && Target.GetDistance < 19f && !Target.HaveBuff("Flame Shock") && Target.HealthPercent > 20 && settings.UseFlameShock && cast.OnTarget(FlameShock)) { return; } // Stormstrike if (Me.ManaPercentage > _lowManaThreshold && cast.OnTarget(Stormstrike)) { return; } // Earth Shock DPS if (Me.ManaPercentage > _lowManaThreshold && Target.GetDistance < 19f && !FlameShock.KnownSpell && Target.HealthPercent > 25 && Me.ManaPercentage > 30 && cast.OnTarget(EarthShock)) { return; } // Low level lightning bolt if (!EarthShock.KnownSpell && Me.ManaPercentage > _lowManaThreshold && Target.HealthPercent > 40 && cast.OnTarget(LightningBolt)) { return; } }
protected override void CombatRotation() { base.CombatRotation(); WoWUnit Target = ObjectManager.Target; bool _isPoisoned = ToolBox.HasPoisonDebuff(); bool _hasDisease = ToolBox.HasDiseaseDebuff(); bool _shouldBeInterrupted = false; // Remove Ghost Wolf if (Me.HaveBuff("Ghost Wolf") && cast.OnSelf(GhostWolf)) { return; } // Healing Wave + Lesser Healing Wave if (Me.HealthPercent < settings.HealThreshold && (Target.HealthPercent > 15 || Me.HealthPercent < 25)) { if (cast.OnSelf(LesserHealingWave) || cast.OnSelf(HealingWave)) { return; } } // Cure Poison if (settings.CurePoison && _isPoisoned && CurePoison.KnownSpell && Me.ManaPercentage > _lowManaThreshold) { Thread.Sleep(Main.humanReflexTime); if (cast.OnSelf(CurePoison)) { return; } } // Cure Disease if (settings.CureDisease && _hasDisease && CureDisease.KnownSpell && Me.ManaPercentage > _lowManaThreshold) { Thread.Sleep(Main.humanReflexTime); if (cast.OnSelf(CureDisease)) { return; } } // Bloodlust if (!Me.HaveBuff("Bloodlust") && Target.HealthPercent > 80 && cast.OnSelf(Bloodlust)) { return; } // Water Shield if (!Me.HaveBuff("Water Shield") && !Me.HaveBuff("Lightning Shield") && (settings.UseWaterShield || !settings.UseLightningShield || Me.ManaPercentage <= _lowManaThreshold) && cast.OnSelf(WaterShield)) { return; } // Lightning Shield if (Me.ManaPercentage > _lowManaThreshold && !Me.HaveBuff("Lightning Shield") && !Me.HaveBuff("Water Shield") && settings.UseLightningShield && (!WaterShield.KnownSpell || !settings.UseWaterShield) && cast.OnTarget(LightningShield)) { return; } // Check if we need to interrupt int channelTimeLeft = Lua.LuaDoString <int>(@"local spell, _, _, _, endTimeMS = UnitChannelInfo('target') if spell then local finish = endTimeMS / 1000 - GetTime() return finish end"); if (channelTimeLeft < 0 || Target.CastingTimeLeft > ToolBox.GetLatency()) { _shouldBeInterrupted = true; } // Earth Shock Interupt if (_shouldBeInterrupted) { if (!_casterEnemies.Contains(Target.Name)) { _casterEnemies.Add(Target.Name); } _fightingACaster = true; Thread.Sleep(Main.humanReflexTime); if (cast.OnTarget(EarthShock)) { return; } } // Frost Shock if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) && settings.ENFrostShockHumanoids && Target.HealthPercent < 40 && !Target.HaveBuff("Frost Shock") && !Me.HaveBuff("Focused Casting") && cast.OnTarget(FrostShock)) { return; } // Totems if (Me.ManaPercentage > _lowManaThreshold && Target.GetDistance < 20 && _totemManager.CastTotems(specialization)) { return; } // Chain Lightning if (settings.ELChainLightningOnMulti && ObjectManager.GetNumberAttackPlayer() > 1 && Me.ManaPercentage > 20 && cast.OnTarget(ChainLightning)) { return; } // Earth Shock DPS if (Target.GetDistance < 19f && (!FlameShock.KnownSpell || !settings.UseFlameShock) && !_fightingACaster && Target.HealthPercent > 25 && Me.ManaPercentage > settings.ELShockDPSMana && !Me.HaveBuff("Focused Casting") && cast.OnTarget(EarthShock)) { return; } // Flame Shock DPS if (Target.GetDistance < 19f && !Target.HaveBuff("Flame Shock") && Target.HealthPercent > 20 && !_fightingACaster && settings.UseFlameShock && Me.ManaPercentage > settings.ELShockDPSMana && !Me.HaveBuff("Focused Casting") && cast.OnTarget(FlameShock)) { return; } // Lightning Bolt if (ObjectManager.Target.GetDistance <= _pullRange && (Target.HealthPercent > settings.ELLBHealthThreshold || Me.HaveBuff("Clearcasting") || Me.HaveBuff("Focused Casting")) && Me.ManaPercentage > 15 && cast.OnTarget(LightningBolt)) { return; } // Default melee if (!RangeManager.CurrentRangeIsMelee()) { Logger.Log("Going in melee because nothing else to do"); RangeManager.SetRangeToMelee(); } }
private void FightStartHandler(WoWUnit unit, CancelEventArgs cancelable) { RangeManager.SetRange(_pullRange); }