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 EotenasAdmin v0.0.2
plugins/BalrondEotenasClanRebuild.dll
Decompiled 6 months agousing System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using UnityEngine; [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: Guid("f405ea1c-ac25-47a3-9aa2-a8f56c14bfd6")] [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyProduct("BalrondEotenasClanRebuild")] [assembly: AssemblyCompany("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyTitle("BalrondEotenasClanRebuild")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [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 EotenasClans { public class ClanObject { public string clanName; public string msg; public StatusEffect status; public GameObject item; public GameObject sfx; public EffectList clanEffects = new EffectList(); } public class ClanTotem : MonoBehaviour, Interactable, Hoverable { private ZNetView _znv; private string chosenClan = ""; private void Awake() { _znv = ((Component)this).GetComponent<ZNetView>(); if (_znv.IsValid()) { _znv.Register<string>("UseClanTotem", (Action<long, string>)UseClanTotem); chosenClan = _znv.m_zdo.GetString("Clan", ""); SetVisuals(chosenClan); } } private void UseClanTotem(long sender, string name) { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) if (_znv.IsOwner()) { Debug.Log((object)("And the name is: " + name)); chosenClan = name; _znv.m_zdo.Set("Clan", name); EffectList vfxForClan = ClanManager.getVfxForClan(chosenClan); if (vfxForClan != null) { vfxForClan.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1); } } SetVisuals(name); } private void SetVisuals(string clan) { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown if (clan == "" || clan == null) { return; } Transform val = ((Component)this).transform.Find("Items"); foreach (Transform item in val) { Transform val2 = item; ((Component)val2).gameObject.SetActive(false); } ((Component)val.Find(clan)).gameObject.SetActive(true); } public bool Interact(Humanoid user, bool hold, bool alt) { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) if (chosenClan == "" || chosenClan == null) { chosenClan = _znv.m_zdo.GetString("Clan", ""); } if (chosenClan != "" && chosenClan != null) { string msgForClan = ClanManager.getMsgForClan(chosenClan); MessageHud.instance.ShowMessage((MessageType)2, msgForClan, 0, (Sprite)null); ClanManager.SetFaction(chosenClan); EffectList vfxForClan = ClanManager.getVfxForClan(chosenClan); if (vfxForClan != null) { vfxForClan.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1); } return true; } MessageHud.instance.ShowMessage((MessageType)2, "This totem does not belong to any clan", 0, (Sprite)null); return false; } public bool UseItem(Humanoid user, ItemData item) { if (chosenClan == "" || chosenClan == null) { chosenClan = _znv.m_zdo.GetString("Clan", ""); } if (Player.m_debugMode || Terminal.m_cheat) { Debug.Log((object)("Clan amount:" + ClanManager.clans.Count)); foreach (ClanObject clan in ClanManager.clans) { if (clan == null || !(((Object)clan.item).name == ((Object)item.m_dropPrefab).name)) { continue; } Debug.Log((object)("Found clan: " + clan.clanName)); _znv.InvokeRPC(ZNetView.Everybody, "UseClanTotem", new object[1] { clan.clanName }); user.m_inventory.RemoveOneItem(item); return true; } } if (chosenClan != "" && chosenClan != null) { return false; } return false; } public string GetHoverText() { string text = ((_znv.m_zdo.GetString("Clan", "") != "") ? Localization.instance.Localize("\n[<color=yellow><b>$KEY_Use</b></color>] Set Clan") : ""); return Localization.instance.Localize("[<color=yellow><b>1-8</b></color>] Use clan item") + text; } public string GetHoverName() { return "Clan Totem"; } } public class DatabaseAddMethods { public static string projectName = "EotenasClans"; 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(((object)status).GetHashCode()) == (Object)null) { ObjectDB.instance.m_StatusEffects.Add(status); Debug.Log((object)(projectName + ": " + ((Object)status).name + " - Status Added to the Game")); } } else { Debug.LogError((object)(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.GetRecipe(recipe.m_item.m_itemData) == (Object)null) { ObjectDB.instance.m_recipes.Add(recipe); Debug.Log((object)(projectName + ": " + ((Object)recipe).name + " - Recipe Added to the Game")); } } else { Debug.LogError((object)(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; Debug.Log((object)(projectName + ": " + ((Object)newPrefab).name + " - Item Added to the Game")); } } else { Debug.LogError((object)(projectName + ": " + ((Object)newPrefab).name + " - ItemDrop not found on prefab")); } } } public static class ClanManager { public static List<ClanObject> clans = new List<ClanObject>(); public static void setup() { createClans(); } public static StatusEffect getStatusForClan(string clanName) { return clans.Find((ClanObject x) => x.clanName == clanName)?.status; } public static string getMsgForClan(string clanName) { ClanObject clanObject = clans.Find((ClanObject x) => x.clanName == clanName); if (clanObject != null) { return clanObject.msg; } return "Behold the Clan"; } public static EffectList getVfxForClan(string clanName) { return clans.Find((ClanObject x) => x.clanName == clanName)?.clanEffects; } public static GameObject getClanItem(string clanName) { return clans.Find((ClanObject x) => x.clanName == clanName)?.item; } public static void SetFaction(string clanName) { if (Player.m_localPlayer.m_customData.ContainsKey("Balrond_EotenasClan") && !Player.m_debugMode && !Terminal.m_cheat) { Debug.Log((object)"Player already have asigned clan"); return; } Player.m_localPlayer.m_customData["Balrond_EotenasClan"] = clanName; LoadClanStatus(); } public static void LoadClanStatus() { if (!Player.m_localPlayer.m_customData.ContainsKey("Balrond_EotenasClan")) { Debug.Log((object)"Player has no clan asigned"); return; } string clanName = Player.m_localPlayer.m_customData["Balrond_EotenasClan"]; StatusEffect statusForClan = getStatusForClan(clanName); if ((Object)(object)statusForClan != (Object)null && (Object)(object)((Character)Player.m_localPlayer).GetSEMan().GetStatusEffect(((object)statusForClan).GetHashCode()) == (Object)null) { ((Character)Player.m_localPlayer).GetSEMan().AddStatusEffect(statusForClan, false, 0, 0f); } } private static void createClans() { serpentClan(); drakeClan(); ravenClan(); wolfClan(); } private static void serpentClan() { ClanObject clanObject = new ClanObject(); clanObject.clanName = "Serpent"; clanObject.item = Launch.Serpents; clanObject.status = Launch.SerpentStatus; clanObject.clanEffects = createEffectListFromObject(Launch.vfxPrefabs.Find((GameObject x) => ((Object)x).name == "sfx_clanSerpent")); clanObject.sfx = Launch.vfxPrefabs.Find((GameObject x) => ((Object)x).name == "sfx_clanSerpent"); clanObject.msg = "Scream of the Serpent!"; clans.Add(clanObject); } private static void drakeClan() { ClanObject clanObject = new ClanObject(); clanObject.clanName = "Drake"; clanObject.item = Launch.Drakes; clanObject.status = Launch.DrakeStatus; clanObject.clanEffects = createEffectListFromObject(Launch.vfxPrefabs.Find((GameObject x) => ((Object)x).name == "sfx_clanDrake")); clanObject.sfx = Launch.vfxPrefabs.Find((GameObject x) => ((Object)x).name == "sfx_clanDrake"); clanObject.msg = "Roar of the Drake!"; clans.Add(clanObject); } private static void ravenClan() { ClanObject clanObject = new ClanObject(); clanObject.clanName = "Raven"; clanObject.item = Launch.Ravens; clanObject.status = Launch.RavenStatus; clanObject.clanEffects = createEffectListFromObject(Launch.vfxPrefabs.Find((GameObject x) => ((Object)x).name == "sfx_clanRaven")); clanObject.sfx = Launch.vfxPrefabs.Find((GameObject x) => ((Object)x).name == "sfx_clanRaven"); clanObject.msg = "Screech of the Raven!"; clans.Add(clanObject); } private static void wolfClan() { ClanObject clanObject = new ClanObject(); clanObject.clanName = "Wolf"; clanObject.item = Launch.Wolfs; clanObject.status = Launch.WolfStatus; clanObject.clanEffects = createEffectListFromObject(Launch.vfxPrefabs.Find((GameObject x) => ((Object)x).name == "sfx_clanWolf")); clanObject.sfx = Launch.vfxPrefabs.Find((GameObject x) => ((Object)x).name == "sfx_clanWolf"); clanObject.msg = "Howl of the wolf!"; clans.Add(clanObject); } private static EffectList createEffectListFromObject(GameObject gameObject) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown EffectList val = new EffectList(); List<EffectData> list = new List<EffectData>(); EffectData val2 = new EffectData(); val2.m_prefab = gameObject; list.Add(val2); val.m_effectPrefabs = list.ToArray(); return val; } } public class FxReplacment { private List<GameObject> allPrefabs; private string projectName = "BalrondAstafaraios.EotenasClans"; public void setInstance(List<GameObject> gameObjects) { allPrefabs = gameObjects; } public void ReplaceOnObject(GameObject gameObject) { 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); } } Destructible component2 = gameObject.GetComponent<Destructible>(); if ((Object)(object)component2 != (Object)null) { EffectList hitEffect = component2.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } EffectList destroyedEffect = component2.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs); } } Projectile component3 = gameObject.GetComponent<Projectile>(); if ((Object)(object)component3 != (Object)null) { EffectList hitEffects = component3.m_hitEffects; if (hitEffects != null) { findEffectsAndChange(hitEffects.m_effectPrefabs); } EffectList hitWaterEffects = component3.m_hitWaterEffects; if (hitWaterEffects != null) { findEffectsAndChange(hitWaterEffects.m_effectPrefabs); } EffectList spawnOnHitEffects = component3.m_spawnOnHitEffects; if (spawnOnHitEffects != null) { findEffectsAndChange(spawnOnHitEffects.m_effectPrefabs); } } } public void ReplaceOnVegetation(GameObject gameObject) { Pickable component = gameObject.GetComponent<Pickable>(); if ((Object)(object)component != (Object)null) { fixPlant(component); } Destructible component2 = gameObject.GetComponent<Destructible>(); if ((Object)(object)component2 != (Object)null) { fixPDestructable(component2); } MineRock5 component3 = gameObject.GetComponent<MineRock5>(); if ((Object)(object)component3 != (Object)null) { fixMineRock5(component3); } MineRock component4 = gameObject.GetComponent<MineRock>(); if ((Object)(object)component4 != (Object)null) { fixMineRock(component4); } } private void fixPlant(Pickable pickable) { EffectList pickEffector = pickable.m_pickEffector; if (pickEffector != null) { findEffectsAndChange(pickEffector.m_effectPrefabs); } } private void fixPDestructable(Destructible minerock5) { EffectList hitEffect = minerock5.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } EffectList destroyedEffect = minerock5.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs); } } private void fixMineRock5(MineRock5 minerock5) { EffectList hitEffect = minerock5.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } EffectList destroyedEffect = minerock5.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs); } } private void fixMineRock(MineRock minerock5) { EffectList hitEffect = minerock5.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } EffectList destroyedEffect = minerock5.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs); } } public void ReplaceOnMonster(GameObject gameObject) { if ((Object)(object)gameObject == (Object)null) { Debug.LogWarning((object)(projectName + ":: GameObject not found")); return; } Humanoid component = gameObject.GetComponent<Humanoid>(); if ((Object)(object)component == (Object)null) { Debug.LogWarning((object)(projectName + ":: GameObject not found")); return; } EffectList dropEffects = component.m_dropEffects; if (dropEffects != null) { findEffectsAndChange(dropEffects.m_effectPrefabs); } EffectList backstabHitEffects = ((Character)component).m_backstabHitEffects; if (backstabHitEffects != null) { findEffectsAndChange(backstabHitEffects.m_effectPrefabs); } EffectList consumeItemEffects = component.m_consumeItemEffects; if (consumeItemEffects != null) { findEffectsAndChange(consumeItemEffects.m_effectPrefabs); } EffectList critHitEffects = ((Character)component).m_critHitEffects; if (critHitEffects != null) { findEffectsAndChange(critHitEffects.m_effectPrefabs); } EffectList deathEffects = ((Character)component).m_deathEffects; if (deathEffects != null) { findEffectsAndChange(deathEffects.m_effectPrefabs); } EffectList hitEffects = ((Character)component).m_hitEffects; if (hitEffects != null) { findEffectsAndChange(hitEffects.m_effectPrefabs); } EffectList jumpEffects = ((Character)component).m_jumpEffects; if (jumpEffects != null) { findEffectsAndChange(jumpEffects.m_effectPrefabs); } EffectList perfectBlockEffect = component.m_perfectBlockEffect; if (perfectBlockEffect != null) { findEffectsAndChange(perfectBlockEffect.m_effectPrefabs); } EffectList pickupEffects = component.m_pickupEffects; if (pickupEffects != null) { findEffectsAndChange(pickupEffects.m_effectPrefabs); } EffectList slideEffects = ((Character)component).m_slideEffects; if (slideEffects != null) { findEffectsAndChange(slideEffects.m_effectPrefabs); } EffectList tarEffects = ((Character)component).m_tarEffects; if (tarEffects != null) { findEffectsAndChange(tarEffects.m_effectPrefabs); } EffectList waterEffects = ((Character)component).m_waterEffects; if (waterEffects != null) { findEffectsAndChange(waterEffects.m_effectPrefabs); } 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 = allPrefabs.Find((GameObject x) => ((Object)x).name == name); if (!((Object)(object)val == (Object)null)) { list[i] = val; } } } } } public void ReplaceOnItem(GameObject gameObject) { 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); } EffectList hitTerrainEffect = component.m_itemData.m_shared.m_hitTerrainEffect; if (hitTerrainEffect != null) { findEffectsAndChange(hitTerrainEffect.m_effectPrefabs); } EffectList holdStartEffect = component.m_itemData.m_shared.m_holdStartEffect; if (holdStartEffect != null) { findEffectsAndChange(holdStartEffect.m_effectPrefabs); } EffectList trailStartEffect = component.m_itemData.m_shared.m_trailStartEffect; if (trailStartEffect != null) { findEffectsAndChange(trailStartEffect.m_effectPrefabs); } EffectList blockEffect = component.m_itemData.m_shared.m_blockEffect; if (blockEffect != null) { findEffectsAndChange(blockEffect.m_effectPrefabs); } } } public void ReplaceFxOnPiece(GameObject gameObject) { 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); } } WearNTear component2 = gameObject.GetComponent<WearNTear>(); if ((Object)(object)component2 != (Object)null) { EffectList hitEffect = component2.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } } } private void findEffectsAndChange(EffectData[] effects) { 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 = allPrefabs.Find((GameObject x) => ((Object)x).name == name); if (!((Object)(object)val2 == (Object)null)) { val.m_prefab = val2; } } } } } [BepInPlugin("BalrondAstafaraios.EotenasClans", "BalrondAstafaraios.EotenasClans", "1.0.6")] public class Launch : BaseUnityPlugin { [HarmonyPatch(typeof(Player), "Load")] private class InitClasn { private static void Postfix() { if (Object.op_Implicit((Object)(object)Player.m_localPlayer)) { ClanManager.LoadClanStatus(); } } } [HarmonyPatch(typeof(Player), "OnRespawn")] private class InitClanOnRespawn { private static void Postfix() { if (Object.op_Implicit((Object)(object)Player.m_localPlayer)) { ClanManager.LoadClanStatus(); } } } [HarmonyPatch(typeof(AudioMan), "Awake")] private static class AudioMan_Awake_Patch { private static void Postfix(AudioMan __instance) { GameObject[] array = asset.LoadAllAssets<GameObject>(); foreach (GameObject val in array) { AudioSource[] componentsInChildren = val.GetComponentsInChildren<AudioSource>(true); foreach (AudioSource val2 in componentsInChildren) { val2.outputAudioMixerGroup = __instance.m_masterMixer.outputAudioMixerGroup; } } } } [HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")] public static class Object_CopyOtherDB_Path { public static void Postfix() { if (IsObjectDBValid()) { List<GameObject> list = new List<GameObject>(); list.Add(Ravens); list.Add(Serpents); list.Add(Drakes); list.Add(Wolfs); list.AddRange(itemList); List<StatusEffect> list2 = new List<StatusEffect>(); list2.Add(RavenStatus); list2.Add(SerpentStatus); list2.Add(DrakeStatus); list2.Add(WolfStatus); list2.AddRange(statusList); databaseAddMethods.AddItems(list); databaseAddMethods.AddStatuseffects(list2); recipes = recipeBuilder.setupRecipes(list, ObjectDB.instance.m_items); databaseAddMethods.AddRecipes(recipes); } } } [HarmonyPatch(typeof(ObjectDB), "Awake")] public static class ObjectDB_Awake_Path { public static void Postfix() { if (IsObjectDBValid()) { List<GameObject> list = new List<GameObject>(); list.Add(Ravens); list.Add(Serpents); list.Add(Drakes); list.Add(Wolfs); list.AddRange(itemList); List<StatusEffect> list2 = new List<StatusEffect>(); list2.Add(RavenStatus); list2.Add(SerpentStatus); list2.Add(DrakeStatus); list2.Add(WolfStatus); list2.AddRange(statusList); databaseAddMethods.AddItems(list); databaseAddMethods.AddStatuseffects(list2); recipes = recipeBuilder.setupRecipes(list, ObjectDB.instance.m_items); databaseAddMethods.AddRecipes(recipes); } } } [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class ZNetScene_Awake_Patch { private static void Prefix(ZNetScene __instance) { //IL_01f8: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance == (Object)null) { Debug.LogWarning((object)"BalrondAstafaraios.EotenasClans: No ZnetScene found"); return; } List<GameObject> list = new List<GameObject>(); list.Add(Ravens); list.Add(Serpents); list.Add(Drakes); list.Add(Wolfs); list.AddRange(itemList); __instance.m_prefabs.Add(draconis); __instance.m_prefabs.Add(ClanAltar); __instance.m_prefabs.AddRange(list); recipeBuilder.setupPieces(pieceList, __instance.m_prefabs); __instance.m_prefabs.AddRange(pieceList); if (hasSpawned) { return; } GameObject val = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "Hammer"); PieceTable buildPieces = val.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces; GameObject val2 = buildPieces.m_pieces.Find((GameObject x) => ((Object)x).name == ((Object)ClanAltar).name); if ((Object)(object)val2 == (Object)null && !hasSpawned) { buildPieces.m_pieces.Add(ClanAltar); } createTotemRecipe(__instance); foreach (GameObject piece in pieceList) { GameObject val3 = buildPieces.m_pieces.Find((GameObject x) => ((Object)x).name == ((Object)piece).name); if ((Object)(object)val3 == (Object)null && !hasSpawned) { buildPieces.m_pieces.Add(piece); } } hasSpawned = true; if (!new ZNet().IsDedicated()) { ShaderReplacment.runMaterialFix(); } } } private const string GUID = "BalrondAstafaraios.EotenasClans"; public const string PluginName = "BalrondAstafaraios.EotenasClans"; private const string PluginVersion = "1.0.6"; private static AssetBundle asset; public static List<Recipe> recipes = new List<Recipe>(); public static RecipeBuilder recipeBuilder = new RecipeBuilder(); public static DatabaseAddMethods databaseAddMethods = new DatabaseAddMethods(); public static GameObject Ravens; public static GameObject Serpents; public static GameObject Drakes; public static GameObject Wolfs; public static StatusEffect RavenStatus; public static StatusEffect SerpentStatus; public static StatusEffect DrakeStatus; public static StatusEffect WolfStatus; public static List<GameObject> itemList = new List<GameObject>(); public static bool hasSpawned = false; public static string[] prefabNames = new string[62] { "ShieldClanSerpent", "ShieldClanDrake", "ShieldClanRaven", "ShieldClanWolf", "ArmorSerpentT1Legs", "ArmorSerpentT2Legs", "ArmorSerpentT3Legs", "ArmorSerpentT1Chest", "ArmorSerpentT2Chest", "ArmorSerpentT3Chest", "HelmetSerpentT1", "HelmetSerpentT2", "HelmetSerpentT3", "ArmorDrakeT1Legs", "ArmorDrakeT2Legs", "ArmorDrakeT3Legs", "ArmorDrakeT1Chest", "ArmorDrakeT2Chest", "ArmorDrakeT3Chest", "HelmetDrakeT1", "HelmetDrakeT2", "HelmetDrakeT3", "ArmorRavenT1Legs", "ArmorRavenT2Legs", "ArmorRavenT3Legs", "ArmorRavenT1Chest", "ArmorRavenT2Chest", "ArmorRavenT3Chest", "HelmetRavenT1", "HelmetRavenT2", "HelmetRavenT3", "ArmorWolfT1Legs", "ArmorWolfT2Legs", "ArmorWolfT3Legs", "ArmorWolfT1Chest", "ArmorWolfT2Chest", "ArmorWolfT3Chest", "HelmetWolfT1", "HelmetWolfT2", "HelmetWolfT3", "CapeClanDrake", "CapeClanRaven", "CapeClanSerpent", "CapeClanWolf", "ClanDrakeAxe", "ClanSerpentSpear", "ClanRavenStaff", "ClanWolfSword", "ArmorClanDrakeChest", "ArmorClanRavenChest", "ArmorClanSerpentChest", "ArmorClanWolfChest", "ArmorClanLegs", "HelmetClanDrake", "HelmetClanRaven", "HelmetClanSerpent", "HelmetClanWolf", "CapeFeatherDrake", "CapeFeatherSerpent", "CapeFeatherReaven", "CapeFeatherWolf", "Dragonetta_NPC_Strike" }; public static List<GameObject> pieceList = new List<GameObject>(); public static string[] pieceNames = new string[8] { "piece_banner_drakes", "piece_banner_serpents", "piece_banner_ravens", "piece_banner_wolfs", "carpetClanDrake", "carpetClanSerpent", "carpetClanRaven", "carpetClanWolf" }; public static List<StatusEffect> statusList = new List<StatusEffect>(); public static string[] statusNames = new string[13] { "DrakeT1", "DrakeT2", "DrakeT3", "RavenT1", "RavenT2", "RavenT3", "SerpentT1", "SerpentT2", "SerpentT3", "WolfT1", "WolfT2", "WolfT3", "BaseClanSet" }; public static GameObject ClanAltar; public static List<GameObject> vfxPrefabs = new List<GameObject>(); public static string[] vfxNames = new string[18] { "sfx_Dragonetta_alerted", "sfx_Dragonetta_death", "sfx_Dragonetta_Hit", "sfx_Dragonetta_hurt", "sfx_Dragonetta_idle", "fx_eikthyr_forwardshockwave_raven", "projectile_tridentharpoon", "sfx_clanDrake", "sfx_clanRaven", "sfx_clanSerpent", "sfx_clanWolf", "thunderbolt_projectile_raven", "vfx_clanDrake", "vfx_clanRaven", "vfx_clanSerpent", "vfx_clanWolf", "vfx_thunderbolt_explosion_raven", "Wave_Ground_drake" }; public static GameObject draconis; private void Awake() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) asset = GetAssetBundle("balrondclans"); LoadAssets(); ClanManager.setup(); new Harmony("BalrondAstafaraios.EotenasClans").PatchAll(); } private void LoadAssets() { Ravens = asset.LoadAsset<GameObject>("Assets/Custom/Comission/EotenasClans/SymbolRaven.prefab"); Serpents = asset.LoadAsset<GameObject>("Assets/Custom/Comission/EotenasClans/SymbolSerpent.prefab"); Drakes = asset.LoadAsset<GameObject>("Assets/Custom/Comission/EotenasClans/SymbolDrake.prefab"); Wolfs = asset.LoadAsset<GameObject>("Assets/Custom/Comission/EotenasClans/SymbolWolf.prefab"); ShaderReplacment.Replace(Ravens); ShaderReplacment.Replace(Serpents); ShaderReplacment.Replace(Drakes); ShaderReplacment.Replace(Wolfs); draconis = asset.LoadAsset<GameObject>("Assets/Custom/Comission/EotenasClans/DragonettaNPC.prefab"); ShaderReplacment.Replace(draconis); RavenStatus = asset.LoadAsset<StatusEffect>("Assets/Custom/Comission/EotenasClans/StatusClanRaven.asset"); SerpentStatus = asset.LoadAsset<StatusEffect>("Assets/Custom/Comission/EotenasClans/StatusClanSerpent.asset"); DrakeStatus = asset.LoadAsset<StatusEffect>("Assets/Custom/Comission/EotenasClans/StatusClanDrake.asset"); WolfStatus = asset.LoadAsset<StatusEffect>("Assets/Custom/Comission/EotenasClans/StatusClanWolf.asset"); ClanAltar = asset.LoadAsset<GameObject>("Assets/Custom/Comission/EotenasClans/ClanTotem.prefab"); ClanAltar.AddComponent<ClanTotem>(); ShaderReplacment.Replace(ClanAltar); string[] array = vfxNames; foreach (string text in array) { GameObject val = asset.LoadAsset<GameObject>("Assets/Custom/Comission/EotenasClans/vfx/" + text + ".prefab"); if ((Object)(object)val != (Object)null) { ShaderReplacment.Replace(val); vfxPrefabs.Add(val); } else { Debug.LogWarning((object)("Item not found: " + text)); } } string[] array2 = prefabNames; foreach (string text2 in array2) { GameObject val2 = asset.LoadAsset<GameObject>("Assets/Custom/Comission/EotenasClans/items/" + text2 + ".prefab"); if ((Object)(object)val2 != (Object)null) { ShaderReplacment.Replace(val2); itemList.Add(val2); } else { Debug.LogWarning((object)("Item not found: " + text2)); } } string[] array3 = pieceNames; foreach (string text3 in array3) { GameObject val3 = asset.LoadAsset<GameObject>("Assets/Custom/Comission/EotenasClans/pieces/" + text3 + ".prefab"); if ((Object)(object)val3 != (Object)null) { ShaderReplacment.Replace(val3); pieceList.Add(val3); } else { Debug.LogWarning((object)("Piece not found: " + text3)); } } string[] array4 = statusNames; foreach (string text4 in array4) { StatusEffect val4 = asset.LoadAsset<StatusEffect>("Assets/Custom/Comission/EotenasClans/Status/" + text4 + ".asset"); if ((Object)(object)val4 != (Object)null) { statusList.Add(val4); } else { Debug.LogWarning((object)("Status not found: " + text4)); } } } private static AssetBundle GetAssetBundle(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 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; } private static Requirement createReq(string name, int amount, int amountPerLevel, ZNetScene zNetScene) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown Requirement val = new Requirement(); val.m_recover = true; ItemDrop component = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == name).GetComponent<ItemDrop>(); val.m_resItem = component; val.m_amount = amount; val.m_amountPerLevel = amountPerLevel; return val; } public static void createTotemRecipe(ZNetScene zNetScene) { List<Requirement> list = new List<Requirement>(); list.Add(createReq("SwordCheat", 1, 0, zNetScene)); ClanAltar.GetComponent<Piece>().m_resources = list.ToArray(); Debug.Log((object)"i set Req on altar"); } } public class RecipeRebalance { public string name = ""; public string item = "Wood"; public int amount = 1; public string craftingStation = ""; public string minStationLevel = "1"; public bool enabled = true; public string repairStation = ""; public string res1 = ""; public string res2 = ""; public string res3 = ""; public string res4 = ""; public string res5 = ""; public string res6 = ""; public List<Resource> resources = new List<Resource>(); public bool wasLoaded = false; public void convertResToList() { int num = 0; if (resources.Count == 0) { num += stringArrayToResource(splitString(res1)); num += stringArrayToResource(splitString(res2)); num += stringArrayToResource(splitString(res3)); num += stringArrayToResource(splitString(res4)); num += stringArrayToResource(splitString(res5)); num += stringArrayToResource(splitString(res6)); if (num == 6) { Debug.LogWarning((object)("DVERGER FURNITURE: No resources found for recipe: " + name)); } } } private string[] splitString(string res) { if (res != "") { return res.Split(new char[1] { ':' }); } return null; } private int stringArrayToResource(string[] array) { if (array != null) { if (array.Length == 4) { Resource resource = new Resource(); resource.item = array[0]; resource.amount = Convert.ToInt32(array[1]); resource.amountPerLevel = Convert.ToInt32(array[2]); resource.recovery = Convert.ToBoolean(array[3]); resources.Add(resource); return 0; } Debug.LogWarning((object)("DVERGER FURNITURE: Incomplete array resource length: " + array.Length)); return 1; } return 1; } public string ObjectToString() { return "Name:" + name + " Item:" + item + " Amount:" + amount + " Table:" + craftingStation + " Level:" + minStationLevel + " Enabled:" + enabled + " Repair:" + repairStation + " Resources:" + ResourcesToString(); } public string ResourcesToString() { string text = ""; foreach (Resource resource in resources) { text = text + " Name:" + resource.item + " Amount:" + resource.amount + " PerLevel:" + resource.amountPerLevel + " Recover:" + resource.recovery + ","; } return text; } } public class Resource { public int amount = 1; public int amountPerLevel = 0; public bool recovery = true; public ItemDrop itemDrop; public Requirement pieceConfig; public string item = "Wood"; public Resource() { } public Resource(string item, int amount, int amountPerLevel = 0, bool recovery = true) { this.item = item; this.amount = amount; this.amountPerLevel = amountPerLevel; this.recovery = recovery; } public void setItemDrop(GameObject prefab) { if ((Object)(object)prefab.GetComponent<ItemDrop>() != (Object)null) { itemDrop = prefab.GetComponent<ItemDrop>(); } else { Debug.LogWarning((object)("DVERGER FURNITURE: NO ITEM DROP FOUND on prefab name: " + ((Object)prefab).name)); } } public Requirement getPieceConfig() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown //IL_003e: Expected O, but got Unknown Requirement val = new Requirement { m_resItem = itemDrop, m_amount = amount, m_amountPerLevel = amountPerLevel, m_recover = recovery }; Requirement result = val; pieceConfig = val; return result; } } public class RecipeBuilder { private List<GameObject> pieces; private List<GameObject> items; public List<Recipe> setupRecipes(List<GameObject> items, List<GameObject> objectDbItems) { this.items = objectDbItems; pieces = this.items.Find((GameObject x) => ((Object)x).name == "Hammer").GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces.m_pieces; List<Recipe> list = new List<Recipe>(); foreach (GameObject item in items) { if (!(((Object)item).name == "Dragonetta_NPC_Strike")) { Recipe val = createItemRecipe(item, objectDbItems); if ((Object)(object)val != (Object)null) { list.Add(val); } } } return list; } private Recipe createItemRecipe(GameObject item, List<GameObject> objectDbItems) { if (!isItemOnTheList(((Object)item).name)) { return null; } Recipe val = ScriptableObject.CreateInstance<Recipe>(); List<Requirement> list = new List<Requirement>(); ((Object)val).name = "Recipe_ClanItem_" + ((Object)item).name; val.m_item = item.GetComponent<ItemDrop>(); switch (((Object)item).name) { case "ShieldClanSerpent": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolSerpent", 1, 1)); list.Add(createReq("FineWood", 15, 8)); list.Add(createReq("Iron", 15, 10)); list.Add(createReq("TrollHide", 5, 2)); break; case "ShieldClanDrake": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolDrake", 1, 1)); list.Add(createReq("FineWood", 15, 8)); list.Add(createReq("Iron", 15, 10)); list.Add(createReq("TrollHide", 5, 2)); break; case "ShieldClanRaven": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolRaven", 1, 1)); list.Add(createReq("FineWood", 15, 8)); list.Add(createReq("Iron", 15, 10)); list.Add(createReq("TrollHide", 5, 2)); break; case "ShieldClanWolf": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolWolf", 1, 1)); list.Add(createReq("FineWood", 15, 8)); list.Add(createReq("Iron", 15, 10)); list.Add(createReq("TrollHide", 5, 2)); break; case "ArmorSerpentT1Legs": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolSerpent", 1, 1)); list.Add(createReq("BearFur", 5, 2, "DeerHide", 5, 2)); list.Add(createReq("BlackMetal", 20, 10)); list.Add(createReq("Root", 20, 10)); break; case "ArmorSerpentT2Legs": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolSerpent", 2, 2)); list.Add(createReq("ArmorSerpentT1Legs", 1, 0)); list.Add(createReq("ScaleHide", 20, 10)); list.Add(createReq("SerpentScale", 20, 10)); break; case "ArmorSerpentT3Legs": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolSerpent", 3, 3)); list.Add(createReq("ArmorSerpentT2Legs", 1, 0)); list.Add(createReq("BonemawSerpentScale", 10, 5, "SerpentScale", 10, 5)); list.Add(createReq("StormScale", 10, 5, "SerpentScale", 10, 5)); break; case "ArmorSerpentT1Chest": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolSerpent", 1, 1)); list.Add(createReq("Chitin", 15, 7)); list.Add(createReq("BlackMetal", 15, 7)); list.Add(createReq("SerpentScale", 10, 5)); break; case "ArmorSerpentT2Chest": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolSerpent", 2, 2)); list.Add(createReq("ArmorSerpentT1Chest", 1, 0)); list.Add(createReq("SerpentScale", 10, 5)); list.Add(createReq("Mandible", 5, 3)); break; case "ArmorSerpentT3Chest": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolSerpent", 3, 3)); list.Add(createReq("ArmorSerpentT2Chest", 1, 0)); list.Add(createReq("Carapace", 10, 5)); list.Add(createReq("BonemawSerpentScale", 10, 5, "SerpentScale", 20, 10)); break; case "HelmetSerpentT1": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolSerpent", 1, 1)); list.Add(createReq("TrophySerpent", 1, 0)); list.Add(createReq("BlackMetal", 10, 7)); list.Add(createReq("Chitin", 15, 10)); break; case "HelmetSerpentT2": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolSerpent", 2, 2)); list.Add(createReq("HelmetSerpentT1", 1, 0)); list.Add(createReq("SerpentScale", 1, 1)); list.Add(createReq("JuteRed", 10, 4)); break; case "HelmetSerpentT3": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolSerpent", 3, 3)); list.Add(createReq("HelmetSerpentT2", 1, 0)); list.Add(createReq("TrophySerpent", 4, 2)); list.Add(createReq("SilkReinforcedThread", 6, 3, "LinenThread", 20, 10)); break; case "ArmorDrakeT1Legs": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolDrake", 1, 1)); list.Add(createReq("BlackMetal", 10, 5)); list.Add(createReq("FreezeGland", 6, 2)); list.Add(createReq("DrakeSkin", 10, 5, "WolfPelt", 10, 5)); break; case "ArmorDrakeT2Legs": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolDrake", 2, 2)); list.Add(createReq("ArmorDrakeT1Legs", 1, 0)); list.Add(createReq("ScaleHide", 8, 4)); list.Add(createReq("DrakeSkin", 10, 5, "WolfPelt", 10, 5)); break; case "ArmorDrakeT3Legs": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolDrake", 3, 3)); list.Add(createReq("ArmorDrakeT3Legs", 1, 0)); list.Add(createReq("FlametalNew", 10, 5)); list.Add(createReq("BonemawSerpentScale", 10, 5, "SerpentScale", 20, 10)); break; case "ArmorDrakeT1Chest": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolDrake", 1, 1)); list.Add(createReq("BlackMetal", 10, 5)); list.Add(createReq("Chain", 4, 1)); list.Add(createReq("DrakeSkin", 10, 5, "WolfPelt", 10, 5)); break; case "ArmorDrakeT2Chest": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolDrake", 2, 2)); list.Add(createReq("ArmorDrakeT1Chest", 1, 0)); list.Add(createReq("Carapace", 8, 4)); list.Add(createReq("Crystal", 10, 5)); break; case "ArmorDrakeT3Chest": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolDrake", 3, 3)); list.Add(createReq("ArmorDrakeT2Chest", 1, 0)); list.Add(createReq("FlametalNew", 10, 5)); list.Add(createReq("BonemawSerpentScale", 10, 5)); break; case "HelmetDrakeT1": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolDrake", 1, 1)); list.Add(createReq("TrophyHatchling", 4, 0)); list.Add(createReq("BlackMetal", 10, 5)); list.Add(createReq("Crystal", 10, 5)); break; case "HelmetDrakeT2": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolDrake", 2, 2)); list.Add(createReq("HelmetDrakeT1", 1, 0)); list.Add(createReq("DarkSteel", 8, 4, "Chain", 5)); list.Add(createReq("SerpentScale", 6, 3)); break; case "HelmetDrakeT3": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolDrake", 3, 3)); list.Add(createReq("HelmetDrakeT2", 1, 0)); list.Add(createReq("TrophyBonemawSerpent", 1, 1)); list.Add(createReq("FlametalNew", 10, 5)); break; case "ArmorRavenT1Legs": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolRaven", 1, 1)); list.Add(createReq("BearFur", 6, 2, "DeerHide", 6, 2)); list.Add(createReq("BlackMetal", 10, 5)); list.Add(createReq("Feathers", 30, 15)); break; case "ArmorRavenT2Legs": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolRaven", 2, 2)); list.Add(createReq("ArmorRavenT1Legs", 1, 0)); list.Add(createReq("JuteRed", 10, 5)); list.Add(createReq("Eitr", 20, 10)); break; case "ArmorRavenT3Legs": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolRaven", 3, 3)); list.Add(createReq("ArmorRavenT2Legs", 1, 0)); list.Add(createReq("MushroomSmokePuff", 10, 5)); list.Add(createReq("FlametalNew", 10, 5)); break; case "ArmorRavenT1Chest": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolRaven", 1, 1)); list.Add(createReq("WolfHairBundle", 10, 5, "Feathers", 60)); list.Add(createReq("BlackMetal", 10, 5)); list.Add(createReq("Feathers", 30, 15)); break; case "ArmorRavenT2Chest": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolRaven", 2, 2)); list.Add(createReq("ArmorRavenT1Chest", 1, 0)); list.Add(createReq("Crystal", 20, 10)); list.Add(createReq("Eitr", 20, 10)); break; case "ArmorRavenT3Chest": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolRaven", 3, 3)); list.Add(createReq("ArmorRavenT2Chest", 1, 0)); list.Add(createReq("SilkReinforcedThread", 20, 10, "LinenThread", 40, 20)); list.Add(createReq("FlametalNew", 10, 5)); break; case "HelmetRavenT1": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolRaven", 1, 1)); list.Add(createReq("Feathers", 60, 10, "Feathers", 60)); list.Add(createReq("BlackMetal", 10, 5)); list.Add(createReq("Ooze", 10, 5)); break; case "HelmetRavenT2": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolRaven", 2, 2)); list.Add(createReq("HelmetRavenT1", 1, 0)); list.Add(createReq("JuteRed", 10, 5)); list.Add(createReq("MushroomJotunPuffs", 10, 5)); break; case "HelmetRavenT3": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolRaven", 3, 3)); list.Add(createReq("HelmetRavenT2", 1, 0)); list.Add(createReq("SilkReinforcedThread", 10, 5, "LinenThread", 20, 10)); list.Add(createReq("MushroomSmokePuff", 16, 8)); break; case "ArmorWolfT1Legs": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolWolf", 1, 1)); list.Add(createReq("WolfPelt", 10, 5)); list.Add(createReq("BlackMetal", 20, 10)); list.Add(createReq("Bloodbag", 20, 0)); break; case "ArmorWolfT2Legs": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolWolf", 2, 2)); list.Add(createReq("ArmorWolfT1Legs", 1, 0)); list.Add(createReq("DarkSteel", 18, 9, "Chain", 10)); list.Add(createReq("GiantBloodSack", 16, 8)); break; case "ArmorWolfT3Legs": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolWolf", 3, 3)); list.Add(createReq("ArmorWolfT2Legs", 1, 0)); list.Add(createReq("CharcoalResin", 30, 15)); list.Add(createReq("FlametalNew", 20, 10)); break; case "ArmorWolfT1Chest": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolWolf", 1, 1)); list.Add(createReq("TrophyWolf", 6, 3)); list.Add(createReq("BlackMetal", 15, 8)); list.Add(createReq("JuteRed", 10, 5)); break; case "ArmorWolfT2Chest": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolWolf", 2, 2)); list.Add(createReq("ArmorWolfT1Chest", 1, 0)); list.Add(createReq("DarkSteel", 30, 15, "Chain", 15)); list.Add(createReq("GiantBloodSack", 16, 8)); break; case "ArmorWolfT3Chest": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolWolf", 3, 3)); list.Add(createReq("ArmorWolfT2Chest", 1, 0)); list.Add(createReq("FenringInsygnia", 10, 5, "Chain", 6, 3)); list.Add(createReq("FlametalNew", 10, 5)); break; case "HelmetWolfT1": val.m_craftingStation = FindStation(pieces, "forge"); val.m_minStationLevel = 3; list.Add(createReq("SymbolWolf", 1, 1)); list.Add(createReq("TrophyCultist", 1, 0)); list.Add(createReq("WolfHairBundle", 10, 5)); list.Add(createReq("JuteRed", 10, 5)); break; case "HelmetWolfT2": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolWolf", 2, 2)); list.Add(createReq("HelmetWolfT1", 1, 0)); list.Add(createReq("DarkSteel", 20, 10, "Chain", 14)); list.Add(createReq("GiantBloodSack", 10, 5)); break; case "HelmetWolfT3": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolWolf", 3, 3)); list.Add(createReq("HelmetWolfT2", 1, 0)); list.Add(createReq("MorgenHeart", 10, 5)); list.Add(createReq("FlametalNew", 10, 5)); break; case "CapeClanDrake": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolDrake", 1, 0)); list.Add(createReq("TrophyDraugrElite", 1, 1)); list.Add(createReq("DarkSteel", 3, 1, "Chain", 3)); list.Add(createReq("WolfPelt", 6, 2)); break; case "CapeClanRaven": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolRaven", 1, 0)); list.Add(createReq("TrophyDraugrElite", 1, 1)); list.Add(createReq("DarkSteel", 3, 1, "Chain", 3)); list.Add(createReq("WolfPelt", 6, 2)); break; case "CapeClanSerpent": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolSerpent", 1, 1)); list.Add(createReq("TrophyDraugrElite", 1, 1)); list.Add(createReq("DarkSteel", 3, 1, "Chain", 3)); list.Add(createReq("WolfPelt", 6, 2)); break; case "CapeClanWolf": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 3; list.Add(createReq("SymbolWolf", 1, 1)); list.Add(createReq("TrophyDraugrElite", 1, 1)); list.Add(createReq("DarkSteel", 3, 1, "Chain", 3)); list.Add(createReq("WolfPelt", 6, 2)); break; case "ClanDrakeAxe": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolDrake", 2, 2)); list.Add(createReq("FlametalNew", 30, 10)); list.Add(createReq("Ruby", 6, 1)); list.Add(createReq("Crystal", 20, 10)); break; case "ClanSerpentSpear": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolSerpent", 2, 2)); list.Add(createReq("FlametalNew", 20, 7)); list.Add(createReq("Ruby", 5, 1)); list.Add(createReq("SerpentScale", 10, 5)); break; case "ClanRavenStaff": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolRaven", 2, 2)); list.Add(createReq("FlametalNew", 30, 15)); list.Add(createReq("Ruby", 7, 1)); list.Add(createReq("ThunderGland", 18, 9, "Thunderstone", 10, 5)); break; case "ClanWolfSword": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolWolf", 2, 2)); list.Add(createReq("FlametalNew", 30, 15)); list.Add(createReq("Ruby", 8, 2)); list.Add(createReq("Iron", 10, 5)); break; case "ArmorClanDrakeChest": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 1; list.Add(createReq("SymbolDrake", 1, 0)); list.Add(createReq("Bronze", 20, 10)); list.Add(createReq("TrollHide", 10, 2)); list.Add(createReq("LeatherScraps", 10, 5)); break; case "ArmorClanRavenChest": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 1; list.Add(createReq("SymbolRaven", 1, 0)); list.Add(createReq("Bronze", 20, 10)); list.Add(createReq("TrollHide", 10, 2)); list.Add(createReq("LeatherScraps", 10, 5)); break; case "ArmorClanSerpentChest": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 1; list.Add(createReq("SymbolSerpent", 1, 0)); list.Add(createReq("Bronze", 20, 10)); list.Add(createReq("TrollHide", 10, 2)); list.Add(createReq("LeatherScraps", 10, 5)); break; case "ArmorClanWolfChest": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 1; list.Add(createReq("SymbolWolf", 1, 0)); list.Add(createReq("Bronze", 20, 10)); list.Add(createReq("TrollHide", 10, 2)); list.Add(createReq("LeatherScraps", 10, 5)); break; case "ArmorClanLegs": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 1; list.Add(createReq("SymbolWolf", 1, 0)); list.Add(createReq("Bronze", 10, 5)); list.Add(createReq("LeatherScraps", 10, 5)); list.Add(createReq("BearFur", 10, 2, "DeerHide", 10, 2)); break; case "HelmetClanDrake": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 1; list.Add(createReq("SymbolDrake", 1, 0)); list.Add(createReq("TrollHide", 10, 2)); list.Add(createReq("BearFur", 10, 2, "DeerHide", 10, 2)); list.Add(createReq("LeatherScraps", 10, 5)); break; case "HelmetClanSerpent": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 1; list.Add(createReq("SymbolSerpent", 1, 0)); list.Add(createReq("TrollHide", 10, 2)); list.Add(createReq("BearFur", 10, 2, "DeerHide", 10, 2)); list.Add(createReq("LeatherScraps", 10, 5)); break; case "HelmetClanRaven": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 1; list.Add(createReq("SymbolRaven", 1, 0)); list.Add(createReq("TrollHide", 10, 2)); list.Add(createReq("BearFur", 10, 2, "DeerHide", 10, 2)); list.Add(createReq("LeatherScraps", 10, 5)); break; case "HelmetClanWolf": val.m_craftingStation = FindStation(pieces, "piece_workbench"); val.m_minStationLevel = 1; list.Add(createReq("SymbolWolf", 1, 0)); list.Add(createReq("TrollHide", 10, 2)); list.Add(createReq("BearFur", 10, 2, "DeerHide", 10, 2)); list.Add(createReq("LeatherScraps", 10, 5)); break; case "CapeFeatherDrake": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolDrake", 1, 0)); list.Add(createReq("Feathers", 10, 0)); list.Add(createReq("ScaleHide", 5, 2)); list.Add(createReq("Eitr", 20, 0)); break; case "CapeFeatherSerpent": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolSerpent", 1, 0)); list.Add(createReq("Feathers", 10, 0)); list.Add(createReq("ScaleHide", 5, 2)); list.Add(createReq("Eitr", 20, 0)); break; case "CapeFeatherReaven": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolRaven", 1, 0)); list.Add(createReq("Feathers", 10, 0)); list.Add(createReq("ScaleHide", 5, 2)); list.Add(createReq("Eitr", 20, 0)); break; case "CapeFeatherWolf": val.m_craftingStation = FindStation(pieces, "blackforge"); val.m_minStationLevel = 1; list.Add(createReq("SymbolWolf", 1, 0)); list.Add(createReq("Feathers", 10, 0)); list.Add(createReq("ScaleHide", 5, 2)); list.Add(createReq("Eitr", 20, 0)); break; } val.m_amount = 1; val.m_repairStation = val.m_craftingStation; val.m_resources = list.ToArray(); return val; } private bool isItemOnTheList(string name) { return Launch.prefabNames.Contains(name); } public void setupPieces(List<GameObject> pieces, List<GameObject> prefabs) { items = prefabs; foreach (GameObject piece in pieces) { createPieceRecipe(piece, prefabs); } } private void createPieceRecipe(GameObject gameObject, List<GameObject> prefabs) { Piece component = gameObject.gameObject.GetComponent<Piece>(); if (!((Object)(object)component == (Object)null)) { List<Requirement> list = new List<Requirement>(); switch (((Object)component).name) { case "piece_banner_drakes": component.m_craftingStation = FindStation(prefabs, "piece_workbench"); list.Add(createReq("SymbolDrake", 1, 0)); list.Add(createReq("Wood", 3, 0)); list.Add(createReq("LeatherScraps", 2, 0)); list.Add(createReq("BoneFragments", 3, 0)); component.m_resources = list.ToArray(); break; case "piece_banner_serpents": component.m_craftingStation = FindStation(prefabs, "piece_workbench"); list.Add(createReq("SymbolSerpent", 1, 0)); list.Add(createReq("Wood", 3, 0)); list.Add(createReq("LeatherScraps", 2, 0)); list.Add(createReq("BoneFragments", 3, 0)); component.m_resources = list.ToArray(); break; case "piece_banner_ravens": component.m_craftingStation = FindStation(prefabs, "piece_workbench"); list.Add(createReq("SymbolRaven", 1, 0)); list.Add(createReq("Wood", 3, 0)); list.Add(createReq("LeatherScraps", 2, 0)); list.Add(createReq("BoneFragments", 3, 0)); component.m_resources = list.ToArray(); break; case "piece_banner_wolfs": component.m_craftingStation = FindStation(prefabs, "piece_workbench"); list.Add(createReq("SymbolWolf", 1, 0)); list.Add(createReq("Wood", 3, 0)); list.Add(createReq("LeatherScraps", 2, 0)); list.Add(createReq("BoneFragments", 3, 0)); component.m_resources = list.ToArray(); break; case "carpetClanDrake": component.m_craftingStation = FindStation(prefabs, "piece_workbench"); list.Add(createReq("SymbolDrake", 1, 0)); list.Add(createReq("LinenThread", 7, 0)); list.Add(createReq("Dandelion", 4, 0)); list.Add(createReq("Coal", 2, 0)); break; case "carpetClanSerpent": component.m_craftingStation = FindStation(prefabs, "piece_workbench"); list.Add(createReq("SymbolSerpent", 1, 0)); list.Add(createReq("LinenThread", 7, 0)); list.Add(createReq("Dandelion", 4, 0)); list.Add(createReq("Coal", 2, 0)); component.m_resources = list.ToArray(); break; case "carpetClanRaven": component.m_craftingStation = FindStation(prefabs, "piece_workbench"); list.Add(createReq("SymbolRaven", 1, 0)); list.Add(createReq("LinenThread", 7, 0)); list.Add(createReq("Dandelion", 4, 0)); list.Add(createReq("Coal", 2, 0)); component.m_resources = list.ToArray(); break; case "carpetClanWolf": component.m_craftingStation = FindStation(prefabs, "piece_workbench"); list.Add(createReq("SymbolWolf", 1, 0)); list.Add(createReq("LinenThread", 7, 0)); list.Add(createReq("Dandelion", 4, 0)); list.Add(createReq("Coal", 2, 0)); component.m_resources = list.ToArray(); break; } } } private CraftingStation FindStation(List<GameObject> list, string name) { GameObject val = list.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { return val.GetComponent<CraftingStation>(); } return null; } private Requirement createReq(string name, int amount, int amountPerLevel, string altItem = "", int altAmount = 0, int altAmountPerLevel = 0) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown Requirement val = new Requirement(); val.m_recover = true; GameObject val2 = items.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val2 != (Object)null) { ItemDrop component = val2.GetComponent<ItemDrop>(); val.m_amount = amount; val.m_amountPerLevel = amountPerLevel; val.m_resItem = component; } else { val2 = items.Find((GameObject x) => ((Object)x).name == altItem); ItemDrop component2 = val2.GetComponent<ItemDrop>(); val.m_amount = altAmount; val.m_amountPerLevel = altAmountPerLevel; val.m_resItem = component2; } return val; } } public class ShaderReplacment { public static List<GameObject> prefabsToReplaceShader = new List<GameObject>(); public static List<Material> materialsInPrefabs = new List<Material>(); public string[] shaderlist = new string[49] { "Custom/AlphaParticle", "Custom/Blob", "Custom/Bonemass", "Custom/Clouds", "Custom/Creature", "Custom/Decal", "Custom/Distortion", "Custom/Flow", "Custom/FlowOpaque", "Custom/Grass", "Custom/GuiScroll", "Custom/Heightmap", "Custom/icon", "Custom/InteriorSide", "Custom/LitGui", "Custom/LitParticles", "Custom/mapshader", "Custom/ParticleDecal", "Custom/Piece", "Custom/Player", "Custom/Rug", "Custom/ShadowBlob", "Custom/SkyboxProcedural", "Custom/SkyObject", "Custom/StaticRock", "Custom/Tar", "Custom/Trilinearmap", "Custom/UI/BGBlur", "Custom/Vegetation", "Custom/Water", "Custom/WaterBottom", "Custom/WaterMask", "Custom/Yggdrasil", "Custom/Yggdrasil/root", "Hidden/BlitCopyHDRTonemap", "Hidden/Dof/DepthOfFieldHdr", "Hidden/Dof/DX11Dof", "Hidden/Internal-Loading", "Hidden/Internal-UIRDefaultWorld", "Hidden/SimpleClear", "Hidden/SunShaftsComposite", "Lux Lit Particles/ Bumped", "Lux Lit Particles/ Tess Bumped", "Particles/Standard Surface2", "Particles/Standard Unlit2", "Standard TwoSided", "ToonDeferredShading2017", "Unlit/DepthWrite", "Unlit/Lighting" }; 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 findShader(string name) { Shader[] array = Resources.FindObjectsOfTypeAll<Shader>(); if (array.Length == 0) { Debug.LogWarning((object)"SHADER LIST IS EMPTY!"); return null; } if (debug) { } return shaders.Find((Shader x) => ((Object)x).name == name); } public static Shader GetShaderByName(string name) { return shaders.Find((Shader x) => ((Object)x).name == name.Trim()); } public static void debugShaderList(List<Shader> shadersRes) { foreach (Shader shadersRe in shadersRes) { Debug.LogWarning((object)("SHADER NAME IS: " + ((Object)shadersRe).name)); } debug = false; } public static void Replace(GameObject gameObject) { 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.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("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; } } } namespace EotenasClans.Properties { [GeneratedCode("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")] [CompilerGenerated] internal sealed class Settings : ApplicationSettingsBase { private static Settings defaultInstance = (Settings)(object)SettingsBase.Synchronized((SettingsBase)(object)new Settings()); public static Settings Default => defaultInstance; } }
plugins/BalrondServerCore.dll
Decompiled 6 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; 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: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] namespace BalrondServerCore; public class BuildChanges { private List<GameObject> buildPieces = new List<GameObject>(); private List<GameObject> items = new List<GameObject>(); private List<ItemConversion> allConversions = new List<ItemConversion>(); private string[] buildPiecesNames = new string[5] { "portal_wood", "piece_workbench", "piece_chest_private", "piece_chest_wood", "forge" }; public void editBuidlPieces(List<GameObject> buildpieces, List<GameObject> items) { buildPieces = buildpieces; this.items = items; editFermenter(); editSmelter(); editFurnace(); editKiln(); editWHeel(); editRefinery(); editWIndMIll(); editSap(); editBeehive(); EditRecipes(); } private void EditRecipes() { string[] array = buildPiecesNames; foreach (string name in array) { GameObject val = FindBuildPiece(name); if ((Object)(object)val != (Object)null) { changeBuildPiece(val); } } } private void changeBuildPiece(GameObject buildPiece) { switch (((Object)buildPiece).name) { case "piece_chest_private": ChangeChest(buildPiece, 3, 6); break; case "piece_chest_wood": ChangeChest(buildPiece, 2, 6); break; case "portal_wood": ChangeRecipe(buildPiece); break; case "forge": case "piece_workbench": ChcangeCraftingStation(buildPiece, requireRoof: false); break; } } private void ChangeChest(GameObject gameObject, int height, int width) { Container component = gameObject.GetComponent<Container>(); component.m_width = width; component.m_height = height; } private void ChcangeCraftingStation(GameObject buildPiece, bool requireRoof) { CraftingStation component = buildPiece.GetComponent<CraftingStation>(); if ((Object)(object)component != (Object)null) { component.m_craftRequireRoof = requireRoof; } } private GameObject FindBuildPiece(string name) { return buildPieces.Find((GameObject x) => ((Object)x).name == name); } private void ChangeRecipe(GameObject gameObject) { Piece component = gameObject.GetComponent<Piece>(); component.m_resources = createResources(gameObject); } private Requirement[] createResources(GameObject item) { List<Requirement> list = new List<Requirement>(); string name = ((Object)item).name; string text = name; if (text == "portal_wood") { list.Add(createReq("Crystal", 5, 0)); list.Add(createReq("FineWood", 25, 0)); list.Add(createReq("SurtlingCore", 5, 0)); list.Add(createReq("HardAntler", 1, 0)); list.Add(createReq("Resin", 20, 0)); } return list.ToArray(); } private Requirement createReq(string name, int amount, int amountPerLevel) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown Requirement val = new Requirement(); val.m_recover = true; ItemDrop component = FindItem(name).GetComponent<ItemDrop>(); val.m_resItem = component; val.m_amount = amount; val.m_amountPerLevel = amountPerLevel; return val; } private GameObject FindItem(string name) { GameObject val = items.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { return val; } Debug.LogWarning((object)("Item Not Found - " + name + ", Replaced With Wood")); return items.Find((GameObject x) => ((Object)x).name == "Wood"); } private void editFermenter() { GameObject val = buildPieces.Find((GameObject x) => ((Object)x).name == "fermenter"); Fermenter component = val.GetComponent<Fermenter>(); component.m_fermentationDuration = 2000f; } private void EditConversion(Fermenter fermenter, GameObject to, int amount) { foreach (ItemConversion item in fermenter.m_conversion) { if (((Object)item.m_to).name == ((Object)to).name) { item.m_producedItems = amount; } } } private ItemConversion addFermenterCoversion(GameObject from, GameObject to) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown ItemConversion val = new ItemConversion(); val.m_from = from.GetComponent<ItemDrop>(); val.m_to = to.GetComponent<ItemDrop>(); val.m_producedItems = 6; return val; } private void editSmelter() { GameObject val = buildPieces.Find((GameObject x) => ((Object)x).name == "smelter"); Smelter component = val.GetComponent<Smelter>(); component.m_maxFuel = 45; component.m_maxOre = 15; component.m_secPerProduct = 40f; component.m_fuelPerProduct = 3; allConversions.AddRange(component.m_conversion); } private void editFurnace() { GameObject val = buildPieces.Find((GameObject x) => ((Object)x).name == "blastfurnace"); Smelter component = val.GetComponent<Smelter>(); component.m_maxFuel = 60; component.m_maxOre = 30; component.m_secPerProduct = 20f; component.m_fuelPerProduct = 2; foreach (ItemConversion itemConversion in component.m_conversion) { ItemConversion val2 = allConversions.Find((ItemConversion x) => ((Object)x.m_from).name == ((Object)itemConversion.m_from).name); if (val2 == null) { allConversions.Add(itemConversion); } } component.m_conversion.Clear(); component.m_conversion.AddRange(allConversions); } private void editWHeel() { GameObject val = buildPieces.Find((GameObject x) => ((Object)x).name == "piece_spinningwheel"); Smelter component = val.GetComponent<Smelter>(); component.m_maxOre = 80; component.m_secPerProduct = 25f; } private void editRefinery() { GameObject val = buildPieces.Find((GameObject x) => ((Object)x).name == "eitrrefinery"); Smelter component = val.GetComponent<Smelter>(); component.m_maxOre = 60; component.m_maxFuel = 60; component.m_spawnStack = true; component.m_secPerProduct = 40f; } private void editSap() { GameObject val = buildPieces.Find((GameObject x) => ((Object)x).name == "piece_sapcollector"); SapCollector component = val.GetComponent<SapCollector>(); component.m_secPerUnit = 45f; component.m_maxLevel = 30; } private void editWIndMIll() { GameObject val = buildPieces.Find((GameObject x) => ((Object)x).name == "windmill"); Smelter component = val.GetComponent<Smelter>(); component.m_maxOre = 60; component.m_secPerProduct = 10f; } private void editKiln() { GameObject val = buildPieces.Find((GameObject x) => ((Object)x).name == "charcoal_kiln"); Smelter component = val.GetComponent<Smelter>(); component.m_maxOre = 50; component.m_secPerProduct = 10f; } private void editBeehive() { GameObject val = buildPieces.Find((GameObject x) => ((Object)x).name == "piece_beehive"); Beehive component = val.GetComponent<Beehive>(); component.m_maxHoney = 40; } } public class BuildPieceTargeting { private static string[] names = new string[0]; public void changePieceTargeting(List<GameObject> gameObjects) { List<GameObject> list = gameObjects.FindAll((GameObject x) => (Object)(object)x.GetComponent<WearNTear>() != (Object)null); foreach (GameObject item in list) { Piece component = item.GetComponent<Piece>(); if ((Object)(object)component != (Object)null && names.Contains(((Object)item).name)) { ((StaticTarget)component).m_primaryTarget = true; } if ((Object)(object)component != (Object)null && shouldBePrimaryTarget(item)) { ((StaticTarget)component).m_primaryTarget = true; } setResistances(item); } } private bool shouldBePrimaryTarget(GameObject gameObject) { if ((Object)(object)gameObject.GetComponent<Door>() != (Object)null) { return true; } if ((Object)(object)gameObject.GetComponent<CraftingStation>() != (Object)null) { return true; } if ((Object)(object)gameObject.GetComponent<StationExtension>() != (Object)null) { return true; } if ((Object)(object)gameObject.GetComponent<Container>() != (Object)null) { return false; } return false; } private void setResistances(GameObject gameObject) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002e: 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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) WearNTear component = gameObject.GetComponent<WearNTear>(); if ((Object)(object)component != (Object)null) { component.m_damages.m_chop = setChopDamageResistance(component); component.m_damages.m_pickaxe = setPickaxeDamageResistance(component); component.m_damages.m_fire = setFireDamageResistance(component); } } private DamageModifier setChopDamageResistance(WearNTear wearNTear) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: 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_0020: Expected I4, but got Unknown //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0036: 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) MaterialType materialType = wearNTear.m_materialType; MaterialType val = materialType; return (DamageModifier)((int)val switch { 0 => 6, 3 => 2, 2 => 5, 1 => 1, _ => 0, }); } private DamageModifier setPickaxeDamageResistance(WearNTear wearNTear) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: 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_0020: Expected I4, but got Unknown //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0036: 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) MaterialType materialType = wearNTear.m_materialType; MaterialType val = materialType; return (DamageModifier)((int)val switch { 0 => 0, 3 => 1, 2 => 2, 1 => 6, _ => 0, }); } private DamageModifier setFireDamageResistance(WearNTear wearNTear) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: 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_0020: Expected I4, but got Unknown //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0036: 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) MaterialType materialType = wearNTear.m_materialType; MaterialType val = materialType; return (DamageModifier)((int)val switch { 0 => 6, 3 => 2, 2 => 0, 1 => 5, _ => 0, }); } } public class CollisionDisabler : MonoBehaviour { public static string[] ignoredList = new string[1] { "" }; public static bool IsIgnored(Collider collider) { return ignoredList.Contains(Utils.GetPrefabName(((Component)((Component)collider).transform).gameObject).ToLower()); } private void OnCollisionEnter(Collision collision) { if (IsIgnored(collision.collider)) { Physics.IgnoreCollision(((Component)this).GetComponent<Collider>(), collision.collider, true); } } } internal class DestroyLeftover : MonoBehaviour { public float m_timeout = 1200f; public float m_currentTime = 0f; public bool m_triggerOnAwake = true; public bool m_destroyMe = false; private ZNetView m_nview; private void Awake() { m_nview = ((Component)this).GetComponent<ZNetView>(); if (m_triggerOnAwake) { ((MonoBehaviour)this).InvokeRepeating("CheckShouldDestroy", 1f, 1f); } } private void CheckShouldDestroy() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)EffectArea.IsPointInsideArea(((Component)this).transform.position, (Type)4, 0f))) { m_currentTime += 1f; } else { m_currentTime = 0f; } if (m_currentTime >= m_timeout) { m_destroyMe = true; DestroyNow(); } } private void DestroyNow() { if (Object.op_Implicit((Object)(object)m_nview)) { if (m_nview.IsValid() && m_nview.IsOwner()) { ZNetScene.instance.Destroy(((Component)this).gameObject); } } else { Object.Destroy((Object)(object)((Component)this).gameObject); } } } public class ItemChange { private string[] itemNames = new string[47] { "Wood", "FineWood", "YggdrasilWood", "Stone", "BlackMarble", "RoundLog", "Resin", "Ooze", "Guck", "Tar", "Tin", "TinOre", "Copper", "CopperOre", "CopperScrap", "IronScrap", "BronzeScrap", "Bronze", "BlackMetalScrap", "Iron", "Silver", "BlackMetal", "Coal", "DragonEgg", "IronOre", "BoltBlackmetal", "BoltBone", "BoltCarapace", "BoltIron", "LinenThread", "Coins", "Sap", "LeatherScraps", "ChickenEgg", "BlackMetalOre", "Club", "CrossbowArbalest", "Battleaxe", "BattleaxeCrystal", "SledgeStagbreaker", "SledgeIron", "SledgeDemolisher", "Feathers", "BoneFragments", "LinenThread", "SurtlingCore", "Hammer" }; public void editItems(List<GameObject> items) { string[] array = itemNames; foreach (string name in array) { GameObject val = items.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { changeItem(val); } } List<GameObject> list = items.FindAll((GameObject x) => ((Object)x).name.Contains("Arrow")); foreach (GameObject item in list) { editStackAndWeight(item, 0.1f, 999); } List<GameObject> list2 = items.FindAll((GameObject x) => ((Object)x).name.Contains("Trophy")); foreach (GameObject item2 in list2) { editStackAndWeight(item2, -1f, 50); } List<GameObject> list3 = items.FindAll((GameObject x) => statment(x)); foreach (GameObject item3 in list3) { changeItem(item3); } } private bool statment(GameObject item) { return ((Object)item).name.Contains("Sword") || ((Object)item).name.Contains("Mace") || ((Object)item).name.Contains("Armor") || ((Object)item).name.Contains("Bow") || ((Object)item).name.Contains("Knife") || ((Object)item).name.Contains("Armor") || ((Object)item).name.Contains("Helmet") || ((Object)item).name.Contains("Axe") || ((Object)item).name.Contains("Spear") || ((Object)item).name.Contains("Atgeir") || ((Object)item).name.Contains("Nails") || ((Object)item).name.Contains("Shield") || ((Object)item).name.Contains("Meat"); } private void changeItem(GameObject item) { switch (((Object)item).name) { case "SwordBronze": editQualityValues(item, 0.1f, 4, 1f, -0.02f); break; case "SwordIron": editQualityValues(item, 0.1f, 4, 1f, -0.02f); break; case "SwordSilver": editQualityValues(item, 0.1f, 4, 1f, -0.02f); break; case "SwordBlackmetal": editQualityValues(item, 0.1f, 4, 1f, -0.02f); break; case "SwordMistwalker": editQualityValues(item, 0.1f, 4, 1f, -0.02f); break; case "Club": editQualityValues(item, 0.1f, 4, 1.5f, -0.02f); break; case "MaceBronze": case "MaceIron": editQualityValues(item, 0.15f, 4, 2f, -0.03f); break; case "MaceSilver": editQualityValues(item, 0.15f, 4, 3f, -0.03f); break; case "MaceNeedle": editQualityValues(item, 0.15f, 4, 3f, -0.03f); break; case "AxeStone": case "AxeFlint": editQualityValues(item, 0.05f, 4, 1f, -0.01f); break; case "AxeBronze": case "AxeIron": editQualityValues(item, 0.1f, 4, 1.5f, -0.02f); break; case "AxeSilver": editQualityValues(item, 0.1f, 4, 3f, -0.02f); break; case "AxeBlackmetal": editQualityValues(item, 0.15f, 4, 2f, -0.02f); break; case "AxeJotunBane": editQualityValues(item, 0.15f, 4, 2f, -0.03f); break; case "SpearFlint": editQualityValues(item, 0.05f, 4, 1f, -0.01f); break; case "SpearBronze": editQualityValues(item, 0.1f, 4, 1.5f, -0.02f); break; case "SpearElderbark": editQualityValues(item, 0.1f, 4, 1.5f, -0.02f); break; case "SpearWolfFang": editQualityValues(item, 0.1f, 4, 1.5f, -0.02f); break; case "SpearChitin": editQualityValues(item, 0.1f, 4, 2f, -0.02f); break; case "SpearCarapace": editQualityValues(item, 0.1f, 4, 2f, -0.03f); break; case "AtgeirBronze": editQualityValues(item, 0.1f, 4, 2.5f, -0.03f); break; case "AtgeirIron": editQualityValues(item, 0.1f, 4, 2.5f, -0.03f); break; case "AtgeirBlackmetal": editQualityValues(item, 0.1f, 4, 3f, -0.04f); break; case "AtgeirHimminAfl": editQualityValues(item, 0.1f, 4, 3f, -0.04f); break; case "KnifeFlint": editQualityValues(item, 0.05f, 4, 0.5f, -0.01f); break; case "KnifeCopper": editQualityValues(item, 0.05f, 4, 0.5f, -0.01f); break; case "KnifeChitin": editQualityValues(item, 0.05f, 4, 0.5f, -0.01f); break; case "KnifeButcher": editQualityValues(item, 0.05f, 4, 0.5f, -0.01f); break; case "KnifeSilver": editQualityValues(item, 0.1f, 4, 0.5f, -0.01f); break; case "KnifeBlackMetal": editQualityValues(item, 0.1f, 4, 0.5f, -0.01f); break; case "KnifeSkollAndHati": editQualityValues(item, 0.2f, 4, 1f, -0.01f); break; case "Bow": editQualityValues(item, 0.05f, 4, 1f, -0.01f); break; case "BowFineWood": editQualityValues(item, 0.05f, 4, 1.5f, -0.01f); break; case "BowHuntsman": editQualityValues(item, 0.05f, 4, 1.5f, -0.01f); break; case "BowDraugrFang": editQualityValues(item, 0.1f, 4, 2f, -0.02f); break; case "BowSpineSnap": editQualityValues(item, 0.1f, 4, 2f, -0.02f); break; case "CrossbowArbalest": editQualityValues(item, 0.1f, 4, 2f, -0.03f); break; case "ShieldWood": editQualityValues(item, 0.1f, 4, 4f, -0.02f, 0.5f); editDefense(item, 5f, 5f, 20f, 5f, 1.4f); editArmor(item, 100f, 10f); break; case "ShieldWoodTower": editQualityValues(item, 0.15f, 4, 6f, -0.03f, 0.5f); editDefense(item, 10f, 10f, 100f, 10f, 0f); editArmor(item, 140f, 20f); editDurability(item, 300f, 50f); break; case "ShieldBronzeBuckler": editQualityValues(item, 0.15f, 4, 4f, -0.03f, 0.5f); editDefense(item, 20f, 5f, 30f, 0f, 2.5f); editArmor(item, 120f, 10f); editDurability(item, 250f, 50f, 2f); break; case "ShieldBoneTower": editQualityValues(item, 0.15f, 4, 4f, -0.05f, 0.5f); editDefense(item, 40f, 10f, 100f, 10f, 0f); editArmor(item, 160f, 20f); editDurability(item, 350f, 50f); break; case "ShieldIronBuckler": editQualityValues(item, 0.15f, 4, 5f, -0.04f, 0.5f); editDefense(item, 30f, 5f, 30f, 0f, 2.5f); editArmor(item, 140f, 10f); editDurability(item, 250f, 50f, 2f); break; case "ShieldBanded": editQualityValues(item, 0.15f, 4, 4f, -0.03f, 0.5f); editDefense(item, 50f, 5f, 40f, 10f, 1.6f); editArmor(item, 140f, 10f); editDurability(item, 300f, 50f, 1f); break; case "ShieldIronSquare": editQualityValues(item, 0.15f, 4, 6f, -0.04f, 0.5f); editDefense(item, 50f, 5f, 100f, 0f, 1.1f); editArmor(item, 180f, 10f); editDurability(item, 350f, 50f, 1f); break; case "ShieldIronTower": editQualityValues(item, 0.2f, 4, 6f, -0.05f, 0.5f); editDefense(item, 50f, 10f, 120f, 5f); editArmor(item, 200f, 20f); editDurability(item, 400f, 50f, 1f); break; case "ShieldSerpentscale": editQualityValues(item, 0.2f, 4, 6f, -0.06f, 0.5f); editDefense(item, 60f, 10f, 120f, 0f, 1.1f); editArmor(item, 250f, 20f); editDurability(item, 400f, 50f, 1f); break; case "ShieldSilver": editQualityValues(item, 0.15f, 4, 5f, -0.04f, 0.5f); editDefense(item, 60f, 5f, 60f, 10f, 1.7f); editArmor(item, 200f, 10f); editDurability(item, 350f, 50f, 1f); break; case "ShieldBlackmetal": editQualityValues(item, 0.15f, 4, 6f, -0.05f, 0.5f); editDefense(item, 80f, 5f, 60f, 5f, 1.7f); editArmor(item, 250f, 20f); editDurability(item, 400f, 50f, 1f); break; case "ShieldBlackmetalTower": editQualityValues(item, 0.2f, 4, 8f, -0.06f, 0.5f); editDefense(item, 120f, 10f, 160f, 0f, 1.1f); editArmor(item, 300f, 20f); editDurability(item, 450f, 50f, 1f); break; case "ShieldCarapaceBuckler": editQualityValues(item, 0.2f, 4, 6f, -0.05f, 0.5f); editDefense(item, 80f, 5f, 40f, 0f, 2.6f); editArmor(item, 200f, 10f); editDurability(item, 300f, 50f, 2f); break; case "ShieldCarapace": editQualityValues(item, 0.2f, 4, 8f, -0.06f, 0.5f); editDefense(item, 150f, 10f, 180f, 0f, 1.1f); editArmor(item, 350f, 20f); editDurability(item, 500f, 50f, 1f); break; case "Battleaxe": editQualityValues(item, 0.2f, 4, 5f, -0.1f, 0.5f); editDefense(item, 50f, 10f, 50f, 10f, 2f); editArmor(item, 40f, 20f); editDurability(item, 200f, 50f, 1f); break; case "BattleaxeCrystal": editQualityValues(item, 0.2f, 4, 5f, -0.1f, 0.5f); editDefense(item, 60f, 10f, 50f, 10f, 2f); editArmor(item, 50f, 20f); editDurability(item, 300f, 50f, 1f); break; case "SledgeStagbreaker": editQualityValues(item, 0.2f, 4, 5f, -0.1f, 0.5f); editDefense(item, 30f, 10f, 50f, 10f, 2f); editArmor(item, 20f, 20f); editDurability(item, 150f, 50f, 1f); break; case "SledgeIron": editQualityValues(item, 0.2f, 4, 5f, -0.1f, 0.5f); editDefense(item, 50f, 10f, 50f, 10f, 2f); editArmor(item, 40f, 20f); editDurability(item, 200f, 50f, 1f); break; case "SledgeDemolisher": editQualityValues(item, 0.2f, 4, 5f, -0.1f, 0.5f); editDefense(item, 70f, 10f, 50f, 10f, 2f); editArmor(item, 60f, 20f); editDurability(item, 300f, 50f, 1f); break; case "THSwordKrom": editQualityValues(item, 0.2f, 4, 5f, -0.1f, 0.5f); editDefense(item, 70f, 10f, 50f, 10f, 2f); editArmor(item, 50f, 20f); editDurability(item, 250f, 50f, 1f); break; case "ArmorRagsChest": case "ArmorRagsLegs": editQualityValues(item, 0.1f, 4, 2f); break; case "ArmorLeatherLegs": case "ArmorLeatherChest": editQualityValues(item, 0.1f, 4, 4f, -0.01f); break; case "ArmorTrollLeatherLegs": case "ArmorTrollLeatherChest": editQualityValues(item, 0.1f, 4, 4f, -0.01f); break; case "ArmorBronzeLegs": case "ArmorBronzeChest": editQualityValues(item, 0.15f, 4, 6f, -0.02f); break; case "ArmorRootLegs": case "ArmorRootChest": editQualityValues(item, 0.1f, 4, 6f, -0.02f); break; case "ArmorIronLegs": case "ArmorIronChest": editQualityValues(item, 0.15f, 4, 8f, -0.03f); break; case "ArmorWolfLegs": case "ArmorWolfChest": editQualityValues(item, 0.15f, 4, 8f, -0.03f); break; case "ArmorFenringChest": case "ArmorFenringLegs": editQualityValues(item, 0.1f, 4, 6f, -0.03f); break; case "ArmorPaddedGreaves": case "ArmorPaddedCuirass": editQualityValues(item, 0.15f, 4, 8f, -0.02f); break; case "ArmorMageLegs": case "ArmorMageChest": editQualityValues(item, 0.1f, 4, 8f, -0.01f); break; case "ArmorCarapaceChest": case "ArmorCarapaceLegs": editQualityValues(item, 0.15f, 4, 8f, -0.03f); break; case "HelmetRags": editQualityValues(item, 0.1f, 4, 1f); break; case "HelmetLeather": editQualityValues(item, 0.1f, 4, 1f); break; case "HelmetTrollLeather": editQualityValues(item, 0.1f, 4, 0.5f); break; case "HelmetBronze": editQualityValues(item, 0.1f, 4, 2f, -0.01f); break; case "HelmetRoot": editQualityValues(item, 0.1f, 4, 2f, -0.01f); break; case "HelmetIron": editQualityValues(item, 0.1f, 4, 3f, -0.01f); break; case "HelmetDrake": editQualityValues(item, 0.1f, 4, 3f, -0.01f); break; case "HelmetPadded": editQualityValues(item, 0.1f, 4, 2f); break; case "HelmetMage": editQualityValues(item, 0.1f, 4, 2f); break; case "HelmetCarapace": editQualityValues(item, 0.1f, 4, 3f, -0.01f); break; case "Hammer": editQualityValues(item, 0f, 5, 1f, 0.03f); editDurability(item, 300f, 150f, 1f); break; case "Coins": editStackAndWeight(item, 0.02f, 999); break; case "BoltBlackmetal": case "BoltBone": case "BoltCarapace": case "BoltIron": editStackAndWeight(item, 0.1f, 999); break; case "Feathers": editStackAndWeight(item, 0.05f, 400); break; case "LeatherScraps": case "ChickenEgg": case "LinenThread": case "BoneFragments": editStackAndWeight(item, 0.2f, 200); break; case "Sap": editStackAndWeight(item, 0.1f, 100); break; case "SurtlingCore": editStackAndWeight(item, 3f, 50); break; case "Wood": editStackAndWeight(item, 1f, 200); break; case "RoundLog": case "FineWood": editStackAndWeight(item, 1.25f, 200); break; case "YggdrasilWood": case "Stone": case "BlackMarble": editStackAndWeight(item, 1.5f, 200); break; case "Resin": editStackAndWeight(item, 0.2f, 200); break; case "Ooze": case "Guck": editStackAndWeight(item, 0.25f, 100); break; case "Tar": editStackAndWeight(item, 1f, 100); break; case "Tin": editStackAndWeight(item, 3f, 100); break; case "TinOre": editStackAndWeight(item, 4f, 100); break; case "Copper": editStackAndWeight(item, 4f, 100); break; case "CopperOre": editStackAndWeight(item, 5f, 100); break; case "CopperScrap": editStackAndWeight(item, 3f, 100); break; case "Bronze": editStackAndWeight(item, 4f, 100); break; case "BronzeScrap": editStackAndWeight(item, 3f, 100); break; case "Iron": editStackAndWeight(item, 5f, 100); break; case "IronScrap": editStackAndWeight(item, 4f, 100); break; case "IronOre": editStackAndWeight(item, 6f, 100); break; case "SilverOre": editStackAndWeight(item, 6f, 100); break; case "Silver": editStackAndWeight(item, 5f, 100); break; case "BlackMetal": editStackAndWeight(item, 5f, 100); break; case "BlackMetalOre": editStackAndWeight(item, 6f, 100); break; case "BlackMetalScrap": editStackAndWeight(item, 4f, 100); break; case "Coal": editStackAndWeight(item, 1f, 200); break; case "DragonEgg": editStackAndWeight(item, 100f, 10); break; case "TinNails": case "CopperNails": case "IronNails": case "BronzeNails": case "SilverNails": case "GoldNails": case "FlametalNails": case "BlackMetalNails": editStackAndWeight(item, 0.2f, 500); break; case "BearMeat": case "BugMeat": case "HareMeat": case "WolfMeat": case "DeerMeat": case "RawMeat": case "ChickenMeat": editStackAndWeight(item, 1.25f, 50); break; case "CookedBearMeat": case "CookedBugMeat": case "CookedHareMeat": case "CookedWolfMeat": case "CookedDeerMeat": case "CookedRawMeat": case "CookedChickenMeat": editStackAndWeight(item, 1f, 50); break; } } private void editStackAndWeight(GameObject gameObject, float weight = -1f, int stack = 1) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_weight = ((weight == -1f) ? component.m_itemData.m_shared.m_weight : weight); component.m_itemData.m_shared.m_autoStack = true; component.m_itemData.m_shared.m_maxStackSize = stack; } private void editQualityValues(GameObject gameObject, float weightRatio = 0f, int quality = 4, float weight = -1f, float sppedDebuff = 0f, float equipeSpeed = -1f) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_weight = ((weight == -1f) ? ((float)component.m_itemData.m_shared.m_maxQuality) : weight); component.m_itemData.m_shared.m_scaleWeightByQuality = ((weightRatio == 0f) ? component.m_itemData.m_shared.m_scaleWeightByQuality : weightRatio); component.m_itemData.m_shared.m_equipDuration = ((equipeSpeed == -1f) ? component.m_itemData.m_shared.m_equipDuration : equipeSpeed); component.m_itemData.m_shared.m_movementModifier = sppedDebuff; component.m_itemData.m_shared.m_maxQuality = quality; } private void editDefense(GameObject gameObject, float blockPower = -1f, float blockPowerPerLevel = -1f, float deflectionForce = -1f, float deflectionForcePerLevel = 0f, float blockBonus = -1f) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_blockPower = ((blockPower == -1f) ? component.m_itemData.m_shared.m_blockPower : blockPower); component.m_itemData.m_shared.m_blockPowerPerLevel = ((blockPowerPerLevel == -1f) ? component.m_itemData.m_shared.m_blockPowerPerLevel : blockPowerPerLevel); component.m_itemData.m_shared.m_deflectionForce = ((deflectionForce == -1f) ? component.m_itemData.m_shared.m_deflectionForce : deflectionForce); component.m_itemData.m_shared.m_deflectionForcePerLevel = ((deflectionForcePerLevel == -1f) ? component.m_itemData.m_shared.m_deflectionForcePerLevel : deflectionForcePerLevel); component.m_itemData.m_shared.m_timedBlockBonus = ((blockBonus == -1f) ? component.m_itemData.m_shared.m_timedBlockBonus : blockBonus); } private void editArmor(GameObject gameObject, float armor = -1f, float armorPerLevel = -1f) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_armor = ((armor == -1f) ? component.m_itemData.m_shared.m_armor : armor); component.m_itemData.m_shared.m_armorPerLevel = ((armorPerLevel == -1f) ? component.m_itemData.m_shared.m_armorPerLevel : armorPerLevel); } private void editDurability(GameObject gameObject, float durability = -1f, float durabilityPerLevel = -1f, float useDrain = -1f) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_durability = ((durability == -1f) ? component.m_itemData.m_durability : durability); component.m_itemData.m_shared.m_durabilityPerLevel = ((durabilityPerLevel == -1f) ? component.m_itemData.m_shared.m_durabilityPerLevel : durabilityPerLevel); component.m_itemData.m_shared.m_useDurabilityDrain = ((useDrain == -1f) ? component.m_itemData.m_shared.m_useDurabilityDrain : useDrain); } private void editFoodStat(GameObject gameObject, int hp = -99, int stam = -99, int eitr = -99, int time = -99, int regen = -99) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_food = ((hp == -99) ? component.m_itemData.m_shared.m_food : ((float)hp)); component.m_itemData.m_shared.m_foodStamina = ((stam == -99) ? component.m_itemData.m_shared.m_foodStamina : ((float)stam)); component.m_itemData.m_shared.m_foodEitr = ((eitr == -99) ? component.m_itemData.m_shared.m_foodEitr : ((float)eitr)); component.m_itemData.m_shared.m_foodRegen = ((regen == -99) ? component.m_itemData.m_shared.m_foodRegen : ((float)regen)); component.m_itemData.m_shared.m_foodBurnTime = ((time == -99) ? component.m_itemData.m_shared.m_foodBurnTime : ((float)time)); } private void editValueAndTeleport(GameObject gameObject, int newValue = -1, bool teleportable = true) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); int value = component.m_itemData.m_shared.m_value; component.m_itemData.m_shared.m_value = ((newValue != -1) ? newValue : value); component.m_itemData.m_shared.m_teleportable = teleportable; } } [BepInPlugin("balrond.astafaraios.BalrondServerCore", "BalrondServerCore", "1.0.4")] public class Launch : BaseUnityPlugin { [HarmonyPatch(typeof(Player), "SetControls")] private static class SetControls { private static void Prefix(Player __instance, ref bool jump) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown if (((Character)__instance).IsRiding() & jump) { Sadle val = (Sadle)__instance.m_doodadController; if ((Object)(object)val != (Object)null) { ((BaseAI)val.m_monsterAI).m_character.Jump(false); jump = false; } } else if (((Character)__instance).IsRiding()) { jump = false; } } } [HarmonyPatch(typeof(SE_Demister), "Setup")] internal static class SeDemisterPatch { private static void Postfix(SE_Demister __instance) { ParticleSystemForceField component = ((Component)Utils.FindChild(__instance.m_ballInstance.transform, "Particle System Force Field", (IterativeSearchType)0)).GetComponent<ParticleSystemForceField>(); component.endRange *= 5f; } } [HarmonyPatch(typeof(ObjectDB), "Awake")] public static class ObjectDB_Awake_Path { public static void Prefix(ObjectDB __instance) { List<GameObject> items = __instance.m_items; change.editItems(items); } } [HarmonyPatch(typeof(InventoryGui), "Awake")] public static class RepairAllItems { private static void Postfix(ref InventoryGui __instance) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown ((UnityEvent)__instance.m_repairButton.onClick).AddListener(new UnityAction(RepairAll)); } private static bool canRepair(ItemData item) { Recipe recipe = ObjectDB.instance.GetRecipe(item); CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation(); bool result = true; if ((Object)(object)recipe == (Object)null || (Object)(object)currentCraftingStation == (Object)null || ((Object)(object)recipe.m_craftingStation == (Object)null && (Object)(object)recipe.m_repairStation == (Object)null)) { return false; } return result; } private static void RepairAll() { //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) int num = 0; CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation(); foreach (ItemData allItem in ((Humanoid)Player.m_localPlayer).GetInventory().GetAllItems()) { if (canRepair(allItem) && (double)allItem.m_durability < (double)allItem.GetMaxDurability()) { num++; allItem.m_durability = allItem.GetMaxDurability(); } } if (Object.op_Implicit((Object)(object)currentCraftingStation)) { currentCraftingStation.m_repairItemDoneEffects.Create(((Component)currentCraftingStation).transform.position, Quaternion.identity, (Transform)null, 1f, -1); } ((Character)Player.m_localPlayer).Message((MessageType)2, num + 1 + " item" + ((num + 1 > 1) ? "s" : "") + " repaired!", 0, (Sprite)null); } } [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class ZNetScene_Awake_Path { public static bool done; public static void Prefix(ZNetScene __instance) { if (done) { return; } List<GameObject> list = __instance.m_prefabs.FindAll((GameObject x) => (Object)(object)x.GetComponent<Piece>() != (Object)null); List<GameObject> list2 = __instance.m_prefabs.FindAll((GameObject x) => (Object)(object)x.GetComponent<ItemDrop>() != (Object)null); List<GameObject> list3 = __instance.m_prefabs.FindAll((GameObject x) => (Object)(object)x.GetComponent<MonsterAI>() != (Object)null); List<GameObject> list4 = __instance.m_prefabs.FindAll((GameObject x) => (Object)(object)x.GetComponent<AnimalAI>() != (Object)null); buildPieceTargeting.changePieceTargeting(list); foreach (GameObject item in list2) { ItemDrop component = item.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_teleportable = true; DestroyLeftover destroyLeftover = item.GetComponent<DestroyLeftover>(); if ((Object)(object)destroyLeftover == (Object)null) { destroyLeftover = item.AddComponent<DestroyLeftover>(); } destroyLeftover.m_timeout = destructionTime; destroyLeftover.m_triggerOnAwake = true; } GameObject player = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "Player"); changePlayer(player); buildChanges.editBuidlPieces(list, list2); List<GameObject> list5 = __instance.m_prefabs.FindAll((GameObject x) => (Object)(object)x.GetComponent<DungeonGenerator>() != (Object)null); foreach (GameObject item2 in list5) { DungeonGenerator component2 = item2.GetComponent<DungeonGenerator>(); component2.m_minRooms *= 2; component2.m_maxRooms *= 2; } monsterEdit.editMonsters(__instance.m_prefabs); done = true; } } private static class ApplyArmorDamageMods_Patch { private static void Postfix(Player __instance, ref DamageModifiers mods, ItemData ___m_utilityItem) { try { foreach (ItemData item in ((Humanoid)__instance).GetInventory().GetAllItems().FindAll((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18 && i != ___m_utilityItem)) { ((DamageModifiers)(ref mods)).Apply(item.m_shared.m_damageModifiers); } } catch { } } } private static class GetBodyArmor_Patch { private static void Postfix(Player __instance, ref float __result) { try { foreach (ItemData item in ((Humanoid)__instance).GetInventory().GetAllItems().FindAll((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18)) { __result += item.GetArmor(); } } catch { } } } [HarmonyPatch(typeof(Humanoid), "IsItemEquiped")] private static class Humanoid_IsItemEquiped_Patch { private static void Postfix(Humanoid __instance, ItemData item, ItemData ___m_utilityItem, ref bool __result) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Invalid comparison between Unknown and I4 if (__result) { return; } try { __result = item.m_equipped && (int)item.m_shared.m_itemType == 18 && item != ___m_utilityItem; } catch { } } } [HarmonyPatch(typeof(Player), "GetEquipmentEitrRegenModifier")] private static class GetEquipmentEitrRegenModifier_Patch { private static void Postfix(Player __instance, ItemData ___m_utilityItem, ref float __result) { try { foreach (ItemData item in ((Humanoid)__instance).GetInventory().GetAllItems().FindAll((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18 && i != ___m_utilityItem)) { __result += item.m_shared.m_eitrRegenModifier; } } catch { } } } [HarmonyPatch(typeof(Player), "QueueEquipAction")] private static class QueueEquipItem_Patch { private static bool Prefix(Player __instance, ItemData item) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Invalid comparison between Unknown and I4 if (item == null || __instance.IsEquipActionQueued(item) || (int)item.m_shared.m_itemType != 18) { return true; } try { List<ItemData> list = ((Humanoid)__instance).GetInventory().GetAllItems().FindAll((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18); if (list.Exists((ItemData i) => i.m_shared.m_name == item.m_shared.m_name)) { return false; } if (list.Count >= maxUtility) { return false; } } catch { Debug.LogError((object)("Error: " + Environment.StackTrace)); } return true; } } [HarmonyPatch(typeof(Humanoid), "EquipItem")] private static class EquipItem_Patch { private static bool Prefix(Humanoid __instance, ItemData item, bool triggerEquipEffects, Inventory ___m_inventory, ref bool __result, ref ItemData ___m_utilityItem) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 try { if (item == null || (int)item.m_shared.m_itemType != 18 || !((Character)__instance).IsPlayer() || !___m_inventory.ContainsItem(item) || ((Character)__instance).InAttack() || ((Character)__instance).InDodge() || (((Character)__instance).IsPlayer() && !((Character)__instance).IsDead() && ((Character)__instance).IsSwimming() && !((Character)__instance).IsOnGround()) || (item.m_shared.m_useDurability && (double)item.m_durability <= 0.0) || (item.m_shared.m_dlc.Length > 0 && !DLCMan.instance.IsDLCInstalled(item.m_shared.m_dlc))) { return true; } if (__instance.GetInventory().GetAllItems().FindAll((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18) .Count >= maxUtility) { __result = false; return false; } if (___m_utilityItem == null) { ___m_utilityItem = item; } item.m_equipped = true; typeof(Humanoid).GetMethod("SetupEquipment", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(__instance, new object[0]); if (triggerEquipEffects) { typeof(Humanoid).GetMethod("TriggerEquipEffect", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(__instance, new object[1] { item }); } __result = true; return false; } catch { Debug.LogError((object)("Error: " + Environment.StackTrace)); } return true; } } [HarmonyPatch(typeof(Humanoid), "UpdateEquipmentStatusEffects")] private static class UpdateEquipmentStatusEffects_Patch { private static void Prefix(Humanoid __instance, ItemData ___m_utilityItem, SEMan ___m_seman) { try { if (!((Character)__instance).IsPlayer()) { return; } List<ItemData> list = __instance.GetInventory().GetAllItems().FindAll((ItemData i) => !i.m_equipped && (int)i.m_shared.m_itemType == 18 && i != ___m_utilityItem && Object.op_Implicit((Object)(object)i.m_shared.m_equipStatusEffect)); List<ItemData> list2 = __instance.GetInventory().GetAllItems().FindAll((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18 && i != ___m_utilityItem && Object.op_Implicit((Object)(object)i.m_shared.m_equipStatusEffect)); foreach (ItemData item in list) { foreach (StatusEffect item2 in AccessTools.FieldRefAccess<SEMan, List<StatusEffect>>(___m_seman, "m_statusEffects")) { StatusEffect statusEffect = item2; if (((Object)statusEffect).name == ((Object)item.m_shared.m_equipStatusEffect).name && (___m_utilityItem == null || ((Object)___m_utilityItem.m_shared.m_equipStatusEffect).name != ((Object)statusEffect).name) && !list2.Exists((ItemData i) => ((Object)i.m_shared.m_equipStatusEffect).name == ((Object)statusEffect).name)) { ___m_seman.RemoveStatusEffect(statusEffect, false); } } } } catch { } } private static void Postfix(Humanoid __instance, ItemData ___m_utilityItem, SEMan ___m_seman) { try { if (!((Character)__instance).IsPlayer()) { return; } foreach (ItemData item in __instance.GetInventory().GetAllItems().FindAll((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18 && i != ___m_utilityItem && Object.op_Implicit((Object)(object)i.m_shared.m_equipStatusEffect))) { ___m_seman.AddStatusEffect(item.m_shared.m_equipStatusEffect, false, 0, 0f); } } catch { } } } [HarmonyPatch(typeof(Humanoid), "UnequipAllItems")] private static class UnequipAllItems_Patch { private static void Postfix(Humanoid __instance, ItemData ___m_utilityItem) { try { if (!((Character)__instance).IsPlayer()) { return; } foreach (ItemData item in __instance.GetInventory().GetAllItems().FindAll((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18 && i != ___m_utilityItem)) { __instance.UnequipItem(item, false); } } catch { Debug.LogError((object)("Error: " + Environment.StackTrace)); } } } [HarmonyPatch(typeof(Player), "UnequipDeathDropItems")] private static class UnequipDeathDropItems_PatchUnequipItem { private static void Postfix(Player __instance, ItemData ___m_utilityItem) { try { if (!((Character)__instance).IsPlayer()) { return; } foreach (ItemData item in ((Humanoid)__instance).GetInventory().GetAllItems().FindAll((ItemData i) => i.m_equipped && (int)i.m_shared.m_itemType == 18 && i != ___m_utilityItem)) { ((Humanoid)__instance).UnequipItem(item, false); } } catch { Debug.LogError((object)("Error: " + Environment.StackTrace)); } } } private readonly Harmony harmony = new Harmony("balrond.astafaraios.BalrondServerCore"); public const string PluginGUID = "balrond.astafaraios.BalrondServerCore"; public const string PluginName = "BalrondServerCore"; public const string PluginVersion = "1.0.4"; public static BuildChanges buildChanges = new BuildChanges(); public static ItemChange change = new ItemChange(); public static BuildPieceTargeting buildPieceTargeting = new BuildPieceTargeting(); public static MonsterEdit monsterEdit = new MonsterEdit(); public static int maxUtility = 5; private static GameObject LogoObject; private Sprite newLogo; private GameObject gui; public static float destructionTime = 1200f; private void Awake() { AssetBundle assetBundleFromResources = GetAssetBundleFromResources("madness"); newLogo = assetBundleFromResources.LoadAsset<Sprite>("Assets/Custom/Madness/AshlandsLogo.png"); harmony.PatchAll(); } private void OnDestroy() { harmony.UnpatchSelf(); } 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 LateUpdate() { } private void changeLogo() { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.Find("/GuiRoot/GUI/StartGui/Menu/Logo/Mist"); GameObject val2 = GameObject.Find("/GuiRoot/GUI/StartGui/Menu/Logo/Mist (1)"); GameObject val3 = GameObject.Find("/GuiRoot/GUI/StartGui/Menu/Logo/Mist (2)"); GameObject val4 = GameObject.Find("/GuiRoot/GUI/StartGui/Menu/Logo/Mist (3)"); Color val5 = default(Color); ((Color)(ref val5))..ctor(58f / 85f, 3f / 85f, 46f / 51f, 0.4745f); Color val6 = default(Color); ((Color)(ref val6))..ctor(0.6509804f, 0.02745098f, 0.20392157f, 0.4745f); LogoObject.GetComponent<Image>().sprite = newLogo; ((Graphic)val.GetComponent<Image>()).material.SetColor("_Color", val5); ((Graphic)val2.GetComponent<Image>()).material.SetColor("_Color", val6); ((Graphic)val3.GetComponent<Image>()).material.SetColor("_Color", val6); ((Graphic)val4.GetComponent<Image>()).material.SetColor("_Color", val5); } public static void changePlayer(GameObject player) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) Humanoid component = player.GetComponent<Humanoid>(); ((Character)component).m_damageModifiers.m_spirit = (DamageModifier)0; Player component2 = player.GetComponent<Player>(); component2.m_maxCarryWeight = 350f; component2.m_encumberedStaminaDrain = 3f; } } public class MonsterEdit { private List<GameObject> items = new List<GameObject>(); private string[] monsterNames = new string[6] { "Skeleton", "Skeleton_Poison", "Skeleton_NoArcher", "Draugr", "Draugr_Ranged", "Draugr_Elite" }; public void editMonsters(List<GameObject> gameObjects) { items = gameObjects; string[] array = monsterNames; foreach (string name in array) { GameObject val = gameObjects.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { editMonster(val); } } } private void editMonster(GameObject gameObject) { switch (((Object)gameObject).name) { case "Skeleton": AddLoot(gameObject, "CopperScrap", 1, 1, 0.1f); AddLoot(gameObject, "BronzeScrap", 1, 1, 0.05f); break; case "Skeleton_NoArcher": AddLoot(gameObject, "CopperScrap", 1, 1, 0.1f); AddLoot(gameObject, "BronzeScrap", 1, 1, 0.05f); break; case "Skeleton_Poison": AddLoot(gameObject, "CopperScrap", 1, 1, 0.15f); AddLoot(gameObject, "BronzeScrap", 1, 1, 0.1f); break; case "Draugr": AddLoot(gameObject, "CopperScrap", 1, 1, 0.2f); AddLoot(gameObject, "BronzeScrap", 1, 1, 0.1f); AddLoot(gameObject, "IronScrap", 1, 1, 0.05f); break; case "Draugr_Ranged": AddLoot(gameObject, "CopperScrap", 1, 1, 0.2f); AddLoot(gameObject, "BronzeScrap", 1, 1, 0.1f); AddLoot(gameObject, "IronScrap", 1, 1, 0.05f); break; case "Draugr_Elite": AddLoot(gameObject, "CopperScrap", 1, 1, 0.3f); AddLoot(gameObject, "BronzeScrap", 1, 1, 0.2f); AddLoot(gameObject, "IronScrap", 1, 1, 0.1f); break; } } private void AddLoot(GameObject gameObject, string name, int min, int max, float chance) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown CharacterDrop component = gameObject.GetComponent<CharacterDrop>(); Drop val = component.m_drops.Find((Drop x) => ((Object)x.m_prefab).name == name); if (val == null) { Drop val2 = new Drop(); val2.m_amountMin = min; val2.m_amountMax = max; val2.m_chance = chance; val2.m_prefab = FindItem(name); component.m_drops.Add(val2); } } private GameObject FindItem(string name) { GameObject val = items.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { return val; } Debug.LogWarning((object)("Item Not Found - " + name + ", Replaced With Wood")); return items.Find((GameObject x) => ((Object)x).name == "Wood"); } }