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 BalrondBiomes;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using LitJson2;
using UnityEngine;
using UnityEngine.Audio;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("BalrondConstructions")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BalrondConstructions")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("cde312a0-cf19-4264-8616-e1c74774beed")]
[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]
public class OfferingStation : MonoBehaviour, Hoverable, Interactable
{
public string m_name = "Offer station";
public string m_useItemText = "Use";
public ItemDrop m_requiredItem;
public int m_requiredItemAmount = 1;
public string m_statusEffectName = "";
public bool m_spawnStatusEffect = true;
public GameObject m_aoePrefab;
public GameObject m_spawnPoint = null;
public bool m_spawnItem = false;
public ItemDrop m_itemPrefab;
public Transform m_itemSpawnPoint;
public string m_setGlobalKey = "";
public float m_SpawnDelay = 2f;
public float m_spawnOffset = 0f;
[Header("Effects")]
public EffectList m_fuelAddedEffects = new EffectList();
public EffectList m_spawnStartEffects = new EffectList();
public EffectList m_spawnFinishEffects = new EffectList();
public GameObject m_enabledObject;
public GameObject m_disabledObject;
public GameObject m_haveFuelObject;
public Transform m_roofCheckPoint;
public bool m_requiresRoof = false;
public bool m_canBeOutside = true;
private float m_updateCoverTimer;
public Switch m_addWoodSwitch;
public bool m_useFuel = false;
public ItemDrop m_fuelItem;
public int m_maxFuel = 0;
public float m_secPerFuel = 2000f;
public bool m_requireFire = false;
public Transform[] m_fireCheckPoints;
public float m_fireCheckRadius = 0.25f;
private bool m_blockedSmoke;
public SmokeSpawner m_smokeSpawner;
public Animator[] m_animators;
private ZNetView m_nview;
private string m_requiredItemName;
private void Awake()
{
m_nview = ((Component)this).GetComponent<ZNetView>();
if ((Object)(object)m_nview == (Object)null || m_nview.GetZDO() == null)
{
ZLog.Log((object)"Missing ZnetView Component");
return;
}
validateAoe();
m_requiredItemName = m_requiredItem.m_itemData.m_shared.m_name;
if (Object.op_Implicit((Object)(object)m_addWoodSwitch))
{
}
((MonoBehaviour)this).InvokeRepeating("UpdateOfferingStation", 1f, 1f);
}
private bool validateAoe()
{
if ((Object)(object)m_aoePrefab.GetComponent<Aoe>() == (Object)null)
{
ZLog.Log((object)"m_aoePrefab Missing Aoe Component");
return false;
}
return true;
}
public string GetHoverText()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
if (!PrivateArea.CheckAccess(((Component)this).transform.position, 0f, false, false))
{
return Localization.instance.Localize(m_name + "\n$piece_noaccess");
}
return Localization.instance.Localize(m_name + "\n[<color=yellow><b>1-8</b></color>] \n" + m_useItemText) + " " + Localization.instance.Localize(((Component)m_requiredItem).GetComponent<ItemDrop>().m_itemData.m_shared.m_name) + " amount: " + m_requiredItemAmount;
}
public string GetHoverName()
{
return m_name;
}
public bool Interact(Humanoid user, bool hold, bool alt)
{
//IL_001e: 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_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
if (hold || IsSpawnQueued())
{
return false;
}
if (!PrivateArea.CheckAccess(((Component)this).transform.position, 0f, true, false))
{
return true;
}
if (m_blockedSmoke)
{
((Character)user).Message((MessageType)2, "Smoke blocked", 0, (Sprite)null);
return false;
}
if (!IsActive())
{
return false;
}
if (Spawn(GetSpawnPosition()))
{
((Character)user).Message((MessageType)2, "$msg_offerdone", 0, (Sprite)null);
if (Object.op_Implicit((Object)(object)m_itemSpawnPoint))
{
m_fuelAddedEffects.Create(m_itemSpawnPoint.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1);
}
}
return true;
}
public bool UseItem(Humanoid user, ItemData item)
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
//IL_0245: Unknown result type (might be due to invalid IL or missing references)
//IL_0250: Unknown result type (might be due to invalid IL or missing references)
if (IsSpawnQueued())
{
return true;
}
if (!PrivateArea.CheckAccess(((Component)this).transform.position, 0f, true, false))
{
return true;
}
if (m_blockedSmoke)
{
((Character)user).Message((MessageType)2, "Smoke blocked", 0, (Sprite)null);
return false;
}
if (!IsActive())
{
return false;
}
if ((Object)(object)m_requiredItem == (Object)null)
{
return false;
}
if (item.m_shared.m_name == m_requiredItemName)
{
int num = user.GetInventory().CountItems(m_requiredItemName, -1, true);
if (num < m_requiredItemAmount)
{
((Character)user).Message((MessageType)2, "$msg_incompleteoffering: " + Localization.instance.Localize(m_requiredItemName) + " " + num + " / " + m_requiredItemAmount, 0, (Sprite)null);
return true;
}
if (m_spawnStatusEffect && (Object)(object)m_aoePrefab == (Object)null)
{
Debug.LogWarning((object)"Missing Status Effect Prefab[AoE]");
return true;
}
if (m_spawnItem && (Object)(object)m_itemPrefab == (Object)null)
{
Debug.LogWarning((object)"Missing ItemDrop Prefab");
return true;
}
bool flag = false;
if (((Object)(object)m_aoePrefab != (Object)null && m_spawnStatusEffect) || ((Object)(object)m_itemPrefab != (Object)null && m_spawnItem))
{
flag = Spawn(GetSpawnPosition());
}
if (flag)
{
user.GetInventory().RemoveItem(item.m_shared.m_name, m_requiredItemAmount, -1, true);
((Character)user).ShowRemovedMessage(m_requiredItem.m_itemData, m_requiredItemAmount);
((Character)user).Message((MessageType)2, "$msg_offerdone", 0, (Sprite)null);
if (Object.op_Implicit((Object)(object)m_itemSpawnPoint))
{
m_fuelAddedEffects.Create(m_itemSpawnPoint.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1);
}
if (!string.IsNullOrEmpty(m_setGlobalKey))
{
ZoneSystem.instance.SetGlobalKey(m_setGlobalKey);
}
}
return flag;
}
((Character)user).Message((MessageType)2, "$msg_offerwrong", 0, (Sprite)null);
return true;
}
public bool IsActive()
{
return (m_maxFuel == 0 || (double)GetFuel() > 0.0) && !m_blockedSmoke;
}
private void UpdateGameObjectState()
{
bool flag = IsActive();
m_enabledObject.SetActive(flag);
if (Object.op_Implicit((Object)(object)m_disabledObject))
{
m_disabledObject.SetActive(!flag);
}
if (Object.op_Implicit((Object)(object)m_haveFuelObject))
{
m_haveFuelObject.SetActive((double)GetFuel() > 0.0);
}
SetAnimation(flag);
}
private void SetAnimation(bool active)
{
Animator[] animators = m_animators;
foreach (Animator val in animators)
{
if (((Component)val).gameObject.activeInHierarchy)
{
val.SetBool("active", active);
val.SetFloat("activef", active ? 1f : 0f);
}
}
}
private float GetDeltaTime()
{
DateTime time = ZNet.instance.GetTime();
DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("StartTime", time.Ticks));
double totalSeconds = (time - dateTime).TotalSeconds;
m_nview.GetZDO().Set("StartTime", time.Ticks);
return (float)totalSeconds;
}
private void UpdateFuel(float dt)
{
if (m_useFuel)
{
float num = dt / m_secPerFuel;
float num2 = GetFuel() - num;
if ((double)num2 < 0.0)
{
num2 = 0f;
}
SetFuel(num2);
}
}
private void RPC_AddFuel(long sender)
{
//IL_0034: 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)
if (m_nview.IsOwner())
{
SetFuel(GetFuel() + 1f);
m_fuelAddedEffects.Create(((Component)this).transform.position, ((Component)this).transform.rotation, ((Component)this).transform, 1f, -1);
}
}
private void UpdateOfferingStation()
{
if (m_nview.IsValid())
{
}
}
private Vector3 GetSpawnPosition()
{
//IL_0026: 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)
return ((Object)(object)m_spawnPoint != (Object)null) ? m_spawnPoint.transform.position : ((Component)this).transform.position;
}
private bool Spawn(Vector3 point)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
m_spawnStartEffects.Create(point, Quaternion.identity, (Transform)null, 1f, -1);
((MonoBehaviour)this).Invoke("DelayedSpawn", m_SpawnDelay);
return true;
}
private void UpdateSmoke()
{
if ((Object)(object)m_smokeSpawner != (Object)null)
{
m_blockedSmoke = m_smokeSpawner.IsBlocked();
}
else
{
m_blockedSmoke = false;
}
}
private float GetFuel()
{
return m_nview.GetZDO().GetFloat("fuel", 0f);
}
private void SetFuel(float fuel)
{
m_nview.GetZDO().Set("fuel", fuel);
}
private bool OnAddFuel(Switch sw, Humanoid user, ItemData item)
{
if (!m_useFuel)
{
((Character)user).Message((MessageType)2, "No fuel required", 0, (Sprite)null);
return false;
}
if (item != null && item.m_shared.m_name != m_fuelItem.m_itemData.m_shared.m_name)
{
((Character)user).Message((MessageType)2, "$msg_wrongitem", 0, (Sprite)null);
return false;
}
if (!user.GetInventory().HaveItem(m_fuelItem.m_itemData.m_shared.m_name, true))
{
((Character)user).Message((MessageType)2, "$msg_donthaveany " + m_fuelItem.m_itemData.m_shared.m_name, 0, (Sprite)null);
return false;
}
((Character)user).Message((MessageType)2, "$msg_added " + m_fuelItem.m_itemData.m_shared.m_name, 0, (Sprite)null);
user.GetInventory().RemoveItem(m_fuelItem.m_itemData.m_shared.m_name, 1, -1, true);
m_nview.InvokeRPC("AddFuel", Array.Empty<object>());
return true;
}
private bool IsSpawnQueued()
{
return ((MonoBehaviour)this).IsInvoking("DelayedSpawn");
}
private void DelayedSpawn()
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
if (m_spawnStatusEffect)
{
Aoe component = Object.Instantiate<GameObject>(m_aoePrefab, GetSpawnPosition(), Quaternion.identity).GetComponent<Aoe>();
component.m_statusEffect = m_statusEffectName;
}
if (m_spawnItem)
{
Object.Instantiate<GameObject>(((Component)m_itemPrefab).gameObject, GetSpawnPosition(), Quaternion.identity);
}
m_spawnFinishEffects.Create(GetSpawnPosition(), Quaternion.identity, (Transform)null, 1f, -1);
}
}
namespace BalrondBiomes
{
internal class BuildPieceList
{
public static string[] buildPieces = new string[343]
{
"ashwood_decowall_divider_bal", "ashwood_roof26_bal", "ashwood_roof45_bal", "ashwood_roof_icorner_45_bal", "ashwood_roof_icorner_left45_bal", "ashwood_roof_icorner_right45_bal", "ashwood_roof_ocorner_45_bal", "ashwood_roof_top45_bal", "ashwood_roof_top_quarter_bal", "ashwood_wall_beam_64_bal",
"bg_stake_wall_bal", "bigstonepillar4m_bal", "bigstonepillar4m_reverse_bal", "blackmarble_1x1_enforced_bal", "blackmarble_2x2x1_bal", "blackmarble_2x2_enforced_bal", "blackmarble_beam_bal", "blackmarble_columnbase_bal", "blackmarble_columntop_bal", "blackmarble_creep_slope_inverted_2x2x1_bal",
"blackmarble_floor4m_bal", "blackmarble_gate_bal", "blackmarble_head_big01_bal", "blackmarble_head_big02_bal", "blackmarble_long_stair_bal", "blackmarble_pole_bal", "blackmarble_roof27_bal", "blackmarble_slope1x2_bal", "blackmarble_slope1x2_inverted_bal", "blackmarble_stair_corner_bal",
"blackmarble_stair_corner_left_bal", "blackmarble_stair_inner_bal", "blackmarble_stair_outer_bal", "blackmarble_stone_ladder_bal", "blackmarble_Wall_Window_2x2_bal", "BoneFragmentsFloorl1_bal", "BoneFragmentsFloorl2_bal", "bone_fence_bal", "bridge_end_bal", "bridge_floor_bal",
"bronze_gate_left_bal", "bush_roof_bal", "bush_roof_icorner_bal", "bush_roof_ocorner_bal", "bush_roof_top_bal", "CheeseBlock_bal", "chitin_wall_spikes_bal", "ClayBeam_bal", "ClayCube_bal", "ClayPole_bal",
"clayr_arch_bal", "ClayWall_bal", "ClayWall_half_bal", "ClayWall_quarter_bal", "Clay_arch45_bal", "clay_celling_bal", "clay_floor_2x2_bal", "clay_slab_wall4x4_bal", "clay_stair_bal", "coppermarble_1x1_enforced_bal",
"coppermarble_head1_bal", "coppermarble_head2_bal", "copper_dropgate_large_bal", "Copper_Wall_Spikes_bal", "corewood_gate_large_bal", "core_wood_roof26_bal", "core_wood_stair_bal", "core_wood_wall_2_bal", "core_wood_wall_4_bal", "core_wood_wall_corner_bal",
"core_wood_wall_deco2_bal", "core_wood_wall_deco4_bal", "wood_wall_log1m_bal", "wood_log_64_bal", "wood_pole_log1m_bal", "crystal_tile_floor_2x2_bal", "crystal_wall_2x2_bal", "darkwoodwall1m_bal", "darkwoodwall_bal", "darkwood_beam_26_deco_bal",
"darkwood_beam_45_deco_bal", "darkwood_beam_64_bal", "darkwood_beam_deco_bal", "darkwood_gate_large_bal", "darkwood_pole_deco_bal", "darkwood_roof64_bal", "darkwood_roof_quarter_26_bal", "darkwood_roof_quarter_45_bal", "darkwood_roof_top_cap2_bal", "darkwood_roof_top_cap_bal",
"darkwood_roof_top_center_bal", "darkwood_roof_top_half_45_bal", "darkwood_roof_top_half_bal", "decowall_bal", "decr_wall_half_bal", "dverger_gate_bal", "dvergr_secretdoor_bal", "emberwood_pillar2_bal", "emberwood_pillar4_bal", "fineood_wall_roof_26_bal",
"finewood_arch_bottom_bal", "finewood_arch_top_bal", "finewood_beam2_bal", "finewood_beam4_bal", "finewood_beam_26_bal", "finewood_beam_45_bal", "finewood_beam_64_bal", "finewood_beam_bal", "finewood_floor1x1_bal", "finewood_floor2x2_bal",
"finewood_frame_bal", "finewood_pole2_bal", "finewood_pole4_bal", "finewood_pole_bal", "finewood_stair_bal", "finewood_wall_1x1_bal", "finewood_wall_1x2_bal", "finewood_wall_2x1_bal", "finewood_wall_2x2_bal", "finewood_wall_arch_bal",
"finewood_wall_cross_26_bal", "finewood_wall_cross_45_bal", "finewood_wall_cross_64_bal", "finewood_wall_roof_26_upsidedown_bal", "finewood_wall_roof_45_bal", "finewood_wall_roof_45_upsidedown_bal", "finewood_wall_roof_64_bal", "finewood_wall_roof_64_upsidedown_bal", "flametalchain_beam2_26_bal", "flametalchain_beam2_45_bal",
"flametalchain_beam2_bal", "flametalchain_pole2_bal", "flametalchain_hook_bal", "flametalchain_hook_top_bal", "flametalchain_hook_wall_bal", "gabro_arch4m_bal", "gabro_barkwood_beam2_bal", "gabro_barkwood_beam_bal", "gabro_barkwood_pole2_bal", "gabro_barkwood_pole_26_bal",
"gabro_barkwood_pole_45_bal", "gabro_barkwood_pole_bal", "gabro_bark_pillar_empty2m_bal", "gabro_bark_pillar_empty2m_reverse_bal", "gabro_bark_pillar_empty2m_side_bal", "gabro_beam4_bal", "gabro_clolumnbase_bal", "gabro_columntop_bal", "gabro_column_bal", "gabro_counter1x1_bal",
"gabro_counter_corner_bal", "gabro_floor1x1_bal", "gabro_floor2x2_bal", "gabro_floor4x4_bal", "gabro_floor_slope26_bal", "gabro_floor_slope45_bal", "gabro_oriel4m_bal", "gabro_pass_1x3_bal", "gabro_pole4_bal", "gabro_stair_bal",
"gabro_wall2x1_bal", "gabro_wall2x2_bal", "gabro_wall2x4_bal", "gabro_wall4x4_bal", "gabro_wall_1x1_thin_bal", "gabro_window1m_bal", "gabro_window2m_bal", "gabro_window_deco2m_bal", "gabro_window_glass_3m_bal", "gabro_window_large2m_bal",
"gabro_window_round2m_bal", "gabro_window_triangle2m_bal", "giant_metal_gate_bal", "grausten_round_column_bal", "grausten_stair_corner_bal", "grausten_stair_corner_left_bal", "grausten_stair_inner_bal", "grausten_stair_outer_bal", "hardwood_door_bal", "hexwood_floor_4m_bal",
"hexwood_floor_half_4m_bal", "iron_beam1_bal", "iron_beam_26_bal", "iron_beam_45_bal", "iron_beam_64_bal", "iron_beam_bal", "iron_pole1_bal", "iron_pole_bal", "iron_trim1_bal", "iron_trim_1_90_bal",
"iron_trim_26_bal", "iron_trim_45_bal", "iron_trim_90_bal", "iron_trim_bal", "leather_roof_bal", "metalbar_1x2_bal", "obsidian_tile_floor_2x2_bal", "obsidian_wall_2x2_bal", "piece_grausten_pillar4_tip2_bal", "piece_grausten_pillar4_tip3_bal",
"piece_grausten_pillar4_tip_bal", "piece_grausten_pillarbase_twisted_bal", "piece_grausten_pillarbase_twisted_reversed_bal", "piece_grausten_reinforced_wall_4x6_bal", "piece_grausten_roof_45_top_bal", "piece_grausten_twisted_pillarbase_bal", "piece_grausten_twisted_pillarbase_small_bal", "piece_grausten_twisted_pillartop_small_bal", "piece_grausten_twisted_pillar_small_bal", "piece_grausten_twist_arch_bal",
"piece_hardwoodwall2m_bal", "piece_hardwood_floor2x2_bal", "Piece_hardwood_pillarbase_medium_bal", "Piece_hardwood_pillarbase_small_bal", "Piece_hardwood_pillarbase_tapered_bal", "Piece_hardwood_pillarbase_tapered_inverted_bal", "Piece_hardwood_pillarbeam_medium_bal", "Piece_hardwood_pillarbeam_small_bal", "Piece_hardwood_pillar_arch_bal", "Piece_hardwood_pillar_arch_small_bal",
"piece_hardwood_roof_45_arch_bal", "piece_hardwood_roof_45_arch_corner2_bal", "piece_hardwood_roof_45_arch_corner_bal", "piece_hardwood_roof_45_bal", "piece_hardwood_roof_45_corner2_bal", "piece_hardwood_roof_45_corner_bal", "piece_hardwood_roof_45_top_bal", "piece_iron_fence_bal", "piece_iron_fence_small_bal", "piece_sharpstakes_big_bal",
"plate_gate_bal", "rune_floor_bal", "spiked_copper_gate_left_bal", "spiked_copper_gate_right_bal", "stonemoss_tile_floor_2x2_bal", "stone_1x1_enforced_bal", "stone_arch4m_bal", "stone_beam2_bal", "stone_beam_bal", "stone_celling_bal",
"stone_circle_arch_bal", "stone_floor4m_bal", "stone_floor_slope45_bal", "stone_floor_slope_bal", "stone_floor_triangle_bal", "stone_floor_trianlge_1x2m_bal", "stone_floor_trianlge_1x2m_reverse_bal", "stone_frame_bal", "stone_long_stair_bal", "stone_pillar6m1_bal",
"stone_pillar6m3_bal", "stone_platform_bal", "stone_pole2_bal", "stone_pole_bal", "stone_railing_bal", "stone_roof27_bal", "stone_secretdoor_bal", "stone_slab_wall4x4_bal", "stone_stair_corner_bal", "stone_stair_corner_left_bal",
"stone_stair_inner_bal", "stone_stair_outer_bal", "stone_stair_railing_bal", "stone_stair_railing_left_bal", "stone_stair_railing_right_bal", "stone_stepladder_bal", "stone_trim1_90_bal", "stone_trim1_bal", "stone_trim_26_bal", "stone_trim_45_bal",
"stone_trim_90_bal", "stone_trim_bal", "stone_Wall_2x2_bal", "stone_window_bal", "tiledwood_floor_2x2_bal", "vigvisir_floor_bal", "woodiron_beam_64_bal", "woodwall4m_bal", "woodwall_1m_bal", "woodwall_deco_bal",
"wood_arch_bal", "wood_beam4_bal", "wood_beam_64_bal", "wood_double_wall_roof_26_bal", "wood_dragon_dark_bal", "wood_fence_bal", "wood_floor4x4_bal", "wood_frame_decorative_bal", "wood_frame_window_bal", "wood_frame_window_half_bal",
"wood_gate_cage_bal", "wood_gate_large_bal", "wood_hidden_gate_bal", "wood_iron_gate_large_bal", "wood_iron_log_beam4_bal", "wood_iron_log_pole4_bal", "wood_ledge_bal", "wood_long_stair_bal", "wood_pillar4_bal", "wood_plot_1m_bal",
"wood_plot_3m_bal", "wood_plot_gate_bal", "wood_pole4_bal", "wood_railing_bal", "wood_ramp_bal", "wood_raven_bal", "wood_roof64_bal", "wood_roof64_corner_bottom_bal", "wood_roof64_corner_top_bal", "wood_roof64_icorner_bottom_bal",
"wood_roof_flat_quarter_bal", "wood_roof_quad_top64_bal", "wood_roof_top_64_bal", "wood_roof_top_cap2_45_bal", "wood_roof_top_cap2_bal", "wood_roof_top_cap_45_bal", "wood_roof_top_cap_bal", "wood_roof_top_center_45_bal", "wood_roof_top_center_bal", "wood_roof_top_half_45_bal",
"wood_roof_top_half_bal", "wood_roof_top_quarter_45_bal", "wood_roof_top_quarter_bal", "wood_spiralstair_bal", "wood_spiralstair_right_bal", "wood_trim1_90_bal", "wood_trim1_bal", "wood_trim_26_bal", "wood_trim_45_bal", "wood_trim_64_bal",
"wood_trim_90_bal", "wood_trim_bal", "wood_wall_cross_64_bal", "wood_wall_roof_26to45gap2_bal", "wood_wall_roof_26to45gap3_bal", "wood_wall_roof_26to45_bal", "wood_wall_roof_64_bal", "wood_wall_roof_upsidedown_64_bal", "wood_window2m_bal", "wood_windowiron_bal",
"woven_fence_bal", "Yggdrasil_wood_block_bal", "Yggdrasil_wood_pillar_bal"
};
}
}
namespace BalrondConstructions
{
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]
public class BalrondConverter : MonoBehaviour
{
[Serializable]
public class ItemConversion
{
public ItemDrop m_from;
public ItemDrop m_to;
public int m_count;
}
public string m_name = "BalrondConverter";
public string prefabName = null;
public string m_addOreTooltip = "Add Non-Base Wood";
public string m_emptyOreTooltip = "Pick up wood";
public Switch m_addWoodSwitch;
public Switch m_addOreSwitch;
public Switch m_emptyOreSwitch;
public Transform m_outputPoint;
public Transform m_roofCheckPoint;
public GameObject m_enabledObject;
public GameObject m_disabledObject;
public GameObject m_haveFuelObject;
public GameObject m_haveOreObject;
public GameObject m_noOreObject;
public Animator[] m_animators;
public ItemDrop m_fuelItem;
public int m_maxOre = 1;
public int m_maxFuel = 1;
public float m_fuelPerProduct = 0f;
public float m_secPerProduct = 30f;
public bool m_spawnStack = true;
public bool m_requiresRoof = false;
public Windmill m_windmill;
public SmokeSpawner m_smokeSpawner;
public float m_addOreAnimationDuration;
public List<ItemConversion> m_conversion = new List<ItemConversion>();
public EffectList m_oreAddedEffects = new EffectList();
public EffectList m_fuelAddedEffects = new EffectList();
public EffectList m_produceEffects = new EffectList();
private ZNetView m_nview;
private bool m_haveRoof;
private bool m_blockedSmoke;
private float m_addedOreTime = -1000f;
private StringBuilder m_sb = new StringBuilder();
private void Awake()
{
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Expected O, but got Unknown
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Expected O, but got Unknown
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Expected O, but got Unknown
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Expected O, but got Unknown
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Expected O, but got Unknown
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Expected O, but got Unknown
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Expected O, but got Unknown
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Expected O, but got Unknown
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Expected O, but got Unknown
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_0133: Expected O, but got Unknown
m_nview = ((Component)this).GetComponent<ZNetView>();
if (!((Object)(object)m_nview == (Object)null) && m_nview.GetZDO() != null)
{
if (Object.op_Implicit((Object)(object)m_addOreSwitch))
{
Switch addOreSwitch = m_addOreSwitch;
addOreSwitch.m_onUse = (Callback)Delegate.Combine((Delegate?)(object)addOreSwitch.m_onUse, (Delegate?)new Callback(OnAddWood));
m_addOreSwitch.m_onHover = new TooltipCallback(OnHoverAddWood);
}
if (Object.op_Implicit((Object)(object)m_addWoodSwitch))
{
Switch addWoodSwitch = m_addWoodSwitch;
addWoodSwitch.m_onUse = (Callback)Delegate.Combine((Delegate?)(object)addWoodSwitch.m_onUse, (Delegate?)new Callback(OnAddPowerSource));
m_addWoodSwitch.m_onHover = new TooltipCallback(OnHoverAddPowerSource);
}
if (Object.op_Implicit((Object)(object)m_emptyOreSwitch))
{
Switch emptyOreSwitch = m_emptyOreSwitch;
emptyOreSwitch.m_onUse = (Callback)Delegate.Combine((Delegate?)(object)emptyOreSwitch.m_onUse, (Delegate?)new Callback(OnEmpty));
Switch emptyOreSwitch2 = m_emptyOreSwitch;
emptyOreSwitch2.m_onHover = (TooltipCallback)Delegate.Combine((Delegate?)(object)emptyOreSwitch2.m_onHover, (Delegate?)new TooltipCallback(OnHoverEmptyOre));
}
m_nview.Register<string>("AddWood", (Action<long, string>)RPC_AddWood);
m_nview.Register("AddPowerSource", (Action<long>)RPC_AddPowerSource);
m_nview.Register("ConverterEmptyProcessed", (Action<long>)RPC_ConverterEmptyProcessed);
WearNTear component = ((Component)this).GetComponent<WearNTear>();
if (Object.op_Implicit((Object)(object)component))
{
component.m_onDestroyed = (Action)Delegate.Combine(component.m_onDestroyed, new Action(OnDestroyed));
}
((MonoBehaviour)this).InvokeRepeating("UpdateBalrondConverter", 1f, 1f);
}
}
private void DropAllItems()
{
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
SpawnProcessed();
if ((Object)(object)m_fuelItem != (Object)null)
{
float @float = m_nview.GetZDO().GetFloat(ZDOVars.s_fuel, 0f);
if (@float > 1f)
{
for (int i = 0; i < (int)@float; i++)
{
Object.Instantiate<GameObject>(((Component)m_fuelItem).gameObject, ((Component)this).transform.position + Vector3.up + Random.insideUnitSphere * 0.3f, Quaternion.Euler(0f, (float)Random.Range(0, 360), 0f));
}
}
}
while (GetQueueSize() > 0)
{
string queuedOre = GetQueuedOre();
RemoveOneOre();
ItemConversion itemConversion = GetItemConversion(queuedOre);
if (itemConversion != null)
{
Vector3 val = ((Component)this).transform.position + Vector3.up + Random.insideUnitSphere * 0.3f;
Quaternion val2 = Quaternion.Euler(0f, (float)Random.Range(0, 360), 0f);
Object.Instantiate<GameObject>(((Component)itemConversion.m_from).gameObject, val, val2);
}
}
}
private void OnDestroyed()
{
if (m_nview.IsOwner())
{
DropAllItems();
}
}
private bool IsItemAllowed(ItemData item)
{
return IsItemAllowed(((Object)item.m_dropPrefab).name);
}
private bool IsItemAllowed(string itemName)
{
foreach (ItemConversion item in m_conversion)
{
if (((Object)((Component)item.m_from).gameObject).name == itemName)
{
return true;
}
}
return false;
}
private ItemData FindCookableItem(Inventory inventory)
{
foreach (ItemConversion item2 in m_conversion)
{
ItemData item = inventory.GetItem(((Object)((Component)item2.m_from).gameObject).name, -1, true);
if (item != null)
{
return item;
}
}
return null;
}
private bool OnAddWood(Switch sw, Humanoid user, ItemData item)
{
if (item == null)
{
item = FindCookableItem(user.GetInventory());
if (item == null)
{
((Character)user).Message((MessageType)2, "$msg_noprocessableitems", 0, (Sprite)null);
return false;
}
}
if (!IsItemAllowed(((Object)item.m_dropPrefab).name))
{
((Character)user).Message((MessageType)2, "$msg_wontwork", 0, (Sprite)null);
return false;
}
ZLog.Log((object)("trying to add " + item.m_shared.m_name));
if (GetQueueSize() >= m_maxOre)
{
((Character)user).Message((MessageType)2, "$msg_itsfull", 0, (Sprite)null);
return false;
}
((Character)user).Message((MessageType)2, "$msg_added " + item.m_shared.m_name, 0, (Sprite)null);
user.GetInventory().RemoveItem(item, 1);
m_nview.InvokeRPC("AddWood", new object[1] { ((Object)item.m_dropPrefab).name });
m_addedOreTime = Time.time;
if ((double)m_addOreAnimationDuration > 0.0)
{
SetAnimation(active: true);
}
return true;
}
private float GetBakeTimer()
{
return m_nview.GetZDO().GetFloat(ZDOVars.s_bakeTimer, 0f);
}
private void SetBakeTimer(float t)
{
m_nview.GetZDO().Set(ZDOVars.s_bakeTimer, t);
}
private float GetFuel()
{
return m_nview.GetZDO().GetFloat(ZDOVars.s_fuel, 0f);
}
private void SetFuel(float fuel)
{
m_nview.GetZDO().Set(ZDOVars.s_fuel, fuel);
}
private int GetQueueSize()
{
return m_nview.GetZDO().GetInt(ZDOVars.s_queued, 0);
}
private void RPC_AddWood(long sender, string name)
{
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
if (m_nview.IsOwner())
{
if (!IsItemAllowed(name))
{
ZLog.Log((object)("Item not allowed " + name));
return;
}
QueueOre(name);
m_oreAddedEffects.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1);
ZLog.Log((object)("Added ore " + name));
}
}
private void QueueOre(string name)
{
int queueSize = GetQueueSize();
m_nview.GetZDO().Set("item" + queueSize, name);
m_nview.GetZDO().Set(ZDOVars.s_queued, queueSize + 1, false);
}
private string GetQueuedOre()
{
return (GetQueueSize() == 0) ? "" : m_nview.GetZDO().GetString(ZDOVars.s_item0, "");
}
private void RemoveOneOre()
{
int queueSize = GetQueueSize();
if (queueSize != 0)
{
for (int i = 0; i < queueSize; i++)
{
string @string = m_nview.GetZDO().GetString("item" + (i + 1), "");
m_nview.GetZDO().Set("item" + i, @string);
}
m_nview.GetZDO().Set(ZDOVars.s_queued, queueSize - 1, false);
}
}
private bool OnEmpty(Switch sw, Humanoid user, ItemData item)
{
if (GetProcessedQueueSize() <= 0)
{
return false;
}
m_nview.InvokeRPC("ConverterEmptyProcessed", Array.Empty<object>());
return true;
}
private void RPC_ConverterEmptyProcessed(long sender)
{
if (m_nview.IsOwner())
{
SpawnProcessed();
}
}
private bool OnAddPowerSource(Switch sw, Humanoid user, ItemData item)
{
if (item != null && item.m_shared.m_name != m_fuelItem.m_itemData.m_shared.m_name)
{
((Character)user).Message((MessageType)2, "$msg_wrongitem", 0, (Sprite)null);
return false;
}
if ((double)GetFuel() > (double)(m_maxFuel - 1))
{
((Character)user).Message((MessageType)2, "$msg_itsfull", 0, (Sprite)null);
return false;
}
if (!user.GetInventory().HaveItem(m_fuelItem.m_itemData.m_shared.m_name, true))
{
((Character)user).Message((MessageType)2, "$msg_donthaveany " + m_fuelItem.m_itemData.m_shared.m_name, 0, (Sprite)null);
return false;
}
((Character)user).Message((MessageType)2, "$msg_added " + m_fuelItem.m_itemData.m_shared.m_name, 0, (Sprite)null);
user.GetInventory().RemoveItem(m_fuelItem.m_itemData.m_shared.m_name, 1, -1, true);
m_nview.InvokeRPC("AddPowerSource", Array.Empty<object>());
return true;
}
private void RPC_AddPowerSource(long sender)
{
//IL_0034: 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)
if (m_nview.IsOwner())
{
SetFuel(GetFuel() + 1f);
m_fuelAddedEffects.Create(((Component)this).transform.position, ((Component)this).transform.rotation, ((Component)this).transform, 1f, -1);
}
}
private double GetDeltaTime()
{
DateTime time = ZNet.instance.GetTime();
DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong(ZDOVars.s_startTime, time.Ticks));
double totalSeconds = (time - dateTime).TotalSeconds;
m_nview.GetZDO().Set(ZDOVars.s_startTime, time.Ticks);
return totalSeconds;
}
private float GetAccumulator()
{
return m_nview.GetZDO().GetFloat(ZDOVars.s_accTime, 0f);
}
private void SetAccumulator(float t)
{
m_nview.GetZDO().Set(ZDOVars.s_accTime, t);
}
private void UpdateRoof()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
if (m_requiresRoof)
{
m_haveRoof = Cover.IsUnderRoof(m_roofCheckPoint.position);
}
}
private void UpdateSmoke()
{
if ((Object)(object)m_smokeSpawner != (Object)null)
{
m_blockedSmoke = m_smokeSpawner.IsBlocked();
}
else
{
m_blockedSmoke = false;
}
}
private void UpdateBalrondConverter()
{
if (!m_nview.IsValid())
{
return;
}
UpdateRoof();
UpdateSmoke();
UpdateState();
if (!m_nview.IsOwner())
{
return;
}
double deltaTime = GetDeltaTime();
float num = GetAccumulator() + (float)deltaTime;
if ((double)num > 3600.0)
{
num = 3600f;
}
float num2 = (Object.op_Implicit((Object)(object)m_windmill) ? m_windmill.GetPowerOutput() : 1f);
while ((double)num >= 1.0)
{
num -= 1f;
float fuel = GetFuel();
string queuedOre = GetQueuedOre();
if ((m_maxFuel != 0 && !((double)fuel > 0.0)) || (m_maxOre != 0 && !(queuedOre != "")) || !((double)m_secPerProduct > 0.0) || (m_requiresRoof && !m_haveRoof) || m_blockedSmoke)
{
continue;
}
float num3 = 1f * num2;
if (m_maxFuel > 0)
{
float num4 = m_secPerProduct / m_fuelPerProduct;
float num5 = fuel - num3 / num4;
if ((double)num5 < 9.99999974737875E-05)
{
num5 = 0f;
}
SetFuel(num5);
}
if (queuedOre != "")
{
float num6 = GetBakeTimer() + num3;
SetBakeTimer(num6);
if ((double)num6 >= (double)m_secPerProduct)
{
SetBakeTimer(0f);
RemoveOneOre();
QueueProcessed(queuedOre);
}
}
}
if (GetQueuedOre() == "" || ((double)m_maxFuel > 0.0 && (double)GetFuel() == 0.0))
{
SpawnProcessed();
}
SetAccumulator(num);
}
private void QueueProcessed(string ore)
{
if (!m_spawnStack)
{
Spawn(ore, 1);
return;
}
string @string = m_nview.GetZDO().GetString(ZDOVars.s_spawnOre, "");
int @int = m_nview.GetZDO().GetInt(ZDOVars.s_spawnAmount, 0);
if (@string.Length > 0)
{
if (@string != ore)
{
SpawnProcessed();
m_nview.GetZDO().Set(ZDOVars.s_spawnOre, ore);
m_nview.GetZDO().Set(ZDOVars.s_spawnAmount, 1, false);
return;
}
ItemConversion itemConversion = GetItemConversion(ore);
int num = @int + itemConversion.m_count;
if (itemConversion == null || num >= itemConversion.m_to.m_itemData.m_shared.m_maxStackSize)
{
Spawn(ore, num);
m_nview.GetZDO().Set(ZDOVars.s_spawnOre, "");
m_nview.GetZDO().Set(ZDOVars.s_spawnAmount, 0, false);
}
else
{
m_nview.GetZDO().Set(ZDOVars.s_spawnAmount, num, false);
}
}
else
{
m_nview.GetZDO().Set(ZDOVars.s_spawnOre, ore);
m_nview.GetZDO().Set(ZDOVars.s_spawnAmount, 1, false);
}
}
private void SpawnProcessed()
{
int @int = m_nview.GetZDO().GetInt(ZDOVars.s_spawnAmount, 0);
if (@int > 0)
{
Spawn(m_nview.GetZDO().GetString(ZDOVars.s_spawnOre, ""), @int);
m_nview.GetZDO().Set(ZDOVars.s_spawnOre, "");
m_nview.GetZDO().Set(ZDOVars.s_spawnAmount, 0, false);
}
}
private int GetProcessedQueueSize()
{
return m_nview.GetZDO().GetInt(ZDOVars.s_spawnAmount, 0);
}
private void Spawn(string ore, int stack)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
ItemConversion itemConversion = GetItemConversion(ore);
if (itemConversion != null)
{
m_produceEffects.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1);
Object.Instantiate<GameObject>(((Component)itemConversion.m_to).gameObject, m_outputPoint.position, m_outputPoint.rotation).GetComponent<ItemDrop>().m_itemData.m_stack = stack;
}
}
private ItemConversion GetItemConversion(string itemName)
{
foreach (ItemConversion item in m_conversion)
{
if (((Object)((Component)item.m_from).gameObject).name == itemName)
{
return item;
}
}
return null;
}
private void UpdateState()
{
bool flag = IsActive();
m_enabledObject.SetActive(flag);
if (Object.op_Implicit((Object)(object)m_disabledObject))
{
m_disabledObject.SetActive(!flag);
}
if (Object.op_Implicit((Object)(object)m_haveFuelObject))
{
m_haveFuelObject.SetActive((double)GetFuel() > 0.0 && !flag);
}
if (Object.op_Implicit((Object)(object)m_haveOreObject))
{
m_haveOreObject.SetActive(GetQueueSize() > 0);
}
if (Object.op_Implicit((Object)(object)m_noOreObject))
{
m_noOreObject.SetActive(GetQueueSize() == 0);
}
if ((double)m_addOreAnimationDuration > 0.0 && (double)Time.time - (double)m_addedOreTime < (double)m_addOreAnimationDuration)
{
flag = true;
}
SetAnimation(flag);
}
private void SetAnimation(bool active)
{
Animator[] animators = m_animators;
foreach (Animator val in animators)
{
if (((Component)val).gameObject.activeInHierarchy)
{
val.SetBool("active", active);
val.SetFloat("activef", active ? 1f : 0f);
}
}
}
public bool IsActive()
{
return (m_maxFuel == 0 || (double)GetFuel() > 0.0) && (m_maxOre == 0 || GetQueueSize() > 0) && (!m_requiresRoof || m_haveRoof) && !m_blockedSmoke;
}
private string OnHoverAddPowerSource()
{
return Localization.instance.Localize($"{m_name} ({m_fuelItem.m_itemData.m_shared.m_name} {Mathf.Ceil(GetFuel())}/{m_maxFuel})\n[<color=yellow><b>$KEY_Use</b></color>] Add {m_fuelItem.m_itemData.m_shared.m_name}");
}
private string OnHoverEmptyOre()
{
return Localization.instance.Localize($"{m_name} ({GetProcessedQueueSize()} Ready) \n[<color=yellow><b>$KEY_Use</b></color>] {m_emptyOreTooltip}");
}
private string OnHoverAddWood()
{
m_sb.Clear();
m_sb.Append($"{m_name} ({GetQueueSize()}/{m_maxOre}) ");
if (m_requiresRoof && !m_haveRoof && (double)Mathf.Sin(Time.time * 10f) > 0.0)
{
m_sb.Append(" <color=yellow>$piece_BalrondConverter_reqroof</color>");
}
m_sb.Append("\n[<color=yellow><b>$KEY_Use</b></color>] " + m_addOreTooltip);
return Localization.instance.Localize(m_sb.ToString());
}
}
public class DatabaseAddMethods
{
public void AddItems(List<GameObject> items)
{
foreach (GameObject item in items)
{
AddItem(item);
}
}
public void AddRecipes(List<Recipe> recipes)
{
foreach (Recipe recipe in recipes)
{
AddRecipe(recipe);
}
}
public void AddStatuseffects(List<StatusEffect> statusEffects)
{
foreach (StatusEffect statusEffect in statusEffects)
{
AddStatus(statusEffect);
}
}
private bool IsObjectDBValid()
{
return (Object)(object)ObjectDB.instance != (Object)null && ObjectDB.instance.m_items.Count != 0 && ObjectDB.instance.m_recipes.Count != 0 && (Object)(object)ObjectDB.instance.GetItemPrefab("Amber") != (Object)null;
}
private void AddStatus(StatusEffect status)
{
if (!IsObjectDBValid())
{
return;
}
if ((Object)(object)status != (Object)null)
{
if ((Object)(object)ObjectDB.instance.GetStatusEffect(status.m_nameHash) == (Object)null)
{
ObjectDB.instance.m_StatusEffects.Add(status);
}
else
{
Debug.Log((object)(Launch.projectName + ": " + ((Object)status).name + " - Status already in the game"));
}
}
else
{
Debug.LogError((object)(Launch.projectName + ": " + ((Object)status).name + " - Status not found"));
}
}
private void AddRecipe(Recipe recipe)
{
if (!IsObjectDBValid())
{
return;
}
if ((Object)(object)recipe != (Object)null)
{
if ((Object)(object)ObjectDB.instance.m_recipes.Find((Recipe x) => ((Object)x).name == ((Object)recipe).name) == (Object)null)
{
if ((Object)(object)recipe.m_item != (Object)null)
{
ObjectDB.instance.m_recipes.Add(recipe);
}
}
else
{
Debug.Log((object)(Launch.projectName + ": " + ((Object)recipe).name + " - Recipe with this name already in the Game"));
}
}
else
{
Debug.LogError((object)(Launch.projectName + ": " + ((Object)recipe).name + " - Recipe not found"));
}
}
private void AddItem(GameObject newPrefab)
{
if (!IsObjectDBValid())
{
return;
}
ItemDrop component = newPrefab.GetComponent<ItemDrop>();
if ((Object)(object)component != (Object)null)
{
if ((Object)(object)ObjectDB.instance.GetItemPrefab(((Object)newPrefab).name) == (Object)null)
{
ObjectDB.instance.m_items.Add(newPrefab);
Dictionary<int, GameObject> dictionary = (Dictionary<int, GameObject>)typeof(ObjectDB).GetField("m_itemByHash", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(ObjectDB.instance);
dictionary[((Object)newPrefab).name.GetHashCode()] = newPrefab;
}
else
{
Debug.LogWarning((object)(Launch.projectName + ": " + ((Object)newPrefab).name + " - ItemDrop already exist"));
}
}
else
{
Debug.LogError((object)(Launch.projectName + ": " + ((Object)newPrefab).name + " - ItemDrop not found on prefab"));
}
}
}
public class FxReplacment
{
private List<GameObject> allPrefabs;
private string projectName = Launch.projectName;
public void setInstance(List<GameObject> gameObjects)
{
allPrefabs = gameObjects;
}
public void ReplaceOnObject(GameObject gameObject)
{
if ((Object)(object)gameObject == (Object)null)
{
return;
}
SpawnArea component = gameObject.GetComponent<SpawnArea>();
if ((Object)(object)component != (Object)null)
{
EffectList spawnEffects = component.m_spawnEffects;
if (spawnEffects != null)
{
findEffectsAndChange(spawnEffects.m_effectPrefabs);
}
}
Destructible component2 = gameObject.GetComponent<Destructible>();
if ((Object)(object)component2 != (Object)null)
{
EffectList hitEffect = component2.m_hitEffect;
if (hitEffect != null)
{
findEffectsAndChange(hitEffect.m_effectPrefabs);
}
EffectList destroyedEffect = component2.m_destroyedEffect;
if (destroyedEffect != null)
{
findEffectsAndChange(destroyedEffect.m_effectPrefabs);
}
}
Projectile component3 = gameObject.GetComponent<Projectile>();
if ((Object)(object)component3 != (Object)null)
{
EffectList hitEffects = component3.m_hitEffects;
if (hitEffects != null)
{
findEffectsAndChange(hitEffects.m_effectPrefabs);
}
EffectList hitWaterEffects = component3.m_hitWaterEffects;
if (hitWaterEffects != null)
{
findEffectsAndChange(hitWaterEffects.m_effectPrefabs);
}
EffectList spawnOnHitEffects = component3.m_spawnOnHitEffects;
if (spawnOnHitEffects != null)
{
findEffectsAndChange(spawnOnHitEffects.m_effectPrefabs);
}
}
}
public void ReplaceOnVegetation(GameObject gameObject)
{
Pickable component = gameObject.GetComponent<Pickable>();
if ((Object)(object)component != (Object)null)
{
fixPlant(component);
}
Destructible component2 = gameObject.GetComponent<Destructible>();
if ((Object)(object)component2 != (Object)null)
{
fixPDestructable(component2);
}
MineRock5 component3 = gameObject.GetComponent<MineRock5>();
if ((Object)(object)component3 != (Object)null)
{
fixMineRock5(component3);
}
MineRock component4 = gameObject.GetComponent<MineRock>();
if ((Object)(object)component4 != (Object)null)
{
fixMineRock(component4);
}
}
private void fixPlant(Pickable pickable)
{
EffectList pickEffector = pickable.m_pickEffector;
if (pickEffector != null)
{
findEffectsAndChange(pickEffector.m_effectPrefabs);
}
}
private void fixPDestructable(Destructible minerock5)
{
EffectList hitEffect = minerock5.m_hitEffect;
if (hitEffect != null)
{
findEffectsAndChange(hitEffect.m_effectPrefabs);
}
EffectList destroyedEffect = minerock5.m_destroyedEffect;
if (destroyedEffect != null)
{
findEffectsAndChange(destroyedEffect.m_effectPrefabs);
}
}
private void fixMineRock5(MineRock5 minerock5)
{
EffectList hitEffect = minerock5.m_hitEffect;
if (hitEffect != null)
{
findEffectsAndChange(hitEffect.m_effectPrefabs);
}
EffectList destroyedEffect = minerock5.m_destroyedEffect;
if (destroyedEffect != null)
{
findEffectsAndChange(destroyedEffect.m_effectPrefabs);
}
}
private void fixMineRock(MineRock minerock5)
{
EffectList hitEffect = minerock5.m_hitEffect;
if (hitEffect != null)
{
findEffectsAndChange(hitEffect.m_effectPrefabs);
}
EffectList destroyedEffect = minerock5.m_destroyedEffect;
if (destroyedEffect != null)
{
findEffectsAndChange(destroyedEffect.m_effectPrefabs);
}
}
public void ReplaceOnMonster(GameObject gameObject)
{
if ((Object)(object)gameObject == (Object)null)
{
Debug.LogWarning((object)(projectName + ":: GameObject not found"));
return;
}
Humanoid component = gameObject.GetComponent<Humanoid>();
if ((Object)(object)component == (Object)null)
{
Debug.LogWarning((object)(projectName + ":: GameObject not found"));
return;
}
EffectList dropEffects = component.m_dropEffects;
if (dropEffects != null)
{
findEffectsAndChange(dropEffects.m_effectPrefabs);
}
EffectList backstabHitEffects = ((Character)component).m_backstabHitEffects;
if (backstabHitEffects != null)
{
findEffectsAndChange(backstabHitEffects.m_effectPrefabs);
}
EffectList consumeItemEffects = component.m_consumeItemEffects;
if (consumeItemEffects != null)
{
findEffectsAndChange(consumeItemEffects.m_effectPrefabs);
}
EffectList critHitEffects = ((Character)component).m_critHitEffects;
if (critHitEffects != null)
{
findEffectsAndChange(critHitEffects.m_effectPrefabs);
}
EffectList deathEffects = ((Character)component).m_deathEffects;
if (deathEffects != null)
{
findEffectsAndChange(deathEffects.m_effectPrefabs);
}
EffectList hitEffects = ((Character)component).m_hitEffects;
if (hitEffects != null)
{
findEffectsAndChange(hitEffects.m_effectPrefabs);
}
EffectList jumpEffects = ((Character)component).m_jumpEffects;
if (jumpEffects != null)
{
findEffectsAndChange(jumpEffects.m_effectPrefabs);
}
EffectList perfectBlockEffect = component.m_perfectBlockEffect;
if (perfectBlockEffect != null)
{
findEffectsAndChange(perfectBlockEffect.m_effectPrefabs);
}
EffectList pickupEffects = component.m_pickupEffects;
if (pickupEffects != null)
{
findEffectsAndChange(pickupEffects.m_effectPrefabs);
}
EffectList slideEffects = ((Character)component).m_slideEffects;
if (slideEffects != null)
{
findEffectsAndChange(slideEffects.m_effectPrefabs);
}
EffectList tarEffects = ((Character)component).m_tarEffects;
if (tarEffects != null)
{
findEffectsAndChange(tarEffects.m_effectPrefabs);
}
EffectList waterEffects = ((Character)component).m_waterEffects;
if (waterEffects != null)
{
findEffectsAndChange(waterEffects.m_effectPrefabs);
}
FootStep component2 = gameObject.GetComponent<FootStep>();
if (!((Object)(object)component2 != (Object)null))
{
return;
}
List<StepEffect> effects = component2.m_effects;
foreach (StepEffect item in effects)
{
GameObject[] effectPrefabs = item.m_effectPrefabs;
List<GameObject> list = new List<GameObject>();
list.AddRange(effectPrefabs);
for (int i = 0; i < list.Count; i++)
{
if ((Object)(object)list[i] != (Object)null)
{
string name = ((Object)list[i]).name;
GameObject val = allPrefabs.Find((GameObject x) => ((Object)x).name == name);
if (!((Object)(object)val == (Object)null))
{
list[i] = val;
}
}
}
}
}
public void ReplaceOnItem(GameObject gameObject)
{
if ((Object)(object)gameObject == (Object)null)
{
return;
}
ItemDrop component = gameObject.GetComponent<ItemDrop>();
if (!((Object)(object)component == (Object)null))
{
EffectList hitEffect = component.m_itemData.m_shared.m_hitEffect;
if (hitEffect != null)
{
findEffectsAndChange(hitEffect.m_effectPrefabs);
}
EffectList hitTerrainEffect = component.m_itemData.m_shared.m_hitTerrainEffect;
if (hitTerrainEffect != null)
{
findEffectsAndChange(hitTerrainEffect.m_effectPrefabs);
}
EffectList holdStartEffect = component.m_itemData.m_shared.m_holdStartEffect;
if (holdStartEffect != null)
{
findEffectsAndChange(holdStartEffect.m_effectPrefabs);
}
EffectList trailStartEffect = component.m_itemData.m_shared.m_trailStartEffect;
if (trailStartEffect != null)
{
findEffectsAndChange(trailStartEffect.m_effectPrefabs);
}
EffectList blockEffect = component.m_itemData.m_shared.m_blockEffect;
if (blockEffect != null)
{
findEffectsAndChange(blockEffect.m_effectPrefabs);
}
}
}
public void ReplaceFxOnPiece(GameObject gameObject)
{
if ((Object)(object)gameObject == (Object)null)
{
return;
}
Piece component = gameObject.GetComponent<Piece>();
if ((Object)(object)component != (Object)null)
{
EffectList placeEffect = component.m_placeEffect;
if (placeEffect != null)
{
findEffectsAndChange(placeEffect.m_effectPrefabs);
}
}
WearNTear component2 = gameObject.GetComponent<WearNTear>();
if ((Object)(object)component2 != (Object)null)
{
EffectList hitEffect = component2.m_hitEffect;
if (hitEffect != null)
{
findEffectsAndChange(hitEffect.m_effectPrefabs);
}
}
}
private void findEffectsAndChange(EffectData[] effects)
{
if (effects == null || effects.Length == 0)
{
return;
}
foreach (EffectData val in effects)
{
if ((Object)(object)val.m_prefab != (Object)null)
{
string name = ((Object)val.m_prefab).name;
GameObject val2 = allPrefabs.Find((GameObject x) => ((Object)x).name == name);
if (!((Object)(object)val2 == (Object)null))
{
val.m_prefab = val2;
}
}
}
}
}
public class ModResourceLoader
{
public AssetBundle assetBundle;
public List<GameObject> buildPrefabs = new List<GameObject>();
public List<GameObject> plantPrefabs = new List<GameObject>();
public List<GameObject> itemPrefabs = new List<GameObject>();
public List<GameObject> monsterPrefabs = new List<GameObject>();
public List<GameObject> vegetationPrefabs = new List<GameObject>();
public List<GameObject> clutterPrefabs = new List<GameObject>();
public List<GameObject> locationPrefabs = new List<GameObject>();
public List<GameObject> roomPrefabs = new List<GameObject>();
public List<GameObject> vfxPrefabs = new List<GameObject>();
public List<MappedEffectList> instructions = new List<MappedEffectList>();
public List<Recipe> recipes = new List<Recipe>();
public List<StatusEffect> statusEffects = new List<StatusEffect>();
public StatusEffect newBarleyStatus = null;
public ShaderReplacment shaderReplacment = new ShaderReplacment();
public Sprite newLogo = null;
public void loadAssets()
{
assetBundle = GetAssetBundleFromResources("balrondconstructions");
string basePath = "Assets/Custom/BalrondConstructions/";
loadPieces(basePath);
loadOther(basePath);
loadInstructions(basePath);
}
public void AddPrefabsToZnetScene(ZNetScene zNetScene)
{
zNetScene.m_prefabs.AddRange(vegetationPrefabs);
foreach (GameObject gm in itemPrefabs)
{
GameObject val = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == ((Object)gm).name);
if ((Object)(object)val == (Object)null)
{
zNetScene.m_prefabs.Add(gm);
}
else
{
Debug.LogWarning((object)("Object exists: " + ((Object)gm).name));
}
}
foreach (GameObject gm2 in buildPrefabs)
{
GameObject val2 = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == ((Object)gm2).name);
if ((Object)(object)val2 == (Object)null)
{
zNetScene.m_prefabs.Add(gm2);
}
else
{
Debug.LogWarning((object)("Object exists: " + ((Object)gm2).name));
}
}
foreach (GameObject gm3 in vfxPrefabs)
{
GameObject val3 = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == ((Object)gm3).name);
if ((Object)(object)val3 == (Object)null)
{
zNetScene.m_prefabs.Add(gm3);
}
else
{
Debug.LogWarning((object)("Object exists: " + ((Object)gm3).name));
}
}
zNetScene.m_prefabs.RemoveAll((GameObject x) => (Object)(object)x == (Object)null);
addPlantstoCultivator(zNetScene);
setupBuildPiecesList(zNetScene);
}
private void setupBuildPiecesList(ZNetScene zNetScene)
{
string[] array = new string[4] { "Hammer", "HammerIron", "HammerDverger", "HammerBlackmetal" };
GameObject val = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "Hammer");
PieceTable buildPieces = val.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces;
string[] array2 = array;
foreach (string name in array2)
{
addBuildpiecesToOtherHammer(name, buildPieces, zNetScene);
}
List<GameObject> pieces = buildPieces.m_pieces;
foreach (GameObject buildPrefab in buildPrefabs)
{
setupRavenGuide(buildPrefab, zNetScene.m_prefabs);
AddToBuildList(buildPrefab, pieces);
}
}
private void addBuildpiecesToOtherHammer(string name, PieceTable pieceTable, ZNetScene zNetScene)
{
GameObject val = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == name);
if (!((Object)(object)val == (Object)null))
{
val.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces = pieceTable;
}
}
public void setupRavenGuide(GameObject gameObject, List<GameObject> gameObjects)
{
GameObject val = null;
Transform val2 = gameObject.transform.Find("GuidePoint");
if ((Object)(object)val2 == (Object)null)
{
return;
}
GameObject val3 = gameObjects.Find((GameObject x) => ((Object)x).name == "piece_workbench");
if ((Object)(object)val3 != (Object)null)
{
GameObject gameObject2 = ((Component)val3.transform.Find("GuidePoint")).gameObject;
if ((Object)(object)gameObject2 != (Object)null)
{
GuidePoint component = gameObject2.GetComponent<GuidePoint>();
if ((Object)(object)component != (Object)null)
{
val = component.m_ravenPrefab;
}
}
}
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)"Ravens not found");
}
else
{
((Component)val2).GetComponent<GuidePoint>().m_ravenPrefab = val;
}
}
public void setupBuildPiecesListDB()
{
GameObject val = ObjectDB.instance.m_items.Find((GameObject x) => ((Object)x).name == "Hammer");
List<GameObject> pieces = val.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces.m_pieces;
foreach (GameObject buildPrefab in buildPrefabs)
{
AddToBuildList(buildPrefab, pieces);
}
}
private void AddToBuildList(GameObject prefab, List<GameObject> buildPieces)
{
if ((Object)(object)buildPieces.Find((GameObject x) => ((Object)x).name == ((Object)prefab).name) == (Object)null)
{
buildPieces.Add(prefab);
}
}
private void addPlantstoCultivator(ZNetScene zNetScene)
{
GameObject val = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "Cultivator");
PieceTable buildPieces = val.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces;
List<GameObject> pieces = buildPieces.m_pieces;
foreach (GameObject plantPrefab in plantPrefabs)
{
pieces.Add(plantPrefab);
}
}
private void loadStatusFromPotion()
{
string[] source = new string[0];
foreach (GameObject itemPrefab in itemPrefabs)
{
if (source.Contains(((Object)itemPrefab).name))
{
ItemDrop component = itemPrefab.GetComponent<ItemDrop>();
SharedData shared = component.m_itemData.m_shared;
checkForStatus(shared.m_consumeStatusEffect);
checkForStatus(shared.m_setStatusEffect);
checkForStatus(shared.m_equipStatusEffect);
checkForStatus(shared.m_attackStatusEffect);
}
}
Debug.Log((object)("Loaded Potion status: " + statusEffects.Count));
}
private void checkForStatus(StatusEffect status)
{
if ((Object)(object)status != (Object)null)
{
statusEffects.Add(status);
}
}
private AssetBundle GetAssetBundleFromResources(string filename)
{
Assembly executingAssembly = Assembly.GetExecutingAssembly();
string name = executingAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(filename));
using Stream stream = executingAssembly.GetManifestResourceStream(name);
return AssetBundle.LoadFromStream(stream);
}
private void loadPlants(string basePath)
{
string text = basePath + "Plants/";
string[] array = new string[0];
string[] array2 = array;
foreach (string text2 in array2)
{
GameObject val = assetBundle.LoadAsset<GameObject>(text + text2 + ".prefab");
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("Could not find plant with name: " + text2));
continue;
}
ShaderReplacment.Replace(val);
plantPrefabs.Add(val);
}
}
private void loadPieces(string basePath)
{
string text = basePath + "Pieces/";
string[] buildPieces = BuildPieceList.buildPieces;
string[] array = buildPieces;
foreach (string text2 in array)
{
GameObject val = assetBundle.LoadAsset<GameObject>(text + text2 + ".prefab");
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("Could not find piece with name: " + text2));
continue;
}
ShaderReplacment.Replace(val);
buildPrefabs.Add(val);
}
}
private void loadInstructions(string basePath)
{
string text = basePath + "Instructions/";
string[] buildPieces = BuildPieceList.buildPieces;
}
private void loadItems(string basePath)
{
string text = basePath + "Items/";
string[] array = new string[0];
string[] array2 = array;
foreach (string text2 in array2)
{
GameObject val = assetBundle.LoadAsset<GameObject>(text + text2 + ".prefab");
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("Could not find item with name: " + text2));
continue;
}
ShaderReplacment.Replace(val);
itemPrefabs.Add(val);
}
}
private void loadVegetation(string basePath)
{
string text = basePath + "Vegetation/";
string[] array = new string[0];
string[] array2 = array;
foreach (string text2 in array2)
{
GameObject val = assetBundle.LoadAsset<GameObject>(text + text2 + ".prefab");
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("Could not find vegegation with name: " + text2));
continue;
}
ShaderReplacment.Replace(val);
vegetationPrefabs.Add(val);
}
}
private void loadOther(string basePath)
{
string text = basePath + "Other/";
string[] array = new string[1] { "sfx_queendoor_open1" };
string[] array2 = array;
foreach (string text2 in array2)
{
GameObject val = assetBundle.LoadAsset<GameObject>(text + text2 + ".prefab");
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("Could not find object with name: " + text2));
continue;
}
ShaderReplacment.Replace(val);
vfxPrefabs.Add(val);
}
}
public void setupBlessedStone(ZNetScene zNetScene)
{
GameObject val = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "Blessed_Stone_Odin");
OfferingStation offeringStation = val.AddComponent<OfferingStation>();
offeringStation.m_aoePrefab = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "Blessing_Aoe");
offeringStation.m_canBeOutside = true;
offeringStation.m_requireFire = false;
offeringStation.m_requiresRoof = false;
offeringStation.m_requiredItem = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "Iron").GetComponent<ItemDrop>();
offeringStation.m_requiredItemAmount = 2;
offeringStation.m_spawnPoint = ((Component)val.transform.Find("spawnpoint")).gameObject;
List<EffectData> list = new List<EffectData>();
list.AddRange(offeringStation.m_fuelAddedEffects.m_effectPrefabs);
list.Add(createEffectListEffectData(zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "vfx_pray_accepted")));
offeringStation.m_fuelAddedEffects.m_effectPrefabs = list.ToArray();
List<EffectData> list2 = new List<EffectData>();
list2.AddRange(offeringStation.m_spawnFinishEffects.m_effectPrefabs);
list2.Add(createEffectListEffectData(zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "fx_Blessing")));
offeringStation.m_spawnFinishEffects.m_effectPrefabs = list2.ToArray();
}
public EffectData createEffectListEffectData(GameObject prefab)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
EffectData val = new EffectData();
val.m_prefab = prefab;
val.m_variant = -1;
val.m_enabled = true;
return val;
}
public void setIronHook(ZNetScene zNetScene)
{
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Expected O, but got Unknown
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Expected O, but got Unknown
GameObject val = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "piece_cookingstation_iron");
GameObject val2 = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "piece_cookingstation");
ItemConversion val3 = new ItemConversion();
val3.m_from = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "BearMeat").GetComponent<ItemDrop>();
val3.m_to = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "BearMeatCooked").GetComponent<ItemDrop>();
val3.m_cookTime = 40f;
ItemConversion val4 = new ItemConversion();
val4.m_from = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "Potato").GetComponent<ItemDrop>();
val4.m_to = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "PotatoFried").GetComponent<ItemDrop>();
val4.m_cookTime = 30f;
if ((Object)(object)val != (Object)null)
{
CookingStation component = val.GetComponent<CookingStation>();
component.m_conversion.Add(val4);
component.m_conversion.Add(val3);
}
if ((Object)(object)val2 != (Object)null)
{
CookingStation component2 = val2.GetComponent<CookingStation>();
component2.m_conversion.Add(val4);
component2.m_conversion.Add(val3);
}
}
public void setupPickableDrops(ZNetScene zNetScene)
{
GameObject val = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "Pickable_MeadowsMeatPile01");
GameObject val2 = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "Pickable_MeadowsMeatPile02");
Pickable component = val.GetComponent<Pickable>();
Pickable component2 = val2.GetComponent<Pickable>();
GameObject item = getItem(zNetScene, "RawMeat");
if ((Object)(object)item != (Object)null)
{
component.m_itemPrefab = item;
component2.m_itemPrefab = item;
}
createExtraDrops(component, zNetScene);
createExtraDrops(component2, zNetScene);
}
private void createExtraDrops(Pickable pickable, ZNetScene zNetScene)
{
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: 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)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
List<DropData> list = new List<DropData>();
string name = ((Object)((Component)pickable).gameObject).name;
string text = name;
if (!(text == "Pickable_MeadowsMeatPile01"))
{
if (text == "Pickable_MeadowsMeatPile02")
{
list.Add(createDrop(zNetScene, "RawMeat", 1, 1, 0.4f));
list.Add(createDrop(zNetScene, "Coins", 5, 15, 0.2f));
list.Add(createDrop(zNetScene, "BoneFragments", 1, 3, 0.2f));
list.Add(createDrop(zNetScene, "NeckTail", 1, 2, 0.3f));
}
}
else
{
list.Add(createDrop(zNetScene, "RawMeat", 1, 1, 0.4f));
list.Add(createDrop(zNetScene, "DeerMeat", 1, 1, 0.2f));
list.Add(createDrop(zNetScene, "NeckTail", 1, 2, 0.3f));
list.Add(createDrop(zNetScene, "Honey", 1, 2, 0.1f));
}
pickable.m_extraDrops.m_drops = list;
}
private DropData createDrop(ZNetScene zNetScene, string name, int min, int max, float chance)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
DropData result = default(DropData);
result.m_stackMin = min;
result.m_stackMax = max;
result.m_weight = chance;
result.m_item = getItem(zNetScene, name);
return result;
}
private GameObject getItem(ZNetScene zNetScene, string name)
{
return zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == name);
}
public void setBalrondConverter(ZNetScene zNetScene)
{
GameObject val = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "piece_sawmill");
GameObject val2 = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "piece_leatherRack");
if ((Object)(object)val.GetComponent<BalrondConverter>() == (Object)null)
{
Debug.LogWarning((object)"Setting up Sawmill");
transferSmelterToBalrondConverter(val, zNetScene);
}
if ((Object)(object)val2.GetComponent<BalrondConverter>() == (Object)null)
{
Debug.LogWarning((object)"Setting up Leather Rack");
transferSmelterToBalrondConverter(val2, zNetScene);
}
}
private void transferSmelterToBalrondConverter(GameObject gameObject, ZNetScene zNetScene)
{
Smelter component = gameObject.GetComponent<Smelter>();
BalrondConverter balrondConverter = gameObject.AddComponent<BalrondConverter>();
balrondConverter.m_addOreAnimationDuration = 0f;
balrondConverter.m_addOreSwitch = component.m_addOreSwitch;
balrondConverter.m_addOreTooltip = component.m_addOreTooltip;
balrondConverter.m_addWoodSwitch = component.m_addWoodSwitch;
balrondConverter.m_animators = component.m_animators;
balrondConverter.m_disabledObject = component.m_disabledObject;
balrondConverter.m_emptyOreSwitch = component.m_emptyOreSwitch;
balrondConverter.m_emptyOreTooltip = component.m_emptyOreTooltip;
balrondConverter.m_enabledObject = component.m_enabledObject;
balrondConverter.m_fuelAddedEffects = component.m_fuelAddedEffects;
balrondConverter.m_fuelItem = component.m_fuelItem;
balrondConverter.m_fuelPerProduct = component.m_fuelPerProduct;
balrondConverter.m_haveFuelObject = component.m_haveFuelObject;
balrondConverter.m_haveOreObject = component.m_haveOreObject;
balrondConverter.m_maxFuel = component.m_maxFuel;
balrondConverter.m_maxOre = component.m_maxOre;
balrondConverter.m_name = component.m_name;
balrondConverter.m_noOreObject = component.m_noOreObject;
balrondConverter.m_oreAddedEffects = component.m_oreAddedEffects;
balrondConverter.m_outputPoint = component.m_outputPoint;
balrondConverter.m_produceEffects = component.m_produceEffects;
balrondConverter.m_requiresRoof = component.m_requiresRoof;
balrondConverter.m_roofCheckPoint = component.m_roofCheckPoint;
balrondConverter.m_windmill = component.m_windmill;
balrondConverter.m_secPerProduct = component.m_secPerProduct;
balrondConverter.m_smokeSpawner = component.m_smokeSpawner;
balrondConverter.m_spawnStack = component.m_spawnStack;
Object.DestroyImmediate((Object)(object)component);
if (((Object)gameObject).name == "piece_sawmill")
{
balrondConverter.m_maxFuel = 1;
balrondConverter.m_maxOre = 10;
balrondConverter.m_fuelItem = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "SawBlade").GetComponent<ItemDrop>();
balrondConverter.m_fuelPerProduct = 0.01f;
balrondConverter.prefabName = "piece_sawmill";
}
if (((Object)gameObject).name == "piece_leatherRack")
{
balrondConverter.m_maxFuel = 10;
balrondConverter.m_maxOre = 10;
balrondConverter.m_fuelItem = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "IronNails").GetComponent<ItemDrop>();
balrondConverter.m_fuelPerProduct = 1f;
balrondConverter.prefabName = "piece_leatherRack";
}
}
public static List<GameObject> ShuffleIntList(List<GameObject> list)
{
Random random = new Random();
List<GameObject> list2 = new List<GameObject>();
int count = list.Count;
for (int i = 0; i < count; i++)
{
int index = random.Next(0, list.Count);
list2.Add(list[index]);
list.Remove(list[index]);
}
return list2;
}
}
public class ShaderReplacment
{
public static List<GameObject> prefabsToReplaceShader = new List<GameObject>();
public static List<Material> materialsInPrefabs = new List<Material>();
public string[] shaderlist = new string[49]
{
"Custom/AlphaParticle", "Custom/Blob", "Custom/Bonemass", "Custom/Clouds", "Custom/Creature", "Custom/Decal", "Custom/Distortion", "Custom/Flow", "Custom/FlowOpaque", "Custom/Grass",
"Custom/GuiScroll", "Custom/Heightmap", "Custom/icon", "Custom/InteriorSide", "Custom/LitGui", "Custom/LitParticles", "Custom/mapshader", "Custom/ParticleDecal", "Custom/Piece", "Custom/Player",
"Custom/Rug", "Custom/ShadowBlob", "Custom/SkyboxProcedural", "Custom/SkyObject", "Custom/StaticRock", "Custom/Tar", "Custom/Trilinearmap", "Custom/UI/BGBlur", "Custom/Vegetation", "Custom/Water",
"Custom/WaterBottom", "Custom/WaterMask", "Custom/Yggdrasil", "Custom/Yggdrasil/root", "Hidden/BlitCopyHDRTonemap", "Hidden/Dof/DepthOfFieldHdr", "Hidden/Dof/DX11Dof", "Hidden/Internal-Loading", "Hidden/Internal-UIRDefaultWorld", "Hidden/SimpleClear",
"Hidden/SunShaftsComposite", "Lux Lit Particles/ Bumped", "Lux Lit Particles/ Tess Bumped", "Particles/Standard Surface2", "Particles/Standard Unlit2", "Standard TwoSided", "ToonDeferredShading2017", "Unlit/DepthWrite", "Unlit/Lighting"
};
public static List<Shader> shaders = new List<Shader>();
private static readonly HashSet<Shader> CachedShaders = new HashSet<Shader>();
public static bool debug = true;
public static Shader findShader(string name)
{
Shader[] array = Resources.FindObjectsOfTypeAll<Shader>();
if (array.Length == 0)
{
Debug.LogWarning((object)"SHADER LIST IS EMPTY!");
return null;
}
if (debug)
{
}
return shaders.Find((Shader x) => ((Object)x).name == name);
}
public static Shader GetShaderByName(string name)
{
return shaders.Find((Shader x) => ((Object)x).name == name.Trim());
}
public static void debugShaderList(List<Shader> shadersRes)
{
foreach (Shader shadersRe in shadersRes)
{
Debug.LogWarning((object)("SHADER NAME IS: " + ((Object)shadersRe).name));
}
debug = false;
}
public static void Replace(GameObject gameObject)
{
prefabsToReplaceShader.Add(gameObject);
GetMaterialsInPrefab(gameObject);
}
public static void GetMaterialsInPrefab(GameObject gameObject)
{
Renderer[] componentsInChildren = gameObject.GetComponentsInChildren<Renderer>(true);
Renderer[] array = componentsInChildren;
foreach (Renderer val in array)
{
Material[] sharedMaterials = val.sharedMaterials;
if (sharedMaterials == null || sharedMaterials.Length == 0)
{
continue;
}
Material[] array2 = sharedMaterials;
foreach (Material val2 in array2)
{
if ((Object)(object)val2 != (Object)null)
{
materialsInPrefabs.Add(val2);
}
}
}
}
public static void getMeShaders()
{
AssetBundle[] array = Resources.FindObjectsOfTypeAll<AssetBundle>();
AssetBundle[] array2 = array;
foreach (AssetBundle val in array2)
{
IEnumerable<Shader> enumerable3;
try
{
IEnumerable<Shader> enumerable2;
if (!val.isStreamedSceneAssetBundle || !Object.op_Implicit((Object)(object)val))
{
IEnumerable<Shader> enumerable = val.LoadAllAssets<Shader>();
enumerable2 = enumerable;
}
else
{
enumerable2 = from shader in ((IEnumerable<string>)val.GetAllAssetNames()).Select((Func<string, Shader>)val.LoadAsset<Shader>)
where (Object)(object)shader != (Object)null
select shader;
}
enumerable3 = enumerable2;
}
catch (Exception)
{
continue;
}
if (enumerable3 == null)
{
continue;
}
foreach (Shader item in enumerable3)
{
CachedShaders.Add(item);
}
}
}
public static void runMaterialFix()
{
getMeShaders();
shaders.AddRange(CachedShaders);
foreach (Material materialsInPrefab in materialsInPrefabs)
{
Shader shader = materialsInPrefab.shader;
if (!((Object)(object)shader == (Object)null))
{
string name = ((Object)shader).name;
if (!(name == "Standard") && name.Contains("Balrond"))
{
setProperValue(materialsInPrefab, name);
}
}
}
}
private static void setProperValue(Material material, string shaderName)
{
string name = shaderName.Replace("Balrond", "Custom");
name = checkNaming(name);
Shader shaderByName = GetShaderByName(name);
if ((Object)(object)shaderByName == (Object)null)
{
Debug.LogWarning((object)("Shader not found " + name));
}
else
{
material.shader = shaderByName;
}
}
private static string checkNaming(string name)
{
string result = name;
if (name.Contains("Bumped"))
{
result = name.Replace("Custom", "Lux Lit Particles");
}
if (name.Contains("Tess Bumped"))
{
result = name.Replace("Custom", "Lux Lit Particles");
}
if (name.Contains("Standard Surface"))
{
result = name.Replace("Custom", "Particles");
result = result.Replace("Standard Surface2", "Standard Surface");
}
if (name.Contains("Standard Unlit"))
{
result = name.Replace("Custom", "Particles");
result = result.Replace("Standard Unlit", "Standard Unlit2");
result = result.Replace("Standard Unlit22", "Standard Unlit2");
}
return result;
}
}
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, CraftingStation alt = null)
{
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 + " using: " + ((Object)alt).name));
if ((Object)(object)alt != (Object)null)
{
return alt;
}
return null;
}
private static void prepareTables()
{
cauldron = FindStation(pieces, "piece_cauldron");
workbench = FindStation(pieces, "piece_workbench");
heavyWorkbench = FindStation(pieces, "piece_heavy_workbench_bal", workbench);
forge = FindStation(pieces, "forge");
ironworks = FindStation(pieces, "piece_metalworks_bal", forge);
blackforge = FindStation(pieces, "blackforge");
stoneCutter = FindStation(pieces, "piece_stonecutter");
artisian = FindStation(pieces, "piece_artisanstation");
runeforge = FindStation(pieces, "piece_runeforge_bal", blackforge);
magetable = FindStation(pieces, "piece_magetable");
fletcher = FindStation(pieces, "piece_fletcher_bal", workbench);
}
}
public class JsonLoader
{
public string defaultPath = string.Empty;
public void loadJson()
{
LoadTranslations();
justDefaultPath();
}
public void justDefaultPath()
{
string configPath = Paths.ConfigPath;
string text = Path.Combine(configPath, "BalrondConstructions-translation/");
defaultPath = text;
}
public void createDefaultPath()
{
string configPath = Paths.ConfigPath;
string path = Path.Combine(configPath, "BalrondConstructions-translation/");
if (!Directory.Exists(path))
{
CreateFolder(path);
}
defaultPath = path;
}
private string[] jsonFilePath(string folderName, string extension)
{
string configPath = Paths.ConfigPath;
string path = Path.Combine(configPath, "BalrondConstructions-translation/");
if (!Directory.Exists(path))
{
CreateFolder(path);
}
return Directory.GetFiles(path, extension);
}
private static void CreateFolder(string path)
{
try
{
Directory.CreateDirectory(path);
}
catch (Exception ex)
{
Debug.Log((object)("BalrondConstructions: Error creating folder: " + ex.Message));
}
}
private void LoadTranslations()
{
int num = 0;
string[] array = jsonFilePath("Translation", "*.json");
foreach (string text in array)
{
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(text);
string json = File.ReadAllText(text);
JsonData jsonData = JsonMapper.ToObject(json);
Dictionary<string, string> dictionary = new Dictionary<string, string>();
foreach (string key in jsonData.Keys)
{
dictionary[key] = jsonData[key].ToString();
}
if (dictionary != null)
{
BalrondTranslator.translations.Add(fileNameWithoutExtension, dictionary);
num++;
}
else
{
Debug.LogError((object)("BalrondConstructions: Loading FAILED file: " + text));
}
}
}
}
[BepInPlugin("balrond.astafaraios.BalrondConstructions", "BalrondConstructions", "1.4.0")]
public class Launch : BaseUnityPlugin
{
[HarmonyPatch(typeof(FejdStartup), "SetupGui")]
private static class FejdStartup_SetupGUI
{
private static void Postfix()
{
try
{
if (Localization.instance != null)
{
string selectedLanguage = Localization.instance.GetSelectedLanguage();
Dictionary<string, string> translations = GetTranslations(selectedLanguage);
AddTranslations(translations);
}
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("FejdStartup.SetupGui Postfix failed: " + ex));
}
}
}
}
[HarmonyPriority(800)]
[HarmonyPatch(typeof(Localization), "SetupLanguage")]
private static class Translation_SetupLanguage
{
private static void Prefix(Localization __instance, string language)
{
try
{
Dictionary<string, string> translations = GetTranslations(language);
AddTranslations(translations, __instance);
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("Localization.SetupLanguage Prefix failed: " + ex));
}
}
}
}
[HarmonyPriority(800)]
[HarmonyPatch(typeof(Localization), "LoadCSV")]
private static class Translation_LoadCSV
{
private static void Prefix(Localization __instance, string language)
{
try
{
Dictionary<string, string> translations = GetTranslations(language);
AddTranslations(translations, __instance);
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("Localization.LoadCSV Prefix failed: " + ex));
}
}
}
}
[HarmonyPatch(typeof(AudioMan), "Awake")]
private static class AudioMan_Awake_Patch
{
private static void Postfix(AudioMan __instance)
{
try
{
if ((Object)(object)__instance == (Object)null || (Object)(object)__instance.m_masterMixer == (Object)null)
{
return;
}
AudioMixerGroup outputAudioMixerGroup = __instance.m_masterMixer.outputAudioMixerGroup;
if ((Object)(object)outputAudioMixerGroup == (Object)null)
{
return;
}
foreach (List<GameObject> allPrefabGroup in GetAllPrefabGroups())
{
if (allPrefabGroup == null)
{
continue;
}
foreach (GameObject item in allPrefabGroup)
{
if ((Object)(object)item == (Object)null)
{
continue;
}
AudioSource[] componentsInChildren;
try
{
componentsInChildren = item.GetComponentsInChildren<AudioSource>(true);
}
catch
{
continue;
}
if (componentsInChildren == null || componentsInChildren.Length == 0)
{
continue;
}
foreach (AudioSource val in componentsInChildren)
{
if (!((Object)(object)val == (Object)null))
{
val.outputAudioMixerGroup = outputAudioMixerGroup;
}
}
}
}
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("AudioMan.Awake Postfix failed: " + ex));
}
}
}
}
[HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")]
public static class Object_CopyOtherDB_Path
{
public static void Postfix()
{
try
{
SafeSetupDatabaseContent(sortRecipes: false);
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("ObjectDB.CopyOtherDB Postfix failed: " + ex));
}
}
}
}
[HarmonyPatch(typeof(ObjectDB), "Awake")]
public static class ObjectDB_Awake_Path
{
public static void Postfix()
{
try
{
SafeSetupDatabaseContent(sortRecipes: true);
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("ObjectDB.Awake Postfix failed: " + ex));
}
}
}
}
[HarmonyPatch(typeof(ZNetScene), "Awake")]
public static class ZNetScene_Awake_Path
{
public static void Prefix(ZNetScene __instance)
{
if ((Object)(object)__instance == (Object)null)
{
Debug.LogWarning((object)(projectName + ": No ZNetScene found"));
return;
}
try
{
modResourceLoader.AddPrefabsToZnetScene(__instance);
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("AddPrefabsToZnetScene failed: " + ex));
}
}
if (hasSpawned)
{
return;
}
try
{
if (__instance.m_prefabs != null)
{
buildPieceBuilder.SetupBuildPieces(__instance.m_prefabs);
}
}
catch (Exception ex2)
{
if (Log != null)
{
Log.LogError((object)("SetupBuildPieces failed: " + ex2));
}
}
if (IsDedicatedServer())
{
return;
}
try
{
ShaderReplacment.runMaterialFix();
}
catch (Exception ex3)
{
if (Log != null)
{
Log.LogError((object)("runMaterialFix failed: " + ex3));
}
}
hasSpawned = true;
}
}
public const string PluginGUID = "balrond.astafaraios.BalrondConstructions";
public const string PluginName = "BalrondConstructions";
public const string PluginVersion = "1.4.0";
private static Harmony _harmony;
internal static ManualLogSource Log;
public static readonly ModResourceLoader modResourceLoader = new ModResourceLoader();
public static readonly DatabaseAddMethods databaseAddMethods = new DatabaseAddMethods();
public static readonly BuildPieceBuilder buildPieceBuilder = new BuildPieceBuilder();
public static readonly JsonLoader jsonLoader = new JsonLoader();
public static GameObject gui;
public static GameObject gui2;
public static string projectName = "BalrondConstructions";
public static GameObject RootObject;
public static GameObject PrefabContainer;
public static bool hasSpawned = false;
private void Awake()
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Expected O, but got Unknown
Log = ((BaseUnityPlugin)this).Logger;
try
{
SafeLoadJson();
CreatePrefabContainer();
SafeLoadAssets();
if (_harmony == null)
{
_harmony = new Harmony("balrond.astafaraios.BalrondConstructions");
}
_harmony.PatchAll();
Log.LogInfo((object)"BalrondConstructions loaded successfully.");
}
catch (Exception ex)
{
Log.LogError((object)("Error during Awake: " + ex));
}
}
private void OnDestroy()
{
try
{
if (_harmony != null)
{
_harmony.UnpatchSelf();
}
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("Error during OnDestroy: " + ex));
}
}
}
private static void SafeLoadJson()
{
try
{
jsonLoader.loadJson();
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("Failed to load JSON data: " + ex));
}
}
}
private static void SafeLoadAssets()
{
try
{
modResourceLoader.loadAssets();
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("Failed to load assets: " + ex));
}
}
}
public void CreatePrefabContainer()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Expected O, but got Unknown
try
{
if ((Object)(object)RootObject == (Object)null)
{
RootObject = new GameObject("_ValheimReforgedRoot");
Object.DontDestroyOnLoad((Object)(object)RootObject);
}
if ((Object)(object)PrefabContainer == (Object)null)
{
PrefabContainer = new GameObject("Prefabs");
PrefabContainer.transform.SetParent(RootObject.transform, false);
PrefabContainer.SetActive(false);
}
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("CreatePrefabContainer failed: " + ex));
}
}
}
public static GameObject cloneMe(GameObject source, string name)
{
if ((Object)(object)source == (Object)null)
{
if (Log != null)
{
Log.LogWarning((object)"cloneMe called with null source.");
}
return null;
}
if ((Object)(object)PrefabContainer == (Object)null)
{
if (Log != null)
{
Log.LogWarning((object)"cloneMe called but PrefabContainer is null.");
}
return null;
}
try
{
GameObject val = Object.Instantiate<GameObject>(source, PrefabContainer.transform);
((Object)val).name = (string.IsNullOrEmpty(name) ? ((Object)source).name : name);
fixMaterials(val, source);
val.SetActive(true);
return val;
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("cloneMe failed: " + ex));
}
return null;
}
}
public static GameObject fixMaterials(GameObject clone, GameObject source)
{
if ((Object)(object)clone == (Object)null || (Object)(object)source == (Object)null)
{
return clone;
}
try
{
MeshRenderer[] componentsInChildren = source.GetComponentsInChildren<MeshRenderer>(true);
MeshRenderer[] componentsInChildren2 = clone.GetComponentsInChildren<MeshRenderer>(true);
if (componentsInChildren == null || componentsInChildren2 == null || componentsInChildren.Length == 0 || componentsInChildren2.Length == 0)
{
return clone;
}
Dictionary<string, MeshRenderer> dictionary = new Dictionary<string, MeshRenderer>(StringComparer.Ordinal);
foreach (MeshRenderer val in componentsInChildren)
{
if (!((Object)(object)val == (Object)null) && !string.IsNullOrEmpty(((Object)val).name) && !dictionary.ContainsKey(((Object)val).name))
{
dictionary.Add(((Object)val).name, val);
}
}
foreach (MeshRenderer val2 in componentsInChildren2)
{
if (!((Object)(object)val2 == (Object)null) && !string.IsNullOrEmpty(((Object)val2).name) && dictionary.TryGetValue(((Object)val2).name, out var value) && !((Object)(object)value == (Object)null))
{
((Renderer)val2).materials = ((Renderer)value).sharedMaterials;
((Renderer)val2).sharedMaterials = ((Renderer)value).sharedMaterials;
}
}
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("fixMaterials failed: " + ex));
}
}
return clone;
}
private static bool IsObjectDBValid()
{
try
{
if ((Object)(object)ObjectDB.instance == (Object)null)
{
return false;
}
if (ObjectDB.instance.m_items == null || ObjectDB.instance.m_items.Count == 0)
{
return false;
}
if (ObjectDB.instance.m_recipes == null || ObjectDB.instance.m_recipes.Count == 0)
{
return false;
}
return (Object)(object)ObjectDB.instance.GetItemPrefab("Amber") != (Object)null;
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogWarning((object)("IsObjectDBValid failed: " + ex));
}
return false;
}
}
private static bool IsDedicatedServer()
{
try
{
return (Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsDedicated();
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogWarning((object)("Dedicated server check failed: " + ex));
}
return false;
}
}
private static Dictionary<string, string> GetTranslations(string language)
{
try
{
Dictionary<string, string> result = BalrondTranslator.getLanguage("English");
if (!string.IsNullOrEmpty(language) && !string.Equals(language, "English", StringComparison.OrdinalIgnoreCase))
{
Dictionary<string, string> language2 = BalrondTranslator.getLanguage(language);
if (language2 != null)
{
result = language2;
}
else
{
Debug.Log((object)("BalrondConstructions: Did not find translation file for '" + language + "', loading English"));
}
}
return result;
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("Failed to get translations for language '" + language + "': " + ex));
}
return null;
}
}
private static void AddTranslations(Dictionary<string, string> translations, Localization localizationInstance = null)
{
if (translations == null || translations.Count == 0)
{
return;
}
try
{
Localization val = localizationInstance ?? Localization.instance;
if (val == null)
{
return;
}
foreach (KeyValuePair<string, string> translation in translations)
{
if (!string.IsNullOrEmpty(translation.Key))
{
val.AddWord(translation.Key, translation.Value ?? string.Empty);
}
}
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("Failed to add translations: " + ex));
}
}
}
private static void SafeSetupDatabaseContent(bool sortRecipes)
{
if (!IsObjectDBValid())
{
return;
}
try
{
modResourceLoader.setupBuildPiecesListDB();
}
catch (Exception ex)
{
if (Log != null)
{
Log.LogError((object)("setupBuildPiecesListDB failed: " + ex));
}
}
try
{
if (modResourceLoader.itemPrefabs != null)
{
databaseAddMethods.AddItems(modResourceLoader.itemPrefabs);
}
}
catch (Exception ex2)
{
if (Log != null)
{
Log.LogError((object)("AddItems failed: " + ex2));
}
}
try
{
if (modResourceLoader.statusEffects != null)
{
databaseAddMethods.AddStatuseffects(modResourceLoader.statusEffects);
}
}
catch (Exception ex3)
{
if (Log != null)
{
Log.LogError((object)("AddStatuseffects failed: " + ex3));
}
}
try
{
if (modResourceLoader.recipes != null)
{
databaseAddMethods.AddRecipes(modResourceLoader.recipes);
}
}
catch (Exception ex4)
{
if (Log != null)
{
Log.LogError((object)("AddRecipes failed: " + ex4));
}
}
if (!sortRecipes)
{
return;
}
try
{
if ((Object)(object)ObjectDB.instance != (Object)null && ObjectDB.instance.m_recipes != null)
{
ObjectDB.instance.m_recipes.Sort(SortByScore);
}
}
catch (Exception ex5)
{
if (Log != null)
{
Log.LogError((object)("Recipe sorting failed: " + ex5));
}
}
}
private static int SortByScore(Recipe p1, Recipe p2)
{
if (p1 == p2)
{
return 0;
}
if ((Object)(object)p1 == (Object)null)
{
return -1;
}
if ((Object)(object)p2 == (Object)null)
{
return 1;
}
if ((Object)(object)p1.m_item == (Object)null && (Object)(object)p2.m_item == (Object)null)
{
return 0;
}
if ((Object)(object)p1.m_item == (Object)null)
{
return -1;
}
if ((Object)(object)p2.m_item == (Object)null)
{
return 1;
}
string strA = ((Object)p1.m_item).name ?? string.Empty;
string strB = ((Object)p2.m_item).name ?? string.Empty;
return string.Compare(strA, strB, StringComparison.Ordinal);
}
private static IEnumerable<List<GameObject>> GetAllPrefabGroups()
{
if (modResourceLoader != null)
{
if (modResourceLoader.itemPrefabs != null)
{
yield return modResourceLoader.itemPrefabs;
}
if (modResourceLoader.buildPrefabs != null)
{
yield return modResourceLoader.buildPrefabs;
}
if (modResourceLoader.monsterPrefabs != null)
{
yield return modResourceLoader.monsterPrefabs;
}
if (modResourceLoader.vfxPrefabs != null)
{
yield return modResourceLoader.vfxPrefabs;
}
if (modResourceLoader.vegetationPrefabs != null)
{
yield return modResourceLoader.vegetationPrefabs;
}
}
}
}
[Serializable]
public class MappedEffectList
{
public List<EffectInfo> pieceEffect;
public List<EffectInfo> destroyedEffects;
public List<EffectInfo> hitEffects;
public List<EffectInfo> switchEffect;
public List<EffectInfo> blockEffect;
public List<EffectInfo> equipEffect;
public List<EffectInfo> hitEffect;
public List<EffectInfo> hitTerrainEffect;
public List<EffectInfo> holdStartEffect;
public List<EffectInfo> startEffect;
public List<EffectInfo> trailStartEffect;
public List<EffectInfo> triggerEffect;
public List<EffectInfo> unequipEffect;
public EffectList createEffectListFromInfo(List<EffectInfo> list)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
EffectList val = new EffectList();
List<EffectData> list2 = new List<EffectData>();
val.m_effectPrefabs = list2.ToArray();
return val;
}
private EffectData createEffectData(EffectInfo info)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Expected O, but got Unknown
EffectData val = new EffectData();
val.m_inheritParentRotation = info.inheritRotation;
val.m_multiplyParentVisualScale = info.multiplyScale;
val.m_childTransform = info.childName;
val.m_inheritParentScale = info.inheritScale;
val.m_variant = info.variant;
val.m_scale = info.scale;
val.m_attach = info.attach;
val.m_follow = info.follow;
val.m_prefab = ZNetScene.instance.m_prefabs.Find((GameObject x) => ((Object)x).name == info.name);
return val;
}
}
[Serializable]
public struct EffectInfo
{
public string name;
public bool enabled;
public int variant;
public bool attach;
public bool follow;
public bool inheritRotation;
public bool inheritScale;
public bool multiplyScale;
public bool radnomRotation;
public bool scale;
public string childName;
public EffectInfo(string name, bool enabled = true, int variant = -1, bool attach = false, bool follow = false, bool inheritRotation = false, bool inheritScale = false, bool multiplyScale = false, bool radnomRotation = false, bool scale = false, string childName = null)
{
this.name = name;
this.enabled = enabled;
this.variant = variant;
this.attach = attach;
this.follow = follow;
this.inheritRotation = inheritRotation;
this.inheritScale = inheritScale;
this.multiplyScale = multiplyScale;
this.radnomRotation = radnomRotation;
this.scale = scale;
this.childName = childName;
}
}
public class BuildPieceBuilder
{
private List<GameObject> list;
private string[] piecesNames = BuildPieceList.buildPieces;
public void SetupBuildPieces(List<GameObject> list)
{
TableMapper.setupTables(list);
this.list = list;
string[] array = piecesNames;
foreach (string name in array)
{
GameObject val = list.Find((GameObject x) => ((Object)x).name == name);
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("Cant find buildpiece with name: " + name));
}
else
{
EditBuildPiece(val);
}
}
}
private void EditBuildPiece(GameObject gameObject)
{
//IL_6751: Unknown result type (might be due to invalid IL or missing references)
//IL_470f: Unknown result type (might be due to invalid IL or missing references)
//IL_5b07: Unknown result type (might be due to invalid IL or missing references)
//IL_4849: Unknown result type (might be due to invalid IL or missing references)
//IL_581d: Unknown result type (might be due to invalid IL or missing references)
//IL_3e77: Unknown result type (might be due to invalid IL or missing references)
//IL_3a46: Unknown result type (might be due to invalid IL or missing references)
//IL_5d93: Unknown result type (might be due to invalid IL or missing references)
//IL_3c15: Unknown result type (might be due to invalid IL or missing references)
//IL_39d4: Unknown result type (might be due to invalid IL or missing references)
//IL_69cf: Unknown result type (might be due to invalid IL or missing references)
//IL_6ecb: Unknown result type (might be due to invalid IL or missing references)
//IL_5772: Unknown result type (might be due to invalid IL or missing references)
//IL_643