Files
BH3/Assets/Scripts/Assembly-CSharp/MoleMole/Config/ConfigAbility.cs
2025-08-13 09:26:42 +08:00

688 lines
23 KiB
C#

using System;
using System.Collections.Generic;
using FullInspector;
namespace MoleMole.Config
{
[GeneratePartialHash]
public class ConfigAbility : IHashable, IOnLoaded
{
private const string DEFAULT_MODIFIER_NAME = "__DEFAULT_MODIFIER";
public static Dictionary<string, ConfigAbilityModifier> EMPTY_MODIFIERS = new Dictionary<string, ConfigAbilityModifier>();
public string AbilityName;
[InspectorNullable]
public string UseAbilityArgumentAsSpecialKey;
[InspectorNullable]
public string SetAbilityArgumentToOverrideMap;
public ConfigAbilityMixin[] AbilityMixins = ConfigAbilityMixin.EMPTY;
public ConfigDynamicArguments AbilitySpecials = ConfigDynamicArguments.EMPTY;
public Dictionary<string, ConfigAbilityModifier> Modifiers = EMPTY_MODIFIERS;
[InspectorNullable]
public ConfigAbilityModifier DefaultModifier;
public ConfigAbilityAction[] OnAdded = ConfigAbilityAction.EMPTY;
public ConfigAbilityAction[] OnRemoved = ConfigAbilityAction.EMPTY;
public ConfigAbilityAction[] OnAbilityStart = ConfigAbilityAction.EMPTY;
public ConfigAbilityAction[] OnKilled = ConfigAbilityAction.EMPTY;
public ConfigAbilityAction[] OnDestroy = ConfigAbilityAction.EMPTY;
public ConfigAbilityAction[] OnFieldEnter = ConfigAbilityAction.EMPTY;
public ConfigAbilityAction[] OnFieldExit = ConfigAbilityAction.EMPTY;
[NonSerialized]
public List<BaseActionContainer> InvokeSites;
[NonSerialized]
public ConfigAbilityModifier[] ModifierIDMap;
public void ObjectContentHashOnto(ref int lastHash)
{
HashUtils.ContentHashOnto(AbilityName, ref lastHash);
HashUtils.ContentHashOnto(UseAbilityArgumentAsSpecialKey, ref lastHash);
HashUtils.ContentHashOnto(SetAbilityArgumentToOverrideMap, ref lastHash);
if (AbilityMixins != null)
{
ConfigAbilityMixin[] abilityMixins = AbilityMixins;
foreach (ConfigAbilityMixin configAbilityMixin in abilityMixins)
{
if (configAbilityMixin is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityMixin, ref lastHash);
}
}
}
if (AbilitySpecials != null)
{
foreach (KeyValuePair<string, object> abilitySpecial in AbilitySpecials)
{
HashUtils.ContentHashOnto(abilitySpecial.Key, ref lastHash);
HashUtils.ContentHashOntoFallback(abilitySpecial.Value, ref lastHash);
}
}
if (Modifiers != null)
{
foreach (KeyValuePair<string, ConfigAbilityModifier> modifier in Modifiers)
{
HashUtils.ContentHashOnto(modifier.Key, ref lastHash);
HashUtils.ContentHashOnto((int)modifier.Value.TimeScale, ref lastHash);
HashUtils.ContentHashOnto((int)modifier.Value.Stacking, ref lastHash);
HashUtils.ContentHashOnto(modifier.Value.IsBuff, ref lastHash);
HashUtils.ContentHashOnto(modifier.Value.IsDebuff, ref lastHash);
HashUtils.ContentHashOnto(modifier.Value.IsUnique, ref lastHash);
if (modifier.Value.Duration != null)
{
HashUtils.ContentHashOnto(modifier.Value.Duration.isDynamic, ref lastHash);
HashUtils.ContentHashOnto(modifier.Value.Duration.fixedValue, ref lastHash);
HashUtils.ContentHashOnto(modifier.Value.Duration.dynamicKey, ref lastHash);
}
if (modifier.Value.ThinkInterval != null)
{
HashUtils.ContentHashOnto(modifier.Value.ThinkInterval.isDynamic, ref lastHash);
HashUtils.ContentHashOnto(modifier.Value.ThinkInterval.fixedValue, ref lastHash);
HashUtils.ContentHashOnto(modifier.Value.ThinkInterval.dynamicKey, ref lastHash);
}
if (modifier.Value.ModifierMixins != null)
{
ConfigAbilityMixin[] modifierMixins = modifier.Value.ModifierMixins;
foreach (ConfigAbilityMixin configAbilityMixin2 in modifierMixins)
{
if (configAbilityMixin2 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityMixin2, ref lastHash);
}
}
}
if (modifier.Value.Properties != null)
{
foreach (KeyValuePair<string, DynamicFloat> property in modifier.Value.Properties)
{
HashUtils.ContentHashOnto(property.Key, ref lastHash);
HashUtils.ContentHashOnto(property.Value.isDynamic, ref lastHash);
HashUtils.ContentHashOnto(property.Value.fixedValue, ref lastHash);
HashUtils.ContentHashOnto(property.Value.dynamicKey, ref lastHash);
}
}
if (modifier.Value.EntityProperties != null)
{
foreach (KeyValuePair<string, DynamicFloat> entityProperty in modifier.Value.EntityProperties)
{
HashUtils.ContentHashOnto(entityProperty.Key, ref lastHash);
HashUtils.ContentHashOnto(entityProperty.Value.isDynamic, ref lastHash);
HashUtils.ContentHashOnto(entityProperty.Value.fixedValue, ref lastHash);
HashUtils.ContentHashOnto(entityProperty.Value.dynamicKey, ref lastHash);
}
}
HashUtils.ContentHashOnto((int)modifier.Value.State, ref lastHash);
if (modifier.Value.StateOption != null)
{
}
HashUtils.ContentHashOnto(modifier.Value.MuteStateDisplayEffect, ref lastHash);
HashUtils.ContentHashOnto(modifier.Value.ApplyAttackerWitchTimeRatio, ref lastHash);
if (modifier.Value.OnAdded != null)
{
ConfigAbilityAction[] onAdded = modifier.Value.OnAdded;
foreach (ConfigAbilityAction configAbilityAction in onAdded)
{
if (configAbilityAction is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction, ref lastHash);
}
}
}
if (modifier.Value.OnRemoved != null)
{
ConfigAbilityAction[] onRemoved = modifier.Value.OnRemoved;
foreach (ConfigAbilityAction configAbilityAction2 in onRemoved)
{
if (configAbilityAction2 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction2, ref lastHash);
}
}
}
if (modifier.Value.OnBeingHit != null)
{
ConfigAbilityAction[] onBeingHit = modifier.Value.OnBeingHit;
foreach (ConfigAbilityAction configAbilityAction3 in onBeingHit)
{
if (configAbilityAction3 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction3, ref lastHash);
}
}
}
if (modifier.Value.OnBeingHitResolved != null)
{
ConfigAbilityAction[] onBeingHitResolved = modifier.Value.OnBeingHitResolved;
foreach (ConfigAbilityAction configAbilityAction4 in onBeingHitResolved)
{
if (configAbilityAction4 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction4, ref lastHash);
}
}
}
if (modifier.Value.OnAttackLanded != null)
{
ConfigAbilityAction[] onAttackLanded = modifier.Value.OnAttackLanded;
foreach (ConfigAbilityAction configAbilityAction5 in onAttackLanded)
{
if (configAbilityAction5 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction5, ref lastHash);
}
}
}
if (modifier.Value.OnThinkInterval != null)
{
ConfigAbilityAction[] onThinkInterval = modifier.Value.OnThinkInterval;
foreach (ConfigAbilityAction configAbilityAction6 in onThinkInterval)
{
if (configAbilityAction6 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction6, ref lastHash);
}
}
}
if (modifier.Value.OnEvadeStart != null)
{
ConfigAbilityAction[] onEvadeStart = modifier.Value.OnEvadeStart;
foreach (ConfigAbilityAction configAbilityAction7 in onEvadeStart)
{
if (configAbilityAction7 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction7, ref lastHash);
}
}
}
if (modifier.Value.OnEvadeSuccess != null)
{
ConfigAbilityAction[] onEvadeSuccess = modifier.Value.OnEvadeSuccess;
foreach (ConfigAbilityAction configAbilityAction8 in onEvadeSuccess)
{
if (configAbilityAction8 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction8, ref lastHash);
}
}
}
if (modifier.Value.OnDefendStart != null)
{
ConfigAbilityAction[] onDefendStart = modifier.Value.OnDefendStart;
foreach (ConfigAbilityAction configAbilityAction9 in onDefendStart)
{
if (configAbilityAction9 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction9, ref lastHash);
}
}
}
if (modifier.Value.OnDefendSuccess != null)
{
ConfigAbilityAction[] onDefendSuccess = modifier.Value.OnDefendSuccess;
foreach (ConfigAbilityAction configAbilityAction10 in onDefendSuccess)
{
if (configAbilityAction10 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction10, ref lastHash);
}
}
}
if (modifier.Value.OnMonsterCreated != null)
{
ConfigAbilityAction[] onMonsterCreated = modifier.Value.OnMonsterCreated;
foreach (ConfigAbilityAction configAbilityAction11 in onMonsterCreated)
{
if (configAbilityAction11 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction11, ref lastHash);
}
}
}
if (modifier.Value.OnAvatarCreated != null)
{
ConfigAbilityAction[] onAvatarCreated = modifier.Value.OnAvatarCreated;
foreach (ConfigAbilityAction configAbilityAction12 in onAvatarCreated)
{
if (configAbilityAction12 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction12, ref lastHash);
}
}
}
if (modifier.Value.OnKilled == null)
{
continue;
}
ConfigAbilityAction[] onKilled = modifier.Value.OnKilled;
foreach (ConfigAbilityAction configAbilityAction13 in onKilled)
{
if (configAbilityAction13 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction13, ref lastHash);
}
}
}
}
if (DefaultModifier != null)
{
HashUtils.ContentHashOnto((int)DefaultModifier.TimeScale, ref lastHash);
HashUtils.ContentHashOnto((int)DefaultModifier.Stacking, ref lastHash);
HashUtils.ContentHashOnto(DefaultModifier.IsBuff, ref lastHash);
HashUtils.ContentHashOnto(DefaultModifier.IsDebuff, ref lastHash);
HashUtils.ContentHashOnto(DefaultModifier.IsUnique, ref lastHash);
if (DefaultModifier.Duration != null)
{
HashUtils.ContentHashOnto(DefaultModifier.Duration.isDynamic, ref lastHash);
HashUtils.ContentHashOnto(DefaultModifier.Duration.fixedValue, ref lastHash);
HashUtils.ContentHashOnto(DefaultModifier.Duration.dynamicKey, ref lastHash);
}
if (DefaultModifier.ThinkInterval != null)
{
HashUtils.ContentHashOnto(DefaultModifier.ThinkInterval.isDynamic, ref lastHash);
HashUtils.ContentHashOnto(DefaultModifier.ThinkInterval.fixedValue, ref lastHash);
HashUtils.ContentHashOnto(DefaultModifier.ThinkInterval.dynamicKey, ref lastHash);
}
if (DefaultModifier.ModifierMixins != null)
{
ConfigAbilityMixin[] modifierMixins2 = DefaultModifier.ModifierMixins;
foreach (ConfigAbilityMixin configAbilityMixin3 in modifierMixins2)
{
if (configAbilityMixin3 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityMixin3, ref lastHash);
}
}
}
if (DefaultModifier.Properties != null)
{
foreach (KeyValuePair<string, DynamicFloat> property2 in DefaultModifier.Properties)
{
HashUtils.ContentHashOnto(property2.Key, ref lastHash);
HashUtils.ContentHashOnto(property2.Value.isDynamic, ref lastHash);
HashUtils.ContentHashOnto(property2.Value.fixedValue, ref lastHash);
HashUtils.ContentHashOnto(property2.Value.dynamicKey, ref lastHash);
}
}
if (DefaultModifier.EntityProperties != null)
{
foreach (KeyValuePair<string, DynamicFloat> entityProperty2 in DefaultModifier.EntityProperties)
{
HashUtils.ContentHashOnto(entityProperty2.Key, ref lastHash);
HashUtils.ContentHashOnto(entityProperty2.Value.isDynamic, ref lastHash);
HashUtils.ContentHashOnto(entityProperty2.Value.fixedValue, ref lastHash);
HashUtils.ContentHashOnto(entityProperty2.Value.dynamicKey, ref lastHash);
}
}
HashUtils.ContentHashOnto((int)DefaultModifier.State, ref lastHash);
if (DefaultModifier.StateOption != null)
{
}
HashUtils.ContentHashOnto(DefaultModifier.MuteStateDisplayEffect, ref lastHash);
HashUtils.ContentHashOnto(DefaultModifier.ApplyAttackerWitchTimeRatio, ref lastHash);
if (DefaultModifier.OnAdded != null)
{
ConfigAbilityAction[] onAdded2 = DefaultModifier.OnAdded;
foreach (ConfigAbilityAction configAbilityAction14 in onAdded2)
{
if (configAbilityAction14 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction14, ref lastHash);
}
}
}
if (DefaultModifier.OnRemoved != null)
{
ConfigAbilityAction[] onRemoved2 = DefaultModifier.OnRemoved;
foreach (ConfigAbilityAction configAbilityAction15 in onRemoved2)
{
if (configAbilityAction15 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction15, ref lastHash);
}
}
}
if (DefaultModifier.OnBeingHit != null)
{
ConfigAbilityAction[] onBeingHit2 = DefaultModifier.OnBeingHit;
foreach (ConfigAbilityAction configAbilityAction16 in onBeingHit2)
{
if (configAbilityAction16 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction16, ref lastHash);
}
}
}
if (DefaultModifier.OnBeingHitResolved != null)
{
ConfigAbilityAction[] onBeingHitResolved2 = DefaultModifier.OnBeingHitResolved;
foreach (ConfigAbilityAction configAbilityAction17 in onBeingHitResolved2)
{
if (configAbilityAction17 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction17, ref lastHash);
}
}
}
if (DefaultModifier.OnAttackLanded != null)
{
ConfigAbilityAction[] onAttackLanded2 = DefaultModifier.OnAttackLanded;
foreach (ConfigAbilityAction configAbilityAction18 in onAttackLanded2)
{
if (configAbilityAction18 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction18, ref lastHash);
}
}
}
if (DefaultModifier.OnThinkInterval != null)
{
ConfigAbilityAction[] onThinkInterval2 = DefaultModifier.OnThinkInterval;
foreach (ConfigAbilityAction configAbilityAction19 in onThinkInterval2)
{
if (configAbilityAction19 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction19, ref lastHash);
}
}
}
if (DefaultModifier.OnEvadeStart != null)
{
ConfigAbilityAction[] onEvadeStart2 = DefaultModifier.OnEvadeStart;
foreach (ConfigAbilityAction configAbilityAction20 in onEvadeStart2)
{
if (configAbilityAction20 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction20, ref lastHash);
}
}
}
if (DefaultModifier.OnEvadeSuccess != null)
{
ConfigAbilityAction[] onEvadeSuccess2 = DefaultModifier.OnEvadeSuccess;
foreach (ConfigAbilityAction configAbilityAction21 in onEvadeSuccess2)
{
if (configAbilityAction21 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction21, ref lastHash);
}
}
}
if (DefaultModifier.OnDefendStart != null)
{
ConfigAbilityAction[] onDefendStart2 = DefaultModifier.OnDefendStart;
foreach (ConfigAbilityAction configAbilityAction22 in onDefendStart2)
{
if (configAbilityAction22 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction22, ref lastHash);
}
}
}
if (DefaultModifier.OnDefendSuccess != null)
{
ConfigAbilityAction[] onDefendSuccess2 = DefaultModifier.OnDefendSuccess;
foreach (ConfigAbilityAction configAbilityAction23 in onDefendSuccess2)
{
if (configAbilityAction23 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction23, ref lastHash);
}
}
}
if (DefaultModifier.OnMonsterCreated != null)
{
ConfigAbilityAction[] onMonsterCreated2 = DefaultModifier.OnMonsterCreated;
foreach (ConfigAbilityAction configAbilityAction24 in onMonsterCreated2)
{
if (configAbilityAction24 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction24, ref lastHash);
}
}
}
if (DefaultModifier.OnAvatarCreated != null)
{
ConfigAbilityAction[] onAvatarCreated2 = DefaultModifier.OnAvatarCreated;
foreach (ConfigAbilityAction configAbilityAction25 in onAvatarCreated2)
{
if (configAbilityAction25 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction25, ref lastHash);
}
}
}
if (DefaultModifier.OnKilled != null)
{
ConfigAbilityAction[] onKilled2 = DefaultModifier.OnKilled;
foreach (ConfigAbilityAction configAbilityAction26 in onKilled2)
{
if (configAbilityAction26 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction26, ref lastHash);
}
}
}
}
if (OnAdded != null)
{
ConfigAbilityAction[] onAdded3 = OnAdded;
foreach (ConfigAbilityAction configAbilityAction27 in onAdded3)
{
if (configAbilityAction27 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction27, ref lastHash);
}
}
}
if (OnRemoved != null)
{
ConfigAbilityAction[] onRemoved3 = OnRemoved;
foreach (ConfigAbilityAction configAbilityAction28 in onRemoved3)
{
if (configAbilityAction28 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction28, ref lastHash);
}
}
}
if (OnAbilityStart != null)
{
ConfigAbilityAction[] onAbilityStart = OnAbilityStart;
foreach (ConfigAbilityAction configAbilityAction29 in onAbilityStart)
{
if (configAbilityAction29 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction29, ref lastHash);
}
}
}
if (OnKilled != null)
{
ConfigAbilityAction[] onKilled3 = OnKilled;
foreach (ConfigAbilityAction configAbilityAction30 in onKilled3)
{
if (configAbilityAction30 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction30, ref lastHash);
}
}
}
if (OnDestroy != null)
{
ConfigAbilityAction[] onDestroy = OnDestroy;
foreach (ConfigAbilityAction configAbilityAction31 in onDestroy)
{
if (configAbilityAction31 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction31, ref lastHash);
}
}
}
if (OnFieldEnter != null)
{
ConfigAbilityAction[] onFieldEnter = OnFieldEnter;
foreach (ConfigAbilityAction configAbilityAction32 in onFieldEnter)
{
if (configAbilityAction32 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction32, ref lastHash);
}
}
}
if (OnFieldExit == null)
{
return;
}
ConfigAbilityAction[] onFieldExit = OnFieldExit;
foreach (ConfigAbilityAction configAbilityAction33 in onFieldExit)
{
if (configAbilityAction33 is IHashable)
{
HashUtils.ContentHashOnto((IHashable)configAbilityAction33, ref lastHash);
}
}
}
public void OnLoaded()
{
if (AbilitySpecials != ConfigDynamicArguments.EMPTY)
{
List<string> list = new List<string>(AbilitySpecials.Keys);
foreach (string item in list)
{
if (AbilitySpecials[item] is int)
{
AbilitySpecials[item] = (float)(int)AbilitySpecials[item];
}
}
}
foreach (KeyValuePair<string, ConfigAbilityModifier> modifier in Modifiers)
{
modifier.Value.ModifierName = modifier.Key;
ConfigAbilityModifier value = modifier.Value;
if ((AbilityState.Endure | AbilityState.MoveSpeedUp | AbilityState.AttackSpeedUp | AbilityState.PowerUp | AbilityState.Shielded | AbilityState.CritUp | AbilityState.Immune | AbilityState.MaxMoveSpeed | AbilityState.Undamagable).ContainsState(value.State))
{
value.IsBuff = true;
}
else if ((AbilityState.Bleed | AbilityState.Stun | AbilityState.Paralyze | AbilityState.Burn | AbilityState.Poisoned | AbilityState.Frozen | AbilityState.MoveSpeedDown | AbilityState.AttackSpeedDown | AbilityState.Weak | AbilityState.Fragile | AbilityState.TargetLocked | AbilityState.Tied).ContainsState(value.State))
{
value.IsDebuff = true;
}
if (value.IsBuff)
{
if (value.Stacking == ConfigAbilityModifier.ModifierStacking.Unique)
{
value.Stacking = ConfigAbilityModifier.ModifierStacking.Refresh;
}
}
else if (!value.IsDebuff)
{
}
if (value.State != AbilityState.None && value.StateOption != null)
{
value.StateOption.ChangeModifierConfig(value);
}
}
if (DefaultModifier != null)
{
if (Modifiers == EMPTY_MODIFIERS)
{
Modifiers = new Dictionary<string, ConfigAbilityModifier>();
}
DefaultModifier.ModifierName = "__DEFAULT_MODIFIER";
Modifiers.Add("__DEFAULT_MODIFIER", DefaultModifier);
List<ConfigAbilityAction> list2 = new List<ConfigAbilityAction>(OnAdded);
list2.Insert(0, new ApplyModifier
{
ModifierName = "__DEFAULT_MODIFIER",
Target = AbilityTargetting.Caster
});
OnAdded = list2.ToArray();
DefaultModifier = null;
}
InvokeSites = new List<BaseActionContainer>();
AddSubActions(OnAdded);
AddSubActions(OnRemoved);
AddSubActions(OnAbilityStart);
AddSubActions(OnKilled);
AddSubActions(OnDestroy);
AddSubActions(OnFieldEnter);
AddSubActions(OnFieldExit);
AddMixins(AbilityMixins);
string[] array = new string[Modifiers.Count];
Modifiers.Keys.CopyTo(array, 0);
Array.Sort(array);
ModifierIDMap = new ConfigAbilityModifier[array.Length];
for (int i = 0; i < array.Length; i++)
{
ConfigAbilityModifier configAbilityModifier = Modifiers[array[i]];
configAbilityModifier.localID = i;
ModifierIDMap[i] = configAbilityModifier;
AddSubActions(configAbilityModifier.OnAdded);
AddSubActions(configAbilityModifier.OnRemoved);
AddSubActions(configAbilityModifier.OnBeingHit);
AddSubActions(configAbilityModifier.OnBeingHitResolved);
AddSubActions(configAbilityModifier.OnAttackLanded);
AddSubActions(configAbilityModifier.OnThinkInterval);
AddSubActions(configAbilityModifier.OnEvadeStart);
AddSubActions(configAbilityModifier.OnEvadeSuccess);
AddSubActions(configAbilityModifier.OnMonsterCreated);
AddSubActions(configAbilityModifier.OnAvatarCreated);
AddSubActions(configAbilityModifier.OnKilled);
AddMixins(configAbilityModifier.ModifierMixins);
}
}
private void AddSubAction(ConfigAbilityAction action)
{
InvokeSites.Add(action);
action.localID = InvokeSites.Count - 1;
}
private void AddSubActions(ConfigAbilityAction[] actions)
{
foreach (ConfigAbilityAction configAbilityAction in actions)
{
AddSubAction(configAbilityAction);
ConfigAbilityAction[][] allSubActions = configAbilityAction.GetAllSubActions();
for (int j = 0; j < allSubActions.Length; j++)
{
AddSubActions(allSubActions[j]);
}
}
}
private void AddSubActions(ConfigAbilityAction[][] actions)
{
for (int i = 0; i < actions.Length; i++)
{
AddSubActions(actions[i]);
}
}
private void AddMixins(ConfigAbilityMixin[] mixins)
{
foreach (ConfigAbilityMixin configAbilityMixin in mixins)
{
InvokeSites.Add(configAbilityMixin);
configAbilityMixin.localID = InvokeSites.Count - 1;
AddSubActions(configAbilityMixin.GetAllSubActions());
}
}
}
}