public static void OnNewExtendedItemData(ExtendedItemData itemdata) { if (itemdata.GetComponent <ShippableItemData>() == null) { itemdata.AddComponent <ShippableItemData>(); } }
private void MakeMagic(ItemRarity rarity, ItemDrop itemDrop, ExtendedItemData itemData, Vector3 position) { MagicItemComponent magicComponent = itemData.AddComponent <MagicItemComponent>(); var luck = LootRoller.GetLuckFactor(position); MagicItem magicItem = magicItem = LootRoller.RollMagicItem(rarity, itemData, luck); magicComponent.SetMagicItem(magicItem); itemDrop.m_itemData = itemData; InitializeMagicItem.Invoke(null, new[] { itemData }); }
private static List <GameObject> RollLootTableInternal(LootTable lootTable, string objectName, Vector3 dropPoint, bool initializeObject) { var results = new List <GameObject>(); _weightedDropCountTable.Setup(lootTable.Drops, dropPair => dropPair.Length == 2 ? dropPair[1] : 1); var dropCountRollResult = _weightedDropCountTable.Roll(); var dropCount = dropCountRollResult.Length >= 1 ? dropCountRollResult[0] : 0; if (dropCount == 0) { return(results); } _weightedLootTable.Setup(lootTable.Loot, x => x.Weight); var selectedDrops = _weightedLootTable.Roll(dropCount); foreach (var ld in selectedDrops) { var lootDrop = ResolveLootDrop(ld, ld.Rarity); var itemPrefab = ObjectDB.instance.GetItemPrefab(lootDrop.Item); if (itemPrefab == null) { Debug.LogError($"Tried to spawn loot ({lootDrop.Item}) for ({objectName}), but the item prefab was not found!"); continue; } var randomRotation = Quaternion.Euler(0.0f, Random.Range(0.0f, 360.0f), 0.0f); ZNetView.m_forceDisableInit = !initializeObject; var item = Object.Instantiate(itemPrefab, dropPoint, randomRotation); ZNetView.m_forceDisableInit = false; var itemDrop = item.GetComponent <ItemDrop>(); if (EpicLoot.CanBeMagicItem(itemDrop.m_itemData) && !ArrayUtils.IsNullOrEmpty(lootDrop.Rarity)) { var itemData = new ExtendedItemData(itemDrop.m_itemData); var magicItemComponent = itemData.AddComponent <MagicItemComponent>(); var magicItem = RollMagicItem(lootDrop, itemData); magicItemComponent.SetMagicItem(magicItem); itemDrop.m_itemData = itemData; InitializeMagicItem(itemData); MagicItemGenerated?.Invoke(itemData, magicItem); } results.Add(item); } return(results); }
public static ItemDrop.ItemData MakeMagic(ItemRarity rarity, ItemDrop.ItemData itemDrop, ExtendedItemData itemData, Vector3 position) { MagicItemComponent magicComponent = itemData.AddComponent <MagicItemComponent>(); var luck = LootRoller.GetLuckFactor(position); MagicItem magicItem = LootRoller.RollMagicItem(rarity, itemData, luck); #if DEBUG Log.LogTrace("\t" + magicItem.Effects.Join(x => x.EffectType)); #endif magicComponent.SetMagicItem(magicItem); InitializeMagicItem.Invoke(null, new[] { itemData }); return(itemData); }
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); }
private static List <GameObject> RollLootTableInternal(LootTable lootTable, int level, string objectName, Vector3 dropPoint, bool initializeObject) { var results = new List <GameObject>(); if (lootTable == null || level <= 0 || string.IsNullOrEmpty(objectName)) { return(results); } var luckFactor = GetLuckFactor(dropPoint); var drops = GetDropsForLevel(lootTable, level); if (drops.Count == 0) { return(results); } if (EpicLoot.AlwaysDropCheat) { drops = drops.Where(x => x.Key > 0).ToList(); } _weightedDropCountTable.Setup(drops, dropPair => dropPair.Value); var dropCountRollResult = _weightedDropCountTable.Roll(); var dropCount = dropCountRollResult.Key; if (dropCount == 0) { return(results); } var loot = GetLootForLevel(lootTable, level); _weightedLootTable.Setup(loot, x => x.Weight); var selectedDrops = _weightedLootTable.Roll(dropCount); foreach (var ld in selectedDrops) { if (ld == null) { EpicLoot.LogError($"Loot drop was null! RollLootTableInternal({lootTable.Object}, {level}, {objectName})"); continue; } var lootDrop = ResolveLootDrop(ld); var itemID = CheatDisableGating ? lootDrop.Item : GatedItemTypeHelper.GetGatedItemID(lootDrop.Item); var itemPrefab = ObjectDB.instance.GetItemPrefab(itemID); if (itemPrefab == null) { EpicLoot.LogError($"Tried to spawn loot ({itemID}) for ({objectName}), but the item prefab was not found!"); continue; } var randomRotation = Quaternion.Euler(0.0f, Random.Range(0.0f, 360.0f), 0.0f); ZNetView.m_forceDisableInit = !initializeObject; var item = Object.Instantiate(itemPrefab, dropPoint, randomRotation); ZNetView.m_forceDisableInit = false; var itemDrop = item.GetComponent <ItemDrop>(); if (EpicLoot.CanBeMagicItem(itemDrop.m_itemData) && !ArrayUtils.IsNullOrEmpty(lootDrop.Rarity)) { var itemData = new ExtendedItemData(itemDrop.m_itemData); var magicItemComponent = itemData.AddComponent <MagicItemComponent>(); var magicItem = RollMagicItem(lootDrop, itemData, luckFactor); if (CheatForceMagicEffect) { AddDebugMagicEffects(magicItem); } magicItemComponent.SetMagicItem(magicItem); itemDrop.m_itemData = itemData; itemDrop.Save(); InitializeMagicItem(itemData); MagicItemGenerated?.Invoke(itemData, magicItem); } results.Add(item); } return(results); }