From ff7cc449c7dcdb19334336419cc3fc6cd3307b3d Mon Sep 17 00:00:00 2001 From: Arsenii Fomin Date: Tue, 12 Mar 2024 17:07:49 +0700 Subject: [PATCH] Adding offhand torch effects --- EpicLoot/MagicItemEffects/AddLifeSteal.cs | 2 +- EpicLoot/MagicItemEffects/Executioner.cs | 2 +- .../MagicItemEffects/MagicEffectsHelper.cs | 24 +++++++++++++++---- EpicLoot/MagicItemEffects/ModifyBackstab.cs | 2 +- EpicLoot/MagicItemEffects/ModifyDamage.cs | 18 +++++++------- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/EpicLoot/MagicItemEffects/AddLifeSteal.cs b/EpicLoot/MagicItemEffects/AddLifeSteal.cs index 310868e46..2358d2398 100644 --- a/EpicLoot/MagicItemEffects/AddLifeSteal.cs +++ b/EpicLoot/MagicItemEffects/AddLifeSteal.cs @@ -40,7 +40,7 @@ public static void CheckAndDoLifeSteal(HitData hit) return; var lifeStealMultiplier = 0f; - ModifyWithLowHealth.Apply(player, MagicEffectType.LifeSteal, effect => lifeStealMultiplier += MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, weapon, effect, 0.01f)); + ModifyWithLowHealth.Apply(player, MagicEffectType.LifeSteal, effect => lifeStealMultiplier += MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, weapon, effect, 0.01f, true)); if (lifeStealMultiplier == 0) return; diff --git a/EpicLoot/MagicItemEffects/Executioner.cs b/EpicLoot/MagicItemEffects/Executioner.cs index 0ec37c493..c4c46eaca 100644 --- a/EpicLoot/MagicItemEffects/Executioner.cs +++ b/EpicLoot/MagicItemEffects/Executioner.cs @@ -71,7 +71,7 @@ public static float ReadExecutionerValue(Player player) { float totalMagicEffect; if (Attack_Patch.ActiveAttack != null) - totalMagicEffect = MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, Attack_Patch.ActiveAttack.m_weapon, MagicEffectType.Executioner, 0.01f); + totalMagicEffect = MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, Attack_Patch.ActiveAttack.m_weapon, MagicEffectType.Executioner, 0.01f, true); else totalMagicEffect = player.GetTotalActiveMagicEffectValue(MagicEffectType.Executioner, 0.01f); return 1 + totalMagicEffect; diff --git a/EpicLoot/MagicItemEffects/MagicEffectsHelper.cs b/EpicLoot/MagicItemEffects/MagicEffectsHelper.cs index 3179031ae..389234b6b 100644 --- a/EpicLoot/MagicItemEffects/MagicEffectsHelper.cs +++ b/EpicLoot/MagicItemEffects/MagicEffectsHelper.cs @@ -41,20 +41,34 @@ private static bool IsWeapon(ItemDrop.ItemData itemData) } } - private static ItemDrop.ItemData GetIgnoreWeapon(Player player, ItemDrop.ItemData equippedWeapon) + private static bool IsTorch(ItemDrop.ItemData itemData) { - if (player.m_rightItem == equippedWeapon && IsWeapon(player.m_leftItem)) + if (itemData == null) + return false; + + switch (itemData.m_shared.m_itemType) + { + case ItemDrop.ItemData.ItemType.Torch: + return true; + default: + return false; + } + } + + private static ItemDrop.ItemData GetIgnoreWeapon(Player player, ItemDrop.ItemData equippedWeapon, bool excludeTorch = false) + { + if (player.m_rightItem == equippedWeapon && IsWeapon(player.m_leftItem) && (!excludeTorch || !IsTorch(player.m_leftItem))) return player.m_leftItem; - if (player.m_leftItem == equippedWeapon && IsWeapon(player.m_rightItem)) + if (player.m_leftItem == equippedWeapon && IsWeapon(player.m_rightItem) && (!excludeTorch || !IsTorch(player.m_rightItem))) return player.m_rightItem; return null; } - public static float GetTotalActiveMagicEffectValueForWeapon(Player player, ItemDrop.ItemData itemData, string effectType, float scale = 1.0f) + public static float GetTotalActiveMagicEffectValueForWeapon(Player player, ItemDrop.ItemData itemData, string effectType, float scale = 1.0f, bool addOffhandTorchEffects = false) { if (player != null) - return player.GetTotalActiveMagicEffectValue(effectType, scale, GetIgnoreWeapon(player, itemData)); + return player.GetTotalActiveMagicEffectValue(effectType, scale, GetIgnoreWeapon(player, itemData, addOffhandTorchEffects)); if (itemData.IsMagic(out var magicItem)) return magicItem.GetTotalEffectValue(effectType, scale); return 0; diff --git a/EpicLoot/MagicItemEffects/ModifyBackstab.cs b/EpicLoot/MagicItemEffects/ModifyBackstab.cs index c72fbcf81..29d9e569f 100644 --- a/EpicLoot/MagicItemEffects/ModifyBackstab.cs +++ b/EpicLoot/MagicItemEffects/ModifyBackstab.cs @@ -45,7 +45,7 @@ public static bool DoPrefix(Attack __instance) Override = true; OriginalValue = weapon.m_shared.m_backstabBonus; - var totalBackstabMod = MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance.m_weapon, MagicEffectType.ModifyBackstab, 0.01f); + var totalBackstabMod = MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance.m_weapon, MagicEffectType.ModifyBackstab, 0.01f, true); weapon.m_shared.m_backstabBonus *= 1.0f + totalBackstabMod; } diff --git a/EpicLoot/MagicItemEffects/ModifyDamage.cs b/EpicLoot/MagicItemEffects/ModifyDamage.cs index ad01ca4df..3b7c4fcb7 100644 --- a/EpicLoot/MagicItemEffects/ModifyDamage.cs +++ b/EpicLoot/MagicItemEffects/ModifyDamage.cs @@ -31,18 +31,18 @@ public static void Postfix(ItemDrop.ItemData __instance, ref HitData.DamageTypes var player = PlayerExtensions.GetPlayerWithEquippedItem(__instance); // Add damages first - __result.m_blunt += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddBluntDamage); - __result.m_slash += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddSlashingDamage); - __result.m_pierce += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddPiercingDamage); - __result.m_fire += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddFireDamage); - __result.m_frost += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddFrostDamage); - __result.m_lightning += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddLightningDamage); - __result.m_poison += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddPoisonDamage); - __result.m_spirit += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddSpiritDamage); + __result.m_blunt += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddBluntDamage, 1.0f, true); + __result.m_slash += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddSlashingDamage, 1.0f, true); + __result.m_pierce += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddPiercingDamage, 1.0f, true); + __result.m_fire += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddFireDamage, 1.0f, true); + __result.m_frost += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddFrostDamage, 1.0f, true); + __result.m_lightning += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddLightningDamage, 1.0f, true); + __result.m_poison += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddPoisonDamage, 1.0f, true); + __result.m_spirit += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddSpiritDamage, 1.0f, true); if (magicItemskillType == Skills.SkillType.Axes) { - __result.m_chop += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddSlashingDamage); + __result.m_chop += totalDamage * MagicEffectsHelper.GetTotalActiveMagicEffectValueForWeapon(player, __instance, MagicEffectType.AddSlashingDamage, 1.0f, true); } else if (magicItemskillType == Skills.SkillType.Pickaxes) {