Files
taptap2024_GJ_chidouren/Assets/Scripts/System/Account/AccountGameData.cs
2024-10-16 00:03:41 +08:00

204 lines
6.0 KiB
C#

using System;
using System.AchieveSystem;
using System.Collections.Generic;
using System.Game.Account;
using System.OfflineSystem;
using System.RandomPool;
using FJson;
using FJson.Core;
using Framework.Audio;
using Framework.Save;
using Framework.Utils;
using Game;
using Game.Data;
using Script.Core.Utils.Extend;
using Unity.Mathematics;
using UnityEngine;
public class AccountGameData
{
public string OfflineMgrTime;
//---------------------------------------------持久化数据---------------------------------------------
//------------------通用数据----------------------
public ENumber64 Currency; //当前货币
public PeriodicityNumber CurHangUpLevelCount; //挂机系统广告升级次数 每日重置
public List<int> InitCardIds; //初始卡牌牌库
public int HangLevel; //挂机等级
public List<AwardOfflineDuration> OnlineAwardDurationList; //当前玩家的累计挂机记录
public OfflineTimeHandler OnlineAwardDuration; //在线挂机奖励时长
public AchievementData AchievementData; //成就系统数据
//------------------通用数据----------------------
//---------------------------------------------动态数据,非持久化数据---------------------------------------------
public long GetMaxOnlineDuration => 10 * this.HangLevel + 10;
public long GetMaxOfflineDuration => 60 * this.HangLevel + 60;
public long GoldCurrency => this.Currency.Read;
public void NullCheck()
{
var isUpdate = false;
if (this.Currency == null)
{
this.Currency = new ENumber64();
}
if (AchievementData == null)
{
this.AchievementData = new AchievementData();
}
if (this.OnlineAwardDurationList == null)
{
this.OnlineAwardDurationList = new List<AwardOfflineDuration>();
}
if (this.CurHangUpLevelCount == null)
{
this.CurHangUpLevelCount = new PeriodicityNumber(GameConstConfig.Instance.MaxHangUpLevelAdCount);
isUpdate = true;
}
if (this.InitCardIds == null)
{
this.InitCardIds = new List<int>();
}
if (isUpdate)
{
Account.Instance.Save(SaveData.Game);
}
}
public void UpdateCurrentTime(long curTime = 0)
{
this.OnlineAwardDuration = OfflineMgr.Instance.CreateTimeHandler(0);
var systemTime = curTime.GetDateTime13();
this.CurHangUpLevelCount.CheckTime(systemTime, GameConstConfig.Instance.MaxHangUpLevelAdCount);
}
public bool IsNull()
{
return false;
}
public void OverlyCurrency(long gameLogicCurCoin, bool hasShow = true)
{
this.Currency.Add(gameLogicCurCoin);
AudioManager.Instance.PlaySoundEffect(SeAudio.Gaming_GetCoin);
if (hasShow)
{
EventManager.Instance.SendEvent(GameEventCode.Update_Price);
}
Account.Instance.Save(SaveData.Game);
}
#region
/// <summary>
/// 更新挂机收益日志
/// </summary>
public void RefreshOfflineAwardLog()
{
int level = this.HangLevel;
var duration = this.OnlineAwardDuration.CurDuration / 60f;
this.OnlineAwardDurationList.Add(new AwardOfflineDuration(level, duration));
//更新计时器
this.OnlineAwardDuration = OfflineMgr.Instance.CreateTimeHandler(0);
Account.Instance.Save(SaveData.Game);
}
/// <summary>
/// 累计挂机时长(会计算最大领取奖励) 单位:分
/// </summary>
/// <returns></returns>
public double GetCurTotalOnlineDuration()
{
double duration = 0;
foreach (var value in this.OnlineAwardDurationList)
{
duration += value.Duration;
}
duration += this.OnlineAwardDuration.CurDuration / 60f;
return Math.Min(duration, this.GetMaxOnlineDuration);
}
/// <summary>
/// 累计在线挂机奖励(会计算最大领取奖励)
/// </summary>
/// <returns></returns>
public double GetCurTotalOnlineAward()
{
double maxOnlineDuration = this.GetMaxOnlineDuration;
double award = 0;
foreach (var value in this.OnlineAwardDurationList)
{
if (maxOnlineDuration <= 0)
{
break;
}
var duration = value.Duration;
award += OnlineAward(value.GamePart, Math.Min(duration, maxOnlineDuration), value.ExtOffset);
maxOnlineDuration = Math.Max(0, maxOnlineDuration - duration);
}
if (maxOnlineDuration > 0)
{
var curDuration = (long)(this.OnlineAwardDuration.CurDuration / 60f); //向下取整
award += OnlineAward(this.HangLevel, Math.Min(curDuration, maxOnlineDuration));
}
return award;
}
public bool HasEquipInitCard(int cardId)
{
return this.InitCardIds.Contains(cardId);
}
public void AddInitCard(int cardId)
{
if (!this.InitCardIds.Contains(cardId))
{
this.InitCardIds.Add(cardId);
Account.Instance.Save(SaveData.Game);
}
}
public long OnlineAward(float level, double duration, float extOffset = 0) =>
(long)((OnlineAwardUnit(level) * duration) * (1 + extOffset));
/// <summary>
/// 挂机每分钟收益
/// </summary>
/// <param name="level"></param>
/// <returns></returns>
public double OnlineAwardUnit(float level)
{
level *= 0.2f;
// var rofHangUpRow = RofManagerConfig.Instance.RofCatInfoTable.GetDataByRow (Mathf.Min (math.max((int)level - 1 , 0),
// RofManagerConfig.Instance.RofCatInfoTable.RowNum - 1));
var unitExp = ((level * 20 + 30) / 30) + 1 * (0.01f + math.max(0, level - 10) * 0.1f);
return unitExp;
}
public double OfflineAwardUnit() => OnlineAwardUnit(this.HangLevel) * 0.1f;
#endregion
}