using System.Collections.Generic; using ProtoCSStruct; using Sog; namespace Game { public abstract class TimeTrigger { private static readonly Dictionary TimeTriggers = new(); public static void Register() { TimeTriggers[ActivityTimeType.FixedTime] = new FixedTime(); TimeTriggers[ActivityTimeType.UnlockTime] = new UnlockSystemTime(); TimeTriggers[ActivityTimeType.SeverTime] = new SeverTime(); TimeTriggers[ActivityTimeType.LoopDayTime] = new LoopDayTime(); TimeTriggers[ActivityTimeType.LoopSeverTime] = new LoopSeverTime(); } public static TimeTrigger GetTimeTrigger(ActivityTimeType timeType) { return !TimeTriggers.ContainsKey(timeType) ? null : TimeTriggers[timeType]; } public ActivityState GetActivityState(int actId, PlayerOnGame player, int realmId = -1) { var desc = ActivityDescMgr.Instance.GetConfig(actId); if (desc == null) { return ActivityState.ActivityNotStarted; } if (player == null) { return ActivityState.ActivityNotStarted; } if (desc.unlockId != 0) { var unlock = SystemUnlockSvc.IsUnlockSys(player, desc.unlockId); if (!unlock) { return ActivityState.ActivityNotStarted; } } return GetState(actId, player, realmId); } protected abstract ActivityState GetState(int actId, PlayerOnGame player, int realmId = -1); public abstract long GetLastTimeToEnd(int actId, PlayerOnGame player, int realmId = -1); public abstract long GetActOpenTimeDate(int actId, PlayerOnGame player, int realmId = -1); } }