public static List <ItemDefinition> GenerateLoot(CurioResult curioResult, RaidInfo raid) { List <ItemDefinition> lootItems = new List <ItemDefinition>(); for (int i = 0; i < curioResult.Draws; i++) { LootEntry entry = GetLootEntry(curioResult.Item, raid); switch (entry.Type) { case LootType.Item: LootEntryItem itemEntry = entry as LootEntryItem; ItemDefinition data = new ItemDefinition(); data.Type = itemEntry.ItemType; data.Id = itemEntry.ItemId; data.Amount = itemEntry.ItemAmount; lootItems.Add(data); break; case LootType.Journal: LootEntryJournal journalEntry = entry as LootEntryJournal; ItemDefinition dataJournal = new ItemDefinition(); dataJournal.Type = "journal_page"; if (journalEntry.SpecificId.HasValue) { dataJournal.Id = journalEntry.SpecificId.Value.ToString(); } else { dataJournal.Id = RandomSolver.Next(journalEntry.MinIndex, journalEntry.MaxIndex + 1).ToString(); } dataJournal.Amount = 1; lootItems.Add(dataJournal); break; case LootType.Trinket: LootEntryTrinket trinketEntry = entry as LootEntryTrinket; var trinketList = DarkestDungeonManager.Data.Items["trinket"].Values.ToList(). FindAll(trinket => ((Trinket)trinket).RarityId == trinketEntry.Rarity); Trinket trinketItem = (Trinket)trinketList[RandomSolver.Next(trinketList.Count)]; ItemDefinition trinketDef = new ItemDefinition(); trinketDef.Type = trinketItem.Type; trinketDef.Id = trinketItem.Id; trinketDef.Amount = 1; lootItems.Add(trinketDef); break; case LootType.Nothing: break; } } return(lootItems); }
public void LoadCurioLoot(Curio curio, CurioInteraction interaction, CurioResult curioResult, RaidInfo raid, bool keepLoot) { KeepLoot = keepLoot; if (keepLoot) { takeAllButton.gameObject.SetActive(false); passButton.gameObject.SetActive(false); partyInventory.SetDeactivated(); } else { takeAllButton.gameObject.SetActive(true); passButton.gameObject.SetActive(true); partyInventory.SetActivated(); } LootType = LootEventType.Curio; ActionType = LootResultType.Waiting; gameObject.SetActive(true); partyInventory.DiscardAll(); if (curio.IsQuestCurio) { if (curioResult != null) { partyInventory.DistributeItem(new ItemDefinition("quest_item", curioResult.Item, 1)); } } else { if (curioResult.IsCombined) { foreach (var result in interaction.Results) { if (result.IsCombined && result.Item != "Nothing") { foreach (var item in RaidSolver.GenerateLoot(result, raid)) { partyInventory.DistributeItem(item); } } } } else if (curioResult.Item != "Nothing") { foreach (var item in RaidSolver.GenerateLoot(curioResult, raid)) { partyInventory.DistributeItem(item); } } if (RaidSceneManager.RaidPanel.SelectedHero != null) { var extraLoot = RaidSceneManager.RaidPanel.SelectedHero.HeroClass.ExtraCurioLoot; if (extraLoot != null) { foreach (var item in RaidSolver.GenerateLoot(extraLoot.Code, extraLoot.Count, raid)) { partyInventory.DistributeItem(item); } } } } partyInventory.DeactivateEmptySlots(); title.text = LocalizationManager.GetString("str_overlay_loot_chest_title"); description.text = LocalizationManager.GetString("str_overlay_loot_chest_description"); if (partyInventory.HasSomething()) { ScrollOpened(); } else { Close(); } }
public void LoadCurioLoot(Curio curio, CurioInteraction interaction, CurioResult result, bool keepLoot = false) { loot.LoadCurioLoot(curio, interaction, result, RaidSceneManager.Raid, keepLoot); }