/// <summary> /// 一场活动结束结果 /// </summary> /// <param name="cityId">城池ID</param> /// <param name="bhid">占领方帮会ID</param> /// <returns></returns> public int GameFuBenComplete(LangHunLingYuStatisticalData data) { int result = StdErrorCode.Error_Server_Busy; try { IYongZheZhanChangService kuaFuService = GetKuaFuService(); if (null != kuaFuService) { try { result = kuaFuService.GameFuBenComplete(data); } catch (System.Exception ex) { result = StdErrorCode.Error_Server_Busy; ResetKuaFuService(); } } } catch (System.Exception ex) { result = StdErrorCode.Error_Server_Busy; LogManager.WriteExceptionUseCache(ex.ToString()); } return(result); }
public int GameFuBenComplete(LangHunLingYuStatisticalData data) { int result = -11000; try { IYongZheZhanChangService kuaFuService = this.GetKuaFuService(false); if (null != kuaFuService) { try { result = kuaFuService.GameFuBenComplete(data); } catch (Exception ex) { result = -11000; this.ResetKuaFuService(); } } } catch (Exception ex) { result = -11000; LogManager.WriteExceptionUseCache(ex.ToString()); } return(result); }
/// <summary> /// 心跳处理 /// </summary> public void TimerProc(object sender, EventArgs e) { lock (RuntimeData.Mutex) { if (RuntimeData.StatisticalDataQueue.Count > 0) { LangHunLingYuStatisticalData data = RuntimeData.StatisticalDataQueue.Peek(); int result = YongZheZhanChangClient.getInstance().GameFuBenComplete(data); if (result >= 0) { RuntimeData.StatisticalDataQueue.Dequeue(); } } } foreach (var scene in RuntimeData.SceneDict.Values) { lock (RuntimeData.Mutex) { // 当前tick DateTime now = TimeUtil.NowDateTime(); long ticks = TimeUtil.NOW(); if (scene.m_eStatus == GameSceneStatuses.STATUS_NULL) // 如果处于空状态 -- 是否要切换到准备状态 { if (ticks >= scene.StartTimeTicks) { LangHunLingYuFuBenData fuBenData; if (RuntimeData.FuBenDataDict.TryGetValue(scene.GameId, out fuBenData) && fuBenData.State == GameFuBenState.End) { scene.m_eStatus = GameSceneStatuses.STATUS_AWARD; scene.m_lLeaveTime = TimeUtil.NOW(); } scene.m_lPrepareTime = scene.StartTimeTicks; scene.m_lBeginTime = scene.m_lPrepareTime + scene.SceneInfo.PrepareSecs * TimeUtil.SECOND; scene.m_eStatus = GameSceneStatuses.STATUS_PREPARE; scene.StateTimeData.GameType = (int)GameTypes.LangHunLingYu; scene.StateTimeData.State = (int)scene.m_eStatus; scene.StateTimeData.EndTicks = scene.m_lBeginTime; foreach (var copy in scene.CopyMapDict.Values) { GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, copy); } } } 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 + scene.SceneInfo.FightingSecs * TimeUtil.SECOND; scene.StateTimeData.GameType = (int)GameTypes.LangHunLingYu; scene.StateTimeData.State = (int)scene.m_eStatus; scene.StateTimeData.EndTicks = scene.m_lEndTime; foreach (var copy in scene.CopyMapDict.Values) { GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, copy); } } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_BEGIN) // 战斗开始 { if (ticks >= scene.m_lEndTime) { scene.m_eStatus = GameSceneStatuses.STATUS_END; scene.m_lLeaveTime = scene.m_lEndTime + scene.SceneInfo.ClearRolesSecs * TimeUtil.SECOND; scene.StateTimeData.GameType = (int)GameTypes.LangHunLingYu; scene.StateTimeData.State = (int)GameSceneStatuses.STATUS_CLEAR; scene.StateTimeData.EndTicks = scene.m_lLeaveTime; foreach (var copy in scene.CopyMapDict.Values) { GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, copy); } ProcessWangChengZhanResult(scene, true); } else { ProcessWangChengZhanResult(scene, false); } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_END) // 战斗结束 { //结算奖励 scene.m_eStatus = GameSceneStatuses.STATUS_AWARD; LangHunLingYuStatisticalData statisticalData = new LangHunLingYuStatisticalData(); statisticalData.CompliteTime = TimeUtil.NowDateTime(); statisticalData.CityId = scene.CityData.CityId; statisticalData.GameId = scene.GameId; statisticalData.SiteBhids[0] = scene.LongTaOwnerData.OwnerBHid; LangHunLingYuBuildMaxCityOwnerInfo(statisticalData, scene.LongTaOwnerData.OwnerBHServerId); RuntimeData.StatisticalDataQueue.Enqueue(statisticalData); LangHunLingYuFuBenData fuBenData; if (RuntimeData.FuBenDataDict.TryGetValue(scene.GameId, out fuBenData)) { fuBenData.State = GameFuBenState.End; } EventLogManager.AddGameEvent(LogRecordType.LangHunLingYuResult, statisticalData.GameId, statisticalData.CityId, statisticalData.SiteBhids[0]); } else if (scene.m_eStatus == GameSceneStatuses.STATUS_AWARD) { if (ticks >= scene.m_lLeaveTime) { foreach (var copy in scene.CopyMapDict.Values) { copy.SetRemoveTicks(scene.m_lLeaveTime); try { List <GameClient> objsList = copy.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, "圣域争霸系统清场调度异常"); } } scene.m_eStatus = GameSceneStatuses.STATUS_CLEAR; } } } } return; }