예제 #1
0
        public void CScoreOffenseAssistReq(GameSession session, CScoreOffenseAssistReqMessage message)
        {
            var plr = session.Player;

            plr.RoomInfo.PeerId = message.Score.Target;

            var room   = plr.Room;
            var assist = room.Players.GetValueOrDefault(message.Score.Assist.AccountId);

            if (assist == null)
            {
                return;
            }
            assist.RoomInfo.PeerId = message.Score.Assist;

            var killer = room.Players.GetValueOrDefault(message.Score.Killer.AccountId);

            if (killer == null)
            {
                return;
            }
            killer.RoomInfo.PeerId = message.Score.Killer;

            if (room.Options.MatchKey.GameRule == GameRule.Touchdown)
            {
                ((TouchdownGameRule)room.GameRuleManager.GameRule).OnScoreOffense(killer, assist, plr, message.Score.Weapon);
            }
        }
예제 #2
0
        [Firewall(typeof(MustBeTimeState), GameTimeState.HalfTime, Invert = true)] // Must not be half time
        public Task <bool> OnHandle(MessageContext context, CScoreOffenseAssistReqMessage message)
        {
            var session = context.GetSession <Session>();
            var plr     = session.Player;
            var room    = plr.Room;

            if (plr.State != PlayerState.Alive)
            {
                return(Task.FromResult(true));
            }

            var killer = room.Players.GetValueOrDefault(message.Score.Killer.AccountId);

            if (killer == null)
            {
                return(Task.FromResult(true));
            }

            var assist = room.Players.GetValueOrDefault(message.Score.Assist.AccountId);

            if (assist == null)
            {
                return(Task.FromResult(true));
            }

            room.GameRule.OnScoreOffense(
                new ScoreContext(killer, message.Score.Killer.PeerId.ObjectType != 1 ? message.Score.Killer : null),
                new ScoreContext(assist, message.Score.Assist.PeerId.ObjectType != 1 ? message.Score.Assist : null),
                new ScoreContext(plr, message.Score.Target.PeerId.ObjectType != 1 ? message.Score.Target : null),
                message.Score.Weapon);
            return(Task.FromResult(true));
        }