public void CScoreDefenseAssistReq(GameSession session, CScoreDefenseAssistReqMessage 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).OnScoreDefense(killer, assist, plr, message.Score.Weapon); } }
[Firewall(typeof(MustBeTimeState), GameTimeState.HalfTime, Invert = true)] // Must not be half time public Task <bool> OnHandle(MessageContext context, CScoreDefenseAssistReqMessage 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.OnScoreDefense( 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)); }