using EggLink.DanhengServer.Data.Config.Task; using Newtonsoft.Json.Linq; namespace EggLink.DanhengServer.Data.Config.AdventureAbility; public class AdventureModifierConfig { public float LifeTime { get; set; } public int Level { get; set; } public int LevelMax { get; set; } public bool IsCountDownAfterBattle { get; set; } public bool ApplyBehaviorFlagBindEffects { get; set; } //public AdventureModifierBehaviorFlag[] BehaviorFlagList{ get; set; } public float TickInterval { get; set; } public List OnInterval { get; set; } = []; public List OnAdd { get; set; } = []; public List OnCreate { get; set; } = []; public List OnDestroy { get; set; } = []; public List OnStack { get; set; } = []; public List OnAttack { get; set; } = []; public List OnBeforeBattle { get; set; } = []; public List OnAfterBattle { get; set; } = []; public List OnStage { get; set; } = []; public List OnUnstage { get; set; } = []; public List OnForeGround { get; set; } = []; public List OnBackGround { get; set; } = []; public List OnStageByStory { get; set; } = []; public List OnNpcMonsterCreate { get; set; } = []; public List OnTeamLeaderChange { get; set; } = []; public List OnBeforeAttack { get; set; } = []; public List OnBeAttack { get; set; } = []; public List OnModifierAdd { get; set; } = []; public List OnModifierRemove { get; set; } = []; public List OnOwnerBeKilled { get; set; } = []; public List OnAfterLocalPlayerUseSkill { get; set; } = []; public List ModifierTaskList { get; set; } = []; public List OnCounterAttack { get; set; } = []; //public MazeBuffType MazeBuffType { get; set; } public int Priority { get; set; } public int Count { get; set; } //public ModifierStacking Stacking { get; set; } public static AdventureModifierConfig LoadFromJObject(JObject obj) { var info = new AdventureModifierConfig(); if (obj.ContainsKey(nameof(Level))) info.Level = obj[nameof(Level)]!.ToObject(); if (obj.ContainsKey(nameof(LevelMax))) info.LevelMax = obj[nameof(LevelMax)]!.ToObject(); if (obj.ContainsKey(nameof(LifeTime))) info.LifeTime = obj[nameof(LifeTime)]!.ToObject(); if (obj.ContainsKey(nameof(Count))) info.Count = obj[nameof(Count)]!.ToObject(); if (obj.ContainsKey(nameof(TickInterval))) info.TickInterval = obj[nameof(TickInterval)]!.ToObject(); if (obj.ContainsKey(nameof(IsCountDownAfterBattle))) info.IsCountDownAfterBattle = obj[nameof(IsCountDownAfterBattle)]!.ToObject(); if (obj.ContainsKey(nameof(ApplyBehaviorFlagBindEffects))) info.ApplyBehaviorFlagBindEffects = obj[nameof(ApplyBehaviorFlagBindEffects)]!.ToObject(); if (obj.ContainsKey(nameof(OnInterval))) info.OnInterval = obj[nameof(OnInterval)]?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnAdd))) info.OnAdd = obj[nameof(OnAdd)]?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnCreate))) info.OnCreate = obj[nameof(OnCreate)]?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnDestroy))) info.OnDestroy = obj[nameof(OnDestroy)]?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnStack))) info.OnStack = obj[nameof(OnStack)]?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnAttack))) info.OnAttack = obj[nameof(OnAttack)]?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnBeforeBattle))) info.OnBeforeBattle = obj[nameof(OnBeforeBattle)] ?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnAfterBattle))) info.OnAfterBattle = obj[nameof(OnAfterBattle)] ?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnStage))) info.OnStage = obj[nameof(OnStage)]?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnUnstage))) info.OnUnstage = obj[nameof(OnUnstage)]?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnForeGround))) info.OnForeGround = obj[nameof(OnForeGround)] ?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnBackGround))) info.OnBackGround = obj[nameof(OnBackGround)] ?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnAfterLocalPlayerUseSkill))) info.OnAfterLocalPlayerUseSkill = obj[nameof(OnAfterLocalPlayerUseSkill)] ?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; if (obj.ContainsKey(nameof(OnTeamLeaderChange))) info.OnTeamLeaderChange = obj[nameof(OnTeamLeaderChange)] ?.Select(x => TaskConfigInfo.LoadFromJsonObject((x as JObject)!)) .ToList() ?? []; // TODO: others return info; } }