public static List <string> GetSetPieces(string setName) { if (UniqueLegendaryHelper.TryGetLegendarySetInfo(setName, out var setInfo)) { return(setInfo.LegendaryIDs); } return(GetMundaneSetPieces(ObjectDB.instance, setName)); }
public LegendaryInfo GetLegendaryInfo() { if (IsUniqueLegendary()) { UniqueLegendaryHelper.TryGetLegendaryInfo(LegendaryID, out var legendaryInfo); return(legendaryInfo); } return(null); }
public static string GetDescription(this ItemDrop.ItemData itemData) { if (itemData.IsMagic()) { var magicItem = itemData.GetMagicItem(); if (magicItem.IsUniqueLegendary() && UniqueLegendaryHelper.TryGetLegendaryInfo(magicItem.LegendaryID, out var legendaryInfo)) { return(legendaryInfo.Description); } } return(itemData.m_shared.m_description); }
private static string GetSetItemDisplayName(string setItemName, bool isMundane) { if (isMundane) { return(setItemName); } else if (UniqueLegendaryHelper.TryGetLegendaryInfo(setItemName, out var legendaryInfo)) { return(legendaryInfo.Name); } return(setItemName); }
public static HashSet <LegendarySetInfo> GetEquippedSets(this Player player) { var sets = new HashSet <LegendarySetInfo>(); foreach (var itemData in player.GetEquipment()) { if (itemData.IsMagic(out var magicItem) && magicItem.IsLegendarySetItem()) { if (UniqueLegendaryHelper.TryGetLegendarySetInfo(magicItem.SetID, out var setInfo)) { sets.Add(setInfo); } } } return(sets); }
public static int GetSetSize(this ItemDrop.ItemData itemData) { var setID = itemData.GetSetID(out var isMundane); if (!string.IsNullOrEmpty(setID)) { if (isMundane) { return(itemData.m_shared.m_setSize); } else if (UniqueLegendaryHelper.TryGetLegendarySetInfo(setID, out var setInfo)) { return(setInfo.LegendaryIDs.Count); } } return(0); }
private static void SpawnMagicItemSet(Terminal terminal, string[] args) { if (args.Length < 2) { terminal.AddString("> Specify Set ID"); return; } var setID = args[1]; terminal.AddString($"magicitemset - setID:{setID}"); if (!UniqueLegendaryHelper.TryGetLegendarySetInfo(setID, out var setInfo)) { terminal.AddString($"> Could not find set info for setID: ({setID})"); return; } foreach (var legendaryID in setInfo.LegendaryIDs) { SpawnLegendaryItemHelper(legendaryID, null, terminal); } }
public static ItemDrop.ItemData MakeUnique(ItemDrop.ItemData itemDrop, ExtendedItemData itemData, EpicLootItemConfiguration config) { var uniqueIds = config.UniqueIDs.Value.SplitByComma(); if (uniqueIds.Count > 0) { var randomId = uniqueIds[Random.Range(0, uniqueIds.Count)]; if (UniqueLegendaryHelper.TryGetLegendaryInfo(randomId, out LegendaryInfo legendaryInfo)) { MagicItem magicItem = new MagicItem { Rarity = ItemRarity.Legendary, LegendaryID = legendaryInfo.ID, DisplayName = legendaryInfo.Name, }; if (!legendaryInfo.Requirements.CheckRequirements(itemDrop, magicItem)) { Log.LogWarning($"Attempted to roll Epic Loot unique legendary with id '{randomId}' for Drop That config entry '{config.SectionKey}' but requirements were not met. Skipping."); return(null); } if (legendaryInfo.IsSetItem) { magicItem.SetID = UniqueLegendaryHelper.GetSetForLegendaryItem(legendaryInfo); } if ((legendaryInfo.GuaranteedMagicEffects?.Count ?? 0) > 0) { foreach (var effect in legendaryInfo.GuaranteedMagicEffects) { if (MagicItemEffectDefinitions.AllDefinitions.TryGetValue(effect.Type, out MagicItemEffectDefinition effectDefinition)) { MagicItemEffect itemEffect = LootRoller.RollEffect(effectDefinition, ItemRarity.Legendary, effect.Values); magicItem.Effects.Add(itemEffect); } else { Log.LogWarning($"Unable to find a guaranteed Epic Loot magic effect '{effect.Type}' while rolling unique legendary with id '{randomId}'. Skipping effect."); } } } var randomEffectCount = LootRoller.RollEffectCountPerRarity(ItemRarity.Legendary) - magicItem.Effects.Count; if (randomEffectCount > 0) { List <MagicItemEffectDefinition> availableEffects = MagicItemEffectDefinitions.GetAvailableEffects(itemData, magicItem, -1); for (int i = 0; i < randomEffectCount; ++i) { MagicItemEffectDefinition effectDefinition = RollWeightedEffect(availableEffects, false); MagicItemEffect itemEffect = LootRoller.RollEffect(effectDefinition, ItemRarity.Legendary); magicItem.Effects.Add(itemEffect); } } MagicItemComponent magicComponent = itemData.AddComponent <MagicItemComponent>(); magicComponent.SetMagicItem(magicItem); InitializeMagicItem.Invoke(null, new[] { itemData }); return(itemData); } else { Log.LogWarning($"Attempted to roll Epic Loot unique legendary with id '{randomId}' but was unable to find matching info registered in Epic Loot."); } } return(null); }
public static MagicItem RollMagicItem(ItemRarity rarity, ExtendedItemData baseItem, float luckFactor) { var cheatLegendary = !string.IsNullOrEmpty(CheatForceLegendary); if (cheatLegendary) { rarity = ItemRarity.Legendary; } var magicItem = new MagicItem { Rarity = rarity }; var effectCount = CheatEffectCount >= 1 ? CheatEffectCount : RollEffectCountPerRarity(magicItem.Rarity); if (rarity == ItemRarity.Legendary) { LegendaryInfo legendary = null; if (cheatLegendary) { UniqueLegendaryHelper.TryGetLegendaryInfo(CheatForceLegendary, out legendary); } if (legendary == null) { var roll = Random.Range(0.0f, 1.0f); var rollSetItem = roll < EpicLoot.SetItemDropChance.Value; Debug.LogWarning($"Rolling Legendary: set={rollSetItem} ({roll}/{EpicLoot.SetItemDropChance.Value})"); var availableLegendaries = UniqueLegendaryHelper.GetAvailableLegendaries(baseItem, magicItem, rollSetItem); Debug.LogWarning($"Available Legendaries: {string.Join(", ", availableLegendaries.Select(x => x.ID))}"); _weightedLegendaryTable.Setup(availableLegendaries, x => x.SelectionWeight); legendary = _weightedLegendaryTable.Roll(); } if (legendary.IsSetItem) { var setID = UniqueLegendaryHelper.GetSetForLegendaryItem(legendary); magicItem.SetID = setID; } if (!UniqueLegendaryHelper.IsGenericLegendary(legendary)) { magicItem.LegendaryID = legendary.ID; magicItem.DisplayName = legendary.Name; if (legendary.GuaranteedEffectCount > 0) { effectCount = legendary.GuaranteedEffectCount; } foreach (var guaranteedMagicEffect in legendary.GuaranteedMagicEffects) { var effectDef = MagicItemEffectDefinitions.Get(guaranteedMagicEffect.Type); if (effectDef == null) { EpicLoot.LogError($"Could not find magic effect (Type={guaranteedMagicEffect.Type}) while creating legendary item (ID={legendary.ID})"); continue; } var effect = RollEffect(effectDef, ItemRarity.Legendary, guaranteedMagicEffect.Values); magicItem.Effects.Add(effect); effectCount--; } } } for (var i = 0; i < effectCount; i++) { var availableEffects = MagicItemEffectDefinitions.GetAvailableEffects(baseItem, magicItem); if (availableEffects.Count == 0) { EpicLoot.LogWarning($"Tried to add more effects to magic item ({baseItem.m_shared.m_name}) but there were no more available effects. " + $"Current Effects: {(string.Join(", ", magicItem.Effects.Select(x => x.EffectType.ToString())))}"); break; } _weightedEffectTable.Setup(availableEffects, x => x.SelectionWeight); var effectDef = _weightedEffectTable.Roll(); var effect = RollEffect(effectDef, magicItem.Rarity); magicItem.Effects.Add(effect); } if (string.IsNullOrEmpty(magicItem.DisplayName)) { magicItem.DisplayName = MagicItemNames.GetNameForItem(baseItem, magicItem); } return(magicItem); }
private static void SpawnLegendaryItemHelper(string legendaryID, string itemType, Terminal context) { if (!UniqueLegendaryHelper.TryGetLegendaryInfo(legendaryID, out var legendaryInfo)) { if (context != null) { context.AddString($"> Could not find info for legendaryID: ({legendaryID})"); } return; } if (string.IsNullOrEmpty(itemType)) { var dummyMagicItem = new MagicItem { Rarity = ItemRarity.Legendary }; var allowedItems = new List <ItemDrop>(); foreach (var itemName in GatedItemTypeHelper.ItemInfoByID.Keys) { var itemPrefab = ObjectDB.instance.GetItemPrefab(itemName); if (itemPrefab == null) { continue; } var itemDrop = itemPrefab.GetComponent <ItemDrop>(); if (itemDrop == null) { continue; } var itemData = itemDrop.m_itemData; if (legendaryInfo.Requirements.CheckRequirements(itemData, dummyMagicItem)) { allowedItems.Add(itemDrop); } } itemType = allowedItems.LastOrDefault()?.name; } if (string.IsNullOrEmpty(itemType)) { itemType = "Club"; } var loot = new LootTable { Object = "Console", Drops = new[] { new float[] { 1, 1 } }, Loot = new[] { new LootDrop { Item = itemType, Rarity = new float[] { 0, 0, 0, 1 } } } }; LootRoller.CheatForceLegendary = legendaryID; var previousDisableGatingState = LootRoller.CheatDisableGating; LootRoller.CheatDisableGating = true; var randomOffset = UnityEngine.Random.insideUnitSphere; var dropPoint = Player.m_localPlayer.transform.position + Player.m_localPlayer.transform.forward * 3 + Vector3.up * 1.5f + randomOffset; LootRoller.RollLootTableAndSpawnObjects(loot, 1, loot.Object, dropPoint); LootRoller.CheatForceLegendary = null; LootRoller.CheatDisableGating = previousDisableGatingState; }
public static LegendarySetInfo GetLegendarySetInfo(this ItemDrop.ItemData itemData) { UniqueLegendaryHelper.TryGetLegendarySetInfo(itemData.GetSetID(), out var setInfo); return(setInfo); }
public static string GetEffectText(MagicItemEffect effect, ItemRarity rarity, bool showRange, string legendaryID, MagicItemEffectDefinition.ValueDef valuesOverride) { var effectDef = MagicItemEffectDefinitions.Get(effect.EffectType); var result = GetEffectText(effectDef, effect.EffectValue); var values = valuesOverride ?? (string.IsNullOrEmpty(legendaryID) ? effectDef.GetValuesForRarity(rarity) : UniqueLegendaryHelper.GetLegendaryEffectValues(legendaryID, effect.EffectType)); if (showRange && values != null) { if (!Mathf.Approximately(values.MinValue, values.MaxValue)) { result += $" [{values.MinValue}-{values.MaxValue}]"; } } return(result); }