少年修仙传客户端代码仓库
hch
2020-09-24 23752c9107327519292575a07701c6bed507c8b8
0312 增加多倍充值活动
5个文件已修改
14个文件已添加
653 ■■■■■ 已修改文件
Core/GameEngine/DataToCtl/PackageRegedit.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA27_tagMCActRechargePrizeInfo.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA27_tagMCActRechargePrizeInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA28_tagMCRechargePrizePlayerInfo.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA28_tagMCRechargePrizePlayerInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA27_tagMCActRechargePrizeInfo.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA27_tagMCActRechargePrizeInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA28_tagMCRechargePrizePlayerInfo.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA28_tagMCRechargePrizePlayerInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/MultiRechargeWin.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/MultiRechargeWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OperationMultiRecharge.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OperationMultiRecharge.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/MultiRechargeModel.cs 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/MultiRechargeModel.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/RechargeBehaviour.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipModel.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Welfare/OperationTimeHepler.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/ModelCenter.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -501,6 +501,9 @@
        #endregion
        Register(typeof(HB027_tagMCActivityPlaceInfo), typeof(DTCB027_tagMCActivityPlaceInfo));
        Register(typeof(HAA28_tagMCRechargePrizePlayerInfo), typeof(DTCAA28_tagMCRechargePrizePlayerInfo));
        Register(typeof(HAA27_tagMCActRechargePrizeInfo), typeof(DTCAA27_tagMCActRechargePrizeInfo));
    }
    private static void Register(Type _pack, Type _business)
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA27_tagMCActRechargePrizeInfo.cs
New file
@@ -0,0 +1,20 @@
using UnityEngine;
using System.Collections;
using Snxxz.UI;
// AA 27 ��ֵ�������Ϣ #tagMCActRechargePrizeInfo
public class DTCAA27_tagMCActRechargePrizeInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HAA27_tagMCActRechargePrizeInfo vNetData = vNetPack as HAA27_tagMCActRechargePrizeInfo;
        OperationTimeHepler.Instance.UpdateMultiRechargePackage(vNetData);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA27_tagMCActRechargePrizeInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f424414e8e0ed9a48a58407213b9b984
timeCreated: 1600931779
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA28_tagMCRechargePrizePlayerInfo.cs
New file
@@ -0,0 +1,21 @@
using UnityEngine;
using System.Collections;
using Snxxz.UI;
// AA 28 ��ֵ������һ��Ϣ #tagMCRechargePrizePlayerInfo
public class DTCAA28_tagMCRechargePrizePlayerInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HAA28_tagMCRechargePrizePlayerInfo vNetData = vNetPack as HAA28_tagMCRechargePrizePlayerInfo;
        ModelCenter.Instance.GetModel<MultiRechargeModel>().UpdateMultiRecharge(vNetData);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA28_tagMCRechargePrizePlayerInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 3ee078628e33487449340ab7ae021575
