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()); } }
public static void ValidateCaughtBall(PBEItem value) { if (!AllBalls.Contains(value)) { throw new ArgumentOutOfRangeException(nameof(value)); } }
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])); }
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); }
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); }
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()); } }
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); } }
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 }
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); }
public virtual IPBELocalizedString GetItemName(PBEItem item) { return(PBELocalizedString.GetItemName(item)); }
public virtual IPBELocalizedString GetItemDescription(PBEItem item) { return(PBELocalizedString.GetItemDescription(item)); }
public virtual IPBEItemData GetItemData(PBEItem item, bool cache = true) { return(PBEItemData.Data[item]); }
public virtual bool IsBerry(PBEItem item) { return(PBEBerryData.Data.ContainsKey(item)); }
public InventorySlot(PBEItem item, ushort quantity) { Item = item; Quantity = quantity; }
public InventorySlotNew(PBEItem item, ushort quantity) : base(item, quantity) { New = true; }
public static ItemPouchType GetPouchType(PBEItem item) { return(ItemPouchType.Items); // TODO }
internal PBEBattleInventorySlot(PBEItem item, uint quantity) { Item = item; Quantity = quantity; }
public PBETurnAction(byte pokemonId, PBEItem item) { PokemonId = pokemonId; Decision = PBETurnDecision.Item; UseItem = item; }
public abstract void Add(PBEItem item, ushort quantity = 1);
// Item public PBETurnAction(PBEBattlePokemon pokemon, PBEItem item) : this(pokemon.Id, item) { }
// 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); }