What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal

[Plugin] MyBuddy.Local a.k.a Follow Me

xsol

Member
Joined
Nov 7, 2011
Messages
503
Reaction score
12
BETA - USE AT YOUR OWN RISK - Don't be afraid of the disclaimer!!!

  • What does it do: It enables one bot to follow another bot and help fight.
  • It can't follow through portals. I plan to ask the BuddyTeam for help with an event possibly.
  • It can't auto join/follow around through games.


All accounts must be running local on the same PC

There can only be one leader or things will break.

Instructions Leader:
  1. Launch the D3 for the leader.
  2. Attach DB to the leader.
  3. Load the Combat Bot profile.
  4. Enable MyBuddy.Leader
  5. Start DB
  6. Create Game

Instructions Follower:
  1. Launch the D3 for the follower.
  2. Attach DB to the follower.
  3. Load the Combat Bot profile.
  4. Enable MyBuddy.Follower
  5. Start DB
  6. Join Game


This is intended to simply allow you to play with your other accounts will you drive one account using the Combat Bot. Currently you must click all portals dialogs etc. As things develop I will attempt to enhance that aspect as well as others.

Speed tweaks etc to be expected.

SVN: Project
Zip: Zip
Combat Bot Profile: XML File

If you have had problems with looting try:
Thanks to: stevenr and to COW6111 for the find.
Code:
<Profile>
	<Name>Combat Bot</Name>
	<KillMonsters>True</KillMonsters>
	<PickupLoot>True</PickupLoot>
  <Order>
      <MoveTo />
  </Order>	
</Profile>
 
Last edited:
How does creation/joining of games work? Can the leader create a game and then have the follower join it afterwards?
 
How does creation/joining of games work? Can the leader create a game and then have the follower join it afterwards?
Not yet, but I hope to add that as DB adds features or users find features.
 
Can this be simplified to follow a targeted friendly player, even if it loses the Leader Plugin-like functionality familiar to Honorbuddy users?

What I'd like to do is follow any player for brief periods (like you could with D2) and perhaps assist when along for the ride... A full client-server relationship need not be established; e.g. I'd like to follow a player even if he isn't using DemonBuddy....
 
Can this be simplified to follow a targeted friendly player, even if it loses the Leader Plugin-like functionality familiar to Honorbuddy users?

What I'd like to do is follow any player for brief periods (like you could with D2) and perhaps assist when along for the ride... A full client-server relationship need not be established; e.g. I'd like to follow a player even if he isn't using DemonBuddy....

That is an interesting idea, I'll have to look into it.

It would just always follow the nearest player probably.
 
That is an interesting idea, I'll have to look into it.

It would just always follow the nearest player probably.

I would be interested in that kind of plugin, follow the leader so I could play one account and have the bot running after me helping out. Even if he did not click portals and stuff like that it would be awsome just to have him follow you and help out.
 
I would very much like for it to just follow a person, maybe you could specify their name or it would just follow the highest level person. I'd like to have 3 followers but I only have 3 sessions
 
it would be even more awesome if the plugin would allow it to join the highest mission ( or set mission ) in a public game, pick the highset lvl guy, got to him/her either by flag or walking in town and then keeps following that person thrue everything. when he tp's he checks loc if in town u tp as well if not use the stone he prob used.

anyways its prob to good to be true, and i have no idea how the plugins work.

just starting to get a firm grasp on loot rules


BUT
a plugin that u can set to follow someone or the closets player would be awesome
just join a game and watch ur toon follow a player or group and help out
 
I'm assuming theres no functionality for accepting a game invite/going through waypoints. I was hoping to write a plug-in to simply have a character accept an invite, use a specific waypoint and follow me as i manually kill monsters(boosting another account). if there is anything like this let me know =)
 
I'd be really happy if it just followed the highest level person in the game around, without needing a bot on the power leveler. just a bot for each leecher.
 
maker of this plugin hasnt replied in more then a week
im thinking somebody else should try and make a proper bot that does a certain public game follows a player thrue everything
 
I have lots of projects I work on, but I will spend another hour or two on this to see if I can get the auto follow player working.

Beta follows nearest player no leader.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//buddy
using Zeta;
using Zeta.Common;
using Zeta.CommonBot;
using Zeta.Common.Plugins;
using Zeta.Internals;
using Zeta.Internals.Actors;
using Zeta.Internals.Service;

namespace MyBuddy.Local
{
    public class BuddyAutoFollower : IPlugin
    {
        DateTime LastPostionCheck { get; set; }

        public string Author
        {
            get { return "xsol"; }
        }

        public string Description
        {
            get { return "Follows the leader."; }
        }

        public System.Windows.Window DisplayWindow
        {
            get { return null; }
        }

