using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using LitJson; using System.Text.RegularExpressions; using vnxbqy.UI; namespace vnxbqy.UI { public class PrayerModel : Model { public event Action OnCoinPrayerEvent; public event Action OnExpPrayerEvent; public event Action freeCoinPrayerStateChange; VipModel m_VipModel; VipModel vipModel { get { return m_VipModel ?? (m_VipModel = ModelCenter.Instance.GetModel()); } } PackModel _playerPack; PackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel()); } } public override void Init() { lastCoinPrayerTime = 0; expPrayerCnt = 0; coinPrayerCnt = 0; ParseCfg(); FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; playerPack.refreshItemCountEvent += RefreshItemCountAct; TimeMgr.Instance.OnSyntonyEvent += OnSyntonyEvent; PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent; } private void PlayerDataRefreshInfoEvent(PlayerDataType refreshType) { if (refreshType == PlayerDataType.LV) { UpdateRedPoint(); } } private void RefreshItemCountAct(PackType _packType, int arg2, int _itemId) { if (_packType == PackType.Item && (_itemId == prayerExpRune || _itemId == prayerCoinRune)) { UpdateRedPoint(); if (_itemId == prayerCoinRune && freeCoinPrayerStateChange != null) { freeCoinPrayerStateChange(); } } } private void OnFuncStateChangeEvent(int func) { if (func == (int)FuncOpenEnum.CoinPray || func == (int)FuncOpenEnum.ExpPray) { UpdateRedPoint(); if (func == (int)FuncOpenEnum.CoinPray && freeCoinPrayerStateChange != null) { freeCoinPrayerStateChange(); } } } public override void UnInit() { FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; playerPack.refreshItemCountEvent -= RefreshItemCountAct; TimeMgr.Instance.OnSyntonyEvent -= OnSyntonyEvent; } public uint lastCoinPrayerTime { get; private set; } public uint expPrayerCnt { get; private set; } public uint coinPrayerCnt { get; private set; } #region 配置 public string prayerCoinCostFormula { get; private set; } public string prayerExpFormula { get; private set; } public string prayerExpCostFormula { get; private set; } public int prayerGetCoin { get; private set; } public int prayerCoinFreeTime { get; private set; } public int prayerExpRune { get; private set; } public int prayerCoinRune { get; private set; } public int prayerSpecialCoinCount { get; private set; } public int prayerSpecialCoinValue { get; private set; } private void ParseCfg() { FuncConfigConfig cfg = FuncConfigConfig.Get("MoneyPray"); if (cfg != null) { prayerCoinCostFormula = cfg.Numerical1; prayerGetCoin = int.Parse(cfg.Numerical2); prayerCoinFreeTime = int.Parse(cfg.Numerical3); var array = LitJson.JsonMapper.ToObject(cfg.Numerical4); prayerSpecialCoinCount = array[0]; prayerSpecialCoinValue = array[1]; } cfg = FuncConfigConfig.Get("ExpPray"); if (cfg != null) { prayerExpCostFormula = cfg.Numerical1; prayerExpFormula = cfg.Numerical2; } cfg = FuncConfigConfig.Get("FreeExpPrayItem"); if (cfg != null) { prayerExpRune = int.Parse(cfg.Numerical1); prayerCoinRune = int.Parse(cfg.Numerical2); } } #endregion public int specialCoinPrayer { get; private set; } public void UpdateHistoryCoin(int _count) { specialCoinPrayer = _count; } public void SendCoinPrayer() { if (!CanFreeCoinPrayer()) { if (coinPrayerCnt >= GetAllCoinPrayCnt()) { SysNotifyMgr.Instance.ShowTip("PrayerWin_2"); return; } if (PlayerDatas.Instance.baseData.diamond < GetCoinPrayerCost()) { if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("GoldErr"); return; } WindowCenter.Instance.Open(); return; } } CA530_tagCMBuySomething prayerpack = new CA530_tagCMBuySomething(); prayerpack.Type = (int)VipPrivilegeType.GoldWish; GameNetSystem.Instance.SendInfo(prayerpack); } public void OnUpdatePrayerData(HA330_tagMCBuySomething vNetData) { for (int i = 0; i < vNetData.Cnt; i++) { HA330_tagMCBuySomething.tagMCSingleBuySomethingInfo data = vNetData.Infos[i]; if (data.Type == (int)VipPrivilegeType.GoldWish) { UpdateCoinPrayerCnt(data.BuyCnt); UpdateCoinPrayerTime(data.LastFreeTime); UpdateHistoryCoin(data.HistoryBuyCnt); TimeSpan t = TimeUtility.ServerNow - TimeUtility.GetTime(lastCoinPrayerTime); if (t.TotalSeconds < prayerCoinFreeTime) { TimeMgr.Instance.Register(TimeMgr.SyntonyType.PrayerRedpoint, prayerCoinFreeTime - (float)t.TotalSeconds); } if (OnCoinPrayerEvent != null) { OnCoinPrayerEvent(); } if (freeCoinPrayerStateChange != null) { freeCoinPrayerStateChange(); } } else if (data.Type == (int)VipPrivilegeType.ExpWish) { UpdateExpPrayerCnt(data.BuyCnt); } } UpdateRedPoint(); } public void UpdateCoinPrayerTime(uint _time) { lastCoinPrayerTime = _time; } public void UpdateExpPrayerCnt(uint _cnt) { expPrayerCnt = _cnt; if (OnExpPrayerEvent != null) OnExpPrayerEvent(); } public void UpdateCoinPrayerCnt(uint _cnt) { coinPrayerCnt = _cnt; } public void SendExpPrayer() { var _expRuneCnt = playerPack.GetItemCountByID(PackType.Item, prayerExpRune); if (_expRuneCnt <= 0) { if (expPrayerCnt >= GetAllExpPrayCnt()) { SysNotifyMgr.Instance.ShowTip("PrayerWin_2"); return; } if (PlayerDatas.Instance.baseData.diamond < GetExpPrayerCost()) { if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("GoldErr"); return; } WindowCenter.Instance.Open(); return; } } CA530_tagCMBuySomething prayerpack = new CA530_tagCMBuySomething(); prayerpack.Type = (int)VipPrivilegeType.ExpWish; GameNetSystem.Instance.SendInfo(prayerpack); } public int GetCoinPrayerCost() { Equation.Instance.Clear(); Equation.Instance.AddKeyValue("cnt", coinPrayerCnt + 1); return Equation.Instance.Eval(prayerCoinCostFormula); } public string GetExpPrayerVal() { Equation.Instance.Clear(); Equation.Instance.AddKeyValue("exp", PlayerLVConfig.GetExpByPlayerLv(PlayerDatas.Instance.baseData.LV)); PlayerLVConfig cfg = PlayerLVConfig.Get(PlayerDatas.Instance.baseData.LV); if (cfg != null) { Equation.Instance.AddKeyValue("reExp", cfg.ReExp); } double _value = Equation.Instance.Eval(prayerExpFormula); return _value.ToString(); } public int GetExpPrayerCost() { Equation.Instance.Clear(); Equation.Instance.AddKeyValue("cnt", expPrayerCnt + 1); return Equation.Instance.Eval(prayerExpCostFormula); } public int GetAllCoinPrayCnt() { return ModelCenter.Instance.GetModel().GetVipPrivilegeCnt(VipPrivilegeType.GoldWish); } public int GetAllExpPrayCnt() { return ModelCenter.Instance.GetModel().GetVipPrivilegeCnt(VipPrivilegeType.ExpWish); } public bool CanFreeCoinPrayer() { var _coinRuneCnt = playerPack.GetItemCountByID(PackType.Item, prayerCoinRune); if (_coinRuneCnt > 0) { return true; } if (lastCoinPrayerTime == 0) { return true; } TimeSpan t = TimeUtility.ServerNow - TimeUtility.GetTime(lastCoinPrayerTime); if (t.TotalSeconds >= prayerCoinFreeTime) { return true; } return false; } public bool FreeCoinPrayerTime() { if (lastCoinPrayerTime == 0) { return true; } TimeSpan t = TimeUtility.ServerNow - TimeUtility.GetTime(lastCoinPrayerTime); if (t.TotalSeconds >= prayerCoinFreeTime) { return true; } return false; } private void OnSyntonyEvent(TimeMgr.SyntonyType type) { if (type == TimeMgr.SyntonyType.PrayerRedpoint) { UpdateRedPoint(); if (freeCoinPrayerStateChange != null) { freeCoinPrayerStateChange(); } } } #region 红点 public Redpoint redpoint = new Redpoint(201, 20102); public void UpdateRedPoint() { var redpointAble = false; if (PlayerDatas.Instance.baseData.LV >= GeneralDefine.prayerRedpointLimitLv) { if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.CoinPray)) { if (CanFreeCoinPrayer()) { redpointAble = true; } } if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.ExpPray)) { var _expRuneCnt = playerPack.GetItemCountByID(PackType.Item, prayerExpRune); if (_expRuneCnt > 0) { redpointAble = true; } } } redpoint.state = redpointAble ? RedPointState.GetReward : RedPointState.None; } #endregion } }