public void TimerProc(object sender, EventArgs e) { Dictionary <int, int> dict = new Dictionary <int, int>(); if (KuaFuManager.getInstance().CanKuaFuLogin()) { lock (this.RuntimeData.Mutex) { foreach (int mapCode in this.RuntimeData.MapCode2KuaFuLineDataDict.Keys) { dict[mapCode] = 0; } } } List <int> list = dict.Keys.ToList <int>(); foreach (int mapCode in list) { dict[mapCode] = GameManager.ClientMgr.GetMapClientsCount(mapCode); } if (KuaFuManager.KuaFuWorldKuaFuGameServer) { KuaFuWorldClient.getInstance().UpdateKuaFuMapClientCount(dict); } else { YongZheZhanChangClient.getInstance().UpdateKuaFuMapClientCount(dict); } }
public void TimerProc(object sender, EventArgs e) { //更新每个跨服地图的人数 Dictionary <int, int> dict = new Dictionary <int, int>(); lock (RuntimeData.Mutex) { if (YongZheZhanChangClient.getInstance().CanKuaFuLogin()) { foreach (var mapCode in RuntimeData.MapCode2KuaFuLineDataDict.Keys) { dict[mapCode] = 0; } } } List <int> list = dict.Keys.ToList(); foreach (var mapCode in list) { dict[mapCode] = GameManager.ClientMgr.GetMapClientsCount(mapCode); } lock (RuntimeData.Mutex) { YongZheZhanChangClient.getInstance().UpdateKuaFuMapClientCount(dict); } }
/// <summary> /// 罗兰城战攻防竞价申请指令处理 /// </summary> /// <param name="client"></param> /// <param name="nID"></param> /// <param name="bytes"></param> /// <param name="cmdParams"></param> /// <returns></returns> public bool ProcessYongZheZhanChangJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { int result = StdErrorCode.Error_Success_No_Info; do { // 如果1.7的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { break; } YongZheZhanChangSceneInfo sceneItem = null; YongZheZhanChangGameStates state = YongZheZhanChangGameStates.None; if (!CheckMap(client)) { result = StdErrorCode.Error_Denied_In_Current_Map; } else { result = CheckCondition(client, ref sceneItem, ref state); } if (state != YongZheZhanChangGameStates.SignUp) { result = StdErrorCode.Error_Not_In_valid_Time; //非报名时间 } else if (RuntimeData.RoleId2JoinGroup.ContainsKey(client.ClientData.RoleID)) { result = StdErrorCode.Error_Operation_Denied; // 已经报名了 } if (result >= 0) { int gropuId = sceneItem.Id; result = YongZheZhanChangClient.getInstance().YongZheZhanChangSignUp(client.strUserID, client.ClientData.RoleID, client.ClientData.ZoneID, (int)GameTypes.YongZheZhanChang, gropuId, client.ClientData.CombatForce); if (result > 0) { RuntimeData.RoleId2JoinGroup[client.ClientData.RoleID] = gropuId; client.ClientData.SignUpGameType = (int)GameTypes.YongZheZhanChang; } } } while (false); //发送结果给客户端 client.sendCmd(nID, result); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
public bool ProcessGetKuaFuBossStateCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { KuaFuBossSceneInfo sceneItem = null; KuaFuBossGameStates timeState = KuaFuBossGameStates.None; int result = (int)KuaFuBossGameStates.None; int groupId = 0; RuntimeData.RoleId2JoinGroup.TryGetValue(client.ClientData.RoleID, out groupId); CheckCondition(client, ref sceneItem, ref timeState); if (groupId > 0) { if (timeState >= KuaFuBossGameStates.SignUp && timeState <= KuaFuBossGameStates.Wait) { int state = YongZheZhanChangClient.getInstance().GetKuaFuRoleState(client.ClientData.RoleID); if (state >= (int)KuaFuRoleStates.SignUp) { result = (int)KuaFuBossGameStates.Wait; } else { result = (int)KuaFuBossGameStates.NotJoin; } } else if (timeState == KuaFuBossGameStates.Start) { if (RuntimeData.RoleIdKuaFuLoginDataDict.ContainsKey(client.ClientData.RoleID)) { result = (int)KuaFuBossGameStates.Start; } } } else { if (timeState == KuaFuBossGameStates.SignUp) { result = (int)KuaFuBossGameStates.SignUp; } else if (timeState == KuaFuBossGameStates.Wait || timeState == KuaFuBossGameStates.Start) { // 未参加本次活动 result = (int)KuaFuBossGameStates.NotJoin; } } client.sendCmd(nID, result); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
/// <summary> /// 给奖励 /// </summary> public void GiveAwards(YongZheZhanChangScene scene) { try { YongZheZhanChangStatisticalData gameResultData = scene.GameStatisticalData; foreach (var contextData in scene.ClientContextDataDict.Values) { gameResultData.AllRoleCount++; int success; if (contextData.BattleWhichSide == scene.SuccessSide) { success = 1; gameResultData.WinRoleCount++; } else { success = 0; gameResultData.LoseRoleCount++; } GameClient client = GameManager.ClientMgr.FindClient(contextData.RoleId); string awardsInfo = string.Format("{0},{1},{2},{3},{4}", scene.SceneInfo.Id, success, contextData.TotalScore, scene.ScoreData.Score1, scene.ScoreData.Score2); if (client != null) //确认角色仍然在线 { int score = contextData.TotalScore; contextData.TotalScore = 0; if (score >= RuntimeData.WarriorBattleLowestJiFen) { Global.SaveRoleParamsStringToDB(client, RoleParamName.YongZheZhanChangAwards, awardsInfo, true); } else { Global.SaveRoleParamsStringToDB(client, RoleParamName.YongZheZhanChangAwards, RuntimeData.RoleParamsAwardsDefaultString, true); } NtfCanGetAward(client, success, score, scene.SceneInfo, scene.ScoreData.Score1, scene.ScoreData.Score2); } else if (contextData.TotalScore >= RuntimeData.WarriorBattleLowestJiFen) { Global.UpdateRoleParamByNameOffline(contextData.RoleId, RoleParamName.YongZheZhanChangAwards, awardsInfo, contextData.ServerId); } else { Global.UpdateRoleParamByNameOffline(contextData.RoleId, RoleParamName.YongZheZhanChangAwards, RuntimeData.RoleParamsAwardsDefaultString, contextData.ServerId); } } YongZheZhanChangClient.getInstance().PushGameResultData(gameResultData); } catch (System.Exception ex) { DataHelper.WriteExceptionLogEx(ex, "天梯系统清场调度异常"); } }
public bool initialize(ICoreInterface coreInterface) { try { this.CoreInterface = coreInterface; if (!this.InitConfig()) { return(false); } RemotingConfiguration.Configure(Process.GetCurrentProcess().MainModule.FileName + ".config", false); if (!HuanYingSiYuanClient.getInstance().initialize(coreInterface)) { return(false); } if (!TianTiClient.getInstance().initialize(coreInterface)) { return(false); } if (!YongZheZhanChangClient.getInstance().initialize(coreInterface)) { return(false); } if (!KFCopyRpcClient.getInstance().initialize(coreInterface)) { return(false); } if (!SpreadClient.getInstance().initialize(coreInterface)) { return(false); } if (!AllyClient.getInstance().initialize(coreInterface)) { return(false); } if (!IPStatisticsClient.getInstance().initialize(coreInterface)) { return(false); } if (!JunTuanClient.getInstance().initialize(coreInterface)) { return(false); } if (!KuaFuWorldClient.getInstance().initialize(coreInterface)) { return(false); } GlobalEventSource.getInstance().registerListener(12, KuaFuManager.getInstance()); } catch (Exception ex) { return(false); } return(true); }
public bool ProcessGetKuaFuLineDataListCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { int mapCode = Global.SafeConvertToInt32(cmdParams[0]); List <KuaFuLineData> list = YongZheZhanChangClient.getInstance().GetKuaFuLineDataList(mapCode) as List <KuaFuLineData>; client.sendCmd(nID, list); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
public bool ProcessKuaFuBossJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { KuaFuBossSceneInfo sceneItem = null; KuaFuBossGameStates state = KuaFuBossGameStates.None; int result; if (!this.CheckMap(client)) { result = -21; } else { result = this.CheckCondition(client, ref sceneItem, ref state); } if (state != KuaFuBossGameStates.SignUp) { result = -2001; } else if (this.RuntimeData.RoleId2JoinGroup.ContainsKey(client.ClientData.RoleID)) { result = -12; } if (result >= 0) { int gropuId = sceneItem.Id; result = YongZheZhanChangClient.getInstance().YongZheZhanChangSignUp(client.strUserID, client.ClientData.RoleID, client.ClientData.ZoneID, 6, gropuId, client.ClientData.CombatForce); if (result > 0) { this.RuntimeData.RoleId2JoinGroup[client.ClientData.RoleID] = gropuId; client.ClientData.SignUpGameType = 6; } } client.sendCmd <int>(nID, result, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
public bool ProcessGetKuaFuLineDataListCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { int mapCode = Global.SafeConvertToInt32(cmdParams[0]); if (Global.GetMapSceneType(mapCode) == SceneUIClasses.ChongShengMap) { List <KuaFuLineData> list = KuaFuWorldClient.getInstance().GetKuaFuLineDataList(mapCode) as List <KuaFuLineData>; client.sendCmd <List <KuaFuLineData> >(nID, list, false); } else { List <KuaFuLineData> list = YongZheZhanChangClient.getInstance().GetKuaFuLineDataList(mapCode) as List <KuaFuLineData>; client.sendCmd <List <KuaFuLineData> >(nID, list, false); } return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
/// <summary> /// 心跳处理 /// </summary> public void TimerProc() { long nowTicks = TimeUtil.NOW(); if (nowTicks < NextHeartBeatTicks) { return; } NextHeartBeatTicks = nowTicks + 1020; //1020毫秒执行一次 foreach (var scene in SceneDict.Values) { lock (RuntimeData.Mutex) { int nID = -1; nID = scene.FuBenSeqId; int nCopyID = -1; nCopyID = scene.CopyMapId; int nMapCodeID = -1; nMapCodeID = scene.m_nMapCode; if (nID < 0 || nCopyID < 0 || nMapCodeID < 0) { continue; } CopyMap copyMap = scene.CopyMap; // 当前tick DateTime now = TimeUtil.NowDateTime(); long ticks = TimeUtil.NOW(); if (scene.m_eStatus == GameSceneStatuses.STATUS_NULL) // 如果处于空状态 -- 是否要切换到准备状态 { if (ticks >= scene.StartTimeTicks) { 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.YongZheZhanChang; scene.StateTimeData.State = (int)scene.m_eStatus; scene.StateTimeData.EndTicks = scene.m_lBeginTime; GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, 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 + scene.SceneInfo.FightingSecs * TimeUtil.SECOND; scene.StateTimeData.GameType = (int)GameTypes.YongZheZhanChang; scene.StateTimeData.State = (int)scene.m_eStatus; scene.StateTimeData.EndTicks = scene.m_lEndTime; GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, scene.CopyMap); InitCreateDynamicMonster(scene); 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); copyMap.AddGuangMuEvent(3, 0); GameManager.ClientMgr.BroadSpecialMapAIEvent(copyMap.MapCode, copyMap.CopyMapID, 3, 0); copyMap.AddGuangMuEvent(4, 0); GameManager.ClientMgr.BroadSpecialMapAIEvent(copyMap.MapCode, copyMap.CopyMapID, 4, 0); } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_BEGIN) // 战斗开始 { if (ticks >= scene.m_lEndTime) { int successSide = 0; if (scene.ScoreData.Score1 > scene.ScoreData.Score2) { successSide = 1; } else if (scene.ScoreData.Score2 > scene.ScoreData.Score1) { successSide = 2; } CompleteScene(scene, successSide); scene.m_eStatus = GameSceneStatuses.STATUS_END; scene.m_lLeaveTime = scene.m_lEndTime + scene.SceneInfo.ClearRolesSecs * TimeUtil.SECOND; scene.StateTimeData.GameType = (int)GameTypes.YongZheZhanChang; scene.StateTimeData.State = (int)GameSceneStatuses.STATUS_CLEAR; scene.StateTimeData.EndTicks = scene.m_lLeaveTime; GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, scene.CopyMap); } else { CheckCreateDynamicMonster(scene, ticks); } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_END) // 战斗结束 { GameManager.CopyMapMgr.KillAllMonster(scene.CopyMap); //结算奖励 scene.m_eStatus = GameSceneStatuses.STATUS_AWARD; YongZheZhanChangClient.getInstance().GameFuBenChangeState(scene.GameId, GameFuBenState.End, now); GiveAwards(scene); YongZheZhanChangFuBenData fuBenData; if (RuntimeData.FuBenItemData.TryGetValue(scene.GameId, out fuBenData)) { fuBenData.State = GameFuBenState.End; LogManager.WriteLog(LogTypes.Error, string.Format("勇者战场跨服副本GameID={0},战斗结束", fuBenData.GameId)); } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_AWARD) { if (ticks >= scene.m_lLeaveTime) { copyMap.SetRemoveTicks(scene.m_lLeaveTime); scene.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; }
/// <summary> /// 添加一个场景 /// </summary> public bool AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType) { if (sceneType == SceneUIClasses.YongZheZhanChang) { GameMap gameMap = null; if (!GameManager.MapMgr.DictMaps.TryGetValue(client.ClientData.MapCode, out gameMap)) { return(false); } int fuBenSeqId = copyMap.FuBenSeqID; int mapCode = copyMap.MapCode; int roleId = client.ClientData.RoleID; int gameId = (int)Global.GetClientKuaFuServerLoginData(client).GameId; DateTime now = TimeUtil.NowDateTime(); lock (RuntimeData.Mutex) { YongZheZhanChangScene scene = null; if (!SceneDict.TryGetValue(fuBenSeqId, out scene)) { YongZheZhanChangSceneInfo sceneInfo = null; YongZheZhanChangFuBenData fuBenData; if (!RuntimeData.FuBenItemData.TryGetValue(gameId, out fuBenData)) { LogManager.WriteLog(LogTypes.Error, "勇者战场没有为副本找到对应的跨服副本数据,GameID:" + gameId); } if (!RuntimeData.SceneDataDict.TryGetValue(fuBenData.GroupIndex, out sceneInfo)) { LogManager.WriteLog(LogTypes.Error, "勇者战场没有为副本找到对应的档位数据,ID:" + fuBenData.GroupIndex); } scene = new YongZheZhanChangScene(); scene.CopyMap = copyMap; scene.CleanAllInfo(); scene.GameId = gameId; scene.m_nMapCode = mapCode; scene.CopyMapId = copyMap.CopyMapID; scene.FuBenSeqId = fuBenSeqId; scene.m_nPlarerCount = 1; scene.SceneInfo = sceneInfo; scene.MapGridWidth = gameMap.MapGridWidth; scene.MapGridHeight = gameMap.MapGridHeight; DateTime startTime = now.Date.Add(GetStartTime(sceneInfo.Id)); scene.StartTimeTicks = startTime.Ticks / 10000; scene.GameStatisticalData.GameId = gameId; SceneDict[fuBenSeqId] = scene; } else { scene.m_nPlarerCount++; } YongZheZhanChangClientContextData clientContextData; if (!scene.ClientContextDataDict.TryGetValue(roleId, out clientContextData)) { clientContextData = new YongZheZhanChangClientContextData() { RoleId = roleId, ServerId = client.ServerId, BattleWhichSide = client.ClientData.BattleWhichSide }; scene.ClientContextDataDict[roleId] = clientContextData; } else { clientContextData.KillNum = 0; } client.SceneContextData2 = clientContextData; copyMap.IsKuaFuCopy = true; copyMap.SetRemoveTicks(TimeUtil.NOW() + scene.SceneInfo.TotalSecs * TimeUtil.SECOND); // 非首次进来的人会有旧的积分信息需要通知 // 改为进入的时候,让客户端来主动查询 //NotifyTimeStateInfoAndScoreInfo(client, false, true, true); } //更新状态 YongZheZhanChangClient.getInstance().GameFuBenRoleChangeState(roleId, (int)KuaFuRoleStates.StartGame); return(true); } return(false); }
public bool ProcessYongZheZhanChangEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { int result = StdErrorCode.Error_Success_No_Info; // 如果1.7的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { client.sendCmd(nID, result); return(true); } YongZheZhanChangSceneInfo sceneItem = null; YongZheZhanChangGameStates state = YongZheZhanChangGameStates.None; if (!CheckMap(client)) { result = StdErrorCode.Error_Denied_In_Current_Map; } else { result = CheckCondition(client, ref sceneItem, ref state); } if (state == YongZheZhanChangGameStates.Start) { KuaFuServerLoginData kuaFuServerLoginData = null; lock (RuntimeData.Mutex) { if (RuntimeData.RoleIdKuaFuLoginDataDict.TryGetValue(client.ClientData.RoleID, out kuaFuServerLoginData)) { KuaFuServerLoginData clientKuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client); if (null != clientKuaFuServerLoginData) { clientKuaFuServerLoginData.RoleId = kuaFuServerLoginData.RoleId; clientKuaFuServerLoginData.GameId = kuaFuServerLoginData.GameId; clientKuaFuServerLoginData.GameType = kuaFuServerLoginData.GameType; clientKuaFuServerLoginData.EndTicks = kuaFuServerLoginData.EndTicks; clientKuaFuServerLoginData.ServerId = kuaFuServerLoginData.ServerId; clientKuaFuServerLoginData.ServerIp = kuaFuServerLoginData.ServerIp; clientKuaFuServerLoginData.ServerPort = kuaFuServerLoginData.ServerPort; clientKuaFuServerLoginData.FuBenSeqId = kuaFuServerLoginData.FuBenSeqId; } } else { result = StdErrorCode.Error_Server_Busy; } } if (result >= 0) { result = YongZheZhanChangClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.EnterGame); if (result >= 0) { GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_KF_SWITCH_SERVER, Global.GetClientKuaFuServerLoginData(client)); } else { Global.GetClientKuaFuServerLoginData(client).RoleId = 0; } } } else { result = StdErrorCode.Error_Not_In_valid_Time; } client.sendCmd(nID, result); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
public bool OnInitGame(GameClient client) { int posX; int posY; int side; KuaFuServerLoginData kuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client); YongZheZhanChangFuBenData fuBenData; lock (RuntimeData.Mutex) { if (!RuntimeData.FuBenItemData.TryGetValue((int)kuaFuServerLoginData.GameId, out fuBenData)) { fuBenData = null; } else if (fuBenData.State >= GameFuBenState.End) { return(false); } } if (null == fuBenData) { //从中心查询副本信息 YongZheZhanChangFuBenData newFuBenData = YongZheZhanChangClient.getInstance().GetKuaFuFuBenData((int)kuaFuServerLoginData.GameId); if (newFuBenData == null || newFuBenData.State == GameFuBenState.End) { LogManager.WriteLog(LogTypes.Error, "获取不到有效的副本数据," + newFuBenData == null ? "fuBenData == null" : "fuBenData.State == GameFuBenState.End"); return(false); } lock (RuntimeData.Mutex) { if (!RuntimeData.FuBenItemData.TryGetValue((int)kuaFuServerLoginData.GameId, out fuBenData)) { fuBenData = newFuBenData; fuBenData.SequenceId = GameCoreInterface.getinstance().GetNewFuBenSeqId(); RuntimeData.FuBenItemData[fuBenData.GameId] = fuBenData; } } } KuaFuFuBenRoleData kuaFuFuBenRoleData; if (!fuBenData.RoleDict.TryGetValue(client.ClientData.RoleID, out kuaFuFuBenRoleData)) { return(false); } client.ClientData.BattleWhichSide = kuaFuFuBenRoleData.Side; side = GetBirthPoint(client, out posX, out posY); if (side <= 0) { LogManager.WriteLog(LogTypes.Error, "无法获取有效的阵营和出生点,进入跨服失败,side=" + side); return(false); } YongZheZhanChangSceneInfo sceneInfo; lock (RuntimeData.Mutex) { kuaFuServerLoginData.FuBenSeqId = fuBenData.SequenceId; if (!RuntimeData.SceneDataDict.TryGetValue(fuBenData.GroupIndex, out sceneInfo)) { return(false); } client.ClientData.MapCode = sceneInfo.MapCode; } client.ClientData.PosX = posX; client.ClientData.PosY = posY; client.ClientData.FuBenSeqID = kuaFuServerLoginData.FuBenSeqId; return(true); }
public bool initialize(ICoreInterface coreInterface) { try { CoreInterface = coreInterface; if (!InitConfig()) { return(false); } System.Runtime.Remoting.RemotingConfiguration.Configure(Process.GetCurrentProcess().MainModule.FileName + ".config", false); if (!HuanYingSiYuanClient.getInstance().initialize(coreInterface)) { return(false); } if (!TianTiClient.getInstance().initialize(coreInterface)) { return(false); } if (!YongZheZhanChangClient.getInstance().initialize(coreInterface)) { return(false); } if (!KFCopyRpcClient.getInstance().initialize(coreInterface)) { return(false); } /* * if (!MoRiJudgeClient.getInstance().initialize(coreInterface)) * { * return false; * } * * if (!ElementWarClient.getInstance().initialize(coreInterface)) * { * return false; * }*/ if (!SpreadClient.getInstance().initialize(coreInterface)) { return(false); } if (!AllyClient.getInstance().initialize(coreInterface)) { return(false); } GlobalEventSource.getInstance().registerListener((int)EventTypes.PlayerLogout, getInstance()); } catch (System.Exception ex) { return(false); } return(true); }
public bool ProcessGetYongZheZhanChangStateCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { // 根据策划需求,任何时候来查询状态,领奖状态具有最高优先级 string awardsInfo = Global.GetRoleParamByName(client, RoleParamName.YongZheZhanChangAwards); if (!string.IsNullOrEmpty(awardsInfo)) { int lastGroupId = 0; int score = 0; int success = 0; ConfigParser.ParseStrInt3(awardsInfo, ref lastGroupId, ref success, ref score); if (lastGroupId > 0) { YongZheZhanChangSceneInfo lastSceneItem = null; if (RuntimeData.SceneDataDict.TryGetValue(lastGroupId, out lastSceneItem)) { // 通知有奖励可以领取 client.sendCmd(nID, (int)YongZheZhanChangGameStates.Awards); return(true); } } } YongZheZhanChangSceneInfo sceneItem = null; YongZheZhanChangGameStates timeState = YongZheZhanChangGameStates.None; int result = (int)YongZheZhanChangGameStates.None; int groupId = 0; RuntimeData.RoleId2JoinGroup.TryGetValue(client.ClientData.RoleID, out groupId); CheckCondition(client, ref sceneItem, ref timeState); if (groupId > 0) { if (timeState >= YongZheZhanChangGameStates.SignUp && timeState <= YongZheZhanChangGameStates.Wait) { int state = YongZheZhanChangClient.getInstance().GetKuaFuRoleState(client.ClientData.RoleID); if (state >= (int)KuaFuRoleStates.SignUp) { result = (int)YongZheZhanChangGameStates.Wait; } else { result = (int)KuaFuBossGameStates.NotJoin; } } else if (timeState == YongZheZhanChangGameStates.Start) { if (RuntimeData.RoleIdKuaFuLoginDataDict.ContainsKey(client.ClientData.RoleID)) { result = (int)YongZheZhanChangGameStates.Start; } } } else { if (timeState == YongZheZhanChangGameStates.SignUp) { result = (int)YongZheZhanChangGameStates.SignUp; } else if (timeState == YongZheZhanChangGameStates.Wait || timeState == YongZheZhanChangGameStates.Start) { // 未参加本次活动 result = (int)YongZheZhanChangGameStates.NotJoin; } } client.sendCmd(nID, result); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
public bool ProcessKuaFuMapEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { int result = StdErrorCode.Error_Success_No_Info; int toMapCode = Global.SafeConvertToInt32(cmdParams[0]); int line = Global.SafeConvertToInt32(cmdParams[1]); int toBoss = 0; int teleportId = 0; if (cmdParams.Length >= 3) { toBoss = Global.SafeConvertToInt32(cmdParams[2]); } if (cmdParams.Length >= 4) { teleportId = Global.SafeConvertToInt32(cmdParams[3]); } do { if (!KuaFuMapManager.getInstance().IsKuaFuMap(toMapCode)) { result = StdErrorCode.Error_Operation_Denied; break; } if (!Global.CanEnterMap(client, toMapCode) || toMapCode == client.ClientData.MapCode) { result = StdErrorCode.Error_Operation_Denied; break; } // 新增需求,跨服主线地图能够直接进入另一个跨服主线地图 if (!KuaFuMapManager.getInstance().IsKuaFuMap(client.ClientData.MapCode) && !CheckMap(client)) { result = StdErrorCode.Error_Denied_In_Current_Map; break; } if (!IsGongNengOpened(client)) { result = StdErrorCode.Error_Operation_Denied; break; } KuaFuLineData kuaFuLineData; if (!RuntimeData.LineMap2KuaFuLineDataDict.TryGetValue(new IntPairKey(line, toMapCode), out kuaFuLineData)) { result = StdErrorCode.Error_Operation_Denied; break; } if (kuaFuLineData.OnlineCount >= kuaFuLineData.MaxOnlineCount) { result = StdErrorCode.Error_Server_Connections_Limit; break; } int fromMapCode = client.ClientData.MapCode; if (teleportId > 0) { // 要通过传送点进入跨服主线,必须检测是否能真正使用这个传送点 GameMap fromGameMap = null; if (!GameManager.MapMgr.DictMaps.TryGetValue(fromMapCode, out fromGameMap)) { result = StdErrorCode.Error_Config_Fault; break; } MapTeleport mapTeleport = null; if (!fromGameMap.MapTeleportDict.TryGetValue(teleportId, out mapTeleport) || mapTeleport.ToMapID != toMapCode) { result = StdErrorCode.Error_Operation_Denied; break; } // 这里要增加一个位置判断,玩家是否在传送点附近, CMD_SPR_MAPCHANGE 里面没有判断,这里先放宽松一点 if (Global.GetTwoPointDistance(client.CurrentPos, new Point(mapTeleport.X, mapTeleport.Y)) > 800) { result = StdErrorCode.Error_Too_Far; break; } } int kuaFuServerId = YongZheZhanChangClient.getInstance().EnterKuaFuMap(client.ClientData.RoleID, kuaFuLineData.MapCode, kuaFuLineData.Line, client.ServerId, Global.GetClientKuaFuServerLoginData(client)); if (kuaFuServerId > 0) { // 废弃这个判断,两个跨服主线地图配在同一台服务器上,仍然统一短线重连<客户端并不需要知道没有跨到另一个服务器> if (false && kuaFuServerId == GameManager.ServerId) { Global.GotoMap(client, toMapCode); } else { // 使用传送点,不扣金币 int needMoney = teleportId > 0 ? 0 : Global.GetMapTransNeedMoney(toMapCode); if (Global.GetTotalBindTongQianAndTongQianVal(client) < needMoney) { GameManager.ClientMgr.NotifyImportantMsg(client, StringUtil.substitute(Global.GetLang("金币不足【{0}】,无法传送到【{1}】!"), needMoney, Global.GetMapName(toMapCode)), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, (int)HintErrCodeTypes.NoTongQian); result = StdErrorCode.Error_JinBi_Not_Enough; } else { int[] enterFlags = new int[(int)EKuaFuMapEnterFlag.Max]; enterFlags[(int)EKuaFuMapEnterFlag.FromMapCode] = fromMapCode; enterFlags[(int)EKuaFuMapEnterFlag.FromTeleport] = teleportId; enterFlags[(int)EKuaFuMapEnterFlag.TargetBossId] = toBoss; Global.SaveRoleParamsIntListToDB(client, new List <int>(enterFlags), RoleParamName.EnterKuaFuMapFlag, true); GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_KF_SWITCH_SERVER, Global.GetClientKuaFuServerLoginData(client)); } } } else { Global.GetClientKuaFuServerLoginData(client).RoleId = 0; result = kuaFuServerId; } } while (false); client.sendCmd(nID, result); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
private void TimerProc(object sender, EventArgs e) { bool notifyPrepareGame = false; bool notifyEnterGame = false; DateTime now = TimeUtil.NowDateTime(); lock (RuntimeData.Mutex) { bool bInActiveTime = false; YongZheZhanChangSceneInfo sceneItem = RuntimeData.SceneDataDict.Values.FirstOrDefault(); for (int i = 0; i < sceneItem.TimePoints.Count - 1; i += 2) { if ((int)now.DayOfWeek == sceneItem.TimePoints[i].Days && now.TimeOfDay.TotalSeconds >= sceneItem.SecondsOfDay[i] - sceneItem.SignUpStartSecs && now.TimeOfDay.TotalSeconds <= sceneItem.SecondsOfDay[i + 1]) { double secs = sceneItem.SecondsOfDay[i] - now.TimeOfDay.TotalSeconds; bInActiveTime = true; if (!RuntimeData.PrepareGame) { if (secs > 0 && secs < sceneItem.SignUpEndSecs / 2) { LogManager.WriteLog(LogTypes.Error, "报名截止5分钟时间过半,通知跨服中心开始分配所有报名玩家的活动场次"); // 通知跨服中心开始准备副本 RuntimeData.PrepareGame = true; notifyPrepareGame = true; break; } } else { if (secs < 0) { LogManager.WriteLog(LogTypes.Error, "报名截止状态结束,可以通知已分配到场次的玩家进入游戏了"); // 首次到达进入时间,通知进入,并重置PrepareGame状态,然后以后的循环走上面的if // 但是上面的if在本次活动期间就相当于空转 notifyEnterGame = true; RuntimeData.PrepareGame = false; break; } } } } if (!bInActiveTime) { if (RuntimeData.RoleIdKuaFuLoginDataDict.Count > 0) { RuntimeData.RoleIdKuaFuLoginDataDict.Clear(); } if (RuntimeData.RoleId2JoinGroup.Count > 0) { RuntimeData.RoleId2JoinGroup.Clear(); } } } if (notifyPrepareGame) { LogManager.WriteLog(LogTypes.Error, "通知跨服中心开始分配所有报名玩家的活动场次"); // GameServer和KF-GameServer都会通知准备游戏,所以中心要防止状态回滚 string cmd = string.Format("{0} {1} {2}", GameStates.CommandName, GameStates.PrepareGame, (int)GameTypes.YongZheZhanChang); YongZheZhanChangClient.getInstance().ExecuteCommand(cmd); } if (notifyEnterGame) { lock (RuntimeData.Mutex) { foreach (var kuaFuServerLoginData in RuntimeData.RoleIdKuaFuLoginDataDict.Values) { RuntimeData.NotifyRoleEnterDict.Add(kuaFuServerLoginData.RoleId, kuaFuServerLoginData); } } } //通知报名的玩家进入活动,每次只通知一部分(按RoleID除以15的余数),防止所有玩家一起进入给服务器造成压力. List <KuaFuServerLoginData> list = null; lock (RuntimeData.Mutex) { int count = RuntimeData.NotifyRoleEnterDict.Count; if (count > 0) { list = new List <KuaFuServerLoginData>(); KuaFuServerLoginData kuaFuServerLoginData = RuntimeData.NotifyRoleEnterDict.First().Value; foreach (var kv in RuntimeData.NotifyRoleEnterDict) { if ((kv.Key % 15) == (kuaFuServerLoginData.RoleId % 15)) { list.Add(kv.Value); } } foreach (var data in list) { RuntimeData.NotifyRoleEnterDict.Remove(data.RoleId); } } } if (null != list) { foreach (var kuaFuServerLoginData in list) { GameClient client = GameManager.ClientMgr.FindClient(kuaFuServerLoginData.RoleId); if (null != client) { client.sendCmd((int)TCPGameServerCmds.CMD_SPR_YONGZHEZHANCHANG_ENTER, 1); } } } }
public bool ProcessKuaFuBossEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { KuaFuBossSceneInfo sceneItem = null; KuaFuBossGameStates state = KuaFuBossGameStates.None; int result = 0; if (!this.CheckMap(client)) { result = -21; } else { result = this.CheckCondition(client, ref sceneItem, ref state); } if (state == KuaFuBossGameStates.Start) { KuaFuServerLoginData kuaFuServerLoginData = null; lock (this.RuntimeData.Mutex) { if (this.RuntimeData.RoleIdKuaFuLoginDataDict.TryGetValue(client.ClientData.RoleID, out kuaFuServerLoginData)) { KuaFuServerLoginData clientKuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client); if (null != clientKuaFuServerLoginData) { clientKuaFuServerLoginData.RoleId = kuaFuServerLoginData.RoleId; clientKuaFuServerLoginData.GameId = kuaFuServerLoginData.GameId; clientKuaFuServerLoginData.GameType = kuaFuServerLoginData.GameType; clientKuaFuServerLoginData.EndTicks = kuaFuServerLoginData.EndTicks; clientKuaFuServerLoginData.ServerId = kuaFuServerLoginData.ServerId; clientKuaFuServerLoginData.ServerIp = kuaFuServerLoginData.ServerIp; clientKuaFuServerLoginData.ServerPort = kuaFuServerLoginData.ServerPort; clientKuaFuServerLoginData.FuBenSeqId = kuaFuServerLoginData.FuBenSeqId; } } else { result = -11000; } } if (result >= 0) { result = YongZheZhanChangClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.EnterGame, false); if (result >= 0) { GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd <KuaFuServerLoginData>(14000, Global.GetClientKuaFuServerLoginData(client), false); } else { Global.GetClientKuaFuServerLoginData(client).RoleId = 0; } } } else { result = -2001; } client.sendCmd <int>(nID, result, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
public bool AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType) { bool result; if (sceneType == SceneUIClasses.KuaFuBoss) { int fuBenSeqId = copyMap.FuBenSeqID; int mapCode = copyMap.MapCode; int roleId = client.ClientData.RoleID; int gameId = (int)Global.GetClientKuaFuServerLoginData(client).GameId; DateTime now = TimeUtil.NowDateTime(); KuaFuBossScene scene = null; lock (this.RuntimeData.Mutex) { if (!this.SceneDict.TryGetValue(fuBenSeqId, out scene)) { KuaFuBossSceneInfo sceneInfo = null; YongZheZhanChangFuBenData fuBenData; if (!this.RuntimeData.FuBenItemData.TryGetValue(gameId, out fuBenData)) { LogManager.WriteLog(LogTypes.Error, "跨服Boss没有为副本找到对应的跨服副本数据,GameID:" + gameId, null, true); } if (!this.RuntimeData.SceneDataDict.TryGetValue(fuBenData.GroupIndex, out sceneInfo)) { LogManager.WriteLog(LogTypes.Error, "跨服Boss没有为副本找到对应的档位数据,ID:" + fuBenData.GroupIndex, null, true); } scene = new KuaFuBossScene(); scene.CopyMap = copyMap; scene.CleanAllInfo(); scene.GameId = gameId; scene.m_nMapCode = mapCode; scene.CopyMapId = copyMap.CopyMapID; scene.FuBenSeqId = fuBenSeqId; scene.m_nPlarerCount = 1; scene.SceneInfo = sceneInfo; DateTime startTime = now.Date.Add(this.GetStartTime(sceneInfo.Id)); scene.StartTimeTicks = startTime.Ticks / 10000L; scene.GameStatisticalData.GameId = gameId; this.SceneDict[fuBenSeqId] = scene; List <BattleDynamicMonsterItem> dynMonsterList; if (this.RuntimeData.SceneDynMonsterDict.TryGetValue(mapCode, out dynMonsterList)) { scene.DynMonsterList = dynMonsterList; } } else { scene.m_nPlarerCount++; } copyMap.IsKuaFuCopy = true; copyMap.SetRemoveTicks(TimeUtil.NOW() + (long)(scene.SceneInfo.TotalSecs * 1000)); } GameMap gameMap = null; if (GameManager.MapMgr.DictMaps.TryGetValue(copyMap.MapCode, out gameMap)) { scene.MapGridWidth = gameMap.MapGridWidth; scene.MapGridHeight = gameMap.MapGridHeight; } YongZheZhanChangClient.getInstance().GameFuBenRoleChangeState(roleId, 5, 0, 0); result = true; } else { result = false; } return(result); }
public bool startup() { try { ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("HuanYingSiYuanClient.TimerProc", new EventHandler(HuanYingSiYuanClient.getInstance().TimerProc)), 2000, 2857); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("TianTiClient.TimerProc", new EventHandler(TianTiClient.getInstance().TimerProc)), 2000, 2857); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("YongZheZhanChangClient.TimerProc", new EventHandler(YongZheZhanChangClient.getInstance().TimerProc)), 2000, 3389); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("KFCopyRpcClient.TimerProc", new EventHandler(KFCopyRpcClient.getInstance().TimerProc)), 2000, 2732); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("SpreadClient.TimerProc", new EventHandler(SpreadClient.getInstance().TimerProc)), 2000, 4285); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("AllyClient.TimerProc", new EventHandler(AllyClient.getInstance().TimerProc)), 2000, 5714); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("IPStatisticsClient.TimerProc", new EventHandler(IPStatisticsClient.getInstance().TimerProc)), 2000, 5000); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("JunTuanClient.TimerProc", new EventHandler(JunTuanClient.getInstance().TimerProc)), 2000, 2500); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("KuaFuWorldClient.TimerProc", new EventHandler(KuaFuWorldClient.getInstance().TimerProc)), 2000, 3389); lock (this.RuntimeData.Mutex) { if (null == this.RuntimeData.BackGroundThread) { this.RuntimeData.BackGroundThread = new Thread(new ThreadStart(this.BackGroudThreadProc)); this.RuntimeData.BackGroundThread.IsBackground = true; this.RuntimeData.BackGroundThread.Start(); } } } catch (Exception ex) { return(false); } return(true); }
public bool startup() { try { ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("HuanYingSiYuanClient.TimerProc", HuanYingSiYuanClient.getInstance().TimerProc), 2000, 2857); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("TianTiClient.TimerProc", TianTiClient.getInstance().TimerProc), 2000, 1357); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("YongZheZhanChangClient.TimerProc", YongZheZhanChangClient.getInstance().TimerProc), 2000, 3389); //ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("MoRiJudgeClient.TimerProc", MoRiJudgeClient.getInstance().TimerProc), 2000, 1732); //ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("ElementWarClient.TimerProc", ElementWarClient.getInstance().TimerProc), 2000, 1732); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("KFCopyRpcClient.TimerProc", KFCopyRpcClient.getInstance().TimerProc), 2000, 1732); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("SpreadClient.TimerProc", SpreadClient.getInstance().TimerProc), 2000, 1732); ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("AllyClient.TimerProc", AllyClient.getInstance().TimerProc), 2000, 1732); lock (RuntimeData.Mutex) { if (null == RuntimeData.BackGroundThread) { RuntimeData.BackGroundThread = new Thread(BackGroudThreadProc); RuntimeData.BackGroundThread.IsBackground = true; RuntimeData.BackGroundThread.Start(); } } } catch (System.Exception ex) { return(false); } return(true); }
public bool OnUserLogin(TMSKSocket socket, int verSign, string userID, string userName, string lastTime, string userToken, string isadult, string signCode, int serverId = 0, string ip = null, int port = 0, int roleId = 0, int gameType = 0, long gameId = 0L) { KuaFuServerLoginData kuaFuServerLoginData = socket.ClientKuaFuServerLoginData; if (serverId > 0 && ip != null) { kuaFuServerLoginData.ServerId = serverId; kuaFuServerLoginData.ServerIp = ip; kuaFuServerLoginData.ServerPort = port; kuaFuServerLoginData.RoleId = roleId; kuaFuServerLoginData.GameType = gameType; kuaFuServerLoginData.GameId = gameId; } if (kuaFuServerLoginData.WebLoginToken == null) { kuaFuServerLoginData.WebLoginToken = new WebLoginToken { VerSign = verSign, UserID = userID, UserName = userName, LastTime = lastTime, Isadult = isadult, SignCode = signCode }; } if (roleId > 0 && serverId > 0 && gameType > 0) { if (GameManager.ServerLineID != GameManager.ServerId) { LogManager.WriteLog(LogTypes.Error, "GameManager.ServerLineID未配置,禁止跨服登录", null, true); return(false); } if (string.IsNullOrEmpty(ip) || port <= 0 || gameType <= 0 || gameId <= 0L) { LogManager.WriteLog(LogTypes.Error, string.Format("角色{0}未能在服务器列表中找本服务器,作为跨服服务器", kuaFuServerLoginData.RoleId), null, true); return(false); } if (!KuaFuManager.getInstance().CanKuaFuLogin()) { return(false); } socket.ServerId = serverId; switch (gameType) { case 1: socket.IsKuaFuLogin = HuanYingSiYuanClient.getInstance().KuaFuLogin(kuaFuServerLoginData); goto IL_399; case 2: socket.IsKuaFuLogin = TianTiClient.getInstance().KuaFuLogin(kuaFuServerLoginData); goto IL_399; case 5: case 6: case 15: socket.IsKuaFuLogin = YongZheZhanChangClient.getInstance().KuaFuLogin(kuaFuServerLoginData); goto IL_399; case 7: socket.IsKuaFuLogin = YongZheZhanChangClient.getInstance().CanEnterKuaFuMap(kuaFuServerLoginData); goto IL_399; case 8: socket.IsKuaFuLogin = SingletonTemplate <CopyTeamManager> .Instance().HandleKuaFuLogin(kuaFuServerLoginData); goto IL_399; case 10: socket.IsKuaFuLogin = LangHunLingYuManager.getInstance().CanEnterKuaFuMap(kuaFuServerLoginData); goto IL_399; case 12: socket.IsKuaFuLogin = SingletonTemplate <ZhengBaManager> .Instance().CanKuaFuLogin(kuaFuServerLoginData); goto IL_399; case 13: socket.IsKuaFuLogin = SingletonTemplate <CoupleArenaManager> .Instance().CanKuaFuLogin(kuaFuServerLoginData); goto IL_399; case 17: socket.IsKuaFuLogin = true; goto IL_399; case 19: case 20: socket.IsKuaFuLogin = KarenBattleManager.getInstance().KuaFuLogin(kuaFuServerLoginData); goto IL_399; case 22: socket.IsKuaFuLogin = true; goto IL_399; case 24: socket.IsKuaFuLogin = BangHuiMatchManager.getInstance().KuaFuLogin(kuaFuServerLoginData); goto IL_399; case 25: socket.IsKuaFuLogin = KuaFuLueDuoManager.getInstance().KuaFuLogin(kuaFuServerLoginData); goto IL_399; case 27: case 28: case 29: socket.IsKuaFuLogin = true; goto IL_399; case 30: socket.IsKuaFuLogin = CompBattleManager.getInstance().KuaFuLogin(kuaFuServerLoginData); goto IL_399; case 31: socket.IsKuaFuLogin = CompMineManager.getInstance().KuaFuLogin(kuaFuServerLoginData); goto IL_399; case 32: socket.IsKuaFuLogin = true; goto IL_399; case 34: socket.IsKuaFuLogin = TianTi5v5Manager.getInstance().CanKuaFuLogin(kuaFuServerLoginData); goto IL_399; case 36: socket.IsKuaFuLogin = ZorkBattleManager.getInstance().KuaFuLogin(kuaFuServerLoginData); goto IL_399; } EventObjectEx_I1 eventObject = new EventObjectEx_I1(kuaFuServerLoginData, 61, gameType); if (GlobalEventSource4Scene.getInstance().fireEvent(eventObject, 10007)) { socket.IsKuaFuLogin = eventObject.Result; } IL_399: string dbIp = ""; int dbPort = 0; string logDbIp = ""; int logDbPort = 0; if (kuaFuServerLoginData.ips != null && kuaFuServerLoginData.ports != null) { dbIp = kuaFuServerLoginData.ips[0]; logDbIp = kuaFuServerLoginData.ips[1]; dbPort = kuaFuServerLoginData.ports[0]; logDbPort = kuaFuServerLoginData.ports[1]; } else if (!KuaFuManager.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("GameType{0}未能找到角色{1}的原服务器的服务器IP和端口", gameType, kuaFuServerLoginData.RoleId), null, true); return(false); } if (socket.IsKuaFuLogin && serverId != 0) { if (serverId != 0) { if (!this.InitGameDbConnection(serverId, dbIp, dbPort, logDbIp, logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("连接角色{0}的原服务器的GameDBServer和LogDBServer失败", kuaFuServerLoginData.RoleId), null, true); return(false); } } return(socket.IsKuaFuLogin); } } else { if (GameManager.IsKuaFuServer) { LogManager.WriteLog(LogTypes.Error, "跨服服务器禁止非跨服登录,请检查是否将LineID配置,原服应当为1", null, true); return(false); } if (KuaFuManager.getInstance().LocalLogin(userID)) { kuaFuServerLoginData.RoleId = 0; kuaFuServerLoginData.GameId = 0L; kuaFuServerLoginData.GameType = 0; kuaFuServerLoginData.ServerId = 0; socket.ServerId = 0; socket.IsKuaFuLogin = false; return(true); } } LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的跨服活动或副本信息", kuaFuServerLoginData.RoleId), null, true); return(false); }
private void TimerProc(object sender, EventArgs e) { bool notifyPrepareGame = false; bool notifyEnterGame = false; DateTime now = TimeUtil.NowDateTime(); lock (this.RuntimeData.Mutex) { bool bInActiveTime = false; KuaFuBossSceneInfo sceneItem = this.RuntimeData.SceneDataDict.Values.FirstOrDefault <KuaFuBossSceneInfo>(); for (int i = 0; i < sceneItem.TimePoints.Count - 1; i += 2) { if (now.DayOfWeek == (DayOfWeek)sceneItem.TimePoints[i].Days && now.TimeOfDay.TotalSeconds >= sceneItem.SecondsOfDay[i] - (double)sceneItem.SignUpStartSecs && now.TimeOfDay.TotalSeconds <= sceneItem.SecondsOfDay[i + 1]) { double secs = sceneItem.SecondsOfDay[i] - now.TimeOfDay.TotalSeconds; bInActiveTime = true; if (!this.RuntimeData.PrepareGame) { if (secs > 0.0 && secs < (double)(sceneItem.SignUpEndSecs / 2)) { LogManager.WriteLog(LogTypes.Error, "报名截止5分钟时间过半,通知跨服中心开始分配所有报名玩家的活动场次", null, true); this.RuntimeData.PrepareGame = true; notifyPrepareGame = true; break; } } else if (secs < 0.0) { LogManager.WriteLog(LogTypes.Error, "报名截止状态结束,可以通知已分配到场次的玩家进入游戏了", null, true); notifyEnterGame = true; this.RuntimeData.PrepareGame = false; break; } } } if (!bInActiveTime) { if (this.RuntimeData.RoleIdKuaFuLoginDataDict.Count > 0) { this.RuntimeData.RoleIdKuaFuLoginDataDict.Clear(); } if (this.RuntimeData.RoleId2JoinGroup.Count > 0) { this.RuntimeData.RoleId2JoinGroup.Clear(); } } } if (notifyPrepareGame) { LogManager.WriteLog(LogTypes.Error, "通知跨服中心开始分配所有报名玩家的活动场次", null, true); string cmd = string.Format("{0} {1} {2}", "GameState", 2, 6); YongZheZhanChangClient.getInstance().ExecuteCommand(cmd); } if (notifyEnterGame) { lock (this.RuntimeData.Mutex) { foreach (KuaFuServerLoginData kuaFuServerLoginData in this.RuntimeData.RoleIdKuaFuLoginDataDict.Values) { this.RuntimeData.NotifyRoleEnterDict.Add(kuaFuServerLoginData.RoleId, kuaFuServerLoginData); } } } List <KuaFuServerLoginData> list = null; lock (this.RuntimeData.Mutex) { int count = this.RuntimeData.NotifyRoleEnterDict.Count; if (count > 0) { list = new List <KuaFuServerLoginData>(); KuaFuServerLoginData kuaFuServerLoginData = this.RuntimeData.NotifyRoleEnterDict.First <KeyValuePair <int, KuaFuServerLoginData> >().Value; foreach (KeyValuePair <int, KuaFuServerLoginData> kv in this.RuntimeData.NotifyRoleEnterDict) { if (kv.Key % 15 == kuaFuServerLoginData.RoleId % 15) { list.Add(kv.Value); } } foreach (KuaFuServerLoginData data in list) { this.RuntimeData.NotifyRoleEnterDict.Remove(data.RoleId); } } } if (null != list) { foreach (KuaFuServerLoginData kuaFuServerLoginData in list) { GameClient client = GameManager.ClientMgr.FindClient(kuaFuServerLoginData.RoleId); if (null != client) { client.sendCmd <int>(1121, 1, false); } } } }
public bool ProcessKuaFuMapEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { int result = 0; int toMapCode = Global.SafeConvertToInt32(cmdParams[0]); int line = Global.SafeConvertToInt32(cmdParams[1]); int toBoss = 0; int teleportId = 0; if (cmdParams.Length >= 3) { toBoss = Global.SafeConvertToInt32(cmdParams[2]); } if (cmdParams.Length >= 4) { teleportId = Global.SafeConvertToInt32(cmdParams[3]); } KuaFuLineData kuaFuLineData; if (!KuaFuMapManager.getInstance().IsKuaFuMap(toMapCode)) { result = -12; } else if (!this.RuntimeData.LineMap2KuaFuLineDataDict.TryGetValue(new IntPairKey(line, toMapCode), out kuaFuLineData)) { result = -12; } else if (!Global.CanEnterMap(client, toMapCode) || (toMapCode == client.ClientData.MapCode && kuaFuLineData.MapType != 1)) { result = -12; } else { if (toMapCode == client.ClientData.MapCode && kuaFuLineData.MapType == 1) { List <KuaFuLineData> list = KuaFuWorldClient.getInstance().GetKuaFuLineDataList(toMapCode) as List <KuaFuLineData>; if (null == list) { result = -12; goto IL_67F; } KuaFuLineData currentLineData = list.Find((KuaFuLineData x) => x.ServerId == GameManager.KuaFuServerId); if (currentLineData != null && currentLineData.Line == kuaFuLineData.Line) { result = -4011; goto IL_67F; } } if (!KuaFuMapManager.getInstance().IsKuaFuMap(client.ClientData.MapCode) && !this.CheckMap(client)) { result = -21; } else if (!this.IsGongNengOpened(client, false)) { result = -12; } else if (kuaFuLineData.OnlineCount >= kuaFuLineData.MaxOnlineCount) { result = -100; } else { int fromMapCode = client.ClientData.MapCode; if (teleportId > 0) { GameMap fromGameMap = null; if (!GameManager.MapMgr.DictMaps.TryGetValue(fromMapCode, out fromGameMap)) { result = -3; goto IL_67F; } MapTeleport mapTeleport = null; if (!fromGameMap.MapTeleportDict.TryGetValue(teleportId, out mapTeleport) || mapTeleport.ToMapID != toMapCode) { result = -12; goto IL_67F; } if (Global.GetTwoPointDistance(client.CurrentPos, new Point((double)mapTeleport.X, (double)mapTeleport.Y)) > 800.0) { result = -301; goto IL_67F; } } KuaFuServerLoginData kuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client); int kuaFuServerId; if (kuaFuLineData.MapType == 1) { if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Reborn, true)) { result = -400; goto IL_67F; } string signToken; string signKey; int rt = KuaFuWorldClient.getInstance().EnterPTKuaFuMap(client.ServerId, client.ClientData.LocalRoleID, client.ClientData.ServerPTID, kuaFuLineData.MapCode, kuaFuLineData.Line, kuaFuServerLoginData, out signToken, out signKey); if (rt == -4010) { KuaFuWorldRoleData kuaFuWorldRoleData = new KuaFuWorldRoleData { LocalRoleID = client.ClientData.LocalRoleID, UserID = client.strUserID, WorldRoleID = client.ClientData.WorldRoleID, Channel = client.ClientData.Channel, PTID = client.ClientData.ServerPTID, ServerID = client.ServerId, ZoneID = client.ClientData.ZoneID }; rt = KuaFuWorldClient.getInstance().RegPTKuaFuRoleData(ref kuaFuWorldRoleData); rt = KuaFuWorldClient.getInstance().EnterPTKuaFuMap(client.ServerId, client.ClientData.LocalRoleID, client.ClientData.ServerPTID, kuaFuLineData.MapCode, kuaFuLineData.Line, kuaFuServerLoginData, out signToken, out signKey); } if (rt < 0) { result = rt; goto IL_67F; } KFRebornRoleData rebornRoleData = KuaFuWorldClient.getInstance().Reborn_GetRebornRoleData(client.ClientData.ServerPTID, client.ClientData.LocalRoleID); if (null == rebornRoleData) { result = KuaFuWorldClient.getInstance().Reborn_RoleReborn(client.ClientData.ServerPTID, client.ClientData.LocalRoleID, client.ClientData.RoleName, client.ClientData.RebornLevel); if (result < 0) { goto IL_67F; } LogManager.WriteLog(LogTypes.Analysis, string.Format("Reborn_RoleReborn ptId={0} roleId={1} roleName={2} rebornLevel={3}", new object[] { client.ClientData.ServerPTID, client.ClientData.LocalRoleID, client.ClientData.RoleName, client.ClientData.RebornLevel }), null, true); } kuaFuServerLoginData.PTID = client.ClientData.ServerPTID; kuaFuServerLoginData.RoleId = client.ClientData.LocalRoleID; kuaFuServerLoginData.SignToken = signToken; kuaFuServerLoginData.TempRoleID = rt; kuaFuServerLoginData.SignCode = MD5Helper.get_md5_string(kuaFuServerLoginData.SignDataString() + signKey).ToLower(); kuaFuServerId = kuaFuServerLoginData.TargetServerID; } else { kuaFuServerLoginData.SignCode = null; kuaFuServerId = YongZheZhanChangClient.getInstance().EnterKuaFuMap(client.ClientData.LocalRoleID, kuaFuLineData.MapCode, kuaFuLineData.Line, client.ServerId, Global.GetClientKuaFuServerLoginData(client)); } kuaFuServerLoginData.Line = line; if (kuaFuServerId > 0) { bool flag = 0 == 0; int needMoney = (teleportId > 0) ? 0 : Global.GetMapTransNeedMoney(toMapCode); if (Global.GetTotalBindTongQianAndTongQianVal(client) < needMoney) { GameManager.ClientMgr.NotifyImportantMsg(client, StringUtil.substitute(GLang.GetLang(171, new object[0]), new object[] { needMoney, Global.GetMapName(toMapCode) }), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 27); result = -9; Global.GetClientKuaFuServerLoginData(client).RoleId = 0; } else { int[] enterFlags = new int[5]; enterFlags[0] = fromMapCode; enterFlags[1] = teleportId; enterFlags[2] = toBoss; Global.SaveRoleParamsIntListToDB(client, new List <int>(enterFlags), "EnterKuaFuMapFlag", true); GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd <KuaFuServerLoginData>(14000, Global.GetClientKuaFuServerLoginData(client), false); } } else { Global.GetClientKuaFuServerLoginData(client).RoleId = 0; result = kuaFuServerId; } } } IL_67F: client.sendCmd <int>(nID, result, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
/// <summary> /// 玩家离开血色堡垒 /// </summary> public void OnLogout(GameClient client) { YongZheZhanChangClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.StartGame); }
public bool OnUserLogin(TMSKSocket socket, int verSign, string userID, string userName, string lastTime, string userToken, string isadult, string signCode, int serverId, string ip, int port, int roleId, int gameType, long gameId) { KuaFuServerLoginData kuaFuServerLoginData = socket.ClientKuaFuServerLoginData; kuaFuServerLoginData.ServerId = serverId; kuaFuServerLoginData.ServerIp = ip; kuaFuServerLoginData.ServerPort = port; kuaFuServerLoginData.RoleId = roleId; kuaFuServerLoginData.GameType = gameType; kuaFuServerLoginData.GameId = gameId; if (kuaFuServerLoginData.WebLoginToken == null) { kuaFuServerLoginData.WebLoginToken = new WebLoginToken() { VerSign = verSign, UserID = userID, UserName = userName, LastTime = lastTime, Isadult = isadult, SignCode = signCode, }; } if (roleId > 0) { // 跨服服务器的两个ID相等,如果不想等,则配置错误; // 如果想要去掉这个限制,允许区游戏服务器兼作跨服活动服务器(混合使用),必须先修改GameManager.ServerLineID相关的逻辑,使其可以兼容 // 完成修改前,这个限制不可取消. if (GameManager.ServerLineID != GameManager.ServerId) { LogManager.WriteLog(LogTypes.Error, "GameManager.ServerLineID未配置,禁止跨服登录"); return(false); } //跨服登录,限制rid if (!string.IsNullOrEmpty(ip) && port > 0 && gameType > 0 && gameId > 0 /* && HuanYingSiYuanClient.getInstance().CanKuaFuLogin()*/) { string dbIp = ""; int dbPort = 0; string logDbIp = ""; int logDbPort = 0; socket.ServerId = serverId; switch (gameType) { case (int)GameTypes.HuanYingSiYuan: { if (!HuanYingSiYuanClient.getInstance().CanKuaFuLogin()) { return(false); } socket.IsKuaFuLogin = HuanYingSiYuanClient.getInstance().KuaFuLogin(kuaFuServerLoginData); if (!HuanYingSiYuanClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId)); return(false); } } break; case (int)GameTypes.TianTi: { if (!TianTiClient.getInstance().CanKuaFuLogin()) { return(false); } socket.IsKuaFuLogin = TianTiClient.getInstance().KuaFuLogin(kuaFuServerLoginData); if (!TianTiClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId)); return(false); } } break; case (int)GameTypes.KingOfBattle: case (int)GameTypes.YongZheZhanChang: case (int)GameTypes.KuaFuBoss: { if (!YongZheZhanChangClient.getInstance().CanKuaFuLogin()) { return(false); } socket.IsKuaFuLogin = YongZheZhanChangClient.getInstance().KuaFuLogin(kuaFuServerLoginData); if (!YongZheZhanChangClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId)); return(false); } } break; case (int)GameTypes.KuaFuMap: { if (!YongZheZhanChangClient.getInstance().CanKuaFuLogin()) { return(false); } socket.IsKuaFuLogin = YongZheZhanChangClient.getInstance().CanEnterKuaFuMap(kuaFuServerLoginData); if (!YongZheZhanChangClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId)); return(false); } } break; case (int)GameTypes.LangHunLingYu: { if (!YongZheZhanChangClient.getInstance().CanKuaFuLogin()) { return(false); } socket.IsKuaFuLogin = LangHunLingYuManager.getInstance().CanEnterKuaFuMap(kuaFuServerLoginData); if (!YongZheZhanChangClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId)); return(false); } } break; case (int)GameTypes.KuaFuCopy: { if (!KFCopyRpcClient.getInstance().CanKuaFuLogin()) { return(false); } socket.IsKuaFuLogin = CopyTeamManager.Instance().HandleKuaFuLogin(kuaFuServerLoginData); if (!KFCopyRpcClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId)); return(false); } } break; case (int)GameTypes.ZhengBa: { if (!TianTiClient.getInstance().CanKuaFuLogin()) { return(false); } socket.IsKuaFuLogin = ZhengBaManager.Instance().CanKuaFuLogin(kuaFuServerLoginData); if (!TianTiClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId)); return(false); } } break; case (int)GameTypes.CoupleArena: { if (!TianTiClient.getInstance().CanKuaFuLogin()) { return(false); } socket.IsKuaFuLogin = CoupleArenaManager.Instance().CanKuaFuLogin(kuaFuServerLoginData); if (!TianTiClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId)); return(false); } } break; } if (socket.IsKuaFuLogin && serverId != 0) { if (serverId != 0) { if (!InitGameDbConnection(serverId, dbIp, dbPort, logDbIp, logDbPort)) { LogManager.WriteLog(LogTypes.Error, string.Format("连接角色{0}的原服务器的GameDBServer和LogDBServer失败", kuaFuServerLoginData.RoleId)); return(false); } } return(socket.IsKuaFuLogin); } } else { LogManager.WriteLog(LogTypes.Error, string.Format("角色{0}未能在服务器列表中找本服务器,作为跨服服务器", kuaFuServerLoginData.RoleId)); return(false); } } else { //非跨服登录 if (HuanYingSiYuanClient.getInstance().LocalLogin(userID)) { kuaFuServerLoginData.RoleId = 0; kuaFuServerLoginData.GameId = 0; kuaFuServerLoginData.GameType = 0; kuaFuServerLoginData.ServerId = 0; socket.ServerId = 0; socket.IsKuaFuLogin = false; return(true); } } LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的跨服活动或副本信息", kuaFuServerLoginData.RoleId)); return(false); }
public bool OnInitGame(GameClient client) { KuaFuServerLoginData kuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client); YongZheZhanChangFuBenData fuBenData; lock (this.RuntimeData.Mutex) { if (!this.RuntimeData.FuBenItemData.TryGetValue((int)kuaFuServerLoginData.GameId, out fuBenData)) { fuBenData = null; } else if (fuBenData.State >= GameFuBenState.End) { return(false); } } if (null == fuBenData) { YongZheZhanChangFuBenData newFuBenData = YongZheZhanChangClient.getInstance().GetKuaFuFuBenData((int)kuaFuServerLoginData.GameId); if (newFuBenData == null || newFuBenData.State == GameFuBenState.End) { LogManager.WriteLog(LogTypes.Error, ("获取不到有效的副本数据," + newFuBenData == null) ? "fuBenData == null" : "fuBenData.State == GameFuBenState.End", null, true); return(false); } lock (this.RuntimeData.Mutex) { if (!this.RuntimeData.FuBenItemData.TryGetValue((int)kuaFuServerLoginData.GameId, out fuBenData)) { fuBenData = newFuBenData; fuBenData.SequenceId = GameCoreInterface.getinstance().GetNewFuBenSeqId(); this.RuntimeData.FuBenItemData[fuBenData.GameId] = fuBenData; } } } KuaFuFuBenRoleData kuaFuFuBenRoleData; bool result; if (!fuBenData.RoleDict.TryGetValue(client.ClientData.RoleID, out kuaFuFuBenRoleData)) { result = false; } else { int posX; int posY; this.GetBirthPoint(client, out posX, out posY); lock (this.RuntimeData.Mutex) { kuaFuServerLoginData.FuBenSeqId = fuBenData.SequenceId; KuaFuBossSceneInfo sceneInfo; if (!this.RuntimeData.SceneDataDict.TryGetValue(fuBenData.GroupIndex, out sceneInfo)) { return(false); } client.ClientData.MapCode = sceneInfo.MapCode; } client.ClientData.PosX = posX; client.ClientData.PosY = posY; client.ClientData.FuBenSeqID = kuaFuServerLoginData.FuBenSeqId; result = true; } 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; }
public void TimerProc() { long nowTicks = TimeUtil.NOW(); if (nowTicks >= KuaFuBossManager.NextHeartBeatTicks) { KuaFuBossManager.NextHeartBeatTicks = nowTicks + 1020L; foreach (KuaFuBossScene 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_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 = 6; 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 = 6; scene.StateTimeData.State = (int)scene.m_eStatus; scene.StateTimeData.EndTicks = scene.m_lEndTime; GameManager.ClientMgr.BroadSpecialCopyMapMessage <GameSceneStateTimeData>(827, scene.StateTimeData, scene.CopyMap); } } 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 + (long)(scene.SceneInfo.ClearRolesSecs * 1000); scene.StateTimeData.GameType = 6; scene.StateTimeData.State = 5; scene.StateTimeData.EndTicks = scene.m_lLeaveTime; GameManager.ClientMgr.BroadSpecialCopyMapMessage <GameSceneStateTimeData>(827, scene.StateTimeData, scene.CopyMap); this.NotifySceneData(scene); } else { scene.ElapsedSeconds = (int)Math.Min((nowTicks - scene.m_lBeginTime) / 1000L, (long)scene.SceneInfo.TotalSecs); this.CheckCreateDynamicMonster(scene, ticks); if (nowTicks > scene.NextNotifySceneStateDataTicks) { scene.NextNotifySceneStateDataTicks = nowTicks + 3000L; this.NotifySceneData(scene); } } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_END) { GameManager.CopyMapMgr.KillAllMonster(scene.CopyMap); scene.m_eStatus = GameSceneStatuses.STATUS_AWARD; YongZheZhanChangClient.getInstance().PushGameResultData(scene.GameStatisticalData); YongZheZhanChangClient.getInstance().GameFuBenChangeState(scene.GameId, GameFuBenState.End, now); YongZheZhanChangFuBenData fuBenData; if (this.RuntimeData.FuBenItemData.TryGetValue(scene.GameId, out fuBenData)) { fuBenData.State = GameFuBenState.End; LogManager.WriteLog(LogTypes.Error, string.Format("跨服Boss跨服副本GameID={0},战斗结束", fuBenData.GameId), null, true); } } else if (scene.m_eStatus == GameSceneStatuses.STATUS_AWARD) { if (ticks >= scene.m_lLeaveTime) { copyMap.SetRemoveTicks(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, "跨服Boss系统清场调度异常"); } } } } } } } }
/// <summary> /// 添加一个场景 /// </summary> public bool AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType) { if (sceneType == SceneUIClasses.LangHunLingYu) { GameMap gameMap = null; if (!GameManager.MapMgr.DictMaps.TryGetValue(client.ClientData.MapCode, out gameMap)) { return(false); } int fuBenSeqId = copyMap.FuBenSeqID; int mapCode = copyMap.MapCode; int roleId = client.ClientData.RoleID; int gameId = (int)Global.GetClientKuaFuServerLoginData(client).GameId; DateTime now = TimeUtil.NowDateTime(); lock (RuntimeData.Mutex) { LangHunLingYuScene scene = null; if (!RuntimeData.SceneDict.TryGetValue(fuBenSeqId, out scene)) { LangHunLingYuFuBenData fuBenData; if (!RuntimeData.FuBenDataDict.TryGetValue(gameId, out fuBenData)) { LogManager.WriteLog(LogTypes.Error, "圣域争霸没有为副本找到对应的跨服副本数据,GameID:" + gameId); } scene = new LangHunLingYuScene(); scene.CleanAllInfo(); scene.GameId = gameId; RuntimeData.MapGridWidth = gameMap.MapGridWidth; RuntimeData.MapGridHeight = gameMap.MapGridHeight; int cityLevel = GetCityLevelById(fuBenData.CityId); if (!RuntimeData.CityLevelInfoDict.TryGetValue(cityLevel, out scene.LevelInfo)) { LogManager.WriteLog(LogTypes.Error, "圣域争霸没有为副本找到对应的城池等级配置:CityId=" + fuBenData.CityId); } scene.SceneInfo = client.SceneInfoObject as LangHunLingYuSceneInfo; DateTime startTime = now.Date.Add(GetStartTime(scene.LevelInfo.ID)); scene.StartTimeTicks = startTime.Ticks / 10000; scene.m_lEndTime = scene.StartTimeTicks + (scene.SceneInfo.PrepareSecs + scene.SceneInfo.FightingSecs) * TimeUtil.SECOND; InitScene(scene, client); RuntimeData.SceneDict[fuBenSeqId] = scene; scene.CityData.CityId = fuBenData.CityDataEx.CityId; scene.CityData.CityLevel = fuBenData.CityDataEx.CityLevel; LangHunLingYuBangHuiDataEx bangHuiDataEx; if (RuntimeData.BangHuiDataExDict.TryGetValue(fuBenData.CityDataEx.Site[0], out bangHuiDataEx)) { scene.LongTaOwnerData.OwnerBHid = bangHuiDataEx.Bhid; scene.LongTaOwnerData.OwnerBHName = bangHuiDataEx.BhName; scene.LongTaOwnerData.OwnerBHZoneId = bangHuiDataEx.ZoneId; } } scene.CopyMapDict[mapCode] = copyMap; int bhid = client.ClientData.Faction; if (!RuntimeData.BangHuiMiniDataCacheDict.ContainsKey(bhid)) { RuntimeData.BangHuiMiniDataCacheDict[bhid] = Global.GetBangHuiMiniData(bhid, client.ServerId); } LangHunLingYuClientContextData clientContextData; if (!scene.ClientContextDataDict.TryGetValue(roleId, out clientContextData)) { clientContextData = new LangHunLingYuClientContextData() { RoleId = roleId, ServerId = client.ServerId, BattleWhichSide = client.ClientData.BattleWhichSide }; scene.ClientContextDataDict[roleId] = clientContextData; } client.SceneObject = scene; client.SceneGameId = scene.GameId; client.SceneContextData2 = clientContextData; copyMap.SetRemoveTicks(scene.StartTimeTicks + scene.SceneInfo.TotalSecs * TimeUtil.SECOND); copyMap.IsKuaFuCopy = true; } //更新状态 YongZheZhanChangClient.getInstance().GameFuBenRoleChangeState(roleId, (int)KuaFuRoleStates.StartGame); return(true); } return(false); }