Files
caliverse_server/GameServer/Global/SeasonPass/SeasonPassManager.cs
2025-05-01 07:20:41 +09:00

90 lines
2.5 KiB
C#

using MetaAssets;
using ServerCommon;
using ServerCore; using ServerBase;
using META_ID = System.UInt32;
namespace GameServer
{
public class SeasonPassManager : EntityBase
{
private List<SeasonPassMetaData> seasonPassList = new();
public META_ID currentSeasonPass { get; private set; } = 0;
public SeasonPassManager()
: base(EntityType.SeasonPassManager)
{
}
public Result Init()
{
var result = new Result();
var current_time = DateTimeHelper.Current;
var season_pass_meta_datas = MetaData.Instance.SeasonPassMetaData;
int new_season_pass_metaid = 0;
foreach (var meta_data in season_pass_meta_datas)
{
if (meta_data.Value.EndTime < current_time)
{
continue;
}
seasonPassList.Add(meta_data.Value);
if (new_season_pass_metaid == 0 && meta_data.Value.StartTime < current_time && meta_data.Value.EndTime > current_time)
{
new_season_pass_metaid = meta_data.Value.Id;
}
}
currentSeasonPass = (META_ID)new_season_pass_metaid;
return result;
}
private META_ID getNewSeasonPassId()
{
var current_time = DateTimeHelper.Current;
int new_season_pass_metaid = 0;
var to_remove_season_passs_meta_datas = new List<SeasonPassMetaData>();
foreach (var meta_data in seasonPassList)
{
if (meta_data.EndTime < current_time)
{
to_remove_season_passs_meta_datas.Remove(meta_data);
}
if (new_season_pass_metaid == 0 && meta_data.StartTime < current_time && meta_data.EndTime > current_time)
{
new_season_pass_metaid = meta_data.Id;
}
}
foreach (var meta_data in to_remove_season_passs_meta_datas)
{
seasonPassList.Remove(meta_data);
}
return (META_ID)new_season_pass_metaid;
}
public (bool,META_ID) updateNewSeason()
{
META_ID old_season_pass = currentSeasonPass;
currentSeasonPass = getNewSeasonPassId();
if(old_season_pass != currentSeasonPass)
{
return (true, currentSeasonPass);
}
return (false, currentSeasonPass);
}
}
}