timeCreated: 1600931779
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA27_tagMCActRechargePrizeInfo.cs
New file
@@ -0,0 +1,47 @@
using UnityEngine;
using System.Collections;
// AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo
public class HAA27_tagMCActRechargePrizeInfo : GameNetPackBasic {
    public string StartDate;    // 开始日期 y-m-d
    public string EndtDate;    // 结束日期 y-m-d
    public byte IsDayReset;    //是否每天重置
    public byte PrizeDays;
    public  tagMCActRechargePrizeDay[] PrizeDayInfo;    //每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
    public HAA27_tagMCActRechargePrizeInfo () {
        _cmd = (ushort)0xAA27;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out StartDate, vBytes, NetDataType.Chars, 10);
        TransBytes (out EndtDate, vBytes, NetDataType.Chars, 10);
        TransBytes (out IsDayReset, vBytes, NetDataType.BYTE);
        TransBytes (out PrizeDays, vBytes, NetDataType.BYTE);
        PrizeDayInfo = new tagMCActRechargePrizeDay[PrizeDays];
        for (int i = 0; i < PrizeDays; i ++) {
            PrizeDayInfo[i] = new tagMCActRechargePrizeDay();
            TransBytes (out PrizeDayInfo[i].Prizes, vBytes, NetDataType.BYTE);
            PrizeDayInfo[i].PrizeInfo = new tagMCActRechargePrize[PrizeDayInfo[i].Prizes];
            for (int j = 0; j < PrizeDayInfo[i].Prizes; j ++) {
                PrizeDayInfo[i].PrizeInfo[j] = new tagMCActRechargePrize();
                TransBytes (out PrizeDayInfo[i].PrizeInfo[j].CTGID, vBytes, NetDataType.WORD);
                TransBytes (out PrizeDayInfo[i].PrizeInfo[j].GoldPrize, vBytes, NetDataType.DWORD);
                TransBytes (out PrizeDayInfo[i].PrizeInfo[j].PrizeCountLimit, vBytes, NetDataType.BYTE);
            }
        }
    }
    public struct tagMCActRechargePrize {
        public ushort CTGID;        // 对应充值表充值ID
        public uint GoldPrize;        //返利仙玉数
        public byte PrizeCountLimit;        //限制最大返利次数
    }
    public struct tagMCActRechargePrizeDay {
        public byte Prizes;        // 返利档数
        public  tagMCActRechargePrize[] PrizeInfo;        // 返利档信息
    }
}
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA27_tagMCActRechargePrizeInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 70ceb3331fb824b46adabbabf2b6b201
timeCreated: 1600931779
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA28_tagMCRechargePrizePlayerInfo.cs
New file
@@ -0,0 +1,29 @@
using UnityEngine;
using System.Collections;
// AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo
public class HAA28_tagMCRechargePrizePlayerInfo : GameNetPackBasic {
    public byte Count;
    public  tagMCRechargePrizeInfo[] PlayerInfoList;    //玩家返利信息列表
    public HAA28_tagMCRechargePrizePlayerInfo () {
        _cmd = (ushort)0xAA28;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out Count, vBytes, NetDataType.BYTE);
        PlayerInfoList = new tagMCRechargePrizeInfo[Count];
        for (int i = 0; i < Count; i ++) {
            PlayerInfoList[i] = new tagMCRechargePrizeInfo();
            TransBytes (out PlayerInfoList[i].CTGID, vBytes, NetDataType.WORD);
            TransBytes (out PlayerInfoList[i].PrizeCount, vBytes, NetDataType.BYTE);
        }
    }
    public struct tagMCRechargePrizeInfo {
        public ushort CTGID;        // 对应充值表充值ID
        public byte PrizeCount;        // 已返利次数
    }
}
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA28_tagMCRechargePrizePlayerInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 2e6c5110783c8a44b97f66860e4fac7e
timeCreated: 1600931779
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/MultiRechargeWin.cs
New file
@@ -0,0 +1,86 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, November 06, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class MultiRechargeWin : Window
    {
        [SerializeField] Button m_GetReward;
        [SerializeField] Text m_Time;
        MultiRechargeModel model
        {
            get { return ModelCenter.Instance.GetModel<MultiRechargeModel>(); }
        }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_GetReward.onClick.AddListener(GetReward);
        }
        protected override void OnPreOpen()
        {
            model.isOpenWin = true;
            model.UpdateRedpoint();
            Dipslay();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void Dipslay()
        {
            DisplayTime();
        }
        private void DisplayTime()
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.MultiRecharge, out operationBase))
            {
                OperationMultiRecharge operation = operationBase as OperationMultiRecharge;
                m_Time.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"),
                    UIHelper.AppendColor(TextColType.Green, operation.ToDisplayTime()));
            }
        }
        private void GetReward()
        {
            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.VipRechargeFunc1);
        }
    }
}
System/OpenServerActivity/MultiRechargeWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c259d2e9aad23e4479726e243b439198
timeCreated: 1600937268
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/OperationMultiRecharge.cs
New file
@@ -0,0 +1,77 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    public class OperationMultiRecharge : OperationBase
    {
        public List<Reward> rewards = new List<Reward>();
        public override bool SatisfyOpenCondition()
        {
            return PlayerDatas.Instance.baseData.LV >= limitLv;
        }
        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 override void Reset()
        {
            base.Reset();
            rewards.Clear();
        }
        public void ParseMultiRecharge(HAA27_tagMCActRechargePrizeInfo package)
        {
            for (int i = 0; i < package.PrizeDays; i++)
            {
                var _reward = package.PrizeDayInfo[i];
                Reward reward = new Reward();
                for (int k = 0; k < _reward.Prizes; k++)
                {
                    Recharge recharge = new Recharge();
                    recharge.CTGID = _reward.PrizeInfo[k].CTGID;
                    recharge.GoldPrize = (int)_reward.PrizeInfo[k].GoldPrize;
                    recharge.PrizeCountLimit = _reward.PrizeInfo[k].PrizeCountLimit;
                    reward.recharges.Add(recharge);
                }
                rewards.Add(reward);
            }
        }
        public Reward GetReward(DateTime time)
        {
            if (rewards.Count == 0)
            {
                return null;
            }
            var index = Mathf.Min(rewards.Count - 1, IndexOfTime(time));
            return rewards[index];
        }
        public class Reward
        {
            public List<Recharge> recharges = new List<Recharge>();
        }
        public class Recharge
        {
            public int CTGID;
            public int GoldPrize;
            public byte PrizeCountLimit;
        }
    }
}
System/OpenServerActivity/OperationMultiRecharge.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 4dec58648499f044bb7651079327385e
timeCreated: 1600935118
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Vip/MultiRechargeModel.cs
New file
@@ -0,0 +1,199 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 双倍 (多倍充值)
/// </summary>
namespace Snxxz.UI
{
    [XLua.LuaCallCSharp]
    public class MultiRechargeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
    {
        Operation multiRechargeType = Operation.MultiRecharge;
        int regesitType = 24;
        public bool IsOpen
        {
            get
            {
                return OperationTimeHepler.Instance.SatisfyOpenCondition(multiRechargeType);
            }
        }
        public bool IsAdvance
        {
            get
            {
                return false;
            }
        }
        public bool priorityOpen
        {
            get { return redpoint.state == RedPointState.Simple; }
        }
        public event Action MultiRechargeUpdate;
        public event Action<int> onStateUpdate;
        public override void Init()
        {
            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
            OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
            OpenServerActivityCenter.Instance.Register(regesitType, this);
        }
        public void OnBeforePlayerDataInitialize()
        {
            multiRechargeDict.Clear();
        }
        public void OnPlayerLoginOk()
        {
            UpdateRedpoint();
        }
        public override void UnInit()
        {
            OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
            OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
        }
        private void DayResetEvent(int resetType)
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase))
            {
                if (resetType == operationBase.resetType)
                {
                    UpdateRedpoint();
                }
            }
        }
        private void OperationEndEvent(Operation operationType, int state)
        {
            if (operationType == multiRechargeType && state == 0)
            {
                UpdateRedpoint();
                if (onStateUpdate != null)
                {
                    onStateUpdate(regesitType);
                }
            }
        }
        private void OperationStartEvent(Operation operationType, int state)
        {
            if (operationType == multiRechargeType && state == 0)
            {
                UpdateRedpoint();
                if (onStateUpdate != null)
                {
                    onStateUpdate(regesitType);
                }
            }
        }
        #region 服务端数据
        public Dictionary<int, int> multiRechargeDict = new Dictionary<int, int>();
        public void UpdateMultiRecharge(HAA28_tagMCRechargePrizePlayerInfo package)
        {
            for (int i = 0; i < package.Count; i++)
            {
                multiRechargeDict[package.PlayerInfoList[i].CTGID] = package.PlayerInfoList[i].PrizeCount;
            }
            UpdateRedpoint();
            if (MultiRechargeUpdate != null)
            {
                MultiRechargeUpdate();
            }
        }
        //是否有多倍充值
        public bool isFirstRechageActiveByCTGID(int ctgID)
        {
            if (!IsOpen)
            {
                return false;
            }
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase))
            {
                OperationMultiRecharge multiOP = operationBase as OperationMultiRecharge;
                var reward = multiOP.GetReward(TimeUtility.ServerNow);
                if (reward != null)
                {
                    for (int i = 0; i < reward.recharges.Count; i++)
                    {
                        var recharge = reward.recharges[i];
                        if (recharge.CTGID == ctgID)
                        {
                            if (multiRechargeDict.ContainsKey(ctgID) && multiRechargeDict[ctgID] < recharge.PrizeCountLimit)
                            {
                                return true;
                            }
                        }
                    }
                }
            }
            return false;
        }
        //首充返利仙玉金额,外部调用根据金额地板除获得倍数
        public int GetFirstRechageNumByCTGID(int ctgID)
        {
            if (!IsOpen)
            {
                return 0;
            }
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase))
            {
                OperationMultiRecharge multiOP = operationBase as OperationMultiRecharge;
                var reward = multiOP.GetReward(TimeUtility.ServerNow);
                if (reward != null)
                {
                    for (int i = 0; i < reward.recharges.Count; i++)
                    {
                        var recharge = reward.recharges[i];
                        if (recharge.CTGID == ctgID)
                        {
                            return recharge.GoldPrize;
                        }
                    }
                }
            }
            return 0;
        }
        #endregion
        #region 红点
        public Redpoint redpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20924);
        public bool isOpenWin = false;
        public void UpdateRedpoint()
        {
            redpoint.state = RedPointState.None;
            if (!IsOpen)
            {
                return;
            }
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase))
            {
                redpoint.state = isOpenWin ? RedPointState.None : RedPointState.Simple;
            }
        }
        #endregion
    }
}
System/Vip/MultiRechargeModel.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6f17d0f39bc5c0c4f913db678d863908
timeCreated: 1600930189
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Vip/RechargeBehaviour.cs
@@ -28,6 +28,11 @@
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<VipModel>());
            }
        }
        MultiRechargeModel multiRechargeModel
        {
            get { return ModelCenter.Instance.GetModel<MultiRechargeModel>(); }
        }
        public int chargeId { get; private set; }
