using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using JardsAdditions.Patches.VanillaModifiers;
using Jotunn;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Extensions;
using Jotunn.Managers;
using Jotunn.Utils;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("JardsAdditions")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("JardsAdditions")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")]
[assembly: AssemblyFileVersion("0.0.1.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.1.0")]
namespace JardsAdditions
{
internal class Configuration
{
public ConfigEntry<bool> AddCustomPieces;
public ConfigEntry<Protected> PreventSkillLoss;
public ConfigEntry<Protected> ProtectPlayerGraves;
public ConfigEntry<float> PavedRoadSpeedMultiplier;
public ConfigEntry<float> PavedRoadStaminaMultiplier;
public ConfigEntry<bool> ApplyRunBuffsToStoneFloors;
public ConfigEntry<float> HomeActionMultiplier;
public ConfigEntry<bool> HarpoonIsHomeAction;
public ConfigEntry<float> KnockbackMultiplier;
public ConfigEntry<bool> AddUnusedPieces;
public ConfigEntry<BloodstoneEffect> BloodstoneEffect;
public ConfigEntry<float> BloodstoneDamagePercent;
public ConfigEntry<float> BloodstoneVampirismPercent;
public ConfigEntry<bool> WindRunWithModer;
}
[HarmonyPatch(typeof(Character))]
internal class KnockbackModifiers
{
[HarmonyPatch("Damage")]
[HarmonyPrefix]
private static void MultiplyKnockback(ref HitData hit)
{
if (hit != null)
{
HitData obj = hit;
obj.m_pushForce *= JardsAdditions.PluginConfig.KnockbackMultiplier.Value;
}
}
}
[HarmonyPatch(typeof(Player))]
internal class BaseStaminaMultiplier
{
[HarmonyPatch("UseStamina")]
[HarmonyPrefix]
private static void MultiplyStamina(ref float v, bool isHomeUsage)
{
if (isHomeUsage)
{
v *= JardsAdditions.PluginConfig.HomeActionMultiplier.Value;
}
}
}
[HarmonyPatch(typeof(SE_Harpooned))]
internal class HarpoonChange
{
[HarmonyPatch("UpdateStatusEffect")]
[HarmonyPrefix]
private static bool ChangeHarpoonToHomeAction(ref SE_Harpooned __instance, float dt)
{
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
if (JardsAdditions.PluginConfig.HarpoonIsHomeAction.Value)
{
SE_Harpooned obj = __instance;
((StatusEffect)obj).m_time = ((StatusEffect)obj).m_time + dt;
if (((StatusEffect)__instance).m_repeatInterval > 0f && !string.IsNullOrEmpty(((StatusEffect)__instance).m_repeatMessage))
{
SE_Harpooned obj2 = __instance;
((StatusEffect)obj2).m_msgTimer = ((StatusEffect)obj2).m_msgTimer + dt;
if (((StatusEffect)__instance).m_msgTimer > ((StatusEffect)__instance).m_repeatInterval)
{
((StatusEffect)__instance).m_msgTimer = 0f;
((StatusEffect)__instance).m_character.Message(((StatusEffect)__instance).m_repeatMessageType, ((StatusEffect)__instance).m_repeatMessage, 0, (Sprite)null);
}
}
if (!Object.op_Implicit((Object)(object)__instance.m_attacker))
{
return false;
}
Rigidbody component = ((Component)((StatusEffect)__instance).m_character).GetComponent<Rigidbody>();
if (!Object.op_Implicit((Object)(object)component))
{
return false;
}
float num = Vector3.Distance(((Component)__instance.m_attacker).transform.position, ((Component)((StatusEffect)__instance).m_character).transform.position);
if ((Object)(object)((StatusEffect)__instance).m_character.GetStandingOnShip() == (Object)null && !((StatusEffect)__instance).m_character.IsAttached())
{
float num2 = Utils.Pull(component, ((Component)__instance.m_attacker).transform.position, __instance.m_baseDistance, __instance.m_pullSpeed, __instance.m_pullForce, __instance.m_smoothDistance, true, true, __instance.m_forcePower);
SE_Harpooned obj3 = __instance;
obj3.m_drainStaminaTimer += dt;
if (__instance.m_drainStaminaTimer > __instance.m_staminaDrainInterval && num2 > 0f)
{
__instance.m_drainStaminaTimer = 0f;
float num3 = __instance.m_staminaDrain * num2 * ((StatusEffect)__instance).m_character.GetMass();
__instance.m_attacker.UseStamina(num3, true);
}
}
if (Object.op_Implicit((Object)(object)__instance.m_line))
{
__instance.m_line.SetSlack((1f - Utils.LerpStep(__instance.m_baseDistance / 2f, __instance.m_baseDistance, num)) * __instance.m_maxLineSlack);
}
if (num - __instance.m_baseDistance > __instance.m_breakDistance)
{
__instance.m_broken = true;
__instance.m_attacker.Message((MessageType)2, "$msg_harpoon_linebroke", 0, (Sprite)null);
}
if (!__instance.m_attacker.HaveStamina(0f))
{
__instance.m_broken = true;
__instance.m_attacker.Message((MessageType)2, ((StatusEffect)__instance).m_character.m_name + " $msg_harpoon_released", 0, (Sprite)null);
}
return false;
}
return true;
}
}
internal class PavedRoadHelpers
{
public static bool IsPaved(Heightmap h, Vector3 worldPos)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
int num = default(int);
int num2 = default(int);
h.WorldToVertexMask(worldPos, ref num, ref num2);
return h.m_paintMask.GetPixel(num, num2).b > 0.5f;
}
private static WearNTear GetSuitableWearNTear(GameObject gameObject, int levels = 1)
{
if ((Object)(object)gameObject == (Object)null)
{
return null;
}
WearNTear component = gameObject.GetComponent<WearNTear>();
if ((Object)(object)component != (Object)null)
{
return component;
}
if (levels > 0)
{
return GetSuitableWearNTear(((Component)gameObject.transform.parent).gameObject, levels - 1);
}
return null;
}
public static bool TestCreatureIsOnPavedRoad(Character character)
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Invalid comparison between Unknown and I4
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Invalid comparison between Unknown and I4
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Invalid comparison between Unknown and I4
if (character.IsOnGround() && (Object)(object)character.m_lastGroundCollider != (Object)null)
{
Heightmap component = ((Component)character.m_lastGroundCollider).GetComponent<Heightmap>();
if ((Object)(object)component != (Object)null)
{
return IsPaved(component, ((Component)character).transform.position);
}
if (JardsAdditions.PluginConfig.ApplyRunBuffsToStoneFloors.Value)
{
WearNTear suitableWearNTear = GetSuitableWearNTear(((Component)character.m_lastGroundCollider).gameObject);
if ((Object)(object)suitableWearNTear != (Object)null)
{
if ((int)suitableWearNTear.m_materialType != 1 && (int)suitableWearNTear.m_materialType != 4)
{
return (int)suitableWearNTear.m_materialType == 5;
}
return true;
}
return false;
}
}
return false;
}
public static void ScaleCreatureRunSpeed(Character character, ref float result)
{
if (TestCreatureIsOnPavedRoad(character))
{
result *= JardsAdditions.PluginConfig.PavedRoadSpeedMultiplier.Value;
}
}
public static void ScaleCreatureRunStamina(Character character, ref float result)
{
if (TestCreatureIsOnPavedRoad(character))
{
result *= JardsAdditions.PluginConfig.PavedRoadStaminaMultiplier.Value;
}
}
}
[HarmonyPatch(typeof(Character))]
internal class PavedRoadModifiers_CharacterSpeed
{
[HarmonyPatch("GetRunSpeedFactor")]
[HarmonyPostfix]
private static void ScaleCharacterRunSpeed(ref Character __instance, ref float __result)
{
PavedRoadHelpers.ScaleCreatureRunSpeed(__instance, ref __result);
}
}
[HarmonyPatch(typeof(Player))]
internal class PavedRoadModifiers_PlayerSpeed
{
[HarmonyPatch("GetRunSpeedFactor")]
[HarmonyPostfix]
private static void ScalePlayerRunSpeed(ref Player __instance, ref float __result)
{
PavedRoadHelpers.ScaleCreatureRunSpeed((Character)(object)__instance, ref __result);
}
}
[HarmonyPatch(typeof(SEMan))]
internal class PavedRoadModifiers_PlayerStamina
{
[HarmonyPatch("ModifyRunStaminaDrain")]
[HarmonyPostfix]
private static void ScalePlayerRunStamina(ref SEMan __instance, float baseDrain, ref float drain, bool minZero = true)
{
PavedRoadHelpers.ScaleCreatureRunStamina(__instance.m_character, ref drain);
}
}
[BepInPlugin("hu.jard.JardsAdditions", "Jard's Additions", "1.5.1")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
[BepInIncompatibility("Basil_NoStamCosts")]
internal class JardsAdditions : BaseUnityPlugin
{
public const string PluginGUID = "hu.jard.JardsAdditions";
public const string PluginName = "Jard's Additions";
public const string PluginVersion = "1.5.1";
private AssetBundle LocalizationBundle;
private AssetBundle VanityBundle;
private AssetBundle CustomPieceBundle;
internal static CustomItem gauntlets;
public static CustomLocalization Localization = LocalizationManager.Instance.GetLocalization();
public static Configuration PluginConfig = new Configuration();
private void Awake()
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
LoadConfig(ref PluginConfig);
LoadAssets();
LoadLocalization();
PrefabManager.OnVanillaPrefabsAvailable += AddItems;
AddCustomPieces();
PieceManager.OnPiecesRegistered += AddVanillaPieces;
new Harmony("hu.jard.JardsAdditions").PatchAll();
new Harmony("Basil_NoStamCosts").UnpatchSelf();
}
private void LoadConfig(ref Configuration config)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Expected O, but got Unknown
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: 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_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Expected O, but got Unknown
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Expected O, but got Unknown
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0126: Expected O, but got Unknown
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Expected O, but got Unknown
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Expected O, but got Unknown
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
//IL_01c9: Expected O, but got Unknown
//IL_0203: Unknown result type (might be due to invalid IL or missing references)
//IL_020d: Expected O, but got Unknown
//IL_0230: Unknown result type (might be due to invalid IL or missing references)
//IL_023a: Expected O, but got Unknown
//IL_0262: Unknown result type (might be due to invalid IL or missing references)
//IL_026c: Expected O, but got Unknown
//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
//IL_02b0: Expected O, but got Unknown
//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
//IL_02f4: Expected O, but got Unknown
//IL_031c: Unknown result type (might be due to invalid IL or missing references)
//IL_0326: Expected O, but got Unknown
ConfigurationManagerAttributes val = new ConfigurationManagerAttributes
{
IsAdminOnly = true
};
config.AddCustomPieces = ((BaseUnityPlugin)this).Config.Bind<bool>("Custom additions", "AddCustomPieces", true, new ConfigDescription("Enables all custom build pieces (hybrid crafting stations) (requires full game restart)", (AcceptableValueBase)null, new object[1] { val }));
config.PreventSkillLoss = ((BaseUnityPlugin)this).Config.Bind<Protected>("PvP Protection", "PreventPvPSkillLoss", Protected.OnlyInWard, new ConfigDescription("Whether to prevent skill loss when killed by another player (enforced by server)", (AcceptableValueBase)null, new object[1] { val }));
config.ProtectPlayerGraves = ((BaseUnityPlugin)this).Config.Bind<Protected>("PvP Protection", "ProtectPlayerGraves", Protected.OnlyInWard, new ConfigDescription("Whether to prevent grave access by other players (enforced by server)", (AcceptableValueBase)null, new object[1] { val }));
config.PavedRoadStaminaMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Vanilla tweaks", "PavedRoadStaminaMultiplier", 0.4f, new ConfigDescription("Stamina multiplier when running on a paved road (enforced by server)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), new object[1] { val }));
config.PavedRoadSpeedMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Vanilla tweaks", "PavedRoadSpeedMultiplier", 1.15f, new ConfigDescription("Speed multiplier when running on a paved road (enforced by server)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, float.MaxValue), new object[1] { val }));
config.ApplyRunBuffsToStoneFloors = ((BaseUnityPlugin)this).Config.Bind<bool>("Vanilla tweaks", "ApplyRunBuffsToStoneFloors", true, new ConfigDescription("Whether to apply speed and stamina multipliers when the player is running on a stone piece (stone floor, grausten floor, etc) (enforced by server)", (AcceptableValueBase)null, Array.Empty<object>()));
config.HomeActionMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Vanilla tweaks", "HomeActionMultiplier", 1f, new ConfigDescription("Stamina multiplier of home/build actions (placing, destruction, repairing) (enforced by server)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), new object[1] { val }));
config.HarpoonIsHomeAction = ((BaseUnityPlugin)this).Config.Bind<bool>("Vanilla tweaks", "HarpoonIsHomeAction", false, new ConfigDescription("Whether harpooning creatures is a 'home action' and should receive all home building stamina discounts (enforced by server)", (AcceptableValueBase)null, new object[1] { val }));
config.KnockbackMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Vanilla tweaks", "KnockbackMultiplier", 1f, new ConfigDescription("Knockback multiplier (enforced by server)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, float.MaxValue), new object[1] { val }));
config.AddUnusedPieces = ((BaseUnityPlugin)this).Config.Bind<bool>("Client-side tweaks", "AddUnusedPieces", true, new ConfigDescription("Whether to add unused build pieces (turf roof, stone 4x4, cracked pots, etc...) to the build hammer tables.\nDisable this if you already have a mod that adds these in.", (AcceptableValueBase)null, Array.Empty<object>()));
config.BloodstoneEffect = ((BaseUnityPlugin)this).Config.Bind<BloodstoneEffect>("Vanilla tweaks", "BloodstoneEffect", BloodstoneEffect.Damage, new ConfigDescription("Modify the effect of the bloodstone enchantment (enforced by server)", (AcceptableValueBase)null, new object[1] { val }));
config.BloodstoneDamagePercent = ((BaseUnityPlugin)this).Config.Bind<float>("Vanilla tweaks", "BloodstoneDamagePercent", 0.004f, new ConfigDescription("Percentage increase of damage per missing health point for bloodstone damage effect (enforced by server)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.002f, 0.01f), new object[1] { val }));
config.BloodstoneVampirismPercent = ((BaseUnityPlugin)this).Config.Bind<float>("Vanilla tweaks", "BloodstoneVampirismPercent", 0.045f, new ConfigDescription("Percentage of health returned per missing health point for bloodstone vampirism effect (enforced by server)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), new object[1] { val }));
config.WindRunWithModer = ((BaseUnityPlugin)this).Config.Bind<bool>("Vanilla tweaks", "WindRunWithModer", true, new ConfigDescription("Whether Moder's power synergizes with the asksvin cape by controlling wind direction while wearing the cape (enforced by server)", (AcceptableValueBase)null, new object[1] { val }));
}
private void LoadAssets()
{
LocalizationBundle = AssetUtils.LoadAssetBundleFromResources("localization", Assembly.GetExecutingAssembly());
VanityBundle = AssetUtils.LoadAssetBundleFromResources("vanity", Assembly.GetExecutingAssembly());
CustomPieceBundle = AssetUtils.LoadAssetBundleFromResources("custompieces", Assembly.GetExecutingAssembly());
}
private void LoadLocalization()
{
TextAsset[] array = LocalizationBundle.LoadAllAssets<TextAsset>();
foreach (TextAsset val in array)
{
Localization.AddJsonFile(((Object)val).name.Replace(".json", null), ((object)val).ToString());
}
}
private void AddItemFrom(AssetBundle parentBundle, string prefabName)
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Expected O, but got Unknown
GameObject val = parentBundle.LoadAsset<GameObject>(prefabName);
if ((Object)(object)val == (Object)null)
{
((BaseUnityPlugin)this).Logger.LogError((object)("Wasn't able to load prefab '" + prefabName + "' from asset bundle '" + ((Object)parentBundle).name + "'. Export probably messed up."));
}
CustomItem val2 = new CustomItem(val, true);
if (prefabName.Equals("ShieldJardGauntlets"))
{
gauntlets = val2;
}
ItemManager.Instance.AddItem(val2);
}
private void AddItems()
{
AddItemFrom(VanityBundle, "ArmorJardChest");
AddItemFrom(VanityBundle, "ArmorJardLegs");
AddItemFrom(VanityBundle, "SwordJard");
AddItemFrom(VanityBundle, "SwordJardOffset");
AddItemFrom(VanityBundle, "ShieldJardGauntlets");
AddItemFrom(VanityBundle, "CapeJard");
AddItemFrom(VanityBundle, "HelmetDriver");
AddItemFrom(VanityBundle, "CapeDriver");
PrefabManager.OnVanillaPrefabsAvailable -= AddItems;
}
private void AddPieceFrom(string prefabName, AssetBundle parentBundle = null, string tool = "Hammer", string station = "piece_workbench", PieceCategory category = 0, RequirementConfig recipe = null)
{
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
GameObject val = (GameObject)(((Object)(object)parentBundle == (Object)null) ? ((object)Array.Find(Resources.FindObjectsOfTypeAll<GameObject>(), (GameObject _) => ((Object)_).name.Equals(prefabName))) : ((object)parentBundle.LoadAsset<GameObject>(prefabName)));
if ((Object)(object)val == (Object)null)
{
return;
}
if ((Object)(object)parentBundle == (Object)null)
{
if ((Object)(object)val.GetComponent<Piece>() == (Object)null)
{
Piece obj = val.AddComponent<Piece>();
obj.m_icon = Array.Find(Resources.FindObjectsOfTypeAll<GameObject>(), (GameObject _) => ((Object)_).name.Equals("ShieldBanded")).GetComponent<ItemDrop>().m_itemData.GetIcon();
CustomPiece val2 = InstantiateCustomPiece(val, "piece_" + prefabName, tool, station, category, recipe);
Object.Destroy((Object)(object)obj);
ExposedGameObjectExtension.AddComponentCopy<Piece>(val, val2.Piece);
PieceManager.Instance.AddPiece(val2);
}
else
{
PieceManager.Instance.GetPieceTable(tool).m_pieces.Add(val);
}
}
else if (PluginConfig.AddCustomPieces.Value)
{
PieceManager.Instance.AddPiece(InstantiateCustomPiece(val, prefabName, tool, station, category, recipe));
}
}
private CustomPiece InstantiateCustomPiece(GameObject prefab, string name, string tool, string station, PieceCategory category, RequirementConfig recipe)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Expected O, but got Unknown
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Expected O, but got Unknown
PieceConfig val = new PieceConfig();
val.Name = "$" + name + "_name";
val.Description = "$" + name + "_description";
val.PieceTable = tool;
val.CraftingStation = station;
val.Category = ((object)(PieceCategory)(ref category)).ToString();
val.AddRequirement(recipe);
return new CustomPiece(prefab, true, val);
}
private void AddVanillaPieces()
{
if (PluginConfig.AddUnusedPieces.Value)
{
AddPieceFrom("turf_roof", null, "Hammer", "piece_workbench", (PieceCategory)0);
AddPieceFrom("turf_roof_top", null, "Hammer", "piece_workbench", (PieceCategory)0);
AddPieceFrom("wood_ledge", null, "Hammer", "piece_workbench", (PieceCategory)0);
AddPieceFrom("stone_floor", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("piece_pot1_cracked", null, "Hammer", "piece_workbench", (PieceCategory)4);
AddPieceFrom("piece_pot2_cracked", null, "Hammer", "piece_workbench", (PieceCategory)4);
AddPieceFrom("piece_pot3_cracked", null, "Hammer", "piece_workbench", (PieceCategory)4);
AddPieceFrom("blackmarble_stair_corner", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_stair_corner_left", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_tile_floor_1x1", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_tile_floor_2x2", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_tile_wall_1x1", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_tile_wall_2x2", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_tile_wall_2x4", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_2x2x1", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_floor_large", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_column_3", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_head_01", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_head_02", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_head_big01", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("blackmarble_head_big02", null, "Hammer", "piece_stonecutter", (PieceCategory)3);
AddPieceFrom("piece_dvergr_wood_wall", null, "Hammer", "piece_workbench", (PieceCategory)2);
}
PieceManager.OnPiecesRegistered -= AddVanillaPieces;
}
private void AddCustomPieces()
{
AddPieceFrom("AltWorkbench", CustomPieceBundle, "Hammer", "", (PieceCategory)1);
AddPieceFrom("FlametalGrill", CustomPieceBundle, "Hammer", "blackforge", (PieceCategory)1);
AddPieceFrom("DvergrFermenter", CustomPieceBundle, "Hammer", "blackforge", (PieceCategory)1);
AddPieceFrom("stone_big_floor_4x4", CustomPieceBundle, "Hammer", "piece_stonecutter", (PieceCategory)3);
}
}
internal enum Protected
{
Yes,
OnlyInWard,
No
}
internal class PvpWardHelpers
{
public static bool checkIfLocationIsSafe(Vector3 position)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
bool result = false;
foreach (PrivateArea allArea in PrivateArea.m_allAreas)
{
if (allArea.IsEnabled() && allArea.IsInside(position, 0f))
{
return true;
}
}
return result;
}
public static bool getSafeAreas(Vector3 position, ref List<PrivateArea> areas)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
bool result = false;
foreach (PrivateArea allArea in PrivateArea.m_allAreas)
{
if (allArea.IsEnabled() && allArea.IsInside(position, 0f))
{
areas.Add(allArea);
result = true;
}
}
return result;
}
}
[HarmonyPatch(typeof(Skills))]
public class ProtectSkills
{
[HarmonyPatch("OnDeath")]
private static bool Prefix(ref Skills __instance)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Invalid comparison between Unknown and I4
Player player = __instance.m_player;
bool flag = default(bool);
switch (JardsAdditions.PluginConfig.PreventSkillLoss.Value)
{
case Protected.Yes:
flag = true;
break;
case Protected.OnlyInWard:
flag = PvpWardHelpers.checkIfLocationIsSafe(((Component)player).transform.position);
break;
case Protected.No:
flag = false;
break;
default:
global::<PrivateImplementationDetails>.ThrowInvalidOperationException();
break;
}
bool num = flag;
bool flag2 = (int)((Character)player).m_lastHit.m_hitType == 2;
return !(num && flag2);
}
}
[HarmonyPatch(typeof(TombStone))]
public class ProtectTombstone
{
[HarmonyPatch("GetHoverText")]
[HarmonyPrefix]
private static bool NoAccessHoverText(ref TombStone __instance, ref string __result)
{
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
if (__instance.m_nview.IsValid())
{
bool flag = default(bool);
switch (JardsAdditions.PluginConfig.ProtectPlayerGraves.Value)
{
case Protected.Yes:
flag = true;
break;
case Protected.OnlyInWard:
flag = PvpWardHelpers.checkIfLocationIsSafe(((Component)__instance).transform.position);
break;
case Protected.No:
flag = false;
break;
default:
global::<PrivateImplementationDetails>.ThrowInvalidOperationException();
break;
}
if (flag && !__instance.IsOwner())
{
string text = __instance.m_text + " " + __instance.GetOwnerName();
__result = Localization.instance.Localize(text + "\n$piece_noaccess");
return false;
}
}
return true;
}
[HarmonyPatch("Interact")]
[HarmonyPrefix]
private static bool BlockInteract(ref TombStone __instance)
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
List<PrivateArea> areas = new List<PrivateArea>();
bool flag = default(bool);
switch (JardsAdditions.PluginConfig.ProtectPlayerGraves.Value)
{
case Protected.Yes:
flag = true;
break;
case Protected.OnlyInWard:
flag = PvpWardHelpers.getSafeAreas(((Component)__instance).transform.position, ref areas);
break;
case Protected.No:
flag = false;
break;
default:
global::<PrivateImplementationDetails>.ThrowInvalidOperationException();
break;
}
if (flag && !__instance.IsOwner())
{
foreach (PrivateArea item in areas)
{
item.FlashShield(false);
}
return false;
}
return true;
}
}
}
namespace JardsAdditions.VanillaModifiers
{
internal class StopJumpsHelpers
{
public static bool JumpIsRightMB()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Invalid comparison between Unknown and I4
ButtonDef buttonDef = ZInput.m_instance.GetButtonDef("Jump");
if (buttonDef != null)
{
return (int)buttonDef.m_mouseButton == 1;
}
return false;
}
}
[HarmonyPatch(typeof(Humanoid))]
internal class StopJumpsInInventory
{
public static bool ItemFlag;
[HarmonyPatch("UseItem")]
[HarmonyPostfix]
private static void PlayerUsedItem(bool fromInventoryGui)
{
if (fromInventoryGui && StopJumpsHelpers.JumpIsRightMB())
{
ItemFlag = true;
}
}
}
[HarmonyPatch(typeof(Character))]
internal class StopJumpIfRightClicked
{
[HarmonyPatch("Jump")]
[HarmonyPrefix]
private static bool StopJump(ref Character __instance)
{
if (StopJumpsInInventory.ItemFlag && (Object)(object)__instance == (Object)(object)Player.m_localPlayer)
{
StopJumpsInInventory.ItemFlag = false;
return false;
}
return true;
}
}
}
namespace JardsAdditions.Patches.VanillaModifiers
{
internal enum BloodstoneEffect
{
Damage,
Vampirism,
DamageAndVampirism
}
[HarmonyPatch(typeof(Attack))]
internal class BloodstoneDamageModifiers
{
private static bool ShouldModifyDamage()
{
if (JardsAdditions.PluginConfig.BloodstoneEffect.Value == BloodstoneEffect.Vampirism)
{
return true;
}
if ((double)JardsAdditions.PluginConfig.BloodstoneDamagePercent.Value != 0.02)
{
return true;
}
return false;
}
[HarmonyPatch("ModifyDamage")]
[HarmonyPrefix]
private static bool OverrideBloodDamage(ref Attack __instance, HitData hitData, float damageFactor)
{
if (ShouldModifyDamage())
{
if (__instance.m_damageMultiplier != 1f)
{
((DamageTypes)(ref hitData.m_damage)).Modify(__instance.m_damageMultiplier);
}
if (damageFactor != 1f)
{
((DamageTypes)(ref hitData.m_damage)).Modify(damageFactor);
}
((DamageTypes)(ref hitData.m_damage)).Modify(__instance.GetLevelDamageFactor());
if (__instance.m_damageMultiplierByTotalHealthMissing > 0f)
{
((DamageTypes)(ref hitData.m_damage)).Modify(1f + (1f - ((Character)__instance.m_character).GetHealthPercentage()) * __instance.m_damageMultiplierByTotalHealthMissing);
}
if (JardsAdditions.PluginConfig.BloodstoneEffect.Value != BloodstoneEffect.Vampirism && __instance.m_damageMultiplierPerMissingHP > 0f)
{
float num = ((JardsAdditions.PluginConfig.BloodstoneDamagePercent.Value != 0.002f) ? JardsAdditions.PluginConfig.BloodstoneDamagePercent.Value : __instance.m_damageMultiplierPerMissingHP);
if (num > 0f)
{
((DamageTypes)(ref hitData.m_damage)).Modify(1f + (((Character)__instance.m_character).GetMaxHealth() - ((Character)__instance.m_character).GetHealth()) * num);
}
}
return false;
}
return true;
}
}
[HarmonyPatch(typeof(Attack))]
internal class BloodstoneAddVampirismPatches
{
public static float CalculateVampMultiplier(ItemData item)
{
//IL_0048: 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_005f: Unknown result type (might be due to invalid IL or missing references)
float num = ((JardsAdditions.PluginConfig.BloodstoneVampirismPercent.Value != item.m_shared.m_attack.m_damageMultiplierPerMissingHP) ? JardsAdditions.PluginConfig.BloodstoneVampirismPercent.Value : item.m_shared.m_attack.m_damageMultiplierPerMissingHP);
DamageTypes damages = item.m_shared.m_damages;
if (item.m_quality > 1)
{
((DamageTypes)(ref damages)).Add(item.m_shared.m_damagesPerLevel, item.m_quality - 1);
}
float num2 = ((DamageTypes)(ref damages)).GetTotalPhysicalDamage() / 140f;
num2 = Mathf.Pow(num2, 2.5f);
if (num2 < 1f)
{
num2 = 1f;
}
float num3 = default(float);
ZoneSystem.instance.GetGlobalKey((GlobalKeys)1, ref num3);
if (num3 == 0f)
{
num3 = 100f;
}
num3 /= 100f;
return num * num2 * num3;
}
[HarmonyPatch("OnAttackTrigger")]
[HarmonyPrefix]
private static void OnAttackTrigger(ref Attack __instance)
{
if (JardsAdditions.PluginConfig.BloodstoneEffect.Value != 0 && __instance.m_damageMultiplierPerMissingHP > 0f)
{
float num = CalculateVampMultiplier(__instance.m_weapon);
float attackHealthReturnHit = (((Character)__instance.m_character).GetMaxHealth() - ((Character)__instance.m_character).GetHealth()) * num;
__instance.m_attackHealthReturnHit = attackHealthReturnHit;
}
}
}
[HarmonyPatch(typeof(ItemData))]
internal class BloodstoneTooltipPatches
{
[HarmonyPatch("GetTooltip", new Type[]
{
typeof(ItemData),
typeof(int),
typeof(bool),
typeof(float)
})]
[HarmonyPostfix]
private static void OverrideTooltipValues(ref string __result, ItemData item)
{
LinkedList<string> linkedList = new LinkedList<string>(__result.Split(new char[1] { '\n' }));
bool flag = false;
for (LinkedListNode<string> linkedListNode = linkedList.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
{
if (linkedListNode.Value.Contains("$item_damagemultiplierhp"))
{
if (JardsAdditions.PluginConfig.BloodstoneDamagePercent.Value != item.m_shared.m_attack.m_damageMultiplierPerMissingHP)
{
linkedListNode.Value = $"$item_damagemultiplierhp: <color=orange>{JardsAdditions.PluginConfig.BloodstoneDamagePercent.Value * 100f}%</color>";
flag = true;
}
if (JardsAdditions.PluginConfig.BloodstoneEffect.Value != 0)
{
float num = BloodstoneAddVampirismPatches.CalculateVampMultiplier(item);
string value = $"$item_vampirismhp: <color=orange>{num * 100f}%</color>";
if (JardsAdditions.PluginConfig.BloodstoneEffect.Value == BloodstoneEffect.Vampirism)
{
linkedListNode.Value = value;
}
else
{
linkedList.AddAfter(linkedListNode, value);
}
flag = true;
}
break;
}
}
if (!flag)
{
return;
}
__result = "";
foreach (string item2 in linkedList)
{
__result = __result + "\n" + item2;
}
}
}
[HarmonyPatch(typeof(EnvMan))]
internal class ModerPowerModifiers
{
[HarmonyPatch("UpdateWind")]
[HarmonyPrefix]
private static bool AskCapeWind(ref EnvMan __instance, long timeSec, float dt)
{
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
if (__instance.GetCurrentEnvironment() != null && Object.op_Implicit((Object)(object)Player.m_localPlayer) && (Object)(object)Ship.GetLocalShip() == (Object)null && ((Character)Player.m_localPlayer).m_seman.HaveStatusEffect(StringExtensionMethods.GetStableHashCode("GP_Moder")) && ((Character)Player.m_localPlayer).m_seman.HaveStatusEffect(StringExtensionMethods.GetStableHashCode("WindRun")) && JardsAdditions.PluginConfig.WindRunWithModer.Value)
{
State state = Random.state;
float num = 0f;
float num2 = 0.5f;
__instance.AddWindOctave(timeSec, 1, ref num, ref num2);
__instance.AddWindOctave(timeSec, 2, ref num, ref num2);
__instance.AddWindOctave(timeSec, 4, ref num, ref num2);
__instance.AddWindOctave(timeSec, 8, ref num, ref num2);
Random.state = state;
num2 = Mathf.Lerp(__instance.GetCurrentEnvironment().m_windMin, __instance.GetCurrentEnvironment().m_windMax, num2);
__instance.SetTargetWind(((Component)Player.m_localPlayer).transform.forward, num2);
__instance.UpdateWindTransition(dt);
return false;
}
return true;
}
}
}
namespace JardsAdditions.Patches.CustomPatches
{
[HarmonyPatch(typeof(Humanoid))]
internal class CapeColliderPatches
{
[HarmonyPatch("SetupVisEquipment")]
[HarmonyPostfix]
private static void ModifyColliderSize(ref Humanoid __instance)
{
if (__instance is Player)
{
Transform val = TransformExtensions.FindDeepChild(((Component)__instance).transform, "Hips", (IterativeSearchType)1);
Transform val2 = TransformExtensions.FindDeepChild(((Component)val).transform, "Spine1", (IterativeSearchType)1);
Transform val3 = TransformExtensions.FindDeepChild(((Component)val).transform, "Head", (IterativeSearchType)1);
if (__instance.m_visEquipment.m_shoulderItem.Equals("CapeJard"))
{
AttemptAdjustWith(((Component)val).transform, "ClothCollider", 0.575f);
AttemptAdjustWith(((Component)val).transform, "ClothColliderHips", 0.375f);
AttemptAdjustWith(((Component)val).transform, "ClothColliderHipsCape", 0.375f);
AttemptAdjustWith(((Component)val2).transform, "ClothCollider (3)", 0.55f);
AttemptAdjustWith(((Component)val2).transform, "ClothColliderMid", 0.25f);
AttemptAdjustWith(((Component)val2).transform, "ClothColliderMidCape", 0.25f);
AttemptAdjustWith(((Component)val3).transform, "ClothColliderHead", 0f);
AttemptAdjustWith(((Component)val3).transform, "ClothColliderHeadCape", 0f);
}
else
{
AttemptAdjustWith(((Component)val).transform, "ClothCollider", 0.8f);
AttemptAdjustWith(((Component)val).transform, "ClothColliderHips", 0.45f);
AttemptAdjustWith(((Component)val).transform, "ClothColliderHipsCape", 0.5f);
AttemptAdjustWith(((Component)val2).transform, "ClothCollider (3)", 0.8f);
AttemptAdjustWith(((Component)val2).transform, "ClothColliderMid", 0.45f);
AttemptAdjustWith(((Component)val2).transform, "ClothColliderMidCape", 0.45f);
AttemptAdjustWith(((Component)val3).transform, "ClothColliderHead", 0.38f);
AttemptAdjustWith(((Component)val3).transform, "ClothColliderHeadCape", 0.5f);
}
}
}
private static void AttemptAdjustWith(Transform parent, string colliderToTry, float radius)
{
if (Object.op_Implicit((Object)(object)parent) && Object.op_Implicit((Object)(object)parent.Find(colliderToTry)))
{
((Component)parent.Find(colliderToTry)).GetComponent<CapsuleCollider>().radius = radius;
}
}
}
[HarmonyPatch(typeof(Humanoid))]
internal class ShieldAnimationPatches
{
private static AnimationClip originalBlock;
private static EffectList originalBlockEffects;
private static EffectList gauntletBlockEffects;
[HarmonyPatch("SetupAnimationState")]
[HarmonyPrefix]
private static bool CustomBlockAnimation(ref Humanoid __instance)
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Expected O, but got Unknown
if (__instance.m_leftItem != null && __instance.m_visEquipment.m_leftItem.Equals("ShieldJardGauntlets"))
{
if (__instance.m_rightItem != null)
{
__instance.SetAnimationState(__instance.m_rightItem.m_shared.m_animationState);
AnimatorOverrideController val = null;
val = (AnimatorOverrideController)(typeof(AnimatorOverrideController).IsInstanceOfType(((Character)__instance).m_zanim.m_animator.runtimeAnimatorController) ? ((object)/*isinst with value type is only supported in some contexts*/) : ((object)new AnimatorOverrideController(((Character)__instance).m_zanim.m_animator.runtimeAnimatorController)));
if ((Object)(object)originalBlock == (Object)null)
{
originalBlock = val["Block idle"];
}
val["Block idle"] = val["Sword And Shield Idle"];
((Character)__instance).m_zanim.m_animator.runtimeAnimatorController = (RuntimeAnimatorController)(object)val;
return false;
}
__instance.SetAnimationState((AnimationState)0);
return false;
}
if (typeof(AnimatorOverrideController).IsInstanceOfType(((Character)__instance).m_zanim.m_animator.runtimeAnimatorController) && (Object)(object)originalBlock != (Object)null)
{
RuntimeAnimatorController runtimeAnimatorController = ((Character)__instance).m_zanim.m_animator.runtimeAnimatorController;
((AnimatorOverrideController)((runtimeAnimatorController is AnimatorOverrideController) ? runtimeAnimatorController : null))["Block idle"] = originalBlock;
}
return true;
}
[HarmonyPatch("BlockAttack")]
[HarmonyPrefix]
private static void ReplaceBlockEffect(ref Humanoid __instance)
{
if (originalBlockEffects == null && __instance.GetCurrentBlocker() != null && __instance.m_visEquipment.m_leftItem.Equals("ShieldJardGauntlets"))
{
originalBlockEffects = __instance.GetCurrentBlocker().m_shared.m_blockEffect;
if (gauntletBlockEffects == null)
{
gauntletBlockEffects = JardsAdditions.gauntlets.ItemPrefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_blockEffect;
}
__instance.GetCurrentBlocker().m_shared.m_blockEffect = gauntletBlockEffects;
}
}
[HarmonyPatch("BlockAttack")]
[HarmonyPostfix]
private static void RestoreBlockEffect(ref Humanoid __instance)
{
if (originalBlockEffects != null && __instance.GetCurrentBlocker() != null)
{
__instance.GetCurrentBlocker().m_shared.m_blockEffect = originalBlockEffects;
originalBlockEffects = null;
}
}
}
}
namespace JardsAdditions.Grill
{
[HarmonyPatch(typeof(CookingStation))]
internal class GrillPatches_CookingStation
{
[HarmonyPatch("OnUseItem")]
[HarmonyPrefix]
private static bool OverrideOnUseItem(ref CookingStation __instance, ref bool __result, Humanoid user, ItemData item)
{
if (((Object)((Component)__instance).gameObject).name.StartsWith("FlametalGrill") && __instance.m_requireFire && __instance.IsFireLit())
{
if (GetSlotForGrill(__instance, ((Object)item.m_dropPrefab).name) == -1)
{
((Character)user).Message((MessageType)2, "$msg_nocookroom", 0, (Sprite)null);
__result = false;
return false;
}
__result = __instance.CookItem(user, item);
return false;
}
return true;
}
[HarmonyPatch("CookItem")]
[HarmonyPrefix]
private static bool OverrideLocalCookItem(ref CookingStation __instance, ref bool __result, Humanoid user, ItemData item)
{
if (((Object)((Component)__instance).gameObject).name.StartsWith("FlametalGrill"))
{
string name = ((Object)item.m_dropPrefab).name;
if (!__instance.m_nview.HasOwner())
{
__instance.m_nview.ClaimOwnership();
}
foreach (ItemMessage incompatibleItem in __instance.m_incompatibleItems)
{
if (incompatibleItem.m_item.m_itemData.m_shared.m_name == item.m_shared.m_name)
{
((Character)user).Message((MessageType)2, incompatibleItem.m_message + " " + incompatibleItem.m_item.m_itemData.m_shared.m_name, 0, (Sprite)null);
__result = false;
return false;
}
}
if (!__instance.IsItemAllowed(item))
{
__result = false;
return false;
}
if (GetSlotForGrill(__instance, name) == -1)
{
__result = false;
return false;
}
user.GetInventory().RemoveOneItem(item);
__instance.m_nview.InvokeRPC("RPC_AddItem", new object[1] { name });
__result = true;
return false;
}
return true;
}
[HarmonyPatch("RPC_AddItem")]
[HarmonyPrefix]
private static bool OverrideNetworkAddItem(ref CookingStation __instance, long sender, string itemName)
{
//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)
if (((Object)__instance).name.StartsWith("FlametalGrill"))
{
if (__instance.IsItemAllowed(itemName))
{
int slotForGrill = GetSlotForGrill(__instance, itemName);
if (slotForGrill != -1)
{
__instance.SetSlot(slotForGrill, itemName, 0f, (Status)0);
__instance.m_nview.InvokeRPC(ZNetView.Everybody, "RPC_SetSlotVisual", new object[2] { slotForGrill, itemName });
__instance.m_addEffect.Create(__instance.m_slots[slotForGrill].position, Quaternion.identity, (Transform)null, 1f, -1);
}
}
return false;
}
return true;
}
[HarmonyPatch("FindCookableItem")]
[HarmonyPrefix]
private static bool FindSuitableItem(ref CookingStation __instance, ref ItemData __result, Inventory inventory)
{
if (((Object)__instance).name.StartsWith("FlametalGrill"))
{
foreach (ItemConversion item2 in __instance.m_conversion)
{
ItemData item = inventory.GetItem(item2.m_from.m_itemData.m_shared.m_name, -1, false);
if (item != null && GetSlotForGrill(__instance, ((Object)item.m_dropPrefab).name) != -1)
{
__result = item;
return false;
}
}
__result = null;
return false;
}
return true;
}
private static int GetSlotForGrill(CookingStation station, string item)
{
if (!((Object)((Component)station).gameObject).name.StartsWith("FlametalGrill"))
{
return -1;
}
if (item.Equals("BugMeat") || item.Equals("BoneMawSerpentMeat") || item.Equals("SerpentMeat") || item.Equals("VoltureMeat"))
{
for (int i = 8; i < station.m_slots.Length; i++)
{
if (station.m_nview.GetZDO().GetString("slot" + i, "") == "")
{
return i;
}
}
return -1;
}
return station.GetFreeSlot();
}
}
[HarmonyPatch(typeof(CraftingStation))]
internal class GrillPatches_CraftingStation
{
[HarmonyPatch("GetHoverText")]
[HarmonyPrefix]
private static bool ReplaceHoverText(ref CraftingStation __instance, ref string __result)
{
if (((Object)__instance).name.StartsWith("FlametalGrill"))
{
__result = ((!__instance.InUseDistance((Humanoid)(object)Player.m_localPlayer)) ? Localization.instance.Localize("<color=#888888>$piece_toofar</color>") : Localization.instance.Localize("$piece_cookingstation_flametal\n[<color=yellow><b>$KEY_Use</b></color>] $piece_use "));
return false;
}
return true;
}
}
[HarmonyPatch(typeof(InventoryGui))]
internal class GrillPatches_InventoryGui
{
[HarmonyPatch("UpdateRecipe")]
[HarmonyPostfix]
private static void ReplaceGuiName(ref InventoryGui __instance, Player player, float dt)
{
if (Object.op_Implicit((Object)(object)player.GetCurrentCraftingStation()) && ((Object)player.GetCurrentCraftingStation()).name.StartsWith("FlametalGrill"))
{
__instance.m_craftingStationName.text = Localization.instance.Localize("$piece_cookingstation_flametal");
}
}
}
[HarmonyPatch(typeof(Character))]
internal class GrillBurnsCharacters
{
[HarmonyPatch("CustomFixedUpdate")]
[HarmonyPrefix]
private static void BurnTheCreature(ref Character __instance, float dt)
{
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
if (__instance.m_nview.IsValid() && __instance.m_nview.GetZDO().IsOwner())
{
if (__instance.IsOnGround() && (Object)(object)__instance.m_lastGroundCollider != (Object)null && (Object)(object)((Component)__instance.m_lastGroundCollider).transform.parent != (Object)null && ((Object)__instance.m_lastGroundCollider).name.Contains("Blocker_hot") && ((Object)((Component)((Component)__instance.m_lastGroundCollider).transform.parent).gameObject).name.StartsWith("FlametalGrill") && ((Component)((Component)__instance.m_lastGroundCollider).transform.parent).gameObject.GetComponent<CookingStation>().IsFireLit())
{
Character obj = __instance;
obj.m_lavaHeatLevel += 0.1f * dt * __instance.m_heatBuildupBase * (1f - __instance.GetEquipmentHeatResistanceModifier());
}
else if (!WorldGenerator.IsAshlands(((Component)__instance).transform.position.x, ((Component)__instance).transform.position.z))
{
Character obj2 = __instance;
obj2.m_lavaHeatLevel -= dt * __instance.m_heatCooldownBase;
}
__instance.m_lavaHeatLevel = Mathf.Clamp(__instance.m_lavaHeatLevel, 0f, 1f);
}
}
}
}