public static bool Connect(ConnectionMode mode = ConnectionMode.Client) { if (IsConnected) { return(true); } var tooManyClientAttempts = ConnectionMode == ConnectionMode.Client && Client.ConnectionAttempts > 100; var tooManyServerAttempts = ConnectionMode == ConnectionMode.Server && Server.ServerStartAttempts > 40; if (tooManyClientAttempts || tooManyServerAttempts) { Log.Info("Failed to Connect too many times, Disabling Plugin"); AutoFollow.DeselectPlugin(); } if (ConnectionMode == ConnectionMode.Client) { Client.ClientInitialize(); } else { Server.ServerInitialize(); } return(IsConnected); }
private static void UpdateDataAsServer() { var serverMessage = Player.CurrentMessage; serverMessage.LeaderId = AutoFollow.SelectLeader().OwnerId; AutoFollow.ClientMessages.ForEach(cm => cm.Value.LeaderId = serverMessage.LeaderId); AutoFollow.CurrentParty = new List <Message>(AutoFollow.ClientMessages.Values) { serverMessage }; AutoFollow.CurrentFollowers = AutoFollow.CurrentParty.Where(o => o.IsFollower).ToList(); var leader = AutoFollow.CurrentParty.FirstOrDefault(o => o.IsLeader); AutoFollow.CurrentLeader = leader ?? new Message(); AutoFollow.NumberOfConnectedBots = Service.GetSmoothedConnectedBotCount(AutoFollow.CurrentParty); AutoFollow.ServerMessage = serverMessage; }
public virtual async Task <bool> OutOfGameTask() { if (!AutoFollow.Enabled) { return(false); } // Pulse does fire while out of game. Need to be very careful how waits are handled. // Don't use long Coroutine.Sleeps out of game as it will prevent player updates for the duration. AutoFollow.Pulse(); if (Service.IsConnected && AutoFollow.NumberOfConnectedBots == 0) { Log.Info("Waiting for bots to connect..."); await Coroutine.Sleep(500); return(true); } if (DateTime.UtcNow < Coordination.WaitUntil) { Log.Debug("Waiting... (Generic OOC) Remaining={0}s", Coordination.WaitUntil.Subtract(DateTime.UtcNow).TotalSeconds); await Coroutine.Sleep(500); return(true); } if (!IsGameReady || ZetaDia.IsInGame || Party.IsLocked || !ZetaDia.Service.IsValid || !ZetaDia.Service.Hero.IsValid) { Log.Verbose("Waiting... (Invalid State)"); await Coroutine.Sleep(500); return(true); } GameUI.SafeCheckClickButtons(); if (AutoFollow.CurrentBehavior.GetType() == typeof(BaseBehavior) && !ProfileUtils.ProfileIsYarKickstart) { return(true); } return(false); }
/// <summary> /// Move to another bot /// </summary> /// <param name="player">a player to move to</param> /// <param name="range">the closeness required</param> public static async Task <bool> MoveToPlayer(Message player, float range) { if (!ZetaDia.IsInGame || !player.IsInSameGame || !player.IsInSameWorld) { return(false); } if (player.Distance > range) { Log.Verbose("Moving to Player {0} CurrentDistance={1} DistanceRequired={2} ", player.HeroAlias, player.Distance, range); await MoveTo(() => AutoFollow.GetUpdatedMessage(player), player.HeroAlias, range, t => { if (!player.IsInSameWorld) { return(true); } if (t.Distance > Settings.Coordination.TeleportDistance && !RiftHelper.IsInGreaterRift) { return(true); } if (t.Distance < Settings.Coordination.CatchUpDistance && Targetting.RoutineWantsToAttackUnit()) { return(true); } return(false); }); return(true); } Log.Debug("Player {0} is close enough CurrentDistance={1} DistanceRequired={2} ", player.HeroAlias, player.Distance, range); return(true); }
private async Task <bool> DefaultOutOfGameChecks() { if (!AutoFollow.Enabled) { return(false); } if (!IsGameReady || Party.IsLocked) { Log.Verbose("Waiting (Invalid State)"); await Coroutine.Sleep(1000); return(true); } // Pulse does not fire while out of game. Need to be very careful how waits are handled. // Don't use long Coroutine.Sleeps out of game as it will prevent player updates for the duration. AutoFollow.Pulse(); if (!Player.IsServer && Service.IsConnected && AutoFollow.NumberOfConnectedBots == 0) { Log.Info("Waiting for connection initialization. "); await Coroutine.Sleep(500); return(true); } if (DateTime.UtcNow < Coordination.WaitUntil) { Log.Debug("Waiting... (Generic OOC) Remaining={0}s", Coordination.WaitUntil.Subtract(DateTime.UtcNow).TotalSeconds); await Coroutine.Sleep(500); return(true); } GameUI.SafeCheckClickButtons(); return(false); }
/// <summary> /// Move to another bot /// </summary> /// <param name="player">a player to move to</param> /// <param name="range">the closeness required</param> public static async Task <bool> MoveToPlayer(Message player, float range) { if (!ZetaDia.IsInGame || !player.IsInSameGame || !player.IsInSameWorld || player.IsInGreaterRift) { return(false); } if (player.Distance > range) { Log.Verbose("Moving to Player {0} CurrentDistance={1} DistanceRequired={2} ", player.HeroName, player.Distance, range); await MoveTo(() => AutoFollow.GetUpdatedMessage(player), player.HeroName, range, t => !player.IsInSameWorld || t.Distance > Settings.Coordination.TeleportDistance); return(true); } Log.Debug("Player {0} is close enough CurrentDistance={1} DistanceRequired={2} ", player.HeroName, player.Distance, range); return(true); }
public static bool Connect(ConnectionMode mode = ConnectionMode.Client) { if (IsConnected) { return(true); } if (Server.ServerStartAttempts > 20 && Client.ConnectionAttempts > 20) { Log.Info("Failed to Connect too many times, Disabling Plugin"); AutoFollow.DisablePlugin(); } if (ConnectionMode == ConnectionMode.Client) { Client.ClientInitialize(); } else { Server.ServerInitialize(); } return(IsConnected); }
public override void OnStart() { AutoFollow.AssignBehaviorByName(behaviorName); base.OnStart(); }