Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -26,7 +26,6 @@ { // 登记相应的数据体及对应的数据转逻辑类 Register(typeof(HAC11_tagGCFeastRedPacketInfo), typeof(DTCAC11_tagGCFeastRedPacketInfo)); Register(typeof(HAB26_tagMCFeastRedPackTaskInfo), typeof(DTCAB26_tagMCFeastRedPackTaskInfo)); Register(typeof(HAB25_tagMCFeastRedPackInfo), typeof(DTCAB25_tagMCFeastRedPackInfo)); Register(typeof(HB213_tagMCZhuXianTowerInfo), typeof(DTCB213_tagMCZhuXianTowerInfo)); Register(typeof(HB413_tagMCPlayerSkills), typeof(DTCB413_tagMCPlayerSkills)); Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs
@@ -13,10 +13,7 @@ public int ID { get ; private set ; } public int FeastDay { get ; private set ; } public int FeastTaskType { get ; private set ; } public int FeastTaskData { get ; private set ; } public int TotalTimes { get ; private set ; } public string TaskDes { get ; private set; } public int achievementId { get ; private set ; } public override string getKey() { @@ -30,13 +27,7 @@ FeastDay=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; FeastTaskType=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0; FeastTaskData=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0; TotalTimes=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0; TaskDes = rawContents[5].Trim(); achievementId=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0; } catch (Exception ex) { Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs.meta
@@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 92740fe211606b3409ddae7876e3b8d0 timeCreated: 1548643881 timeCreated: 1548680690 licenseType: Pro MonoImporter: serializedVersion: 2 Core/GameEngine/Model/Config/RedPackConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, July 28, 2018 // [ Date ]: Monday, January 28, 2019 //-------------------------------------------------------- using UnityEngine; @@ -9,8 +9,8 @@ namespace TableConfig { public partial class RedPackConfig : ConfigBase { public partial class RedPackConfig : ConfigBase { public int id { get ; private set ; } public int RedEnvelopeType { get ; private set ; } public int RedEnvelopeAmount { get ; private set ; } @@ -18,15 +18,17 @@ public int PacketCnt { get ; private set ; } public int LeaderOwn { get ; private set ; } public string content { get ; private set; } public string PacketOpenTime { get ; private set; } public int ValidMinutes { get ; private set ; } public override string getKey() { return id.ToString(); public override string getKey() { return id.ToString(); } public override void Parse() { try { try { id=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; RedEnvelopeType=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; @@ -40,10 +42,14 @@ LeaderOwn=IsNumeric(rawContents[5]) ? int.Parse(rawContents[5]):0; content = rawContents[6].Trim(); } catch (Exception ex) { DebugEx.Log(ex); PacketOpenTime = rawContents[7].Trim(); ValidMinutes=IsNumeric(rawContents[8]) ? int.Parse(rawContents[8]):0; } catch (Exception ex) { DebugEx.Log(ex); } } Core/GameEngine/Model/Config/RedPackConfig.cs.meta
@@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: b7df6e148f51472428641d400c1ad3b1 timeCreated: 1532745429 licenseType: Free timeCreated: 1548663425 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB26_tagMCFeastRedPackTaskInfo.cs
File was deleted Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB26_tagMCFeastRedPackTaskInfo.cs.meta
File was deleted Core/NetworkPackage/ServerPack/HAB_Activity/HAB26_tagMCFeastRedPackTaskInfo.cs
File was deleted Core/NetworkPackage/ServerPack/HAB_Activity/HAB26_tagMCFeastRedPackTaskInfo.cs.meta
File was deleted Lua/Gen/SnxxzUIRedEnvelopeModelWrap.cs
@@ -443,7 +443,7 @@ { int __id = LuaAPI.xlua_tointeger(L, 2); gen_to_be_invoked.RequestDetail( __id ); gen_to_be_invoked.SendOpenRedpackPackage( __id ); System/FairyAu/PlayerRedPacketDatas.cs
@@ -199,7 +199,7 @@ if (redBag.GetWay != 5 && redBag.GetWay != 0 && redBag.PlayerID == PlayerDatas.Instance.PlayerId && redBag.State == 1) { RedBagId = RedEnvelopeID; WindowCenter.Instance.Open<RedOPenBGMWin>();//打开领取界面 WindowCenter.Instance.Open<RedpackOpenWin>();//打开领取界面 } } System/FairyAu/RedBagScripts.cs
@@ -97,7 +97,7 @@ RedBagBtn.AddListener(() => { redPacket.RedBagId = redPacket._DicRedBag[redPackeIndex].RedPacketID; WindowCenter.Instance.Open<RedOPenBGMWin>();//打开领取界面 WindowCenter.Instance.Open<RedpackOpenWin>();//打开领取界面 }); break; case 2://已领取 System/FairyAu/RedpackOpenWin.cs
File was renamed from System/FairyAu/RedOPenBGMWin.cs @@ -8,18 +8,21 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class RedOPenBGMWin : Window namespace Snxxz.UI { public class RedpackOpenWin : Window { private int _redBagID;//获取点击红包的ID [SerializeField] Image _HeadshotImage;//人物头像 [SerializeField] Text _NameText;//红包发放人 [SerializeField] Button _CloseBtn;//红包关闭 [SerializeField] Button _OpenBtn;//红包打开 [SerializeField] Text _TopText;//祝福语 PlayerRedPacketDatas m_RedPacket; PlayerRedPacketDatas redPacket { get { return m_RedPacket ?? (m_RedPacket = ModelCenter.Instance.GetModel<PlayerRedPacketDatas>()); } } PlayerRedPacketDatas redpackModel { get { return ModelCenter.Instance.GetModel<PlayerRedPacketDatas>(); } } RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } } private int redpackServerId; #region Built-in protected override void BindController() { @@ -33,34 +36,34 @@ protected override void OnPreOpen() { _redBagID = redPacket.RedBagId; if (!redPacket._DicRedBag.ContainsKey(_redBagID)) redpackServerId = redpackModel.RedBagId; if (!redpackModel._DicRedBag.ContainsKey(redpackServerId)) { return; } if (redPacket._DicRedBag[_redBagID].PlayeJob > 10) if (redpackModel._DicRedBag[redpackServerId].PlayeJob > 10) { _HeadshotImage.SetSprite(GeneralDefine.GetJobHeadPortrait(redPacket._DicRedBag[_redBagID].PlayeJob % 10, 0)); _HeadshotImage.SetSprite(GeneralDefine.GetJobHeadPortrait(redpackModel._DicRedBag[redpackServerId].PlayeJob % 10, 0)); } else { _HeadshotImage.SetSprite(GeneralDefine.GetJobHeadPortrait(redPacket._DicRedBag[_redBagID].PlayeJob, 0)); _HeadshotImage.SetSprite(GeneralDefine.GetJobHeadPortrait(redpackModel._DicRedBag[redpackServerId].PlayeJob, 0)); } _NameText.text = redPacket._DicRedBag[_redBagID].Name + Language.Get("Z1056"); var _wish = UIHelper.ServerStringTrim(redPacket._DicRedBag[_redBagID].Wish); _NameText.text = redpackModel._DicRedBag[redpackServerId].Name + Language.Get("Z1056"); var _wish = UIHelper.ServerStringTrim(redpackModel._DicRedBag[redpackServerId].Wish); if (_wish.Equals(string.Empty)) { _TopText.text = Language.Get("Z1057"); } else { _TopText.text = redPacket._DicRedBag[_redBagID].Wish; _TopText.text = redpackModel._DicRedBag[redpackServerId].Wish; } } protected override void OnAfterOpen() { } protected override void OnPreClose() @@ -80,34 +83,34 @@ void OpenButton() { if (!redPacket._DicRedBag.ContainsKey(_redBagID)) if (!redpackModel._DicRedBag.ContainsKey(redpackServerId)) { CloseImmediately(); return; } var _data = redPacket._DicRedBag[_redBagID]; switch (_data.GetWay) var redpack = redpackModel._DicRedBag[redpackServerId]; switch (redpack.GetWay) { case 5: var OSRedModel = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); if (_data.PlayerID != PlayerDatas.Instance.PlayerId if (redpack.PlayerID != PlayerDatas.Instance.PlayerId && OSRedModel.getEnvelopeTimes <= 0) { SysNotifyMgr.Instance.ShowTip("OpenRedBag4"); return; } ModelCenter.Instance.GetModel<RedEnvelopeModel>().envelopeSfx = _redBagID; ModelCenter.Instance.GetModel<RedEnvelopeModel>().cacheEnvelopeId = _redBagID; envelopeModel.envelopeSfx = redpackServerId; envelopeModel.cacheEnvelopeId = redpackServerId; CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket(); _pak.RedPaketID = (uint)_redBagID; _pak.RedPaketID = (uint)redpackServerId; GameNetSystem.Instance.SendInfo(_pak); Close(); break; default: ModelCenter.Instance.GetModel<RedEnvelopeModel>().envelopeSfx = _redBagID; ModelCenter.Instance.GetModel<RedEnvelopeModel>().cacheEnvelopeId = _redBagID; envelopeModel.envelopeSfx = redpackServerId; envelopeModel.cacheEnvelopeId = redpackServerId; CAB12_tagCMGrabFamilyRedPacket _CA404 = new CAB12_tagCMGrabFamilyRedPacket(); _CA404.RedPaketID = (uint)_redBagID; _CA404.RedPaketID = (uint)redpackServerId; GameNetSystem.Instance.SendInfo(_CA404); Close(); break; System/FairyAu/RedpackOpenWin.cs.meta
File was renamed from System/FairyAu/RedOPenBGMWin.cs.meta @@ -1,12 +1,12 @@ fileFormatVersion: 2 guid: 8e73bc96e7892ae48a4a26678a965eab timeCreated: 1505195500 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: fileFormatVersion: 2 guid: 8e73bc96e7892ae48a4a26678a965eab timeCreated: 1505195500 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/OpenServerActivity/FestivalRedpackBehaviour.cs
New file @@ -0,0 +1,107 @@ using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FestivalRedpackBehaviour : MonoBehaviour { [SerializeField] Text m_RedpackName; [SerializeField] Text m_Wish; [SerializeField] Transform m_ContainerPreview; [SerializeField] Text m_Time; [SerializeField] Transform m_ContainerOpen; [SerializeField] Button m_Open; [SerializeField] Transform m_ContainerGot; [SerializeField] Transform m_ContainerEnd; int redpackServerId = 0; FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } } private void Awake() { m_Open.onClick.AddListener(Open); } public void DisplaySystemRedpack(int id) { var existServerRedpack = model.IsExistSystemRedpack(id, out redpackServerId); m_ContainerPreview.gameObject.SetActive(!existServerRedpack); m_ContainerOpen.gameObject.SetActive(false); m_ContainerGot.gameObject.SetActive(false); m_ContainerEnd.gameObject.SetActive(false); var config = Config.Instance.Get<RedPackConfig>(id); if (config != null) { m_RedpackName.text = config.content; } FestivalRedpack festivalRedpack; if (model.TryGetRedpack(id, out festivalRedpack)) { m_Time.text = StringUtility.Contact(festivalRedpack.endTime.ToString("HH:mm"), "\n", Language.Get("FestivalOpenGrab")); } if (existServerRedpack) { DisplayBase(id); } else { redpackServerId = 0; } } public void DisplayTaskRedpack(int id) { redpackServerId = id; } void DisplayBase(int id) { redpackServerId = id; RedEnvelopeModel.RedEnvelope envelope; if (envelopeModel.TryGetEnvelope(redpackServerId, out envelope)) { m_ContainerOpen.gameObject.SetActive(envelope.state == 1); m_ContainerGot.gameObject.SetActive(envelope.state == 2); m_ContainerEnd.gameObject.SetActive(envelope.state == 3); } } private void Open() { if (redpackServerId == 0) { SysNotifyMgr.Instance.ShowTip("FestivalSystemOpenError"); } else { RedEnvelopeModel.RedEnvelope envelope; if (envelopeModel.TryGetEnvelope(redpackServerId, out envelope)) { switch (envelope.state) { case 1: ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = redpackServerId; WindowCenter.Instance.Open<RedpackOpenWin>(); break; case 2: case 3: envelopeModel.SendOpenRedpackPackage(redpackServerId); break; } } } } } } System/OpenServerActivity/FestivalRedpackBehaviour.cs.metacopy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackBehaviour.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 8e73bc96e7892ae48a4a26678a965eab timeCreated: 1505195500 guid: 7db5e4c8e72bb9b449726b66369a4b80 timeCreated: 1548663268 licenseType: Pro MonoImporter: serializedVersion: 2 System/OpenServerActivity/FestivalRedpackCell.cs
New file @@ -0,0 +1,31 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class FestivalRedpackCell : CellView { [SerializeField] FestivalRedpackBehaviour[] m_FestivalRedpacks; FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } public void DisplaySystemRedpacks(int line) { var list = model.systemDisplayRedpacks; for (int i = 0; i < m_FestivalRedpacks.Length; i++) { var index = line * m_FestivalRedpacks.Length + i; if (index < list.Count) { m_FestivalRedpacks[i].DisplaySystemRedpack(list[index]); m_FestivalRedpacks[i].gameObject.SetActive(true); } else { m_FestivalRedpacks[i].gameObject.SetActive(false); } } } } } System/OpenServerActivity/FestivalRedpackCell.cs.metacopy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackCell.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 8e73bc96e7892ae48a4a26678a965eab timeCreated: 1505195500 guid: f0fd0333471bc144eb0c1643f5c2484d timeCreated: 1548667396 licenseType: Pro MonoImporter: serializedVersion: 2 System/OpenServerActivity/FestivalRedpackDate.cs
New file @@ -0,0 +1,59 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FestivalRedpackDate : CellView { [SerializeField] Transform m_ContainerNormal; [SerializeField] Transform m_ContainerSelect; [SerializeField] Text m_Date; [SerializeField] DateFontStyle m_NormalFontStyle; [SerializeField] DateFontStyle m_SelectFontStyle; [SerializeField] Button m_Select; FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } int dateIndex = 0; private void Awake() { m_Select.onClick.AddListener(Select); } public void Display(int index) { dateIndex = index; m_ContainerNormal.gameObject.SetActive(model.selectDateIndex != index); m_ContainerSelect.gameObject.SetActive(model.selectDateIndex == index); OperationFestivalRedpack operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation)) { var date = operation.startDate.AddDays(index); m_Date.text = StringUtility.Contact(Language.Get("FestivalTraditionalDate_" + index), "\n", Language.Get("FestivalDate", date.month, date.day)); } m_Date.color = model.selectDateIndex == index ? m_SelectFontStyle.fontColor : m_NormalFontStyle.fontColor; m_Date.fontSize = model.selectDateIndex == index ? m_SelectFontStyle.fontSize : m_NormalFontStyle.fontSize; } private void Select() { model.selectDateIndex = dataIndex; } [Serializable] public class DateFontStyle { public Color fontColor; public int fontSize; } } } System/OpenServerActivity/FestivalRedpackDate.cs.metacopy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackDate.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 8e73bc96e7892ae48a4a26678a965eab timeCreated: 1505195500 guid: e64f25694220d424eb7e5aaeddc11043 timeCreated: 1548661142 licenseType: Pro MonoImporter: serializedVersion: 2 System/OpenServerActivity/FestivalRedpackModel.cs
@@ -7,9 +7,49 @@ { public class FestivalRedpackModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity { Dictionary<int, List<FestivalRedpackTask>> taskDict = new Dictionary<int, List<FestivalRedpackTask>>(); Dictionary<int, List<FestivalRedpackTaskProgress>> taskProgressDict = new Dictionary<int, List<FestivalRedpackTaskProgress>>(); Dictionary<int, FestivalRedpack> festivalRedpacks = new Dictionary<int, FestivalRedpack>(); Dictionary<int, List<int>> achievements = new Dictionary<int, List<int>>(); List<int> taskRedpacks = new List<int>(); bool serverInited = false; public List<int> systemDisplayRedpacks = new List<int>(); int m_SelectType; public int selectType { get { return m_SelectType; } set { if (m_SelectType != value) { m_SelectType = value; if (selectTypeRefresh != null) { selectTypeRefresh(); } } } } int m_SelectDateIndex; public int selectDateIndex { get { return m_SelectDateIndex; } set { if (m_SelectDateIndex != value) { m_SelectDateIndex = value; if (selectDateIndexRefresh != null) { selectDateIndexRefresh(); } } } } public int jumpType { get; set; } public bool IsOpen { @@ -30,7 +70,7 @@ OperationFestivalRedpack operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation)) { return operation.GetCurrentDay(); return IsOpen ? operation.GetCurrentDay() : operation.totalDays; } return 0; } @@ -43,6 +83,9 @@ public int grabTotalJade { get; private set; } public const int FESTIVALTASKREDPACKTYPE = 33; public const int FESTIVALSYSTEMREDPACK1 = 31; public const int FESTIVALSYSTEMREDPACK2 = 32; const int REDPOINTID = 20919; @@ -53,8 +96,12 @@ public event Action<int> onStateUpate; public event Action redpackGrabRefresh; public event Action selectTypeRefresh; public event Action selectDateIndexRefresh; public event Action<int> achievementRefresh; RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } } AchievementModel achievementModel { get { return ModelCenter.Instance.GetModel<AchievementModel>(); } } public override void Init() { @@ -64,20 +111,23 @@ envelopeModel.EnvelopeUpdateEvent += EnvelopeUpdateEvent; envelopeModel.EnvelopeDelEvent += EnvelopeDelEvent; envelopeModel.EnvelopeGetEvent += EnvelopeGetEvent; achievementModel.achievementCompletedEvent += AchievementCompletedEvent; achievementModel.achievementProgressUpdateEvent += AchievementProgressUpdateEvent; ParseConfig(); OpenServerActivityCenter.Instance.Register((int)OpenServerActivityCenter.OSActivityType.FestivalRedpack, this); } public void OnBeforePlayerDataInitialize() { taskProgressDict.Clear(); grabRedpackTimes = 0; grabTotalJade = 0; serverInited = false; } public void OnPlayerLoginOk() { UpdateRedpoint(); serverInited = true; } public override void UnInit() @@ -88,93 +138,125 @@ envelopeModel.EnvelopeUpdateEvent -= EnvelopeUpdateEvent; envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent; envelopeModel.EnvelopeGetEvent -= EnvelopeGetEvent; achievementModel.achievementCompletedEvent -= AchievementCompletedEvent; achievementModel.achievementProgressUpdateEvent -= AchievementProgressUpdateEvent; } void ParseConfig() { var configs = Config.Instance.GetAllValues<FestivalRedpackTaskConfig>(); foreach (var config in configs) { List<FestivalRedpackTask> list; if (!taskDict.TryGetValue(config.FeastDay, out list)) var configs = Config.Instance.GetAllValues<FestivalRedpackTaskConfig>(); foreach (var config in configs) { list = new List<FestivalRedpackTask>(); taskDict.Add(config.FeastDay, list); List<int> list; if (!achievements.TryGetValue(config.FeastDay, out list)) { list = new List<int>(); achievements.Add(config.FeastDay, list); } list.Add(config.achievementId); } list.Add(new FestivalRedpackTask() } { var configs = Config.Instance.GetAllValues<RedPackConfig>(); foreach (var config in configs) { day = config.FeastDay, description = config.TaskDes, helpData = config.FeastTaskData, type = config.FeastTaskType, totalTimes = config.TotalTimes, }); if (config.RedEnvelopeType == FESTIVALSYSTEMREDPACK1 || config.RedEnvelopeType == FESTIVALSYSTEMREDPACK2) { var openTime = ParseTime(config.PacketOpenTime); festivalRedpacks.Add(config.id, new FestivalRedpack() { id = config.id, openTime = openTime, endTime = openTime.AddTicks(config.ValidMinutes * TimeSpan.TicksPerMinute), type = config.RedEnvelopeType, }); } } } } public FestivalRedpackTaskState GetTaskState(FestivalRedpackTask task) DateTime ParseTime(string timeString) { FestivalRedpackTaskProgress progress; if (TryGetTaskProgress(task.day, task.type, task.helpData, out progress)) var year = 2018; var month = 1; var day = 1; var hour = 1; var minute = 20; var array = timeString.Split(' '); if (array != null && array.Length == 2) { if (progress.completed) var dateArray = array[0].Split('-'); if (dateArray != null && dateArray.Length == 3) { return FestivalRedpackTaskState.Completed; year = int.Parse(dateArray[0].Trim()); month = int.Parse(dateArray[1].Trim()); day = int.Parse(dateArray[2].Trim()); } else if (progress.times >= task.totalTimes) var timeArray = array[0].Split(':'); if (timeArray != null && timeArray.Length == 2) { return FestivalRedpackTaskState.ReceiveReward; hour = int.Parse(timeArray[0].Trim()); minute = int.Parse(timeArray[1].Trim()); } } return FestivalRedpackTaskState.Doing; return new DateTime(year, month, day, hour, minute, 0); } public bool TryGetTasks(int dayIndex, out List<FestivalRedpackTask> list) public bool IsSystemRedpackOverdue(int id) { return taskDict.TryGetValue(dayIndex, out list); } public bool TryGetTaskProgress(int dayIndex, int type, int helpData, out FestivalRedpackTaskProgress progress) { progress = default(FestivalRedpackTaskProgress); if (taskProgressDict.ContainsKey(dayIndex)) if (festivalRedpacks.ContainsKey(id)) { var list = taskProgressDict[dayIndex]; var index = list.FindIndex((x) => { return x.helpData == helpData && x.type == type; }); if (index != -1) { progress = list[index]; } return index != -1; return TimeUtility.ServerNow < festivalRedpacks[id].endTime; } return false; } public void OnReceivePackage(HAB26_tagMCFeastRedPackTaskInfo package) public bool IsExistSystemRedpack(int id, out int redpackId) { List<FestivalRedpackTaskProgress> list; if (!taskProgressDict.TryGetValue(package.FeastDay, out list)) redpackId = 0; if (festivalRedpacks.ContainsKey(id)) { list = new List<FestivalRedpackTaskProgress>(); taskProgressDict.Add(package.FeastDay, list); } list.Clear(); for (int i = 0; i < package.TaskCount; i++) { var data = package.TaskProgressList[i]; list.Add(new FestivalRedpackTaskProgress() List<int> redpacks = null; if (envelopeModel.TryGetEnvelopes(festivalRedpacks[id].type, out redpacks)) { type = data.TaskType, times = data.CurTimes, helpData = (int)data.TaskData, completed = false, }); foreach (var serverId in redpacks) { RedEnvelopeModel.RedEnvelope envelope; if (envelopeModel.TryGetEnvelope(serverId, out envelope)) { if (TimeUtility.GetTime(envelope.time).Equals(festivalRedpacks[id].openTime)) { redpackId = serverId; return true; } } } } } return false; } UpdateRedpoint(); public bool TryGetRedpack(int id, out FestivalRedpack redpack) { return festivalRedpacks.TryGetValue(id, out redpack); } public bool TryGetAchievements(out List<int> list) { return achievements.TryGetValue(festivalDay + 1, out list); } public int SystemRedpackSort(int lhs, int rhs) { if (festivalRedpacks.ContainsKey(lhs) && festivalRedpacks.ContainsKey(rhs)) { return festivalRedpacks[lhs].openTime.CompareTo(festivalRedpacks[rhs].openTime); } return 0; } public void OnReceivePackage(HAB25_tagMCFeastRedPackInfo package) @@ -239,6 +321,32 @@ } private void AchievementCompletedEvent(int _achieve) { List<int> list; if (TryGetAchievements(out list) && list.Contains(_achieve)) { if (achievementRefresh != null) { achievementRefresh(_achieve); } UpdateRedpoint(); } } private void AchievementProgressUpdateEvent(int _achieve) { List<int> list; if (TryGetAchievements(out list) && list.Contains(_achieve)) { if (achievementRefresh != null) { achievementRefresh(_achieve); } UpdateRedpoint(); } } private void UpdateRedpoint() { var existSystemRedpack = false; @@ -249,18 +357,44 @@ OperationFestivalRedpack operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation)) { var index = festivalDay; var systemRedpacks = index < operation.redpacks.Count && index >= 0 ? operation.redpacks[index].redpacks : operation.redpacks[0].redpacks; foreach (var redpackId in systemRedpacks) { if (IsSystemRedpackOverdue(redpackId)) { continue; } var redpackServerId = 0; if (IsExistSystemRedpack(redpackId, out redpackServerId)) { RedEnvelopeModel.RedEnvelope envelope; if (envelopeModel.TryGetEnvelope(redpackServerId, out envelope)) { if (envelope.state == 1) { existSystemRedpack = true; break; } } } } } List<FestivalRedpackTask> list; if (TryGetTasks(festivalDay, out list)) List<int> list; if (TryGetAchievements(out list)) { foreach (var task in list) foreach (var achievementId in list) { if (GetTaskState(task) == FestivalRedpackTaskState.ReceiveReward) Achievement achievement; if (achievementModel.TryGetAchievement(achievementId, out achievement)) { existFinishTask = true; break; if (Achievement.IsReach(achievementId, achievement.progress) && !achievement.completed) { existFinishTask = true; break; } } } } @@ -296,21 +430,12 @@ } } public struct FestivalRedpackTask public struct FestivalRedpack { public int day; public int id; public int type; public int helpData; public int totalTimes; public string description; } public struct FestivalRedpackTaskProgress { public int type; public int helpData; public int times; public bool completed; public DateTime openTime; public DateTime endTime; } public enum FestivalRedpackTaskState System/OpenServerActivity/FestivalRedpackSystemBehaviour.cs
New file @@ -0,0 +1,166 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class FestivalRedpackSystemBehaviour : MonoBehaviour { [SerializeField] Transform m_ContainerEmpty; [SerializeField] ScrollerController m_DateController; [SerializeField] ScrollerController m_RedpackController; [SerializeField] int m_LineCount = 5; FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } } private void Awake() { m_DateController.lockType = EnhanceLockType.KeepHorizon; m_DateController.OnRefreshCell += OnRefreshDateCell; m_RedpackController.lockType = EnhanceLockType.KeepVertical; m_RedpackController.OnRefreshCell += OnRefreshRedpackCell; } public void Display() { model.selectDateIndex = model.festivalDay; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; model.selectDateIndexRefresh -= SelectDateIndexRefresh; TimeMgr.Instance.OnMinuteEvent -= PerMinute; envelopeModel.EnvelopeUpdateEvent -= RedpackRefresh; envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; model.selectDateIndexRefresh += SelectDateIndexRefresh; TimeMgr.Instance.OnMinuteEvent += PerMinute; envelopeModel.EnvelopeUpdateEvent += RedpackRefresh; envelopeModel.EnvelopeDelEvent += EnvelopeDelEvent; DisplayDates(); DisplayRedpacks(); } public void Dispose() { OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; model.selectDateIndexRefresh -= SelectDateIndexRefresh; TimeMgr.Instance.OnMinuteEvent -= PerMinute; envelopeModel.EnvelopeUpdateEvent -= RedpackRefresh; envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent; } private void SelectDateIndexRefresh() { DisplayRedpacks(); } private void RedpackRefresh() { m_RedpackController.m_Scorller.RefreshActiveCellViews(); } private void EnvelopeDelEvent() { DisplayRedpacks(); } private void PerMinute() { var count = 0; OperationFestivalRedpack operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation)) { var index = model.selectDateIndex; var systemRedpacks = index < operation.redpacks.Count && index >= 0 ? operation.redpacks[index].redpacks : operation.redpacks[0].redpacks; var list = model.systemDisplayRedpacks; for (int i = 0; i < systemRedpacks.Count; i++) { if (model.IsSystemRedpackOverdue(systemRedpacks[i])) { count++; } } } if (count != model.systemDisplayRedpacks.Count) { DisplayRedpacks(); } } private void DayResetEvent(int resetType) { OperationFestivalRedpack operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation)) { if (operation.resetType == resetType) { if (model.selectDateIndex < model.festivalDay) { model.selectDateIndex = model.festivalDay; } DisplayDates(); } } } public void DisplayDates() { m_DateController.Refresh(); OperationFestivalRedpack operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation)) { var index = model.festivalDay; for (int i = index; i <= operation.totalDays; i++) { m_DateController.AddCell(ScrollerDataType.Header, i); } } m_DateController.Restart(); } public void DisplayRedpacks() { m_RedpackController.Refresh(); OperationFestivalRedpack operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation)) { var index = model.selectDateIndex; var systemRedpacks = index < operation.redpacks.Count && index >= 0 ? operation.redpacks[index].redpacks : operation.redpacks[0].redpacks; var list = model.systemDisplayRedpacks; for (int i = 0; i < systemRedpacks.Count; i++) { if (model.IsSystemRedpackOverdue(systemRedpacks[i])) { list.Add(systemRedpacks[i]); } } list.Sort(model.SystemRedpackSort); var line = Mathf.CeilToInt((float)list.Count / m_LineCount); for (int i = 0; i < line; i++) { m_RedpackController.AddCell(ScrollerDataType.Header, i); } } m_RedpackController.Restart(); m_ContainerEmpty.gameObject.SetActive(model.systemDisplayRedpacks.Count == 0); } private void OnRefreshRedpackCell(ScrollerDataType type, CellView cell) { var redpackCell = cell as FestivalRedpackCell; redpackCell.DisplaySystemRedpacks(cell.index); } private void OnRefreshDateCell(ScrollerDataType type, CellView cell) { var dateCell = cell as FestivalRedpackDate; dateCell.Display(cell.index); } } } System/OpenServerActivity/FestivalRedpackSystemBehaviour.cs.metacopy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackSystemBehaviour.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 8e73bc96e7892ae48a4a26678a965eab timeCreated: 1505195500 guid: 14445a3dbb11eaf4fa4a3f4e4aabfd61 timeCreated: 1548662028 licenseType: Pro MonoImporter: serializedVersion: 2 System/OpenServerActivity/FestivalRedpackWin.cs
New file @@ -0,0 +1,50 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, January 28, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FestivalRedpackWin : Window { [SerializeField] FestivalRedpackSystemBehaviour m_FestivalSystemBehaviour; #region Built-in protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion } } System/OpenServerActivity/FestivalRedpackWin.cs.metacopy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackWin.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 8e73bc96e7892ae48a4a26678a965eab timeCreated: 1505195500 guid: 597353ed16cf43445be664529daedc36 timeCreated: 1548659227 licenseType: Pro MonoImporter: serializedVersion: 2 System/OpenServerActivity/OpenServerActivityWin.cs
@@ -37,6 +37,7 @@ FairyLeagueModel fairyLeagueModel { get { return ModelCenter.Instance.GetModel<FairyLeagueModel>(); } } FairyGrabBossModel fairyGrabBossModel { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } } OSGiftModel giftModel { get { return ModelCenter.Instance.GetModel<OSGiftModel>(); } } FestivalRedpackModel festivalRedpackModel { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } List<int> openActivitys = new List<int>(); List<int> priorityActivitys = new List<int>(); @@ -122,6 +123,11 @@ { giftModel.selectIndex = giftModel.GetDefaultSelect(); } if (functionOrder == 19) { festivalRedpackModel.selectType = festivalRedpackModel.jumpType != 0 ? festivalRedpackModel.jumpType : 1; festivalRedpackModel.jumpType = 0; } UpdateFunctionBtns(); } OnOpenActivity(functionOrder); @@ -203,6 +209,24 @@ case OpenServerActivityCenter.OSActivityType.OSGift: giftModel.selectIndex = giftModel.GetDefaultSelect(); break; case OpenServerActivityCenter.OSActivityType.FestivalRedpack: if (festivalRedpackModel.systemRedpoint.state == RedPointState.Simple) { festivalRedpackModel.selectType = 1; break; } else if (festivalRedpackModel.taskRedpoint.state == RedPointState.Simple) { festivalRedpackModel.selectType = 2; break; } else if (festivalRedpackModel.receiveRedpoint.state == RedPointState.Simple) { festivalRedpackModel.selectType = 3; break; } festivalRedpackModel.selectType = 1; break; } } } @@ -280,7 +304,7 @@ if (type == ScrollerDataType.Header) { if (!m_ActivitySpreadDict.ContainsKey(sort) || !m_ActivitySpreadDict[sort] || (sort != 2 && sort != 0)) || (sort != 2 && sort != 0 && sort != 19)) { height = 80; return true; @@ -397,7 +421,7 @@ _cell.downArrow.gameObject.SetActive(false); _cell.upArrow.gameObject.SetActive(false); if (_cell.activityType == 0 || _cell.activityType == 2) if (_cell.activityType == 0 || _cell.activityType == 2 || _cell.activityType == 19) { _cell.downArrow.gameObject.SetActive(m_ActivitySpreadDict[_cell.activityType]); _cell.upArrow.gameObject.SetActive(!m_ActivitySpreadDict[_cell.activityType]); @@ -431,6 +455,11 @@ _cell.redpoint.redpointId = 20902 * 100 + _type; _cell.titleTxt.text = Language.Get(StringUtility.Contact("OSRedEnvelopeType_", _type)); _cell.ChangeState(_type == envelopeModel.selectType ? TitleBtnState.Click : TitleBtnState.Normal); break; case 19: _cell.redpoint.redpointId = 20919 * 100 + _type; _cell.titleTxt.text = Language.Get(StringUtility.Contact("FestivalRedpackType_", _type)); _cell.ChangeState(_type == festivalRedpackModel.selectType ? TitleBtnState.Click : TitleBtnState.Normal); break; } _cell.functionBtn.onClick.RemoveAllListeners(); @@ -487,6 +516,17 @@ { m_ActivityCtrl.AddCell(ScrollerDataType.Header, sort * 1000 + giftModel.alreadyOpens[k]); } break; case 19: m_ActivityCtrl.AddCell(ScrollerDataType.Header, sort); if (!m_ActivitySpreadDict[sort]) { m_ActivitySpreadDict[sort] = false; break; } m_ActivityCtrl.AddCell(ScrollerDataType.Normal, sort * 100 + 1); m_ActivityCtrl.AddCell(ScrollerDataType.Normal, sort * 100 + 2); m_ActivityCtrl.AddCell(ScrollerDataType.Normal, sort * 100 + 3); break; default: m_ActivityCtrl.AddCell(ScrollerDataType.Header, sort); @@ -589,6 +629,9 @@ case 18: WindowCenter.Instance.Open<MysticalPurchaseWin>(true); break; case 19: WindowCenter.Instance.Open<FestivalRedpackWin>(true); break; } } @@ -604,6 +647,9 @@ case 2: envelopeModel.selectType = _type; break; case 19: festivalRedpackModel.selectType = _type; break; } m_ActivityCtrl.m_Scorller.RefreshActiveCellViews(); } System/OpenServerActivity/OpenServerRedEnvelopeWin.cs
@@ -129,7 +129,7 @@ || model.getEnvelopeTimes > 0) { ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = envelope.id; WindowCenter.Instance.Open<RedOPenBGMWin>(); WindowCenter.Instance.Open<RedpackOpenWin>(); } } } System/OpenServerActivity/RedEnvelopeModel.cs
@@ -31,11 +31,13 @@ { serverInited = false; m_RedEnvelopeDict.Clear(); redpacks.Clear(); } bool serverInited = false; private Dictionary<int, RedEnvelope> m_RedEnvelopeDict = new Dictionary<int, RedEnvelope>(); Dictionary<int, RedEnvelope> m_RedEnvelopeDict = new Dictionary<int, RedEnvelope>(); Dictionary<int, List<int>> redpacks = new Dictionary<int, List<int>>(); public event Action EnvelopeUpdateEvent; public event Action<int> EnvelopeGetEvent; @@ -59,6 +61,18 @@ state = info.State, Wish = UIHelper.ServerStringTrim(info.Wish) }; List<int> list; if (!redpacks.TryGetValue(info.GetWay, out list)) { list = new List<int>(); redpacks.Add(info.GetWay, list); } if (!list.Contains((int)info.RedPacketID)) { list.Add((int)info.RedPacketID); } m_RedEnvelopeDict[(int)info.RedPacketID] = _envelope; if (EnvelopeGetEvent != null) { @@ -141,6 +155,16 @@ var _id = (int)_pak.DelRedPacketID[i]; if (m_RedEnvelopeDict.ContainsKey(_id)) { var type = m_RedEnvelopeDict[_id].type; if (redpacks.ContainsKey(type)) { var list = redpacks[type]; if (list.Contains(_id)) { list.Remove(_id); } } m_RedEnvelopeDict.Remove(_id); } } @@ -177,6 +201,11 @@ } } return _has; } public bool TryGetEnvelopes(int type, out List<int> list) { return redpacks.TryGetValue(type, out list); } public void GetEnvelopes(int _type, ref List<int> _list) @@ -224,7 +253,7 @@ public int cacheEnvelopeId = 0; public int envelopeSfx { get; set; } public void RequestDetail(int _id) public void SendOpenRedpackPackage(int _id) { cacheEnvelopeId = _id; CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket(); System/OpenServerActivity/RedPackBehaviour.cs
@@ -56,11 +56,11 @@ if (_envelope.state == 1) { ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = _envelope.id; WindowCenter.Instance.Open<RedOPenBGMWin>(); WindowCenter.Instance.Open<RedpackOpenWin>(); } if (_envelope.state == 2 || _envelope.state == 3) { model.RequestDetail(_envelope.id); model.SendOpenRedpackPackage(_envelope.id); } }); } Utility/EnumHelper.cs
@@ -1133,6 +1133,7 @@ Challenge, CastSoul, Potential, Complete, } public enum FunctionUnlockType