Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of PVP Mod v1.2.0
plugins/PVPMod.dll
Decompiled 5 months agousing System; using System.Collections; 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 HarmonyLib; using IL.RoR2; using Microsoft.CodeAnalysis; using Mono.Cecil; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using RiskOfOptions; using RiskOfOptions.Options; using RoR2; using RoR2.ContentManagement; using RoR2.ExpansionManagement; using TMPro; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; [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 = ".NET Standard 2.1")] [assembly: AssemblyCompany("PVPMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+f44dff5d1956c703c2531653a260287999688725")] [assembly: AssemblyProduct("PVPMod")] [assembly: AssemblyTitle("PVPMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] [module: UnverifiableCode] 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 PVPMod { [Serializable] [BepInPlugin("com.brynzananas.pvpmod", "PVP mod", "1.2.0")] [BepInDependency("com.bepis.r2api", "5.1.7")] [BepInDependency("com.bepis.r2api.teams", "1.0.1")] [BepInDependency("com.bepis.r2api.networking", "1.0.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class PVPModPlugin : BaseUnityPlugin { [CompilerGenerated] private static class <>O { public static Action<ItemDef> <0>__StrongerDeathMarkEvents; public static Action<ItemDef> <1>__IncreaseDamageByShieldAndReduceShieldRechargeTimeEvents; public static Action<ItemDef> <2>__AddVenomOnHitUnderQuestionableConditionsEvents; public static CustomDotDamageEvaluation <3>__VenomDamageEvaluation; public static EventHandler <4>__PVPItemRewardTier1Weight_SettingChanged; public static Action<TeleporterInteraction> <5>__TeleporterInteraction_onTeleporterChargedGlobal; public static Action<Stage> <6>__Stage_onServerStageBegin; public static Action<TeamComponent, TeamIndex> <7>__TeamComponent_onJoinTeamGlobal; public static Action<TeamComponent, TeamIndex> <8>__TeamComponent_onLeaveTeamGlobal; public static Action<DamageReport> <9>__GlobalEventManager_onCharacterDeathGlobal; public static hook_SetTeamExperience <10>__TeamManager_SetTeamExperience; public static Action <11>__InitLanguageTokens; public static EventHandler <12>__StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static CollectContentPackProvidersDelegate <>9__98_0; public static Func<Instruction, bool> <>9__114_3; public static Func<Instruction, bool> <>9__114_4; public static Func<Instruction, bool> <>9__114_5; public static Func<Instruction, bool> <>9__114_6; public static Func<Instruction, bool> <>9__116_2; public static Func<Instruction, bool> <>9__116_3; public static Func<Instruction, bool> <>9__116_4; public static Func<Instruction, bool> <>9__116_5; internal void <Awake>b__98_0(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)new PVPModContentPack()); } internal bool <StrongerDeathMarkEvents>b__114_3(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, 0); } internal bool <StrongerDeathMarkEvents>b__114_4(Instruction x) { return ILPatternMatchingExt.MatchLdfld<HealthComponent>(x, "body"); } internal bool <StrongerDeathMarkEvents>b__114_5(Instruction x) { return ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "DeathMark"); } internal bool <StrongerDeathMarkEvents>b__114_6(Instruction x) { return ILPatternMatchingExt.MatchCallvirt<CharacterBody>(x, "HasBuff"); } internal bool <IncreaseDamageByShieldAndReduceShieldRechargeTimeEvents>b__116_2(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, 0); } internal bool <IncreaseDamageByShieldAndReduceShieldRechargeTimeEvents>b__116_3(Instruction x) { return ILPatternMatchingExt.MatchLdfld<HealthComponent>(x, "body"); } internal bool <IncreaseDamageByShieldAndReduceShieldRechargeTimeEvents>b__116_4(Instruction x) { return ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "DeathMark"); } internal bool <IncreaseDamageByShieldAndReduceShieldRechargeTimeEvents>b__116_5(Instruction x) { return ILPatternMatchingExt.MatchCallvirt<CharacterBody>(x, "HasBuff"); } } public const string ModGuid = "com.brynzananas.pvpmod"; public const string ModName = "PVP mod"; public const string ModVer = "1.2.0"; public static List<TeamIndex> playerTeamIndeces = new List<TeamIndex>(); public static List<TeamDef> playerTeamDefs = new List<TeamDef>(); public static List<CharacterBody> activePVPBodies = new List<CharacterBody>(); private static int _extraPlayerTeamsCount; public static DotIndex VenomDotIndex; public static DotDef VenomDot; public static List<ConfigEntryBase> configs = new List<ConfigEntryBase>(); public static ConfigEntry<bool> EnablePVP; public static ConfigEntry<bool> EnableContent; public static ConfigEntry<float> PVPCountdownTimer; public static ConfigEntry<int> PVPItemRewardAmount; public static ConfigEntry<float> PVPItemRewardTier1Weight; public static ConfigEntry<float> PVPItemRewardTier2Weight; public static ConfigEntry<float> PVPItemRewardTier3Weight; public static ConfigEntry<float> PVPItemRewardBossWeight; public static ConfigEntry<float> PVPItemRewardEquipmentWeight; public static ConfigEntry<float> PVPItemRewardLunarItemWeight; public static ConfigEntry<float> PVPItemRewardLunarEquipmentWeight; public static ConfigEntry<float> PVPItemRewardLunarCombinedWeight; public static ConfigEntry<float> PVPItemRewardTier1VoidWeight; public static ConfigEntry<float> PVPItemRewardTier2VoidWeight; public static ConfigEntry<float> PVPItemRewardTier3VoidWeight; public static ConfigEntry<float> PVPItemRewardBossVoidWeight; public static ConfigEntry<int> PVPLoserLoseItemsAmount; public static ConfigEntry<ItemTier> PVPLoserLoseItemsRarity; public static ConfigEntry<int> PVPLoserSpinelAfflictionsAmount; public static ConfigEntry<int> StrongerDeathMarkMinimumDebuffsToTrigger; public static ConfigEntry<bool> StrongerDeathMarkCountDebuffStacks; public static ConfigEntry<float> StrongerDeathMarkDebuffDuration; public static ConfigEntry<float> StrongerDeathMarkDebuffDurationPerStack; public static ConfigEntry<float> StrongerDeathMarkDebuffDamageIncrease; public static ConfigEntry<float> StrongerDeathMarkDebuffDamageIncreasePerStack; public static ConfigEntry<float> IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplier; public static ConfigEntry<float> IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplierPerStack; public static ConfigEntry<float> IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncrease; public static ConfigEntry<float> IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncreasePerStack; public static ConfigEntry<bool> AddVenomOnHitUnderQuestionableConditionsTranscendenceCondition; public static ConfigEntry<bool> AddVenomOnHitUnderQuestionableConditionsWingsCondition; public static ConfigEntry<float> AddVenomOnHitUnderQuestionableConditionsVenomDuration; public static ConfigEntry<float> AddVenomOnHitUnderQuestionableConditionsVenomDurationPerStack; public static ConfigEntry<float> AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplier; public static ConfigEntry<float> AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplierPerStack; public static ConfigEntry<bool> AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageStack; public static ConfigEntry<float> AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRecharge; public static ConfigEntry<float> AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRechargePerStack; public static ConfigEntry<bool> AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRechargeStack; public static ConfigEntry<bool> AddVenomOnHitUnderQuestionableConditionsVenomHemorrageStack; public static ConfigEntry<float> AddVenomOnHitUnderQuestionableConditionsVenomHemorrageDuration; public static ConfigEntry<float> AddVenomOnHitUnderQuestionableConditionsVenomHemorrageDamageMultiplier; public static BasicPickupDropTable PVPItemReward; public static ExpansionDef DLC1Expansion; public static bool pvpEnabled; private static bool hooksSet; private static bool thisIsStupid; public static bool startingPVP = false; public static float startingStopwatch; public static GameObject PVPCountdownPrefab; public static List<PlayerCharacterMasterController> losers = new List<PlayerCharacterMasterController>(); public static int neededVotes; public static List<NetworkUser> networkUsers = new List<NetworkUser>(); public static bool calling; public static bool riskOfOptionsEnabled { get; private set; } public static PVPModPlugin instance { get; private set; } public static PluginInfo PInfo { get; private set; } public static ConfigFile configFile { get; private set; } public static AssetBundle assetBundle { get; private set; } public static PVPModItemDef StrongerDeathMark { get; private set; } public static PVPModItemDef IncreaseDamageByShieldAndReduceShieldRechargeTime { get; private set; } public static PVPModItemDef AddVenomOnHitUnderQuestionableConditions { get; private set; } public static BuffDef StrongerDeathMarkBuff { get; private set; } public static BuffDef VenomBuff { get; private set; } public static int extraPlayerTeamsCount { get { return _extraPlayerTeamsCount; } set { if (_extraPlayerTeamsCount != value) { _extraPlayerTeamsCount = value; Init(); } } } public void Awake() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Expected O, but got Unknown instance = this; PInfo = ((BaseUnityPlugin)this).Info; configFile = ((BaseUnityPlugin)this).Config; riskOfOptionsEnabled = Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); extraPlayerTeamsCount = 16; SetHooks(); SetConfigs(); DLC1Expansion = Addressables.LoadAssetAsync<ExpansionDef>((object)"RoR2/DLC1/Common/DLC1.asset").WaitForCompletion(); assetBundle = AssetBundle.LoadFromFileAsync(Path.Combine(Path.GetDirectoryName(PInfo.Location), "assetbundles", "pvpmod")).assetBundle; Material[] array = assetBundle.LoadAllAssets<Material>(); foreach (Material val in array) { if (((Object)val.shader).name.StartsWith("StubbedRoR2")) { string text = ((Object)val.shader).name.Replace("StubbedRoR2", "RoR2") + ".shader"; Shader val2 = Addressables.LoadAssetAsync<Shader>((object)text).WaitForCompletion(); if (Object.op_Implicit((Object)(object)val2)) { val.shader = val2; } } } PVPItemReward = assetBundle.LoadAsset<BasicPickupDropTable>("Assets/PVPmod/pdPVPItemReward.asset"); PVPCountdownPrefab = assetBundle.LoadAsset<GameObject>("Assets/PVPmod/PVPCountdown.prefab"); SetWeights(); StrongerDeathMark = assetBundle.LoadAsset<PVPModItemDef>("Assets/PVPmod/StrongerDeathMark.asset").RegisterItemDef(StrongerDeathMarkEvents); IncreaseDamageByShieldAndReduceShieldRechargeTime = assetBundle.LoadAsset<PVPModItemDef>("Assets/PVPmod/IncreaseDamageByShieldAndReduceShieldRechargeTime.asset").RegisterItemDef(IncreaseDamageByShieldAndReduceShieldRechargeTimeEvents); AddVenomOnHitUnderQuestionableConditions = assetBundle.LoadAsset<PVPModItemDef>("Assets/PVPmod/AddVenomOnHitUnderQuestionableConditions.asset").RegisterItemDef(AddVenomOnHitUnderQuestionableConditionsEvents); if (EnableContent.Value) { object obj = <>c.<>9__98_0; if (obj == null) { CollectContentPackProvidersDelegate val3 = delegate(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)new PVPModContentPack()); }; <>c.<>9__98_0 = val3; obj = (object)val3; } ContentManager.collectContentPackProviders += (CollectContentPackProvidersDelegate)obj; } NetworkingAPI.RegisterMessageType<SpawnPVPCountdown>(); } public static void AddVenomOnHitUnderQuestionableConditionsEvents(ItemDef itemDef) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Expected O, but got Unknown VenomBuff = assetBundle.LoadAsset<BuffDef>("Assets/PVPmod/bdVenom.asset").RegisterBuffDef<BuffDef>((Action<BuffDef>)null); VenomDot = new DotDef { interval = 1f, damageCoefficient = 1f, damageColorIndex = (DamageColorIndex)2, associatedBuff = VenomBuff }; DotDef venomDot = VenomDot; object obj2 = <>O.<3>__VenomDamageEvaluation; if (obj2 == null) { CustomDotDamageEvaluation val = VenomDamageEvaluation; <>O.<3>__VenomDamageEvaluation = val; obj2 = (object)val; } VenomDotIndex = DotAPI.RegisterDotDef(venomDot, (CustomDotBehaviour)null, (CustomDotVisual)null, (CustomDotDamageEvaluation)obj2); AddVenomOnHitUnderQuestionableConditionsTranscendenceCondition = Utils.CreateConfig(((Object)itemDef).name, "Transcendence Condition", defaultValue: true, ""); AddVenomOnHitUnderQuestionableConditionsWingsCondition = Utils.CreateConfig(((Object)itemDef).name, "Active Milky Chrisalis Condition", defaultValue: true, ""); AddVenomOnHitUnderQuestionableConditionsVenomDuration = Utils.CreateConfig(((Object)itemDef).name, "Venom Duration", 5f, ""); AddVenomOnHitUnderQuestionableConditionsVenomDurationPerStack = Utils.CreateConfig(((Object)itemDef).name, "Venom Duration Per Stack", 1f, ""); AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRecharge = Utils.CreateConfig(((Object)itemDef).name, "Recharge Shield Percentage", 5f, ""); AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRechargePerStack = Utils.CreateConfig(((Object)itemDef).name, "Recharge Shield Percentage Per Stack", 1f, ""); AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRechargeStack = Utils.CreateConfig(((Object)itemDef).name, "Recharge Shield Percentage Stack", defaultValue: true, ""); AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplier = Utils.CreateConfig(((Object)itemDef).name, "Victim Damage Percentage", 5f, ""); AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplierPerStack = Utils.CreateConfig(((Object)itemDef).name, "Victim Damage Percentage Per Stack", 1f, ""); AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageStack = Utils.CreateConfig(((Object)itemDef).name, "Victim Damage Stack", defaultValue: true, ""); AddVenomOnHitUnderQuestionableConditionsVenomHemorrageStack = Utils.CreateConfig(((Object)itemDef).name, "Hemorrage Stack", defaultValue: true, ""); AddVenomOnHitUnderQuestionableConditionsVenomHemorrageDuration = Utils.CreateConfig(((Object)itemDef).name, "Hemorrage Duration", 15f, ""); AddVenomOnHitUnderQuestionableConditionsVenomHemorrageDamageMultiplier = Utils.CreateConfig(((Object)itemDef).name, "Hemorrage Damage Percentage", 100f, ""); AddVenomOnHitUnderQuestionableConditionsTranscendenceCondition.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsWingsCondition.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomDuration.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomDurationPerStack.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRecharge.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRechargePerStack.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplier.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplierPerStack.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageStack.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomHemorrageStack.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomHemorrageDuration.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; AddVenomOnHitUnderQuestionableConditionsVenomHemorrageDamageMultiplier.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; void GlobalEventManager_onServerDamageDealt(DamageReport obj) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) if (!((Enum)obj.damageInfo.damageType.damageType).HasFlag((Enum)(object)(DamageType)67108864)) { CharacterBody attackerBody = obj.attackerBody; Inventory val2 = ((attackerBody != null) ? attackerBody.inventory : null); if (Object.op_Implicit((Object)(object)val2) && (val2.GetItemCountEffective(Items.ShieldOnly) > 0 || !AddVenomOnHitUnderQuestionableConditionsTranscendenceCondition.Value)) { int itemCountEffective = val2.GetItemCountEffective(itemDef); if (itemCountEffective > 0) { JetpackController val3 = JetpackController.FindJetpackController(obj.attacker); if (Object.op_Implicit((Object)(object)val3) || !AddVenomOnHitUnderQuestionableConditionsWingsCondition.Value) { DotController.InflictDot(((Component)obj.victim).gameObject, obj.attacker, obj.damageInfo.inflictedHurtbox, VenomDotIndex, Utils.GetStackingFloat(AddVenomOnHitUnderQuestionableConditionsVenomDuration.Value, AddVenomOnHitUnderQuestionableConditionsVenomDurationPerStack.Value, itemCountEffective), 1f, (uint?)null); } } } } } } public static void VenomDamageEvaluation(DotController self, PendingDamage pendingDamage) { //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0149: 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_0151: 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_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0170: 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_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Expected O, but got Unknown CharacterBody val = (Object.op_Implicit((Object)(object)pendingDamage.attackerObject) ? pendingDamage.attackerObject.GetComponent<CharacterBody>() : null); if (!Object.op_Implicit((Object)(object)val)) { return; } Inventory inventory = val.inventory; if (!Object.op_Implicit((Object)(object)inventory)) { return; } int itemCountEffective = inventory.GetItemCountEffective((ItemDef)(object)AddVenomOnHitUnderQuestionableConditions); int buffCount = self.victimBody.GetBuffCount(VenomBuff); CharacterBody victimBody = self.victimBody; float num2 = (victimBody.damage *= Utils.GetStackingFloat(AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplier.Value, AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplierPerStack.Value, itemCountEffective) / 100f); float num3 = num2; if (Object.op_Implicit((Object)(object)val)) { HealthComponent healthComponent = val.healthComponent; if (Object.op_Implicit((Object)(object)healthComponent)) { healthComponent.RechargeShield(val.maxShield * Utils.GetStackingFloat(AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRecharge.Value, AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRechargePerStack.Value, itemCountEffective) / 100f * (AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRechargeStack.Value ? ((float)buffCount) : 1f)); } if (val.damage > num3) { num3 = val.damage; } } DamageInfo val2 = new DamageInfo { damage = num3 * (float)buffCount * (AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageStack.Value ? ((float)buffCount) : 1f), damageColorIndex = (DamageColorIndex)9, attacker = pendingDamage.attackerObject, inflictor = pendingDamage.attackerObject, position = ((Component)self).transform.position, inflictedHurtbox = pendingDamage.hitHurtBox, procCoefficient = 0f, damageType = DamageTypeCombo.op_Implicit((DamageType)67108864) }; self.victimHealthComponent.TakeDamageProcess(val2); for (int i = 0; i < ((!AddVenomOnHitUnderQuestionableConditionsVenomHemorrageStack.Value) ? 1 : buffCount); i++) { DotController.InflictDot(self.victimObject, val2.attacker, pendingDamage.hitHurtBox, (DotIndex)6, AddVenomOnHitUnderQuestionableConditionsVenomHemorrageDuration.Value, AddVenomOnHitUnderQuestionableConditionsVenomHemorrageDamageMultiplier.Value / 100f, (uint?)null); } self.victimBody.AddTimedBuff(Buffs.HealingDisabled, VenomDot.interval + Time.fixedDeltaTime); self.victimBody.AddTimedBuff(Buffs.Slow50, VenomDot.interval + Time.fixedDeltaTime); self.victimBody.AddTimedBuff(Buffs.Weak, VenomDot.interval + Time.fixedDeltaTime); } public static void InitLanguageTokens() { Utils.AddLanguageToken(((ItemDef)StrongerDeathMark).nameToken, "Chaotic Death Mark of Doom"); Utils.AddLanguageToken(((ItemDef)StrongerDeathMark).pickupToken, string.Format("Enemies with {0}{1}{2} or more {3} are marked for death, taking bonus damage.", "<style=cIsDamage>", StrongerDeathMarkMinimumDebuffsToTrigger.Value, "</style>", StrongerDeathMarkCountDebuffStacks.Value ? "debuff stacks" : "debuffs")); Utils.AddLanguageToken(((ItemDef)StrongerDeathMark).descriptionToken, string.Format("Enemies with {0}{1}{2}, or more {3} are {4}marked for death{5}, increasing damage taken by {6}{7}%{8} {9}(+{10}% per stack){11} from all sources for {12}{13}{14} {15} (+{16} per stack){17} seconds.", "<style=cIsDamage>", StrongerDeathMarkMinimumDebuffsToTrigger.Value, "</style>", StrongerDeathMarkCountDebuffStacks.Value ? "debuff stacks" : "debuffs", "<style=cIsDamage>", "</style>", "<style=cIsDamage>", StrongerDeathMarkDebuffDamageIncrease.Value, "</style>", "<style=cStack>", StrongerDeathMarkDebuffDamageIncreasePerStack.Value, "</style>", "<style=cIsUtility>", StrongerDeathMarkDebuffDuration.Value, "</style>", "<style=cStack>", StrongerDeathMarkDebuffDuration.Value, "</style>")); Utils.AddLanguageToken(((ItemDef)IncreaseDamageByShieldAndReduceShieldRechargeTime).nameToken, "Exoskeleton Of Ruinous Powers"); Utils.AddLanguageToken(((ItemDef)IncreaseDamageByShieldAndReduceShieldRechargeTime).pickupToken, "Increase damage by max shield and reduce shield recharge start time."); Utils.AddLanguageToken(((ItemDef)IncreaseDamageByShieldAndReduceShieldRechargeTime).descriptionToken, string.Format("Deal {0}{1}%{2} {3}(+{4}% per stack){5} of your max shields as {6}damage{7}. Reduce shield recharge start time by {8}{9}%{10} {11}(+{12}% per stack){13}.", "<style=cIsHealing>", IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplier.Value, "</style>", "<style=cStack>", IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplierPerStack.Value, "</style>", "<style=cIsDamage>", "</style>", "<style=cIsUtility>", IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncrease.Value, "</style>", "<style=cStack>", IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncreasePerStack.Value, "</style>")); Utils.AddLanguageToken(((ItemDef)AddVenomOnHitUnderQuestionableConditions).nameToken, "Decaying Siphonbrood Venom"); bool value = AddVenomOnHitUnderQuestionableConditionsTranscendenceCondition.Value; bool value2 = AddVenomOnHitUnderQuestionableConditionsWingsCondition.Value; string text; if (value || value2) { text = "While you have"; if (value) { text += " Transcendence"; } if (value2) { if (value) { text += " and"; } text += " Milky Chrysalis activated"; } text += " hitting an enemy injects Decaying Venom."; } else { text = "Hitting an enemy injects Decaying Venom."; } string value3 = text + string.Format(" While enemy has Decaying Venom you {0}regenerate {1}%{2} {3}(+{4}% per stack){5} of your {6}maximum shield{7} per second. Deals {8}{9}%{10} {11}(+{12}% per stack){13} of the victim's {14}maximum damage{15} per second, or an amount per second equivalent to your {16}damage stat{17}, whichever is greater. Lasts {18}{19} seconds{20} {21}(+{22} seconds per stack){23}. Enemy affected gains 1 Hemorrhage stack per second, Healing Disabled, Slowed and Weak while this is active", "<style=cIsHealing>", AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRecharge.Value, "</style>", "<style=cStack>", AddVenomOnHitUnderQuestionableConditionsVenomAttackerShieldRechargePerStack.Value, "</style>", "<style=cIsHealing>", "</style>", "<style=cIsDamage>", AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplier.Value, "</style>", "<style=cStack>", AddVenomOnHitUnderQuestionableConditionsVenomVictimDamageMultiplierPerStack.Value, "</style>", "<style=cIsDamage>", "</style>", "<style=cIsDamage>", "</style>", "<style=cIsUtility>", AddVenomOnHitUnderQuestionableConditionsVenomDuration.Value, "</style>", "<style=cStack>", AddVenomOnHitUnderQuestionableConditionsVenomDurationPerStack.Value, "</style>"); Utils.AddLanguageToken(((ItemDef)AddVenomOnHitUnderQuestionableConditions).pickupToken, text); Utils.AddLanguageToken(((ItemDef)AddVenomOnHitUnderQuestionableConditions).descriptionToken, value3); } public static void SetConfigs() { EnablePVP = Utils.CreateConfig("Main", "Enable PVP", defaultValue: true, "Enable Players Versus Players after teleporter charge?"); EnableContent = Utils.CreateConfig("Main", "Enable content", defaultValue: true, "Enable all mod content?"); PVPCountdownTimer = Utils.CreateConfig("PVP", "Countdown timer", 3f, "Control countdown timer that begins PVP"); PVPItemRewardAmount = Utils.CreateConfig("PVP", "Item reward amount", 1, "Control how much items will be spawned on pvp win. Items spawn on the teleporter"); PVPItemRewardTier1Weight = Utils.CreateConfig("PVP", "Item reward common rarity weight", 100f, "Control weight for common rarity on random item reward selection"); PVPItemRewardTier2Weight = Utils.CreateConfig("PVP", "Item reward uncommon rarity weight", 0f, "Control weight for uncommon rarity on random item reward selection"); PVPItemRewardTier3Weight = Utils.CreateConfig("PVP", "Item reward legendary rarity weight", 0f, "Control weight for legendary rarity on random item reward selection"); PVPItemRewardBossWeight = Utils.CreateConfig("PVP", "Item reward boss rarity weight", 0f, "Control weight for boss rarity on random item reward selection"); PVPItemRewardEquipmentWeight = Utils.CreateConfig("PVP", "Item reward equipment rarity weight", 0f, "Control weight for equipment rarity on random item reward selection"); PVPItemRewardLunarItemWeight = Utils.CreateConfig("PVP", "Item reward lunar item rarity weight", 0f, "Control weight for lunar item rarity on random item reward selection"); PVPItemRewardLunarEquipmentWeight = Utils.CreateConfig("PVP", "Item reward lunar equipment rarity weight", 0f, "Control weight for lunar equipment rarity on random item reward selection"); PVPItemRewardLunarCombinedWeight = Utils.CreateConfig("PVP", "Item reward lunar combined rarity weight", 0f, "Control weight for lunar combined rarity on random item reward selection"); PVPItemRewardTier1VoidWeight = Utils.CreateConfig("PVP", "Item reward void common rarity weight", 0f, "Control weight for void common rarity on random item reward selection"); PVPItemRewardTier2VoidWeight = Utils.CreateConfig("PVP", "Item reward void uncommon rarity weight", 0f, "Control weight for void uncommon rarity on random item reward selection"); PVPItemRewardTier3VoidWeight = Utils.CreateConfig("PVP", "Item reward void legendary rarity weight", 0f, "Control weight for void legendary rarity on random item reward selection"); PVPItemRewardBossVoidWeight = Utils.CreateConfig("PVP", "Item reward void boss rarity weight", 0f, "Control weight for void boss rarity on random item reward selection"); PVPLoserLoseItemsAmount = Utils.CreateConfig("PVP", "Lose items amount", 1, "Control how much items PVP losers will lose?"); PVPLoserLoseItemsRarity = Utils.CreateConfig<ItemTier>("PVP", "Lose items rarity", (ItemTier)0, "Control which rarity of an item would be removed on PVP lose?"); PVPLoserSpinelAfflictionsAmount = Utils.CreateConfig("PVP", "Gain Tonic Affliction", 0, "Control how much Tonic Afflictions PVP losers will get?"); PVPItemRewardTier1Weight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardTier2Weight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardTier3Weight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardBossWeight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardEquipmentWeight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardLunarItemWeight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardLunarEquipmentWeight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardLunarCombinedWeight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardTier1VoidWeight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardTier2VoidWeight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardTier3VoidWeight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; PVPItemRewardBossVoidWeight.SettingChanged += PVPItemRewardTier1Weight_SettingChanged; } private static void PVPItemRewardTier1Weight_SettingChanged(object sender, EventArgs e) { SetWeights(); } public void OnDestroy() { UnsetHooks(); } private static void SetHooks() { //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Expected O, but got Unknown if (!hooksSet) { hooksSet = true; TeleporterInteraction.onTeleporterChargedGlobal += TeleporterInteraction_onTeleporterChargedGlobal; Stage.onServerStageBegin += Stage_onServerStageBegin; TeamComponent.onJoinTeamGlobal += TeamComponent_onJoinTeamGlobal; TeamComponent.onLeaveTeamGlobal += TeamComponent_onLeaveTeamGlobal; GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal; object obj = <>O.<10>__TeamManager_SetTeamExperience; if (obj == null) { hook_SetTeamExperience val = TeamManager_SetTeamExperience; <>O.<10>__TeamManager_SetTeamExperience = val; obj = (object)val; } TeamManager.SetTeamExperience += (hook_SetTeamExperience)obj; RoR2Application.onLoadFinished = (Action)Delegate.Combine(RoR2Application.onLoadFinished, new Action(InitLanguageTokens)); } } private static void TeamManager_SetTeamExperience(orig_SetTeamExperience orig, TeamManager self, TeamIndex teamIndex, ulong newExperience) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, teamIndex, newExperience); if (thisIsStupid || !pvpEnabled || !playerTeamIndeces.Contains(teamIndex)) { return; } thisIsStupid = true; self.SetTeamExperience((TeamIndex)1, newExperience); foreach (TeamIndex playerTeamIndece in playerTeamIndeces) { if (playerTeamIndece != teamIndex) { self.SetTeamExperience(playerTeamIndece, newExperience); } } thisIsStupid = false; } public static void SetWeights() { bool flag = Object.op_Implicit((Object)(object)Run.instance) && Run.instance.IsExpansionEnabled(DLC1Expansion); PVPItemReward.tier1Weight = PVPItemRewardTier1Weight.Value; PVPItemReward.tier2Weight = PVPItemRewardTier2Weight.Value; PVPItemReward.tier3Weight = PVPItemRewardTier3Weight.Value; PVPItemReward.bossWeight = PVPItemRewardBossWeight.Value; PVPItemReward.equipmentWeight = PVPItemRewardEquipmentWeight.Value; PVPItemReward.lunarItemWeight = PVPItemRewardLunarItemWeight.Value; PVPItemReward.lunarEquipmentWeight = PVPItemRewardLunarEquipmentWeight.Value; PVPItemReward.lunarCombinedWeight = PVPItemRewardLunarCombinedWeight.Value; PVPItemReward.voidTier1Weight = (flag ? PVPItemRewardTier1VoidWeight.Value : 0f); PVPItemReward.voidTier2Weight = (flag ? PVPItemRewardTier2VoidWeight.Value : 0f); PVPItemReward.voidTier3Weight = (flag ? PVPItemRewardTier3VoidWeight.Value : 0f); PVPItemReward.voidBossWeight = (flag ? PVPItemRewardBossVoidWeight.Value : 0f); } private static void TeamComponent_onLeaveTeamGlobal(TeamComponent arg1, TeamIndex arg2) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) CharacterBody body = arg1.body; if (!((Object)(object)body == (Object)null) && body.isPlayerControlled && playerTeamIndeces.Contains(arg2) && activePVPBodies.Contains(body)) { activePVPBodies.Remove(body); } } private static void TeamComponent_onJoinTeamGlobal(TeamComponent arg1, TeamIndex arg2) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) CharacterBody body = arg1.body; if (!((Object)(object)body == (Object)null) && body.isPlayerControlled && playerTeamIndeces.Contains(arg2) && !activePVPBodies.Contains(body)) { activePVPBodies.Add(body); } } private static void GlobalEventManager_onCharacterDeathGlobal(DamageReport obj) { //IL_001d: 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_0028: Unknown result type (might be due to invalid IL or missing references) if (!pvpEnabled || !NetworkServer.active) { return; } TeamIndex victimTeamIndex = obj.victimTeamIndex; if (!playerTeamIndeces.Contains(victimTeamIndex)) { return; } if (Object.op_Implicit((Object)(object)obj.victimMaster) && Object.op_Implicit((Object)(object)obj.victimMaster.playerCharacterMasterController) && !losers.Contains(obj.victimMaster.playerCharacterMasterController)) { losers.Add(obj.victimMaster.playerCharacterMasterController); } int num = 0; CharacterBody val = null; foreach (CharacterBody activePVPBody in activePVPBodies) { if (!((Object)(object)activePVPBody == (Object)null) && activePVPBody.isPlayerControlled && Object.op_Implicit((Object)(object)activePVPBody.master) && !activePVPBody.master.IsDeadAndOutOfLivesServer()) { val = activePVPBody; num++; } } if (num <= 1) { EndPVP(punish: true); SpawnItems(); } } public static void SpawnItems() { //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: 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_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) //IL_00c9: 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_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)Run.instance == (Object)null) && Run.instance.bossRewardRng != null && !((Object)(object)TeleporterInteraction.instance == (Object)null) && !((Object)(object)TeleporterInteraction.instance.bossGroup == (Object)null) && PVPItemRewardAmount.Value > 0) { float num = 360f / (float)PVPItemRewardAmount.Value; Vector3 val = Quaternion.AngleAxis((float)Random.Range(0, 360), Vector3.up) * (Vector3.up * 40f + Vector3.forward * 5f); Quaternion val2 = Quaternion.AngleAxis(num, Vector3.up); for (int i = 0; i < PVPItemRewardAmount.Value; i++) { UniquePickup val3 = ((PickupDropTable)PVPItemReward).GeneratePickup(Run.instance.bossRewardRng); PickupDropletController.CreatePickupDroplet(val3, TeleporterInteraction.instance.bossGroup.dropPosition.position, val); val = val2 * val; } } } private static void StrongerDeathMarkEvents(ItemDef itemDef) { StrongerDeathMarkBuff = assetBundle.LoadAsset<BuffDef>("Assets/PVPmod/bdStrongerDeathMark.asset").RegisterBuffDef<BuffDef>((Action<BuffDef>)StrongerDeathMarkBuffEvents); StrongerDeathMarkMinimumDebuffsToTrigger = Utils.CreateConfig(((Object)itemDef).name, "Minimum debuffs", 15, "Minimum debuffs needed for adding damage increase debuff on debuff addition"); StrongerDeathMarkCountDebuffStacks = Utils.CreateConfig(((Object)itemDef).name, "Count stacks", defaultValue: true, "Count debuff stacks for effect triggering"); StrongerDeathMarkDebuffDuration = Utils.CreateConfig(((Object)itemDef).name, "Debuff duration", 10f, "Control debuff duration in seconds"); StrongerDeathMarkDebuffDurationPerStack = Utils.CreateConfig(((Object)itemDef).name, "Debuff duration per stack", 5f, "Control debuff duration per stack in seconds"); StrongerDeathMarkDebuffDamageIncrease = Utils.CreateConfig(((Object)itemDef).name, "Debuff damage multiplier", 600f, "Control debuff taken damage multiplier in percentage"); StrongerDeathMarkDebuffDamageIncreasePerStack = Utils.CreateConfig(((Object)itemDef).name, "Debuff damage multiplier per stack", 300f, "Control debuff taken damage multiplier per stack in percentage"); StrongerDeathMarkMinimumDebuffsToTrigger.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; StrongerDeathMarkCountDebuffStacks.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; StrongerDeathMarkDebuffDuration.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; StrongerDeathMarkDebuffDurationPerStack.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; StrongerDeathMarkDebuffDamageIncrease.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; StrongerDeathMarkDebuffDamageIncreasePerStack.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; void StrongerDeathMarkBuffEvents(BuffDef buffDef) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown CharacterBody.HandleCascadingBuffs += new hook_HandleCascadingBuffs(CharacterBody_HandleCascadingBuffs); HealthComponent.TakeDamageProcess += new Manipulator(HealthComponent_TakeDamageProcess); void CharacterBody_HandleCascadingBuffs(orig_HandleCascadingBuffs orig, CharacterBody self) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); int num = Util.GetItemCountGlobal(itemDef.itemIndex, true, true) - (Object.op_Implicit((Object)(object)self.teamComponent) ? Util.GetItemCountForTeam(self.teamComponent.teamIndex, itemDef.itemIndex, true, true) : (Object.op_Implicit((Object)(object)self.inventory) ? self.inventory.GetItemCountEffective(itemDef) : 0)); if (num > 0 && !self.HasBuff(buffDef)) { int num2 = 0; BuffIndex[] debuffBuffIndices = BuffCatalog.debuffBuffIndices; foreach (BuffIndex val2 in debuffBuffIndices) { if (self.HasBuff(val2)) { num2 += ((!StrongerDeathMarkCountDebuffStacks.Value) ? 1 : self.GetBuffCount(val2)); } } if (num2 >= StrongerDeathMarkMinimumDebuffsToTrigger.Value) { self.AddTimedBuff(buffDef, Utils.GetStackingFloat(StrongerDeathMarkDebuffDuration.Value, StrongerDeathMarkDebuffDurationPerStack.Value, num)); } } } float HandleStrongerDeathMark(CharacterBody characterBody, DamageInfo damageInfo) { if (!characterBody.HasBuff(buffDef) || (Object)(object)damageInfo.attacker == (Object)null) { return 1f; } CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if ((Object)(object)component == (Object)null) { return StrongerDeathMarkDebuffDamageIncrease.Value / 100f + 1f; } Inventory inventory = component.inventory; if ((Object)(object)inventory == (Object)null) { return StrongerDeathMarkDebuffDamageIncrease.Value / 100f + 1f; } int itemCount = inventory.GetItemCount(itemDef); if (itemCount <= 0) { return StrongerDeathMarkDebuffDamageIncrease.Value / 100f + 1f; } return Utils.GetStackingFloat(StrongerDeathMarkDebuffDamageIncrease.Value, StrongerDeathMarkDebuffDamageIncreasePerStack.Value, itemCount) / 100f + 1f; } void HealthComponent_TakeDamageProcess(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0124: 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_0156: 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) ILCursor val = new ILCursor(il); ILLabel iLLabel = null; int locId = 0; if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[6] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<HealthComponent>(x, "body"), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "DeathMark"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<CharacterBody>(x, "HasBuff"), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref iLLabel), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref locId) })) { val.GotoLabel(iLLabel, (MoveType)0, false); Instruction prev = val.Emit(OpCodes.Ldarg_0).Prev; iLLabel.Target = prev; val.Emit(OpCodes.Ldfld, AccessTools.Field(typeof(HealthComponent), "body")); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Func<CharacterBody, DamageInfo, float>>((Func<CharacterBody, DamageInfo, float>)HandleStrongerDeathMark); val.Emit(OpCodes.Ldloc, locId); val.Emit(OpCodes.Mul); val.Emit(OpCodes.Stloc, locId); } else { ((BaseUnityPlugin)instance).Logger.LogError((object)(((MemberReference)il.Method).Name + " IL Hook failed!")); } } } } private static void StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged(object sender, EventArgs e) { InitLanguageTokens(); } private static void IncreaseDamageByShieldAndReduceShieldRechargeTimeEvents(ItemDef itemDef) { //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Expected O, but got Unknown //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Expected O, but got Unknown IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplier = Utils.CreateConfig(((Object)itemDef).name, "Max shield to damage multiplier", 5f, "Control max shield to damage multiplier in percentage"); IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplierPerStack = Utils.CreateConfig(((Object)itemDef).name, "Max shield to damage multiplier per stack", 2.5f, "Control max shield to damage multiplier per stack in percentage"); IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncrease = Utils.CreateConfig(((Object)itemDef).name, "Shield regen cooldown reduction", 30f, "Control shield regeneration cooldown reduction in percentage"); IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncreasePerStack = Utils.CreateConfig(((Object)itemDef).name, "Shield regen cooldown reduction per stack", 15f, "Control shield regeneration cooldown reduction in percentage"); IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplier.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplierPerStack.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncrease.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncreasePerStack.SettingChanged += StrongerDeathMarkMinimumDebuffsToTrigger_SettingChanged; HealthComponent.TakeDamageProcess += new Manipulator(HealthComponent_TakeDamageProcess); CharacterBody.OnInventoryChanged += new hook_OnInventoryChanged(CharacterBody_OnInventoryChanged); void CharacterBody_OnInventoryChanged(orig_OnInventoryChanged orig, CharacterBody self) { orig.Invoke(self); if (NetworkServer.active) { self.AddItemBehavior<IncreaseDamageByShieldAndReduceShieldRechargeTimeBehaviour>(Object.op_Implicit((Object)(object)self.inventory) ? self.inventory.GetItemCount(itemDef) : 0); } } float HandleIncreaseDamageByShieldAndReduceShieldRechargeTime(CharacterBody characterBody, DamageInfo damageInfo) { if ((Object)(object)damageInfo.attacker == (Object)null) { return 1f; } CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if ((Object)(object)component == (Object)null) { return 1f; } Inventory inventory = component.inventory; if ((Object)(object)inventory == (Object)null) { return component.maxShield * IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplier.Value / 100f + 1f; } int itemCount = inventory.GetItemCount(itemDef); if (itemCount <= 0) { return component.maxShield * IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplier.Value / 100f + 1f; } return component.maxShield * Utils.GetStackingFloat(IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplier.Value, IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldToDamageMultiplierPerStack.Value, itemCount) / 100f + 1f; } void HealthComponent_TakeDamageProcess(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0124: 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_0156: 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) ILCursor val = new ILCursor(il); ILLabel iLLabel = null; int locId = 0; if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[6] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<HealthComponent>(x, "body"), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "DeathMark"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<CharacterBody>(x, "HasBuff"), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref iLLabel), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref locId) })) { val.GotoLabel(iLLabel, (MoveType)0, false); Instruction prev = val.Emit(OpCodes.Ldarg_0).Prev; iLLabel.Target = prev; val.Emit(OpCodes.Ldfld, AccessTools.Field(typeof(HealthComponent), "body")); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Func<CharacterBody, DamageInfo, float>>((Func<CharacterBody, DamageInfo, float>)HandleIncreaseDamageByShieldAndReduceShieldRechargeTime); val.Emit(OpCodes.Ldloc, locId); val.Emit(OpCodes.Add); val.Emit(OpCodes.Stloc, locId); } else { ((BaseUnityPlugin)instance).Logger.LogError((object)(((MemberReference)il.Method).Name + " IL Hook failed!")); } } } private static void UnsetHooks() { //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown if (hooksSet) { hooksSet = false; TeleporterInteraction.onTeleporterChargedGlobal -= TeleporterInteraction_onTeleporterChargedGlobal; Stage.onServerStageBegin -= Stage_onServerStageBegin; TeamComponent.onJoinTeamGlobal -= TeamComponent_onJoinTeamGlobal; TeamComponent.onLeaveTeamGlobal -= TeamComponent_onLeaveTeamGlobal; GlobalEventManager.onCharacterDeathGlobal -= GlobalEventManager_onCharacterDeathGlobal; object obj = <>O.<10>__TeamManager_SetTeamExperience; if (obj == null) { hook_SetTeamExperience val = TeamManager_SetTeamExperience; <>O.<10>__TeamManager_SetTeamExperience = val; obj = (object)val; } TeamManager.SetTeamExperience -= (hook_SetTeamExperience)obj; RoR2Application.onLoadFinished = (Action)Delegate.Remove(RoR2Application.onLoadFinished, new Action(InitLanguageTokens)); } } private static void Stage_onServerStageBegin(Stage obj) { EndPVP(punish: false); } private static void TeleporterInteraction_onTeleporterChargedGlobal(TeleporterInteraction obj) { if (EnablePVP.Value) { StartPVP(); } } public static void StartPVP() { if (NetworkServer.active) { calling = false; int count = GetAlivePlayers().Count; if (count > 1) { startingPVP = true; startingStopwatch = PVPCountdownTimer.Value; NetMessageExtensions.Send((INetMessage)(object)new SpawnPVPCountdown(startingStopwatch), (NetworkDestination)1); } } } public static void BeginPVP() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) SetWeights(); if (!NetworkServer.active || pvpEnabled) { return; } calling = false; int count = GetAlivePlayers().Count; if (count <= 1) { return; } count = PlayerCharacterMasterController.instances.Count; pvpEnabled = true; losers.Clear(); networkUsers.Clear(); int count2 = playerTeamDefs.Count; int num = 0; for (int i = 0; i < count2; i++) { TeamIndex val = playerTeamIndeces[i]; TeamManager.instance.SetTeamExperience(val, TeamManager.instance.GetTeamExperience((TeamIndex)1)); } int num2 = 0; while (num2 < count) { PlayerCharacterMasterController val2 = PlayerCharacterMasterController.instances[num2]; if (!((Object)(object)val2 == (Object)null)) { CharacterMaster master = val2.master; if (!((Object)(object)master == (Object)null)) { TeamIndex val3 = (TeamIndex)(-1); while (num > count2 - 1) { num -= extraPlayerTeamsCount; } val3 = playerTeamIndeces[num]; TeamComponent val4 = (Object.op_Implicit((Object)(object)master.GetBody()) ? master.GetBody().teamComponent : null); if (Object.op_Implicit((Object)(object)val4)) { val4.teamIndex = val3; } master.teamIndex = val3; ChangeMinionsTeam(val2, val3); } } num2++; num++; } } public static void EndPVP(bool punish) { //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active || !pvpEnabled) { return; } calling = false; int count = PlayerCharacterMasterController.instances.Count; pvpEnabled = false; startingPVP = false; networkUsers.Clear(); int count2 = playerTeamDefs.Count; for (int i = 0; i < count; i++) { PlayerCharacterMasterController val = PlayerCharacterMasterController.instances[i]; if ((Object)(object)val == (Object)null) { continue; } CharacterMaster master = val.master; if ((Object)(object)master == (Object)null) { continue; } TeamIndex teamIndex = (TeamIndex)1; TeamComponent val2 = (Object.op_Implicit((Object)(object)master.GetBody()) ? master.GetBody().teamComponent : null); if (Object.op_Implicit((Object)(object)val2)) { val2.teamIndex = teamIndex; } master.teamIndex = teamIndex; ChangeMinionsTeam(val, teamIndex); if (!punish) { continue; } Inventory inventory = master.inventory; if (!Object.op_Implicit((Object)(object)inventory) || !master.IsDeadAndOutOfLivesServer() || !losers.Contains(val)) { continue; } losers.Remove(val); int value = PVPLoserSpinelAfflictionsAmount.Value; if (value > 0) { inventory.GiveItem(Items.TonicAffliction, value); } List<ItemDef> list = new List<ItemDef>(); int num = 0; for (int j = 0; j < ItemCatalog.itemCount; j++) { int num2 = inventory.permanentItemStacks.inner.sparseValues[j]; if (num2 <= 0) { continue; } ItemDef itemDef = ItemCatalog.GetItemDef((ItemIndex)j); if (!((Object)(object)itemDef == (Object)null) && itemDef.canRemove && itemDef.tier == PVPLoserLoseItemsRarity.Value) { for (int k = 0; k < num2; k++) { list.Add(itemDef); num++; } } } int value2 = PVPLoserLoseItemsAmount.Value; for (int l = 0; l < value2; l++) { if (num <= 0) { break; } ItemDef val3 = list[Random.Range(0, num)]; inventory.RemoveItemPermanent(val3, 1); list.Remove(val3); num--; } } } public static void ChangeMinionsTeam(PlayerCharacterMasterController playerCharacterMasterController, TeamIndex teamIndex) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) MinionGroup val = null; for (int i = 0; i < MinionGroup.instancesList.Count; i++) { MinionGroup val2 = MinionGroup.instancesList[i]; if (MinionGroup.instancesList[i].ownerId == ((NetworkBehaviour)playerCharacterMasterController).netId) { val = val2; break; } } if (val == null) { return; } MinionOwnership[] members = val.members; foreach (MinionOwnership val3 in members) { if ((Object)(object)val3 == (Object)null) { continue; } CharacterMaster component = ((Component)val3).GetComponent<CharacterMaster>(); if ((Object)(object)component == (Object)null) { continue; } component.teamIndex = teamIndex; CharacterBody body = component.GetBody(); if (!((Object)(object)body == (Object)null)) { TeamComponent teamComponent = body.teamComponent; if (!((Object)(object)teamComponent == (Object)null)) { teamComponent.teamIndex = teamIndex; } } } } public void FixedUpdate() { if (NetworkServer.active && startingPVP) { startingStopwatch -= Time.fixedDeltaTime; if (startingStopwatch <= 0f) { BeginPVP(); startingPVP = false; } } if ((Object)(object)Run.instance == (Object)null) { return; } TeamDef val = TeamCatalog.teamDefs[1]; foreach (TeamDef playerTeamDef in playerTeamDefs) { playerTeamDef.softCharacterLimit = val.softCharacterLimit; playerTeamDef.friendlyFireScaling = val.friendlyFireScaling; playerTeamDef.levelUpEffect = val.levelUpEffect; playerTeamDef.nameToken = val.nameToken; } } public static void Init() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) playerTeamDefs.Clear(); playerTeamIndeces.Clear(); for (int i = 0; i < extraPlayerTeamsCount; i++) { CreateTeam("Player" + (i + 1)); } } public static TeamIndex CreateTeam(string name) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) TeamBehavior val = new TeamBehavior(name, (TeamClassification)4); string text = "TEAM_" + name.ToUpper() + "_NAME"; TeamDef val2 = new TeamDef { softCharacterLimit = 20, friendlyFireScaling = 0.5f, levelUpEffect = null, nameToken = "TEAM_PLAYER_NAME" }; TeamIndex val3 = TeamsAPI.RegisterTeam(val2, val); playerTeamDefs.Add(val2); playerTeamIndeces.Add(val3); return val3; } [ConCommand(/*Could not decode attribute arguments.*/)] public static void CallPVPVote(ConCommandArgs args) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Expected O, but got Unknown if (!calling && !pvpEnabled) { int count = GetAlivePlayers().Count; if (count > 1) { neededVotes = count - 1; networkUsers.Add(args.sender); calling = true; Chat.SendBroadcastChat((ChatMessageBase)new UserChatMessage { sender = ((Component)args.sender).gameObject, text = " has called for PVP. Type `pvp_accept` in the console to proceed. Needed votes: " + neededVotes }); } } } [ConCommand(/*Could not decode attribute arguments.*/)] public static void AcceptPVPVote(ConCommandArgs args) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_00c2: 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_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Expected O, but got Unknown if (!calling) { Chat.SendBroadcastChat((ChatMessageBase)new UserChatMessage { sender = ((Component)args.sender).gameObject, text = " wanted to accept PVP call but it has not been called yet. Use `pvp_call` to call it." }); } if (!pvpEnabled && !networkUsers.Contains(args.sender)) { neededVotes--; networkUsers.Add(args.sender); if (neededVotes <= 0) { Chat.SendBroadcastChat((ChatMessageBase)new UserChatMessage { sender = ((Component)args.sender).gameObject, text = " has voted for PVP. Starting PVP!" }); StartPVP(); calling = false; } else { Chat.SendBroadcastChat((ChatMessageBase)new UserChatMessage { sender = ((Component)args.sender).gameObject, text = " has voted for PVP. Needed votes: " + neededVotes }); } } } [ConCommand(/*Could not decode attribute arguments.*/)] public static void EndPVP(ConCommandArgs args) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown if (pvpEnabled) { int count = GetAlivePlayers().Count; if (count > 1) { Chat.SendBroadcastChat((ChatMessageBase)new UserChatMessage { sender = ((Component)args.sender).gameObject, text = " has called for PVP. Type `pvp_accept` in the console to proceed. Needed votes: " + neededVotes }); EndPVP(punish: true); } } } public static List<PlayerCharacterMasterController> GetAlivePlayers() { List<PlayerCharacterMasterController> list = new List<PlayerCharacterMasterController>(); foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if (!Object.op_Implicit((Object)(object)instance.master) || !instance.master.IsDeadAndOutOfLivesServer()) { list.Add(instance); } } return list; } } public class IncreaseDamageByShieldAndReduceShieldRechargeTimeBehaviour : ItemBehavior { public void FixedUpdate() { HealthComponent healthComponent = base.body.healthComponent; if (!((Object)(object)healthComponent == (Object)null) && !healthComponent.isShieldRegenForced) { float num = Utils.GetStackingFloat(PVPModPlugin.IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncrease.Value, PVPModPlugin.IncreaseDamageByShieldAndReduceShieldRechargeTimeShieldRegenSpeedIncreasePerStack.Value, base.stack) / 100f + 1f; float num2 = 7f / num; if (base.body.outOfDangerStopwatch >= num2) { healthComponent.ForceShieldRegen(); Util.PlaySound("Play_item_proc_personal_shield_recharge", ((Component)this).gameObject); } } } } public class PVPCountdown : MonoBehaviour { public TextMeshProUGUI textMeshProUGUI; public float countdown = 3f; public void Update() { countdown -= Time.deltaTime; if (countdown <= -1f) { Object.Destroy((Object)(object)((Component)this).gameObject); } if (Object.op_Implicit((Object)(object)textMeshProUGUI)) { ((TMP_Text)textMeshProUGUI).text = ((countdown > 0f) ? ("PVP STARTS IN " + Mathf.Ceil(countdown)) : "FIGHT!"); } } } public class SpawnPVPCountdown : INetMessage, ISerializableObject { public float countdown; public SpawnPVPCountdown() { } public SpawnPVPCountdown(float countdown) { this.countdown = countdown; } public void Deserialize(NetworkReader reader) { countdown = reader.ReadSingle(); } public void OnReceived() { GameObject val = Object.Instantiate<GameObject>(PVPModPlugin.PVPCountdownPrefab); PVPCountdown component = val.GetComponent<PVPCountdown>(); component.countdown = countdown; } public void Serialize(NetworkWriter writer) { writer.Write(countdown); } } [CreateAssetMenu(menuName = "PVPMod/PVPModItemDef")] public class PVPModItemDef : ItemDef { [Serializable] public struct ItemTierSprite { public ItemTier itemTier; public Sprite sprite; } public ItemTierSprite[] itemTierSprites; } public class PVPModContentPack : IContentPackProvider { [CompilerGenerated] private sealed class <FinalizeAsync>d__5 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public FinalizeAsyncArgs args; public PVPModContentPack <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FinalizeAsync>d__5(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; args.ReportProgress(1f); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <GenerateContentPackAsync>d__6 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public GetContentPackAsyncArgs args; public PVPModContentPack <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GenerateContentPackAsync>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; ContentPack.Copy(<>4__this.contentPack, args.output); args.ReportProgress(1f); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadStaticContentAsync>d__7 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LoadStaticContentAsyncArgs args; public PVPModContentPack <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadStaticContentAsync>d__7(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; <>4__this.contentPack.identifier = <>4__this.identifier; <>4__this.contentPack.itemDefs.Add(items.ToArray()); <>4__this.contentPack.buffDefs.Add(buffs.ToArray()); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } internal ContentPack contentPack = new ContentPack(); public static List<ItemDef> items = new List<ItemDef>(); public static List<BuffDef> buffs = new List<BuffDef>(); public string identifier => "com.brynzananas.pvpmod.ContentProvider"; [IteratorStateMachine(typeof(<FinalizeAsync>d__5))] public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FinalizeAsync>d__5(0) { <>4__this = this, args = args }; } [IteratorStateMachine(typeof(<GenerateContentPackAsync>d__6))] public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GenerateContentPackAsync>d__6(0) { <>4__this = this, args = args }; } [IteratorStateMachine(typeof(<LoadStaticContentAsync>d__7))] public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadStaticContentAsync>d__7(0) { <>4__this = this, args = args }; } } public static class Utils { public const string damagePrefix = "<style=cIsDamage>"; public const string stackPrefix = "<style=cStack>"; public const string utilityPrefix = "<style=cIsUtility>"; public const string healingPrefix = "<style=cIsHealing>"; public const string endPrefix = "</style>"; public static void AddLanguageToken(string token, string value) { AddLanguageToken(token, value, "en"); } public static void AddLanguageToken(string token, string value, string language) { Language val = Language.languagesByName[language]; if (val.stringsByToken.ContainsKey(token)) { val.stringsByToken[token] = value; } else { val.stringsByToken.Add(token, value); } } public static ConfigEntry<T> CreateConfig<T>(string section, string field, T defaultValue, string description) { return CreateConfig(section, field, defaultValue, description, riskOfOptionsRestartRequired: false); } public static ConfigEntry<T> CreateConfig<T>(string section, string field, T defaultValue, string description, bool riskOfOptionsRestartRequired) { ConfigEntry<T> val = PVPModPlugin.configFile.Bind<T>(section, field, defaultValue, description); if (PVPModPlugin.riskOfOptionsEnabled) { ModCompatabilities.RiskOfOptionsCompatAbility.HandleConfig(val, defaultValue, riskOfOptionsRestartRequired); } PVPModPlugin.configs.Add((ConfigEntryBase)(object)val); return val; } public static T RegisterItemDef<T>(this T itemDef, Action<ItemDef> onItemDefAdded = null) where T : ItemDef { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) ConfigEntry<bool> val = CreateConfig(((Object)(object)itemDef).name, "Enable", defaultValue: true, "Enable this item?", riskOfOptionsRestartRequired: true); ConfigEntry<ItemTier> val2 = CreateConfig<ItemTier>(((Object)(object)itemDef).name, "Rarity", ((ItemDef)itemDef).tier, "Control rarity of this item", riskOfOptionsRestartRequired: true); PVPModItemDef pVPModItemDef = itemDef as PVPModItemDef; if (Object.op_Implicit((Object)(object)pVPModItemDef)) { PVPModItemDef.ItemTierSprite[] itemTierSprites = pVPModItemDef.itemTierSprites; for (int i = 0; i < itemTierSprites.Length; i++) { PVPModItemDef.ItemTierSprite itemTierSprite = itemTierSprites[i]; if (itemTierSprite.itemTier == val2.Value) { ((ItemDef)pVPModItemDef).pickupIconSprite = itemTierSprite.sprite; ((ItemDef)pVPModItemDef).deprecatedTier = val2.Value; break; } } } if (val == null || val.Value) { PVPModContentPack.items.Add((ItemDef)(object)itemDef); onItemDefAdded?.Invoke((ItemDef)(object)itemDef); } return itemDef; } public static T RegisterBuffDef<T>(this T buffDef, Action<BuffDef> onBuffDefAdded = null) where T : BuffDef { PVPModContentPack.buffs.Add((BuffDef)(object)buffDef); onBuffDefAdded?.Invoke((BuffDef)(object)buffDef); return buffDef; } public static float GetStackingFloat(float baseValue, float stackValue, int stacks) { return baseValue + (float)(stacks - 1) * stackValue; } } public static class ModCompatabilities { public static class RiskOfOptionsCompatAbility { public const string ModGUID = "com.rune580.riskofoptions"; public static void HandleConfig<T>(ConfigEntry<T> configEntry, T value, bool restartRequired) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown if (value is float) { ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(configEntry as ConfigEntry<float>, restartRequired)); } if (value is bool) { ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(configEntry as ConfigEntry<bool>, restartRequired)); } if (value is int) { ModSettingsManager.AddOption((BaseOption)new IntFieldOption(configEntry as ConfigEntry<int>, restartRequired)); } if (value is string) { ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(configEntry as ConfigEntry<string>, restartRequired)); } if (value is Enum) { Enum @enum = value as Enum; if (!@enum.GetType().GetCustomAttributes<FlagsAttribute>().Any()) { ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)configEntry, restartRequired)); } } } } } }