Ejemplo n.º 1
0
        public override void OnMovement(Mobile m, Point3D oldLocation)
        {
            base.OnMovement(m, oldLocation);

            Tournament tourney = Tournament?.Tournament;

            if (InRange(m, 4) && !InRange(oldLocation, 4) && tourney != null && tourney.Stage == TournamentStage.Signup &&
                m.CanBeginAction(this))
            {
                Ladder ladder = Ladder.Instance;

                LadderEntry entry = ladder?.Find(m);

                if (entry != null && Ladder.GetLevel(entry.Experience) < tourney.LevelRequirement)
                {
                    return;
                }

                if (tourney.IsFactionRestricted && Faction.Find(m) == null)
                {
                    return;
                }

                if (tourney.HasParticipant(m))
                {
                    return;
                }

                PrivateOverheadMessage(MessageType.Regular, 0x35, false,
                                       $"Hello m'{(m.Female ? "Lady" : "Lord")}. Dost thou wish to enter this tournament? You need only to write your name in this book.",
                                       m.NetState);
                m.BeginAction(this);
                Timer.DelayCall(TimeSpan.FromSeconds(10.0), ReleaseLock_Callback, m);
            }
        }
Ejemplo n.º 2
0
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if (info.ButtonID == 1 && info.IsSwitched(1))
            {
                var tourney = m_Tournament;
                var from    = m_From;

                switch (tourney.Stage)
                {
                case TournamentStage.Fighting:
                {
                    if (m_Registrar != null)
                    {
                        if (m_Tournament.HasParticipant(from))
                        {
                            m_Registrar.PrivateOverheadMessage(
                                MessageType.Regular,
                                0x35,
                                false,
                                "Excuse me? You are already signed up.",
                                from.NetState
                                );
                        }
                        else
                        {
                            m_Registrar.PrivateOverheadMessage(
                                MessageType.Regular,
                                0x22,
                                false,
                                "The tournament has already begun. You are too late to signup now.",
                                from.NetState
                                );
                        }
                    }

                    break;
                }

                case TournamentStage.Inactive:
                {
                    m_Registrar?.PrivateOverheadMessage(
                        MessageType.Regular,
                        0x35,
                        false,
                        "The tournament is closed.",
                        from.NetState
                        );

                    break;
                }

                case TournamentStage.Signup:
                {
                    if (m_Players.Count != tourney.PlayersPerParticipant)
                    {
                        m_Registrar?.PrivateOverheadMessage(
                            MessageType.Regular,
                            0x35,
                            false,
                            "You have not yet chosen your team.",
                            from.NetState
                            );

                        m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));
                        break;
                    }

                    var ladder = Ladder.Instance;

                    for (var i = 0; i < m_Players.Count; ++i)
                    {
                        var mob = m_Players[i];

                        var entry = ladder?.Find(mob);

                        if (entry != null && Ladder.GetLevel(entry.Experience) < tourney.LevelRequirement)
                        {
                            if (m_Registrar != null)
                            {
                                if (mob == from)
                                {
                                    m_Registrar.PrivateOverheadMessage(
                                        MessageType.Regular,
                                        0x35,
                                        false,
                                        "You have not yet proven yourself a worthy dueler.",
                                        from.NetState
                                        );
                                }
                                else
                                {
                                    m_Registrar.PrivateOverheadMessage(
                                        MessageType.Regular,
                                        0x35,
                                        false,
                                        $"{mob.Name} has not yet proven themselves a worthy dueler.",
                                        from.NetState
                                        );
                                }
                            }

                            m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));
                            return;
                        }

                        if (tourney.IsFactionRestricted && Faction.Find(mob) == null)
                        {
                            m_Registrar?.PrivateOverheadMessage(
                                MessageType.Regular,
                                0x35,
                                false,
                                "Only those who have declared their faction allegiance may participate.",
                                from.NetState
                                );

                            m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));
                            return;
                        }

                        if (tourney.HasParticipant(mob))
                        {
                            if (m_Registrar != null)
                            {
                                if (mob == from)
                                {
                                    m_Registrar.PrivateOverheadMessage(
                                        MessageType.Regular,
                                        0x35,
                                        false,
                                        "You have already entered this tournament.",
                                        from.NetState
                                        );
                                }
                                else
                                {
                                    m_Registrar.PrivateOverheadMessage(
                                        MessageType.Regular,
                                        0x35,
                                        false,
                                        $"{mob.Name} has already entered this tournament.",
                                        from.NetState
                                        );
                                }
                            }

                            m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));
                            return;
                        }

                        if (mob is PlayerMobile mobile && mobile.DuelContext != null)
                        {
                            if (mob == from)
                            {
                                m_Registrar?.PrivateOverheadMessage(
                                    MessageType.Regular,
                                    0x35,
                                    false,
                                    "You are already assigned to a duel. You must yield it before joining this tournament.",
                                    from.NetState
                                    );
                            }
                            else
                            {
                                m_Registrar?.PrivateOverheadMessage(
                                    MessageType.Regular,
                                    0x35,
                                    false,
                                    $"{mobile.Name} is already assigned to a duel. They must yield it before joining this tournament.",
                                    from.NetState
                                    );
                            }

                            m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));
                            return;
                        }
                    }

                    if (m_Registrar != null)
                    {
                        string fmt;

                        if (tourney.PlayersPerParticipant == 1)
                        {
                            fmt =
                                "As you say m'{0}. I've written your name to the bracket. The tournament will begin {1}.";
                        }
                        else if (tourney.PlayersPerParticipant == 2)
                        {
                            fmt =
                                "As you wish m'{0}. The tournament will begin {1}, but first you must name your partner.";
                        }
                        else
                        {
                            fmt =
                                "As you wish m'{0}. The tournament will begin {1}, but first you must name your team.";
                        }

                        string timeUntil;
                        var    minutesUntil = (int)Math.Round(
                            (tourney.SignupStart + tourney.SignupPeriod - DateTime.UtcNow)
                            .TotalMinutes
                            );

                        if (minutesUntil == 0)
                        {
                            timeUntil = "momentarily";
                        }
                        else
                        {
                            timeUntil = $"in {minutesUntil} minute{(minutesUntil == 1 ? "" : "s")}";
                        }

                        m_Registrar.PrivateOverheadMessage(
                            MessageType.Regular,
                            0x35,
                            false,
                            string.Format(fmt, from.Female ? "Lady" : "Lord", timeUntil),
                            from.NetState
                            );
                    }

                    var part = new TourneyParticipant(from);
                    part.Players.Clear();
                    part.Players.AddRange(m_Players);

                    tourney.Participants.Add(part);

                    break;
                }
                }
            }
            else if (info.ButtonID > 1)
            {
                var index = info.ButtonID - 1;

                if (index > 0 && index < m_Players.Count)
                {
                    m_Players.RemoveAt(index);
                    m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));
                }
                else if (m_Players.Count < m_Tournament.PlayersPerParticipant)
                {
                    m_From.BeginTarget(12, false, TargetFlags.None, AddPlayer_OnTarget);
                    m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));
                }
            }
        }
