Beispiel #1
0
 public static void ValidateItem(PBEAlphabeticalList <PBEItem> valid, PBEItem value)
 {
     if (!valid.Contains(value))
     {
         throw new ArgumentOutOfRangeException(nameof(value));
     }
 }
            public async Task Info([Remainder] string itemName)
            {
                PBEItem?nItem = PBELocalizedString.GetItemByName(itemName);

                if (!nItem.HasValue || nItem.Value == PBEItem.None)
                {
                    await Context.Channel.SendMessageAsync($"{Context.User.Mention} Invalid item!");
                }
                else
                {
                    PBEItem      item  = nItem.Value;
                    PBEItemData  iData = PBEItemData.Data[item];
                    EmbedBuilder embed = new EmbedBuilder()
                                         .WithAuthor(Context.User)
                                         .WithColor(iData.NaturalGiftType == PBEType.None ? Utils.RandomColor() : Utils.TypeToColor[iData.NaturalGiftType])
                                         .WithTitle(PBELocalizedString.GetItemName(item).English)
                                         .WithUrl(Utils.URL)
                                         .WithDescription(PBELocalizedString.GetItemDescription(item).English.Replace('\n', ' '));
                    if (iData.FlingPower > 0)
                    {
                        embed.AddField("Fling Power", iData.FlingPower, true);
                    }
                    if (iData.NaturalGiftPower > 0)
                    {
                        embed.AddField("Natural Gift Power", iData.NaturalGiftPower, true);
                    }
                    if (iData.NaturalGiftType != PBEType.None)
                    {
                        embed.AddField("Natural Gift Type", iData.NaturalGiftType, true);
                    }
                    await Context.Channel.SendMessageAsync(string.Empty, embed : embed.Build());
                }
            }
Beispiel #3
0
 public static void ValidateCaughtBall(PBEItem value)
 {
     if (!AllBalls.Contains(value))
     {
         throw new ArgumentOutOfRangeException(nameof(value));
     }
 }
Beispiel #4
0
 internal static void ValidateCaughtBall(PBEItem value)
 {
     if (!PBEDataUtils.AllBalls.Contains(value))
     {
         throw new ArgumentOutOfRangeException(nameof(value));
     }
 }
            public async Task Info([Remainder] string itemName)
            {
                PBEItem?nItem = PBELocalizedString.GetItemByName(itemName);

                if (!nItem.HasValue || nItem.Value == PBEItem.None)
                {
                    await Context.Channel.SendMessageAsync($"{Context.User.Mention} ― Invalid item!");
                }
                else
                {
                    PBEItem     item  = nItem.Value;
                    PBEItemData iData = PBEItemData.Data[item];
                    Color       color;
                    if (PBEBerryData.Data.TryGetValue(item, out PBEBerryData bData))
                    {
                        color = Utils.TypeColors[bData.NaturalGiftType];
                    }
                    else
                    {
                        color = Utils.RandomColor();
                    }
                    EmbedBuilder embed = new EmbedBuilder()
                                         .WithAuthor(Context.User)
                                         .WithColor(color)
                                         .WithTitle(PBELocalizedString.GetItemName(item).English)
                                         .WithUrl(Utils.URL)
                                         .WithDescription(PBELocalizedString.GetItemDescription(item).English.Replace('\n', ' '));
                    if (iData.FlingPower > 0)
                    {
                        embed.AddField("Fling Power", iData.FlingPower, true);
                    }
                    if (bData != null)
                    {
                        embed.AddField("Natural Gift Power", bData.NaturalGiftPower, true);
                        embed.AddField("Natural Gift Type", Utils.TypeEmotes[bData.NaturalGiftType], true);
                        if (bData.Bitterness > 0)
                        {
                            embed.AddField("Bitterness", bData.Bitterness, true);
                        }
                        if (bData.Dryness > 0)
                        {
                            embed.AddField("Dryness", bData.Dryness, true);
                        }
                        if (bData.Sourness > 0)
                        {
                            embed.AddField("Sourness", bData.Sourness, true);
                        }
                        if (bData.Spicyness > 0)
                        {
                            embed.AddField("Spicyness", bData.Spicyness, true);
                        }
                        if (bData.Sweetness > 0)
                        {
                            embed.AddField("Sweetness", bData.Sweetness, true);
                        }
                    }
                    await Context.Channel.SendMessageAsync(string.Empty, embed : embed.Build());
                }
            }
 public static PBELocalizedString GetItemName(PBEItem item)
 {
     if (!Enum.IsDefined(typeof(PBEItem), item))
     {
         throw new ArgumentOutOfRangeException(nameof(item));
     }
     return(new PBELocalizedString(PBEUtils.QueryDatabase <SearchResult>(string.Format(QueryId, "ItemNames", (ushort)item))[0]));
 }
