using UnityEngine; using System.Collections; using GCGame; using System.Collections.Generic; using Games.GlobeDefine; using Games.UserCommonData; using GCGame.Table; using System; using UnityEngine.UI; using Games.Mission; using Module.Log; public class ActivityController : UIControllerBase { #region static public static void ShowUI() { UIManager.ShowUI(UIInfo.Activity); } #endregion void Awake() { InitValRewContainer(); } void InitValRewContainer() { StartCoroutine(CreateValRew()); } void ReqValRewStateAndDailyVal() { ReqDailyActValInfo req = new ReqDailyActValInfo(); req.flag = 1; req.SendMsg(); } public void OnValPacket(RetDailyActValInfo packet) { for(int index = 0; index < _ValRewItemList.Count && index < packet.rewardList.Count; index++) { _ValRewItemList[index].RefreshItemState(packet.rewardList[index]); } InitMyActivitiesness(); } public GameObject _ValRewItemPrefab; public Transform _ValRewItemParent; private List _ValRewItemList = new List(); IEnumerator CreateValRew() { List valRewIdList = new List(); var ValRewDic = TableManager.GetActivityValRew(); foreach (var tab in ValRewDic) { if (!valRewIdList.Contains(tab.Key)) valRewIdList.Add(tab.Key); } var needCreateCount = valRewIdList.Count - _ValRewItemList.Count; for(int index = 0; index < needCreateCount; index++) { GameObject item = Instantiate(_ValRewItemPrefab) as GameObject; item.transform.SetParent(_ValRewItemParent); item.transform.localScale = Vector3.one; item.transform.localRotation = Quaternion.Euler(Vector3.zero); item.transform.localPosition = Vector3.zero; _ValRewItemList.Add(item.GetComponent()); } var Slidewidth = m_Slider.gameObject.GetComponent().sizeDelta.x; for (int index = 0; index < _ValRewItemList.Count; index++) _ValRewItemList[index].InitItem(valRewIdList[index], Slidewidth); //在创建完的时候再同步一次协议,防止OnEnable的时候这边还没有创建完 ReqValRewStateAndDailyVal(); yield break; } private static int _MaxActivityVal = -1; public static int GetCurLevelMaxVal() { if (_MaxActivityVal != -1) return _MaxActivityVal; var level = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level; var valTab = TableManager.GetActValLimitByID(level, 0); if (valTab != null) _MaxActivityVal = valTab.ActValLimit; return _MaxActivityVal; } void OnEnable() { preLoadAllActivities(); //ReqSyncServerTime(); SetInstance(this); InitMyActivitiesness(); OnToggleOn(0); ReqActivityHeadExp(); ReqValRewStateAndDailyVal(); } public static void Show(Acticity_Type actType) { UIManager.ShowUI(UIInfo.Activity, (bool isSuccess, object param) => { if(isSuccess) { ActivityController.Instance().OnToggleOn((int)actType); } }); } public void ReqActivityHeadExp() { CG_REQ_ACTIVITY_HEAD_EXP_LIST req = (CG_REQ_ACTIVITY_HEAD_EXP_LIST)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ACTIVITY_HEAD_EXP_LIST); req.Nilparam = 1; req.SendPacket(); } public void ReqSyncServerTime() { var cgBeat = (CG_CONNECTED_HEARTBEAT)PacketDistributed.CreatePacket(MessageID.PACKET_CG_CONNECTED_HEARTBEAT); cgBeat.SetIsresponse(1); cgBeat.SendPacket(); } void OnDisable() { SetInstance(null); _isNeedPosActItemId = -1; } public void CloseWindow() { UIManager.CloseUI(UIInfo.Activity); } public enum Acticity_Type { ACTIVITY_INVALID = -1, ACTIVITY_DAILY = 0, //全部任务 ACTIVITY_LIMITTIME= 1, //限时 ACTIVITY_EXP = 2, //经验 ACTIVITY_EQUIP = 4, //装备 ACTIVITY_TRIBUTE = 8, //帮贡 } public List _MenuMarkobjList; public int m_TotalActicitiesTypeCount = 4; //活动所拥有的类型 日常为全部活动 //分类过的活动 此int为活动类型 private List m_SortAllActivities = new List(); //分类后的活动 存储的是任务ID public Dictionary> AllTypeActivityDic = new Dictionary>(); private List DailyMissionList = new List(); // 日常活动 private List ExpMissionList = new List(); // 经验任务 private List LimitTimeMissionList = new List(); // 限时活动 private List EquipMissionList = new List(); // 装备任务 private List TributeMissionList = new List(); // 帮贡任务 //最后一次选择的活动类型下标 public int m_SelectedIndex = -1; public UIContainerSelect _ItemsContainer; //周历 public GameObject m_ActivitiesInTimePage; public List _MenuItemRedIconList; public void ClearAllList() { //if (MissionDic.Count > 0) //{ // MissionDic.Clear(); //} if (DailyMissionList.Count > 0) { DailyMissionList.Clear(); } if (LimitTimeMissionList.Count > 0) { LimitTimeMissionList.Clear(); } if (ExpMissionList.Count > 0) { ExpMissionList.Clear(); } if (EquipMissionList.Count > 0) { EquipMissionList.Clear(); } if (TributeMissionList.Count > 0) { TributeMissionList.Clear(); } if (m_SortAllActivities.Count > 0) { m_SortAllActivities.Clear(); } } //活力值 public Text m_ActivitiesNessText; public Slider m_Slider; private int _MaxDailyVal = -1; public void InitMyActivitiesness() { int m_ActValue = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.DailyActivityVal; //获取服务器同步的角色活力值 if(_MaxDailyVal == -1) { foreach (var tab in TableManager.GetActivityValRew()) if (_MaxDailyVal < tab.Key) _MaxDailyVal = tab.Key; } m_ActivitiesNessText.text = StrDictionary.GetClientDictionaryString("#{3139}", m_ActValue, _MaxDailyVal); //m_ActValue + "/" + m_LimitVal; //设置Progress的进度 m_Slider.value = (float)m_ActValue / (float)_MaxDailyVal; } IEnumerator SortActicitiesByType() //筛选今天可以参加的活动 { yield return new WaitForEndOfFrame(); //分类之前先进行清除 ClearAllList(); foreach (var m_Activity in TableManager.GetActivityBase().Values) { if (m_Activity.IsShow != 1) continue; int m_ActivityType = m_Activity.ActivityType; if (IsTodayOpen(m_Activity.Id)) { var activityBase = TableManager.GetActivityBaseByID(m_Activity.Id, 0); if(activityBase != null && activityBase.ActivityType != 1) DailyMissionList.Add(m_Activity.Id); //日常活动存储全部的活动(在周期内的活动) } //位运算 判断属于哪种类型 for(int index = 0; index < m_TotalActicitiesTypeCount; index++) { int m_Type = (int)Math.Pow(2, index); if((m_ActivityType & m_Type) != 0) { if (IsTodayOpen(m_Activity.Id)) //在开启周期内 { if (m_Type == (int)Acticity_Type.ACTIVITY_EXP) { ExpMissionList.Add(m_Activity.Id); } if (m_Type == (int)Acticity_Type.ACTIVITY_LIMITTIME) { LimitTimeMissionList.Add(m_Activity.Id); } if (m_Type == (int)Acticity_Type.ACTIVITY_EQUIP) { EquipMissionList.Add(m_Activity.Id); } if (m_Type == (int)Acticity_Type.ACTIVITY_TRIBUTE) { TributeMissionList.Add(m_Activity.Id); } } } } } DailyMissionList = SetMyActivityState(DailyMissionList); ExpMissionList = SetMyActivityState(ExpMissionList); LimitTimeMissionList = SetMyActivityState(LimitTimeMissionList); EquipMissionList = SetMyActivityState(EquipMissionList); TributeMissionList = SetMyActivityState(TributeMissionList); ////初始化全部的活动按钮 //yield return StartCoroutine(InitMyActivityItemByType(Acticity_Type.ACTIVITY_DAILY)); OnToggleOn(0); yield break; } public bool IsUnLimitActivity(int actId) { var activityBase = TableManager.GetActivityBaseByID(actId, 0); if (activityBase == null) return false; if (activityBase.ActityLimitTimes == -1) return true; return false; } public void RefreshMenuItemRedIconState() { bool limitShow = false; for(int index = 0; index < LimitTimeMissionList.Count; index++) { if(IsOnOpenAndCanJoin(LimitTimeMissionList[index]) && !IsUnLimitActivity(LimitTimeMissionList[index])) { var activityBase = TableManager.GetActivityBaseByID(LimitTimeMissionList[index], 0); if (activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDFREIGHT || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_FEAST || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_ESCORT || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_DRAGONWAR || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUIDBOSS || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDPROBBERS) { if (GameManager.gameManager.PlayerDataPool.IsHaveGuild()) { limitShow = true; } } else { limitShow = true; } if(limitShow) break; } } _MenuItemRedIconList[1].SetActive(limitShow); bool equipShow = false; for (int index = 0; index < ExpMissionList.Count; index++) { if (IsOnOpenAndCanJoin(ExpMissionList[index]) && !IsUnLimitActivity(LimitTimeMissionList[index])) { var activityBase = TableManager.GetActivityBaseByID(ExpMissionList[index], 0); if (activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDFREIGHT || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_FEAST || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_ESCORT || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_DRAGONWAR || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUIDBOSS || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDPROBBERS) { if (GameManager.gameManager.PlayerDataPool.IsHaveGuild()) { equipShow = true; } } else { equipShow = true; } if(equipShow) break; } } _MenuItemRedIconList[2].SetActive(equipShow); bool expShow = false; for (int index = 0; index < EquipMissionList.Count; index++) { if (IsOnOpenAndCanJoin(EquipMissionList[index]) && !IsUnLimitActivity(LimitTimeMissionList[index])) { var activityBase = TableManager.GetActivityBaseByID(EquipMissionList[index], 0); if (activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDFREIGHT || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_FEAST || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_ESCORT || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_DRAGONWAR || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUIDBOSS || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDPROBBERS) { if (GameManager.gameManager.PlayerDataPool.IsHaveGuild()) { expShow = true; } } else { expShow = true; } if(expShow) break; } } _MenuItemRedIconList[3].SetActive(expShow); bool tributeShow = false; for (int index = 0; index < TributeMissionList.Count; index++) { if (IsOnOpenAndCanJoin(TributeMissionList[index]) && !IsUnLimitActivity(LimitTimeMissionList[index])) { var activityBase = TableManager.GetActivityBaseByID(TributeMissionList[index], 0); if (activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDFREIGHT || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_FEAST || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_ESCORT || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_DRAGONWAR || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUIDBOSS || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDPROBBERS) { if (GameManager.gameManager.PlayerDataPool.IsHaveGuild()) { tributeShow = true; } } else { tributeShow = true; } if(tributeShow) break; } } _MenuItemRedIconList[4].SetActive(tributeShow); _MenuItemRedIconList[0].SetActive(limitShow || expShow || equipShow || tributeShow); } //今天是否开启该任务 public static bool IsTodayOpen(int m_ItemInfoId) { Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(m_ItemInfoId, 0); if (activityBase == null) return false; int m_ServerTime = GlobalData.ServerAnsiTime; DateTime dt = GCGame.Utils.GetServerDateTime(); int m_OnTime = (int)dt.DayOfWeek; string[] m_TabOnTime = activityBase.Recurrent.Split('|'); for(int index = 0; index < m_TabOnTime.Length; index++) { if(m_OnTime == int.Parse(m_TabOnTime[index])) { return true; } } return false; } /// /// 通过类型获取活动的数量 /// /// /// public int GetActivitiesCountByType(int type) { //获取之前先排序吧 //SortActicitiesByType(); int m_Count = 0; int m_Type = (int)Math.Pow(2, type - 1); switch(m_Type) { case (int)Acticity_Type.ACTIVITY_DAILY: if(DailyMissionList == null) { m_Count = -1; break; } m_Count = DailyMissionList.Count; break; case (int)Acticity_Type.ACTIVITY_EXP: if (ExpMissionList == null) { m_Count = -1; break; } m_Count = ExpMissionList.Count; break; case (int)Acticity_Type.ACTIVITY_LIMITTIME: if (LimitTimeMissionList == null) { m_Count = -1; break; } m_Count = LimitTimeMissionList.Count; break; case (int)Acticity_Type.ACTIVITY_EQUIP: if (EquipMissionList == null) { m_Count = -1; break; } m_Count = EquipMissionList.Count; break; case (int)Acticity_Type.ACTIVITY_TRIBUTE: if (TributeMissionList == null) { m_Count = -1; break; } m_Count = TributeMissionList.Count; break; default: m_Count = 0; break; } return m_Count; } public void preLoadAllActivities() { //分类活动类型 StartCoroutine(SortActicitiesByType()); } /// /// 通过活动的类型来初始化对应活动界面 /// /// IEnumerator InitMyActivityItemByType(Acticity_Type m_ActivityType) { yield return new WaitForEndOfFrame(); switch(m_ActivityType) { case Acticity_Type.ACTIVITY_DAILY: _ItemsContainer.InitSelectContent(DailyMissionList, null); break; case Acticity_Type.ACTIVITY_EXP: _ItemsContainer.InitSelectContent(ExpMissionList, null); break; case Acticity_Type.ACTIVITY_EQUIP: _ItemsContainer.InitSelectContent(EquipMissionList, null); break; case Acticity_Type.ACTIVITY_LIMITTIME: _ItemsContainer.InitSelectContent(LimitTimeMissionList, null); break; case Acticity_Type.ACTIVITY_TRIBUTE: _ItemsContainer.InitSelectContent(TributeMissionList, null); break; default: _ItemsContainer.InitSelectContent(null, null); break; } ShowItemByActId(_isNeedPosActItemId); yield break; } public Acticity_Type GetActivitiesTypeByIndex(int index) { if(index == 0) { return Acticity_Type.ACTIVITY_DAILY; } int m_Type = (int)Math.Pow(2, index - 1); switch(m_Type) { case (int)Acticity_Type.ACTIVITY_EXP: return Acticity_Type.ACTIVITY_EXP; case (int)Acticity_Type.ACTIVITY_EQUIP: return Acticity_Type.ACTIVITY_EQUIP; case (int)Acticity_Type.ACTIVITY_LIMITTIME: return Acticity_Type.ACTIVITY_LIMITTIME; case (int)Acticity_Type.ACTIVITY_TRIBUTE: return Acticity_Type.ACTIVITY_TRIBUTE; default: return Acticity_Type.ACTIVITY_INVALID; } } //tag public void OnToggleOn(int index) { for(int _Index = 0; _Index < _MenuMarkobjList.Count; _Index++) { _MenuMarkobjList[_Index].SetActive(index == _Index); } if (m_SelectedIndex != index) _isNeedPosActItemId = -1; m_SelectedIndex = index; SortActivityList(m_SelectedIndex); StartCoroutine(InitMyActivityItemByType(GetActivitiesTypeByIndex(index))); RefreshMenuItemRedIconState(); } public void RefreshActvityItemState() { SortActivityList(m_SelectedIndex); StartCoroutine(InitMyActivityItemByType(GetActivitiesTypeByIndex(m_SelectedIndex))); RefreshMenuItemRedIconState(); } public void SortActivityList(int index) { switch((int)GetActivitiesTypeByIndex(index)) { case (int)Acticity_Type.ACTIVITY_DAILY: SetMyActivityState(DailyMissionList); break; case (int)Acticity_Type.ACTIVITY_EXP: SetMyActivityState(ExpMissionList); break; case (int)Acticity_Type.ACTIVITY_EQUIP: SetMyActivityState(EquipMissionList); break; case (int)Acticity_Type.ACTIVITY_LIMITTIME: SetMyActivityState(LimitTimeMissionList); break; case (int)Acticity_Type.ACTIVITY_TRIBUTE: SetMyActivityState(TributeMissionList); break; } } //打开周历 public void myWeekButtonClick() { m_ActivitiesInTimePage.SetActive(true); } #region 获取时间状态 public enum ActivityTimeType { WillOpen = 0, //将要开启 还未结束 IsGoing = 1, //正在进行 Finish = 2, //已结束 WillOpenButShow = 3, //配置需求显示,实际未到时间 } public static int GetActivityTimeState(int m_AcId) { Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(m_AcId, 0); if (activityBase == null) return -1; int activityOpenTime = 0; int activityEndTime = 0; DateTime dt = Utils.GetServerDateTime(); //获取服务器的小时 分钟 int hour = dt.Hour; int minute = dt.Minute; int currentServerTimeToTabTime = hour * 100 + minute; //例如:2200 2100 int maxEndTime = 0; //记录最大时间(超过最大时间则是已结束) //获得最后一次结束时间 for (int index = 0; index < activityBase.getTimeCount(); index++) { if (!activityBase.GetTimebyIndex(index).Equals("-1")) { activityOpenTime = int.Parse(activityBase.GetTimebyIndex(index).Split('|')[0]); activityEndTime = int.Parse(activityBase.GetTimebyIndex(index).Split('|')[1]); if (activityEndTime > maxEndTime) { maxEndTime = activityEndTime; } } } if (ActivityDataManager.Instance.IsActivityState(activityBase.ActivityServerType, ActivityDataManager.ActivityState.Playing)) return (int)ActivityTimeType.IsGoing; if (currentServerTimeToTabTime >= maxEndTime) { return (int)ActivityTimeType.Finish; //活动已结束 }else { if(currentServerTimeToTabTime >= activityOpenTime && activityBase.IsOpenWhenWaiting == 1) { if((activityBase.ActivityType & 1) == 1) //限时活动 return (int)ActivityTimeType.WillOpenButShow; else return (int)ActivityTimeType.IsGoing; } else { return (int)ActivityTimeType.WillOpen; //活动未开启 } } } #endregion public static bool IsLevelEnough(int activityId) { Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(activityId, 0); if (activityBase == null) { return false; } if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level >= activityBase.Level) { return true; } return false; } public static bool IsOnOpenTime(int activityId) { Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(activityId, 0); if (activityBase == null) return false; if (GetActivityTimeState(activityId) == 1) return true; else return false; } public static bool IsCompleted(int activityId) { Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(activityId, 0); if (activityBase == null) return false; if (activityBase.ActityLimitTimes == -1) return false; if (activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_EXERCISEROOM) return ActivityDataManager.Instance.GetActivityCompleteTimes(activityBase.ActivityServerType) <= 0; var complete = ActivityDataManager.Instance.GetActivityCompleteTimes(activityBase.ActivityServerType); return complete >= 0 && complete >= activityBase.ActityLimitTimes; } public static void ClickActive(int activityID) { Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(activityID, 0); if (activityBase == null) { return; } string parameter = activityBase.Parameter; int m_ParamType = activityBase.ParameterType; var _serverType = activityBase.ActivityServerType; //副本中屏蔽点击 Tab_SceneClass sceneClass = TableManager.GetSceneClassByID(GameManager.gameManager.RunningScene, 0); if (sceneClass != null && m_ParamType != (int)ActivityItem.Parameter_type.OPENUI) { if (sceneClass.Type == 2 && GameManager.gameManager.RunningScene != (int)GameDefine_Globe.SCENE_DEFINE.SCENE_GUILD) //副本 { //副本中屏蔽点击 GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{46208}")); return; } } //点击的时候再做一次时间判断 if (ActivityController.Instance()) { if (ActivityController.Instance().IsLimitMission(activityBase)) { if (ActivityController.Instance().IsFinish(activityID) /*|| (GlobalData.ActivityStateDic.ContainsKey(activityBase.ActivityServerType)) && GlobalData.ActivityStateDic[activityBase.ActivityServerType] == 0*/) //活动已经结束 { return; } } } if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_TREASURE_GLOD) { CG_TREASURE_GOLD_OPTION send = (CG_TREASURE_GOLD_OPTION)PacketDistributed.CreatePacket(MessageID.PACKET_CG_TREASURE_GOLD_OPTION); send.SetOptiontype(5); send.SendPacket(); return; } switch (m_ParamType) { case (int)ActivityItem.Parameter_type.CHUANSONG: //传送 if (activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH) { if (GameManager.gameManager.RunningScene != GlobeVar.GUILDMATCH_MAINFUBENID && ActivityDataManager.Instance.IsActivityState((int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH, ActivityDataManager.ActivityState.Playing)) { MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{29036}"), null, delegate () { GCGame.Utils.EnterCopy((int)GameDefine_Globe.SCENE_DEFINE.SCENE_GUILDWARMAIN); }, null); } else { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{25137}")); } return; } Tab_SceneClass sceneInfo = TableManager.GetSceneClassByID(int.Parse(parameter), 0); if (sceneInfo != null) { var m_curShowSceneID = sceneInfo.SceneID; if (m_curShowSceneID >= 0 && Singleton.GetInstance().MainPlayer != null && m_curShowSceneID != GameManager.gameManager.RunningScene) { if (GCGame.Utils.IsCanPK(int.Parse(parameter)) && !GCGame.Utils.IsIncPKValue(m_curShowSceneID)) { MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{2672}"), "", () => { EnterNonePKValueSceneOK(m_curShowSceneID); }); } else { EnterNonePKValueSceneOK(m_curShowSceneID); } } return; } break; case (int)ActivityItem.Parameter_type.FINDWAY: Tab_AutoSearch autoSearch = TableManager.GetAutoSearchByID(int.Parse(parameter), 0); if (autoSearch == null) { return; } //接受任务后自动寻路 Vector3 targetPos = new Vector3(); targetPos.x = autoSearch.X; targetPos.z = autoSearch.Z; int nTargetScene = autoSearch.DstSceneID; AutoSearchPoint point = new AutoSearchPoint(nTargetScene, targetPos.x, targetPos.z); if (GameManager.gameManager && GameManager.gameManager.AutoSearch) { GameManager.gameManager.AutoSearch.BuildPath(point); Tab_RoleBaseAttr RoleBase = TableManager.GetRoleBaseAttrByID(autoSearch.DataId, 0); // 确定NPC存在,并且寻路信息已经构建 if (null != RoleBase && null != GameManager.gameManager.AutoSearch.Path) { GameManager.gameManager.AutoSearch.Path.AutoSearchTargetName = RoleBase.Name; GameManager.gameManager.AutoSearch.Path.autoSearchRadius = RoleBase.DialogRadius; UIManager.CloseUI(UIInfo.Activity); } } break; case (int)ActivityItem.Parameter_type.OPENUI: if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUIDBOSS) { if (!GameManager.gameManager.PlayerDataPool.IsHaveGuild()) { // 加入帮派提醒 GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{6707}")); return; } } if(_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_FACTIONCHALLENGE) { UIManager.ShowUI(UIInfo.SportsPanel, delegate(bool bSucess, object param) { if(bSucess) { SportsPanel.Instance.OnMenuItemClick((int)SportsPanel.SportsType.FactionChallenge); } }); return; } else if(_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_FIGHTYARD) { UIManager.ShowUI(UIInfo.SportsPanel, delegate (bool bSucess, object param) { if (bSucess) { SportsPanel.Instance.OnMenuItemClick((int)SportsPanel.SportsType.Yanwu); } }); return; } else if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH) { UIManager.ShowUI(UIInfo.SportsPanel, delegate (bool bSucess, object param) { if (bSucess) { SportsPanel.Instance.OnMenuItemClick((int)SportsPanel.SportsType.Guild); } }); return; } else if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_TREASURE_GLOD) { UIManager.ShowUI(UIInfo.SportsPanel, delegate (bool bSucess, object param) { if (bSucess) { SportsPanel.Instance.OnMenuItemClick((int)SportsPanel.SportsType.Digong); } }); return; } else if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_PVP) { UIManager.ShowUI(UIInfo.SportsPanel, delegate (bool bSucess, object param) { if (bSucess) { SportsPanel.Instance.OnMenuItemClick((int)SportsPanel.SportsType.Pvp); } }); return; } UIManager.CloseUI(UIInfo.Activity); UIManager.ShowUI(UIPathData.m_DicUIName[parameter], delegate (bool bSucess, object param) { if (bSucess) { if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_IMPERIALEXAM) { ImpreialExamPanelCtr.Instance.SetMyQuestionType((int)ActivityDataManager.Activity_Type.ACTIVITY_IMPERIALEXAM); return; } if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_HUISHI) { ImpreialExamPanelCtr.Instance.AskQuestionInfo((int)ImpreialExamPanelCtr.Question_Type.QUESTION_HUISHI); return; } if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_MISER) { Hashtable table = new Hashtable(); table["ActiveType"] = (int)ActivityDataManager.Activity_Type.ACTIVITY_MISER; Games.Events.EventDispatcher.Instance.SendMessage(Games.Events.EventId.OpenActivePresiousWnd, table); } if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_PACKVETCH) { Hashtable table = new Hashtable(); table["ActiveType"] = (int)ActivityDataManager.Activity_Type.ACTIVITY_PACKVETCH; Games.Events.EventDispatcher.Instance.SendMessage(Games.Events.EventId.OpenActivePresiousWnd, table); } if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITYH_LUCKSTAR) { Hashtable table = new Hashtable(); table["ActiveType"] = (int)ActivityDataManager.Activity_Type.ACTIVITYH_LUCKSTAR; Games.Events.EventDispatcher.Instance.SendMessage(Games.Events.EventId.OpenActivePresiousWnd, table); } if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_CROSSSERVERBOSS) { if (BossUI.Instance() != null) BossUI.Instance().ShowPage(3); } if (_serverType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_BOSS) { if (BossUI.Instance() != null) BossUI.Instance().ShowPage(1); } } }); break; case (int)ActivityItem.Parameter_type.HUIBANG: //传送回帮派 { if (GameManager.gameManager.PlayerDataPool.IsHaveGuild() == false) { // 加入帮派提醒 GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{6707}")); return; } if (activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDPROBBERS) { //帮派等级小于4返回 var guidTab = TableManager.GetGuildOtherByID(0, 0); if (guidTab == null) { LogModule.ErrorLog("guidTab is null"); return; } if (GameManager.gameManager.PlayerDataPool.GuildInfo.GuildLevel < guidTab.RobberNeedGuildLevel) { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{6709}")); return; } } if (activityBase.Parameter.Equals("-1")) { var guid = GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid; var mainPlayer = ObjManager.Instance.MainPlayer; if (mainPlayer != null) mainPlayer.BackGuildMap(guid); else { // 保持之前玩家未创建也可以发送协议的逻辑 var send = (CG_REQ_ENTER_GUILDMAP)PacketDistributed.CreatePacket(MessageID .PACKET_CG_REQ_ENTER_GUILDMAP); send.SetGuildGuid(guid); send.SendPacket(); } } else { string[] paramaters = activityBase.Parameter.Split('|'); int roleId = int.Parse(paramaters[0]); float posX = float.Parse(paramaters[1]); float posZ = float.Parse(paramaters[2]); GameManager.gameManager.AutoSearch.BackGuild(GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid, int.Parse(paramaters[0]), float.Parse(paramaters[1]), float.Parse(paramaters[2])); } UIManager.CloseUI(UIInfo.Activity); } break; case (int)ActivityItem.Parameter_type.LOACL_CALLBACK: //本地回调函数 { //需要确保方法是静态公有的,其他地方也会用到,不要和UI绑一起 var method = typeof(ActivityController).GetMethod(parameter, System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); if(method != null) method.Invoke(null, new object[0]); //if (GameManager.gameManager) //{ // GameManager.gameManager.Invoke(parameter, 0); //} } break; case (int)ActivityItem.Parameter_type.MISSIONINSEC: int autosearchId = Games.GlobeDefine.GlobeVar.GetMasterAutosearchId(GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession); Tab_AutoSearch searchTab = TableManager.GetAutoSearchByID(autosearchId, 0); if (searchTab == null) { return; } //接受任务后自动寻路 Vector3 pos = new Vector3(); pos.x = searchTab.X; pos.z = searchTab.Z; int sceneId = searchTab.DstSceneID; AutoSearchPoint targetPoint = new AutoSearchPoint(sceneId, pos.x, pos.z); if (GameManager.gameManager && GameManager.gameManager.AutoSearch) { GameManager.gameManager.AutoSearch.BuildPath(targetPoint); Tab_RoleBaseAttr RoleBase = TableManager.GetRoleBaseAttrByID(searchTab.DataId, 0); if (null != RoleBase && null != GameManager.gameManager.AutoSearch.Path) { GameManager.gameManager.AutoSearch.Path.AutoSearchTargetName = RoleBase.Name; GameManager.gameManager.AutoSearch.Path.autoSearchRadius = RoleBase.DialogRadius; UIManager.CloseUI(UIInfo.Activity); } } break; case (int)ActivityItem.Parameter_type.OPENPERIOUS: { if (GameManager.gameManager.PlayerDataPool.IsHaveGuild() == false) { // 加入帮派提醒 GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{6707}")); return; } UIManager.ShowUI(UIInfo.ActivePresious, OpenActivePresiousWnd, activityBase.ActivityServerType); } break; case (int)ActivityItem.Parameter_type.ENTEREXERCISEROOM: ReqEnterExerciseRoom req = new ReqEnterExerciseRoom(); req.flag = 1; req.SendMsg(); UIManager.CloseUI(UIInfo.Activity); break; case (int)ActivityItem.Parameter_type.ENTERCOPY: int fubenID = -1; if(int.TryParse(parameter,out fubenID) && fubenID != GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID) { Tab_Fuben fubenInfo = TableManager.GetFubenByID(fubenID); if (fubenInfo != null) { if (Singleton.GetInstance().MainPlayer != null) { GCGame.Utils.EnterCopy(int.Parse(parameter)); } return; } } break; default: break; } } public static void OpenActivePresiousWnd(bool successed, object param) { if (successed == true) { Hashtable table = new Hashtable(); table["ActiveType"] = (int)param; Games.Events.EventDispatcher.Instance.SendMessage(Games.Events.EventId.OpenActivePresiousWnd, table); } } static void EnterNonePKValueSceneOK(int sceneID) { Tab_SceneClass tabSceneClass = TableManager.GetSceneClassByID(sceneID, 0); if (null == tabSceneClass) { return; } DoTeleport(sceneID); //MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{1644}", tabSceneClass.Name), "", () => { DoTeleport(sceneID); }); } static void DoTeleport(int sceneID) { if (GameManager.gameManager.ActiveScene.IsCopyScene()) { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{42632}")); return; } Tab_SceneClass tabSceneClass = TableManager.GetSceneClassByID(sceneID, 0); if (null == tabSceneClass) { return; } SceneData.RequestChangeScene((int)CG_REQ_CHANGE_SCENE.CHANGETYPE.WORLDMAP, 0, sceneID, -1, (int)tabSceneClass.SafeX, (int)tabSceneClass.SafeZ); UIManager.CloseUI(UIInfo.Activity); } public bool IsWillOpen(int activityId) { if (GetActivityTimeState(activityId) == (int)ActivityTimeType.WillOpen || GetActivityTimeState(activityId) == (int)ActivityTimeType.WillOpenButShow) { return true; } return false; } public bool IsFinish(int activityId) { if (GetActivityTimeState(activityId) == (int)ActivityTimeType.Finish) { return true; } return false; } public bool IsOnOpenAndCanJoin(int activityId) //在时间内 等级满足 未完成 { if (IsOnOpenTime(activityId) && IsLevelEnough(activityId) && !IsCompleted(activityId)) { return true; } return false; } public bool IsWillOpenAndCanJoin(int activityId) { if(IsWillOpen(activityId) && IsLevelEnough(activityId) && !IsCompleted(activityId)) { return true; } return false; } public bool IsStatisfyAndCompleted(int activityId) { if(IsLevelEnough(activityId) && IsCompleted(activityId)) { return true; } return false; } //分类活动并进行排序 public List SetMyActivityState(List m_List) { List CanJoinList = new List(); //在时间内 等级满足 未完成 List WillJoinList = new List(); //马上开启 等级满足 未完成 List CompledteList = new List(); //等级满足 已完成(0, 1状态) List LevelNotEnoughList = new List(); //等级不满足 List FinishedList = new List(); //已结束 for (int index = 0; index < m_List.Count; index++) { if(IsOnOpenAndCanJoin(m_List[index])) { CanJoinList.Add(m_List[index]); }else if(IsWillOpenAndCanJoin(m_List[index])) { WillJoinList.Add(m_List[index]); }else if(IsStatisfyAndCompleted(m_List[index])) { CompledteList.Add(m_List[index]); }else if(!IsLevelEnough(m_List[index])) { LevelNotEnoughList.Add(m_List[index]); }else { FinishedList.Add(m_List[index]); } } CanJoinList.Sort(SortCanJoinList); WillJoinList.Sort(SortWillOpenList); CompledteList.Sort(SortCompletedList); LevelNotEnoughList.Sort(SortLevelNottEnough); FinishedList.Sort(SortFinisedList); m_List.Clear(); m_List.AddRange(CanJoinList); m_List.AddRange(WillJoinList); m_List.AddRange(CompledteList); m_List.AddRange(LevelNotEnoughList); m_List.AddRange(FinishedList); return m_List; } public int SortCanJoinList(int actIdA, int actIdB) { var tabA = TableManager.GetActivityBaseByID(actIdA, 0); var tabB = TableManager.GetActivityBaseByID(actIdB, 0); if(tabA == null || tabB == null) { return 0; } if (tabA.Promote > tabB.Promote) { return -1; } else if (tabA.Promote < tabB.Promote) { return 1; } else //推荐等级等级相同的时候,判断是否是限时任务 { //限时排在前 if (IsLimitMission(tabA) && !IsLimitMission(tabB)) { return -1; } else if (IsLimitMission(tabB) && !IsLimitMission(tabA)) { return 1; } else { //ID小的排在前 return tabA.Id < tabB.Id ? -1 : 1; //不存在ID相同的情况 } } } public int SortWillOpenList(int actIdA, int actIdB) { return GetNearestOpenTime(actIdA) < GetNearestOpenTime(actIdB) ? -1 : 1; } public int SortCompletedList(int actIdA, int actIdB) { var tabA = TableManager.GetActivityBaseByID(actIdA, 0); var tabB = TableManager.GetActivityBaseByID(actIdB, 0); if (tabA == null || tabB == null) { return 0; } if(tabA.HideOnCompleted > tabB.HideOnCompleted) { return -1; }else if(tabB.HideOnCompleted > tabA.HideOnCompleted) { return 1; }else { return tabA.Id < tabB.Id ? -1 : 1; } } public int SortLevelNottEnough(int actIdA, int actIdB) { var tabA = TableManager.GetActivityBaseByID(actIdA, 0); var tabB = TableManager.GetActivityBaseByID(actIdB, 0); if (tabA == null || tabB == null) { return 0; } if(tabA.Level == tabB.Level) { //ID小在前 return tabA.Id < tabB.Id ? -1 : 1; } return tabA.Level < tabB.Level ? -1 : 1; } public int SortFinisedList(int actIdA, int actIdB) { var tabA = TableManager.GetActivityBaseByID(actIdA, 0); var tabB = TableManager.GetActivityBaseByID(actIdB, 0); if (tabA == null || tabB == null) { return 0; } return tabA.Id < tabB.Id ? -1 : 1; } public int GetNearestOpenTime(int actId) { Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(actId, 0); if (activityBase == null) return -1; int m_ServerTime = GlobalData.ServerAnsiTime; DateTime dt = GCGame.Utils.GetServerDateTime(); int nearestOpenTime = 0; //获取服务器的小时 分钟 int hour = dt.Hour; int minute = dt.Minute; int currentServerTimeToTabTime = hour * 100 + minute; //例如:2200 2100 nearestOpenTime = int.Parse(activityBase.GetTimebyIndex(0).Split('|')[0]); for (int index = 0; index < activityBase.getTimeCount(); index++) { if (!activityBase.GetTimebyIndex(index).Equals("-1")) { if (currentServerTimeToTabTime < int.Parse(activityBase.GetTimebyIndex(index).Split('|')[0]) && currentServerTimeToTabTime < int.Parse(activityBase.GetTimebyIndex(index).Split('|')[1])) { nearestOpenTime = int.Parse(activityBase.GetTimebyIndex(index).Split('|')[0]); break; } } } return nearestOpenTime; } public bool IsLimitMission(Tab_ActivityBase tab) { return (tab.ActivityType & 1) != 0 ? true : false; } public void OnUseActivityBtnClick() { UIManager.ShowUI(UIInfo.Boss, delegate(bool bSucess, object param) { if(bSucess) { BossUI.Instance().ShowPage(0); } }); } // 进入皇陵探宝活动 public static void GoTombRaider() { MessageBoxLogic.OpenOKCancelBox(5703, -1, () => { TombRaiderTipPanelCtr.HasShow = false; GCGame.Utils.EnterCopy(6059); }); } // 进入跨服夺旗活动 public static void GoCaptureFlag() { MessageBoxLogic.OpenOKCancelBox(5703, -1, () => { TombRaiderTipPanelCtr.HasShow = false; GCGame.Utils.EnterCopy(6059); }); } //夜战地宫 public static void TreasureGold() { MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{39500}"), null, delegate () { if (GameManager.gameManager.PlayerDataPool.Money.GetMoney_Coin() >= 10000) { CG_TREASURE_GOLD_OPTION send = (CG_TREASURE_GOLD_OPTION)PacketDistributed.CreatePacket(MessageID.PACKET_CG_TREASURE_GOLD_OPTION); send.SetOptiontype(0); send.SendPacket(); } else { MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{39512}"), null, delegate () { JudgeMoneyLogic.ShowSwitchMoneyPanel(MONEYTYPE.MONEYTYPE_COIN, true); }, null); } }, null); } //不稳定排序导致定位的时候排序还未结束,排序结束之后会互换位置 private int _isNeedPosActItemId = -1; public void ShowItemByActId(int _ActId) { _isNeedPosActItemId = _ActId; _ItemsContainer.ForeachActiveItem((actItem) => { if(actItem.m_ItemInfoId == _ActId) { //显示当前的位置 _ItemsContainer.ShowContainerPos(actItem); actItem.ShowSelectEffect(true); }else { actItem.ShowSelectEffect(false); } }); } public void OnHelpSpriteBtn() { UIManager.ShowUI(UIInfo.ChatHelperRoot); } }