using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using Assets.Scripts.Actors.Player;
using Assets.Scripts.Inventory__Items__Pickups.Stats;
using Assets.Scripts.Menu.Shop;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using HarmonyLib;
using Il2CppSystem.Collections.Generic;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("MEGABONK_AMOG_REWORK")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Amog rework")]
[assembly: AssemblyFileVersion("0.0.1.0")]
[assembly: AssemblyInformationalVersion("0.0.1")]
[assembly: AssemblyProduct("MEGABONK_AMOG_REWORK")]
[assembly: AssemblyTitle("MEGABONK_AMOG_REWORK")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace MEGABONK_BETTER_AMOG
{
[BepInPlugin("plutoforever_BetterAmog", "BetterAmog", "1.0.0")]
public class Plugin : BasePlugin
{
public const string MODNAME = "BetterAmog";
public const string AUTHOR = "plutoforever";
public const string GUID = "plutoforever_BetterAmog";
public const string VERSION = "1.0.0";
public static ManualLogSource log;
private Harmony harmony;
public static ConfigEntry<float> MaxHealth;
public static ConfigEntry<float> HealthRegen;
public static ConfigEntry<float> Shield;
public static ConfigEntry<float> Thorns;
public static ConfigEntry<float> Armor;
public static ConfigEntry<float> Evasion;
public static ConfigEntry<float> DamageReductionMultiplier;
public static ConfigEntry<float> DamageCooldownMultiplier;
public static ConfigEntry<float> Overheal;
public static ConfigEntry<float> HealingMultiplier;
public static ConfigEntry<float> SizeMultiplier;
public static ConfigEntry<float> DurationMultiplier;
public static ConfigEntry<float> ProjectileSpeedMultiplier;
public static ConfigEntry<float> DamageMultiplier;
public static ConfigEntry<float> EffectDurationMultiplier;
public static ConfigEntry<float> AttackSpeed;
public static ConfigEntry<float> Projectiles;
public static ConfigEntry<float> WeaponBurstCooldown;
public static ConfigEntry<float> ProjectileBounces;
public static ConfigEntry<float> Evolve;
public static ConfigEntry<float> Lifesteal;
public static ConfigEntry<float> CritChance;
public static ConfigEntry<float> CritDamage;
public static ConfigEntry<float> FireDamage;
public static ConfigEntry<float> IceDamage;
public static ConfigEntry<float> LightningDamage;
public static ConfigEntry<float> EliteDamageMultiplier;
public static ConfigEntry<float> KnockbackMultiplier;
public static ConfigEntry<float> BurnChance;
public static ConfigEntry<float> FreezeChance;
public static ConfigEntry<float> MoveSpeedMultiplier;
public static ConfigEntry<float> JumpHeight;
public static ConfigEntry<float> FallDamageReduction;
public static ConfigEntry<float> Slam;
public static ConfigEntry<float> ExtraJumps;
public static ConfigEntry<float> PickupRange;
public static ConfigEntry<float> Luck;
public static ConfigEntry<float> GoldIncreaseMultiplier;
public static ConfigEntry<float> XpIncreaseMultiplier;
public static ConfigEntry<float> ChestIncreaseMultiplier;
public static ConfigEntry<float> ChestPriceMultiplier;
public static ConfigEntry<float> ShopPriceReduction;
public static ConfigEntry<float> SilverIncreaseMultiplier;
public static ConfigEntry<float> Holiness;
public static ConfigEntry<float> Wickedness;
public static ConfigEntry<float> PowerupBoostMultiplier;
public static ConfigEntry<float> PowerupChance;
public static ConfigEntry<float> Difficulty;
public static ConfigEntry<float> EliteSpawnIncrease;
public static ConfigEntry<float> EnemyAmountMultiplier;
public static ConfigEntry<float> EnemySizeMultiplier;
public static ConfigEntry<float> EnemySpeedMultiplier;
public static ConfigEntry<float> EnemyHpMultiplier;
public static ConfigEntry<float> EnemyDamageMultiplier;
public static ConfigEntry<float> EnemyScalingMultiplier;
public Plugin()
{
log = ((BasePlugin)this).Log;
}
public override void Load()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
//IL_0827: Unknown result type (might be due to invalid IL or missing references)
//IL_0831: Expected O, but got Unknown
//IL_0868: Unknown result type (might be due to invalid IL or missing references)
//IL_086e: Expected O, but got Unknown
ManualLogSource val = log;
bool flag = default(bool);
BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(14, 3, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Loading ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>("BetterAmog");
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" v");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>("1.0.0");
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" by ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>("plutoforever");
}
val.LogInfo(val2);
MaxHealth = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "MaxHealth", 0f, "Max Health bonus (0 = vanilla, positive = more health)");
HealthRegen = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "HealthRegen", 0f, "Health regeneration per second");
Shield = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "Shield", 0f, "Shield amount");
Thorns = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "Thorns", 0f, "Damage reflected to enemies");
Armor = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "Armor", 0f, "Damage reduction");
Evasion = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "Evasion", 0f, "Chance to dodge attacks (0.1 = 10%)");
DamageReductionMultiplier = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "DamageReductionMultiplier", 0f, "Multiplier for damage reduction");
DamageCooldownMultiplier = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "DamageCooldownMultiplier", 0f, "Multiplier for invincibility time after taking damage");
Overheal = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "Overheal", 0f, "Maximum overheal amount");
HealingMultiplier = ((BasePlugin)this).Config.Bind<float>("1. Survival Stats", "HealingMultiplier", 0f, "Multiplier for all healing received");
SizeMultiplier = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "SizeMultiplier", 0f, "Weapon/projectile size multiplier (0.2 = 20% larger)");
DurationMultiplier = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "DurationMultiplier", 0f, "Weapon duration multiplier");
ProjectileSpeedMultiplier = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "ProjectileSpeedMultiplier", 0f, "Projectile speed multiplier");
DamageMultiplier = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "DamageMultiplier", 0f, "Damage multiplier (1.0 = double damage)");
EffectDurationMultiplier = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "EffectDurationMultiplier", 0f, "Status effect duration multiplier");
AttackSpeed = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "AttackSpeed", 0f, "Attack speed bonus (negative = faster, -0.3 = 30% faster)");
Projectiles = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "Projectiles", 1f, "Extra projectiles");
WeaponBurstCooldown = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "WeaponBurstCooldown", 0f, "Weapon burst cooldown reduction");
ProjectileBounces = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "ProjectileBounces", 0f, "Extra projectile bounces");
Evolve = ((BasePlugin)this).Config.Bind<float>("2. Weapon Stats", "Evolve", 0f, "Weapon evolution level");
Lifesteal = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "Lifesteal", 0f, "Lifesteal percentage (0.1 = 10% lifesteal)");
CritChance = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "CritChance", 0f, "Critical hit chance (0.25 = 25% crit chance)");
CritDamage = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "CritDamage", 0f, "Critical damage multiplier bonus");
FireDamage = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "FireDamage", 0f, "Fire damage bonus");
IceDamage = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "IceDamage", 0f, "Ice damage bonus");
LightningDamage = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "LightningDamage", 0f, "Lightning damage bonus");
EliteDamageMultiplier = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "EliteDamageMultiplier", 0f, "Bonus damage vs elite enemies");
KnockbackMultiplier = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "KnockbackMultiplier", 0f, "Knockback strength multiplier");
BurnChance = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "BurnChance", 0f, "Chance to burn enemies (0.2 = 20%)");
FreezeChance = ((BasePlugin)this).Config.Bind<float>("3. Damage Stats", "FreezeChance", 0f, "Chance to freeze enemies (0.2 = 20%)");
MoveSpeedMultiplier = ((BasePlugin)this).Config.Bind<float>("4. Movement Stats", "MoveSpeedMultiplier", 0.1f, "Movement speed multiplier (0.2 = 20% faster)");
JumpHeight = ((BasePlugin)this).Config.Bind<float>("4. Movement Stats", "JumpHeight", 0f, "Jump height bonus");
FallDamageReduction = ((BasePlugin)this).Config.Bind<float>("4. Movement Stats", "FallDamageReduction", 0f, "Fall damage reduction");
Slam = ((BasePlugin)this).Config.Bind<float>("4. Movement Stats", "Slam", 0f, "Ground slam damage");
ExtraJumps = ((BasePlugin)this).Config.Bind<float>("4. Movement Stats", "ExtraJumps", 0f, "Extra jumps/double jumps");
PickupRange = ((BasePlugin)this).Config.Bind<float>("5. Economy Stats", "PickupRange", 0f, "Pickup range bonus");
Luck = ((BasePlugin)this).Config.Bind<float>("5. Economy Stats", "Luck", 0f, "Luck (better drops)");
GoldIncreaseMultiplier = ((BasePlugin)this).Config.Bind<float>("5. Economy Stats", "GoldIncreaseMultiplier", 0f, "Gold gain multiplier (0.5 = 50% more gold)");
XpIncreaseMultiplier = ((BasePlugin)this).Config.Bind<float>("5. Economy Stats", "XpIncreaseMultiplier", 0f, "XP gain multiplier (0.5 = 50% more XP)");
ChestIncreaseMultiplier = ((BasePlugin)this).Config.Bind<float>("5. Economy Stats", "ChestIncreaseMultiplier", 0f, "Chest spawn rate multiplier");
ChestPriceMultiplier = ((BasePlugin)this).Config.Bind<float>("5. Economy Stats", "ChestPriceMultiplier", 0f, "Chest price multiplier (negative = cheaper)");
ShopPriceReduction = ((BasePlugin)this).Config.Bind<float>("5. Economy Stats", "ShopPriceReduction", 0f, "Shop price reduction (0.2 = 20% cheaper)");
SilverIncreaseMultiplier = ((BasePlugin)this).Config.Bind<float>("5. Economy Stats", "SilverIncreaseMultiplier", 0f, "Silver gain multiplier");
Holiness = ((BasePlugin)this).Config.Bind<float>("6. Special Stats", "Holiness", 0f, "Holiness stat");
Wickedness = ((BasePlugin)this).Config.Bind<float>("6. Special Stats", "Wickedness", 0f, "Wickedness stat");
PowerupBoostMultiplier = ((BasePlugin)this).Config.Bind<float>("6. Special Stats", "PowerupBoostMultiplier", 0f, "Powerup effectiveness multiplier");
PowerupChance = ((BasePlugin)this).Config.Bind<float>("6. Special Stats", "PowerupChance", 0f, "Powerup spawn chance");
Difficulty = ((BasePlugin)this).Config.Bind<float>("7. Difficulty Modifiers", "Difficulty", 0f, "Overall difficulty modifier");
EliteSpawnIncrease = ((BasePlugin)this).Config.Bind<float>("7. Difficulty Modifiers", "EliteSpawnIncrease", 0f, "Elite enemy spawn rate increase");
EnemyAmountMultiplier = ((BasePlugin)this).Config.Bind<float>("7. Difficulty Modifiers", "EnemyAmountMultiplier", 0f, "Enemy spawn amount multiplier");
EnemySizeMultiplier = ((BasePlugin)this).Config.Bind<float>("7. Difficulty Modifiers", "EnemySizeMultiplier", 0f, "Enemy size multiplier");
EnemySpeedMultiplier = ((BasePlugin)this).Config.Bind<float>("7. Difficulty Modifiers", "EnemySpeedMultiplier", 0f, "Enemy speed multiplier");
EnemyHpMultiplier = ((BasePlugin)this).Config.Bind<float>("7. Difficulty Modifiers", "EnemyHpMultiplier", 0f, "Enemy health multiplier");
EnemyDamageMultiplier = ((BasePlugin)this).Config.Bind<float>("7. Difficulty Modifiers", "EnemyDamageMultiplier", 0f, "Enemy damage multiplier");
EnemyScalingMultiplier = ((BasePlugin)this).Config.Bind<float>("7. Difficulty Modifiers", "EnemyScalingMultiplier", 0f, "Enemy scaling multiplier");
harmony = new Harmony("plutoforever_BetterAmog");
harmony.PatchAll();
log.LogInfo((object)"===========================================");
log.LogInfo((object)"Better Amog loaded successfully!");
ManualLogSource val3 = log;
val2 = new BepInExInfoLogInterpolatedStringHandler(13, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Config file: ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(((BasePlugin)this).Config.ConfigFilePath);
}
val3.LogInfo(val2);
log.LogInfo((object)"Edit the config file to customize Amog's stats");
log.LogInfo((object)"Restart the game after editing for changes to apply");
log.LogInfo((object)"===========================================");
}
public override bool Unload()
{
Harmony obj = harmony;
if (obj != null)
{
obj.UnpatchSelf();
}
return ((BasePlugin)this).Unload();
}
}
[HarmonyPatch(typeof(MyPlayer), "Awake")]
public class MyPlayerAwakePatch
{
private static void Postfix(MyPlayer __instance)
{
//IL_05fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0605: Expected O, but got Unknown
//IL_04ae: Unknown result type (might be due to invalid IL or missing references)
//IL_04b3: Unknown result type (might be due to invalid IL or missing references)
//IL_058c: Unknown result type (might be due to invalid IL or missing references)
//IL_0593: Expected O, but got Unknown
//IL_04f1: Unknown result type (might be due to invalid IL or missing references)
//IL_04f6: Unknown result type (might be due to invalid IL or missing references)
//IL_052c: Unknown result type (might be due to invalid IL or missing references)
//IL_0531: Unknown result type (might be due to invalid IL or missing references)
//IL_0532: Unknown result type (might be due to invalid IL or missing references)
//IL_053a: Unknown result type (might be due to invalid IL or missing references)
//IL_0542: Unknown result type (might be due to invalid IL or missing references)
//IL_054d: Expected O, but got Unknown
bool flag2 = default(bool);
try
{
AlwaysManager val = Object.FindObjectOfType<AlwaysManager>();
if ((Object)(object)val == (Object)null || (Object)(object)val.dataManager == (Object)null)
{
Plugin.log.LogWarning((object)"AlwaysManager or DataManager not found");
return;
}
DataManager dataManager = val.dataManager;
if (!dataManager.characterData.ContainsKey((ECharacter)14))
{
return;
}
CharacterData val2 = dataManager.characterData[(ECharacter)14];
Plugin.log.LogInfo((object)"=== APPLYING AMOG OVERHAUL ===");
Dictionary<EStat, float> dictionary = new Dictionary<EStat, float>
{
{
(EStat)0,
Plugin.MaxHealth.Value
},
{
(EStat)1,
Plugin.HealthRegen.Value
},
{
(EStat)2,
Plugin.Shield.Value
},
{
(EStat)3,
Plugin.Thorns.Value
},
{
(EStat)4,
Plugin.Armor.Value
},
{
(EStat)5,
Plugin.Evasion.Value
},
{
(EStat)7,
Plugin.DamageReductionMultiplier.Value
},
{
(EStat)8,
Plugin.DamageCooldownMultiplier.Value
},
{
(EStat)47,
Plugin.Overheal.Value
},
{
(EStat)48,
Plugin.HealingMultiplier.Value
},
{
(EStat)9,
Plugin.SizeMultiplier.Value
},
{
(EStat)10,
Plugin.DurationMultiplier.Value
},
{
(EStat)11,
Plugin.ProjectileSpeedMultiplier.Value
},
{
(EStat)12,
Plugin.DamageMultiplier.Value
},
{
(EStat)14,
Plugin.EffectDurationMultiplier.Value
},
{
(EStat)15,
Plugin.AttackSpeed.Value
},
{
(EStat)16,
Plugin.Projectiles.Value
},
{
(EStat)44,
Plugin.WeaponBurstCooldown.Value
},
{
(EStat)45,
Plugin.ProjectileBounces.Value
},
{
(EStat)6,
Plugin.Evolve.Value
},
{
(EStat)17,
Plugin.Lifesteal.Value
},
{
(EStat)18,
Plugin.CritChance.Value
},
{
(EStat)19,
Plugin.CritDamage.Value
},
{
(EStat)20,
Plugin.FireDamage.Value
},
{
(EStat)21,
Plugin.IceDamage.Value
},
{
(EStat)22,
Plugin.LightningDamage.Value
},
{
(EStat)23,
Plugin.EliteDamageMultiplier.Value
},
{
(EStat)24,
Plugin.KnockbackMultiplier.Value
},
{
(EStat)42,
Plugin.BurnChance.Value
},
{
(EStat)43,
Plugin.FreezeChance.Value
},
{
(EStat)25,
Plugin.MoveSpeedMultiplier.Value
},
{
(EStat)26,
Plugin.JumpHeight.Value
},
{
(EStat)27,
Plugin.FallDamageReduction.Value
},
{
(EStat)28,
Plugin.Slam.Value
},
{
(EStat)46,
Plugin.ExtraJumps.Value
},
{
(EStat)29,
Plugin.PickupRange.Value
},
{
(EStat)30,
Plugin.Luck.Value
},
{
(EStat)31,
Plugin.GoldIncreaseMultiplier.Value
},
{
(EStat)32,
Plugin.XpIncreaseMultiplier.Value
},
{
(EStat)33,
Plugin.ChestIncreaseMultiplier.Value
},
{
(EStat)34,
Plugin.ChestPriceMultiplier.Value
},
{
(EStat)35,
Plugin.ShopPriceReduction.Value
},
{
(EStat)49,
Plugin.SilverIncreaseMultiplier.Value
},
{
(EStat)36,
Plugin.Holiness.Value
},
{
(EStat)37,
Plugin.Wickedness.Value
},
{
(EStat)40,
Plugin.PowerupBoostMultiplier.Value
},
{
(EStat)41,
Plugin.PowerupChance.Value
},
{
(EStat)38,
Plugin.Difficulty.Value
},
{
(EStat)39,
Plugin.EliteSpawnIncrease.Value
},
{
(EStat)50,
Plugin.EnemyAmountMultiplier.Value
},
{
(EStat)51,
Plugin.EnemySizeMultiplier.Value
},
{
(EStat)52,
Plugin.EnemySpeedMultiplier.Value
},
{
(EStat)53,
Plugin.EnemyHpMultiplier.Value
},
{
(EStat)54,
Plugin.EnemyDamageMultiplier.Value
},
{
(EStat)55,
Plugin.EnemyScalingMultiplier.Value
}
};
int num = 0;
int num2 = 0;
foreach (KeyValuePair<EStat, float> item in dictionary)
{
EStat key = item.Key;
float value = item.Value;
if (value == 0f)
{
continue;
}
bool flag = false;
Enumerator<StatModifier> enumerator2 = val2.statModifiers.GetEnumerator();
while (enumerator2.MoveNext())
{
StatModifier current2 = enumerator2.Current;
if (current2.stat == key)
{
current2.modification = value;
flag = true;
num++;
break;
}
}
if (!flag)
{
StatModifier val3 = new StatModifier
{
stat = key,
modifyType = (EStatModifyType)2,
modification = value
};
val2.statModifiers.Add(val3);
num2++;
}
}
ManualLogSource log = Plugin.log;
BepInExInfoLogInterpolatedStringHandler val4 = new BepInExInfoLogInterpolatedStringHandler(42, 2, ref flag2);
if (flag2)
{
((BepInExLogInterpolatedStringHandler)val4).AppendLiteral("Modified ");
((BepInExLogInterpolatedStringHandler)val4).AppendFormatted<int>(num);
((BepInExLogInterpolatedStringHandler)val4).AppendLiteral(" existing stats, added ");
((BepInExLogInterpolatedStringHandler)val4).AppendFormatted<int>(num2);
((BepInExLogInterpolatedStringHandler)val4).AppendLiteral(" new stats");
}
log.LogInfo(val4);
Plugin.log.LogInfo((object)"=== AMOG OVERHAUL APPLIED ===");
}
catch (Exception ex)
{
ManualLogSource log2 = Plugin.log;
BepInExErrorLogInterpolatedStringHandler val5 = new BepInExErrorLogInterpolatedStringHandler(28, 1, ref flag2);
if (flag2)
{
((BepInExLogInterpolatedStringHandler)val5).AppendLiteral("Exception in Amog overhaul: ");
((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<Exception>(ex);
}
log2.LogError(val5);
}
}
}
}