Jump to content

Marsbar

Elite user
  • Posts

    411
  • Joined

  • Last visited

Reputation Activity

  1. Like
    Marsbar reacted to Matenia in [Feature request/Help] Smart targeting/pulls   
    Hey @Droidz,
    currently in older expansions like vanilla/tbc/wrath the bot is lacking a few very important features that are probably not too hard for you to implement. 
    I could try fixing all of these through my plugin, but it's hard to do, because a lot of bot behavior is unpredictable I don't know the inner workings of your code, so for a lot I have to do guess work.
     
    So here are some suggestions that early expansions really need:
    regen takes priority BEFORE "Attack before being attacked", currently especially after rezzing the bot will keep attacking new targets after combat because they are in 20 yards, even if they wouldn't attack you (it's better to rely on IsAttacked state during regen) smart rezz (and small bug fix), try to REALLY find a save spot to rezz, but more importantly recognize when you can't rezz and move a bit closer to the corpse, some servers don't calculate distance 100% the same as the client and won't accept rezz if you aren't a bit closer. I use code to solve this1 smart target/pulls - before pulling check if any units are near by the pulled unit (20 yards + number from general settings), then ALSO check every Vector3 2 yards between you and your target  move around if the above conditions aren't met for any targets (find a line between you and target with no mobs between) (slightly improved AvoidIt plugin) If Conditions.ForceIgnoreIsAttacked is set, do NOT try to enter regen mode while you are still being attacked - keep running to the next waypoint or try to drop combat A way to avoid certain zones when doing long-travel (this is enough if we can add it through API) - for example if we are level 25, avoid Burning Steppes zone in all paths, but you can give an alternative "Task" or "Action" (where it would then take the tram, executing your own C# code, for example) ??? (reserved for more things)  
     
  2. Thanks
    Marsbar got a reaction from Seminko in Make plugins product specific   
    robotManager.Products.Products.ProductName ?
    while (robotManager.Products.Products.ProductName == "Grinder") { asfhyhaskasfasjaisugbfasufa }
    Not actually tested
  3. Thanks
    Marsbar reacted to Seminko in Light's Hope: Elysium realm renamed to Lightbringer - how to batch rename WRobot settings   
    I have over 100 XML settings files for WRobot. Here's how you can change all of them at once.
    Run Windows PowerShell, navigate to the settings folder and do:
    Get-Childitem *.xml | foreach { rename-item $_ $_.Name.Replace("Elysium", "Lightbringer") } Enjoy
  4. Like
    Marsbar reacted to Arcangelo in Paid 1-60 questing profiles gone   
    Droidz and I have ended in an agreement.
    I have a lot of work until Monday, so the files will be hidden untill then, and then I push out my updated profiles (encrypted - so they will have to be redownload - this will ensure my profiles ain't shared illegally, but should have no impact on the users, other than I have to set it specific up to all users sepertly).
    So the profile will be up again Sunday evening / Monday morning.
     
    Thanks for the understandment
  5. Like
    Marsbar reacted to Arcangelo in Paid 1-60 questing profiles gone   
    Okay I belive i own most people an explanation about what have happend.
     
    I haven't been released a lot of updates for the profile, mostly as i have been able to run them pretty smooth with the right setup.
    After that i have grown tired of people keep asking for stuff without even taking 2 min to read the "read me" file that comes with the profile.
    A lot of the "bugs" have come from people not setting up the addons, or not skipping the quests their toons are not strong enough to handle (this have been a big error).
    Other than that the wrobot update like 2 month ago broke the qusting tool, meaning i really coulden't make new quests, with caused me to almost ragequit the project, as there where new problems everytime I logged on.
    But with blizzard annonce of legacy servers I will take the project up again, and keep working on it IF me and droidz can agree on some terms (I need his help to handle some of the server side bugs that comes along)
     
    - so for now the thread is hidden, untill we have worked something out.
    Ill update it when i know more, if not i propperly move on to another bot with my project.
  6. Thanks
    Marsbar got a reaction from Seminko in [Resolved] Pause if player nearby ONLY AFTER regen finishes   
    foreach (var player in ObjectManager.GetObjectWoWPlayer().Where(p => p.GetDistance <= 120)) { Logging.Write("Player '" + player.Name + "' is close by!"); } Guess you could do that. May want to add a timer in there though so it doesn't spam the log like mad.
    edit: Maybe something like that around it>
    using Timer = robotManager.Helpful.Timer; public Timer PlayerNotificationTimer = new Timer(); public void GetPlayers() { if (PlayerNotificationTimer.IsReady) { foreach (var player in ObjectManager.GetObjectWoWPlayer().Where(p => p.GetDistance <= 120)) { Logging.Write("Player '" + player.Name + "' is close by!"); } PlayerNotificationTimer = new Timer(1000 * 5); } }  
  7. Thanks
    Marsbar reacted to Seminko in Switch target, polymorph, switch to original target   
    Well the way I understand it is that if you don't use OnFightLoop and you call InteractGameObject and it instantly switches back to the original target, the one bot decided to target.
    I can polymorph a mob but it will keep it targetted until it dies despite InteractGameObject switching to a different target.
    So if the bot targets MOB1 and you InteractGameObject with MOB2 and cast Poly, it might work. But if the bot targets MOB1 and you poly MOB1, it will keep switching between MOB2 and MOB1.
    I guess it could work if polytarget was NOT my original target.
  8. Thanks
    Marsbar reacted to Matenia in Switch target, polymorph, switch to original target   
    Pretty much this. Plus, since the bot runs on another thread, sometimes it switches your target back BEFORE your poly cast even starts. Then you end up polying 2 targets back and forth and looking like a retard. Basically why Jasabi could never get polymorph to work correctly, I believe.
    cancelable.Cancel = true is correct. However, I recommend NOT breaking the OnFightLoop event handler UNTIL your target has been successfully polymorphed. You can solve this with a while loop (Thread.Sleep inside) until poly is on another target.
  9. Like
    Marsbar reacted to Seminko in [Resolved] Pause if player nearby ONLY AFTER regen finishes   
    Well it was easier then I thought :)
  10. Like
    Marsbar got a reaction from Seminko in [SOLVED] Move after Frost Nova - is it really that hard?   
    No, that's why you were getting the stuttering. It was trying to go back to doing what it was and then hitting the condition again (i think). We're adding extra behavior to the onfightloop.
    In regards to moving to a "safe" position, it may not be as hard as we think. We need to change the direction of the vector if a mob is too close to the end position.
    If you look at the code you can see that the xvector and yvector are our position xy minus the target xy. This ends up giving us the x and y distance we move in the x and y directions.
    Example (ignoring z axis):
    Our target is at position x:55,y:45
    We are at position x:48,y:44
    Our x position minus the target x position = our x vector == 48 - 55 = -7
    Our y position minus the target y position = our y vector == 44 - 45 = -1

    What we could do is then add or subtract to that vector if an enemy is too close to our target pos, which would change the direction from the Me pos. 
    (I'm at work again so cant play with it but it's actually quite interesting because I'm starting to get how this works lol)
  11. Like
    Marsbar got a reaction from Apexx in [SOLVED] Move after Frost Nova - is it really that hard?   
    Try adding 
    FightEvents.OnFightLoop += (unit, cancelable) => { if (ObjectManager.Target.GetDistance < 8) { var xvector = (ObjectManager.Me.Position.X) - (ObjectManager.Target.Position.X); var yvector = (ObjectManager.Me.Position.Y) - (ObjectManager.Target.Position.Y); Vector3 newpos = new Vector3() { X = ObjectManager.Me.Position.X + (float)((xvector * (20 / ObjectManager.Target.GetDistance) - xvector)), Y = ObjectManager.Me.Position.Y + (float)((yvector * (20 / ObjectManager.Target.GetDistance) - yvector)), Z = ObjectManager.Me.Position.Z }; MovementManager.Go(PathFinder.FindPath(newpos), false); Thread.Sleep(1500); } }; edit: the thread.sleep is a bit of a workaround to stop whatever else is interfering
    you may also want to increase that if distance to higher than 8
  12. Thanks
    Marsbar got a reaction from Seminko in [SOLVED] Move after Frost Nova - is it really that hard?   
    Try adding 
    FightEvents.OnFightLoop += (unit, cancelable) => { if (ObjectManager.Target.GetDistance < 8) { var xvector = (ObjectManager.Me.Position.X) - (ObjectManager.Target.Position.X); var yvector = (ObjectManager.Me.Position.Y) - (ObjectManager.Target.Position.Y); Vector3 newpos = new Vector3() { X = ObjectManager.Me.Position.X + (float)((xvector * (20 / ObjectManager.Target.GetDistance) - xvector)), Y = ObjectManager.Me.Position.Y + (float)((yvector * (20 / ObjectManager.Target.GetDistance) - yvector)), Z = ObjectManager.Me.Position.Z }; MovementManager.Go(PathFinder.FindPath(newpos), false); Thread.Sleep(1500); } }; edit: the thread.sleep is a bit of a workaround to stop whatever else is interfering
    you may also want to increase that if distance to higher than 8
  13. Like
    Marsbar reacted to reapler in Bag.GetBagItem()   
    Not fully tested, but this should work:
    /// <summary> /// Used to get the item quantity by name. /// </summary> /// <param name="itemName">The item name.</param> /// <remarks>Replacement for GetItemCount in vanilla.</remarks> /// <returns></returns> public static int GetItemQuantity(string itemName) { var execute = "local itemCount = 0; " + "for b=0,4 do " + "if GetBagName(b) then " + "for s=1, GetContainerNumSlots(b) do " + "local itemLink = GetContainerItemLink(b, s) " + "if itemLink then " + "local _, stackCount = GetContainerItemInfo(b, s)\t " + "if string.find(itemLink, \"" + itemName + "\") then " + "itemCount = itemCount + stackCount; " + "end " + "end " + "end " + "end " + "end; " + "return itemCount; "; return Lua.LuaDoString<int>(execute); } /// <summary> /// Used to delete all items by name. /// </summary> /// <param name="itemName">The item to delete.</param> /// <param name="leaveAmount">The amount of items which remain in the bag.</param> /// <remarks>Bug at links with "-"</remarks> public static void DeleteItems(string itemName, int leaveAmount) { var itemQuantity = GetItemQuantity(itemName) - leaveAmount; if (string.IsNullOrWhiteSpace(itemName) || itemQuantity <= 0) return; var execute = "local itemCount = "+itemQuantity+"; " + "local deleted = 0; " + "for b=0,4 do " + "if GetBagName(b) then " + "for s=1, GetContainerNumSlots(b) do " + "local itemLink = GetContainerItemLink(b, s) " + "if itemLink then " + "local _, stackCount = GetContainerItemInfo(b, s)\t " + "local leftItems = itemCount - deleted; " + "if string.find(itemLink, \""+ itemName + "\") and leftItems > 0 then " + "if stackCount <= 1 then " + "PickupContainerItem(b, s); " + "DeleteCursorItem(); " + "deleted = deleted + 1; " + "else " + "if (leftItems > stackCount) then " + "SplitContainerItem(b, s, stackCount); " + "DeleteCursorItem(); " + "deleted = deleted + stackCount; " + "else " + "SplitContainerItem(b, s, leftItems); " + "DeleteCursorItem(); " + "deleted = deleted + leftItems; " + "end " + "end " + "end " + "end " + "end " + "end " + "end; "; Lua.LuaDoString(execute); } Usage:
    DeleteItems("Soul Shard", 20);  
  14. Like
    Marsbar reacted to reapler in Bag.GetBagItem()   
    @Marsbar Hello, i've written a method for this:
    public struct BagInfo { public int Bag; public int Slot; public BagInfo(int bag, int slot) { Bag = bag; Slot = slot; } public override string ToString() { return "Bag = " + Bag + " ; Slot = " + Slot; } } /// <summary> /// Used to get a list of locations of the item as bag and slot position. /// </summary> /// <param name="itemName">The item name to search.</param> /// <returns></returns> public static List<BagInfo> GetItemLocations(string itemName) { var execute = "local bs = {}" + "for b=0,4 do " + "if GetBagName(b) then " + "for s=1, GetContainerNumSlots(b) do " + "local itemLink = GetContainerItemLink(b, s) " + "if itemLink then " + "local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemTexture, itemSellPrice = GetItemInfo(itemLink) \t" + "if itemName == '"+itemName+"' "; execute += "then " + "table.insert(bs, b); " + "table.insert(bs, s); " + "\tend\tend\tend end end return unpack(bs);"; var bs = Lua.LuaDoString<List<int>>(execute); var list = new List<BagInfo>(); for (var i = 0; i < bs.Count; i += 2) list.Add(new BagInfo(bs[i], bs[i+1])); return list; } Usage:
    GetItemLocations("Mutton Chop").ForEach(i => Logging.Write(i.ToString()));  
    Here are also other similar methods to interact with items:
     
  15. Like
    Marsbar reacted to arkhan in move back if... add code in fightclass editor   
    static Main() { wManager.Events.FightEvents.OnFightLoop += (unit, cancelable) => { if (unit.IsValid && ObjectManager.Target.IsTargetingMyPet && ObjectManager.Target.GetDistance <= 5) { wManager.Wow.Helpers.Move.Backward(Move.MoveAction.PressKey, 1500); } }; } 1)not tested, but that doesn't check if they are an obstacle behind you.
    2) you could do more properly by using  
    MovementManager.Go(PathFinder.FindPath(ObjectManager.Me.Position, new Vector3(ObjectManager.Me.Position.X, ObjectManager.Me.Position.Y + 15, ObjectManager.Me.Position.Z))); For example
  16. Like
    Marsbar reacted to Droidz in The WRobot rant (long)   
    Hello,
    Honestly the BG bot isn't a priority for me, I even regret having released it (because now I can not delete it). The BG bot destroys the game (for legit users), the BGs are sensed to be fun to play. I do WRobot to help in repetitive tasks (gathering, leveling, quests...), but not to bother the other players (otherwise I would also do cheats/hacks...), and this product works with default settings (on live servers) (even if you have to keep an eye on it). And if you use a separate hack and disable trees and object collisions you can understand why you get banned (cheat is easy to detect).
    6: This depend maintly of your fightclass
    7: https://wrobot.eu/files/file/1085-evadehate/
    9: This problem is caused by the option "Randomize path" (in product settings) when you profile contains positions near the ground (or if you use profile with underground positions).
    Yes WRobot is not perfect (it is a software, not a human), WRobot for official server is probably better (less bugs) than WRobot for private servers, I have a big list of bugs/suggestions to do, but with good profile/fightclass (gatherer, grinder, quester) you can run more than 10 hours per day WRobot without problem and no more one stuck by hours (this in all version, private or official servers), but for that you need to adapt your profile at WRobot, and not wait than WRobot adapts to your profile. And WRobot is probably the more advanced bot for private servers, if you found another bot better do not hesitate to use him.
    I repeat that I know that WRobot is not perfect and that I agree with you on some of your remarks , but you exaggerate, look at the ban reports and you will see than the number of bans is very little. You can use WRobot  several hours per day during several years without problem if you use good profiles/fightclasses. Now, why you, you get ban all few days/weeks while anothers use WRobot since several years without ban (like me)? I don't know.
  17. Like
    Marsbar got a reaction from masamyyris in Resurrecting bugged? (elysium)   
    The attached may work, untested plugin.
    RezzRange.cs
    I get this issue sometimes too but its very rare, never really bothered about thinking of a way to fix it before now.
  18. Thanks
    Marsbar got a reaction from pattax in Accept Quest   
    I assume you need to go into the gossip option first, then do one of these.
    Edit: Try manually selecting a gossip option (a quest) and then running the AcceptQuest from the dev console.
  19. Like
    Marsbar reacted to reapler in Rogue Stealth to avoid players   
    Forgot that you are playing on vanilla, so "CancelUnitBuff" doesn't exist in the api.
    I replaced it just with another cast: StealthOnNearbyPlayers+stopfishing.xml
  20. Like
    Marsbar reacted to Jasabi in Complete List of FightClassEditor functionality ( Vanilla WoW )   
    Anything that can be done in v1/v3 of zzukbot can be done in wRobot. I have developed stuff on zzukbot back in the day and v3 of zuukbot is nothing more than WRobot without any botbases.
    The fight has nothing to do with the engine, it has to do with what you code and how cleverly you manage to set up your fightclass. The only restriction on WRobot is your own creativeness.
  21. Like
    Marsbar got a reaction from eeny in Complete List of FightClassEditor functionality ( Vanilla WoW )   
    The bot is basically a backport of the retail bot, functions the retail bot has haven't been stripped out for the private server version and the reason some of the functions don't work is because the retail version may have been using methods that did not exist in the earlier versions of WoW. I would say this is by far the most fully featured vanilla bot and anything that doesn't currently work can always be raised as a bug report (or worked around by creating a plugin).
    In regards to your fight class question, the editor is used as a user friendly way to create a fightclass, if you wish to create a complicated/intricate fightclass that responds well you'd have to do it in C#.
    There are many example fightclasses on the downloads section (xml and c#), even if the c# ones are for a different version of wow you can pretty much still copy the methods and exchange them for something more compatible (like LUA).
    For the cost of the bot I think you need to give it some more credit, even if there is a lack of documentation (who likes writing documentation anyways lol?).
  22. Like
    Marsbar got a reaction from Droidz in Quester - Stops Attacking   
    I have experienced this but only when i had pfUI running. It could be an addon interfering.
  23. Like
    Marsbar reacted to camelot10 in wManager.DevelopmentTools CSharp   
  24. Like
    Marsbar reacted to Droidz in Debug Plugins / Fight classes / Custom Profiles (*.dll)   
    Problem resolved, update wrobot again 
  25. Like
    Marsbar reacted to Droidz in Debug Plugins / Fight classes / Custom Profiles (*.dll)   
    Hello,
    In visual studio create new "Class Library" project (.NET Framework 4.0). Add references "robotManager.dll", "wManager.dll", "MemoryRobot.dll" (you can found files in folder "wrobot\bin"). In the Project panel, right-click the name of your solution and then click "Add Existing Project". Select type of file *.exe and select "WRobot.exe" (if you play on private server) or file with name like "UqtfGgP.exe" (if you play on official server). In the Project panel, right-click on "WRobot.exe" (or file with name like "UqtfGgP.exe") and click on "Set as StartUp Project." Now change output directory (by sample "wrobot\plugins" if you want create plugin). Now press F5 to start debug. To launch quickly WRobot you can add argument "AutoAttachAndLog=true" (for it, in the project panel, right-click on "******.exe" and click on "Property". If you get error, try to change "Platform target" to "x86" in project "Property" > "Build". You can also attach debugger to running process : https://msdn.microsoft.com/en-us/library/3s68z0b3.aspx
×
×
  • Create New...