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.

reapler

Elite user
  • Joined

  • Last visited

Solutions

  1. reapler's post in Can 2 wrobot speak together? was marked as the answer   
    Hello, you may take a look into memory mapped objects / remote procedure call(RPC). 
    For example:
    https://github.com/spazzarama/SharedMemory
    http://csharptest.net/projects/rpclibrary/index.html
    These can be also installed via nuget packet manager on Visual Studio and can be binded with fody with your distributed library(fightclass / plugin).
    Note: RPC is rather for client / server communication but you may also exchange data via calls.
     
    If this may take abit too much effort, you can also save a file to disk(like fightclass settings) and read from another wrobot instance.
  2. reapler's post in Sleep/Pause/Wait for all theards was marked as the answer   
    Hello @happiness7 this should fit:
    //minimum net framework 4.5 Task.Run(() => { Products.InPause = true; Thread.Sleep(6000); Products.InPause = false; }); If you also want to block plugin thread, just remove "Task.Run"
  3. reapler's post in Change variable in plugin from quest profile was marked as the answer   
    @Asoter Hello, in order to make a variable changeable by quester, you can transform your current variable into an property.
    Let's say you have an quest counter in your plugin defined as int:
    public int QuestCounter = 0; So you need to change this into this:
    public int QuestCounter { get { return robotManager.Helpful.Var.GetVar<int>(this.GetType().GetProperties().FirstOrDefault()?.Name); } set { robotManager.Helpful.Var.SetVar(this.GetType().GetProperties().FirstOrDefault()?.Name, value); } } You can still treat as an normal variable.
     
    And in Quester it looks like this:

    robotManager.Helpful.Var.SetVar("QuestCounter", 12);  
  4. reapler's post in Is it possible to modify a profile while the bot is running ? was marked as the answer   
    Hello it is possible, but you need to create an extra thread to run your plugin because if the product is stopped it will also dispose your plugin(you also need to write it to memorycache). So you could do different tasks while product is stopped like changing product or i guess even the profile and the other stuff you have mentioned. But it costs work :)
    You can find the thread & cache manager under this post:
    Usage:
    //... public void Initialize()//method from WRobot plugin interface { ThreadManager threadManager = new ThreadManager(); if (!threadManager.CacheManager_.IsIncache("Pulse")) { new ThreadManager().Start(Pulse, true, DateTime.Now.AddMinutes(30)); } } //... public void Pulse() { robotManager.Helpful.Logging.Write("Initialized"); //...things you want to initialize var timer = new robotManager.Helpful.Timer(1000); timer.ForceReady(); while (true) { try { if (Conditions.ProductIsStartedNotInPause && Conditions.InGameAndConnected && timer.IsReady) { robotManager.Helpful.Logging.Write("Pulse"); //...on pulse timer.Reset(); } } catch (Exception e) { robotManager.Helpful.Logging.WriteError(e.ToString()); } Thread.Sleep(30); } }  
    Edit:
    Important: if the mentioned code will be used to change settings it can fail on specific products(automaton is known after some researches)
  5. reapler's post in Possible to change process name of attached WoW process? was marked as the answer   
    So, i wrote a method which works (at least for me):
    [DllImport("user32.dll")] static extern bool SetWindowText(IntPtr hWnd, string text); public void SetText(string processname, string text) { IntPtr mainWindowHandle = IntPtr.Zero; foreach (var obj in System.Diagnostics.Process.GetProcesses()) { //or you can search for other parameter / characteristics which wow contains but searching for processname is normaly enough if (obj.ProcessName == processname)// => in my case the executable in my wow folder is Wow.exe { Logging.Write("Process found: " + obj.ProcessName + "[" + obj.Id + "]."); mainWindowHandle = obj.MainWindowHandle; break; } } if (mainWindowHandle != IntPtr.Zero) { SetWindowText(mainWindowHandle, text); } else { Logging.Write("No process with the name '" +processname+"' was found.\nPlease check your executable's name."); } } usage:
    SetText("Wow","Hello World!");  
     
    but remember:
    processname != windowtext => the field "ProcessName" is read only so it can't be changed on running processes. If you really want to change the process' name, you can only influence it on startup or by creating a new process.
     
     
    Edit: this one gets the right one, if several processes exist:
    [DllImport("user32.dll")] static extern bool SetWindowText(IntPtr hWnd, string text); public void SetText(string processname, string text) { IntPtr mainWindowHandle = IntPtr.Zero; foreach (var obj in System.Diagnostics.Process.GetProcesses()) { if (obj.ProcessName == processname)// => in my case the executable in my wow folder is Wow.exe { if (wManager.Wow.Memory.PlayerName(obj.Id) == wManager.Wow.ObjectManager.ObjectManager.Me.Name) { Logging.Write("Process found: " + obj.ProcessName + "[" + obj.Id + "][" + wManager.Wow.ObjectManager.ObjectManager.Me.Name+ "]"); mainWindowHandle = obj.MainWindowHandle; break; } } } if (mainWindowHandle != IntPtr.Zero) { SetWindowText(mainWindowHandle, text); } else { Logging.Write("No process with the name '" +processname+"' was found.\nPlease check your executable's name."); } }  
  6. reapler's post in Evade Fix was marked as the answer   
    Ok @Drumstix66. I've found the problems.
    1. It doesn't started the procedure because your next npc also evaded so it counted to 2000+.
    2. grinder product / internal behavior itself has a bug which is try to regen even while the player was attacked by the blacklisted npc (i belive event-based regen which doesn't check the incombat condition)
    3. it can happen that the behavior that i've written will be ignored by a customclass(but most of the time people play with Fightclasses anyway so i'll take a look into it later)
    I'll implement a better system to support multiple evaded npc & lock regen behavior.
  7. reapler's post in Move without fighting was marked as the answer   
    Hello, i made a method in my custom grinder that looks like this:
    public void DoNotDisturb(bool s) { log("DoNotDisturb: "+s); wManagerSetting.CurrentSetting.LootMobs = !s; Conditions.ForceIgnoreIsAttacked = s; wManagerSetting.CurrentSetting.DontStartFighting = s; if (s) { Fight.StopFight(); Interact.InteractGameObject(ObjectManager.Me.GetBaseAddress); Blacklist.AllHostileNpc(30, 10000); } //if on the way to vendor stop regen /*if (s && wManagerSetting.CurrentSetting.FoodPercent != 1) { //log("Save percent setting: " + wManagerSetting.CurrentSetting.FoodPercent); FoodPercent = wManagerSetting.CurrentSetting.FoodPercent; DrinkPercent = wManagerSetting.CurrentSetting.DrinkPercent; wManagerSetting.CurrentSetting.FoodPercent = 1; wManagerSetting.CurrentSetting.DrinkPercent = 1; } else if (!s) { //log("restore percent setting" + FoodPercent); wManagerSetting.CurrentSetting.FoodPercent = FoodPercent; wManagerSetting.CurrentSetting.DrinkPercent = DrinkPercent; }*/ } You can uncomment the consumable stuff if you want to use it.
     
    if you wanna check the position of your destination of your path (good to use in a movement event) then this would help you:
    if (MovementManager.CurrentPath.LastOrDefault().DistanceTo(YOURPOSITION) < 5) { DoNotDisturb(true); } else { DoNotDisturb(false); } otherwise this would fit better:
    if (ObjectManager.Me.Position.DistanceTo(YOURPOSITION) > 5) { DoNotDisturb(true); } else { DoNotDisturb(false); }  
    Edit:
    I remember that you need the food percent block because the bot will try to regen in combat
  8. reapler's post in big noob needs help (teleport = false) if using hearthstone was marked as the answer   
    Hello, that what you have described is a minor bug that shouldn't occur while the player is using a portal or hearthstone( maybe it needs to get reported ;) ).
    Here's a workaround for the heartstone that should work:
    wManager.Wow.Helpers.EventsLuaWithArgs.OnEventsLuaWithArgs += (id, args) => { if (id == wManager.Wow.Enums.LuaEventsId.UNIT_SPELLCAST_SUCCEEDED && args[0] == "player" && args[1] == "Hearthstone") { robotManager.Helpful.Logging.Write("Player casted hearthstone\n=>Set CloseIfPlayerTeleported to false"); wManager.wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = false; var t = System.Threading.Tasks.Task.Run(async delegate { await System.Threading.Tasks.Task.Delay(6000); robotManager.Helpful.Logging.Write("Player changed different zone\n=>Set CloseIfPlayerTeleported to true"); wManager.wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = true; }); } };  
    and if the first message coming too late just replace
          UNIT_SPELLCAST_SUCCEEDED
          Delay(6000)
    with
          UNIT_SPELLCAST_START
          Delay(13000)
     
  9. reapler's post in Changing Botbase was marked as the answer   
    ah forget the complicated code, i've found a better way to do it
    for e.g:
    public void Initialize() { Logging.Write("Plugin started."); Thread.Sleep(7000); SwitchProduct("Grinder"); } public void Dispose() { Logging.Write("Disposed"); } public void Settings() { } public void SwitchProduct(string name) { if (Products.ProductName != name && Products.IsStarted) { var t = Task.Run(async delegate { await Task.Delay(500); Logging.Write("Switch to " + name); Products.ProductStop(); Products.LoadProducts(name); Logging.Write("stop & load product"); Thread.Sleep(200); Products.ProductStart(); Logging.Write("product start"); Thread.Sleep(1500); }); t.Wait(); } } I think it's better ;)
    Edit: using System.Threading.Tasks; is also needed

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.