/// <summary> /// 心跳处理 /// </summary> public void TimerProc() { long nowTicks = TimeUtil.NOW(); if (nowTicks < NextHeartBeatTicks) { return; } NextHeartBeatTicks = nowTicks + 1020; //1020毫秒执行一次 foreach (var tianTiScene in TianTiSceneDict.Values) { lock (RuntimeData.Mutex) { int nID = -1; nID = tianTiScene.FuBenSeqId; int nCopyID = -1; nCopyID = tianTiScene.CopyMapId; int nMapCodeID = -1; nMapCodeID = tianTiScene.m_nMapCode; if (nID < 0 || nCopyID < 0 || nMapCodeID < 0) { continue; } CopyMap copyMap = tianTiScene.CopyMap; // 当前tick DateTime now = TimeUtil.NowDateTime(); long ticks = TimeUtil.NOW(); if (tianTiScene.m_eStatus == GameSceneStatuses.STATUS_NULL) // 如果处于空状态 -- 是否要切换到准备状态 { tianTiScene.m_lPrepareTime = ticks; tianTiScene.m_lBeginTime = ticks + RuntimeData.WaitingEnterSecs * TimeUtil.SECOND; tianTiScene.m_eStatus = GameSceneStatuses.STATUS_PREPARE; tianTiScene.StateTimeData.GameType = (int)GameTypes.TianTi; tianTiScene.StateTimeData.State = (int)tianTiScene.m_eStatus; tianTiScene.StateTimeData.EndTicks = tianTiScene.m_lBeginTime; GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, tianTiScene.StateTimeData, tianTiScene.CopyMap); } else if (tianTiScene.m_eStatus == GameSceneStatuses.STATUS_PREPARE) // 场景战斗状态切换 { //检查双方是否都进入了 if (copyMap.GetGameClientCount() >= 2) { tianTiScene.m_eStatus = GameSceneStatuses.STATUS_BEGIN; tianTiScene.m_lEndTime = ticks + RuntimeData.FightingSecs * TimeUtil.SECOND; tianTiScene.StateTimeData.GameType = (int)GameTypes.TianTi; tianTiScene.StateTimeData.State = (int)tianTiScene.m_eStatus; tianTiScene.StateTimeData.EndTicks = tianTiScene.m_lEndTime; GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, tianTiScene.StateTimeData, tianTiScene.CopyMap); //放开光幕 copyMap.AddGuangMuEvent(1, 0); GameManager.ClientMgr.BroadSpecialMapAIEvent(copyMap.MapCode, copyMap.CopyMapID, 1, 0); copyMap.AddGuangMuEvent(2, 0); GameManager.ClientMgr.BroadSpecialMapAIEvent(copyMap.MapCode, copyMap.CopyMapID, 2, 0); } else if (ticks >= (tianTiScene.m_lBeginTime)) { CompleteTianTiScene(tianTiScene, -1); } } else if (tianTiScene.m_eStatus == GameSceneStatuses.STATUS_BEGIN) // 战斗开始 { if (ticks >= tianTiScene.m_lEndTime) { CompleteTianTiScene(tianTiScene, 0); } } else if (tianTiScene.m_eStatus == GameSceneStatuses.STATUS_END) // 战斗结束 { ProcessEnd(tianTiScene, now, nowTicks); } else if (tianTiScene.m_eStatus == GameSceneStatuses.STATUS_AWARD) { if (ticks >= tianTiScene.m_lLeaveTime) { copyMap.SetRemoveTicks(tianTiScene.m_lLeaveTime); tianTiScene.m_eStatus = GameSceneStatuses.STATUS_CLEAR; try { List <GameClient> objsList = copyMap.GetClientsList(); if (objsList != null && objsList.Count > 0) { for (int n = 0; n < objsList.Count; ++n) { GameClient c = objsList[n]; if (c != null) { KuaFuManager.getInstance().GotoLastMap(c); } } } } catch (System.Exception ex) { DataHelper.WriteExceptionLogEx(ex, "跨服天梯系统清场调度异常"); } } } } } return; }