Files
JJBB/Assets/Project/Script/Player/UserData/ActivityDataManager.cs

482 lines
19 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
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<int,ActivityData> m_activityInfoServerTypeList = new Dictionary<int,ActivityData>();
private Dictionary<int, ActivityData> m_activityInfoIDList = new Dictionary<int, ActivityData>();
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<ActivityData> GetAllActivityData()
{
if (m_activityInfoServerTypeList.Count <= 0 || m_activityInfoIDList.Count <= 0)
InitActivityInfo();
List<ActivityData> datas = new List<ActivityData>(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<BossUI>(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
}