

using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace BaseDamageModifiers;
[BepInPlugin("com.ehaugw.basedamagemodifiers", "BaseDamageModifiers", "1.0.0")]
public class BaseDamageModifiers : BaseUnityPlugin
{
public delegate void WeaponDamageModifier(Weapon weapon, DamageList original, ref DamageList result);
public delegate void WeaponImpactModifier(Weapon weapon, float original, ref float result);
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class Weapon_BaseImpact
{
[HarmonyPostfix]
public static void Postfix(Weapon __instance, ref float __result)
{
float original = __result;
WeaponImpactModifiers(__instance, original, ref __result);
}
}
[HarmonyPatch(typeof(WeaponStats), "GetAttackImpact")]
public class WeaponStats_GetAttackImpact
{
[HarmonyPostfix]
public static void Postfix(WeaponStats __instance, int _attackID, ref float __result, Item ___m_item)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
Weapon val = (Weapon)___m_item;
WeaponType val2 = val.Type;
object obj;
if (val == null)
{
obj = null;
}
else
{
Character ownerCharacter = ((EffectSynchronizer)val).OwnerCharacter;
obj = ((ownerCharacter != null) ? ownerCharacter.Animator : null);
}
Animator val3 = (Animator)obj;
if (val3 != null && UnityEngineExtensions.HasParameter(val3, "WeaponType"))
{
val2 = (WeaponType)val3.GetInteger("WeaponType");
}
float num = 1f;
if (WeaponStatData.WeaponBaseDataDict.Keys.Contains(val2))
{
float[] impactMult = WeaponStatData.WeaponBaseDataDict[val2].ImpactMult;
if (_attackID < 0 || _attackID >= impactMult.Length)
{
_attackID = 0;
}
num = impactMult[_attackID];
}
__result = val.Impact * num;
}
}
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class Weapon_Damage
{
[HarmonyPostfix]
public static void Postfix(Weapon __instance, ref DamageList __result)
{
DamageList original = __result.Clone();
__result = __result.Clone();
WeaponDamageModifiers(__instance, original, ref __result);
}
}
[HarmonyPatch(typeof(WeaponStats), "GetAttackDamage")]
public class WeaponStats_GetAttackDamage
{
[HarmonyPostfix]
public static void Postfix(WeaponStats __instance, int _attackID, ref IList<float> __result, Item ___m_item)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
Weapon val = (Weapon)___m_item;
WeaponType val2 = val.Type;
object obj;
if (val == null)
{
obj = null;
}
else
{
Character ownerCharacter = ((EffectSynchronizer)val).OwnerCharacter;
obj = ((ownerCharacter != null) ? ownerCharacter.Animator : null);
}
Animator val3 = (Animator)obj;
if (val3 != null && UnityEngineExtensions.HasParameter(val3, "WeaponType"))
{
val2 = (WeaponType)val3.GetInteger("WeaponType");
}
float[] array = new float[5] { 1f, 1f, 1f, 1f, 1f };
if (WeaponStatData.WeaponBaseDataDict.Keys.Contains(val2))
{
array = WeaponStatData.WeaponBaseDataDict[val2].DamageMult;
}
if (_attackID < 0 || _attackID >= array.Length)
{
_attackID = 0;
}
DamageList damage = val.Damage;
for (int i = 0; i < damage.Count && i < __result.Count; i++)
{
__result[i] = damage[i].Damage * array[_attackID];
}
}
}
public const string GUID = "com.ehaugw.basedamagemodifiers";
public const string VERSION = "1.0.0";
public const string NAME = "BaseDamageModifiers";
public static WeaponDamageModifier WeaponDamageModifiers = delegate
{
};
public static WeaponImpactModifier WeaponImpactModifiers = delegate
{
};
internal void Awake()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
Harmony val = new Harmony("com.ehaugw.basedamagemodifiers");
val.PatchAll();
}
}
public class WeaponStatData
{
public static Dictionary<WeaponType, WeaponStatData> WeaponBaseDataDict = new Dictionary<WeaponType, WeaponStatData>
{
{
(WeaponType)0,
new WeaponStatData
{
DamageMult = new float[5] { 1f, 1f, 1.495f, 1.265f, 1.265f },
ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.1f, 1.1f },
StamMult = new float[5] { 1f, 1f, 1.2f, 1.1f, 1.1f }
}
},
{
(WeaponType)51,
new WeaponStatData
{
DamageMult = new float[5] { 1f, 1f, 1.5f, 1.265f, 1.265f },
ImpactMult = new float[5] { 1f, 1f, 1.5f, 1.1f, 1.1f },
StamMult = new float[5] { 1f, 1f, 1.3f, 1.1f, 1.1f }
}
},
{
(WeaponType)1,
new WeaponStatData
{
DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
StamMult = new float[5] { 1f, 1f, 1.2f, 1.2f, 1.2f }
}
},
{
(WeaponType)52,
new WeaponStatData
{
DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
StamMult = new float[5] { 1f, 1f, 1.375f, 1.375f, 1.35f }
}
},
{
(WeaponType)2,
new WeaponStatData
{
DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
ImpactMult = new float[5] { 1f, 1f, 2.5f, 1.3f, 1.3f },
StamMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f }
}
},
{
(WeaponType)53,
new WeaponStatData
{
DamageMult = new float[5] { 1f, 1f, 0.75f, 1.4f, 1.4f },
ImpactMult = new float[5] { 1f, 1f, 2f, 1.4f, 1.4f },
StamMult = new float[5] { 1f, 1f, 1.2f, 1.2f, 1.2f }
}
},
{
(WeaponType)50,
new WeaponStatData
{
DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.7f },
ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.7f },
StamMult = new float[5] { 1f, 1f, 1.25f, 1.25f, 1.75f }
}
},
{
(WeaponType)54,
new WeaponStatData
{
DamageMult = new float[5] { 1f, 1f, 1.4f, 1.3f, 1.2f },
ImpactMult = new float[5] { 1f, 1f, 1.2f, 1.2f, 1.1f },
StamMult = new float[5] { 1f, 1f, 1.25f, 1.25f, 1.25f }
}
},
{
(WeaponType)55,
new WeaponStatData
{
DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
StamMult = new float[5] { 1f, 1f, 1.3f, 1.2f, 1.2f }
}
}
};
public float[] DamageMult;
public float[] ImpactMult;
public float[] StamMult;
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BaseDamageModifiers;
using BepInEx;
using CustomGrip;
using EffectSourceConditions;
using HarmonyLib;
using HolyDamageManager;
using ImpendingDoom;
using NodeCanvas.DialogueTrees;
using NodeCanvas.Framework;
using NodeCanvas.Tasks.Actions;
using Photon;
using SideLoader;
using SideLoader.Model;
using SynchronizedWorldObjects;
using TinyHelper;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace Crusader;
public class AuraOfSmitingBonusDamage
{
public void Apply(Weapon weapon, DamageList original, ref DamageList result)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
result.Add(new DamageType(HolyDamageManager.GetDamageType(), 10f));
}
public bool Eligible(Weapon weapon)
{
bool? obj;
if (weapon == null)
{
obj = null;
}
else
{
Character ownerCharacter = ((EffectSynchronizer)weapon).OwnerCharacter;
if (ownerCharacter == null)
{
obj = null;
}
else
{
StatusEffectManager statusEffectMngr = ownerCharacter.StatusEffectMngr;
obj = ((statusEffectMngr != null) ? new bool?(statusEffectMngr.HasStatusEffect(Crusader.Instance.auraOfSmitingEffectInstance.IdentifierName)) : null);
}
}
bool? flag = obj;
return flag.GetValueOrDefault();
}
}
public class CrusaderRPCManager : MonoBehaviour
{
public static CrusaderRPCManager Instance;
internal void Start()
{
Instance = this;
PhotonView val = ((Component)this).gameObject.AddComponent<PhotonView>();
val.viewID = 950;
Debug.Log((object)("Registered CrusaderRPC with ViewID " + ((MonoBehaviour)this).photonView.viewID));
}
[PunRPC]
public void AssignFaction(string playerUID, FactionSelector.CrusaderFaction faction)
{
Crusader.Instance.FactionSelectorInstance.PlayerFactions[playerUID] = faction;
}
}
public class AuraOfSmitingEffect : Effect
{
public const float RANGE = 10f;
public const float DAMAGE = 10f;
public const float BASECOST = 0.35f;
public const float UPDATERATE = 1f;
protected override void ActivateLocally(Character character, object[] _infos)
{
float num = 0.35f;
if (character.Mana >= num)
{
character.Stats.UseMana((Tag[])(object)new Tag[0], num);
}
else
{
character.StatusEffectMngr.CleanseStatusEffect(base.m_parentStatusEffect);
}
}
}
internal class Healing : Effect
{
public float RestoredHealth = 0f;
public bool CanRevive = false;
public Types AmplificationType = (Types)9;
public static void Revive(Character character)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
if (Object.op_Implicit((Object)(object)character))
{
PlayerSaveData val = null;
if (!character.IsAI)
{
val = new PlayerSaveData(character);
PlayerSaveData obj = val;
obj.BurntHealth += character.ActiveMaxHealth * 0.5f;
((CharacterSaveData)val).Health = character.ActiveMaxHealth;
val.Stamina = character.ActiveMaxStamina;
}
character.Resurrect((PlayerSaveData)null, true);
}
}
public static void StaticActivate(Character _affectedCharacter, Character _sourceCharacter, float _restoredHealth, bool _canRevive, object[] _infos)
{
float num = HolyDamageManager.BuffHolyDamageOrHealing(_sourceCharacter, _restoredHealth);
if (_affectedCharacter.IsDead && _canRevive)
{
Revive(_affectedCharacter);
}
if (!_affectedCharacter.IsDead || _canRevive)
{
_affectedCharacter.Stats.AffectHealth(num);
}
}
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
StaticActivate(_affectedCharacter, ((Effect)this).SourceCharacter, RestoredHealth, CanRevive, _infos);
}
}
internal class HealingAoE : Healing
{
public float Range = 30f;
public static void StaticActivate(Character _centerCharacter, Character _sourceCharacter, float _range, float _restoredHealth, bool _canRevive, object[] _infos)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
List<Character> source = new List<Character>();
CharacterManager.Instance.FindCharactersInRange(_centerCharacter.CenterPosition, _range, ref source);
foreach (Character item in source.Where((Character c) => c.IsAlly(_centerCharacter)))
{
Healing.StaticActivate(item, _sourceCharacter, _restoredHealth, _canRevive, _infos);
}
}
protected override void ActivateLocally(Character _centerCharacter, object[] _infos)
{
StaticActivate(_centerCharacter, ((Effect)this).SourceCharacter, Range, RestoredHealth, CanRevive, _infos);
}
}
public class SoulPlague : Effect
{
public const float LIFE_SPAN = 100f;
public const float DAMAGE = 20f;
protected override void ActivateLocally(Character character, object[] _infos)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
Transform val = ((Component)character).transform.Find("SoulSpot");
if (val != null)
{
DamageList val2 = new DamageList(HolyDamageManager.GetDamageType(), 0.2f);
character.Stats.GetMitigatedDamage((Tag[])null, ref val2, true);
character.Stats.ReceiveDamage(val2.TotalDamage);
object field = At.GetField<Effect>((Effect)(object)this, "m_parentStatusEffect");
StatusEffect val3 = (StatusEffect)((field is StatusEffect) ? field : null);
if (val3 != null && (Object)(object)((EffectSynchronizer)val3).SourceCharacter != (Object)null)
{
((EffectSynchronizer)val3).SourceCharacter.Stats.AffectHealth(val2.TotalDamage);
}
}
}
}
public class SafeRemoveStatusFromOwner : Effect
{
public string StatusToRemove;
protected override void ActivateLocally(Character character, object[] _infos)
{
Debug.Log((object)("character: " + ((Object)character).name));
if (!Object.op_Implicit((Object)(object)character) || !Object.op_Implicit((Object)(object)character.StatusEffectMngr))
{
return;
}
StatusEffect statusEffectOfName = character.StatusEffectMngr.GetStatusEffectOfName(StatusToRemove);
if (true)
{
Debug.Log((object)"how about now?");
if (((Effect)((Component)statusEffectOfName).gameObject.GetComponentInChildren<ShootBlast>()).LastCondSuccess)
{
Debug.Log((object)"remove effect pls");
character.StatusEffectMngr.CleanseStatusEffect(statusEffectOfName);
}
}
}
}
public class SourceConditionCrusaderFaction : SourceCondition
{
public FactionSelector.CrusaderFaction Faction = FactionSelector.CrusaderFaction.None;
public bool Invert = false;
public override bool CharacterHasRequirement(Character character)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
return (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(character.UID)] == Faction) ^ Invert;
}
}
public class ConditionCrusaderFaction : EffectCondition
{
public FactionSelector.CrusaderFaction Faction = FactionSelector.CrusaderFaction.None;
protected override bool CheckIsValid(Character _affectedCharacter)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
return (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(_affectedCharacter.UID)] == Faction) ^ base.Invert;
}
}
public class FactionSelector
{
public enum CrusaderFaction
{
HolyMission,
BlueChamber,
HeroicKingdom,
None
}
public Dictionary<string, CrusaderFaction> PlayerFactions = new Dictionary<string, CrusaderFaction>();
public static MinMaxGradient holyMissionMinMaxGradient = new MinMaxGradient(new Color(1f, 0.83f, 0.7f, 0.5f) / 2f, new Color(1f, 0.5f, 0.2f, 0.5f) / 2f);
public static MinMaxGradient blueChamberCollectiveMinMaxGradient = new MinMaxGradient(new Color(0.73f, 1f, 0.83f, 0.5f) / 2f, new Color(0.3f, 1f, 0.5f, 0.5f) / 2f);
public FactionSelector()
{
SL.OnSceneLoaded += OnSceneLoadedReportFaction;
}
private void OnSceneLoadedReportFaction()
{
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
Character firstLocalCharacter = CharacterManager.Instance.GetFirstLocalCharacter();
if (firstLocalCharacter.IsWorldHost)
{
CrusaderFaction value = CrusaderFaction.None;
if (QuestRequirements.HasQuestKnowledge(firstLocalCharacter, new int[1] { 7011101 }, (LogicType)0, false, false))
{
value = CrusaderFaction.HolyMission;
}
if (QuestRequirements.HasQuestKnowledge(firstLocalCharacter, new int[1] { 7011304 }, (LogicType)0, false, false))
{
value = CrusaderFaction.HeroicKingdom;
}
if (QuestRequirements.HasQuestKnowledge(firstLocalCharacter, new int[1] { 7011201 }, (LogicType)0, false, false))
{
value = CrusaderFaction.BlueChamber;
}
PlayerFactions[UID.op_Implicit(firstLocalCharacter.UID)] = value;
}
PhotonView photonView = ((MonoBehaviour)CrusaderRPCManager.Instance).photonView;
object[] array = new object[2];
UID uID = firstLocalCharacter.UID;
array[0] = ((object)(UID)(ref uID)).ToString();
array[1] = (PlayerFactions.ContainsKey(UID.op_Implicit(firstLocalCharacter.UID)) ? PlayerFactions[UID.op_Implicit(firstLocalCharacter.UID)] : CrusaderFaction.None);
photonView.RPC("AssignFaction", (PhotonTargets)0, array);
}
public static void SetWeaponTrailForFaction(Skill skill)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
Tuple<CrusaderFaction, MinMaxGradient>[] array = new Tuple<CrusaderFaction, MinMaxGradient>[3]
{
new Tuple<CrusaderFaction, MinMaxGradient>(CrusaderFaction.HolyMission, holyMissionMinMaxGradient),
new Tuple<CrusaderFaction, MinMaxGradient>(CrusaderFaction.HeroicKingdom, holyMissionMinMaxGradient),
new Tuple<CrusaderFaction, MinMaxGradient>(CrusaderFaction.BlueChamber, blueChamberCollectiveMinMaxGradient)
};
foreach (Tuple<CrusaderFaction, MinMaxGradient> tuple in array)
{
Transform val = TinyGameObjectManager.MakeFreshTransform(((Component)skill).transform, "ActivationEffects", true, true);
((SL_Effect)new SL_PlayVFX
{
VFXPrefab = (VFXPrefabs)86
}).ApplyToTransform(val);
PlayVFX[] components = ((Component)val).gameObject.GetComponents<PlayVFX>();
foreach (PlayVFX val2 in components)
{
ParticleSystem[] componentsInChildren = ((Component)val2.VFX).gameObject.GetComponentsInChildren<ParticleSystem>();
foreach (ParticleSystem val3 in componentsInChildren)
{
MainModule main = val3.main;
((MainModule)(ref main)).startColor = tuple.Item2;
}
}
Transform orMake = TinyGameObjectManager.GetOrMake(val, "SourceConditions", true, true);
((Component)orMake).gameObject.AddComponent<SourceConditionCrusaderFaction>().Faction = tuple.Item1;
}
}
public static void SetCasterParticleForFaction(Skill skill, float delay)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
Tuple<CrusaderFaction, MinMaxGradient>[] array = new Tuple<CrusaderFaction, MinMaxGradient>[3]
{
new Tuple<CrusaderFaction, MinMaxGradient>(CrusaderFaction.HeroicKingdom, holyMissionMinMaxGradient),
new Tuple<CrusaderFaction, MinMaxGradient>(CrusaderFaction.HolyMission, holyMissionMinMaxGradient),
new Tuple<CrusaderFaction, MinMaxGradient>(CrusaderFaction.BlueChamber, blueChamberCollectiveMinMaxGradient)
};
foreach (Tuple<CrusaderFaction, MinMaxGradient> tuple in array)
{
Transform val = TinyGameObjectManager.MakeFreshTransform(((Component)skill).transform, "ActivationEffects", true, true);
((SL_Effect)new SL_PlayVFX
{
VFXPrefab = (VFXPrefabs)61,
Delay = delay
}).ApplyToTransform(val);
PlayVFX[] components = ((Component)val).gameObject.GetComponents<PlayVFX>();
foreach (PlayVFX val2 in components)
{
ParticleSystem[] componentsInChildren = ((Component)val2.VFX).gameObject.GetComponentsInChildren<ParticleSystem>(true);
foreach (ParticleSystem val3 in componentsInChildren)
{
MainModule main = val3.main;
((MainModule)(ref main)).startColor = tuple.Item2;
ColorBySpeedModule colorBySpeed = val3.colorBySpeed;
((ColorBySpeedModule)(ref colorBySpeed)).color = tuple.Item2;
ColorOverLifetimeModule colorOverLifetime = val3.colorOverLifetime;
((ColorBySpeedModule)(ref colorBySpeed)).color = tuple.Item2;
}
}
Transform orMake = TinyGameObjectManager.GetOrMake(val, "SourceConditions", true, true);
((Component)orMake).gameObject.AddComponent<SourceConditionCrusaderFaction>().Faction = tuple.Item1;
}
}
}
public class ModTheme
{
public enum Theme
{
Elatt,
DawnWeaver,
Atheist,
Crusader
}
private static int m_skillTreeNumber;
public static Theme? modTheme;
public const string BurstOfDivinityEffectIdentifierName = "BurstOfDivinity";
public const string AncestralMemoryEffectName = "Ancestral Memory";
public static Theme GetTheme => modTheme ?? Theme.Crusader;
public static string SkillTreeName => SkillTreeNameReadable + ((m_skillTreeNumber++ > 0) ? m_skillTreeNumber.ToString() : "");
public static string SkillTreeNameReadable => GetTheme switch
{
Theme.Elatt => "Templar",
Theme.DawnWeaver => "Dawn Weaver Templar",
Theme.Atheist => "Pilgrim",
Theme.Crusader => "Crusader",
_ => "UNTHEMED STRING",
};
public static string ConsecratedGroundEffectName
{
get
{
Theme getTheme = GetTheme;
Theme theme = getTheme;
if ((uint)theme > 3u)
{
}
return "Consecrated Ground";
}
}
public static string MeditationCooldownNotification
{
get
{
switch (GetTheme)
{
case Theme.Elatt:
case Theme.DawnWeaver:
return "You get the feeling that nobody are even listening to your prayers.";
case Theme.Atheist:
case Theme.Crusader:
return "You are unable to focus.";
default:
return "UNTHEMED STRING";
}
}
}
public static string BlessedDeterminationSpellName
{
get
{
switch (GetTheme)
{
case Theme.Elatt:
case Theme.DawnWeaver:
return "Blessed Determination";
case Theme.Atheist:
return "Resolute Determination";
case Theme.Crusader:
return "Blessed Determination";
default:
return "UNTHEMED STRING";
}
}
}
public static string DivineFavorSpellName
{
get
{
switch (GetTheme)
{
case Theme.Elatt:
case Theme.DawnWeaver:
return "Divine Favor";
case Theme.Atheist:
return "Condemn";
case Theme.Crusader:
return "Judgement";
default:
return "UNTHEMED STRING";
}
}
}
public static string BlessedDeterminationRequiredBoonName => null;
public static string PrayForSkillTreeMissingCondition
{
get
{
Theme getTheme = GetTheme;
Theme theme = getTheme;
if ((uint)theme <= 3u)
{
return "There is something about this place that makes you unable to connect with yourself. Maybe you should return to this place at a later stage in your training?";
}
return "UNTHEMED STRING";
}
}
public static string BurstOfDivinityEffectName
{
get
{
switch (GetTheme)
{
case Theme.Elatt:
case Theme.DawnWeaver:
return "Burst of Divinity";
case Theme.Atheist:
return "Burst of Clarity";
case Theme.Crusader:
return "Burst of Divinity";
default:
return "UNTHEMED STRING";
}
}
}
public static string ChannelDivinitySpellName
{
get
{
switch (GetTheme)
{
case Theme.Elatt:
case Theme.DawnWeaver:
return "Channel Divinity";
case Theme.Atheist:
return "Channel Soul";
case Theme.Crusader:
return "Channel";
default:
return "UNTHEMED STRING";
}
}
}
public static string MeditationSkillName
{
get
{
switch (GetTheme)
{
case Theme.Elatt:
case Theme.DawnWeaver:
return "Pray";
case Theme.Atheist:
case Theme.Crusader:
return "Meditate";
default:
return "UNTHEMED STRING";
}
}
}
public static string MeditationDescription
{
get
{
switch (GetTheme)
{
case Theme.Elatt:
case Theme.DawnWeaver:
return "Prayers are all good...\n\nBut do not expect anyone to reply!";
case Theme.Atheist:
case Theme.Crusader:
return "Meditate for a moment.";
default:
return "UNTHEMED STRING";
}
}
}
public static string InfusionSpellName => GetTheme switch
{
Theme.Elatt => "Infuse Burst of Light",
Theme.DawnWeaver => "Infuse Dawn",
Theme.Atheist => "Infuse Steel Heart",
Theme.Crusader => "Infuse Doom",
_ => "UNTHEMED STRING",
};
public static string InfusionSpellDescriptionType
{
get
{
switch (GetTheme)
{
case Theme.Elatt:
case Theme.DawnWeaver:
return "Light";
case Theme.Crusader:
return "Doom";
default:
return "UNTHEMED STRING";
}
}
}
public static string HolyMissionImbueName => GetTheme switch
{
Theme.Elatt => "Radiant Light Imbue",
Theme.DawnWeaver => "Dawn Imbue",
Theme.Atheist => "Steel Heart Imbue",
Theme.Crusader => "Zealous Weapon",
_ => "UNTHEMED STRING",
};
public static string BlueChamberImbueName => BoneChillName + " Weapon";
public static string BoneChillName => "Bone Shivering";
public static string RadiatingEffectName
{
get
{
Theme getTheme = GetTheme;
Theme theme = getTheme;
if ((uint)theme <= 3u)
{
return "Radiating";
}
return "UNTHEMED STRING";
}
}
public static string ImpendingDoomEffectName => "Impending Doom";
public static string Themifization()
{
return null;
}
}
public class KlausHintNPC1 : SynchronizedNPC
{
public static void Init()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Expected O, but got Unknown
int[] defaultEquipment = new int[3] { 3100062, 3100060, 2000030 };
VisualData visualData = new VisualData
{
Gender = (Gender)0,
SkinIndex = 2,
HeadVariationIndex = 1,
HairStyleIndex = 6,
HairColorIndex = 3
};
KlausHintNPC1 klausHintNPC = new KlausHintNPC1("Rafael", 20, defaultEquipment, null, null, null, visualData);
((SynchronizedNPC)klausHintNPC).AddToScene(new SynchronizedNPCScene("Monsoon", new Vector3(76.6395f, -4.9488f, 213.0735f), new Vector3(0f, 91.9002f, 0f), (Factions?)null, true, (SpellCastType)(-1), (string)null, (int[])null, (int[])null, (Func<bool>)null));
}
public KlausHintNPC1(string identifierName, int rpcListenerID, int[] defaultEquipment = null, int[] moddedEquipment = null, Vector3? scale = null, Factions? faction = null, VisualData visualData = null)
: base(identifierName, rpcListenerID, defaultEquipment, moddedEquipment, scale, faction, visualData)
{
}
public override object SetupClientSide(int rpcListenerID, string instanceUID, int sceneViewID, int recursionCount, string rpcMeta)
{
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
Character val = (from x in Object.FindObjectsOfType<Character>()
where x.IsLocalPlayer
select x).First();
object obj = ((SynchronizedNPC)this).SetupClientSide(rpcListenerID, instanceUID, sceneViewID, recursionCount, rpcMeta);
Character val2 = (Character)((obj is Character) ? obj : null);
if ((Object)(object)val2 == (Object)null)
{
return null;
}
GameObject gameObject = ((Component)val2).gameObject;
GameObject val3 = TinyDialogueManager.AssignTrainerTemplate(gameObject.transform);
DialogueActor val4 = TinyDialogueManager.SetDialogueActorName(val3, ((SynchronizedWorldObject)this).IdentifierName);
Trainer val5 = TinyDialogueManager.SetTrainerSkillTree(val3, CrusaderSkillTree.KlausSkillSchool.UID);
Graph dialogueGraph = TinyDialogueManager.GetDialogueGraph(val3);
TinyDialogueManager.SetActorReference(dialogueGraph, val4);
StatementNodeExt val6 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Hail civillian. I implore you for aid, as a guard it is my duty to stay in Monsoon. Can you search for my old master. I've beseeched holy Elatt and in my request he showed me a vision of a great tree on a peninsula.");
MultipleChoiceNodeExt val7 = TinyDialogueManager.MakeMultipleChoiceNode(dialogueGraph, new string[1] { "What is so important about your teacher?" });
StatementNodeExt val8 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "He was my teacher, nothing too special, though he was one of the few who beleived in me when I was young, and kept in touch until recently and now I worry for him. The marsh is no safe place after all.");
MultipleChoiceNodeExt val9 = TinyDialogueManager.MakeMultipleChoiceNode(dialogueGraph, new string[2] { "I will do what i can.", "I am not suited for this. Take care." });
StatementNodeExt val10 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Thank you! He just left town, and is likely at his usual spot, at the north-eastern shore of the Huge Tree to the west in the marsh.");
StatementNodeExt val11 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Good bye!");
dialogueGraph.allNodes.Clear();
dialogueGraph.allNodes.Add((Node)(object)val6);
dialogueGraph.allNodes.Add((Node)(object)val7);
dialogueGraph.allNodes.Add((Node)(object)val8);
dialogueGraph.allNodes.Add((Node)(object)val9);
dialogueGraph.allNodes.Add((Node)(object)val10);
dialogueGraph.allNodes.Add((Node)(object)val11);
dialogueGraph.primeNode = (Node)(object)val6;
dialogueGraph.ConnectNodes((Node)(object)val6, (Node)(object)val7, -1, -1);
dialogueGraph.ConnectNodes((Node)(object)val7, (Node)(object)val8, 0, -1);
dialogueGraph.ConnectNodes((Node)(object)val8, (Node)(object)val9, -1, -1);
dialogueGraph.ConnectNodes((Node)(object)val9, (Node)(object)val10, 0, -1);
dialogueGraph.ConnectNodes((Node)(object)val9, (Node)(object)val11, 1, -1);
GameObject gameObject2 = ((Component)gameObject.transform.parent).gameObject;
gameObject2.SetActive(true);
return val2;
}
}
public class IgnacioNPC : SynchronizedNPC
{
public static void Init()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Expected O, but got Unknown
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Expected O, but got Unknown
int[] defaultEquipment = new int[4] { 3100471, 3100472, 3100470, 2000030 };
VisualData visualData = new VisualData
{
Gender = (Gender)0,
HeadVariationIndex = 2,
HairStyleIndex = 0,
HairColorIndex = 0
};
IgnacioNPC ignacioNPC = new IgnacioNPC("Ignacio", 18, defaultEquipment, null, null, null, visualData);
((SynchronizedNPC)ignacioNPC).AddToScene(new SynchronizedNPCScene("Emercar_Dungeon5", new Vector3(27.5948f, 0.03f, 0.7649f), new Vector3(0f, 90f, 0f), (Factions?)null, true, (SpellCastType)55, (string)null, (int[])null, (int[])null, (Func<bool>)null));
}
public IgnacioNPC(string identifierName, int rpcListenerID, int[] defaultEquipment = null, int[] moddedEquipment = null, Vector3? scale = null, Factions? faction = null, VisualData visualData = null)
: base(identifierName, rpcListenerID, defaultEquipment, moddedEquipment, scale, faction, visualData)
{
}
public override object SetupClientSide(int rpcListenerID, string instanceUID, int sceneViewID, int recursionCount, string rpcMeta)
{
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
Character val = (from x in Object.FindObjectsOfType<Character>()
where x.IsLocalPlayer
select x).First();
object obj = ((SynchronizedNPC)this).SetupClientSide(rpcListenerID, instanceUID, sceneViewID, recursionCount, rpcMeta);
Character val2 = (Character)((obj is Character) ? obj : null);
if ((Object)(object)val2 == (Object)null)
{
return null;
}
GameObject gameObject = ((Component)val2).gameObject;
GameObject val3 = TinyDialogueManager.AssignTrainerTemplate(gameObject.transform);
DialogueActor val4 = TinyDialogueManager.SetDialogueActorName(val3, ((SynchronizedWorldObject)this).IdentifierName);
Trainer val5 = TinyDialogueManager.SetTrainerSkillTree(val3, CrusaderSkillTree.KlausSkillSchool.UID);
Graph dialogueGraph = TinyDialogueManager.GetDialogueGraph(val3);
TinyDialogueManager.SetActorReference(dialogueGraph, val4);
StatementNodeExt val6 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Have you came to honor the memories of our ancestors?");
StatementNodeExt val7 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "That is classified. All I can tell you is that I am Ignacio.");
DTNode val8 = (DTNode)((Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(val.UID)] != FactionSelector.CrusaderFaction.BlueChamber) ? ((object)TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "I am not allowed to train people not commited to the tribe. You should go back to town and talk to Rissa.")) : ((object)TinyDialogueManager.MakeTrainDialogueAction(dialogueGraph, val5)));
MultipleChoiceNodeExt val9 = TinyDialogueManager.MakeMultipleChoiceNode(dialogueGraph, new string[2] { "You mean the people responsible for my blood dept? Well, no... Who are you anyways?", "I am here to receive training." });
dialogueGraph.allNodes.Clear();
dialogueGraph.allNodes.Add((Node)(object)val6);
dialogueGraph.allNodes.Add((Node)(object)val9);
dialogueGraph.allNodes.Add((Node)(object)val7);
dialogueGraph.allNodes.Add((Node)(object)val8);
dialogueGraph.primeNode = (Node)(object)val6;
dialogueGraph.ConnectNodes((Node)(object)val6, (Node)(object)val9, -1, -1);
dialogueGraph.ConnectNodes((Node)(object)val9, (Node)(object)val7, 0, -1);
dialogueGraph.ConnectNodes((Node)(object)val9, (Node)(object)val8, 1, -1);
dialogueGraph.ConnectNodes((Node)(object)val7, (Node)(object)val6, -1, -1);
GameObject gameObject2 = ((Component)gameObject.transform.parent).gameObject;
gameObject2.SetActive(true);
return val2;
}
}
public class IgnacioHintNPC1 : SynchronizedNPC
{
public static void Init()
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Expected O, but got Unknown
int[] defaultEquipment = new int[2] { 3000350, 3000205 };
Vector3? scale = new Vector3(0.9f, 0.8f, 0.9f);
VisualData visualData = new VisualData
{
Gender = (Gender)1,
SkinIndex = 2,
HeadVariationIndex = 1,
HairStyleIndex = 6,
HairColorIndex = 3
};
IgnacioHintNPC1 ignacioHintNPC = new IgnacioHintNPC1("Laura", 19, defaultEquipment, null, scale, null, visualData);
((SynchronizedNPC)ignacioHintNPC).AddToScene(new SynchronizedNPCScene("Berg", new Vector3(1210.116f, -13.7223f, 1375.415f), new Vector3(0f, 284f, 0f), (Factions?)null, true, (SpellCastType)(-1), (string)null, (int[])null, (int[])null, (Func<bool>)null));
}
public IgnacioHintNPC1(string identifierName, int rpcListenerID, int[] defaultEquipment = null, int[] moddedEquipment = null, Vector3? scale = null, Factions? faction = null, VisualData visualData = null)
: base(identifierName, rpcListenerID, defaultEquipment, moddedEquipment, scale, faction, visualData)
{
}
public override object SetupClientSide(int rpcListenerID, string instanceUID, int sceneViewID, int recursionCount, string rpcMeta)
{
object obj = ((SynchronizedNPC)this).SetupClientSide(rpcListenerID, instanceUID, sceneViewID, recursionCount, rpcMeta);
Character val = (Character)((obj is Character) ? obj : null);
if ((Object)(object)val == (Object)null)
{
return null;
}
GameObject gameObject = ((Component)val).gameObject;
GameObject val2 = TinyDialogueManager.AssignTrainerTemplate(gameObject.transform);
DialogueActor val3 = TinyDialogueManager.SetDialogueActorName(val2, ((SynchronizedWorldObject)this).IdentifierName);
Graph dialogueGraph = TinyDialogueManager.GetDialogueGraph(val2);
TinyDialogueManager.SetActorReference(dialogueGraph, val3);
dialogueGraph.allNodes.Clear();
StatementNodeExt val4 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Hi! Have you seen Ignacio?");
StatementNodeExt val5 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Ignacio calls me Laura, and so can you!");
StatementNodeExt val6 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Ignacio uses to play with me when he's not meditating in the Ancestor's Resting Place.");
StatementNodeExt val7 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "That's a shame. I hope he's all right. Good bye!");
string text = "Who is asking?";
string text2 = "Who is Ignacio?";
string text3 = "No, I am sorry.";
MultipleChoiceNodeExt val8 = TinyDialogueManager.MakeMultipleChoiceNode(dialogueGraph, new string[3] { text, text2, text3 });
dialogueGraph.primeNode = (Node)(object)val4;
TinyDialogueManager.ChainNodes(dialogueGraph, (Node[])(object)new Node[2]
{
(Node)val4,
(Node)val8
});
TinyDialogueManager.ConnectMultipleChoices(dialogueGraph, (Node)(object)val8, (Node[])(object)new Node[3]
{
(Node)val5,
(Node)val6,
(Node)val7
});
GameObject gameObject2 = ((Component)gameObject.transform.parent).gameObject;
gameObject2.SetActive(true);
return val;
}
}
public class KlausNPC : SynchronizedNPC
{
public static void Init()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Expected O, but got Unknown
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Expected O, but got Unknown
int[] defaultEquipment = new int[4] { 3200020, 3100062, 3100060, 2000140 };
VisualData visualData = new VisualData
{
Gender = (Gender)0,
SkinIndex = 2,
HeadVariationIndex = 3,
HairStyleIndex = 6,
HairColorIndex = 5
};
KlausNPC klausNPC = new KlausNPC("Klaus", 0, defaultEquipment, null, null, null, visualData);
((SynchronizedNPC)klausNPC).AddToScene(new SynchronizedNPCScene("HallowedMarshNewTerrain", new Vector3(485.078f, -63.4412f, 491.7649f), new Vector3(0f, 278.94f, 0f), (Factions?)null, true, (SpellCastType)55, (string)null, (int[])null, (int[])null, (Func<bool>)null));
}
public KlausNPC(string identifierName, int rpcListenerID, int[] defaultEquipment = null, int[] moddedEquipment = null, Vector3? scale = null, Factions? faction = null, VisualData visualData = null)
: base(identifierName, rpcListenerID, defaultEquipment, moddedEquipment, scale, faction, visualData)
{
}
public override object SetupClientSide(int rpcListenerID, string instanceUID, int sceneViewID, int recursionCount, string rpcMeta)
{
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
Character val = (from x in Object.FindObjectsOfType<Character>()
where x.IsLocalPlayer
select x).First();
object obj = ((SynchronizedNPC)this).SetupClientSide(rpcListenerID, instanceUID, sceneViewID, recursionCount, rpcMeta);
Character val2 = (Character)((obj is Character) ? obj : null);
if ((Object)(object)val2 == (Object)null)
{
return null;
}
GameObject gameObject = ((Component)val2).gameObject;
GameObject val3 = TinyDialogueManager.AssignTrainerTemplate(gameObject.transform);
DialogueActor val4 = TinyDialogueManager.SetDialogueActorName(val3, ((SynchronizedWorldObject)this).IdentifierName);
Trainer val5 = TinyDialogueManager.SetTrainerSkillTree(val3, CrusaderSkillTree.KlausSkillSchool.UID);
Graph dialogueGraph = TinyDialogueManager.GetDialogueGraph(val3);
TinyDialogueManager.SetActorReference(dialogueGraph, val4);
StatementNodeExt val6 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Hi there! What is a guy like you doing so far off the road? Are you all right?");
StatementNodeExt val7 = TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Ohh... Please forgive me. I am Klaus, a " + ModTheme.SkillTreeNameReadable + ". I have not felt in touch with myself lately, so I went out here to the marsh looking for a place whare I could " + ModTheme.MeditationSkillName + ".");
DTNode val8 = (DTNode)((Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(val.UID)] != 0) ? ((object)TinyDialogueManager.MakeStatementNode(dialogueGraph, ((SynchronizedWorldObject)this).IdentifierName, "Unfortunately, I am only able to help those who are blessed by Elatt.")) : ((object)TinyDialogueManager.MakeTrainDialogueAction(dialogueGraph, val5)));
MultipleChoiceNodeExt val9 = TinyDialogueManager.MakeMultipleChoiceNode(dialogueGraph, new string[2] { "I seem to be doing all right. Thanks for the concern. Who are you?", "I am here to receive training. Would you be willing to help me with that?" });
dialogueGraph.allNodes.Clear();
dialogueGraph.allNodes.Add((Node)(object)val6);
dialogueGraph.allNodes.Add((Node)(object)val9);
dialogueGraph.allNodes.Add((Node)(object)val7);
dialogueGraph.allNodes.Add((Node)(object)val8);
dialogueGraph.primeNode = (Node)(object)val6;
dialogueGraph.ConnectNodes((Node)(object)val6, (Node)(object)val9, -1, -1);
dialogueGraph.ConnectNodes((Node)(object)val9, (Node)(object)val7, 0, -1);
dialogueGraph.ConnectNodes((Node)(object)val9, (Node)(object)val8, 1, -1);
dialogueGraph.ConnectNodes((Node)(object)val7, (Node)(object)val6, -1, -1);
GameObject gameObject2 = ((Component)gameObject.transform.parent).gameObject;
gameObject2.SetActive(true);
return val2;
}
}
public class HolyShock
{
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Expected O, but got Unknown
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
//IL_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_015d: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0164: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
//IL_0185: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: Unknown result type (might be due to invalid IL or missing references)
//IL_018c: Unknown result type (might be due to invalid IL or missing references)
//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
//IL_01fa: Expected O, but got Unknown
//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0205: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: Unknown result type (might be due to invalid IL or missing references)
//IL_0263: Unknown result type (might be due to invalid IL or missing references)
//IL_0273: Unknown result type (might be due to invalid IL or missing references)
//IL_028e: Unknown result type (might be due to invalid IL or missing references)
//IL_0295: Expected O, but got Unknown
//IL_031e: Unknown result type (might be due to invalid IL or missing references)
//IL_0328: Unknown result type (might be due to invalid IL or missing references)
//IL_032e: Expected O, but got Unknown
//IL_039b: Unknown result type (might be due to invalid IL or missing references)
//IL_03a0: Unknown result type (might be due to invalid IL or missing references)
SL_AttackSkill val = new SL_AttackSkill
{
Name = "Holy Shock",
EffectBehaviour = (EditBehaviours)2,
Target_ItemID = 8200180,
New_ItemID = 2502036,
SLPackName = Crusader.ModFolderName,
SubfolderName = "Holy Shock",
Description = "A blast that damages opponents and heals allies.",
CastType = (SpellCastType)52,
CastModifier = (SpellCastModifier)0,
CastLocomotionEnabled = false,
MobileCastMovementMult = -1f,
CastSheatheRequired = 0,
Cooldown = 30f,
StaminaCost = 0f,
HealthCost = 0f,
ManaCost = 14f
};
((ContentTemplate)val).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
Skill val2 = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
((SL_Effect)new SL_PlaySoundEffect
{
Follow = true,
OverrideCategory = (EffectCategories)0,
Delay = 0.05f,
MinPitch = 1f,
MaxPitch = 1f,
SyncType = (SyncTypes)0,
Sounds = new List<Sounds> { (Sounds)13221 }
}).ApplyToTransform(TinyGameObjectManager.GetOrMake(((Component)val2).transform, "ActivationEffects", true, true));
((SL_Effect)new SL_PlaySoundEffect
{
Follow = true,
OverrideCategory = (EffectCategories)0,
Delay = 0.4f,
MinPitch = 1f,
MaxPitch = 1f,
SyncType = (SyncTypes)0,
Sounds = new List<Sounds> { (Sounds)13150 }
}).ApplyToTransform(TinyGameObjectManager.GetOrMake(((Component)val2).transform, "ActivationEffects", true, true));
((SL_Effect)new SL_PlayVFX
{
VFXPrefab = (VFXPrefabs)94
}).ApplyToTransform(TinyGameObjectManager.GetOrMake(((Component)val2).transform, "ActivationEffects", true, true));
Transform orMake = TinyGameObjectManager.GetOrMake(((Component)val2).transform, "Effects", true, true);
SL_ShootBlast val3 = new SL_ShootBlast();
((SL_Shooter)val3).CastPosition = (CastPositionType)0;
((SL_Shooter)val3).TargetType = (TargetTypes)0;
val3.BaseBlast = (BlastPrefabs)51;
val3.Radius = 7f;
val3.BlastLifespan = 1f;
val3.RefreshTime = -1f;
val3.InstantiatedAmount = 5;
val3.Interruptible = false;
val3.HitOnShoot = true;
val3.IgnoreShooter = true;
val3.ParentToShootTransform = false;
val3.ImpactSoundMaterial = (EquipmentSoundMaterials)12;
val3.DontPlayHitSound = true;
val3.EffectBehaviour = (EditBehaviours)2;
((SL_Effect)val3).Delay = 0f;
SL_EffectTransform[] array = new SL_EffectTransform[1];
SL_EffectTransform val4 = new SL_EffectTransform();
val4.TransformName = "Effects";
val4.Effects = (SL_Effect[])(object)new SL_Effect[0];
array[0] = val4;
val3.BlastEffects = (SL_EffectTransform[])(object)array;
Effect obj = ((SL_Effect)val3).ApplyToTransform(orMake);
ShootBlast val5 = (ShootBlast)(object)((obj is ShootBlast) ? obj : null);
Transform val6 = ((Component)val5.BaseBlast).transform.Find("Effects");
((Component)val6).gameObject.SetActive(true);
PunctualDamage component = ((Component)val6).GetComponent<PunctualDamage>();
Object.Destroy((Object)(object)component);
component = ((Component)val6).gameObject.AddComponent<PunctualDamage>();
((Effect)component).Delay = 0f;
component.Damages = (DamageType[])(object)new DamageType[1]
{
new DamageType(HolyDamageManager.GetDamageType(), 40f)
};
component.Knockback = 40f;
AddThenSpreadStatus val7 = ((Component)val6).gameObject.AddComponent<AddThenSpreadStatus>();
((AddStatusEffect)val7).Status = ImpendingDoomMod.Instance.impendingDoomInstance;
((AddStatusEffect)val7).SetChanceToContract(100);
val7.Range = 7f;
HealingAoE healingAoE = ((Component)orMake).gameObject.AddComponent<HealingAoE>();
healingAoE.Range = 7f;
healingAoE.RestoredHealth = 20f;
healingAoE.AmplificationType = HolyDamageManager.GetDamageType();
healingAoE.CanRevive = false;
GameObject val8 = Object.Instantiate<GameObject>(SL.GetSLPack(Crusader.ModFolderName).AssetBundles["holy_shock"].LoadAsset<GameObject>("holy_shock_Prefab"));
val8.transform.SetParent(((Component)val5.BaseBlast).transform);
return val2;
}
}
public class Consecration
{
public static float range = 10f;
public static float duration = 30f;
public static float cooldown = 100f;
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0152: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
//IL_0164: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_019f: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
//IL_01df: Unknown result type (might be due to invalid IL or missing references)
//IL_01e6: Expected O, but got Unknown
//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0250: Unknown result type (might be due to invalid IL or missing references)
//IL_0260: Unknown result type (might be due to invalid IL or missing references)
//IL_026f: Unknown result type (might be due to invalid IL or missing references)
//IL_0276: Expected O, but got Unknown
//IL_028c: Unknown result type (might be due to invalid IL or missing references)
//IL_0291: Unknown result type (might be due to invalid IL or missing references)
//IL_029c: Unknown result type (might be due to invalid IL or missing references)
//IL_02a5: Expected O, but got Unknown
SL_AttackSkill val = new SL_AttackSkill();
((SL_Item)val).Name = "Consecration";
((SL_Item)val).EffectBehaviour = (EditBehaviours)2;
((SL_Item)val).Target_ItemID = 8100350;
((SL_Item)val).New_ItemID = 2502039;
((SL_Item)val).SLPackName = Crusader.ModFolderName;
((SL_Item)val).SubfolderName = "Consecration";
((SL_Item)val).Description = "Slam your weapon into the ground to consecrate it.";
((SL_Item)val).CastType = (SpellCastType)511;
((SL_Item)val).CastModifier = (SpellCastModifier)2;
((SL_Item)val).CastLocomotionEnabled = false;
((SL_Item)val).MobileCastMovementMult = -1f;
((SL_Item)val).CastSheatheRequired = 2;
WeaponType[] array = new WeaponType[11];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
val.RequiredWeaponTypes = (WeaponType[])(object)array;
((SL_Skill)val).Cooldown = cooldown;
((SL_Skill)val).StaminaCost = 7f;
((SL_Skill)val).ManaCost = 7f;
((SL_Skill)val).HealthCost = 0f;
((SL_Skill)val).DurabilityCost = 0f;
SL_AttackSkill val2 = val;
((ContentTemplate)val2).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val2).New_ItemID);
Skill val3 = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
WeaponSkillAnimationSelector.SetCustomAttackAnimation(val3, (WeaponType)2);
Transform transform = TinyGameObjectManager.MakeFreshObject("Effects", true, true, ((Component)val3).transform).transform;
((SL_Effect)new SL_PlaySoundEffect
{
Follow = true,
OverrideCategory = (EffectCategories)0,
Delay = 0f,
MinPitch = 1f,
MaxPitch = 1f,
SyncType = (SyncTypes)0,
Sounds = new List<Sounds> { (Sounds)13150 }
}).ApplyToTransform(transform);
((SL_Effect)new SL_RemoveImbueEffects
{
AffectSlot = (WeaponSlot)0,
SyncType = (SyncTypes)0
}).ApplyToTransform(transform);
SpecificImbueCondition.AddToSkill(val3, Crusader.Instance.holyMissionInfusion, false);
((SL_Effect)new SL_PlayVFX
{
VFXPrefab = (VFXPrefabs)94
}).ApplyToTransform(transform);
SL_ShootBlast val4 = new SL_ShootBlast();
((SL_Shooter)val4).CastPosition = (CastPositionType)0;
((SL_Shooter)val4).TargetType = (TargetTypes)1;
val4.BaseBlast = (BlastPrefabs)51;
val4.Radius = range;
val4.RefreshTime = 0.25f;
val4.BlastLifespan = duration;
val4.InstantiatedAmount = 10;
val4.Interruptible = false;
val4.HitOnShoot = true;
val4.IgnoreShooter = false;
val4.ParentToShootTransform = false;
val4.ImpactSoundMaterial = (EquipmentSoundMaterials)12;
val4.DontPlayHitSound = true;
val4.EffectBehaviour = (EditBehaviours)2;
SL_EffectTransform[] array2 = new SL_EffectTransform[1];
SL_EffectTransform val5 = new SL_EffectTransform();
val5.TransformName = "Effects";
val5.Effects = (SL_Effect[])(object)new SL_Effect[1] { (SL_Effect)new SL_AddStatusEffect
{
StatusEffect = ModTheme.ConsecratedGroundEffectName,
ChanceToContract = 100
} };
array2[0] = val5;
val4.BlastEffects = (SL_EffectTransform[])(object)array2;
Effect obj = ((SL_Effect)val4).ApplyToTransform(transform);
ShootBlast val6 = (ShootBlast)(object)((obj is ShootBlast) ? obj : null);
return val3;
}
}
public class RebukingSmiteSpell
{
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Expected O, but got Unknown
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_0168: Unknown result type (might be due to invalid IL or missing references)
//IL_016a: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
//IL_0185: Unknown result type (might be due to invalid IL or missing references)
//IL_0190: Unknown result type (might be due to invalid IL or missing references)
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
SL_AttackSkill val = new SL_AttackSkill();
((SL_Item)val).Name = "Rebuking Swipe";
((SL_Item)val).EffectBehaviour = (EditBehaviours)2;
((SL_Item)val).Target_ItemID = 8100290;
((SL_Item)val).New_ItemID = 2502030;
((SL_Item)val).SLPackName = Crusader.ModFolderName;
((SL_Item)val).SubfolderName = "Rebuking Smite";
((SL_Item)val).Description = "Attack in a wide arch. Applies Doomed.";
((SL_Item)val).CastType = (SpellCastType)511;
((SL_Item)val).CastModifier = (SpellCastModifier)2;
((SL_Item)val).CastLocomotionEnabled = false;
((SL_Item)val).MobileCastMovementMult = -1f;
((SL_Item)val).CastSheatheRequired = 2;
WeaponType[] array = new WeaponType[11];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
val.RequiredWeaponTypes = (WeaponType[])(object)array;
((SL_Skill)val).Cooldown = 20f;
((SL_Skill)val).StaminaCost = 7f;
((SL_Skill)val).ManaCost = 7f;
((SL_Skill)val).HealthCost = 0f;
((SL_Skill)val).DurabilityCost = 3f;
SL_EffectTransform[] array2 = new SL_EffectTransform[1];
SL_EffectTransform val2 = new SL_EffectTransform();
val2.TransformName = "Effects";
val2.Effects = (SL_Effect[])(object)new SL_Effect[0];
array2[0] = val2;
((SL_Item)val).EffectTransforms = (SL_EffectTransform[])(object)array2;
SL_AttackSkill val3 = val;
((ContentTemplate)val3).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
Skill val4 = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
WeaponSkillAnimationSelector.SetCustomAttackAnimation(val4, (WeaponType)51);
((SL_Effect)new SL_PlaySoundEffect
{
Follow = true,
OverrideCategory = (EffectCategories)0,
Delay = 0f,
MinPitch = 1f,
MaxPitch = 1f,
SyncType = (SyncTypes)0,
Sounds = new List<Sounds> { (Sounds)13280 }
}).ApplyToTransform(TinyGameObjectManager.GetOrMake(((Component)val4).transform, "ActivationEffects", true, true));
FactionSelector.SetWeaponTrailForFaction(val4);
Transform transform = TinyGameObjectManager.MakeFreshObject("HitEffects", true, true, ((Component)val4).transform).transform;
WeaponDamage damage = ((Component)transform).gameObject.AddComponent<WeaponDamage>();
setDamage(damage);
AddStatusEffect val5 = ((Component)transform).gameObject.AddComponent<AddStatusEffect>();
val5.SetChanceToContract(100);
val5.Status = ResourcesPrefabManager.Instance.GetStatusEffectPrefab("Doom");
return val4;
}
private static void setDamage(WeaponDamage damage)
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
float weaponDamageMult = 1.5f;
damage.WeaponDamageMult = weaponDamageMult;
damage.WeaponDamageMultKDown = -1f;
damage.WeaponKnockbackMult = 1.5f;
damage.WeaponDurabilityLossPercent = 0f;
damage.WeaponDurabilityLoss = 5f;
damage.OverrideDType = (Types)9;
((PunctualDamage)damage).Damages = (DamageType[])(object)new DamageType[0];
}
}
public class WrathfulSmiteCooldownReset
{
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Expected O, but got Unknown
SL_Skill val = new SL_Skill
{
Name = "Endless Wrath",
EffectBehaviour = (EditBehaviours)1,
Target_ItemID = 8205030,
New_ItemID = 2502029,
SLPackName = Crusader.ModFolderName,
SubfolderName = "Divine Favour",
Description = "Wrathful Smite instantly becomes available for another use if it kills its target.",
IsUsable = false,
CastType = (SpellCastType)(-1),
CastModifier = (SpellCastModifier)0,
CastLocomotionEnabled = false,
MobileCastMovementMult = -1f,
Cooldown = 0f,
StaminaCost = 0f,
ManaCost = 0f
};
((ContentTemplate)val).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
return (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
}
}
public class SharingIsCaringSpell
{
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Expected O, but got Unknown
SL_Skill val = new SL_Skill
{
Name = "Sharing is Caring",
EffectBehaviour = (EditBehaviours)1,
Target_ItemID = 8205030,
New_ItemID = 2502028,
SLPackName = Crusader.ModFolderName,
SubfolderName = "Blessed Determination",
Description = "Cure Wounds can heal your allies.",
IsUsable = false,
CastType = (SpellCastType)(-1),
CastModifier = (SpellCastModifier)0,
CastLocomotionEnabled = false,
MobileCastMovementMult = -1f,
Cooldown = 0f,
StaminaCost = 0f,
ManaCost = 0f
};
((ContentTemplate)val).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
return (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
}
}
public class CelestialSurgeSpell
{
public const float DAMAGE = 40f;
public const float RANGE = 35f;
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Expected O, but got Unknown
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Expected O, but got Unknown
SL_Skill val = new SL_Skill();
((SL_Item)val).Name = "Celestial Surge";
((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
((SL_Item)val).Target_ItemID = 8200180;
((SL_Item)val).New_ItemID = 2502013;
((SL_Item)val).Description = "WIP";
((SL_Item)val).CastType = (SpellCastType)58;
((SL_Item)val).CastModifier = (SpellCastModifier)0;
((SL_Item)val).CastLocomotionEnabled = false;
((SL_Item)val).MobileCastMovementMult = -1f;
((SL_Item)val).CastSheatheRequired = 2;
SL_EffectTransform[] array = new SL_EffectTransform[2];
SL_EffectTransform val2 = new SL_EffectTransform();
val2.TransformName = "ActivationEffects";
val2.Effects = (SL_Effect[])(object)new SL_Effect[0];
array[0] = val2;
val2 = new SL_EffectTransform();
val2.TransformName = "Effects";
val2.Effects = (SL_Effect[])(object)new SL_Effect[0];
array[1] = val2;
((SL_Item)val).EffectTransforms = (SL_EffectTransform[])(object)array;
val.Cooldown = 30f;
val.ManaCost = 600f;
SL_Skill val3 = val;
((ContentTemplate)val3).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
Skill val4 = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
Transform val5 = ((Component)val4).transform.Find("Effects");
((Component)val5).gameObject.AddComponent<CelestialSurge>();
Object.Destroy((Object)(object)((Component)val4).gameObject.GetComponentInChildren<AddStatusEffect>());
return val4;
}
}
public class BlessedDeterminationSpell
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static DescriptionModifier <>9__5_0;
internal void <Init>b__5_0(Item item, ref string description)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
if (item.ItemID == 2502002)
{
if (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(CharacterManager.Instance.GetFirstLocalCharacter().UID)] == FactionSelector.CrusaderFaction.BlueChamber)
{
description = ((ModTheme.BlessedDeterminationRequiredBoonName != null) ? ("While under the effect of the " + ModTheme.BlessedDeterminationRequiredBoonName + " boon, all") : "All") + " spent mana is regained as stamina, and spending stamina builds up an Ancestral Memory, which reduces the mana cost of the next spell you cast.";
}
else if (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(CharacterManager.Instance.GetFirstLocalCharacter().UID)] == FactionSelector.CrusaderFaction.HolyMission)
{
description = ((ModTheme.BlessedDeterminationRequiredBoonName != null) ? ("While under the effect of the " + ModTheme.BlessedDeterminationRequiredBoonName + " boon, all") : "All") + " spent mana is regained as stamina, and spending stamina builds up an " + ModTheme.BurstOfDivinityEffectName + ", which reduces the mana cost of the next spell you cast.";
}
}
}
}
public const float BLESSED_DETERMINATION_EFFICIENCY = 0.3f;
public const float BLESSED_DETERMINATION_STAMINA_REGEN = 1f;
public const float FREECAST_PROVIDED_MANA = 7f;
public const float FREECAST_LIFESPAN = 30f;
public static float GetFreeCastBuildup(Character character)
{
bool? obj;
if (character == null)
{
obj = null;
}
else
{
StatusEffectManager statusEffectMngr = character.StatusEffectMngr;
obj = ((statusEffectMngr != null) ? new bool?(statusEffectMngr.HasStatusEffect(Crusader.Instance.surgeOfDivinityInstance.IdentifierName)) : null);
}
bool? flag = obj;
float num = 1f + (flag.GetValueOrDefault() ? 1f : 0f);
bool? obj2;
if (character == null)
{
obj2 = null;
}
else
{
StatusEffectManager statusEffectMngr2 = character.StatusEffectMngr;
obj2 = ((statusEffectMngr2 != null) ? new bool?(statusEffectMngr2.HasStatusEffect(Crusader.Instance.surgeOfMemoriesInstance.IdentifierName)) : null);
}
flag = obj2;
float num2 = num + (flag.GetValueOrDefault() ? 1f : 0f);
bool? obj3;
if (character == null)
{
obj3 = null;
}
else
{
StatusEffectManager statusEffectMngr3 = character.StatusEffectMngr;
obj3 = ((statusEffectMngr3 != null) ? new bool?(statusEffectMngr3.HasStatusEffect(Crusader.Instance.consecrationAllyInstance.IdentifierName)) : null);
}
flag = obj3;
return (num2 + (flag.GetValueOrDefault() ? 0.5f : 0f)) * 100f * 0.3f / 7f;
}
public static Skill Init()
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Expected O, but got Unknown
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Expected O, but got Unknown
DescriptionModifier onDescriptionModified = TinyHelper.OnDescriptionModified;
object obj = <>c.<>9__5_0;
if (obj == null)
{
DescriptionModifier val = delegate(Item item, ref string description)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
if (item.ItemID == 2502002)
{
if (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(CharacterManager.Instance.GetFirstLocalCharacter().UID)] == FactionSelector.CrusaderFaction.BlueChamber)
{
description = ((ModTheme.BlessedDeterminationRequiredBoonName != null) ? ("While under the effect of the " + ModTheme.BlessedDeterminationRequiredBoonName + " boon, all") : "All") + " spent mana is regained as stamina, and spending stamina builds up an Ancestral Memory, which reduces the mana cost of the next spell you cast.";
}
else if (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(CharacterManager.Instance.GetFirstLocalCharacter().UID)] == FactionSelector.CrusaderFaction.HolyMission)
{
description = ((ModTheme.BlessedDeterminationRequiredBoonName != null) ? ("While under the effect of the " + ModTheme.BlessedDeterminationRequiredBoonName + " boon, all") : "All") + " spent mana is regained as stamina, and spending stamina builds up an " + ModTheme.BurstOfDivinityEffectName + ", which reduces the mana cost of the next spell you cast.";
}
}
};
<>c.<>9__5_0 = val;
obj = (object)val;
}
TinyHelper.OnDescriptionModified = (DescriptionModifier)Delegate.Combine((Delegate?)(object)onDescriptionModified, (Delegate?)obj);
SL_Skill val2 = new SL_Skill
{
Name = ModTheme.BlessedDeterminationSpellName,
EffectBehaviour = (EditBehaviours)1,
Target_ItemID = 8205030,
New_ItemID = 2502002,
SLPackName = Crusader.ModFolderName,
SubfolderName = "Blessed Determination",
Description = ((ModTheme.BlessedDeterminationRequiredBoonName != null) ? ("While under the effect of the " + ModTheme.BlessedDeterminationRequiredBoonName + " boon, all") : "All") + " spent mana is regained as stamina, and spending stamina builds up an effect that reduces the mana cost of the next spell you cast.",
IsUsable = false,
CastType = (SpellCastType)(-1),
CastModifier = (SpellCastModifier)0,
CastLocomotionEnabled = false,
MobileCastMovementMult = -1f,
Cooldown = 0f,
StaminaCost = 0f,
ManaCost = 0f
};
((ContentTemplate)val2).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val2).New_ItemID);
return (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
}
}
[HarmonyPatch(typeof(CharacterStats), "UseStamina", new Type[]
{
typeof(float),
typeof(float)
})]
public class CharacterStats_UseStamina
{
[HarmonyPostfix]
public static void Postfix(CharacterStats __instance, float _staminaConsumed, Character ___m_character)
{
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
if (___m_character == null)
{
return;
}
if (((CharacterKnowledge)___m_character.Inventory.SkillKnowledge).IsItemLearned(2502002) && (ModTheme.BlessedDeterminationRequiredBoonName == null || ___m_character.StatusEffectMngr.HasStatusEffect(ModTheme.BlessedDeterminationRequiredBoonName) || ___m_character.StatusEffectMngr.HasStatusEffect(ModTheme.BlessedDeterminationRequiredBoonName + " Amplified")))
{
if (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(___m_character.UID)] == FactionSelector.CrusaderFaction.BlueChamber)
{
___m_character.StatusEffectMngr.AddStatusEffectBuildUp(Crusader.Instance.ancestralMemoryInstance, _staminaConsumed * BlessedDeterminationSpell.GetFreeCastBuildup(___m_character), ___m_character);
}
else
{
___m_character.StatusEffectMngr.AddStatusEffectBuildUp(Crusader.Instance.burstOfDivinityInstance, _staminaConsumed * BlessedDeterminationSpell.GetFreeCastBuildup(___m_character), ___m_character);
}
}
}
}
[HarmonyPatch(typeof(CharacterStats), "UseMana")]
public class CharacterStats_UseMana
{
[HarmonyPrefix]
public static void Prefix(ref float _amount, out float __state)
{
__state = _amount;
}
[HarmonyPostfix]
public static void Postfix(CharacterStats __instance, ref float _amount, ref float __state)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
__instance.GetFinalManaConsumption((Tag[])(object)new Tag[1] { Crusader.Instance.AfterUseManaTagInstance }, __state);
}
}
[HarmonyPatch(typeof(CharacterStats), "GetFinalManaConsumption")]
public class CharacterStats_GetFinalManaConsumption
{
[HarmonyPostfix]
public static void Postfix(CharacterStats __instance, Tag[] _tags, float _manaConsumption, ref float __result)
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
object field = At.GetField<CharacterStats>(__instance, "m_character");
Character val = (Character)((field is Character) ? field : null);
if (val == null || !((Object)(object)val.StatusEffectMngr != (Object)null))
{
return;
}
bool flag = UnityEngineExtensions.Contains<Tag>(_tags, Crusader.Instance.AfterUseManaTagInstance);
if (flag && ((CharacterKnowledge)val.Inventory.SkillKnowledge).IsItemLearned(2502002) && (ModTheme.BlessedDeterminationRequiredBoonName == null || val.StatusEffectMngr.HasStatusEffect(ModTheme.BlessedDeterminationRequiredBoonName) || val.StatusEffectMngr.HasStatusEffect(ModTheme.BlessedDeterminationRequiredBoonName + " Amplified")))
{
val.Stats.AffectStamina(__result * 1f);
}
Tuple<string, int>[] array = new Tuple<string, int>[2]
{
new Tuple<string, int>(Crusader.Instance.burstOfDivinityInstance.IdentifierName, ((EffectPreset)Crusader.Instance.holyMissionInfusion).PresetID),
new Tuple<string, int>(Crusader.Instance.ancestralMemoryInstance.IdentifierName, ((EffectPreset)Crusader.Instance.blueChamberInfusion).PresetID)
};
foreach (Tuple<string, int> tuple in array)
{
StatusEffect statusEffectOfName = val.StatusEffectMngr.GetStatusEffectOfName(tuple.Item1);
if (statusEffectOfName == null)
{
continue;
}
int stackCount = statusEffectOfName.StackCount;
if (stackCount <= 0)
{
continue;
}
if (flag && SkillRequirements.SafeHasSkillKnowledge(val, 2502026))
{
Weapon currentWeapon = val.CurrentWeapon;
if (currentWeapon != null)
{
((MonoBehaviour)TinyHelperRPCManager.Instance).photonView.RPC("ApplyAddImbueEffectRPC", (PhotonTargets)0, new object[3]
{
((Item)currentWeapon).UID,
tuple.Item2,
10f
});
}
}
stackCount = Math.Min(Convert.ToInt32(Math.Ceiling(__result / 7f)), stackCount);
__result = Mathf.Max(0f, __result - (float)stackCount * 7f);
if (flag)
{
for (int j = 0; j < stackCount; j++)
{
statusEffectOfName.RemoveOldestStack();
}
}
break;
}
}
}
public class AuraOfSmitingSpell
{
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Expected O, but got Unknown
SL_Skill val = new SL_Skill();
((SL_Item)val).Name = "Aura of Smiting";
((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
((SL_Item)val).Target_ItemID = 8200180;
((SL_Item)val).New_ItemID = 2502027;
((SL_Item)val).SLPackName = Crusader.ModFolderName;
((SL_Item)val).SubfolderName = "Aura of Smiting";
Types damageType = HolyDamageManager.GetDamageType();
((SL_Item)val).Description = "Grants you and your nearby allies bonus " + ((object)(Types)(ref damageType)).ToString() + " damage on your weapon attacks.\n\nCasting this spell toggles the effect, which cost 0.3 mana per second while active.";
((SL_Item)val).CastType = (SpellCastType)1;
((SL_Item)val).CastModifier = (SpellCastModifier)1;
((SL_Item)val).CastLocomotionEnabled = true;
((SL_Item)val).MobileCastMovementMult = 0.8f;
((SL_Item)val).CastSheatheRequired = 1;
SL_EffectTransform[] array = new SL_EffectTransform[1];
SL_EffectTransform val2 = new SL_EffectTransform();
val2.TransformName = "Effects";
val2.Effects = (SL_Effect[])(object)new SL_Effect[0];
array[0] = val2;
((SL_Item)val).EffectTransforms = (SL_EffectTransform[])(object)array;
val.Cooldown = 0f;
val.StaminaCost = 0f;
val.HealthCost = 0f;
val.ManaCost = 0f;
SL_Skill val3 = val;
((ContentTemplate)val3).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
Skill val4 = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
Object.Destroy((Object)(object)((Component)val4).gameObject.GetComponentInChildren<AddStatusEffect>());
Transform val5 = ((Component)val4).transform.Find("Effects");
((Component)val5).gameObject.AddComponent<ToggleEffect>().StatusEffectInstance = Crusader.Instance.auraOfSmitingEffectInstance;
return val4;
}
}
public class InfuseBurstOfLight
{
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Expected O, but got Unknown
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Expected O, but got Unknown
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
//IL_01db: Unknown result type (might be due to invalid IL or missing references)
//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
SL_AttackSkill val = new SL_AttackSkill();
((SL_Item)val).Name = ModTheme.InfusionSpellName;
((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
((SL_Item)val).Target_ItemID = 8200100;
((SL_Item)val).New_ItemID = 2502001;
((SL_Item)val).SLPackName = Crusader.ModFolderName;
((SL_Item)val).SubfolderName = "Infuse Burst of Light";
((SL_Item)val).Description = "Temporarly infuse your weapon to bring " + ModTheme.InfusionSpellDescriptionType + " upon your enemies.";
((SL_Item)val).IsUsable = true;
((SL_Item)val).CastType = (SpellCastType)52;
((SL_Item)val).CastModifier = (SpellCastModifier)0;
((SL_Item)val).CastLocomotionEnabled = false;
((SL_Item)val).MobileCastMovementMult = -1f;
WeaponType[] array = new WeaponType[10];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
val.RequiredWeaponTypes = (WeaponType[])(object)array;
SL_EffectTransform[] array2 = new SL_EffectTransform[1];
SL_EffectTransform val2 = new SL_EffectTransform();
val2.TransformName = "Effects";
val2.Effects = (SL_Effect[])(object)new SL_Effect[1] { (SL_Effect)new SL_ImbueWeapon
{
Lifespan = 60f,
ImbueEffect_Preset_ID = 270,
Imbue_Slot = (WeaponSlot)0
} };
array2[0] = val2;
((SL_Item)val).EffectTransforms = (SL_EffectTransform[])(object)array2;
((SL_Skill)val).Cooldown = 100f;
((SL_Skill)val).StaminaCost = 0f;
((SL_Skill)val).HealthCost = 0f;
((SL_Skill)val).ManaCost = 7f;
SL_AttackSkill val3 = val;
((ContentTemplate)val3).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
Skill val4 = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
Object.Destroy((Object)(object)((Component)val4).gameObject.GetComponentInChildren<HasStatusEffectEffectCondition>());
PlaySoundEffect[] componentsInChildren = ((Component)val4).gameObject.GetComponentsInChildren<PlaySoundEffect>();
foreach (PlaySoundEffect val5 in componentsInChildren)
{
Object.Destroy((Object)(object)val5);
}
((SL_Effect)new SL_PlaySoundEffect
{
Follow = true,
OverrideCategory = (EffectCategories)0,
Delay = 0f,
MinPitch = 1f,
MaxPitch = 1f,
SyncType = (SyncTypes)0,
Sounds = new List<Sounds> { (Sounds)13221 }
}).ApplyToTransform(((Component)val4).transform.Find("ActivationEffects"));
return val4;
}
}
public class RestorationSpell
{
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Expected O, but got Unknown
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Expected O, but got Unknown
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Expected O, but got Unknown
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Expected O, but got Unknown
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Expected O, but got Unknown
SL_Skill val = new SL_Skill();
((SL_Item)val).Name = "Restoration";
((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
((SL_Item)val).Target_ItemID = 8200180;
((SL_Item)val).New_ItemID = 2502003;
((SL_Item)val).SLPackName = Crusader.ModFolderName;
((SL_Item)val).SubfolderName = "Restoration";
((SL_Item)val).Description = "Cures you from all hexes, bleeding and slowing effects.";
((SL_Item)val).CastType = (SpellCastType)58;
((SL_Item)val).CastModifier = (SpellCastModifier)0;
((SL_Item)val).CastLocomotionEnabled = false;
((SL_Item)val).MobileCastMovementMult = 0f;
SL_EffectTransform[] array = new SL_EffectTransform[1];
SL_EffectTransform val2 = new SL_EffectTransform();
val2.TransformName = "Effects";
val2.Effects = (SL_Effect[])(object)new SL_Effect[4]
{
(SL_Effect)new SL_RemoveStatusEffect
{
Status_Tag = "Hex",
CleanseType = (RemoveTypes)2
},
(SL_Effect)new SL_RemoveStatusEffect
{
Status_Name = "Slow Down",
CleanseType = (RemoveTypes)0
},
(SL_Effect)new SL_RemoveStatusEffect
{
Status_Name = "Cripple",
CleanseType = (RemoveTypes)0
},
(SL_Effect)new SL_RemoveStatusEffect
{
Status_Tag = "Bleeding",
CleanseType = (RemoveTypes)2
}
};
array[0] = val2;
((SL_Item)val).EffectTransforms = (SL_EffectTransform[])(object)array;
val.Cooldown = 30f;
val.StaminaCost = 0f;
val.HealthCost = 0f;
val.ManaCost = 14f;
SL_Skill val3 = val;
((ContentTemplate)val3).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
return (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
}
}
public class CureWoundsSpell
{
[HarmonyPatch(typeof(Character), "SpellCastAnim")]
public class Character_SpellCastAnim
{
[HarmonyPrefix]
public static void Prefix(Character __instance, ref SpellCastType _type, ref SpellCastModifier _modifier, Animator ___m_animator, int _sheatheRequired = 1)
{
}
}
public const string ItemName = "Cure Wounds";
public static void Prepare()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Expected O, but got Unknown
SL_Skill val = new SL_Skill();
((SL_Item)val).Name = "Cure Wounds";
((SL_Item)val).EffectBehaviour = (EditBehaviours)2;
((SL_Item)val).Target_ItemID = 8200040;
((SL_Item)val).New_ItemID = 2502000;
((SL_Item)val).SLPackName = Crusader.ModFolderName;
((SL_Item)val).SubfolderName = "Cure Wounds";
((SL_Item)val).Description = "A swift spell that restores some health.";
((SL_Item)val).CastType = (SpellCastType)1;
((SL_Item)val).CastModifier = (SpellCastModifier)1;
((SL_Item)val).CastLocomotionEnabled = true;
((SL_Item)val).MobileCastMovementMult = 0.7f;
SL_EffectTransform[] array = new SL_EffectTransform[1];
SL_EffectTransform val2 = new SL_EffectTransform();
val2.TransformName = "Effects";
val2.Effects = (SL_Effect[])(object)new SL_Effect[0];
array[0] = val2;
((SL_Item)val).EffectTransforms = (SL_EffectTransform[])(object)array;
val.Cooldown = 2f;
val.StaminaCost = 0f;
val.HealthCost = 0f;
val.ManaCost = 14f;
SL_Skill val3 = val;
((ContentTemplate)val3).ApplyTemplate();
}
public static Skill Init()
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
Prepare();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(2502000);
Skill val = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
((SL_Effect)new SL_PlaySoundEffect
{
Follow = true,
OverrideCategory = (EffectCategories)0,
Delay = 0f,
MinPitch = 1f,
MaxPitch = 1f,
SyncType = (SyncTypes)0,
Sounds = new List<Sounds> { (Sounds)12903 }
}).ApplyToTransform(TinyGameObjectManager.GetOrMake(((Component)val).transform, "ActivationEffects", true, true));
FactionSelector.SetCasterParticleForFaction(val, 0f);
Transform transform = TinyGameObjectManager.MakeFreshObject("Effects", true, true, ((Component)val).transform).transform;
HealingAoE healingAoE = ((Component)transform).gameObject.AddComponent<HealingAoE>();
healingAoE.Range = 30f;
setHealing(healingAoE, 2f);
StatusEffectCondition val2 = ((Component)transform).gameObject.AddComponent<StatusEffectCondition>();
val2.StatusEffectPrefab = Crusader.Instance.healingSurgeInstance;
transform = TinyGameObjectManager.MakeFreshObject("Effects", true, true, ((Component)val).transform).transform;
HealingAoE healingAoE2 = ((Component)transform).gameObject.AddComponent<HealingAoE>();
healingAoE2.Range = 15f;
setHealing(healingAoE2);
val2 = ((Component)transform).gameObject.AddComponent<StatusEffectCondition>();
val2.Inverse = true;
val2.StatusEffectPrefab = Crusader.Instance.healingSurgeInstance;
return val;
}
private static void setHealing(Healing healing, float multiplier = 1f)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
healing.RestoredHealth = 10f * multiplier;
healing.AmplificationType = HolyDamageManager.GetDamageType();
healing.CanRevive = false;
}
}
public class Judgement
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static DescriptionModifier <>9__1_0;
internal void <Init>b__1_0(Item item, ref string description)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
if (item.ItemID == 2502026)
{
if (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(CharacterManager.Instance.GetFirstLocalCharacter().UID)] == FactionSelector.CrusaderFaction.BlueChamber)
{
description = "When you expend Ancestral Memory to cast a spell, your primary weapon becomes infused with " + ModTheme.BlueChamberImbueName + " for " + 10f + " seconds.";
}
else if (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(CharacterManager.Instance.GetFirstLocalCharacter().UID)] == FactionSelector.CrusaderFaction.HolyMission)
{
description = "When you expend " + ModTheme.BurstOfDivinityEffectName + " to cast a spell, your primary weapon becomes infused with " + ModTheme.HolyMissionImbueName + " for " + 10f + " seconds.";
}
}
}
}
public const float ImbueDuration = 10f;
public static Skill Init()
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected O, but got Unknown
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Expected O, but got Unknown
DescriptionModifier onDescriptionModified = TinyHelper.OnDescriptionModified;
object obj = <>c.<>9__1_0;
if (obj == null)
{
DescriptionModifier val = delegate(Item item, ref string description)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
if (item.ItemID == 2502026)
{
if (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(CharacterManager.Instance.GetFirstLocalCharacter().UID)] == FactionSelector.CrusaderFaction.BlueChamber)
{
description = "When you expend Ancestral Memory to cast a spell, your primary weapon becomes infused with " + ModTheme.BlueChamberImbueName + " for " + 10f + " seconds.";
}
else if (Crusader.Instance.FactionSelectorInstance.PlayerFactions[UID.op_Implicit(CharacterManager.Instance.GetFirstLocalCharacter().UID)] == FactionSelector.CrusaderFaction.HolyMission)
{
description = "When you expend " + ModTheme.BurstOfDivinityEffectName + " to cast a spell, your primary weapon becomes infused with " + ModTheme.HolyMissionImbueName + " for " + 10f + " seconds.";
}
}
};
<>c.<>9__1_0 = val;
obj = (object)val;
}
TinyHelper.OnDescriptionModified = (DescriptionModifier)Delegate.Combine((Delegate?)(object)onDescriptionModified, (Delegate?)obj);
SL_Skill val2 = new SL_Skill();
((SL_Item)val2).Name = ModTheme.DivineFavorSpellName;
((SL_Item)val2).EffectBehaviour = (EditBehaviours)1;
((SL_Item)val2).Target_ItemID = 8205030;
((SL_Item)val2).New_ItemID = 2502026;
((SL_Item)val2).SLPackName = Crusader.ModFolderName;
((SL_Item)val2).SubfolderName = "Judgement";
((SL_Item)val2).Description = "When " + ModTheme.BlessedDeterminationSpellName + " or " + ModTheme.MeditationSkillName + " provides mana to cast a spell, your primary weapon becomes infused with a powerful infusion for " + 10f + " seconds.";
((SL_Item)val2).IsUsable = false;
((SL_Item)val2).CastType = (SpellCastType)(-1);
((SL_Item)val2).CastModifier = (SpellCastModifier)0;
((SL_Item)val2).CastLocomotionEnabled = false;
((SL_Item)val2).MobileCastMovementMult = -1f;
val2.Cooldown = 0f;
val2.StaminaCost = 0f;
val2.ManaCost = 0f;
SL_Skill val3 = val2;
((ContentTemplate)val3).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
Skill val4 = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
Object.Destroy((Object)(object)((Component)val4).gameObject.GetComponentInChildren<HasStatusEffectEffectCondition>());
return val4;
}
}
public class RetributiveSmiteSpell
{
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_0155: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0165: Expected O, but got Unknown
SL_AttackSkill val = new SL_AttackSkill();
((SL_Item)val).Name = "Retributive Smite";
((SL_Item)val).EffectBehaviour = (EditBehaviours)0;
((SL_Item)val).Target_ItemID = 8100260;
((SL_Item)val).New_ItemID = 2502006;
((SL_Item)val).SLPackName = Crusader.ModFolderName;
((SL_Item)val).SubfolderName = "Retributive Smite";
((SL_Item)val).Description = "Completely block a physical attack, striking the attacker and dealing additional lightning damage.";
((SL_Item)val).CastType = (SpellCastType)501;
((SL_Item)val).CastModifier = (SpellCastModifier)2;
((SL_Item)val).CastLocomotionEnabled = false;
((SL_Item)val).MobileCastMovementMult = -1f;
((SL_Item)val).CastSheatheRequired = 2;
WeaponType[] array = new WeaponType[10];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
val.RequiredWeaponTypes = (WeaponType[])(object)array;
((SL_Skill)val).Cooldown = 20f;
((SL_Skill)val).StaminaCost = 7f;
((SL_Skill)val).ManaCost = 14f;
((SL_Skill)val).HealthCost = 0f;
SL_AttackSkill val2 = val;
((ContentTemplate)val2).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val2).New_ItemID);
Skill val3 = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
WeaponDamage componentInChildren = ((Component)val3).gameObject.GetComponentInChildren<WeaponDamage>();
componentInChildren.WeaponDamageMult = 1.7f;
componentInChildren.WeaponKnockbackMult = 1.5f;
componentInChildren.WeaponDamageMultKDown = -1f;
componentInChildren.WeaponDurabilityLossPercent = 0f;
componentInChildren.WeaponDurabilityLoss = 1f;
componentInChildren.OverrideDType = (Types)9;
((PunctualDamage)componentInChildren).Damages = (DamageType[])(object)new DamageType[1]
{
new DamageType(HolyDamageManager.GetDamageType(), 20f)
};
return val3;
}
}
public class WrathfulSmiteSpell
{
public static Skill Init()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
SL_AttackSkill val = new SL_AttackSkill();
((SL_Item)val).Name = "Wrathful Smite";
((SL_Item)val).EffectBehaviour = (EditBehaviours)2;
((SL_Item)val).Target_ItemID = 8100290;
((SL_Item)val).New_ItemID = 2502008;
((SL_Item)val).SLPackName = Crusader.ModFolderName;
((SL_Item)val).SubfolderName = "Wrathful Smite";
((SL_Item)val).Description = "A leaping attack that deals more damage to wounded enemies, and instantly becomes available for another use if it kills its target.";
((SL_Item)val).CastType = (SpellCastType)500;
((SL_Item)val).CastModifier = (SpellCastModifier)2;
((SL_Item)val).CastLocomotionEnabled = false;
((SL_Item)val).MobileCastMovementMult = -1f;
((SL_Item)val).CastSheatheRequired = 2;
WeaponType[] array = new WeaponType[10];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
val.RequiredWeaponTypes = (WeaponType[])(object)array;
((SL_Skill)val).Cooldown = 100f;
((SL_Skill)val).StaminaCost = 10f;
((SL_Skill)val).ManaCost = 7f;
((SL_Skill)val).HealthCost = 0f;
SL_AttackSkill val2 = val;
((ContentTemplate)val2).ApplyTemplate();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val2).New_ItemID);
Skill val3 = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
((SL_Effect)new SL_PlaySoundEffect
{
Follow = true,
OverrideCategory = (EffectCategories)0,
Delay = 0.22f,
MinPitch = 1f,
MaxPitch = 1f,
SyncType = (SyncTypes)0,
Sounds = new List<Sounds> { (Sounds)13221 }
}).ApplyToTransform(TinyGameObjectManager.GetOrMake(((Component)val3).transform, "ActivationEffects", true, true));
FactionSelector.SetWeaponTrailForFaction(val3);
((Effect)((Component)TinyGameObjectManager.MakeFreshTransform(((Component)val3).transform, "ActivationEffects", true, true)).gameObject.AddComponent<EnableHitDetection>()).Delay = 0.5f;
Transform val4 = TinyGameObjectManager.MakeFreshTransform(((Component)val3).transform, "HitEffects", true, true);
CooldownChangeWeaponDamageTargetHealth val5 = ((Component)val4).gameObject.AddComponent<CooldownChangeWeaponDamageTargetHealth>();
val5.ExecuteSetCooldown = 0f;
setDamage((WeaponDamageTargetHealth)(object)val5);
return val3;
}
private static void setDamage(WeaponDamageTargetHealth damage)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
damage.MultiplierHighLowHP
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using TinyHelper;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace CustomGrip;
[BepInPlugin("com.ehaugw.customgrip", "CustomGrip", "1.0.0")]
public class CustomGrip : BaseUnityPlugin
{
public const string GUID = "com.ehaugw.customgrip";
public const string VERSION = "1.0.0";
public const string NAME = "CustomGrip";
internal void Awake()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
Harmony val = new Harmony("com.ehaugw.customgrip");
val.PatchAll();
}
public static void ChangeGrip(Character character, WeaponType toMoveset)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected I4, but got Unknown
if (character != null)
{
Animator animator = character.Animator;
if (animator != null)
{
animator.SetInteger("WeaponType", (int)toMoveset);
}
}
}
public static void ResetGrip(Character character)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Expected I4, but got Unknown
Weapon val = ((character != null) ? character.CurrentWeapon : null);
if (val != null && character != null)
{
Animator animator = character.Animator;
if (animator != null)
{
animator.SetInteger("WeaponType", (int)val.Type);
}
}
}
}
[HarmonyPatch(typeof(Character), "HitEnded")]
public class Character_HitEnded
{
[HarmonyPrefix]
public static void Prefix(Character __instance, ref int _attackID)
{
if (_attackID != -2 && !__instance.IsCasting)
{
CustomGrip.ResetGrip(__instance);
}
}
}
[HarmonyPatch(typeof(Character), "StopLocomotionAction")]
public class Character_StopLocomotionAction
{
[HarmonyPrefix]
public static void Prefix(Character __instance)
{
CustomGrip.ResetGrip(__instance);
}
}
public class WeaponSkillAnimationSelector : Effect
{
public WeaponType WeaponType;
protected override void ActivateLocally(Character character, object[] _infos)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
CustomGrip.ChangeGrip(character, WeaponType);
}
public static void SetCustomAttackAnimation(Skill skill, WeaponType weaponType)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
Transform transform = TinyGameObjectManager.MakeFreshObject("ActivationEffects", true, true, ((Component)skill).transform).transform;
((Component)transform).gameObject.AddComponent<WeaponSkillAnimationSelector>().WeaponType = weaponType;
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using TinyHelper;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace EffectSourceConditions;
public class DynamicSkillStat : MonoBehaviour
{
public delegate void ManaCostModifier(Skill skill, float original, ref float result);
public float ManaCost = 0f;
public float StaminaCost = 0f;
public float HealthCost = 0f;
public float Cooldown = 2f;
public float DurabilityCost = 0f;
public SpellCastType CastType = (SpellCastType)(-1);
public SpellCastModifier CastModifier = (SpellCastModifier)(-1);
public float MobileCastMovementMult = -1f;
public int CastSheatheRequired = 0;
public bool CastLocomotionEnabled = false;
public static ManaCostModifier ManaCostModifiers = delegate
{
};
public void SetSkillStats(Skill skill)
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
float result = ManaCost;
ManaCostModifiers(skill, ManaCost, ref result);
skill.ManaCost = Mathf.Round(result);
skill.StaminaCost = StaminaCost;
skill.HealthCost = HealthCost;
skill.DurabilityCost = DurabilityCost;
((Item)skill).CastSheathRequired = CastSheatheRequired;
((Item)skill).MobileCastMovementMult = MobileCastMovementMult;
((Item)skill).CastModifier = CastModifier;
((Item)skill).CastLocomotionEnabled = CastLocomotionEnabled;
if (((Item)skill).ActivateEffectAnimType != CastType)
{
At.SetValue<SpellCastType>(CastType, typeof(Item), (object)skill, "m_activateEffectAnimType");
}
if (!skill.InCooldown())
{
skill.Cooldown = Cooldown;
}
}
public static void UnsetSkillStats(Skill skill)
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Invalid comparison between Unknown and I4
skill.ManaCost = 0f;
skill.StaminaCost = 0f;
skill.HealthCost = 0f;
skill.DurabilityCost = 0f;
((Item)skill).CastSheathRequired = 0;
((Item)skill).MobileCastMovementMult = -1f;
((Item)skill).CastModifier = (SpellCastModifier)0;
((Item)skill).CastLocomotionEnabled = false;
if ((int)((Item)skill).ActivateEffectAnimType != -1)
{
At.SetValue<SpellCastType>((SpellCastType)(-1), typeof(Item), (object)skill, "m_activateEffectAnimType");
}
if (!skill.InCooldown())
{
skill.Cooldown = 0f;
}
}
public static void TryUpdateSkillStats(Skill skill)
{
DynamicSkillStat[] componentsInChildren = ((Component)skill).gameObject.GetComponentsInChildren<DynamicSkillStat>();
if (componentsInChildren == null || componentsInChildren.Length == 0)
{
return;
}
bool flag = false;
DynamicSkillStat[] array = componentsInChildren;
foreach (DynamicSkillStat dynamicSkillStat in array)
{
Character ownerCharacter = ((EffectSynchronizer)skill).OwnerCharacter;
if (ownerCharacter == null)
{
continue;
}
SourceCondition[] components = ((Component)dynamicSkillStat).gameObject.GetComponents<SourceCondition>();
if (components == null)
{
continue;
}
bool flag2 = true;
SourceCondition[] array2 = components;
foreach (SourceCondition sourceCondition in array2)
{
if (!sourceCondition.CharacterHasRequirement(ownerCharacter))
{
flag2 = false;
}
}
if (flag2 && components.Length != 0)
{
dynamicSkillStat.SetSkillStats(skill);
flag = true;
}
}
if (!flag)
{
UnsetSkillStats(skill);
}
}
}
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class Item_Description
{
[HarmonyPrefix]
public static void Prefix(Item __instance)
{
Skill val = (Skill)(object)((__instance is Skill) ? __instance : null);
if (val != null)
{
DynamicSkillStat.TryUpdateSkillStats(val);
}
}
}
[HarmonyPatch(typeof(Skill), "HasBaseRequirements")]
public class Skill_HasBaseRequirements
{
[HarmonyPrefix]
public static void Prefix(Skill __instance)
{
DynamicSkillStat.TryUpdateSkillStats(__instance);
}
}
[BepInPlugin("com.ehaugw.effectsourceconditions", "Effect Source Conditions", "2.8.0")]
public class EffectSourceConditions : BaseUnityPlugin
{
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class WeaponDamage_BuildDamage
{
[HarmonyPrefix]
public static bool Prefix(Effect __instance, Character _targetCharacter, ref DamageList _list, ref float _knockback)
{
return HasSourceConditions(__instance);
}
}
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class PunctualDamage_BuildDamage
{
[HarmonyPrefix]
public static bool Prefix(Effect __instance, Character _targetCharacter, ref DamageList _list, ref float _knockback)
{
return HasSourceConditions(__instance);
}
}
[HarmonyPatch(typeof(Effect), "TryTriggerConditions", new Type[]
{
typeof(Character),
typeof(bool)
})]
public class Effect_TryTriggerConditions
{
[HarmonyPrefix]
public static bool Prefix(Effect __instance, Character _affectedCharacter, bool _skipPriority)
{
return HasSourceConditions(__instance);
}
}
public const string GUID = "com.ehaugw.effectsourceconditions";
public const string VERSION = "2.8.0";
public const string NAME = "Effect Source Conditions";
public const string EFFECTS_CONTAINER_ACTIVATION = "ActivationEffects";
public const string EFFECTS_CONTAINER = "Effects";
public const string SOURCE_CONDITION_CONTAINER = "SourceConditions";
public const string EFFECTS_MANUAL_CONTAINER = "ManualContainer";
internal void Awake()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
Harmony val = new Harmony("com.ehaugw.effectsourceconditions");
val.PatchAll();
}
public static bool HasSourceConditions(Effect __instance)
{
object obj;
if (__instance == null)
{
obj = null;
}
else
{
Transform transform = ((Component)__instance).transform;
if (transform == null)
{
obj = null;
}
else
{
Transform obj2 = transform.Find("SourceConditions");
if (obj2 == null)
{
obj = null;
}
else
{
GameObject gameObject = ((Component)obj2).gameObject;
obj = ((gameObject != null) ? gameObject.GetComponents<SourceCondition>() : null);
}
}
}
if (obj == null)
{
obj = new SourceCondition[0];
}
SourceCondition[] array = (SourceCondition[])obj;
foreach (SourceCondition sourceCondition in array)
{
if (!sourceCondition.CharacterHasRequirement(__instance.SourceCharacter))
{
return false;
}
}
return true;
}
}
public class EffectSourceConditionChecker : EffectCondition
{
protected override bool CheckIsValid(Character _affectedCharacter)
{
Transform transform = ((Component)this).transform;
object obj;
if (transform == null)
{
obj = null;
}
else
{
Transform parent = transform.parent;
if (parent == null)
{
obj = null;
}
else
{
Transform parent2 = parent.parent;
obj = ((parent2 != null) ? UnityEngineExtensions.FindAllInAllChildren(parent2, "ActivationEffects") : null);
}
}
Transform[] array = (Transform[])obj;
if (array != null)
{
Transform[] array2 = array;
foreach (Transform val in array2)
{
bool flag = true;
SourceCondition[] componentsInChildren = ((Component)val).GetComponentsInChildren<SourceCondition>();
SourceCondition[] array3 = componentsInChildren;
foreach (SourceCondition sourceCondition in array3)
{
if (!sourceCondition.CharacterHasRequirement(_affectedCharacter))
{
flag = false;
}
}
if (flag && componentsInChildren.Count() > 0)
{
return !base.Invert;
}
}
}
return base.Invert;
}
public static ActivationCondition AddToSkill(Skill skill)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
Transform orMake = TinyGameObjectManager.GetOrMake(((Component)skill).transform, "AdditionalActivationConditions", true, true);
GameObject gameObject = ((Component)TinyGameObjectManager.GetOrMake(orMake, "EffectSourceConditionChecker", true, true)).gameObject;
ActivationCondition val = new ActivationCondition();
EffectSourceConditionChecker condition = gameObject.AddComponent<EffectSourceConditionChecker>();
val.Condition = (EffectCondition)(object)condition;
At.SetValue<string>("This would have no effect.", typeof(ActivationCondition), (object)val, "m_defaultMessage");
List<ActivationCondition> list = (At.GetValue(typeof(Skill), (object)skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
list.Add(val);
At.SetValue<ActivationCondition[]>(list.ToArray(), typeof(Skill), (object)skill, "m_additionalConditions");
return val;
}
}
public abstract class SourceCondition : MonoBehaviour
{
public abstract bool CharacterHasRequirement(Character character);
}
public class SourceConditionItemInInventory : SourceCondition
{
public int RequiredItemID;
public int Amount = 1;
public bool Inverted = false;
public override bool CharacterHasRequirement(Character character)
{
int result;
if (RequiredItemID != 0)
{
int? obj;
if (character == null)
{
obj = null;
}
else
{
CharacterInventory inventory = character.Inventory;
obj = ((inventory != null) ? new int?(inventory.ItemCount(RequiredItemID)) : null);
}
int? num = obj;
result = (((num.GetValueOrDefault() > 0) ^ Inverted) ? 1 : 0);
}
else
{
result = 1;
}
return (byte)result != 0;
}
}
public class SourceConditionEquipment : SourceCondition
{
public int RequiredItemID;
public int RequiredEnchantID;
public bool Inverted = false;
public override bool CharacterHasRequirement(Character character)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterInventory inventory = character.Inventory;
obj = ((inventory != null) ? inventory.Equipment : null);
}
CharacterEquipment val = (CharacterEquipment)obj;
if (val != null)
{
foreach (EquipmentSlot item in val.EquipmentSlots.Where((EquipmentSlot s) => (Object)(object)s != (Object)null && (Object)(object)s.EquippedItem != (Object)null))
{
bool flag = RequiredItemID == 0 || ((Item)item.EquippedItem).ItemID == RequiredItemID;
bool flag2 = RequiredEnchantID == 0 || item.EquippedItem.ActiveEnchantmentIDs.Contains(RequiredEnchantID);
if (flag && flag2)
{
return !Inverted;
}
}
}
return Inverted;
}
}
public class SourceConditionCorruption : SourceCondition
{
public float Corruption = 0f;
public bool Inverted = false;
public override bool CharacterHasRequirement(Character character)
{
float? obj;
if (character == null)
{
obj = null;
}
else
{
PlayerCharacterStats playerStats = character.PlayerStats;
obj = ((playerStats != null) ? new float?(playerStats.Corruption) : null);
}
float? num = obj;
return (num.GetValueOrDefault() >= Corruption) ^ Inverted;
}
}
public class SourceConditionMana : SourceCondition
{
public float ManaCost = 0f;
public bool Inverted = false;
public override bool CharacterHasRequirement(Character character)
{
return (ManaCost <= 0f || character.Mana >= character.Stats.GetFinalManaConsumption((Tag[])null, ManaCost)) ^ Inverted;
}
}
public class SourceConditionQuestLocal : SourceCondition
{
public int[] Quests;
public bool Inverted = false;
public LogicType Logic = (LogicType)0;
public override bool CharacterHasRequirement(Character character)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
return QuestRequirements.HasQuestKnowledgeLocal(character, Quests, Logic, Inverted, false);
}
}
public class SourceConditionQuest : SourceCondition
{
public int[] Quests;
public bool Inverted = false;
public LogicType Logic = (LogicType)0;
public override bool CharacterHasRequirement(Character character)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
return QuestRequirements.HasQuestKnowledge(character, Quests, Logic, Inverted, false);
}
}
public class SourceConditionStatusEffect : SourceCondition
{
public string statusEffectName;
public bool Inverted = false;
public StatusEffect RequiredStatusEffect
{
get
{
return ResourcesPrefabManager.Instance.GetStatusEffectPrefab(statusEffectName);
}
set
{
statusEffectName = value.IdentifierName;
}
}
public override bool CharacterHasRequirement(Character character)
{
int num;
if (statusEffectName != null)
{
bool? obj;
if (character == null)
{
obj = null;
}
else
{
StatusEffectManager statusEffectMngr = character.StatusEffectMngr;
obj = ((statusEffectMngr != null) ? new bool?(statusEffectMngr.HasStatusEffect(statusEffectName)) : null);
}
bool? flag = obj;
num = (flag.GetValueOrDefault() ? 1 : 0);
}
else
{
num = 0;
}
return (byte)((uint)num ^ (Inverted ? 1u : 0u)) != 0;
}
}
public class SourceConditionSkill : SourceCondition
{
public int RequiredSkillID;
public bool Inverted = false;
public Item RequiredSkill
{
get
{
return ResourcesPrefabManager.Instance.GetItemPrefab(RequiredSkillID);
}
set
{
RequiredSkillID = value.ItemID;
}
}
public override bool CharacterHasRequirement(Character character)
{
int result;
if (RequiredSkillID != 0)
{
bool? obj;
if (character == null)
{
obj = null;
}
else
{
CharacterInventory inventory = character.Inventory;
if (inventory == null)
{
obj = null;
}
else
{
CharacterSkillKnowledge skillKnowledge = inventory.SkillKnowledge;
obj = ((skillKnowledge != null) ? new bool?(((CharacterKnowledge)skillKnowledge).IsItemLearned(RequiredSkillID)) : null);
}
}
bool? flag = obj;
result = ((flag.GetValueOrDefault() ^ Inverted) ? 1 : 0);
}
else
{
result = 1;
}
return (byte)result != 0;
}
}
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace HolyDamageManager;
[BepInPlugin("com.ehaugw.holydamagemanager", "Holy Damage Manager", "1.0.0")]
public class HolyDamageManager : BaseUnityPlugin
{
public const string GUID = "com.ehaugw.holydamagemanager";
public const string VERSION = "1.0.0";
public const string NAME = "Holy Damage Manager";
private static Types m_holyDamageType;
private static Tag m_holyDamageTag;
internal void Awake()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
SetHolyType((Types)3);
SetHolyTag(Tag.None);
}
public static void SetHolyType(Types type)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
m_holyDamageType = type;
}
public static void SetHolyTag(Tag tag)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
m_holyDamageTag = tag;
}
public static float BuffHolyDamageOrHealing(Character character, float value)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Expected O, but got Unknown
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
DamageList val = new DamageList(GetDamageType(), value);
character.Stats.GetAmplifiedDamage((IList<Tag>)(object)new Tag[1] { GetDamageTag() }, ref val);
return val.TotalDamage;
}
public static Tag GetDamageTag()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
return m_holyDamageTag;
}
public static Types GetDamageType()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
return m_holyDamageType;
}
public static int GetHolyIndex()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected I4, but got Unknown
return (int)GetDamageType();
}
public static float[] GetHolyDamageBonusArray(float damageBonus)
{
float[] array = new float[9];
array[GetHolyIndex()] = damageBonus;
return array;
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using HolyDamageManager;
using SideLoader;
using TinyHelper;
using TinyHelper.Effects;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace ImpendingDoom;
public class WillDieFromImpendingDoom : EffectCondition
{
protected override bool CheckIsValid(Character _affectedCharacter)
{
StatusEffect statusEffectOfName = _affectedCharacter.StatusEffectMngr.GetStatusEffectOfName(ImpendingDoomMod.Instance.impendingDoomInstance.IdentifierName);
if (statusEffectOfName != null)
{
float num = ImpendingDoom.RemainingDamage(_affectedCharacter, statusEffectOfName);
if (num >= _affectedCharacter.Health && num >= 40f)
{
return true;
}
}
return false;
}
}
public class EffectInitializer
{
public static StatusEffect MakeImpendingDoomPrefab()
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
string impendingDoomEffectName = ModTheme.ImpendingDoomEffectName;
string[] obj = new string[5] { "Take 1 ", null, null, null, null };
Types damageType = HolyDamageManager.GetDamageType();
obj[1] = ((object)(Types)(ref damageType)).ToString();
obj[2] = " over time and be smitten by thunder if you build up too much ";
obj[3] = ModTheme.ImpendingDoomEffectName;
obj[4] = ".";
string text = string.Concat(obj);
string text2 = Directory.GetParent(typeof(ImpendingDoomMod).Assembly.Location).ToString();
StatusEffect val = TinyEffectManager.MakeStatusEffectPrefab("ImpendingDoom", "ImpendingDoom", text, 15f, 1f, (StackBehaviors)1, "HolyBlaze", true, (string)null, (UID?)null, "com.ehaugw.impendingdoom", "\\SideLoader\\Texture2D\\impendingDoomIcon.png", impendingDoomEffectName, text2);
EffectSignature statusEffectSignature = val.StatusEffectSignature;
Transform transform = TinyGameObjectManager.MakeFreshObject("Effects", true, true, ((Component)statusEffectSignature).transform).transform;
ImpendingDoom impendingDoom = ((Component)transform).gameObject.AddComponent<ImpendingDoom>();
((Effect)impendingDoom).UseOnce = false;
transform = TinyGameObjectManager.MakeFreshObject("Effects", true, true, ((Component)statusEffectSignature).transform).transform;
WillDieFromImpendingDoom willDieFromImpendingDoom = ((Component)transform).gameObject.AddComponent<WillDieFromImpendingDoom>();
ShootBlastFromEffect val2 = ((Component)transform).gameObject.AddComponent<ShootBlastFromEffect>();
((Effect)val2).UseOnce = true;
((Behaviour)val2).enabled = true;
((Component)val2).transform.parent = transform;
((ShootBlast)val2).BaseBlast = SL_ShootBlast.GetBlastPrefab((BlastPrefabs)99).GetComponent<Blast>();
((ShootBlast)val2).InstanstiatedAmount = 5;
((Shooter)val2).CastPosition = (CastPositionType)0;
((Shooter)val2).TargetType = (TargetTypes)0;
((Shooter)val2).TransformName = "ShooterTransform";
((ShootBlast)val2).UseTargetCharacterPositionType = false;
((Effect)val2).SyncType = (SyncTypes)0;
((Effect)val2).OverrideEffectCategory = (EffectCategories)0;
((Effect)val2).BasePotencyValue = 1f;
((Effect)val2).Delay = 0.25f;
((Shooter)val2).LocalCastPositionAdd = new Vector3(0f, -1f, 0f);
((ShootBlast)val2).BaseBlast.Radius = 4f;
statusEffectSignature.Effects = new List<Effect>
{
(Effect)(object)impendingDoom,
(Effect)(object)val2
};
Transform val3 = ((Component)((ShootBlast)val2).BaseBlast).transform.Find("Effects");
PunctualDamage component = ((Component)val3).GetComponent<PunctualDamage>();
Object.Destroy((Object)(object)component);
component = (PunctualDamage)(object)((Component)val3).gameObject.AddComponent<ImpendingDoomDamage>();
((Effect)component).Delay = 0.25f;
component.Knockback = 40f;
return val;
}
}
public class ImpendingDoom : Effect
{
public const float RANGE = 4f;
public const float LIFE_SPAN = 15f;
public const float DAMAGE = 15f;
public const float REFRESH_RATE = 1f;
public const float BOOM_THRESHOLD = 40f;
protected override void ActivateLocally(Character character, object[] _infos)
{
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
object field = At.GetField<Effect>((Effect)(object)this, "m_parentStatusEffect");
StatusEffect val = (StatusEffect)((field is StatusEffect) ? field : null);
if (val != null && (Object)(object)((EffectSynchronizer)val).SourceCharacter != (Object)null && !character.Invincible)
{
float num = HolyDamageManager.BuffHolyDamageOrHealing(((EffectSynchronizer)val).SourceCharacter, 1f);
DamageList val2 = new DamageList(HolyDamageManager.GetDamageType(), num);
character.Stats.GetMitigatedDamage((Tag[])null, ref val2, true);
character.Stats.ReceiveDamage(val2.TotalDamage);
}
}
public static DamageList RemainingDamageList(Character character, StatusEffect parentStatusEffect, bool mitigated = true)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Expected O, but got Unknown
float num = HolyDamageManager.BuffHolyDamageOrHealing(character, 15f * parentStatusEffect.RemainingLifespan / 15f);
DamageList result = new DamageList(HolyDamageManager.GetDamageType(), num);
if (mitigated)
{
character.Stats.GetMitigatedDamage((Tag[])null, ref result, true);
}
return result;
}
public static float RemainingDamage(Character character, StatusEffect parentStatusEffect, bool mitigated = true)
{
return RemainingDamageList(character, parentStatusEffect, mitigated).TotalDamage;
}
}
[HarmonyPatch(typeof(StatusEffectManager), "OverrideStatusEffect", new Type[]
{
typeof(StatusEffect),
typeof(StatusEffect)
})]
public class StatusEffectManager_OverrideStatusEffect_ImpendingDoom
{
[HarmonyPrefix]
public static void Prefix(StatusEffectManager __instance, StatusEffect _existingEffect, StatusEffect _newEffect, out StatusData __state)
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Expected O, but got Unknown
__state = null;
if (_newEffect.IdentifierName == _existingEffect.IdentifierName && _newEffect.IdentifierName == ImpendingDoomMod.Instance.impendingDoomInstance.IdentifierName)
{
__state = _newEffect.StatusData;
_newEffect.StatusData = new StatusData(__state);
_newEffect.StatusData.LifeSpan = ((_newEffect.RemainingLifespan != 0f) ? _newEffect.RemainingLifespan : _newEffect.StartLifespan) + _existingEffect.RemainingLifespan;
}
}
[HarmonyPostfix]
public static void Postfix(StatusEffectManager __instance, StatusEffect _existingEffect, StatusEffect _newEffect, StatusData __state)
{
if (__state != null)
{
_newEffect.StatusData = __state;
}
}
}
internal class ImpendingDoomDamage : PunctualDamage
{
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
EffectSynchronizer sourceSynchronizer = ((Effect)this).SourceSynchronizer;
StatusEffect parentStatusEffect = (StatusEffect)(object)((sourceSynchronizer is StatusEffect) ? sourceSynchronizer : null);
DamageList val = ImpendingDoom.RemainingDamageList(_affectedCharacter, parentStatusEffect);
base.Damages = val.List.ToArray();
base.DamageAmplifiedByOwner = false;
((PunctualDamage)this).ActivateLocally(_affectedCharacter, _infos);
}
}
[BepInPlugin("com.ehaugw.impendingdoom", "Impending Doom", "1.0.0")]
public class ImpendingDoomMod : BaseUnityPlugin
{
public const string GUID = "com.ehaugw.impendingdoom";
public const string VERSION = "1.0.0";
public const string NAME = "Impending Doom";
public static ImpendingDoomMod Instance;
public StatusEffect impendingDoomInstance;
internal void Awake()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
Instance = this;
Harmony val = new Harmony("com.ehaugw.impendingdoom");
val.PatchAll();
SL.OnPacksLoaded += OnPackLoaded;
}
private void OnPackLoaded()
{
impendingDoomInstance = EffectInitializer.MakeImpendingDoomPrefab();
}
}
public class ModTheme
{
public enum Theme
{
Elatt,
DawnWeaver,
Atheist,
Crusader
}
public static Theme? modTheme;
public const string ImpendingDoomEffectIdentifierName = "ImpendingDoom";
public static Theme GetTheme => modTheme ?? Theme.Crusader;
public static string ImpendingDoomEffectName => "Impending Doom";
public static string Themifization()
{
return null;
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Threading.Tasks;
using BepInEx;
using HarmonyLib;
using MapMagic;
using Photon;
using SideLoader;
using TinyHelper;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace SynchronizedWorldObjects;
[BepInPlugin("com.ehaugw.synchronizedworldobjects", "Synchronized World Objects", "1.0.3")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency("com.ehaugw.tinyhelper", "4.8.4")]
public class SynchronizedWorldObjects : BaseUnityPlugin
{
public const string GUID = "com.ehaugw.synchronizedworldobjects";
public const string VERSION = "1.0.3";
public const string NAME = "Synchronized World Objects";
internal void Awake()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Expected O, but got Unknown
GameObject val = new GameObject("SynchronizedWorldObjectsRPC");
Object.DontDestroyOnLoad((Object)(object)val);
val.AddComponent<SynchronizedWorldObjectManager>();
SynchronizedWorldObjectManager.SyncedWorldObjects = new List<SynchronizedWorldObject>();
SL.OnPacksLoaded += OnPackLoaded;
SL.OnSceneLoaded += OnSceneLoaded;
Harmony val2 = new Harmony("com.ehaugw.synchronizedworldobjects");
val2.PatchAll();
}
private void OnPackLoaded()
{
}
private void OnSceneLoaded()
{
SynchronizedWorldObjectManager.OnSceneLoaded();
}
}
public abstract class SynchronizedWorldObject
{
public string IdentifierName;
public string SceneIdentifierName;
public int RPCListenerID;
public string Uid;
public SynchronizedWorldObject(string identifierName, int rpcListenerID)
{
IdentifierName = identifierName;
RPCListenerID = rpcListenerID;
SynchronizedWorldObjectManager.SyncedWorldObjects.Add(this);
}
public virtual bool ShouldBeSpawned()
{
return SceneManagerHelper.ActiveSceneName == SceneIdentifierName;
}
public abstract bool OnSceneLoaded();
public abstract bool OnGuestJoined(string guestUID);
public abstract object SetupClientSide(int rpcListenerID, string instanceUID, int sceneViewID, int recursionCount, string rpcMeta);
}
internal class SynchronizedWorldObjectManager : MonoBehaviour
{
public static SynchronizedWorldObjectManager Instance;
public static List<SynchronizedWorldObject> SyncedWorldObjects;
public static void OnSceneLoaded()
{
foreach (SynchronizedWorldObject syncedWorldObject in SyncedWorldObjects)
{
syncedWorldObject.OnSceneLoaded();
}
}
internal void Start()
{
Instance = this;
PhotonView val = ((Component)this).gameObject.AddComponent<PhotonView>();
val.viewID = 951;
Debug.Log((object)("Registered SynchronizedWorldObjectManager with ViewID " + ((MonoBehaviour)this).photonView.viewID));
}
[PunRPC]
public void SetupClientSide(int rpcListenerID, string instanceUID, int sceneViewID, int recursionCount, string rpcMeta)
{
foreach (SynchronizedWorldObject syncedWorldObject in SyncedWorldObjects)
{
syncedWorldObject.SetupClientSide(rpcListenerID, instanceUID, sceneViewID, recursionCount, rpcMeta);
}
}
}
public class SynchronizedDeployable : SynchronizedEquipment
{
public SynchronizedDeployable(int itemID)
: base(itemID)
{
}
public override object SetupClientSide(int rpcListenerID, string instanceUID, int sceneViewID, int recursionCount, string rpcMeta)
{
return null;
}
public override Item SetupServerSide()
{
Item val = base.SetupServerSide();
val.IsPickable = false;
val.HasPhysicsWhenWorld = false;
Deployable component = ((Component)val).GetComponent<Deployable>();
component.StartDeployAnimation();
Dropable component2 = ((Component)val).GetComponent<Dropable>();
if (Object.op_Implicit((Object)(object)component2))
{
component2.GenerateContents();
}
FueledContainer component3 = ((Component)val).GetComponent<FueledContainer>();
if (Object.op_Implicit((Object)(object)component3))
{
component3.TryKindle = true;
}
return val;
}
}
public class SynchronizedEquipment : SynchronizedWorldObject
{
public Vector3 Position;
public Vector3 Rotation;
public Vector3 Scale;
public int ItemID;
public bool IsPickable = false;
public SynchronizedEquipment(int itemID)
: base("-1", -1)
{
ItemID = itemID;
}
public void AddToScene(string scene, Vector3 position, Vector3 rotation, Vector3 scale)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
SceneIdentifierName = scene;
Position = position;
Rotation = rotation;
Scale = scale;
}
public override bool OnGuestJoined(string guestUID)
{
return false;
}
public override bool OnSceneLoaded()
{
if (ShouldBeSpawned())
{
if (!PhotonNetwork.isNonMasterClientInRoom)
{
SetupServerSide();
}
return true;
}
return false;
}
public override object SetupClientSide(int rpcListenerID, string instanceUID, int sceneViewID, int recursionCount, string rpcMeta)
{
return null;
}
public virtual Item SetupServerSide()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
Item val = ItemManager.Instance.GenerateItemNetwork(ItemID);
val.ChangeParent((Transform)null, Position, Extensions.EulerToQuat(Rotation));
val.SetForceSyncPos();
val.SaveType = (SaveTypes)2;
val.IsPickable = false;
val.HasPhysicsWhenWorld = true;
return val;
}
}
public class SynchronizedNPCScene
{
public string Scene;
public Vector3 Position;
public Vector3 Rotation;
public Factions? Faction;
public bool Sheathed;
public SpellCastType Pose;
public string RPCMeta;
public int[] DefaultEquipment;
public int[] ModdedEquipment;
public Func<bool> ShouldSpawnInScene;
public SynchronizedNPCScene(string scene, Vector3 position, Vector3 rotation, Factions? faction = null, bool sheathed = true, SpellCastType pose = -1, string rpcMeta = null, int[] defaultEquipment = null, int[] moddedEquipment = null, Func<bool> shouldSpawnInScene = null)
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
Scene = scene;
Position = position;
Rotation = rotation;
Faction = faction;
Sheathed = sheathed;
Pose = pose;
RPCMeta = rpcMeta;
DefaultEquipment = defaultEquipment;
ModdedEquipment = moddedEquipment;
ShouldSpawnInScene = shouldSpawnInScene ?? ((Func<bool>)(() => true));
}
}
public class SynchronizedNPC : SynchronizedWorldObject
{
public enum HairColors
{
BrownMedium,
BrownBright,
BrownDark,
Black,
Blonde,
White,
Red,
Blue,
Green,
Orange,
Purple
}
public enum HairStyles
{
Bald,
Basic,
PonyTail,
Wild,
CombedBack,
PonyTailBraids,
BraidsBack,
Bun,
MaleShort,
MaleMedium,
MaleLong,
CornrowsMedium,
CornrowsLong,
CornrowsShort,
Ball
}
public int[] DefaultEquipment = new int[0];
public int[] ModdedEquipment = new int[0];
public Vector3 Scale;
public string RPCMeta;
public Factions Faction;
private Character localCharacter;
private AIRoot aiRoot;
public VisualData VisualData;
public List<SynchronizedNPCScene> Scenes = new List<SynchronizedNPCScene>();
public SynchronizedNPCScene ActiveScene;
public SynchronizedNPC(string identifierName, int rpcListenerID, int[] defaultEquipment = null, int[] moddedEquipment = null, Vector3? scale = null, Factions? faction = null, VisualData visualData = null)
: base(identifierName, rpcListenerID)
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
DefaultEquipment = defaultEquipment ?? new int[0];
ModdedEquipment = moddedEquipment ?? new int[0];
Scale = (Vector3)(((??)scale) ?? Vector3.one);
Faction = faction.GetValueOrDefault();
VisualData = visualData;
}
public void AddToScene(SynchronizedNPCScene scene)
{
Scenes.Add(scene);
}
public void AssignAI(AIRoot aiRoot)
{
this.aiRoot = aiRoot;
}
public GameObject GetGameObject()
{
return GameObject.Find("UNPC_" + IdentifierName);
}
public object GetSynchronizedObject(string instanceUID)
{
return CharacterManager.Instance.GetCharacter(instanceUID);
}
public override bool ShouldBeSpawned()
{
foreach (SynchronizedNPCScene scene in Scenes)
{
if (scene.ShouldSpawnInScene() && scene.Scene == SceneManagerHelper.ActiveSceneName)
{
ActiveScene = scene;
return true;
}
}
return false;
}
public override bool OnSceneLoaded()
{
if (ShouldBeSpawned())
{
if (!PhotonNetwork.isNonMasterClientInRoom)
{
int num = PhotonNetwork.AllocateSceneViewID();
GameObject gameObject = GetGameObject();
if ((Object)(object)gameObject == (Object)null)
{
SetupServerSide();
((MonoBehaviour)SynchronizedWorldObjectManager.Instance).photonView.RPC("SetupClientSide", (PhotonTargets)0, new object[5] { RPCListenerID, Uid, num, 0, ActiveScene.RPCMeta });
return true;
}
}
}
else
{
GameObject gameObject2 = GetGameObject();
if (gameObject2 != null)
{
Object.DestroyImmediate((Object)(object)gameObject2);
}
}
return false;
}
public override bool OnGuestJoined(string guestUID)
{
if (ShouldBeSpawned())
{
if (!PhotonNetwork.isNonMasterClientInRoom)
{
int num = PhotonNetwork.AllocateSceneViewID();
GameObject gameObject = GetGameObject();
if ((Object)(object)gameObject == (Object)null)
{
((MonoBehaviour)SynchronizedWorldObjectManager.Instance).photonView.RPC("SetupClientSide", (PhotonTargets)0, new object[5] { RPCListenerID, Uid, num, 0, ActiveScene.RPCMeta });
return true;
}
}
}
else
{
GameObject gameObject2 = GetGameObject();
if (gameObject2 != null)
{
Object.DestroyImmediate((Object)(object)gameObject2);
}
}
return false;
}
public override object SetupClientSide(int rpcListenerID, string instanceUID, int sceneViewID, int recursionCount, string rpcMeta)
{
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Expected O, but got Unknown
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0133: Unknown result type (might be due to invalid IL or missing references)
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01be: Unknown result type (might be due to invalid IL or missing references)
if (RPCListenerID != rpcListenerID)
{
return null;
}
ActiveScene = Scenes.FirstOrDefault((SynchronizedNPCScene x) => x.RPCMeta == rpcMeta);
int num = 200;
object synchronizedObject = GetSynchronizedObject(instanceUID);
Character val = (Character)((synchronizedObject is Character) ? synchronizedObject : null);
if ((Object)(object)val == (Object)null)
{
if (recursionCount * num < 20000)
{
DelayedTask.GetTask(num).ContinueWith((Task _) => SetupClientSide(rpcListenerID, instanceUID, sceneViewID, recursionCount + 1, rpcMeta));
Console.Read();
return null;
}
Debug.Log((object)("SynchronizedNPC with UID " + instanceUID + " could not fetched from server"));
return null;
}
GameObject val2 = new GameObject("UNPC_" + IdentifierName);
val2.transform.position = ActiveScene.Position;
val2.transform.rotation = Quaternion.Euler(ActiveScene.Rotation);
GameObject gameObject = ((Component)val).gameObject;
if (VisualData != null)
{
((MonoBehaviour)TinyHelper.Instance).StartCoroutine(SL_Character.SetVisuals(val, ((object)VisualData).ToString()));
}
gameObject.transform.parent = val2.transform;
gameObject.transform.position = val2.transform.position;
gameObject.transform.rotation = val2.transform.rotation;
gameObject.transform.localScale = Scale;
Object.DestroyImmediate((Object)(object)gameObject.GetComponent<StartingEquipment>());
((Behaviour)val.Stats).enabled = false;
Weapon currentWeapon = val.CurrentWeapon;
if (currentWeapon != null && ((Equipment)currentWeapon).TwoHanded)
{
val.LeftHandEquipment = (Equipment)(object)val.CurrentWeapon;
val.LeftHandChanged();
}
if ((Object)(object)val.CurrentWeapon != (Object)null)
{
val.Sheathed = ActiveScene.Sheathed;
}
localCharacter = val;
return val;
}
public void AITick()
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Expected I4, but got Unknown
DelayedTask.GetTask(1000).ContinueWith(delegate
{
AITick();
});
Console.Read();
if ((Object)(object)localCharacter != (Object)null)
{
SpellCastType[] array = (SpellCastType[])(object)new SpellCastType[2]
{
(SpellCastType)55,
(SpellCastType)41
};
if (UnityEngineExtensions.Contains<SpellCastType>(array, ActiveScene.Pose) && localCharacter.InLocomotion)
{
localCharacter.Animator.SetInteger("SpellType", (int)ActiveScene.Pose);
localCharacter.Animator.SetTrigger("Spell");
}
}
}
public object SetupServerSide()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
UID val = UID.Generate();
string text = ((object)(UID)(ref val)).ToString();
GameObject gameObject = ((Component)TinyCharacterManager.SpawnCharacter(text, ActiveScene.Position, ActiveScene.Rotation)).gameObject;
gameObject.transform.rotation = Quaternion.Euler(ActiveScene.Rotation);
Character component = gameObject.GetComponent<Character>();
At.SetField<Character>(component, "m_instantiationType", (object)(CharacterInstantiationTypes)2);
int[] array = ActiveScene.DefaultEquipment ?? DefaultEquipment;
foreach (int num in array)
{
? val2 = component.Inventory.Equipment;
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(num);
((CharacterEquipment)val2).EquipInstantiate((Equipment)(object)((itemPrefab is Equipment) ? itemPrefab : null));
}
int[] array2 = ActiveScene.ModdedEquipment ?? ModdedEquipment;
for (int j = 0; j < array2.Length; j++)
{
int num2 = array2[j];
if (ResourcesPrefabManager.Instance.ContainsItemPrefab(num2.ToString()))
{
Item obj = ItemManager.Instance.GenerateItemNetwork(num2);
Equipment val3 = (Equipment)(object)((obj is Equipment) ? obj : null);
component.Inventory.TakeItem(((Item)val3).UID);
At.Invoke<CharacterEquipment>(component.Inventory.Equipment, "EquipWithoutAssociating", new Type[2]
{
typeof(Equipment),
typeof(bool)
}, new object[2] { val3, false });
}
}
Weapon currentWeapon = component.CurrentWeapon;
if (currentWeapon != null && ((Equipment)currentWeapon).TwoHanded)
{
component.LeftHandEquipment = (Equipment)(object)component.CurrentWeapon;
component.LeftHandChanged();
}
if ((Object)(object)component.CurrentWeapon != (Object)null)
{
component.Sheathed = ActiveScene.Sheathed;
}
component.ChangeFaction((Factions)(((??)ActiveScene.Faction) ?? Faction), true);
gameObject.SetActive(true);
DelayedTask.GetTask(1000).ContinueWith(delegate
{
AITick();
});
Console.Read();
Uid = text;
return text;
}
}
#define DEBUG
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;
using BepInEx;
using CharacterQuestKnowledgeExtensions;
using HarmonyLib;
using Localizer;
using NodeCanvas.DialogueTrees;
using NodeCanvas.Framework;
using NodeCanvas.Tasks.Actions;
using NodeCanvas.Tasks.Conditions;
using Photon;
using TinyHelper;
using TinyHelper.Effects;
using TinyHelper.Interfaces;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
public static class TinyHelpers
{
public static string OrConcat<T>(this ICollection<T> collection)
{
List<T> list = collection.ToList();
string text = "";
for (int i = 0; i < list.Count; i++)
{
text += list[i].ToString();
if (i == list.Count - 2)
{
text += " or ";
}
else if (i < list.Count - 2)
{
text += ", ";
}
}
return text;
}
public static void Shuffle<T>(this IList<T> list)
{
Random random = new Random();
int count = list.Count;
for (int num = list.Count - 1; num > 1; num--)
{
int index = random.Next(num + 1);
T value = list[index];
list[index] = list[num];
list[num] = value;
}
}
}
namespace CharacterQuestKnowledgeExtensions
{
public static class CharacterQuestKnowledgeExtensions
{
public static bool IsItemLearnedLocal(this CharacterQuestKnowledge questKnowledge, int _itemID)
{
return (from q in ((CharacterKnowledge)questKnowledge).GetLearnedItems()
where q.ItemID == _itemID && Object.op_Implicit((Object)(object)((EffectSynchronizer)q).OwnerCharacter)
select q).Count() > 0;
}
public static bool IsQuestCompletedLocal(this CharacterQuestKnowledge questKnowledge, int _itemID)
{
return ((CharacterKnowledge)questKnowledge).GetLearnedItems().Where(delegate(Item q)
{
int result;
if (q.ItemID == _itemID && Object.op_Implicit((Object)(object)((EffectSynchronizer)q).OwnerCharacter))
{
Quest val = (Quest)(object)((q is Quest) ? q : null);
if (val != null)
{
result = (val.IsCompleted ? 1 : 0);
goto IL_002e;
}
}
result = 0;
goto IL_002e;
IL_002e:
return (byte)result != 0;
}).Count() > 0;
}
}
}
namespace CharacterExtensions
{
public static class CharacterExtensions
{
public static List<Item> EquippedOnBag(this Character character)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
object result;
if (character == null)
{
result = null;
}
else
{
CharacterInventory inventory = character.Inventory;
result = ((inventory == null) ? null : inventory.GetOwnedItems(TinyTagManager.GetOrMakeTag("Item"))?.Where((Item x) => x.DisplayedOnBag)?.ToList());
}
return (List<Item>)result;
}
}
}
namespace TinyHelper
{
public static class At
{
public static BindingFlags flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
public static object Call(object obj, string method, params object[] args)
{
MethodInfo method2 = obj.GetType().GetMethod(method, flags);
if (method2 != null)
{
return method2.Invoke(obj, args);
}
return null;
}
public static void SetValue<T>(T value, Type type, object obj, string field)
{
FieldInfo field2 = type.GetField(field, flags);
if (field2 != null)
{
field2.SetValue(obj, value);
}
}
public static object GetValue(Type type, object obj, string value)
{
FieldInfo field = type.GetField(value, flags);
if (field != null)
{
return field.GetValue(obj);
}
return null;
}
public static void InheritBaseValues(object _derived, object _base)
{
FieldInfo[] fields = _base.GetType().GetFields(flags);
foreach (FieldInfo fieldInfo in fields)
{
try
{
_derived.GetType().GetField(fieldInfo.Name).SetValue(_derived, fieldInfo.GetValue(_base));
}
catch
{
}
}
}
}
public class ForbiddenWeaponTypeCondition : EffectCondition
{
public List<WeaponType> ForbiddenWeaponTypes = new List<WeaponType>();
protected override bool CheckIsValid(Character _affectedCharacter)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
Equipment obj = ((_affectedCharacter != null) ? _affectedCharacter.LeftHandEquipment : null);
Weapon val = (Weapon)(object)((obj is Weapon) ? obj : null);
int result;
if (val == null || !ForbiddenWeaponTypes.Contains(val.Type))
{
Weapon val2 = ((_affectedCharacter != null) ? _affectedCharacter.CurrentWeapon : null);
result = ((val2 == null || !ForbiddenWeaponTypes.Contains(val2.Type)) ? 1 : 0);
}
else
{
result = 0;
}
return (byte)result != 0;
}
public static ActivationCondition AddToSkill(Skill skill, List<WeaponType> forbiddenWeaponTypes)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
GameObject val = new GameObject("ForbiddenWeaponTypeCondition");
ActivationCondition val2 = new ActivationCondition();
ForbiddenWeaponTypeCondition forbiddenWeaponTypeCondition = val.AddComponent<ForbiddenWeaponTypeCondition>();
Object.DontDestroyOnLoad((Object)(object)forbiddenWeaponTypeCondition);
val.SetActive(false);
val2.Condition = (EffectCondition)(object)forbiddenWeaponTypeCondition;
forbiddenWeaponTypeCondition.ForbiddenWeaponTypes = forbiddenWeaponTypes;
At.SetValue("Can not be used with a " + forbiddenWeaponTypes.OrConcat() + ".", typeof(ActivationCondition), val2, "m_defaultMessage");
List<ActivationCondition> list = (At.GetValue(typeof(Skill), skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
list.Add(val2);
At.SetValue(list.ToArray(), typeof(Skill), skill, "m_additionalConditions");
return val2;
}
}
public class QuestKnowledgeCondition : EffectCondition
{
public int[] Quests;
public LogicType Logic = LogicType.Any;
protected override bool CheckIsValid(Character _affectedCharacter)
{
return QuestRequirements.HasQuestKnowledge(_affectedCharacter, Quests, Logic);
}
}
public class StatusEffectsCondition : EffectCondition
{
public enum LogicType
{
Any,
All
}
public string[] StatusEffectNames;
public LogicType Logic = LogicType.Any;
protected override bool CheckIsValid(Character _affectedCharacter)
{
StatusEffectManager statusEffectManager = ((_affectedCharacter != null) ? _affectedCharacter.StatusEffectMngr : null);
if (statusEffectManager != null)
{
IEnumerable<bool> source = StatusEffectNames.Select((string x) => (Object)(object)statusEffectManager.GetStatusEffectOfName(x) != (Object)null);
return (Logic == LogicType.Any) ? source.Any((bool x) => x) : source.All((bool x) => x);
}
return false;
}
}
public class AddNewStatusEffectRandom : AddStatusEffectRandom
{
protected override bool TryTriggerConditions()
{
List<StatusEffect> list = base.Statuses.ToList();
list.Shuffle();
base.ForceID = -1;
for (int i = 0; i < list.Count; i++)
{
StatusEffect val = list[i];
if (!((Object)(object)val == (Object)null) && !((Object)(object)((Effect)this).m_affectedCharacter == (Object)null) && !((Effect)this).m_affectedCharacter.StatusEffectMngr.HasStatusEffect(val.EffectFamily))
{
base.ForceID = UnityEngineExtensions.IndexOf<StatusEffect>(base.Statuses, val);
break;
}
}
return ((AddStatusEffectRandom)this).TryTriggerConditions();
}
}
public class PunctualDamageSecondaryScaling : PunctualDamage
{
public Types ScalingToType;
public DamageType[] BaseDamage;
public DamageType[] ScaledDamage
{
get
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Expected O, but got Unknown
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Expected O, but got Unknown
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Expected O, but got Unknown
DamageList val = DamageList.CreateEmptyCopy(new DamageList(BaseDamage)) + new DamageList(BaseDamage);
DamageList val2 = DamageList.CreateEmptyCopy(new DamageList(BaseDamage)) + new DamageList(BaseDamage);
Character sourceCharacter = ((Effect)this).SourceCharacter;
if (sourceCharacter != null)
{
CharacterStats stats = sourceCharacter.Stats;
if (stats != null)
{
stats.GetAmplifiedDamage((IList<Tag>)(object)new Tag[0], ref val2);
}
}
float damage = val2.TotalDamage - val.TotalDamage;
val.Add(new DamageType
{
Damage = damage,
Type = ScalingToType
});
return val.List.ToArray();
}
}
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
base.Damages = ScaledDamage;
((PunctualDamage)this).ActivateLocally(_affectedCharacter, _infos);
}
}
public class EnableHitDetection : Effect
{
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
Item parentItem = ((Effect)this).ParentItem;
MeleeSkill val = (MeleeSkill)(object)((parentItem is MeleeSkill) ? parentItem : null);
if (val != null && (Object)(object)val.MeleeHitDetector != (Object)null)
{
MeleeHitDetector val2 = ((_affectedCharacter != null) ? _affectedCharacter.SkillMeleeDetector : null);
if (val2 != null)
{
val2.HitStarted(-1);
return;
}
}
Weapon obj = ((_affectedCharacter != null) ? _affectedCharacter.CurrentWeapon : null);
MeleeWeapon val3 = (MeleeWeapon)(object)((obj is MeleeWeapon) ? obj : null);
if (val3 != null)
{
((Weapon)val3).HitStarted(-1);
}
}
}
public class RemoveItemFromInventory : Effect
{
public int ItemID;
public int Amount = 1;
public bool AffectOwner = false;
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
if (AffectOwner)
{
_affectedCharacter = ((Effect)this).OwnerCharacter;
}
CharacterInventory inventory = _affectedCharacter.Inventory;
if (inventory != null)
{
inventory.RemoveItem(ItemID, Amount);
}
}
}
public class CooldownChangeEffect : Effect
{
public float HitKnockbackCooldown = -1f;
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
Item parentItem = ((Effect)this).ParentItem;
Skill val = (Skill)(object)((parentItem is Skill) ? parentItem : null);
if (val != null && HitKnockbackCooldown != -1f && _affectedCharacter.IsInKnockback)
{
At.SetValue(HitKnockbackCooldown, typeof(Skill), val, "m_remainingCooldownTime");
}
}
}
public class EquipSkillDurabilityCondition : EquipDurabilityCondition
{
protected override bool CheckIsValid(Character _affectedCharacter)
{
Skill component = ((Component)((Component)this).transform.parent.parent).gameObject.GetComponent<Skill>();
if (component != null)
{
base.DurabilityRequired = component.DurabilityCost;
}
return ((EquipDurabilityCondition)this).CheckIsValid(_affectedCharacter);
}
public static ActivationCondition AddToSkill(Skill skill, EquipmentSlotIDs slot)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
Transform orMake = TinyGameObjectManager.GetOrMake(((Component)skill).transform, "AdditionalActivationConditions", setActive: true, dontDestroyOnLoad: true);
GameObject gameObject = ((Component)TinyGameObjectManager.GetOrMake(orMake, "EquipSkillDurabilityCondition", setActive: true, dontDestroyOnLoad: true)).gameObject;
ActivationCondition val = new ActivationCondition();
EquipSkillDurabilityCondition equipSkillDurabilityCondition = gameObject.AddComponent<EquipSkillDurabilityCondition>();
((EquipDurabilityCondition)equipSkillDurabilityCondition).EquipmentSlot = slot;
val.Condition = (EffectCondition)(object)equipSkillDurabilityCondition;
At.SetValue("A required piece of equipment is missing or too damaged to be used this way.", typeof(ActivationCondition), val, "m_defaultMessage");
List<ActivationCondition> list = (At.GetValue(typeof(Skill), skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
list.Add(val);
At.SetValue(list.ToArray(), typeof(Skill), skill, "m_additionalConditions");
return val;
}
public static ActivationCondition AddToSkillNotBroken(Skill skill, EquipmentSlotIDs slot)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
Transform orMake = TinyGameObjectManager.GetOrMake(((Component)skill).transform, "AdditionalActivationConditions", setActive: true, dontDestroyOnLoad: true);
GameObject gameObject = ((Component)TinyGameObjectManager.GetOrMake(orMake, "EquipDurabilityCondition", setActive: true, dontDestroyOnLoad: true)).gameObject;
ActivationCondition val = new ActivationCondition();
EquipDurabilityCondition val2 = gameObject.AddComponent<EquipDurabilityCondition>();
val2.EquipmentSlot = slot;
val2.DurabilityRequired = 0f;
val.Condition = (EffectCondition)(object)val2;
At.SetValue("A required piece of equipment is missing or broken.", typeof(ActivationCondition), val, "m_defaultMessage");
List<ActivationCondition> list = (At.GetValue(typeof(Skill), skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
list.Add(val);
At.SetValue(list.ToArray(), typeof(Skill), skill, "m_additionalConditions");
return val;
}
}
public class AffectCorruption : Effect
{
public float AffectQuantity = 0f;
public bool AffectOwner = false;
public bool IsRaw = false;
protected override KeyValuePair<string, Type>[] GenerateSignature()
{
return new KeyValuePair<string, Type>[1]
{
new KeyValuePair<string, Type>("Value", typeof(float))
};
}
public override void SetValue(string[] _data)
{
if (_data == null || _data.Length >= 1)
{
float.TryParse(_data[0], out AffectQuantity);
}
}
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
if (AffectOwner)
{
_affectedCharacter = ((Effect)this).OwnerCharacter;
}
if ((Object)(object)_affectedCharacter != (Object)null && _affectedCharacter.Alive && Object.op_Implicit((Object)(object)_affectedCharacter.PlayerStats))
{
_affectedCharacter.PlayerStats.AffectCorruptionLevel(AffectQuantity, !IsRaw);
}
}
}
public class UseMana : Effect
{
public float UsedMana = 0f;
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
_affectedCharacter.Stats.UseMana((Tag[])null, UsedMana);
}
}
public class SpecificImbueCondition : EffectCondition
{
public ImbueEffectPreset imbueEffectPreset;
private bool inverse = false;
protected override bool CheckIsValid(Character _affectedCharacter)
{
Weapon val = ((_affectedCharacter != null) ? _affectedCharacter.CurrentWeapon : null);
return val != null && val.HasImbuePreset(imbueEffectPreset);
}
public static ActivationCondition AddToSkill(Skill skill, ImbueEffectPreset imbueEffectPreset, bool inverse = false)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
GameObject val = new GameObject("SpecificImbueCondition");
ActivationCondition val2 = new ActivationCondition();
SpecificImbueCondition specificImbueCondition = val.AddComponent<SpecificImbueCondition>();
Object.DontDestroyOnLoad((Object)(object)specificImbueCondition);
val.SetActive(false);
val2.Condition = (EffectCondition)(object)specificImbueCondition;
specificImbueCondition.inverse = inverse;
specificImbueCondition.imbueEffectPreset = imbueEffectPreset;
At.SetValue("You do not have the required imbue effect.", typeof(ActivationCondition), val2, "m_defaultMessage");
List<ActivationCondition> list = (At.GetValue(typeof(Skill), skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
list.Add(val2);
At.SetValue(list.ToArray(), typeof(Skill), skill, "m_additionalConditions");
return val2;
}
}
public class ExtendedAddStatusEffect : AddStatusEffect
{
public bool ExtendDuration = false;
protected override void ActivateLocally(Character _targetCharacter, object[] _infos)
{
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Expected O, but got Unknown
StatusEffect status = base.Status;
if (ExtendDuration)
{
bool? obj;
if (_targetCharacter == null)
{
obj = null;
}
else
{
StatusEffectManager statusEffectMngr = _targetCharacter.StatusEffectMngr;
obj = ((statusEffectMngr != null) ? new bool?(statusEffectMngr.HasStatusEffect(status.IdentifierName)) : null);
}
bool? flag = obj;
if (flag.GetValueOrDefault())
{
StatusData statusData = status.StatusData;
status.StatusData = new StatusData(statusData);
StatusEffect statusEffectOfName = _targetCharacter.StatusEffectMngr.GetStatusEffectOfName(status.IdentifierName);
float num = ((statusEffectOfName != null) ? statusEffectOfName.RemainingLifespan : 0f);
float num2 = ((status.RemainingLifespan > 0f) ? status.RemainingLifespan : status.StartLifespan);
status.StatusData.LifeSpan = num2 + num;
((AddStatusEffect)this).ActivateLocally(_targetCharacter, _infos);
status.StatusData = statusData;
return;
}
}
((AddStatusEffect)this).ActivateLocally(_targetCharacter, _infos);
}
}
public static class AnimatorExtension
{
public static bool HasParameter(this Animator animator, string paramName)
{
AnimatorControllerParameter[] parameters = animator.parameters;
foreach (AnimatorControllerParameter val in parameters)
{
if (val.name == paramName)
{
return true;
}
}
return false;
}
}
public class TinyCharacterManager
{
public static Character SpawnCharacter(string uid, Vector3 position, Vector3 rotation)
{
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
Character character = CharacterManager.Instance.GetCharacter(uid);
if ((Object)(object)character != (Object)null)
{
return character;
}
object[] array = new object[4]
{
4,
"NewPlayerPrefab",
uid,
string.Empty
};
GameObject val = PhotonNetwork.InstantiateSceneObject("_characters/NewPlayerPrefab", position, Quaternion.Euler(rotation), (byte)0, array);
val.SetActive(false);
Character component = val.GetComponent<Character>();
component.SetUID(UID.op_Implicit(uid));
At.SetValue<Character>(component, typeof(int), 1, "m_isAI");
return component;
}
}
public class TinyDialogueManager
{
public static GameObject AssignMerchantTemplate(Transform parentTransform)
{
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(Resources.Load<GameObject>("editor/templates/MerchantTemplate"));
val.transform.parent = parentTransform;
val.transform.position = parentTransform.position;
val.transform.rotation = parentTransform.rotation;
return val;
}
public static GameObject AssignTrainerTemplate(Transform parentTransform)
{
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(Resources.Load<GameObject>("editor/templates/TrainerTemplate"));
val.transform.parent = parentTransform;
val.transform.position = parentTransform.position;
val.transform.rotation = parentTransform.rotation;
return val;
}
public static DialogueActor SetDialogueActorName(GameObject dialogueGameObject, string name)
{
DialogueActor componentInChildren = dialogueGameObject.GetComponentInChildren<DialogueActor>();
componentInChildren.SetName(name);
return componentInChildren;
}
public static Merchant SetMerchant(GameObject merchantTemplate, UID merchantUID)
{
return merchantTemplate.GetComponentInChildren<Merchant>();
}
public static Trainer SetTrainerSkillTree(GameObject trainerTemplate, UID skillTreeUID)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
Trainer componentInChildren = trainerTemplate.GetComponentInChildren<Trainer>();
At.SetValue<UID>(skillTreeUID, typeof(Trainer), componentInChildren, "m_skillTreeUID");
return componentInChildren;
}
public static Graph GetDialogueGraph(GameObject trainerTemplate)
{
DialogueTreeController componentInChildren = trainerTemplate.GetComponentInChildren<DialogueTreeController>();
return ((GraphOwner)componentInChildren).graph;
}
public static void SetActorReference(Graph graph, DialogueActor actor)
{
List<ActorParameter> list = At.GetValue(typeof(DialogueTree), (graph is DialogueTree) ? graph : null, "_actorParameters") as List<ActorParameter>;
list[0].actor = (IDialogueActor)(object)actor;
list[0].name = actor.name;
}
public static ActionNode MakeMerchantDialogueAction(Graph graph, Merchant merchant)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
ActionNode val = graph.AddNode<ActionNode>();
ShopDialogueAction val2 = new ShopDialogueAction
{
Merchant = new BBParameter<Merchant>(merchant)
};
BBParameter<Character> obj = new BBParameter<Character>();
((BBParameter)obj).name = "gInstigator";
val2.PlayerCharacter = obj;
ShopDialogueAction action = val2;
val.action = (ActionTask)(object)action;
return val;
}
public static ActionNode MakeTrainDialogueAction(Graph graph, Trainer trainer)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
ActionNode val = graph.AddNode<ActionNode>();
TrainDialogueAction val2 = new TrainDialogueAction
{
Trainer = new BBParameter<Trainer>(trainer)
};
BBParameter<Character> obj = new BBParameter<Character>();
((BBParameter)obj).name = "gInstigator";
val2.PlayerCharacter = obj;
TrainDialogueAction action = val2;
val.action = (ActionTask)(object)action;
return val;
}
public static ActionNode MakeStartQuest(Graph graph, int questID)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
ActionNode val = graph.AddNode<ActionNode>();
GiveQuest val3 = (GiveQuest)(object)(val.action = (ActionTask)new GiveQuest());
ref BBParameter<Quest> quest = ref val3.quest;
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(questID);
quest = new BBParameter<Quest>((Quest)(object)((itemPrefab is Quest) ? itemPrefab : null));
return val;
}
public static ActionNode MakeQuestEvent(Graph graph, string EventUID)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
ActionNode val = graph.AddNode<ActionNode>();
SendQuestEvent val3 = (SendQuestEvent)(object)(val.action = (ActionTask)new SendQuestEvent());
val3.QuestEventRef = new QuestEventReference
{
EventUID = EventUID
};
return val;
}
public static ConditionNode MakeEventOccuredCondition(Graph graph, string EventUID, int MinStack)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
ConditionNode val = graph.AddNode<ConditionNode>();
val.condition = (ConditionTask)new Condition_QuestEventOccured
{
QuestEventRef = new QuestEventReference
{
EventUID = EventUID
},
MinStack = MinStack
};
return val;
}
public static ConditionNode MakeHasItemCondition(Graph graph, int itemID, int MinStack)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
ConditionNode val = graph.AddNode<ConditionNode>();
Condition_OwnsItem val2 = new Condition_OwnsItem();
BBParameter<Character> obj = new BBParameter<Character>();
((BBParameter)obj).name = "gInstigator";
val2.character = obj;
val2.item = new BBParameter<ItemReference>(new ItemReference
{
ItemID = itemID
});
val2.minAmount = new BBParameter<int>(MinStack);
val2.itemMustBeEquiped = new BBParameter<bool>(false);
val2.SaveMatchingContainerVariable = null;
val.condition = (ConditionTask)val2;
return val;
}
public static ConditionNode MakeHasItemConditionSimple(Graph graph, int itemID, int MinStack, int enchantment = 0)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Expected O, but got Unknown
ConditionNode val = graph.AddNode<ConditionNode>();
Condition_SimpleOwnsItem val2 = new Condition_SimpleOwnsItem();
BBParameter<Character> obj = new BBParameter<Character>();
((BBParameter)obj).name = "gInstigator";
val2.character = obj;
val2.item = new BBParameter<Item>(ResourcesPrefabManager.Instance.GetItemPrefab(itemID));
val2.minAmount = new BBParameter<int>(MinStack);
val.condition = (ConditionTask)val2;
return val;
}
public static ActionNode MakeGiveItemReward(Graph graph, int itemID, Receiver receiver, int quantity = 1)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
ActionNode val = graph.AddNode<ActionNode>();
GiveReward val3 = (GiveReward)(object)(val.action = (ActionTask)new GiveReward());
val3.RewardReceiver = receiver;
ItemQuantity val4 = new ItemQuantity();
ItemReference val5 = new ItemReference();
val5.ItemID = itemID;
val4.Item = new BBParameter<ItemReference>(val5);
val4.Quantity = BBParameter<int>.op_Implicit(quantity);
val3.ItemReward = new List<ItemQuantity> { val4 };
return val;
}
public static ActionNode MakeResignItem(Graph graph, int itemID, Receiver provider, int quantity = 1, int enchantment = 0)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Expected O, but got Unknown
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Expected O, but got Unknown
ActionNode val = graph.AddNode<ActionNode>();
RemoveItem val2 = new RemoveItem();
BBParameter<Character> obj = new BBParameter<Character>();
((BBParameter)obj).name = "gInstigator";
val2.fromCharacter = obj;
val2.Items = new List<BBParameter<ItemReference>>
{
new BBParameter<ItemReference>(new ItemReference
{
ItemID = itemID
})
};
val2.Amount = new List<BBParameter<int>>
{
new BBParameter<int>(quantity)
};
val.action = (ActionTask)val2;
return val;
}
public static StatementNodeExt MakeStatementNode(Graph graph, string name, string statementText)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Expected O, but got Unknown
StatementNodeExt val = graph.AddNode<StatementNodeExt>();
val.statement = new Statement(statementText);
val.SetActorName(name);
return val;
}
public static MultipleChoiceNodeExt MakeMultipleChoiceNode(Graph graph, string[] statementTexts)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Expected O, but got Unknown
//IL_0037: Expected O, but got Unknown
MultipleChoiceNodeExt val = graph.AddNode<MultipleChoiceNodeExt>();
foreach (string text in statementTexts)
{
val.availableChoices.Add(new Choice
{
statement = new Statement
{
text = text
}
});
}
return val;
}
public static void ChainNodes(Graph graph, Node[] nodes)
{
Node val = null;
foreach (Node val2 in nodes)
{
if (val != null)
{
graph.ConnectNodes(val, val2, -1, -1);
}
val = val2;
}
}
public static void ConnectMultipleChoices(Graph graph, Node baseNode, Node[] nodes)
{
for (int i = 0; i < nodes.Length; i++)
{
graph.ConnectNodes(baseNode, nodes[i], i, -1);
}
}
}
public class TinyGameObjectManager
{
public static Transform GetOrMake(Transform parent, string child, bool setActive, bool dontDestroyOnLoad)
{
return parent.Find(child) ?? MakeFreshObject(child, setActive, dontDestroyOnLoad, parent).transform;
}
public static GameObject InstantiateClone(GameObject sourceGameObject, bool setActive, bool dontDestroyOnLoad)
{
return InstantiateClone(sourceGameObject, ((Object)sourceGameObject).name + "(Clone)", setActive, dontDestroyOnLoad);
}
public static GameObject InstantiateClone(GameObject sourceGameObject, string newGameObjectName, bool setActive, bool dontDestroyOnLoad)
{
GameObject val = Object.Instantiate<GameObject>(sourceGameObject);
val.SetActive(setActive);
((Object)val).name = newGameObjectName;
if (dontDestroyOnLoad)
{
Object.DontDestroyOnLoad((Object)(object)val);
}
return val;
}
public static Transform MakeFreshTransform(Transform parent, string child, bool setActive, bool dontDestroyOnLoad)
{
return MakeFreshObject(child, setActive, dontDestroyOnLoad, parent).transform;
}
public static GameObject MakeFreshObject(string newGameObjectName, bool setActive, bool dontDestroyOnLoad, Transform parent = null)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
GameObject val = new GameObject(newGameObjectName);
val.SetActive(setActive);
if ((Object)(object)parent != (Object)null)
{
val.transform.SetParent(parent);
}
if (dontDestroyOnLoad)
{
RecursiveDontDestroyOnLoad(val.transform);
}
return val;
}
public static void RecursiveDontDestroyOnLoad(Transform transform)
{
Transform val = transform;
while ((Object)(object)val.parent != (Object)null)
{
val = val.parent;
}
Object.DontDestroyOnLoad((Object)(object)((Component)val).gameObject);
}
}
public enum Behaviour
{
Add,
Purge,
Replace
}
public class TinyItemManager
{
private static Dictionary<int, ItemLocalization> m_ItemLocalizationDictionary;
private static Dictionary<string, Item> m_ItemPrefabDictionary;
private static Dictionary<int, ItemLocalization> ItemLocalizationDictionary
{
get
{
if (m_ItemLocalizationDictionary == null)
{
m_ItemLocalizationDictionary = At.GetValue(typeof(LocalizationManager), LocalizationManager.Instance, "m_itemLocalization") as Dictionary<int, ItemLocalization>;
}
return m_ItemLocalizationDictionary;
}
}
private static Dictionary<string, Item> ItemPrefabDictionary
{
get
{
if (m_ItemPrefabDictionary == null)
{
m_ItemPrefabDictionary = At.GetValue(typeof(ResourcesPrefabManager), null, "ITEM_PREFABS") as Dictionary<string, Item>;
}
return m_ItemPrefabDictionary;
}
}
public static bool SetLegacyResult(int itemID, int legacyOutcomeID)
{
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(itemID);
if ((Object)(object)itemPrefab != (Object)null)
{
itemPrefab.LegacyItemID = legacyOutcomeID;
return true;
}
return false;
}
public static bool AddEnchantingOption(int itemID, int enchantingRecipeID)
{
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(itemID);
EnchantmentRecipe enchantmentRecipeForID = RecipeManager.Instance.GetEnchantmentRecipeForID(enchantingRecipeID);
if ((Object)(object)enchantmentRecipeForID != (Object)null && (Object)(object)itemPrefab != (Object)null)
{
List<IngredientData> list = enchantmentRecipeForID.CompatibleEquipments.CompatibleEquipments.ToList();
list.Add(new IngredientData
{
Type = (IngredientType)1,
SpecificIngredient = itemPrefab
});
enchantmentRecipeForID.CompatibleEquipments = new EquipmentData
{
EquipmentTag = enchantmentRecipeForID.CompatibleEquipments.EquipmentTag,
CompatibleEquipments = list.ToArray()
};
return true;
}
return false;
}
public static Item MakeItem(int newID, int targetID, string name = null, string description = null, string identifierName = null)
{
Item val = TryCloneTargetItem(newID, targetID, newID + "_" + identifierName);
ApplyNameAndDescription(val, name, description);
return val;
}
public static Skill MakeSkill(int newID, int targetID, string name = null, string description = null, string identifierName = null, int? manaCost = 0, int? staminaCost = 0, int? healthCost = 0, bool? ignoreLearnNotification = null, bool? hideInUI = null)
{
Item obj = MakeItem(newID, targetID, name, description, identifierName);
Skill val = (Skill)(object)((obj is Skill) ? obj : null);
if (manaCost.HasValue)
{
val.ManaCost = manaCost.GetValueOrDefault();
}
if (healthCost.HasValue)
{
val.HealthCost = healthCost.GetValueOrDefault();
}
if (staminaCost.HasValue)
{
val.StaminaCost = staminaCost.GetValueOrDefault();
}
val.IgnoreLearnNotification = ignoreLearnNotification.GetValueOrDefault();
return val;
}
public static Item TryCloneTargetItem(int newID, int targetID, string identifierName = null)
{
Dictionary<string, Item> itemPrefabDictionary = ItemPrefabDictionary;
Item item = GetItem(targetID.ToString());
if ((Object)(object)item == (Object)null)
{
TinyHelper.TinyHelperPrint("Could not find target item with ID " + targetID + ".");
return null;
}
if ((Object)(object)((Component)item).gameObject.GetComponent<Item>() == (Object)null)
{
TinyHelper.TinyHelperPrint(((Object)item).name + " is does not have an Item component.");
return null;
}
GameObject val = Object.Instantiate<GameObject>(((Component)item).gameObject);
val.SetActive(false);
Object.DontDestroyOnLoad((Object)(object)val);
Item component = val.GetComponent<Item>();
component.ItemID = newID;
((Object)component).name = identifierName ?? (newID + "_" + component.Name.Replace(" ", ""));
ItemPrefabDictionary.Add(component.ItemID.ToString(), component);
return component;
}
public static void ApplyNameAndDescription(Item item, string name, string description)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Expected O, but got Unknown
ItemLocalization value = new ItemLocalization(name, description);
At.SetValue(name, typeof(Item), item, "m_name");
if (ItemLocalizationDictionary.ContainsKey(item.ItemID))
{
ItemLocalizationDictionary[item.ItemID] = value;
}
else
{
ItemLocalizationDictionary.Add(item.ItemID, value);
}
}
private static Item GetItem(int itemID)
{
return GetItem(itemID.ToString());
}
private static Item GetItem(string itemID)
{
return ItemPrefabDictionary[itemID];
}
}
public class TinyHelperRPCManager : MonoBehaviour
{
public static TinyHelperRPCManager Instance;
internal void Start()
{
Instance = this;
PhotonView val = ((Component)this).gameObject.AddComponent<PhotonView>();
val.viewID = 954;
Debug.Log((object)("Registered TinyHelpertRPC with ViewID " + ((MonoBehaviour)this).photonView.viewID));
}
[PunRPC]
public void ApplyAddImbueEffectRPC(string weaponGUID, int infusionID, float duration)
{
Item item = ItemManager.Instance.GetItem(weaponGUID);
Weapon val = (Weapon)(object)((item is Weapon) ? item : null);
? val2 = val;
EffectPreset effectPreset = ResourcesPrefabManager.Instance.GetEffectPreset(infusionID);
((Weapon)val2).AddImbueEffect((ImbueEffectPreset)(object)((effectPreset is ImbueEffectPreset) ? effectPreset : null), duration, (ImbueStack)null);
}
[PunRPC]
public void CharacterForceCancelRPC(string characterGUID, bool bool1, bool bool2)
{
Character character = CharacterManager.Instance.GetCharacter(characterGUID);
character.ForceCancel(bool1, bool2);
}
}
public class QuestRequirements
{
public static bool HasQuestEvent(string questEventUID)
{
return QuestEventManager.Instance.GetEventCurrentStack(questEventUID) > 0;
}
public static bool HasQuestKnowledge(Character character, int[] questIDs, LogicType logicType, bool inverted = false, bool requireCompleted = false)
{
bool flag = false;
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterInventory inventory = character.Inventory;
obj = ((inventory != null) ? inventory.QuestKnowledge : null);
}
CharacterQuestKnowledge q = (CharacterQuestKnowledge)obj;
if (q != null)
{
IEnumerable<bool> source = questIDs.Select((int x) => ((CharacterKnowledge)q).IsItemLearned(x) && (q.IsQuestCompleted(x) || !requireCompleted));
flag = flag || ((logicType == LogicType.Any) ? source.Any((bool x) => x) : source.All((bool x) => x));
}
return flag ^ inverted;
}
public static bool HasQuestKnowledgeLocal(Character character, int[] questIDs, LogicType logicType, bool inverted = false, bool requireCompleted = false)
{
bool flag = false;
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterInventory inventory = character.Inventory;
obj = ((inventory != null) ? inventory.QuestKnowledge : null);
}
CharacterQuestKnowledge q = (CharacterQuestKnowledge)obj;
if (q != null)
{
IEnumerable<bool> source = questIDs.Select((int x) => q.IsItemLearnedLocal(x) && (q.IsQuestCompletedLocal(x) || !requireCompleted));
flag = flag || ((logicType == LogicType.Any) ? source.Any((bool x) => x) : source.All((bool x) => x));
}
return flag ^ inverted;
}
}
public enum LogicType
{
Any,
All
}
public class SkillRequirements
{
public static bool SafeHasSkillKnowledge(Character character, int skillID)
{
bool? obj;
if (character == null)
{
obj = null;
}
else
{
CharacterInventory inventory = character.Inventory;
if (inventory == null)
{
obj = null;
}
else
{
CharacterSkillKnowledge skillKnowledge = inventory.SkillKnowledge;
obj = ((skillKnowledge != null) ? new bool?(((CharacterKnowledge)skillKnowledge).IsItemLearned(skillID)) : null);
}
}
bool? flag = obj;
return flag.GetValueOrDefault();
}
}
public class CustomTexture
{
public enum SpriteBorderTypes
{
None,
Item,
TrainerSkill
}
public enum IconName
{
m_itemIcon,
SkillTreeIcon
}
private static Dictionary<string, byte[]> m_loadedTextures;
private static Dictionary<string, byte[]> LoadedTextures
{
get
{
if (m_loadedTextures == null)
{
m_loadedTextures = new Dictionary<string, byte[]>();
}
return m_loadedTextures;
}
}
public static Texture2D LoadTexture(string filePath, int mipCount, bool linear, FilterMode filterMode, float? mipMapBias = null, string rootPath = null)
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Expected O, but got Unknown
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
filePath = (rootPath ?? TinyHelper.PLUGIN_ROOT_PATH) + filePath;
if (!LoadedTextures.ContainsKey(filePath))
{
LoadedTextures[filePath] = File.ReadAllBytes(filePath);
}
Texture2D val = new Texture2D(4, 4, (TextureFormat)12, mipCount > 0, linear);
((Texture)val).filterMode = filterMode;
((Texture)val).mipMapBias = mipMapBias ?? ((Texture)val).mipMapBias;
ImageConversion.LoadImage(val, LoadedTextures[filePath]);
((Texture)val).filterMode = (FilterMode)1;
return val;
}
public static Sprite MakeSprite(Texture2D texture, SpriteBorderTypes spriteBorderType)
{
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
float num;
float num2;
float num3;
float num4;
switch (spriteBorderType)
{
case SpriteBorderTypes.Item:
num = 1f;
num2 = 2f;
num3 = 2f;
num4 = 3f;
break;
case SpriteBorderTypes.TrainerSkill:
num = 1f;
num2 = 1f;
num3 = 1f;
num4 = 2f;
break;
default:
num = 0f;
num2 = 0f;
num3 = 0f;
num4 = 0f;
break;
}
return Sprite.Create(texture, new Rect(num, num3, (float)((Texture)texture).width - num2, (float)((Texture)texture).height - num4), new Vector2(0f, 0f), 100f, 0u);
}
}
public class CooldownChangeWeaponDamageTargetHealth : WeaponDamageTargetHealth
{
public float ExecuteSetCooldown = -1f;
public float HitKnockbackCooldown = -1f;
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
Item parentItem = ((Effect)this).ParentItem;
Skill val = (Skill)(object)((parentItem is Skill) ? parentItem : null);
if (val != null)
{
if (HitKnockbackCooldown != -1f && _affectedCharacter.IsInKnockback)
{
At.SetValue(HitKnockbackCooldown, typeof(Skill), val, "m_remainingCooldownTime");
}
bool isDead = _affectedCharacter.IsDead;
((WeaponDamage)this).ActivateLocally(_affectedCharacter, _infos);
if (!isDead && _affectedCharacter.IsDead && ExecuteSetCooldown != -1f)
{
At.SetValue(ExecuteSetCooldown, typeof(Skill), val, "m_remainingCooldownTime");
}
}
}
}
public class ToggleEffect : Effect
{
public StatusEffect StatusEffectInstance;
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
if (_affectedCharacter.StatusEffectMngr.HasStatusEffect(StatusEffectInstance.IdentifierName))
{
_affectedCharacter.StatusEffectMngr.CleanseStatusEffect(((Object)StatusEffectInstance).name);
}
else
{
_affectedCharacter.StatusEffectMngr.AddStatusEffect(StatusEffectInstance, ((Effect)this).SourceCharacter);
}
}
}
public class AddThenSpreadStatus : AddStatusEffect
{
public float Range;
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
if (base.AffectController)
{
_affectedCharacter = ((Effect)this).OwnerCharacter;
}
if ((Object)(object)((_affectedCharacter != null) ? _affectedCharacter.StatusEffectMngr : null) == (Object)null || (Object)(object)base.Status == (Object)null)
{
return;
}
if (_affectedCharacter.StatusEffectMngr.HasStatusEffect(base.Status.IdentifierName))
{
List<Character> source = new List<Character>();
CharacterManager.Instance.FindCharactersInRange(_affectedCharacter.CenterPosition, Range, ref source);
foreach (Character item in source.Where((Character c) => !c.IsAlly(((Effect)this).SourceCharacter)))
{
((AddStatusEffect)this).ActivateLocally(item, _infos);
}
}
((AddStatusEffect)this).ActivateLocally(_affectedCharacter, _infos);
}
}
public class EmptyOffHandCondition : EffectCondition
{
public bool AllowDrawnTwoHandedInRight = false;
public bool AllowSheathedTwoHandedInLeft = false;
protected override bool CheckIsValid(Character _affectedCharacter)
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)_affectedCharacter == (Object)null)
{
goto IL_00dc;
}
bool? obj;
if (_affectedCharacter == null)
{
obj = null;
}
else
{
Equipment leftHandEquipment = _affectedCharacter.LeftHandEquipment;
obj = ((leftHandEquipment != null) ? new bool?(((Item)leftHandEquipment).HasTag(TinyTagManager.GetOrMakeTag("HandsFreeTag"))) : null);
}
if (obj ?? true)
{
bool? obj2;
if (_affectedCharacter == null)
{
obj2 = null;
}
else
{
Weapon currentWeapon = _affectedCharacter.CurrentWeapon;
obj2 = ((currentWeapon != null) ? new bool?(((Equipment)currentWeapon).TwoHanded) : null);
}
bool? flag = obj2;
if (!flag.GetValueOrDefault())
{
goto IL_00dc;
}
}
if (!_affectedCharacter.Sheathed && AllowDrawnTwoHandedInRight)
{
Weapon currentWeapon2 = _affectedCharacter.CurrentWeapon;
if (currentWeapon2 == null || ((Equipment)currentWeapon2).TwoHandedRight)
{
goto IL_00dc;
}
}
int result;
if (_affectedCharacter.Sheathed && AllowSheathedTwoHandedInLeft)
{
Weapon currentWeapon3 = _affectedCharacter.CurrentWeapon;
result = ((currentWeapon3 == null || ((Equipment)currentWeapon3).TwoHandedRight) ? 1 : 0);
}
else
{
result = 0;
}
goto IL_00dd;
IL_00dc:
result = 1;
goto IL_00dd;
IL_00dd:
return (byte)result != 0;
}
public static ActivationCondition AddToSkill(Skill skill, bool allowDrawnTwoHandedInRight = false, bool allowSheathedTwoHandedInLeft = false)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
GameObject val = new GameObject("EmptyOffhandCondition");
ActivationCondition val2 = new ActivationCondition();
EmptyOffHandCondition emptyOffHandCondition = val.AddComponent<EmptyOffHandCondition>();
Object.DontDestroyOnLoad((Object)(object)emptyOffHandCondition);
val.SetActive(false);
val2.Condition = (EffectCondition)(object)emptyOffHandCondition;
emptyOffHandCondition.AllowDrawnTwoHandedInRight = allowDrawnTwoHandedInRight;
emptyOffHandCondition.AllowSheathedTwoHandedInLeft = allowSheathedTwoHandedInLeft;
At.SetValue("Requires an empty left hand.", typeof(ActivationCondition), val2, "m_defaultMessage");
List<ActivationCondition> list = (At.GetValue(typeof(Skill), skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
list.Add(val2);
At.SetValue(list.ToArray(), typeof(Skill), skill, "m_additionalConditions");
return val2;
}
}
internal class InputEnablerEffect : Effect
{
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
StatusEffect parentStatusEffect = base.m_parentStatusEffect;
if (parentStatusEffect != null && (double)((_affectedCharacter != null) ? _affectedCharacter.AnimMoveSqMagnitude : 0f) > 0.1 && (double)parentStatusEffect.Age > 0.5)
{
StatusEffectManager statusEffectMngr = _affectedCharacter.StatusEffectMngr;
if (statusEffectMngr != null)
{
statusEffectMngr.CleanseStatusEffect(parentStatusEffect.IdentifierName);
}
_affectedCharacter.ForceCancel(true, true);
}
}
}
internal class TinyUnofficialPatches
{
}
[HarmonyPatch(typeof(Skill), "HasEnoughMana")]
public class Skill_HasEnoughMana
{
[HarmonyPostfix]
public static void Postfix(Skill __instance, ref bool _tryingToActivate, ref bool __result)
{
if (__instance.ManaCost <= 0f)
{
__result = true;
}
}
}
[HarmonyPatch(typeof(Skill), "HasEnoughStamina")]
public class Skill_HasEnoughStamina
{
[HarmonyPostfix]
public static void Postfix(Skill __instance, ref bool _tryingToActivate, ref bool __result)
{
if (__instance.StaminaCost <= 0f)
{
__result = true;
}
}
}
[HarmonyPatch(typeof(Skill), "HasEnoughHealth")]
public class Skill_HasEnoughHealth
{
[HarmonyPostfix]
public static void Postfix(Skill __instance, ref bool _tryingToActivate, ref bool __result)
{
if (__instance.HealthCost <= 0f)
{
__result = true;
}
}
}
public class WeaponManager
{
public static Dictionary<WeaponType, float> Speeds = new Dictionary<WeaponType, float>
{
{
(WeaponType)0,
1.251f
},
{
(WeaponType)1,
1.399f
},
{
(WeaponType)2,
1.629f
},
{
(WeaponType)51,
1.71f
},
{
(WeaponType)52,
1.667f
},
{
(WeaponType)53,
2.036f
},
{
(WeaponType)54,
1.499f
},
{
(WeaponType)50,
1.612f
}
};
public static Dictionary<WeaponType, float> HeavyImpactModifiers = new Dictionary<WeaponType, float>
{
{
(WeaponType)0,
1.3f
},
{
(WeaponType)1,
1.3f
},
{
(WeaponType)2,
2.5f
},
{
(WeaponType)51,
1.5f
},
{
(WeaponType)52,
1.3f
},
{
(WeaponType)53,
2f
},
{
(WeaponType)54,
1.2f
},
{
(WeaponType)50,
1.3f
}
};
}
public class TinyTagManager
{
public static Tag GetOrMakeTag(string name)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
Tag val = ((IEnumerable<Tag>)TagSourceManager.Instance.DbTags).FirstOrDefault((Func<Tag, bool>)((Tag x) => x.TagName == name));
if (val == Tag.None)
{
((Tag)(ref val))..ctor(TagSourceManager.TagRoot, name);
((Tag)(ref val)).SetTagType((TagTypes)0);
TagSourceManager.Instance.DbTags.Add(val);
TagSourceManager.Instance.RefreshTags(true);
return val;
}
return val;
}
public static string[] GetOrMakeTags(string[] names)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
foreach (string name in names)
{
GetOrMakeTag(name);
}
return names;
}
public static string[] GetSafeTags(string[] tags)
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
List<string> list = new List<string>();
foreach (string tag in tags)
{
((IEnumerable<Tag>)TagSourceManager.Instance.DbTags).FirstOrDefault((Func<Tag, bool>)((Tag x) => x.TagName == tag || ((Tag)(ref x)).UID == UID.op_Implicit(tag)));
if (true)
{
list.Add(tag);
}
}
return list.ToArray();
}
}
public class TinyUIDManager
{
public static UID MakeUID(string name, string modGUID, string category)
{
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
if (modGUID == null || name == null || category == null)
{
Debug.LogError((object)$"TinyUIDManager.MakeUID({name}, {modGUID}, {category} returned a random UID. This will cause trouble in multiplayer!");
return default(UID);
}
return new UID((modGUID + "." + category + "." + name).Replace(" ", "").ToLower());
}
}
[BepInPlugin("com.ehaugw.tinyhelper", "Tiny Helper", "4.8.4")]
public class TinyHelper : BaseUnityPlugin
{
public delegate void DescriptionModifier(Item item, ref string description);
[HarmonyPatch(typeof(ResourcesPrefabManager), "Load")]
public class ResourcesPrefabManager_Load
{
[HarmonyPostfix]
public static void Postfix()
{
ResourcesPrefabManager instance = ResourcesPrefabManager.Instance;
if (instance != null && instance.Loaded)
{
TinyHelper.OnPrefabLoaded();
}
}
}
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class Item_Description
{
[HarmonyPostfix]
public static void Postfix(Item __instance, ref string __result)
{
OnDescriptionModified(__instance, ref __result);
}
}
public const string GUID = "com.ehaugw.tinyhelper";
public const string VERSION = "4.8.4";
public const string NAME = "Tiny Helper";
public static DescriptionModifier OnDescriptionModified;
public static TinyHelper Instance;
private static int tinyHelperPrintedMessages;
public static string PLUGIN_ROOT_PATH => typeof(TinyHelper).Assembly.Location + "\\..\\..\\";
public static event Action OnPrefabLoaded;
internal void Awake()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
Instance = this;
GameObject val = new GameObject("TinyHelperRPC");
Object.DontDestroyOnLoad((Object)(object)val);
val.AddComponent<TinyHelperRPCManager>();
Harmony val2 = new Harmony("com.ehaugw.tinyhelper");
val2.PatchAll();
}
public static void TinyHelperPrint(string str)
{
Debug.Log((object)("TinyHelper #" + tinyHelperPrintedMessages++ + ": " + str));
}
static TinyHelper()
{
TinyHelper.OnPrefabLoaded = delegate
{
};
OnDescriptionModified = delegate
{
};
tinyHelperPrintedMessages = 0;
}
}
public class DelayedTask
{
public static Task GetTask(int milliseconds)
{
TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
new Timer(delegate
{
tcs.SetResult(null);
}).Change(milliseconds, -1);
return tcs.Task;
}
}
public class TinyEffectManager
{
public static StatusEffect MakeStatusEffectPrefab(string effectName, string familyName, string description, float lifespan, float refreshRate, StackBehaviors stackBehavior, string targetStatusName, bool isMalusEffect, string tagID = null, UID? uid = null, string modGUID = null, string iconFileName = null, string displayName = null, string rootPath = null)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_0168: Expected O, but got Unknown
//IL_0187: Unknown result type (might be due to invalid IL or missing references)
//IL_018c: Unknown result type (might be due to invalid IL or missing references)
//IL_018f: Expected O, but got Unknown
//IL_0194: Expected O, but got Unknown
//IL_0219: Unknown result type (might be due to invalid IL or missing references)
//IL_0210: Unknown result type (might be due to invalid IL or missing references)
//IL_021e: Unknown result type (might be due to invalid IL or missing references)
//IL_0238: Unknown result type (might be due to invalid IL or missing references)
//IL_023f: Expected O, but got Unknown
Dictionary<string, StatusEffect> dictionary = At.GetValue(typeof(ResourcesPrefabManager), null, "STATUSEFFECT_PREFABS") as Dictionary<string, StatusEffect>;
StatusEffectFamily val = MakeStatusEffectFamiliy(familyName, stackBehavior, -1, (LengthTypes)0);
GameObject val2 = TinyGameObjectManager.InstantiateClone(((Component)dictionary[targetStatusName]).gameObject, effectName, setActive: false, dontDestroyOnLoad: true);
StatusEffect obj = val2.GetComponent<StatusEffect>() ?? val2.AddComponent<StatusEffect>();
StatusEffect val3 = obj;
dictionary[effectName] = obj;
StatusEffect val4 = val3;
At.SetValue(effectName, typeof(StatusEffect), val4, "m_identifierName");
At.SetValue<StatusEffectFamily>(val, typeof(StatusEffect), val4, "m_bindFamily");
At.SetValue(displayName ?? effectName, typeof(StatusEffect), val4, "m_nameLocKey");
At.SetValue(description, typeof(StatusEffect), val4, "m_descriptionLocKey");
val4.RefreshRate = refreshRate;
val4.IsMalusEffect = isMalusEffect;
At.SetValue<EffectSignatureModes>((EffectSignatureModes)1, typeof(StatusEffect), val4, "m_effectSignatureMode");
At.SetValue<FamilyModes>((FamilyModes)0, typeof(StatusEffect), val4, "m_familyMode");
val4.RequiredStatus = null;
val4.RemoveRequiredStatus = false;
if (iconFileName != null)
{
val4.OverrideIcon = CustomTexture.MakeSprite(CustomTexture.LoadTexture(iconFileName, 0, linear: false, (FilterMode)0, null, rootPath), CustomTexture.SpriteBorderTypes.None);
}
TagSourceSelector value = ((tagID != null) ? new TagSourceSelector(TagSourceManager.Instance.GetTag(UID.op_Implicit(tagID))) : new TagSourceSelector());
At.SetValue<TagSourceSelector>(value, typeof(StatusEffect), val4, "m_effectType");
StatusData val5 = new StatusData(val4.StatusData);
StatusData val6 = val5;
val4.StatusData = val5;
StatusData val7 = val6;
val7.LifeSpan = lifespan;
List<StatusData> list = At.GetValue(typeof(StatusEffect), val4, "m_statusStack") as List<StatusData>;
list[0] = val7;
Object.Destroy((Object)(object)((Component)val2.GetComponentInChildren<EffectSignature>()).gameObject);
EffectSignature val8 = TinyGameObjectManager.MakeFreshObject("Signature", setActive: true, dontDestroyOnLoad: true).AddComponent<EffectSignature>();
((Object)val8).name = "Signature";
val8.SignatureUID = (UID)(((??)uid) ?? TinyUIDManager.MakeUID(effectName, modGUID, "Status Effect"));
EffectSignature effectSignature = (val7.EffectSignature = val8);
val.EffectSignature = effectSignature;
StatusEffectFamilySelector val10 = new StatusEffectFamilySelector();
((UidSelector<StatusEffectFamily>)(object)val10).Set(val);
At.SetValue<StatusEffectFamilySelector>(val10, typeof(StatusEffect), val4, "m_stackingFamily");
return val4;
}
public static StatusEffectFamily MakeStatusEffectFamiliy(string familyName, StackBehaviors stackBehavior, int maxStackCount, LengthTypes lengthType, UID? uid = null, string modGUID = null)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
StatusEffectFamily val = new StatusEffectFamily();
uid = (UID)(((??)uid) ?? ((modGUID != null) ? TinyUIDManager.MakeUID(familyName, modGUID, "Status Effect Family") : UID.Generate()));
At.SetValue<UID>(uid.Value, typeof(StatusEffectFamily), val, "m_uid");
val.Name = familyName;
val.StackBehavior = stackBehavior;
val.MaxStackCount = maxStackCount;
val.LengthType = lengthType;
return val;
}
public static void SetNameAndDesc(EffectPreset imbueEffect, string name, string desc)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Expected O, but got Unknown
ItemLocalization value = new ItemLocalization(name, desc);
if (At.GetValue(typeof(LocalizationManager), LocalizationManager.Instance, "m_itemLocalization") is Dictionary<int, ItemLocalization> dictionary)
{
if (dictionary.ContainsKey(imbueEffect.PresetID))
{
dictionary[imbueEffect.PresetID] = value;
}
else
{
dictionary.Add(imbueEffect.PresetID, value);
}
}
}
public static AddStatusEffectBuildUp MakeStatusEffectBuildup(Transform effectTransform, string statusEffectName, float buildup)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
AddStatusEffectBuildUp val = ((Component)effectTransform).gameObject.AddComponent<AddStatusEffectBuildUp>();
val.BuildUpValue = buildup;
val.Status = ResourcesPrefabManager.Instance.GetStatusEffectPrefab(statusEffectName);
((Effect)val).OverrideEffectCategory = (EffectCategories)4;
return val;
}
public static AddStatusEffect MakeStatusEffectChance(Transform effectTransform, string statusEffectName, int chance)
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
AddStatusEffect val = ((Component)effectTransform).gameObject.AddComponent<AddStatusEffect>();
val.SetChanceToContract(chance);
val.Status = ResourcesPrefabManager.Instance.GetStatusEffectPrefab(statusEffectName);
((Effect)val).OverrideEffectCategory = (EffectCategories)4;
return val;
}
public static WeaponDamage MakeWeaponDamage(Transform effectTransform, float baseDamage, float damageScaling, Types damageType, float knockback)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Expected O, but got Unknown
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
WeaponDamage val = ((Component)effectTransform).gameObject.AddComponent<WeaponDamage>();
val.WeaponDamageMult = 1f + damageScaling;
val.OverrideDType = damageType;
((PunctualDamage)val).Damages = (DamageType[])(object)new DamageType[1]
{
new DamageType(damageType, baseDamage)
};
((Effect)val).OverrideEffectCategory = (EffectCategories)4;
((PunctualDamage)val).Knockback = knockback;
return val;
}
public static WeaponDamage MakeDynamicWeaponDamage(Transform effectTransform, IDamageScaler damageScaler)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
DynamicWeaponDamage dynamicWeaponDamage = ((Component)effectTransform).gameObject.AddComponent<DynamicWeaponDamage>();
((Effect)dynamicWeaponDamage).OverrideEffectCategory = (EffectCategories)4;
dynamicWeaponDamage.DamageScaler = damageScaler;
return (WeaponDamage)(object)dynamicWeaponDamage;
}
public static void MakeAbsorbHealth(Transform effectTransform, float absorbRatio)
{
AddAbsorbHealth obj = ((Component)effectTransform).gameObject.AddComponent<AddAbsorbHealth>();
At.SetValue(absorbRatio, typeof(AddAbsorbHealth), obj, "m_healthRatio");
}
public static ImbueEffectPreset MakeImbuePreset(int imbueID, string name, string description, string iconFileName = null, int? visualEffectID = null, List<Skill> replaceOnSkills = null, string statusEffectName = null, int? chanceToContract = null, int? buildUp = null, float? scalingDamage = null, float? flatDamage = null, float? knockback = null, Types? damageType = null)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0236: Unknown result type (might be due to invalid IL or missing references)
//IL_0247: Expected O, but got I4
//IL_023b->IL023b: Incompatible stack types: O vs I4
//IL_0234->IL023b: Incompatible stack types: I4 vs O
//IL_0234->IL023b: Incompatible stack types: O vs I4
Dictionary<int, EffectPreset> dictionary = (Dictionary<int, EffectPreset>)At.GetValue(typeof(ResourcesPrefabManager), null, "EFFECTPRESET_PREFABS");
if (!dictionary.ContainsKey(imbueID))
{
GameObject val = new GameObject(imbueID + "_" + name.Replace(" ", ""));
val.SetActive(true);
Object.DontDestroyOnLoad((Object)(object)val);
ImbueEffectPreset val2 = val.AddComponent<ImbueEffectPreset>();
((Object)val2).name = imbueID + "_" + name.Replace(" ", "");
At.SetValue(imbueID, typeof(EffectPreset), val2, "m_StatusEffectID");
At.SetValue(name, typeof(ImbueEffectPreset), val2, "m_imbueNameKey");
At.SetValue(description, typeof(ImbueEffectPreset), val2, "m_imbueDescKey");
if (visualEffectID.HasValue)
{
val2.ImbueStatusIcon = ((ImbueEffectPreset)dictionary[visualEffectID.Value]).ImbueStatusIcon;
val2.ImbueFX = ((ImbueEffectPreset)dictionary[visualEffectID.Value]).ImbueFX;
}
if (iconFileName != null)
{
val2.ImbueStatusIcon = CustomTexture.MakeSprite(CustomTexture.LoadTexture(iconFileName, 0, linear: false, (FilterMode)0), CustomTexture.SpriteBorderTypes.None);
}
SetNameAndDesc((EffectPreset)(object)val2, name, description);
dictionary.Add(imbueID, (EffectPreset)(object)val2);
if (statusEffectName != null && chanceToContract.GetValueOrDefault() > 0)
{
MakeStatusEffectChance(TinyGameObjectManager.GetOrMake(((Component)val2).transform, "Effects", setActive: true, dontDestroyOnLoad: true), statusEffectName, chanceToContract.GetValueOrDefault());
}
if (statusEffectName != null && buildUp.GetValueOrDefault() > 0)
{
MakeStatusEffectBuildup(TinyGameObjectManager.GetOrMake(((Component)val2).transform, "Effects", setActive: true, dontDestroyOnLoad: true), statusEffectName, buildUp.GetValueOrDefault());
}
if (scalingDamage.GetValueOrDefault() > 0f || flatDamage.GetValueOrDefault() > 0f || knockback.GetValueOrDefault() > 0f)
{
object obj = TinyGameObjectManager.GetOrMake(((Component)val2).transform, "Effects", setActive: true, dontDestroyOnLoad: true);
float valueOrDefault = flatDamage.GetValueOrDefault();
valueOrDefault = scalingDamage.GetValueOrDefault();
Types? val3 = damageType;
int num;
if (val3.HasValue)
{
obj = val3.GetValueOrDefault();
num = (int)obj;
}
else
{
num = 9;
obj = num;
num = (int)obj;
}
MakeWeaponDamage((Transform)(object)num, valueOrDefault, valueOrDefault, (Types)obj, knockback.GetValueOrDefault());
}
foreach (Skill item in replaceOnSkills ?? new List<Skill>())
{
if ((Object)(object)item != (Object)null)
{
((ImbueObject)((Component)item).GetComponentInChildren<ImbueWeapon>()).ImbuedEffect = val2;
}
}
return val2;
}
return null;
}
public static EffectPreset GetEffectPreset(int effectID)
{
Dictionary<int, EffectPreset> dictionary = (Dictionary<int, EffectPreset>)At.GetValue(typeof(ResourcesPrefabManager), null, "EFFECTPRESET_PREFABS");
if (dictionary.ContainsKey(effectID))
{
EffectPreset val = dictionary[effectID];
if (val != null)
{
return val;
}
}
return null;
}
public static void AddStatusEffectForDuration(Character character, string _statusIdentifier, float duration, Character source = null, float chance = 1f)
{
StatusEffect statusEffectPrefab = ResourcesPrefabManager.Instance.GetStatusEffectPrefab(_statusIdentifier);
AddStatusEffectForDuration(character, statusEffectPrefab, duration, source, chance);
}
public static void AddStatusEffectForDuration(Character character, StatusEffect statusEffect, float duration, Character source = null, float chance = 1f)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Expected O, but got Unknown
StatusEffectManager statusEffectMngr = character.StatusEffectMngr;
if (statusEffectMngr != null)
{
StatusData statusData = statusEffect.StatusData;
statusEffect.StatusData = new StatusData(statusData);
statusEffect.StatusData.LifeSpan = duration;
statusEffectMngr.AddStatusEffect(statusEffect, source);
statusEffect.StatusData = statusData;
}
}
public static void ChangeEffectPresetDamageTypeData(EffectPreset effect, Types originalType, Types newType)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
PunctualDamage[] componentsInChildren = ((Component)effect).gameObject.GetComponentsInChildren<PunctualDamage>();
foreach (PunctualDamage val in componentsInChildren)
{
WeaponDamage val2 = (WeaponDamage)(object)((val is WeaponDamage) ? val : null);
if (val2 != null && val2.OverrideDType == originalType)
{
val2.OverrideDType = newType;
}
DamageType[] damages = val.Damages;
foreach (DamageType val3 in damages)
{
if (val3.Type == originalType)
{
val3.Type = newType;
}
}
}
}
}
public class CasualStagger : Effect
{
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
Stagger(_affectedCharacter);
}
public static void Stagger(Character character)
{
At.SetValue<HurtType>((HurtType)1, typeof(Character), character, "m_hurtType");
character.Animator.SetTrigger("Knockback");
character.ForceCancel(false, true);
((MonoBehaviour)character).Invoke("DelayedForceCancel", 0.3f);
if (Object.op_Implicit((Object)(object)character.CharacterUI))
{
character.CharacterUI.OnPlayerKnocked();
}
}
}
public class CooldownChangeWeaponDamage : WeaponDamage
{
public float ExecutionSetCooldown = -1f;
public float HitKnockbackCooldown = -1f;
protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
Item parentItem = ((Effect)this).ParentItem;
Skill val = (Skill)(object)((parentItem is Skill) ? parentItem : null);
if (val != null)
{
if (HitKnockbackCooldown != -1f && _affectedCharacter.IsInKnockback)
{
At.SetValue(HitKnockbackCooldown, typeof(Skill), val, "m_remainingCooldownTime");
}
bool isDead = _affectedCharacter.IsDead;
((WeaponDamage)this).ActivateLocally(_affectedCharacter, _infos);
if (!isDead && _affectedCharacter.IsDead && ExecutionSetCooldown != -1f)
{
At.SetValue(ExecutionSetCooldown, typeof(Skill), val, "m_remainingCooldownTime");
}
}
}
}
}
namespace TinyHelper.Interfaces
{
public interface IDamageScaler
{
float GetWeaponDamageMult(WeaponDamage weaponDamage);
Types GetOverrideDType(WeaponDamage weaponDamage);
DamageType[] GetDamages(WeaponDamage weaponDamage);
float GetKnockback(WeaponDamage weaponDamage);
}
}
namespace TinyHelper.Effects
{
public class DynamicWeaponDamage : WeaponDamage
{
public IDamageScaler DamageScaler = null;
private void Recalculate()
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
Console.WriteLine("recalculated");
Debug.WriteLine("recalculated");
base.WeaponDamageMult = DamageScaler.GetWeaponDamageMult((WeaponDamage)(object)this);
base.OverrideDType = DamageScaler.GetOverrideDType((WeaponDamage)(object)this);
((PunctualDamage)this).Damages = DamageScaler.GetDamages((WeaponDamage)(object)this);
((PunctualDamage)this).Knockback = DamageScaler.GetKnockback((WeaponDamage)(object)this);
}
protected override void StartInit()
{
Recalculate();
((WeaponDamage)this).StartInit();
}
public override Weapon BuildDamage(Character _targetCharacter, ref DamageList _list, ref float _knockback)
{
Recalculate();
return ((WeaponDamage)this).BuildDamage(_targetCharacter, ref _list, ref _knockback);
}
protected override void BuildDamage(Weapon _weapon, Character _targetCharacter, bool _isSkillOrShield, ref DamageList _list, ref float _knockback)
{
Recalculate();
((WeaponDamage)this).BuildDamage(_weapon, _targetCharacter, _isSkillOrShield, ref _list, ref _knockback);
}
protected override void ActivateLocally(Character _targetCharacter, object[] _infos)
{
Recalculate();
((WeaponDamage)this).ActivateLocally(_targetCharacter, _infos);
}
protected override DamageList DealHit(Character _targetCharacter)
{
Recalculate();
return ((WeaponDamage)this).DealHit(_targetCharacter);
}
public override float DamageMult(Character _targetCharacter, bool _isSkill)
{
Recalculate();
return ((WeaponDamage)this).DamageMult(_targetCharacter, _isSkill);
}
public override float KnockbackMult(Character _targetCharacter, bool _isSkill)
{
Recalculate();
return ((WeaponDamage)this).KnockbackMult(_targetCharacter, _isSkill);
}
}
public class ShootBlastFromEffect : ShootBlast
{
public override void Setup(TargetingSystem _targetSystem, Transform _parent)
{
Character sourceCharacter = ((Effect)this).SourceCharacter;
((Shooter)this).Setup(((sourceCharacter != null) ? sourceCharacter.TargetingSystem : null) ?? _targetSystem, _parent);
}
}
}