private static void OnNewPath(Obj_AI_Base sender, GameObjectNewPathEventArgs args) { if (!args.IsDash) { return; } var hero = sender as AIHeroClient; if (hero != null && hero.IsValid) { var key = DashDictionary.Keys.FirstOrDefault(o => o.NetworkId == sender.NetworkId) ?? sender; var dashArgs = new DashEventArgs { StartPos = sender.ServerPosition, EndPos = args.Path.Last(), Speed = args.Speed, StartTick = Core.GameTickCount - Game.Ping }; dashArgs.EndTick = dashArgs.StartTick + (int)(1000 * args.Path.Last().Distance(sender) / 2500); dashArgs.Duration = dashArgs.EndTick - dashArgs.StartTick; DashDictionary.Remove(key); DashDictionary.Add(key, dashArgs); if (OnDash != null) { OnDash(sender, dashArgs); } } }
private static void OnNewPath(NewPathEventArgs args) { if (!args.IsDash) { Storage.Remove(args.SourceId); return; } if (args.Source is IHero hero) { var startPos = hero.Position; var endPos = args.Path.Last(); var startTime = Game.Time; var endTime = startTime + startPos.Distance(endPos) / args.Speed; var dash = new DashEventArgs(args.SourceId, args.Path, args.Speed, startPos, endPos, startTime, endTime); Storage[args.SourceId] = dash; OnDash?.SafeInvoke(dash); } }
private void OnDash(Obj_AI_Base sender, DashEventArgs args) { if (sender.IsMe) { InitTime = 0; Target = Vector3.Zero; } }