Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs
@@ -5,6 +5,7 @@ public class CAB12_tagCMGrabFamilyRedPacket : GameNetPackBasic { public uint RedPaketID; // 红包ID public byte GetWay; //获得途径 public CAB12_tagCMGrabFamilyRedPacket () { combineCmd = (ushort)0x03FE; @@ -13,6 +14,7 @@ public override void WriteToBytes () { WriteBytes (RedPaketID, NetDataType.DWORD); WriteBytes (GetWay, NetDataType.BYTE); } } System/FairyAu/PlayerRedPacketDatas.cs
@@ -91,7 +91,7 @@ var list = _DicRedBag.Values.ToList(); for (int i = 0; i < list.Count; i++) { if (list[i].GetWay != 5) if (IsDisplayInFamily(list[i].GetWay)) { _DicRedBag.Remove(list[i].RedPacketID); } @@ -196,7 +196,7 @@ if (_DicRedBag.ContainsKey(RedEnvelopeID) && WindowCenter.Instance.IsOpen<RedBagTipsWin>()) { var redBag = _DicRedBag[RedEnvelopeID]; if (redBag.GetWay != 5 && redBag.GetWay != 0 && redBag.PlayerID == PlayerDatas.Instance.PlayerId && redBag.State == 1) if (IsDisplayInFamily(redBag.GetWay) && redBag.GetWay != 0 && redBag.PlayerID == PlayerDatas.Instance.PlayerId && redBag.State == 1) { RedBagId = RedEnvelopeID; WindowCenter.Instance.Open<RedpackOpenWin>();//打开领取界面 @@ -238,11 +238,11 @@ foreach (var value in _DicRedBag.Values) { if (value.PlayerID == PlayerDatas.Instance.baseData.PlayerID && value.State == 0 && value.GetWay != 5) if (value.PlayerID == PlayerDatas.Instance.baseData.PlayerID && value.State == 0 && IsDisplayInFamily(value.GetWay)) { _bool = true; } if (value.State == 1 && value.GetWay != 5) if (value.State == 1 && IsDisplayInFamily(value.GetWay)) { _bool = true; } @@ -292,5 +292,19 @@ } public bool IsDisplayInFamily(int getWay) { if (getWay == 5) { return false; } if (getWay == FestivalRedpackModel.FESTIVALSYSTEMREDPACK1 || getWay == FestivalRedpackModel.FESTIVALSYSTEMREDPACK2 || getWay == FestivalRedpackModel.FESTIVALTASKREDPACKTYPE) { return false; } return true; } } System/FairyAu/RedBagScripts.cs
@@ -57,6 +57,8 @@ m_TextMatter.text = RedEnvelopeContent(redPacket._DicRedBag[redPackeIndex].GetWay); } var redpackInfo = redPacket._DicRedBag[redPackeIndex]; switch (State) { case 0://未发放 @@ -109,7 +111,7 @@ RedBagBtn.AddListener(()=> { redPacket.RedBagId = redPacket._DicRedBag[redPackeIndex].RedPacketID; RedPacketInquire(redPacket.RedBagId); RedPacketInquire(redPacket.RedBagId, redpackInfo.GetWay); }); break; case 3://红包派完了 @@ -121,7 +123,7 @@ RedBagBtn.AddListener(() => { redPacket.RedBagId = redPacket._DicRedBag[redPackeIndex].RedPacketID; RedPacketInquire(redPacket.RedBagId); RedPacketInquire(redPacket.RedBagId, redpackInfo.GetWay); }); break; default: @@ -153,11 +155,12 @@ return _str; } private void RedPacketInquire(int redbagID)//红包查询 private void RedPacketInquire(int redbagID, int getWay)//红包查询 { ModelCenter.Instance.GetModel<RedEnvelopeModel>().cacheEnvelopeId = redbagID; CAB12_tagCMGrabFamilyRedPacket _CA404 = new CAB12_tagCMGrabFamilyRedPacket(); _CA404.RedPaketID = (uint)redbagID; _CA404.GetWay = (byte)getWay; GameNetSystem.Instance.SendInfo(_CA404); } } System/FairyAu/RedBagTipsWin.cs
@@ -99,7 +99,7 @@ gridCtrl.Refresh(); foreach (int key in redPacket._DicRedBag.Keys) { if (redPacket._DicRedBag[key].GetWay != 5) if (redPacket.IsDisplayInFamily(redPacket._DicRedBag[key].GetWay)) { gridCtrl.AddCell(ScrollerDataType.Header, key); } @@ -199,7 +199,7 @@ foreach (int key in redPacket._DicRedBag.Keys) { if (redPacket._DicRedBag[key].GetWay != 5) if (redPacket.IsDisplayInFamily(redPacket._DicRedBag[key].GetWay)) { _list.Add(key); } System/FairyAu/RedpackOpenWin.cs
@@ -103,6 +103,7 @@ envelopeModel.cacheEnvelopeId = redpackServerId; CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket(); _pak.RedPaketID = (uint)redpackServerId; _pak.GetWay = (byte)redpack.GetWay; GameNetSystem.Instance.SendInfo(_pak); Close(); break; @@ -111,6 +112,7 @@ envelopeModel.cacheEnvelopeId = redpackServerId; CAB12_tagCMGrabFamilyRedPacket _CA404 = new CAB12_tagCMGrabFamilyRedPacket(); _CA404.RedPaketID = (uint)redpackServerId; _CA404.GetWay = (byte)redpack.GetWay; GameNetSystem.Instance.SendInfo(_CA404); Close(); break; System/MainInterfacePanel/MainInterfaceWin.cs
@@ -136,6 +136,7 @@ PKModel m_PKModel; PKModel pKModel { get { return m_PKModel ?? (m_PKModel = ModelCenter.Instance.GetModel<PKModel>()); } } OSRedEnvelopeModel OSEnvelopeModel { get { return ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); } } FestivalRedpackModel festivalRedpackModel { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } RuneTowerModel runeTowerModel { get { return ModelCenter.Instance.GetModel<RuneTowerModel>(); } } TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } } DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } } @@ -464,7 +465,8 @@ private void RedpointValueChangeEvent(int _id) { if (_id == OSEnvelopeModel.m_RedAchieveRedpoint.id) if (_id == OSEnvelopeModel.m_RedAchieveRedpoint.id || _id == festivalRedpackModel.taskRedpoint.id) { CheckSendRedpackBtn(); } @@ -477,7 +479,8 @@ m_RedpackGetSfx.StopImediatly(); } var requireRedpack = (OSEnvelopeModel.CanGetEnvelope() || redPacket.IsRedBagGetBool) && !CrossServerUtility.IsCrossServer(); || redPacket.IsRedBagGetBool || festivalRedpackModel.redpoint.state == RedPointState.GetReward) && !CrossServerUtility.IsCrossServer(); if (requireRedpack) { m_RedBag.gameObject.SetActive(true); @@ -495,7 +498,8 @@ private void CheckSendRedpackBtn() { m_SendRedbagBtn.gameObject.SetActive(!m_RedBag.gameObject.activeSelf && OSEnvelopeModel.m_RedAchieveRedpoint.state == RedPointState.Simple); m_SendRedbagBtn.gameObject.SetActive(!m_RedBag.gameObject.activeSelf && OSEnvelopeModel.m_RedAchieveRedpoint.state == RedPointState.Simple && festivalRedpackModel.taskRedpoint.state == RedPointState.Simple); } private void OnGuideBegin()//引导开始 System/OpenServerActivity/FestivalAchievementCell.cs
New file @@ -0,0 +1,86 @@ using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FestivalAchievementCell : CellView { [SerializeField] Image m_AchieveIcon; [SerializeField] Text m_AchieveName; [SerializeField] Button m_AchiveGoto; [SerializeField] Image m_AchiveComplete; [SerializeField] Text m_AchieveDesc; [SerializeField] Text m_AchieveProgress; [SerializeField] Button m_RedPack; FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } AchievementModel achieveModel { get { return ModelCenter.Instance.GetModel<AchievementModel>(); } } public void Display(int index) { m_AchiveGoto.onClick.RemoveAllListeners(); m_RedPack.onClick.RemoveAllListeners(); FestivalRedpackAchievement festivalRedpackAchievement = null; if (index < model.displayAchievements.Count && index >= 0) { festivalRedpackAchievement = model.displayAchievements[index]; } if (festivalRedpackAchievement != null) { var config = Config.Instance.Get<FestivalRedpackTaskConfig>(festivalRedpackAchievement.id); m_AchieveIcon.SetSprite(config.Icon); m_AchieveName.text = config.typeName; var achievementId = festivalRedpackAchievement.CurrentAchieve; bool _isReach = false; var _achieveCfg = Config.Instance.Get<SuccessConfig>(achievementId); Achievement achievement; if (achieveModel.TryGetAchievement(achievementId, out achievement)) { _isReach = Achievement.IsReach(achievementId, achievement.progress) || achievement.completed; m_AchieveDesc.text = _achieveCfg.Describe; var _progress = achievement.completed ? _achieveCfg.NeedCnt : achievement.progress; m_AchieveProgress.text = StringUtility.Contact(Mathf.Min(_progress, _achieveCfg.NeedCnt), "/", _achieveCfg.NeedCnt); m_AchiveComplete.gameObject.SetActive(achievement.completed); m_AchiveGoto.gameObject.SetActive(!_isReach); m_RedPack.gameObject.SetActive(_isReach && !achievement.completed); if (_isReach && !achievement.completed) { m_RedPack.onClick.AddListener(() => { if (!WindowCenter.Instance.IsOpen<OSRedEnvelopeSendWin>()) { OSRedEnvelopeSendWin.achievementId = achievementId; WindowCenter.Instance.Open<OSRedEnvelopeSendWin>(); } }); } } if (!_isReach) { m_AchiveGoto.onClick.AddListener(() => { if (!model.IsOpen) { SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } achieveModel.GotoCompleteAchievement(achievementId); WindowCenter.Instance.CloseImmediately<OpenServerActivityWin>(); }); } } } } } System/OpenServerActivity/FestivalAchievementCell.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 12564f8eddbe819479abc2549db5487c timeCreated: 1548727585 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/OpenServerActivity/FestivalRedpackBehaviour.cs
@@ -95,7 +95,7 @@ break; case 2: case 3: envelopeModel.SendOpenRedpackPackage(redpackServerId); envelopeModel.SendOpenRedpackPackage(redpackServerId, envelope.type); break; } } System/OpenServerActivity/FestivalRedpackModel.cs
@@ -14,6 +14,8 @@ bool serverInited = false; public List<int> systemDisplayRedpacks = new List<int>(); public List<FestivalRedpackAchievement> displayAchievements = new List<FestivalRedpackAchievement>(); public List<int> taskDisplayRedpacks = new List<int>(); int m_SelectType; public int selectType @@ -51,6 +53,9 @@ public int jumpType { get; set; } public bool autoOpen { get; set; } public bool IsOpen { get @@ -82,6 +87,10 @@ public int grabTotalJade { get; private set; } public float redpackVoiceInterval { get; private set; } DateTime voicePlayTime = DateTime.Now; public const int FESTIVALTASKREDPACKTYPE = 33; public const int FESTIVALSYSTEMREDPACK1 = 31; public const int FESTIVALSYSTEMREDPACK2 = 32; @@ -99,6 +108,7 @@ public event Action selectTypeRefresh; public event Action selectDateIndexRefresh; public event Action<int> achievementRefresh; public event Action taskRedpackRefresh; RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } } AchievementModel achievementModel { get { return ModelCenter.Instance.GetModel<AchievementModel>(); } } @@ -110,7 +120,6 @@ OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; envelopeModel.EnvelopeUpdateEvent += EnvelopeUpdateEvent; envelopeModel.EnvelopeDelEvent += EnvelopeDelEvent; envelopeModel.EnvelopeGetEvent += EnvelopeGetEvent; achievementModel.achievementCompletedEvent += AchievementCompletedEvent; achievementModel.achievementProgressUpdateEvent += AchievementProgressUpdateEvent; ParseConfig(); @@ -137,7 +146,6 @@ OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; envelopeModel.EnvelopeUpdateEvent -= EnvelopeUpdateEvent; envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent; envelopeModel.EnvelopeGetEvent -= EnvelopeGetEvent; achievementModel.achievementCompletedEvent -= AchievementCompletedEvent; achievementModel.achievementProgressUpdateEvent -= AchievementProgressUpdateEvent; } @@ -179,6 +187,14 @@ }); } } } { var config = Config.Instance.Get<FuncConfigConfig>("FeastRedPacket"); grabRedpackLimitTimes = int.Parse(config.Numerical1); config = Config.Instance.Get<FuncConfigConfig>("RedEnvelopeVoiceCd"); redpackVoiceInterval = float.Parse(config.Numerical1) / 1000; } } @@ -260,7 +276,7 @@ return festivalRedpacks.TryGetValue(id, out redpack); } public bool TryGetAchievements(out List<FestivalRedpackAchievement> list) public bool TryGetAchievements(int index, out List<FestivalRedpackAchievement> list) { return achievements.TryGetValue(festivalDay + 1, out list); } @@ -294,6 +310,22 @@ } } return lhs.id.CompareTo(rhs.id); } public int CompareEnvelope(int x, int y) { RedEnvelopeModel.RedEnvelope xEnvelope; RedEnvelopeModel.RedEnvelope yEnvelope; if (envelopeModel.TryGetEnvelope(x, out xEnvelope) && envelopeModel.TryGetEnvelope(y, out yEnvelope)) { if (xEnvelope.state.CompareTo(yEnvelope.state) != 0) { return xEnvelope.state.CompareTo(yEnvelope.state); } return -xEnvelope.time.CompareTo(yEnvelope.time); } return -x.CompareTo(y); } public void OnReceivePackage(HAB25_tagMCFeastRedPackInfo package) @@ -345,23 +377,74 @@ private void EnvelopeUpdateEvent() { bool rewardable = receiveRedpoint.state == RedPointState.GetReward; UpdateRedpoint(); if (taskRedpackRefresh != null) { taskRedpackRefresh(); } if (!rewardable && receiveRedpoint.state == RedPointState.GetReward && serverInited && !ExistSelfTaskRedpack()) { PlayRedpackVoice(); } } public bool ExistSelfTaskRedpack() { List<int> list; if (envelopeModel.TryGetEnvelopes(FESTIVALTASKREDPACKTYPE, out list)) { foreach (var id in list) { RedEnvelopeModel.RedEnvelope envelope; if (envelopeModel.TryGetEnvelope(id, out envelope)) { if (envelope.player == PlayerDatas.Instance.PlayerId && envelope.state == 1) { return true; } } } } return false; } public void JudgePlayRedpackVoice(int type) { if (type == FESTIVALSYSTEMREDPACK1 || type == FESTIVALSYSTEMREDPACK2) { PlayRedpackVoice(); } } void PlayRedpackVoice() { if ((DateTime.Now - voicePlayTime).TotalSeconds < redpackVoiceInterval) { return; } SoundPlayer.Instance.PlayUIAudio(632); voicePlayTime = DateTime.Now; } private void EnvelopeDelEvent() { UpdateRedpoint(); } private void EnvelopeGetEvent(int id) if (taskRedpackRefresh != null) { taskRedpackRefresh(); } } private void AchievementCompletedEvent(int _achieve) { List<FestivalRedpackAchievement> list; if (TryGetAchievements(out list) && IsContainsAchievement(list, _achieve)) if (TryGetAchievements(festivalDay + 1, out list) && IsContainsAchievement(list, _achieve)) { if (achievementRefresh != null) { @@ -374,7 +457,7 @@ private void AchievementProgressUpdateEvent(int _achieve) { List<FestivalRedpackAchievement> list; if (TryGetAchievements(out list) && IsContainsAchievement(list, _achieve)) if (TryGetAchievements(festivalDay + 1, out list) && IsContainsAchievement(list, _achieve)) { if (achievementRefresh != null) { @@ -420,7 +503,7 @@ } List<FestivalRedpackAchievement> list; if (TryGetAchievements(out list)) if (TryGetAchievements(festivalDay + 1, out list)) { foreach (var festivalRedpackAchievement in list) { @@ -461,9 +544,9 @@ } } } systemRedpoint.state = existSystemRedpack ? RedPointState.Simple : RedPointState.None; systemRedpoint.state = existSystemRedpack ? RedPointState.GetReward : RedPointState.None; taskRedpoint.state = existFinishTask ? RedPointState.Simple : RedPointState.None; receiveRedpoint.state = existUnGetRedpack ? RedPointState.Simple : RedPointState.None; receiveRedpoint.state = existUnGetRedpack ? RedPointState.GetReward : RedPointState.None; } } System/OpenServerActivity/FestivalRedpackWin.cs
@@ -15,6 +15,25 @@ public class FestivalRedpackWin : Window { [SerializeField] FestivalRedpackSystemBehaviour m_FestivalSystemBehaviour; [SerializeField] Transform m_ContainerAchievement; [SerializeField] ScrollerController m_AchievementController; [SerializeField] Transform m_ContainerRedEnvelope; [SerializeField] ScrollerController m_RedEnvelopeControl; [SerializeField] Transform m_ContainerNoEnvelope; [SerializeField] Text m_OpenTime; [SerializeField] Transform m_ContainerGrab; [SerializeField] Text m_GrabCount; [SerializeField] Text m_GrabJade; FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } AchievementModel achieveModel { get { return ModelCenter.Instance.GetModel<AchievementModel>(); } } RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } } #region Built-in protected override void BindController() { @@ -22,10 +41,20 @@ protected override void AddListeners() { m_AchievementController.OnRefreshCell += OnRefreshAchievementCell; m_RedEnvelopeControl.OnRefreshCell += OnRefreshRedEnvelopeCell; } protected override void OnPreOpen() { model.selectTypeRefresh += SelectTypeRefresh; model.redpackGrabRefresh += RedpackGrabRefresh; WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; achieveModel.achievementCompletedEvent += FestivalAchievementRefresh; achieveModel.achievementProgressUpdateEvent += FestivalAchievementRefresh; model.taskRedpackRefresh += TaskRedpackRefresh; Display(); } protected override void OnAfterOpen() @@ -34,6 +63,14 @@ protected override void OnPreClose() { model.selectTypeRefresh -= SelectTypeRefresh; model.redpackGrabRefresh -= RedpackGrabRefresh; WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; achieveModel.achievementCompletedEvent -= FestivalAchievementRefresh; achieveModel.achievementProgressUpdateEvent -= FestivalAchievementRefresh; model.taskRedpackRefresh -= TaskRedpackRefresh; m_FestivalSystemBehaviour.Dispose(); } protected override void OnAfterClose() @@ -41,6 +78,187 @@ } #endregion void Display() { DisplayType(); DisplayOpenTime(); } void DisplayType() { m_FestivalSystemBehaviour.gameObject.SetActive(model.selectType == 1); m_ContainerAchievement.gameObject.SetActive(model.selectType == 2); m_ContainerRedEnvelope.gameObject.SetActive(model.selectType == 3); m_ContainerGrab.gameObject.SetActive(model.selectType != 2); switch (model.selectType) { case 1: m_FestivalSystemBehaviour.Display(); break; case 2: m_FestivalSystemBehaviour.Dispose(); DisplayAchievements(); break; case 3: m_FestivalSystemBehaviour.Dispose(); DisplayRedpacks(); break; } } void DisplayAchievements() { m_AchievementController.Refresh(); model.displayAchievements.Clear(); List<FestivalRedpackAchievement> list; if (model.TryGetAchievements(model.festivalDay + 1, out list)) { model.displayAchievements.AddRange(list); model.displayAchievements.Sort(model.AchievementSort); } for (int i = 0; i < model.displayAchievements.Count; i++) { m_AchievementController.AddCell(ScrollerDataType.Header, i); } m_AchievementController.Restart(); } void DisplayRedpacks() { m_RedEnvelopeControl.Refresh(); model.taskDisplayRedpacks.Clear(); List<int> list; if (envelopeModel.TryGetEnvelopes(FestivalRedpackModel.FESTIVALTASKREDPACKTYPE, out list)) { model.taskDisplayRedpacks.AddRange(list); } model.taskDisplayRedpacks.Sort(model.CompareEnvelope); var _line = Mathf.CeilToInt((float)model.taskDisplayRedpacks.Count / 5); for (int i = 0; i < _line; i++) { m_RedEnvelopeControl.AddCell(ScrollerDataType.Header, i); } m_RedEnvelopeControl.Restart(); m_ContainerNoEnvelope.gameObject.SetActive(model.taskDisplayRedpacks.Count == 0); } void DisplayOpenTime() { OperationFestivalRedpack operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation)) { m_OpenTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), operation.ToDisplayTime()); } } void DisplayGrab() { m_GrabCount.text = Mathf.Max(0, model.grabRedpackLimitTimes - model.grabRedpackTimes).ToString(); m_GrabJade.text = model.grabTotalJade.ToString(); } private void OnRefreshAchievementCell(ScrollerDataType type, CellView cell) { var achievementCell = cell as FestivalAchievementCell; achievementCell.Display(cell.index); } private void OnRefreshRedEnvelopeCell(ScrollerDataType type, CellView cell) { var redpackCell = cell as OSRedEnvelopeCell; redpackCell.Display(cell.index); } private void SelectTypeRefresh() { DisplayType(); } private void RedpackGrabRefresh() { DisplayGrab(); } private void WindowAfterOpenEvent(Window win) { if (win is OpenServerActivityWin) { AutoOpenRedpack(); } } void AutoOpenRedpack() { if (model.autoOpen && model.selectType == 3) { for (int i = 0; i < model.taskDisplayRedpacks.Count; i++) { RedEnvelopeModel.RedEnvelope envelope; if (envelopeModel.TryGetEnvelope(model.taskDisplayRedpacks[i], out envelope) && envelope.state == 1) { if (PlayerDatas.Instance.PlayerId == envelope.player || model.grabRedpackLimitTimes - model.grabRedpackTimes > 0) { ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = envelope.id; WindowCenter.Instance.Open<RedpackOpenWin>(); } } } } model.autoOpen = false; } private void DayResetEvent(int resetType) { OperationFestivalRedpack operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation)) { if (resetType == operation.resetType) { if (model.selectType == 2) { DisplayAchievements(); } } } } private void FestivalAchievementRefresh(int id) { if (model.selectType != 2) { return; } Achievement achievement; if (model.IsContainsAchievement(model.displayAchievements, id)) { FestivalRedpackAchievement festivalRedpackAchievement = model.displayAchievements.Find((x) => { return x.Contains(id); }); if (festivalRedpackAchievement != null) { if (achieveModel.TryGetAchievement(festivalRedpackAchievement.CurrentAchieve, out achievement)) { if (Achievement.IsReach(achievement.id, achievement.progress)) { DisplayAchievements(); return; } } } } m_AchievementController.m_Scorller.RefreshActiveCellViews(); } private void TaskRedpackRefresh() { if (model.selectType == 3) { DisplayRedpacks(); } } } } System/OpenServerActivity/OSRedEnvelopeCell.cs
@@ -7,16 +7,17 @@ { [SerializeField] RedPackBehaviour[] m_RedEnvelopes; OSRedEnvelopeModel m_Model; OSRedEnvelopeModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>()); } get { return ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); } } public void Init(int _line) FestivalRedpackModel festivalRedpackModel { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } public void Display(int _line) { for (int i = 0; i < m_RedEnvelopes.Length; i++) { @@ -28,6 +29,19 @@ } } } public void DisplayFestivalRedpacks(int _line) { for (int i = 0; i < m_RedEnvelopes.Length; i++) { var _index = _line * 5 + i; m_RedEnvelopes[i].gameObject.SetActive(_index < festivalRedpackModel.taskDisplayRedpacks.Count); if (_index < festivalRedpackModel.taskDisplayRedpacks.Count) { m_RedEnvelopes[i].Init(festivalRedpackModel.taskDisplayRedpacks[_index]); } } } } } System/OpenServerActivity/OSRedEnvelopeModel.cs
@@ -336,6 +336,7 @@ envelopeModel.envelopeSfx = _envelope.id; CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket(); _pak.RedPaketID = (uint)_envelope.id; _pak.GetWay = 5; GameNetSystem.Instance.SendInfo(_pak); } } @@ -452,7 +453,7 @@ { if (!WindowCenter.Instance.IsOpen<OSRedEnvelopeSendWin>()) { cacheAchievement = _id; OSRedEnvelopeSendWin.achievementId = _id; WindowCenter.Instance.Open<OSRedEnvelopeSendWin>(); } } System/OpenServerActivity/OSRedEnvelopeSendWin.cs
@@ -9,7 +9,8 @@ using UnityEngine; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { namespace Snxxz.UI { public class OSRedEnvelopeSendWin : Window { @@ -18,21 +19,14 @@ [SerializeField] Text m_Count; [SerializeField] Button m_SendBtn; [SerializeField] Button m_CloseBtn; OSRedEnvelopeModel m_Model; OSRedEnvelopeModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>()); } } AchievementModel m_AchievementModel; AchievementModel achieveModel public static int achievementId = 0; AchievementModel model { get { return m_AchievementModel ?? (m_AchievementModel = ModelCenter.Instance.GetModel<AchievementModel>()); return ModelCenter.Instance.GetModel<AchievementModel>(); } } #region Built-in @@ -43,17 +37,7 @@ protected override void AddListeners() { m_SendBtn.onClick.AddListener(() => { var _outDay = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>().openDays; if (TimeUtility.OpenDay >= _outDay) { SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } achieveModel.GetAchievementReward(model.cacheAchievement); CloseImmediately(); }); m_SendBtn.onClick.AddListener(Send); m_CloseBtn.onClick.AddListener(CloseClick); } @@ -77,11 +61,41 @@ private void DisplayRedEnvelope() { var _achieveCfg = Config.Instance.Get<SuccessConfig>(model.cacheAchievement); var _cfg = Config.Instance.Get<RedPackConfig>(_achieveCfg.RedPacketID); m_MoneyValue.text = _cfg.RedEnvelopeAmount.ToString(); m_MoneyRealValue.text = _cfg.RedEnvelopeAmount.ToString(); m_Count.text = _cfg.PacketCnt.ToString(); var successConfig = Config.Instance.Get<SuccessConfig>(achievementId); var config = Config.Instance.Get<RedPackConfig>(successConfig.RedPacketID); m_MoneyValue.text = config.RedEnvelopeAmount.ToString(); m_MoneyRealValue.text = config.RedEnvelopeAmount.ToString(); m_Count.text = config.PacketCnt.ToString(); } private void Send() { var successConfig = Config.Instance.Get<SuccessConfig>(achievementId); var config = Config.Instance.Get<RedPackConfig>(successConfig.RedPacketID); if (config != null) { switch (config.RedEnvelopeType) { case 5: var _outDay = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>().openDays; if (TimeUtility.OpenDay >= _outDay) { SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } break; case FestivalRedpackModel.FESTIVALTASKREDPACKTYPE: var isOpen = ModelCenter.Instance.GetModel<FestivalRedpackModel>().IsOpen; if (!isOpen) { SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } break; } } model.GetAchievementReward(achievementId); CloseImmediately(); } } System/OpenServerActivity/OpenServerRedEnvelopeWin.cs
@@ -239,7 +239,7 @@ private void OnRefreshCell(ScrollerDataType type, CellView _cell) { OSRedEnvelopeCell cell = _cell as OSRedEnvelopeCell; cell.Init(_cell.index); cell.Display(_cell.index); } private void OSRedEnvelopeInfoEnvent() System/OpenServerActivity/OperationFestivalRedpack.cs
@@ -39,6 +39,19 @@ m_Redpacks.Clear(); } public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(startDate.ToDisplay()); if (startDate != endDate) { textBuilder.Append("—"); textBuilder.Append(endDate.ToDisplay()); } return textBuilder.ToString(); } public class RedpackInfo { public List<int> redpacks = new List<int>(); System/OpenServerActivity/RedEnvelopeModel.cs
@@ -8,8 +8,11 @@ [XLua.LuaCallCSharp] public class RedEnvelopeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { Dictionary<int, string> redpackSfxDict = new Dictionary<int, string>(); PlayerRedPacketDatas redPackdata { get { return ModelCenter.Instance.GetModel<PlayerRedPacketDatas>(); } } OSRedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); } } FestivalRedpackModel festivalRedpackModel { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } } public override void Init() { @@ -174,7 +177,7 @@ } } public void SendGetEnvelope(int _id) public void SendGetEnvelope(int _id,int getWay) { RedEnvelope _envelope; if(m_RedEnvelopeDict.TryGetValue(_id,out _envelope)) @@ -183,6 +186,7 @@ { CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket(); _pak.RedPaketID = (uint)_id; _pak.GetWay = (byte)getWay; GameNetSystem.Instance.SendInfo(_pak); } } @@ -253,11 +257,12 @@ public int cacheEnvelopeId = 0; public int envelopeSfx { get; set; } public void SendOpenRedpackPackage(int _id) public void SendOpenRedpackPackage(int _id,int getWay) { cacheEnvelopeId = _id; CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket(); _pak.RedPaketID = (uint)_id; _pak.GetWay = (byte)getWay; GameNetSystem.Instance.SendInfo(_pak); } @@ -267,13 +272,36 @@ private void OnSystemNotifyEvent(string _key) { if (_key.Equals("OSRedpackSfx")) var config = Config.Instance.Get<SysInfoConfig>(_key); var type = 0; if (config != null && string.IsNullOrEmpty(config.richText)) { CheckRedpackSfx(); foreach (var key in redpackSfxDict.Keys) { if (_key.Equals(redpackSfxDict[key])) { type = key; break; } } } if (type != 0) { switch (type) { case 5: CheckRedpackSfx(type); break; case FestivalRedpackModel.FESTIVALSYSTEMREDPACK1: case FestivalRedpackModel.FESTIVALSYSTEMREDPACK2: case FestivalRedpackModel.FESTIVALTASKREDPACKTYPE: CheckFestivalRedpackSfx(type); break; } } } public void CheckRedpackSfx() public void CheckRedpackSfx(int type) { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OpenServerRedEnvelope)) { @@ -298,10 +326,52 @@ sfxRedpackTime = sfxRedpackTime.AddSeconds(_effect != null ? _effect.duration : 0); } } public void CheckFestivalRedpackSfx(int type) { if (!festivalRedpackModel.IsOpen) { return; } if (type == FestivalRedpackModel.FESTIVALTASKREDPACKTYPE) { if (festivalRedpackModel.grabRedpackTimes >= festivalRedpackModel.grabRedpackLimitTimes) { return; } } if (!serverInited) { return; } festivalRedpackModel.JudgePlayRedpackVoice(type); if (!(StageManager.Instance.CurrentStage is DungeonStage) || WindowCenter.Instance.IsOpen<LoadingWin>()) { return; } if (DateTime.Now >= sfxRedpackTime) { var effectId = type == FestivalRedpackModel.FESTIVALSYSTEMREDPACK1 ? 5217 : 5162; var _effect = EffectMgr.Instance.PlayUIEffect(effectId, 4500, WindowCenter.Instance.uiRoot.tipsCanvas, false); sfxRedpackTime = sfxRedpackTime.AddSeconds(2f); } } #endregion void ParseConfig() { var config = Config.Instance.Get<FuncConfigConfig>("OpenServerRedPacketRain"); var json = LitJson.JsonMapper.ToObject(config.Numerical2); foreach (var key in json.Keys) { var type = int.Parse(key); redpackSfxDict.Add(type, json[key].ToString()); } if (!redpackSfxDict.ContainsKey(5)) { redpackSfxDict.Add(5, "OSRedpackSfx"); } } public struct RedEnvelope System/OpenServerActivity/RedPackBehaviour.cs
@@ -60,7 +60,7 @@ } if (_envelope.state == 2 || _envelope.state == 3) { model.SendOpenRedpackPackage(_envelope.id); model.SendOpenRedpackPackage(_envelope.id, _envelope.type); } }); }