-
Posts
288 -
Joined
-
Last visited
Content Type
Forums
Articles
Bug Tracker
Downloads
Store
Everything posted by reapler
-
I would like to suggest to add a continent name as a new parameter to the class "Grinderzone" it would allow to easier travelling between continents & taking the right path. At the current state of the Grinder product for example it doesn't check the continent and taking vectors from a different continent. I've also written methods to check whether vector is on continent by Z axis: /// <summary> /// Load specific tiles to define the pather by the given location. /// </summary> /// <param name="from">The location.</param> /// <param name="maxDistance">The maximum allowed z-distance.</param> public Pather GetPatherByLocation(Vector3 from, float maxDistance = float.PositiveInfinity) { float d = float.PositiveInfinity; Pather p = null; try { Pather pc = null; Logging.log("Load tiles to define continent..."); foreach (MainContinents continent in Enum.GetValues(typeof(MainContinents))) { pc = GetPather(from, continent); if (Math.Abs(pc.FindZ(from) - from.Z) < d) { p = pc; d = Math.Abs(p.FindZ(from) - from.Z); } pc.Dispose(); } if (d < maxDistance) { Logging.log("Pather for " + from + " found\nContinent: " + p.Continent + "\nDeviation: " + d); return p; } } catch (Exception ex) { Logging.logex("GetPatherByLocation(...):\n" + ex); } Logging.log("GetPatherByLocation(...) failed to load suitable continent: " + d + " < " + maxDistance + " is invalid.\nSuspected continent: " + p.Continent); return GetPather(from, Usefuls.ContinentNameMpq); } /// <summary> /// Initialize new pather. /// </summary> /// <param name="loc">Initial location.</param> /// <param name="continent">Pather's continent.</param> public Pather GetPather(Vector3 loc, MainContinents continent) { try { if (loc != Vector3.Empty) { float x1; float y1; return new Pather(continent.ToString()); } } catch (Exception ex) { Logging.logex("GetPather(Vector3 loc, MainContinents continent):\nContinent: " + continent + "\nLocation: " + loc + "\nThrow an Exception:\n" + ex); } Logging.log("GetPather(Vector3 loc, MainContinents continent) failed to load desired continent: " + Usefuls.ContinentNameMpq); return new Pather(Usefuls.ContinentNameMpq); } It works so far (i can put a position from a other continent & can get the string from Pather.Continent). But it needs to load the tiles. That's the down-side of it(If there's a better method to define it, let me know please) i also have written classes to use the returned pather for connections between boats, Zeppelins & portals and have a general algorithm to take the path with the shortest distance with these connections. But the mentioned method is the only thing left which is a thorn in my eye. I would like also to suggest to add a continent property to the Vector3 class. So if someone calls this class it will also get the continent & can be saved in profiles In the end the pather knows exactly where to go on which continent. ps: i can also upload the classes, if you need them but it has a bit work left.
-
Version 17.06.0b
289 downloads
What is it? It's a plugin to cast aoe spells on target by a press of a button. I created it for user who had problems with possibly broken events & still wanted to cast aoe spell on button press. Tested: 2.4.3 ok 3.3.5a ok 4.3.4 awaiting feedback 5.4.8 ok Features: -custom hook -spell & button configurable via gui -instant aoe cast => almost no green circle Notes: Please send any errors, suggestions or wanted features in the comments or private message. To install it just copy it to: \WRobot\Plugins\ This is a side project so new features / versions will not be added so fast. -
WROBOT 5.4 Mistweaver Orbs
reapler replied to yesimbestworld's topic in WRobot for Wow Mists of Pandaria - Help and support
If you see "01:14:47 - Cast Healing Sphere" in the log you can try this mw.xml and use '/aoecast Healing Sphere' as macro to cast on target. Otherwise i think the argument(s) of LuaEventsId.EXECUTE_CHAT_LINE may have a bug like on 3.3.5a the unfiltered combat log but that's just an assumption because this should work under normal circumstances. -
Hello, i think you can put it to "\WRobot\Data\Lang\"
-
WROBOT 5.4 Mistweaver Orbs
reapler replied to yesimbestworld's topic in WRobot for Wow Mists of Pandaria - Help and support
@yesimbestworld So i trimmed the c# code everything worked fine on 3.3.5a dunno what's wrong on 5.4.8 but now it's more simpler to find the error if one will occure: mw.xml Try only '/cast Healing Sphere' in your macro(it will now only cast on target). If that method still fails, i'm not able to say what's not working exactly on your expansion. Otherwise you may disable addons, plugins or even backup & reset your settings in WRobot. -
@Droidz Very good implantation. But is it also possible to using other c# related stuff like using namespaces?
-
WROBOT 5.4 Mistweaver Orbs
reapler replied to yesimbestworld's topic in WRobot for Wow Mists of Pandaria - Help and support
Hello you can try this one: mw.xml I tested it on 3.3.5a but it should also work for 5.4. I've written an own method to cast on position. The result: you see the green circle almost never. There can be more improvements to this code, like to read the input string & check the content. But for this purpose it's enough. How the code look like: if (wManager.Statistics.RunningTimeInSec() < 2) { robotManager.Helpful.Logging.Write("Register OnEventsLuaWithArgs"); wManager.Wow.Helpers.EventsLuaWithArgs.OnEventsLuaWithArgs += delegate (wManager.Wow.Enums.LuaEventsId id, System.Collections.Generic.List<string> args) { if (id == wManager.Wow.Enums.LuaEventsId.EXECUTE_CHAT_LINE) { string spellName = "Healing Sphere"; if (args[0].ToUpper().Equals(("/cast @player " + spellName).ToUpper())) { var t = System.Threading.Tasks.Task.Run(async delegate { System.Threading.Thread.Sleep(3); wManager.Wow.Helpers.ClickOnTerrain.Pulse(wManager.Wow.ObjectManager.ObjectManager.Me.Position); System.Threading.Thread.Sleep(2); wManager.Wow.Helpers.ClickOnTerrain.Pulse(wManager.Wow.ObjectManager.ObjectManager.Me.Position); }); wManager.Wow.Helpers.SpellManager.CastSpellByNameOn(spellName, ""); } if (args[0].ToUpper().Equals(("/cast @target " + spellName).ToUpper())) { if (wManager.Wow.ObjectManager.ObjectManager.Me.Target != 0) { var t = System.Threading.Tasks.Task.Run(async delegate { System.Threading.Thread.Sleep(3); wManager.Wow.Helpers.ClickOnTerrain.Pulse(wManager.Wow.ObjectManager.ObjectManager.Me.TargetObject.Position); System.Threading.Thread.Sleep(2); wManager.Wow.Helpers.ClickOnTerrain.Pulse(wManager.Wow.ObjectManager.ObjectManager.Me.TargetObject.Position); }); wManager.Wow.Helpers.SpellManager.CastSpellByNameOn(spellName, ""); } } if (args[0].ToUpper().Equals(("/cast @focus " + spellName).ToUpper())) { if (wManager.Wow.ObjectManager.ObjectManager.Me.FocusGuid != 0) { var t = System.Threading.Tasks.Task.Run(async delegate { System.Threading.Thread.Sleep(3); wManager.Wow.Helpers.ClickOnTerrain.Pulse(wManager.Wow.ObjectManager.ObjectManager.Me.FocusObj.Position); System.Threading.Thread.Sleep(2); wManager.Wow.Helpers.ClickOnTerrain.Pulse(wManager.Wow.ObjectManager.ObjectManager.Me.FocusObj.Position); }); wManager.Wow.Helpers.SpellManager.CastSpellByNameOn(spellName, ""); } } if (args[0].ToUpper().Equals(("/cast @party1 " + spellName).ToUpper())) { string toParse = wManager.Wow.Helpers.Lua.LuaDoString("guid = UnitGUID('party1')", "guid") .Replace("x", string.Empty); ulong guid = ulong.Parse(toParse, System.Globalization.NumberStyles.HexNumber, null); if (guid != 0) { Vector3 objPosition = wManager.Wow.ObjectManager.ObjectManager.GetObjectByGuid(guid).Position; var t = System.Threading.Tasks.Task.Run(async delegate { System.Threading.Thread.Sleep(3); wManager.Wow.Helpers.ClickOnTerrain.Pulse(objPosition); System.Threading.Thread.Sleep(2); wManager.Wow.Helpers.ClickOnTerrain.Pulse(objPosition); }); wManager.Wow.Helpers.SpellManager.CastSpellByNameOn(spellName, ""); } } if (args[0].ToUpper().Equals(("/cast @party2 " + spellName).ToUpper())) { string toParse = wManager.Wow.Helpers.Lua.LuaDoString("guid = UnitGUID('party2')", "guid") .Replace("x", string.Empty); ulong guid = ulong.Parse(toParse, System.Globalization.NumberStyles.HexNumber, null); if (guid != 0) { Vector3 objPosition = wManager.Wow.ObjectManager.ObjectManager.GetObjectByGuid(guid).Position; var t = System.Threading.Tasks.Task.Run(async delegate { System.Threading.Thread.Sleep(3); wManager.Wow.Helpers.ClickOnTerrain.Pulse(objPosition); System.Threading.Thread.Sleep(2); wManager.Wow.Helpers.ClickOnTerrain.Pulse(objPosition); }); wManager.Wow.Helpers.SpellManager.CastSpellByNameOn(spellName, ""); } } } }; System.Threading.Thread.Sleep(2000); } And in-game you just make a macro like this to use: You can also replace '@target' with '@player' '@focus' '@party1' '@party2' Edit: updated fightclass & @OP it did work after WRobot update if someone is interested -
@nate11I've researched a bit more i guess i need to lookup some more lua functions which are also used for some WRobot properties. In short: my fault was to belive that it really get the desired value from api ;) I looked a bit at the api documentation & the offsets should be ok in wManager. For example UnitInParty("unit") if used on player:
- 13 replies
-
- fight
- fightclass
-
(and 2 more)
Tagged with:
-
-
@forerun the guids in tbc are in ulong = UInt64. But i recommend to override the focus guid like @Droidz mentioned in another post & write it back. I see no reason why not to use it while focus is still working(it's already built in every expansion in wManager.dll so you don't need to write offsets for each one). This is how it looks like: public bool CastSpell(string name, wManager.Wow.ObjectManager.WoWObject obj) { if (!string.IsNullOrWhiteSpace(name) && obj != null) { var tmp = wManager.Wow.ObjectManager.ObjectManager.Me.FocusGuid; wManager.Wow.ObjectManager.ObjectManager.Me.FocusGuid = obj.Guid; new wManager.Wow.Class.Spell(name).Launch(false, false, false, "focus"); wManager.Wow.ObjectManager.ObjectManager.Me.FocusGuid = tmp; return true; } return false; } usage: //closest player CastSpell("Flash of Light", wManager.Wow.ObjectManager.ObjectManager.GetNearestWoWPlayer(wManager.Wow.ObjectManager.ObjectManager.GetObjectWoWPlayer())); //target CastSpell("Flash of Light", wManager.Wow.ObjectManager.ObjectManager.Me.TargetObject); For someone who also needs a method for getting the WoWObject by LuaUnitId (can be used then for other things): public WoWObject GetWoWObjectByLuaUnitId(string luaUnitId) { ulong guid; if (!string.IsNullOrWhiteSpace(luaUnitId) && ulong.TryParse(wManager.Wow.Helpers.Lua.LuaDoString("guid = UnitGUID('" + luaUnitId + "')", "guid").Replace("x", string.Empty), System.Globalization.NumberStyles.HexNumber, null, out guid)) return wManager.Wow.ObjectManager.ObjectManager.GetObjectByGuid(guid); return new wManager.Wow.ObjectManager.WoWObject(0); } usage: //can be used for any unit => http://wowwiki.wikia.com/wiki/UnitId //get target position from object Logging.Write(GetWoWObjectByLuaUnitId("target").Position.ToString()); //get mouseover guid from object Logging.Write(GetWoWObjectByLuaUnitId("mouseover").Guid.ToString()); //get arena1 maxlevel by descriptor field Logging.Write((GetWoWObjectByLuaUnitId("arena1") as wManager.Wow.ObjectManager.WoWPlayer)?.GetDescriptorAddress(Descriptors.PlayerFields.Maxlevel).ToString());
- 13 replies
-
- fight
- fightclass
-
(and 2 more)
Tagged with:
-
Ok. I have setup everything for tbc: so far i can assume that raidmember or party methods / properties from wManager doesn't work correctly on 2.4.3(got raidmemberlist while not in raid, true on various party getter while not in party and so on) this is also the reason why the cast method doesn't work ;( I will maybe report it to the bugtracker while i rewrite it with more lua values hehe And thanks for your feedback. Edit: it seems like the one lua function itself returning different values from 2.4.3 to 3.3.5a
- 13 replies
-
- fight
- fightclass
-
(and 2 more)
Tagged with:
-
@nate11 don't worry about that. Librarys are generally better for the more advanced tasks(gui, merge dll together & more). I know it is pretty rare to meet a .dll file here hehe but anyway if you have doubts just decompile the library & you can see everything :)
- 13 replies
-
- fight
- fightclass
-
(and 2 more)
Tagged with:
-
Hello, you can try my new fight class (should also work on tbc): And by the way, i actually wanted to write a small fix for your problem but the file was getting bigger and bigger while i got new ideas in my mind which also needs to be implemented.
- 13 replies
-
- fight
- fightclass
-
(and 2 more)
Tagged with:
-
Version 17.06.22b
1434 downloads
Project is not maintained Source: Holy Grail.tar.gz Why the file exist? As a user request & own interest, i decided to create a slim holy paladin fightclass. For whom is the fight class? The fightclass is developed for 3.3.5a / 2.4.3 english clients Currently the fightclass is more pve based. For pvp it haven't got enough tools to interact. It looks a bit too slim, will be there more features in the future? Of course. If i have more time i will develop it further. In the end of the day what can do it for me? It makes your life easier as healer. The features: -show who will be healed -can stop movement if a heal is needed -custom system that allows to prioritize spells by health & instant casts -GUI for optimal fightclass adjustment -can cast spells without target or the need of a targeting behavior Good to know: -To install just copy it to: ...\WRobot\Fightclass\ -Beta release => it can have bugs. So please report it in the comments or as private message. Every feedback, suggestion, code improvement(haven't look there so accurate) or wanted feature can be also sent. A few screenshots: -
@jrouten maybe the focus guid can help: public void CastSpell(string spellName, WoWObject obj) { var tmp = Me.FocusGuid; Me.FocusGuid = obj.Guid; SpellManager.CastSpellByNameOn(spellName, "focus"); Me.FocusGuid = tmp; } Edit:
-
Hello, it is possible. Here's an c# example: if (wManager.Statistics.RunningTimeInSec() < 2) { robotManager.Helpful.Logging.Write("Register OnEventsLuaWithArgs"); wManager.Wow.Helpers.EventsLuaWithArgs.OnEventsLuaWithArgs += delegate (LuaEventsId id, List<string> args) { if (id == LuaEventsId.UPDATE_MOUSEOVER_UNIT) { string name = Lua.LuaDoString("name = UnitName('mouseover')", "name"); int minHealth = 110; //cast heal spells if your mouseover target drops under this value int maxrange = 40; //general range for heal spells WoWUnit unit = wManager.Wow.ObjectManager.ObjectManager.GetObjectWoWPlayer().SingleOrDefault(i => i.Name == name); if (unit != null && unit.IsValid && unit.IsAlive && unit.GetDistance < maxrange && unit.HealthPercent < minHealth && !TraceLine.TraceLineGo(ObjectManager.Me.Position, unit.Position, CGWorldFrameHitFlags.HitTestSpellLoS)) { //here you can add more conditions which spell should be cast robotManager.Helpful.Logging.Write("cast heal on mouseover"); wManager.Wow.Helpers.SpellManager.CastSpellByNameOn("Flash Heal", "mouseover"); //here you can start a thread which checks whether you are still mouse over the unit & cast more heals } } }; System.Threading.Thread.Sleep(2000); } and the example how it can be implemented in fightclass: mouseover heal example.xml
-
Hello, for this behavior you need to subscribe lua events with arguments(wManager.Wow.Helpers.EventsLuaWithArgs.OnEventsLuaWithArgs). But i belive the event 'COMBAT_LOG_EVENT_UNFILTERED' is also not working yet for 2.4.3(https://wrobot.eu/forums/topic/5519-register-combat_log-with-args/). If it works you could add a c# code to your fightclass. It could look like this: //example private void EventsLuaWithArgsOnOnEventsLuaWithArgs(LuaEventsId id, List<string> args) { if (id == LuaEventsId.COMBAT_LOG_EVENT_UNFILTERED && args[8] == ObjectManager.Me.Name) { if (args[2] == "Polymorph") { Logging.Write("Someone is casting Polymorph on me"); ///... } } } Otherwise you can use 'UNIT_SPELLCAST_SENT' which should work as intend: if (wManager.Statistics.RunningTimeInSec() < 2) { robotManager.Helpful.Logging.Write("Register OnEventsLuaWithArgs"); wManager.Wow.Helpers.EventsLuaWithArgs.OnEventsLuaWithArgs += delegate(wManager.Wow.Enums.LuaEventsId id, System.Collections.Generic.List<string> args) { if (id == wManager.Wow.Enums.LuaEventsId.UNIT_SPELLCAST_SENT && args[3] == wManager.Wow.ObjectManager.ObjectManager.Me.Name) { if (args[1] == "Polymorph" || args[1] == "Fear") { robotManager.Helpful.Logging.Write("Someone casts " + args[1] + " on me"); wManager.Wow.Helpers.SpellManager.CastSpellByNameOn("Blessing of Sacrifice", "party1"); //you could add here a task in case if you are on global cooldown to cast it later } } }; System.Threading.Thread.Sleep(2000); } and here's an example how you can implement the c# code into your fightclass: BoS example.xml
-
Hi, for me the mounts are working but maybe this will work for you instead: //get the id while mounted robotManager.Helpful.Logging.Write("Mount display id: "+ObjectManager.Me.MountDisplayId); if (ObjectManager.Me.MountDisplayId == x)//insert id here { robotManager.Helpful.Logging.Write("Traveler's Tundra Mammoth found"); }
-
Disable Pull Delay
reapler replied to Amazing Snake's topic in WRobot for Wow The Burning Crusade - Help and support
I think on the grinder side you can't do much more maybe add some spots on the same place maybe. Otherwise you need to write a plugin: 1. option would be to restart product if player standing still & out of combat & not regen 2. option would be to write an on behavior to target your npc by entry but so far i've searched you can only get the targetentry by using xml function 3. option wait til someone fix it up or can offer a better solution ;) -
Hello, this should work: Grinder.Bot.GrinderSetting.CurrentSetting.ProfileName = "your profile"; //uncomment here if profile still not changed /* Grinder.Bot.GrinderSetting.CurrentSetting.Save(); Grinder.Bot.GrinderSetting.Load(); Products.ProductRestart(); //maybe needed */
-
Disable Pull Delay
reapler replied to Amazing Snake's topic in WRobot for Wow The Burning Crusade - Help and support
Hello, have you tried in your grinder editor to check "Is a Hotspot (no path looping)" for your zone? If yes and the problem still persist i guess the list is updated internally by movement & attacks on player so it could be resolved by a plugin but i think the first option should probably work. -
@jrouten I think you should use 'WriteUInt64'. I guess your returned value from memory is also an ulong(=UInt64) variable like your target.guid. I belive they haven't changed it til legion. Otherwise you can check whether the offset is really returning your mouseover guid: At first pick any non moving npc and target it. Try to move your character to a position where the npc is on the left corner on the top of your wow window. Now you need to mouse over the npc(tooltip shouldn't disappear) and get out of the window. As next step you can execute this method to check if the offset is returning the right value: public void checkoffset() { uint MouseOverGUID = 0x00F3EDC0; if (wManager.Wow.Memory.WowMemory.Memory.ReadUInt64(MouseOverGUID) == ObjectManager.Me.Target) { robotManager.Helpful.Logging.Write("offset ok"); } else { robotManager.Helpful.Logging.Write("Got different values:\n" +"Read guid from memory: "+ wManager.Wow.Memory.WowMemory.Memory.ReadUInt64(MouseOverGUID) +"\nNeeded guid: "+ ObjectManager.Me.Target); } } If you've done everything right & it still prints different values you have no choice to search it by yourself ;) You can take for this task a safe memory tool to search for it or searching it with wrobot in a read loop. First option would be better but i don't know if the tools like cheat engine are safe on live. In the end i can't offer more help(i have no live-account) so i wish you good luck