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 } } } }
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); }
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); }
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); }
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); }
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); }
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]); }
public static bool IsViewing(PlayerMobile target) { return(target != null && !IsCamera(target) && CurrentlyViewing.ContainsValue(target)); }