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>();