예제 #1
0
            public static void Init()
            {
                GameObject.OnCreate += GameObject_OnCreate;
                GameObject.OnDelete += GameObject_OnDelete;

                foreach (var emitter in ObjectManager.Get <Obj_GeneralParticleEmitter>().Where(FioraPassive))
                {
                    if (emitter.IsEnemy)
                    {
                        var passive = new FioraVital(emitter)
                        {
                            startTick = Core.GameTickCount
                        };
                        if (!StoredPassives.Contains(passive))
                        {
                            StoredPassives.Add(passive);
                        }
                    }
                }
            }
예제 #2
0
            private static void GameObject_OnCreate(GameObject sender, EventArgs args)
            {
                var emitter = sender as Obj_GeneralParticleEmitter;

                if (emitter != null && emitter.Name.Contains("Fiora"))
                {
                    if (FioraPassive(emitter) && emitter.IsEnemy)
                    {
                        StoredPassives.RemoveAll(v => (v.Vital != null && (v.Vital.IsDead || !v.Vital.IsValid)) || (v.Caster != null && (!v.Caster.IsValid || v.Caster.IsDead)) || Core.GameTickCount - v.startTick > 15000);
                        var passive = new FioraVital(emitter)
                        {
                            startTick = Core.GameTickCount
                        };
                        if (!StoredPassives.Contains(passive))
                        {
                            StoredPassives.Add(passive);
                        }
                    }
                }
            }
예제 #3
0
            public static Vector3?CanQVital(FioraVital v, bool shortVital, bool longVital)
            {
                var target = v?.Caster;

                if (target == null)
                {
                    return(null);
                }

                var center = v.QpredVitalsector.CenterOfPolygon().To3DWorld();
                var qpos   = v.QPredVitalPos;

                if (shortVital)
                {
                    if (Q1.IsInRange(qpos))
                    {
                        return(qpos);
                    }
                    if (Q1.IsInRange(center))
                    {
                        return(center);
                    }
                }

                if (longVital)
                {
                    var vitdis      = v.QPredVitalPos.Distance(Player.Instance, true);
                    var tardis      = target.Distance(Player.Instance, true);
                    var farvit      = tardis > vitdis || Q1.IsInRange(center);
                    var maxQCast    = Player.Instance.ServerPosition.Extend(v.QPredVitalPos, Q2.IsInRange(v.QPredVitalPos) ? Player.Instance.Distance(v.QPredVitalPos) : Q2.Range).To3D();
                    var qrect       = new Geometry.Polygon.Rectangle(Player.Instance.ServerPosition, maxQCast, Q2.Width + target.BoundingRadius);
                    var insidepoint = v.QpredVitalsector.Points.Any(p => qrect.IsInside(p)) && !qrect.IsInside(target);

                    if (Q2.IsInRange(v.QPredVitalPos) && (farvit || insidepoint))
                    {
                        return(v.QPredVitalPos);
                    }
                }

                return(null);
            }