public virtual void OnSocketSubPrivateInfo(CMD_GR_Private_Info pNetInfo)
        {
            Loom.QueueOnMainThread(() =>
            {
                m_kPrivateInfo = pNetInfo;

                if (m_eLinkAction == Type_LinkAction.Type_Link_Create)
                {
                    var buf = StructConverterByteArray.StructToBytes(m_kCreatePrivateNet);
                    CServerItem.get().SendSocketData(GameServerDefines.MDM_GR_PRIVATE, GameServerDefines.SUB_GR_CREATE_PRIVATE, buf, (ushort)buf.Length);
                    //zeromemory(&m_kCreatePrivateNet, sizeof(m_kCreatePrivateNet));
                    m_kCreatePrivateNet = new CMD_GR_Create_Private();
                }
                if (m_eLinkAction == Type_LinkAction.Type_Link_Join)
                {
                    CMD_GR_Join_Private kSendNet;
                    kSendNet.dwRoomNum           = (uint)m_iJoinRoomId; //utility::parseInt(m_kJoinNumTxt); // lin Temp do this
                    kSendNet.cbGameTypeIdex      = m_cbGameTypeIdex;    //WQ add
                    kSendNet.cbChoosedModelIndex = (byte)PlayerPrefs.GetInt("ChoosedModelIndex");

                    Debug.Log("OnSocketSubPrivateInfo Type_Link_Join: m_cbGameTypeIdex=" + m_cbGameTypeIdex);

                    var buf = StructConverterByteArray.StructToBytes(kSendNet);
                    CServerItem.get().SendSocketData(GameServerDefines.MDM_GR_PRIVATE, GameServerDefines.SUB_GR_JOIN_PRIVATE, buf, (ushort)buf.Length);
                }
                m_eLinkAction = Type_LinkAction.Type_Link_NULL;
            });
        }
Beispiel #2
0
 //发送聊天文字
 public void SendChatData(string str)
 {
     if (BWFManager.isReady && BWFManager.Contains(str))
     {
         str = BWFManager.ReplaceAll(str);
     }
     if (str.Length > ChatDataLenght)
     {
         GameSceneUIHandler.ShowLog("文字长度过长,请重新输入!");
     }
     else if (str.Length == 0)
     {
         GameSceneUIHandler.ShowLog("输入信息不能为空!");
     }
     else
     {
         var temp = Encoding.GetEncoding(936).GetBytes(str);
         //byte[] data = new byte[40];
         //Array.Clear(data, 0, 40);
         var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
         if (kernel == null)
         {
             return;
         }
         //Buffer.BlockCopy(temp, 0, data, 0, temp.Length);
         kernel.SendChatData(temp);
     }
     chat = "";
 }
        //public static int KIND_LAN_EMO; //语言和表情ID

        public override bool OnEventSceneMessage(byte cbGameStatus, bool bLookonUser, byte[] data, int dataSize)
        {
            if (hnManager != null)
            {
                hnManager.m_bIsToHallByDisconnect = false;
                hnManager.HideOfflineWaitingUI();
            }

            //fix服务端在处理SUB_GF_GAME_OPTION时先发送GAME_SCENE,后发送GAME_STATUS,导致这里的cbGameStatus是老的值
            cbGameStatus = data[0];

            Debug.Log("flow.CClientKernel::OnSocketSubGameScene4: cbGameStatus=" + cbGameStatus);

            if (cbGameStatus == SocketDefines.GAME_STATUS_FREE || cbGameStatus == SocketDefines.GAME_STATUS_WAIT)
            {
                OnFreeScence(data, dataSize);
                CServerItem.get().SetGameStatus(cbGameStatus);
                setGameState(MJState.HNMJ_STATE_NULL);
            }
            else if (cbGameStatus == SocketDefines.GAME_STATUS_PLAY || cbGameStatus == SocketDefines.GAME_STATUS_HIDE)
            {
                OnPlayScence(data, dataSize);
                CServerItem.get().SetGameStatus(cbGameStatus);
                setGameState(MJState.HNMJ_STATE_PLAYING);
            }
            else
            {
                Debug.LogError("OnEventSceneMessage: cbGameStatus error!!! cbGameStatus=" + cbGameStatus);
                Debug.Assert(false, "OnEventSceneMessage: cbGameStatus error!");
            }

            return(true);
        }
        public bool StartFakeGame(ushort wKindID)
        {
            IClientKernelSink pKernelSink = CreateGame(wKindID);

            pKernelSink.clearInfo();
            CServerItem.get().SetClientKernelSink(pKernelSink);
            return(true);
        }
 //心跳包
 public void HeartTick()
 {
     if (CServerItem.get() == null)
     {
         return;
     }
     RestTick();
 }
