using System; using System.Collections.Generic; using GCGame.Table; public class ActivityDataManager { //活动类型 public enum Activity_Type { ACTIVITY_INVALID = 0, ACTIVITY_MISSIONINSECTION, // 师门 ACTIVITY_ONEDRAGON, // 一条龙 ACTIVITY_STROYFB, // 剧情副本 ACTIVITY_GUILDPROBBERS, // 帮派大盗 ACTIVITY_IMPERIALEXAM, // 乡试 ACTIVITY_SNATCH_TREASURE, // 全民夺宝 ACTIVITY_FIGHTYARD, // 扬武校场 ACTIVITY_MISER, // 守财奴 ACTIVITY_PACKVETCH, // 采薇 ACTIVITYH_LUCKSTAR, // 福星高照 ACTIVITY_HUISHI, // 科举会试 ACTIVITY_FEAST, // 行酒令 ACTIVITY_GUILDFREIGHT, // 帮派货运 ACTIVITY_TYPE_DRAGONWAR, // 战龙堂 ACTIVITY_TYPE_GUILD_ESCORT, // 押镖A ACTIVITY_FACTIONCHALLENGE, // 门派挑战 ACTIVITY_FACTIONADVANCE, // 门派闯关。 ACTIVITY_TYPE_GUILD_UNION_MATCH, // 帮派联赛 ACTIVITY_TYPE_TREASURE_TASK, // 宝图任务 ACTIVITY_TYPE_GRAB_TREASURE, // 夺宝 ACTIVITY_TYPE_TREASURE_GLOD, // 夺宝摸金 ACTIVITY_TYPE_RINGMISSION, // 跑环任务 ACTIVITY_TYPE_WORLD_BOSS, // WorldBOSS 金猪报喜 ACTIVITY_TYPE_WEEKRINGMISSION = 25, // 周跑环任务 ACTIVITY_TYPE_TOMBRAIDER = 26, // 皇陵探宝 ACTIVITY_TYPE_GUIDBOSS = 27, // 帮BOSS ACTIVITY_TYPE_PVP = 28, // PVP ACTIVITY_TYPE_CROSSSERVERBOSS = 29, // 跨服BOSS CROSS_SER_ESCORT = 30, // 跨服押镖 CROSS_SER_ESCORT_DOUBLE = 31, // 跨服押镖双倍 CROSS_SER_CAPTUREFLAG = 32, // 跨服夺旗战 ACTIVITY_TYPE_BANQUET = 33, //婚宴 ACTIVITY_TYPE_EXERCISEROOM = 34, //练功房 ACTIVITY_TYPE_DAILYCOPY = 35, //日常副本 ACTIVITY_TYPE_BOSS = 36, //BOSS活动 //只用于同步活动完成次数 ACTIVITY_TYPE_ADVANCE_COPY = 50, // 进阶副本 ACTIVITY_TYPE_EQUIP_COPY = 51, // 装备副本 ACTIVITY_TYPE_MAINMISSION_COPY = 52, // 主线副本 } public enum ActivityState { None, //未开启 Playing, //已开启 Prepare, //即将开启 SignTimeDown,//报名倒计时 StartTimeDown,//进行倒计时 } public class ActivityData { public int activityID; public int activityServerType; public Tab_ActivityBase activityTab; public ActivityState activityState;//0未开启 1开启 2准备中 public int EndTime; //根据活动状态(activityState)代表的含义不一样 活动结束时间。-1永久 0结束 GlobalData.ServerAnsiTime和该值作比较 public bool HideTipIcon;//是否需要提前隐藏右上角活动提示图标 public int completetTimes;//活动完成次数 public int BossLeaveCount; //活动相关的BOSS剩余数 -1表示没有BOSS 0表示BOSS被杀完 public ActivityData() { Clear(); } private void Clear() { activityID = -1; activityServerType = (int)Activity_Type.ACTIVITY_INVALID; activityTab = null; activityState = 0; EndTime = -1; completetTimes = 0; BossLeaveCount = -1; HideTipIcon = false; } } private static ActivityDataManager _Instance; public static void ReSetData() { _Instance = default(ActivityDataManager); } public static ActivityDataManager Instance { get { if (_Instance == null) _Instance = new ActivityDataManager(); return _Instance; } } private ActivityDataManager() { InitActivityInfo(); } private void InitActivityInfo() { m_activityInfoServerTypeList.Clear(); m_activityInfoIDList.Clear(); var dic = TableManager.GetActivityBase().Values; foreach (var activity in dic) { ActivityData activityInfo = new ActivityData(); activityInfo.activityTab = activity; activityInfo.activityID = activity.Id; activityInfo.activityServerType = activity.ActivityServerType; m_activityInfoServerTypeList[activity.ActivityServerType] = activityInfo; m_activityInfoIDList[activity.Id] = activityInfo; } } private Dictionary m_activityInfoServerTypeList = new Dictionary(); private Dictionary m_activityInfoIDList = new Dictionary(); public ActivityData GetActivityDataByID(int activityID) { if (m_activityInfoServerTypeList.Count <= 0 || m_activityInfoIDList.Count <= 0) InitActivityInfo(); ActivityData data = null; if (m_activityInfoIDList.TryGetValue(activityID, out data)) return data; return null; } //处理部分活动不在ActivityBase中配置的特例 createNew public ActivityData GetActivityDataByServerType(int serverType, bool createNew = false) { if (m_activityInfoServerTypeList.Count <= 0 || m_activityInfoIDList.Count <= 0) InitActivityInfo(); ActivityData data = null; if (m_activityInfoServerTypeList.TryGetValue(serverType, out data) == false && createNew) { data = new ActivityData(); data.activityServerType = serverType; m_activityInfoServerTypeList[serverType] = data; } return data; } public Tab_ActivityBase GetActivityTabByID(int actitivtyID) { if (m_activityInfoServerTypeList.Count <= 0 || m_activityInfoIDList.Count <= 0) InitActivityInfo(); ActivityData data = null; if (m_activityInfoIDList.TryGetValue(actitivtyID, out data)) return data.activityTab; return null; } public Tab_ActivityBase GetActivityTabByServerType(ActivityDataManager.Activity_Type serverType) { if (m_activityInfoServerTypeList.Count <= 0 || m_activityInfoIDList.Count <= 0) InitActivityInfo(); ActivityData data = null; if (m_activityInfoServerTypeList.TryGetValue((int)serverType, out data)) return data.activityTab; return null; } public List GetAllActivityData() { if (m_activityInfoServerTypeList.Count <= 0 || m_activityInfoIDList.Count <= 0) InitActivityInfo(); List datas = new List(m_activityInfoServerTypeList.Values); foreach(var act in m_activityInfoIDList) { if (datas.Contains(act.Value) == false) datas.Add(act.Value); } return datas; } //判断活动的状态 public bool IsActivityState(int activityType,ActivityDataManager.ActivityState state) //state 0未开启 1已开启 2即将开启 { ActivityData activityData = GetActivityDataByServerType(activityType); if (activityData == null) return false; return activityData.activityState == state; } //获取活动完成次数 public int GetActivityCompleteTimes(int activityType,bool IsActivityIn = true) //IsActivityIn 是否需要判断活动数据有没有 true的话就返回-1 false 返回0 { ActivityData activityData = GetActivityDataByServerType(activityType); if (activityData == null) return IsActivityIn ? -1 : 0; //-1表示这个活动不存在 return activityData.completetTimes; } //获取活动剩余时间 public int GetActivityOverTime(int activityType) { ActivityData activityData = GetActivityDataByServerType(activityType); if (activityData == null) return 0; UnityEngine.Debug.LogError("GlobalData.ServerAnsiTime : "+ GlobalData.ServerAnsiTime); return activityData.EndTime - GlobalData.ServerAnsiTime; } //同步活动剩余时间 public void SyncActivityOverTime(int activityType,int leaveTime) { ActivityData activityData = GetActivityDataByServerType(activityType ,true); if (activityData == null) return; activityData.EndTime = GlobalData.ServerAnsiTime + leaveTime; } //同步活动完成次数 public void SyncActivityCompleteTimes(int activityType, int completetTimes) { ActivityData activityData = GetActivityDataByServerType(activityType, true); if (activityData == null) return; activityData.completetTimes = completetTimes; } //同步单个活动的状态 public ActivityData SyncActivityState(int activityType, int activityState) { ActivityData activityData = GetActivityDataByServerType(activityType,true); if (activityData == null) return null; activityData.activityState = (ActivityState)activityState; if(activityData.activityState!=ActivityState.Playing) activityData.BossLeaveCount = -1; return activityData; } //同步活动剩余BOSS数量 public void SyncActivityLeaveBoss(int activityType,int BossNumber) { ActivityData activityData = GetActivityDataByServerType(activityType,true); if (activityData == null) return; activityData.BossLeaveCount = BossNumber; } //同步服务器活动状态 public void SyncActitivtyInfo(GC_SYNC_ACTIVITY_STATE packet) { int Count = m_activityInfoServerTypeList.Count; for (int i = 0; i < packet.activityStateListCount; i++) { ActivityData activityData = SyncActivityState(packet.activityStateListList[i].ActivityType, packet.activityStateListList[i].State); if (activityData == null) continue; //if(activityData.activityTab!=null) // Module.Log.LogModule.ErrorLog(string.Format("name = {0} state = {1} {2}",activityData.activityTab.ActivityName,activityData.activityState, packet.activityStateListList[i].State)); activityData.EndTime = GlobalData.ServerAnsiTime + packet.activityStateListList[i].RemainTime; bool StartTip = false; if(packet.CacheLogin!=1 && activityData.activityTab!=null && string.IsNullOrEmpty(activityData.activityTab.StartTipImage) == false && activityData.activityTab.StartTipImage!="-1") { StartTip = ActivityStartTip.AddTip(activityData); } //Imperialexam(activityData, packet.CacheLogin, StartTip); FeastWine(activityData, packet.CacheLogin,StartTip); Huishi(activityData, packet.CacheLogin, StartTip); CrossServerBoss(activityData, packet.CacheLogin, StartTip); BossActivity(activityData, packet.CacheLogin, StartTip); //FightYard(activityData, packet.CacheLogin, StartTip); } ActivityStartTip.OPenTip(null); } #region 特殊活动的一些处理 //乡试 private void Imperialexam(ActivityData activityData, int CacheLogin,bool StartTip) { if (activityData.activityServerType != (int)Activity_Type.ACTIVITY_IMPERIALEXAM) return; if (CacheLogin != 1 && StartTip==false && activityData.activityState == ActivityDataManager.ActivityState.Playing && activityData.completetTimes < 20 && GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level >= activityData.activityTab.Level) //开启乡试 { MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{2184}"), "", delegate () { //打开会试面板 UIManager.ShowUI(UIInfo.ImperialExamPanel, delegate (bool bSucess, object param) { if (bSucess) { //设置类型 ImpreialExamPanelCtr.Instance.SetMyQuestionType((int)Activity_Type.ACTIVITY_IMPERIALEXAM); } }); }); } } //行酒令 public void FeastWine() { ActivityData activityData = GetActivityDataByServerType((int)Activity_Type.ACTIVITY_FEAST); FeastWine(activityData, 0,true); } private void FeastWine(ActivityData activityData, int CacheLogin,bool StartTip) { if (activityData == null || activityData.activityServerType != (int)Activity_Type.ACTIVITY_FEAST) { return; } if(activityData.activityState == ActivityDataManager.ActivityState.Prepare) { GameManager.gameManager.PlayerDataPool.GuildInfo.GuildWineDrinkState = 1; GameManager.gameManager.PlayerDataPool.GuildInfo.GuildWineCollectState = 1; return; } var tab_GuildOther = TableManager.GetGuildOtherByID(0, 0); if (GameManager.gameManager.PlayerDataPool.IsHaveGuild() && tab_GuildOther != null && tab_GuildOther.SceneId == GameManager.gameManager.RunningScene && activityData.activityState == ActivityDataManager.ActivityState.Playing && SceneData.sceneGuildGuid != Games.GlobeDefine.GlobeVar.INVALID_GUID && SceneData.sceneGuildGuid == GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid && GameManager.gameManager.PlayerDataPool.GuildInfo.FeastState == 1) { UIManager.ShowUI(UIInfo.GuildWine); } else { UIManager.CloseUI(UIInfo.GuildWine); } if (StartTip == false && CacheLogin != 1 && activityData.activityState == ActivityDataManager.ActivityState.Playing) { MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{28007}"), null, delegate () { if (GameManager.gameManager.PlayerDataPool.IsHaveGuild() == false) { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{28006}")); } else { GameManager.gameManager.AutoSearch.BackGuild(GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid, -1, 0, 0); } }, null); } } //科举会试 private void Huishi(ActivityData activityData, int CacheLogin,bool StartTip) { if (activityData.activityServerType != (int)Activity_Type.ACTIVITY_HUISHI) { return; } if (activityData.activityState == ActivityDataManager.ActivityState.Playing) { CG_REQ_QUESTION answerQuestion = (CG_REQ_QUESTION)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_QUESTION); answerQuestion.SetReqType((int)ImpreialExamPanelCtr.Question_Type.QUESTION_XIANGSHI); answerQuestion.SetAnswer(0); answerQuestion.SendPacket(); } } //跨服BOSS private void CrossServerBoss(ActivityData activityData, int CacheLogin,bool StartTip) { if (activityData.activityServerType != (int)Activity_Type.ACTIVITY_TYPE_CROSSSERVERBOSS) { return; } if (GameManager.gameManager.RunningScene != Games.GlobeDefine.GlobeVar.CROSSSERVERSCENEID) return; if(activityData.activityState== ActivityDataManager.ActivityState.Playing) { if (CrossServerCopyInfoCtr.Instance != null && CrossServerCopyInfoCtr.Instance.gameObject.activeSelf) CrossServerCopyInfoCtr.Instance.gameObject.SetActive(false); UIManager.ShowUI(UIInfo.CrossServerBossInfo); if (CrossServerMap.Instance != null) CrossServerMap.Instance.InitCrossServerBoss(); if (CrossServerCopyInfoCtr.Instance != null) CrossServerCopyInfoCtr.Instance.gameObject.SetActive(false); } else { if (CrossServerCopyInfoCtr.Instance != null && CrossServerCopyInfoCtr.Instance.gameObject.activeSelf == false) CrossServerCopyInfoCtr.Instance.gameObject.SetActive(true); UIManager.CloseUI(UIInfo.CrossServerBossInfo); if (CrossServerMap.Instance != null) CrossServerMap.Instance.InitCrossServerBoss(false); if (CrossServerCopyInfoCtr.Instance != null) CrossServerCopyInfoCtr.Instance.gameObject.SetActive(true); } if (StartTip == false && activityData.activityState == ActivityDataManager.ActivityState.Playing && activityData.activityTab.Level <= GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level && CacheLogin!=1) { BossActitvtyMsgBox("#{49036}",3); } } private void BossActitvtyMsgBox(string StrID,int index) { var TabBosss = TableManager.GetWorldBossConfig().Values; foreach (var TabBoss in TabBosss) { if (TabBoss != null && TabBoss.Level <= GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level && GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID != TabBoss.FubenID) { MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString(StrID), null, delegate () { UIManager.ShowUI(UIInfo.Boss, delegate (bool bSuccess, object param) { BossUI worldBoss = UIManager.GetUIComponent(UIInfo.Boss); if (worldBoss != null) { worldBoss.ShowPage((int)param); } }, index); }); break; } } } //BOSS private void BossActivity(ActivityData activityData, int CacheLogin,bool StartTip) { if (activityData.activityServerType != (int)Activity_Type.ACTIVITY_TYPE_BOSS) { return; } if (StartTip == false && activityData.activityState == ActivityDataManager.ActivityState.Playing && activityData.activityTab.Level <= GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level && CacheLogin != 1) { BossActitvtyMsgBox("#{49006}", 1); } } //关宁 private void FightYard(ActivityData activityData, int CacheLogin,bool StartTip) { if (activityData.activityServerType != (int)Activity_Type.ACTIVITY_FIGHTYARD) { return; } if (StartTip == false && GameManager.gameManager.RunningScene != (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_GUANNING && activityData.activityState == ActivityDataManager.ActivityState.Playing && activityData.activityTab.Level <= GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level && CacheLogin != 1) { MessageBoxLogic.OpenOKCancelBox(8104, -1, delegate() { GuanningRegistLogic.InitGuanningRegist(); }); } } #endregion }