Beispiel #7
0
 public virtual bool TryGetBerryData(PBEItem item, out IPBEBerryData bData, bool cache = true)
 {
     if (IsBerry(item))
     {
         bData = GetBerryData(item, cache);
         return(true);
     }
     bData = default;
     return(false);
 }
        private void GivePokemonFormItemCommand()
        {
            PBESpecies species = _reader.ReadEnum <PBESpecies>();
            PBEForm    form    = _reader.ReadEnum <PBEForm>();
            byte       level   = _reader.ReadByte();
            PBEItem    item    = _reader.ReadEnum <PBEItem>();
            var        pkmn    = PartyPokemon.GetTestPokemon(species, form, level);

            pkmn.Item = item;
            Game.Instance.Save.GivePokemon(pkmn);
        }
        public PBEItemPacket(PBEPokemon itemHolder, PBEPokemon pokemon2, PBEItem item, PBEItemAction itemAction)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(ItemHolder = itemHolder.FieldPosition));
            bytes.Add((ItemHolderTeam = itemHolder.Team).Id);
            bytes.Add((byte)(Pokemon2 = pokemon2.FieldPosition));
            bytes.Add((Pokemon2Team = pokemon2.Team).Id);
            bytes.AddRange(BitConverter.GetBytes((ushort)(Item = item)));
            bytes.Add((byte)(ItemAction = itemAction));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
Beispiel #10
0
 internal PBEItemTurnPacket(PBEBattlePokemon itemUserHolder, PBEItem item, PBEItemTurnAction itemAction)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write((ItemUserTrainer = itemUserHolder.Trainer).Id);
             w.Write(ItemUser   = itemUserHolder.FieldPosition);
             w.Write(Item       = item);
             w.Write(ItemAction = itemAction);
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
        internal PBEItemPacket(PBEPokemon itemHolder, PBEPokemon pokemon2, PBEItem item, PBEItemAction itemAction)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(ItemHolder = itemHolder.FieldPosition));
            bytes.Add((ItemHolderTeam = itemHolder.Team).Id);
            bytes.Add((byte)(Pokemon2 = pokemon2.FieldPosition));
            bytes.Add((Pokemon2Team = pokemon2.Team).Id);
            bytes.AddRange(BitConverter.GetBytes((ushort)(Item = item)));
            bytes.Add((byte)(ItemAction = itemAction));
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
Beispiel #12
0
 public T this[PBEItem item]
 {
     get
     {
         foreach (T slot in _items)
         {
             if (slot.Item == item)
             {
                 return(slot);
             }
         }
         return(null);
     }
 }
        public static PBEReadOnlyLocalizedString GetItemName(PBEItem item)
        {
            if (!Enum.IsDefined(item))
            {
                throw new ArgumentOutOfRangeException(nameof(item));
            }
            List <SearchResult> results = PBEDefaultDataProvider.Instance.QueryDatabase <SearchResult>(string.Format(QueryId, "ItemNames", item));

            if (results.Count == 1)
            {
                return(new PBEReadOnlyLocalizedString(results[0]));
            }
            throw new InvalidDataException();
        }
 internal PBECapturePacket(PBEBattlePokemon pokemon, PBEItem ball, byte numShakes, bool success, bool critical)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write((PokemonTrainer = pokemon.Trainer).Id);
             w.Write(Pokemon   = pokemon.FieldPosition);
             w.Write(Ball      = ball);
             w.Write(NumShakes = numShakes);
             w.Write(Success   = success);
             w.Write(Critical  = critical);
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
 internal PBEItemPacket(PBEPokemon itemHolder, PBEPokemon pokemon2, PBEItem item, PBEItemAction itemAction)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write(ItemHolder = itemHolder.FieldPosition);
             w.Write((ItemHolderTeam = itemHolder.Team).Id);
             w.Write(Pokemon2 = pokemon2.FieldPosition);
             w.Write((Pokemon2Team = pokemon2.Team).Id);
             w.Write(Item       = item);
             w.Write(ItemAction = itemAction);
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
Beispiel #16
0
        public override void Add(PBEItem item, ushort quantity = 1)
        {
            if (quantity == 0)
            {
                throw new ArgumentOutOfRangeException(nameof(quantity), "Quantity must be at least one.");
            }
            ItemPouchType pt = ItemData.GetPouchType(item);
            InventoryPouch <InventorySlotNew> pouch = this[pt];
            InventorySlotNew slot = pouch[item];

            if (slot == null)
            {
                pouch.Add(new InventorySlotNew(item, quantity));
            }
            else
            {
                slot.Add(quantity);
            }
        }