Beispiel #6
0
    IEnumerator PlayerJionDealInGaming(byte cbChairID)
    {
        while (CServerItem.get() == null)
        {
        }
        yield return(null);

        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
        {
            Human localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
            if (localHuman != null)
            {
                byte Gamestate = CServerItem.get().GetGameStatus();
                if (Gamestate == SocketDefines.GAME_STATUS_PLAY)
                {
                    ControlManager.GetInstance().ControlModelSwitch(ControlManager.CameraControlMode.PlayerViewMode);
                    if (localHuman != null)
                    {
                        if (localHuman.ChairID == cbChairID)
                        {
                            if (localHuman.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                            {
                                GameSceneUIHandler.ShowLog("躲藏队");
                                m_Canvas.transform.Find("Hearts").gameObject.SetActive(false);
                                var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                                if (kernel != null && !m_hnGameManager.isReconnect)   //只有非断线重连加入游戏才能获得隐身效果
                                {
                                    ShowMiddleTips("当前为隐身状态,在隐身效果结束前躲起来!", 3);
                                    kernel.SendInventoryConsumption((byte)ControlManager.InventoryItemID.Stealth, 0);  //不消耗费用
                                }
                                if (m_hnGameManager.isReconnect)
                                {
                                    Button StealthButton = m_Canvas.transform.Find("Btn/StealthButton").gameObject.GetComponent <Button>();
                                    if (StealthButton != null)
                                    {
                                        StealthButton.interactable = true;
                                        Text timeText = StealthButton.gameObject.transform.Find("TimeLeft").GetComponent <Text>();
                                        if (timeText != null)
                                        {
                                            timeText.text = "";
                                        }
                                    }
                                }
                            }
                            else
                            {
                                GameSceneUIHandler.ShowLog("搜查队");
                                ShowMiddleTips("您被分配到搜查队,开始寻找躲起来的物品吧!", 3);
                                m_Canvas.transform.Find("Hearts").gameObject.SetActive(true);
                            }
                        }
                    }
                    _showRoomUsersBtn.SetActive(true);
                    GameManager.GetInstance().SetAllHiderVisible(true);
                }
            }
        }
    }
        private GameManagerBaseNet()
        {
            mServerItem  = CServerItem.create();
            mCServerItem = (CServerItem)mServerItem;
            mServerItem.SetServerItemSink(this);
            mServerItem.SetStringMessageSink(this);

            //cocos2d::Director::getInstance()->getScheduler()->schedule(CC_CALLBACK_1(GameManagerBase::upDataTime, this), this, 0.0f, false, "GameManagerBase");
        }
        public void Button_DismissPrivateNot()
        {
            CMD_GR_Dismiss_Private kNetInfo = new CMD_GR_Dismiss_Private();

            kNetInfo.bDismiss = 0;
            var buf = StructConverterByteArray.StructToBytes(kNetInfo);

            CServerItem.get().SendSocketData(GameServerDefines.MDM_GR_PRIVATE, GameServerDefines.SUB_GR_PRIVATE_DISMISS, buf, (ushort)buf.Length);
        }
 public void StartGameReconnect()
 {
     if (CServerItem.get().IsService())
     {
         Debug.Log("GameManagerBase::StartGameReconnect() IServerItem::get()->IsService() false!");
         m_eInReconnect = enReconnectStatus.ReconnectStatus_DisConnect;
         disconnectServer();
     }
 }
Beispiel #10
0
    //显示聊天文字
    public void ShowChatPanel(int id, byte status, string str)
    {
        //PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayerByChairID(id);
        //IClientUserItem pMeItem = CServerItem.get().GetMeUserItem();
        //if (pMeItem == null)
        //    return;
        //int nStatus = pMeItem.GetUserStatus();

        //if (nStatus == SocketDefines.US_LOOKON)  //旁观者
        //{
        //    if (playerBase.TeamType == PlayerTeam.PlayerTeamType.HideTeam || status == SocketDefines.US_LOOKON)
        //    {
        //        var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
        //        if (kernel != null)
        //        {
        //            String[] st = kernel.getPlayerByChairID(id).GetNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
        //            ShowChatText(st[0], str);
        //        }
        //    }
        //}
        //else  //玩家
        //{
        //    Human localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
        //    if (localHuman.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam)
        //    {
        //        if (playerBase.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam && status != SocketDefines.US_LOOKON)
        //        {
        //            var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
        //            if (kernel != null)
        //            {
        //                String[] st = kernel.getPlayerByChairID(id).GetNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
        //                ShowChatText(st[0], str);
        //            }
        //        }
        //    }
        //    else if (localHuman.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
        //    {
        //        if (playerBase.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
        //        {
        //            var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
        //            if (kernel != null)
        //            {
        //                String[] st = kernel.getPlayerByChairID(id).GetNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
        //                ShowChatText(st[0], str);
        //            }
        //        }
        //    }
        //}
        var kernel = (GameScene)CServerItem.get().GetClientKernelSink();

        if (kernel != null)
        {
            String[] st = kernel.getPlayerByChairID(id).GetNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
            ShowChatText(st[0], str);
        }
    }
 ///< 断开连接
 public void disconnectServer() //事件消息
 {
     if (mServerItem != null)
     {
         if (CServerItem.get() != null)
         {
             CServerItem.get().IntermitConnect(true);
         }
     }
 }
    public void SyncDead(PlayerBase.PlayerEventKind deadEventKind, PlayerBase killer)
    {
        //deadEventKind: DeadByDecHp-自己扣完血而死, DeadByPicked-被警察点死, DeadByBoom-被炸弹炸死

        Debug.LogWarning("SyncDead:" + gameObject.name + " is dead!");

        byte Gamestate = SocketDefines.GAME_STATUS_FREE;

        if (CServerItem.get() != null)
        {
            Gamestate = CServerItem.get().GetGameStatus();
        }
        if (Gamestate != SocketDefines.GAME_STATUS_PLAY)
        {
            Debug.LogError("SyncDead when Gamestate=" + Gamestate);
            return;
        }

        if (deadEventKind != PlayerBase.PlayerEventKind.DeadByDecHp && deadEventKind != PlayerBase.PlayerEventKind.DeadByPicked && deadEventKind != PlayerBase.PlayerEventKind.DeadByBoom)
        {
            Debug.LogError("SyncDead:incorrect deadEventKind=%d" + deadEventKind);
            return;
        }

        //击杀信息
        //if (gameObject.GetComponent<PlayerBase>().IsAI)
        //{
        //    UIManager.GetInstance().ShowMiddleTips(gameObject.name + "找到了: " + pickedPlayer.gameObject.name);
        //}
        //else
        //{
        //    String[] str = GlobalUserInfo.getNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
        //    UIManager.GetInstance().ShowMiddleTips(str[0] + "找到了: " + pickedPlayer.gameObject.name);
        //}

        if (deadEventKind == PlayerBase.PlayerEventKind.DeadByPicked || deadEventKind == PlayerBase.PlayerEventKind.DeadByBoom)
        {
            //由服务器的HP同步
            //// Heal killer
            //if (killer != null)
            //{
            //    killer.AddHP();
            //}

            if (deadEventKind == PlayerBase.PlayerEventKind.DeadByPicked)
            {
                if (m_hnGameManager != null && killer.IsLocalHuman())  //Killer是本地玩家,播放找到躲藏者提示
                {
                    m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_HIDE_BEFOUNDED);
                }
            }
        }

        MakeDead();
    }
Beispiel #13
0
 public void ExitGameBase()
 {
     if (CServerItem.get() != null)
     {
         CServerItem.get().PerformStandUpAction();
     }
     else
     {
         ExitGame();
     }
 }
        public HNPrivateScenceBase(HNGameManager ma)
        {
            m_iJoinCout         = (0);
            m_eLinkAction       = (Type_LinkAction.Type_Link_NULL);
            m_kCreatePrivateNet = new CMD_GR_Create_Private();
            m_kPrivateInfo      = new CMD_GR_Private_Info();
            m_kPrivateRoomInfo  = new CMD_GF_Private_Room_Info();

            CServerItem.get().SetServerPrivateSink(this);
            hnManager = ma;
        }
        public void Button_EmosShow(int emoIdex)
        {
            showPlane(TYPE_EMOS, emoIdex, m_pLocal.GetChairID());

            //mChen
            CMD_GF_C_UserExpressionIdx UserExpression = new CMD_GF_C_UserExpressionIdx();

            UserExpression.wItemIndex  = (ushort)emoIdex;
            UserExpression.wSendUserID = m_pLocal.GetChairID();
            var buf = StructConverterByteArray.StructToBytes(UserExpression);

            CServerItem.get().SendSocketData(GameServerDefines.MDM_GF_FRAME, GameServerDefines.SUB_GF_USER_EXPRESSION_INDEX, buf, (ushort)buf.Length);
        }
