private void InitScene(KarenBattleScene scene, GameClient client) { foreach (KarenBattleQiZhiConfig_West item in this.RuntimeData.NPCID2QiZhiConfigDict.Values) { scene.NPCID2QiZhiConfigDict.Add(item.QiZuoID, item.Clone() as KarenBattleQiZhiConfig_West); } scene.ScoreData.Clear(); for (int sideloop = 1; sideloop <= scene.SceneInfo.MaxLegions; sideloop++) { JunTuanRankData RankData = KarenBattleManager.getInstance().GetJunTuanRankDataBySide(sideloop); KarenBattleScoreData scoreData = new KarenBattleScoreData(); if (null != RankData) { scoreData.LegionID = RankData.JunTuanId; scoreData.Name = RankData.JunTuanName; } scene.ScoreData.Add(scoreData); } }
public void TimerProc() { long nowTicks = TimeUtil.NOW(); if (nowTicks >= KarenBattleManager_MapWest.NextHeartBeatTicks) { KarenBattleManager_MapWest.NextHeartBeatTicks = nowTicks + 510L; foreach (KarenBattleScene scene in this.SceneDict.Values) { lock (this.RuntimeData.Mutex) { int nID = scene.FuBenSeqId; int nCopyID = scene.CopyMapId; int nMapCodeID = scene.m_nMapCode; if (nID >= 0 && nCopyID >= 0 && nMapCodeID >= 0) { CopyMap copyMap = scene.CopyMap; DateTime now = TimeUtil.NowDateTime(); long ticks = TimeUtil.NOW(); if (scene.m_eStatus == GameSceneStatuses.STATUS_PREPARE || scene.m_eStatus == GameSceneStatuses.STATUS_BEGIN) { } if (scene.m_eStatus == GameSceneStatuses.STATUS_NULL) { if (ticks >= scene.StartTimeTicks) { scene.m_lPrepareTime = scene.StartTimeTicks; scene.m_lBeginTime = scene.m_lPrepareTime + (long)(scene.SceneInfo.PrepareSecs * 1000); scene.m_eStatus = GameSceneStatuses.STATUS_PREPARE; scene.StateTimeData.GameType = 19; scene.StateTimeData.State = (int)scene.m_eStatus; scene.StateTimeData.EndTicks = scene.m_lBeginTime; GameManager.ClientMgr.BroadSpecialCopyMapMessage <GameSceneStateTimeData>(827, scene.StateTimeData, scene.CopyMap); } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_PREPARE) { if (ticks >= scene.m_lBeginTime) { scene.m_eStatus = GameSceneStatuses.STATUS_BEGIN; scene.m_lEndTime = scene.m_lBeginTime + (long)(scene.SceneInfo.FightingSecs * 1000); scene.StateTimeData.GameType = 19; scene.StateTimeData.State = (int)scene.m_eStatus; scene.StateTimeData.EndTicks = scene.m_lEndTime; GameManager.ClientMgr.BroadSpecialCopyMapMessage <GameSceneStateTimeData>(827, scene.StateTimeData, scene.CopyMap); for (int guangMuId = 1; guangMuId <= 4; guangMuId++) { GameManager.CopyMapMgr.AddGuangMuEvent(copyMap, guangMuId, 0); } } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_BEGIN) { if (ticks >= scene.m_lEndTime) { long successTicks = long.MaxValue; int successScore = 0; int successSide = 0; for (int sideloop = 0; sideloop < scene.ScoreData.Count; sideloop++) { KarenBattleScoreData scoreData = scene.ScoreData[sideloop]; if (scoreData.Score > successScore) { successSide = sideloop + 1; successTicks = scoreData.ticks; successScore = scoreData.Score; } else if (scoreData.Score == successScore && scoreData.ticks < successTicks) { successSide = sideloop + 1; successTicks = scoreData.ticks; } } this.ProcessEnd(scene, successSide, ticks); } else { this.CheckSceneScoreTime(scene, ticks); } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_END) { GameManager.CopyMapMgr.KillAllMonster(scene.CopyMap); scene.m_eStatus = GameSceneStatuses.STATUS_AWARD; JunTuanClient.getInstance().GameFuBenRoleChangeState(-1, -1, scene.GameId, -1, 6); KarenBattleManager.getInstance().GiveAwards(scene); KarenFuBenData fuBenData; if (this.RuntimeData.FuBenItemData.TryGetValue(scene.GameId, out fuBenData)) { fuBenData.State = GameFuBenState.End; LogManager.WriteLog(LogTypes.Error, string.Format("阿卡伦西战场跨服GameID={0},战斗结束", fuBenData.GameId), null, true); } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_AWARD) { if (ticks >= scene.m_lLeaveTime) { scene.m_eStatus = GameSceneStatuses.STATUS_CLEAR; try { List <GameClient> objsList = copyMap.GetClientsList(); if (objsList != null && objsList.Count > 0) { for (int i = 0; i < objsList.Count; i++) { GameClient c = objsList[i]; if (c != null) { KuaFuManager.getInstance().GotoLastMap(c); } } } } catch (Exception ex) { DataHelper.WriteExceptionLogEx(ex, "阿卡伦西战场系统清场调度异常"); } } } } } } } }