Beispiel #1
0
        public void SetTime(PvPBattleState state, DateTime when)
        {
            switch (state)
            {
            case PvPBattleState.Queueing:
            {
                OpenedWhen = when;
            }
            break;

            case PvPBattleState.Preparing:
            {
                PreparedWhen = when;
            }
            break;

            case PvPBattleState.Running:
            {
                StartedWhen = when;
            }
            break;

            case PvPBattleState.Ended:
            {
                EndedWhen = when;
            }
            break;
            }
        }
        protected virtual void BroadcastStateHandler()
        {
            if (Hidden)
            {
                return;
            }

            PvPBattleState state    = State;
            TimeSpan       timeLeft = GetStateTimeLeft(DateTime.UtcNow).Add(TimeSpan.FromSeconds(1.0));

            if (timeLeft <= TimeSpan.Zero)
            {
                return;
            }

            switch (state)
            {
            case PvPBattleState.Ended:
                BroadcastOpenMessage(timeLeft);
                break;

            case PvPBattleState.Preparing:
                BroadcastStartMessage(timeLeft);
                break;

            case PvPBattleState.Running:
                BroadcastEndMessage(timeLeft);
                break;
            }
        }
Beispiel #3
0
        protected virtual void OnStateChanged(PvPBattleState oldState)
        {
            _StateTransition = true;

            LastState = oldState;

            if (IsInternal)
            {
                Options.Timing.SetAllTimes(DateTime.MinValue);

                OnBattleInternalized();
            }
            else
            {
                if (LastState == PvPBattleState.Internal)
                {
                    InvalidateRegions();
                }

                Options.Timing.SetTime(State, DateTime.UtcNow);

                switch (State)
                {
                case PvPBattleState.Queueing:
                    OnBattleOpened();
                    break;

                case PvPBattleState.Preparing:
                    OnBattlePreparing();
                    break;

                case PvPBattleState.Running:
                    OnBattleStarted();
                    break;

                case PvPBattleState.Ended:
                    OnBattleEnded();
                    break;
                }
            }

            LastStateChange = DateTime.UtcNow;

            _StateTransition = false;

            AutoPvP.InvokeBattleStateChanged(this);

            PvPBattlesUI.RefreshAll(this);
        }
Beispiel #4
0
        public void SetPeriod(PvPBattleState state, TimeSpan duration)
        {
            switch (state)
            {
            case PvPBattleState.Preparing:
                PreparePeriod = duration;
                break;

            case PvPBattleState.Running:
                RunningPeriod = duration;
                break;

            case PvPBattleState.Ended:
                EndedPeriod = duration;
                break;
            }
        }
Beispiel #5
0
        public virtual TimeSpan GetStateTimeLeft(DateTime when, PvPBattleState state)
        {
            var time = 0.0;

            switch (state)
            {
            case PvPBattleState.Queueing:
            {
                time = (Options.Timing.OpenedWhen.Add(Options.Timing.QueuePeriod) - when).TotalSeconds;

                if (Schedule != null && Schedule.Enabled)
                {
                    if (Schedule.CurrentGlobalTick != null)
                    {
                        time = (Schedule.CurrentGlobalTick.Value - when).TotalSeconds;
                    }
                    else if (Schedule.NextGlobalTick != null)
                    {
                        time = (Schedule.NextGlobalTick.Value - when).TotalSeconds;
                    }
                }
            }
            break;

            case PvPBattleState.Preparing:
                time = (Options.Timing.PreparedWhen.Add(Options.Timing.PreparePeriod) - when).TotalSeconds;
                break;

            case PvPBattleState.Running:
                time = (Options.Timing.StartedWhen.Add(Options.Timing.RunningPeriod) - when).TotalSeconds;
                break;

            case PvPBattleState.Ended:
                time = (Options.Timing.EndedWhen.Add(Options.Timing.EndedPeriod) - when).TotalSeconds;
                break;
            }

            if (time > 0)
            {
                return(TimeSpan.FromSeconds(time));
            }

            return(TimeSpan.Zero);
        }
