| | |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using TableConfig; |
| | | namespace Snxxz.UI |
| | | { |
| | | public class OSRedEnvelopeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk |
| | | { |
| | | AchievementModel m_AchievementModel; |
| | | AchievementModel achieveModel |
| | | { |
| | | get |
| | | { |
| | | return m_AchievementModel ?? (m_AchievementModel = ModelCenter.Instance.GetModel<AchievementModel>()); |
| | | } |
| | | } |
| | | |
| | | RedEnvelopeModel m_RedEnvelopeModel; |
| | | RedEnvelopeModel envelopeModel |
| | | { |
| | | get |
| | | { |
| | | return m_RedEnvelopeModel ?? (m_RedEnvelopeModel = ModelCenter.Instance.GetModel<RedEnvelopeModel>()); |
| | | } |
| | | } |
| | | |
| | | bool servereInited = false; |
| | | |
| | | public override void Init() |
| | | { |
| | | ParseConfig(); |
| | | achieveModel.achievementCompletedEvent += AchievementCompletedEvent; |
| | | achieveModel.achievementProgressUpdateEvent += AchievementProgressUpdateEvent; |
| | | FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; |
| | | TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh; |
| | | envelopeModel.EnvelopeUpdateEvent += EnvelopeUpdateEvent; |
| | | envelopeModel.EnvelopeDelEvent += EnvelopeUpdateEvent; |
| | | envelopeModel.EnvelopeGetEvent += EnvelopeGetEvent; |
| | | } |
| | | |
| | | public override void UnInit() |
| | | { |
| | | |
| | | } |
| | | |
| | | public void OnBeforePlayerDataInitialize() |
| | | { |
| | | servereInited = false; |
| | | } |
| | | |
| | | private void OnFuncStateChangeEvent(int func) |
| | | { |
| | | if (m_AllFuncs.Contains(func)) |
| | | { |
| | | UpdateAchieveRedpoint(); |
| | | } |
| | | if (func == (int)FuncOpenEnum.OpenServerRedEnvelope) |
| | | { |
| | | UpdateRedpackRedpoint(); |
| | | UpdateAchieveRedpoint(); |
| | | if (OSRedEnvelopeUpdateEvent != null) |
| | | { |
| | | OSRedEnvelopeUpdateEvent(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void OnServerOpenDayRefresh() |
| | | { |
| | | UpdateAchieveRedpoint(); |
| | | UpdateRedpackRedpoint(); |
| | | } |
| | | |
| | | public event Action FuncChangeEvent; |
| | | private int m_SelectType = 1; |
| | | public int selectType |
| | | { |
| | | get { return m_SelectType; } |
| | | set |
| | | { |
| | | m_SelectType = value; |
| | | ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = 0; |
| | | if (FuncChangeEvent != null) |
| | | { |
| | | FuncChangeEvent(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public int JumpType { get; set; } |
| | | public bool autoOpen { get; set; } |
| | | |
| | | #region 配置 |
| | | public List<int> m_OSRedAchieves { get; private set; } |
| | | public Dictionary<int, OSRedAchieve> m_OSRedAchieveDict { get; private set; } |
| | | private List<int> m_AllAchieves = new List<int>(); |
| | | public List<int> m_AllFuncs { get; private set; } |
| | | public int openDays { get; private set; } |
| | | public int OSRedEnvelopeType { get; private set; } |
| | | public int initialCount { get; private set; } |
| | | public int addSeconds { get; private set; } |
| | | public int limitCount { get; private set; } |
| | | public float envelopeVoiceCD { get; private set; } |
| | | public DateTime overTime = DateTime.Now; |
| | | public DateTime coolDownTime { get; private set; } |
| | | void ParseConfig() |
| | | { |
| | | var _allCfgs = ConfigManager.Instance.GetAllValues<OSRedAchieveConfig>(); |
| | | m_OSRedAchieveDict = new Dictionary<int, OSRedAchieve>(); |
| | | m_OSRedAchieves = new List<int>(); |
| | | m_AllFuncs = new List<int>(); |
| | | for (int i = 0; i < _allCfgs.Count; i++) |
| | | { |
| | | for (int k = 0; k < _allCfgs[i].Achieves.Length; k++) |
| | | { |
| | | m_AllAchieves.Add(_allCfgs[i].Achieves[k]); |
| | | } |
| | | m_OSRedAchieveDict.Add(_allCfgs[i].id, new OSRedAchieve() |
| | | { |
| | | id = _allCfgs[i].id, |
| | | achieves = _allCfgs[i].Achieves |
| | | }); |
| | | m_OSRedAchieves.Add(_allCfgs[i].id); |
| | | if (!m_AllFuncs.Contains(_allCfgs[i].func)) |
| | | { |
| | | m_AllFuncs.Add(_allCfgs[i].func); |
| | | } |
| | | } |
| | | |
| | | var _cfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("OpenServerRedPacketCfg"); |
| | | openDays = int.Parse(_cfg.Numerical1); |
| | | initialCount = int.Parse(_cfg.Numerical2); |
| | | addSeconds = Mathf.Max(60, int.Parse(_cfg.Numerical3)); |
| | | limitCount = int.Parse(_cfg.Numerical4); |
| | | _cfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("OpenServerRedPacketType"); |
| | | OSRedEnvelopeType = int.Parse(_cfg.Numerical1); |
| | | _cfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("RedEnvelopeVoiceCd"); |
| | | envelopeVoiceCD = float.Parse(_cfg.Numerical1) / 1000; |
| | | } |
| | | |
| | | public class OSRedAchieve |
| | | { |
| | | public int id; |
| | | |
| | | public int[] achieves; |
| | | |
| | | AchievementModel achieveModel |
| | | { |
| | | get |
| | | { |
| | | return ModelCenter.Instance.GetModel<AchievementModel>(); |
| | | } |
| | | } |
| | | |
| | | public int CurrentAchieve |
| | | { |
| | | get |
| | | { |
| | | for (int i = 0; i < achieves.Length; i++) |
| | | { |
| | | Achievement achievement; |
| | | if (achieveModel.TryGetAchievement(achieves[i], out achievement)) |
| | | { |
| | | if (!achievement.completed) |
| | | { |
| | | return achieves[i]; |
| | | } |
| | | } |
| | | } |
| | | return achieves[achieves.Length - 1]; |
| | | } |
| | | } |
| | | |
| | | public bool Contains(int _achieve) |
| | | { |
| | | for (int i = 0; i < achieves.Length; i++) |
| | | { |
| | | if (achieves[i] == _achieve) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 红点 |
| | | private Redpoint m_OpenServerRedPackRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20902); |
| | | public Redpoint m_RedAchieveRedpoint = new Redpoint(20902, 2090201); |
| | | public Redpoint m_OpenServerGetRedpin = new Redpoint(20902, 2090202); |
| | | public void UpdateAchieveRedpoint() |
| | | { |
| | | m_RedAchieveRedpoint.state = RedPointState.None; |
| | | if (TimeUtility.OpenDay >= openDays) |
| | | { |
| | | return; |
| | | } |
| | | if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OpenServerRedEnvelope)) |
| | | { |
| | | return; |
| | | } |
| | | foreach (var _achieve in m_OSRedAchieveDict.Values) |
| | | { |
| | | var _cfg = ConfigManager.Instance.GetTemplate<OSRedAchieveConfig>(_achieve.id); |
| | | if (_cfg.func != 0 && FuncOpen.Instance.IsFuncOpen(_cfg.func)) |
| | | { |
| | | continue; |
| | | } |
| | | var _id = _achieve.CurrentAchieve; |
| | | Achievement achievement; |
| | | if (achieveModel.TryGetAchievement(_id, out achievement)) |
| | | { |
| | | if (Achievement.IsReach(_id, achievement.progress) && !achievement.completed) |
| | | { |
| | | m_RedAchieveRedpoint.state = RedPointState.Simple; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void UpdateRedpackRedpoint(bool _checkVoice = false) |
| | | { |
| | | bool hasRed = m_OpenServerGetRedpin.state == RedPointState.Simple; |
| | | m_OpenServerGetRedpin.state = RedPointState.None; |
| | | if (CanGetEnvelope()) |
| | | { |
| | | m_OpenServerGetRedpin.state = RedPointState.Simple; |
| | | if (_checkVoice && !hasRed && servereInited && HasOtherRedpack() && !HasSelfRedpack()) |
| | | { |
| | | CheckRedEnvelopeVoice(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | DateTime beforePlayTime = DateTime.Now; |
| | | private void CheckRedEnvelopeVoice() |
| | | { |
| | | if ((DateTime.Now - beforePlayTime).TotalSeconds < envelopeVoiceCD) |
| | | { |
| | | return; |
| | | } |
| | | SoundPlayer.Instance.PlayUIAudio(632); |
| | | beforePlayTime = DateTime.Now; |
| | | } |
| | | #endregion |
| | | |
| | | public void OnPlayerLoginOk() |
| | | { |
| | | UpdateAchieveRedpoint(); |
| | | if (TimeUtility.OpenDay < openDays) |
| | | { |
| | | overTime = TimeUtility.ServerNow.AddDays(openDays - TimeUtility.OpenDay); |
| | | DateTime.TryParse(overTime.ToString("yyyy-MM-dd"), out overTime); |
| | | } |
| | | EnvelopeUpdateEvent(); |
| | | servereInited = true; |
| | | } |
| | | |
| | | public event Action<int> OSRedAchieveUpdateEvent; |
| | | private void AchievementCompletedEvent(int _achieve) |
| | | { |
| | | if (!m_AllAchieves.Contains(_achieve)) |
| | | { |
| | | return; |
| | | } |
| | | OSRedAchieve _redAchieve; |
| | | m_OSRedAchieves.Sort(CompareAchievement); |
| | | if (TryGetOSRedAchieve(_achieve, out _redAchieve)) |
| | | { |
| | | if (OSRedAchieveUpdateEvent != null) |
| | | { |
| | | OSRedAchieveUpdateEvent(_redAchieve.id); |
| | | } |
| | | } |
| | | UpdateAchieveRedpoint(); |
| | | } |
| | | |
| | | public bool TryGetOSRedAchieve(int _achieve, out OSRedAchieve _osRedAchieve) |
| | | { |
| | | _osRedAchieve = null; |
| | | foreach (var _redAchieve in m_OSRedAchieveDict.Values) |
| | | { |
| | | if (_redAchieve.CurrentAchieve == _achieve) |
| | | { |
| | | _osRedAchieve = _redAchieve; |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private void AchievementProgressUpdateEvent(int _achieve) |
| | | { |
| | | if (!m_AllAchieves.Contains(_achieve)) |
| | | { |
| | | return; |
| | | } |
| | | OSRedAchieve _redAchieve; |
| | | if (TryGetOSRedAchieve(_achieve, out _redAchieve)) |
| | | { |
| | | if (OSRedAchieveUpdateEvent != null) |
| | | { |
| | | OSRedAchieveUpdateEvent(_redAchieve.id); |
| | | } |
| | | } |
| | | UpdateAchieveRedpoint(); |
| | | } |
| | | |
| | | public List<int> m_OSRedEnvelopes = new List<int>(); |
| | | public event Action OSRedEnvelopeUpdateEvent; |
| | | private void EnvelopeUpdateEvent() |
| | | { |
| | | envelopeModel.GetEnvelopes(OSRedEnvelopeType, ref m_OSRedEnvelopes); |
| | | m_OSRedEnvelopes.Sort(CompareEnvelope); |
| | | if (OSRedEnvelopeUpdateEvent != null) |
| | | { |
| | | OSRedEnvelopeUpdateEvent(); |
| | | } |
| | | UpdateRedpackRedpoint(true); |
| | | } |
| | | |
| | | private void EnvelopeGetEvent(int _id) |
| | | { |
| | | RedEnvelopeModel.RedEnvelope _envelope; |
| | | if (envelopeModel.TryGetEnvelope(_id, out _envelope)) |
| | | { |
| | | if (_envelope.player == PlayerDatas.Instance.PlayerId && |
| | | _envelope.type == OSRedEnvelopeType |
| | | && _envelope.state == 1) |
| | | { |
| | | envelopeModel.cacheEnvelopeId = _envelope.id; |
| | | envelopeModel.envelopeSfx = _envelope.id; |
| | | CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket(); |
| | | _pak.RedPaketID = (uint)_envelope.id; |
| | | GameNetSystem.Instance.SendInfo(_pak); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public bool CanGetEnvelope() |
| | | { |
| | | if (TimeUtility.OpenDay >= openDays) |
| | | { |
| | | return false; |
| | | } |
| | | if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OpenServerRedEnvelope)) |
| | | { |
| | | return false; |
| | | } |
| | | if (HasSelfRedpack()) |
| | | { |
| | | return true; |
| | | } |
| | | if (getEnvelopeTimes <= 0) |
| | | { |
| | | return false; |
| | | } |
| | | for (int i = 0; i < m_OSRedEnvelopes.Count; i++) |
| | | { |
| | | RedEnvelopeModel.RedEnvelope _envelope; |
| | | if (envelopeModel.TryGetEnvelope(m_OSRedEnvelopes[i], out _envelope)) |
| | | { |
| | | if (_envelope.state == 1) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public bool HasSelfRedpack() |
| | | { |
| | | for (int i = 0; i < m_OSRedEnvelopes.Count; i++) |
| | | { |
| | | RedEnvelopeModel.RedEnvelope _envelope; |
| | | if (envelopeModel.TryGetEnvelope(m_OSRedEnvelopes[i], out _envelope)) |
| | | { |
| | | if (_envelope.state == 1 && _envelope.player == PlayerDatas.Instance.PlayerId) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public bool HasOtherRedpack() |
| | | { |
| | | for (int i = 0; i < m_OSRedEnvelopes.Count; i++) |
| | | { |
| | | RedEnvelopeModel.RedEnvelope _envelope; |
| | | if (envelopeModel.TryGetEnvelope(m_OSRedEnvelopes[i], out _envelope)) |
| | | { |
| | | if (_envelope.state == 1 && _envelope.player != PlayerDatas.Instance.PlayerId) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public int totalJadeGet { get; private set; } |
| | | public int getEnvelopeTimes { get; private set; } |
| | | |
| | | public event Action OSRedEnvelopeInfoEnvent; |
| | | public void UpdateOSRedEnvelope(HAB24_tagMCOpenServerRedPacketInfo _pak) |
| | | { |
| | | totalJadeGet = (int)_pak.MoneyNum; |
| | | getEnvelopeTimes = _pak.GrabCnt; |
| | | coolDownTime = TimeUtility.GetTime(_pak.StartTime); |
| | | if (OSRedEnvelopeInfoEnvent != null) |
| | | { |
| | | OSRedEnvelopeInfoEnvent(); |
| | | } |
| | | UpdateRedpackRedpoint(); |
| | | } |
| | | |
| | | public int cacheAchievement = 0; |
| | | public void RequestSendAchieveEnvelope(int _id) |
| | | { |
| | | if (!WindowCenter.Instance.CheckOpen<OSRedEnvelopeSendWin>()) |
| | | { |
| | | cacheAchievement = _id; |
| | | WindowCenter.Instance.Open<OSRedEnvelopeSendWin>(); |
| | | } |
| | | } |
| | | |
| | | public int CompareAchievement(int x, int y) |
| | | { |
| | | OSRedAchieve xRedAchieve; |
| | | OSRedAchieve yRedAchieve; |
| | | if (m_OSRedAchieveDict.TryGetValue(x, out xRedAchieve) |
| | | && m_OSRedAchieveDict.TryGetValue(y, out yRedAchieve)) |
| | | { |
| | | Achievement xAchievement; |
| | | Achievement yAchievement; |
| | | if (achieveModel.TryGetAchievement(xRedAchieve.CurrentAchieve, out xAchievement) |
| | | && achieveModel.TryGetAchievement(yRedAchieve.CurrentAchieve, out yAchievement)) |
| | | { |
| | | if (xAchievement.completed.CompareTo(yAchievement.completed) != 0) |
| | | { |
| | | return xAchievement.completed.CompareTo(yAchievement.completed); |
| | | } |
| | | bool xReach = Achievement.IsReach(xAchievement.id, xAchievement.progress); |
| | | bool yReach = Achievement.IsReach(yAchievement.id, yAchievement.progress); |
| | | if (xReach.CompareTo(yReach) != 0) |
| | | { |
| | | return -xReach.CompareTo(yReach); |
| | | } |
| | | } |
| | | } |
| | | return x.CompareTo(y); |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | | using System;
|
| | | using System.Collections;
|
| | | using System.Collections.Generic;
|
| | | using UnityEngine;
|
| | | using TableConfig;
|
| | | namespace Snxxz.UI
|
| | | {
|
| | | public class OSRedEnvelopeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
|
| | | {
|
| | | AchievementModel m_AchievementModel;
|
| | | AchievementModel achieveModel
|
| | | {
|
| | | get
|
| | | {
|
| | | return m_AchievementModel ?? (m_AchievementModel = ModelCenter.Instance.GetModel<AchievementModel>());
|
| | | }
|
| | | }
|
| | |
|
| | | RedEnvelopeModel m_RedEnvelopeModel;
|
| | | RedEnvelopeModel envelopeModel
|
| | | {
|
| | | get
|
| | | {
|
| | | return m_RedEnvelopeModel ?? (m_RedEnvelopeModel = ModelCenter.Instance.GetModel<RedEnvelopeModel>());
|
| | | }
|
| | | }
|
| | |
|
| | | bool servereInited = false;
|
| | |
|
| | | public override void Init()
|
| | | {
|
| | | ParseConfig();
|
| | | achieveModel.achievementCompletedEvent += AchievementCompletedEvent;
|
| | | achieveModel.achievementProgressUpdateEvent += AchievementProgressUpdateEvent;
|
| | | FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
|
| | | TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
|
| | | envelopeModel.EnvelopeUpdateEvent += EnvelopeUpdateEvent;
|
| | | envelopeModel.EnvelopeDelEvent += EnvelopeUpdateEvent;
|
| | | envelopeModel.EnvelopeGetEvent += EnvelopeGetEvent;
|
| | | OpenServerActivityCenter.Instance.Register(2, this);
|
| | | }
|
| | |
|
| | | public override void UnInit()
|
| | | {
|
| | |
|
| | | }
|
| | |
|
| | | public void OnBeforePlayerDataInitialize()
|
| | | {
|
| | | servereInited = false;
|
| | | }
|
| | |
|
| | | private void OnFuncStateChangeEvent(int func)
|
| | | {
|
| | | if (m_AllFuncs.Contains(func))
|
| | | {
|
| | | UpdateAchieveRedpoint();
|
| | | }
|
| | | if (func == (int)FuncOpenEnum.OpenServerRedEnvelope)
|
| | | {
|
| | | UpdateRedpackRedpoint();
|
| | | UpdateAchieveRedpoint();
|
| | | if (OSRedEnvelopeUpdateEvent != null)
|
| | | {
|
| | | OSRedEnvelopeUpdateEvent();
|
| | | }
|
| | | if (onStateUpate != null)
|
| | | {
|
| | | onStateUpate(2);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | private void OnServerOpenDayRefresh()
|
| | | {
|
| | | UpdateAchieveRedpoint();
|
| | | UpdateRedpackRedpoint();
|
| | | }
|
| | |
|
| | | public event Action FuncChangeEvent;
|
| | | private int m_SelectType = 1;
|
| | | public int selectType
|
| | | {
|
| | | get { return m_SelectType; }
|
| | | set
|
| | | {
|
| | | m_SelectType = value;
|
| | | ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = 0;
|
| | | if (FuncChangeEvent != null)
|
| | | {
|
| | | FuncChangeEvent();
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public int JumpType { get; set; }
|
| | | public bool autoOpen { get; set; }
|
| | |
|
| | | #region 配置
|
| | | public List<int> m_OSRedAchieves { get; private set; }
|
| | | public Dictionary<int, OSRedAchieve> m_OSRedAchieveDict { get; private set; }
|
| | | private List<int> m_AllAchieves = new List<int>();
|
| | | public List<int> m_AllFuncs { get; private set; }
|
| | | public int openDays { get; private set; }
|
| | | public int OSRedEnvelopeType { get; private set; }
|
| | | public float envelopeVoiceCD { get; private set; }
|
| | | public int addCounts { get; private set; }
|
| | | public DateTime overTime = DateTime.Now;
|
| | | void ParseConfig()
|
| | | {
|
| | | var _allCfgs = Config.Instance.GetAllValues<OSRedAchieveConfig>();
|
| | | m_OSRedAchieveDict = new Dictionary<int, OSRedAchieve>();
|
| | | m_OSRedAchieves = new List<int>();
|
| | | m_AllFuncs = new List<int>();
|
| | | for (int i = 0; i < _allCfgs.Count; i++)
|
| | | {
|
| | | for (int k = 0; k < _allCfgs[i].Achieves.Length; k++)
|
| | | {
|
| | | m_AllAchieves.Add(_allCfgs[i].Achieves[k]);
|
| | | }
|
| | | m_OSRedAchieveDict.Add(_allCfgs[i].id, new OSRedAchieve()
|
| | | {
|
| | | id = _allCfgs[i].id,
|
| | | achieves = _allCfgs[i].Achieves
|
| | | });
|
| | | m_OSRedAchieves.Add(_allCfgs[i].id);
|
| | | if (!m_AllFuncs.Contains(_allCfgs[i].func))
|
| | | {
|
| | | m_AllFuncs.Add(_allCfgs[i].func);
|
| | | }
|
| | | }
|
| | |
|
| | | var _cfg = Config.Instance.Get<FuncConfigConfig>("OpenServerRedPacketCfg");
|
| | | openDays = int.Parse(_cfg.Numerical1);
|
| | | addCounts = int.Parse(_cfg.Numerical5);
|
| | | _cfg = Config.Instance.Get<FuncConfigConfig>("OpenServerRedPacketType");
|
| | | OSRedEnvelopeType = int.Parse(_cfg.Numerical1);
|
| | | _cfg = Config.Instance.Get<FuncConfigConfig>("RedEnvelopeVoiceCd");
|
| | | envelopeVoiceCD = float.Parse(_cfg.Numerical1) / 1000;
|
| | | }
|
| | |
|
| | | public class OSRedAchieve
|
| | | {
|
| | | public int id;
|
| | |
|
| | | public int[] achieves;
|
| | |
|
| | | AchievementModel achieveModel
|
| | | {
|
| | | get
|
| | | {
|
| | | return ModelCenter.Instance.GetModel<AchievementModel>();
|
| | | }
|
| | | }
|
| | |
|
| | | public int CurrentAchieve
|
| | | {
|
| | | get
|
| | | {
|
| | | for (int i = 0; i < achieves.Length; i++)
|
| | | {
|
| | | Achievement achievement;
|
| | | if (achieveModel.TryGetAchievement(achieves[i], out achievement))
|
| | | {
|
| | | if (!achievement.completed)
|
| | | {
|
| | | return achieves[i];
|
| | | }
|
| | | }
|
| | | }
|
| | | return achieves[achieves.Length - 1];
|
| | | }
|
| | | }
|
| | |
|
| | | public bool Contains(int _achieve)
|
| | | {
|
| | | for (int i = 0; i < achieves.Length; i++)
|
| | | {
|
| | | if (achieves[i] == _achieve)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | #region 红点
|
| | | private Redpoint m_OpenServerRedPackRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20902);
|
| | | public Redpoint m_RedAchieveRedpoint = new Redpoint(20902, 2090201);
|
| | | public Redpoint m_OpenServerGetRedpin = new Redpoint(20902, 2090202);
|
| | | public void UpdateAchieveRedpoint()
|
| | | {
|
| | | m_RedAchieveRedpoint.state = RedPointState.None;
|
| | | if (TimeUtility.OpenDay >= openDays)
|
| | | {
|
| | | return;
|
| | | }
|
| | | if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OpenServerRedEnvelope))
|
| | | {
|
| | | return;
|
| | | }
|
| | | foreach (var _achieve in m_OSRedAchieveDict.Values)
|
| | | {
|
| | | var _cfg = Config.Instance.Get<OSRedAchieveConfig>(_achieve.id);
|
| | | if (_cfg.func != 0 && FuncOpen.Instance.IsFuncOpen(_cfg.func))
|
| | | {
|
| | | continue;
|
| | | }
|
| | | var _id = _achieve.CurrentAchieve;
|
| | | Achievement achievement;
|
| | | if (achieveModel.TryGetAchievement(_id, out achievement))
|
| | | {
|
| | | if (Achievement.IsReach(_id, achievement.progress) && !achievement.completed)
|
| | | {
|
| | | m_RedAchieveRedpoint.state = RedPointState.Simple;
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public void UpdateRedpackRedpoint(bool _checkVoice = false)
|
| | | {
|
| | | bool hasRed = m_OpenServerGetRedpin.state == RedPointState.GetReward;
|
| | | m_OpenServerGetRedpin.state = RedPointState.None;
|
| | | if (CanGetEnvelope())
|
| | | {
|
| | | m_OpenServerGetRedpin.state = RedPointState.GetReward;
|
| | | if (_checkVoice && !hasRed && servereInited && HasOtherRedpack() && !HasSelfRedpack())
|
| | | {
|
| | | CheckRedEnvelopeVoice();
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | DateTime beforePlayTime = DateTime.Now;
|
| | | private void CheckRedEnvelopeVoice()
|
| | | {
|
| | | if ((DateTime.Now - beforePlayTime).TotalSeconds < envelopeVoiceCD)
|
| | | {
|
| | | return;
|
| | | }
|
| | | SoundPlayer.Instance.PlayUIAudio(632);
|
| | | beforePlayTime = DateTime.Now;
|
| | | }
|
| | | #endregion
|
| | |
|
| | | public void OnPlayerLoginOk()
|
| | | {
|
| | | UpdateAchieveRedpoint();
|
| | | if (TimeUtility.OpenDay < openDays)
|
| | | {
|
| | | overTime = TimeUtility.ServerNow.AddDays(openDays - TimeUtility.OpenDay);
|
| | | DateTime.TryParse(overTime.ToString("yyyy-MM-dd"), out overTime);
|
| | | }
|
| | | EnvelopeUpdateEvent();
|
| | | servereInited = true;
|
| | | }
|
| | |
|
| | | public event Action<int> OSRedAchieveUpdateEvent;
|
| | | private void AchievementCompletedEvent(int _achieve)
|
| | | {
|
| | | if (!m_AllAchieves.Contains(_achieve))
|
| | | {
|
| | | return;
|
| | | }
|
| | | OSRedAchieve _redAchieve;
|
| | | m_OSRedAchieves.Sort(CompareAchievement);
|
| | | if (TryGetOSRedAchieve(_achieve, out _redAchieve))
|
| | | {
|
| | | if (OSRedAchieveUpdateEvent != null)
|
| | | {
|
| | | OSRedAchieveUpdateEvent(_redAchieve.id);
|
| | | }
|
| | | }
|
| | | UpdateAchieveRedpoint();
|
| | | }
|
| | |
|
| | | public bool TryGetOSRedAchieve(int _achieve, out OSRedAchieve _osRedAchieve)
|
| | | {
|
| | | _osRedAchieve = null;
|
| | | foreach (var _redAchieve in m_OSRedAchieveDict.Values)
|
| | | {
|
| | | if (_redAchieve.CurrentAchieve == _achieve)
|
| | | {
|
| | | _osRedAchieve = _redAchieve;
|
| | | return true;
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | private void AchievementProgressUpdateEvent(int _achieve)
|
| | | {
|
| | | if (!m_AllAchieves.Contains(_achieve))
|
| | | {
|
| | | return;
|
| | | }
|
| | | OSRedAchieve _redAchieve;
|
| | | if (TryGetOSRedAchieve(_achieve, out _redAchieve))
|
| | | {
|
| | | if (OSRedAchieveUpdateEvent != null)
|
| | | {
|
| | | OSRedAchieveUpdateEvent(_redAchieve.id);
|
| | | }
|
| | | }
|
| | | UpdateAchieveRedpoint();
|
| | | }
|
| | |
|
| | | public List<int> m_OSRedEnvelopes = new List<int>();
|
| | | public event Action OSRedEnvelopeUpdateEvent;
|
| | | private void EnvelopeUpdateEvent()
|
| | | {
|
| | | envelopeModel.GetEnvelopes(OSRedEnvelopeType, ref m_OSRedEnvelopes);
|
| | | m_OSRedEnvelopes.Sort(CompareEnvelope);
|
| | | if (OSRedEnvelopeUpdateEvent != null)
|
| | | {
|
| | | OSRedEnvelopeUpdateEvent();
|
| | | }
|
| | | UpdateRedpackRedpoint(true);
|
| | | }
|
| | |
|
| | | private void EnvelopeGetEvent(int _id)
|
| | | {
|
| | | RedEnvelopeModel.RedEnvelope _envelope;
|
| | | if (envelopeModel.TryGetEnvelope(_id, out _envelope))
|
| | | {
|
| | | if (_envelope.player == PlayerDatas.Instance.PlayerId &&
|
| | | _envelope.type == OSRedEnvelopeType
|
| | | && _envelope.state == 1)
|
| | | {
|
| | | envelopeModel.cacheEnvelopeId = _envelope.id;
|
| | | envelopeModel.envelopeSfx = _envelope.id;
|
| | | CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket();
|
| | | _pak.RedPaketID = (uint)_envelope.id;
|
| | | GameNetSystem.Instance.SendInfo(_pak);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public bool CanGetEnvelope()
|
| | | {
|
| | | if (TimeUtility.OpenDay >= openDays)
|
| | | {
|
| | | return false;
|
| | | }
|
| | | if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OpenServerRedEnvelope))
|
| | | {
|
| | | return false;
|
| | | }
|
| | | if (HasSelfRedpack())
|
| | | {
|
| | | return true;
|
| | | }
|
| | | if (getEnvelopeTimes <= 0)
|
| | | {
|
| | | return false;
|
| | | }
|
| | | for (int i = 0; i < m_OSRedEnvelopes.Count; i++)
|
| | | {
|
| | | RedEnvelopeModel.RedEnvelope _envelope;
|
| | | if (envelopeModel.TryGetEnvelope(m_OSRedEnvelopes[i], out _envelope))
|
| | | {
|
| | | if (_envelope.state == 1)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | public bool HasSelfRedpack()
|
| | | {
|
| | | for (int i = 0; i < m_OSRedEnvelopes.Count; i++)
|
| | | {
|
| | | RedEnvelopeModel.RedEnvelope _envelope;
|
| | | if (envelopeModel.TryGetEnvelope(m_OSRedEnvelopes[i], out _envelope))
|
| | | {
|
| | | if (_envelope.state == 1 && _envelope.player == PlayerDatas.Instance.PlayerId)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | public bool HasOtherRedpack()
|
| | | {
|
| | | for (int i = 0; i < m_OSRedEnvelopes.Count; i++)
|
| | | {
|
| | | RedEnvelopeModel.RedEnvelope _envelope;
|
| | | if (envelopeModel.TryGetEnvelope(m_OSRedEnvelopes[i], out _envelope))
|
| | | {
|
| | | if (_envelope.state == 1 && _envelope.player != PlayerDatas.Instance.PlayerId)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | public int totalJadeGet { get; private set; }
|
| | | public int getEnvelopeTimes { get; private set; }
|
| | |
|
| | | public bool IsOpen
|
| | | {
|
| | | get
|
| | | {
|
| | | return TimeUtility.OpenDay < openDays && FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OpenServerRedEnvelope);
|
| | | }
|
| | | }
|
| | |
|
| | | public bool priorityOpen
|
| | | {
|
| | | get
|
| | | {
|
| | | return m_RedAchieveRedpoint.state == RedPointState.Simple
|
| | | || m_OpenServerGetRedpin.state == RedPointState.GetReward;
|
| | | }
|
| | | }
|
| | |
|
| | | public bool IsAdvance
|
| | | {
|
| | | get
|
| | | {
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | public event Action OSRedEnvelopeInfoEnvent;
|
| | | public event Action<int> onStateUpate;
|
| | |
|
| | | public void UpdateOSRedEnvelope(HAB24_tagMCOpenServerRedPacketInfo _pak)
|
| | | {
|
| | | totalJadeGet = (int)_pak.MoneyNum;
|
| | | getEnvelopeTimes = _pak.GrabCnt;
|
| | | if (OSRedEnvelopeInfoEnvent != null)
|
| | | {
|
| | | OSRedEnvelopeInfoEnvent();
|
| | | }
|
| | | UpdateRedpackRedpoint();
|
| | | }
|
| | |
|
| | | public int cacheAchievement = 0;
|
| | | public void RequestSendAchieveEnvelope(int _id)
|
| | | {
|
| | | if (!WindowCenter.Instance.CheckOpen<OSRedEnvelopeSendWin>())
|
| | | {
|
| | | cacheAchievement = _id;
|
| | | WindowCenter.Instance.Open<OSRedEnvelopeSendWin>();
|
| | | }
|
| | | }
|
| | |
|
| | | public int CompareAchievement(int x, int y)
|
| | | {
|
| | | OSRedAchieve xRedAchieve;
|
| | | OSRedAchieve yRedAchieve;
|
| | | if (m_OSRedAchieveDict.TryGetValue(x, out xRedAchieve)
|
| | | && m_OSRedAchieveDict.TryGetValue(y, out yRedAchieve))
|
| | | {
|
| | | Achievement xAchievement;
|
| | | Achievement yAchievement;
|
| | | if (achieveModel.TryGetAchievement(xRedAchieve.CurrentAchieve, out xAchievement)
|
| | | && achieveModel.TryGetAchievement(yRedAchieve.CurrentAchieve, out yAchievement))
|
| | | {
|
| | | if (xAchievement.completed.CompareTo(yAchievement.completed) != 0)
|
| | | {
|
| | | return xAchievement.completed.CompareTo(yAchievement.completed);
|
| | | }
|
| | | bool xReach = Achievement.IsReach(xAchievement.id, xAchievement.progress);
|
| | | bool yReach = Achievement.IsReach(yAchievement.id, yAchievement.progress);
|
| | | if (xReach.CompareTo(yReach) != 0)
|
| | | {
|
| | | return -xReach.CompareTo(yReach);
|
| | | }
|
| | | }
|
| | | }
|
| | | return x.CompareTo(y);
|
| | | }
|
| | |
|
| | | 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);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|