using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using LavishVMAPI; using LavishScriptAPI; using ISXWoW; namespace AutoRogue { public partial class AutoRogue : Form { enum RogueSpells { Shiv, SinisterStrike, SliceAndDice, Garrote, Rupture, Stealth, Evasion, Vanish, AdrenalineRush, BladeFlurry, None, Eviscerate, Hemorrhage, WoTF }; Dictionary spellBook = new Dictionary(); RogueSpells nextSpell = RogueSpells.None; ISXWoW.ISXWoW isxwow = new ISXWoW.ISXWoW(); FrameLockManager flm = new FrameLockManager(); public AutoRogue() { InitializeComponent(); flm.Lock(); spellBook.Add(RogueSpells.Shiv, WoWSpell.Get("Shiv")); spellBook.Add(RogueSpells.SinisterStrike, WoWSpell.Get("Sinister Strike")); spellBook.Add(RogueSpells.SliceAndDice, WoWSpell.Get("Slice and Dice")); spellBook.Add(RogueSpells.Garrote, WoWSpell.Get("Garrote")); spellBook.Add(RogueSpells.Rupture, WoWSpell.Get("Rupture")); spellBook.Add(RogueSpells.Stealth, WoWSpell.Get("Stealth")); spellBook.Add(RogueSpells.Evasion, WoWSpell.Get("Evasion")); spellBook.Add(RogueSpells.Vanish, WoWSpell.Get("Vanish")); spellBook.Add(RogueSpells.AdrenalineRush, WoWSpell.Get("Adrenaline Rush")); spellBook.Add(RogueSpells.BladeFlurry, WoWSpell.Get("Blade Flurry")); spellBook.Add(RogueSpells.Eviscerate, WoWSpell.Get("Eviscerate")); spellBook.Add(RogueSpells.Hemorrhage, WoWSpell.Get("Hemorrhage")); spellBook.Add(RogueSpells.WoTF, WoWSpell.Get("Will of the Forsaken")); flm.Unlock(); } private void button1_Click(object sender, EventArgs e) { Thread AutoRogue = new Thread(Rogue); AutoRogue.Start(); } private bool HasBuff(string name) { flm.Lock(); bool isValid = isxwow.Me.Buff(name).IsValid; flm.Unlock(); return isValid; } private bool CanCast(RogueSpells spell) { flm.Lock(); if (spellBook[spell].IsValid && spellBook[spell].Cooldown == 0 && !isxwow.Me.IsCasting && isxwow.Me.GlobalCooldown == 0) { if (isxwow.Me.Power >= spellBook[spell].PowerCost && isxwow.Me.CurrentTarget.Distance <= 5) { flm.Unlock(); return true; } } flm.Unlock(); return false; } private bool CastSpell(RogueSpells spell) { if (CanCast(spell)) { return spellBook[spell].Cast(); } return false; } private void UpdateText(string text) { richLogBox.AppendText("[" + DateTime.Now.ToShortTimeString() + "] " + text + System.Environment.NewLine); } public delegate void UpdateTextCallback(string text); private RogueSpells ChooseNextAttack() { // heal kick flm.Lock(); if (!isxwow.Me.CurrentTarget.IsValid) return RogueSpells.None; if (isxwow.Me.CurrentTarget.Dead) return RogueSpells.None; if (!isxwow.Me.CurrentTarget.Attackable) return RogueSpells.None; WoWBuff rupture = isxwow.Me.CurrentTarget.Buff("Rupture"); WoWBuff snd = isxwow.Me.Buff("Slice and Dice"); /* // stealth if possible if (!HasBuff("Stealth") && !isxwow.Me.IsInCombat) { return RogueSpells.Stealth; } */ // opener if (HasBuff("Stealth")) { return RogueSpells.Garrote; } // 11/28/22 Rotation mit 5s/5r if (!HasBuff("Stealth") && isxwow.Me.IsInCombat) { /*if (isxwow.Me.HasEffect(WoWEffect.Asleep) || isxwow.Me.HasEffect(WoWEffect.Charmed) || isxwow.Me.HasEffect(WoWEffect.Fleeing) || isxwow.Me.HasEffect(WoWEffect.Horrified) || isxwow.Me.HasEffect(WoWEffect.Seduced)) { return RogueSpells.WoTF; }*/ if (isxwow.Me.HealthPercent < 35) { return RogueSpells.Evasion; } if ((!HasBuff("Slice and Dice")) && isxwow.Me.ComboPoints >= 1) // keep snd up at all costs { return RogueSpells.SliceAndDice; } if (CanCast(RogueSpells.BladeFlurry)) { return RogueSpells.BladeFlurry; } if (isxwow.Me.ComboPoints == 5 && !rupture.IsValid) // rupture as 5cp finisher { return RogueSpells.Rupture; } if (isxwow.Me.ComboPoints < 5 || isxwow.Me.Power >= 90) // main spell to build up cp's with { return RogueSpells.Hemorrhage; } } return RogueSpells.None; } private void Rogue() { flm.Lock(); GuidList theBoss = GuidList.New("-units", "-worldboss"); flm.Unlock(); // buff weapons MH: DP, OH: IP // to be done later // combat loop while (true) { nextSpell = ChooseNextAttack(); /*if (isxwow.Me.CurrentTarget.Dead && !isxwow.Me.IsInCombat) { break; }*/ if (nextSpell != RogueSpells.None) if (CastSpell(nextSpell)) richLogBox.BeginInvoke(new UpdateTextCallback(this.UpdateText), new object[] { "Casting: " + spellBook[nextSpell].Name }); flm.Unlock(); Thread.Sleep(100); } } } }