@@ -57,28 +62,57 @@
            VipModel.RechargeCount _rechargeCount;
            bool _firstRecharge = true;
            if (model.TryGetRechargeCount(_id, out _rechargeCount))
            int multiGold = 0;  //首充多倍金额
            //优先活动
            if (multiRechargeModel.IsOpen)
            {
                if (!multiRechargeModel.isFirstRechageActiveByCTGID(_id))
                {
                    _firstRecharge = false;
                }
                multiGold = multiRechargeModel.GetFirstRechageNumByCTGID(_id);
            }
            else if (model.TryGetRechargeCount(_id, out _rechargeCount))
            {
                if (_rechargeCount.totalCount > 0)
                {
                    _firstRecharge = false;
                }
                multiGold = config.FirstGoldPaperPrize;
            }
            if (model.TryGetRechargeCount(_id, out _rechargeCount))
            {
                if (m_BuyComplete != null)
                {
                    m_BuyComplete.gameObject.SetActive(config.DailyBuyCount > 0 &&
                                        config.DailyBuyCount <= _rechargeCount.todayCount);
                }
            }
            m_ContainerAdded.gameObject.SetActive((_firstRecharge && config.FirstGoldPaperPrize > 0)
            m_ContainerAdded.gameObject.SetActive((_firstRecharge && multiGold > 0)
                || config.GainGoldPaper > 0);
            if (config.PayType == 2)
            {
                m_FisrtRechargeSign.gameObject.SetActive(false);
            }
            if (_firstRecharge && config.FirstGoldPaperPrize > 0)
            if (_firstRecharge && multiGold > 0)
            {
                m_AddedValue.text = config.FirstGoldPaperPrize.ToString();
                m_AddedValue.text = multiGold.ToString();
                m_FisrtRechargeSign.gameObject.SetActive(true);
                int multi = (int)Math.Floor((double)multiGold/config.GainGold) + 1;
                if (model.MultiRechageImageDict.ContainsKey(multi))
                {
                    m_FisrtRechargeSign.gameObject.SetActive(true);
                    m_FisrtRechargeSign.SetSprite(model.MultiRechageImageDict[multi]);
                }
                else
                {
                    m_FisrtRechargeSign.gameObject.SetActive(false);
                }
            }
            else if (config.GainGoldPaper > 0)
            {
@@ -95,6 +129,7 @@
            }
        }
        private void OnChargeClick()
        {
            var _ctgConfig = CTGConfig.Get(chargeId);
System/Vip/VipModel.cs
@@ -213,6 +213,9 @@
        public Dictionary<int, List<string>> m_VipPrivilegeDict = new Dictionary<int, List<string>>();
        private static string[] lineSplit = new string[] { "</r>" };
        private int m_CTGDelayTime = 60;
        //多倍图片
        public Dictionary<int, string> MultiRechageImageDict = new Dictionary<int, string>();
        private void ParseConfig()
        {
            var cfg = FuncConfigConfig.Get("VIPExperience");
@@ -221,6 +224,15 @@
            vipExpMoney = int.Parse(cfg.Numerical1);
            cfg = FuncConfigConfig.Get("VIPExperienceCard");
            vipExperienceItemId = int.Parse(cfg.Numerical1);
            var textConfig = FuncConfigConfig.Get("MultiRechageImage");
            var json = JsonMapper.ToObject(textConfig.Numerical1);
            foreach (var key in json.Keys)
            {
                var multi = int.Parse(key);
                MultiRechageImageDict[multi] = json[key].ToString();
            }
        }
        private void ParseVipGift()
System/Welfare/OperationTimeHepler.cs
@@ -363,6 +363,36 @@
            }
        }
        public void UpdateMultiRechargePackage(HAA27_tagMCActRechargePrizeInfo package)
        {
            OperationBase operationBase = null;
            operationDict.TryGetValue(Operation.MultiRecharge, out operationBase);
            if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate))
            {
                ForceStopOperation(Operation.MultiRecharge);
            }
            else
            {
                if (operationBase == null)
                {
                    operationBase = new OperationMultiRecharge();
                    operationDict.Add(Operation.MultiRecharge, operationBase);
                }
                OperationMultiRecharge operation = operationBase as OperationMultiRecharge;
                operation.Reset();
                operation.limitLv = 1;
                operation.startDate = ParseOperationDate(package.StartDate);
                operation.endDate = ParseOperationDate(package.EndtDate);
                operation.dayReset = package.IsDayReset == 1;
                operation.ParseMultiRecharge(package);
                if (operationTimeUpdateEvent != null)
                {
                    operationTimeUpdateEvent(Operation.MultiRecharge);
                }
            }
        }
        /// <summary>
        /// 限时礼包
        /// </summary>
@@ -968,6 +998,7 @@
        SpringFestival,//春节巡礼
        OpenServiceAchievement,//七日巡礼
        LuckyTreasure,//幸运鉴宝
        MultiRecharge, //仙玉充值返利 (首充双倍)
        max,
    }
}
System/WindowBase/ModelCenter.cs
@@ -190,6 +190,7 @@
            RegisterModel<SocialModel>();
            RegisterModel<ChatBubbleModel>();
            RegisterModel<AccumulateRechargeModel>();
            RegisterModel<MultiRechargeModel>();
            RegisterModel<FBHelpPointExchageModel>();
            RegisterModel<IceCrystalVeinModel>();
            RegisterModel<DungeonAssistModel>();