using MetaAssets; using ServerCommon; using ServerCore; using ServerBase; using META_ID = System.UInt32; namespace GameServer { public class SeasonPassManager : EntityBase { private List 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(); 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); } } }