        public string Name
        {
            get { return "BuddyAutoFollower"; }
        }

        public void OnDisabled()
        {

        }

        public void OnEnabled()
        {

        }

        public void OnInitialize()
        {

        }

        ACD leader = null;
        public void OnPulse()
        {
            if (DateTime.Now.Subtract(LastPostionCheck).TotalMilliseconds > 2250)
            {
                try { Zeta.CommonBot.LootTargeting.Instance.Pulse(); }
                catch (Exception exLooter) { Logging.Write(LogLevel.Verbose, "BuddyAutoFollower: " + exLooter.Message); }

                LastPostionCheck = DateTime.Now;
                try
                {
                    //find someone to follow
                    IEnumerator<Actor> ie = ZetaDia.Actors.ACDList.GetEnumerator();
                    while (ie.MoveNext())
                    {
                        if (null != ie.Current)
                        {
                            Actor act = (Actor)ie.Current;
                            ACD acd = (ACD)act;

                            if (acd.Name != ZetaDia.Me.Name && acd.ActorType == Zeta.Internals.SNO.ActorType.Player)
                            {
                                if (acd.Position.Distance(ZetaDia.Me.Position) < 60)
                                {
                                    leader = acd;//track this global but don't depend on it
                                    break;
                                }
                            }
                        }
                    }
                    //p => !p.IsAfk && !p.Position.Distance(ZetaDia.Me.Position) < 60 && !p.Name == ZetaDia.Me.Name);

                    if (null != leader)
                    {
                        try
                        {
                            Random r = new Random();
                            Vector3 vary = new Vector3(r.Next(-1, 1), r.Next(-1, 1), r.Next(-1, 1));
                            Vector3 moveTo = leader.Position;
                            moveTo += vary;
                            ZetaDia.Me.UsePower(SNOPower.Walk, moveTo, ZetaDia.Me.WorldDynamicId, -1);
                        }
                        catch (Exception leaderEx)
                        {
                            Logging.Write(LogLevel.Verbose, "BuddyAutFollow: " + leaderEx.Message);
                        }
                    }

                }
                catch(Exception ex)
                {
                    Logging.Write(LogLevel.Verbose, "BuddyAutFollow: " + ex.Message);
                }

                try { Zeta.CommonBot.CombatTargeting.Instance.Pulse(); }
                catch (Exception exFight) { Logging.Write(LogLevel.Verbose, "BuddyAutoFollower: " + exFight.Message); }
            }
        }

        public void OnShutdown()
        {

        }

        public Version Version
        {
            get { return new Version(0, 0, 1); }
        }

        public bool Equals(IPlugin other)
        {
            return (this.Name == other.Name && this.Version == other.Version) ? true : false;
        }
    }
}

I have some stuff to celebrate today and meat to burn so stay tuned; I have an idea on fixing the banner to work I just need to sit down with it.
 
Last edited:
BuddyAutoFollow Beta2

Test this only with your other bots.

Will follow nearest player, assist, take tp -> banner to player if stuck/lost

Epic fail: The banner for all 4 player are detected and tried even if there are only two players and it will try to use its own banner.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//buddy
using Zeta;
using Zeta.Common;
using Zeta.CommonBot;
using Zeta.Common.Plugins;
using Zeta.Internals;
using Zeta.Internals.Actors;
using Zeta.Internals.Service;

namespace MyBuddy.Local
{
    public class BuddyAutoFollower : IPlugin
    {
        DateTime LastPostionCheck { get; set; }
        Random r = new Random();

        public string Author
        {
            get { return "xsol"; }
        }

        public string Description
        {
            get { return "Follows the leader."; }
        }

        public System.Windows.Window DisplayWindow
        {
            get { return null; }
        }

        public string Name
        {
            get { return "BuddyAutoFollower"; }
        }

        public void OnDisabled()
        {

        }

        public void OnEnabled()
        {

        }

        public void OnInitialize()
        {

        }

        Vector3 lastVector = new Vector3(0,0,0);

