/// <summary> /// OnTeleport event. /// </summary> /// <param name="sender"> /// The sender /// </param> /// <param name="args"> /// The event data /// </param> private static void EventTeleport(AIBaseClient sender, AIBaseClientTeleportEventArgs args) { var eventArgs = new TeleportEventArgs { Status = TeleportStatus.Unknown, Type = TeleportType.Unknown }; if (sender == null || !sender.IsValid) { FireEvent(eventArgs); return; } if (!TeleportDataByNetworkId.ContainsKey(sender.NetworkId)) { TeleportDataByNetworkId[sender.NetworkId] = eventArgs; } if (!string.IsNullOrEmpty(args.RecallType)) { ITeleport value; if (TypeByString.TryGetValue(args.RecallType, out value)) { var teleportMethod = value; eventArgs.Status = TeleportStatus.Start; eventArgs.Duration = teleportMethod.GetDuration(args); eventArgs.Type = teleportMethod.Type; eventArgs.Start = Variables.TickCount; eventArgs.IsTarget = teleportMethod.IsTarget(args); eventArgs.Object = sender; TeleportDataByNetworkId[sender.NetworkId] = eventArgs; } else { Console.WriteLine( @"Teleport type {0} with name {1} is not supported yet. Please report it!", args.RecallType, args.RecallName); } } else { eventArgs = TeleportDataByNetworkId[sender.NetworkId]; var shorter = Variables.TickCount - eventArgs.Start < eventArgs.Duration - ErrorBuffer; eventArgs.Status = shorter ? TeleportStatus.Abort : TeleportStatus.Finish; } FireEvent(eventArgs); }
/// <summary> /// Get duration /// </summary> /// <param name="args"> /// The event data /// </param> /// <returns> /// Duration of the teleport. /// </returns> public int GetDuration(AIBaseClientTeleportEventArgs args) { var duration = 0; switch (args.RecallName.ToLower()) { case "recall": duration = 8000; break; case "recallimproved": duration = 7000; break; case "odinrecall": duration = 4500; break; case "odinrecallimproved": duration = 4000; break; case "superrecall": duration = 4000; break; case "superrecallimproved": duration = 4000; break; default: Console.WriteLine($"Recall {args.RecallName} is not supported yet. Please report it!"); break; } return(duration); }
/// <summary> /// Is Target /// </summary> /// <param name="args"> /// The event data /// </param> /// <returns> /// returns where the teleport is target. /// </returns> public bool IsTarget(AIBaseClientTeleportEventArgs args) { return(!string.Equals(args.RecallName, "shenrchannelmanager", StringComparison.InvariantCultureIgnoreCase)); }
/// <summary> /// Get duration /// </summary> /// <param name="args"> /// The event data /// </param> /// <returns> /// Duration of the teleport. /// </returns> public int GetDuration(AIBaseClientTeleportEventArgs args) { return(3000); }
/// <summary> /// Is Target /// </summary> /// <param name="args"> /// The event data /// </param> /// <returns> /// returns where the teleport is target. /// </returns> public bool IsTarget(AIBaseClientTeleportEventArgs args) { return(false); }
/// <summary> /// On teleport event. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="args"> /// The args. /// </param> private static void OnTeleportEvent(AIBaseClient sender, AIBaseClientTeleportEventArgs args) { EventTeleport(sender, args); }