// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2022-03-21 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using System.Collections; using System.Collections.Generic; using CodeStage.AntiCheat.ObscuredTypes; namespace G { /// /// 清明节活动 /// public class QingMingActivity : Activity { #region Field ItemActivityParent _item; List _missions; ObscuredInt _activityStatus; #endregion #region Property /// /// 签到活动 /// public ActivityInfo signActivityInfo { get { return ActivityProxy.Instance.GetActivity(_item.signActivity); } } /// /// 兑换活动 /// public ActivityInfo exchangeActivityInfo { get { return ActivityProxy.Instance.GetActivity(_item.exchangeActivity); } } /// /// 礼包活动 /// public ActivityInfo giftBoxActivityInfo { get { return ActivityProxy.Instance.GetActivity(_item.giftActivity); } } /// /// 充值活动 /// public ActivityInfo rechargeActivityInfo { get { return ActivityProxy.Instance.GetActivity(_item.rechargeActivity); } } /// /// 今天签到 /// public bool signInToday { get { return !TimeProxy.Instance.GetTimeKey(_item.signTime); } set { TimeProxy.Instance.TryTimeKey(_item.signTime); } } /// /// 签到次数 /// public int signInCount { get { return signActivityInfo.curValue; } } /// /// 活动任务 /// public IList missions { get { CheckFistivalMission(); _missions.Sort(); return _missions; } } private void CheckFistivalMission() { MissionProxy.Instance.CheckMission(); } /// /// 开始时间 /// public int startTimestamp { get { return _item.startTime; } } /// /// 结束时间 /// public int endTimestamp { get { return _item.endTime; } } /// /// 是否已开启活动 /// public bool isStartActivity { get { CheckStatus(); return activityStatus == 1; } } /// /// 是否已结束活动 /// public bool isEndActivity { get { CheckStatus(); return activityStatus == 2; } } /// /// 签到活动剩余时间 /// public string sigeInSurplusTime { get { return F.Utils.Time.ToTimeString(signActivityInfo.endTimestamp - Launch.Timestamp); } } /// /// 签到活动结束 /// public bool isSigeInActivityEnd { get { return signActivityInfo.endTimestamp < Launch.Timestamp; } } /// /// 兑换活动剩余时间 /// public string exchangeSurplusTime { get { return F.Utils.Time.ToTimeString(exchangeActivityInfo.endTimestamp - Launch.Timestamp); } } /// /// 开启副本 /// public bool isCopyOpen { get { return _item.copyStart < Launch.Timestamp && _item.copyEnd > Launch.Timestamp; } } public string copySurplusDay { get { var surplusTime = _item.copyEnd - Launch.Timestamp; if (surplusTime > 172800) { return "副本剩余时间:3天"; } else if (surplusTime > 86400) { return "副本剩余时间:2天"; } else { return "副本剩余时间:1天"; } } } /// /// 副本Id /// public int copyId { get { return _item.copyId; } } /// /// /// public Item.ItemInfo activityMoney { get { return new Item.ItemInfo(10, MoneyProxy.Instance.GetMoney(10)); } } /// /// 0 没有开始 1 进行中 2 已结束 /// public int activityStatus { get { return _activityStatus; } private set { _activityStatus = value; } } #endregion #region Method public QingMingActivity() { } /// /// 签到API /// /// public void Signin(Callback2 callback) { bool doubleAward = false; if (signInToday) { GlobalNotifier.PostNotification(GlobalDefine.EVENT_SHOW_TOAST, "今日已签到"); return; } signInToday = true; var signActivity = signActivityInfo; signActivity.curValue += 1; if (signActivity.curValue <= signActivity.subInfos.Length) { var subInfo = signActivity.subInfos[signActivity.curValue - 1]; subInfo.status = 2; var reward = subInfo.rewardInfos[0]; if (doubleAward) { reward.Apply(3); } if (reward.id > 0) { var prop = ItemProxy.Instance.GetStaticItem(reward.id); RewardProxy.Instance.GetRewardWithUI(reward, (error, message) => { KStatistics.Instance.ReportEvent_Activity("qingming", 4, subInfo.id, "", "", 1, "", 0, 0);//埋点 GlobalNotifier.PostNotification(GlobalDefine.EVENT_MONEY_CHANGED); GlobalNotifier.PostNotification(GlobalDefine.EVENT_SENVEN_SIGNIN); }); } } if (signActivity.curValue >= signActivity.subInfos.Length) signActivity.status = 1; ActivityProxy.Instance.SaveActivity(signActivity); } /// /// 兑换API /// /// /// public void Exchange(int index, Callback2 callback) { var activityInfo = this.exchangeActivityInfo; ActivitySubInfo subInfo = null; foreach (var item in activityInfo.subInfos) { if (item.id == index) { subInfo = item; break; } } if (subInfo != null) { if (subInfo.curValue < subInfo.maxValue) { if (MoneyProxy.Instance.CheckAndCostMoney(subInfo.item.typeArgs)) { RewardProxy.Instance.GetRewardsWithUI(subInfo.rewardInfos, (error, message) => { }); subInfo.curValue += 1; ActivityProxy.Instance.SaveActivity(activityInfo); callback?.Invoke(ErrorCode.SUCCESS, ""); } else { callback?.Invoke(1, LanguageProxy.Instance.GetLocalString(613)); } } else { callback?.Invoke(1, "兑换已达上限"); } } } /// /// 购买API /// /// /// public void BuyGift(int id, Callback2 callback) { RmbShopProxy.Instance.BuyGiftBox(id, callback); } /// /// 充值奖励API /// public void RechargrReward(int index, Callback2 callback) { var activityInfo = this.rechargeActivityInfo; ActivitySubInfo subInfo = null; foreach (var item in activityInfo.subInfos) { if (item.id == index) { subInfo = item; break; } } if (subInfo != null) { var mission = MissionProxy.Instance.GetMission(subInfo.item.typeArgs[0]); MissionProxy.Instance.GainReward(mission.id, (error, message) => { if (error == 0) { if (mission.id == 5105) { var pet = PetProxy.Instance.GetPet(13020); var friendId = pet.friendId; var propCount = ItemProxy.Instance.GetPropCount(friendId); var propCountMax = pet.friendMax; if (propCount >= propCountMax) { ItemProxy.Instance.SetPropCount(friendId, propCount - propCountMax); pet.Active(); } callback?.Invoke(ErrorCode.SUCCESS, "5105"); } else { callback?.Invoke(ErrorCode.SUCCESS, ""); } } else { callback?.Invoke(1, ""); } }); } } public void Reset() { } void CheckStatus() { int status = this.activityStatus; if (status == 0) { if (endTimestamp < Launch.Timestamp)//活动已经结束 OnActivityFinish(); else if (startTimestamp < Launch.Timestamp)//活动已经开始 OnActivityStart(); } else if (status == 1) { if (endTimestamp < Launch.Timestamp) OnActivityFinish(); } } void OnActivityStart() { signActivityInfo.Reset(); exchangeActivityInfo.Reset(); giftBoxActivityInfo.Reset(); rechargeActivityInfo.Reset(); for (int i = 0; i < rechargeActivityInfo.subInfos.Length; i++) { var mission = MissionProxy.Instance.GetMission(rechargeActivityInfo.subInfos[i].typeArgs[0]); mission.Reset(); } this.activityStatus = 1; Save(); } void OnActivityFinish() { //for (int i = 0; i < _missions.Count; i++) //{ // _missions[i].Reset(); //} signActivityInfo.Reset(); exchangeActivityInfo.Reset(); giftBoxActivityInfo.Reset(); rechargeActivityInfo.Reset(); for (int i = 0; i < rechargeActivityInfo.subInfos.Length; i++) { var mission = MissionProxy.Instance.GetMission(rechargeActivityInfo.subInfos[i].typeArgs[0]); mission.Reset(); } this.activityStatus = 2; Save(); } public int GetRedPointSign() { if (isSigeInActivityEnd) { return 0; } if (!isStartActivity) return 0; return signInToday ? 0 : 1; } public int GetRedPointExchange() { if (isSigeInActivityEnd) { return 0; } if (!isStartActivity) return 0; for (int i = 0; i < _missions.Count; i++) { if (_missions[i].isRewarding) { return 1; } } return 0; } public int GetRedPointMission() { if (isSigeInActivityEnd) { return 0; } if (!isStartActivity) return 0; for (int i = 0; i < _missions.Count; i++) { if (_missions[i].isRewarding) { return 1; } } return 0; } public int GetRedPointGift() { if (isSigeInActivityEnd) { return 0; } if (!isStartActivity) return 0; return TimeProxy.Instance.GetTimes(2008); } public int GetRedPointRecharge() { if (isSigeInActivityEnd) { return 0; } if (!isStartActivity) return 0; var subInfos = rechargeActivityInfo.subInfos; for (int i = 0; i < subInfos.Length; i++) { var mission = MissionProxy.Instance.GetMission(subInfos[i].typeArgs[0]); if (mission != null && mission.isRewarding) { return 1; } } return 0; } public void Init() { _item = ItemProxy.Instance.GetStaticItem(4); // if (_item.missions != null) { _missions = new List(_item.missions.Length); for (int i = 0; i < _item.missions.Length; i++) { _missions.Add(MissionProxy.Instance.GetMission(_item.missions[i])); } } // //finish if (Launch.Timestamp > endTimestamp) { //结束了 } else if (Launch.Timestamp >= startTimestamp) { //已激活 } else { } } const string ARCHIVE_KEY_V1 = "at_qingming_v1"; public void Load() { var dataList = ArchiveProxy.Instance.GetIntList(ARCHIVE_KEY_V1); if (dataList != null && dataList.Count > 0) { activityStatus = dataList[0]; } } private void Save() { var dataList = ArchiveProxy.Instance.GetIntList(ARCHIVE_KEY_V1); if (dataList != null) { dataList.Clear(); dataList.Add(this.activityStatus); ArchiveProxy.Instance.SetIntList(ARCHIVE_KEY_V1, dataList); } } #endregion #region Static public static QingMingActivity Instance => ActivityProxy.Instance.qingMingActivity; #endregion } }