January 20, 20206 yr Howdy y'all! My C# is finally at the point where I am starting to be able to develop full products (profiles, fightclasses, etc.). I'm working on a fightclass template (which I'll post once functional) that people can adapt for any class they want (I'm developing it for my Disc Priest, so it already has to be able to do some niche stuff). @Smokie gave some great code in this post on how to cast spells on yourself and party members (maybe other players, too, I haven't tested). SpellManager.CastSpellByNameOn("Rejuvenation", p.Name); SpellManager.CastSpellByNameOn("Rejuvenation","PlayerName"); SpellManager.CastSpellByNameOn("Rejuvenation", ObjectManager.Me.Name); "Really any code with a name string will work" That code works fantastically for players! But mobs share names and so require us to use their LuaId, which, to my knowledge, isn't retrievable using Wrobot methods/properties (if I'm wrong, please set me straight). I actually can't even figure out how to get the LuaId using Lua and the only way I've seen anyone attempt to implement this functionality did so (a long time ago, most of the code is unusable, actually). public static bool CastSpell(Spell spell, WoWUnit unit, bool force) { // Handle bullshit units if (unit == null || !unit.IsValid || unit.IsDead || !spell.KnownSpell || !spell.IsSpellUsable) { return false; } // Check If Toon is Wanding if (spell.Name == "Shoot" && IsAutoRepeating("Shoot")) { return true; } // Fuck off if toon is already casting and (force == false) if (ObjectManager.Me.Casting() && !force) return false; // Stop moving if spell needs to be cast if (spell.CastTime > 0) MovementManager.StopMoveTo(false, Usefuls.Latency + 500); // Force cast spell if (force == true) if (force) Lua.LuaDoString("SpellStopCasting();"); // Cast AoE spells by location if (AreaSpells.Contains(spell.Name)) { Lua.LuaDoString("CastSpellByName(\"" + spell.Name + "\")"); ClickOnTerrain.Pulse(unit.Position); } else { // Rely on Auto Self Cast WoWUnit temp = ObjectManager.Target; bool onSelf= unit.Guid == ObjectManager.Me.Guid; // Face unit to cast if (!onSelf) { MovementManager.Face(unit); _disableTargeting= true; TargetUnit(unit); } // Default to self casting SpellManager.CastSpellByNameOn(spell, ObjectManager.Me.Name); // Handle non-self targets if (!onSelf) { if (temp.Guid == 0 || !temp.IsValid) { Lua.LuaDoString("ClearTarget();"); // This clears the current target...which defeats the purpose, yea? } else { TargetUnit(temp); } // Interact.InteractObjectis also given as a possibility, but, as I understand it, that would also change targets _disableTargeting= false; } } return true; } I don't understand the use of Locktargeting and so can't figure out how to remove code rot or whether or not this should actually work as a "Mouseover Cast"- type cast (for classes/situation where focusing on a new WoWUnit would be undesirable but applying a dot or whatever is necessary). Hoping someone can help me figure it out!
January 20, 20206 yr For that method to work, you need to set Pacific wowunit as unit1, unit 2 etc in your code, I don’t have my laptop on my so I can’t really help but give each wowunit it’s own number and go from there. Ps: I don’t remember you at all, I don’t remember a lot ..... I was drunk a lot more then I thought.
January 20, 20206 yr Author Hahaha, it was someone else's topic, I've just been cannibalizing code from all over for a couple months now. "Learning C# By Botting", I'm here to say, should be developed as a teaching technique.
January 20, 20206 yr Author 7 minutes ago, Smokie said: For that method to work, you need to set Pacific wowunit as unit1, unit 2 etc in your code, I don’t have my laptop on my so I can’t really help but give each wowunitit’s own number and go from there. If I give them designations in my code, don't I run into the same issue (that I can't get their LuaId to use for the CastSpellOn method?
January 20, 20206 yr No tested, but use code like: public static bool CastSpell(Spell spell, WoWUnit unit, bool force) { // Handle bullshit units if (unit == null || !unit.IsValid || unit.IsDead || !spell.KnownSpell || !spell.IsSpellUsable) { return false; } // Check If Toon is Wanding if (spell.Name == "Shoot" && IsAutoRepeating("Shoot")) { return true; } // Fuck off if toon is already casting and (force == false) if (ObjectManager.Me.IsCast && !force) return false; // Stop moving if spell needs to be cast if (spell.CastTime > 0) MovementManager.StopMoveTo(false, Usefuls.Latency + 500); // Force cast spell if (force == true) if (force) Lua.LuaDoString("SpellStopCasting();"); // Cast AoE spells by location if (AreaSpells.Contains(spell.Name)) { Lua.LuaDoString("CastSpellByName(\"" + spell.NameInGame + "\")"); ClickOnTerrain.Pulse(unit.Position); } else { // Face unit to cast if (!unit.IsLocalPlayer) MovementManager.Face(unit); if (unit.IsLocalPlayer || unit.Type == WoWObjectType.Player) SpellManager.CastSpellByNameOn(spell.NameInGame, unit.Name); if (unit.IsMyTarget) SpellManager.CastSpellByNameOn(spell.NameInGame, "target"); else { var old = ObjectManager.Me.MouseOverGuid; ObjectManager.Me.MouseOverGuid = unit.Guid; SpellManager.CastSpellByNameOn(spell.NameInGame, "mouseover"); ObjectManager.Me.MouseOverGuid = old; } } return true; }
January 30, 20224 yr What's the difference between SpellManager.CastSpellByNameOn("Rejuvenation", p.Name); and Interact.InteractGameObject(player.GetBaseAddress); Spell.Launch(); Interact.ClearTarget(); ?
Create an account or sign in to comment