コード例 #1
0
 public override void Start()
 {
     ItemsWon.Clear();
     addNewItemsToPlayerPartyInventory();
     BattleStateRenderer = new WinRenderer(this);
     getMinAndMaxCurrentItemIndex();
     CurrentItemIndex = minCurrentItemIndex;
 }
コード例 #2
0
        private void addNewItemsToPlayerPartyInventory()
        {
            Dictionary <Rarity, List <WeaponData> > weapons = new Dictionary <Rarity, List <WeaponData> >();
            Dictionary <Rarity, List <ShieldData> > shields = new Dictionary <Rarity, List <ShieldData> >();
            Dictionary <Rarity, List <ItemData> >   items   = new Dictionary <Rarity, List <ItemData> >();

            foreach (Rarity rarity in Enum.GetValues(typeof(Rarity)))
            {
                if (rarity == Rarity.Never)
                {
                    continue;
                }

                weapons[rarity] = ResourceManager.GetWeaponDataWhere(wd => wd.Rarity == rarity);
                shields[rarity] = ResourceManager.GetShieldDataWhere(sd => sd.Rarity == rarity);
                items[rarity]   = ResourceManager.GetItemDataWhere(id => id.Rarity == rarity);
            }

            List <Rarity> rarityList = new List <Rarity> {
                Rarity.Common,
                Rarity.Uncommon,
                Rarity.Rare,
                Rarity.Common,
                Rarity.Uncommon,
                Rarity.Common
            };

            List <ThinkActionType> thinkActionTypeList = new List <ThinkActionType> {
                ThinkActionType.Attack,
                ThinkActionType.Defend,
                ThinkActionType.Attack,
                ThinkActionType.UseItem
            };

            int count = Math.Max(minimumItemsWon, Battle.PlayerPartyItemsUsed + Game1.Random.Next(Math.Max(minimumForItemsWonRandomizer, Battle.PlayerPartyItemsUsed / itemsUsedDivisorForItemsWonRandomizer)));

            for (int i = 0; i < count; ++i)
            {
                Rarity rarity = rarityList.Sample();
                switch (thinkActionTypeList.Sample())
                {
                case ThinkActionType.Attack:
                    if (weapons[rarity].Count == 0)
                    {
                        --i;
                        continue;
                    }
                    WeaponData weaponData = weapons[rarity].Sample();
                    if (!Battle.PlayerParty.HasMemberOfCharacterClass(weaponData.CharacterClass))
                    {
                        --i;
                        continue;
                    }
                    string weaponName = new Attributes(weaponData).ToString(weaponData.Name);
                    Battle.PlayerParty.WeaponInventories[weaponData.CharacterClass].AddItem(weaponName, null);
                    ItemsWon.Add(new Tuple <string, CharacterClass>(weaponName, weaponData.CharacterClass));
                    Logger.Log("Player party won weapon " + weaponName);
                    break;

                case ThinkActionType.Defend:
                    if (shields[rarity].Count == 0)
                    {
                        --i;
                        continue;
                    }
                    ShieldData shieldData = shields[rarity].Sample();
                    string     shieldName = new Attributes(shieldData).ToString(shieldData.Name);
                    Battle.PlayerParty.ShieldInventory.AddItem(shieldName, null);
                    ItemsWon.Add(new Tuple <string, CharacterClass>(shieldName, CharacterClass.Enemy));
                    Logger.Log("Player party won shield " + shieldName);
                    break;

                case ThinkActionType.UseItem:
                    if (items[rarity].Count == 0)
                    {
                        --i;
                        continue;
                    }
                    ItemData itemData = items[rarity].Sample();
                    string   itemName = itemData.Name.ToUpperFirstChar();
                    Battle.PlayerParty.ItemInventory.AddItem(itemName, null);
                    ItemsWon.Add(new Tuple <string, CharacterClass>(itemName, CharacterClass.Enemy));
                    Logger.Log("Player party won item " + itemName);
                    break;
                }
            }
        }