Files
JJBB/Assets/Project/Script/Player/UserData/ActivityDataManager.cs
2024-08-23 15:49:34 +08:00

482 lines
19 KiB
C#
Raw Permalink 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 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
}