mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-23 12:33:06 +00:00
fa9a809751
* Extract/encapsulate inventory legal arrays to interface+class Hiding them behind methods allows these to be left as ReadOnlySpan<ushort> and thus never allocate on the heap. Also refactors out some logic for checking if an item is legal. End result feels more maintainable and is less bloaty (no more passing in a nullable func) Batch editing * Add HasType filter ``` =HasType=11 .HeldItem=Meadow Plate ``` slaps a meadow plate on any pkm with grass type Use `=PersonalType1=11` for only primary grass types; only-secondary-type grass will not match it.
101 lines
4.3 KiB
C#
101 lines
4.3 KiB
C#
using System;
|
|
|
|
namespace PKHeX.Core;
|
|
|
|
public sealed class ItemStorage6AO : IItemStorage
|
|
{
|
|
public static readonly ItemStorage6AO Instance = new();
|
|
|
|
internal static ReadOnlySpan<ushort> Pouch_TMHM_AO => new ushort[]
|
|
{
|
|
328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
|
|
338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
|
|
348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
|
|
358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
|
|
368, 369, 370, 371, 372, 373, 374, 375, 376, 377,
|
|
378, 379, 380, 381, 382, 383, 384, 385, 386, 387,
|
|
388, 389, 390, 391, 392, 393, 394, 395, 396, 397,
|
|
398, 399, 400, 401, 402, 403, 404, 405, 406, 407,
|
|
408, 409, 410, 411, 412, 413, 414, 415, 416, 417,
|
|
418, 419, // 01-92
|
|
|
|
618, 619, 620, // 93-95
|
|
690, 691, 692, 693, 694, // 96-100
|
|
|
|
420, 421, 422, 423, 424,
|
|
|
|
// OR/AS
|
|
425, 737,
|
|
};
|
|
|
|
private static ReadOnlySpan<ushort> Pouch_Items_AO => new ushort[]
|
|
{
|
|
// Flutes moved to the Medicine pouch.
|
|
001, 002, 003, 004, 005, 006, 007, 008, 009, 010, 011, 012, 013, 014, 015, 016, 055, 056,
|
|
057, 058, 059, 060, 061, 062, 063, 064, 068, 069, 070, 071, 072, 073, 074, 075,
|
|
076, 077, 078, 079, 080, 081, 082, 083, 084, 085, 086, 087, 088, 089, 090, 091, 092, 093, 094,
|
|
099, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 112, 116, 117, 118, 119, 135, 136,
|
|
213, 214, 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
|
|
233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
|
|
252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
|
|
271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
|
|
290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
|
|
309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327,
|
|
492, 493, 494, 495, 496, 497, 498, 499, 500, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546,
|
|
547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 571,
|
|
572, 573, 576, 577, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 639, 640, 644, 646,
|
|
647, 648, 649, 650, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
|
|
667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685,
|
|
699, 704, 710, 711, 715,
|
|
|
|
// OR/AS Additions
|
|
534, 535,
|
|
752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 767, 768, 769, 770,
|
|
};
|
|
|
|
private static ReadOnlySpan<ushort> Pouch_Key_AO => new ushort[]
|
|
{
|
|
216, 445, 446, 447, 465, 466, 471, 628,
|
|
629, 631, 632, 638, 697,
|
|
|
|
// Illegal
|
|
// 716, 717, 723, 745, 746, 747, 748, 749, 750, 766,
|
|
|
|
// ORAS
|
|
457, 474, 503,
|
|
|
|
718, 719,
|
|
720, 721, 722, 724, 725, 726, 727, 728, 729,
|
|
730, 731, 732, 733, 734, 735, 736, 738, 739,
|
|
740, 741, 742, 743, 744,
|
|
751,
|
|
765, 771, 772, 774, 775,
|
|
};
|
|
|
|
private static ReadOnlySpan<ushort> Pouch_Medicine_AO => new ushort[]
|
|
{
|
|
017, 018, 019, 020, 021, 022, 023, 024, 025, 026, 027, 028, 029, 030, 031, 032, 033,
|
|
034, 035, 036, 037, 038, 039, 040, 041, 042, 043, 044, 045, 046, 047, 048, 049, 050, 051,
|
|
052, 053, 054, 134, 504, 565, 566, 567, 568, 569, 570, 571, 591, 645, 708, 709,
|
|
|
|
// OR/AS -- Moved from Items pouch.
|
|
065, 066, 067,
|
|
};
|
|
|
|
public bool IsLegal(InventoryType type, int itemIndex, int itemCount)
|
|
{
|
|
if (type is InventoryType.KeyItems)
|
|
return true;
|
|
return ItemStorage6XY.Unreleased.BinarySearch((ushort)itemIndex) < 0;
|
|
}
|
|
|
|
public ReadOnlySpan<ushort> GetItems(InventoryType type) => type switch
|
|
{
|
|
InventoryType.Items => Pouch_Items_AO,
|
|
InventoryType.KeyItems => Pouch_Key_AO,
|
|
InventoryType.TMHMs => Pouch_TMHM_AO,
|
|
InventoryType.Medicine => Pouch_Medicine_AO,
|
|
InventoryType.Berries => ItemStorage6XY.Pouch_Berry_XY,
|
|
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null),
|
|
};
|
|
}
|