public static void AddMagicEffectsPage(TextsDialog textsDialog, Player player) { var magicEffects = new Dictionary <string, List <KeyValuePair <MagicItemEffect, ItemDrop.ItemData> > >(); var allEquipment = player.GetEquipment(); foreach (var item in allEquipment) { if (item.IsMagic()) { foreach (var effect in item.GetMagicItem().Effects) { if (!magicEffects.TryGetValue(effect.EffectType, out var effectList)) { effectList = new List <KeyValuePair <MagicItemEffect, ItemDrop.ItemData> >(); magicEffects.Add(effect.EffectType, effectList); } effectList.Add(new KeyValuePair <MagicItemEffect, ItemDrop.ItemData>(effect, item)); } } } var t = new StringBuilder(); foreach (var entry in magicEffects) { var effectType = entry.Key; var effectDef = MagicItemEffectDefinitions.Get(effectType); var sum = entry.Value.Sum(x => x.Key.EffectValue); var totalEffectText = MagicItem.GetEffectText(effectDef, sum); var highestRarity = (ItemRarity)entry.Value.Max(x => (int)x.Value.GetRarity()); t.AppendLine($"<size=20><color={EpicLoot.GetRarityColor(highestRarity)}>{totalEffectText}</color></size>"); foreach (var entry2 in entry.Value) { var effect = entry2.Key; var item = entry2.Value; t.AppendLine($" <color=silver>- {MagicItem.GetEffectText(effect, item.GetRarity(), false)} ({item.GetDecoratedName()})</color>"); } t.AppendLine(); } textsDialog.m_texts.Insert(EpicLoot.HasAuga ? 0 : 2, new TextsDialog.TextInfo( Localization.instance.Localize($"{EpicLoot.GetMagicEffectPip(false)} $mod_epicloot_active_magic_effects"), Localization.instance.Localize(t.ToString()))); }
public static string GetSetTooltip(this ItemDrop.ItemData item) { var text = new StringBuilder(); var setID = item.GetSetID(out var isMundane); var setSize = item.GetSetSize(); var setPieces = ItemDataExtensions.GetSetPieces(setID); var currentSetEquipped = Player.m_localPlayer.GetEquippedSetPieces(setID); var setDisplayName = GetSetDisplayName(item, isMundane); text.Append($"\n\n<color={EpicLoot.GetSetItemColor()}> $mod_epicloot_set: {setDisplayName} ({currentSetEquipped.Count}/{setSize}):</color>"); foreach (var setItemName in setPieces) { var isEquipped = IsSetItemEquipped(currentSetEquipped, setItemName, isMundane); var color = isEquipped ? "white" : "grey"; var displayName = GetSetItemDisplayName(setItemName, isMundane); text.Append($"\n <color={color}>{displayName}</color>"); } if (isMundane) { var setEffectColor = currentSetEquipped.Count == setSize?EpicLoot.GetSetItemColor() : "grey"; text.Append($"\n<color={setEffectColor}>({setSize}) ‣ {item.GetSetStatusEffectTooltip().Replace("\n", " ")}</color>"); } else { var setInfo = item.GetLegendarySetInfo(); foreach (var setBonusInfo in setInfo.SetBonuses.OrderBy(x => x.Count)) { var hasEquipped = currentSetEquipped.Count >= setBonusInfo.Count; var effectDef = MagicItemEffectDefinitions.Get(setBonusInfo.Effect.Type); if (effectDef == null) { EpicLoot.LogError($"Set Tooltip: Could not find effect ({setBonusInfo.Effect.Type}) for set ({setInfo.ID}) bonus ({setBonusInfo.Count})!"); continue; } var display = MagicItem.GetEffectText(effectDef, setBonusInfo.Effect.Values?.MinValue ?? 0); text.Append($"\n<color={(hasEquipped ? EpicLoot.GetSetItemColor() : "grey")}>({setBonusInfo.Count}) ‣ {display}</color>"); } } return(text.ToString()); }