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);
        }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
        //响应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();
            }
        }