/// <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); }