Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of balrond character customization v0.1.5
plugins/BalrondCharacterCustomization.dll
Decompiled a month ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; using System.Globalization; 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.Text; using BepInEx; using HarmonyLib; using LitJson2; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("PlayerColors")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("PlayerColors")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("557f8e2f-a3ae-46a6-88b4-1e0416ad09c5")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace BalPlayerColorsrondVnV { [Serializable] public class MappedEffectList { public List<EffectInfo> pieceEffect; public List<EffectInfo> destroyedEffects; public List<EffectInfo> hitEffects; public List<EffectInfo> switchEffect; public List<EffectInfo> blockEffect; public List<EffectInfo> equipEffect; public List<EffectInfo> hitEffect; public List<EffectInfo> hitTerrainEffect; public List<EffectInfo> holdStartEffect; public List<EffectInfo> startEffect; public List<EffectInfo> trailStartEffect; public List<EffectInfo> triggerEffect; public List<EffectInfo> unequipEffect; public EffectList createEffectListFromInfo(List<EffectInfo> list) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown EffectList val = new EffectList(); List<EffectData> list2 = new List<EffectData>(); val.m_effectPrefabs = list2.ToArray(); return val; } private EffectData createEffectData(EffectInfo info) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown EffectData val = new EffectData(); val.m_inheritParentRotation = info.inheritRotation; val.m_multiplyParentVisualScale = info.multiplyScale; val.m_childTransform = info.childName; val.m_inheritParentScale = info.inheritScale; val.m_variant = info.variant; val.m_scale = info.scale; val.m_attach = info.attach; val.m_follow = info.follow; val.m_prefab = ZNetScene.instance.m_prefabs.Find((GameObject x) => ((Object)x).name == info.name); return val; } } [Serializable] public struct EffectInfo { public string name; public bool enabled; public int variant; public bool attach; public bool follow; public bool inheritRotation; public bool inheritScale; public bool multiplyScale; public bool radnomRotation; public bool scale; public string childName; public EffectInfo(string name, bool enabled = true, int variant = -1, bool attach = false, bool follow = false, bool inheritRotation = false, bool inheritScale = false, bool multiplyScale = false, bool radnomRotation = false, bool scale = false, string childName = null) { this.name = name; this.enabled = enabled; this.variant = variant; this.attach = attach; this.follow = follow; this.inheritRotation = inheritRotation; this.inheritScale = inheritScale; this.multiplyScale = multiplyScale; this.radnomRotation = radnomRotation; this.scale = scale; this.childName = childName; } } } namespace PlayerColors { public class BalrondPlayerCustomization2 : MonoBehaviour { private ZNetView netView; private Player _player; private VisEquipment _visEquipment; private SkinnedMeshRenderer _meshRenderer; private Transform _visual; public Color eyeColor; public Vector3 eyeColorVector; public float height = 0f; public GameObject eyesObject; public GameObject _eyesInstanced; public int eyesItemHash; public GameObject earObject; public GameObject _earInstanced; public int earItemHash; public GameObject hornsObject; public GameObject _hornsInstanced; public int hornsItemHash; public Dictionary<string, string> raceEars = new Dictionary<string, string>(); public Dictionary<string, Vector3> raceColor = new Dictionary<string, Vector3>(); public Dictionary<string, Texture> raceTexture = new Dictionary<string, Texture>(); private void Start() { netView = ((Component)this).GetComponent<ZNetView>(); _player = ((Component)this).GetComponent<Player>(); _visEquipment = ((Component)this).GetComponent<VisEquipment>(); if ((Object)(object)_player == (Object)null || (Object)(object)_visEquipment == (Object)null) { return; } _meshRenderer = _visEquipment.m_bodyModel; if (eyesItemHash == 0 && (Object)(object)ObjectDB.instance != (Object)null) { eyesObject = ObjectDB.instance.GetItemPrefab("eyes_bal"); eyesItemHash = (((Object)(object)eyesObject != (Object)null) ? ((object)eyesObject).GetHashCode() : 0); } if ((Object)(object)Launch.eyesObject != (Object)null) { eyesObject = Launch.eyesObject; if ((Object)(object)_eyesInstanced == (Object)null) { _eyesInstanced = Launch.AttachItem(eyesObject, -1, _visEquipment.m_helmet, _visEquipment); } } _visual = ((Component)_player).transform.Find("Visual"); if ((Object)(object)netView != (Object)null) { GetPlayerColor(); GetPlayerHeight(); } } public void SetEyeColor(Color eyeColor) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) this.eyeColor = eyeColor; eyeColorVector = Utils.ColorToVec3(eyeColor); SaveToCustomData(); ApplyColorToInstancedEyes(eyeColor); } public void SetHeight(float height) { this.height = height; SaveHeightToCustomData(); ApplyHeight(height); } public void SaveHeightToCustomData() { if ((Object)(object)_player != (Object)null) { _player.m_customData.Remove("BalrondHeight"); _player.m_customData.Add("BalrondHeight", height.ToString()); } } public void SaveToCustomData() { if ((Object)(object)_player != (Object)null) { _player.m_customData.Remove("BalrondEyesX"); _player.m_customData.Remove("BalrondEyesY"); _player.m_customData.Remove("BalrondEyesZ"); _player.m_customData.Add("BalrondEyesX", eyeColorVector.x.ToString()); _player.m_customData.Add("BalrondEyesY", eyeColorVector.y.ToString()); _player.m_customData.Add("BalrondEyesZ", eyeColorVector.z.ToString()); } } public float GetHeightFromPlayerCustomData(Player player = null) { string value = "0"; Player val = _player; if ((Object)(object)player != (Object)null) { val = player; } string s = (val.m_customData.TryGetValue("BalrondHeight", out value) ? value : "0"); return float.Parse(s); } public Vector3 GetFromPlayerCustomData(Player player = null) { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) string value = "1"; string value2 = "1"; string value3 = "1"; Player val = _player; if ((Object)(object)player != (Object)null) { val = player; } string s = (val.m_customData.TryGetValue("BalrondEyesX", out value) ? value : "1"); string s2 = (val.m_customData.TryGetValue("BalrondEyesY", out value2) ? value2 : "1"); string s3 = (val.m_customData.TryGetValue("BalrondEyesZ", out value3) ? value3 : "1"); return new Vector3(float.Parse(s), float.Parse(s2), float.Parse(s3)); } private void GetPlayerColor() { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) eyeColorVector = GetFromPlayerCustomData(); eyeColor = new Color(eyeColorVector.x, eyeColorVector.y, eyeColorVector.z, 1f); SetEyeColor(eyeColor); } private void GetPlayerHeight() { height = GetHeightFromPlayerCustomData(); SetHeight(height); } private void ApplyHeight(float height) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) if (height != 0f && (Object)(object)_visual != (Object)null) { _visual.localScale = new Vector3(0.95f, 0.95f + height, 0.95f); } } private void ApplyColorToInstancedEyes(Color color) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_eyesInstanced == (Object)null)) { Renderer[] componentsInChildren = _eyesInstanced.GetComponentsInChildren<Renderer>(); for (int i = 0; i < componentsInChildren.Length; i++) { Material material = componentsInChildren[i].material; material.SetColor("_Color", color); material.SetColor("_EmissionColor", color); } } } } public class BalrondPlayerCustomization : MonoBehaviour { private ZNetView netView; private Player _player; private VisEquipment _visEquipment; private SkinnedMeshRenderer _meshRenderer; private Transform _visual; public Color eyeColor; public Vector3 eyeColorVector; public float height = 0f; public GameObject eyesObject; public GameObject _eyesInstanced; public int eyesItemHash; public bool isFemale = false; private void Start() { netView = ((Component)this).GetComponent<ZNetView>(); _player = ((Component)this).GetComponent<Player>(); _visEquipment = ((Component)this).GetComponent<VisEquipment>(); if ((Object)(object)_player == (Object)null || (Object)(object)_visEquipment == (Object)null) { return; } _meshRenderer = _visEquipment.m_bodyModel; if (eyesItemHash == 0 && (Object)(object)ObjectDB.instance != (Object)null) { eyesObject = ObjectDB.instance.GetItemPrefab("eyes_bal"); eyesItemHash = (((Object)(object)eyesObject != (Object)null) ? ((object)eyesObject).GetHashCode() : 0); } if ((Object)(object)Launch.eyesObject != (Object)null) { eyesObject = Launch.eyesObject; if ((Object)(object)_eyesInstanced == (Object)null) { _eyesInstanced = Launch.AttachItem(eyesObject, -1, _visEquipment.m_helmet, _visEquipment); Transform val = _eyesInstanced.transform.Find("body"); ((Component)val).GetComponent<SkinnedMeshRenderer>().sharedMesh = _meshRenderer.sharedMesh; } } _visual = ((Component)_player).transform.Find("Visual"); if ((Object)(object)netView != (Object)null) { GetPlayerColor(); GetPlayerHeight(); } } public void SetEyeColor(Color eyeColor) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) this.eyeColor = eyeColor; eyeColorVector = Utils.ColorToVec3(eyeColor); SaveToCustomData(); ApplyColorToInstancedEyes(eyeColor); } public void SetHeight(float height) { this.height = height; SaveHeightToCustomData(); ApplyHeight(height); } public void SaveHeightToCustomData() { if (!((Object)(object)_player == (Object)null)) { _player.m_customData.Remove("BalrondHeight"); _player.m_customData.Add("BalrondHeight", height.ToString()); } } public void SaveToCustomData() { if (!((Object)(object)_player == (Object)null)) { _player.m_customData.Remove("BalrondEyesX"); _player.m_customData.Remove("BalrondEyesY"); _player.m_customData.Remove("BalrondEyesZ"); _player.m_customData.Add("BalrondEyesX", eyeColorVector.x.ToString()); _player.m_customData.Add("BalrondEyesY", eyeColorVector.y.ToString()); _player.m_customData.Add("BalrondEyesZ", eyeColorVector.z.ToString()); } } public float GetHeightFromPlayerCustomData(Player player = null) { string value = "0"; Player val = _player; if ((Object)(object)player != (Object)null) { val = player; } string s = (val.m_customData.TryGetValue("BalrondHeight", out value) ? value : "0"); return float.Parse(s); } public Vector3 GetFromPlayerCustomData(Player player = null) { //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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) string value = "1"; string value2 = "1"; string value3 = "1"; Player val = _player; if ((Object)(object)player != (Object)null) { val = player; } string s = (val.m_customData.TryGetValue("BalrondEyesX", out value) ? value : "1"); string s2 = (val.m_customData.TryGetValue("BalrondEyesY", out value2) ? value2 : "1"); string s3 = (val.m_customData.TryGetValue("BalrondEyesZ", out value3) ? value3 : "1"); return new Vector3(float.Parse(s), float.Parse(s2), float.Parse(s3)); } private void GetPlayerColor() { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) eyeColorVector = GetFromPlayerCustomData(); eyeColor = new Color(eyeColorVector.x, eyeColorVector.y, eyeColorVector.z, 1f); SetEyeColor(eyeColor); } private void GetPlayerHeight() { height = GetHeightFromPlayerCustomData(); SetHeight(height); } private void ApplyHeight(float height) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) if (height != 0f && (Object)(object)_visual != (Object)null) { _visual.localScale = new Vector3(0.95f, 0.95f + height, 0.95f); } } private void ApplyColorToInstancedEyes(Color color) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_eyesInstanced == (Object)null)) { Renderer[] componentsInChildren = _eyesInstanced.GetComponentsInChildren<Renderer>(); for (int i = 0; i < componentsInChildren.Length; i++) { Material material = componentsInChildren[i].material; material.SetColor("_Color", color); material.SetColor("_EmissionColor", color); } } } } public class BalrondTranslator { public static Dictionary<string, Dictionary<string, string>> translations = new Dictionary<string, Dictionary<string, string>>(); public static Dictionary<string, string> getLanguage(string language) { if (string.IsNullOrEmpty(language)) { return null; } if (translations.TryGetValue(language, out var value)) { return value; } return null; } } [BepInPlugin("balrond.astafaraios.BalrondCharacterCustomization", "BalrondCharacterCustomization", "0.1.5")] public class Launch : BaseUnityPlugin { [HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")] public static class Object_CopyOtherDB_Path { public static void Postfix() { if (!IsObjectDBValid()) { return; } databaseAddMethods.AddItems(modResourceLoader.itemPrefabs); ShaderReplacment.runMaterialFix(); GameObject itemPrefab = ObjectDB.instance.GetItemPrefab("Hair3"); if (!((Object)(object)itemPrefab != (Object)null)) { return; } Material val = null; Renderer[] componentsInChildren = itemPrefab.GetComponentsInChildren<Renderer>(); foreach (Renderer val2 in componentsInChildren) { val = val2.material; } foreach (GameObject itemPrefab2 in modResourceLoader.itemPrefabs) { if (((Object)itemPrefab2).name.Contains("Hair") && (Object)(object)val != (Object)null) { Renderer[] componentsInChildren2 = itemPrefab.GetComponentsInChildren<Renderer>(); foreach (Renderer val3 in componentsInChildren2) { val3.material = val; } } } } } [HarmonyPatch(typeof(ObjectDB), "Awake")] public static class ObjectDB_Awake_Path { public static void Postfix() { if (IsObjectDBValid()) { databaseAddMethods.AddItems(modResourceLoader.itemPrefabs); databaseAddMethods.AddStatuseffects(modResourceLoader.statusEffects); databaseAddMethods.AddRecipes(modResourceLoader.recipes); } } } [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class ZNetScene_Awake_Path { public static bool hasSpawned; public static void Prefix(ZNetScene __instance) { //IL_0086: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance == (Object)null) { Debug.LogWarning((object)(projectName + ": No ZnetScene found")); return; } modResourceLoader.AddPrefabsToZnetScene(__instance); GameObject val = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "Player"); BalrondPlayerCustomization component = val.GetComponent<BalrondPlayerCustomization>(); if ((Object)(object)component == (Object)null) { val.AddComponent<BalrondPlayerCustomization>(); } if (!Launch.hasSpawned) { if (new ZNet().IsDedicated()) { Launch.hasSpawned = true; return; } ShaderReplacment.runMaterialFix(); Launch.hasSpawned = true; } } } [HarmonyPatch(typeof(FejdStartup), "SetupGui")] private class FejdStartup_SetupGUI { private static void Postfix() { string selectedLanguage = Localization.instance.GetSelectedLanguage(); Dictionary<string, string> translations = GetTranslations(selectedLanguage); AddTranslations(translations); RefreshLabels(); } } [HarmonyPriority(800)] [HarmonyPatch(typeof(Localization), "SetupLanguage")] private class Translation_SetupLanguage { private static void Prefix(Localization __instance, string language) { Dictionary<string, string> translations = GetTranslations(language); AddTranslations(translations, __instance); RefreshLabels(); } } [HarmonyPriority(800)] [HarmonyPatch(typeof(Localization), "LoadCSV")] private class Translation_LoadCSV { private static void Prefix(Localization __instance, string language) { Dictionary<string, string> translations = GetTranslations(language); AddTranslations(translations, __instance); RefreshLabels(); } } [HarmonyPatch(typeof(PlayerCustomizaton), "OnBeardLeft")] public static class PlayerCustomizatonOnBeardLeft { public static void Prefix(PlayerCustomizaton __instance) { if (__instance.GetPlayer().GetPlayerModel() == 0) { return; } int num = __instance.GetBeardIndex(); for (int num2 = num - 1; num2 >= 0; num2--) { if (__instance.m_beards[num2].m_itemData.m_shared.m_toolTier <= __instance.m_hairToolTier) { num = num2; break; } } __instance.SetBeard(num); } } [HarmonyPatch(typeof(PlayerCustomizaton), "OnBeardRight")] public static class PlayerCustomizatonOnBeardRight { public static void Prefix(PlayerCustomizaton __instance) { if (__instance.GetPlayer().GetPlayerModel() == 0) { return; } int num = __instance.GetBeardIndex(); for (int i = num + 1; i < __instance.m_beards.Count; i++) { if (__instance.m_beards[i].m_itemData.m_shared.m_toolTier <= __instance.m_hairToolTier) { num = i; break; } } __instance.SetBeard(num); } } [HarmonyPatch(typeof(PlayerCustomizaton), "SetPlayerModel")] public static class PlayerCustomizaton_SetPlayerModel_Patch { public static void Postfix(PlayerCustomizaton __instance, int index) { Player player = __instance.GetPlayer(); if (Object.op_Implicit((Object)(object)player)) { BalrondPlayerCustomization component = ((Component)player).GetComponent<BalrondPlayerCustomization>(); if (!((Object)(object)component == (Object)null) && !((Object)(object)component._eyesInstanced == (Object)null)) { ((MonoBehaviour)player).StartCoroutine(ApplyEyesMeshNextFrame(player, component, index)); } } } private static IEnumerator ApplyEyesMeshNextFrame(Player player, BalrondPlayerCustomization balrond, int modelIndex) { yield return null; VisEquipment ve = ((Humanoid)player).m_visEquipment; if ((Object)(object)ve == (Object)null || (Object)(object)ve.m_bodyModel == (Object)null) { yield break; } SkinnedMeshRenderer bodySMR = ve.m_bodyModel; Transform eyeTransform = balrond._eyesInstanced.transform.Find("body"); if (!((Object)(object)eyeTransform == (Object)null)) { SkinnedMeshRenderer eyesSMR = ((Component)eyeTransform).GetComponent<SkinnedMeshRenderer>(); if (!((Object)(object)eyesSMR == (Object)null)) { eyesSMR.sharedMesh = bodySMR.sharedMesh; eyesSMR.rootBone = bodySMR.rootBone; eyesSMR.bones = bodySMR.bones; } } } } [HarmonyPatch(typeof(FejdStartup), "Awake")] public static class FejdStartup_Awake_Patch { public static void Postfix(FejdStartup __instance) { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Expected O, but got Unknown //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Expected O, but got Unknown //IL_01b5: Unknown result type (might be due to invalid IL or missing references) Transform val = FejdStartup.instance.m_selectCharacterPanel.transform.Find("BottomWindow"); Transform val2 = Object.Instantiate<Transform>(val.Find("New")); ((Object)val2).name = "Edit"; ((Component)val2).transform.SetParent(val); ((Component)val2).GetComponent<RectTransform>().anchoredPosition = Vector2.op_Implicit(new Vector3(-100f, 50f, 0f)); editButton = ((Component)((Component)val2).transform.Find("Text")).GetComponent<TMP_Text>(); editButton.text = Localization.instance.Localize("$tag_edit_character_button"); ((UnityEventBase)((Component)val2).GetComponent<Button>().onClick).RemoveAllListeners(); ((Component)val2).GetComponent<Button>().onClick = new ButtonClickedEvent(); ((UnityEvent)((Component)val2).GetComponent<Button>().onClick).AddListener(new UnityAction(StartCharacterEdit)); ((Component)val2).GetComponent<UIGamePad>().m_zinputKey = "JoyLTrigger"; ((TMP_Text)((Component)((Component)val2).transform.Find("gamepad_hint").Find("Text")).GetComponent<TextMeshProUGUI>()).text = "LT"; title = Object.Instantiate<Transform>(FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")); editTitle = ((Component)title).GetComponent<TMP_Text>(); ((Object)title).name = "EditTitle"; title.SetParent(FejdStartup.instance.m_newCharacterPanel.transform); editTitle.text = Localization.instance.Localize("$tag_edit_character_panel"); ((Component)title).GetComponent<RectTransform>().anchoredPosition = ((Component)FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")).GetComponent<RectTransform>().anchoredPosition; ((Component)title).gameObject.SetActive(false); if (eyesItemHash == 0 && (Object)(object)ObjectDB.instance != (Object)null) { eyesObject = ObjectDB.instance.GetItemPrefab("eyes_bal"); if ((Object)(object)eyesObject != (Object)null) { eyesItemHash = ((object)eyesObject).GetHashCode(); } } BalrondPlayerCustomization component = FejdStartup.instance.m_playerPrefab.GetComponent<BalrondPlayerCustomization>(); if ((Object)(object)component == (Object)null) { component = FejdStartup.instance.m_playerPrefab.AddComponent<BalrondPlayerCustomization>(); } } } [HarmonyPatch(typeof(PlayerCustomizaton), "Update")] public static class PlayerCustomizatonUpdatePatch { public static void Postfix(PlayerCustomizaton __instance) { //IL_03e4: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Unknown result type (might be due to invalid IL or missing references) //IL_0403: Unknown result type (might be due to invalid IL or missing references) //IL_0409: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_041d: Unknown result type (might be due to invalid IL or missing references) //IL_0420: Unknown result type (might be due to invalid IL or missing references) //IL_0422: Unknown result type (might be due to invalid IL or missing references) //IL_04ef: Unknown result type (might be due to invalid IL or missing references) //IL_04f2: Unknown result type (might be due to invalid IL or missing references) //IL_0591: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)CustomizationPanel == (Object)null && (Object)(object)__instance.m_hairTone != (Object)null) { CustomizationPanel = ((Component)__instance.m_hairTone).transform.parent.parent.parent; } if ((Object)(object)CustomizationPanel == (Object)null) { return; } if ((Object)(object)hairPanel == (Object)null || (Object)(object)barberhairPanel == (Object)null) { Transform[] componentsInChildren = ((Component)CustomizationPanel).GetComponentsInChildren<Transform>(); for (int i = 0; i < componentsInChildren.Length; i++) { if ((Object)(object)hairPanel == (Object)null && ((Object)componentsInChildren[i]).name == "BalrondCustomizationPanel") { hairPanel = componentsInChildren[i]; } else if ((Object)(object)barberhairPanel == (Object)null && ((Object)componentsInChildren[i]).name == "BarberHairPanel") { barberhairPanel = componentsInChildren[i]; } if ((Object)(object)hairPanel != (Object)null && (Object)(object)barberhairPanel != (Object)null) { break; } } } if ((Object)(object)sliderR == (Object)null || (Object)(object)sliderG == (Object)null || (Object)(object)sliderB == (Object)null || (Object)(object)sliderS == (Object)null || (Object)(object)sliderER == (Object)null || (Object)(object)sliderEG == (Object)null || (Object)(object)sliderEB == (Object)null || (Object)(object)sliderH == (Object)null) { Transform[] componentsInChildren2 = ((Component)CustomizationPanel).GetComponentsInChildren<Transform>(); for (int j = 0; j < componentsInChildren2.Length; j++) { string name = ((Object)componentsInChildren2[j]).name; Slider component = ((Component)componentsInChildren2[j]).GetComponent<Slider>(); if (!((Object)(object)component == (Object)null)) { switch (name) { case "Red_Slider": sliderR = component; break; case "Green_Slider": sliderG = component; break; case "Blue_Slider": sliderB = component; break; case "Skin slider": sliderS = component; break; case "RedEye_Slider": sliderER = component; break; case "GreenEye_Slider": sliderEG = component; break; case "BlueEye_Slider": sliderEB = component; break; case "Height_Slider": sliderH = component; break; } } } } if ((Object)(object)sliderR != (Object)null) { myR = sliderR.value; } if ((Object)(object)sliderG != (Object)null) { myG = sliderG.value; } if ((Object)(object)sliderB != (Object)null) { myB = sliderB.value; } if (myR == 99f || myG == 99f || myB == 99f) { return; } Color val = default(Color); ((Color)(ref val))..ctor(myR, myG, myB, 1f); Player val2 = null; FejdStartup componentInParent = ((Component)__instance).GetComponentInParent<FejdStartup>(); if ((Object)(object)componentInParent != (Object)null) { val2 = componentInParent.GetPreviewPlayer(); } else if ((Object)(object)PlayerCustomizaton.m_barberInstance != (Object)null) { val2 = PlayerCustomizaton.m_barberInstance.GetPlayer(); } if ((Object)(object)val2 == (Object)null) { return; } val2.SetHairColor(Utils.ColorToVec3(val)); if ((Object)(object)sliderS != (Object)null) { Color val3 = Color.Lerp(__instance.m_skinColor0, __instance.m_skinColor1, sliderS.value); val2.SetSkinColor(Utils.ColorToVec3(val3)); } if (eyesItemHash == 0 && (Object)(object)ObjectDB.instance != (Object)null) { GameObject itemPrefab = ObjectDB.instance.GetItemPrefab("eyes_bal"); if ((Object)(object)itemPrefab != (Object)null) { eyesItemHash = ((object)itemPrefab).GetHashCode(); } } BalrondPlayerCustomization component2 = ((Component)val2).GetComponent<BalrondPlayerCustomization>(); if ((Object)(object)component2 != (Object)null && (Object)(object)sliderER != (Object)null && (Object)(object)sliderEG != (Object)null && (Object)(object)sliderEB != (Object)null && (Object)(object)sliderH != (Object)null) { Color val4 = default(Color); ((Color)(ref val4))..ctor(sliderER.value, sliderEG.value, sliderEB.value, 1f); if (val4 != component2.eyeColor) { val2.m_customData.Remove("BalrondEyesX"); val2.m_customData.Remove("BalrondEyesY"); val2.m_customData.Remove("BalrondEyesZ"); val2.m_customData.Add("BalrondEyesX", val4.r.ToString()); val2.m_customData.Add("BalrondEyesY", val4.g.ToString()); val2.m_customData.Add("BalrondEyesZ", val4.b.ToString()); component2.SetEyeColor(val4); } if ((Object)(object)sliderH != (Object)null && sliderH.value != component2.height) { val2.m_customData.Remove("BalrondHeight"); val2.m_customData.Add("BalrondHeight", sliderH.value.ToString()); component2.SetHeight(sliderH.value); } } } } [HarmonyPatch(typeof(FejdStartup), "SetupCharacterPreview")] public static class FejdStartup_SetupCharacterPreview_Patch { public static void Postfix(FejdStartup __instance) { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) if (eyesItemHash == 0 && (Object)(object)ObjectDB.instance != (Object)null) { eyesObject = ObjectDB.instance.GetItemPrefab("eyes_bal"); if ((Object)(object)eyesObject != (Object)null) { eyesItemHash = ((object)eyesObject).GetHashCode(); } } BalrondPlayerCustomization component = __instance.m_playerInstance.GetComponent<BalrondPlayerCustomization>(); if ((Object)(object)component != (Object)null) { Player previewPlayer = __instance.GetPreviewPlayer(); Vector3 fromPlayerCustomData = component.GetFromPlayerCustomData(previewPlayer); float heightFromPlayerCustomData = component.GetHeightFromPlayerCustomData(previewPlayer); if ((Object)(object)component._eyesInstanced == (Object)null) { component._eyesInstanced = AttachItem(eyesObject, -1, ((Humanoid)previewPlayer).m_visEquipment.m_helmet, ((Humanoid)previewPlayer).m_visEquipment); } component.SetEyeColor(new Color(fromPlayerCustomData.x, fromPlayerCustomData.y, fromPlayerCustomData.z, 1f)); component.SetHeight(heightFromPlayerCustomData); } } } [HarmonyPatch(typeof(FejdStartup), "OnNewCharacterDone")] public static class FejdStartup_OnNewCharacterDone_Patch { public static bool Prefix(FejdStartup __instance, ref List<PlayerProfile> ___m_profiles) { if (!editingCharacter) { return true; } ((Component)title).gameObject.SetActive(false); ((Component)FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")).gameObject.SetActive(true); editingCharacter = false; string text = ((TMP_InputField)__instance.m_csNewCharacterName).text; string text2 = text.ToLower(); Traverse val = Traverse.Create((object)FejdStartup.instance); int value = val.Field("m_profileIndex").GetValue<int>(); List<PlayerProfile> value2 = val.Field("m_profiles").GetValue<List<PlayerProfile>>(); PlayerProfile val2 = value2[value]; GameObject value3 = val.Field("m_playerInstance").GetValue<GameObject>(); Player component = value3.GetComponent<Player>(); if (eyesItemHash == 0 && (Object)(object)ObjectDB.instance != (Object)null) { eyesObject = ObjectDB.instance.GetItemPrefab("eyes_bal"); if ((Object)(object)eyesObject != (Object)null) { eyesItemHash = ((object)eyesObject).GetHashCode(); } } BalrondPlayerCustomization component2 = value3.GetComponent<BalrondPlayerCustomization>(); if ((Object)(object)component2 != (Object)null) { component.m_customData.Remove("BalrondEyesX"); component.m_customData.Remove("BalrondEyesY"); component.m_customData.Remove("BalrondEyesZ"); component.m_customData.Remove("BalrondHeight"); component.m_customData.Add("BalrondEyesX", sliderER.value.ToString()); component.m_customData.Add("BalrondEyesY", sliderEG.value.ToString()); component.m_customData.Add("BalrondEyesZ", sliderEB.value.ToString()); component.m_customData.Add("BalrondHeight", sliderH.value.ToString()); } else { Debug.LogWarning((object)"Couldnt save character custom information"); } val2.SavePlayerData(component); val2.SetName(text); val2.Save(); __instance.m_selectCharacterPanel.SetActive(true); __instance.m_newCharacterPanel.SetActive(false); ___m_profiles = null; Traverse.Create((object)__instance).Method("SetSelectedProfile", new object[1] { text2 }).GetValue(); return false; } } [HarmonyPatch(typeof(FejdStartup), "OnNewCharacterCancel")] public static class FejdStartup_OnNewCharacterCancel_Patch { public static void Postfix(FejdStartup __instance) { ((Component)title).gameObject.SetActive(false); ((Component)FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")).gameObject.SetActive(true); editingCharacter = false; if (eyesItemHash == 0 && (Object)(object)ObjectDB.instance != (Object)null) { eyesObject = ObjectDB.instance.GetItemPrefab("eyes_bal"); if ((Object)(object)eyesObject != (Object)null) { eyesItemHash = ((object)eyesObject).GetHashCode(); } } } } [HarmonyPatch(typeof(PlayerCustomizaton), "OnEnable")] public static class PlayerCustomizaton_OnEnable_Patch { public static void Postfix(PlayerCustomizaton __instance) { //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: 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_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) if (!editingCharacter) { return; } FejdStartup componentInParent = ((Component)__instance).GetComponentInParent<FejdStartup>(); if ((Object)(object)componentInParent == (Object)null) { return; } Player previewPlayer = componentInParent.GetPreviewPlayer(); if ((Object)(object)previewPlayer == (Object)null) { return; } if (previewPlayer.GetPlayerModel() == 1) { __instance.m_maleToggle.isOn = false; __instance.m_femaleToggle.isOn = true; } VisEquipment value = Traverse.Create((object)previewPlayer).Field("m_visEquipment").GetValue<VisEquipment>(); if ((Object)(object)value == (Object)null) { return; } Vector3 value2 = Traverse.Create((object)value).Field("m_skinColor").GetValue<Vector3>(); Vector3 val = Utils.ColorToVec3(__instance.m_skinColor0); Vector3 val2 = Utils.ColorToVec3(__instance.m_skinColor1); float num = Vector3.Distance(val2, val); float value3 = ((num > 0f) ? (Vector3.Distance(value2, val) / num * (__instance.m_skinHue.maxValue - __instance.m_skinHue.minValue) + __instance.m_skinHue.minValue) : __instance.m_skinHue.minValue); __instance.m_skinHue.value = value3; Vector3 value4 = Traverse.Create((object)value).Field("m_hairColor").GetValue<Vector3>(); BalrondPlayerCustomization component = ((Component)previewPlayer).GetComponent<BalrondPlayerCustomization>(); if ((Object)(object)uiPanel == (Object)null) { EditExistingPanel(); CreateHairPanel(); } Slider[] componentsInChildren = uiPanel.GetComponentsInChildren<Slider>(); foreach (Slider val3 in componentsInChildren) { string name = ((Object)val3).name; switch (name) { case "Red_Slider": val3.value = value4.x; break; case "Green_Slider": val3.value = value4.y; break; case "Blue_Slider": val3.value = value4.z; break; } if ((Object)(object)component != (Object)null) { switch (name) { case "RedEye_Slider": val3.value = component.eyeColorVector.x; break; case "GreenEye_Slider": val3.value = component.eyeColorVector.y; break; case "BlueEye_Slider": val3.value = component.eyeColorVector.z; break; case "Height_Slider": val3.value = component.height; break; } } } } } [HarmonyPatch(typeof(FejdStartup), "OnCharacterNew")] public static class OnCharacterNewPatch { public static void Postfix(FejdStartup __instance) { string selectedLanguage = Localization.instance.GetSelectedLanguage(); Dictionary<string, string> translations = GetTranslations(selectedLanguage); AddTranslations(translations); if ((Object)(object)uiPanel == (Object)null) { EditExistingPanel(); CreateHairPanel(); } if (eyesItemHash == 0 && (Object)(object)ObjectDB.instance != (Object)null) { eyesObject = ObjectDB.instance.GetItemPrefab("eyes_bal"); if ((Object)(object)eyesObject != (Object)null) { eyesItemHash = ((object)eyesObject).GetHashCode(); } } RefreshLabels(); } } [HarmonyPatch(typeof(PlayerCustomizaton), "ShowBarberGui")] public static class PlayerCustomizaton_ShowBarberGui_Patch { public static Vector3 playerHairColor = Vector3.zero; public static void Prefix(PlayerCustomizaton __instance) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) playerHairColor = Player.m_localPlayer.GetHairColor(); } public static void Postfix(PlayerCustomizaton __instance) { //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_0015: 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_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) PlayerCustomizaton.m_lastHairColor = playerHairColor; Vector3 eyeColorVector = ((Component)Player.m_localPlayer).GetComponent<BalrondPlayerCustomization>().eyeColorVector; float height = ((Component)Player.m_localPlayer).GetComponent<BalrondPlayerCustomization>().height; if ((Object)(object)uiHairPanel == (Object)null) { EditBarberGuiLayout(); CreateHairColorBarberGui(); } if (eyesItemHash == 0 && (Object)(object)ObjectDB.instance != (Object)null) { eyesObject = ObjectDB.instance.GetItemPrefab("eyes_bal"); if ((Object)(object)eyesObject != (Object)null) { eyesItemHash = ((object)eyesObject).GetHashCode(); } } Slider[] componentsInChildren = uiHairPanel.GetComponentsInChildren<Slider>(); foreach (Slider val in componentsInChildren) { if (((Object)val).name == "Red_Slider") { val.value = playerHairColor.x; } else if (((Object)val).name == "Green_Slider") { val.value = playerHairColor.y; } else if (((Object)val).name == "Blue_Slider") { val.value = playerHairColor.z; } if (((Object)val).name == "RedEye_Slider") { val.value = eyeColorVector.x; } else if (((Object)val).name == "GreenEye_Slider") { val.value = eyeColorVector.y; } else if (((Object)val).name == "BlueEye_Slider") { val.value = eyeColorVector.z; } if (((Object)val).name == "Height_Slider") { val.value = eyeColorVector.x; } } RefreshLabels(); } } private readonly Harmony _harmony = new Harmony("balrond.astafaraios.BalrondCharacterCustomization"); public static JsonLoader jsonLoader = new JsonLoader(); public static GameObject RootObject; public static GameObject PrefabContainer; public static ModResourceLoader modResourceLoader = new ModResourceLoader(); public static DatabaseAddMethods databaseAddMethods = new DatabaseAddMethods(); public static string projectName = "BalrondCharacterCustomization"; public static bool hasSpawned = false; public const string PluginName = "BalrondCharacterCustomization"; public static bool disableTutorials; public static bool newHardcorePlayer; public static bool skipIntro; public static bool editedBarber = false; public static GameObject uiPanel; public static GameObject uiHairPanel; public static Slider sliderR; public static Slider sliderG; public static Slider sliderB; public static Slider sliderS; public static Slider sliderER; public static Slider sliderEG; public static Slider sliderEB; public static Slider sliderH; public static float myR = 99f; public static float myG = 99f; public static float myB = 99f; public static Transform CustomizationPanel; public static Transform BarberCustomizationPanel; public static Transform hairPanel; public static Transform barberhairPanel; public static bool tryToFind = true; public static readonly bool isDebug = true; public static bool editingCharacter = false; public static Transform title; public static int eyesItemHash = 0; public static GameObject eyesObject; public static Dictionary<string, Vector3> eyeColors = new Dictionary<string, Vector3>(); public static Dictionary<string, TextMeshProUGUI> textMeshProUGUIs = new Dictionary<string, TextMeshProUGUI>(); public static TMP_Text editButton; public static TMP_Text editTitle; private void Awake() { jsonLoader.loadJson(); createPrefabContainer(); modResourceLoader.loadAssets(); _harmony.PatchAll(); } public void createPrefabContainer() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown RootObject = new GameObject("_ValheimReforgedRoot"); Object.DontDestroyOnLoad((Object)(object)RootObject); PrefabContainer = new GameObject("Prefabs"); PrefabContainer.transform.parent = RootObject.transform; PrefabContainer.SetActive(false); } public static GameObject cloneMe(GameObject source, string name) { GameObject val = Object.Instantiate<GameObject>(source, PrefabContainer.transform); ((Object)val).name = name; fixMaterials(val, source); val.SetActive(true); return val; } public static GameObject fixMaterials(GameObject clone, GameObject source) { MeshRenderer[] componentsInChildren = source.GetComponentsInChildren<MeshRenderer>(); foreach (MeshRenderer val in componentsInChildren) { MeshRenderer[] componentsInChildren2 = clone.GetComponentsInChildren<MeshRenderer>(); foreach (MeshRenderer val2 in componentsInChildren2) { if (((Object)val).name == ((Object)val2).name) { ((Renderer)val2).materials = ((Renderer)val).sharedMaterials; ((Renderer)val2).sharedMaterials = ((Renderer)val).sharedMaterials; break; } } } return clone; } private void OnDestroy() { _harmony.UnpatchSelf(); if ((Object)(object)uiPanel != (Object)null) { Object.Destroy((Object)(object)uiPanel); } } private static bool IsObjectDBValid() { return (Object)(object)ObjectDB.instance != (Object)null && ObjectDB.instance.m_items.Count != 0 && ObjectDB.instance.m_recipes.Count != 0 && (Object)(object)ObjectDB.instance.GetItemPrefab("Amber") != (Object)null; } public static GameObject FindPrefabInZnet(string name, ZNetScene zNetScene) { GameObject value = null; zNetScene.m_namedPrefabs.TryGetValue(StringExtensionMethods.GetStableHashCode(name), out value); if ((Object)(object)value == (Object)null) { value = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == name); } return value; } private static Dictionary<string, string> GetTranslations(string language) { Dictionary<string, string> result = BalrondTranslator.getLanguage("English"); if (!string.Equals(language, "English", StringComparison.OrdinalIgnoreCase)) { Dictionary<string, string> language2 = BalrondTranslator.getLanguage(language); if (language2 != null) { result = language2; } else { Debug.Log((object)("BalrondCharacterCustomization: Did not find translation file for '" + language + "', loading English")); } } return result; } private static void AddTranslations(Dictionary<string, string> translations, Localization localizationInstance = null) { if (translations == null) { Debug.LogWarning((object)"BalrondCharacterCustomization: No translation file found!"); return; } if (localizationInstance != null) { foreach (KeyValuePair<string, string> translation in translations) { localizationInstance.AddWord(translation.Key, translation.Value); } return; } foreach (KeyValuePair<string, string> translation2 in translations) { Localization.instance.AddWord(translation2.Key, translation2.Value); } } public static string ColorToString(Color color) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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) return $"{color.r} {color.g} {color.b} {color.a}"; } public static GameObject AttachItem(GameObject itemPrefab, int variant, Transform joint, VisEquipment visEquipment, bool enableEquipEffects = true, bool backAttach = false) { //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0223: 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) if ((Object)(object)itemPrefab == (Object)null) { Debug.LogWarning((object)"attach item not found(probably the Eyes object)"); return null; } GameObject val = null; Transform val2 = itemPrefab.transform.Find("equipoffset"); int childCount = itemPrefab.transform.childCount; for (int i = 0; i < childCount; i++) { Transform child = itemPrefab.transform.GetChild(i); if (backAttach && ((Object)((Component)child).gameObject).name == "attach_back") { val = ((Component)child).gameObject; break; } if (((Object)((Component)child).gameObject).name == "attach" || (!backAttach && ((Object)((Component)child).gameObject).name == "attach_skin")) { val = ((Component)child).gameObject; break; } } if ((Object)(object)val == (Object)null) { return null; } GameObject val3 = Object.Instantiate<GameObject>(val); val3.SetActive(true); CleanupInstance(val3); if (((Object)val).name == "attach_skin") { val3.transform.SetParent(((Component)visEquipment.m_bodyModel).transform.parent); val3.transform.localPosition = Vector3.zero; val3.transform.localRotation = Quaternion.identity; SkinnedMeshRenderer[] componentsInChildren = val3.GetComponentsInChildren<SkinnedMeshRenderer>(); SkinnedMeshRenderer[] array = componentsInChildren; foreach (SkinnedMeshRenderer val4 in array) { val4.rootBone = visEquipment.m_bodyModel.rootBone; val4.bones = visEquipment.m_bodyModel.bones; } } else { val3.transform.SetParent(joint); val3.transform.localPosition = Vector3.zero; val3.transform.localRotation = Quaternion.identity; } if ((Object)(object)val2 != (Object)null) { Transform transform = val3.transform; transform.localPosition += val2.position; Transform transform2 = val3.transform; transform2.localRotation *= val2.rotation; } IEquipmentVisual componentInChildren = val3.GetComponentInChildren<IEquipmentVisual>(); if (componentInChildren != null) { componentInChildren.Setup(variant); } return val3; } private static void CleanupInstance(GameObject instance) { Collider[] componentsInChildren = instance.GetComponentsInChildren<Collider>(); foreach (Collider val in componentsInChildren) { val.enabled = false; } } public static void StartCharacterEdit() { //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) string selectedLanguage = Localization.instance.GetSelectedLanguage(); Dictionary<string, string> translations = GetTranslations(selectedLanguage); AddTranslations(translations); editingCharacter = true; ((Component)title).gameObject.SetActive(true); ((Component)FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")).gameObject.SetActive(false); PlayerProfile val = Traverse.Create((object)FejdStartup.instance).Field("m_profiles").GetValue<List<PlayerProfile>>()[Traverse.Create((object)FejdStartup.instance).Field("m_profileIndex").GetValue<int>()]; FejdStartup.instance.m_newCharacterPanel.SetActive(true); FejdStartup.instance.m_selectCharacterPanel.SetActive(false); ((TMP_InputField)FejdStartup.instance.m_csNewCharacterName).text = val.GetName(); FejdStartup.instance.m_newCharacterError.SetActive(false); Player previewPlayer = FejdStartup.instance.GetPreviewPlayer(); BalrondPlayerCustomization balrondPlayerCustomization = ((previewPlayer != null) ? ((Component)previewPlayer).GetComponent<BalrondPlayerCustomization>() : null); if ((Object)(object)balrondPlayerCustomization != (Object)null) { Vector3 fromPlayerCustomData = balrondPlayerCustomization.GetFromPlayerCustomData(FejdStartup.instance.GetPreviewPlayer()); float heightFromPlayerCustomData = balrondPlayerCustomization.GetHeightFromPlayerCustomData(FejdStartup.instance.GetPreviewPlayer()); balrondPlayerCustomization.SetEyeColor(new Color(fromPlayerCustomData.x, fromPlayerCustomData.y, fromPlayerCustomData.z, 1f)); balrondPlayerCustomization.SetHeight(heightFromPlayerCustomData); } Traverse.Create((object)FejdStartup.instance).Method("SetupCharacterPreview", new object[1] { val }).GetValue(); Gogan.LogEvent("Screen", "Enter", "CreateCharacter", 0L); } public static GameObject CreateObjectFrom(GameObject source, Transform parent, string name) { GameObject val = Object.Instantiate<GameObject>(source, parent); ((Object)val).name = name; return val; } public static void AddLabel(ref TextMeshProUGUI text, string label) { textMeshProUGUIs.Remove(label); textMeshProUGUIs.Add(label, text); } public static void RefreshLabels() { foreach (KeyValuePair<string, TextMeshProUGUI> textMeshProUGUI in textMeshProUGUIs) { ((TMP_Text)textMeshProUGUI.Value).text = Localization.instance.Localize(textMeshProUGUI.Key); } if ((Object)(object)editButton != (Object)null) { editButton.text = Localization.instance.Localize("$tag_edit_character_button"); } if ((Object)(object)editTitle != (Object)null) { editTitle.text = Localization.instance.Localize("$tag_edit_character_panel"); } } public static void CreateLabel(GameObject parent, GameObject source, string name, float height, string translation = "", float offset = 0f) { //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateObjectFrom(source, parent.transform, name + "_Label"); RectTransform component = val.GetComponent<RectTransform>(); TextMeshProUGUI text = val.GetComponent<TextMeshProUGUI>(); if (translation == "") { AddLabel(ref text, name); ((TMP_Text)text).SetText(name); } else { AddLabel(ref text, translation); ((TMP_Text)text).SetText(Localization.instance.Localize(translation)); } TextMeshProUGUI obj = text; ((TMP_Text)obj).fontSize = ((TMP_Text)obj).fontSize * 0.25f; val.SetActive(true); component.anchoredPosition = new Vector2(source.GetComponent<RectTransform>().anchoredPosition.x + offset, height); } public static GameObject CreateSlider(GameObject parent, GameObject source, string name, float height) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateObjectFrom(source, parent.transform, name + "_Slider"); RectTransform component = val.GetComponent<RectTransform>(); val.SetActive(true); component.anchoredPosition = new Vector2(0f, height); return val; } public static void EditExistingPanel() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_0219: 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) GameObject newCharacterPanel = FejdStartup.instance.m_newCharacterPanel; RectTransform component = ((Component)newCharacterPanel.transform.Find("CusomizationPanel")).GetComponent<RectTransform>(); component.anchoredPosition += new Vector2(0f, 70f); RectTransform component2 = ((Component)((Transform)component).Find("bkg")).GetComponent<RectTransform>(); component2.anchoredPosition += new Vector2(0f, -150f); ((Transform)component2).localScale = new Vector3(((Transform)component2).localScale.x, ((Transform)component2).localScale.y * 1.6f, ((Transform)component2).localScale.z); RectTransform component3 = ((Component)((Transform)component).Find("HairPanel")).GetComponent<RectTransform>(); RectTransform component4 = ((Component)((Transform)component).Find("BeardPanel")).GetComponent<RectTransform>(); component3.anchoredPosition += new Vector2(0f, 50f); component4.anchoredPosition += new Vector2(0f, 50f); RectTransform component5 = newCharacterPanel.GetComponent<RectTransform>(); component5.anchoredPosition += new Vector2(0f, 60f); string[] array = new string[4] { "Hair tone", "tone", "level", "Hair level" }; for (int i = 0; i < array.Length; i++) { Transform val = ((Transform)component).Find("SkinPanel").Find(array[i]); if ((Object)(object)val != (Object)null) { ((Component)val).gameObject.SetActive(false); } } string[] array2 = new string[4] { "SexPanel", "HairPanel", "BeardPanel", "SkinPanel" }; for (int j = 0; j < array2.Length; j++) { Transform val2 = ((Transform)component).Find("SkinPanel").Find(array2[j]); if ((Object)(object)val2 != (Object)null) { RectTransform component6 = ((Component)val2).GetComponent<RectTransform>(); component6.anchoredPosition += new Vector2(0f, 50f); } } } public static GameObject CreateMainBalrondPanel() { GameObject newCharacterPanel = FejdStartup.instance.m_newCharacterPanel; RectTransform component = ((Component)newCharacterPanel.transform.Find("CusomizationPanel")).GetComponent<RectTransform>(); GameObject gameObject = ((Component)newCharacterPanel.transform.Find("CusomizationPanel")).gameObject; RectTransform component2 = gameObject.GetComponent<RectTransform>(); return gameObject; } public static void CreateHairPanel() { //IL_00b8: Unknown result type (might be due to invalid IL or missing references) GameObject newCharacterPanel = FejdStartup.instance.m_newCharacterPanel; GameObject gameObject = ((Component)newCharacterPanel.transform.Find("CusomizationPanel")).gameObject; PlayerCustomizaton component = newCharacterPanel.GetComponent<PlayerCustomizaton>(); Transform val = gameObject.transform.Find("SexPanel"); Transform val2 = gameObject.transform.Find("SkinPanel/tone"); GameObject source = (((Object)(object)val != (Object)null) ? ((Component)val).gameObject : null); GameObject val3 = (((Object)(object)val2 != (Object)null) ? ((Component)val2).gameObject : null); GameObject val4 = CreateObjectFrom(((Component)component.m_hairTone).gameObject, gameObject.transform, "slider"); GameObject val5 = CreateObjectFrom(source, gameObject.transform, "HairColorPanel"); val5.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -350f); float startHeight = 245f; startHeight = CreateColorSection(val5, val3, "Hair Color", new string[3] { "Red", "Green", "Blue" }, val4, startHeight, new string[3] { "$tag_red_slider", "$tag_green_slider", "$tag_blue_slider" }, "$tag_haircolor"); startHeight = CreateColorSection(val5, val3, "Eye Color", new string[3] { "RedEye", "GreenEye", "BlueEye" }, val4, startHeight - 40f, new string[3] { "$tag_redeye_slider", "$tag_greeneye_slider", "$tag_blueeye_slider" }, "$tag_eyecolor"); startHeight -= 10f; CreateLabel(val5, val3, "Height", startHeight, "$tag_heightslider"); startHeight -= 30f; GameObject val6 = CreateSlider(val5, val4, "Height", startHeight); Slider component2 = val6.GetComponent<Slider>(); component2.minValue = -0.05f; component2.maxValue = 0.05f; startHeight -= 25f; string[] array = new string[3] { "Sex", "MaleToggle", "FemaleToggle" }; for (int i = 0; i < array.Length; i++) { DestroyIfFound(val5.transform, array[i]); } uiPanel = gameObject; } public static void AdjustVisibilityAndOffset(Transform parent, string name, Vector2 offset, bool assignSlider = false) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Transform val = parent.Find(name); if (!((Object)(object)val == (Object)null)) { RectTransform component = ((Component)val).GetComponent<RectTransform>(); component.anchoredPosition += offset; ((Component)val).gameObject.SetActive(true); if (assignSlider && name == "Skin slider") { sliderS = PlayerCustomizaton.m_barberInstance.m_skinHue; } } } private static void DestroyIfFound(Transform parent, string name) { Transform val = parent.Find(name); if ((Object)(object)val != (Object)null) { Object.Destroy((Object)(object)((Component)val).gameObject); } } public static void EditBarberGuiLayout() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) GameObject rootPanel = PlayerCustomizaton.m_barberInstance.m_rootPanel; RectTransform component = rootPanel.GetComponent<RectTransform>(); component.anchoredPosition += new Vector2(0f, 100f); AdjustRectTransformWithScale(rootPanel.transform, "bkg", new Vector3(1f, 1.75f, 1f)); AdjustRectTransformWithMove(rootPanel.transform, "bkg", new Vector2(0f, -100f)); AdjustRectTransformWithMove(rootPanel.transform, "title", new Vector2(0f, 100f)); AdjustRectTransform(((Component)PlayerCustomizaton.m_barberInstance.m_apply).transform, new Vector2(0f, -280f)); AdjustRectTransform(((Component)PlayerCustomizaton.m_barberInstance.m_cancel).transform, new Vector2(0f, -280f)); string[] array = new string[4] { "Topic", "Left", "Right", "Selected" }; RectTransform[] componentsInChildren = rootPanel.GetComponentsInChildren<RectTransform>(); for (int i = 0; i < componentsInChildren.Length; i++) { for (int j = 0; j < array.Length; j++) { if (((Object)componentsInChildren[i]).name == array[j]) { RectTransform obj = componentsInChildren[i]; obj.anchoredPosition += new Vector2(0f, 70f); break; } } } AdjustVisibilityAndOffset(rootPanel.transform, "SkinTone", new Vector2(0f, 10f)); AdjustVisibilityAndOffsetAndAssignSlider(rootPanel.transform, "Skin slider", new Vector2(0f, 10f)); SetActiveIfFound(rootPanel.transform, "level", state: false); SetActiveIfFound(rootPanel.transform, "tone", state: false); ((Component)PlayerCustomizaton.m_barberInstance.m_hairTone).gameObject.SetActive(false); ((Component)PlayerCustomizaton.m_barberInstance.m_hairLevel).gameObject.SetActive(false); } private static void AdjustRectTransformWithMove(Transform parent, string childName, Vector2 move) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Transform val = parent.Find(childName); if (!((Object)(object)val == (Object)null)) { RectTransform component = ((Component)val).GetComponent<RectTransform>(); component.anchoredPosition += move; } } private static void AdjustRectTransformWithScale(Transform parent, string childName, Vector3 scale) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) Transform val = parent.Find(childName); if (!((Object)(object)val == (Object)null)) { RectTransform component = ((Component)val).GetComponent<RectTransform>(); ((Transform)component).localScale = scale; } } private static void AdjustRectTransformWithMoveAndScale(Transform parent, string childName, Vector2 move, Vector3 scale) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) Transform val = parent.Find(childName); if (!((Object)(object)val == (Object)null)) { RectTransform component = ((Component)val).GetComponent<RectTransform>(); component.anchoredPosition += move; ((Transform)component).localScale = scale; } } private static void AdjustRectTransform(Transform t, Vector2 move) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) RectTransform component = ((Component)t).GetComponent<RectTransform>(); component.anchoredPosition += move; } private static void AdjustVisibilityAndOffset(Transform parent, string name, Vector2 offset) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Transform val = parent.Find(name); if (!((Object)(object)val == (Object)null)) { RectTransform component = ((Component)val).GetComponent<RectTransform>(); component.anchoredPosition += offset; ((Component)val).gameObject.SetActive(true); } } private static void AdjustVisibilityAndOffsetAndAssignSlider(Transform parent, string name, Vector2 offset) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Transform val = parent.Find(name); if (!((Object)(object)val == (Object)null)) { RectTransform component = ((Component)val).GetComponent<RectTransform>(); component.anchoredPosition += offset; ((Component)val).gameObject.SetActive(true); if (name == "Skin slider") { sliderS = PlayerCustomizaton.m_barberInstance.m_skinHue; } } } private static void SetActiveIfFound(Transform parent, string name, bool state) { Transform val = parent.Find(name); if ((Object)(object)val != (Object)null) { ((Component)val).gameObject.SetActive(state); } } public static void CreateHairColorBarberGui() { //IL_0051: Unknown result type (might be due to invalid IL or missing references) GameObject rootPanel = PlayerCustomizaton.m_barberInstance.m_rootPanel; barberhairPanel = (Transform)(object)((Component)rootPanel.transform.Find("HairPanel")).GetComponent<RectTransform>(); GameObject val = CreateObjectFrom(((Component)barberhairPanel).gameObject, rootPanel.transform, "BarberHairPanel"); val.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -30f); val.SetActive(true); GameObject val2 = CreateObjectFrom(((Component)PlayerCustomizaton.m_barberInstance.m_hairTone).gameObject, rootPanel.transform, "slider"); GameObject gameObject = ((Component)rootPanel.transform.Find("tone")).gameObject; float startHeight = 85f; startHeight = CreateColorSection(val, gameObject, "Hair Color", new string[3] { "Red", "Green", "Blue" }, val2, startHeight, new string[3] { "$tag_red_slider", "$tag_green_slider", "$tag_blue_slider" }, "$tag_haircolor"); startHeight = CreateColorSection(val, gameObject, "Eye Color", new string[3] { "RedEye", "GreenEye", "BlueEye" }, val2, startHeight - 55f, new string[3] { "$tag_redeye_slider", "$tag_greeneye_slider", "$tag_blueeye_slider" }, "$tag_eyecolor"); startHeight -= 10f; CreateLabel(val, gameObject, "Height", startHeight, "$tag_heightslider"); startHeight -= 30f; GameObject val3 = CreateSlider(val, val2, "Height", startHeight); Slider component = val3.GetComponent<Slider>(); component.minValue = -0.05f; component.maxValue = 0.05f; startHeight -= 25f; uiHairPanel = val; } private static float CreateColorSection(GameObject parent, GameObject toneRef, string sectionTitle, string[] colorNames, GameObject sliderTemplate, float startHeight, string[] translationNames, string panelLabel) { //IL_0065: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateObjectFrom(toneRef, parent.transform, sectionTitle + "_Title"); RectTransform component = val.GetComponent<RectTransform>(); TextMeshProUGUI text = val.GetComponent<TextMeshProUGUI>(); AddLabel(ref text, panelLabel); ((TMP_Text)text).SetText(Localization.instance.Localize(panelLabel)); TextMeshProUGUI obj = text; ((TMP_Text)obj).fontSize = ((TMP_Text)obj).fontSize * 1.8f; component.anchoredPosition = new Vector2(0f, startHeight + 35f); val.SetActive(true); float num = startHeight; for (int i = 0; i < colorNames.Length; i++) { CreateLabel(parent, toneRef, colorNames[i], num, translationNames[i]); num -= 30f; CreateSlider(parent, sliderTemplate, colorNames[i], num); num -= 25f; } toneRef.SetActive(false); return num; } } public class RaceManager { } public class ReassignBoneWeigthsToNewMesh : MonoBehaviour { public string rootBoneName = "Hips"; private void Start() { Transform transform = ((Component)this).transform; object obj; if (transform == null) { obj = null; } else { Transform parent = transform.parent; if (parent == null) { obj = null; } else { Transform parent2 = parent.parent; if (parent2 == null) { obj = null; } else { Transform obj2 = parent2.Find("Armature"); obj = ((obj2 != null) ? ((Component)obj2).transform : null); } } } Transform val = (Transform)obj; if (!((Object)(object)val == (Object)null)) { SkinnedMeshRenderer component = ((Component)this).gameObject.GetComponent<SkinnedMeshRenderer>(); Transform[] bones = component.bones; component.rootBone = val.Find(rootBoneName); Transform[] componentsInChildren = ((Component)val).GetComponentsInChildren<Transform>(); bones[31] = componentsInChildren[41]; bones[8] = componentsInChildren[12]; bones[9] = componentsInChildren[13]; bones[10] = componentsInChildren[14]; component.bones = bones; } } } public class DatabaseAddMethods { public void AddItems(List<GameObject> items) { foreach (GameObject item in items) { AddItem(item); } } public void AddRecipes(List<Recipe> recipes) { foreach (Recipe recipe in recipes) { AddRecipe(recipe); } } public void AddStatuseffects(List<StatusEffect> statusEffects) { foreach (StatusEffect statusEffect in statusEffects) { AddStatus(statusEffect); } } private bool IsObjectDBValid() { return (Object)(object)ObjectDB.instance != (Object)null && ObjectDB.instance.m_items.Count != 0 && ObjectDB.instance.m_recipes.Count != 0 && (Object)(object)ObjectDB.instance.GetItemPrefab("Amber") != (Object)null; } private void AddStatus(StatusEffect status) { if (!IsObjectDBValid()) { return; } if ((Object)(object)status != (Object)null) { if ((Object)(object)ObjectDB.instance.GetStatusEffect(status.m_nameHash) == (Object)null) { ObjectDB.instance.m_StatusEffects.Add(status); } else { Debug.Log((object)(Launch.projectName + ": " + ((Object)status).name + " - Status already in the game")); } } else { Debug.LogError((object)(Launch.projectName + ": " + ((Object)status).name + " - Status not found")); } } private void AddRecipe(Recipe recipe) { if (!IsObjectDBValid()) { return; } if ((Object)(object)recipe != (Object)null) { if ((Object)(object)ObjectDB.instance.m_recipes.Find((Recipe x) => ((Object)x).name == ((Object)recipe).name) == (Object)null) { if ((Object)(object)recipe.m_item != (Object)null) { ObjectDB.instance.m_recipes.Add(recipe); } } else { Debug.Log((object)(Launch.projectName + ": " + ((Object)recipe).name + " - Recipe with this name already in the Game")); } } else { Debug.LogError((object)(Launch.projectName + ": " + ((Object)recipe).name + " - Recipe not found")); } } private void AddItem(GameObject newPrefab) { if (!IsObjectDBValid()) { return; } ItemDrop component = newPrefab.GetComponent<ItemDrop>(); if ((Object)(object)component != (Object)null) { if ((Object)(object)ObjectDB.instance.GetItemPrefab(((Object)newPrefab).name) == (Object)null) { ObjectDB.instance.m_items.Add(newPrefab); Dictionary<int, GameObject> dictionary = (Dictionary<int, GameObject>)typeof(ObjectDB).GetField("m_itemByHash", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(ObjectDB.instance); dictionary[((Object)newPrefab).name.GetHashCode()] = newPrefab; if ((Object)(object)ObjectDB.instance.GetItemPrefab(((Object)newPrefab).name) == (Object)null) { ObjectDB.instance.m_itemByHash.Add(StringExtensionMethods.GetStableHashCode(((Object)newPrefab).name), newPrefab); } } else { Debug.Log((object)(Launch.projectName + ": " + ((Object)newPrefab).name + " - ItemDrop already exist")); } } else { Debug.LogError((object)(Launch.projectName + ": " + ((Object)newPrefab).name + " - ItemDrop not found on prefab")); } } } public class FxReplacment { public void ReplaceOnObject(GameObject gameObject, ZNetScene zNetScene) { if ((Object)(object)gameObject == (Object)null) { return; } SpawnArea component = gameObject.GetComponent<SpawnArea>(); if ((Object)(object)component != (Object)null) { EffectList spawnEffects = component.m_spawnEffects; if (spawnEffects != null) { findEffectsAndChange(spawnEffects.m_effectPrefabs, zNetScene); } } Destructible component2 = gameObject.GetComponent<Destructible>(); if ((Object)(object)component2 != (Object)null) { EffectList hitEffect = component2.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs, zNetScene); } EffectList destroyedEffect = component2.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs, zNetScene); } } Projectile component3 = gameObject.GetComponent<Projectile>(); if ((Object)(object)component3 != (Object)null) { EffectList hitEffects = component3.m_hitEffects; if (hitEffects != null) { findEffectsAndChange(hitEffects.m_effectPrefabs, zNetScene); } EffectList hitWaterEffects = component3.m_hitWaterEffects; if (hitWaterEffects != null) { findEffectsAndChange(hitWaterEffects.m_effectPrefabs, zNetScene); } EffectList spawnOnHitEffects = component3.m_spawnOnHitEffects; if (spawnOnHitEffects != null) { findEffectsAndChange(spawnOnHitEffects.m_effectPrefabs, zNetScene); } } } public void ReplaceOnVegetation(GameObject gameObject, ZNetScene zNetScene) { Pickable component = gameObject.GetComponent<Pickable>(); if ((Object)(object)component != (Object)null) { fixPlant(component, zNetScene); } Destructible component2 = gameObject.GetComponent<Destructible>(); if ((Object)(object)component2 != (Object)null) { fixPDestructable(component2, zNetScene); } MineRock5 component3 = gameObject.GetComponent<MineRock5>(); if ((Object)(object)component3 != (Object)null) { fixMineRock5(component3, zNetScene); } MineRock component4 = gameObject.GetComponent<MineRock>(); if ((Object)(object)component4 != (Object)null) { fixMineRock(component4, zNetScene); } } private void fixPlant(Pickable pickable, ZNetScene zNetScene) { EffectList pickEffector = pickable.m_pickEffector; if (pickEffector != null) { findEffectsAndChange(pickEffector.m_effectPrefabs, zNetScene); } } private void fixPDestructable(Destructible minerock5, ZNetScene zNetScene) { EffectList hitEffect = minerock5.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs, zNetScene); } EffectList destroyedEffect = minerock5.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs, zNetScene); } } private void fixMineRock5(MineRock5 minerock5, ZNetScene zNetScene) { EffectList hitEffect = minerock5.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs, zNetScene); } EffectList destroyedEffect = minerock5.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs, zNetScene); } } private void fixMineRock(MineRock minerock5, ZNetScene zNetScene) { EffectList hitEffect = minerock5.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs, zNetScene); } EffectList destroyedEffect = minerock5.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs, zNetScene); } } public void ReplaceOnMonster(GameObject gameObject, ZNetScene zNetScene) { if ((Object)(object)gameObject == (Object)null) { Debug.LogWarning((object)(Launch.projectName + ":: GameObject not found")); return; } Humanoid component = gameObject.GetComponent<Humanoid>(); if ((Object)(object)component == (Object)null) { Debug.LogWarning((object)(Launch.projectName + ":: GameObject not found")); return; } EffectList dropEffects = component.m_dropEffects; if (dropEffects != null) { findEffectsAndChange(dropEffects.m_effectPrefabs, zNetScene); } EffectList backstabHitEffects = ((Character)component).m_backstabHitEffects; if (backstabHitEffects != null) { findEffectsAndChange(backstabHitEffects.m_effectPrefabs, zNetScene); } EffectList consumeItemEffects = component.m_consumeItemEffects; if (consumeItemEffects != null) { findEffectsAndChange(consumeItemEffects.m_effectPrefabs, zNetScene); } EffectList critHitEffects = ((Character)component).m_critHitEffects; if (critHitEffects != null) { findEffectsAndChange(critHitEffects.m_effectPrefabs, zNetScene); } EffectList deathEffects = ((Character)component).m_deathEffects; if (deathEffects != null) { findEffectsAndChange(deathEffects.m_effectPrefabs, zNetScene); } EffectList hitEffects = ((Character)component).m_hitEffects; if (hitEffects != null) { findEffectsAndChange(hitEffects.m_effectPrefabs, zNetScene); } EffectList jumpEffects = ((Character)component).m_jumpEffects; if (jumpEffects != null) { findEffectsAndChange(jumpEffects.m_effectPrefabs, zNetScene); } EffectList perfectBlockEffect = component.m_perfectBlockEffect; if (perfectBlockEffect != null) { findEffectsAndChange(perfectBlockEffect.m_effectPrefabs, zNetScene); } EffectList pickupEffects = component.m_pickupEffects; if (pickupEffects != null) { findEffectsAndChange(pickupEffects.m_effectPrefabs, zNetScene); } EffectList slideEffects = ((Character)component).m_slideEffects; if (slideEffects != null) { findEffectsAndChange(slideEffects.m_effectPrefabs, zNetScene); } EffectList tarEffects = ((Character)component).m_tarEffects; if (tarEffects != null) { findEffectsAndChange(tarEffects.m_effectPrefabs, zNetScene); } EffectList waterEffects = ((Character)component).m_waterEffects; if (waterEffects != null) { findEffectsAndChange(waterEffects.m_effectPrefabs, zNetScene); } FootStep component2 = gameObject.GetComponent<FootStep>(); if (!((Object)(object)component2 != (Object)null)) { return; } List<StepEffect> effects = component2.m_effects; foreach (StepEffect item in effects) { GameObject[] effectPrefabs = item.m_effectPrefabs; List<GameObject> list = new List<GameObject>(); list.AddRange(effectPrefabs); for (int i = 0; i < list.Count; i++) { if ((Object)(object)list[i] != (Object)null) { string name = ((Object)list[i]).name; GameObject val = ZNetScene.instance.m_prefabs.Find((GameObject x) => ((Object)x).name == name); if (!((Object)(object)val == (Object)null)) { list[i] = val; } } } } } public void ReplaceOnItem(GameObject gameObject, ZNetScene zNetScene) { if ((Object)(object)gameObject == (Object)null) { return; } ItemDrop component = gameObject.GetComponent<ItemDrop>(); if (!((Object)(object)component == (Object)null)) { EffectList hitEffect = component.m_itemData.m_shared.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs, zNetScene); } EffectList hitTerrainEffect = component.m_itemData.m_shared.m_hitTerrainEffect; if (hitTerrainEffect != null) { findEffectsAndChange(hitTerrainEffect.m_effectPrefabs, zNetScene); } EffectList holdStartEffect = component.m_itemData.m_shared.m_holdStartEffect; if (holdStartEffect != null) { findEffectsAndChange(holdStartEffect.m_effectPrefabs, zNetScene); } EffectList trailStartEffect = component.m_itemData.m_shared.m_trailStartEffect; if (trailStartEffect != null) { findEffectsAndChange(trailStartEffect.m_effectPrefabs, zNetScene); } EffectList blockEffect = component.m_itemData.m_shared.m_blockEffect; if (blockEffect != null) { findEffectsAndChange(blockEffect.m_effectPrefabs, zNetScene); } } } public void ReplaceFxOnPiece(GameObject gameObject, ZNetScene zNetScene) { if ((Object)(object)gameObject == (Object)null) { return; } Piece component = gameObject.GetComponent<Piece>(); if ((Object)(object)component != (Object)null) { EffectList placeEffect = component.m_placeEffect; if (placeEffect != null) { findEffectsAndChange(placeEffect.m_effectPrefabs, zNetScene); } } WearNTear component2 = gameObject.GetComponent<WearNTear>(); if ((Object)(object)component2 != (Object)null) { EffectList hitEffect = component2.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs, zNetScene); } } } private void findEffectsAndChange(EffectData[] effects, ZNetScene zNetScene) { if (effects == null || effects.Length == 0) { return; } foreach (EffectData val in effects) { if ((Object)(object)val.m_prefab != (Object)null) { string name = ((Object)val.m_prefab).name; GameObject val2 = zNetScene.m_prefabs.Find((GameObject x) => (Object)(object)x != (Object)null && ((Object)x).name == name); if ((Object)(object)val2 != (Object)null) { val.m_prefab = val2; } else { Debug.LogWarning((object)("Coulnt not find in Znet fx name:" + name)); } } } } } public class ModResourceLoader { public AssetBundle assetBundle; public List<GameObject> itemPrefabs = new List<GameObject>(); public List<GameObject> roomPrefabs = new List<GameObject>(); public List<GameObject> vfxPrefabs = new List<GameObject>(); public List<Sprite> backgrounds = new List<Sprite>(); public FxReplacment fxReplacment = new FxReplacment(); public List<Recipe> recipes = new List<Recipe>(); public List<StatusEffect> statusEffects = new List<StatusEffect>(); public StatusEffect newBarleyStatus = null; public ShaderReplacment shaderReplacment = new ShaderReplacment(); public Sprite skillIconLockpicking; public Sprite skillIconEndurance; public Sprite skillIconForaging; public void loadAssets() { assetBundle = GetAssetBundleFromResources("balrondcharacteredit"); string basePath = "Assets/Custom/BalrondCharacterEdit/"; loadItems(basePath); loadOther(basePath); } public void AddPrefabsToZnetScene(ZNetScene zNetScene) { validateAddedPrefabs(itemPrefabs, zNetScene); validateAddedPrefabs(vfxPrefabs, zNetScene); zNetScene.m_prefabs.RemoveAll((GameObject x) => (Object)(object)x == (Object)null); } private void prepareOtherEffects(string mainPath) { string[] array = new string[0]; string[] array2 = array; foreach (string text in array2) { StatusEffect val = (StatusEffect)(object)assetBundle.LoadAsset<SE_Stats>(mainPath + "Status/" + text + ".asset"); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)("Satus not found: " + text)); } else { statusEffects.Add(val); } } } private void validateAddedPrefabs(List<GameObject> list, ZNetScene zNetScene) { foreach (GameObject item in list) { if (zNetScene.m_namedPrefabs.ContainsKey(StringExtensionMethods.GetStableHashCode(((Object)item).name))) { Debug.LogWarning((object)("DUPLICATE: " + ((Object)item).name)); } else { zNetScene.m_prefabs.Add(item); } } } private void loadBackground(string mainPath) { string[] array = new string[5] { "ashlands1.jpg", "ashlands2.png", "blackforest.png", "mistlands.jpg", "meadows.png" }; string[] array2 = array; foreach (string text in array2) { Sprite val = assetBundle.LoadAsset<Sprite>(mainPath + "screens/" + text); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)("Could not find background with name: " + text)); } else { backgrounds.Add(val); } } } private GameObject FindPrefabInZnet(string name, ZNetScene zNetScene) { GameObject value = null; zNetScene.m_namedPrefabs.TryGetValue(StringExtensionMethods.GetStableHashCode(name), out value); if ((Object)(object)value == (Object)null) { value = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == name); } return value; } private GameObject getRavenGuidePrefab(ZNetScene zNetScene) { string name = "Ravens"; GameObject val = FindPrefabInZnet(name, zNetScene); if ((Object)(object)val != (Object)null) { return val; } string text = "piece_workbench"; GameObject val2 = FindPrefabInZnet(text, zNetScene); if (text != null) { GameObject gameObject = ((Component)val2.transform.Find("GuidePoint")).gameObject; if ((Object)(object)gameObject != (Object)null) { GuidePoint component = gameObject.GetComponent<GuidePoint>(); if ((Object)(object)component != (Object)null) { return component.m_ravenPrefab; } } } return null; } public void setupRavenGuide(GameObject gameObject, ZNetScene zNetScene) { GameObject val = null; Transform val2 = gameObject.transform.Find("GuidePoint"); if (!((Object)(object)val2 == (Object)null)) { val = getRavenGuidePrefab(zNetScene); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"Ravens not found"); } else { ((Component)val2).GetComponent<GuidePoint>().m_ravenPrefab = val; } } } private AssetBundle GetAssetBundleFromResources(string filename) { Assembly executingAssembly = Assembly.GetExecutingAssembly(); string name = executingAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(filename)); using Stream stream = executingAssembly.GetManifestResourceStream(name); return AssetBundle.LoadFromStream(stream); } private void addNewPrefabToCollection(string[] nameList, string mainPath, List<GameObject> prefabList, string typeName = "Prefab") { foreach (string text in nameList) { GameObject val = assetBundle.LoadAsset<GameObject>(mainPath + text + ".prefab"); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)("Could not find " + typeName + " with name: " + text)); continue; } ShaderReplacment.Replace(val); prefabList.Add(val); } } private void loadItems(string basePath) { string mainPath = basePath + "items/"; string[] items = ItemList.items; addNewPrefabToCollection(items, mainPath, itemPrefabs, "item"); } private void loadOther(string basePath) { string mainPath = basePath + "Other/"; string[] nameList = new string[0]; addNewPrefabToCollection(nameList, mainPath, vfxPrefabs, "vfx"); } } public class ShaderReplacment { public static List<GameObject> prefabsToReplaceShader = new List<GameObject>(); public static List<Material> materialsInPrefabs = new List<Material>(); public static List<Shader> shaders = new List<Shader>(); private static readonly HashSet<Shader> CachedShaders = new HashSet<Shader>(); public static bool debug = true; public static Shader GetShaderByName(string name) { return shaders.Find((Shader x) => ((Object)x).name == name.Trim()); } public static void Replace(GameObject gameObject) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (!new ZNet().IsDedicated()) { prefabsToReplaceShader.Add(gameObject); GetMaterialsInPrefab(gameObject); } } public static void GetMaterialsInPrefab(GameObject gameObject) { Renderer[] componentsInChildren = gameObject.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { Material[] sharedMaterials = val.sharedMaterials; if (sharedMaterials == null || sharedMaterials.Length == 0) { continue; } Material[] array2 = sharedMaterials; foreach (Material val2 in array2) { if ((Object)(object)val2 != (Object)null && !materialsInPrefabs.Contains(val2)) { materialsInPrefabs.Add(val2); } } } } public static void getMeShaders() { AssetBundle[] array = Resources.FindObjectsOfTypeAll<AssetBundle>(); AssetBundle[] array2 = array; foreach (AssetBundle val in array2) { IEnumerable<Shader> enumerable3; try { IEnumerable<Shader> enumerable2; if (!val.isStreamedSceneAssetBundle || !Object.op_Implicit((Object)(object)val)) { IEnumerable<Shader> enumerable = val.LoadAllAssets<Shader>(); enumerable2 = enumerable; } else { enumerable2 = from shader in ((IEnumerable<string>)val.GetAllAssetNames()).Select((Func<string, Shader>)val.LoadAsset<Shader>) where (Object)(object)shader != (Object)null select shader; } enumerable3 = enumerable2; } catch (Exception) { continue; } if (enumerable3 == null) { continue; } foreach (Shader item in enumerable3) { CachedShaders.Add(item); } } } public static void runMaterialFix() { getMeShaders(); shaders.AddRange(CachedShaders); foreach (Material materialsInPrefab in materialsInPrefabs) { Shader shader = materialsInPrefab.shader; if (!((Object)(object)shader == (Object)null)) { string name = ((Object)shader).name; if (!(name == "Standard") && !name.Contains("ScrollingTex") && name.Contains("Balrond")) { setProperValue(materialsInPrefab, name); } } } } private static void setProperValue(Material material, string shaderName) { string name = shaderName.Replace("Balrond", "Custom"); name = checkNaming(name); Shader shaderByName = GetShaderByName(name); if ((Object)(object)shaderByName == (Object)null) { Debug.LogWarning((object)("Shader not found " + name)); } else { material.shader = shaderByName; } } private static string checkNaming(string name) { string result = name; if (name.Contains("Bumped")) { result = name.Replace("Custom", "Lux Lit Particles"); } if (name.Contains("Tess Bumped")) { result = name.Replace("Custom", "Lux Lit Particles"); } if (name.Contains("Standard Surface")) { result = name.Replace("Custom", "Particles"); result = result.Replace("Standard Surface2", "Standard Surface"); } if (name.Contains("Standard Unlit")) { result = name.Replace("Custom", "Particles"); result = result.Replace("Standard Unlit", "Standard Unlit2"); result = result.Replace("Standard Unlit22", "Standard Unlit2"); } return result; } } public class TableMapper { public static CraftingStation cauldron; public static CraftingStation workbench; public static CraftingStation heavyWorkbench; public static CraftingStation forge; public static CraftingStation ironworks; public static CraftingStation blackforge; public static CraftingStation stoneCutter; public static CraftingStation artisian; public static CraftingStation magetable; public static CraftingStation runeforge; public static CraftingStation tannery; public static CraftingStation fletcher; public static CraftingStation grill; public static CraftingStation alchemylab; public static CraftingStation shamantable; public static CraftingStation foodtable; public static ZNetScene zNetScene; public static List<GameObject> list = new List<GameObject>(); public static void setupTables(ZNetScene zNetScene = null, List<GameObject> list = null) { TableMapper.zNetScene = zNetScene; TableMapper.list = list; prepareTables(); } private static GameObject FindPrefabInZnet(string name, ZNetScene zNetScene) { GameObject value = null; zNetScene.m_namedPrefabs.TryGetValue(StringExtensionMethods.GetStableHashCode(name), out value); if ((Object)(object)value == (Object)null) { value = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == name); } return value; } private static CraftingStation FindStation(string name) { GameObject val = null; val = (GameObject)((!((Object)(object)zNetScene != (Object)null)) ? ((object)list.Find((GameObject x) => ((Object)x).name == name)) : ((object)FindPrefabInZnet(name, zNetScene))); if ((Object)(object)val != (Object)null) { return val.GetComponent<CraftingStation>(); } Debug.LogWarning((object)("TableMapper - Station not found: " + name)); return null; } private static void prepareTables() { cauldron = FindStation("piece_cauldron"); workbench = FindStation("piece_workbench"); heavyWorkbench = FindStation("piece_heavy_workbench_bal"); forge = FindStation("forge"); ironworks = FindStation("piece_metalworks_bal"); blackforge = FindStation("blackforge"); stoneCutter = FindStation("piece_stonecutter"); artisian = FindStation("piece_artisanstation"); runeforge = FindStation("piece_runeforge_bal"); magetable = FindStation("piece_magetable"); fletcher = FindStation("piece_fletcher_bal"); shamantable = FindStation("piece_shamantable_bal"); foodtable = FindStation("piece_preptable"); grill = FindStation("piece_grill_bal"); alchemylab = FindStation("piece_MeadCauldron"); } } internal class ItemList { public static string[] items = new string[11] { "eyes_bal", "HairClaireKiara", "HairErisSassy", "HairGrandeLittledica", "HairKendallNightcrawler", "HairLilaFeralpoodles", "HairMohawkKaisims", "HairMohawkponyRedearcat", "HairNovaNightcrawler", "HairQicc", "HairZaharaNords" }; } public class JsonLoader { public string defaultPath = string.Empty; public void loadJson() { LoadTranslations(); justDefaultPath(); } public void justDefaultPath() { string configPath = Paths.ConfigPath; string text = Path.Combine(configPath, "BalrondCharacterCustomization-translation/"); defaultPath = text; } public void createDefaultPath() { string configPath = Paths.ConfigPath; string text = Path.Combine(configPath, "BalrondCharacterCustomization-translation/"); if (!Directory.Exists(text)) { CreateFolder(text); } else { Debug.Log((object)("BalrondCharacterCustomization: Folder already exists: " + text)); } defaultPath = text; } private string[] jsonFilePath(string folderName, string extension) { string configPath = Paths.ConfigPath; string text = Path.Combine(configPath,