private static string ReplaceLine(ItemDrop.ItemData item, int qualityLevel, bool crafting, string line) { return(line .Replace("{itemDescription}", item.m_shared.m_description) .Replace("{itemSpawnName}", GetSpawnName(item)) .Replace("{itemCrafterName}", item.m_crafterName.ToString()) .Replace("{itemValue}", item.GetValue().ToString()) .Replace("{itemBaseValue}", item.m_shared.m_value.ToString()) .Replace("{itemWeight}", item.GetWeight().ToString()) .Replace("{itemQuality}", qualityLevel.ToString()) .Replace("{itemMaxDurability}", item.GetMaxDurability(qualityLevel).ToString()) .Replace("{itemPercentDurability}", (item.GetDurabilityPercentage() * 100f).ToString("0")) .Replace("{itemDurability}", item.m_durability.ToString("0")) .Replace("{itemStationLevel}", ObjectDB.instance.GetRecipe(item)?.m_minStationLevel.ToString()) .Replace("{itemMovementMod}", (item.m_shared.m_movementModifier * 100f).ToString("+0;-0")) .Replace("{totalMovementMod}", (Player.m_localPlayer.GetEquipmentMovementModifier() * 100).ToString("+0;-0")) .Replace("{itemSetSize}", item.m_shared.m_setSize.ToString()) .Replace("{itemDamage}", GetDamageString(item, qualityLevel)) .Replace("{itemBaseBlock}", item.GetBaseBlockPower(qualityLevel).ToString()) .Replace("{itemBlock}", item.GetBlockPowerTooltip(qualityLevel).ToString("0")) .Replace("{itemDeflection}", item.GetDeflectionForce(qualityLevel).ToString()) .Replace("{itemBlockBonus}", item.m_shared.m_timedBlockBonus.ToString()) .Replace("{itemAttackForce}", item.m_shared.m_attackForce.ToString()) .Replace("{itemBackstab}", item.m_shared.m_backstabBonus.ToString()) .Replace("{itemArmor}", item.GetArmor(qualityLevel).ToString()) .Replace("{itemFoodHealth}", item.m_shared.m_food.ToString()) .Replace("{itemSetSize}", item.m_shared.m_setSize.ToString()) .Replace("{itemFoodStamina}", item.m_shared.m_foodStamina.ToString()) .Replace("{itemFoodDuration}", item.m_shared.m_foodBurnTime.ToString()) .Replace("{itemFoodRegen}", item.m_shared.m_foodRegen.ToString()) .Replace("\\n", "\n")); }
public static void UpdateHealOnBlockTooltip(ref string tooltip, ItemDrop.ItemData item) { Player localplayer = Player.m_localPlayer; if (localplayer == null) { return; } if (localplayer.GetSEMan().HaveStatusEffect("Heal On Block")) { SE_HealOnBlock effect = localplayer.GetSEMan().GetStatusEffect("Heal On Block") as SE_HealOnBlock; if ((item.m_shared.m_name.Contains("tower") || item.m_shared.m_name.Contains("shield_serpentscale")) && !item.m_shared.m_description.Contains("Heal")) { item.m_shared.m_description += $"\n<color=cyan>Heal {item.GetBaseBlockPower() * effect.GetBlockHeal()} HP on a successful block.</color>"; } else if ((!item.m_shared.m_name.Contains("tower") || !item.m_shared.m_name.Contains("shield_serpentscale")) && !item.m_shared.m_description.Contains("successful parry")) { item.m_shared.m_description += $"\n<color=cyan>Heal {item.GetBaseBlockPower() * effect.GetBlockHeal() + (item.GetBaseBlockPower() * item.m_shared.m_timedBlockBonus * effect.GetBlockHeal())} HP on a successful parry.</color>"; } } }
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); } } } }
// Token: 0x0600114C RID: 4428 RVA: 0x00077F18 File Offset: 0x00076118 public static string GetTooltip(ItemDrop.ItemData item, int qualityLevel, bool crafting) { Player localPlayer = Player.m_localPlayer; StringBuilder stringBuilder = new StringBuilder(256); stringBuilder.Append(item.m_shared.m_description); stringBuilder.Append("\n\n"); if (item.m_shared.m_dlc.Length > 0) { stringBuilder.Append("\n<color=aqua>$item_dlc</color>"); } ItemDrop.ItemData.AddHandedTip(item, stringBuilder); if (item.m_crafterID != 0L) { stringBuilder.AppendFormat("\n$item_crafter: <color=orange>{0}</color>", item.m_crafterName); } if (!item.m_shared.m_teleportable) { stringBuilder.Append("\n<color=orange>$item_noteleport</color>"); } if (item.m_shared.m_value > 0) { stringBuilder.AppendFormat("\n$item_value: <color=orange>{0} ({1})</color>", item.GetValue(), item.m_shared.m_value); } stringBuilder.AppendFormat("\n$item_weight: <color=orange>{0}</color>", item.GetWeight().ToString("0.0")); if (item.m_shared.m_maxQuality > 1) { stringBuilder.AppendFormat("\n$item_quality: <color=orange>{0}</color>", qualityLevel); } if (item.m_shared.m_useDurability) { if (crafting) { float maxDurability = item.GetMaxDurability(qualityLevel); stringBuilder.AppendFormat("\n$item_durability: <color=orange>{0}</color>", maxDurability); } else { float maxDurability2 = item.GetMaxDurability(qualityLevel); float durability = item.m_durability; stringBuilder.AppendFormat("\n$item_durability: <color=orange>{0}%</color> <color=yellow>({1}/{2})</color>", (item.GetDurabilityPercentage() * 100f).ToString("0"), durability.ToString("0"), maxDurability2.ToString("0")); } if (item.m_shared.m_canBeReparied) { Recipe recipe = ObjectDB.instance.GetRecipe(item); if (recipe != null) { int minStationLevel = recipe.m_minStationLevel; stringBuilder.AppendFormat("\n$item_repairlevel: <color=orange>{0}</color>", minStationLevel.ToString()); } } } switch (item.m_shared.m_itemType) { case ItemDrop.ItemData.ItemType.Consumable: { if (item.m_shared.m_food > 0f) { stringBuilder.AppendFormat("\n$item_food_health: <color=orange>{0}</color>", item.m_shared.m_food); stringBuilder.AppendFormat("\n$item_food_stamina: <color=orange>{0}</color>", item.m_shared.m_foodStamina); stringBuilder.AppendFormat("\n$item_food_duration: <color=orange>{0}s</color>", item.m_shared.m_foodBurnTime); stringBuilder.AppendFormat("\n$item_food_regen: <color=orange>{0} hp/tick</color>", item.m_shared.m_foodRegen); } string statusEffectTooltip = item.GetStatusEffectTooltip(); if (statusEffectTooltip.Length > 0) { stringBuilder.Append("\n\n"); stringBuilder.Append(statusEffectTooltip); } break; } case ItemDrop.ItemData.ItemType.OneHandedWeapon: case ItemDrop.ItemData.ItemType.Bow: case ItemDrop.ItemData.ItemType.TwoHandedWeapon: case ItemDrop.ItemData.ItemType.Torch: { stringBuilder.Append(item.GetDamage(qualityLevel).GetTooltipString(item.m_shared.m_skillType)); stringBuilder.AppendFormat("\n$item_blockpower: <color=orange>{0}</color> <color=yellow>({1})</color>", item.GetBaseBlockPower(qualityLevel), item.GetBlockPowerTooltip(qualityLevel).ToString("0")); if (item.m_shared.m_timedBlockBonus > 1f) { stringBuilder.AppendFormat("\n$item_deflection: <color=orange>{0}</color>", item.GetDeflectionForce(qualityLevel)); stringBuilder.AppendFormat("\n$item_parrybonus: <color=orange>{0}x</color>", item.m_shared.m_timedBlockBonus); } stringBuilder.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", item.m_shared.m_attackForce); stringBuilder.AppendFormat("\n$item_backstab: <color=orange>{0}x</color>", item.m_shared.m_backstabBonus); string projectileTooltip = item.GetProjectileTooltip(qualityLevel); if (projectileTooltip.Length > 0) { stringBuilder.Append("\n\n"); stringBuilder.Append(projectileTooltip); } string statusEffectTooltip2 = item.GetStatusEffectTooltip(); if (statusEffectTooltip2.Length > 0) { stringBuilder.Append("\n\n"); stringBuilder.Append(statusEffectTooltip2); } break; } case ItemDrop.ItemData.ItemType.Shield: stringBuilder.AppendFormat("\n$item_blockpower: <color=orange>{0}</color> <color=yellow>({1})</color>", item.GetBaseBlockPower(qualityLevel), item.GetBlockPowerTooltip(qualityLevel).ToString("0")); if (item.m_shared.m_timedBlockBonus > 1f) { stringBuilder.AppendFormat("\n$item_deflection: <color=orange>{0}</color>", item.GetDeflectionForce(qualityLevel)); stringBuilder.AppendFormat("\n$item_parrybonus: <color=orange>{0}x</color>", item.m_shared.m_timedBlockBonus); } break; case ItemDrop.ItemData.ItemType.Helmet: case ItemDrop.ItemData.ItemType.Chest: case ItemDrop.ItemData.ItemType.Legs: case ItemDrop.ItemData.ItemType.Shoulder: { stringBuilder.AppendFormat("\n$item_armor: <color=orange>{0}</color>", item.GetArmor(qualityLevel)); string damageModifiersTooltipString = SE_Stats.GetDamageModifiersTooltipString(item.m_shared.m_damageModifiers); if (damageModifiersTooltipString.Length > 0) { stringBuilder.Append(damageModifiersTooltipString); } string statusEffectTooltip3 = item.GetStatusEffectTooltip(); if (statusEffectTooltip3.Length > 0) { stringBuilder.Append("\n\n"); stringBuilder.Append(statusEffectTooltip3); } break; } case ItemDrop.ItemData.ItemType.Ammo: stringBuilder.Append(item.GetDamage(qualityLevel).GetTooltipString(item.m_shared.m_skillType)); stringBuilder.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", item.m_shared.m_attackForce); break; } if (item.m_shared.m_movementModifier != 0f && localPlayer != null) { float equipmentMovementModifier = localPlayer.GetEquipmentMovementModifier(); stringBuilder.AppendFormat("\n$item_movement_modifier: <color=orange>{0}%</color> ($item_total:<color=yellow>{1}%</color>)", (item.m_shared.m_movementModifier * 100f).ToString("+0;-0"), (equipmentMovementModifier * 100f).ToString("+0;-0")); } string setStatusEffectTooltip = item.GetSetStatusEffectTooltip(); if (setStatusEffectTooltip.Length > 0) { stringBuilder.AppendFormat("\n\n$item_seteffect (<color=orange>{0}</color> $item_parts):<color=orange>{1}</color>", item.m_shared.m_setSize, setStatusEffectTooltip); } return(stringBuilder.ToString()); }
private static bool Prefix(ref string __result, ItemDrop.ItemData item, int qualityLevel, bool crafting) { if (!item.IsMagic()) { return(true); } Player localPlayer = Player.m_localPlayer; StringBuilder text = new StringBuilder(256); var magicItem = item.GetMagicItem(); var magicColor = magicItem.GetColorString(); var displayName = magicItem.GetDisplayName(item.Extended()); text.Append($"<color={magicColor}>{magicItem.GetRarityDisplay()} {displayName}</color>\n"); text.Append(item.m_shared.m_description); text.Append("\n"); if (item.m_shared.m_dlc.Length > 0) { text.Append("\n<color=aqua>$item_dlc</color>"); } ItemDrop.ItemData.AddHandedTip(item, text); if (item.m_crafterID != 0L) { text.AppendFormat("\n$item_crafter: <color=orange>{0}</color>", item.m_crafterName); } if (!item.m_shared.m_teleportable) { text.Append("\n<color=orange>$item_noteleport</color>"); } if (item.m_shared.m_value > 0) { text.AppendFormat("\n$item_value: <color=orange>{0} ({1})</color>", item.GetValue(), item.m_shared.m_value); } var weightColor = magicItem.HasEffect(MagicEffectType.ReduceWeight) || magicItem.HasEffect(MagicEffectType.Weightless) ? magicColor : "orange"; text.Append($"\n$item_weight: <color={weightColor}>{item.GetWeight():0.0}</color>"); if (item.m_shared.m_maxQuality > 1) { text.AppendFormat("\n$item_quality: <color=orange>{0}</color>", qualityLevel); } var indestructible = magicItem.HasEffect(MagicEffectType.Indestructible); if (!indestructible && item.m_shared.m_useDurability) { var maxDurabilityColor1 = magicItem.HasEffect(MagicEffectType.ModifyDurability) ? magicColor : "orange"; var maxDurabilityColor2 = magicItem.HasEffect(MagicEffectType.ModifyDurability) ? magicColor : "yellow"; float maxDurability = item.GetMaxDurability(qualityLevel); float durability = item.m_durability; float currentDurabilityPercentage = item.GetDurabilityPercentage() * 100f; string durabilityPercentageString = currentDurabilityPercentage.ToString("0"); string durabilityValueString = durability.ToString("0"); string durabilityMaxString = maxDurability.ToString("0"); text.Append($"\n$item_durability: <color={maxDurabilityColor1}>{durabilityPercentageString}%</color> <color={maxDurabilityColor2}>({durabilityValueString}/{durabilityMaxString})</color>"); if (item.m_shared.m_canBeReparied) { Recipe recipe = ObjectDB.instance.GetRecipe(item); if (recipe != null) { int minStationLevel = recipe.m_minStationLevel; text.AppendFormat("\n$item_repairlevel: <color=orange>{0}</color>", minStationLevel.ToString()); } } } else if (indestructible) { text.Append($"\n$item_durability: <color={magicColor}>Indestructible</color>"); } var magicBlockPower = magicItem.HasEffect(MagicEffectType.ModifyBlockPower); var magicBlockColor1 = magicBlockPower ? magicColor : "orange"; var magicBlockColor2 = magicBlockPower ? magicColor : "yellow"; var magicParry = magicItem.HasEffect(MagicEffectType.ModifyParry); var totalParryBonusMod = magicItem.GetTotalEffectValue(MagicEffectType.ModifyParry, 0.01f); var magicParryColor = magicParry ? magicColor : "orange"; switch (item.m_shared.m_itemType) { case ItemDrop.ItemData.ItemType.Consumable: if (item.m_shared.m_food > 0.0) { text.AppendFormat("\n$item_food_health: <color=orange>{0}</color>", item.m_shared.m_food); text.AppendFormat("\n$item_food_stamina: <color=orange>{0}</color>", item.m_shared.m_foodStamina); text.AppendFormat("\n$item_food_duration: <color=orange>{0}s</color>", item.m_shared.m_foodBurnTime); text.AppendFormat("\n$item_food_regen: <color=orange>{0} hp/tick</color>", item.m_shared.m_foodRegen); } string consumeStatusEffectTooltip = item.GetStatusEffectTooltip(); if (consumeStatusEffectTooltip.Length > 0) { text.Append("\n\n"); text.Append(consumeStatusEffectTooltip); } break; case ItemDrop.ItemData.ItemType.OneHandedWeapon: case ItemDrop.ItemData.ItemType.Bow: case ItemDrop.ItemData.ItemType.TwoHandedWeapon: case ItemDrop.ItemData.ItemType.Torch: text.Append(GetDamageTooltipString(magicItem, item.GetDamage(qualityLevel), item.m_shared.m_skillType, magicColor)); float baseBlockPower1 = item.GetBaseBlockPower(qualityLevel); float blockPowerTooltipValue = item.GetBlockPowerTooltip(qualityLevel); string blockPowerPercentageString = blockPowerTooltipValue.ToString("0"); text.Append($"\n$item_blockpower: <color={magicBlockColor1}>{baseBlockPower1}</color> <color={magicBlockColor2}>({blockPowerPercentageString})</color>"); if (item.m_shared.m_timedBlockBonus > 1.0) { text.Append($"\n$item_deflection: <color={magicParryColor}>{item.GetDeflectionForce(qualityLevel)}</color>"); var timedBlockBonus = item.m_shared.m_timedBlockBonus; if (magicParry) { timedBlockBonus *= 1.0f + totalParryBonusMod; } text.Append($"\n$item_parrybonus: <color={magicParryColor}>{timedBlockBonus:0.#}x</color>"); } text.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", item.m_shared.m_attackForce); var magicBackstab = magicItem.HasEffect(MagicEffectType.ModifyBackstab); var totalBackstabBonusMod = magicItem.GetTotalEffectValue(MagicEffectType.ModifyBackstab, 0.01f); var magicBackstabColor = magicBackstab ? magicColor : "orange"; var backstabValue = item.m_shared.m_backstabBonus * (1.0f + totalBackstabBonusMod); text.Append($"\n$item_backstab: <color={magicBackstabColor}>{backstabValue:0.#}x</color>"); string projectileTooltip = item.GetProjectileTooltip(qualityLevel); if (projectileTooltip.Length > 0) { text.Append("\n\n"); text.Append(projectileTooltip); } string statusEffectTooltip2 = item.GetStatusEffectTooltip(); if (statusEffectTooltip2.Length > 0) { text.Append("\n\n"); text.Append(statusEffectTooltip2); } break; case ItemDrop.ItemData.ItemType.Shield: float baseBlockPower2 = item.GetBaseBlockPower(qualityLevel); blockPowerTooltipValue = item.GetBlockPowerTooltip(qualityLevel); string str5 = blockPowerTooltipValue.ToString("0"); text.Append($"\n$item_blockpower: <color={magicBlockColor1}>{baseBlockPower2}</color> <color={magicBlockColor2}>({str5})</color>"); if (item.m_shared.m_timedBlockBonus > 1.0) { text.Append($"\n$item_deflection: <color={magicParryColor}>{item.GetDeflectionForce(qualityLevel)}</color>"); var timedBlockBonus = item.m_shared.m_timedBlockBonus; if (magicParry) { timedBlockBonus *= 1.0f + totalParryBonusMod; } text.Append($"\n$item_parrybonus: <color={magicParryColor}>{timedBlockBonus:0.#}x</color>"); } break; case ItemDrop.ItemData.ItemType.Helmet: case ItemDrop.ItemData.ItemType.Chest: case ItemDrop.ItemData.ItemType.Legs: case ItemDrop.ItemData.ItemType.Shoulder: var magicArmorColor = magicItem.HasEffect(MagicEffectType.ModifyArmor) ? magicColor : "orange"; text.Append($"\n$item_armor: <color={magicArmorColor}>{item.GetArmor(qualityLevel):0.#}</color>"); string modifiersTooltipString = SE_Stats.GetDamageModifiersTooltipString(item.m_shared.m_damageModifiers); if (modifiersTooltipString.Length > 0) { text.Append(modifiersTooltipString); } string statusEffectTooltip3 = item.GetStatusEffectTooltip(); if (statusEffectTooltip3.Length > 0) { text.Append("\n"); text.Append(statusEffectTooltip3); } break; case ItemDrop.ItemData.ItemType.Ammo: text.Append(item.GetDamage(qualityLevel).GetTooltipString(item.m_shared.m_skillType)); text.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", item.m_shared.m_attackForce); break; } var magicMovement = magicItem.HasEffect(MagicEffectType.ModifyMovementSpeed); if ((magicMovement || item.m_shared.m_movementModifier != 0) && localPlayer != null) { var removePenalty = magicItem.HasEffect(MagicEffectType.RemoveSpeedPenalty); var itemMovementModifier = removePenalty ? 0 : item.m_shared.m_movementModifier * 100f; if (magicMovement) { itemMovementModifier += magicItem.GetTotalEffectValue(MagicEffectType.ModifyMovementSpeed); } var itemMovementModDisplay = (itemMovementModifier == 0) ? "0%" : $"{itemMovementModifier:+0;-0}%"; float movementModifier = localPlayer.GetEquipmentMovementModifier(); var totalMovementModifier = movementModifier * 100f; var color = (removePenalty || magicMovement) ? magicColor : "orange"; text.Append($"\n$item_movement_modifier: <color={color}>{itemMovementModDisplay}</color> ($item_total:<color=yellow>{totalMovementModifier:+0;-0}%</color>)"); } // Add magic item effects here text.Append(magicItem.GetTooltip()); // Set stuff if (!string.IsNullOrEmpty(item.m_shared.m_setName)) { AddSetTooltip(item, text); } __result = text.ToString(); return(false); }
public static string GetTooltip(ItemDrop.ItemData item, int qualityLevel, bool crafting) { Player localPlayer = Player.m_localPlayer; StringBuilder text = new StringBuilder(256); text.Append(item.m_shared.m_description); text.Append("\n\n"); if (item.m_shared.m_dlc.Length > 0) { text.Append("\n<color=aqua>$item_dlc</color>"); } ItemDrop.ItemData.AddHandedTip(item, text); if (item.m_crafterID != 0L) { text.AppendFormat("\n$item_crafter: <color=orange>{0}</color>", (object)item.m_crafterName); } if (!item.m_shared.m_teleportable) { text.Append("\n<color=orange>$item_noteleport</color>"); } if (item.m_shared.m_value > 0) { text.AppendFormat("\n$item_value: <color=orange>{0} ({1})</color>", (object)item.GetValue(), (object)item.m_shared.m_value); } text.AppendFormat("\n$item_weight: <color=orange>{0}</color>", (object)item.GetWeight().ToString("0.0")); if (item.m_shared.m_maxQuality > 1) { text.AppendFormat("\n$item_quality: <color=orange>{0}</color>", (object)qualityLevel); } float num; if (item.m_shared.m_useDurability) { if (crafting) { float maxDurability = item.GetMaxDurability(qualityLevel); text.AppendFormat("\n$item_durability: <color=orange>{0}</color>", (object)maxDurability); } else { float maxDurability = item.GetMaxDurability(qualityLevel); float durability = item.m_durability; StringBuilder stringBuilder = text; num = item.GetDurabilityPercentage() * 100f; string str1 = num.ToString("0"); string str2 = durability.ToString("0"); string str3 = maxDurability.ToString("0"); stringBuilder.AppendFormat("\n$item_durability: <color=orange>{0}%</color> <color=yellow>({1}/{2})</color>", (object)str1, (object)str2, (object)str3); } if (item.m_shared.m_canBeReparied) { Recipe recipe = ObjectDB.instance.GetRecipe(item); if ((UnityEngine.Object)recipe != (UnityEngine.Object)null) { int minStationLevel = recipe.m_minStationLevel; text.AppendFormat("\n$item_repairlevel: <color=orange>{0}</color>", (object)minStationLevel.ToString()); } } } switch (item.m_shared.m_itemType) { case ItemDrop.ItemData.ItemType.Consumable: if ((double)item.m_shared.m_food > 0.0) { text.AppendFormat("\n$item_food_health: <color=orange>{0}</color>", (object)item.m_shared.m_food); text.AppendFormat("\n$item_food_stamina: <color=orange>{0}</color>", (object)item.m_shared.m_foodStamina); text.AppendFormat("\n$item_food_duration: <color=orange>{0}s</color>", (object)item.m_shared.m_foodBurnTime); text.AppendFormat("\n$item_food_regen: <color=orange>{0} hp/tick</color>", (object)item.m_shared.m_foodRegen); } string statusEffectTooltip1 = item.GetStatusEffectTooltip(); if (statusEffectTooltip1.Length > 0) { text.Append("\n\n"); text.Append(statusEffectTooltip1); break; } break; case ItemDrop.ItemData.ItemType.OneHandedWeapon: case ItemDrop.ItemData.ItemType.Bow: case ItemDrop.ItemData.ItemType.TwoHandedWeapon: case ItemDrop.ItemData.ItemType.Torch: text.Append(item.GetDamage(qualityLevel).GetTooltipString(item.m_shared.m_skillType)); StringBuilder stringBuilder1 = text; // ISSUE: variable of a boxed type __Boxed <float> baseBlockPower1 = (ValueType)item.GetBaseBlockPower(qualityLevel); num = item.GetBlockPowerTooltip(qualityLevel); string str4 = num.ToString("0"); stringBuilder1.AppendFormat("\n$item_blockpower: <color=orange>{0}</color> <color=yellow>({1})</color>", (object)baseBlockPower1, (object)str4); if ((double)item.m_shared.m_timedBlockBonus > 1.0) { text.AppendFormat("\n$item_deflection: <color=orange>{0}</color>", (object)item.GetDeflectionForce(qualityLevel)); text.AppendFormat("\n$item_parrybonus: <color=orange>{0}x</color>", (object)item.m_shared.m_timedBlockBonus); } text.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", (object)item.m_shared.m_attackForce); text.AppendFormat("\n$item_backstab: <color=orange>{0}x</color>", (object)item.m_shared.m_backstabBonus); string projectileTooltip = item.GetProjectileTooltip(qualityLevel); if (projectileTooltip.Length > 0) { text.Append("\n\n"); text.Append(projectileTooltip); } string statusEffectTooltip2 = item.GetStatusEffectTooltip(); if (statusEffectTooltip2.Length > 0) { text.Append("\n\n"); text.Append(statusEffectTooltip2); break; } break; case ItemDrop.ItemData.ItemType.Shield: StringBuilder stringBuilder2 = text; // ISSUE: variable of a boxed type __Boxed <float> baseBlockPower2 = (ValueType)item.GetBaseBlockPower(qualityLevel); num = item.GetBlockPowerTooltip(qualityLevel); string str5 = num.ToString("0"); stringBuilder2.AppendFormat("\n$item_blockpower: <color=orange>{0}</color> <color=yellow>({1})</color>", (object)baseBlockPower2, (object)str5); if ((double)item.m_shared.m_timedBlockBonus > 1.0) { text.AppendFormat("\n$item_deflection: <color=orange>{0}</color>", (object)item.GetDeflectionForce(qualityLevel)); text.AppendFormat("\n$item_parrybonus: <color=orange>{0}x</color>", (object)item.m_shared.m_timedBlockBonus); break; } break; case ItemDrop.ItemData.ItemType.Helmet: case ItemDrop.ItemData.ItemType.Chest: case ItemDrop.ItemData.ItemType.Legs: case ItemDrop.ItemData.ItemType.Shoulder: text.AppendFormat("\n$item_armor: <color=orange>{0}</color>", (object)item.GetArmor(qualityLevel)); string modifiersTooltipString = SE_Stats.GetDamageModifiersTooltipString(item.m_shared.m_damageModifiers); if (modifiersTooltipString.Length > 0) { text.Append(modifiersTooltipString); } string statusEffectTooltip3 = item.GetStatusEffectTooltip(); if (statusEffectTooltip3.Length > 0) { text.Append("\n\n"); text.Append(statusEffectTooltip3); break; } break; case ItemDrop.ItemData.ItemType.Ammo: text.Append(item.GetDamage(qualityLevel).GetTooltipString(item.m_shared.m_skillType)); text.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", (object)item.m_shared.m_attackForce); break; } if ((double)item.m_shared.m_movementModifier != 0.0 && (UnityEngine.Object)localPlayer != (UnityEngine.Object)null) { float movementModifier = localPlayer.GetEquipmentMovementModifier(); StringBuilder stringBuilder3 = text; num = item.m_shared.m_movementModifier * 100f; string str1 = num.ToString("+0;-0"); num = movementModifier * 100f; string str2 = num.ToString("+0;-0"); stringBuilder3.AppendFormat("\n$item_movement_modifier: <color=orange>{0}%</color> ($item_total:<color=yellow>{1}%</color>)", (object)str1, (object)str2); } string statusEffectTooltip4 = item.GetSetStatusEffectTooltip(); if (statusEffectTooltip4.Length > 0) { text.AppendFormat("\n\n$item_seteffect (<color=orange>{0}</color> $item_parts):<color=orange>{1}</color>", (object)item.m_shared.m_setSize, (object)statusEffectTooltip4); } return(text.ToString()); }
public static Tuple <string, string> PreprocessTooltipStat(ItemDrop.ItemData item, string label, string value) { if (item.IsMagic(out var magicItem)) { var magicColor = magicItem.GetColorString(); var allMagic = magicItem.HasEffect(MagicEffectType.ModifyDamage); var physMagic = magicItem.HasEffect(MagicEffectType.ModifyPhysicalDamage); var elemMagic = magicItem.HasEffect(MagicEffectType.ModifyElementalDamage); var bluntMagic = magicItem.HasEffect(MagicEffectType.AddBluntDamage); var slashMagic = magicItem.HasEffect(MagicEffectType.AddSlashingDamage); var pierceMagic = magicItem.HasEffect(MagicEffectType.AddPiercingDamage); var fireMagic = magicItem.HasEffect(MagicEffectType.AddFireDamage); var frostMagic = magicItem.HasEffect(MagicEffectType.AddFrostDamage); var lightningMagic = magicItem.HasEffect(MagicEffectType.AddLightningDamage); var poisonMagic = magicItem.HasEffect(MagicEffectType.AddPoisonDamage); var spiritMagic = magicItem.HasEffect(MagicEffectType.AddSpiritDamage); switch (label) { case "$item_durability": if (magicItem.HasEffect(MagicEffectType.Indestructible)) { value = $"<color={magicColor}>Indestructible</color>"; } else if (magicItem.HasEffect(MagicEffectType.ModifyDurability)) { value = $"<color={magicColor}>{value}</color>"; } break; case "$item_weight": if (magicItem.HasEffect(MagicEffectType.ReduceWeight) || magicItem.HasEffect(MagicEffectType.Weightless)) { value = $"<color={magicColor}>{value}</color>"; } break; case "$inventory_damage": if (allMagic) { value = $"<color={magicColor}>{value}</color>"; } break; case "$inventory_blunt": if (allMagic || physMagic || bluntMagic) { value = $"<color={magicColor}>{value}</color>"; } break; case "$inventory_slash": if (allMagic || physMagic || slashMagic) { value = $"<color={magicColor}>{value}</color>"; } break; case "$inventory_pierce": if (allMagic || physMagic || pierceMagic) { value = $"<color={magicColor}>{value}</color>"; } break; case "$inventory_fire": if (allMagic || elemMagic || fireMagic) { value = $"<color={magicColor}>{value}</color>"; } break; case "$inventory_frost": if (allMagic || elemMagic || frostMagic) { value = $"<color={magicColor}>{value}</color>"; } break; case "$inventory_lightning": if (allMagic || elemMagic || lightningMagic) { value = $"<color={magicColor}>{value}</color>"; } break; case "$inventory_poison": if (allMagic || elemMagic || poisonMagic) { value = $"<color={magicColor}>{value}</color>"; } break; case "$inventory_spirit": if (allMagic || elemMagic || spiritMagic) { value = $"<color={magicColor}>{value}</color>"; } break; case "$item_backstab": if (magicItem.HasEffect(MagicEffectType.ModifyBackstab)) { var totalBackstabBonusMod = magicItem.GetTotalEffectValue(MagicEffectType.ModifyBackstab, 0.01f); var backstabValue = item.m_shared.m_backstabBonus * (1.0f + totalBackstabBonusMod); value = $"<color={magicColor}>{backstabValue:0.#}x</color>"; } break; case "$item_blockpower": if (magicItem.HasEffect(MagicEffectType.ModifyBlockPower)) { var baseBlockPower = item.GetBaseBlockPower(item.m_quality); var blockPowerPercentageString = item.GetBlockPowerTooltip(item.m_quality).ToString("0"); value = $"<color={magicColor}>{baseBlockPower}</color> <color={magicColor}>({blockPowerPercentageString})</color>"; } break; case "$item_deflection": if (magicItem.HasEffect(MagicEffectType.ModifyParry)) { value = $"<color={magicColor}>{item.GetDeflectionForce(item.m_quality)}</color>"; } break; case "$item_parrybonus": if (magicItem.HasEffect(MagicEffectType.ModifyParry)) { var totalParryBonusMod = magicItem.GetTotalEffectValue(MagicEffectType.ModifyParry, 0.01f); var timedBlockBonus = item.m_shared.m_timedBlockBonus * (1.0f + totalParryBonusMod); value = $"<color={magicColor}>{timedBlockBonus:0.#}x</color>"; } break; case "$item_armor": if (magicItem.HasEffect(MagicEffectType.ModifyArmor)) { value = $"<color={magicColor}>{value}</color>"; } break; } if (label.StartsWith("$item_movement_modifier") && (magicItem.HasEffect(MagicEffectType.RemoveSpeedPenalty) || magicItem.HasEffect(MagicEffectType.ModifyMovementSpeed))) { var colorIndex = label.IndexOf("<color", StringComparison.Ordinal); if (colorIndex >= 0) { var sb = new StringBuilder(label); sb.Remove(colorIndex, "<color=#XXXXXX>".Length); sb.Insert(colorIndex, $"<color={magicColor}>"); var itemMovementModDisplay = MagicItemTooltip_ItemDrop_Patch.GetMovementModifier(item, magicItem, out _, out _); var valueIndex = colorIndex + "<color=#XXXXXX>".Length; var percentIndex = label.IndexOf("%", valueIndex, StringComparison.Ordinal); sb.Remove(valueIndex, percentIndex - valueIndex + 1); sb.Insert(valueIndex, itemMovementModDisplay); label = sb.ToString(); } } } return(new Tuple <string, string>(label, value)); }
private static void ItemType(int qualityLevel) { switch (_item.m_shared.m_itemType) { case ItemDrop.ItemData.ItemType.Consumable: { if (_item.m_shared.m_food > 0f) { _sb.AppendFormat("\n$item_food_health: <color=orange>{0}</color>", _item.m_shared.m_food); _sb.AppendFormat("\n$item_food_stamina: <color=orange>{0}</color>", _item.m_shared.m_foodStamina); _sb.AppendFormat("\n$item_food_duration: <color=orange>{0}s</color>", _item.m_shared.m_foodBurnTime); _sb.AppendFormat("\n$item_food_regen: <color=orange>{0} hp/tick</color>", _item.m_shared.m_foodRegen); } string statusEffectTooltip = _item.GetStatusEffectTooltip(); if (statusEffectTooltip.Length > 0) { _sb.Append("\n\n"); _sb.Append(statusEffectTooltip); } break; } case ItemDrop.ItemData.ItemType.OneHandedWeapon: case ItemDrop.ItemData.ItemType.Bow: case ItemDrop.ItemData.ItemType.TwoHandedWeapon: case ItemDrop.ItemData.ItemType.Torch: { _sb.Append(_item.GetDamage(qualityLevel).GetTooltipString(_item.m_shared.m_skillType)); _sb.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", _item.m_shared.m_attackForce); _sb.AppendFormat("\n$item_backstab: <color=orange>{0}x</color>", _item.m_shared.m_backstabBonus); _sb.AppendFormat("\n\n$item_blockpower: <color=orange>{0}</color> <color=yellow>({1})</color>", _item.GetBaseBlockPower(qualityLevel), _item.GetBlockPowerTooltip(qualityLevel).ToString("0")); if (_item.m_shared.m_timedBlockBonus > 1f) { _sb.AppendFormat("\n$item_deflection: <color=orange>{0}</color>", _item.GetDeflectionForce(qualityLevel)); _sb.AppendFormat("\n$item_parrybonus: <color=orange>{0}x</color>", _item.m_shared.m_timedBlockBonus); } string projectileTooltip = _item.GetProjectileTooltip(qualityLevel); if (projectileTooltip.Length > 0) { _sb.Append("\n\n"); _sb.Append(projectileTooltip); } string statusEffectTooltip2 = _item.GetStatusEffectTooltip(); if (statusEffectTooltip2.Length > 0) { _sb.Append("\n\n"); _sb.Append(statusEffectTooltip2); } _sb.Append("\n"); break; } case ItemDrop.ItemData.ItemType.Shield: _sb.AppendFormat("\n$item_blockpower: <color=orange>{0}</color> <color=yellow>({1})</color>", _item.GetBaseBlockPower(qualityLevel), _item.GetBlockPowerTooltip(qualityLevel).ToString("0")); if (_item.m_shared.m_timedBlockBonus > 1f) { _sb.AppendFormat("\n$item_deflection: <color=orange>{0}</color>", _item.GetDeflectionForce(qualityLevel)); _sb.AppendFormat("\n$item_parrybonus: <color=orange>{0}x</color>", _item.m_shared.m_timedBlockBonus); _sb.Append("\n"); } break; case ItemDrop.ItemData.ItemType.Helmet: case ItemDrop.ItemData.ItemType.Chest: case ItemDrop.ItemData.ItemType.Legs: case ItemDrop.ItemData.ItemType.Shoulder: { _sb.AppendFormat("\n$item_armor: <color=orange>{0}</color>", _item.GetArmor(qualityLevel)); /* * string damageModifiersTooltipString = SE_Stats.GetDamageModifiersTooltipString(_item.m_shared.m_damageModifiers); * if (damageModifiersTooltipString.Length > 0) * { * _sb.Append(damageModifiersTooltipString); * } */ string statusEffectTooltip3 = _item.GetStatusEffectTooltip(); if (statusEffectTooltip3.Length > 0) { _sb.Append("\n\n"); _sb.Append(statusEffectTooltip3); } break; } case ItemDrop.ItemData.ItemType.Ammo: _sb.Append(_item.GetDamage(qualityLevel).GetTooltipString(_item.m_shared.m_skillType)); _sb.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", _item.m_shared.m_attackForce); break; } }