Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of balrond MonsterMayehm v0.2.4
plugins/BalrondMonsterMayhem.dll
Decompiled 6 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Bootstrap; using HarmonyLib; using LitJson2; using SoftReferenceableAssets; using UnityEngine; using UnityEngine.Audio; using UnityEngine.SceneManagement; using UpgradeWorld; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Balrond Biomes")] [assembly: AssemblyDescription("Valheim Game Rework")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Balrond - Worm Works Studio")] [assembly: AssemblyProduct("Balrond")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("Balrond")] [assembly: ComVisible(false)] [assembly: Guid("f405ea1c-ac25-47a3-9aa2-a8f56c14bfd6")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace UpgradeWorld { public class CommandRegistration { public string name = ""; public string description = ""; public string[] commands = new string[0]; public void AddCommand() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_0022: Unknown result type (might be due to invalid IL or missing references) new ConsoleCommand(name, description, (ConsoleEvent)delegate(ConsoleEventArgs args) { string[] array = commands; foreach (string text in array) { args.Context.TryRunCommand(text, false, false); } }, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false); } } [HarmonyPatch(typeof(Terminal), "InitTerminal")] public static class Upgrade { private static List<CommandRegistration> registrations = new List<CommandRegistration>(); public const string GUID = "upgrade_world"; public static void Register(string name, string description, params string[] commands) { if (Chainloader.PluginInfos.ContainsKey("upgrade_world")) { registrations.Add(new CommandRegistration { name = name, description = description, commands = commands }); } } private static void Postfix() { foreach (CommandRegistration registration in registrations) { registration.AddCommand(); } } } } namespace BalrondNature { public class TableMapper { public static CraftingStation cauldron; public static CraftingStation workbench; public static CraftingStation heavyWorkbench; public static CraftingStation forge; public static CraftingStation ironworks; public static CraftingStation blackforge; public static CraftingStation stoneCutter; public static CraftingStation artisian; public static CraftingStation magetable; public static CraftingStation runeforge; public static CraftingStation tannery; public static CraftingStation fletcher; public static CraftingStation grill; public static CraftingStation alchemylab; public static List<GameObject> pieces = new List<GameObject>(); public static void setupTables(List<GameObject> list) { pieces = list; prepareTables(); } private static 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>(); } Debug.LogWarning((object)("TableMapper - Station not found: " + name)); return null; } private static void prepareTables() { cauldron = FindStation(pieces, "piece_cauldron"); workbench = FindStation(pieces, "piece_workbench"); heavyWorkbench = FindStation(pieces, "piece_heavy_workbench_bal"); forge = FindStation(pieces, "forge"); ironworks = FindStation(pieces, "piece_metalworks_bal"); blackforge = FindStation(pieces, "blackforge"); stoneCutter = FindStation(pieces, "piece_stonecutter"); artisian = FindStation(pieces, "piece_artisanstation"); runeforge = FindStation(pieces, "piece_runeforge_bal"); magetable = FindStation(pieces, "piece_magetable"); fletcher = FindStation(pieces, "piece_fletcher_bal"); } } } namespace BalrondExtendedAnimals { public class BalrondTranslator { public static Dictionary<string, Dictionary<string, string>> translations = new Dictionary<string, Dictionary<string, string>>(); public static Dictionary<string, string> getLanguage(string language) { Dictionary<string, string> result = null; try { result = translations[language]; } catch (Exception) { } return result; } } [Serializable] internal class MonsterHunger : MonoBehaviour { private MonsterAI monsterAI; private ZNetView zNetView; private Tameable tameable; private Humanoid humanoid; public float hungerTime = 600f; public bool canEat = true; private float currentHunger = 0f; public ItemDrop itemToConsume = null; private void Awake() { monsterAI = ((Component)this).GetComponent<MonsterAI>(); zNetView = ((Component)this).GetComponent<ZNetView>(); tameable = ((Component)this).GetComponent<Tameable>(); humanoid = ((Component)this).GetComponent<Humanoid>(); if ((Object)(object)tameable != (Object)null) { hungerTime = tameable.m_fedDuration; } float num = 0.75f; if (((Character)humanoid).m_level < 3) { num = ((Character)humanoid).m_level; } if (((Character)humanoid).m_level > 2) { num = 0.75f; } if (((Character)humanoid).m_level > 4) { num -= 0.1f; } if (((Character)humanoid).m_level > 5) { num -= 0.15f; } ((Character)humanoid).SetMaxHealth(((Character)humanoid).m_health * num); ((MonoBehaviour)this).InvokeRepeating("Hunger", 1f, 1f); } public void MonsterFoodHeal() { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) if (canEat) { ((BaseAI)monsterAI).m_character.Heal(((BaseAI)monsterAI).m_character.GetMaxHealth() / 5f, true); monsterAI.m_onConsumedItem(itemToConsume); humanoid.m_consumeItemEffects.Create(((Component)this).transform.position, Quaternion.identity, (Transform)null, 1f, -1); ((BaseAI)monsterAI).m_animator.SetTrigger("consume"); itemToConsume = null; canEat = false; currentHunger = 0f; Debug.LogWarning((object)("I have feasted: " + ((Object)((Component)this).gameObject).name)); } } private void Hunger() { currentHunger += 1f; if (currentHunger >= hungerTime) { canEat = true; } } } public class BaseLevelEffectSetupValue { public float scale = 1.1f; public float saturation = 0.5f; public float hue = -0.1f; public float value = -0.1f; public bool setEmmisive = false; public float sumValue = 0.05f; public LevelSetup setup = null; public GameObject enabledObject = null; public GameObject enabledObjectLevel2 = null; public GameObject enabledObjectLevel3 = null; public bool setEmissive = false; public Color emissive = Color.white; public void GetSetup(LevelEffects levelEffects) { //IL_0056: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)levelEffects == (Object)null) { Debug.LogWarning((object)"LevelEffects is null"); return; } List<LevelSetup> levelSetups = levelEffects.m_levelSetups; int num = levelSetups?.Count ?? 0; if (num > 0) { setup = levelSetups.Last(); ApplySetupValues(); } else { SetDefaultValues(num, ((Component)levelEffects).transform.localScale.y); } HandleCharacterSpecificAdjustments(levelEffects); } private void ApplySetupValues() { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) if (setup != null) { scale = setup.m_scale; saturation = setup.m_saturation; hue = setup.m_hue; value = setup.m_value; enabledObject = setup.m_enableObject; enabledObjectLevel2 = enabledObject; enabledObjectLevel3 = enabledObject; emissive = setup.m_emissiveColor; setEmissive = setup.m_setEmissiveColor; } } private void SetDefaultValues(int levels, float baseScale) { switch (levels) { case 0: scale = baseScale; saturation = 0f; hue = 0f; value = 0f; break; case 1: scale = baseScale + 0.05f; saturation = 0.5f; hue = -0.05f; value = -0.05f; break; case 2: scale = baseScale + 0.1f; saturation = 0.5f; hue = -0.1f; value = -0.1f; break; } } private void HandleCharacterSpecificAdjustments(LevelEffects levelEffects) { Character character = levelEffects.m_character; object obj; if (character == null) { obj = null; } else { GameObject gameObject = ((Component)character).gameObject; obj = ((gameObject != null) ? ((Object)gameObject).name : null); } string text = (string)obj; if (string.IsNullOrEmpty(text)) { return; } string text2 = text; string text3 = text2; if (!(text3 == "Deer")) { if (text3 == "Boar") { EditBoar(levelEffects); } } else { EditDeer(levelEffects); } } private void EditDeer(LevelEffects levelEffects) { if (levelEffects.m_levelSetups.Count >= 2) { GameObject enableObject = levelEffects.m_levelSetups[0].m_enableObject; GameObject enableObject2 = levelEffects.m_levelSetups[1].m_enableObject; enabledObjectLevel2 = enableObject; enabledObjectLevel3 = enableObject2; Transform parent = enableObject.transform.parent; object obj; if (parent == null) { obj = null; } else { Transform obj2 = parent.Find("Antler1"); obj = ((obj2 != null) ? ((Component)obj2).gameObject : null); } GameObject val = (GameObject)obj; if ((Object)(object)val != (Object)null) { enabledObject = val; levelEffects.m_levelSetups[0].m_enableObject = val; levelEffects.m_levelSetups[1].m_enableObject = val; } } } private void EditBoar(LevelEffects levelEffects) { } } public class LevelEffectGenerator { private readonly BaseLevelEffectSetupValue baseSetup = new BaseLevelEffectSetupValue(); public void CreateVisuals(LevelEffects levelEffects) { if (!((Object)(object)levelEffects == (Object)null)) { baseSetup.GetSetup(levelEffects); int num = levelEffects.m_levelSetups?.Count ?? 0; int num2 = Mathf.Max(0, 6 - num); for (int i = 0; i < num2; i++) { float delta = baseSetup.sumValue * (float)(i + 1); LevelSetup item = CreateSetup(delta, num2, i + 1); levelEffects.m_levelSetups.Add(item); } } } public LevelEffects CreateLevelEffectAt(Transform visual, SkinnedMeshRenderer meshRenderer) { if ((Object)(object)meshRenderer == (Object)null) { object obj; if (visual == null) { obj = null; } else { Transform parent = visual.parent; obj = ((parent != null) ? ((Object)parent).name : null); } Debug.LogWarning((object)("No renderer for visual effects: " + (string?)obj)); return null; } return InitLevelEffects(visual, meshRenderer); } public LevelEffects CreateLevelEffectComponent(Transform visual) { SkinnedMeshRenderer[] componentsInChildren = ((Component)visual).GetComponentsInChildren<SkinnedMeshRenderer>(); if (componentsInChildren.Length == 1) { return InitLevelEffects(visual, componentsInChildren[0]); } if (componentsInChildren.Length > 1) { object obj; if (visual == null) { obj = null; } else { Transform parent = visual.parent; obj = ((parent != null) ? ((Object)parent).name : null); } Debug.LogWarning((object)("Too many renderers for visual effects: " + (string?)obj)); } return null; } private LevelEffects InitLevelEffects(Transform visual, SkinnedMeshRenderer renderer) { LevelEffects val = ((Component)visual).gameObject.AddComponent<LevelEffects>(); val.m_mainRender = (Renderer)(object)renderer; Transform parent = visual.parent; val.m_character = (Character)(object)((parent != null) ? ((Component)parent).GetComponent<Humanoid>() : null); return val; } private LevelSetup CreateSetup(float delta, int maxLevels, int level) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Expected O, but got Unknown return new LevelSetup { m_scale = baseSetup.scale + delta, m_saturation = baseSetup.saturation + delta, m_hue = baseSetup.hue + delta, m_value = baseSetup.value + delta, m_enableObject = PickEnabledObject(maxLevels, level), m_setEmissiveColor = baseSetup.setEmissive, m_emissiveColor = new Color(baseSetup.emissive.r + delta, baseSetup.emissive.g + delta, baseSetup.emissive.b + delta, baseSetup.emissive.a) }; } private GameObject PickEnabledObject(int maxLevels, int level) { if (maxLevels >= 6) { if (level > 4) { return baseSetup.enabledObjectLevel3; } if (level > 2) { return baseSetup.enabledObjectLevel2; } } else if (maxLevels == 3) { if (level > 3) { return baseSetup.enabledObjectLevel3; } if (level > 2) { return baseSetup.enabledObjectLevel2; } } else { switch (level) { case 2: return baseSetup.enabledObjectLevel3; case 1: return baseSetup.enabledObjectLevel2; } } return baseSetup.enabledObject; } } internal class AttackList { public static string[] attacks = new string[59] { "Frostbjorn_Attack_bal", "Frostbjorn_RageAttack_bal", "Frostbjorn_Taunt_bal", "Habrok_Bite_bal", "Habrok_Headbutt_bal", "habrok_Pounce_bal", "HabrokBirb_Bite_bal", "Greydwarf_Moss_RootSpawn_bal", "battlehog_base_attack_bal", "penguin_base_attack_bal", "polarbear_attack_bal", "bear_attack_bal", "bear_attackBite_bal", "bear_attack2_bal", "bear_attackStanding_bal", "bloodling_aoe_bal", "crabForest_attack_bal", "crabSea_attack_bal", "crabSea_attack2_bal", "crabSea_attack3_bal", "crabStone_attack_bal", "crabStone_attack2_bal", "crabStone_attack3_bal", "CrowHit_melee_bal", "Deathsquito_sting_bal", "darkbat_melee_bal", "Ell_BiteAttack_bal", "Ell_shock_bal", "Goat_charge_bal", "Goleming_attack_bal", "Goleming_throw_bal", "GreydwarfBeeKeeper_throw_bal", "Greydwarf_crasher_attack_bal", "Greydwarf_crasher_attack_left_bal", "Greydwarf_crasher_claw_bal", "Greydwarf_crasher_claw_left_bal", "GreylingBee_attack_bal", "GreylingBee_attack_left_bal", "GreylingElite_attackSlam_bal", "GreylingElite_attack_bal", "GreyWatcherAttackMelee_bal", "hog_base_attack_bal", "hog_smack_attack_bal", "Leech_PrimalBiteAttack_bal", "mossroot_attack_bal", "Moth_attack_bal", "NeckBrute_BiteAttack_bal", "NeckBrute_spit_bal", "Shark_attack_bal", "StagGhost_antler_bal", "Stag_antler_bal", "Stag_charge_bal", "StormDrake_lighting_bolt_bal", "SerpentBaby_attack_bal", "GoblinSkeleton_attack_bal", "FenringBrute_attack_claw_double_bal", "lostsoul_attack_bal", "Greydwarf_frozen_attack_bal", "Greydwarf_scorched_attack_bal" }; } internal class ItemList { public static string[] items = new string[0]; } internal class MonsterList { public static string[] monsters = new string[41] { "Doe_bal", "NeckTadpole_bal", "PolarBear_bal", "Fenring_Brute_bal", "Fox_bal", "Penguin_bal", "BattleHog_bal", "Ell_bal", "LostSoul_bal", "Bear_bal", "Bear_cub_bal", "CrabSea_bal", "CrabStone_bal", "DarkBat_bal", "Habrok_bal", "HabrokBirb_bal", "TrollOutcast_bal", "TrollBrute_bal", "Frostbjorn_bal", "GhostYagluth_bal", "GiantCrow_bal", "GoatKid_bal", "Goat_bal", "goblin_skeleton_bal", "Greydwarf_Crusher_bal", "Greydwarf_Frozen_bal", "Greydwarf_Moss_bal", "Greydwarf_Scorched_bal", "GreylingBeeKeeper_bal", "GreylingElite_bal", "Hog_bal", "LeechPrimal_bal", "MossRoot_bal", "NeckBrute_bal", "Serpentling_bal", "Shark_bal", "StagGhost_bal", "Stag_bal", "Stormdrake_bal", "TrollUndead_bal", "Fox_cub_bal" }; } internal class OtherObjectList { public static string[] other = new string[56] { "root_beam_projectile_bal", "bloodling_selfDestruct_bal", "deer_ragdoll_bal", "fx_crab_death_bal", "GreydwarfBeekeper_throw_projectile_bal", "moss_tentacle_spawn_bal", "moth_aoe_bal", "NeckBrute_Ragdoll_bal", "neck_spit_projectile_bal", "sfx_bear_alerted_bal", "sfx_bear_attack_bal", "sfx_bear_birth_bal", "sfx_bear_death_bal", "sfx_bear_hit", "sfx_bear_hit_bal", "sfx_bear_idle_bal", "sfx_goleming_alerted_bal", "sfx_goleming_attack_bal", "sfx_goleming_death_bal", "sfx_goleming_hit_bal", "sfx_goleming_idle_bal", "sfx_lootbox_poof_bal", "sfx_neckBruteSpit_bal", "sfx_rock_destroyed_bal", "sfx_wings_flying_bal", "stormdrake_lightingBolt_bal", "vfx_neckSpitHit_bal", "vfx_shark_death_bal", "sfx_penguin_hurt_bal", "sfx_penguin_idle_bal", "sfx_penguin_death_bal", "sfx_penguin_alerted_bal", "ell_shock_aoe_bal", "vfx_thunderbolt_explosion_bal", "spiritbolt_projectile_bal", "vfx_spiritbolt_explosion_bal", "fx_TrollUndead_Gibs_bal", "vfx_LostSoulDeath_bal", "Spawner_Bear_bal", "Spawner_BearCub_bal", "Spawner_CrabSea_bal", "Spawner_FenringBrute_bal", "Spawner_GoblinSkeleton_bal", "Spawner_GreydwarfFrozen_bal", "Spawner_GreydwarfScorched_bal", "Spawner_Habrok_bal", "Spawner_HabrokBirb_bal", "Spawner_LostSoul_bal", "Spawner_PolarBear_bal", "Spawner_Stag_bal", "Spawner_StagGhost_bal", "Spawner_TrollOutcat_bal", "Spawner_TrollUndead_bal", "Spawner_NeckBrute_bal", "Spawner_NeckTadpole_bal", "Spawner_GiantCrow_bal" }; } public class PlayerRace : MonoBehaviour { private ZNetView _znetView; private Player _player; private VisEquipment _visEquipment; private SkinnedMeshRenderer _meshRenderer; private Transform _visual; private GameObject _currentEars; private GameObject _currentFangs; private Material _playerMaterial; private Material _playerHair; public float bodyBuff = 0f; public float bodyHeight = 0f; public float bodyThickness = 0f; private string _currentRace = "Human"; public Dictionary<string, RaceStruct> Races { get; private set; } = new Dictionary<string, RaceStruct>(); private void Awake() { _znetView = ((Component)this).GetComponent<ZNetView>(); if (!((Object)(object)_znetView == (Object)null)) { _player = ((Component)this).GetComponent<Player>(); if (!((Object)(object)_player == (Object)null)) { ((Component)_visEquipment).GetComponent<VisEquipment>(); _meshRenderer = _visEquipment?.m_bodyModel; SkinnedMeshRenderer meshRenderer = _meshRenderer; _visual = ((meshRenderer != null) ? ((Component)meshRenderer).transform.parent : null); GetPlayerMaterials(); CheckRace(); } } } public void CheckRace() { SetRace(GetRace()); SetupRace(_currentRace); } public string GetRace() { string value; return _player.m_customData.TryGetValue("BalrondRace", out value) ? value : "Human"; } public void SetRace(string race) { string currentRace = (_player.m_customData["BalrondRace"] = race); _currentRace = currentRace; } public bool HasRaceStruct(string race = "") { return Races.ContainsKey(race); } public RaceStruct GetRaceStruct(string race = "") { RaceStruct value; return Races.TryGetValue(race, out value) ? value : default(RaceStruct); } private void GetPlayerMaterials() { if ((Object)(object)_meshRenderer == (Object)null) { return; } Material[] materials = ((Renderer)_meshRenderer).materials; foreach (Material val in materials) { if (((Object)val).name.Contains("PlayerMaterial")) { _playerMaterial = val; } if (((Object)val).name.Contains("PlayerHair")) { _playerHair = val; } } } public void SetupRace(string race = "") { //IL_002c: Unknown result type (might be due to invalid IL or missing references) if (HasRaceStruct(race)) { RaceStruct raceStruct = GetRaceStruct(race); _currentRace = race; ((Component)_visual).transform.localScale = raceStruct.scale; setMaterialTexture(raceStruct.m_body); SetRaceDetails(raceStruct); Humanoid player = (Humanoid)(object)_player; } } private void setMaterialTexture(Texture texture) { if (!((Object)(object)texture == (Object)null) && !((Object)(object)_playerMaterial == (Object)null)) { _playerMaterial.SetTexture("_mainTex", texture); } } private void SetRaceDetails(RaceStruct raceStruct) { if (raceStruct.hasEar) { if ((Object)(object)_currentEars != (Object)null) { _currentEars.SetActive(false); } Transform val = FindDeepChild(_visual, raceStruct.ears); if ((Object)(object)val != (Object)null) { _currentEars = ((Component)val).gameObject; _currentEars.SetActive(true); } } if (raceStruct.hasFangs) { if ((Object)(object)_currentFangs != (Object)null) { _currentFangs.SetActive(false); } Transform val2 = FindDeepChild(_visual, raceStruct.fangs); if ((Object)(object)val2 != (Object)null) { _currentFangs = ((Component)val2).gameObject; _currentFangs.SetActive(true); } } } public static Transform FindDeepChild(Transform parent, string name) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown foreach (Transform item in parent) { Transform val = item; if (((Object)val).name == name) { return val; } Transform val2 = FindDeepChild(val, name); if ((Object)(object)val2 != (Object)null) { return val2; } } return null; } } [Serializable] public struct RaceStruct { public string race; public bool hasEar; public bool hasFangs; public string ears; public string fangs; public Texture m_body; public Vector3 scale; } public class ItemEdits { private List<GameObject> items; private List<GameObject> buildPieces; private GameObject FindItem(List<GameObject> list, string name) { GameObject val = list.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { return val; } Debug.LogWarning((object)("BalrondMonsterMayhem: Item Not Found: " + name)); return null; } 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(items, name).GetComponent<ItemDrop>(); val.m_resItem = component; val.m_amount = amount; val.m_amountPerLevel = amountPerLevel; return val; } public void editItems(List<GameObject> list) { foreach (GameObject item in list) { changeItem(item); } } private void changeItem(GameObject gameObject) { string name = ((Object)gameObject).name; string text = name; } private void CheckStats(GameObject gameObject) { string name = ((Object)gameObject).name; string text = name; } private void editSpiritDamageStat(GameObject gameObject, int spiritDamage) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_damages.m_spirit = spiritDamage; if (((Object)gameObject).name == "skeleton_mace" || ((Object)gameObject).name == "imp_fireball_attack") { component.m_itemData.m_shared.m_damages.m_blunt += spiritDamage; } } private void editSurtlingDamageStat(GameObject gameObject, int fireDamage) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_damages.m_fire = fireDamage; component.m_itemData.m_shared.m_damages.m_blunt += fireDamage; } 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 editArmorSetEffect(GameObject gameObject, int setSize, string statusName, string setName) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_setName = setName; component.m_itemData.m_shared.m_setSize = setSize; component.m_itemData.m_shared.m_setStatusEffect = ObjectDB.instance.m_StatusEffects.Find((StatusEffect x) => ((Object)x).name == statusName); } 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 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; } } public class EventBuilder { private SpawnData spawnData; private List<GameObject> prefabList; public void EditEvents(List<RandomEvent> randomEvents, List<GameObject> allPrefabs) { prefabList = allPrefabs; foreach (RandomEvent randomEvent in randomEvents) { randomEvent.m_notRequiredGlobalKeys?.Clear(); randomEvent.m_altNotRequiredPlayerKeys?.Clear(); randomEvent.m_altRequiredNotKnownItems?.Clear(); Debug.Log((object)("Editing Event: " + randomEvent.m_name)); ApplyModifications(randomEvent); } } private void ModifyEvent(RandomEvent evt, Biome biome, bool nearBase, int durationMultiplier) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) evt.m_biome = biome; evt.m_nearBaseOnly = nearBase; evt.m_duration *= (float)durationMultiplier; evt.m_notRequiredGlobalKeys = new List<string>(); } private void setSpawnDataObject(SpawnData spawn = null) { if (spawnData == null && spawn != null) { spawnData = spawn; } } private void ApplyModifications(RandomEvent evt) { //IL_04cd: Unknown result type (might be due to invalid IL or missing references) //IL_04d4: Unknown result type (might be due to invalid IL or missing references) //IL_04d5: Unknown result type (might be due to invalid IL or missing references) //IL_03e2: Unknown result type (might be due to invalid IL or missing references) //IL_03ec: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_0330: Unknown result type (might be due to invalid IL or missing references) //IL_0792: Unknown result type (might be due to invalid IL or missing references) //IL_079c: Unknown result type (might be due to invalid IL or missing references) //IL_079d: Unknown result type (might be due to invalid IL or missing references) switch (evt.m_name) { case "surtlings": ModifyEvent(evt, (Biome)571, nearBase: true, 1); setSpawnDataObject(evt.m_spawn?[0]); evt.m_pauseIfNoPlayerInArea = false; evt.m_spawn[0].m_maxLevel = 3; evt.m_spawn[0].m_groupSizeMax = 2; AddSpawner(evt, "SurtlingSpawner_bal", 10); break; case "foresttrolls": { ModifyEvent(evt, (Biome)580, nearBase: false, 1); evt.m_pauseIfNoPlayerInArea = false; SpawnData obj2 = evt.m_spawn[0]; obj2.m_maxSpawned *= 2; evt.m_spawn[0].m_maxLevel = 3; evt.m_spawn[0].m_groupSizeMax = 1; setSpawnDataObject(evt.m_spawn?[0]); evt.m_forceEnvironment = "Misty"; evt.m_requiredGlobalKeys = new List<string> { "defeated_bonemass", "KilledTroll" }; break; } case "blobs": { evt.m_biome = (Biome)(evt.m_biome | 0x200); evt.m_pauseIfNoPlayerInArea = false; evt.m_forceEnvironment = "Bonemass"; setSpawnDataObject(evt.m_spawn?[0]); SpawnData obj7 = evt.m_spawn[0]; obj7.m_maxSpawned *= 2; evt.m_spawn[0].m_maxLevel = 3; evt.m_spawn[0].m_groupSizeMax = 4; SpawnData obj8 = evt.m_spawn[1]; obj8.m_maxSpawned *= 2; evt.m_spawn[1].m_maxLevel = 3; evt.m_spawn[1].m_groupSizeMax = 2; break; } case "army_bonemass": { evt.m_biome = (Biome)(evt.m_biome | 0x260); evt.m_forceEnvironment = "Bonemass"; evt.m_pauseIfNoPlayerInArea = false; setSpawnDataObject(evt.m_spawn?[0]); SpawnData obj3 = evt.m_spawn[0]; obj3.m_maxSpawned += 2; evt.m_spawn[0].m_maxLevel = 3; evt.m_spawn[0].m_groupSizeMax = 4; evt.m_spawn[0].m_spawnChance = 75f; SpawnData obj4 = evt.m_spawn[1]; obj4.m_maxSpawned += 2; evt.m_spawn[1].m_maxLevel = 3; evt.m_spawn[1].m_groupSizeMax = 2; eventAddPoisonSkeleton(evt); eventAddSkeletonSpawner(evt); eventAddDraugrSpawner(evt); break; } case "army_moder": { evt.m_biome = (Biome)(evt.m_biome | 0x40); evt.m_forceEnvironment = "SnowStorm"; evt.m_pauseIfNoPlayerInArea = false; setSpawnDataObject(evt.m_spawn?[0]); SpawnData obj9 = evt.m_spawn[0]; obj9.m_maxSpawned *= 2; evt.m_spawn[0].m_maxLevel = 3; evt.m_spawn[0].m_groupSizeMax = 2; break; } case "army_eikthyr": evt.m_forceEnvironment = "Misty"; setSpawnDataObject(evt.m_spawn?[0]); evt.m_pauseIfNoPlayerInArea = false; evt.m_spawn[0].m_maxLevel = 2; evt.m_spawn[0].m_groupSizeMax = 1; evt.m_spawn[1].m_maxLevel = 2; evt.m_spawn[1].m_groupSizeMax = 1; AddMonster(evt, "NeckBrute_bal", 50, 1, 2); AddMonster(evt, "Stag_bal", 50, 1); AddMonster(evt, "Hog_bal", 50, 1, 2); AddMonster(evt, "Bear_bal", 25, 1); break; case "army_theelder": evt.m_forceEnvironment = "DeepForest Mist"; evt.m_pauseIfNoPlayerInArea = false; setSpawnDataObject(evt.m_spawn?[0]); evt.m_spawn[0].m_maxSpawned = 4; evt.m_spawn[0].m_maxLevel = 2; evt.m_spawn[0].m_groupSizeMax = 2; evt.m_spawn[1].m_maxSpawned = 2; evt.m_spawn[1].m_maxLevel = 2; evt.m_spawn[1].m_groupSizeMax = 2; evt.m_spawn[2].m_spawnChance = 50f; evt.m_spawn[2].m_maxSpawned = 1; evt.m_spawn[2].m_maxLevel = 2; AddMonster(evt, "Greyling", 75, 2, 3); AddMonster(evt, "GreylingElite_bal", 15, 1, 2); AddMonster(evt, "GreylingBeeKeeper_bal", 15, 1, 2); AddMonster(evt, "Greydwarf_Moss_bal", 10, 1, 2); AddMonster(evt, "Greydwarf_Crusher_bal", 5, 1); eventAddGreydwarfSpawner(evt); break; case "wolves": { evt.m_pauseIfNoPlayerInArea = false; evt.m_nearBaseOnly = false; setSpawnDataObject(evt.m_spawn?[0]); SpawnData obj = evt.m_spawn[0]; obj.m_maxSpawned *= 2; evt.m_spawn[0].m_maxLevel = 3; break; } case "skeletons": { evt.m_biome = (Biome)(evt.m_biome | 0x260); evt.m_forceEnvironment = "GdKing"; evt.m_pauseIfNoPlayerInArea = false; evt.m_nearBaseOnly = false; setSpawnDataObject(evt.m_spawn?[0]); SpawnData obj5 = evt.m_spawn[0]; obj5.m_maxSpawned *= 2; evt.m_spawn[0].m_maxLevel = 5; evt.m_spawn[0].m_groupSizeMax = 4; evt.m_spawn[0].m_spawnChance = 75f; SpawnData obj6 = evt.m_spawn[1]; obj6.m_maxSpawned *= 2; evt.m_spawn[1].m_maxLevel = 3; evt.m_spawn[1].m_groupSizeMax = 2; eventAddSkeletonSpawner(evt); AddMonster(evt, "TrollUndead_bal", 5, 1); break; } case "boss_gdking": if (spawnData != null) { AddMonster(evt, "Greydwarf_Shaman", 25, 3, 2); } break; case "boss_eikthyr": if (spawnData != null) { AddMonster(evt, "StagGhost_bal", 55, 3, 3); } break; case "boss_moder": if (spawnData != null) { AddMonster(evt, "Stormdrake_bal", 5, 1); AddMonster(evt, "Hatchling", 75, 3, 3); } break; case "boss_bonemass": if (spawnData != null) { AddMonster(evt, "Blob", 22, 2, 3); AddMonster(evt, "BlobElite", 33, 1, 3); } break; case "boss_goblinking": if (spawnData != null) { AddMonster(evt, "goblin_skeleton_bal", 33, 2, 3); AddMonster(evt, "GhostYagluth_bal", 22, 1, 3); } break; } } private void AddSpawner(RandomEvent evt, string prefabName, int chance) { GameObject val = prefabList.Find((GameObject x) => ((Object)x).name == prefabName); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)("Couldn't find spawner prefab: " + prefabName)); return; } SpawnData val2 = CreateSpawnData(spawnData, val, "event_" + prefabName, chance, 1, 1); if (val2 != null) { evt.m_spawn.Add(val2); } } public void AddMonster(RandomEvent evt, string name, int chance = 50, int amount = 2, int maxLevel = 1) { GameObject val = prefabList.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)("Couldn't find monster prefab: " + name)); return; } SpawnData val2 = CreateSpawnData(spawnData, val, "event_" + evt.m_name + "_" + name, chance, amount, maxLevel); if (val2 != null) { evt.m_spawn.Add(val2); } } private SpawnData CreateSpawnData(SpawnData template, GameObject prefab, string name, int chance, int amount, int maxLevel) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) SpawnData val = (SpawnData)((template != null) ? ((object)template.Clone()) : ((object)new SpawnData { m_spawnAtDay = true, m_spawnAtNight = true, m_huntPlayer = true, m_canSpawnCloseToPlayer = true, m_maxAltitude = 2000f, m_minAltitude = 0f, m_biome = (Biome)895, m_biomeArea = (BiomeArea)3 })); val.m_name = name; val.m_prefab = prefab; val.m_spawnChance = chance; val.m_maxSpawned = amount; val.m_groupSizeMax = amount; val.m_groupSizeMin = 1; val.m_maxLevel = maxLevel; return val; } public RandomEvent AddAmbushEvent(List<GameObject> allPrefabs, RandomEvent baseEvent, string eventname, Biome biome, string monsterName1, string monsterName2, string globalKey = "") { //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) prefabList = allPrefabs; RandomEvent val = baseEvent.Clone(); val.m_duration = 60f; val.m_eventRange = 48f; val.m_forceEnvironment = "Misty"; val.m_forceMusic = "CombatEventL4"; val.m_nearBaseOnly = false; val.m_requiredGlobalKeys = new List<string> { globalKey }; val.m_altRequiredPlayerKeysAny = new List<string>(); val.m_notRequiredGlobalKeys = new List<string>(); val.m_altRequiredKnownItems = new List<ItemDrop>(); val.m_altRequiredNotKnownItems = new List<ItemDrop>(); val.m_random = true; val.m_enabled = true; val.m_pauseIfNoPlayerInArea = false; val.m_name = "Ambush_" + eventname; val.m_startMessage = "$tag_ambush_start_bal"; val.m_endMessage = ""; val.m_biome = biome; val.m_spawn[0].m_name = val.m_name + " - " + monsterName1; val.m_spawn[0].m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == monsterName1); val.m_spawn[0].m_maxSpawned = 2; val.m_spawn[0].m_biome = biome; val.m_spawn[0].m_biomeArea = (BiomeArea)3; val.m_spawn[0].m_maxLevel = 3; val.m_spawn[0].m_groupSizeMax = 1; val.m_spawn[0].m_groupSizeMin = 1; val.m_spawn[0].m_spawnChance = 75f; val.m_spawn[0].m_minAltitude = 1f; val.m_spawn[0].m_maxAltitude = 10000f; val.m_spawn[0].m_huntPlayer = true; SpawnData val2 = val.m_spawn[0].Clone(); val2.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == monsterName2); val2.m_name = val.m_name + " - " + monsterName2; val2.m_maxSpawned = 2; val2.m_maxLevel = 2; val.m_spawn.Add(val2); return val; } public void AddNewEvents(List<RandomEvent> randomEvents, List<GameObject> allPrefabs) { prefabList = allPrefabs; string baseName = "surtlings"; RandomEvent val = randomEvents.Find((RandomEvent x) => x.m_name == baseName); if (val != null) { string forestTrollsBase = "foresttrolls"; RandomEvent baseEvent = randomEvents.Find((RandomEvent x) => x.m_name == forestTrollsBase); List<RandomEvent> collection = new List<RandomEvent> { DarkNightEvent(val), GhostNightEvent(val), BloodMoonEvent(val), FeedingTimeEvent(val), DvergerRevangeEvent(val), BlackMassEvent(val), NewForestTrolls(baseEvent) }; RandomEvent baseEvent2 = randomEvents.Find((RandomEvent x) => x.m_name == "wolves"); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "NeckHunt", (Biome)1, "Neck", "NeckBrute_bal")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GreylingHunt", (Biome)1, "Greyling", "GreylingElite_bal")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GreydwarfHunt1", (Biome)8, "Greydwarf", "Greydwarf_Elite", "defeated_eikthyr")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GreydwarfHunt2", (Biome)8, "Greydwarf_Shaman", "Greydwarf_Moss_bal", "defeated_eikthyr")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GreydwarfHunt3", (Biome)8, "Greydwarf_Elite", "Greydwarf_Crusher_bal", "defeated_gdking")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "SkeletonHunt", (Biome)8, "Skeleton", "Skeleton_Poison", "defeated_gdking")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "SkeletonHunt2", (Biome)2, "Skeleton_Poison", "goblin_skeleton_bal", "defeated_bonemass")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "LeechHunt", (Biome)2, "Leech", "LeechPrimal_bal", "defeated_gdking")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GhostHunt", (Biome)2, "Ghost", "Wraith", "defeated_bonemass")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "DraugrHunt", (Biome)2, "Draugr", "Draugr_Elite", "defeated_gdking")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "FenringHunt", (Biome)4, "Fenring", "Fenring_Cultist", "defeated_bonemass")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "FoxHunt", (Biome)16, "Fox_bal", "Fox_bal", "defeated_bonemass")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "HabrokHunt", (Biome)16, "Habrok_bal", "Habrok_bal", "defeated_bonemass")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GoblinHunt1", (Biome)16, "Goblin", "GoblinShaman", "defeated_dragon")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "GoblinHunt1", (Biome)16, "Goblin", "GoblinBrute", "defeated_dragon")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "SeekerHunt1", (Biome)512, "SeekerBrood", "Seeker", "defeated_dragon")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "SeekerHunt2", (Biome)512, "Seeker", "SeekerBrute", "defeated_dragon")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "CharredHunt1", (Biome)32, "Charred_Twitcher", "Charred_Mage", "defeated_queen")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "CharredHunt2", (Biome)32, "Charred_Archer", "Charred_Melee", "defeated_queen")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "FaderHunt1", (Biome)32, "Charred_Twitcher_Summoned", "Charred_Archer_Fader", "defeated_queen")); randomEvents.Add(AddAmbushEvent(allPrefabs, baseEvent2, "FaderHunt2", (Biome)32, "Charred_Twitcher_Summoned", "Charred_Melee_Fader", "defeated_queen")); randomEvents.AddRange(collection); } } private RandomEvent DarkNightEvent(RandomEvent baseEvent) { Debug.Log((object)"Creating event: DarkNight"); List<string> keys = new List<string> { "defeated_gdking" }; List<SpawnData> list = new List<SpawnData>(); if (spawnData != null) { list.Add(EventCreateMonster(baseEvent, "DarkNight", "DarkBat_bal", 99, 10, 3)); } return CreateEvent(baseEvent, (Biome)27, keys, new List<string>(), list, "DarkNight", "The Darkest Night starts", "The Dark night passes", "CombatEventL2", "Darklands_dark"); } private RandomEvent GhostNightEvent(RandomEvent baseEvent) { Debug.Log((object)"Creating event: GhostNight"); List<string> keys = new List<string> { "defeated_gdking" }; List<SpawnData> list = new List<SpawnData>(); if (spawnData != null) { list.Add(EventCreateMonster(baseEvent, "GhostNight", "Ghost", 75, 3, 3)); list.Add(EventCreateMonster(baseEvent, "GhostNight", "LostSoul_bal", 75, 3, 3)); } return CreateEvent(baseEvent, (Biome)63, keys, new List<string>(), list, "GhostNightEvent", "The Spirits awaken", "The Spirits rest again", "CombatEventL1", "Crypt"); } private RandomEvent FeedingTimeEvent(RandomEvent baseEvent) { Debug.Log((object)"Creating event: FeedingTime"); List<string> keys = new List<string> { "defeated_bonemass" }; List<SpawnData> list = new List<SpawnData>(); if (spawnData != null) { list.Add(EventCreateMonster(baseEvent, "FeedingTime", "Serpentling_bal", 75, 4, 3)); list.Add(EventCreateMonster(baseEvent, "FeedingTime", "Serpent", 25, 2, 3)); } return CreateEvent(baseEvent, (Biome)256, keys, new List<string>(), list, "FeedingTime", "The Serpent Feeding Season started", "The feeding season ended", "CombatEventL3", "Misty"); } private RandomEvent BloodMoonEvent(RandomEvent baseEvent) { Debug.Log((object)"Creating event: BloodMoon"); List<string> keys = new List<string> { "defeated_bonemass", "killedFenring" }; List<SpawnData> list = new List<SpawnData>(); if (spawnData != null) { list.Add(EventCreateMonster(baseEvent, "BloodMoon", "Bat", 75, 8, 3)); list.Add(EventCreateMonster(baseEvent, "BloodMoon", "Ulv", 75, 8, 3)); list.Add(EventCreateMonster(baseEvent, "BloodMoon", "Fenring", 50, 6, 2)); list.Add(EventCreateMonster(baseEvent, "BloodMoon", "Fenring_Cultist", 25, 3, 1)); } return CreateEvent(baseEvent, (Biome)895, keys, new List<string>(), list, "BloodMoon", "The Blood Moon rises", "The Blood Moon fades away", "CombatEventL4", "Darklands_dark"); } private RandomEvent BlackMassEvent(RandomEvent baseEvent) { Debug.Log((object)"Creating event: BlackMass"); List<string> keys = new List<string> { "defeated_dragon" }; List<string> noKeys = new List<string> { "defeated_queen" }; List<SpawnData> list = new List<SpawnData>(); if (spawnData != null) { list.Add(EventCreateMonster(baseEvent, "BlackMass", "BlobTar", 75, 6, 3)); } return CreateEvent(baseEvent, (Biome)571, keys, noKeys, list, "BlackMass", "Black Mass starts", "Black Mass ends", "CombatEventL4", "Ashlands_ashrain"); } private RandomEvent NewForestTrolls(RandomEvent baseEvent) { Debug.Log((object)"Creating event: NewForestTrolls"); List<string> keys = new List<string> { "KilledTroll" }; List<SpawnData> list = new List<SpawnData>(); if (spawnData != null) { list.Add(EventCreateMonster(baseEvent, "NewForestTrolls", "TrollOutcast_bal", 75, 3, 3)); } return CreateEvent(baseEvent, (Biome)11, keys, new List<string>(), list, "NewForestTrolls", "Rush of Forest Trolls starts", "Rush of Forest Trolls ends", baseEvent.m_forceMusic, baseEvent.m_forceEnvironment); } private RandomEvent DvergerRevangeEvent(RandomEvent baseEvent) { //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"Creating event: DvergerRevange"); List<string> keys = new List<string> { "defeated_goblinking", "killedDverger" }; List<string> noKeys = new List<string> { "defeated_queen" }; List<SpawnData> list = new List<SpawnData>(); if (spawnData != null) { list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "DvergerMage_event", 75, 2, 3)); list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "DvergerMageFire_event", 75, 1, 2)); list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "DvergerMageIce_event", 75, 1, 2)); list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "DvergerMageSupport_event", 75, 1, 2)); list.Add(EventCreateMonster(baseEvent, "DvergerRevange", "Dverger_event", 50, 2, 2)); } Biome biome = (Biome)127; return CreateEvent(baseEvent, biome, keys, noKeys, list, "DvergerRevange", "It's payback time", "Hope you learned the lesson", "CombatEventL3", "Twilight_SnowStorm", 200f); } private RandomEvent SeekerHuntEvent(RandomEvent baseEvent) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"Creating event: SeekerHunt"); List<string> list = new List<string>(); List<string> list2 = new List<string>(); List<SpawnData> list3 = new List<SpawnData>(); Biome biome = (Biome)127; list.Add("defeated_goblinking"); list.Add("killedSeeker"); list2.Add("defeated_queen"); if (spawnData != null) { list3.Add(EventCreateMonster(baseEvent, "SeekerHunt", "SeekerBrood", 75, 10, 3)); list3.Add(EventCreateMonster(baseEvent, "SeekerHunt", "Seeker", 50, 2, 2)); list3.Add(EventCreateMonster(baseEvent, "SeekerHunt", "SeekerBrute", 25, 1, 1)); } return CreateEvent(baseEvent, biome, list, list2, list3, "SeekerHunt", "The Hive hungers", "THe Hive have feasted", "CombatEventL2", "Eikthyr", 200f); } private RandomEvent DeathBreedingSeasonEvent(RandomEvent baseEvent) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"Creating event: DeathBreedingSeason"); List<string> list = new List<string>(); List<string> list2 = new List<string>(); List<SpawnData> list3 = new List<SpawnData>(); Biome biome = (Biome)555; list.Add("defeated_dragon"); list.Add("killedInsecto"); list2.Add("defeated_queen"); if (spawnData != null) { list3.Add(EventCreateMonster(baseEvent, "DeathBreedingSeason", "Deathsquito_bal_event", 75, 4, 3)); list3.Add(EventCreateMonster(baseEvent, "DeathBreedingSeason", "Tick", 50, 8, 2)); } return CreateEvent(baseEvent, biome, list, list2, list3, "DeathBreedingSeason", "Breeding Season starts", "Breeding Season ends", "CombatEventL4", "Clear", 200f); } private RandomEvent CreateEvent(RandomEvent baseEvent, Biome biome, List<string> keys, List<string> noKeys, List<SpawnData> spawns, string name, string start, string stop, string music, string env, float duration = 100f, bool random = true) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) RandomEvent val = baseEvent.Clone(); val.m_name = name; val.m_startMessage = start; val.m_endMessage = stop; val.m_forceMusic = music ?? val.m_forceMusic; val.m_forceEnvironment = env; val.m_requiredGlobalKeys = keys; val.m_notRequiredGlobalKeys = noKeys; val.m_spawn = spawns; val.m_biome = biome; val.m_duration = duration; val.m_random = random; return val; } private SpawnData EventCreateMonster(RandomEvent baseEvent, string eventName, string name, int chance, int amount, int maxLvl) { //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) if (baseEvent == null || baseEvent.m_spawn == null || baseEvent.m_spawn.Count == 0) { return null; } GameObject val = prefabList.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val == (Object)null) { return null; } SpawnData val2 = baseEvent.m_spawn[0].Clone(); val2.m_name = "event_" + eventName + "_" + name; val2.m_prefab = val; val2.m_spawnChance = chance; val2.m_maxSpawned = amount; val2.m_groupSizeMax = amount; val2.m_groupSizeMin = 1; val2.m_maxLevel = maxLvl; val2.m_spawnAtDay = true; val2.m_spawnAtNight = true; val2.m_huntPlayer = true; val2.m_canSpawnCloseToPlayer = true; val2.m_maxAltitude = 2000f; val2.m_minAltitude = 0f; val2.m_biome = (Biome)895; val2.m_biomeArea = (BiomeArea)3; return val2; } private void eventAddPoisonSkeleton(RandomEvent randomEvent) { SpawnData val = randomEvent.m_spawn[1].Clone(); val.m_name = "event_Skeleton_Poison"; val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "Skeleton_Poison"); val.m_spawnChance = 50f; val.m_maxSpawned = 2; randomEvent.m_spawn.Add(val); } private void eventAddSkeletonSpawner(RandomEvent randomEvent) { SpawnData val = randomEvent.m_spawn[0].Clone(); val.m_name = "event_BonePileSpawner"; val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "BonePileSpawner"); val.m_spawnChance = 10f; val.m_maxSpawned = 1; val.m_levelUpMinCenterDistance = 1E+14f; val.m_maxLevel = 0; val.m_groupSizeMax = 1; randomEvent.m_spawn.Add(val); } private void eventAddDraugrSpawner(RandomEvent randomEvent) { SpawnData val = randomEvent.m_spawn[0].Clone(); val.m_name = "event_Spawner_DraugrPile"; val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "Spawner_DraugrPile"); val.m_spawnChance = 10f; val.m_maxSpawned = 1; val.m_levelUpMinCenterDistance = 1E+14f; val.m_maxLevel = 0; val.m_groupSizeMax = 1; randomEvent.m_spawn.Add(val); } private void eventAddGreydwarfSpawner(RandomEvent randomEvent) { SpawnData val = randomEvent.m_spawn[0].Clone(); val.m_name = "event_Spawner_GreydwarfNest"; val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "Spawner_GreydwarfNest"); val.m_spawnChance = 5f; val.m_maxSpawned = 1; val.m_levelUpMinCenterDistance = 1E+14f; val.m_maxLevel = 0; val.m_groupSizeMax = 1; randomEvent.m_spawn.Add(val); } private void eventSurtlingSpawner(RandomEvent randomEvent) { SpawnData val = randomEvent.m_spawn[0].Clone(); val.m_name = "event_SurtlingSpawner"; val.m_prefab = prefabList.Find((GameObject x) => ((Object)x).name == "SurtlingSpawner"); val.m_spawnChance = 10f; val.m_maxSpawned = 1; val.m_levelUpMinCenterDistance = 1E+14f; val.m_maxLevel = 0; val.m_groupSizeMax = 1; randomEvent.m_spawn.Add(val); } } public class LocationBuilder { public static List<string> vanillaLocationsYouEdit = new List<string> { "TrollCave02" }; public List<ZoneLocation> locations = new List<ZoneLocation>(); public void editLocations(List<ZoneLocation> locationList) { if (locationList == null || locationList.Count == 0) { Debug.LogWarning((object)"LOCATION LIST IS EMPTY!"); } else { DeepNorthSetup(locationList); } } public void DebugMe(List<ZoneLocation> locationList) { for (int i = 0; i < locationList.Count; i++) { GetLog(locationList[i], i); } } private ZoneLocation FindLocation(List<ZoneLocation> locationList, string name) { return locationList.Find((ZoneLocation x) => x.m_prefabName == name); } private void DeepNorthSetup(List<ZoneLocation> locationList) { Debug.Log((object)(Launch.projectName + ": Preparing Locations for Deep North")); HashSet<string> hashSet = new HashSet<string> { "TrollCave02" }; foreach (string item in hashSet) { ZoneLocation val = FindLocation(locationList, item); if (val != null) { editLocation(val); } else { Debug.LogWarning((object)("Location not found: " + item)); } } } private void editLocation(ZoneLocation zoneLocation) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) _ = zoneLocation.m_prefab; if (0 == 0) { zoneLocation.m_enable = true; zoneLocation.m_biome = (Biome)68; zoneLocation.m_minDistanceFromSimilar = 44f; zoneLocation.m_minAltitude = 3f; zoneLocation.m_minDistance = 0f; zoneLocation.m_maxDistance = 0f; string prefabName = zoneLocation.m_prefabName; if (prefabName != "Mistlands_Harbour1") { zoneLocation.m_maxAltitude = 3000f; } if (prefabName == "MountainWell1") { zoneLocation.m_minAltitude = 0f; zoneLocation.m_maxAltitude = 3000f; } } } private void changeBiomeSetup(List<ZoneLocation> locationList) { Debug.Log((object)(Launch.projectName + ": Editing Locations for world spawn")); } private void ApplyToLocations(List<ZoneLocation> locationList, string[] names, Action<ZoneLocation> action) { for (int i = 0; i < names.Length; i++) { ZoneLocation val = FindLocation(locationList, names[i]); if (val != null) { action(val); } else { Debug.LogWarning((object)("Location not found: " + names[i])); } } } private void locationEditSpecial(ZoneLocation loc) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) string prefabName = loc.m_prefabName; if (IsIn(prefabName, "SunkenCrypt", "SunkenCrypt4")) { loc.m_biome = (Biome)2; loc.m_minDistance = 600f; loc.m_maxDistance = 10500f; loc.m_minAltitude = 0f; loc.m_maxAltitude = 100000f; loc.m_iconPlaced = true; loc.m_quantity *= 2; loc.m_prioritized = true; loc.m_biomeArea = (BiomeArea)3; loc.m_minDistanceFromSimilar = 33f; return; } if (prefabName == "MountainCave02") { loc.m_biome = (Biome)68; loc.m_minAltitude = 20f; loc.m_maxAltitude = 100000f; loc.m_minDistance = 600f; loc.m_quantity *= 3; loc.m_maxDistance = 10500f; loc.m_minDistanceFromSimilar = 33f; return; } if (IsIn(prefabName, "Crypt3", "Crypt4")) { loc.m_biome = (Biome)607; loc.m_minDistance = 600f; loc.m_maxDistance = 10500f; loc.m_minAltitude = 15f; loc.m_maxAltitude = 100000f; loc.m_minDistanceFromSimilar = 33f; loc.m_quantity *= 2; return; } if (prefabName == "WoodFarm1") { loc.m_biome = (Biome)95; loc.m_minDistance = 300f; loc.m_maxDistance = 10500f; loc.m_minAltitude = 10f; loc.m_maxAltitude = 10000f; loc.m_quantity *= 2; return; } if (prefabName == "WoodVillage1") { loc.m_biome = (Biome)95; loc.m_minDistance = 1500f; loc.m_maxDistance = 10500f; loc.m_minAltitude = 10f; loc.m_maxAltitude = 10000f; loc.m_quantity *= 2; return; } if (IsIn(prefabName, "GoblinCamp2", "StoneTower1", "StoneTower3", "Ruin3")) { loc.m_biome = (Biome)25; loc.m_minDistance = 2500f; loc.m_maxDistance = 10500f; loc.m_minAltitude = 10f; loc.m_maxAltitude = 100000f; return; } switch (prefabName) { case "Eikthyrnir": loc.m_group = "bossarena"; loc.m_minDistance = 300f; loc.m_maxDistance = 800f; loc.m_quantity = 30; loc.m_unique = true; break; case "GDKing": loc.m_group = "bossarena"; loc.m_minDistanceFromSimilar = 1000f; loc.m_minDistance = 1000f; loc.m_maxDistance = 2500f; loc.m_quantity = 10; loc.m_unique = true; break; case "Bonemass": loc.m_group = "bossarena"; loc.m_minDistanceFromSimilar = 1000f; loc.m_minDistance = 1500f; loc.m_maxDistance = 3500f; loc.m_quantity = 10; loc.m_unique = true; break; case "Dragonqueen": loc.m_group = "bossarena"; loc.m_minDistanceFromSimilar = 1000f; loc.m_minDistance = 300f; loc.m_maxDistance = 5000f; loc.m_quantity = 10; loc.m_unique = true; break; case "GoblinKing": loc.m_group = "bossarena"; loc.m_minDistanceFromSimilar = 1000f; loc.m_minDistance = 3000f; loc.m_maxDistance = 7000f; loc.m_quantity = 10; loc.m_unique = true; break; case "Mistlands_DvergrBossEntrance1": loc.m_group = "bossarena"; loc.m_minDistanceFromSimilar = 1000f; loc.m_minDistance = 5500f; loc.m_maxDistance = 8500f; loc.m_quantity = 10; loc.m_unique = true; break; case "FaderLocation": loc.m_group = "bossarena"; loc.m_quantity = 10; loc.m_unique = true; break; } } private void biomeSwap(ZoneLocation zoneLocation) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_037e: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_03e8: Unknown result type (might be due to invalid IL or missing references) string prefabName = zoneLocation.m_prefabName; Biome biome = (Biome)11; Biome biome2 = (Biome)514; Biome biome3 = (Biome)9; Biome biome4 = (Biome)48; Biome biome5 = (Biome)95; Biome biome6 = (Biome)68; Biome biome7 = (Biome)94; Biome biome8 = (Biome)596; Biome biome9 = (Biome)86; if (IsIn(prefabName, "Ruin1", "Ruin2")) { editLocationParams(zoneLocation, biome); zoneLocation.m_minAltitude = 5f; zoneLocation.m_maxAltitude = 150f; } if (IsIn(prefabName, "TarPit1", "TarPit2", "TarPit3")) { editLocationParams(zoneLocation, biome4); zoneLocation.m_minAltitude = 5f; zoneLocation.m_maxAltitude = 70f; return; } switch (prefabName) { case "SwampWell1": editLocationParams(zoneLocation, biome9); return; case "ShipSetting01": editLocationParams(zoneLocation, biome5); zoneLocation.m_minAltitude = -5f; zoneLocation.m_maxAltitude = 25f; return; case "MountainGrave01": editLocationParams(zoneLocation, biome8); return; case "InfestedTree01": editLocationParams(zoneLocation, biome2); return; } if (IsIn(prefabName, "AbandonedLogCabin02", "AbandonedLogCabin03", "AbandonedLogCabin04")) { editLocationParams(zoneLocation, biome6, 1000); } else if (prefabName == "StoneTowerRuins03") { editLocationParams(zoneLocation, biome3); } else if (IsIn(prefabName, "WoodHouse1", "WoodHouse2", "WoodHouse3", "WoodHouse4", "WoodHouse5", "WoodHouse6", "WoodHouse7", "WoodHouse8", "WoodHouse9", "WoodHouse10", "WoodHouse11", "WoodHouse12", "WoodHouse13", "StoneHouse3", "StoneHouse4")) { editLocationParams(zoneLocation, biome5); } else if (IsIn(prefabName, "SwampRuin1", "SwampRuin2", "StoneTowerRuins04")) { editLocationParams(zoneLocation, biome7); } else if (prefabName == "StoneTowerRuins05") { editLocationParams(zoneLocation, biome9, 1000); } else if (IsIn(prefabName, "StoneTowerRuins06", "StoneTowerRuins07", "StoneTowerRuins08", "StoneTowerRuins09", "StoneTowerRuins10", "StoneWall1", "StoneWall2")) { editLocationParams(zoneLocation, biome5, 1000); } else if (IsIn(prefabName, "StoneHenge6", "StoneHouse5_heath")) { editLocationParams(zoneLocation, biome5, 1500); } else if (IsIn(prefabName, "SwampHut1", "SwampHut2", "SwampHut3", "SwampHut5")) { editLocationParams(zoneLocation, biome7, 1500); } else if (prefabName == "SwampHut4") { editLocationParams(zoneLocation, biome7); } } private void editLocationParams(ZoneLocation zoneLocation, Biome biome, int minDistance = 500) { //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) zoneLocation.m_enable = true; zoneLocation.m_biome = biome; zoneLocation.m_quantity *= 2; zoneLocation.m_minAltitude = ((zoneLocation.m_minAltitude == 0f) ? 10f : zoneLocation.m_minAltitude); zoneLocation.m_maxAltitude = ((zoneLocation.m_maxAltitude == 0f) ? 3000f : zoneLocation.m_maxAltitude); zoneLocation.m_minDistance = minDistance; zoneLocation.m_maxDistance = 0f; } private bool IsIn(string name, params string[] options) { for (int i = 0; i < options.Length; i++) { if (name == options[i]) { return true; } } return false; } private static void GetLog(ZoneLocation location, int counter) { //IL_006d: Unknown result type (might be due to invalid IL or missing references) if (location == null) { Debug.LogWarning((object)("Skipping id: " + counter)); return; } Debug.LogWarning((object)("ID: " + counter)); Debug.LogWarning((object)("m_name: " + ((location.m_name != null) ? location.m_name.ToString() : ""))); _ = location.m_prefab; Debug.LogWarning((object)("m_prefab: " + ((object)location.m_prefab).ToString())); Debug.LogWarning((object)("m_prefabName: " + ((location.m_prefabName != null) ? location.m_prefabName.ToString() : ""))); Debug.LogWarning((object)("m_quantity: " + location.m_quantity)); Debug.LogWarning((object)("m_groupMax: " + location.m_groupMax.ToString())); Debug.LogWarning((object)("m_group: " + ((location.m_group != null) ? location.m_group.ToString() : ""))); Debug.LogWarning((object)("m_biome: " + ((object)(Biome)(ref location.m_biome)).ToString())); Debug.LogWarning((object)("m_biomeArea: " + ((object)(BiomeArea)(ref location.m_biomeArea)).ToString())); Debug.LogWarning((object)("m_enable: " + location.m_enable)); Debug.LogWarning((object)("m_unique: " + location.m_unique)); Debug.LogWarning((object)("m_clearArea: " + location.m_clearArea)); Debug.LogWarning((object)("m_centerFirst: " + location.m_centerFirst)); Debug.LogWarning((object)("m_iconAlways: " + location.m_iconAlways)); Debug.LogWarning((object)("m_iconPlaced: " + location.m_iconPlaced)); Debug.LogWarning((object)("m_surroundBetterThanAverage: " + location.m_surroundBetterThanAverage)); Debug.LogWarning((object)("m_surroundCheckDistance: " + location.m_surroundCheckDistance)); Debug.LogWarning((object)("m_surroundCheckLayers: " + location.m_surroundCheckLayers)); Debug.LogWarning((object)("m_surroundCheckVegetation: " + location.m_surroundCheckVegetation)); Debug.LogWarning((object)("m_prioritized: " + location.m_prioritized)); Debug.LogWarning((object)("m_randomRotation: " + location.m_randomRotation)); Debug.LogWarning((object)("m_slopeRotation: " + location.m_slopeRotation)); Debug.LogWarning((object)("m_minDistance: " + location.m_minDistance)); Debug.LogWarning((object)("m_maxDistance: " + location.m_maxDistance)); Debug.LogWarning((object)("m_minDistanceFromSimilar: " + location.m_minDistanceFromSimilar)); Debug.LogWarning((object)("m_maxDistanceFromSimilar: " + location.m_maxDistanceFromSimilar)); Debug.LogWarning((object)("m_maximumVegetation: " + location.m_maximumVegetation)); Debug.LogWarning((object)("m_interiorRadius: " + location.m_interiorRadius)); Debug.LogWarning((object)("m_exteriorRadius: " + location.m_exteriorRadius)); Debug.LogWarning((object)("m_foldout: " + location.m_foldout)); Debug.LogWarning((object)("m_snapToWater: " + location.m_snapToWater)); Debug.LogWarning((object)("m_inForest: " + location.m_inForest)); Debug.LogWarning((object)("m_minAltitude: " + location.m_minAltitude)); Debug.LogWarning((object)("m_maxAltitude: " + location.m_maxAltitude)); Debug.LogWarning((object)("m_minTerrainDelta: " + location.m_minTerrainDelta)); Debug.LogWarning((object)("m_maxTerrainDelta: " + location.m_maxTerrainDelta)); Debug.LogWarning((object)("m_forestTresholdMin: " + location.m_forestTresholdMin)); Debug.LogWarning((object)("m_forestTresholdMax: " + location.m_forestTresholdMax)); } public static AssetID AssetIDFromObject(Object obj) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) int instanceID = obj.GetInstanceID(); return new AssetID(1u, 1u, 1u, (uint)instanceID); } private ZoneLocation setupLocation(GameObject obj, ZoneLocation location, int amount, int minAlt, int maxAlt, int minDistance, int maxDistance, float similarDistance, float minDelta, float maxDelta, float forestMin, float forestMax, string group = "") { location.m_quantity = amount; location.m_group = group; location.m_minAltitude = minAlt; location.m_maxAltitude = maxAlt; location.m_minDistance = minDistance; location.m_maxDistance = maxDistance; location.m_minDistanceFromSimilar = similarDistance; location.m_minTerrainDelta = (minDelta = 0f); location.m_maxTerrainDelta = maxDelta; location.m_interiorRadius = obj.GetComponent<Location>().m_interiorRadius; location.m_exteriorRadius = obj.GetComponent<Location>().m_exteriorRadius; location.m_forestTresholdMin = (forestMin = -1f); location.m_forestTresholdMax = forestMax; return location; } } public class SpawnerBuilder { public List<SpawnData> newSpawners = new List<SpawnData>(); private string[] ingore = new string[0]; public string[] monsterNames = new string[27] { "Deathsquito", "Serpent", "Boar", "Deer", "Wraith", "Wolf", "Leech", "Fenring", "Troll", "DraugrElite", "Draugr", "Skeleton", "Seeker", "SeekerDrone", "Surtling", "Dverger", "Greydwarf", "Greyling", "GreydwarfElite", "Greydwarf Shaman", "Neck", "Hatchling", "Abomination", "StoneGolem", "BonemawSerpent", "projectile_ashlandmeteor", "Lox" }; private SpawnData FindSpawnData(SpawnSystemList spawnSystemList, string name, string spawnerName = "") { if (spawnerName != "") { SpawnData val = spawnSystemList.m_spawners.Find((SpawnData x) => x.m_name == spawnerName); if (val != null) { return val; } } return spawnSystemList.m_spawners.Find((SpawnData x) => ((Object)x.m_prefab).name == name); } public void editExistingSpawners(SpawnSystemList spawnSystemList, List<GameObject> znetPrefabs) { newSpawners.Clear(); string[] array = monsterNames; foreach (string monsterName in array) { List<SpawnData> list = spawnSystemList.m_spawners.FindAll((SpawnData x) => ((Object)x.m_prefab).name == monsterName); if (list.Count <= 0) { continue; } foreach (SpawnData item in list) { editMonsterSpawner(item, znetPrefabs); } } if (newSpawners.Count > 0) { spawnSystemList.m_spawners.AddRange(newSpawners); } } public void createSpawners(SpawnSystemList spawnSystemList, ModResourceLoader modResourceLoader, List<GameObject> znetPrefabs) { editExistingSpawners(spawnSystemList, znetPrefabs); newSpawners.Clear(); foreach (GameObject monster in modResourceLoader.monsterPrefabs) { List<SpawnData> list = spawnSystemList.m_spawners.FindAll((SpawnData x) => ((Object)x.m_prefab).name == ((Object)monster).name); if (list.Count == 0 && !ingore.Contains(((Object)monster).name)) { setupMonster(monster, spawnSystemList, znetPrefabs); } } if (newSpawners.Count > 0) { spawnSystemList.m_spawners.AddRange(newSpawners); } } private SpawnData editSpawnerData(SpawnData spawnData, string spawnerName = "", int maxSpawned = -99, int minlevel = 1, int maxlevel = 3, int spawnChance = 25, bool spawnDay = true, bool spawnNight = true, int groupMin = -99, int groupMax = -99, int groupRadius = -99) { if (spawnData == null) { return spawnData; } spawnData.m_name = ((spawnerName != "") ? spawnerName : spawnData.m_name); spawnData.m_maxSpawned = ((maxSpawned != -99) ? maxSpawned : spawnData.m_maxSpawned); spawnData.m_minLevel = ((minlevel != -99) ? minlevel : spawnData.m_minLevel); spawnData.m_maxLevel = ((maxlevel != -99) ? maxlevel : spawnData.m_maxLevel); spawnData.m_spawnChance = ((spawnChance != -99) ? ((float)spawnChance) : spawnData.m_spawnChance); spawnData.m_spawnAtDay = spawnDay; spawnData.m_spawnAtNight = spawnNight; spawnData.m_groupSizeMin = ((groupMin != -99) ? groupMin : spawnData.m_groupSizeMin); spawnData.m_groupSizeMax = ((groupMax != -99) ? groupMax : spawnData.m_groupSizeMax); spawnData.m_groupRadius = ((groupRadius != -99) ? ((float)groupRadius) : spawnData.m_groupRadius); return spawnData; } private void generateSapplings(SpawnData spawnData, List<GameObject> znetPrefabs) { //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) string[] array = new string[5] { "FirTree_Sapling", "Oak_Sapling", "PineTree_Sapling", "Beech_Sapling", "Birch_Sapling" }; string[] array2 = array; foreach (string name in array2) { GameObject val = znetPrefabs.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { SpawnData val2 = spawnData.Clone(); val2.m_name = name; val2.m_spawnInterval = 9000f; val2.m_maxSpawned = 1; val2.m_spawnAtDay = true; val2.m_spawnChance = 11f; val2.m_maxLevel = 0; val2.m_levelUpMinCenterDistance = 9999999f; val2.m_inLava = false; val2.m_canSpawnCloseToPlayer = false; val2.m_huntPlayer = false; val2.m_spawnAtNight = false; val2.m_biome = (Biome)1; if (name == "FirTree_Sapling" || name == "PineTree_Sapling") { val2.m_biome = (Biome)8; } if (name == "Birch_Sapling" || name == "Beech_Sapling" || name == "Oak") { val2.m_biome = (Biome)1; } val2.m_prefab = val; newSpawners.Add(val2); } } } private void editMonsterSpawner(SpawnData spawnData, List<GameObject> znetPrefabs) { //IL_11e3: Unknown result type (might be due to invalid IL or missing references) //IL_0d75: Unknown result type (might be due to invalid IL or missing references) //IL_17d3: Unknown result type (might be due to invalid IL or missing references) //IL_1950: Unknown result type (might be due to invalid IL or missing references) //IL_19fc: Unknown result type (might be due to invalid IL or missing references) //IL_16e6: Unknown result type (might be due to invalid IL or missing references) //IL_1475: Unknown result type (might be due to invalid IL or missing references) //IL_14da: Unknown result type (might be due to invalid IL or missing references) //IL_11a8: Unknown result type (might be due to invalid IL or missing references) //IL_07cc: Unknown result type (might be due to invalid IL or missing references) //IL_0560: Unknown result type (might be due to invalid IL or missing references) //IL_06a7: Unknown result type (might be due to invalid IL or missing references) //IL_1820: Unknown result type (might be due to invalid IL or missing references) //IL_1827: Unknown result type (might be due to invalid IL or missing references) //IL_09ca: Unknown result type (might be due to invalid IL or missing references) //IL_1390: Unknown result type (might be due to invalid IL or missing references) //IL_05ee: Unknown result type (might be due to invalid IL or missing references) spawnData.m_maxLevel = 3; spawnData.m_enabled = true; spawnData.m_levelUpMinCenterDistance = 400f; spawnData.m_groupSizeMin = 1; if ((Object)(object)spawnData.m_prefab == (Object)null) { return; } switch (spawnData.m_name) { case "Troll": { spawnData.m_maxLevel = 4; spawnData.m_biome = (Biome)68; spawnData.m_spawnAtNight = false; spawnData.m_spawnInterval /= 2f; GameObject val24 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "TrollAshlands"); if ((Object)(object)val24 != (Object)null) { SpawnData val25 = spawnData.Clone(); val25.m_name = "TrollAshlands"; val25.m_spawnInterval = 2000f; val25.m_maxSpawned = 2; val25.m_spawnAtDay = true; val25.m_spawnAtNight = true; val25.m_biome = (Biome)32; val25.m_prefab = val24; newSpawners.Add(val25); } break; } case "Boar": { spawnData.m_spawnChance = 66f; spawnData.m_maxSpawned = 3; spawnData.m_maxLevel = 4; spawnData.m_spawnAtNight = false; generateSapplings(spawnData, znetPrefabs); GameObject val26 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Boar_piggy"); if ((Object)(object)val26 != (Object)null) { SpawnData val27 = spawnData.Clone(); val27.m_name = "Piggy"; val27.m_spawnInterval = 2000f; val27.m_maxSpawned = 2; val27.m_spawnAtDay = true; val27.m_spawnAtNight = false; val27.m_biome = (Biome)1; val27.m_prefab = val26; newSpawners.Add(val27); } break; } case "deer": spawnData.m_spawnChance = 55f; spawnData.m_maxSpawned = 3; spawnData.m_maxLevel = 4; spawnData.m_spawnAtNight = false; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; break; case "Neck lakes": spawnData.m_spawnChance = 44f; spawnData.m_maxSpawned = 4; spawnData.m_maxLevel = 4; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; break; case "Neck IN RAIN": spawnData.m_maxLevel = 5; spawnData.m_spawnChance = 66f; spawnData.m_maxSpawned = 5; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; spawnData.m_requiredEnvironments.Add("Mist"); spawnData.m_requiredEnvironments.Add("DeepForest Mist"); spawnData.m_requiredEnvironments.Add("Mistlands_rain"); spawnData.m_requiredEnvironments.Add("Bonemass"); spawnData.m_groupSizeMax = spawnData.m_maxSpawned; break; case "Greyling": { spawnData.m_maxSpawned = 2; spawnData.m_spawnChance = 33f; spawnData.m_spawnAtDay = true; spawnData.m_spawnAtNight = false; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; spawnData.m_biome = (Biome)9; SpawnData val12 = spawnData.Clone(); val12.m_name = "Greyling Weather"; val12.m_maxLevel = 5; val12.m_requiredEnvironments.Add("Rain"); val12.m_requiredEnvironments.Add("LightRain"); val12.m_requiredEnvironments.Add("ThunderStorm"); val12.m_requiredEnvironments.Add("Mist"); val12.m_requiredEnvironments.Add("DeepForest Mist"); val12.m_requiredEnvironments.Add("Mistlands_rain"); val12.m_requiredEnvironments.Add("Bonemass"); val12.m_spawnAtDay = true; val12.m_spawnAtNight = false; val12.m_groupSizeMax = val12.m_maxSpawned; newSpawners.Add(val12); SpawnData val13 = spawnData.Clone(); val13.m_name = "Greyling Night"; val13.m_maxLevel = 5; val13.m_spawnAtDay = false; val13.m_spawnAtNight = true; val13.m_groupSizeMax = val13.m_maxSpawned; newSpawners.Add(val13); SpawnData val14 = spawnData.Clone(); val14.m_name = "Greydwarf Spawner after Elder/Weather"; val14.m_maxLevel = 1; val14.m_spawnChance = 5f; val14.m_maxSpawned = 1; val14.m_prefab = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Spawner_GreydwarfNest"); val14.m_requiredGlobalKey = "defeated_gdking"; val14.m_requiredEnvironments.Add("Rain"); val14.m_requiredEnvironments.Add("LightRain"); val14.m_requiredEnvironments.Add("ThunderStorm"); val14.m_requiredEnvironments.Add("Mist"); val14.m_requiredEnvironments.Add("DeepForest Mist"); val14.m_requiredEnvironments.Add("Mistlands_rain"); val14.m_requiredEnvironments.Add("Bonemass"); val14.m_spawnAtDay = false; val14.m_spawnAtNight = true; val14.m_biome = (Biome)9; val14.m_groupSizeMax = val14.m_maxSpawned; newSpawners.Add(val14); break; } case "Greydwarf": spawnData.m_maxSpawned = 2; spawnData.m_spawnChance = 25f; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; break; case "greydwarf DAY": spawnData.m_maxSpawned = 2; spawnData.m_spawnChance = 25f; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; break; case "greydwarf After boss": { spawnData.m_maxSpawned = 1; spawnData.m_spawnChance = 20f; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; spawnData.m_maxLevel = 4; SpawnData val9 = spawnData.Clone(); val9.m_name = "greydwarf Elder"; val9.m_requiredGlobalKey = "defeated_gdking"; val9.m_maxLevel = 5; val9.m_maxSpawned = 1; val9.m_groupSizeMax = val9.m_maxSpawned; newSpawners.Add(val9); break; } case "greydwarf Night": { spawnData.m_maxSpawned = 3; spawnData.m_spawnChance = 66f; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; spawnData.m_maxLevel = 4; SpawnData val8 = spawnData.Clone(); val8.m_name = "greydwarf Night Elder"; val8.m_requiredGlobalKey = "defeated_gdking"; val8.m_maxLevel = 5; val8.m_maxSpawned = 1; val8.m_groupSizeMax = val8.m_maxSpawned; newSpawners.Add(val8); break; } case "greydwarf ELITE": spawnData.m_spawnChance = 33f; spawnData.m_spawnAtDay = false; spawnData.m_spawnAtNight = true; spawnData.m_maxLevel = 4; spawnData.m_levelUpMinCenterDistance = 1000f; break; case "Greydwarf Elite": { spawnData.m_spawnChance = 33f; spawnData.m_maxLevel = 5; spawnData.m_spawnAtDay = true; spawnData.m_spawnAtNight = true; spawnData.m_levelUpMinCenterDistance = 1000f; SpawnData val5 = spawnData.Clone(); val5.m_name = "Greydwarf Elite Weather"; val5.m_maxLevel = 5; val5.m_maxSpawned = 1; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; val5.m_requiredEnvironments.Add("Mist"); val5.m_requiredEnvironments.Add("DeepForest Mist"); val5.m_requiredEnvironments.Add("Bonemass"); val5.m_groupSizeMax = val5.m_maxSpawned; newSpawners.Add(val5); break; } case "Greydwarf Shaman": { spawnData.m_spawnChance = 33f; if (spawnData.m_requiredGlobalKey == "defeated_gdking") { spawnData.m_maxLevel = 5; spawnData.m_maxSpawned = 1; spawnData.m_spawnAtDay = true; break; } SpawnData val35 = spawnData.Clone(); val35.m_name = "Greydwarf Shaman Weather"; val35.m_maxLevel = 5; val35.m_maxSpawned = 1; val35.m_spawnAtDay = true; val35.m_requiredEnvironments.Add("Rain"); val35.m_requiredEnvironments.Add("LightRain"); val35.m_requiredEnvironments.Add("ThunderStorm"); val35.m_requiredEnvironments.Add("Mist"); val35.m_requiredEnvironments.Add("DeepForest Mist"); val35.m_requiredEnvironments.Add("Mistlands_rain"); val35.m_requiredEnvironments.Add("Bonemass"); val35.m_groupSizeMax = spawnData.m_maxSpawned; newSpawners.Add(val35); break; } case "Hatchling": { spawnData.m_maxSpawned = 2; spawnData.m_groupSizeMin = 1; spawnData.m_spawnChance = 20f; spawnData.m_levelUpMinCenterDistance = 1500f; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; SpawnData val36 = spawnData.Clone(); val36.m_name = "Hatchling_DeepNorth"; val36.m_minAltitude = 5f; val36.m_maxLevel = 6; val36.m_groundOffset = 30f; val36.m_biome = (Biome)64; val36.m_groupSizeMax = val36.m_maxSpawned; newSpawners.Add(val36); break; } case "Deathsquito": spawnData.m_maxSpawned = 2; spawnData.m_groupSizeMin = 1; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; break; case "Marsh draugr": spawnData.m_maxSpawned = 3; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; break; case "Skeleton": spawnData.m_maxSpawned = 2; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; break; case "Draugr Elite": { GameObject val15 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Skeleton_Poison"); if ((Object)(object)val15 != (Object)null) { SpawnData val16 = spawnData.Clone(); val16.m_name = "Skeleton_Poison swamps"; val16.m_levelUpMinCenterDistance = 1000f; val16.m_maxSpawned = 2; val16.m_spawnChance = 11f; val16.m_spawnAtDay = true; val16.m_spawnAtNight = true; val16.m_prefab = val15; newSpawners.Add(val16); } break; } case "Wolf": if (spawnData.m_spawnAtNight) { spawnData.m_maxSpawned = 4; spawnData.m_groupSizeMin = 2; spawnData.m_groupSizeMax = 4; spawnData.m_spawnChance = 33f; GameObject val37 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Ulv"); if ((Object)(object)val37 != (Object)null) { SpawnData val38 = spawnData.Clone(); val38.m_name = "Ulv Night"; val38.m_levelUpMinCenterDistance = 4000f; val38.m_maxLevel = 2; val38.m_spawnInterval = 240f; val38.m_spawnChance = 11f; val38.m_maxSpawned = 2; val38.m_prefab = val37; val38.m_groupSizeMin = 1; val38.m_groupSizeMax = val38.m_maxSpawned; newSpawners.Add(val38); } GameObject val39 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Wolf_cub"); if ((Object)(object)val39 != (Object)null) { SpawnData val40 = spawnData.Clone(); val40.m_name = "wolf cub"; val40.m_maxLevel = 1; val40.m_spawnChance = 11f; val40.m_maxSpawned = 2; val40.m_prefab = val39; val40.m_groupSizeMin = 1; val40.m_spawnAtNight = false; val40.m_groupSizeMax = val40.m_maxSpawned; newSpawners.Add(val40); } } break; case "Lox": { GameObject val33 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Lox_Calf"); if ((Object)(object)val33 != (Object)null) { SpawnData val34 = spawnData.Clone(); val34.m_name = "wolf cub"; val34.m_maxLevel = 1; val34.m_spawnChance = 11f; val34.m_maxSpawned = 2; val34.m_prefab = val33; val34.m_spawnAtNight = false; val34.m_groupSizeMin = 1; val34.m_groupSizeMax = val34.m_maxSpawned; newSpawners.Add(val34); } break; } case "Wraith": { spawnData.m_maxLevel = 2; spawnData.m_groupSizeMin = 1; spawnData.m_groupSizeMax = 2; spawnData.m_spawnChance = 22f; spawnData.m_levelUpMinCenterDistance = 3000f; GameObject val30 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Ghost"); if ((Object)(object)val30 != (Object)null) { SpawnData val31 = spawnData.Clone(); val31.m_name = "Ghost swamps"; val31.m_levelUpMinCenterDistance = 1000f; val31.m_maxSpawned = 2; val31.m_spawnInterval = 300f; val31.m_spawnChance = 33f; val31.m_spawnAtDay = true; val31.m_spawnAtNight = true; val31.m_prefab = val30; newSpawners.Add(val31); SpawnData val32 = val31.Clone(); val32.m_name = "Ghost Forest"; val32.m_maxSpawned = 1; val32.m_spawnChance = 11f; val32.m_spawnAtDay = false; val32.m_groupSizeMax = 1; val32.m_biome = (Biome)10; newSpawners.Add(val32); } break; } case "Leech": { spawnData.m_maxLevel = 4; spawnData.m_maxSpawned = 5; spawnData.m_groupSizeMin = 1; spawnData.m_spawnChance = 33f; spawnData.m_biome = (Biome)2; spawnData.m_spawnAtDay = true; spawnData.m_spawnAtNight = false; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; SpawnData val28 = spawnData.Clone(); val28.m_name = "Leech Weather"; val28.m_maxLevel = 5; val28.m_levelUpMinCenterDistance = 1000f; val28.m_maxSpawned = 2; val28.m_groupSizeMax = val28.m_maxSpawned; val28.m_spawnAtDay = true; val28.m_spawnAtNight = true; val28.m_requiredEnvironments.Add("Rain"); val28.m_requiredEnvironments.Add("ThunderStorm"); val28.m_requiredEnvironments.Add("DeepForest Mist"); val28.m_requiredEnvironments.Add("Mistlands_rain"); val28.m_requiredEnvironments.Add("Bonemass"); val28.m_groupSizeMax = val28.m_maxSpawned; newSpawners.Add(val28); SpawnData val29 = spawnData.Clone(); val29.m_name = "Leech Night"; val29.m_levelUpMinCenterDistance = 1000f; val29.m_maxLevel = 5; val29.m_maxSpawned = 3; val29.m_groupSizeMax = val29.m_maxSpawned; val29.m_spawnAtDay = false; val29.m_spawnAtNight = true; val29.m_groupSizeMax = val28.m_maxSpawned; newSpawners.Add(val28); break; } case "Surtling": { spawnData.m_maxLevel = 4; spawnData.m_inLava = true; spawnData.m_maxSpawned = 2; spawnData.m_minAltitude = 1f; spawnData.m_minOceanDepth = 0f; spawnData.m_maxOceanDepth = 0f; spawnData.m_spawnInterval = 33f; spawnData.m_spawnChance = 33f; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; spawnData.m_biome = (Biome)32; GameObject val22 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "SurtlingSpawner_bal"); if ((Object)(object)val22 != (Object)null) { SpawnData val23 = spawnData.Clone(); val23.m_name = "Surtling Spawner"; val23.m_levelUpMinCenterDistance = 100000000f; val23.m_maxLevel = 0; val23.m_canSpawnCloseToPlayer = false; val23.m_spawnInterval = 360f; val23.m_spawnChance = 5f; val23.m_maxSpawned = 1; val23.m_spawnAtDay = false; val23.m_spawnAtNight = true; val23.m_prefab = val22; val23.m_groupSizeMax = val23.m_maxSpawned; newSpawners.Add(val23); } break; } case "StoneGolem": { spawnData.m_maxLevel = 3; spawnData.m_maxSpawned = 1; spawnData.m_spawnChance = 33f; spawnData.m_biome = (Biome)68; spawnData.m_minAltitude = 77f; spawnData.m_levelUpMinCenterDistance = 2500f; spawnData.m_groupSizeMax = 1; SpawnData val21 = spawnData.Clone(); val21.m_name = "Golem Deep North"; val21.m_maxLevel = 5; val21.m_maxSpawned = 1; val21.m_spawnAtDay = true; val21.m_spawnAtNight = true; val21.m_minAltitude = 22f; val21.m_biome = (Biome)4; val21.m_groupSizeMax = val21.m_maxSpawned; newSpawners.Add(val21); break; } case "Serpent": { spawnData.m_maxLevel = 1; spawnData.m_maxSpawned = 1; spawnData.m_spawnChance = 11f; spawnData.m_spawnInterval = 1500f; SpawnData val17 = spawnData.Clone(); val17.m_name = "Serpent after Elder"; val17.m_maxLevel = 2; val17.m_minLevel = 1; val17.m_maxSpawned = 1; val17.m_minDistanceFromCenter = 1500f; val17.m_spawnChance = 22f; val17.m_levelUpMinCenterDistance = 2000f; val17.m_requiredGlobalKey = "defeated_gdking"; newSpawners.Add(val17); SpawnData val18 = spawnData.Clone(); val18.m_name = "Serpent after Bonemass"; val18.m_maxLevel = 3; val18.m_minLevel = 1; val18.m_maxSpawned = 1; val18.m_minDistanceFromCenter = 2000f; val18.m_spawnChance = 22f; val18.m_levelUpMinCenterDistance = 2000f; val18.m_requiredGlobalKey = "defeated_bonemass"; newSpawners.Add(val18); SpawnData val19 = spawnData.Clone(); val19.m_name = "Serpent after Moder"; val19.m_maxLevel = 4; val19.m_minLevel = 2; val19.m_maxSpawned = 1; val19.m_minDistanceFromCenter = 3000f; val19.m_spawnChance = 22f; val19.m_levelUpMinCenterDistance = 4000f; val19.m_requiredGlobalKey = "defeated_dragon"; newSpawners.Add(val19); SpawnData val20 = spawnData.Clone(); val20.m_name = "Serpent after Yagluth"; val20.m_minDistanceFromCenter = 3500f; val20.m_maxLevel = 5; val20.m_minLevel = 2; val20.m_maxSpawned = 1; val20.m_spawnChance = 22f; val20.m_levelUpMinCenterDistance = 4000f; val20.m_requiredGlobalKey = "defeated_goblinking"; newSpawners.Add(val20); break; } case "Fenring": { spawnData.m_maxSpawned = 2; spawnData.m_spawnChance = 11f; spawnData.m_biome = (Biome)68; spawnData.m_minAltitude = 22f; spawnData.m_spawnInterval = 300f; spawnData.m_levelUpMinCenterDistance = 2000f; spawnData.m_groupSizeMax = spawnData.m_maxSpawned; GameObject val10 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "Fenring_Cultist"); if ((Object)(object)val10 != (Object)null) { SpawnData val11 = spawnData.Clone(); val11.m_name = "Fenring Cultist"; val11.m_levelUpMinCenterDistance = 3000f; val11.m_maxLevel = 3; val11.m_maxSpawned = 1; val11.m_spawnInterval = 400f; val11.m_spawnChance = 11f; val11.m_spawnAtDay = false; val11.m_spawnAtNight = true; val11.m_prefab = val10; val11.m_groupSizeMax = val11.m_maxSpawned; newSpawners.Add(val11); } break; } case "Abomination": spawnData.m_biome = (Biome)2; spawnData.m_maxSpawned = 2; spawnData.m_spawnChance = 22f; spawnData.m_maxAltitude = 55f; spawnData.m_groupSizeMax = 1; spawnData.m_requiredGlobalKey = "defeated_gdking"; break; case "Seeker defeated queen other biomes": { spawnData.m_maxLevel = 3; spawnData.m_maxSpawned = 3; spawnData.m_biome = (Biome)512; spawnData.m_biomeArea = (BiomeArea)3; GameObject val6 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "SeekerEgg_bal"); if ((Object)(object)val6 != (Object)null) { SpawnData val7 = spawnData.Clone(); val7.m_name = "SeekerEgg after queen"; val7.m_maxLevel = 0; val7.m_levelUpMinCenterDistance = 9999999f; val7.m_inLava = false; val7.m_canSpawnCloseToPlayer = false; val7.m_maxSpawned = 10; val7.m_spawnInterval = 400f; val7.m_spawnChance = 11f; val7.m_spawnAtDay = false; val7.m_spawnAtNight = true; val7.m_prefab = val6; val7.m_groupSizeMin = 3; val7.m_groupSizeMax = val7.m_maxSpawned; newSpawners.Add(val7); } break; } case "Meteor": spawnData.m_maxSpawned = 10; spawnData.m_requiredEnvironments.Add("Ashlands_ashrain"); spawnData.m_requiredEnvironments.Add("Ashlands_storm"); spawnData.m_requiredEnvironments.Add("Ashlands_CinderRain"); spawnData.m_requiredEnvironments.Add("GoblinKing"); spawnData.m_biome = (Biome)48; spawnData.m_requiredGlobalKey = "defeated_dragon"; break; case "Bonemaw Serpent": spawnData.m_maxSpawned = 3; spawnData.m_spawnChance = 22f; break; case "Dverger": { spawnData.m_spawnChance = 15f; spawnData.m_spawnInterval = 500f; spawnData.m_maxLevel = 4; SpawnData val = spawnData.Clone(); val.m_requiredGlobalKey = "defeated_qeen"; val.m_requiredEnvironments.Add("Mist"); val.m_requiredEnvironments.Add("DeepForest Mist"); val.m_requiredEnvironments.Add("Mistlands_rain"); val.m_requiredEnvironments.Add("Mistlands_thunder"); val.m_biome = (Biome)543; val.m_name = "Dverger after Queen"; val.m_levelUpMinCenterDistance = 3000f; val.m_maxSpawned = 2; val.m_groupSizeMin = 1; val.m_groupSizeMax = 1; newSpawners.Add(val); GameObject val2 = znetPrefabs.Find((GameObject x) => ((Object)x).name == "DvergerMage"); if ((Object)(object)val2 != (Object)null) { SpawnData val3 = spawnData.Clone(); val3.m_name = "Dverger Mage"; val3.m_levelUpMinCenterDistance = 3000f; val3.m_maxSpawned = 2; val3.m_prefab = val2; val3.m_groupSizeMin = 1; val3.m_groupSizeMax = 1; newSpawners.Add(val3); SpawnData val4 = val.Clone(); val4.m_name = "Dverger Mage after Queen"; val4.m_levelUpMinCenterDistance = 3000f; val4.m_maxSpawned = 2; val4.m_prefab = val2; val4.m_groupSizeMin = 1; val4.m_groupSizeMax = 1; newSpawners.Add(val4); } break; } } } private void setupMonster(GameObject monster, SpawnSystemList spawnSystemList, List<GameObject> znetPrefabs) { //IL_225d: Unknown result type (might be due to invalid IL or missing references) //IL_22d1: Unknown result type (might be due to invalid IL or missing references) //IL_21cf: Unknown result type (might be due to invalid IL or missing references) //IL_2ca7: Unknown result type (might be due to invalid IL or missing references) //IL_1037: Unknown result type (might be due to invalid IL or missing references) //IL_10b0: Unknown result type (might be due to invalid IL or missing references) //IL_148a: Unknown result type (might be due to invalid IL or missing references) //IL_14e6: Unknown result type (might be due to invalid IL or missing references) //IL_1204: Unknown result type (might be due to invalid IL or missing references) //IL_1859: Unknown result type (might be due to invalid IL or missing references) //IL_2d1f: Unknown result type (might be due to invalid IL or missing references) //IL_0b4a: Unknown result type (might be due to invalid IL or missing references) //IL_353c: Unknown result type (might be due to invalid IL or missing references) //IL_2b76: Unknown result type (might be due to invalid IL or missing references) //IL_1e06: Unknown result type (might be due to invalid IL or missing references) //IL_2027: Unknown result type (might be due to invalid IL or missing references) //IL_334c: Unknown result type (might be due to invalid IL or missing references) //IL_24e6: Unknown result type (might be due to invalid IL or missing references) //IL_2531: Unknown result type (might be due to invalid IL or missing references) //IL_3221: Unknown result type (might be due to invalid IL or missing references) //IL_1bbd: Unknown result type (might be due to invalid IL or missing references) //IL_3401: Unknown result type (might be due to invalid IL or missing references) //IL_35b3: Unknown result type (might be due to invalid IL or missing references) //IL_3605: Unknown result type (might be due to invalid IL or missing references) //IL_36c1: Unknown result type (might be due to invalid IL or missing references) //IL_1c17: Unknown result type (might be due to invalid IL or missing references) //IL_3102: Unknown result type (might be due to invalid IL or missing references) //IL_129f: Unknown result type (might be due to invalid IL or missing references) //IL_2a5d: Unknown result type (might be due to invalid IL or missing references) //IL_328c: Unknown result type (might be due to invalid IL or missing references) //IL_2c18: Unknown result type (might be due to invalid IL or missing references) //IL_239d: Unknown result type (might be due to invalid IL or missing references) //IL_0a8e: Unknown result type (might be due to invalid IL or missing references) //IL_0d05: Unknown result type (might be due to invalid IL or missing references) //IL_1f6e: Unknown result type (might be due to invalid IL or missing references) //IL_0f0d: Unknown resul