        public void OnPulse()
        {
            ACD leader = null;
            if (DateTime.Now.Subtract(LastPostionCheck).TotalMilliseconds > 2250)
            {
                try { Zeta.CommonBot.LootTargeting.Instance.Pulse(); }
                catch (Exception exLooter) { Logging.Write(LogLevel.Verbose, "BuddyAutoFollower: " + exLooter.Message); }

                LastPostionCheck = DateTime.Now;

                try
                {
                    //find someone to follow
                    Logging.Write("Searching for leader.");
                    IEnumerator<Actor> ie = ZetaDia.Actors.ACDList.GetEnumerator();
                    bool found = false;
                    while (ie.MoveNext())
                    {
                        if (null != ie.Current)
                        {
                            ACD acd = (ACD)ie.Current;

                            if (acd.Name != ZetaDia.Me.Name && acd.ActorType == Zeta.Internals.SNO.ActorType.Player)
                            {
                                if (acd.Position.Distance(ZetaDia.Me.Position) < 60)
                                {
                                    Logging.Write("Found a leader.");
                                    leader = acd;
                                    found = true;
                                    break;
                                }
                            }
                        }
                    }

                    if (found==false) { leader = null; }
                    ie = null;//this is reused clean it

                    if (lastVector.X == 0 && lastVector.Y == 0 && lastVector.Z == 0)
                    {
                        lastVector = ZetaDia.Me.Position;
                    }

                    if (null != leader && leader.Position.Distance(lastVector) > 10 && leader.Position.Distance(ZetaDia.Me.Position) > 20)
                    {
                        try
                        {
                            Vector3 vary = new Vector3(r.Next(-3, 3), r.Next(-3, 3), r.Next(-3, 3));
                            Vector3 moveTo = leader.Position;

                            lastVector = leader.Position;
                            moveTo += vary;

                            ZetaDia.Me.UsePower(SNOPower.Walk, moveTo, ZetaDia.Me.WorldDynamicId, -1);
                        }
                        catch (Exception leaderEx)
                        {
                            Logging.Write(LogLevel.Verbose, "BuddyAutFollow: " + leaderEx.Message);
                        }
                    }

                    if (null != leader && leader.Position.Distance(lastVector) < 10 && leader.Position.Distance(ZetaDia.Me.Position) < 20)
                    {
                        return;
                    }
                    
                    if(null == leader)
                    {
                        if (!ZetaDia.Me.IsInTown && null == leader)
                        {
                            ZetaDia.Me.UseTownPortal();
                            System.Threading.Thread.Sleep(r.Next(2000, 3000));
                        }

                        if(ZetaDia.Me.IsInTown)
                        {
                            Logging.Write("Searching for banner.");
                            ie = ZetaDia.Actors.ACDList.GetEnumerator();
                            while (ie.MoveNext())
                            {
                                if (null != ie.Current)
                                {
                                    ACD acd = (ACD)ie.Current;

                                    if (acd.Name.Contains("Banner") && acd.ActorType == Zeta.Internals.SNO.ActorType.Gizmo)
                                    {
                                        int ri = r.Next(5, 8);

                                        Logging.Write("Found a banner.");

                                        //move
                                        ZetaDia.Me.UsePower(SNOPower.Walk, acd.Position - new Vector3(2, 2, 0), ZetaDia.Me.WorldDynamicId, -1);

                                        //wait
                                        BotMain.PauseFor(System.TimeSpan.FromSeconds(ri)); 
                                        System.Threading.Thread.Sleep(r.Next(ri*1000));

                                        //interact
                                        ZetaDia.Me.UsePower(SNOPower.Axe_Operate_Gizmo, acd.Position, ZetaDia.Me.WorldDynamicId, acd.ACDGuid);

                                        //wait
                                        ri = r.Next(2, 3);
                                        BotMain.PauseFor(System.TimeSpan.FromSeconds(ri));
                                        System.Threading.Thread.Sleep(r.Next(ri * 1000));

                                        //try again?
                                        if (!ZetaDia.Me.IsInTown) break; //basically we want to loop all banners until we skip ours and find a good one
                                        //need a way to test if the damn banner is visible
                                    }
                                }
                            }
                            ie = null;
                        }
                    }
                }
                catch(Exception ex)
                {
                    Logging.Write(LogLevel.Verbose, "BuddyAutFollow: " + ex.Message);
                }

                try { Zeta.CommonBot.CombatTargeting.Instance.Pulse(); }
                catch (Exception exFight) { Logging.Write(LogLevel.Verbose, "BuddyAutoFollower: " + exFight.Message); }
            }
        }

        public void OnShutdown()
        {

        }

        public Version Version
        {
            get { return new Version(0, 0, 1); }
        }

        public bool Equals(IPlugin other)
        {
            return (this.Name == other.Name && this.Version == other.Version) ? true : false;
        }
    }
}
 
Last edited:
not sure if possible for plugin, but anyway to make it stay 30yrds or so behind and attack, trying to use with me controlling barb and DH assisting. Dies a bit when so close.
 
not sure if possible for plugin, but anyway to make it stay 30yrds or so behind and attack, trying to use with me controlling barb and DH assisting. Dies a bit when so close.

that would be tweaked in the settings once I add them, also increase the kill radius on your DH you may notice it works a ton better at 55
 
Sounds good, i tried some inferno farming with my chars, double the loot. Ill be watching this for updates. Thanks for the effort so far it works fine following ect.
 
Back
Top