Beispiel #17
0
        public void Gem_Works(PBEMove move, PBEItem item)
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 4; // Seed ensures all moves do not miss
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Mew, 0, 1, move)
            {
                Item = item
            };

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash);

            var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0       = battle.Trainers[0];
            PBETrainer       t1       = battle.Trainers[1];
            PBEBattlePokemon mew      = t0.Party[0];
            PBEBattlePokemon magikarp = t1.Party[0];

            battle.Begin();
            #endregion

            #region Use and check
            Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(mew, move, PBETurnTarget.FoeCenter)));
            Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter)));

            battle.RunTurn();

            Assert.True(!battle.VerifyMoveResultHappened(mew, magikarp, PBEResult.Missed) && // Did not miss
                        battle.VerifyItemHappened(mew, mew, item, PBEItemAction.Consumed) && // Gem consumed
                        mew.Item == PBEItem.None); // Properly removed
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Beispiel #18
0
 public static bool VerifyItemHappened(this PBEBattle battle, PBEBattlePokemon itemHolder, PBEBattlePokemon pokemon2, PBEItem item, PBEItemAction itemAction)
 {
     foreach (IPBEPacket packet in battle.Events)
     {
         if (packet is PBEItemPacket ip &&
             ip.Item == item &&
             ip.ItemAction == itemAction &&
             ip.ItemHolderTrainer.TryGetPokemon(ip.ItemHolder) == itemHolder &&
             ip.Pokemon2Trainer.TryGetPokemon(ip.Pokemon2) == pokemon2)
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #19
0
 public virtual IPBELocalizedString GetItemName(PBEItem item)
 {
     return(PBELocalizedString.GetItemName(item));
 }
Beispiel #20
0
 public virtual IPBELocalizedString GetItemDescription(PBEItem item)
 {
     return(PBELocalizedString.GetItemDescription(item));
 }
Beispiel #21
0
 public virtual IPBEItemData GetItemData(PBEItem item, bool cache = true)
 {
     return(PBEItemData.Data[item]);
 }
Beispiel #22
0
 public virtual bool IsBerry(PBEItem item)
 {
     return(PBEBerryData.Data.ContainsKey(item));
 }
Beispiel #23
0
 public InventorySlot(PBEItem item, ushort quantity)
 {
     Item     = item;
     Quantity = quantity;
 }
Beispiel #24
0
 public InventorySlotNew(PBEItem item, ushort quantity)
     : base(item, quantity)
 {
     New = true;
 }
Beispiel #25
0
 public static ItemPouchType GetPouchType(PBEItem item)
 {
     return(ItemPouchType.Items); // TODO
 }
Beispiel #26
0
 internal PBEBattleInventorySlot(PBEItem item, uint quantity)
 {
     Item     = item;
     Quantity = quantity;
 }
 public PBETurnAction(byte pokemonId, PBEItem item)
 {
     PokemonId = pokemonId;
     Decision  = PBETurnDecision.Item;
     UseItem   = item;
 }
Beispiel #28
0
 public abstract void Add(PBEItem item, ushort quantity = 1);
 // Item
 public PBETurnAction(PBEBattlePokemon pokemon, PBEItem item)
     : this(pokemon.Id, item)
 {
 }
Beispiel #30
0
        // TODO: Biking lowers the rate by 20% according to gen 3, running does not affect (according to gen 3, maybe it does after)
        public static bool CheckForWildBattle(bool ignoreAbilityOrItem)
        {
            PlayerObj player = PlayerObj.Player;

            Map.Layout.Block block = player.GetBlock(out Map map);
            EncounterType    t;

            switch (block.BlocksetBlock.Behavior)
            {
            case BlocksetBlockBehavior.AllowElevationChange_Cave_Encounter:
            case BlocksetBlockBehavior.Cave_Encounter:
            case BlocksetBlockBehavior.Grass_Encounter: t = EncounterType.Default; break;

            case BlocksetBlockBehavior.Grass_SpecialEncounter: t = EncounterType.DarkGrass; break;

            case BlocksetBlockBehavior.Surf: t = EncounterType.Surf; break;

            default: return(false);
            }
            EncounterTable tbl = map.Encounters.GetEncounterTable(t);

            if (tbl is null)
            {
                return(false);
            }
            int chance = tbl.ChanceOfPhenomenon;

            // Some abilities affect the wild encounter rate
            // This is an option because some encounters (like rock smash) do not use the ability to modify the rate
            if (!ignoreAbilityOrItem)
            {
                PartyPokemon pkmn = Game.Instance.Save.PlayerParty[0];
                PBEAbility   abilityOfFirstInParty = pkmn.Ability;
                PBEItem      itemOfFirstInParty    = pkmn.Item;
                // TODO: CompoundEyes
                // TODO: CuteCharm
                // TODO: Hustle, Pressure, VitalSpirit
                // TODO: Intimidate, KeenEye
                // TODO: MagnetPull, Static
                // TODO: SandVeil, SnowCloak
                // TODO: StickyHold, SuctionCups
                // TODO: Synchronize
                switch (abilityOfFirstInParty)
                {
                case PBEAbility.ArenaTrap:
                case PBEAbility.Illuminate:
                case PBEAbility.NoGuard: chance *= 2; break;

                case PBEAbility.QuickFeet:
                case PBEAbility.Stench:
                case PBEAbility.WhiteSmoke: chance /= 2; break;
                }
                switch (itemOfFirstInParty)
                {
                case PBEItem.CleanseTag: chance = chance * 2 / 3; break;     // Reduce by 1/3
                }
            }
            if (!PBEUtils.GlobalRandom.RandomBool(chance, byte.MaxValue))
            {
                return(false);
            }
            ushort combinedChance = tbl.GetCombinedChance();

            if (combinedChance == 0)
            {
                return(false);
            }
            EncounterTable.Encounter encounter0 = RollEncounter(tbl, combinedChance);
            Game.Instance.TempCreateWildBattle(map, block, encounter0);
            return(true);
        }