示例#1
0
        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);
                    }
                }
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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;
        }
示例#5
0
        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();
                }
            }
        }