Ejemplo n.º 3
0
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            var from = m_From;
            var mob  = m_Requested;

            if (info.ButtonID != 1 || !m_Active)
            {
                return;
            }

            m_Active = false;

            if (info.IsSwitched(1))
            {
                if (!(mob is PlayerMobile pm))
                {
                    return;
                }

                if (AcceptDuelGump.IsIgnored(mob, from) || mob.Blessed)
                {
                    m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));

                    m_Registrar?.PrivateOverheadMessage(
                        MessageType.Regular,
                        0x22,
                        false,
                        "They ignore your invitation.",
                        from.NetState
                        );
                }
                else if (pm.DuelContext != null)
                {
                    m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));

                    m_Registrar?.PrivateOverheadMessage(
                        MessageType.Regular,
                        0x22,
                        false,
                        "They are already assigned to another duel.",
                        from.NetState
                        );
                }
                else if (m_Players.Contains(mob))
                {
                    m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));

                    m_Registrar?.PrivateOverheadMessage(
                        MessageType.Regular,
                        0x22,
                        false,
                        "You have already named them as a team member.",
                        from.NetState
                        );
                }
                else if (m_Tournament.HasParticipant(mob))
                {
                    m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));

                    m_Registrar?.PrivateOverheadMessage(
                        MessageType.Regular,
                        0x22,
                        false,
                        "They have already entered this tournament.",
                        from.NetState
                        );
                }
                else if (m_Players.Count >= m_Tournament.PlayersPerParticipant)
                {
                    m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));

                    m_Registrar?.PrivateOverheadMessage(
                        MessageType.Regular,
                        0x22,
                        false,
                        "Your team is full.",
                        from.NetState
                        );
                }
                else
                {
                    m_Players.Add(mob);

                    m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));

                    if (m_Registrar != null)
                    {
                        m_Registrar.PrivateOverheadMessage(
                            MessageType.Regular,
                            0x59,
                            false,
                            $"{mob.Name} has accepted your offer of partnership.",
                            from.NetState
                            );

                        m_Registrar.PrivateOverheadMessage(
                            MessageType.Regular,
                            0x59,
                            false,
                            $"You have accepted the partnership with {from.Name}.",
                            mob.NetState
                            );
                    }
                }
            }
            else
            {
                if (info.IsSwitched(3))
                {
                    AcceptDuelGump.BeginIgnore(m_Requested, m_From);
                }

                m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));

                if (m_Registrar != null)
                {
                    m_Registrar.PrivateOverheadMessage(
                        MessageType.Regular,
                        0x22,
                        false,
                        $"{mob.Name} has declined your offer of partnership.",
                        from.NetState
                        );

                    m_Registrar.PrivateOverheadMessage(
                        MessageType.Regular,
                        0x22,
                        false,
                        $"You have declined the partnership with {from.Name}.",
                        mob.NetState
                        );
                }
            }
        }