public void CheckParticipation() { if (Region == null) { return; } foreach (PlayerMobile pm in this.Region.GetEnumeratedMobiles().OfType <PlayerMobile>()) { bool vvv = ViceVsVirtueSystem.IsVvV(pm); if (!vvv && !Warned.Contains(pm)) { pm.SendGump(new BattleWarningGump(pm)); Warned.Add(pm); return; } else if (pm.Alive && !pm.Hidden && BaseBoat.FindBoatAt(pm.Location, pm.Map) == null && BaseHouse.FindHouseAt(pm) == null) { Guild g = pm.Guild as Guild; if (pm.Alive && !pm.Hidden && g != null && !Participants.Contains(g) && vvv) { Participants.Add(g); } } } }
public void CheckParticipation() { if (Region == null) { return; } BattleTeam team = null; UnContested = true; bool checkAggression = ViceVsVirtueSystem.EnhancedRules && NextCombatHeatCycle < DateTime.UtcNow; foreach (PlayerMobile pm in Region.GetEnumeratedMobiles().OfType <PlayerMobile>()) { bool vvv = ViceVsVirtueSystem.IsVvV(pm); if (!vvv && !Warned.Contains(pm) && pm.AccessLevel == AccessLevel.Player) { pm.SendGump(new BattleWarningGump(pm)); Warned.Add(pm); } else if (vvv && pm.Alive && !pm.Hidden && BaseBoat.FindBoatAt(pm.Location, pm.Map) == null && BaseHouse.FindHouseAt(pm) == null) { Guild g = pm.Guild as Guild; if (g != null) { BattleTeam t = GetTeam(g); if (team == null) { team = t; } else if (t != team && UnContested) { UnContested = false; } } } if (checkAggression && (vvv || ViceVsVirtueSystem.IsVvVCombatant(pm))) { AddAggression(pm); } } if (checkAggression) { CheckBattleAggression(); NextCombatHeatCycle = DateTime.UtcNow + TimeSpan.FromMinutes(1); } }
protected override void Dispose(bool disposing) { Warned.Clear(); Metronome.Elapsed -= Check; Metronome.Elapsed -= CleanWarned; Metronome.Stop(); Metronome.Dispose(); ServerApi.Hooks.GamePostInitialize.Deregister(this, OnPostInitialize); base.Dispose(disposing); }
public void EndBattle() { EndTimer(); if (Region is GuardedRegion) { ((GuardedRegion)Region).Disabled = false; } CooldownEnds = DateTime.UtcNow + TimeSpan.FromMinutes(Cooldown); ViceVsVirtueSystem.Instance.OnBattleEnd(); foreach (VvVAltar altar in Altars) { if (!altar.Deleted) { altar.Delete(); } } foreach (VvVTrap trap in Traps) { if (!trap.Deleted) { trap.Delete(); } } foreach (CannonTurret turret in Turrets) { if (!turret.Deleted) { turret.Delete(); } } if (VicePriest != null) { VicePriest.Delete(); VicePriest = null; } if (VirtuePriest != null) { VirtuePriest.Delete(); VirtuePriest = null; } if (Sigil != null) { Sigil.Delete(); Sigil = null; } Guild leader = GetLeader(); foreach (Mobile m in this.Region.GetEnumeratedMobiles()) { Guild g = m.Guild as Guild; if (leader != null && (g == leader || leader.IsAlly(g))) { System.AwardPoints(m, WinSilver + (OppositionCount(g) * 50), message: false); } } SendBattleStatsGump(); System.SendVvVMessage(1154722); // A VvV battle has just concluded. The next battle will begin in less than five minutes! Altars.Clear(); GuildStats.Clear(); KillCooldown.Clear(); Participants.Clear(); Participants.TrimExcess(); Messages.Clear(); Messages.TrimExcess(); Traps.Clear(); Traps.TrimExcess(); Warned.Clear(); Warned.TrimExcess(); Turrets.Clear(); Turrets.TrimExcess(); if (Region is GuardedRegion) { ((GuardedRegion)Region).Disabled = false; } OnGoing = false; NextSigilSpawn = DateTime.MinValue; LastOccupationCheck = DateTime.MinValue; NextAnnouncement = DateTime.MinValue; StartTime = DateTime.MinValue; NextAltarActivate = DateTime.MinValue; ManaSpikeEndEffects = DateTime.MinValue; NextManaSpike = DateTime.MinValue; }
public void OnTick() { if (HasBegun && !Complete) { foreach (var part in GetParticipants(true)) { var pm = part.Key; if (!RidingFlyingAllowed && pm.Mounted) { IMount mount = pm.Mount; if (mount != null) { mount.Rider = null; pm.SetMountBlock(BlockMountType.DismountRecovery, TimeSpan.FromSeconds(10), false); } if (InPreFight) { pm.SendLocalizedMessage(1115997); // The rules prohibit riding a mount or flying. } else { pm.SendLocalizedMessage(1115998); // The rules prohibit riding a mount or flying. You have received penalty damage! int damage = 37; if (!Warned.Contains(pm)) { Warned.Add(pm); } else { damage = 237; } AOS.Damage(pm, null, damage, 0, 0, 0, 0, 0, 0, 100); } } if (!RangedWeaponsAllowed) { Item item = pm.FindItemOnLayer(Layer.TwoHanded); if (item is BaseRanged) { pm.AddToBackpack(item); pm.SendLocalizedMessage(1115996); // The rules prohibit the use of ranged weapons! } } if (!SummonSpellsAllowed) { foreach (var mob in Arena.Region.GetEnumeratedMobiles()) { if (mob is BaseCreature && ((BaseCreature)mob).Summoned) { var master = ((BaseCreature)mob).GetMaster(); if (master != null) { master.SendLocalizedMessage(1149603); // The rules prohibit the use of summoning spells! } mob.Delete(); } } } } if (InPreFight) { if (EntryDeadline != DateTime.MinValue && EntryDeadline < DateTime.UtcNow) { BeginDuel(); } } else if (EndTime < DateTime.UtcNow) { EndDuel(); } } }