2025-05-18 01:04:31 +08:00

579 lines
16 KiB
C#

// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2022-03-21
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "QingmingActivity" company="Kunpo"></copyright>
// <summary></summary>
// ***********************************************************************
using System.Collections;
using System.Collections.Generic;
using CodeStage.AntiCheat.ObscuredTypes;
namespace G
{
/// <summary>
/// 清明节活动
/// </summary>
public class QingMingActivity : Activity
{
#region Field
ItemActivityParent _item;
List<Mission> _missions;
ObscuredInt _activityStatus;
#endregion
#region Property
/// <summary>
/// 签到活动
/// </summary>
public ActivityInfo signActivityInfo
{
get { return ActivityProxy.Instance.GetActivity(_item.signActivity); }
}
/// <summary>
/// 兑换活动
/// </summary>
public ActivityInfo exchangeActivityInfo
{
get { return ActivityProxy.Instance.GetActivity(_item.exchangeActivity); }
}
/// <summary>
/// 礼包活动
/// </summary>
public ActivityInfo giftBoxActivityInfo
{
get { return ActivityProxy.Instance.GetActivity(_item.giftActivity); }
}
/// <summary>
/// 充值活动
/// </summary>
public ActivityInfo rechargeActivityInfo
{
get { return ActivityProxy.Instance.GetActivity(_item.rechargeActivity); }
}
/// <summary>
/// 今天签到
/// </summary>
public bool signInToday
{
get { return !TimeProxy.Instance.GetTimeKey(_item.signTime); }
set
{
TimeProxy.Instance.TryTimeKey(_item.signTime);
}
}
/// <summary>
/// 签到次数
/// </summary>
public int signInCount
{
get { return signActivityInfo.curValue; }
}
/// <summary>
/// 活动任务
/// </summary>
public IList<Mission> missions
{
get
{
CheckFistivalMission();
_missions.Sort();
return _missions;
}
}
private void CheckFistivalMission()
{
MissionProxy.Instance.CheckMission();
}
/// <summary>
/// 开始时间
/// </summary>
public int startTimestamp
{
get { return _item.startTime; }
}
/// <summary>
/// 结束时间
/// </summary>
public int endTimestamp
{
get { return _item.endTime; }
}
/// <summary>
/// 是否已开启活动
/// </summary>
public bool isStartActivity
{
get
{
CheckStatus();
return activityStatus == 1;
}
}
/// <summary>
/// 是否已结束活动
/// </summary>
public bool isEndActivity
{
get
{
CheckStatus();
return activityStatus == 2;
}
}
/// <summary>
/// 签到活动剩余时间
/// </summary>
public string sigeInSurplusTime
{
get { return F.Utils.Time.ToTimeString(signActivityInfo.endTimestamp - Launch.Timestamp); }
}
/// <summary>
/// 签到活动结束
/// </summary>
public bool isSigeInActivityEnd
{
get { return signActivityInfo.endTimestamp < Launch.Timestamp; }
}
/// <summary>
/// 兑换活动剩余时间
/// </summary>
public string exchangeSurplusTime
{
get { return F.Utils.Time.ToTimeString(exchangeActivityInfo.endTimestamp - Launch.Timestamp); }
}
/// <summary>
/// 开启副本
/// </summary>
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天";
}
}
}
/// <summary>
/// 副本Id
/// </summary>
public int copyId
{
get { return _item.copyId; }
}
/// <summary>
///
/// </summary>
public Item.ItemInfo activityMoney
{
get
{
return new Item.ItemInfo(10, MoneyProxy.Instance.GetMoney(10));
}
}
/// <summary>
/// 0 没有开始 1 进行中 2 已结束
/// </summary>
public int activityStatus
{
get
{
return _activityStatus;
}
private set
{
_activityStatus = value;
}
}
#endregion
#region Method
public QingMingActivity()
{
}
/// <summary>
/// 签到API
/// </summary>
/// <param name="doubleAward"></param>
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<ItemProp>(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);
}
/// <summary>
/// 兑换API
/// </summary>
/// <param name="index"></param>
/// <param name="callback"></param>
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, "兑换已达上限");
}
}
}
/// <summary>
/// 购买API
/// </summary>
/// <param name="id"></param>
/// <param name="callback"></param>
public void BuyGift(int id, Callback2 callback)
{
RmbShopProxy.Instance.BuyGiftBox(id, callback);
}
/// <summary>
/// 充值奖励API
/// </summary>
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<ItemActivityParent>(4);
//
if (_item.missions != null)
{
_missions = new List<Mission>(_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
}
}