Beispiel #16
0
    public void OnLeaveMatchButtonClick()
    {
        if (_leaveMatchButton != null)
        {
            _leaveMatchButton.SetActive(false);
        }
        if (_showRoomUsersBtn != null)
        {
            _showRoomUsersBtn.SetActive(false);
        }

        if (m_hnGameManager == null)
        {
            m_hnGameManager = GameObject.FindObjectOfType <HNGameManager>();
        }

        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
        {
            m_hnGameManager.StopSingleGame();
            m_hnGameManager.LeaveGameToHall();
            return;
        }

        int             nStatus = SocketDefines.US_NULL;
        IClientUserItem pMeItem = null;

        if (CServerItem.get() != null)
        {
            pMeItem = CServerItem.get().GetMeUserItem();
        }
        if (pMeItem != null)
        {
            nStatus = pMeItem.GetUserStatus();
        }
        if (true)//if (nStatus == SocketDefines.US_LOOKON)
        {
            m_hnGameManager.PopLeaveRoomWindow();
        }
        else
        {
            //_joinMatchButton.active = true;
            m_hnGameManager.DismissBtnClicked();
            if (GameManager.s_NetWorkClient != null)
            {
                GameManager.s_NetWorkClient.LeaveMatchToRoom();
            }
        }

        HideMatchStartCountDown();
        HideWaitToJoinNextMatchLabel();
    }
        public void Button_LansShow(int lansIndex)
        {
            showPlane(TYPE_LANS, lansIndex, m_pLocal.GetChairID());

            //mChen
            CMD_GF_C_UserChatIdx UserChat = new CMD_GF_C_UserChatIdx();

            UserChat.wItemIndex  = (ushort)lansIndex;
            UserChat.wSendUserID = m_pLocal.GetChairID();
            var buf = StructConverterByteArray.StructToBytes(UserChat);

            CServerItem.get()
            .SendSocketData(GameServerDefines.MDM_GF_FRAME, GameServerDefines.SUB_GF_USER_CHAT_INDEX, buf,
                            (ushort)buf.Length);
        }
        //创建游戏内核
        public bool CreateKernel()
        {
            IClientKernelSink pKernelSink = CreateGame(mGameServerItem.m_GameServer.wKindID);

            if (pKernelSink == null)
            {
                GameNet.CServerItem.get().IntermitConnect(true);
                return(false);
            }
            pKernelSink.clearInfo();
            CServerItem.get().SetClientKernelSink(pKernelSink);
            CServerItem.get().OnGFGameReady();

            return(false);
        }
        //登陆完成
        public void OnGRLogonFinish()
        {
            m_eInReconnect = enReconnectStatus.ReconnectStatus_NULL;
            closeClinet();
            //TimeManager::Instance().removeByFun(TIME_CALLBACK(GameManagerBase::closeClinet, this));

            //// fix有人在团灭前断线,重连回来(已经下一局)还在原来的房间,时间一直没有更新,且没有跳出断线UI
            //Loom.QueueOnMainThread(() =>
            //{
            //    if (HNGameManager.bFakeServer == false)
            //    {
            //        if (hnManager != null)
            //        {
            //            hnManager.StartOrStopGameSceneHeartBeat(true);
            //        }
            //    }
            //});

            //mChen edit
            if (false)//if (HNMJGameScence::SERVER_TYPE == GAME_GENRE_MATCH && HNMJGameScence::IS_MATCH_SIGNUP)
            {
                //比赛报名
                CServerItem.get().sendMatchSignupCheck();
            }
            else
            {
                //重入判断
                if (mServerItem != null && (mServerItem.GetMeUserItem() != null) && (mServerItem.GetMeUserItem().GetUserStatus() >= SocketDefines.US_SIT))
                {
                    //启动进程
                    if (!StartGame(true))
                    {
                        mServerItem.OnGFGameClose((int)enGameExitCode.GameExitCode_CreateFailed);
                    }
                    return;
                }
                else if (m_eInReconnect == enReconnectStatus.ReconnectStatus_Connecting)
                {
                    if (mServerItem != null)
                    {
                        mServerItem.OnGFGameClose((int)enGameExitCode.GameExitCode_Normal);
                    }
                    return;
                }

                CB_GameLogonFinsh();
            }
        }
Beispiel #20
0
        public void onUserInGameServerID(CMD_GP_InGameSeverID pNetInfo)
        {
            Debug.Log("onUserInGameServerID: " + pNetInfo.LockServerID + "," + pNetInfo.LockKindID);
            if (pNetInfo.LockServerID != 0)
            {
                //Debug.Log("connectGameServerByServerID " + pNetInfo.LockServerID);
                GameManagerBaseNet.InstanceBase().connectGameServerByServerID((int)pNetInfo.LockServerID);
                Debug.Log("断线重连onUserInGameServerID:" + pNetInfo.LockKindID);
                if (pNetInfo.LockKindID == GameScene.KIND_ID_JianDe)
                {
                    GameScene.KIND_ID      = GameScene.KIND_ID_JianDe;
                    HNGameManager.GameType = HNPrivateScenceBase.GAME_TYPE_JianDe;
                }
                else if (pNetInfo.LockKindID == GameScene.KIND_ID_13Shui)
                {
                    Debug.LogError("13shui断线重连");
                    GameScene.KIND_ID      = GameScene.KIND_ID_13Shui;
                    HNGameManager.GameType = HNPrivateScenceBase.GAME_TYPE_13Shui;
                }
            }
            else
            {
                GameScene.KIND_ID      = 0;
                HNGameManager.GameType = HNPrivateScenceBase.GAME_TYPE_Null;

                // for HideSeek:强制离开
                //玩家没被锁在GameScoreLocker表中
                Debug.LogError("onUserInGameServerID: 玩家没被锁在GameScoreLocker表中");
                if (m_hnManager != null)
                {
                    if (m_hnManager.bEnteredGameScene)
                    {
                        if (CServerItem.get() != null)
                        {
                            CServerItem.get().IntermitConnect(true);
                        }
                        Loom.QueueOnMainThread(() =>
                        {
                            m_hnManager.LeaveGameToHall(false);
                        });
                    }
                }
                else
                {
                    Debug.LogError("onUserInGameServerID: m_hnManager==null");
                }
            }
        }
        //发送聊天数据给服务器
        public void SendChatData(byte[] chatdata)
        {
            CMD_C_CHAT chat = new CMD_C_CHAT();

            chat.UserStatus = CServerItem.get().GetMeUserItem().GetUserStatus();
            chat.ChatData   = chatdata;
            if (chat.ChatData.Length <= 100 && chat.ChatData.Length > 0)
            {
                var buf = StructConverterByteArray.StructToBytes(chat);
                SendSocketData(HNMJ_Defines.SUB_C_CHAT_PLAY, buf, (ushort)buf.Length);
            }
            else
            {
                Debug.Log("文字数据不存在或过长");
            }
        }
