Esempio n. 1
0
        [Firewall(typeof(MustBeTimeState), GameTimeState.HalfTime, Invert = true)] // Must not be half time
        public Task <bool> OnHandle(MessageContext context, CScoreOffenseReqMessage 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));
            }

            room.GameRule.OnScoreOffense(
                new ScoreContext(killer, message.Score.Killer.PeerId.ObjectType != 1 ? message.Score.Killer : null),
                null,
                new ScoreContext(plr, message.Score.Target.PeerId.ObjectType != 1 ? message.Score.Target : null),
                message.Score.Weapon);
            return(Task.FromResult(true));
        }
Esempio n. 2
0
        public void CScoreOffenseReq(GameSession session, CScoreOffenseReqMessage message)
        {
            var plr = session.Player;

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

            var room   = plr.Room;
            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, null, plr, message.Score.Weapon);
            }
        }