using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Jotunn;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using Jotunn.Utils;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("JotunnModStub")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("JotunnModStub")]
[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 NoobBallista
{
[BepInPlugin("GsiX.NoobBallista", "GsiX Noob Ballista", "1.2.7")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
internal class NoobBallistaPlugins : BaseUnityPlugin
{
[HarmonyPatch(typeof(ItemDrop), "Awake")]
private class NoobBallista_ItemDrop_Awake_Patch
{
private static void Postfix(ItemDrop __instance)
{
if (PluginEnabled.Value && IsNoobPrefab(__instance.m_nview, "NoobBolt"))
{
__instance.m_itemData.m_shared.m_ammoType = "$ammo_noobbolt";
__instance.m_itemData.m_shared.m_maxStackSize = BoltMaxStackSize.Value;
__instance.m_itemData.m_shared.m_weight = 0.1f;
__instance.m_itemData.m_shared.m_attackForce = BoltAttackForce.Value;
__instance.m_itemData.m_shared.m_backstabBonus = BoltDamage.Value;
__instance.m_itemData.m_shared.m_damages.m_damage = BoltDamage.Value;
__instance.m_itemData.m_shared.m_damages.m_blunt = BoltBlunt.Value;
__instance.m_itemData.m_shared.m_damages.m_slash = BoltSlash.Value;
__instance.m_itemData.m_shared.m_damages.m_pierce = BoltPierce.Value;
__instance.m_itemData.m_shared.m_damages.m_chop = BoltChop.Value;
__instance.m_itemData.m_shared.m_damages.m_pickaxe = BoltPickAxe.Value;
__instance.m_itemData.m_shared.m_damages.m_fire = BoltFire.Value;
__instance.m_itemData.m_shared.m_damages.m_frost = BoltFrost.Value;
__instance.m_itemData.m_shared.m_damages.m_lightning = BoltLighting.Value;
__instance.m_itemData.m_shared.m_damages.m_poison = BoltPoison.Value;
__instance.m_itemData.m_shared.m_damages.m_spirit = BoltSpirit.Value;
if ((Object)(object)__instance.m_nview != (Object)null)
{
SetScale(__instance.m_nview);
}
ZSyncTransform component = ((Component)__instance).gameObject.GetComponent<ZSyncTransform>();
if ((Object)(object)component != (Object)null)
{
component.m_syncPosition = true;
component.m_syncRotation = true;
component.m_syncScale = true;
}
}
}
}
[HarmonyPatch(typeof(Turret), "Awake")]
private class NoobBallista_Turret_Awake_Patch
{
private static void Postfix(ref Turret __instance)
{
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_015d: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
if (!PluginEnabled.Value || !IsNoobPrefab(__instance.m_nview, "NoobBallista"))
{
return;
}
__instance.m_ammoType = "$ammo_noobbolt";
__instance.m_holdRepeatInterval = 0.05f;
__instance.m_attackWarmup = 0.5f;
__instance.m_shootWhenAimDiff = 1f;
__instance.m_lookAcceleration = 10f;
__instance.m_noTargetScanRate = 2f;
__instance.m_updateTargetTimer = 0f;
__instance.m_updateTargetIntervalFar = __instance.m_updateTargetIntervalNear * 2f;
__instance.m_horizontalAngle = 89f;
__instance.m_lookDeacceleration = 10f;
__instance.m_predictionModifier = 1f;
__instance.m_verticalAngle = 90f;
GameObject val = null;
foreach (AmmoType item in __instance.m_allowedAmmo)
{
if (((Object)item.m_ammo).name == "TurretBolt")
{
val = item.m_visual;
break;
}
}
__instance.m_allowedAmmo.Clear();
GameObject prefab = PrefabManager.Instance.GetPrefab("NoobBolt");
if ((Object)(object)val != (Object)null && (Object)(object)prefab != (Object)null)
{
ItemDrop component = prefab.gameObject.GetComponent<ItemDrop>();
if ((Object)(object)component != (Object)null)
{
__instance.m_allowedAmmo.Add(new AmmoType
{
m_ammo = component,
m_visual = val
});
}
}
}
}
[HarmonyPatch(typeof(Turret), "UpdateAttack")]
private class NoobBallista_Turret_UpdateAttack_Patch
{
private static void Postfix(Turret __instance)
{
if (!PluginEnabled.Value || !IsNoobPrefab(__instance.m_nview, "NoobBallista"))
{
return;
}
if (__instance.m_targetPlayers != IsTargetPlayer.Value)
{
__instance.m_targetPlayers = IsTargetPlayer.Value;
if (!__instance.m_targetPlayers && (Object)(object)__instance.m_target != (Object)null && __instance.m_target.IsPlayer())
{
__instance.m_target = null;
__instance.m_haveTarget = false;
}
}
if (__instance.m_targetTamed != IsTargetTamed.Value)
{
__instance.m_targetTamed = IsTargetTamed.Value;
if (!__instance.m_targetTamed && (Object)(object)__instance.m_target != (Object)null && __instance.m_target.IsTamed())
{
__instance.m_target = null;
__instance.m_haveTarget = false;
}
}
if (__instance.m_viewDistance != ViewDistance.Value)
{
__instance.m_viewDistance = ViewDistance.Value;
}
if (__instance.m_maxAmmo != MaximumAmmo.Value)
{
__instance.m_maxAmmo = MaximumAmmo.Value;
}
if (__instance.m_attackCooldown != AttackCooldown.Value)
{
__instance.m_attackCooldown = AttackCooldown.Value;
}
if (__instance.m_turnRate != TurnRate.Value)
{
__instance.m_turnRate = TurnRate.Value;
}
if (IsRequiredAmmo.Value)
{
if (__instance.m_returnAmmoOnDestroy != ReturnAmmoOnDestroy.Value)
{
__instance.m_returnAmmoOnDestroy = ReturnAmmoOnDestroy.Value;
}
}
else if (__instance.m_returnAmmoOnDestroy)
{
__instance.m_returnAmmoOnDestroy = false;
}
AddInfinityAmmo(__instance);
}
}
[HarmonyPatch(typeof(Turret), "GetHoverText")]
private class NoobBallista_Turret_GetHoverText_Patch
{
private static bool Prefix(ref Turret __instance, ref string __result, ref bool __runOriginal)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
if (PluginEnabled.Value && IsNoobPrefab(__instance.m_nview, "NoobBallista"))
{
if (!__instance.m_nview.IsValid())
{
return true;
}
if (!PrivateArea.CheckAccess(((Component)__instance).transform.position, 0f, false, false))
{
return true;
}
int ammo = __instance.GetAmmo();
int maxAmmo = __instance.m_maxAmmo;
WearNTear component = ((Component)__instance).gameObject.GetComponent<WearNTear>();
if ((Object)(object)component != (Object)null)
{
int num = (int)(component.GetHealthPercentage() * 100f);
string text = ((num > 60) ? "green" : ((num <= 30 || num > 60) ? "red" : "orange"));
if (IsRequiredAmmo.Value)
{
__result = $"{BallistaName.Value} ( {ammo} / {maxAmmo} )\n<color={text}>Health {num}%</color>\n[<color=yellow><b>E</b></color>] Add {BoltName.Value}\n[<color=yellow><b>Shift + E</b></color>] Add Max {BoltName.Value}";
}
else
{
__result = $"{BallistaName.Value}\n<color={text}>Health {num}%</color>";
}
}
else if (IsRequiredAmmo.Value)
{
__result = $"{BallistaName.Value} ( {ammo} / {maxAmmo} )\n[<color=yellow><b>E</b></color>] Add {BoltName.Value}\n[<color=yellow><b>Shift + E</b></color>] Add Max {BoltName.Value}";
}
else
{
__result = BallistaName.Value;
}
__runOriginal = false;
return false;
}
__runOriginal = true;
return true;
}
}
[HarmonyPatch(typeof(Turret), "UseItem")]
private class NoobBallista_UseItem_Patch
{
private static bool Prefix(ref Turret __instance, Humanoid user, ItemData item, ref bool __result, ref bool __runOriginal)
{
if (PluginEnabled.Value && IsNoobPrefab(__instance.m_nview, "NoobBallista"))
{
__runOriginal = false;
if (!IsRequiredAmmo.Value)
{
((Character)user).Message((MessageType)2, BallistaName.Value + " Infinity Ammo", 0, (Sprite)null);
__result = false;
return false;
}
Inventory inventory = user.GetInventory();
if (inventory == null)
{
((Character)user).Message((MessageType)2, "Player's Inventory Error", 0, (Sprite)null);
__result = false;
return false;
}
if (item == null)
{
item = __instance.FindAmmoItem(inventory, true);
if (item == null)
{
((Character)user).Message((MessageType)2, "$msg_noturretammo", 0, (Sprite)null);
__result = false;
return false;
}
if (__instance.GetAmmo() > 0)
{
ItemDrop component = ZNetScene.instance.GetPrefab(__instance.GetAmmoType()).GetComponent<ItemDrop>();
((Character)user).Message((MessageType)2, Localization.instance.Localize("$msg_turretotherammo") + Localization.instance.Localize(component.m_itemData.m_shared.m_name), 0, (Sprite)null);
__result = false;
return false;
}
}
if (!__instance.IsItemAllowed(((Object)item.m_dropPrefab).name))
{
((Character)user).Message((MessageType)2, "$msg_wontwork", 0, (Sprite)null);
__result = false;
return false;
}
int ammo = __instance.GetAmmo();
if (ammo > 0 && __instance.GetAmmoType() != ((Object)item.m_dropPrefab).name)
{
ItemDrop component2 = ZNetScene.instance.GetPrefab(__instance.GetAmmoType()).GetComponent<ItemDrop>();
((Character)user).Message((MessageType)2, Localization.instance.Localize("$msg_turretotherammo") + Localization.instance.Localize(component2.m_itemData.m_shared.m_name), 0, (Sprite)null);
__result = false;
return false;
}
ZLog.Log((object)("trying to add ammo " + item.m_shared.m_name));
if (ammo >= __instance.m_maxAmmo)
{
((Character)user).Message((MessageType)2, "$msg_itsfull", 0, (Sprite)null);
__result = false;
return false;
}
Game.instance.IncrementPlayerStat((PlayerStatType)78, 1f);
if (CheckKeyHeld("left shift"))
{
int num = inventory.CountItems(item.m_shared.m_name, -1, false);
int num2 = __instance.m_maxAmmo - ammo;
int num3 = num - num2;
if (num3 < 0)
{
num3 = num;
}
inventory.RemoveItem(item, num3);
for (int i = 0; i < num3; i++)
{
__instance.m_nview.InvokeRPC("RPC_AddAmmo", new object[1] { ((Object)item.m_dropPrefab).name });
}
((Character)user).Message((MessageType)2, "$msg_added " + item.m_shared.m_name + " " + num3 + "pcs", 0, (Sprite)null);
}
else
{
inventory.RemoveItem(item, 1);
__instance.m_nview.InvokeRPC("RPC_AddAmmo", new object[1] { ((Object)item.m_dropPrefab).name });
}
__result = true;
return false;
}
__runOriginal = true;
return true;
}
}
[HarmonyPatch(typeof(Turret), "ShootProjectile")]
private class NoobBallista_Turret_ShootProjectile_Patch
{
private static void Postfix(Turret __instance)
{
if (PluginEnabled.Value && IsNoobPrefab(__instance.m_nview, "NoobBallista"))
{
AddInfinityAmmo(__instance);
}
}
}
[HarmonyPatch(typeof(Turret), "UpdateTarget")]
private class NoobBallista_Turret_UpdateTarget_Patch
{
private static bool Prefix(Turret __instance, float dt, ref bool __runOriginal)
{
//IL_009b: 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_01c3: Unknown result type (might be due to invalid IL or missing references)
//IL_01df: Unknown result type (might be due to invalid IL or missing references)
//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_0144: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
if (PluginEnabled.Value && IsNoobPrefab(__instance.m_nview, "NoobBallista"))
{
__runOriginal = false;
if (!__instance.m_nview.IsValid())
{
return false;
}
if (!__instance.HasAmmo())
{
if (__instance.m_haveTarget)
{
__instance.m_nview.InvokeRPC(ZNetView.Everybody, "RPC_SetTarget", new object[1] { ZDOID.None });
}
AddInfinityAmmo(__instance);
return false;
}
__instance.m_updateTargetTimer -= dt;
if (__instance.m_updateTargetTimer <= 0f)
{
__instance.m_updateTargetTimer = (Character.IsCharacterInRange(((Component)__instance).transform.position, 40f) ? __instance.m_updateTargetIntervalNear : __instance.m_updateTargetIntervalFar);
Character val = BaseAI.FindClosestCreature(((Component)__instance).transform, __instance.m_eye.transform.position, 0f, __instance.m_viewDistance, __instance.m_horizontalAngle, false, false, true, __instance.m_targetPlayers, (__instance.m_targetItems.Count > 0) ? __instance.m_targetTamedConfig : __instance.m_targetTamed, __instance.m_targetCharacters);
if ((Object)(object)val != (Object)(object)__instance.m_target && IsMonsterFaction(val))
{
__instance.m_newTargetEffect.Create(((Component)__instance).transform.position, ((Component)__instance).transform.rotation, (Transform)null, 1f, -1);
__instance.m_nview.InvokeRPC(ZNetView.Everybody, "RPC_SetTarget", new object[1] { val.GetZDOID() });
}
}
if (__instance.m_haveTarget && (!Object.op_Implicit((Object)(object)__instance.m_target) || __instance.m_target.IsDead()))
{
ZLog.Log((object)"Target is gone");
__instance.m_nview.InvokeRPC(ZNetView.Everybody, "RPC_SetTarget", new object[1] { ZDOID.None });
__instance.m_lostTargetEffect.Create(((Component)__instance).transform.position, ((Component)__instance).transform.rotation, (Transform)null, 1f, -1);
}
return false;
}
__runOriginal = true;
return true;
static bool IsMonsterFaction(Character characters)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Invalid comparison between Unknown and I4
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Invalid comparison between Unknown and I4
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Invalid comparison between Unknown and I4
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Invalid comparison between Unknown and I4
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Invalid comparison between Unknown and I4
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Invalid comparison between Unknown and I4
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Invalid comparison between Unknown and I4
if ((Object)(object)characters == (Object)null)
{
return false;
}
if (characters.IsBoss())
{
if (IsTargetBoss.Value)
{
return true;
}
return false;
}
if ((int)characters.m_faction == 2 || (int)characters.m_faction == 3 || (int)characters.m_faction == 4 || (int)characters.m_faction == 7 || (int)characters.m_faction == 5 || (int)characters.m_faction == 6 || (int)characters.m_faction == 9)
{
return true;
}
return false;
}
}
}
[HarmonyPatch(typeof(Projectile), "FixedUpdate")]
private class NoobBallista_Projectile_FixedUpdate_Patch
{
private static void Postfix(Projectile __instance)
{
//IL_0054: 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_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: 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_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: 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)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
if (PluginEnabled.Value && IsNoobProjectile(__instance))
{
SetScale(__instance.m_nview);
if (IsRequiredAmmo.Value && IsReturnAmmo.Value && __instance.m_ttl <= 0f)
{
Quaternion rotation = ((Component)__instance).transform.rotation;
float x = ((Quaternion)(ref rotation)).eulerAngles.x;
rotation = ((Component)__instance).transform.rotation;
float num = ((Quaternion)(ref rotation)).eulerAngles.y + 180f;
rotation = ((Component)__instance).transform.rotation;
Quaternion val = Quaternion.Euler(x, num, ((Quaternion)(ref rotation)).eulerAngles.z);
Vector3 val2 = ((Component)__instance).transform.position + ((Component)__instance).transform.TransformDirection(__instance.m_spawnOffset);
ItemDrop.DropItem(__instance.m_ammo, 0, val2, val);
}
}
}
}
[HarmonyPatch(typeof(Projectile), "OnHit")]
private static class NoobBallista_Projectile_OnHit_Patch
{
private static bool Prefix(Projectile __instance, Collider collider, Vector3 hitPoint, bool water, ref bool __runOriginal)
{
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
if (PluginEnabled.Value && IsNoobProjectile(__instance) && (Object)(object)collider != (Object)null)
{
IDestructible component = Projectile.FindHitObject(collider).GetComponent<IDestructible>();
if (component != null && __instance.IsValidTarget(component))
{
Character val = (Character)(object)((component is Character) ? component : null);
if (Object.op_Implicit((Object)(object)val))
{
if (!IsDamageTamed.Value && (Object)(object)((Component)val).gameObject.GetComponent<Tameable>() != (Object)null && val.m_tamed)
{
Physics.IgnoreCollision(collider, ((Component)val).gameObject.GetComponent<Collider>());
__runOriginal = false;
return false;
}
if (!IsDamagePlayer.Value && (int)val.m_faction == 0)
{
Physics.IgnoreCollision(collider, ((Component)val).gameObject.GetComponent<Collider>());
__runOriginal = false;
return false;
}
}
}
}
__runOriginal = true;
return true;
}
}
[HarmonyPatch(typeof(ZSyncTransform), "OwnerSync")]
private class NoobBallista_ZSyncTransform_OwnerSync_Patch
{
private static void Postfix(ref ZSyncTransform __instance)
{
if (PluginEnabled.Value && IsNoobPrefab(__instance.m_nview, "NoobBolt"))
{
SetScale(__instance.m_nview);
}
}
}
[HarmonyPatch(typeof(ZSyncTransform), "ClientSync")]
private class NoobBallista_ZSyncTransform_ClientSync_Patch
{
private static void Postfix(ZSyncTransform __instance)
{
if (PluginEnabled.Value && IsNoobPrefab(__instance.m_nview, "NoobBolt"))
{
SetScale(__instance.m_nview);
}
}
}
[HarmonyPatch(typeof(ZNetScene), "Awake")]
private static class NoobBallista_ZNetScene_Awake_Patch
{
private static void Postfix(ZNetScene __instance)
{
//IL_000f: 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)
//IL_0037: 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_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
if (!PluginEnabled.Value)
{
return;
}
Vector3 newScale = GetNewScale();
GameObject prefab = ZNetScene.instance.GetPrefab("NoobBallista");
if ((Object)(object)prefab != (Object)null)
{
prefab.transform.localScale = newScale;
Piece component = prefab.GetComponent<Piece>();
Turret component2 = prefab.GetComponent<Turret>();
if ((Object)(object)component != (Object)null)
{
SetScale(component.m_nview);
}
if ((Object)(object)component2 != (Object)null)
{
SetScale(component2.m_nview);
}
BoxCollider component3 = prefab.GetComponent<BoxCollider>();
if ((Object)(object)component3 != (Object)null)
{
float num = Mathf.Clamp(BallistaSize.Value, 0.1f, 1f);
float num2 = 2.2f * num;
float num3 = 1.8f * (1f - num);
float num4 = num2;
float num5 = num3 / 2f - 0.02f;
component3.center = new Vector3(0f, num5, 0f);
component3.size = new Vector3(num2, num3, num4);
}
}
GameObject prefab2 = ZNetScene.instance.GetPrefab("NoobBolt");
if ((Object)(object)prefab2 != (Object)null)
{
prefab2.transform.localScale = GetNewScale();
ItemDrop component4 = prefab2.GetComponent<ItemDrop>();
if ((Object)(object)component4 != (Object)null)
{
SetScale(component4.m_nview);
}
BoxCollider component5 = prefab2.GetComponent<BoxCollider>();
if ((Object)(object)component5 != (Object)null)
{
component5.size = newScale;
}
}
}
}
public const string PluginGUID = "GsiX.NoobBallista";
public const string PluginName = "GsiX Noob Ballista";
public const string PluginVersion = "1.2.7";
public const string PluginNamespace = "NoobBallista";
private readonly Harmony harmony = new Harmony("GsiX.NoobBallista");
private const string NameTurret = "NoobBallista";
private const string NameBolt = "NoobBolt";
private const string NameItem = "$item_noobbolt";
public static ConfigEntry<bool> PluginEnabled;
public static ConfigEntry<bool> IsRequiredAmmo;
public static ConfigEntry<bool> IsReturnAmmo;
public static ConfigEntry<bool> IsTargetTamed;
public static ConfigEntry<bool> IsTargetPlayer;
public static ConfigEntry<bool> IsTargetBoss;
public static ConfigEntry<bool> IsDamagePlayer;
public static ConfigEntry<bool> IsDamageTamed;
public static ConfigEntry<string> BallistaName;
public static ConfigEntry<float> BallistaSize;
public static ConfigEntry<float> ViewDistance;
public static ConfigEntry<int> MaximumAmmo;
public static ConfigEntry<float> AttackCooldown;
public static ConfigEntry<float> TurnRate;
public static ConfigEntry<bool> ReturnAmmoOnDestroy;
public static ConfigEntry<string> TurretRequirement1;
public static ConfigEntry<string> TurretRequirement2;
public static ConfigEntry<string> TurretRequirement3;
public static ConfigEntry<string> TurretRequirement4;
public static ConfigEntry<string> TurretRequirement5;
public static ConfigEntry<string> BoltName;
public static ConfigEntry<int> BoltMaxStackSize;
public static ConfigEntry<float> BoltAttackForce;
public static ConfigEntry<float> BoltDamage;
public static ConfigEntry<float> BoltBlunt;
public static ConfigEntry<float> BoltSlash;
public static ConfigEntry<float> BoltPierce;
public static ConfigEntry<float> BoltChop;
public static ConfigEntry<float> BoltPickAxe;
public static ConfigEntry<float> BoltFire;
public static ConfigEntry<float> BoltFrost;
public static ConfigEntry<float> BoltLighting;
public static ConfigEntry<float> BoltPoison;
public static ConfigEntry<float> BoltSpirit;
public static ConfigEntry<string> BoltRequirement1;
public static ConfigEntry<string> BoltRequirement2;
public static ConfigEntry<string> BoltRequirement3;
private static readonly Dictionary<string, Texture2D> cachedTextures = new Dictionary<string, Texture2D>();
public void Awake()
{
PluginEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Plugin Enable", "PluginEnabled", true, "Plugin Enabled/Disabled");
IsRequiredAmmo = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "IsRequiredAmmo", false, "Is the ballista required ammo to shoot.");
IsReturnAmmo = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "IsReturnAmmo", true, "Ballista return ammo upon hit target. Override by IsRequiredAmmo");
IsTargetTamed = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "IsTargetTamed", false, "Allow Ballista to target tamed animal.");
IsTargetPlayer = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "IsTargetPlayer", false, "Allow Ballista to target human player.");
IsTargetBoss = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "IsTargetBoss", false, "Allow Ballista to target boss.");
IsDamagePlayer = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "IsDamagePlayer", false, "Allow Ballista to do damage to player.");
IsDamageTamed = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "IsDamageTamed", false, "Allow Ballista to do damage tammed animal.");
BallistaName = ((BaseUnityPlugin)this).Config.Bind<string>("Turret Setup", "BallistaName", "Noob Ballista", "Rename your Ballista. Required game restart");
BallistaSize = ((BaseUnityPlugin)this).Config.Bind<float>("Turret Setup", "BallistaSize", 0.3f, "Ballista scale size. Valid value 0.1 ~ 1.0");
ViewDistance = ((BaseUnityPlugin)this).Config.Bind<float>("Turret Setup", "ViewDistance", 30f, "Distance Ballista can shoot.");
MaximumAmmo = ((BaseUnityPlugin)this).Config.Bind<int>("Turret Setup", "MaximumAmmo", 100, "Maximum ammo stored on Ballista");
AttackCooldown = ((BaseUnityPlugin)this).Config.Bind<float>("Turret Setup", "AttackCooldown", 1f, "Ballista interval between shoot.");
TurnRate = ((BaseUnityPlugin)this).Config.Bind<float>("Turret Setup", "TurnRate", 100f, "Ballista turn speed.");
ReturnAmmoOnDestroy = ((BaseUnityPlugin)this).Config.Bind<bool>("Turret Setup", "ReturnAmmoOnDestroy", true, "Ballista respawn ammo on destroyed. Override by IsRequiredAmmo");
TurretRequirement1 = ((BaseUnityPlugin)this).Config.Bind<string>("TURRET REQUIREMENT", "TurretRequirement1", "Wood|12", "Ballista crafting requirement. Can be empty for none.");
TurretRequirement2 = ((BaseUnityPlugin)this).Config.Bind<string>("TURRET REQUIREMENT", "TurretRequirement2", "Stone|4", "Ballista crafting requirement. Can be empty for none.");
TurretRequirement3 = ((BaseUnityPlugin)this).Config.Bind<string>("TURRET REQUIREMENT", "TurretRequirement3", "Resin|20", "Ballista crafting requirement. Can be empty for none.");
TurretRequirement4 = ((BaseUnityPlugin)this).Config.Bind<string>("TURRET REQUIREMENT", "TurretRequirement4", "DeerHide|14", "Ballista crafting requirement. Can be empty for none.");
TurretRequirement5 = ((BaseUnityPlugin)this).Config.Bind<string>("TURRET REQUIREMENT", "TurretRequirement5", "LeatherScraps|18", "Ballista crafting requirement. Can be empty for none.");
BoltName = ((BaseUnityPlugin)this).Config.Bind<string>("Bolt Setup", "BoltName", "Noob Bolt", "Rename your Ballista's Bolt. Required game restart.");
BoltMaxStackSize = ((BaseUnityPlugin)this).Config.Bind<int>("Bolt Setup", "BoltMaxStackSize", 300, "Bolt stack size.");
BoltAttackForce = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "AttackForce", 24f, "Bolt attack force. Vanilla default 45");
BoltDamage = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltDamage", 12f, "Bolt damage. Vanilla default 45.");
BoltPierce = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltPierce", 12f, "Bolt Pierce damage Vanilla default 75.");
BoltBlunt = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltBlunt", 12f, "Bolt Blunt damage");
BoltSlash = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltSlash", 12f, "Bolt Slash damage");
BoltChop = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltChop", 12f, "Bolt Chop damage");
BoltPickAxe = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltPickAxe", 12f, "Bolt PickAxe damage");
BoltFire = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltFire", 12f, "Bolt Fire damage");
BoltFrost = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltFrost", 12f, "Bolt Frost damage");
BoltLighting = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltLighting", 12f, "Bolt Lighting damage");
BoltPoison = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltPoison", 12f, "Bolt Poison damage");
BoltSpirit = ((BaseUnityPlugin)this).Config.Bind<float>("Bolt Setup", "BoltSpirit", 12f, "Bolt Spirit damage");
BoltRequirement1 = ((BaseUnityPlugin)this).Config.Bind<string>("BOLT REQUIREMENT", "BoltRequirement1", "Wood|10", "Bolt crafting requirement. Can be empty for none.");
BoltRequirement2 = ((BaseUnityPlugin)this).Config.Bind<string>("BOLT REQUIREMENT", "BoltRequirement2", "Resin|5", "Bolt crafting requirement. Can be empty for none.");
BoltRequirement3 = ((BaseUnityPlugin)this).Config.Bind<string>("BOLT REQUIREMENT", "BoltRequirement3", "", "Bolt crafting requirement. Can be empty for none.");
harmony.PatchAll();
PrefabManager.OnVanillaPrefabsAvailable += SetupNoobBallista;
AddLocalizations();
}
public void OnDestroy()
{
harmony.UnpatchSelf();
}
private void AddLocalizations()
{
CustomLocalization localization = LocalizationManager.Instance.GetLocalization();
string text = "English";
localization.AddTranslation(ref text, new Dictionary<string, string>
{
{ "item_noobballista", BallistaName.Value },
{
"item_noobballista_desc",
"Defensive " + BallistaName.Value
},
{
"$item_noobbolt".Replace("$", ""),
BoltName.Value
},
{
"item_noobbolt_desc",
BoltName.Value + " for turret " + BallistaName.Value
},
{
"ammo_noobbolt",
"Ammo " + BoltName.Value
}
});
}
private void SetupNoobBallista()
{
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Expected O, but got Unknown
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Expected O, but got Unknown
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_016d: Unknown result type (might be due to invalid IL or missing references)
//IL_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Expected O, but got Unknown
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_01eb: Expected O, but got Unknown
Texture2D styleTex = LoadTexture("NoobBallista", "noobmissile_texture_red.png");
Texture2D val = LoadTexture("NoobBallista", "noobmissile_icon_red.png");
Sprite val2 = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), Vector2.zero);
ItemConfig val3 = new ItemConfig();
val3.Name = "$item_noobbolt";
val3.Description = "$item_noobbolt_desc";
val3.CraftingStation = "piece_workbench";
val3.RepairStation = null;
val3.Amount = 30;
val3.Icons = (Sprite[])(object)new Sprite[1] { val2 };
val3.StyleTex = styleTex;
ItemConfig val4 = val3;
AddRequirement(BoltRequirement1.Value, null, val4);
AddRequirement(BoltRequirement2.Value, null, val4);
AddRequirement(BoltRequirement3.Value, null, val4);
CustomItem val5 = new CustomItem("NoobBolt", "TurretBolt", val4);
ItemManager.Instance.AddItem(val5);
Texture2D val6 = LoadTexture("NoobBallista", "noobballista_icon.png");
Sprite icon = Sprite.Create(val6, new Rect(0f, 0f, (float)((Texture)val6).width, (float)((Texture)val6).height), Vector2.zero);
PieceConfig val7 = new PieceConfig
{
Name = "$item_noobballista",
Description = "$item_noobballista_desc",
PieceTable = "Hammer",
Category = "Misc",
CraftingStation = "",
Icon = icon,
AllowedInDungeons = true
};
AddRequirement(TurretRequirement1.Value, val7);
AddRequirement(TurretRequirement2.Value, val7);
AddRequirement(TurretRequirement3.Value, val7);
AddRequirement(TurretRequirement4.Value, val7);
AddRequirement(TurretRequirement5.Value, val7);
CustomPiece val8 = new CustomPiece("NoobBallista", "piece_turret", val7);
PieceManager.Instance.AddPiece(val8);
PrefabManager.OnVanillaPrefabsAvailable -= SetupNoobBallista;
static void AddRequirement(string requirement, PieceConfig piececonfig = null, ItemConfig itemconfig = null)
{
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Expected O, but got Unknown
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Expected O, but got Unknown
string text = requirement.Replace(" ", "");
text = text.Replace(" ", "");
if (text.Length > 3)
{
string[] array = text.Split(new char[1] { '|' });
if (array.Length == 2)
{
if (int.TryParse(array[1].Replace(" ", ""), out var result))
{
if (piececonfig != null)
{
piececonfig.AddRequirement(new RequirementConfig(array[0], result, 0, true));
}
if (itemconfig != null)
{
itemconfig.AddRequirement(new RequirementConfig(array[0], result, 0, false));
}
}
}
else
{
Logger.LogWarning((object)"********** AddRequirement Vertical Pipe/Splitter Error **********");
}
}
}
}
private static Texture2D LoadTexture(string pluginNameSpace, string fileName)
{
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Expected O, but got Unknown
//IL_0059: Expected O, but got Unknown
Texture2D val;
if (cachedTextures.ContainsKey(fileName))
{
val = cachedTextures[fileName];
}
else
{
Stream? manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(pluginNameSpace + ".Package.Assets." + fileName);
byte[] array = new byte[manifestResourceStream.Length];
manifestResourceStream.Read(array, 0, array.Length);
Texture2D val2 = new Texture2D(0, 0);
ImageConversion.LoadImage(val2, array);
val = val2;
cachedTextures.Add(fileName, val);
}
return val;
}
private static Vector3 GetNewScale()
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
float num = Mathf.Clamp(BallistaSize.Value, 0.1f, 1f);
return new Vector3(num, num, num);
}
private static void AddInfinityAmmo(Turret turret)
{
if (IsRequiredAmmo.Value)
{
return;
}
for (int i = 0; i < 2; i++)
{
if (turret.GetAmmo() >= 2)
{
break;
}
turret.m_nview.InvokeRPC("RPC_AddAmmo", new object[1] { "NoobBolt" });
}
}
private static bool IsNoobProjectile(Projectile projectile)
{
if ((Object)(object)projectile != (Object)null && projectile.m_ammo != null)
{
return projectile.m_ammo.m_shared.m_name == "$item_noobbolt";
}
return false;
}
private static void SetScale(ZNetView zview)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)zview != (Object)null)
{
zview.m_syncInitialScale = false;
zview.SetLocalScale(GetNewScale());
}
}
private static bool IsNoobPrefab(ZNetView instance, string name)
{
if ((Object)(object)instance != (Object)null)
{
return instance.GetPrefabName() == name;
}
return false;
}
private static bool CheckKeyHeld(string value, bool req = true)
{
try
{
return Input.GetKey(value.ToLower());
}
catch
{
return !req;
}
}
}
}
namespace NoobBallista.Properties
{
[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[DebuggerNonUserCode]
[CompilerGenerated]
internal class Resources
{
private static ResourceManager resourceMan;
private static CultureInfo resourceCulture;
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static ResourceManager ResourceManager
{
get
{
if (resourceMan == null)
{
resourceMan = new ResourceManager("NoobBallista.Properties.Resources", typeof(Resources).Assembly);
}
return resourceMan;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
internal Resources()
{
}
}
}