Beispiel #22
0
    public void ShowWinOrLose()
    {
        //判断输赢
        Human      localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
        PlayerTeam team       = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam);

        if (localHuman != null && team != null)
        {
            bool HideWin = false;
            for (int i = 0; i < team.GetPlayerNum(); i++)
            {
                PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, i);
                if (playerBase.Hp != 0)
                {
                    HideWin = true;
                    break;
                }
            }
            if (!HideWin)
            {
                if (localHuman.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                {
                    ShowJSPopup(0);
                }
                else
                {
                    ShowJSPopup(1);
                }
            }
            else
            {
                if (localHuman.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                {
                    var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                    if (kernel != null)
                    {
                        kernel.SendAwardData(10, 0);  //找到一个人奖励
                    }
                    ShowJSPopup(1);
                }
                else
                {
                    ShowJSPopup(0);
                }
            }
        }
    }
        public void upDataTime(float fTime)
        {
            if (CServerItem.get() == null || mGameServerItem == null)
            {
                return;
            }
            if (CServerItem.get().IsService() && m_eInReconnect == enReconnectStatus.ReconnectStatus_NULL)
            {
                m_fHeatTickTime += fTime;
            }
            if (m_eInReconnect == enReconnectStatus.ReconnectStatus_DisConnect)
            {
                if (CServerItem.get().IsService())
                {
                    disconnectServer();
                }
                else
                {
                    m_eInReconnect = enReconnectStatus.ReconnectStatus_Connecting;
                    connectServer();
                }
            }
            if (m_fHeatTickTime > 15.0f)
            {
                m_fHeatTickTime = 0;
                if (m_eInReconnect == enReconnectStatus.ReconnectStatus_NULL)
                {
                    //NoticeMsg::Instance().ShowNoticeMsgByScript("NetReconnectError");
                    m_eInReconnect = enReconnectStatus.ReconnectStatus_DisConnect;
                    disconnectServer();
                }
                else
                {
                    m_eInReconnect = enReconnectStatus.ReconnectStatus_NULL;

                    if (mServerItem != null)
                    {
                        mServerItem.OnGFGameClose((int)enGameExitCode.GameExitCode_Normal);
                    }
                }
            }
        }
        //系统消息(窗口输出)
        public bool InsertSystemString(byte[] pszString)
        {
            string strLog = Encoding.Default.GetString(pszString);

            Debug.Log(strLog);
            String[] str = strLog.Split(new string[] { "[", "]" }, StringSplitOptions.RemoveEmptyEntries);
            if (str.Length != 1)
            {
                int time = int.Parse(str[1]);
                if (time == 200)  //Play-200s
                {
                    Debug.Log("Play SOUND_TIPS_START_SEEK");
                    Loom.QueueOnMainThread(() => { hnManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_TIPS_START_SEEK); });
                }
                else if (time == 45 || time == 100) //Hide-45s,Play-100s,Play-45s
                {
                    Debug.Log("Play SOUND_TIPS_STARTOREND");
                    Loom.QueueOnMainThread(() => { hnManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_TIPS_STARTOREND); });
                    if (time == 45)
                    {
                        IClientUserItem pMeItem   = CServerItem.get().GetMeUserItem();
                        byte            Gamestate = CServerItem.get().GetGameStatus();
                        if (Gamestate == SocketDefines.GAME_STATUS_PLAY)
                        {
                            if (UIManager.GetInstance() != null)
                            {
                                UIManager.GetInstance().ShowMiddleTips("警察进入无敌状态");
                            }
                        }
                    }
                }
                else if (time == 5 || time == 4 || time == 3 || time == 2 || time == 1)
                {
                    Debug.Log("Play SOUND_TIME_SEC");
                    Loom.QueueOnMainThread(() => { hnManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_TIME_SEC); });
                }
            }
            strLog = GlobalUserInfo.GBToUtf8(pszString);
            GameSceneUIHandler.ShowLog(strLog);

            return(true);
        }
