using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using HG.Reflection;
using On.RoR2;
using PhreelsContentPack.HelperClasses;
using PhreelsContentPack.Items.T1;
using PhreelsContentPack.Items.T2;
using PhreelsContentPack.Items.T3;
using R2API;
using R2API.Utils;
using RoR2;
using UnityEngine;
using UnityEngine.Networking;
using VAPI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("PhreelsContentPack")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("PhreelsContentPack")]
[assembly: AssemblyTitle("PhreelsContentPack")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace PhreelsContentPack
{
[BepInPlugin("com.phreel.phreelitemmod", "PhreelsItemPack", "0.2.7")]
[BepInDependency("com.bepis.r2api", "5.1.1")]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
[R2APISubmoduleDependency(new string[] { "ItemAPI", "LanguageAPI", "RecalculateStatsAPI", "PrefabAPI", "DotAPI" })]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Main : BaseUnityPlugin
{
public const string ModGuid = "com.phreel.phreelitemmod";
public const string ModName = "PhreelsItemPack";
public const string ModVer = "0.2.7";
public bool VAPILoaded = false;
public static AssetBundle MainAssets;
public static ConfigEntry<bool> PirateCoin_Enable { get; set; }
public static ConfigEntry<float> PirateCoin_PercentageHPWhiteItem { get; set; }
public static ConfigEntry<float> PirateCoin_PercentageHPWhiteItemMultiplierAtStacks { get; set; }
public static ConfigEntry<bool> PalmTree_Enable { get; set; }
public static ConfigEntry<float> PalmTree_AdditionalBaseDamage { get; set; }
public static ConfigEntry<bool> IntergamemodeChessboard_Enable { get; set; }
public static ConfigEntry<float> IntergamemodeChessboard_InitialChancetoInflict { get; set; }
public static ConfigEntry<float> IntergamemodeChessboard_AdditionalChancetoInflict { get; set; }
public static ConfigEntry<float> IntergamemodeChessboard_DebuffStacks { get; set; }
public static ConfigEntry<float> IntergamemodeChessboard_MovementSpeedReduction { get; set; }
public static ConfigEntry<bool> DetachedStinger_Enable { get; set; }
public static ConfigEntry<float> DetachedStinger_ChancetoInflict { get; set; }
public static ConfigEntry<float> DetachedStinger_DealExtraDamageToVariants { get; set; }
public static ConfigEntry<bool> EasternLantern_Enable { get; set; }
public static ConfigEntry<float> EasternLantern_InitialRegenPerAlly { get; set; }
public static ConfigEntry<float> EasternLantern_AdditionalRegenPerAlly { get; set; }
public void ConfigInit()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Expected O, but got Unknown
//IL_002c: Expected O, but got Unknown
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
//IL_0061: Expected O, but got Unknown
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Expected O, but got Unknown
//IL_0096: Expected O, but got Unknown
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Expected O, but got Unknown
//IL_00c7: Expected O, but got Unknown
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Expected O, but got Unknown
//IL_00fc: Expected O, but got Unknown
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Expected O, but got Unknown
//IL_012d: Expected O, but got Unknown
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_0158: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Expected O, but got Unknown
//IL_0162: Expected O, but got Unknown
//IL_0178: Unknown result type (might be due to invalid IL or missing references)
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Expected O, but got Unknown
//IL_0197: Expected O, but got Unknown
//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
//IL_01cc: Expected O, but got Unknown
//IL_01cc: Expected O, but got Unknown
//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0201: Expected O, but got Unknown
//IL_0201: Expected O, but got Unknown
//IL_0217: Unknown result type (might be due to invalid IL or missing references)
//IL_0228: Unknown result type (might be due to invalid IL or missing references)
//IL_0232: Expected O, but got Unknown
//IL_0232: Expected O, but got Unknown
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
//IL_025d: Unknown result type (might be due to invalid IL or missing references)
//IL_0267: Expected O, but got Unknown
//IL_0267: Expected O, but got Unknown
//IL_027d: Unknown result type (might be due to invalid IL or missing references)
//IL_0292: Unknown result type (might be due to invalid IL or missing references)
//IL_029c: Expected O, but got Unknown
//IL_029c: Expected O, but got Unknown
//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Expected O, but got Unknown
//IL_02cd: Expected O, but got Unknown
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_02f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0302: Expected O, but got Unknown
//IL_0302: Expected O, but got Unknown
//IL_0318: Unknown result type (might be due to invalid IL or missing references)
//IL_032d: Unknown result type (might be due to invalid IL or missing references)
//IL_0337: Expected O, but got Unknown
//IL_0337: Expected O, but got Unknown
PirateCoin_Enable = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Tier2 - Pirate Coin", "Enable item"), true, new ConfigDescription("Allow the user to find this item in runs.", (AcceptableValueBase)null, Array.Empty<object>()));
PirateCoin_PercentageHPWhiteItem = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier2 - Pirate Coin", "Additional base HP for each Common item"), 0.015f, new ConfigDescription("Percentage increase per Common item of base max health", (AcceptableValueBase)null, Array.Empty<object>()));
PirateCoin_PercentageHPWhiteItemMultiplierAtStacks = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier2 - Pirate Coin", "Additional base HP for each Common item"), 1.2f, new ConfigDescription("Percentage increase per Common item of base max health", (AcceptableValueBase)null, Array.Empty<object>()));
PalmTree_Enable = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Tier3 - Palm Tree", "Enable item"), true, new ConfigDescription("Allow the user to find this item in runs.", (AcceptableValueBase)null, Array.Empty<object>()));
PalmTree_AdditionalBaseDamage = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier3 - Palm Tree", "Additional damage"), 1f, new ConfigDescription("Additional base damage % per enemy kill", (AcceptableValueBase)null, Array.Empty<object>()));
IntergamemodeChessboard_Enable = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Tier3 - Devastator Chessboard", "Enable item"), true, new ConfigDescription("Allow the user to find this item in runs.", (AcceptableValueBase)null, Array.Empty<object>()));
IntergamemodeChessboard_InitialChancetoInflict = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier3 - Devastator Chessboard", "Initial inflict chance"), 20f, new ConfigDescription("Chance to devastate on hit", (AcceptableValueBase)null, Array.Empty<object>()));
IntergamemodeChessboard_AdditionalChancetoInflict = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier3 - Devastator Chessboard", "Additional inflict chance"), 20f, new ConfigDescription("Chance to devastate on hit", (AcceptableValueBase)null, Array.Empty<object>()));
IntergamemodeChessboard_DebuffStacks = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier3 - Devastator Chessboard", "Existing debuff stacks"), 10f, new ConfigDescription("Additional debuff stacks per item stack", (AcceptableValueBase)null, Array.Empty<object>()));
IntergamemodeChessboard_MovementSpeedReduction = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier3 - Devastator Chessboard", "Movement speed reduction"), 0.8f, new ConfigDescription("Movement speed reduction in decimal", (AcceptableValueBase)null, Array.Empty<object>()));
DetachedStinger_Enable = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Tier1 - Detached Stinger", "Enable item"), true, new ConfigDescription("Allow the user to find this item in runs.", (AcceptableValueBase)null, Array.Empty<object>()));
DetachedStinger_ChancetoInflict = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier1 - Detached Stinger", "Chance to inflict poison"), 9f, new ConfigDescription("Chance to inflict Poison", (AcceptableValueBase)null, Array.Empty<object>()));
DetachedStinger_DealExtraDamageToVariants = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier1 - Detached Stinger", "Extra Damage against variants"), 10f, new ConfigDescription("Deal extra damage to variants", (AcceptableValueBase)null, Array.Empty<object>()));
EasternLantern_Enable = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Tier2 - Eastern Lantern", "Enable item"), true, new ConfigDescription("Allow the user to find this item in runs.", (AcceptableValueBase)null, Array.Empty<object>()));
EasternLantern_InitialRegenPerAlly = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier2 - Eastern Lantern", "Initial regen per ally"), 2f, new ConfigDescription("Initial regen per ally in your team", (AcceptableValueBase)null, Array.Empty<object>()));
EasternLantern_AdditionalRegenPerAlly = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Tier2 - Eastern Lantern", "Additional regen per ally"), 1.5f, new ConfigDescription("Additional regen per ally in your team", (AcceptableValueBase)null, Array.Empty<object>()));
}
public void Awake()
{
VAPILoaded = Chainloader.PluginInfos.ContainsKey("com.Nebby.VAPI");
ConfigInit();
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PhreelsContentPack.phreelcontentpack"))
{
MainAssets = AssetBundle.LoadFromStream(stream);
}
if (DetachedStinger_Enable.Value)
{
if (VAPILoaded)
{
DetachedStinger.InitiateWithVAPIEnabled();
}
else
{
DetachedStinger.Initiate();
}
}
if (PirateCoin_Enable.Value)
{
PirateCoin.Initiate();
}
if (EasternLantern_Enable.Value)
{
EasternLantern.Initiate();
}
if (IntergamemodeChessboard_Enable.Value)
{
Chessboard.Initiate();
}
if (PalmTree_Enable.Value)
{
PalmTree.Initiate(PalmTree_AdditionalBaseDamage.Value);
}
}
}
}
namespace PhreelsContentPack.Utils
{
internal class Scalings
{
public static float HyperbolicChance(float baseChance, float scaling, int stacks)
{
return (stacks <= 0) ? 0f : (baseChance * (1f - 1f / (1f + scaling * (float)stacks)));
}
public static float LinearChance(float baseChance, float scaling, int stacks)
{
return (stacks <= 0) ? 0f : (baseChance + scaling * (float)(stacks - 1));
}
}
}
namespace PhreelsContentPack.Items.T3
{
internal class Chessboard
{
private static string itemName = "Chessboard";
private static string upperName = itemName.ToUpper();
public static ItemDef itemDefinition = CreateItem();
public static BuffDef DevastateMovement { get; private set; }
public static GameObject LoadPrefab()
{
return Main.MainAssets.LoadAsset<GameObject>("Assets/ClayfootStudios/Prefabs/Chess_Board.prefab");
}
public static Sprite LoadSprite()
{
return Main.MainAssets.LoadAsset<Sprite>("Assets/Palm tree/Chessboard.png");
}
private static void CreateBuff()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
DevastateMovement = ScriptableObject.CreateInstance<BuffDef>();
((Object)DevastateMovement).name = "DevastateMovement";
DevastateMovement.buffColor = new Color(0.25f, 0f, 0.25f);
DevastateMovement.canStack = false;
DevastateMovement.isDebuff = true;
DevastateMovement.iconSprite = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/VoidFogStrong").iconSprite;
ContentAddition.AddBuffDef(DevastateMovement);
}
public static ItemDef CreateItem()
{
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
((Object)val).name = itemName;
val.nameToken = "PCP_" + upperName + "_NAME";
val.pickupToken = "PCP_" + upperName + "_PICKUP";
val.descriptionToken = "PCP_" + upperName + "_DESC";
val.loreToken = "PCP_" + upperName + "_LORE";
ItemTag[] array = new ItemTag[3];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
val.tags = (ItemTag[])(object)array;
val.deprecatedTier = (ItemTier)2;
val.canRemove = true;
val.hidden = false;
val.pickupModelPrefab = LoadPrefab();
val.pickupIconSprite = LoadSprite();
return val;
}
public static ItemDisplayRuleDict CreateDisplayRules()
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
GameObject val = helpers.PrepareItemDisplayModel(PrefabAPI.InstantiateClone(LoadPrefab(), ((Object)LoadPrefab()).name + "Display", false));
return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
}
public static void AddTokens()
{
LanguageAPI.Add("PCP_" + upperName + "_NAME", "Devastator Chessboard");
LanguageAPI.Add("PCP_" + upperName + "_PICKUP", "Chance to devastate on hit");
LanguageAPI.Add("PCP_" + upperName + "_DESC", $"On hit, you have a <style=cIsDamage>{Main.IntergamemodeChessboard_InitialChancetoInflict.Value}% chance</style> <style=cStack>(+{Main.IntergamemodeChessboard_AdditionalChancetoInflict.Value}% per stack)</style> to inflict <style=cIsUtility>the Eclipse 8 Permanent Health debuff</style> <style=cStack>(+2 stacks of Curse per item stack)</style> while also <style=cIsDamage>adding +{Main.IntergamemodeChessboard_DebuffStacks.Value} stacks of stackable debuffs already on the enemy</style> <style=cStack>(+{Main.IntergamemodeChessboard_DebuffStacks.Value} per stack)</style> and <style=cIsDamage>decreasing their movement speed by {Main.IntergamemodeChessboard_MovementSpeedReduction.Value}% permanently.</style>");
LanguageAPI.Add("PCP_" + upperName + "_LORE", "How the exact fuck is this even a thing, too broken imo");
}
private static void AddHooks(ItemDef itemDefToHooks)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Expected O, but got Unknown
List<string> EclipseEightbutList = new List<string> { "PermanentCurse" };
List<BuffDef> allBuffDefs = new List<BuffDef>();
GlobalEventManager.OnHitEnemy += (hook_OnHitEnemy)delegate(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Expected O, but got Unknown
orig.Invoke(self, damageInfo, victim);
if (Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>()) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>().inventory) && Object.op_Implicit((Object)(object)victim.GetComponent<CharacterBody>()) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>().master))
{
Inventory inventory = damageInfo.attacker.GetComponent<CharacterBody>().inventory;
CharacterMaster master = damageInfo.attacker.GetComponent<CharacterBody>().master;
CharacterBody component = victim.GetComponent<CharacterBody>();
if (inventory.GetItemCount(itemDefToHooks) > 0)
{
Xoroshiro128Plus val = new Xoroshiro128Plus(Run.instance.seed);
Util.ShuffleList<string>(EclipseEightbutList, val);
Util.ShuffleList<BuffDef>(allBuffDefs, val);
foreach (BuffDef item in allBuffDefs)
{
if ((Object)(object)item == (Object)(object)Buffs.PermanentCurse)
{
foreach (string item2 in EclipseEightbutList)
{
if (!Util.CheckRoll(Main.IntergamemodeChessboard_InitialChancetoInflict.Value + (float)inventory.GetItemCount(itemDefToHooks) * Main.IntergamemodeChessboard_AdditionalChancetoInflict.Value * damageInfo.procCoefficient, master.luck, master))
{
return;
}
if (inventory.GetItemCount(itemDefToHooks) > 0)
{
if (inventory.GetItemCount(itemDefToHooks) == 1)
{
component.AddBuff(Buffs.PermanentCurse);
component.AddTimedBuff(DevastateMovement, 99999f);
BuffDef[] buffDefs = BuffCatalog.buffDefs;
foreach (BuffDef val2 in buffDefs)
{
if (component.HasBuff(val2) && val2.isDebuff && (Object)(object)val2 != (Object)(object)Buffs.PermanentCurse)
{
for (int j = 0; (float)j <= Main.IntergamemodeChessboard_DebuffStacks.Value * (float)inventory.GetItemCount(itemDefToHooks); j++)
{
component.AddBuff(val2);
}
}
}
}
else
{
component.AddBuff(Buffs.PermanentCurse);
component.AddTimedBuff(DevastateMovement, 99999f);
for (int k = 2; k <= inventory.GetItemCount(itemDefToHooks); k++)
{
component.AddBuff(Buffs.PermanentCurse);
component.AddBuff(Buffs.PermanentCurse);
}
BuffDef[] buffDefs2 = BuffCatalog.buffDefs;
foreach (BuffDef val3 in buffDefs2)
{
if (component.HasBuff(val3) && val3.isDebuff)
{
for (int m = 0; (float)m <= Main.IntergamemodeChessboard_DebuffStacks.Value * (float)inventory.GetItemCount(itemDefToHooks); m++)
{
component.AddBuff(val3);
}
}
}
}
return;
}
}
}
}
}
}
};
RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(GetAllBuffs));
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(DevastateMovementBuffBehavior);
void GetAllBuffs()
{
allBuffDefs.Add(Buffs.PermanentCurse);
allBuffDefs.Add(DevastateMovement);
}
}
private static void DevastateMovementBuffBehavior(CharacterBody sender, StatHookEventArgs args)
{
if (sender.HasBuff(DevastateMovement))
{
args.moveSpeedReductionMultAdd += Main.IntergamemodeChessboard_MovementSpeedReduction.Value;
}
}
public static void Initiate()
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Expected O, but got Unknown
ItemAPI.Add(new CustomItem(itemDefinition, CreateDisplayRules()));
AddTokens();
CreateBuff();
AddHooks(itemDefinition);
}
}
internal class PalmTree
{
private static string itemName = "PalmTree";
private static string upperName = itemName.ToUpper();
public static ItemDef itemDefinition = CreateItem();
public static GameObject LoadPrefab()
{
return Main.MainAssets.LoadAsset<GameObject>("Assets/Palm tree/2.prefabs/palm_tree.prefab");
}
public static Sprite LoadSprite()
{
return Main.MainAssets.LoadAsset<Sprite>("Assets/Palm tree/Palm Tree.png");
}
public static ItemDef CreateItem()
{
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
((Object)val).name = itemName;
val.nameToken = "PCP_" + upperName + "_NAME";
val.pickupToken = "PCP_" + upperName + "_PICKUP";
val.descriptionToken = "PCP_" + upperName + "_DESC";
val.loreToken = "PCP_" + upperName + "_LORE";
val.tags = (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 };
val.deprecatedTier = (ItemTier)2;
val.canRemove = true;
val.hidden = false;
val.pickupModelPrefab = LoadPrefab();
val.pickupIconSprite = LoadSprite();
return val;
}
public static ItemDisplayRuleDict CreateDisplayRules()
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
GameObject val = helpers.PrepareItemDisplayModel(PrefabAPI.InstantiateClone(LoadPrefab(), ((Object)LoadPrefab()).name + "Display", false));
return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
}
public static void AddTokens()
{
LanguageAPI.Add("PCP_" + upperName + "_NAME", "Palm Tree");
LanguageAPI.Add("PCP_" + upperName + "_PICKUP", "Additional base damage for each kill");
LanguageAPI.Add("PCP_" + upperName + "_DESC", $"For each <style=cIsDamage>kill</style> your base damage is increased by <style=cIsDamage>{Main.PalmTree_AdditionalBaseDamage.Value}</style>% <style=cStack>(+{Main.PalmTree_AdditionalBaseDamage.Value}% per stack)</style> base damage. Further stacks count in already killed enemies.");
LanguageAPI.Add("PCP_" + upperName + "_LORE", "Crash Bandicoot palm tree, what the fuck");
}
private static void AddHooks(ItemDef itemDefToHooks, float PalmTree_AdditionalBaseDamage)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Expected O, but got Unknown
Run.Start += new hook_Start(Run_Start);
GlobalEventManager.OnCharacterDeath += new hook_OnCharacterDeath(GlobalEventManager_OnCharacterDeath);
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(GetStatCoefficients);
void GetStatCoefficients(CharacterBody self, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)self.inventory))
{
int itemCount = self.inventory.GetItemCount(itemDefToHooks);
if (itemCount > 0)
{
args.damageMultAdd += (float)itemCount * (PalmTree_AdditionalBaseDamage / 100f);
}
}
}
void GlobalEventManager_OnCharacterDeath(orig_OnCharacterDeath orig, GlobalEventManager self, DamageReport damageReport)
{
orig.Invoke(self, damageReport);
if (!((Object)(object)damageReport.attackerBody == (Object)null))
{
Inventory inventory = damageReport.attackerBody.inventory;
if (Object.op_Implicit((Object)(object)inventory))
{
int itemCount2 = inventory.GetItemCount(itemDefToHooks);
if (itemCount2 == 1)
{
PalmTree_AdditionalBaseDamage += Main.PalmTree_AdditionalBaseDamage.Value;
damageReport.attackerBody.RecalculateStats();
}
else if (itemCount2 > 1)
{
PalmTree_AdditionalBaseDamage += (float)itemCount2 * Main.PalmTree_AdditionalBaseDamage.Value;
damageReport.attackerBody.RecalculateStats();
}
}
}
}
void Run_Start(orig_Start orig, Run self)
{
PalmTree_AdditionalBaseDamage = 0f;
orig.Invoke(self);
}
}
public static void Initiate(float PalmTree_AdditionalBaseDamage)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
CreateItem();
ItemAPI.Add(new CustomItem(itemDefinition, CreateDisplayRules()));
AddTokens();
AddHooks(itemDefinition, PalmTree_AdditionalBaseDamage);
}
}
}
namespace PhreelsContentPack.Items.T2
{
internal class EasternLantern
{
private static string itemName = "EasternLantern";
private static string upperName = itemName.ToUpper();
public static ItemDef itemDefinition = CreateItem();
public static GameObject LoadPrefab()
{
return Main.MainAssets.LoadAsset<GameObject>("Assets/Palm tree/EasternLantern.prefab");
}
public static Sprite LoadSprite()
{
return Main.MainAssets.LoadAsset<Sprite>("Assets/Palm tree/EasternLantern.png");
}
public static ItemDef CreateItem()
{
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
((Object)val).name = itemName;
val.nameToken = "PCP_" + upperName + "_NAME";
val.pickupToken = "PCP_" + upperName + "_PICKUP";
val.descriptionToken = "PCP_" + upperName + "_DESC";
val.loreToken = "PCP_" + upperName + "_LORE";
ItemTag[] array = new ItemTag[3];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
val.tags = (ItemTag[])(object)array;
val.deprecatedTier = (ItemTier)1;
val.canRemove = true;
val.hidden = false;
val.pickupModelPrefab = LoadPrefab();
val.pickupIconSprite = LoadSprite();
return val;
}
public static ItemDisplayRuleDict CreateDisplayRules()
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
GameObject val = helpers.PrepareItemDisplayModel(PrefabAPI.InstantiateClone(LoadPrefab(), ((Object)LoadPrefab()).name + "Display", false));
return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
}
public static void AddTokens()
{
LanguageAPI.Add("PCP_" + upperName + "_NAME", "Far Eastern Lantern");
LanguageAPI.Add("PCP_" + upperName + "_PICKUP", "Increase your HP regen by the amount of allies you have.");
LanguageAPI.Add("PCP_" + upperName + "_DESC", $"<style=cIsHealing>Increases base health regeneration by +{Main.EasternLantern_InitialRegenPerAlly.Value}hp/s</style> <style=cStack>(+{Main.EasternLantern_AdditionalRegenPerAlly.Value} hp/s per stack)</style> for each ally you have.");
LanguageAPI.Add("PCP_" + upperName + "_LORE", "Did you know that the lanterns in Chinese culture represent family?");
}
private static void AddHooks(ItemDef itemDefToHooks)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(EasternLanternRecalculateStats);
void EasternLanternRecalculateStats(CharacterBody body, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)body.inventory) && body.inventory.GetItemCount(itemDefToHooks) > 0)
{
float num = body.inventory.GetItemCount(itemDefToHooks);
float num2 = 0f;
num2 += (float)TeamComponent.GetTeamMembers((TeamIndex)1).Count();
args.baseRegenAdd += num2 * (Main.EasternLantern_InitialRegenPerAlly.Value + num * Main.EasternLantern_AdditionalRegenPerAlly.Value);
}
}
}
public static void Initiate()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
CreateItem();
ItemAPI.Add(new CustomItem(itemDefinition, CreateDisplayRules()));
AddTokens();
AddHooks(itemDefinition);
}
}
internal class PirateCoin
{
private static string itemName = "PirateCoin";
private static string upperName = itemName.ToUpper();
public static ItemDef itemDefinition = CreateItem();
public static GameObject LoadPrefab()
{
return Main.MainAssets.LoadAsset<GameObject>("Assets/DavePixel/PirateCoin/Prefabs/PirateCoin.prefab");
}
public static Sprite LoadSprite()
{
return Main.MainAssets.LoadAsset<Sprite>("Assets/Palm tree/PirateCoin.png");
}
public static ItemDef CreateItem()
{
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
((Object)val).name = itemName;
val.nameToken = "PCP_" + upperName + "_NAME";
val.pickupToken = "PCP_" + upperName + "_PICKUP";
val.descriptionToken = "PCP_" + upperName + "_DESC";
val.loreToken = "PCP_" + upperName + "_LORE";
val.tags = (ItemTag[])(object)new ItemTag[2]
{
(ItemTag)2,
(ItemTag)11
};
val.deprecatedTier = (ItemTier)1;
val.canRemove = true;
val.hidden = false;
val.pickupModelPrefab = LoadPrefab();
val.pickupIconSprite = LoadSprite();
return val;
}
public static ItemDisplayRuleDict CreateDisplayRules()
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
GameObject val = helpers.PrepareItemDisplayModel(PrefabAPI.InstantiateClone(LoadPrefab(), ((Object)LoadPrefab()).name + "Display", false));
return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
}
public static void AddTokens()
{
LanguageAPI.Add("PCP_" + upperName + "_NAME", "Pirate Coin");
LanguageAPI.Add("PCP_" + upperName + "_PICKUP", "Increase your HP based on the amount of White items you own.");
LanguageAPI.Add("PCP_" + upperName + "_DESC", $"<style=cIsHealing>Increase your base HP by {Main.PirateCoin_PercentageHPWhiteItem.Value * 100f}%</style> for each Common item in your inventory. <style=cStack>Further stacks of the item, multiplies the HP increase effect by {Main.PirateCoin_PercentageHPWhiteItemMultiplierAtStacks.Value} times.</style>");
LanguageAPI.Add("PCP_" + upperName + "_LORE", "One shipwrecked man's treasure is another sailor's savior of the day.");
}
private static void AddHooks(ItemDef itemDefToHooks)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(PirateCoinRecalculateStats);
void PirateCoinRecalculateStats(CharacterBody body, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)body.inventory) && body.inventory.GetItemCount(itemDefToHooks) > 0)
{
float num = body.inventory.GetItemCount(itemDefToHooks);
float num2 = 0f;
num2 += (float)body.inventory.GetTotalItemCountOfTier((ItemTier)0);
num2 += (float)body.inventory.GetTotalItemCountOfTier((ItemTier)6);
args.healthMultAdd += num2 * Main.PirateCoin_PercentageHPWhiteItem.Value * (float)Math.Pow(Main.PirateCoin_PercentageHPWhiteItemMultiplierAtStacks.Value, num - 1f);
}
}
}
public static void Initiate()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
CreateItem();
ItemAPI.Add(new CustomItem(itemDefinition, CreateDisplayRules()));
AddTokens();
AddHooks(itemDefinition);
}
}
}
namespace PhreelsContentPack.Items.T1
{
internal class DetachedStinger
{
private static string itemName = "DetachedStinger";
private static string upperName = itemName.ToUpper();
public static ItemDef itemDefinition = CreateItem();
public static GameObject LoadPrefab()
{
return Main.MainAssets.LoadAsset<GameObject>("Assets/Palm tree/DetachedStinger.prefab");
}
public static Sprite LoadSprite()
{
return Main.MainAssets.LoadAsset<Sprite>("Assets/Palm tree/DetachedStinger.png");
}
public static ItemDef CreateItem()
{
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
((Object)val).name = itemName;
val.nameToken = "PCP_" + upperName + "_NAME";
val.pickupToken = "PCP_" + upperName + "_PICKUP";
val.descriptionToken = "PCP_" + upperName + "_DESC";
val.loreToken = "PCP_" + upperName + "_LORE";
val.tags = (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 };
val.deprecatedTier = (ItemTier)0;
val.canRemove = true;
val.hidden = false;
val.pickupModelPrefab = LoadPrefab();
val.pickupIconSprite = LoadSprite();
return val;
}
public static ItemDisplayRuleDict CreateDisplayRules()
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
GameObject val = helpers.PrepareItemDisplayModel(PrefabAPI.InstantiateClone(LoadPrefab(), ((Object)LoadPrefab()).name + "Display", false));
return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
}
public static void AddTokens()
{
LanguageAPI.Add("PCP_" + upperName + "_NAME", "Detached Stinger");
LanguageAPI.Add("PCP_" + upperName + "_PICKUP", "Chance to inflict poison on hit.");
LanguageAPI.Add("PCP_" + upperName + "_DESC", $"On hit, you have an <style=cIsDamage>{Main.DetachedStinger_ChancetoInflict.Value}% chance</style> <style=cStack>(+{Main.DetachedStinger_ChancetoInflict.Value}% per stack)</style> to <style=cIsDamage>poison</style> your target");
LanguageAPI.Add("PCP_" + upperName + "_LORE", "Thank you Mr.Bones");
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
public static void AddTokensWithVAPIEnabled()
{
LanguageAPI.Add("PCP_" + upperName + "_NAME", "Detached Stinger");
LanguageAPI.Add("PCP_" + upperName + "_PICKUP", "Chance to inflict poison on hit. Deal more damage to variants.");
LanguageAPI.Add("PCP_" + upperName + "_DESC", $"On hit, you have an <style=cIsDamage>{Main.DetachedStinger_ChancetoInflict.Value}% chance</style> <style=cStack>(+{Main.DetachedStinger_ChancetoInflict.Value}% per stack)</style> to <style=cIsDamage>poison</style> your target. Additionally deal <style=cIsDamage>{Main.DetachedStinger_DealExtraDamageToVariants.Value}% more damage</style> <style=cStack>(+{Main.DetachedStinger_DealExtraDamageToVariants.Value}% per stack)</style> to variant enemies.");
LanguageAPI.Add("PCP_" + upperName + "_LORE", "Thank you Mr.Bones");
}
private static void AddHooks(ItemDef itemDefToHooks)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(inflictPoison);
void inflictPoison(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
try
{
if (NetworkServer.active && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>()) && Object.op_Implicit((Object)(object)victim.GetComponent<CharacterBody>()))
{
Inventory inventory = damageInfo.attacker.GetComponent<CharacterBody>().inventory;
int itemCount = inventory.GetItemCount(itemDefToHooks);
if (itemCount > 0 && Util.CheckRoll((1f - Mathf.Clamp(1f / (1f + (float)itemCount * Main.DetachedStinger_ChancetoInflict.Value), 0f, 1f)) * 100f * damageInfo.procCoefficient, 0f, (CharacterMaster)null))
{
damageInfo.damageType |= DamageTypeCombo.op_Implicit((DamageType)4096);
}
}
}
catch
{
}
orig.Invoke(self, damageInfo, victim);
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
private static void AddHooksWithVAPIEnabled(ItemDef itemDefToHooks)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(inflictPoison);
HealthComponent.TakeDamage += new hook_TakeDamage(DealExtraDamageToVariants);
void DealExtraDamageToVariants(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
{
if (NetworkServer.active && Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>()) && Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)((Component)self).GetComponent<CharacterBody>()))
{
CharacterBody component = ((Component)self).GetComponent<CharacterBody>();
Inventory inventory = damageInfo.attacker.GetComponent<CharacterBody>().inventory;
if ((Object)(object)inventory != (Object)null)
{
int itemCount = inventory.GetItemCount(itemDefToHooks);
if (itemCount > 0 && component.HasBuff(Buffs.bdVariant))
{
damageInfo.damage *= 1f + (float)itemCount * (Main.DetachedStinger_DealExtraDamageToVariants.Value / 100f);
}
}
}
orig.Invoke(self, damageInfo);
}
void inflictPoison(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
CharacterBody val = default(CharacterBody);
if (NetworkServer.active && Object.op_Implicit((Object)(object)damageInfo.attacker) && damageInfo.attacker.TryGetComponent<CharacterBody>(ref val) && Object.op_Implicit((Object)(object)val.inventory))
{
int itemCount2 = val.inventory.GetItemCount(itemDefToHooks);
if (Util.CheckRoll((float)itemCount2 * Main.DetachedStinger_ChancetoInflict.Value * damageInfo.procCoefficient, val.master))
{
damageInfo.damageType |= DamageTypeCombo.op_Implicit((DamageType)4096);
}
}
orig.Invoke(self, damageInfo, victim);
}
}
public static void Initiate()
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Expected O, but got Unknown
ItemAPI.Add(new CustomItem(itemDefinition, CreateDisplayRules()));
AddTokens();
AddHooks(itemDefinition);
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
public static void InitiateWithVAPIEnabled()
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Expected O, but got Unknown
ItemAPI.Add(new CustomItem(itemDefinition, CreateDisplayRules()));
AddTokensWithVAPIEnabled();
AddHooksWithVAPIEnabled(itemDefinition);
}
}
}
namespace PhreelsContentPack.Items.Buffs
{
public abstract class BuffBase<T> : BuffBase where T : BuffBase<T>
{
public static T instance { get; private set; }
public BuffBase()
{
if (instance != null)
{
throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting BuffBase was instantiated twice");
}
instance = this as T;
}
}
public abstract class BuffBase
{
public BuffDef BuffDef;
public abstract string BuffName { get; }
public abstract Color Color { get; }
public virtual bool CanStack { get; set; } = false;
public virtual bool IsDebuff { get; set; } = false;
public abstract Sprite BuffIcon { get; }
public abstract void Init();
public void CreateBuff()
{
//IL_0025: 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)
BuffDef = ScriptableObject.CreateInstance<BuffDef>();
((Object)BuffDef).name = BuffName;
BuffDef.buffColor = Color;
BuffDef.canStack = CanStack;
BuffDef.isDebuff = IsDebuff;
BuffDef.iconSprite = BuffIcon;
ContentAddition.AddBuffDef(BuffDef);
}
public abstract void Hooks();
}
}
namespace PhreelsContentPack.HelperClasses
{
public class helpers
{
public static GameObject PrepareItemDisplayModel(GameObject itemDisplayModel)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
ItemDisplay val = itemDisplayModel.AddComponent<ItemDisplay>();
List<RendererInfo> list = new List<RendererInfo>();
Renderer[] componentsInChildren = itemDisplayModel.GetComponentsInChildren<Renderer>();
foreach (Renderer val2 in componentsInChildren)
{
RendererInfo val3 = default(RendererInfo);
val3.renderer = val2;
val3.defaultMaterial = val2.material;
RendererInfo item = val3;
list.Add(item);
}
val.rendererInfos = list.ToArray();
return itemDisplayModel;
}
}
}