예제 #1
0
    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();
        }
    }
예제 #3
0
 public void LoadCurioLoot(Curio curio, CurioInteraction interaction, CurioResult result, bool keepLoot = false)
 {
     loot.LoadCurioLoot(curio, interaction, result, RaidSceneManager.Raid, keepLoot);
 }