Beispiel #25
0
    //显示头顶信息
    public void ShowPlayerTopHeadInfo(PlayerBase playerBase)
    {
        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
        {
            if (GameManager.s_singleGameStatus == SocketDefines.GAME_STATUS_HIDE || GameManager.s_singleGameStatus == SocketDefines.GAME_STATUS_PLAY)
            {
                Human localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
                if (localHuman != null)
                {
                    //本地玩家为警察时不显示躲藏者信息
                    if (localHuman.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam && playerBase.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                    {
                        playerBase.SetTopInfoVisible(false);
                        return;
                    }
                    goto TopHeadInfo;
                }
                return;
            }
            else
            {
                return;
            }
        }
        else
        {
            if (CServerItem.get() == null)
            {
                return;
            }
            byte Gamestate = CServerItem.get().GetGameStatus();
            if (Gamestate == SocketDefines.GAME_STATUS_HIDE || Gamestate == SocketDefines.GAME_STATUS_PLAY)
            {
                Human localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
                if (localHuman != null)
                {
                    //本地玩家为警察时不显示躲藏者信息
                    if (localHuman.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam && playerBase.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                    {
                        playerBase.SetTopInfoVisible(false);
                        return;
                    }
                    goto TopHeadInfo;
                }
                else
                {
                    IClientUserItem pMeItem = CServerItem.get().GetMeUserItem();
                    if (pMeItem == null)
                    {
                        return;
                    }

                    int nStatus = pMeItem.GetUserStatus();
                    if (nStatus == SocketDefines.US_LOOKON)
                    {
                        goto TopHeadInfo;
                    }
                }
            }
            else
            {
                return;
            }
        }

TopHeadInfo:
        {
            GameObject InfoPanelObj = playerBase.gameObject.transform.Find("InfoPanel").gameObject;
            if (InfoPanelObj != null)
            {
                TextMesh nameText  = InfoPanelObj.transform.Find("Name").GetComponent <TextMesh>();
                TextMesh levelText = InfoPanelObj.transform.Find("Level").GetComponent <TextMesh>();
                if (playerBase.IsAI)
                {
                    nameText.text  = playerBase.gameObject.name;
                    nameText.color = Color.white;

                    if (levelText.text == "")
                    {
                        levelText.text = "等级:" + UnityEngine.Random.Range(0, 100);
                    }
                    levelText.color = Color.white;
                }
                else
                {
                    var    kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                    string strNN  = "";
                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                    {
                        strNN = GlobalUserInfo.getNickName();
                    }
                    else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                    {
                        if (kernel != null)
                        {
                            strNN = kernel.getPlayerByChairID(playerBase.ChairID).GetNickName();
                        }
                    }
                    if (strNN != "")
                    {
                        String[] str = strNN.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                        nameText.text  = str[0];
                        nameText.color = Color.white;
                        if (kernel != null)
                        {
                            tagUserInfo userInfo = (tagUserInfo)kernel.getPlayerByChairID(playerBase.ChairID).GetUserInfo();
                            levelText.text = "等级:" + (userInfo.lExperience / 100).ToString();
                        }
                        else
                        {
                            levelText.text = "等级:" + (GlobalUserInfo.getUserExp() / 100).ToString();
                        }
                        levelText.color = Color.white;
                    }
                }
                if (InfoPanelObj != null)
                {
                    InfoPanelObj.transform.LookAt(Camera.main.transform);
                }
            }
            return;
        }
    }
    public void PickupObject(GameObject objToPick, Vector3 pickupPos)
    {
        if (gameObject.GetComponent <PlayerBase>().TeamType == PlayerTeam.PlayerTeamType.HideTeam)  //躲藏的玩家无法执行找操作
        {
            return;
        }
        else
        {
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
            {
                byte Gamestate = CServerItem.get().GetGameStatus();
                if (Gamestate != SocketDefines.GAME_STATUS_PLAY)
                {
                    return;
                }
            }
            else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                if (GameManager.s_singleGameStatus != SocketDefines.GAME_STATUS_PLAY)
                {
                    return;
                }
            }
        }
        if (objToPick == null || this.Hp <= 0)
        {
            return;
        }

        if (this.IsAI)
        {
            //AI没有用射线检测,也就没有距离判断,所以这里要加入

            Vector3 distToPick = objToPick.transform.position - this.transform.position;
            if (distToPick.magnitude > ControlManager.s_MaxTouchCheckDistance)
            {
                Debug.LogError("-----------距离过远!!!!!" + distToPick.magnitude + " " + objToPick.transform.position + " " + this.transform.position);
                //if (objToPick.tag == "Hide" || objToPick.tag == "NormalFurniture") //objToPick.name
                {
                    UIManager.GetInstance().ShowPickupTooFarText();

                    return;
                }
            }
        }

        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
        {
            // Pick event sync
            PlayerEventItem pickEvent = new PlayerEventItem();
            pickEvent.cbTeamType  = (byte)TeamType;
            pickEvent.wChairId    = (ushort)ChairID;
            pickEvent.cbAIId      = (byte)AIId;
            pickEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.Pick;
            GameObjectsManager.GetInstance().PlayerEventList.Add(pickEvent);
        }
        else
        {
            if (IsAI || !ControlManager.isPerson_1st)  //只有第三人称才有拾取动画
            {
                if (IsLocalHuman())
                {
                    EnableModelDisplay();
                }

                PlayPickupAnim();
                //if (_avatarAnimator != null)
                //{
                //    _avatarAnimator.SetBool("Pickup_b", true);
                //}
            }
        }

        PlayerBase pickedPlayer    = null;
        string     strObjToPickTag = null;

        if (this.IsAI)
        {
            //this是AI时,传的objToPick是根节点(PlayerBase都在根节点)

            pickedPlayer = objToPick.GetComponent <PlayerBase>();

            if (pickedPlayer == null)
            {
                //objToPick是场景中的物体,不是躲藏者

                strObjToPickTag = objToPick.tag;
            }
            else
            {
                Transform model = pickedPlayer.transform.FindChild("Model");
                if (model != null)
                {
                    strObjToPickTag = model.tag;    //tag在model节点
                }
                else
                {
                    Debug.LogError("PickupObject IsAI: model==null");
                }
            }
        }
        else
        {
            //this不是AI时,objToPick如果是躲藏者,传的是Model子节点,否则传的也是根节点

            pickedPlayer = objToPick.transform.parent.GetComponent <PlayerBase>();
            if (pickedPlayer == null)
            {
                //objToPick是场景中的物体,不是躲藏者

                strObjToPickTag = objToPick.tag;
            }
            else
            {
                strObjToPickTag = objToPick.tag;
            }
        }

        if (strObjToPickTag == "Hide" || (strObjToPickTag == "LocalHuman" && pickedPlayer != null && pickedPlayer.TeamType == PlayerTeam.PlayerTeamType.HideTeam)) //objToPick.name
        {
            ObjNamePicked = pickedPlayer.gameObject.name;
            Debug.Log(gameObject.name + " touched Hide: " + ObjNamePicked);

            if (IsLocalHuman())
            {
                Debug.Log("I'm touched Hide: " + ObjNamePicked);
            }

            // Check if objToPick is alive
            if (pickedPlayer != null)
            {
                if (pickedPlayer.IsDead())
                {
                    Debug.Log("It was already dead!");
                }
                else
                {
                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                    {
                        if (IsAI && pickedPlayer.m_isStealth == 1) //AI警察不点隐身的躲藏者
                        {
                            return;
                        }
                        //击杀信息
                        if (gameObject.GetComponent <PlayerBase>().IsAI)
                        {
                            //String[] str = gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                            //String[] pickedStr = pickedPlayer.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                            UIManager.GetInstance().ShowMiddleTips(gameObject.name + " 找到了: " + pickedPlayer.gameObject.name);
                        }
                        else
                        {
                            String[] str = GlobalUserInfo.getNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                            //String[] pickedStr = pickedPlayer.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                            UIManager.GetInstance().ShowMiddleTips(str[0] + " 找到了: " + pickedPlayer.gameObject.name);
                        }

                        // Heal self
                        AddHP();

                        if (m_hnGameManager != null && IsLocalHuman())  //本地玩家找到躲藏者提示
                        {
                            m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_HIDE_BEFOUNDED);
                        }

                        // make pickedPlayer dead and destroy later
                        pickedPlayer.MakeDead();
                        //if (!pickedPlayer.IsAI)
                        //{
                        //    PlayerChairIDOfPickedDead = pickedPlayer.ChairID;
                        //}
                    }
                    else
                    {
                        //Debug.LogWarning("+++++++++++++++++ " + pickedPlayer.m_isStealth + " " + IsAI);
                        if (pickedPlayer.m_isStealth == 1 && IsAI)  //AI警察不点隐身的躲藏者
                        {
                            //Debug.LogWarning("----------玩家隐身中");
                            return;
                        }
                        // Dead event sync
                        PlayerEventItem deadEvent = new PlayerEventItem();
                        deadEvent.cbTeamType  = (byte)pickedPlayer.TeamType;
                        deadEvent.wChairId    = (ushort)pickedPlayer.ChairID;
                        deadEvent.cbAIId      = pickedPlayer.AIId;
                        deadEvent.cbEventKind = (byte)PlayerEventKind.DeadByPicked;
                        //killer
                        deadEvent.nCustomData0 = (Int32)this.TeamType;
                        deadEvent.nCustomData1 = (Int32)this.ChairID;
                        deadEvent.nCustomData2 = (Int32)this.AIId;
                        GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent);
                    }

                    //警察找到躲藏者加分
                    GameScore += 50;
                }
            }
        }
        else if (strObjToPickTag == "NormalFurniture")
        {
            ObjNamePicked = objToPick.transform.parent.name;
            Debug.Log("touched normal furniture: " + ObjNamePicked);

            UIManager.GetInstance().ShowPickupWrongUI(pickupPos); //hit.point

            if (m_hnGameManager != null && IsLocalHuman())        //本地玩家点击错误物体提示
            {
                m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_EFFECT_PickObj);
            }
            if (IsLocalHuman())
            {
                UIManager.GetInstance().ShowMiddleTips("该物品不是玩家!");
            }
            if (UIManager.TimeLeft <= 45)   //剩余时间小于45秒时,警察无敌
            {
                return;
            }

            // Hurt self
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                DecHP();
            }
            else
            {
                PlayerEventItem decHpEvent = new PlayerEventItem();
                decHpEvent.cbTeamType  = (byte)this.TeamType;
                decHpEvent.wChairId    = (ushort)this.ChairID;
                decHpEvent.cbAIId      = (byte)this.AIId;
                decHpEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.DecHp;
                GameObjectsManager.GetInstance().PlayerEventList.Add(decHpEvent);
            }
        }
        else if (strObjToPickTag == "Tagger")
        {
            ObjNamePicked = pickedPlayer.gameObject.name;
            Debug.Log("touched Tagger: " + ObjNamePicked);
        }
        else
        {
            Debug.LogError("PickupObject: incorrect objToPickTag=" + strObjToPickTag);
        }


        //判断是否团灭
        int taggerCount = 0;
        int hideCount   = 0;

        for (PlayerTeam.PlayerTeamType teamType = PlayerTeam.PlayerTeamType.TaggerTeam; teamType < PlayerTeam.PlayerTeamType.MaxTeamNum; teamType++)
        {
            PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);
            if (team == null)
            {
                continue;
            }
            for (int i = 0; i < team.GetPlayerNum(); i++)
            {
                PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(teamType, i);
                if (playerBase != null && playerBase.Hp != 0)
                {
                    if (teamType == PlayerTeam.PlayerTeamType.TaggerTeam)
                    {
                        taggerCount++;
                    }
                    else if (teamType == PlayerTeam.PlayerTeamType.HideTeam)
                    {
                        hideCount++;
                    }
                }
            }
        }
        if (taggerCount == 0 || hideCount == 0)
        {
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                if (UIManager.GetInstance() != null)
                {
                    UIManager.GetInstance().ShowWinOrLose();
                }
                m_hnGameManager.StopSingleGame();
                m_hnGameManager.PlayAgainSingleGame();
            }
        }
    }
        void OnPlayScence(byte[] data, int dataSize)
        {
            //旁观者或者重连

            var typeValue     = typeof(CMD_S_StatusPlay);
            int localDataSize = Marshal.SizeOf(typeValue);

            if (dataSize != localDataSize)
            {
                Debug.LogError("OnPlayScence:localDataSize=" + localDataSize + ", serverDataSize=" + dataSize);
                return;
            }

            CMD_S_StatusPlay pNetInfo = (CMD_S_StatusPlay)StructConverterByteArray.BytesToStruct(data, typeValue);

            GlobalUserInfo    pGlobalUserInfo = GlobalUserInfo.GetInstance();
            tagGlobalUserData pGlobalUserData = pGlobalUserInfo.GetGlobalUserData();

            pGlobalUserData.cbMapIndexRand = pNetInfo.cbMapIndex;
            pGlobalUserData.wRandseed      = pNetInfo.wRandseed;
            pGlobalUserData.wRandseedForRandomGameObject = pNetInfo.wRandseedForRandomGameObject;
            pGlobalUserData.wRandseedForInventory        = pNetInfo.wRandseedForInventory;
            //道具同步
            Array.Copy(pNetInfo.sInventoryList, pGlobalUserData.sInventoryList, pNetInfo.sInventoryList.Length);
            //Buffer.BlockCopy(pNetInfo.sInventoryList, 0, pGlobalUserData.sInventoryList, 0, pNetInfo.sInventoryList.Length);

            //旁观者
            int             nStatus = SocketDefines.US_NULL;
            IClientUserItem pMeItem = CServerItem.get().GetMeUserItem();

            if (pMeItem != null)
            {
                nStatus = pMeItem.GetUserStatus();
            }

            if (nStatus == SocketDefines.US_LOOKON)
            {
                Loom.QueueOnMainThread(() =>
                {
                    hnManager.LoadHideSeekSceneOfWangHu();
                });
            }
            else
            {
                //mChen add, temp
                Loom.QueueOnMainThread(() =>
                {
                    hnManager.LoadHideSeekSceneOfWangHu();
                });

                if (false)//if (!hnManager.bEnteredGameScene)
                {
                    //没进入游戏场景

                    //强杀进程后进来

                    Debug.LogError("OnPlayScence : 在大厅重连?强杀进程后回来?  cbGameStatus=" + pNetInfo.cbGameStatus + " UserStatus=" + nStatus + " bEnteredGameScene=" + hnManager.bEnteredGameScene);

                    //在大厅重连?
                    Loom.QueueOnMainThread(() =>
                    {
                        //hnManager.LoadHideSeekSceneOfWangHu();
                        //hnManager.SetLoading(false);

                        hnManager.StartOrStopGameSceneHeartBeat(false);
                        hnManager.LeaveRoom();
                        hnManager.LeaveGameToHall();
                        //CServerItem.get().IntermitConnect(true);
                    });
                }
            }

            //重连

            byte cbGameStatus = pNetInfo.cbGameStatus;

            Debug.Log("OnPlayScence : cbGameStatus=" + cbGameStatus + " UserStatus=" + nStatus + " bEnteredGameScene=" + hnManager.bEnteredGameScene);

            //mChen add, for HideSeek:
            //if (nStatus != SocketDefines.US_LOOKON && !hnManager.bEnteredGameScene)
            //{
            //    //在大厅重连?
            //    StartOrStopGameSceneHeartBeat(false);
            //    CServerItem.get().IntermitConnect(true);
            //    hnManager.LeaveRoom();
            //}

            defaultState();
        }
    //gameend 消息,存储当局分数等信息到recordInfo.save文件内
    //解散时data为空,当前局所有玩家得分为0
    public void StopRecord(byte[] data = null, int datasize = 0)
    {
        Debug.LogError("StopRecord");
        return;

        if (!bRecording)
        {
            return;
        }

#if UNITY_STANDALONE
        if (HNGameManager.m_iLocalChairID != 0)
        {
            return;
        }
#endif
        for (int i = 0; i < msgQueue.Count; i++)
        {
            msgQueue[i].WriteData(bwWriter);
        }
        bwWriter.Flush();
        bwWriter.Close();
        fs.Close();
        var trueRecord = CurrentRecordCount;
        if (CurrentRecordCount > MaxRecordCount)
        {
            trueRecord = (CurrentRecordCount % (MaxRecordCount + 1)) + 1;
        }
        var        dirStr = PlayerPrefs.GetString(string.Format("RecordFile{0}", trueRecord));//存档文件夹
        FileStream fInfo  = new FileStream(string.Format("{0}/recordInfo.save", dirStr), FileMode.Append);
        bwWriter = new BinaryWriter(fInfo);

        var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
        for (int i = 0; i < savedUserInfoData.Length; i++)
        {
//#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
//            string filename = string.Format("{0}/{1}.png", dirStr, savedUserInfoData[i].IUserId);
//            if (File.Exists(filename) == false)
//            {
//                if (HNGameManager.userId2HeadImageDirectory.ContainsKey(savedUserInfoData[i].IUserId))
//                {
//                    var sprite = HNGameManager.userId2HeadImageDirectory[savedUserInfoData[i].IUserId];
//                    Loom.QueueOnMainThread(() =>
//                    {
//                        var buf = sprite.texture.EncodeToPNG();
//                        File.WriteAllBytes(filename, buf);
//                    });
//                }
//            }
//#endif
        }

        if (data == null)
        {
            Debug.Log("----------write 0 to file1111");
            for (int i = 0; i < 4; i++)
            {
                bwWriter.Write((long)(0));
            }
        }
        else
        {
            var           typeValue = typeof(CMD_S_GameEnd);
            CMD_S_GameEnd pGameEnd  = (CMD_S_GameEnd)StructConverterByteArray.BytesToStruct(data, typeValue);
            //bwWriter.Write(pGameEnd.lGameScore[HNGameManager.m_iLocalChairID]);
            //Debug.Log("-------------Write score to file: " + pGameEnd.lGameScore[HNGameManager.m_iLocalChairID]);
            //var curPlayerChairID = HNGameManager.getNextPlayerChairID(HNGameManager.m_iLocalChairID);
            //int iIndex = 1;
            //while (curPlayerChairID != HNGameManager.m_iLocalChairID)
            //{
            //    bwWriter.Write(pGameEnd.lGameScore[curPlayerChairID]);
            //    Debug.Log("-------------Write score to file: " + pGameEnd.lGameScore[curPlayerChairID]);
            //    curPlayerChairID = HNGameManager.getNextPlayerChairID(curPlayerChairID);
            //}
        }
        bwWriter.Flush();
        bwWriter.Close();
        fInfo.Close();

        bRecording = false;
        msgQueue.Clear();
        userInfoStorages = null;
    }
    public void StartRecord(HNGameManager hnGameManager)
    {
        Debug.LogError("StartRecord");
        return;

#if UNITY_STANDALONE
        if (HNGameManager.m_iLocalChairID != 0)
        {
            return;
        }
#endif
        var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
        CurrentRecordCount = PlayerPrefs.GetInt("RecordNum", 0);
        var dirStr     = "";
        var trueRecord = CurrentRecordCount;
        if (kernel.getPlayCount() == 1)//新的一场游戏
        {
            CurrentRecordCount++;
            PlayerPrefs.SetInt("RecordNum", CurrentRecordCount);
            DirectoryInfo dInfo =
                new DirectoryInfo(Application.persistentDataPath + string.Format("/{0}", DateTime.Now.ToString("yyyyMMddhhmmss")));
            dInfo.Create();
            Debug.Log("creating saved Dir :" + dInfo.FullName);
            if (CurrentRecordCount > MaxRecordCount)
            {
                trueRecord = (CurrentRecordCount % (MaxRecordCount + 1)) + 1;
                //删除之前的文件夹
                dirStr = PlayerPrefs.GetString(string.Format("RecordFile{0}", trueRecord));
                Debug.Log("deleting saved dir :" + dirStr);
                var oldDirInfo = new DirectoryInfo(dirStr);
                oldDirInfo.Delete(true);
            }
            else
            {
                trueRecord = CurrentRecordCount;
            }
            Debug.Log("dir full name " + dInfo.FullName);
            PlayerPrefs.SetString(string.Format("RecordFile{0}", trueRecord), dInfo.FullName);
            dirStr = dInfo.FullName;
            FileStream fInfo = new FileStream(string.Format("{0}/recordInfo.save", dInfo.FullName), FileMode.OpenOrCreate);
            bwWriter = new BinaryWriter(fInfo);
            bwWriter.Write(hnGameManager.TempRoomId);
            bwWriter.Write(hnGameManager.CreateUserID);
            bwWriter.Write(hnGameManager.totalcount);
            bwWriter.Write(HNGameManager.m_iLocalChairID);

            userInfoStorages = new UserInfoStorage[4];

            hnGameManager.SaveUserInfo(ref userInfoStorages);
            savedUserInfoData = new UserInfoStruct[4];
            for (int i = 0; i < userInfoStorages.Length; i++)
            {
                savedUserInfoData[i] = new UserInfoStruct
                {
                    BGender  = userInfoStorages[i].BGender,
                    IUserId  = userInfoStorages[i].IUserId,
                    NickName = new byte[SocketDefines.LEN_NICKNAME]
                };
                var nickBuf = Encoding.UTF8.GetBytes(userInfoStorages[i].NickName);
                Buffer.BlockCopy(nickBuf, 0, savedUserInfoData[i].NickName, 0, SocketDefines.LEN_NICKNAME);
                var infoBuf = StructConverterByteArray.StructToBytes(savedUserInfoData[i]);
                bwWriter.Write(infoBuf, 0, infoBuf.Length);
            }

            bwWriter.Flush();
            bwWriter.Close();
            fInfo.Close();
        }
        else
        {
            if (CurrentRecordCount > MaxRecordCount)
            {
                trueRecord = (CurrentRecordCount % (MaxRecordCount + 1)) + 1;
            }
            Debug.Log("True record is " + trueRecord);
            dirStr = PlayerPrefs.GetString(string.Format("RecordFile{0}", trueRecord));
        }

        fs       = new FileStream(string.Format("{0}/recordInfo.save", dirStr), FileMode.Append);
        bwWriter = new BinaryWriter(fs);
        bwWriter.Write(DateTime.Now.ToString("yyyyMMddhhmmss"));
        bwWriter.Flush();
        bwWriter.Close();
        fs.Close();
        Debug.Log("dirStr path: " + dirStr);
        //DirectoryInfo dInfo = new DirectoryInfo(Application.persistentDataPath);
        //var files = dInfo.GetFiles()
        fs = new FileStream(string.Format("{0}/{1}.save", dirStr, hnGameManager.nowcount),
                            FileMode.OpenOrCreate);
        Debug.Log("writing saved file :" + fs.Name);
        bwWriter = new BinaryWriter(fs);

        bRecording = true;
        msgQueue.Clear();
    }
    public void MakeDead(bool bOffLine = false)
    {
        Debug.LogWarning("MakeDead:" + gameObject.name + " is dead!");

        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)  //联机模式判断状态
        {
            byte Gamestate = SocketDefines.GAME_STATUS_FREE;
            if (CServerItem.get() != null)
            {
                Gamestate = CServerItem.get().GetGameStatus();
            }
            if (Gamestate != SocketDefines.GAME_STATUS_PLAY)
            {
                Debug.LogError("MakeDead when Gamestate=" + Gamestate);
                return;
            }
        }

        Hp = 0;

        if (IsLocalHuman())
        {
            //切换死亡视角
            ControlManager.GetInstance().ControlModelSwitch(ControlManager.CameraControlMode.DeadMode);

            if (TeamType == PlayerTeam.PlayerTeamType.HideTeam)
            {
                UIManager.GetInstance().ShowTopTips("你已经被发现了!", true);
            }
            else if (TeamType == PlayerTeam.PlayerTeamType.TaggerTeam)
            {
                UIManager.GetInstance().ShowTopTips("你已经死亡!", true);
            }

            if (TeamType == PlayerTeam.PlayerTeamType.TaggerTeam)
            {
                //byte ModelIndex = (byte)PlayerPrefs.GetInt("ChoosedModelIndex");
                //GameObject temp = Resources.Load<GameObject>(HNGameManager.taggerPrefabPath[ModelIndex]);
                //GameObject localHuman = Instantiate(temp);
                //localHuman.transform.position = gameObject.transform.position;
                //localHuman.transform.localEulerAngles = gameObject.transform.localEulerAngles;

                //炸弹处理
                if (ControlManager.GetInstance().BoomButton != null)
                {
                    ControlManager.GetInstance().BoomButton.gameObject.SetActive(false);
                }
                InventoryManager.HaveBoom = false;

                if (!IsAI)  //死亡提示音
                {
                    m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_SEEK_DEAD);
                }

                if (IsAI)
                {
                    _avatarAnimator = gameObject.transform.GetComponent <Animator>();
                }
                else
                {
                    _avatarAnimator = gameObject.transform.GetChild(0).transform.GetComponent <Animator>();
                }
                if (_avatarAnimator != null)
                {
                    EnableModelDisplay();
                    _avatarAnimator.SetBool("Death_b", true);
                }

                if (UIManager.GetInstance() != null)   //警察死亡隐藏人称切换
                {
                    UIManager.GetInstance().m_Canvas.transform.Find("Btn/PersonButton").gameObject.SetActive(false);
                }

                //GameObject.Destroy(gameObject, 3.0f);
            }
            else
            {
                if (!IsAI)  //死亡提示音
                {
                    m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_SEEK_DEAD);
                    if (UIManager.TimeLeft > GameManager.HIDESEEK_GAME_PLAY_TIME - 60 && !bOffLine)  //复活道具使用  bOffLine仅供断线重连时判断
                    {
                        Loom.QueueOnMainThread(() =>
                        {
                            ControlManager.GetInstance().ResurrectionButton.gameObject.SetActive(true);
                            Loom.QueueOnMainThread(() =>
                            {
                                ControlManager.GetInstance().ResurrectionButton.gameObject.SetActive(false);
                            }, 10);
                        });
                    }
                    if (UIManager.GetInstance() != null)
                    {
                        UIManager.GetInstance().m_Canvas.transform.Find("Btn/ObjectSwitch").gameObject.SetActive(false);  //模型切换
                        UIManager.GetInstance().m_Canvas.transform.Find("Btn/StealthButton").gameObject.SetActive(false);
                    }
                }
                //GameObject.Destroy(gameObject);
            }
        }
        else
        {
            if (TeamType == PlayerTeam.PlayerTeamType.TaggerTeam)
            {
                if (_avatarAnimator != null)
                {
                    _avatarAnimator.SetBool("Death_b", true);
                }

                //GameObject.Destroy(gameObject, 3.0f);
            }
            else
            {
                //GameObject.Destroy(gameObject);
            }
        }

        //GameObject.Destroy(gameObject)改为隐藏,保证SendClientPlayersInfo_WangHu还能发送他的信息
        float fDelayTime = 0f;

        if (TeamType == PlayerTeam.PlayerTeamType.TaggerTeam)
        {
            fDelayTime = 3.0f;
        }
        Loom.QueueOnMainThread(() =>
        {
            if (this == null)
            {
                return;
            }

            if (gameObject.GetComponent <CharacterController>() != null)
            {
                Destroy(gameObject.GetComponent <CharacterController>());
            }
            GameObject InfoPanel = gameObject.transform.Find("InfoPanel").gameObject;
            if (InfoPanel != null)
            {
                InfoPanel.SetActive(false);
            }
            GameObject ModelObj = gameObject.transform.GetChild(0).gameObject;
            if (ModelObj.transform.childCount == 0)
            {
                if (ModelObj.transform.GetComponent <Renderer>() != null)
                {
                    ModelObj.transform.GetComponent <Renderer>().enabled = false;
                }
            }
            else if (ModelObj.transform.childCount > 0)
            {
                for (int j = 0; j < ModelObj.transform.childCount; j++)
                {
                    if (ModelObj.transform.GetChild(j).GetComponent <Renderer>() != null)
                    {
                        ModelObj.transform.GetChild(j).GetComponent <Renderer>().enabled = false;
                    }
                }
            }
            //MeshCollider mCollider = gameObject.GetComponent<MeshCollider>();
            //if (mCollider != null)
            //    mCollider.enabled = false;
            //mCollider = ModelObj.GetComponent<MeshCollider>();
            //if (mCollider != null)
            //    mCollider.enabled = false;
            //BoxCollider bCollider = gameObject.GetComponent<BoxCollider>();
            //if (bCollider != null)
            //    bCollider.enabled = false;
            //bCollider = ModelObj.GetComponent<BoxCollider>();
            //if (bCollider != null)
            //    bCollider.enabled = false;
            Collider collider = gameObject.GetComponent <Collider>();
            if (collider != null)
            {
                collider.enabled = false;
            }
            collider = null;
            collider = ModelObj.GetComponent <Collider>();
            if (collider != null)
            {
                collider.enabled = false;
            }

            if (_controller != null)
            {
                _controller.enabled = false;
            }
        }, fDelayTime);

        //Stop obj behavior tree
        if (IsAI)
        {
            BehaviorDesigner.Runtime.Behavior behavior = gameObject.GetComponent <BehaviorDesigner.Runtime.Behavior>();
            if (behavior != null)
            {
                behavior.DisableBehavior();
            }
        }

        // for dead sync
    }