[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)); }
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); } }