Jump to content

Pudge

WRobot user
  • Posts

    347
  • Joined

  • Last visited

Reputation Activity

  1. Like
    Pudge reacted to Matenia in Matenia's HumanMasterPlugin, all Fightclasses and experimental projects for later expansions, including a Quester   
    The experimental project contains its own quester, own combat engine and own fightclasses using that combat engine. It was developed with 3.3.5a in mind and I tried to move it to Legion+ and 64 bit. None of it works in its current form. Git history may help. This also has a modified version of Reapler's WowDB.
    The fightclasses zip contains everything ever posted on here. It has HMP, my fightclasses etc. This works 100%, you just need to put your own WRobot binaries into the projects.

    I can't maintain the code anymore and at the moment it just costs me money. Everything has officially been abandoned. Servers will go down in June or July whenever my contract runs out.
     
    Feel free to do with this code whatever you want and do as you please. This does NOT include turning it into paid products. 
    I had a good run here on WRobot and hope at least the Wholesome team can make use of some of this.
    wrobot-experimental.zip wrobot-fightclasses.zip
  2. Thanks
    Pudge reacted to Nax in How to read packets?   
    not gonna lie, would be awesome if @DroidzAdd a Asm DetourHook class to wrobot so we can hook functions and have more control over wow. but i know he is using Break points and i dont know if having asm hook will mess with break points.
     
    @Pudgei wrote my own packet sniffer for wow in c++ (its not public) if you want to message me, i can let you use a copy of it. 
     
  3. Like
    Pudge reacted to Nax in PathFinder Error   
    looks like a socket problem
     
  4. Thanks
    Pudge got a reaction from M4k5P0w3r in [Solved] wow error 132 0x80000004 (SINGLE_STEP) at 0023:6B56279F   
    Relogger > General settings 

     
     
  5. Like
    Pudge reacted to Droidz in Autorun plugin   
    Hi,
    I just added the possibility to execute code when starting the bot (code executed after connecting to the authentication server).
    The file must be named 'autorun.cs' and be in the 'Plugins' folder. The static method 'Main.Autorun()' is called after compilation.
    using System.Windows.Forms; public class Main { public static void Autorun() { MessageBox.Show("Hello World!"); } }  
    autorun.cs
  6. Like
    Pudge reacted to Droidz in Getting offsets/opcodes   
    Hi, the correct code is :
    public static string GetTextFixed(string commandline) { uint FrameScript_GetText = 0x0819d40; var commandByte = System.Text.Encoding.UTF8.GetBytes(commandline + "\0"); var luaGetLocalizedTextSpace = wManager.Wow.Memory.WowMemory.AllocData.Get(commandByte.Length); var rCodecave = wManager.Wow.Memory.WowMemory.AllocData.Get(IntPtr.Size); if (luaGetLocalizedTextSpace <= 0) return ""; wManager.Wow.Memory.WowMemory.Memory.WriteBytes(luaGetLocalizedTextSpace, commandByte); wManager.Wow.Memory.WowMemory.Memory.WritePtr(rCodecave, 0); var asm = new[] { wManager.Wow.Memory.WowMemory.CallWrapperCodeRebaseEsp(FrameScript_GetText, 0x0C, luaGetLocalizedTextSpace, -1, 0), "mov ecx, " + rCodecave, "mov [ecx], eax", wManager.Wow.Memory.WowMemory.RetnToHookCode }; wManager.Wow.Memory.WowMemory.InjectAndExecute(asm); var sResult = string.Empty; var a = wManager.Wow.Memory.WowMemory.Memory.ReadPtr(rCodecave); if (a > 0) sResult = wManager.Wow.Memory.WowMemory.Memory.ReadStringUTF8(a); if (string.IsNullOrEmpty(sResult)) sResult = string.Empty; wManager.Wow.Memory.WowMemory.AllocData.Free(luaGetLocalizedTextSpace); wManager.Wow.Memory.WowMemory.AllocData.Free(rCodecave); return sResult; }  
  7. Like
    Pudge reacted to Droidz in 10-year anniversary   
    Happy New Year to all !

    I'm excited to start another year and look forward to continuing to serve you with WRobot.

    This year marks a special milestone for us as we celebrate the 10-year anniversary of WRobot. 
    I'm grateful for your support and look forward to many more years of success together. 

    Thank you for choosing WRobot, and I hope you have a happy, healthy, and prosperous new year!

    View full article
  8. Sad
    Pudge reacted to Droidz in Cannot compile plugin in relogger   
    Hello,
    WRobot compiler doesn't accept recent C# feature like "$".
    Use code like
    var smth = "123"; Logging.Write("smth = " + smth);  
  9. Like
    Pudge got a reaction from happiness7 in Relogger plugin   
    Hi, I am trying to make a plugin for a relogger that will change account data depending on the conditions. I am facing a problem.
    System.Threading.Tasks.Task.Factory.StartNew(() => { for (int i = 0; i < Relogger.Classes.ReloggerGeneralSettings.CurrentSetting.Profiles.Count; i++) { try { var p = Relogger.Classes.ReloggerGeneralSettings.CurrentSetting.Profiles[i]; if (p.Checked && p.Name.ToLower().Contains("myaccountname")) { robotManager.Helpful.Logging.Write("124"); p.CurrentWowAccount.AccountName = "1242"; p.CurrentWowAccount.Password = "1242"; } } catch (Exception e) { robotManager.Helpful.Logging.WriteError(Name + " > " + e); } } }); When trying to read or change the field CurrentWowAccount.AccountName or CurrentWowAccount.Password I get the error:
    [E] 22:26:06 - CHANGEKEY > System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
    в MyNamespace.MyPlugin.b__0()
    Is it possible to implement changing account data through a plugin or is this error a consequence of data protection?
  10. Like
    Pudge reacted to Droidz in Settings question   
    You can try to host http server in relogger (with relogger plugin) (you can get/return values (or xml) from it.
    It's sample of http server, but for wrobot plugin :
    using System.Net; using System.Text; using System.Threading.Tasks; using robotManager.Helpful; using wManager.Wow.Helpers; using wManager.Wow.ObjectManager; public class Main : wManager.Plugin.IPlugin { /* Samples: http://localhost:8000/name http://localhost:8000/jump http://localhost:8000/pos http://localhost:8000/runlua?code=print(%22test%20from%20web%22) */ private readonly bool _debugLog = true; private HttpListener _listener; private readonly string _url = "http://localhost:8000/"; private int _requestCount; private bool _runServer; public void Initialize() { // Create a Http server and start listening for incoming connections _listener = new HttpListener(); _listener.Prefixes.Add(_url); _listener.Start(); if (_debugLog) Logging.WriteDebug("Listening for connections on " + _url); // Handle requests var listenTask = HandleIncomingConnections(); listenTask.GetAwaiter().GetResult(); } public void Dispose() { if (_listener != null) { _runServer = false; _listener.Close(); _listener = null; } } public void Settings() { } private async Task HandleIncomingConnections() { _runServer = true; // While a user hasn't visited the `shutdown` url, keep on handling requests while (_runServer) { // Will wait here until we hear from a connection var ctx = await _listener.GetContextAsync(); // Peel out the requests and response objects var req = ctx.Request; var resp = ctx.Response; // Print out some info about the request if (_debugLog) { Logging.WriteDebug("Request #: " + ++_requestCount); Logging.WriteDebug(req.Url.ToString()); Logging.WriteDebug(req.HttpMethod); Logging.WriteDebug(req.UserHostName); Logging.WriteDebug(req.UserAgent); Logging.WriteDebug(req.Url.AbsolutePath); } var content = string.Empty; // Parse if (req.Url.AbsolutePath == "/name") { content = ObjectManager.Me.Name; } else if (req.Url.AbsolutePath == "/jump") { Move.JumpOrAscend(); content = "done"; } else if (req.Url.AbsolutePath == "/pos") { content = ObjectManager.Me.Position.ToStringXml(); } else if (req.Url.AbsolutePath.StartsWith("/runlua")) { //var r = System.Web.HttpUtility.ParseQueryString(req.Url.Query).Get("code"); var r = req.QueryString["code"]; if (!string.IsNullOrWhiteSpace(r)) { Lua.LuaDoString(r); content = "ok"; } else content = "failed"; } // Write the response info byte[] data = Encoding.UTF8.GetBytes(content); resp.ContentType = "text/html"; resp.ContentEncoding = Encoding.UTF8; resp.ContentLength64 = data.LongLength; // Write out to the response stream (asynchronously), then close it await resp.OutputStream.WriteAsync(data, 0, data.Length); resp.Close(); } } }  
  11. Like
    Pudge reacted to Droidz in Global variable associated with the license key   
    Hi,
    I wrote few time ago sample HTTP server plugin: Test server http.cs
    using System.Net; using System.Text; using System.Threading.Tasks; using robotManager.Helpful; using wManager.Wow.Helpers; using wManager.Wow.ObjectManager; public class Main : wManager.Plugin.IPlugin { /* Samples: http://localhost:8000/name http://localhost:8000/jump http://localhost:8000/pos http://localhost:8000/runlua?code=print(%22test%20from%20web%22) */ private readonly bool _debugLog = true; private HttpListener _listener; private readonly string _url = "http://localhost:8000/"; private int _requestCount; private bool _runServer; public void Initialize() { // Create a Http server and start listening for incoming connections _listener = new HttpListener(); _listener.Prefixes.Add(_url); _listener.Start(); if (_debugLog) Logging.WriteDebug("Listening for connections on " + _url); // Handle requests var listenTask = HandleIncomingConnections(); listenTask.GetAwaiter().GetResult(); } public void Dispose() { if (_listener != null) { _runServer = false; _listener.Close(); _listener = null; } } public void Settings() { } private async Task HandleIncomingConnections() { _runServer = true; // While a user hasn't visited the `shutdown` url, keep on handling requests while (_runServer) { // Will wait here until we hear from a connection var ctx = await _listener.GetContextAsync(); // Peel out the requests and response objects var req = ctx.Request; var resp = ctx.Response; // Print out some info about the request if (_debugLog) { Logging.WriteDebug("Request #: " + ++_requestCount); Logging.WriteDebug(req.Url.ToString()); Logging.WriteDebug(req.HttpMethod); Logging.WriteDebug(req.UserHostName); Logging.WriteDebug(req.UserAgent); Logging.WriteDebug(req.Url.AbsolutePath); } var content = string.Empty; // Parse if (req.Url.AbsolutePath == "/name") { content = ObjectManager.Me.Name; } else if (req.Url.AbsolutePath == "/jump") { Move.JumpOrAscend(); content = "done"; } else if (req.Url.AbsolutePath == "/pos") { content = ObjectManager.Me.Position.ToStringXml(); } else if (req.Url.AbsolutePath.StartsWith("/runlua")) { //var r = System.Web.HttpUtility.ParseQueryString(req.Url.Query).Get("code"); var r = req.QueryString["code"]; if (!string.IsNullOrWhiteSpace(r)) { Lua.LuaDoString(r); content = "ok"; } else content = "failed"; } // Write the response info byte[] data = Encoding.UTF8.GetBytes(content); resp.ContentType = "text/html"; resp.ContentEncoding = Encoding.UTF8; resp.ContentLength64 = data.LongLength; // Write out to the response stream (asynchronously), then close it await resp.OutputStream.WriteAsync(data, 0, data.Length); resp.Close(); } } } You can use one port by bot.
     
    But in any case what you want to do require programming knowledge. You can also create one server with API type REST to store data (with C# or more easy tools like  python or nodejs), and use this API with bot plugin. You have a lot of possibility, but I can't add it to the bot API.
  12. Like
    Pudge reacted to Sye in Snippets C# codes for Fight Classes   
    (Csharp) - return all the Glyph a player has. 
    private static List<string> Glyphs() { var GlyphNames = @" local Index = {} for i = 1, GetNumGlyphSockets() do local id = select(3, GetGlyphSocketInfo(i)); if id ~= nil then local GlyphName = GetSpellInfo(id); tinsert(Index, GlyphName); end end return unpack(Index); "; return Lua.LuaDoString<List<string>>(GlyphNames); } or if people do not wanna use .Contain in a list format. here is a boolen.
     
    private static bool Glyphs(string GlyphNum) { var GlyphNames = $@" for i = 1, GetNumGlyphSockets() do local id = select(3, GetGlyphSocketInfo(i)); if id ~= nil then local GlyphName = GetSpellInfo(id); if GlyphName and string.find(GlyphName, ""{GlyphNum}"") return true; break; end end end return false; "; return Lua.LuaDoString<bool>(GlyphNames); }  
  13. Like
    Pudge got a reaction from 79135 in Pathfinder   
    ⚠️⚠️⚠️ The problem is urgent. The bot breaks through the wall in cities like harry potter into the portal to hogwarts. What happens to meshes / pathfinding? And why in cities? Why can't the meshes be saved in the bot folder in case of problems with the pathfinder server ?
  14. Like
    Pudge reacted to Droidz in Copy log to desktop code   
    Hi, it is code:
    private void ButtonCopyLog(object sender, System.Windows.RoutedEventArgs e) { try { var logFilePath = $@"{Others.GetCurrentDirectory}\Logs\{Logging.NameCurrentLogFile()}"; var logCopyDest = $@"{Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)}\{Logging.NameCurrentLogFile()}"; if (File.Exists(logCopyDest)) File.Delete(logCopyDest); File.Copy(logFilePath, logCopyDest); Logging.Write("[Logging]" + Logging.NameCurrentLogFile() + " copied on your desktop."); } catch { } }  
  15. Like
    Pudge got a reaction from 79135 in urgently   
    [E] 19:09:33 - PathFinder server seem down, use offline pathfinder.
    Offline pathfinding does not work, a bunch of bots run into the wall in capitals.
    @Droidz, maybe you can do something with it, this is not the first time a problem arises when your servers crash and many of bots, after casting the hearthstone, simply run into the wall in one place, in front of everyone's eyes.
  16. Like
    Pudge got a reaction from bio33 in urgently   
    [E] 19:09:33 - PathFinder server seem down, use offline pathfinder.
    Offline pathfinding does not work, a bunch of bots run into the wall in capitals.
    @Droidz, maybe you can do something with it, this is not the first time a problem arises when your servers crash and many of bots, after casting the hearthstone, simply run into the wall in one place, in front of everyone's eyes.
  17. Like
    Pudge got a reaction from scsfl in fly away if you meet a specific player   
    Wonderful, it finally worked, but he still doesn’t want to mount, he had to add the command manually.
     
     
    You can use it to avoid unwanted players, if this occurs, the bot will stop all actions and fly away to the Crystal Song Forest, the position can be changed, it works only in Northrend
    plagin.cs
  18. Like
    Pudge reacted to Droidz in Help - PathFinder server seem down   
    Hello, I restarted all servers, problem should be resolved
  19. Like
    Pudge reacted to Droidz in Stop group of bots by Relogger   
    Hi, try
    for (int i = 0; i < Relogger.Classes.ReloggerGeneralSettings.CurrentSetting.Profiles.Count; i++) { var p = Relogger.Classes.ReloggerGeneralSettings.CurrentSetting.Profiles[i]; if (p.CurrentWowAccount.Server == "Server Name") { if (p.Status == Relogger.Classes.Status.Running) { if (p.ExistWowProcess()) { p.KillWowProcess(); robotManager.Helpful.Logging.Write(Name + ": Kill wow for " + p.Name); } if (p.ExistWRobotProcess()) { p.ExistWRobotProcess(); robotManager.Helpful.Logging.Write(Name + ": Kill Bot for " + p.Name); } p.Stop(); Thread.Sleep(Others.Random(5000, 10000)); } } } I added 
    if (p.CurrentWowAccount.Server == "Server Name") Make one plugin by serveur
     
  20. Thanks
    Pudge got a reaction from happiness7 in ResetCustomClass   
    Hi everyone, I have a question, how better to change the fight class... When I use the next code
    if(ObjectManager.Me.WowClass == WoWClass.Paladin) { wManager.wManagerSetting.CurrentSetting.CustomClass = "ret_pal.cs"; } CustomClass.DisposeCustomClass(); Thread.Sleep(2000); CustomClass.LoadCustomClass(); Sometimes the fiteclass for some reason does not load, can someone tell me another way without bugs?
    And I would also like to understand what the CustomClass.ResetCustomClass() method does?
  21. Like
    Pudge reacted to Zer0 in ResetCustomClass   
    CustomClass.ResetCustomClass() reloads the current FightClass. Most products call it when the PLAYER_LEVEL_UP Lua event is fired.
  22. Like
    Pudge reacted to Marsbar in Custom Script Question   
    You can hook onto the https://wrobot.eu/byme/doc/html/E-robotManager.Products.Products.OnChangedIsStarted.htm event and run whatever you need to in there
  23. Like
    Pudge reacted to Droidz in Official WRobot API Documentation   
    WRobot API Documentation
    Website: https://wrobot.eu/byme/doc/
    Offline documentation: https://wrobot.eu/byme/doc/WRobot.chm
    (from Wotlk version, Updated the 01 February 2021)
     
     Unofficial documentation is available here   , it is still very useful because it contains examples and descriptions that are not available in the official.
     
     
  24. Like
    Pudge reacted to Zer0 in c# offmesh connection to use elevator   
    Here's the method I've made to handle elevators:
    public static void AddTransportOffMesh( Vector3 waitForTransport, Vector3 stepIn, Vector3 objectDeparture, Vector3 objectArrival, Vector3 stepOut, int objectId, ContinentId continentId, string name = "", float precision = 0.5f) { OffMeshConnection offMeshConnection = new OffMeshConnection(new List<Vector3> { waitForTransport, new Vector3(stepIn.X, stepIn.Y, stepIn.Z, "None") { Action = "c#: Logging.WriteNavigator(\"Waiting for transport\"); " + "while (Conditions.InGameAndConnectedAndProductStartedNotInPause) " + "{ " + $"var elevator = ObjectManager.GetWoWGameObjectByEntry({objectId}).OrderBy(o => o.GetDistance).FirstOrDefault(); " + $"if (elevator != null && elevator.IsValid && elevator.Position.DistanceTo(new Vector3({objectDeparture.X.ToString().Replace(",", ".")}, {objectDeparture.Y.ToString().Replace(",", ".")}, {objectDeparture.Z.ToString().Replace(",", ".")})) < {precision.ToString().Replace(",", ".")}) " + "break; " + "Thread.Sleep(100); " + "}" }, new Vector3(stepOut.X, stepOut.Y, stepOut.Z, "None") { Action = "c#: Logging.WriteNavigator(\"Wait to leave Elevator\"); " + "while (Conditions.InGameAndConnectedAndProductStartedNotInPause) " + "{ " + $"var elevator = ObjectManager.GetWoWGameObjectByEntry({objectId}).OrderBy(o => o.GetDistance).FirstOrDefault(); " + $"if (elevator != null && elevator.IsValid && elevator.Position.DistanceTo(new Vector3({objectArrival.X.ToString().Replace(",", ".")}, {objectArrival.Y.ToString().Replace(",", ".")}, {objectArrival.Z.ToString().Replace(",", ".")})) < {precision.ToString().Replace(",", ".")}) " + "break; " + "Thread.Sleep(100); " + "}" }, }, (int)continentId, OffMeshConnectionType.Unidirectional, true); offMeshConnection.Name = name; OffMeshConnections.Add(offMeshConnection, true); } And here is how I use it:
    AddTransportOffMesh(new Vector3(2865.628, 6211.75, 104.262), // wait for transport new Vector3(2878.712, 6224.032, 105.3798), // Step in new Vector3(2878.315, 6223.635, 105.3792), // Object departure new Vector3(2892.18, 6236.34, 208.908), // Object arrival new Vector3(2880.497, 6226.416, 208.7462, "None"), // Step out 188521, ContinentId.Northrend, "Warsong Hold Elevator UP"); AddTransportOffMesh(new Vector3(2880.497, 6226.416, 208.7462, "None"), // wait for transport new Vector3(2891.717, 6236.516, 208.9086, "None"), // Step in new Vector3(2892.18, 6236.34, 208.908), // Object departure new Vector3(2878.315, 6223.635, 105.3792), // Object arrival new Vector3(2865.628, 6211.75, 104.262), // Step out 188521, ContinentId.Northrend, "Warsong Hold Elevator DOWN"); I've used this for our FlightMaster plugin. In theory, it should also work for other transports.
  25. Thanks
    Pudge reacted to TheSmokie in Get Account Name   
    Hey @pudge, While i was looking to help you, I've looking into offsets that does what you asking, this works, I tested it on my account and it returned the name. enjoy.
    Note : i only ran in dev tools.
    var accountName = wManager.Wow.Memory.WowMemory.Memory.ReadStringUTF8(0x10D7914); if(!string.IsNullOrEmpty(accountName)) { Logging.Write(accountName.ToString()); }  
×
×
  • Create New...