mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-04-25 08:10:48 -05:00
Extend duplicate mega stone checker -> unique
Now covers primal orbs too. Update translations, enhanced to show the item ID that they're duplicate (less to check when inspecting an output)
This commit is contained in:
parent
d6cb992d11
commit
e1f6847ed9
|
|
@ -171,6 +171,8 @@ public static InventoryType GetInventoryPouch(ushort itemIndex)
|
|||
}
|
||||
|
||||
public static bool IsMegaStone(ushort item) => MegaStones.Contains(item);
|
||||
public static bool IsUniqueHeldItem(ushort item) => IsMegaStone(item) || item is (0534 or 0535); // Primal Orbs
|
||||
public static ushort[] GetAllUniqueHeldItems() => [..MegaStones, 0534, 0535];
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the expected Mega Stone or Primal Orb item ID for a given Pokémon species and form.
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ private static bool IsEmptyData(SlotCache obj)
|
|||
private static readonly List<IBulkAnalyzer> SaveAnalyzers =
|
||||
[
|
||||
new DuplicateFusionChecker(),
|
||||
new DuplicateMegaChecker(),
|
||||
new DuplicateUniqueItemChecker(),
|
||||
];
|
||||
|
||||
private void ScanAll()
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
namespace PKHeX.Core.Bulk;
|
||||
|
||||
public sealed class DuplicateMegaChecker : IBulkAnalyzer
|
||||
public sealed class DuplicateUniqueItemChecker : IBulkAnalyzer
|
||||
{
|
||||
private const CheckIdentifier Identifier = CheckIdentifier.HeldItem;
|
||||
|
||||
|
|
@ -20,7 +20,7 @@ private static void AnalyzeInventory(BulkAnalysis input, SAV9ZA za)
|
|||
{
|
||||
var items = za.Items;
|
||||
|
||||
// Rule: Only 1 Mega Stone of a given Item ID may be held across all Pokémon, or present in the bag.
|
||||
// Rule: Only 1 of a unique Item ID may be held across all Pokémon, or present in the bag.
|
||||
Dictionary<ushort, int> seenStones = []; // ushort item, int index
|
||||
for (var i = 0; i < input.AllData.Count; i++)
|
||||
{
|
||||
|
|
@ -28,39 +28,39 @@ private static void AnalyzeInventory(BulkAnalysis input, SAV9ZA za)
|
|||
var pk = slot.Entity;
|
||||
|
||||
var stone = (ushort)pk.HeldItem;
|
||||
if (!ItemStorage9ZA.IsMegaStone(stone))
|
||||
if (!ItemStorage9ZA.IsUniqueHeldItem(stone))
|
||||
continue;
|
||||
|
||||
var item = items.GetItem(stone);
|
||||
if (item.Count == 0) // Not acquired by the save file, thus not able to be held.
|
||||
input.AddLine(slot, Identifier, BulkCheckResult.NoIndex, BulkNotAcquiredMegaStoneInventory, stone);
|
||||
input.AddLine(slot, Identifier, BulkCheckResult.NoIndex, BulkHeldItemInventoryNotAcquired_0, stone);
|
||||
else if (!item.IsHeld) // Not marked as held, so it's still "in the bag" (not given).
|
||||
input.AddLine(slot, Identifier, BulkCheckResult.NoIndex, BulkDuplicateMegaStoneInventory, stone);
|
||||
input.AddLine(slot, Identifier, BulkCheckResult.NoIndex, BulkHeldItemInventoryUnassigned_0, stone);
|
||||
else if (seenStones.TryGetValue(stone, out var otherIndex)) // Already given to another slot.
|
||||
input.AddLine(slot, input.AllData[otherIndex], Identifier, i, index2: otherIndex, BulkDuplicateMegaStoneSlot, stone);
|
||||
else // First time seeing this Mega Stone, all good.
|
||||
input.AddLine(slot, input.AllData[otherIndex], Identifier, i, index2: otherIndex, BulkHeldItemInventoryMultipleSlots_0, stone);
|
||||
else // First time seeing this item, all good.
|
||||
seenStones[stone] = i;
|
||||
}
|
||||
|
||||
CheckOtherUnassigned(input, items, ItemStorage9ZA.MegaStones, seenStones);
|
||||
CheckOtherUnassigned(input, items, ItemStorage9ZA.GetAllUniqueHeldItems(), seenStones);
|
||||
}
|
||||
|
||||
private static void CheckOtherUnassigned(BulkAnalysis input, MyItem9a items, ReadOnlySpan<ushort> megaStones, IReadOnlyDictionary<ushort, int> seenStones)
|
||||
private static void CheckOtherUnassigned(BulkAnalysis input, MyItem9a items, ReadOnlySpan<ushort> uniqueItems, IReadOnlyDictionary<ushort, int> seenItems)
|
||||
{
|
||||
// Check that all other un-assigned stones are not marked as assigned.
|
||||
foreach (var stone in megaStones)
|
||||
foreach (var item in uniqueItems)
|
||||
{
|
||||
if (seenStones.ContainsKey(stone))
|
||||
if (seenItems.ContainsKey(item))
|
||||
continue;
|
||||
var item = items.GetItem(stone);
|
||||
if (item.IsHeld)
|
||||
input.AddMessage(string.Empty, CheckResult.Get(Severity.Invalid, CheckIdentifier.HeldItem, BulkAssignedMegaStoneNotFound_0, stone));
|
||||
var entry = items.GetItem(item);
|
||||
if (entry.IsHeld)
|
||||
input.AddMessage(string.Empty, CheckResult.Get(Severity.Invalid, CheckIdentifier.HeldItem, BulkHeldItemInventoryAssignedNoneHeld_0, item));
|
||||
}
|
||||
}
|
||||
|
||||
private static void AnalyzeNoInventory(BulkAnalysis input)
|
||||
{
|
||||
// Rule: Only 1 Mega Stone of a given Item ID may be held across all Pokémon, or present in the bag.
|
||||
// Rule: Only 1 of a unique Item ID may be held across all Pokémon, or present in the bag.
|
||||
Dictionary<ushort, int> seenStones = []; // ushort item, int index
|
||||
for (var i = 0; i < input.AllData.Count; i++)
|
||||
{
|
||||
|
|
@ -68,12 +68,12 @@ private static void AnalyzeNoInventory(BulkAnalysis input)
|
|||
var pk = slot.Entity;
|
||||
|
||||
var stone = (ushort)pk.HeldItem;
|
||||
if (!ItemStorage9ZA.IsMegaStone(stone))
|
||||
if (!ItemStorage9ZA.IsUniqueHeldItem(stone))
|
||||
continue;
|
||||
|
||||
if (seenStones.TryGetValue(stone, out var otherIndex)) // Already given to another slot.
|
||||
input.AddLine(slot, input.AllData[otherIndex], Identifier, i, index2: otherIndex, BulkDuplicateMegaStoneSlot, stone);
|
||||
else // First time seeing this Mega Stone, all good.
|
||||
input.AddLine(slot, input.AllData[otherIndex], Identifier, i, index2: otherIndex, BulkHeldItemInventoryMultipleSlots_0, stone);
|
||||
else // First time seeing this item, all good.
|
||||
seenStones[stone] = i;
|
||||
}
|
||||
}
|
||||
|
|
@ -455,11 +455,11 @@ public sealed class LegalityCheckLocalization
|
|||
public string BulkSharingTrainerID { get; set; } = "Detected sharing of Trainer ID across multiple trainer names.";
|
||||
public string BulkSharingTrainerVersion { get; set; } = "Detected sharing of Trainer ID across multiple versions.";
|
||||
public string BulkDuplicateFusionSlot { get; set; } = "Detected multiple fusions of the same fusion stored slot species.";
|
||||
public string BulkDuplicateMegaStoneSlot { get; set; } = "Detected multiple Pokémon holding the same Mega Stone.";
|
||||
public string BulkDuplicateMegaStoneInventory { get; set; } = "Detected Pokémon holding a Mega Stone still stored in player inventory.";
|
||||
public string BulkNotAcquiredMegaStoneInventory { get; set; } = "Mega Stone held by Pokémon has not been acquired in player inventory.";
|
||||
public string BulkAssignedMegaStoneNotFound_0 { get; set; } = "{0} is marked as held by Pokémon but none found in slots checked.";
|
||||
public string BulkFusionSourceInvalid { get; set; } = "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot.";
|
||||
public string BulkHeldItemInventoryAssignedNoneHeld_0 { get; set; } = "{0} is marked as held player inventory, but no Pokémon found in slots checked.";
|
||||
public string BulkHeldItemInventoryMultipleSlots_0 { get; set; } = "{0} is a unique item and cannot be held by multiple Pokémon.";
|
||||
public string BulkHeldItemInventoryNotAcquired_0 { get; set; } = "{0} has not been acquired in player inventory.";
|
||||
public string BulkHeldItemInventoryUnassigned_0 { get; set; } = "{0} is not marked as assigned in player inventory.";
|
||||
public string BulkFusionSourceInvalid { get; set; } = "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot.";
|
||||
}
|
||||
|
||||
[JsonSerializable(typeof(LegalityCheckLocalization))]
|
||||
|
|
|
|||
|
|
@ -421,10 +421,10 @@ public static class LegalityCheckResultCodeExtensions
|
|||
BulkSharingPIDEncounterType => localization.BulkSharingPIDRNGType,
|
||||
BulkDuplicateMysteryGiftEggReceived => localization.BulkDuplicateMysteryGiftEggReceived,
|
||||
BulkDuplicateFusionSlot => localization.BulkDuplicateFusionSlot,
|
||||
BulkDuplicateMegaStoneSlot => localization.BulkDuplicateMegaStoneSlot,
|
||||
BulkDuplicateMegaStoneInventory => localization.BulkDuplicateMegaStoneInventory,
|
||||
BulkNotAcquiredMegaStoneInventory => localization.BulkNotAcquiredMegaStoneInventory,
|
||||
BulkAssignedMegaStoneNotFound_0 => localization.BulkAssignedMegaStoneNotFound_0,
|
||||
BulkHeldItemInventoryAssignedNoneHeld_0 => localization.BulkHeldItemInventoryAssignedNoneHeld_0,
|
||||
BulkHeldItemInventoryMultipleSlots_0 => localization.BulkHeldItemInventoryMultipleSlots_0,
|
||||
BulkHeldItemInventoryNotAcquired_0 => localization.BulkHeldItemInventoryNotAcquired_0,
|
||||
BulkHeldItemInventoryUnassigned_0 => localization.BulkHeldItemInventoryUnassigned_0,
|
||||
BulkFusionSourceInvalid => localization.BulkFusionSourceInvalid,
|
||||
BulkSharingTrainerIDs => localization.BulkSharingTrainerID,
|
||||
BulkSharingTrainerVersion => localization.BulkSharingTrainerVersion,
|
||||
|
|
|
|||
|
|
@ -380,9 +380,6 @@ public enum LegalityCheckResultCode : ushort
|
|||
BulkSharingPIDEncounterType,
|
||||
BulkDuplicateFusionSlot,
|
||||
BulkDuplicateMysteryGiftEggReceived,
|
||||
BulkDuplicateMegaStoneSlot,
|
||||
BulkDuplicateMegaStoneInventory,
|
||||
BulkNotAcquiredMegaStoneInventory,
|
||||
BulkFusionSourceInvalid,
|
||||
BulkSharingTrainerIDs,
|
||||
BulkSharingTrainerVersion,
|
||||
|
|
@ -429,7 +426,10 @@ public enum LegalityCheckResultCode : ushort
|
|||
|
||||
// Single Argument: Item ID
|
||||
FirstWithItem,
|
||||
BulkAssignedMegaStoneNotFound_0 = FirstWithItem, // item ID
|
||||
BulkHeldItemInventoryAssignedNoneHeld_0 = FirstWithItem, // item ID
|
||||
BulkHeldItemInventoryMultipleSlots_0,
|
||||
BulkHeldItemInventoryNotAcquired_0,
|
||||
BulkHeldItemInventoryUnassigned_0,
|
||||
|
||||
// One Argument: Language
|
||||
FirstWithLanguage,
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public static class TradeRestrictions
|
|||
public static bool IsUntradableHeld(EntityContext context, int item) => context switch
|
||||
{
|
||||
EntityContext.Gen7 => ItemStorage7USUM.ZCrystalHeld.Contains((ushort)item),
|
||||
EntityContext.Gen9a => ItemStorage9ZA.IsMegaStone((ushort)item) || item is (0534 or 0535), // Primal Orbs
|
||||
EntityContext.Gen9a => ItemStorage9ZA.IsUniqueHeldItem((ushort)item),
|
||||
_ => false,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "Detected sharing of Trainer ID across multiple trainer names.",
|
||||
"BulkSharingTrainerVersion": "Detected sharing of Trainer ID across multiple versions.",
|
||||
"BulkDuplicateFusionSlot": "Detected multiple fusions of the same fusion stored slot species.",
|
||||
"BulkDuplicateMegaStoneSlot": "Detected multiple Pokémon holding the same Mega Stone.",
|
||||
"BulkDuplicateMegaStoneInventory": "Detected Pokémon holding a Mega Stone still stored in player inventory.",
|
||||
"BulkNotAcquiredMegaStoneInventory": "Mega Stone held by Pokémon has not been acquired in player inventory.",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} is marked as held by Pokémon but none found in slots checked.",
|
||||
"BulkFusionSourceInvalid": "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
}
|
||||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "Detected sharing of Trainer ID across multiple trainer names.",
|
||||
"BulkSharingTrainerVersion": "Detected sharing of Trainer ID across multiple versions.",
|
||||
"BulkDuplicateFusionSlot": "Detected multiple fusions of the same fusion stored slot species.",
|
||||
"BulkDuplicateMegaStoneSlot": "Detected multiple Pokémon holding the same Mega Stone.",
|
||||
"BulkDuplicateMegaStoneInventory": "Detected Pokémon holding a Mega Stone still stored in player inventory.",
|
||||
"BulkNotAcquiredMegaStoneInventory": "Mega Stone held by Pokémon has not been acquired in player inventory.",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} is marked as held by Pokémon but none found in slots checked.",
|
||||
"BulkFusionSourceInvalid": "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
}
|
||||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "Detected sharing of Trainer ID across multiple trainer names.",
|
||||
"BulkSharingTrainerVersion": "Detected sharing of Trainer ID across multiple versions.",
|
||||
"BulkDuplicateFusionSlot": "Detected multiple fusions of the same fusion stored slot species.",
|
||||
"BulkDuplicateMegaStoneSlot": "Detected multiple Pokémon holding the same Mega Stone.",
|
||||
"BulkDuplicateMegaStoneInventory": "Detected Pokémon holding a Mega Stone still stored in player inventory.",
|
||||
"BulkNotAcquiredMegaStoneInventory": "Mega Stone held by Pokémon has not been acquired in player inventory.",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} is marked as held by Pokémon but none found in slots checked.",
|
||||
"BulkFusionSourceInvalid": "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
}
|
||||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "Detected sharing of Trainer ID across multiple trainer names.",
|
||||
"BulkSharingTrainerVersion": "Detected sharing of Trainer ID across multiple versions.",
|
||||
"BulkDuplicateFusionSlot": "Detected multiple fusions of the same fusion stored slot species.",
|
||||
"BulkDuplicateMegaStoneSlot": "Detected multiple Pokémon holding the same Mega Stone.",
|
||||
"BulkDuplicateMegaStoneInventory": "Detected Pokémon holding a Mega Stone still stored in player inventory.",
|
||||
"BulkNotAcquiredMegaStoneInventory": "Mega Stone held by Pokémon has not been acquired in player inventory.",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} is marked as held by Pokémon but none found in slots checked.",
|
||||
"BulkFusionSourceInvalid": "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
}
|
||||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "ID Dresseur partagé détecté entre plusieurs noms de dresseur.",
|
||||
"BulkSharingTrainerVersion": "ID Dresseur partagé détecté entre plusieurs versions.",
|
||||
"BulkDuplicateFusionSlot": "Detected multiple fusions of the same fusion stored slot species.",
|
||||
"BulkDuplicateMegaStoneSlot": "Detected multiple Pokémon holding the same Mega Stone.",
|
||||
"BulkDuplicateMegaStoneInventory": "Detected Pokémon holding a Mega Stone still stored in player inventory.",
|
||||
"BulkNotAcquiredMegaStoneInventory": "Mega Stone held by Pokémon has not been acquired in player inventory.",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} is marked as held by Pokémon but none found in slots checked.",
|
||||
"BulkFusionSourceInvalid": "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
}
|
||||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "Detected sharing of Trainer ID across multiple trainer names.",
|
||||
"BulkSharingTrainerVersion": "Detected sharing of Trainer ID across multiple versions.",
|
||||
"BulkDuplicateFusionSlot": "Detected multiple fusions of the same fusion stored slot species.",
|
||||
"BulkDuplicateMegaStoneSlot": "Detected multiple Pokémon holding the same Mega Stone.",
|
||||
"BulkDuplicateMegaStoneInventory": "Detected Pokémon holding a Mega Stone still stored in player inventory.",
|
||||
"BulkNotAcquiredMegaStoneInventory": "Mega Stone held by Pokémon has not been acquired in player inventory.",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} is marked as held by Pokémon but none found in slots checked.",
|
||||
"BulkFusionSourceInvalid": "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
}
|
||||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "Detected sharing of Trainer ID across multiple trainer names.",
|
||||
"BulkSharingTrainerVersion": "Detected sharing of Trainer ID across multiple versions.",
|
||||
"BulkDuplicateFusionSlot": "Detected multiple fusions of the same fusion stored slot species.",
|
||||
"BulkDuplicateMegaStoneSlot": "Detected multiple Pokémon holding the same Mega Stone.",
|
||||
"BulkDuplicateMegaStoneInventory": "Detected Pokémon holding a Mega Stone still stored in player inventory.",
|
||||
"BulkNotAcquiredMegaStoneInventory": "Mega Stone held by Pokémon has not been acquired in player inventory.",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} is marked as held by Pokémon but none found in slots checked.",
|
||||
"BulkFusionSourceInvalid": "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
}
|
||||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "Detected sharing of Trainer ID across multiple trainer names.",
|
||||
"BulkSharingTrainerVersion": "Detected sharing of Trainer ID across multiple versions.",
|
||||
"BulkDuplicateFusionSlot": "Detected multiple fusions of the same fusion stored slot species.",
|
||||
"BulkDuplicateMegaStoneSlot": "Detected multiple Pokémon holding the same Mega Stone.",
|
||||
"BulkDuplicateMegaStoneInventory": "Detected Pokémon holding a Mega Stone still stored in player inventory.",
|
||||
"BulkNotAcquiredMegaStoneInventory": "Mega Stone held by Pokémon has not been acquired in player inventory.",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} is marked as held by Pokémon but none found in slots checked.",
|
||||
"BulkFusionSourceInvalid": "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
}
|
||||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "检测到在多个训练家名称之间共享训练家ID。",
|
||||
"BulkSharingTrainerVersion": "检测到在多个版本间共享训练家ID。",
|
||||
"BulkDuplicateFusionSlot": "检测到同一融合槽位的宝可梦被重复融合。",
|
||||
"BulkDuplicateMegaStoneSlot": "检测到多个宝可梦持有同一枚超级石。",
|
||||
"BulkDuplicateMegaStoneInventory": "检测到宝可梦持有的超级石仍存放于玩家腰包中。",
|
||||
"BulkNotAcquiredMegaStoneInventory": "宝可梦所持的超级石尚未在玩家腰包中获得。",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} 标记为由宝可梦持有,但在已检查的槽位中未找到。",
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "存档中记录的被消耗“种族-形态”与该融合槽位应有的“种族-形态”不一致。"
|
||||
}
|
||||
|
|
@ -367,9 +367,9 @@
|
|||
"BulkSharingTrainerID": "Detected sharing of Trainer ID across multiple trainer names.",
|
||||
"BulkSharingTrainerVersion": "Detected sharing of Trainer ID across multiple versions.",
|
||||
"BulkDuplicateFusionSlot": "Detected multiple fusions of the same fusion stored slot species.",
|
||||
"BulkDuplicateMegaStoneSlot": "Detected multiple Pokémon holding the same Mega Stone.",
|
||||
"BulkDuplicateMegaStoneInventory": "Detected Pokémon holding a Mega Stone still stored in player inventory.",
|
||||
"BulkNotAcquiredMegaStoneInventory": "Mega Stone held by Pokémon has not been acquired in player inventory.",
|
||||
"BulkAssignedMegaStoneNotFound_0": "{0} is marked as held by Pokémon but none found in slots checked.",
|
||||
"BulkFusionSourceInvalid": "The consumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
"BulkHeldItemInventoryAssignedNoneHeld_0": "{0} is marked as held player inventory, but no Pokémon found in slots checked.",
|
||||
"BulkHeldItemInventoryMultipleSlots_0": "{0} is a unique item and cannot be held by multiple Pokémon.",
|
||||
"BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.",
|
||||
"BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.",
|
||||
"BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot."
|
||||
}
|
||||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=Rotation:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=Regular:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=Infinite:
|
||||
SAV_Trainer9a.L_Seconds=Sec:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=Trainer Name:
|
||||
SAV_Trainer9a.L_X=X Coordinate:
|
||||
SAV_Trainer9a.L_Y=Y Coordinate:
|
||||
|
|
|
|||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=Rotation:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=Regular:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=Infinite:
|
||||
SAV_Trainer9a.L_Seconds=Sec:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=Trainer Name:
|
||||
SAV_Trainer9a.L_X=X Coordinate:
|
||||
SAV_Trainer9a.L_Y=Y Coordinate:
|
||||
|
|
|
|||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=Rotation:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=Regular:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=Infinite:
|
||||
SAV_Trainer9a.L_Seconds=Sec:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=Trainer Name:
|
||||
SAV_Trainer9a.L_X=X Coordinate:
|
||||
SAV_Trainer9a.L_Y=Y Coordinate:
|
||||
|
|
|
|||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=Rotacion:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=Regular:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=Infinito:
|
||||
SAV_Trainer9a.L_Seconds=Segs.:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=Nombre Entrenador:
|
||||
SAV_Trainer9a.L_X=Coord. X:
|
||||
SAV_Trainer9a.L_Y=Coord. Y:
|
||||
|
|
|
|||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=Rotation:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=Regular:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=Infinite:
|
||||
SAV_Trainer9a.L_Seconds=Sec:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=Trainer Name:
|
||||
SAV_Trainer9a.L_X=X Coordinate:
|
||||
SAV_Trainer9a.L_Y=Y Coordinate:
|
||||
|
|
|
|||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=Rotation:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=Regular:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=Infinite:
|
||||
SAV_Trainer9a.L_Seconds=Sec:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=Trainer Name:
|
||||
SAV_Trainer9a.L_X=X Coordinate:
|
||||
SAV_Trainer9a.L_Y=Y Coordinate:
|
||||
|
|
|
|||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=Rotation:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=通常:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=∞:
|
||||
SAV_Trainer9a.L_Seconds=秒:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=トレーナー名:
|
||||
SAV_Trainer9a.L_X=X Coordinate:
|
||||
SAV_Trainer9a.L_Y=Y Coordinate:
|
||||
|
|
|
|||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=Rotation:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=Regular:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=Infinite:
|
||||
SAV_Trainer9a.L_Seconds=Sec:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=Trainer Name:
|
||||
SAV_Trainer9a.L_X=X Coordinate:
|
||||
SAV_Trainer9a.L_Y=Y Coordinate:
|
||||
|
|
|
|||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=旋转角度:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=常规:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=无限:
|
||||
SAV_Trainer9a.L_Seconds=秒:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=训练家名字:
|
||||
SAV_Trainer9a.L_X=X坐标:
|
||||
SAV_Trainer9a.L_Y=Y坐标:
|
||||
|
|
|
|||
|
|
@ -2544,6 +2544,7 @@ SAV_Trainer9a.L_R=Rotation:
|
|||
SAV_Trainer9a.L_RoyaleRegularTicketPoints=Regular:
|
||||
SAV_Trainer9a.L_RoyaleTicketPointsInfinite=Infinite:
|
||||
SAV_Trainer9a.L_Seconds=Sec:
|
||||
SAV_Trainer9a.L_StreetName=Street Name:
|
||||
SAV_Trainer9a.L_TrainerName=Trainer Name:
|
||||
SAV_Trainer9a.L_X=X Coordinate:
|
||||
SAV_Trainer9a.L_Y=Y Coordinate:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user