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); } }
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)); } } }
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 ); } } }