Beispiel #6
0
        protected virtual void OnStateChanged(PvPBattleState oldState)
        {
            _StateTransition = true;

            var now = DateTime.UtcNow;

            LastState = oldState;

            if (LastState == PvPBattleState.Internal)
            {
                InvalidateRegions();
            }

            switch (State)
            {
            case PvPBattleState.Internal:
                OnBattleInternalized(now);
                break;

            case PvPBattleState.Queueing:
                OnBattleOpened(now);
                break;

            case PvPBattleState.Preparing:
                OnBattlePreparing(now);
                break;

            case PvPBattleState.Running:
                OnBattleStarted(now);
                break;

            case PvPBattleState.Ended:
                OnBattleEnded(now);
                break;
            }

            LastStateChange = now;

            AutoPvP.InvokeBattleStateChanged(this);

            _StateTransition = false;
        }
Beispiel #7
0
		public void SetPeriod(PvPBattleState state, TimeSpan duration)
		{
			switch (state)
			{
				case PvPBattleState.Preparing:
					{
						PreparePeriod = duration;
					}
					break;
				case PvPBattleState.Running:
					{
						RunningPeriod = duration;
					}
					break;
				case PvPBattleState.Ended:
					{
						EndedPeriod = duration;
					}
					break;
			}
		}
Beispiel #8
0
        public override TimeSpan GetStateTimeLeft(DateTime when, PvPBattleState state)
        {
            var time = base.GetStateTimeLeft(when, state);

            if (state == PvPBattleState.Running)
            {
                var o = Matches.Where(r => r.IsRunning).Highest(r => r.Expire);

                if (o != null)
                {
                    if (o.Expire > time)
                    {
                        time = o.Expire;
                    }
                }
                else if (HasCapacity())
                {
                    time = MatchDelay + MatchDuration;
                }
            }

            return(time);
        }
		protected virtual void OnStateChanged(PvPBattleState oldState)
		{
			_StateTransition = true;

			DateTime now = DateTime.UtcNow;
			LastState = oldState;

			if (LastState == PvPBattleState.Internal)
			{
				InvalidateRegions();
			}

			switch (State)
			{
				case PvPBattleState.Internal:
					OnBattleInternalized(now);
					break;
				case PvPBattleState.Queueing:
					OnBattleOpened(now);
					break;
				case PvPBattleState.Preparing:
					OnBattlePreparing(now);
					break;
				case PvPBattleState.Running:
					OnBattleStarted(now);
					break;
				case PvPBattleState.Ended:
					OnBattleEnded(now);
					break;
			}

			LastStateChange = now;

			_StateTransition = false;
		}
Beispiel #10
0
 public TimeSpan GetStateTimeLeft(PvPBattleState state)
 {
     return(GetStateTimeLeft(DateTime.UtcNow, state));
 }
