コード例 #1
0
        public static void AssignCams(PlayerMobile target, bool idleCams)
        {
            if (target == null || !CanView(target))
            {
                return;
            }

            DateTime now = DateTime.UtcNow;

            // Process battle cams and return, if they are in the pvp region.
            if (target.InRegion <PvPBattleRegion>())
            {
                const double idleSeconds = 5.0;

                foreach (KeyValuePair <PlayerMobile, DateTime> kv in DeathCamsEvents.ToArray())
                {
                    PlayerMobile cam  = kv.Key;
                    DateTime     time = kv.Value;

                    if (now > time && !idleCams)
                    {
                        CurrentlyViewing.AddOrReplace(cam, target);
                        DeathCamsEvents[cam] = now.AddSeconds(idleSeconds);
                    }
                    else if (now > time.AddSeconds(idleSeconds) && idleCams)
                    {
                        // if cam has been idling for longer than normal

                        CurrentlyViewing.AddOrReplace(cam, target);
                        DeathCamsEvents[cam] = now;                         // assign right away if primary threshhold is met
                    }
                }
            }
            else
            {
                const double idleSeconds = 15.0;

                // Normal (non-battle)
                foreach (KeyValuePair <PlayerMobile, DateTime> kv in DeathCams.ToArray())
                {
                    PlayerMobile cam  = kv.Key;
                    DateTime     time = kv.Value;

                    if (now > time && !idleCams)
                    {
                        CurrentlyViewing.AddOrReplace(cam, target);
                        DeathCams[cam] = now.AddSeconds(idleSeconds);
                    }
                    else if (now > time.AddSeconds(idleSeconds) && idleCams)
                    {
                        // if cam has been idling for longer than normal

                        CurrentlyViewing.AddOrReplace(cam, target);
                        DeathCams[cam] = now;                         // assign right away if primary threshhold is met
                    }
                }
            }
        }
コード例 #2
0
        public static void Defragment()
        {
            DeathCams.RemoveKeyRange(cam => cam.Deleted || !cam.IsOnline());
            DeathCamsEvents.RemoveKeyRange(cam => cam.Deleted || !cam.IsOnline());

            CurrentlyViewing.RemoveKeyRange(cam => cam.Deleted || !cam.IsOnline() || !IsCamera(cam));
            CurrentlyViewing.RemoveValueRange(target => target.Deleted || !target.IsOnline() || IsCamera(target));

            PlayerMurderers.RemoveKeyRange(player => player.Deleted);
            MonsterMurderers.RemoveKeyRange(mob => mob.Deleted);
        }
コード例 #3
0
        private static void OnPlayerHeal(PlayerMobile target, int heal)
        {
            if (target == null || !IsViewing(target))
            {
                return;
            }

            if (!CanView(target))
            {
                CurrentlyViewing.RemoveValueRange(v => v == target);
                return;
            }

            PlayerMobile[] cams = GetCamsViewing(target);

            DisplayStatus(target, heal, cams);
        }
コード例 #4
0
        public static void OnPlayerMove(PlayerMobile target, Point3D oldLocation)
        {
            if (target == null || !IsViewing(target))
            {
                return;
            }

            if (!CanView(target))
            {
                CurrentlyViewing.RemoveValueRange(v => v == target);
                return;
            }

            PlayerMobile[] cams = GetCamsViewing(target);

            MoveCams(target, cams);
        }
コード例 #5
0
        private static void OnPlayerDamage(PlayerMobile target, int damage)
        {
            if (target == null)
            {
                return;
            }

            if (!CanView(target))
            {
                CurrentlyViewing.RemoveValueRange(v => v == target);
                return;
            }

            PlayerMobile[] cams = GetCamsViewing(target);

            MoveCams(target, cams);

            DisplayDamage(target, damage, cams);
            DisplayStatus(target, -damage, cams);
        }
コード例 #6
0
        private static void QuitDeathCam(PlayerMobile cam)
        {
            if (cam == null)
            {
                return;
            }

            if (DeathCams.Remove(cam))
            {
                cam.BodyValue = cam.Race.Body(cam);
                cam.SendMessage("You have been removed from the regular death cameras list.");
            }

            if (DeathCamsEvents.Remove(cam))
            {
                cam.BodyValue = cam.Race.Body(cam);
                cam.SendMessage("You have been removed from the battles death cameras list.");
            }

            CurrentlyViewing.Remove(cam);

            CloseUI(cam);
        }
コード例 #7
0
 public static PlayerMobile[] GetCamsViewing(PlayerMobile target)
 {
     return(target != null && !IsCamera(target)
                                    ? CurrentlyViewing.Where(kv => kv.Value == target).Select(kv => kv.Key).ToArray()
                                    : new PlayerMobile[0]);
 }
コード例 #8
0
 public static bool IsViewing(PlayerMobile target)
 {
     return(target != null && !IsCamera(target) && CurrentlyViewing.ContainsValue(target));
 }