public static void Postfix(SEMan __instance, ref float staminaMultiplier) { if (__instance.HaveStatusEffect("Stamina Regen")) { SE_StaminaRegen effect = __instance.GetStatusEffect("Stamina Regen") as SE_StaminaRegen; staminaMultiplier += effect.GetRegenPercent(); } if (__instance.HaveStatusEffect("Sprinter")) { SE_ChallengeSprinter effect = __instance.GetStatusEffect("Sprinter") as SE_ChallengeSprinter; staminaMultiplier += effect.GetRegen(); } }
public bool IsValid(SpawnSessionContext context) { if (RequiredStatusEffects.Count == 0) { return(true); } if (SearchDistance <= 0) { return(true); } List <Player> players = PlayerUtils.GetPlayersInRadius(context.SpawnerZdo.GetPosition(), SearchDistance); foreach (var player in players) { SEMan statusEffectManager = player.GetSEMan(); if (RequiredStatusEffects.Any(x => statusEffectManager.HaveStatusEffect(x))) { return(true); } } return(false); }
public static void Prefix(Character __instance, SEMan ___m_seman, ref float ___m_maxAirAltitude) { if (___m_seman.HaveStatusEffect("SE_Feather")) { ___m_maxAirAltitude = __instance.transform.position.y; } }
static void Postfix(Character __instance, ref SEMan ___m_seman) { /*if (___m_seman.HaveStatusEffect("Wolftears")) * { * SE_Wolftears effect = ___m_seman.GetStatusEffect("Wolftears") as SE_Wolftears; * if (__instance.GetHealthPercentage() > effect.GetActivationHP() && effect.m_icon != null) * { * effect.ClearIcon(); * } * else if (__instance.GetHealthPercentage() <= effect.GetActivationHP() && effect.m_icon == null) * { * effect.SetIcon(); * } * }*/ if (___m_seman.HaveStatusEffect("Battle Furor")) { SE_FullHPDamageBonus effect = ___m_seman.GetStatusEffect("Battle Furor") as SE_FullHPDamageBonus; if (__instance.GetHealthPercentage() < effect.GetActivationHP() && effect.m_icon != null) { effect.ClearIcon(); } else if (__instance.GetHealthPercentage() >= effect.GetActivationHP() && effect.m_icon == null) { effect.SetIcon(); } } }
public static bool Prefix(SEMan __instance, ref string name) { if (__instance.HaveStatusEffect("Waterproof") && name == "Wet") { return(false); } return(true); }
public static void Postfix(Rigidbody ___m_body, SEMan ___m_seman, float dt) { if (___m_seman.HaveStatusEffect("SE_Feather")) { var vel = ___m_body.velocity; ((SE_Feather)___m_seman.GetStatusEffect("SE_Feather")).ModifyFall(ref vel, dt); ___m_body.velocity = vel; } }
static bool Prefix(ref StatusEffect __result, string name, SEMan __instance) { if (string.Equals(name, "Cold") && Config.PushingWarms.Value) { if (__instance.HaveStatusEffect("Warmed")) { __result = null; return(false); } } return(true); }
public static void Postfix(SEMan __instance, ref float regenMultiplier) { //Log.LogInfo("Total Val Increasing HP"); if (__instance.HaveStatusEffect("HP Regen")) { //Log.LogInfo($"Total Val Has Effect HP${hp}"); SE_HPRegen effect = __instance.GetStatusEffect("HP Regen") as SE_HPRegen; //Player player = __instance.m_character as Player; regenMultiplier += effect.getHealPercent(); //Log.LogInfo($"Total Val Modded HP${hp} from effect ${effect.getHealthBonus()}"); } }
public static void DamagePostfix(Character __instance, HitData hit) { SEMan seman = __instance.GetSEMan(); if (seman.HaveStatusEffect("Wolftears") && seman.m_character.GetHealth() <= hit.m_damage.GetTotalDamage() && !seman.HaveStatusEffect("Tear Protection Exhausted")) { Log.LogInfo($"Would Kill defender! Damage: {hit.m_damage.GetTotalDamage()}, attacker health: {__instance.GetHealth()}"); hit.m_damage.Modify(0); seman.AddStatusEffect("Tear Protection Exhausted"); __instance.SetHealth(1f); } }
static void Prefix(ref float ___m_dodgeStaminaUsage, ref SEMan ___m_seman) { //Log.LogWarning("Dodging!"); //Log.LogWarning("Stamina Use: " + ___m_dodgeStaminaUsage); if (___m_seman.HaveStatusEffect("Dodge Stamina Use")) { SE_DodgeStamUse effect = ___m_seman.GetStatusEffect("Dodge Stamina Use") as SE_DodgeStamUse; //Log.LogMessage("Has Effect"); ___m_dodgeStaminaUsage = baseStaminaUse * (1 - effect.getDodgeStaminaUse()); //Log.LogWarning("Stamina Use: " + ___m_dodgeStaminaUsage); } else if (___m_seman.HaveStatusEffect("Challenge Dodge Bonus")) { SE_ChallengeDodgeBonus effect = ___m_seman.GetStatusEffect("Challenge Dodge Bonus") as SE_ChallengeDodgeBonus; //Log.LogMessage("Has Effect"); ___m_dodgeStaminaUsage = baseStaminaUse * (1 - effect.GetDodgeBonus()); //Log.LogWarning("Stamina Use: " + ___m_dodgeStaminaUsage); } else if (___m_dodgeStaminaUsage != baseStaminaUse) { ___m_dodgeStaminaUsage = baseStaminaUse; } }
static void Prefix(ref float ___m_blockStaminaDrain, ref SEMan ___m_seman) { //Log.LogWarning("Blocking!"); //Log.LogWarning("Stamina Use: " + ___m_blockStaminaDrain); if (___m_seman.HaveStatusEffect("Block Stamina Use") && (___m_seman.m_character as Humanoid).GetCurrentWeapon() != (___m_seman.m_character as Humanoid).m_unarmedWeapon.m_itemData) { SE_BlockStamUse effect = ___m_seman.GetStatusEffect("Block Stamina Use") as SE_BlockStamUse; //Log.LogMessage("Has Effect"); ___m_blockStaminaDrain = baseStaminaUse * (1 - effect.getBlockStaminaUse()); //Log.LogWarning("Stamina Use: " + ___m_blockStaminaDrain); } else if (___m_blockStaminaDrain != baseStaminaUse) { //Log.LogMessage("1"); ___m_blockStaminaDrain = baseStaminaUse; //Log.LogMessage("2"); } //Log.LogMessage("3"); }
static void Postfix(float dt, Player __instance, ItemDrop.ItemData ___m_chestItem, ItemDrop.ItemData ___m_legItem, ItemDrop.ItemData ___m_helmetItem, ItemDrop.ItemData ___m_shoulderItem, SEMan ___m_seman) { if (!modEnabled.Value) { return; } if (___m_seman.HaveStatusEffect("Wet")) { HitData.DamageModifier water = GetNewDamageTypeMod(NewDamageTypes.Water, ___m_chestItem, ___m_legItem, ___m_helmetItem, ___m_shoulderItem); var wet = ___m_seman.GetStatusEffect("Wet"); var t = Traverse.Create(wet); if (water == HitData.DamageModifier.Ignore || water == HitData.DamageModifier.Immune) { ___m_seman.RemoveStatusEffect("Wet", true); } else if (water == HitData.DamageModifier.VeryResistant && !__instance.InLiquidSwimDepth()) { ___m_seman.RemoveStatusEffect("Wet", true); } else if (water == HitData.DamageModifier.Resistant) { t.Field("m_time").SetValue(t.Field("m_time").GetValue <float>() + dt); ___m_seman.RemoveStatusEffect("Wet", true); ___m_seman.AddStatusEffect(wet); } else if (water == HitData.DamageModifier.Weak) { t.Field("m_time").SetValue(t.Field("m_time").GetValue <float>() - dt / 3); ___m_seman.RemoveStatusEffect("Wet", true); ___m_seman.AddStatusEffect(wet); } else if (water == HitData.DamageModifier.VeryWeak) { t.Field("m_time").SetValue(t.Field("m_time").GetValue <float>() - dt * 2 / 3); ___m_seman.RemoveStatusEffect("Wet", true); ___m_seman.AddStatusEffect(wet); } } }
static void Postfix(HitData hit, Character attacker, ref SEMan ___m_seman, float ___m_blockTimer) { if (___m_seman.HaveStatusEffect("Heal On Block")) { if ((___m_seman.m_character as Humanoid) && (___m_seman.m_character as Humanoid).m_leftItem != (___m_seman.m_character as Humanoid).m_unarmedWeapon.m_itemData && (___m_seman.m_character as Humanoid).m_leftItem != null) { var effect = ___m_seman.GetStatusEffect("Heal On Block") as SE_HealOnBlock; ItemDrop.ItemData blocker = (___m_seman.m_character as Humanoid).m_leftItem; //Log.LogMessage("Defender is staggered: " + ___m_seman.m_character.IsStaggering() + ". Attacker is staggered: " + attacker.IsStaggering()); bool parryFlag = ___m_blockTimer != -1f && (float)balance["perfectBlockWindow"] >= ___m_blockTimer; if (blocker.m_shared.m_name.Contains("tower") || blocker.m_shared.m_name.Contains("shield_serpentscale")) { //Log.LogWarning("Has tower shield"); //Do Heal on Block if ((___m_seman.m_character as Humanoid).HaveStamina() || parryFlag) { var healAmount = blocker.GetBaseBlockPower() * effect.GetBlockHeal(); Log.LogInfo("Terraheim | Heal on Block: Block Power: " + blocker.GetBaseBlockPower() + " Heal Amount: " + healAmount); ___m_seman.m_character.Heal(healAmount); } } else if (blocker.m_shared.m_name.Contains("shield") && parryFlag) { //Log.LogWarning("Has Small Shield"); //Do Heal on Parry var healAmount = blocker.GetBaseBlockPower() * effect.GetBlockHeal() + (blocker.GetBaseBlockPower() * blocker.m_shared.m_timedBlockBonus * effect.GetBlockHeal()); Log.LogInfo("Terraheim | Heal on Parry: Block Power: " + blocker.GetBaseBlockPower() + " Parry Bonus: " + blocker.m_shared.m_timedBlockBonus + " Heal Amount: " + healAmount); ___m_seman.m_character.Heal(healAmount); } } } }
public static void DamagePostfix(Character __instance, ref HitData hit) { SEMan seman = __instance.GetSEMan(); Character attacker = hit.GetAttacker(); if (attacker == null || attacker.IsPlayer() || attacker.m_seman == null) { return; } if (seman.HaveStatusEffect("Thorns") && !seman.m_character.IsBlocking()) { SE_Thorns effect = seman.GetStatusEffect("Thorns") as SE_Thorns; Log.LogMessage($"Damage dealt: {hit.GetTotalDamage()} thorns %${effect.GetReflectPercent()}"); HitData reflectedDamage = new HitData(); reflectedDamage.m_damage.Add(hit.m_damage); reflectedDamage.m_damage.m_blunt *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_chop *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_damage *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_fire *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_frost *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_lightning *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_pickaxe *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_pierce *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_poison *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_slash *= effect.GetReflectPercent(); reflectedDamage.m_damage.m_spirit *= effect.GetReflectPercent(); reflectedDamage.m_staggerMultiplier = 0; Log.LogMessage($"Reflected Damage ${reflectedDamage.m_damage.GetTotalDamage()}"); if (attacker.GetHealth() <= reflectedDamage.GetTotalDamage() && attacker.GetHealthPercentage() >= (float)balance["thornsKillThreshold"]) { var totalDamage = attacker.GetHealth() - 1; reflectedDamage.m_damage.m_blunt = totalDamage * (reflectedDamage.m_damage.m_blunt / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_chop = totalDamage * (reflectedDamage.m_damage.m_chop / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_damage = totalDamage * (reflectedDamage.m_damage.m_damage / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_fire = totalDamage * (reflectedDamage.m_damage.m_fire / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_frost = totalDamage * (reflectedDamage.m_damage.m_frost / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_lightning = totalDamage * (reflectedDamage.m_damage.m_lightning / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_pickaxe = totalDamage * (reflectedDamage.m_damage.m_pickaxe / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_pierce = totalDamage * (reflectedDamage.m_damage.m_pierce / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_poison = totalDamage * (reflectedDamage.m_damage.m_poison / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_slash = totalDamage * (reflectedDamage.m_damage.m_slash / reflectedDamage.GetTotalDamage()); reflectedDamage.m_damage.m_spirit = totalDamage * (reflectedDamage.m_damage.m_spirit / reflectedDamage.GetTotalDamage()); //Log.LogMessage($"Would Kill attacker! New damage: {reflectedDamage.m_damage.GetTotalDamage()}, attacker health: {attacker.GetHealth()}"); } attacker.ApplyDamage(reflectedDamage, true, false); var vfx = Object.Instantiate(AssetHelper.FXThorns, attacker.GetCenterPoint(), Quaternion.identity); ParticleSystem[] children = vfx.GetComponentsInChildren <ParticleSystem>(); foreach (ParticleSystem particle in children) { particle.Play(); //Log.LogMessage("Playing particle"); } } if (__instance.GetSEMan().HaveStatusEffect("Wolftears")) { var effect = __instance.GetSEMan().GetStatusEffect("Wolftears") as SE_Wolftears; effect.SetIcon(); if (seman.m_character.GetHealth() <= hit.m_damage.GetTotalDamage() && !seman.HaveStatusEffect("Tear Protection Exhausted")) { Log.LogInfo($"Would Kill defender! Damage: {hit.m_damage.GetTotalDamage()}, attacker health: {__instance.GetHealth()}"); hit.m_damage.Modify(0); seman.AddStatusEffect("Tear Protection Exhausted"); __instance.SetHealth(1f); } } if (__instance.GetSEMan().HaveStatusEffect("Battle Furor")) { var effect = __instance.GetSEMan().GetStatusEffect("Battle Furor") as SE_FullHPDamageBonus; //Log.LogWarning("HP Percentage " + __instance.m_character.GetHealthPercentage() + " Activation Threshold " + effect.GetActivationHP()); if (__instance.GetHealthPercentage() < effect.GetActivationHP()) { effect.ClearIcon(); } } }
public static void UpdateDamageTooltip(ref string tooltip, ItemDrop.ItemData item) { Player localplayer = Player.m_localPlayer; SEMan seman = localplayer.GetSEMan(); float totalMultiplier = 0f; float frostDamage = 0f; float spiritDamage = 0f; if (item == null || seman == null || localplayer == null || item.m_shared == null || item.m_shared.m_name == null) { return; } if (seman.HaveStatusEffect("One Hand Damage Bonus") && (item.m_shared.m_name.Contains("axe") || item.m_shared.m_name.Contains("battleaxe"))) { var effect = localplayer.GetSEMan().GetStatusEffect("One Hand Damage Bonus") as SE_OneHandDamageBonus; totalMultiplier += effect.getDamageBonus(); } if (seman.HaveStatusEffect("Dagger/Spear Damage Bonus") && (item.m_shared.m_name.Contains("spear") || item.m_shared.m_name.Contains("knife"))) { var effect = localplayer.GetSEMan().GetStatusEffect("Dagger/Spear Damage Bonus") as SE_DaggerSpearDmgBonus; totalMultiplier += effect.getDamageBonus(); } if (seman.HaveStatusEffect("Melee Damage Bonus") && item.m_shared.m_itemType != ItemDrop.ItemData.ItemType.Bow) { var effect = localplayer.GetSEMan().GetStatusEffect("Melee Damage Bonus") as SE_MeleeDamageBonus; totalMultiplier += effect.getDamageBonus(); } if (seman.HaveStatusEffect("Ranged Damage Bonus") && item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Bow) { var effect = localplayer.GetSEMan().GetStatusEffect("Ranged Damage Bonus") as SE_RangedDmgBonus; totalMultiplier += effect.getDamageBonus(); } if (seman.HaveStatusEffect("Two Handed Damage Bonus") && item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.TwoHandedWeapon) { var effect = localplayer.GetSEMan().GetStatusEffect("Two Handed Damage Bonus") as SE_TwoHandedDmgBonus; totalMultiplier += effect.getDamageBonus(); } if (seman.HaveStatusEffect("Ranger Weapon Bonus") && (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Bow || item.m_shared.m_name.Contains("spear") || item.m_shared.m_name.Contains("knife"))) { var effect = localplayer.GetSEMan().GetStatusEffect("Ranger Weapon Bonus") as SE_RangerWeaponBonus; totalMultiplier += effect.GetDamageBonus(); } if (seman.HaveStatusEffect("Throwing Damage Bonus") && item.m_shared.m_name.Contains("_throwingaxe") || item.m_shared.m_name.Contains("_spear") || item.m_shared.m_name.Contains("bomb")) { var effect = seman.GetStatusEffect("Throwing Damage Bonus") as SE_ThrowingDamageBonus; if (effect != null) { totalMultiplier += effect.getDamageBonus(); } } if (seman.HaveStatusEffect("Wolftears")) { SE_Wolftears effect = seman.GetStatusEffect("Wolftears") as SE_Wolftears; totalMultiplier += effect.GetDamageBonus(); } if (seman.HaveStatusEffect("Battle Furor")) { SE_FullHPDamageBonus effect = seman.GetStatusEffect("Battle Furor") as SE_FullHPDamageBonus; if (localplayer.GetHealthPercentage() >= effect.GetActivationHP()) { totalMultiplier += effect.GetDamageBonus(); } } if (seman.HaveStatusEffect("Silver Damage Bonus") && (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Bow || item.m_shared.m_name.Contains("spear") || item.m_shared.m_name.Contains("knife"))) { var effect = localplayer.GetSEMan().GetStatusEffect("Silver Damage Bonus") as SE_SilverDamageBonus; spiritDamage += (item.GetDamage().GetTotalDamage() * effect.GetDamageBonus()) / 2; frostDamage += (item.GetDamage().GetTotalDamage() * effect.GetDamageBonus()) / 2; } if (seman.HaveStatusEffect("Spirit Damage Bonus")) { var effect = localplayer.GetSEMan().GetStatusEffect("Spirit Damage Bonus") as SE_SpiritDamageBonus; spiritDamage += effect.GetDamageBonus(); } if (totalMultiplier > 0f) { var damages = item.m_shared.m_damages; if (damages.m_blunt != 0f) { localplayer.GetSkills().GetRandomSkillRange(out var min, out var max, item.m_shared.m_skillType); int minRange = Mathf.RoundToInt(item.GetDamage().m_blunt *min); int maxRange = Mathf.RoundToInt(item.GetDamage().m_blunt *max); string bluntString = $"$inventory_blunt: <color=orange>{item.GetDamage().m_blunt}</color> <color=yellow>({minRange}-{maxRange}) </color>"; var index = tooltip.IndexOf(bluntString); if (index > -1) { var dmgBonusMin = (item.GetDamage().m_blunt + item.GetDamage().m_blunt *totalMultiplier) * min; var dmgBonusMax = (item.GetDamage().m_blunt + item.GetDamage().m_blunt *totalMultiplier) * max; tooltip = tooltip.Insert(index + bluntString.Length, $"<color=orange>|</color> <color=cyan>({dmgBonusMin:#.#}-{dmgBonusMax:#.#})</color>"); } } if (damages.m_slash != 0f) { localplayer.GetSkills().GetRandomSkillRange(out var min, out var max, item.m_shared.m_skillType); int minRange = Mathf.RoundToInt(item.GetDamage().m_slash *min); int maxRange = Mathf.RoundToInt(item.GetDamage().m_slash *max); string toolString = $"$inventory_slash: <color=orange>{item.GetDamage().m_slash}</color> <color=yellow>({minRange}-{maxRange}) </color>"; var index = tooltip.IndexOf(toolString); if (index > -1) { var dmgBonusMin = (item.GetDamage().m_slash + item.GetDamage().m_slash *totalMultiplier) * min; var dmgBonusMax = (item.GetDamage().m_slash + item.GetDamage().m_slash *totalMultiplier) * max; tooltip = tooltip.Insert(index + toolString.Length, $"<color=orange>|</color> <color=cyan>({dmgBonusMin:#.#}-{dmgBonusMax:#.#})</color>"); } } if (damages.m_pierce != 0f) { localplayer.GetSkills().GetRandomSkillRange(out var min, out var max, item.m_shared.m_skillType); int minRange = Mathf.RoundToInt(item.GetDamage().m_pierce *min); int maxRange = Mathf.RoundToInt(item.GetDamage().m_pierce *max); string toolString = $"$inventory_pierce: <color=orange>{item.GetDamage().m_pierce}</color> <color=yellow>({minRange}-{maxRange}) </color>"; var index = tooltip.IndexOf(toolString); if (index > -1) { var dmgBonusMin = (item.GetDamage().m_pierce + item.GetDamage().m_pierce *totalMultiplier) * min; var dmgBonusMax = (item.GetDamage().m_pierce + item.GetDamage().m_pierce *totalMultiplier) * max; tooltip = tooltip.Insert(index + toolString.Length, $"<color=orange>|</color> <color=cyan>({dmgBonusMin:#.#}-{dmgBonusMax:#.#})</color>"); } } if (damages.m_fire != 0f) { localplayer.GetSkills().GetRandomSkillRange(out var min, out var max, item.m_shared.m_skillType); int minRange = Mathf.RoundToInt(item.GetDamage().m_fire *min); int maxRange = Mathf.RoundToInt(item.GetDamage().m_fire *max); string toolString = $"$inventory_fire: <color=orange>{item.GetDamage().m_fire}</color> <color=yellow>({minRange}-{maxRange}) </color>"; var index = tooltip.IndexOf(toolString); if (index > -1) { var dmgBonusMin = (item.GetDamage().m_fire + item.GetDamage().m_fire *totalMultiplier) * min; var dmgBonusMax = (item.GetDamage().m_fire + item.GetDamage().m_fire *totalMultiplier) * max; tooltip = tooltip.Insert(index + toolString.Length, $"<color=orange>|</color> <color=cyan>({dmgBonusMin:#.#}-{dmgBonusMax:#.#})</color>"); } } if (damages.m_lightning != 0f) { localplayer.GetSkills().GetRandomSkillRange(out var min, out var max, item.m_shared.m_skillType); int minRange = Mathf.RoundToInt(item.GetDamage().m_lightning *min); int maxRange = Mathf.RoundToInt(item.GetDamage().m_lightning *max); string toolString = $"$inventory_lightning: <color=orange>{item.GetDamage().m_lightning}</color> <color=yellow>({minRange}-{maxRange}) </color>"; var index = tooltip.IndexOf(toolString); if (index > -1) { var dmgBonusMin = (item.GetDamage().m_lightning + item.GetDamage().m_lightning *totalMultiplier) * min; var dmgBonusMax = (item.GetDamage().m_lightning + item.GetDamage().m_lightning *totalMultiplier) * max; tooltip = tooltip.Insert(index + toolString.Length, $"<color=orange>|</color> <color=cyan>({dmgBonusMin:#.#}-{dmgBonusMax:#.#})</color>"); } } if (damages.m_poison != 0f) { localplayer.GetSkills().GetRandomSkillRange(out var min, out var max, item.m_shared.m_skillType); int minRange = Mathf.RoundToInt(item.GetDamage().m_poison *min); int maxRange = Mathf.RoundToInt(item.GetDamage().m_poison *max); string toolString = $"$inventory_poison: <color=orange>{item.GetDamage().m_poison}</color> <color=yellow>({minRange}-{maxRange}) </color>"; var index = tooltip.IndexOf(toolString); if (index > -1) { var dmgBonusMin = (item.GetDamage().m_poison + item.GetDamage().m_poison *totalMultiplier) * min; var dmgBonusMax = (item.GetDamage().m_poison + item.GetDamage().m_poison *totalMultiplier) * max; tooltip = tooltip.Insert(index + toolString.Length, $"<color=orange>|</color> <color=cyan>({dmgBonusMin:#.#}-{dmgBonusMax:#.#})</color>"); } } } if (spiritDamage > 0f) { localplayer.GetSkills().GetRandomSkillRange(out var min, out var max, item.m_shared.m_skillType); int minRange = Mathf.RoundToInt(item.GetDamage().m_spirit *min); int maxRange = Mathf.RoundToInt(item.GetDamage().m_spirit *max); string toolString = $"$inventory_spirit: <color=orange>{item.GetDamage().m_spirit}</color> <color=yellow>({minRange}-{maxRange}) </color>"; var dmgBonusMin = Mathf.RoundToInt((item.GetDamage().m_spirit + spiritDamage) * min); var dmgBonusMax = Mathf.RoundToInt((item.GetDamage().m_spirit + spiritDamage) * max); var index = tooltip.IndexOf(toolString); if (index > -1) { tooltip = tooltip.Insert(index + toolString.Length, $"<color=orange>|</color> <color=cyan>({dmgBonusMin:#.##}-{dmgBonusMax:#.##})</color>"); } else { string newString = $"$item_blockpower: <color=orange>{item.m_shared.m_blockPower}</color> <color=yellow>({item.m_shared.m_blockPower})</color>"; index = tooltip.IndexOf(newString); if (index > -1) { tooltip = tooltip.Insert(index, $"<color=cyan>$inventory_spirit: {item.GetDamage().m_spirit + spiritDamage} ({dmgBonusMin:#.#}-{dmgBonusMax:#.#})</color>\n"); } } } if (frostDamage > 0f) { localplayer.GetSkills().GetRandomSkillRange(out var min, out var max, item.m_shared.m_skillType); int minRange = Mathf.RoundToInt(item.GetDamage().m_frost *min); int maxRange = Mathf.RoundToInt(item.GetDamage().m_frost *max); string toolString = $"$inventory_frost: <color=orange>{item.GetDamage().m_frost}</color> <color=yellow>({minRange}-{maxRange}) </color>"; var dmgBonusMin = ((item.GetDamage().m_frost + frostDamage) * min); var dmgBonusMax = ((item.GetDamage().m_frost + frostDamage) * max); var index = tooltip.IndexOf(toolString); if (index > -1) { tooltip = tooltip.Insert(index + toolString.Length, $"<color=orange>|</color> <color=cyan>({dmgBonusMin:#.#}-{dmgBonusMax:#.#})</color>"); } else { string newString = $"$item_blockpower: <color=orange>{item.m_shared.m_blockPower}</color> <color=yellow>({item.m_shared.m_blockPower})</color>"; index = tooltip.IndexOf(newString); if (index > -1) { tooltip = tooltip.Insert(index, $"<color=cyan>$inventory_frost: {item.GetDamage().m_frost + frostDamage} ({dmgBonusMin:#.#}-{dmgBonusMax:#.#})</color>\n"); } } } }