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