private void HandleBattleEnd(Msg_RL_BattleEnd msg, PBChannel channel, int src, uint session) { int roomID = msg.RoomID; LogSys.Log(LOG_TYPE.DEBUG, "Battle Info: RoomID = {0}", roomID); m_RoomProcessThread.QueueAction(m_RoomProcessThread.OnRoomBattleEnd, msg); }
internal void MpveEndBattle(int kill_npc_ct) { if (this.CurrentState == RoomState.Finish || this.CurrentState == RoomState.Deactive) { return; } foreach (User user in room_users_) { if (user != null) { Msg_RL_UserQuit.Builder unqBuilder = Msg_RL_UserQuit.CreateBuilder(); unqBuilder.SetRoomID(cur_room_id_); unqBuilder.SetUserGuid(user.Guid); unqBuilder.SetIsBattleEnd(true); connector_.SendMsgToLobby(unqBuilder.Build()); } } //向Lobby发送战斗结束消息:RoomID,胜方阵营,开始时间,结束时间。。。 Msg_RL_BattleEnd.Builder beBuilder = Msg_RL_BattleEnd.CreateBuilder(); beBuilder.SetRoomID(RoomID); Msg_RL_BattleEnd.Types.WinnerCampEnum winCamp = Msg_RL_BattleEnd.Types.WinnerCampEnum.None; beBuilder.SetWinnerCamp(winCamp); //战斗数据 foreach (User user in room_users_) { if (user != null) { var battleRecord = user.Info.GetCombatStatisticInfo(); Msg_RL_UserBattleInfo.Builder ubrBuilder = Msg_RL_UserBattleInfo.CreateBuilder(); ubrBuilder.SetUserGuid(user.Guid); Msg_RL_UserBattleInfo.Types.BattleResultEnum result = Msg_RL_UserBattleInfo.Types.BattleResultEnum.Unfinish; if (kill_npc_ct > 0) { result = Msg_RL_UserBattleInfo.Types.BattleResultEnum.Win; } else { result = Msg_RL_UserBattleInfo.Types.BattleResultEnum.Lost; } ubrBuilder.SetBattleResult(result); ubrBuilder.SetMoney(user.Info.Money); CombatStatisticInfo combatInfo = user.Info.GetCombatStatisticInfo(); ubrBuilder.SetHitCount(combatInfo.HitCount); ubrBuilder.SetKillNpcCount(kill_npc_ct); ubrBuilder.SetMaxMultiHitCount(combatInfo.MaxMultiHitCount); ubrBuilder.SetTotalDamageToMyself(combatInfo.TotalDamageToMyself); ubrBuilder.SetTotalDamageFromMyself(combatInfo.TotalDamageFromMyself); beBuilder.AddUserBattleInfos(ubrBuilder.Build()); } } connector_.SendMsgToLobby(beBuilder.Build()); this.CurrentState = RoomState.Finish; m_FinishTime = TimeUtility.GetServerMilliseconds(); LogSys.Log(LOG_TYPE.DEBUG, "Room {0}({1}) MpveEndBattle.", RoomID, LocalID); }
//响应RoomServer发来的战斗结束消息 internal void OnRoomBattleEnd(Msg_RL_BattleEnd msg) { RoomInfo room = m_LobbyInfo.GetRoomByID(msg.RoomID); if (room != null) { //接收战斗数据 if (msg.WinnerCamp == Msg_RL_BattleEnd.Types.WinnerCampEnum.Red) { room.WinnerCamp = CampIdEnum.Red; } else if (msg.WinnerCamp == Msg_RL_BattleEnd.Types.WinnerCampEnum.Blue) { room.WinnerCamp = CampIdEnum.Blue; } else { room.WinnerCamp = CampIdEnum.Unkown; } int money_ct = 0; List <Teammate> teammate = new List <Teammate>(); foreach (var ubrMsg in msg.UserBattleInfosList) { UserInfo user = LobbyServer.Instance.DataProcessScheduler.GetUserInfo(ubrMsg.UserGuid); if (user != null) { Teammate e = new Teammate(); e.Nick = user.Nickname; e.ResId = user.HeroId; e.Money = ubrMsg.Money; money_ct += ubrMsg.Money; teammate.Add(e); } } List <UserInfo> users = new List <UserInfo>(); foreach (var ubrMsg in msg.UserBattleInfosList) { UserInfo user = LobbyServer.Instance.DataProcessScheduler.GetUserInfo(ubrMsg.UserGuid); if (user != null) { if (ubrMsg.BattleResult == Msg_RL_UserBattleInfo.Types.BattleResultEnum.Win) { user.CurrentBattleInfo.BattleResult = BattleResultEnum.Win; } else if (ubrMsg.BattleResult == Msg_RL_UserBattleInfo.Types.BattleResultEnum.Lost) { user.CurrentBattleInfo.BattleResult = BattleResultEnum.Lost; } else { user.CurrentBattleInfo.BattleResult = BattleResultEnum.Unfinish; } user.CurrentBattleInfo.TeamMate.AddRange(teammate); if (ubrMsg.HasKillNpcCount) { user.CurrentBattleInfo.KillNpcCount = ubrMsg.KillNpcCount; UpdateAttemptAward(ubrMsg.UserGuid, room.SceneType, ubrMsg.KillNpcCount); } user.CurrentBattleInfo.AddGold = ubrMsg.Money; user.CurrentBattleInfo.TotalGold = money_ct; user.CurrentBattleInfo.HitCount = ubrMsg.HitCount; user.CurrentBattleInfo.MaxMultiHitCount = ubrMsg.MaxMultiHitCount; user.CurrentBattleInfo.TotalDamageToMyself = ubrMsg.TotalDamageToMyself; user.CurrentBattleInfo.TotalDamageFromMyself = ubrMsg.TotalDamageFromMyself; users.Add(user); } } //处理战斗结果 room.ProcessBattleResult(users); //结束战斗 room.EndBattle(); } }