Skip to content
View in the app

A better way to browse. Learn more.

WRobot

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Fight Class spells casting in wrong order

Featured Replies

I've created a basic fight class in C# and I'm running into an issue where it casts spells in the wrong order.  Does anyone have any experience with this?  I had originally tried using frame lock and locking the frame before invoking CombatRotation() and then unlocking the frame as soon as it returned but that didn't fix the issue and caused other performance issues.

 

The issue appears to be the worst when multiple spells are off cooldown.  For example, when I first go into a fight with all of my burst spells, they are almost all invoked in the wrong order.

 

Here's the actual logic I'm using for CombatRotation() and how I'm casting spells.

    public void CombatRotation()
    {

        // Fire Elemental Totem
        if (burstMode && FireElementalTotem.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Fire Elemental Totem");
            return;
        }

        // Elemental Mastery
        if (burstMode && ElementalMastery.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Elemental Mastery");
            return;
        }

        // Feral Spirit
        if (burstMode && FeralSpirit.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Feral Spirit");
            return;
        }

        // Ascendance
        if (burstMode && Ascendance.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Ascendance");
            return;
        }

        // Stormlash Totem
        if (burstMode && StormlashTotem.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Stormlash Totem");
            return;
        }

        // Flame Shock
        if (aoeMode && FlameShock.IsSpellUsable && FlameShock.IsDistanceGood && (ObjectManager.Target.BuffTimeLeft("Flame Shock") < 15000))
        {
            SpellManager.CastSpellByNameLUA("Flame Shock");
            return;
        }

        // Fire Nova
        if (aoeMode && FireNova.IsSpellUsable && (ObjectManager.Target.HaveBuff("Flame Shock")))
        {
            Lua.LuaDoString("CastSpellByName('Fire Nova')");
            return;
        }

        // Searing Totem
        if (SearingTotem.IsSpellUsable && !ObjectManager.Me.TotemExist(TotemType.Fire))
        {
            SpellManager.CastSpellByNameLUA("Searing Totem");
            return;
        }

        // Chain Lightning - MW5
        if (aoeMode && ChainLightning.IsSpellUsable && ChainLightning.IsDistanceGood && ObjectManager.Me.BuffStack("Maelstrom Weapon") == 5)
        {
            Lua.LuaDoString("CastSpellByName('Chain Lightning')");
            return;
        }

        // Lightning Bolt - MW5
        if (LightningBolt.IsSpellUsable && LightningBolt.IsDistanceGood && ObjectManager.Me.BuffStack("Maelstrom Weapon") == 5)
        {
            SpellManager.CastSpellByNameLUA("Lightning Bolt");
            return;
        }

        //Stormstrike
        if (Stormstrike.IsSpellUsable && Stormstrike.IsDistanceGood)
        {
            SpellManager.CastSpellByNameLUA("Stormstrike");
            return;
        }

        // Flame Shock
        if (FlameShock.IsSpellUsable && FlameShock.IsDistanceGood && (!ObjectManager.Target.HaveBuff("Flame Shock") || (ObjectManager.Target.BuffTimeLeft("Flame Shock") < 10000)))
        {
            SpellManager.CastSpellByNameLUA("Flame Shock");
            return;
        }

        // Lava Lash
        if (LavaLash.IsSpellUsable && LavaLash.IsDistanceGood)
        {
            SpellManager.CastSpellByNameLUA("Lava Lash");
            return;
        }

        // Unleash Elements
        if (UnleashElements.IsSpellUsable && UnleashElements.IsDistanceGood)
        {
            SpellManager.CastSpellByNameLUA("Unleash Elements");
            return;
        }

        // Earth Shock
        if (EarthShock.IsSpellUsable && EarthShock.IsDistanceGood && ((SpellManager.GetSpellCooldownTimeLeft("Stormstrike") > 1.5) || (SpellManager.GetSpellCooldownTimeLeft("Lava Lash") > 1.5)))
        {
            SpellManager.CastSpellByNameLUA("Earth Shock");
            return;
        }
    }

 