Beispiel #11
0
        protected virtual void RegisterSubCommands()
        {
            RegisterSubCommand(
                "help",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                foreach (PvPBattleCommandInfo ci in
                         SubCommandHandlers.Keys.Select(cmd => SubCommandHandlers[cmd]).Where(ci => state.Mobile.AccessLevel >= ci.Access))
                {
                    state.Mobile.SendMessage("{0}{1} {2}", SubCommandPrefix, ci.Command, ci.Usage);
                }

                return(true);
            },
                "Displays a list of available commands for this battle.",
                "[?]",
                AccessLevel.Player);

            RegisterSubCommandAlias("help", "commands");

            RegisterSubCommand(
                "battle",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                LocalBroadcast("[{0}]: {1}", state.Mobile.RawName, state.Speech);
                return(true);
            },
                "Broadcasts a message to all battle participants and spectators.",
                "<message>",
                AccessLevel.Player);

            RegisterSubCommandAlias("battle", "b");

            RegisterSubCommand(
                "team",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                PvPTeam team;

                if (!IsParticipant(state.Mobile, out team))
                {
                    state.Mobile.SendMessage("You must be a participant to use that command.");
                    return(true);
                }

                if (team == null || team.Deleted)
                {
                    state.Mobile.SendMessage("You are not a member of a team.");
                    return(true);
                }

                team.Broadcast("[{0}]: {1}", state.Mobile.RawName, state.Speech);
                return(true);
            },
                "Sends a message to your team.",
                "<message>",
                AccessLevel.Player);

            RegisterSubCommandAlias("team", "t");

            RegisterSubCommand(
                "join",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                if (IsParticipant(state.Mobile))
                {
                    state.Mobile.SendMessage("You are already participating in this battle.");
                    return(true);
                }

                if (IsQueued(state.Mobile))
                {
                    state.Mobile.SendMessage("You are already queued for this battle.");
                    return(true);
                }

                Enqueue(state.Mobile);
                return(true);
            },
                "Joins the queue for the battle.",
                "",
                AccessLevel.Player);

            RegisterSubCommandAlias("join", "j");

            RegisterSubCommand(
                "leave",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                Eject(state.Mobile, true);
                return(true);
            },
                "Removes you from the battle.",
                "",
                AccessLevel.Player);

            RegisterSubCommandAlias("leave", "quit");

            RegisterSubCommand(
                "time",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                TimeSpan timeLeft = GetStateTimeLeft(DateTime.UtcNow);

                if (timeLeft > TimeSpan.Zero)
                {
                    string time      = timeLeft.ToSimpleString(@"h\:m\:s");
                    string nextState = "";

                    switch (State)
                    {
                    case PvPBattleState.Queueing:
                        nextState = "Preparation";
                        break;

                    case PvPBattleState.Preparing:
                        nextState = "Start";
                        break;

                    case PvPBattleState.Running:
                        nextState = "End";
                        break;

                    case PvPBattleState.Ended:
                        nextState = "Open";
                        break;
                    }

                    state.Mobile.SendMessage("Battle is currently {0}. Time left until {1}: {2}", State.ToString(), nextState, time);
                }
                else
                {
                    state.Mobile.SendMessage("Time unavailable.");
                }

                return(true);
            },
                "Displays the amount of time left until the next battle state.",
                "",
                AccessLevel.Player);

            RegisterSubCommand(
                "menu",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                SuperGump.Send(new PvPBattleOverviewGump(state.Mobile, battle: this));
                return(true);
            },
                "Opens the interface for this battle.",
                "",
                AccessLevel.Player);

            RegisterSubCommand(
                "config",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                state.Mobile.SendGump(new PropertiesGump(state.Mobile, this));
                return(true);
            },
                "Opens the configuration for this battle.");

            RegisterSubCommand(
                "hidden",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                Hidden = !Hidden;
                return(true);
            },
                "Toggle the battle visiblility.");

            RegisterSubCommand(
                "state",
                state =>
            {
                if (state == null || state.Mobile == null || state.Mobile.Deleted)
                {
                    return(false);
                }

                PvPBattleState oldState = State;

                if (!Validate())
                {
                    State = PvPBattleState.Internal;
                    state.Mobile.SendMessage("This battle has failed validation and has been internalized.");
                }
                else
                {
                    Hidden = false;

                    switch (State)
                    {
                    case PvPBattleState.Internal:
                        State = PvPBattleState.Queueing;
                        break;

                    case PvPBattleState.Queueing:
                        State = PvPBattleState.Preparing;
                        break;

                    case PvPBattleState.Preparing:
                        State = PvPBattleState.Running;
                        break;

                    case PvPBattleState.Running:
                        State = PvPBattleState.Ended;
                        break;

                    case PvPBattleState.Ended:
                        State = PvPBattleState.Queueing;
                        break;
                    }
                }

                if (State != oldState)
                {
                    state.Mobile.SendMessage("The state of the battle has been changed to {0}", State.ToString());
                    return(true);
                }

                return(false);
            },
                "Toggles the state of the current battle.");
        }
Beispiel #12
0
		public void SetTime(PvPBattleState state, DateTime when)
		{
			switch (state)
			{
				case PvPBattleState.Queueing:
					{
						OpenedWhen = when;
					}
					break;
				case PvPBattleState.Preparing:
					{
						PreparedWhen = when;
					}
					break;
				case PvPBattleState.Running:
					{
						StartedWhen = when;
					}
					break;
				case PvPBattleState.Ended:
					{
						EndedWhen = when;
					}
					break;
			}
		}