Exemplo n.º 1
0
        public void CEventMessageReq(GameSession session, CEventMessageReqMessage message)
        {
            var plr = session.Player;

            if (plr.Room != null)
            {
                plr.Room.Broadcast(new SEventMessageAckMessage(message.Event, session.Player.Account.Id, message.Unk1, message.Value, ""));
            }
            else
            {
                Logger.ForAccount(session)
                .Debug("Player don't have room");
                return;
            }
            //if (message.Event == GameEventMessage.BallReset && plr == plr.Room.Host)
            //{
            //    plr.Room.Broadcast(new SEventMessageAckMessage(GameEventMessage.BallReset, 0, 0, 0, ""));
            //    return;
            //}

            //if (message.Event != GameEventMessage.StartGame)
            //    return;

            if (plr.Room.GameRuleManager.GameRule.StateMachine.IsInState(GameRuleState.Playing) && plr.RoomInfo.State == PlayerState.Lobby)
            {
                plr.RoomInfo.State = plr.RoomInfo.Mode == PlayerGameMode.Normal
                    ? PlayerState.Alive
                    : PlayerState.Spectating;

                plr.Room.BroadcastBriefing();
            }
        }
Exemplo n.º 2
0
        public void CEventMessageReq(GameSession session, CEventMessageReqMessage message)
        {
            var plr = session.Player;

            plr.Room.Broadcast(new SEventMessageAckMessage(message.Event, session.Player.Account.Id, message.Unk1, message.Value, ""));

            if (plr.Room.GameRuleManager.GameRule.StateMachine.IsInState(GameRuleState.Playing) && plr.RoomInfo.State == PlayerState.Lobby)
            {
                plr.RoomInfo.State = plr.RoomInfo.Mode == PlayerGameMode.Normal
                    ? PlayerState.Alive
                    : PlayerState.Spectating;

                plr.Room.BroadcastBriefing();
            }
        }
Exemplo n.º 3
0
        public Task <bool> OnHandle(MessageContext context, CEventMessageReqMessage message)
        {
            var session = context.GetSession <Session>();
            var plr     = session.Player;
            var room    = plr.Room;

            // Client is trying to enter the game while its running
            if (room.GameRule.StateMachine.GameState == GameState.Playing && plr.State == PlayerState.Lobby)
            {
                if (!_equipValidator.IsValid(plr.CharacterManager.CurrentCharacter))
                {
                    session.Send(new SServerResultInfoAckMessage(ServerResult.WearingUnusableItem));
                    return(Task.FromResult(true));
                }

                for (var i = 0; i < plr.CharacterStartPlayTime.Length; ++i)
                {
                    plr.CharacterStartPlayTime[i] = default;
                }

                plr.CharacterStartPlayTime[plr.CharacterManager.CurrentSlot] = DateTimeOffset.Now;
                plr.StartPlayTime = DateTimeOffset.Now;
                plr.IsReady       = false;
                plr.Score.Reset();
                plr.State = plr.Mode == PlayerGameMode.Normal
                    ? PlayerState.Alive
                    : PlayerState.Spectating;

                room.BroadcastBriefing();
            }

            room.Broadcast(new SEventMessageAckMessage(message.Event, session.Player.Account.Id,
                                                       message.Unk1, message.Value, ""));

            return(Task.FromResult(true));
        }