Пример #1
0
        [Firewall(typeof(MustBeTimeState), GameTimeState.HalfTime, Invert = true)] // Must not be half time
        public Task <bool> OnHandle(MessageContext context, CScoreKillAssistReqMessage 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.OnScoreKill(
                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));
        }
Пример #2
0
        public void CScoreKillAssistReq(GameSession session, CScoreKillAssistReqMessage 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;

            room.GameRuleManager.GameRule.OnScoreKill(killer, assist, plr, message.Score.Weapon);
        }
Пример #3
0
        public void CScoreKillAssistReq(GameSession session, CScoreKillAssistReqMessage message)
        {
            var plr = session.Player;

            if (message.Score.Target != plr.RoomInfo.PeerId)
            {
                return;
            }

            var room   = plr.Room;
            var assist = room.Players.Values.FirstOrDefault(p => p.RoomInfo.PeerId == message.Score.Assist);

            if (assist == null)
            {
                return;
            }

            var killer = room.Players.Values.FirstOrDefault(p => p.RoomInfo.PeerId == message.Score.Killer);

            if (killer == null)
            {
                return;
            }

            room.GameRuleManager.GameRule.OnScoreKill(killer, assist, plr, message.Score.Weapon);
        }