From bb98d8ae9ff4d799bd8e2c11ddf3335ab4e0b017 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 29 一月 2019 14:09:29 +0800
Subject: [PATCH] 6086 【前端】【1.5.200】春节红包雨活动
---
System/OpenServerActivity/FestivalAchievementCell.cs | 86 ++++++
System/FairyAu/RedBagTipsWin.cs | 4
Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs | 2
System/OpenServerActivity/RedPackBehaviour.cs | 2
System/OpenServerActivity/FestivalRedpackBehaviour.cs | 2
System/OpenServerActivity/OSRedEnvelopeCell.cs | 80 +++--
System/FairyAu/RedBagScripts.cs | 11
System/FairyAu/RedpackOpenWin.cs | 2
System/OpenServerActivity/FestivalRedpackWin.cs | 218 ++++++++++++++++
System/OpenServerActivity/OSRedEnvelopeModel.cs | 3
System/OpenServerActivity/OpenServerRedEnvelopeWin.cs | 2
System/OpenServerActivity/RedEnvelopeModel.cs | 80 +++++
System/OpenServerActivity/OperationFestivalRedpack.cs | 13 +
System/OpenServerActivity/FestivalRedpackModel.cs | 109 +++++++-
System/OpenServerActivity/OSRedEnvelopeSendWin.cs | 70 +++--
System/OpenServerActivity/FestivalAchievementCell.cs.meta | 12
System/FairyAu/PlayerRedPacketDatas.cs | 24 +
System/MainInterfacePanel/MainInterfaceWin.cs | 10
18 files changed, 633 insertions(+), 97 deletions(-)
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs b/Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs
index a5790dd..ce376bc 100644
--- a/Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs
+++ b/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);
}
}
diff --git a/System/FairyAu/PlayerRedPacketDatas.cs b/System/FairyAu/PlayerRedPacketDatas.cs
index 9bf5cd5..3b3862b 100644
--- a/System/FairyAu/PlayerRedPacketDatas.cs
+++ b/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;
+ }
+
}
diff --git a/System/FairyAu/RedBagScripts.cs b/System/FairyAu/RedBagScripts.cs
index 6e67dfc..848bfbd 100644
--- a/System/FairyAu/RedBagScripts.cs
+++ b/System/FairyAu/RedBagScripts.cs
@@ -56,7 +56,9 @@
{
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);
}
}
diff --git a/System/FairyAu/RedBagTipsWin.cs b/System/FairyAu/RedBagTipsWin.cs
index 1f5ce21..a262c8d 100644
--- a/System/FairyAu/RedBagTipsWin.cs
+++ b/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);
}
diff --git a/System/FairyAu/RedpackOpenWin.cs b/System/FairyAu/RedpackOpenWin.cs
index b64654d..d565cab 100644
--- a/System/FairyAu/RedpackOpenWin.cs
+++ b/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;
diff --git a/System/MainInterfacePanel/MainInterfaceWin.cs b/System/MainInterfacePanel/MainInterfaceWin.cs
index 620f784..10a561e 100644
--- a/System/MainInterfacePanel/MainInterfaceWin.cs
+++ b/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()//寮曞寮�濮�
diff --git a/System/OpenServerActivity/FestivalAchievementCell.cs b/System/OpenServerActivity/FestivalAchievementCell.cs
new file mode 100644
index 0000000..fac4998
--- /dev/null
+++ b/System/OpenServerActivity/FestivalAchievementCell.cs
@@ -0,0 +1,86 @@
+锘縰sing 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>();
+ });
+ }
+ }
+ }
+ }
+}
+
diff --git a/System/OpenServerActivity/FestivalAchievementCell.cs.meta b/System/OpenServerActivity/FestivalAchievementCell.cs.meta
new file mode 100644
index 0000000..d816d9e
--- /dev/null
+++ b/System/OpenServerActivity/FestivalAchievementCell.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 12564f8eddbe819479abc2549db5487c
+timeCreated: 1548727585
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/System/OpenServerActivity/FestivalRedpackBehaviour.cs b/System/OpenServerActivity/FestivalRedpackBehaviour.cs
index 08c54e3..b4e7fe8 100644
--- a/System/OpenServerActivity/FestivalRedpackBehaviour.cs
+++ b/System/OpenServerActivity/FestivalRedpackBehaviour.cs
@@ -95,7 +95,7 @@
break;
case 2:
case 3:
- envelopeModel.SendOpenRedpackPackage(redpackServerId);
+ envelopeModel.SendOpenRedpackPackage(redpackServerId, envelope.type);
break;
}
}
diff --git a/System/OpenServerActivity/FestivalRedpackModel.cs b/System/OpenServerActivity/FestivalRedpackModel.cs
index 4481cd5..f5594e4 100644
--- a/System/OpenServerActivity/FestivalRedpackModel.cs
+++ b/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;
}
}
diff --git a/System/OpenServerActivity/FestivalRedpackWin.cs b/System/OpenServerActivity/FestivalRedpackWin.cs
index 602f65c..6c02673 100644
--- a/System/OpenServerActivity/FestivalRedpackWin.cs
+++ b/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();
+ }
+ }
}
}
diff --git a/System/OpenServerActivity/OSRedEnvelopeCell.cs b/System/OpenServerActivity/OSRedEnvelopeCell.cs
index a6c4936..1426311 100644
--- a/System/OpenServerActivity/OSRedEnvelopeCell.cs
+++ b/System/OpenServerActivity/OSRedEnvelopeCell.cs
@@ -1,33 +1,47 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-namespace Snxxz.UI
-{
- public class OSRedEnvelopeCell : CellView
- {
- [SerializeField] RedPackBehaviour[] m_RedEnvelopes;
-
- OSRedEnvelopeModel m_Model;
- OSRedEnvelopeModel model
- {
- get
- {
- return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>());
- }
- }
-
- public void Init(int _line)
- {
- for (int i = 0; i < m_RedEnvelopes.Length; i++)
- {
- var _index = _line * 5 + i;
- m_RedEnvelopes[i].gameObject.SetActive(_index < model.m_OSRedEnvelopes.Count);
- if (_index < model.m_OSRedEnvelopes.Count)
- {
- m_RedEnvelopes[i].Init(model.m_OSRedEnvelopes[_index]);
- }
- }
- }
- }
-}
-
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+namespace Snxxz.UI
+{
+ public class OSRedEnvelopeCell : CellView
+ {
+ [SerializeField] RedPackBehaviour[] m_RedEnvelopes;
+
+ OSRedEnvelopeModel model
+ {
+ get { return ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); }
+ }
+
+ FestivalRedpackModel festivalRedpackModel
+ {
+ get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); }
+ }
+
+ public void Display(int _line)
+ {
+ for (int i = 0; i < m_RedEnvelopes.Length; i++)
+ {
+ var _index = _line * 5 + i;
+ m_RedEnvelopes[i].gameObject.SetActive(_index < model.m_OSRedEnvelopes.Count);
+ if (_index < model.m_OSRedEnvelopes.Count)
+ {
+ m_RedEnvelopes[i].Init(model.m_OSRedEnvelopes[_index]);
+ }
+ }
+ }
+
+ 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]);
+ }
+ }
+ }
+ }
+}
+
diff --git a/System/OpenServerActivity/OSRedEnvelopeModel.cs b/System/OpenServerActivity/OSRedEnvelopeModel.cs
index 83aafaf..c7b6982 100644
--- a/System/OpenServerActivity/OSRedEnvelopeModel.cs
+++ b/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>();
}
}
diff --git a/System/OpenServerActivity/OSRedEnvelopeSendWin.cs b/System/OpenServerActivity/OSRedEnvelopeSendWin.cs
index 1cde511..2bd0aa7 100644
--- a/System/OpenServerActivity/OSRedEnvelopeSendWin.cs
+++ b/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();
}
}
diff --git a/System/OpenServerActivity/OpenServerRedEnvelopeWin.cs b/System/OpenServerActivity/OpenServerRedEnvelopeWin.cs
index 0d0a202..5ee9356 100644
--- a/System/OpenServerActivity/OpenServerRedEnvelopeWin.cs
+++ b/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()
diff --git a/System/OpenServerActivity/OperationFestivalRedpack.cs b/System/OpenServerActivity/OperationFestivalRedpack.cs
index 628515f..6981fcc 100644
--- a/System/OpenServerActivity/OperationFestivalRedpack.cs
+++ b/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>();
diff --git a/System/OpenServerActivity/RedEnvelopeModel.cs b/System/OpenServerActivity/RedEnvelopeModel.cs
index 8b69e2d..3080175 100644
--- a/System/OpenServerActivity/RedEnvelopeModel.cs
+++ b/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
diff --git a/System/OpenServerActivity/RedPackBehaviour.cs b/System/OpenServerActivity/RedPackBehaviour.cs
index 0d335f1..7221a5d 100644
--- a/System/OpenServerActivity/RedPackBehaviour.cs
+++ b/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);
}
});
}
--
Gitblit v1.8.0