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