//发送聊天文字 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 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; }); }
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(); }
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); } } } }
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(); } }
//显示聊天文字 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(); }
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 ExitGameBase() { if (CServerItem.get() != null) { CServerItem.get().PerformStandUpAction(); } else { ExitGame(); } }
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); }
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 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 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 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 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(); } }
//发送聊天数据给服务器 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("文字数据不存在或过长"); } }
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); }
//用户事件 //用户进入 public virtual void OnEventUserEnter(IClientUserItem pIClientUserItem, bool bLookonUser) { if (HNGameManager.LockObjOfLoadScene == null) { Debug.LogError("HNGameManager.LockObjOfLoadScene == null"); HNGameManager.LockObjOfLoadScene = new object(); } lock (HNGameManager.LockObjOfLoadScene) { GamePlayer pPlayer = getGamePlayerByUserItem(pIClientUserItem); if (pPlayer != null) { pPlayer.upPlayerInfo(); return; } } if (CServerItem.get() == null) { Debug.LogError("OnEventUserEnter:ServerItem.get() == null"); return; } IClientUserItem pMeItem = CServerItem.get().GetMeUserItem(); if (pMeItem == null) { return; } if (pMeItem.GetTableID() != pIClientUserItem.GetTableID()) { return; } if (pIClientUserItem.GetUserStatus() == SocketDefines.US_LOOKON) { return; } //UI Log string strNickName = GlobalUserInfo.GBToUtf8(pIClientUserItem.GetNickName()); Debug.Log("---------------------OnEventUserEnter:" + strNickName); String[] strName = strNickName.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries); if (strName.Length > 0) { Loom.QueueOnMainThread(() => { if (ChatSystem.GetInstance != null) { ChatSystem.GetInstance.ShowChatText("通知", strName[0] + " 加入了房间!"); } }); } if (CServerItem.get().GetMeUserItem() == pIClientUserItem) { Debug.Log("OnEventUserEnter:Local Player Enter"); if (m_pSelfPlayer == null) { Debug.Log("---------------------Disconnect back 2 ?: Try to Create Local Player"); //GameObject LocalTaggerObj = GameObject.Find("Player/TaggerTeam/LocalTagger"); //GameObject.Destroy(LocalTaggerObj); //删除Human //GameObjectsManager.GetInstance().ClearPlayers(false); m_pSelfPlayer = CreatePlayer(pIClientUserItem); Loom.QueueOnMainThread(() => { if (hnManager == null) { hnManager = GameObject.FindObjectOfType <HNGameManager>(); } if (hnManager != null) { if (m_pSelfPlayer != null) { int nChairId = m_pSelfPlayer.GetChairID();//m_pSelfPlayer hnManager.LocalUserEnter(nChairId); } } }); addGamePlayerToList(m_pSelfPlayer); } upSelfPlayerInfo(); int iIdex = 0; while (true) { IClientUserItem pTempUserItem = CServerItem.get().GetTableUserItem((ushort)iIdex); iIdex++; if (pTempUserItem == null) { break; } if (pTempUserItem.GetTableID() != pMeItem.GetTableID()) { continue; } if (pTempUserItem.GetUserStatus() == SocketDefines.US_LOOKON) { continue; } if (m_bEnterGetUserInfo) { m_kIndividualMission.query((int)pIClientUserItem.GetUserID(), false); } if (pTempUserItem == pIClientUserItem) { continue; } GamePlayer pTempPlayer = CreatePlayer(pTempUserItem); addGamePlayerToList(pTempPlayer); } } else { if (m_pSelfPlayer != null || pMeItem.GetUserStatus() == SocketDefines.US_LOOKON) { GamePlayer pTempPlayer = CreatePlayer(pIClientUserItem); addGamePlayerToList(pTempPlayer); } } if (m_bEnterGetUserInfo) { m_kIndividualMission.query((int)pIClientUserItem.GetUserID(), false); } }
//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 }
//显示头顶信息 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; } }
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(); }
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(); } } }