579 lines
16 KiB
C#
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
|
|||
|
}
|
|||
|
}
|
|||
|
|