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