Files
JJBB/Assets/Project/Script/GUI/Activity/ActivityController.cs
2024-08-23 15:49:34 +08:00

1417 lines
53 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<ActivityController>
{
#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<ActivityalRewItem> _ValRewItemList = new List<ActivityalRewItem>();
IEnumerator CreateValRew()
{
List<int> valRewIdList = new List<int>();
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<ActivityalRewItem>());
}
var Slidewidth = m_Slider.gameObject.GetComponent<RectTransform>().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<GameObject> _MenuMarkobjList;
public int m_TotalActicitiesTypeCount = 4; //活动所拥有的类型 日常为全部活动
//分类过的活动 此int为活动类型
private List<int> m_SortAllActivities = new List<int>();
//分类后的活动 存储的是任务ID
public Dictionary<Acticity_Type, List<int>> AllTypeActivityDic = new Dictionary<Acticity_Type, List<int>>();
private List<int> DailyMissionList = new List<int>(); // 日常活动
private List<int> ExpMissionList = new List<int>(); // 经验任务
private List<int> LimitTimeMissionList = new List<int>(); // 限时活动
private List<int> EquipMissionList = new List<int>(); // 装备任务
private List<int> TributeMissionList = new List<int>(); // 帮贡任务
//最后一次选择的活动类型下标
public int m_SelectedIndex = -1;
public UIContainerSelect _ItemsContainer;
//周历
public GameObject m_ActivitiesInTimePage;
public List<GameObject> _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;
}
/// <summary>
/// 通过类型获取活动的数量
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
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());
}
/// <summary>
/// 通过活动的类型来初始化对应活动界面
/// </summary>
/// <param name="m_ActivityType"></param>
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<ObjManager>.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<ObjManager>.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<int> SetMyActivityState(List<int> m_List)
{
List<int> CanJoinList = new List<int>(); //在时间内 等级满足 未完成
List<int> WillJoinList = new List<int>(); //马上开启 等级满足 未完成
List<int> CompledteList = new List<int>(); //等级满足 已完成(0, 1状态)
List<int> LevelNotEnoughList = new List<int>(); //等级不满足
List<int> FinishedList = new List<int>(); //已结束
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<ActivityItem>((actItem) => {
if(actItem.m_ItemInfoId == _ActId)
{
//显示当前的位置
_ItemsContainer.ShowContainerPos(actItem);
actItem.ShowSelectEffect(true);
}else
{
actItem.ShowSelectEffect(false);
}
});
}
public void OnHelpSpriteBtn()
{
UIManager.ShowUI(UIInfo.ChatHelperRoot);
}
}