using System;
using System.Collections.Generic;
using System.Diagnostics;
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 BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using OutwardEnchanter.Helpers;
using OutwardEnchanter.Managers;
using SideLoader;
using SideLoader.Helpers;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("OutwardEnchanter")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OutwardEnchanter")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[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 DragParent : MonoBehaviour, IDragHandler, IEventSystemHandler, IBeginDragHandler
{
private RectTransform parentRectTransform;
private Vector3 offset;
private void Start()
{
parentRectTransform = ((Component)((Component)this).transform.parent).GetComponent<RectTransform>();
}
public void OnBeginDrag(PointerEventData eventData)
{
//IL_0007: 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_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
offset = ((Transform)parentRectTransform).position - Input.mousePosition;
}
public void OnDrag(PointerEventData eventData)
{
//IL_0006: 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_0011: Unknown result type (might be due to invalid IL or missing references)
((Transform)parentRectTransform).position = Input.mousePosition + offset;
}
}
namespace OutwardEnchanter
{
[BepInPlugin("gymmed.outwardenchanter", "Outward Enchanter", "0.0.1")]
public class OutwardEnchanter : BaseUnityPlugin
{
[HarmonyPatch(typeof(CharacterManager), "OnAllPlayersDoneLoading")]
public class CharacterManager_OnAllPlayersDoneLoading
{
private static void Postfix()
{
FillSpawnableItemToGUI();
}
}
public const string GUID = "gymmed.outwardenchanter";
public const string NAME = "Outward Enchanter";
public const string VERSION = "0.0.1";
public static string prefix = "[GymMed-Enchanter]";
public const string GUI_SHOW = "Outward Enchanter GUI Show/Hide";
internal static ManualLogSource Log;
internal void Awake()
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
Log = ((BaseUnityPlugin)this).Logger;
Log.LogMessage((object)"Hello world from Outward Enchanter 0.0.1!");
CustomKeybindings.AddAction("Outward Enchanter GUI Show/Hide", (KeybindingsCategory)0, (ControlType)2, (InputType)1);
SL.OnPacksLoaded += delegate
{
GUIManager.Instance.CreateCanvas();
};
new Harmony("gymmed.outwardenchanter").PatchAll();
}
internal void Update()
{
if (CustomKeybindings.GetKeyDown("Outward Enchanter GUI Show/Hide"))
{
GUIMainCanvasManager gUIMainCanvasManager = GUIManager.Instance?.MainCanvasManager;
if ((Object)(object)gUIMainCanvasManager == (Object)null)
{
LogMessage("Can't access null! Make sure GUI Canvas exist!");
return;
}
if (((Component)gUIMainCanvasManager).gameObject.activeSelf)
{
gUIMainCanvasManager.HideCanvas();
return;
}
gUIMainCanvasManager.ShowCanvas();
((Component)gUIMainCanvasManager).transform.SetAsLastSibling();
}
}
public static void LogMessage(string message)
{
Log.LogMessage((object)(prefix + " " + message));
}
public static void FillSpawnableItemToGUI()
{
try
{
GUIMainCanvasManager gUIMainCanvasManager = GUIManager.Instance?.MainCanvasManager;
if ((Object)(object)gUIMainCanvasManager == (Object)null)
{
LogMessage("Can't access null! Make sure GUI Canvas exist!");
return;
}
LogMessage($"OutwardEnchanter@FillSpawnableItemToGUI character exist: {(Object)(object)CharacterEnchanterManager.Instance?.MainCharacter == (Object)null}");
List<Item> list = ResourcesPrefabManager.Instance.EDITOR_GetSpawnableItemPrefabs(CharacterEnchanterManager.Instance.MainCharacter);
if (list == null || list.Count < 1)
{
string arg = ((list == null) ? "null" : list.Count.ToString());
LogMessage("OutwardEnchanter@FillSpawnableItemToGUI spawnable items doesn't exist. " + $"spawnableItems: {arg} character exist: {(Object)(object)CharacterEnchanterManager.Instance.MainCharacter == (Object)null}");
return;
}
List<Equipment> availableEquipment = new List<Equipment>(list.OfType<Equipment>().ToList());
gUIMainCanvasManager.AvailableEquipment = availableEquipment;
gUIMainCanvasManager.FillItemsData();
((Component)gUIMainCanvasManager).transform.SetAsLastSibling();
}
catch (Exception ex)
{
LogMessage("OutwardEnchanter@FillSpawnableItemToGUI error: " + ex.Message);
}
}
}
}
namespace OutwardEnchanter.Managers
{
public class CharacterEnchanterManager
{
private static CharacterEnchanterManager _instance;
private Character _mainCharacter;
public static CharacterEnchanterManager Instance
{
get
{
if (_instance == null)
{
_instance = new CharacterEnchanterManager();
}
return _instance;
}
}
public Character MainCharacter
{
get
{
return _mainCharacter;
}
set
{
_mainCharacter = value;
}
}
private CharacterEnchanterManager()
{
MainCharacter = Global.Lobby.PlayersInLobby[0].ControlledCharacter;
}
}
public class GUIMainCanvasManager : MonoBehaviour
{
private static GUIMainCanvasManager _instance;
private List<Equipment> _availableEquipment = new List<Equipment>();
private List<EnchantmentRecipe> _availableEnchantmentRecipes = new List<EnchantmentRecipe>();
private Dictionary<string, Equipment> _equipmentDictionary = new Dictionary<string, Equipment>();
private Dictionary<string, EnchantmentRecipe> _enchantmentRecipeDictionary = new Dictionary<string, EnchantmentRecipe>();
private Text _resultText;
private Button _enchantButton;
private Button _closeButton;
private Dropdown _chooseItemDropdown;
private Dropdown _chooseEnchantmentDropdown;
public static GUIMainCanvasManager Instance
{
get
{
if ((Object)(object)_instance == (Object)null)
{
_instance = new GUIMainCanvasManager();
}
return _instance;
}
}
public Text ResultText
{
get
{
return _resultText;
}
set
{
_resultText = value;
}
}
public Button EnchantButton
{
get
{
return _enchantButton;
}
set
{
_enchantButton = value;
}
}
public Button CloseButton
{
get
{
return _closeButton;
}
set
{
_closeButton = value;
}
}
public Dropdown ChooseItemDropdown
{
get
{
return _chooseItemDropdown;
}
set
{
_chooseItemDropdown = value;
}
}
public Dropdown ChooseEnchantmentDropdown
{
get
{
return _chooseEnchantmentDropdown;
}
set
{
_chooseEnchantmentDropdown = value;
}
}
public List<Equipment> AvailableEquipment
{
get
{
return _availableEquipment;
}
set
{
_availableEquipment = value;
}
}
public List<EnchantmentRecipe> AvailableEnchantmentRecipes
{
get
{
return _availableEnchantmentRecipes;
}
set
{
_availableEnchantmentRecipes = value;
}
}
public Dictionary<string, Equipment> EquipmentDictionary
{
get
{
return _equipmentDictionary;
}
set
{
_equipmentDictionary = value;
}
}
public Dictionary<string, EnchantmentRecipe> EnchantmentRecipeDictionary
{
get
{
return _enchantmentRecipeDictionary;
}
set
{
_enchantmentRecipeDictionary = value;
}
}
private GUIMainCanvasManager()
{
try
{
Init();
}
catch (Exception ex)
{
OutwardEnchanter.LogMessage("GUIMainCanvasManager error: " + ex.Message);
}
}
public void Init()
{
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Expected O, but got Unknown
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Expected O, but got Unknown
string text = "Background-Panel/Main-Panel/";
Transform obj = ((Component)this).transform.Find(text + "Lower-Panel/Result-Text");
ResultText = ((obj != null) ? ((Component)obj).GetComponent<Text>() : null);
if ((Object)(object)ResultText == (Object)null)
{
OutwardEnchanter.LogMessage("Couldn't find Result Text component");
}
Transform val = ((Component)this).transform.Find(text + "Header-Panel/");
if ((Object)(object)val == (Object)null)
{
ResultAndLogMessage("Couldn't find GUI header");
}
else
{
((Component)val).gameObject.AddComponent<DragParent>();
Transform obj2 = val.Find("Close-Button");
CloseButton = ((obj2 != null) ? ((Component)obj2).GetComponent<Button>() : null);
if ((Object)(object)CloseButton == (Object)null)
{
ResultAndLogMessage("Couldn't find Close Button component");
}
else
{
((UnityEvent)CloseButton.onClick).AddListener((UnityAction)delegate
{
HideCanvas();
});
}
}
Transform obj3 = ((Component)this).transform.Find(text + "Middle-Panel/Enchant-Button");
EnchantButton = ((obj3 != null) ? ((Component)obj3).GetComponent<Button>() : null);
if ((Object)(object)EnchantButton == (Object)null)
{
ResultAndLogMessage("Couldn't find Enchant Button component");
}
else
{
((UnityEvent)EnchantButton.onClick).AddListener((UnityAction)delegate
{
HandleOnEnchantButtonClick();
});
}
Transform obj4 = ((Component)this).transform.Find(text + "Middle-Panel/ItemPicker-Panel/ItemPick-Dropdown");
ChooseItemDropdown = ((obj4 != null) ? ((Component)obj4).GetComponent<Dropdown>() : null);
if ((Object)(object)ChooseItemDropdown == (Object)null)
{
ResultAndLogMessage("Couldn't find Items Dropdown component");
}
else
{
try
{
FillItemsData();
((UnityEvent<int>)(object)ChooseItemDropdown.onValueChanged).AddListener((UnityAction<int>)delegate(int index)
{
HandleOnChooseItemChange(index);
});
}
catch (Exception ex)
{
OutwardEnchanter.LogMessage("GUIMainCanvasManager@Init error: " + ex.Message);
}
}
Transform obj5 = ((Component)this).transform.Find(text + "Middle-Panel/EnchantmentPicker-Panel/EnchantmentPick-Dropdown");
ChooseEnchantmentDropdown = ((obj5 != null) ? ((Component)obj5).GetComponent<Dropdown>() : null);
if ((Object)(object)ChooseEnchantmentDropdown == (Object)null)
{
ResultAndLogMessage("Couldn't find Enchantments Dropdown component");
}
}
public void HandleOnEnchantButtonClick()
{
if ((Object)(object)ChooseItemDropdown == (Object)null)
{
ResultAndLogMessage("Couldn't find item selection dropdown!");
return;
}
if ((Object)(object)ChooseEnchantmentDropdown == (Object)null)
{
ResultAndLogMessage("Couldn't find enchantment recipe selection dropdown!");
return;
}
if (ChooseItemDropdown.options == null || ChooseItemDropdown.options.Count < 1)
{
ResultAndLogMessage($"Couldn't generate equipment options in dropdown! Available equipment count: {AvailableEquipment.Count}");
return;
}
string text = ChooseItemDropdown.options[ChooseItemDropdown.value].text;
if (!EquipmentDictionary.TryGetValue(text, out var value))
{
ResultAndLogMessage("Tried to enchant without providing and item!");
return;
}
if (ChooseEnchantmentDropdown.options == null || ChooseEnchantmentDropdown.options.Count < 1)
{
ResultAndLogMessage($"Couldn't generate enchantments options in dropdown! Available enchantments count: {AvailableEnchantmentRecipes.Count}");
return;
}
string text2 = ChooseEnchantmentDropdown.options[ChooseEnchantmentDropdown.value].text;
if (!EnchantmentRecipeDictionary.TryGetValue(text2, out var value2))
{
ResultAndLogMessage("Tried to enchant without providing and enchantment!");
return;
}
if (!value2.GetHasMatchingEquipment((Item)(object)value))
{
ResultAndLogMessage("Provided incompatible enchantment recipe with equipment!");
return;
}
try
{
Item val = SpawnEquipment(value);
val.Start();
Equipment val2 = (Equipment)(object)((val is Equipment) ? val : null);
if (val2 != null)
{
Enchantment enchantmentPrefab = ResourcesPrefabManager.Instance.GetEnchantmentPrefab(value2.RecipeID);
val2.AddEnchantment(((EffectPreset)enchantmentPrefab).PresetID, false);
val.ApplyVisualModifications();
ResultMessage("Successfully enchanted! \nequipment: " + ChooseItemDropdown.options[ChooseItemDropdown.value].text + " \nenchantment: " + ChooseEnchantmentDropdown.options[ChooseEnchantmentDropdown.value].text);
}
}
catch (Exception ex)
{
ResultAndLogMessage("Enchanting error: " + ex.Message);
}
}
public void HandleOnChooseItemChange(int index)
{
try
{
string text = ChooseItemDropdown.options[index].text;
if (!EquipmentDictionary.TryGetValue(text, out var value))
{
return;
}
List<EnchantmentRecipe> availableEnchantmentRecipies = EnchantmentsHelper.GetAvailableEnchantmentRecipies((Item)(object)value);
EnchantmentRecipeDictionary = new Dictionary<string, EnchantmentRecipe>();
List<string> list = new List<string>();
Enchantment val = null;
string text2 = "";
foreach (EnchantmentRecipe item in availableEnchantmentRecipies)
{
text2 = ((Object)item).name;
if (text2 == "")
{
val = ResourcesPrefabManager.Instance.GetEnchantmentPrefab(item.RecipeID);
if ((Object)(object)val == (Object)null)
{
continue;
}
text2 = ((EffectPreset)val).PresetID + "_" + val.Name;
}
if (EnchantmentRecipeDictionary.TryGetValue(text2, out var _))
{
text2 = text2 + "_" + Guid.NewGuid();
}
EnchantmentRecipeDictionary.Add(text2, item);
list.Add(text2);
}
if ((Object)(object)ChooseEnchantmentDropdown != (Object)null)
{
FillDropdownChoices(ChooseEnchantmentDropdown, list);
}
}
catch (Exception ex)
{
OutwardEnchanter.LogMessage("GUIMainCanvasManager@HandleOnChooseItemChange error: " + ex.Message);
}
}
public void FillItemsData()
{
try
{
List<string> list = new List<string>();
EquipmentDictionary = new Dictionary<string, Equipment>();
string text = "";
foreach (Equipment item in AvailableEquipment)
{
text = ((Item)item).ItemID + "_" + ((Item)item).Name;
if (EquipmentDictionary.TryGetValue(text, out var _))
{
text = text + "_" + Guid.NewGuid();
}
list.Add(text);
EquipmentDictionary.Add(text, item);
}
FillDropdownChoices(ChooseItemDropdown, list);
ChooseItemDropdown.value = 0;
ChooseItemDropdown.RefreshShownValue();
((UnityEvent<int>)(object)ChooseItemDropdown.onValueChanged).Invoke(ChooseItemDropdown.value);
}
catch (Exception ex)
{
OutwardEnchanter.LogMessage("GUIMainCanvasManager@FillItemsData error: " + ex.Message);
}
}
public void FillDropdownChoices(Dropdown dropdown, List<string> options)
{
dropdown.ClearOptions();
dropdown.AddOptions(options);
}
public void ResultAndLogMessage(string message)
{
OutwardEnchanter.LogMessage(message);
ResultMessage(message);
}
public void ResultMessage(string message)
{
if ((Object)(object)ResultText == (Object)null)
{
OutwardEnchanter.LogMessage("Tried to display result message: \"" + message + "\" on null UI Result reference");
}
else
{
ResultText.text = message;
}
}
public void HideCanvas()
{
((Component)this).gameObject.SetActive(false);
ForceUnlockCursor.RemoveUnlockSource();
}
public void ShowCanvas()
{
((Component)this).gameObject.SetActive(true);
ForceUnlockCursor.AddUnlockSource();
}
public Item SpawnEquipment(Equipment equipment)
{
//IL_000c: 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_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_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_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)
Character mainCharacter = CharacterEnchanterManager.Instance.MainCharacter;
Vector3 position = mainCharacter.CenterPosition + ((Component)mainCharacter).transform.forward * 1.5f;
Quaternion localRotation = ((Component)mainCharacter).transform.localRotation;
Item val = ItemManager.Instance.GenerateItemNetwork(((Item)equipment).ItemID);
((Component)val).transform.position = position;
((Component)val).transform.rotation = localRotation;
if ((Object)(object)((Component)equipment).GetComponent<MultipleUsage>() != (Object)null)
{
((Component)val).GetComponent<MultipleUsage>().RemainingAmount = 1;
}
((Component)val).gameObject.AddComponent<SafeFalling>();
return val;
}
}
public class GUIManager
{
private static GUIManager _instance;
private Dictionary<int, Enchantment> _enchantmentsDictionary;
private Canvas _mainCanvas;
private GUIMainCanvasManager _mainCanvasManager;
public static GUIManager Instance
{
get
{
if (_instance == null)
{
_instance = new GUIManager();
}
return _instance;
}
}
public Dictionary<int, Enchantment> EnchantmentsDictionary
{
get
{
return _enchantmentsDictionary;
}
set
{
_enchantmentsDictionary = value;
}
}
public Canvas MainCanvas
{
get
{
return _mainCanvas;
}
set
{
_mainCanvas = value;
}
}
public GUIMainCanvasManager MainCanvasManager
{
get
{
return _mainCanvasManager;
}
set
{
_mainCanvasManager = value;
}
}
private GUIManager()
{
}
public void CreateCanvas()
{
OutwardEnchanter.LogMessage("Initalizing Canvas..");
GameObject fromAssetBundle = AssetsHelper.GetFromAssetBundle<GameObject>("OutwardEnchanter", "outwardenchanterbundle", "OutwardEnchanterCanvas");
if ((Object)(object)fromAssetBundle == (Object)null)
{
OutwardEnchanter.LogMessage("Failed to load outwardenchanterbundle Asset Bundle");
return;
}
MainCanvas = Object.Instantiate<GameObject>(fromAssetBundle).GetComponent<Canvas>();
MainCanvasManager = ((Component)MainCanvas).gameObject.AddComponent<GUIMainCanvasManager>();
Object.DontDestroyOnLoad((Object)(object)MainCanvas);
}
}
}
namespace OutwardEnchanter.Helpers
{
public class AssetsHelper
{
public static 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 class EnchantmentsHelper
{
public static List<EnchantmentRecipe> GetAvailableEnchantmentRecipies(Item item)
{
List<EnchantmentRecipe> enchantmentRecipes = RecipeManager.Instance.GetEnchantmentRecipes();
List<EnchantmentRecipe> list = new List<EnchantmentRecipe>();
foreach (EnchantmentRecipe item2 in enchantmentRecipes)
{
if (item2.GetHasMatchingEquipment(item))
{
list.Add(item2);
}
}
return list;
}
public static void RefreshEnchantmentStatModifications(EquipmentStats stats)
{
//IL_019c: 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)
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications called!");
stats.m_statModifications.Clear();
Item item = ((ItemStats)stats).m_item;
Equipment val = (Equipment)(object)((item is Equipment) ? item : null);
float num = 0f;
float num2 = 0f;
int num3 = 0;
float num4 = 1f;
bool flag = false;
stats.m_totalStatusEffectResistance = stats.m_baseStatusEffectResistance;
if (stats.m_totalDamageBonus == null)
{
stats.m_totalDamageBonus = new float[stats.m_damageAttack.Length];
}
stats.m_damageAttack.CopyTo(stats.m_totalDamageBonus, 0);
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 1!");
stats.m_bonusDamageProtection[0] = 0f;
stats.m_bonusDamageResistance = new float[9];
if (Object.op_Implicit((Object)(object)val))
{
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 2!");
for (int i = 0; i < val.ActiveEnchantments.Count; i++)
{
StatModificationList statModifications = val.ActiveEnchantments[i].StatModifications;
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 3!");
stats.m_statModifications.AddRange(statModifications);
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 4!");
stats.m_totalStatusEffectResistance += val.ActiveEnchantments[i].GlobalStatusResistance;
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 5!");
num += statModifications.GetBonusValue((Stat)0);
num2 += statModifications.GetModifierValue((Stat)0);
num3 += (int)statModifications.GetBonusValue((Stat)1);
num4 += statModifications.GetModifierValue((Stat)1);
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 6!");
if (val.ActiveEnchantments[i].Indestructible)
{
flag = true;
}
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 7!");
foreach (DamageType item2 in val.ActiveEnchantments[i].ElementalResistances.List)
{
stats.m_bonusDamageResistance[item2.Type] += item2.Damage;
}
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 8!");
foreach (DamageType item3 in val.ActiveEnchantments[i].DamageModifier.List)
{
stats.m_totalDamageBonus[item3.Type] += item3.Damage;
}
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 9!");
stats.m_bonusDamageProtection[0] += statModifications.GetBonusValue((Stat)11);
}
}
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 10!");
stats.m_realWeight = Mathf.Clamp(((ItemStats)stats).RawWeight * (1f + num2 * 0.01f) + num, 0.1f, float.MaxValue);
if (flag)
{
stats.m_realDurability = -1;
((ItemStats)stats).m_item.ResetDurabiltiy();
return;
}
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 11!");
stats.m_realDurability = ((((ItemStats)stats).m_baseMaxDurability != -1) ? (Mathf.RoundToInt((float)((ItemStats)stats).m_baseMaxDurability * num4) + num3) : (-1));
OutwardEnchanter.LogMessage("GUIMainCanvasManager@RefreshEnchantmentStatModifications 12!");
if (stats.m_realDurability < 1 && ((ItemStats)stats).m_baseMaxDurability != -1)
{
stats.m_realDurability = 1;
}
}
public static void FindEnchantingBugs(Item item, EnchantmentRecipe enchantmentRecipe)
{
Equipment val = (Equipment)(object)((item is Equipment) ? item : null);
if (val == null)
{
return;
}
GUIMainCanvasManager mainCanvasManager = GUIManager.Instance.MainCanvasManager;
Enchantment enchantmentPrefab = ResourcesPrefabManager.Instance.GetEnchantmentPrefab(enchantmentRecipe.RecipeID);
OutwardEnchanter.LogMessage("got enchantment!");
if ((Object)(object)enchantmentPrefab == (Object)null)
{
mainCanvasManager.ResultAndLogMessage("Couldn't find Enchantment through ResourcesPrefabManager@GetEnchantmentPrefab!");
return;
}
OutwardEnchanter.LogMessage("before enchanting!");
if ((Object)(object)val == (Object)null)
{
OutwardEnchanter.LogMessage("You dont have and equipment derived class!");
}
if (val.m_enchantmentIDs.Contains(((EffectPreset)enchantmentPrefab).PresetID))
{
return;
}
Enchantment val2 = ResourcesPrefabManager.Instance.GenerateEnchantment(((EffectPreset)enchantmentPrefab).PresetID, ((Component)item).transform);
OutwardEnchanter.LogMessage("before enchanting!1");
if (!Object.op_Implicit((Object)(object)val2))
{
return;
}
OutwardEnchanter.LogMessage("before enchanting!1.5");
val2.ApplyEnchantment(val);
OutwardEnchanter.LogMessage("before enchanting!2");
RecipeManager.Instance.GetEnchantmentRecipeForID(((EffectPreset)enchantmentPrefab).PresetID);
OutwardEnchanter.LogMessage("before enchanting!3");
val.m_enchantmentIDs.Add(((EffectPreset)enchantmentPrefab).PresetID);
OutwardEnchanter.LogMessage("before enchanting!4");
val.m_activeEnchantments.Add(val2);
OutwardEnchanter.LogMessage("before enchanting!5");
val.m_enchantmentsHaveChanged = true;
OutwardEnchanter.LogMessage("before enchanting!6");
if ((Object)(object)item.Stats != (Object)null)
{
OutwardEnchanter.LogMessage("item have stats!");
}
if ((Object)(object)val.Stats != (Object)null)
{
OutwardEnchanter.LogMessage("equipment have stats!");
if (val.ActiveEnchantments != null)
{
if (val.ActiveEnchantments[0].StatModifications == null)
{
OutwardEnchanter.LogMessage("trying to access missing stat modifications of enchantment!");
}
}
else
{
OutwardEnchanter.LogMessage("missing active enchantments!");
}
RefreshEnchantmentStatModifications(val.Stats);
}
else
{
OutwardEnchanter.LogMessage("equipment doesn't have stats!");
Weapon val3 = (Weapon)(object)((val is Weapon) ? val : null);
if (val3 != null)
{
((Item)val3).m_stats = (ItemStats)(object)((Component)val).GetComponent<WeaponStats>();
if ((Object)(object)((Item)val3).m_stats == (Object)null)
{
OutwardEnchanter.LogMessage("weapon failed to add stats!");
}
}
else
{
((Item)val).m_stats = (ItemStats)(object)((Component)val).GetComponent<EquipmentStats>();
if ((Object)(object)((Item)val).m_stats == (Object)null)
{
OutwardEnchanter.LogMessage("armor failed to add stats!");
}
}
if ((Object)(object)item.m_stats == (Object)null)
{
OutwardEnchanter.LogMessage("still no stats!");
}
else
{
if ((Object)(object)item.m_stats.m_item == (Object)null)
{
OutwardEnchanter.LogMessage("Can't find item on stats?!");
item.Start();
if ((Object)(object)item.m_stats.m_item == (Object)null)
{
OutwardEnchanter.LogMessage("Can't find item on stats?! recursion");
item.StartInit();
}
}
RefreshEnchantmentStatModifications(val.Stats);
}
}
val.RefreshEnchantmentModifiers();
OutwardEnchanter.LogMessage("before enchanting!7");
}
}
}