Hello, try to lock wow frame (you can do it only because you don't sleep thread, you will get better reactivity)

public void CombatRotation()
{
    try
    {
        wManager.Wow.Memory.WowMemory.LockFrame();

        // Fire Elemental Totem
        if (burstMode && FireElementalTotem.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Fire Elemental Totem");
            return;
        }

        // Elemental Mastery
        if (burstMode && ElementalMastery.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Elemental Mastery");
            return;
        }

        // Feral Spirit
        if (burstMode && FeralSpirit.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Feral Spirit");
            return;
        }

        // Ascendance
        if (burstMode && Ascendance.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Ascendance");
            return;
        }

        // Stormlash Totem
        if (burstMode && StormlashTotem.IsSpellUsable)
        {
            SpellManager.CastSpellByNameLUA("Stormlash Totem");
            return;
        }

        // Flame Shock
        if (aoeMode && FlameShock.IsSpellUsable && FlameShock.IsDistanceGood && (ObjectManager.Target.BuffTimeLeft("Flame Shock") < 15000))
        {
            SpellManager.CastSpellByNameLUA("Flame Shock");
            return;
        }

        // Fire Nova
        if (aoeMode && FireNova.IsSpellUsable && (ObjectManager.Target.HaveBuff("Flame Shock")))
        {
            Lua.LuaDoString("CastSpellByName('Fire Nova')");
            return;
        }

        // Searing Totem
        if (SearingTotem.IsSpellUsable && !ObjectManager.Me.TotemExist(TotemType.Fire))
        {
            SpellManager.CastSpellByNameLUA("Searing Totem");
            return;
        }

        // Chain Lightning - MW5
        if (aoeMode && ChainLightning.IsSpellUsable && ChainLightning.IsDistanceGood && ObjectManager.Me.BuffStack("Maelstrom Weapon") == 5)
        {
            Lua.LuaDoString("CastSpellByName('Chain Lightning')");
            return;
        }

        // Lightning Bolt - MW5
        if (LightningBolt.IsSpellUsable && LightningBolt.IsDistanceGood && ObjectManager.Me.BuffStack("Maelstrom Weapon") == 5)
        {
            SpellManager.CastSpellByNameLUA("Lightning Bolt");
            return;
        }

        //Stormstrike
        if (Stormstrike.IsSpellUsable && Stormstrike.IsDistanceGood)
        {
            SpellManager.CastSpellByNameLUA("Stormstrike");
            return;
        }

        // Flame Shock
        if (FlameShock.IsSpellUsable && FlameShock.IsDistanceGood && (!ObjectManager.Target.HaveBuff("Flame Shock") || (ObjectManager.Target.BuffTimeLeft("Flame Shock") < 10000)))
        {
            SpellManager.CastSpellByNameLUA("Flame Shock");
            return;
        }

        // Lava Lash
        if (LavaLash.IsSpellUsable && LavaLash.IsDistanceGood)
        {
            SpellManager.CastSpellByNameLUA("Lava Lash");
            return;
        }

        // Unleash Elements
        if (UnleashElements.IsSpellUsable && UnleashElements.IsDistanceGood)
        {
            SpellManager.CastSpellByNameLUA("Unleash Elements");
            return;
        }

        // Earth Shock
        if (EarthShock.IsSpellUsable && EarthShock.IsDistanceGood && ((SpellManager.GetSpellCooldownTimeLeft("Stormstrike") > 1.5) || (SpellManager.GetSpellCooldownTimeLeft("Lava Lash") > 1.5)))
        {
            SpellManager.CastSpellByNameLUA("Earth Shock");
            return;
        }
    }
    catch (Exception e)
    {
        Logging.WriteError("Error: " + e);
    }
    finally
    {
        wManager.Wow.Memory.WowMemory.UnlockFrame();
    }
}

 

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.