using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using System.Xml.Serialization;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using JohBenjiNPCWeapons;
using NodeCanvas.DialogueTrees;
using NodeCanvas.Framework;
using NodeCanvas.Tasks.Actions;
using SideLoader;
using SideLoader.Animation;
using SideLoader.Model;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("JohBenjiNPCWeapons")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("JohBenjiNPCWeapons")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("c5450fe0-edcf-483f-b9ea-4b1ef9d36da7")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
public class AxeOfGiantKindPatch : NPCWeaponPatchClass
{
public AxeOfGiantKindPatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
if (Object.op_Implicit((Object)(object)Item))
{
Transform itemVisual = Item.GetItemVisual(Item.HasSpecialVisualPrefab);
if (Object.op_Implicit((Object)(object)itemVisual))
{
Transform val = ((Component)itemVisual).transform.Find("OffHand");
GameObject gameObject = ((Component)val).gameObject;
Object.Destroy((Object)(object)gameObject);
}
}
}
}
public class BloodSpearPatch : NPCWeaponPatchClass
{
public BloodSpearPatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Expected O, but got Unknown
Object.Destroy((Object)(object)((Component)Item).GetComponent<DestroyOnOwnerDeath>());
GameObject gameObject = ((Component)Item).gameObject;
if (Object.op_Implicit((Object)(object)gameObject))
{
GameObject val = new GameObject();
((Object)val).name = "InteractionHolder";
InteractionActivator val2 = val.AddComponent<InteractionActivator>();
InteractionTake val3 = val.AddComponent<InteractionTake>();
InteractionTriggerBase val4 = val.AddComponent<InteractionTriggerBase>();
val.transform.parent = gameObject.transform;
MeleeWeapon component = gameObject.GetComponent<MeleeWeapon>();
((Item)component).m_interactionActivator = val2;
((Item)component).m_interactionTrigger = val4;
val2.BasicInteraction = (IInteraction)(object)gameObject.AddComponent<ItemInteraction>();
val2.m_defaultBasicInteraction = (IInteraction)(object)val3;
val2.m_itemPreview = (Item)(object)component;
val2.m_sceneBasicInteraction = (InteractionBase)(object)val3;
val2.m_showItemPreview = true;
val2.tmp = (IItemInteraction)(object)val3;
val4.m_detectionColliderRadius = 0.1f;
val4.m_isEnvironmentTrigger = false;
val4.m_isItemInteractionTrigger = true;
val4.m_parentItem = (Item)(object)component;
}
}
}
public class BloodSwordPatch : NPCWeaponPatchClass
{
public BloodSwordPatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Expected O, but got Unknown
Object.Destroy((Object)(object)((Component)Item).GetComponent<DestroyOnOwnerDeath>());
GameObject gameObject = ((Component)Item).gameObject;
if (Object.op_Implicit((Object)(object)gameObject))
{
GameObject val = new GameObject();
((Object)val).name = "InteractionHolder";
InteractionActivator val2 = val.AddComponent<InteractionActivator>();
InteractionTake val3 = val.AddComponent<InteractionTake>();
InteractionTriggerBase val4 = val.AddComponent<InteractionTriggerBase>();
val.transform.parent = gameObject.transform;
MeleeWeapon component = gameObject.GetComponent<MeleeWeapon>();
((Item)component).m_interactionActivator = val2;
((Item)component).m_interactionTrigger = val4;
val2.BasicInteraction = (IInteraction)(object)gameObject.AddComponent<ItemInteraction>();
val2.m_defaultBasicInteraction = (IInteraction)(object)val3;
val2.m_itemPreview = (Item)(object)component;
val2.m_sceneBasicInteraction = (InteractionBase)(object)val3;
val2.m_showItemPreview = true;
val2.tmp = (IItemInteraction)(object)val3;
val4.m_detectionColliderRadius = 0.1f;
val4.m_isEnvironmentTrigger = false;
val4.m_isItemInteractionTrigger = true;
val4.m_parentItem = (Item)(object)component;
}
}
}
public class CageFistPatch : NPCWeaponPatchClass
{
public CageFistPatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
//IL_013b: 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_017d: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)Item))
{
return;
}
SLPack sLPack = SL.GetSLPack("johbenji-npcweapons");
if (sLPack == null)
{
return;
}
GameObject val = SL.GetSLPack("johbenji-npcweapons").AssetBundles["cagefisteffect"].LoadAsset<GameObject>("CageFistFX");
GameObject val2 = SL.GetSLPack("johbenji-npcweapons").AssetBundles["cagefisteffect"].LoadAsset<GameObject>("CageFistFX");
if (!((Object)(object)val != (Object)null) || !((Object)(object)val2 != (Object)null))
{
return;
}
GameObject val3 = Object.Instantiate<GameObject>(val);
GameObject val4 = Object.Instantiate<GameObject>(val2);
Transform itemVisual = Item.GetItemVisual(Item.HasSpecialVisualPrefab);
if ((Object)(object)itemVisual != (Object)null)
{
Transform val5 = itemVisual;
Transform val6 = ((Component)itemVisual).transform.Find("WeaponModel");
Transform val7 = ((Component)itemVisual).transform.Find("LeftHandModel");
if ((Object)(object)val6 != (Object)null && (Object)(object)val7 != (Object)null)
{
val3.transform.parent = val6;
val4.transform.parent = val7;
val3.transform.localEulerAngles = new Vector3(270f, 0f, 0f);
val3.transform.localPosition = new Vector3(-0.02f, 0f, -0.01f);
val4.transform.localEulerAngles = new Vector3(270f, 0f, 0f);
val4.transform.localPosition = new Vector3(0f, 0f, -0.02f);
}
}
}
}
public class DisplacementConfig
{
public Vector3 StartPosition = Vector3.right;
public Vector3 EndPosition = Vector3.right;
public float maxspeed;
public float initiallength;
public float totallength;
public Transform DisplacementObject;
}
public class DjinnsChakram : NPCWeaponPatchClass
{
public DjinnsChakram(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
if (!Object.op_Implicit((Object)(object)Item))
{
return;
}
Transform itemVisual = Item.GetItemVisual(Item.HasSpecialVisualPrefab);
if (!Object.op_Implicit((Object)(object)itemVisual))
{
return;
}
Transform val = ((Component)itemVisual).transform.Find("Model");
if (Object.op_Implicit((Object)(object)val))
{
Rotator val2 = ((Component)val).gameObject.AddComponent<Rotator>();
if (Object.op_Implicit((Object)(object)val2))
{
val2.rot_speed_x = 100f;
val2.rot_speed_y = 0f;
val2.rot_speed_z = 0f;
val2.local = true;
}
}
}
}
public class GenericAddComponentPatch<T> : NPCWeaponPatchClass where T : MonoBehaviour
{
public GenericAddComponentPatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
Transform itemVisual = Item.GetItemVisual(Item.HasSpecialVisualPrefab);
if (Object.op_Implicit((Object)(object)Item))
{
T val = ((Component)itemVisual).gameObject.AddComponent<T>();
}
}
}
public class GoldenLichCannonPatch : NPCWeaponPatchClass
{
public GoldenLichCannonPatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
if (Object.op_Implicit((Object)(object)Item))
{
Transform itemVisual = Item.GetItemVisual(Item.HasSpecialVisualPrefab);
Transform val = ((Component)itemVisual).transform.Find("GoldLichCannon(Clone)");
MeshRenderer component = ((Component)val).GetComponent<MeshRenderer>();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(2000080);
Transform itemVisual2 = itemPrefab.GetItemVisual(itemPrefab.HasSpecialVisualPrefab);
Transform val2 = ((Component)itemVisual2).transform.Find("Sword");
MeshRenderer component2 = ((Component)val2).GetComponent<MeshRenderer>();
Material[] array = (Material[])(object)new Material[((Renderer)component).materials.Length];
array[0] = ((Renderer)component2).materials[0];
array[1] = ((Renderer)component).materials[1];
array[2] = ((Renderer)component2).materials[0];
array[3] = ((Renderer)component2).materials[0];
((Renderer)component).materials = array;
}
}
}
public class MarbleParryAxePatch : NPCWeaponPatchClass
{
public MarbleParryAxePatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
if (Object.op_Implicit((Object)(object)Item))
{
Transform itemVisual = Item.GetItemVisual(Item.HasSpecialVisualPrefab);
Transform val = ((Component)itemVisual).transform.Find("AxeGreat");
((Object)val).name = "shield";
Transform val2 = ((Component)itemVisual).transform.Find("OffHand");
Object.Destroy((Object)(object)((Component)val2).gameObject);
Transform val3 = ((Component)itemVisual).transform.Find("Trail");
Object.Destroy((Object)(object)((Component)val3).gameObject);
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(2300000);
Transform itemVisual2 = itemPrefab.GetItemVisual(itemPrefab.HasSpecialVisualPrefab);
Transform val4 = ((Component)itemVisual2).transform.Find("RangeBlock");
GameObject val5 = Object.Instantiate<GameObject>(((Component)val4).gameObject);
val5.transform.parent = itemVisual;
Transform val6 = ((Component)itemVisual).transform.Find("RangeBlock(Clone)");
((Object)val6).name = "RangeBlock";
}
}
}
public abstract class NPCWeaponPatchClass
{
protected Item ItemReference;
public event Action<Item> OnPatchComplete;
protected NPCWeaponPatchClass(Item itemReference)
{
ItemReference = itemReference;
if ((Object)(object)itemReference != (Object)null)
{
global::JohBenjiNPCWeapons.JohBenjiNPCWeapons.Log.LogMessage((object)("Patching Item : " + itemReference.Name));
PatchItem(itemReference);
this.OnPatchComplete?.Invoke(itemReference);
global::JohBenjiNPCWeapons.JohBenjiNPCWeapons.Log.LogMessage((object)"Patching Complete.");
}
}
public abstract void PatchItem(Item Item);
public virtual void AddInteractorToItem(Item Item)
{
}
}
public class RingRotationConfig
{
public float Speed;
public Vector3 Axis = Vector3.right;
public Transform Ring;
}
public class ScarletFangKnucklesPatch : NPCWeaponPatchClass
{
public ScarletFangKnucklesPatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
if (Object.op_Implicit((Object)(object)Item))
{
Transform itemVisual = Item.GetItemVisual(Item.HasSpecialVisualPrefab);
Transform val = ((Component)itemVisual).transform.Find("ScarletFangKnuckles(Clone)");
MeshFilter component = ((Component)val).GetComponent<MeshFilter>();
MeshRenderer component2 = ((Component)val).GetComponent<MeshRenderer>();
Transform val2 = ((Component)itemVisual).transform.Find("LeftHandModel");
MeshFilter component3 = ((Component)val2).GetComponent<MeshFilter>();
MeshRenderer component4 = ((Component)val2).GetComponent<MeshRenderer>();
component3.mesh = component.mesh;
component3.sharedMesh = component.sharedMesh;
((Renderer)component4).material = ((Renderer)component2).material;
((Renderer)component4).materials[0] = ((Renderer)component2).materials[0];
}
}
}
public class WolfTowerShieldPatch : NPCWeaponPatchClass
{
public WolfTowerShieldPatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
if (Object.op_Implicit((Object)(object)Item))
{
Transform itemVisual = Item.GetItemVisual(Item.HasSpecialVisualPrefab);
Transform val = ((Component)itemVisual).transform.Find("WolfTowerShield(Clone)");
MeshRenderer component = ((Component)val).GetComponent<MeshRenderer>();
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(2100010);
Transform itemVisual2 = itemPrefab.GetItemVisual(itemPrefab.HasSpecialVisualPrefab);
Transform val2 = ((Component)itemVisual2).transform.Find("mdl_itm_prayerClaymore");
MeshRenderer component2 = ((Component)val2).GetComponent<MeshRenderer>();
((Renderer)component).material = ((Renderer)component2).material;
((Renderer)component).materials[0] = ((Renderer)component2).materials[0];
}
}
}
namespace JohBenjiNPCWeapons;
public class SL_ChangeImbueLifeSpan : SL_Effect, ICustomModel
{
public float LifeSpan;
public Type SLTemplateModel => typeof(SL_ChangeImbueLifeSpan);
public Type GameModel => typeof(ChangeImbueLifeSpan);
public override void ApplyToComponent<T>(T component)
{
ChangeImbueLifeSpan changeImbueLifeSpan = component as ChangeImbueLifeSpan;
changeImbueLifeSpan.LifeSpan = LifeSpan;
}
public override void SerializeEffect<T>(T effect)
{
ChangeImbueLifeSpan changeImbueLifeSpan = effect as ChangeImbueLifeSpan;
LifeSpan = changeImbueLifeSpan.LifeSpan;
}
}
public class ChangeImbueLifeSpan : Effect
{
public float LifeSpan;
private float imbueLifeSpan;
public override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Expected O, but got Unknown
if (!((Object)(object)_affectedCharacter != (Object)null) || !((Object)(object)_affectedCharacter.CurrentWeapon != (Object)null) || !(((object)_affectedCharacter.CurrentWeapon).GetType() == typeof(MeleeWeapon)))
{
return;
}
MeleeWeapon val = (MeleeWeapon)_affectedCharacter.CurrentWeapon;
if (!((Weapon)val).Imbued)
{
return;
}
ImbueStack firstImbue = ((Weapon)val).FirstImbue;
if (firstImbue != null)
{
imbueLifeSpan = firstImbue.RemainingLifespan;
if (((Effect)this).Lifespan < firstImbue.RemainingLifespan)
{
firstImbue.RemainingLifespan = imbueLifeSpan + LifeSpan;
}
else
{
firstImbue.RemainingLifespan = 0.1f;
}
}
}
}
internal class DTAppend
{
private List<Character> charactersSquad;
private List<Character> charactersSquad2;
private List<Character> charactersStatic;
private List<Character> characters;
private Dropable[] modifiedList;
public void Apply(Dictionary<string, Tuple<string, SL_DropTable>> inputdictionary)
{
JohBenjiNPCWeapons.Log.LogMessage((object)"JohBenjiNPCWeapons: Initiating function Apply() of class DTAppend");
charactersSquad = GetCharactersFromAISquads();
charactersSquad2 = GetCharactersFromAISquads2();
charactersStatic = GetCharactersFromStaticContainer();
characters = charactersSquad.Concat(charactersSquad2).Concat(charactersStatic).ToList();
foreach (Character character in characters)
{
GameObject gameObject = ((Component)character).gameObject;
foreach (KeyValuePair<string, Tuple<string, SL_DropTable>> item3 in inputdictionary)
{
string key = item3.Key;
SL_DropTable item = item3.Value.Item2;
if (!(character.Name == key) || !character.Alive)
{
continue;
}
LootableOnDeath component = gameObject.GetComponent<LootableOnDeath>();
if ((Object)(object)component != (Object)null && !component.m_lootable)
{
component.m_lootable = true;
}
CharacterInventory component2 = gameObject.GetComponent<CharacterInventory>();
if (!((Object)(object)component2 != (Object)null))
{
continue;
}
GameObject gameObject2 = ((Component)component2.Pouch).gameObject;
List<int> list = new List<int>();
Transform transform = gameObject2.transform;
List<Transform> list2 = new List<Transform>();
for (int i = 0; i < transform.childCount; i++)
{
Transform child = transform.GetChild(i);
ItemStats component3 = ((Component)child).gameObject.GetComponent<ItemStats>();
if ((Object)(object)component3 != (Object)null)
{
Item item2 = component3.m_item;
string itemIDString = item2.ItemIDString;
list.Add(int.Parse(itemIDString));
}
}
List<SL_ItemDrop> guaranteedDrops = item.GuaranteedDrops;
if (guaranteedDrops.Count <= 0)
{
continue;
}
foreach (SL_ItemDrop item4 in guaranteedDrops)
{
int droppedItemID = item4.DroppedItemID;
if (!IsIntegerInList(droppedItemID, list))
{
GameObject gameObject3 = ((Component)ResourcesPrefabManager.Instance.GetItemPrefab(droppedItemID)).gameObject;
Object.Instantiate<GameObject>(gameObject3).transform.parent = gameObject2.transform;
JohBenjiNPCWeapons.Log.LogMessage((object)$"JohBenjiNPCWeapons: Added item of UID:{droppedItemID} to {character.Name}");
}
}
}
}
}
private List<Character> GetCharactersFromAISquads()
{
List<Character> list = new List<Character>();
foreach (AISquad value in AISquadManager.Instance.m_allSquads.Values)
{
foreach (AISquadMember member in value.Members)
{
list.Add(member.Character);
}
}
JohBenjiNPCWeapons.Log.LogMessage((object)$"JohBenjiNPCWeapons: {list.Count} Characters found from GetCharactersFromAISquads()");
return list;
}
private List<Character> GetCharactersFromAISquads2()
{
List<Character> list = new List<Character>();
foreach (CharacterAI item in AISceneManager.Instance.m_characterAI)
{
Character character = ((CharacterControl)item).Character;
if ((Object)(object)character != (Object)null)
{
list.Add(character);
}
}
JohBenjiNPCWeapons.Log.LogMessage((object)$"JohBenjiNPCWeapons: {list.Count} Characters found from GetCharactersFromAISquads2()");
return list;
}
private List<Character> GetCharactersFromStaticContainer()
{
List<Character> list = new List<Character>();
Transform val = ((Component)AISceneManager.Instance).transform.Find("StaticEnemies");
if (Object.op_Implicit((Object)(object)val))
{
CharacterAI[] componentsInChildren = ((Component)val).GetComponentsInChildren<CharacterAI>();
foreach (CharacterAI val2 in componentsInChildren)
{
list.Add(((CharacterControl)val2).Character);
}
JohBenjiNPCWeapons.Log.LogMessage((object)$"JohBenjiNPCWeapons: {list.Count} Characters found from GetCharactersFromStaticContainer()");
}
else
{
JohBenjiNPCWeapons.Log.LogMessage((object)"JohBenjiNPCWeapons: Static Enemy Container not found");
}
return list;
}
private static T[] AddArrayElement<T>(T[] array, T element)
{
List<T> list = new List<T>(array);
list.Add(element);
return list.ToArray();
}
private bool CheckForChildrenWithName(Transform transform, string checkname)
{
for (int i = 0; i < transform.childCount; i++)
{
Transform child = transform.GetChild(i);
if (((Object)child).name == checkname)
{
return true;
}
}
return false;
}
public static bool IsIntegerInList(int targetInteger, List<int> integerList)
{
return integerList.Contains(targetInteger);
}
}
public class DTLoadByName : MonoBehaviour
{
public Dictionary<string, Tuple<string, SL_DropTable>> Load(Dictionary<string, Tuple<string, SL_DropTable>> dictionary)
{
dictionary = LoadDropTables(dictionary);
return dictionary;
}
private Dictionary<string, Tuple<string, SL_DropTable>> LoadDropTables(Dictionary<string, Tuple<string, SL_DropTable>> incompleteDictionary)
{
string text = "DropTables";
string[] xMLFilePaths = getXMLFilePaths(text);
JohBenjiNPCWeapons.Log.LogMessage((object)$"JohBenjiNPCWeapons: in directory [{text}], [{xMLFilePaths.Length}] xml(s) were found.");
List<SL_DropTable> list = new List<SL_DropTable>();
string[] array = xMLFilePaths;
foreach (string text2 in array)
{
string text3 = text2;
SL_DropTable val = null;
try
{
val = DeserializeFromXML<SL_DropTable>(text3);
}
catch (Exception ex)
{
JohBenjiNPCWeapons.Log.LogMessage((object)("Failed To deserialize file " + text3 + " exception -> \r\n " + ex.Message + " "));
}
if (val != null)
{
JohBenjiNPCWeapons.Log.LogMessage((object)("Created Droptable from the definition, UID : " + val.UID + "."));
list.Add(val);
}
}
Dictionary<string, Tuple<string, SL_DropTable>> dictionary = incompleteDictionary.ToDictionary((KeyValuePair<string, Tuple<string, SL_DropTable>> x) => x.Key, (KeyValuePair<string, Tuple<string, SL_DropTable>> x) => x.Value);
foreach (string key in dictionary.Keys)
{
if (!incompleteDictionary.ContainsKey(key))
{
continue;
}
Tuple<string, SL_DropTable> tuple = incompleteDictionary[key];
if (tuple == null)
{
continue;
}
string item = tuple.Item1;
foreach (SL_DropTable item2 in list)
{
if (item == item2.UID)
{
incompleteDictionary[key] = new Tuple<string, SL_DropTable>(incompleteDictionary[key].Item1, item2);
break;
}
}
}
return incompleteDictionary;
}
private string[] getXMLFilePaths(string sl_FolderName)
{
string location = ((BaseUnityPlugin)JohBenjiNPCWeapons.Instance).Info.Location;
string directoryName = Path.GetDirectoryName(location);
string text = directoryName + "\\Sideloader\\" + sl_FolderName + "\\";
JohBenjiNPCWeapons.Log.LogMessage((object)("JohBenjiNPCWeapons: Getting the folder '" + text + "'"));
if (!HasFolder(text))
{
JohBenjiNPCWeapons.Log.LogMessage((object)"JohBenjiNPCWeapons: DropTables Folder does not exist, creating folder...");
Directory.CreateDirectory(text);
}
return Directory.GetFiles(text, "*.xml", SearchOption.AllDirectories);
}
private bool HasFolder(string FolderLocation)
{
return Directory.Exists(FolderLocation);
}
public T DeserializeFromXML<T>(string path)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
StreamReader streamReader = new StreamReader(path);
T result = (T)xmlSerializer.Deserialize(streamReader.BaseStream);
streamReader.Close();
return result;
}
}
public class SL_IsAllied : SL_EffectCondition, ICustomModel
{
public Type SLTemplateModel => typeof(SL_IsAllied);
public Type GameModel => typeof(IsAllied);
public override void ApplyToComponent<T>(T component)
{
IsAllied isAllied = component as IsAllied;
}
public override void SerializeEffect<T>(T component)
{
IsAllied isAllied = component as IsAllied;
}
}
public class IsAllied : EffectCondition
{
private Character[] characters;
public override bool CheckIsValid(Character _affectedCharacter)
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Invalid comparison between Unknown and I4
characters = CharacterManager.Instance.Characters.ValuesArray;
int num = characters.Length;
Character[] array = characters;
foreach (Character val in array)
{
if ((Object)(object)_affectedCharacter == (Object)(object)val && (int)val.Faction == 1)
{
return true;
}
}
return false;
}
}
public class SL_IsPlayerCharacter : SL_EffectCondition, ICustomModel
{
public Type SLTemplateModel => typeof(SL_IsPlayerCharacter);
public Type GameModel => typeof(IsPlayerCharacter);
public override void ApplyToComponent<T>(T component)
{
IsPlayerCharacter isPlayerCharacter = component as IsPlayerCharacter;
}
public override void SerializeEffect<T>(T component)
{
IsPlayerCharacter isPlayerCharacter = component as IsPlayerCharacter;
}
}
public class IsPlayerCharacter : EffectCondition
{
public override bool CheckIsValid(Character _affectedCharacter)
{
return _affectedCharacter.IsLocalPlayer;
}
}
public class SL_ImbueDamageTypeCondition : SL_EffectCondition, ICustomModel
{
public Types DamageType;
public Type SLTemplateModel => typeof(SL_ImbueDamageTypeCondition);
public Type GameModel => typeof(ImbueDamageTypeCondition);
public override void ApplyToComponent<T>(T component)
{
//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)
ImbueDamageTypeCondition imbueDamageTypeCondition = component as ImbueDamageTypeCondition;
imbueDamageTypeCondition.DamageType = DamageType;
}
public override void SerializeEffect<T>(T component)
{
//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)
ImbueDamageTypeCondition imbueDamageTypeCondition = component as ImbueDamageTypeCondition;
imbueDamageTypeCondition.DamageType = DamageType;
}
}
public class ImbueDamageTypeCondition : EffectCondition
{
public Types DamageType;
public override bool CheckIsValid(Character _affectedCharacter)
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Expected O, but got Unknown
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Expected O, but got Unknown
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: 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_009c: Unknown result type (might be due to invalid IL or missing references)
Weapon currentWeapon = _affectedCharacter.CurrentWeapon;
if ((Object)(object)currentWeapon != (Object)null)
{
MeleeWeapon val = (MeleeWeapon)currentWeapon;
if ((Object)(object)val != (Object)null && ((Weapon)val).Imbued)
{
ImbueStack firstImbue = currentWeapon.FirstImbue;
if (firstImbue != null)
{
Effect[] imbuedEffects = firstImbue.ImbuedEffects;
if (imbuedEffects != null)
{
Effect[] array = imbuedEffects;
for (int i = 0; i < array.Length; i++)
{
WeaponDamage val2 = (WeaponDamage)array[i];
if ((Object)(object)val2 != (Object)null)
{
Types overrideDType = val2.OverrideDType;
if (overrideDType == DamageType)
{
return true;
}
}
}
}
}
}
}
return false;
}
}
public class SL_HasMana : SL_EffectCondition, ICustomModel
{
public float Value;
public bool CheckPercent;
public bool IgnoreBurntForPercent;
public Type SLTemplateModel => typeof(SL_HasMana);
public Type GameModel => typeof(HasMana);
public override void ApplyToComponent<T>(T component)
{
HasMana hasMana = component as HasMana;
hasMana.Value = Value;
hasMana.CheckPercent = CheckPercent;
hasMana.IgnoreBurntForPercent = IgnoreBurntForPercent;
}
public override void SerializeEffect<T>(T component)
{
HasMana hasMana = component as HasMana;
hasMana.Value = Value;
hasMana.CheckPercent = CheckPercent;
hasMana.IgnoreBurntForPercent = IgnoreBurntForPercent;
}
}
public class HasMana : EffectCondition
{
public float Value;
public bool CheckPercent;
public bool IgnoreBurntForPercent;
public override bool CheckIsValid(Character _affectedCharacter)
{
if (!Object.op_Implicit((Object)(object)_affectedCharacter) || !Object.op_Implicit((Object)(object)_affectedCharacter.Stats))
{
return false;
}
float currentMana = _affectedCharacter.Stats.CurrentMana;
if (CheckPercent)
{
float num = (IgnoreBurntForPercent ? _affectedCharacter.Stats.ActiveMaxMana : _affectedCharacter.Stats.MaxMana);
float num2 = num * Value * 0.01f;
return currentMana >= num2;
}
return currentMana >= Value;
}
}
internal class StatusEmitterAoE : MonoBehaviour
{
private Character[] playerCharacters;
private float radius;
private float TickDuration = 0.1f;
private float TickTimer = 0f;
private string EquipTag = "ThrowStaff";
private void Awake()
{
Setup();
}
private void Setup()
{
playerCharacters = CharacterManager.Instance.Characters.ValuesArray.Where((Character x) => x.IsLocalPlayer).ToArray();
radius = 3f;
}
private void Update()
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: 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_007b: 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_00aa: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: 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)
//IL_00d7: 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_00de: Unknown result type (might be due to invalid IL or missing references)
TickTimer += Time.deltaTime;
if (!(TickTimer >= TickDuration))
{
return;
}
Character[] array = playerCharacters;
foreach (Character val in array)
{
Equipment equippedItem = val.Inventory.Equipment.GetMatchingSlot((EquipmentSlotIDs)5).EquippedItem;
if (!((Object)(object)equippedItem != (Object)null))
{
continue;
}
Tag tagFromName = GetTagFromName(EquipTag);
if (tagFromName != default(Tag) && !val.StatusEffectMngr.HasStatusEffect("Plasmonic Sigil Effect") && ((Item)equippedItem).HasTag(tagFromName))
{
Vector3 position = ((Component)val).transform.position;
Vector3 position2 = ((Component)this).transform.position;
Vector3 val2 = position - position2;
float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude;
if (sqrMagnitude < radius && (Object)(object)val != (Object)null && !val.IsDead)
{
val.StatusEffectMngr.AddStatusEffect("Plasmonic Sigil Effect");
}
}
}
TickTimer = 0f;
}
public static Tag GetTagFromName(string tagName)
{
//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_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: 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_002f: 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)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
Tag[] tags = TagSourceManager.Instance.m_tags;
foreach (Tag val in tags)
{
if (val.TagName == tagName)
{
return val;
}
}
return default(Tag);
}
}
public class SL_PanicCharacterStats : SL_Effect, ICustomModel
{
public string UIDPrefix = "npcweapons.PanicCharacterStats";
public Type SLTemplateModel => typeof(SL_PanicCharacterStats);
public Type GameModel => typeof(PanicCharacterStats);
public override void ApplyToComponent<T>(T component)
{
PanicCharacterStats panicCharacterStats = component as PanicCharacterStats;
panicCharacterStats.UIDPrefix = UIDPrefix;
}
public override void SerializeEffect<T>(T effect)
{
PanicCharacterStats panicCharacterStats = effect as PanicCharacterStats;
UIDPrefix = panicCharacterStats.UIDPrefix;
}
}
public class PanicCharacterStats : Effect
{
public string UIDPrefix;
private string Cj;
private float duration;
private CharacterStats characterStats;
private Stat[] characterResistanceList;
private float statValue;
public override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Invalid comparison between Unknown and I4
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Invalid comparison between Unknown and I4
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Expected O, but got Unknown
characterStats = _affectedCharacter.m_characterStats;
if ((Object)(object)characterStats != (Object)null)
{
StatusEffect statusEffectPrefab = ResourcesPrefabManager.Instance.GetStatusEffectPrefab("Panic");
if ((Object)(object)statusEffectPrefab != (Object)null)
{
duration = statusEffectPrefab.StartLifespan;
}
else
{
JohBenjiNPCWeapons.Log.LogMessage((object)"Did not find original Pain status effect prefab. Setting default duration to 10 seconds. ");
duration = 10f;
}
characterResistanceList = characterStats.m_damageResistance;
int num = 9;
for (int i = 0; i <= num; i++)
{
if (i > 5 && i != 8)
{
continue;
}
Types val = (Types)i;
if ((int)val != 7 && (int)val != 6)
{
statValue = characterResistanceList[i].BaseValue;
Cj = UIDPrefix + i;
if (statValue > 0f && !characterResistanceList[i].m_rawStack.ContainsKey(Cj))
{
StatStack val2 = new StatStack(Cj, duration, 0f - statValue, (Tag[])null);
characterResistanceList[i].m_rawStack.Add(Cj, val2);
}
}
}
}
else
{
JohBenjiNPCWeapons.Log.LogMessage((object)"characterStats == null. Cannot apply Panic to CharacterStats.");
}
}
}
public class SL_ChangeGhostLifeSpan : SL_Effect, ICustomModel
{
public float LifeSpan;
public bool Percentage;
public Type SLTemplateModel => typeof(SL_ChangeGhostLifeSpan);
public Type GameModel => typeof(ChangeGhostLifeSpan);
public override void ApplyToComponent<T>(T component)
{
ChangeGhostLifeSpan changeGhostLifeSpan = component as ChangeGhostLifeSpan;
changeGhostLifeSpan.LifeSpan = LifeSpan;
changeGhostLifeSpan.Percentage = Percentage;
}
public override void SerializeEffect<T>(T effect)
{
ChangeGhostLifeSpan changeGhostLifeSpan = effect as ChangeGhostLifeSpan;
LifeSpan = changeGhostLifeSpan.LifeSpan;
Percentage = changeGhostLifeSpan.Percentage;
}
}
public class ChangeGhostLifeSpan : Effect
{
public float LifeSpan;
public bool Percentage;
private float ghostLifeSpan;
public override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
if ((Object)(object)_affectedCharacter == (Object)null || (Object)(object)_affectedCharacter.CurrentSummon == (Object)null)
{
return;
}
Character currentSummon = _affectedCharacter.CurrentSummon;
ghostLifeSpan = currentSummon.Lifetime;
if (ghostLifeSpan != -1f)
{
if (!Percentage)
{
currentSummon.m_remainingLifespan += LifeSpan;
}
else if (Percentage)
{
currentSummon.m_remainingLifespan += ghostLifeSpan * LifeSpan;
}
}
}
}
public class PlasmonicSigilPatch : NPCWeaponPatchClass
{
public class DestroySigilInteraction : InteractionBase
{
private Item ParentItem => ((Component)this).GetComponentInParent<Item>();
public override bool CanBeActivated => true;
public override string DefaultHoldText => "Disassemble";
public override void Activate(Character _character)
{
if ((Object)(object)ParentItem != (Object)null)
{
_character.SpellCastAnim((SpellCastType)4, (SpellCastModifier)0, 1);
Object.Destroy((Object)(object)((Component)ParentItem).gameObject);
_character.Inventory.ReceiveItemReward(-40043, 1, false);
}
}
}
public class NoInteractionInteraction : InteractionBase
{
public override bool CanBeActivated => false;
public override string DefaultPressText => "";
public override void Activate(Character _character)
{
}
}
public PlasmonicSigilPatch(Item itemReference)
: base(itemReference)
{
}
public override void PatchItem(Item Item)
{
//IL_0086: 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_008e: 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_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_00b0: 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_00cd: 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_00f3: 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_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_0167: Expected O, but got Unknown
Transform itemVisual = Item.GetItemVisual(Item.HasSpecialVisualPrefab);
if (Object.op_Implicit((Object)(object)Item))
{
ParticleSystem component = ((Component)itemVisual.Find("mdl_itm_firestone/FX_Bolt")).GetComponent<ParticleSystem>();
ParticleSystem component2 = ((Component)itemVisual.Find("mdl_fx_magicCircle/FX_Bolt")).GetComponent<ParticleSystem>();
Light component3 = ((Component)itemVisual.Find("Point light")).GetComponent<Light>();
GameObject gameObject = ((Component)itemVisual.Find("Sparks Blast (2)")).gameObject;
Object.Destroy((Object)(object)gameObject);
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2))
{
ColorOverLifetimeModule colorOverLifetime = component.colorOverLifetime;
ColorOverLifetimeModule colorOverLifetime2 = component2.colorOverLifetime;
((ColorOverLifetimeModule)(ref colorOverLifetime)).enabled = false;
((ColorOverLifetimeModule)(ref colorOverLifetime2)).enabled = false;
MainModule main = component.main;
MainModule main2 = component2.main;
((MainModule)(ref main)).startColor = MinMaxGradient.op_Implicit(new Color(1f, 0.65f, 0.11f, 0.01f));
((MainModule)(ref main2)).startColor = MinMaxGradient.op_Implicit(new Color(1f, 0.65f, 0.11f, 1f));
component3.color = new Color(1f, 0.65f, 0.11f, 1f);
}
GameObject gameObject2 = ((Component)itemVisual.Find("mdl_itm_firestone/smoke_desu")).gameObject;
if ((Object)(object)gameObject2 != (Object)null)
{
Object.Destroy((Object)(object)gameObject2);
}
Object.Destroy((Object)(object)((Component)ItemReference).GetComponent<Ephemeral>());
GameObject val = new GameObject();
((Object)val).name = "StatusEmitter";
val.transform.parent = ((Component)Item).transform;
StatusEmitterAoE statusEmitterAoE = val.AddComponent<StatusEmitterAoE>();
GameObject fromAssetBundle = this.GetFromAssetBundle<GameObject>("johbenji-npcweapons", "sigilofresonance", "SigilStone");
if ((Object)(object)fromAssetBundle != (Object)null)
{
GameObject val2 = Object.Instantiate<GameObject>(fromAssetBundle, itemVisual, false);
if ((Object)(object)val2 != (Object)null)
{
SigilStoneDriver sigilStoneDriver = val2.AddComponent<SigilStoneDriver>();
}
else
{
Debug.Log((object)"Sigil Stone: NewInstance = Null");
}
}
else
{
Debug.Log((object)"Sigil Stone: Prefab Reference = Null");
}
}
if (Object.op_Implicit((Object)(object)Item))
{
AddInteractorToItem(Item);
}
}
public T GetFromAssetBundle<T>(string SLPackName, string AssetBundle, string key) where T : Object
{
if (!SL.PacksLoaded)
{
return default(T);
}
return SL.GetSLPack(SLPackName).AssetBundles[AssetBundle].LoadAsset<T>(key);
}
public override void AddInteractorToItem(Item Item)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Expected O, but got Unknown
GameObject val = new GameObject();
((Object)val).name = "InteractionHolder";
val.transform.parent = ((Component)Item).transform;
NoInteractionInteraction noInteractionInteraction = val.AddComponent<NoInteractionInteraction>();
DestroySigilInteraction destroySigilInteraction = val.AddComponent<DestroySigilInteraction>();
InteractionActivator InteractionActivator = val.AddComponent<InteractionActivator>();
InteractionTriggerBase InteractionTriggerBase = val.AddComponent<InteractionTriggerBase>();
((MonoBehaviour)JohBenjiNPCWeapons.Instance).StartCoroutine(DelayDo(delegate
{
InteractionTriggerBase val2 = InteractionTriggerBase;
InteractionActivator val3 = InteractionActivator;
DestroySigilInteraction holdInteraction = destroySigilInteraction;
NoInteractionInteraction noInteractionInteraction2 = noInteractionInteraction;
val3.BasicInteraction = (IInteraction)(object)noInteractionInteraction;
val3.HoldInteraction = (IInteraction)(object)holdInteraction;
val2.DetectionColliderRadius = 1f;
}));
}
private IEnumerator DelayDo(Action ThingToDo)
{
yield return (object)new WaitForSeconds(5f);
ThingToDo?.Invoke();
}
}
public class SL_CustomLexiconCheck : SL_EffectCondition, ICustomModel
{
public Type SLTemplateModel => typeof(SL_CustomLexiconCheck);
public Type GameModel => typeof(CustomLexiconCheck);
public override void ApplyToComponent<T>(T component)
{
CustomLexiconCheck customLexiconCheck = component as CustomLexiconCheck;
}
public override void SerializeEffect<T>(T component)
{
CustomLexiconCheck customLexiconCheck = component as CustomLexiconCheck;
}
}
public class CustomLexiconCheck : EffectCondition
{
public override bool CheckIsValid(Character _affectedCharacter)
{
//IL_001b: 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)
bool flag = (Object)(object)_affectedCharacter.CurrentWeapon != (Object)null && ((Item)_affectedCharacter.CurrentWeapon).HasTag(GetTagFromName("Lexicon"));
bool flag2 = (Object)(object)_affectedCharacter.LeftHandEquipment != (Object)null && ((Item)_affectedCharacter.LeftHandEquipment).HasTag(GetTagFromName("Lexicon"));
bool flag3 = ((CharacterKnowledge)_affectedCharacter.Inventory.SkillKnowledge).IsItemLearned(8205170);
if (flag || flag2 || flag3)
{
return true;
}
return false;
}
public Tag GetTagFromName(string tagName)
{
//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_001a: 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_0043: 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_002b: 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_0049: Unknown result type (might be due to invalid IL or missing references)
Tag[] tags = TagSourceManager.Instance.m_tags;
foreach (Tag val in tags)
{
if (val.TagName == tagName)
{
return val;
}
}
return default(Tag);
}
}
public class SL_EquipItemFromUID : SL_Effect, ICustomModel
{
public int ItemID;
public Type SLTemplateModel => typeof(SL_EquipItemFromUID);
public Type GameModel => typeof(EquipItemFromUID);
public override void ApplyToComponent<T>(T component)
{
EquipItemFromUID equipItemFromUID = component as EquipItemFromUID;
equipItemFromUID.ItemID = ItemID;
}
public override void SerializeEffect<T>(T effect)
{
EquipItemFromUID equipItemFromUID = effect as EquipItemFromUID;
equipItemFromUID.ItemID = ItemID;
}
}
public class EquipItemFromUID : Effect
{
public int ItemID;
public override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Expected O, but got Unknown
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Expected O, but got Unknown
if (!Object.op_Implicit((Object)(object)_affectedCharacter))
{
return;
}
ItemContainer inventoryPouch = _affectedCharacter.Inventory.m_inventoryPouch;
for (int num = inventoryPouch.m_containedItems.Values.Count - 1; num >= 0; num--)
{
Item val = inventoryPouch.m_containedItems.Values[num];
if (val.ItemID.Equals(ItemID) && val.IsEquippable)
{
Equipment val2 = (Equipment)val;
_affectedCharacter.Inventory.EquipItem(val2, true);
return;
}
}
if (!_affectedCharacter.Inventory.HasABag)
{
return;
}
ItemContainer container = (ItemContainer)(object)_affectedCharacter.Inventory.EquippedBag.Container;
for (int num2 = container.m_containedItems.Values.Count - 1; num2 >= 0; num2--)
{
Item val3 = container.m_containedItems.Values[num2];
if (val3.ItemID.Equals(ItemID) && val3.IsEquippable)
{
Equipment val4 = (Equipment)val3;
_affectedCharacter.Inventory.EquipItem(val4, true);
break;
}
}
}
}
public class SL_OwnsItemConditionOR : SL_EffectCondition, ICustomModel
{
public int[] ReqItemIDs;
public Type SLTemplateModel => typeof(SL_OwnsItemConditionOR);
public Type GameModel => typeof(OwnsItemConditionOR);
public override void ApplyToComponent<T>(T component)
{
OwnsItemConditionOR ownsItemConditionOR = component as OwnsItemConditionOR;
ownsItemConditionOR.ReqItemIDs = ReqItemIDs;
}
public override void SerializeEffect<T>(T component)
{
OwnsItemConditionOR ownsItemConditionOR = component as OwnsItemConditionOR;
ownsItemConditionOR.ReqItemIDs = ReqItemIDs;
}
}
public class OwnsItemConditionOR : EffectCondition
{
public int[] ReqItemIDs;
public override bool CheckIsValid(Character _affectedCharacter)
{
bool result = false;
int[] reqItemIDs = ReqItemIDs;
foreach (int num in reqItemIDs)
{
if (_affectedCharacter.Inventory.OwnsOrHasEquipped(num))
{
result = true;
break;
}
}
return result;
}
}
public class SL_RestoreEquippedItemDurability : SL_Effect, ICustomModel
{
public EquipmentSlotIDs EquipmentSlot;
public float Durability;
public bool Percentage;
public Type SLTemplateModel => typeof(SL_RestoreEquippedItemDurability);
public Type GameModel => typeof(RestoreEquippedItemDurability);
public override void ApplyToComponent<T>(T component)
{
//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)
RestoreEquippedItemDurability restoreEquippedItemDurability = component as RestoreEquippedItemDurability;
restoreEquippedItemDurability.EquipmentSlot = EquipmentSlot;
restoreEquippedItemDurability.Durability = Durability;
restoreEquippedItemDurability.Percentage = Percentage;
}
public override void SerializeEffect<T>(T effect)
{
//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)
RestoreEquippedItemDurability restoreEquippedItemDurability = effect as RestoreEquippedItemDurability;
EquipmentSlot = restoreEquippedItemDurability.EquipmentSlot;
Durability = restoreEquippedItemDurability.Durability;
Percentage = restoreEquippedItemDurability.Percentage;
}
}
public class RestoreEquippedItemDurability : Effect
{
public EquipmentSlotIDs EquipmentSlot;
public float Durability;
public bool Percentage;
public override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
//IL_005d: 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)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)_affectedCharacter == (Object)null || (Object)(object)_affectedCharacter.Inventory == (Object)null || (Object)(object)_affectedCharacter.Inventory.Equipment == (Object)null || !_affectedCharacter.Inventory.Equipment.IsEquipmentSlotActive(EquipmentSlot))
{
return;
}
EquipmentSlot matchingSlot = _affectedCharacter.Inventory.Equipment.GetMatchingSlot(EquipmentSlot);
if ((Object)(object)matchingSlot == (Object)null || !matchingSlot.HasItemEquipped)
{
return;
}
Item equippedItem = (Item)(object)matchingSlot.EquippedItem;
if (matchingSlot.SlotName == "RightHand")
{
EquipmentSlotIDs val = (EquipmentSlotIDs)6;
EquipmentSlot matchingSlot2 = _affectedCharacter.Inventory.Equipment.GetMatchingSlot(val);
if ((Object)(object)matchingSlot.EquippedItem == (Object)(object)matchingSlot2.EquippedItem)
{
return;
}
}
RepairEquipment(equippedItem, Durability);
}
private void RepairEquipment(Item ItemToRepair, float RepairAmount)
{
if (ItemToRepair is Equipment)
{
float num = 0f;
num = (Percentage ? (Durability / 100f * (float)ItemToRepair.MaxDurability) : RepairAmount);
ItemToRepair.RepairAmount(num);
}
}
}
public class DialogueCharacter
{
public int HelmetID = -1;
public int ChestID = -1;
public int BootsID = -1;
public int WeaponID = -1;
public int OffhandID = -1;
public int BackpackID = -1;
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private Action<DialogueTree, Character> m_OnSetupDialogueGraph;
public string UID { get; set; }
public string Name { get; set; }
public string SpawnSceneBuildName { get; set; }
public Vector3 SpawnPosition { get; set; }
public Vector3 SpawnRotation { get; set; }
public SpellCastType StartingPose { get; set; }
public VisualData CharVisualData { get; set; } = new VisualData
{
Gender = (Gender)0,
SkinIndex = 0,
HairColorIndex = 0,
HairStyleIndex = 0,
HeadVariationIndex = 0
};
public event Action<DialogueTree, Character> OnSetupDialogueGraph
{
[CompilerGenerated]
add
{
Action<DialogueTree, Character> val = this.m_OnSetupDialogueGraph;
Action<DialogueTree, Character> val2;
do
{
val2 = val;
Action<DialogueTree, Character> value2 = (Action<DialogueTree, Character>)(object)Delegate.Combine((Delegate?)(object)val2, (Delegate?)(object)value);
val = Interlocked.CompareExchange(ref this.m_OnSetupDialogueGraph, value2, val2);
}
while (val != val2);
}
[CompilerGenerated]
remove
{
Action<DialogueTree, Character> val = this.m_OnSetupDialogueGraph;
Action<DialogueTree, Character> val2;
do
{
val2 = val;
Action<DialogueTree, Character> value2 = (Action<DialogueTree, Character>)(object)Delegate.Remove((Delegate?)(object)val2, (Delegate?)(object)value);
val = Interlocked.CompareExchange(ref this.m_OnSetupDialogueGraph, value2, val2);
}
while (val != val2);
}
}
public SL_Character CreateAndApplyTemplate()
{
//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_0012: 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_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_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)
//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_0049: 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_0055: 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_005c: 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_006d: 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_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: 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_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Expected O, but got Unknown
SL_Character val = new SL_Character
{
UID = UID,
Name = Name,
Faction = (Factions)0,
StartingPose = StartingPose,
SaveType = (CharSaveType)1,
SceneToSpawn = SpawnSceneBuildName,
SpawnPosition = SpawnPosition,
SpawnRotation = SpawnRotation,
CharacterVisualsData = CharVisualData,
Helmet_ID = HelmetID,
Chest_ID = ChestID,
Boots_ID = BootsID,
Weapon_ID = WeaponID,
Shield_ID = OffhandID,
Backpack_ID = BackpackID
};
((ContentTemplate)val).ApplyTemplate();
val.OnSpawn += Template_OnSpawn;
return val;
}
private void Template_OnSpawn(Character character, string rpcData)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(Resources.Load<GameObject>("editor/templates/DialogueTemplate"));
val.transform.parent = ((Component)character).transform;
val.transform.position = ((Component)character).transform.position;
DialogueActor componentInChildren = ((Component)character).GetComponentInChildren<DialogueActor>();
componentInChildren.SetName(Name);
DialogueTreeController componentInChildren2 = ((Component)character).GetComponentInChildren<DialogueTreeController>();
Graph graph = ((GraphOwner)componentInChildren2).graph;
List<ActorParameter> actorParameters = ((DialogueTree)((graph is DialogueTree) ? graph : null))._actorParameters;
actorParameters[0].actor = (IDialogueActor)(object)componentInChildren;
actorParameters[0].name = componentInChildren.name;
this.OnSetupDialogueGraph?.Invoke((DialogueTree)(object)((graph is DialogueTree) ? graph : null), character);
}
}
public class DialogueTreeBuilder
{
public DialogueTree TargetDialogueTree { get; private set; }
public ActorParameter Actor { get; private set; }
public DialogueTreeBuilder(DialogueTree targetDialogueTree, bool ClearGraph = true)
{
TargetDialogueTree = targetDialogueTree;
Actor = TargetDialogueTree.actorParameters[0];
if (ClearGraph)
{
((Graph)TargetDialogueTree).allNodes.Clear();
}
}
public StatementNodeExt SetInitialStatement(string InitialStatement)
{
StatementNodeExt val = CreateNPCStatement(InitialStatement);
((Graph)TargetDialogueTree).primeNode = (Node)(object)val;
return val;
}
public DTNode AddNode(DTNode NewNode)
{
if (!((Graph)TargetDialogueTree).allNodes.Contains((Node)(object)NewNode))
{
((Graph)TargetDialogueTree).allNodes.Add((Node)(object)NewNode);
return NewNode;
}
return NewNode;
}
public MultipleChoiceNodeExt AddMultipleChoiceNode(string[] choices, ConditionTask[] Condition = null)
{
//IL_0012: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Expected O, but got Unknown
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
MultipleChoiceNodeExt val = ((Graph)TargetDialogueTree).AddNode<MultipleChoiceNodeExt>();
for (int i = 0; i < choices.Length; i++)
{
Choice item = new Choice
{
statement = new Statement
{
text = choices[i]
},
condition = ((Condition != null && Condition[i] != null) ? Condition[i] : null)
};
val.availableChoices.Add(item);
}
return val;
}
public StatementNodeExt CreateNPCStatement(string AnswerText, bool ContinueOnFinish = false)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
StatementNodeExt val = ((Graph)TargetDialogueTree).AddNode<StatementNodeExt>();
val.statement = new Statement(AnswerText);
val.SetActorName(Actor.name);
val.ContinueOnStatementFinished = ContinueOnFinish;
AddNode((DTNode)(object)val);
return val;
}
public StatementNode CreatePlayerStatement(string AnswerText)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
StatementNode val = ((Graph)TargetDialogueTree).AddNode<StatementNode>();
val.statement = new Statement(AnswerText);
AddNode((DTNode)(object)val);
return val;
}
public T AddAnswerToMultipleChoice<T>(MultipleChoiceNodeExt multiChoice, int answerIndex, T NewNode) where T : DTNode
{
((Graph)TargetDialogueTree).ConnectNodes((Node)(object)multiChoice, (Node)(object)NewNode, answerIndex, -1);
return NewNode;
}
public ConditionNode AddConditionalAnswerToMultiChoice(MultipleChoiceNodeExt multiChoice, DialogueTree DT, int answerIndex, ConditionTask Condition)
{
ConditionNode val = this.AddAnswerToMultipleChoice<ConditionNode>(multiChoice, answerIndex, ((Graph)DT).AddNode<ConditionNode>());
val.condition = Condition;
return val;
}
public T AddAnswerToMultipleChoice<T>(MultipleChoiceNodeExt multiChoice, int answerIndex, string AnswerText, T AnswerNode = default(T)) where T : DTNode
{
StatementNodeExt val = CreateNPCStatement(AnswerText);
if (AnswerNode != null)
{
AddNode((DTNode)(object)AnswerNode);
((Graph)TargetDialogueTree).ConnectNodes((Node)(object)multiChoice, (Node)(object)val, answerIndex, -1);
((Graph)TargetDialogueTree).ConnectNodes((Node)(object)val, (Node)(object)AnswerNode, -1, -1);
return AnswerNode;
}
((Graph)TargetDialogueTree).ConnectNodes((Node)(object)multiChoice, (Node)(object)val, answerIndex, -1);
return (T)(object)val;
}
}
public static class NodeExtensions
{
public static DTNode ConnectTo(this DTNode sourceNode, DialogueTree DT, DTNode TargetNode, int sourceIndex = -1, int targetIndex = -1)
{
if (!((Graph)DT).allNodes.Contains((Node)(object)TargetNode))
{
((Graph)DT).allNodes.Add((Node)(object)TargetNode);
}
((Graph)DT).ConnectNodes((Node)(object)sourceNode, (Node)(object)TargetNode, sourceIndex, targetIndex);
return TargetNode;
}
public static ConditionNode SetCondition(this ConditionNode sourceNode, ConditionTask Condition)
{
if (Condition != null)
{
sourceNode.task = (Task)(object)Condition;
}
return sourceNode;
}
public static DTNode OnSuccess(this ConditionNode sourceNode, DialogueTree DT, DTNode SuccessfulNode)
{
if (!((Graph)DT).allNodes.Contains((Node)(object)SuccessfulNode))
{
((Graph)DT).allNodes.Add((Node)(object)SuccessfulNode);
}
((Graph)DT).ConnectNodes((Node)(object)sourceNode, (Node)(object)SuccessfulNode, 0, -1);
return SuccessfulNode;
}
public static DTNode OnFailure(this ConditionNode sourceNode, DialogueTree DT, DTNode FailureNode)
{
if (!((Graph)DT).allNodes.Contains((Node)(object)FailureNode))
{
((Graph)DT).allNodes.Add((Node)(object)FailureNode);
}
((Graph)DT).ConnectNodes((Node)(object)sourceNode, (Node)(object)FailureNode, 1, -1);
return FailureNode;
}
}
[HarmonyPatch(typeof(Character), "Die")]
public class GoldLich_Die_Patch
{
private static void Prefix(Character __instance, Vector3 _hitVec, bool _loadedDead = false)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: 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_021e: Unknown result type (might be due to invalid IL or missing references)
//IL_0228: Unknown result type (might be due to invalid IL or missing references)
//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
if (__instance.UID == UID.op_Implicit("EwoPQ0iVwkK-XtNuaVPf3g") && !_loadedDead)
{
Character[] array = CharacterManager.Instance.Characters.ValuesArray.Where((Character x) => x.IsLocalPlayer).ToArray();
Character[] array2 = array;
foreach (Character val in array2)
{
if (val.IsWorldHost)
{
val.Inventory.ReceiveItemReward(-40020, 1, false);
}
}
}
if (__instance.UID == UID.op_Implicit("acpY6mlPgUiJpR3LXt9fVg") && !_loadedDead)
{
Character[] array3 = CharacterManager.Instance.Characters.ValuesArray.Where((Character x) => x.IsLocalPlayer).ToArray();
Character[] array4 = array3;
foreach (Character val2 in array4)
{
if (val2.IsWorldHost)
{
val2.Inventory.ReceiveItemReward(-40008, 1, false);
}
}
}
if (__instance.UID == UID.op_Implicit("X-dfltOoGUm7YlCE_Li1zQ") && !_loadedDead)
{
JohBenjiNPCWeapons.Log.LogMessage((object)("JohBenjiNPCWeapons: " + __instance.Name));
if (__instance.Name == "Nicolas")
{
Character[] array5 = CharacterManager.Instance.Characters.ValuesArray.Where((Character x) => x.IsLocalPlayer).ToArray();
Character[] array6 = array5;
foreach (Character val3 in array6)
{
if (val3.IsWorldHost)
{
val3.Inventory.ReceiveItemReward(-40035, 1, false);
}
}
}
}
if (__instance.UID == UID.op_Implicit("eCz766tEIEOWfK81om19wg") && !_loadedDead && ((Object)__instance).name.Contains("EliteCalixa"))
{
Character[] array7 = CharacterManager.Instance.Characters.ValuesArray.Where((Character x) => x.IsLocalPlayer).ToArray();
Character[] array8 = array7;
foreach (Character val4 in array8)
{
if (val4.IsWorldHost)
{
val4.Inventory.ReceiveItemReward(-40003, 1, false);
val4.Inventory.ReceiveItemReward(-40034, 1, false);
}
}
}
if (__instance.UID == UID.op_Implicit("9jsiejBtHkOzeo4tOyyweg") && !_loadedDead && ((Object)__instance).name.Contains("EliteImmaculate"))
{
Character[] array9 = CharacterManager.Instance.Characters.ValuesArray.Where((Character x) => x.IsLocalPlayer).ToArray();
Character[] array10 = array9;
foreach (Character val5 in array10)
{
if (val5.IsWorldHost)
{
val5.Inventory.ReceiveItemReward(-40010, 1, false);
}
}
}
if (!(__instance.UID == UID.op_Implicit("Q1WF0liivEm5Khr_c06KXg")) || _loadedDead || !((Object)__instance).name.Contains("Q1WF0liivEm5Khr_c06KXg"))
{
return;
}
Character[] array11 = CharacterManager.Instance.Characters.ValuesArray.Where((Character x) => x.IsLocalPlayer).ToArray();
Character[] array12 = array11;
foreach (Character val6 in array12)
{
if (val6.IsWorldHost)
{
val6.Inventory.ReceiveItemReward(-40041, 1, false);
val6.Inventory.ReceiveItemReward(-40042, 1, false);
}
}
}
}
[HarmonyPatch(typeof(DualMeleeWeapon), "ProcessVisuals")]
public class DualMeleeWeaponProcessVisuals
{
private static bool Prefix(DualMeleeWeapon __instance)
{
Transform[] array = UnityEngineExtensions.FindAllInAllChildren(((Component)((Equipment)__instance).EquippedVisuals).transform, "LeftHandModel");
Transform[] array2 = array;
foreach (Transform val in array2)
{
JohBenjiNPCWeapons.Log.LogMessage((object)((Object)val).name);
}
return true;
}
}
[HarmonyPatch(typeof(Disease))]
public static class DieaseDegenerationPatch
{
public static Dictionary<string, string> DieaseDegenTable = new Dictionary<string, string>
{
{ "FungalNecrosis1", "FungalNecrosis2" },
{ "FungalNecrosis2", "FungalNecrosis3" }
};
[HarmonyPatch("ProcessUpdate")]
[HarmonyPrefix]
public static bool Prefix(Disease __instance)
{
if (DieaseDegenTable.ContainsKey(((StatusEffect)__instance).IdentifierName))
{
string text = DieaseDegenTable[((StatusEffect)__instance).IdentifierName];
if (CanDegenerate(__instance))
{
if (!string.IsNullOrEmpty(text))
{
__instance.m_degenerating = true;
((StatusEffect)__instance).m_affectedCharacter.StatusEffectMngr.AddStatusEffect(text);
return false;
}
return true;
}
return true;
}
return true;
}
public static bool CanDegenerate(Disease __instance)
{
return ((StatusEffect)__instance).IsActive && __instance.m_degenerateTime != -1f && !__instance.IsReceding && __instance.m_canDegenerate && !__instance.m_degenerating && (double)((StatusEffect)__instance).Age + 0.01 >= (double)__instance.m_degenerateTime;
}
}
[HarmonyPatch(typeof(Item))]
public static class ItemPatches
{
[HarmonyPatch("ReduceDurability")]
[HarmonyPostfix]
public static void Item_ReduceDurability_Postfix(Item __instance, float _durabilityLost)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Invalid comparison between Unknown and I4
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Invalid comparison between Unknown and I4
if (__instance.m_currentDurability <= 0f && !PhotonNetwork.isNonMasterClientInRoom && (int)__instance.BehaviorOnNoDurability != 1 && (int)__instance.BehaviorOnNoDurability == 3)
{
if (__instance.ItemID == -40000)
{
((EffectSynchronizer)__instance).OwnerCharacter.Inventory.ReceiveItemReward(6500031, 1, false);
}
else if (__instance.ItemID == -40001)
{
((EffectSynchronizer)__instance).OwnerCharacter.Inventory.ReceiveItemReward(6500031, 1, false);
}
else if (__instance.ItemID == -40037)
{
((EffectSynchronizer)__instance).OwnerCharacter.Inventory.ReceiveItemReward(-40039, 1, true);
}
else if (__instance.ItemID == -40038)
{
((EffectSynchronizer)__instance).OwnerCharacter.Inventory.ReceiveItemReward(-40040, 1, true);
}
else if (__instance.ItemID == -40000)
{
((EffectSynchronizer)__instance).OwnerCharacter.Inventory.ReceiveItemReward(6500031, 1, true);
}
else if (__instance.ItemID == -40001)
{
((EffectSynchronizer)__instance).OwnerCharacter.Inventory.ReceiveItemReward(6500031, 1, true);
}
}
}
}
[HarmonyPatch(typeof(CharacterInventory), "EquipItem", new Type[]
{
typeof(Equipment),
typeof(bool)
})]
public class CharacterOnEquipPatched
{
[HarmonyPostfix]
public static void Postfix(CharacterInventory __instance, Equipment _itemToEquip, bool _playAnim)
{
JohBenjiNPCWeapons.OnItemEquipped?.Invoke((Item)(object)_itemToEquip, __instance.m_character);
}
}
public class SL_ForceUnEquip : SL_Effect, ICustomModel
{
public EquipmentSlotIDs EquipmentSlot;
public Type SLTemplateModel => typeof(SL_ForceUnEquip);
public Type GameModel => typeof(ForceUnEquip);
public override void ApplyToComponent<T>(T component)
{
//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)
ForceUnEquip forceUnEquip = component as ForceUnEquip;
forceUnEquip.EquipmentSlot = EquipmentSlot;
}
public override void SerializeEffect<T>(T effect)
{
//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)
ForceUnEquip forceUnEquip = effect as ForceUnEquip;
EquipmentSlot = forceUnEquip.EquipmentSlot;
}
}
public class ForceUnEquip : Effect
{
public EquipmentSlotIDs EquipmentSlot;
public override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)_affectedCharacter))
{
return;
}
EquipmentSlot matchingSlot = _affectedCharacter.Inventory.Equipment.GetMatchingSlot(EquipmentSlot);
if (!((Object)(object)matchingSlot != (Object)null))
{
return;
}
if (((Object)matchingSlot).name == "Helmet" || ((Object)matchingSlot).name == "Chest" || ((Object)matchingSlot).name == "Legs" || ((Object)matchingSlot).name == "MainHand" || ((Object)matchingSlot).name == "LeftHand")
{
if (matchingSlot.HasItemEquipped)
{
Equipment equippedItem = matchingSlot.EquippedItem;
if ((Object)(object)equippedItem != (Object)null)
{
_affectedCharacter.Inventory.UnequipItem(equippedItem);
}
else
{
JohBenjiNPCWeapons.Log.LogMessage((object)"SL ForceUnEquip: Equipped Item is null.");
}
}
else
{
JohBenjiNPCWeapons.Log.LogMessage((object)"SL ForceUnEquip: Chosen slot does not have an Item Equipped.");
}
}
else
{
JohBenjiNPCWeapons.Log.LogMessage((object)"SL ForceUnEquip: Item slot not appropriate");
}
}
}
public class NPC_Manager
{
private SL_Character YourNPC = null;
private string SLPack = "johbenji-npcweapons";
private string AssetBundle = "audiofiles";
private string AudioClipName = "WeaponsResearcher";
private string TrainerUID = "WeaponResearcher-johbenji";
public NPC_Manager()
{
SL.OnPacksLoaded += SL_OnPacksLoaded;
}
private void SL_OnPacksLoaded()
{
SLPack sLPack = SL.GetSLPack(SLPack);
YourNPC = sLPack.CharacterTemplates[TrainerUID];
YourNPC.OnSpawn += CalledWhenNPCSpawns;
}
private void CalledWhenNPCSpawns(Character NewNPC, string _somethingAboutArguements)
{
GenericTrainerSetup(NewNPC, NewNPC.Name, "WeaponSkillTree-johbenji");
}
public void GenericTrainerSetup(Character trainer, string ActorName, string treeUID)
{
//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)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Expected O, but got Unknown
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Expected O, but got Unknown
Object.DestroyImmediate((Object)(object)((Component)trainer).GetComponent<CharacterStats>());
Object.DestroyImmediate((Object)(object)((Component)trainer).GetComponent<StartingEquipment>());
DialogueActor componentInChildren = ((Component)trainer).GetComponentInChildren<DialogueActor>();
componentInChildren.SetName(ActorName);
Trainer componentInChildren2 = ((Component)trainer).GetComponentInChildren<Trainer>();
componentInChildren2.m_skillTreeUID = new UID(treeUID);
DialogueTreeController componentInChildren3 = ((Component)trainer).GetComponentInChildren<DialogueTreeController>();
Graph graph = ((GraphOwner)componentInChildren3).graph;
AudioClip val = SL.GetSLPack(SLPack).AssetBundles[AssetBundle].LoadAsset<AudioClip>(AudioClipName);
if ((Object)(object)val == (Object)null)
{
JohBenjiNPCWeapons.Log.LogMessage((object)("Could not find the AudioClip at SLPack " + SLPack + " AssetBundle " + AssetBundle + " AudioClipName " + AudioClipName));
}
else
{
DTNode val2 = (DTNode)graph.allNodes[0];
ActionNode val3 = graph.AddNode<ActionNode>();
val3.action = (ActionTask)new PlayAudioAtPosition
{
audioClip = new BBParameter<AudioClip>
{
value = val
},
waitActionFinish = false
};
graph.primeNode = (Node)(object)val3;
graph.ConnectNodes((Node)(object)val3, (Node)(object)val2, -1, -1);
}
}
}
[BepInPlugin("johbenji.npcweapons", "JohBenjiNPCWeapons", "3.0.0")]
public class JohBenjiNPCWeapons : BaseUnityPlugin
{
public const string GUID = "johbenji.npcweapons";
public const string NAME = "JohBenjiNPCWeapons";
public const string VERSION = "3.0.0";
internal static ManualLogSource Log;
public static ConfigEntry<bool> ExampleConfig;
public static NPC_Manager NPCManager;
public static Action<Item, Character> OnItemEquipped;
public Dictionary<string, Tuple<string, SL_DropTable>> dropTableDictionary = new Dictionary<string, Tuple<string, SL_DropTable>>();
public static JohBenjiNPCWeapons Instance;
private AnimationOverride myOverride;
public InteractionActivator InteractionActivator { get; private set; }
public InteractionTriggerBase InteractionTriggerBase { get; private set; }
internal void Awake()
{
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
Instance = this;
Log = ((BaseUnityPlugin)this).Logger;
Log.LogMessage((object)"JohBenjiNPCWeapons: JohBenjiNPCWeapons.Awake()");
NPCManager = new NPC_Manager();
ExampleConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("ExampleCategory", "ExampleSetting", false, "This is an example setting.");
SL.OnPacksLoaded += SL_OnPacksLoaded;
SL.OnSceneLoaded += SL_OnSceneLoaded;
new Harmony("johbenji.npcweapons").PatchAll();
}
internal void Update()
{
}
public void SL_OnSceneLoaded()
{
Log.LogMessage((object)"JohBenjiNPCWeapons: OnSceneLoaded Applying Specialized DropTables");
if (dropTableDictionary.Count != 0)
{
DTAppend dTAppend = new DTAppend();
dTAppend.Apply(dropTableDictionary);
}
else
{
Log.LogMessage((object)"JohBenjiNPCWeapons: dropTableDictionary is empty.");
}
}
private void SL_OnPacksLoaded()
{
Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(-40000);
new BloodSpearPatch(itemPrefab);
Item itemPrefab2 = ResourcesPrefabManager.Instance.GetItemPrefab(-40001);
new BloodSwordPatch(itemPrefab2);
Item itemPrefab3 = ResourcesPrefabManager.Instance.GetItemPrefab(-40008);
new DjinnsChakram(itemPrefab3);
Item itemPrefab4 = ResourcesPrefabManager.Instance.GetItemPrefab(-40016);
new AxeOfGiantKindPatch(itemPrefab4);
Item itemPrefab5 = ResourcesPrefabManager.Instance.GetItemPrefab(-40019);
new GoldenLichCannonPatch(itemPrefab5);
Item itemPrefab6 = ResourcesPrefabManager.Instance.GetItemPrefab(-40028);
new ScarletFangKnucklesPatch(itemPrefab6);
Item itemPrefab7 = ResourcesPrefabManager.Instance.GetItemPrefab(-40034);
new WolfTowerShieldPatch(itemPrefab7);
Item itemPrefab8 = ResourcesPrefabManager.Instance.GetItemPrefab(-40035);
new CageFistPatch(itemPrefab8);
Item itemPrefab9 = ResourcesPrefabManager.Instance.GetItemPrefab(-40042);
new MarbleParryAxePatch(itemPrefab9);
Item itemPrefab10 = ResourcesPrefabManager.Instance.GetItemPrefab(-40044);
new PlasmonicSigilPatch(itemPrefab10);
dropTableDictionary["Lightning Dancer"] = new Tuple<string, SL_DropTable>("LightningDancerDrop-custom", null);
dropTableDictionary["Guardian of the Compass"] = new Tuple<string, SL_DropTable>("GuardianOfTheCompassDrop-custom", null);
DTLoadByName dTLoadByName = new DTLoadByName();
Dictionary<string, Tuple<string, SL_DropTable>> dictionary = dTLoadByName.Load(dropTableDictionary);
foreach (string key in dictionary.Keys)
{
dropTableDictionary[key] = new Tuple<string, SL_DropTable>(dictionary[key].Item1, dictionary[key].Item2);
}
}
}
public class SL_TransmuteItemPairs : SL_Effect, ICustomModel
{
public int[] InReqItemIDs;
public int[] OutReqItemIDs;
public int TransmutationNumber;
public Type SLTemplateModel => typeof(SL_TransmuteItemPairs);
public Type GameModel => typeof(TransmuteItemPairs);
public override void ApplyToComponent<T>(T component)
{
TransmuteItemPairs transmuteItemPairs = component as TransmuteItemPairs;
transmuteItemPairs.InReqItemIDs = InReqItemIDs;
transmuteItemPairs.OutReqItemIDs = OutReqItemIDs;
transmuteItemPairs.TransmutationNumber = TransmutationNumber;
}
public override void SerializeEffect<T>(T effect)
{
TransmuteItemPairs transmuteItemPairs = effect as TransmuteItemPairs;
transmuteItemPairs.InReqItemIDs = InReqItemIDs;
transmuteItemPairs.OutReqItemIDs = OutReqItemIDs;
transmuteItemPairs.TransmutationNumber = TransmutationNumber;
}
}
public class TransmuteItemPairs : Effect
{
public int[] InReqItemIDs;
public int[] OutReqItemIDs;
public int TransmutationNumber;
public override void ActivateLocally(Character _affectedCharacter, object[] _infos)
{
int num = 0;
if (num > TransmutationNumber)
{
return;
}
for (int i = 0; i < InReqItemIDs.Length; i++)
{
int num2 = InReqItemIDs[i];
if (_affectedCharacter.Inventory.OwnsOrHasEquipped(num2))
{
_affectedCharacter.Inventory.RemoveItem(num2, 1);
_affectedCharacter.Inventory.ReceiveItemReward(OutReqItemIDs[i], 1, false);
num++;
break;
}
}
}
}
internal class SigilStoneDriver : MonoBehaviour
{
public List<RingRotationConfig> RotationConfigs;
public DisplacementConfig DisplacementConfig;
private float t_ref;
private float t_counter;
private Rigidbody _Rigidbody;
private Light Light;
private Rigidbody Rigidbody
{
get
{
if ((Object)(object)_Rigidbody == (Object)null)
{
_Rigidbody = ((Component)this).GetComponentInParent<Rigidbody>();
}
return _Rigidbody;
}
}
private void Awake()
{
}
private void OnEnable()
{
t_ref = Time.time;
t_counter = 0f;
Setup();
}
private void OnDisable()
{
//IL_0016: 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)
((Component)this).transform.localPosition = new Vector3(0f, 0f, 0f);
foreach (RingRotationConfig rotationConfig in RotationConfigs)
{
if (rotationConfig != null && (Object)(object)rotationConfig.Ring != (Object)null)
{
rotationConfig.Ring.Rotate(rotationConfig.Axis, 0f);
}
}
}
private void SetupLight()
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
Light = ((Component)((Component)this).transform).gameObject.GetComponentInChildren<Light>();
Light.color = Color.yellow;
Light.type = (LightType)2;
Light.range = 18f;
Light.intensity = 1.035f;
}
private void EnableLight()
{
if (Object.op_Implicit((Object)(object)Light))
{
((Behaviour)Light).enabled = true;
}
}
private void DisableLight()
{
if (Object.op_Implicit((Object)(object)Light))
{
((Behaviour)Light).enabled = false;
}
}
private void Setup()
{
//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_0063: 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_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_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ea: 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_015a: 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_0171: 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_018a: Unknown result type (might be due to invalid IL or missing references)
//IL_018f: Unknown result type (might be due to invalid IL or missing references)
RingRotationConfig ringRotationConfig = new RingRotationConfig();
ringRotationConfig.Speed = 60f;
ringRotationConfig.Axis = new Vector3(90f, 90f, 90f);
ringRotationConfig.Ring = ((Component)this).transform.Find("Resonator");
RingRotationConfig ringRotationConfig2 = new RingRotationConfig();
ringRotationConfig2.Speed = 30f;
ringRotationConfig2.Axis = new Vector3(90f, 0f, 0f);
ringRotationConfig2.Ring = ((Component)this).transform.Find("Resonator/Outer_Ring");
RingRotationConfig ringRotationConfig3 = new RingRotationConfig();
ringRotationConfig3.Speed = 45f;
ringRotationConfig3.Axis = new Vector3(90f, 0f, 0f);
ringRotationConfig3.Ring = ((Component)this).transform.Find("Resonator/Outer_Ring/Middle_Ring");
RingRotationConfig ringRotationConfig4 = new RingRotationConfig();
ringRotationConfig4.Speed = 90f;
ringRotationConfig4.Axis = new Vector3(90f, 0f, 0f);
ringRotationConfig4.Ring = ((Component)this).transform.Find("Resonator/Outer_Ring/Middle_Ring/Inner_Ring");
RingRotationConfig[] source = new RingRotationConfig[4] { ringRotationConfig, ringRotationConfig2, ringRotationConfig3, ringRotationConfig4 };
RotationConfigs = source.ToList();
DisplacementConfig displacementConfig = new DisplacementConfig();
displacementConfig.DisplacementObject = ((Component)this).transform;
displacementConfig.StartPosition = ((Component)this).transform.localPosition + new Vector3(0f, 1.55f, 0.5f);
displacementConfig.EndPosition = ((Component)this).transform.localPosition + new Vector3(0f, 3f, 0f);
displacementConfig.initiallength = 1.7f;
displacementConfig.maxspeed = 0f;
displacementConfig.totallength = 60f;
SetDisplacementConfig(displacementConfig);
}
private void Update()
{
//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_003f: 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_00e8: 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_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)Rigidbody))
{
Rigidbody.useGravity = false;
if (Rigidbody.velocity != Vector3.zero)
{
Rigidbody rigidbody = Rigidbody;
rigidbody.velocity *= 0.2f;
}
}
if (DisplacementConfig == null)
{
return;
}
t_counter = Time.time - t_ref;
if (t_counter <= DisplacementConfig.initiallength)
{
float num = t_counter / DisplacementConfig.initiallength;
float num2 = num - 1f;
float num3 = 1f - 0.5f * Mathf.Pow(num2, 2f) - 0.5f * Mathf.Pow(num2, 4f);
Vector3 localPosition = Vector3.Lerp(DisplacementConfig.StartPosition, DisplacementConfig.EndPosition, num3);
DisplacementConfig.DisplacementObject.localPosition = localPosition;
foreach (RingRotationConfig rotationConfig in RotationConfigs)
{
if (rotationConfig != null && (Object)(object)rotationConfig.Ring != (Object)null)
{
float num4 = Mathf.Lerp(0f, rotationConfig.Speed, num3);
rotationConfig.Ring.Rotate(rotationConfig.Axis, num4 * Time.deltaTime);
}
}
}
if (!(t_counter > DisplacementConfig.initiallength))
{
return;
}
EnableLight();
foreach (RingRotationConfig rotationConfig2 in RotationConfigs)
{
if (rotationConfig2 != null && (Object)(object)rotationConfig2.Ring != (Object)null)
{
rotationConfig2.Ring.Rotate(rotationConfig2.Axis, rotationConfig2.Speed * Time.deltaTime);
}
}
}
public void SetDisplacementConfig(DisplacementConfig displacementConfig)
{
DisplacementConfig = displacementConfig;
}
}