Fix PCD clearing

PCD/PGT have nested objects that do not update when the Data array is
updated.
Solve the problem by adding get/set to those properties.
#730
This commit is contained in:
Kurt 2017-01-20 21:43:59 -08:00
parent 2ab175db6e
commit 615526e9a1

View file

@ -26,18 +26,29 @@ namespace PKHeX.Core
public PCD(byte[] data = null) public PCD(byte[] data = null)
{ {
Data = (byte[])(data?.Clone() ?? new byte[Size]); Data = (byte[])(data?.Clone() ?? new byte[Size]);
}
public PGT Gift
{
get
{
byte[] giftData = new byte[PGT.Size]; byte[] giftData = new byte[PGT.Size];
Array.Copy(Data, 0, giftData, 0, PGT.Size); Array.Copy(Data, 0, giftData, 0, PGT.Size);
Gift = new PGT(giftData); return new PGT(giftData);
}
Information = new byte[Data.Length - PGT.Size]; set { value?.Data.CopyTo(Data, 0); }
Array.Copy(Data, PGT.Size, Information, 0, Information.Length); }
public byte[] Information
{
get
{
var data = new byte[Data.Length - PGT.Size];
Array.Copy(Data, PGT.Size, data, 0, data.Length);
return data;
}
set { value?.CopyTo(Data, Data.Length - PGT.Size); }
} }
public readonly PGT Gift;
public override object Content => Gift.PK; public override object Content => Gift.PK;
public readonly byte[] Information;
public override bool GiftUsed { get { return Gift.GiftUsed; } set { Gift.GiftUsed = value; } } public override bool GiftUsed { get { return Gift.GiftUsed; } set { Gift.GiftUsed = value; } }
public override bool IsPokémon { get { return Gift.IsPokémon; } set { Gift.IsPokémon = value; } } public override bool IsPokémon { get { return Gift.IsPokémon; } set { Gift.IsPokémon = value; } }
public override bool IsItem { get { return Gift.IsItem; } set { Gift.IsItem = value; } } public override bool IsItem { get { return Gift.IsItem; } set { Gift.IsItem = value; } }
@ -128,19 +139,7 @@ namespace PKHeX.Core
public PGT(byte[] data = null) public PGT(byte[] data = null)
{ {
refreshData((byte[])(data?.Clone() ?? new byte[Size])); Data = (byte[])(data?.Clone() ?? new byte[Size]);
}
private void refreshData(byte[] data)
{
byte[] ekdata = new byte[PKX.SIZE_4PARTY];
Array.Copy(data, 8, ekdata, 0, ekdata.Length);
bool empty = ekdata.SequenceEqual(new byte[ekdata.Length]);
PK = new PK4(empty ? ekdata : PKX.decryptArray45(ekdata));
Unknown = new byte[0x10];
Array.Copy(data, 0xF4, Unknown, 0, 0x10);
RAW = data;
} }
public byte CardType { get { return Data[0]; } set { Data[0] = value; } } public byte CardType { get { return Data[0]; } set { Data[0] = value; } }
@ -148,16 +147,41 @@ namespace PKHeX.Core
public byte Slot { get { return Data[2]; } set { Data[2] = value; } } public byte Slot { get { return Data[2]; } set { Data[2] = value; } }
public byte Detail { get { return Data[3]; } set { Data[3] = value; } } public byte Detail { get { return Data[3]; } set { Data[3] = value; } }
public override int Item { get { return BitConverter.ToUInt16(Data, 0x4); } set { BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x4); } } public override int Item { get { return BitConverter.ToUInt16(Data, 0x4); } set { BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x4); } }
public PK4 PK;
private byte[] Unknown;
private byte[] RAW;
public override byte[] Data public PK4 PK
{ {
get { return RAW; } get
{
byte[] ekdata = new byte[PKX.SIZE_4PARTY];
Array.Copy(Data, 8, ekdata, 0, ekdata.Length);
bool empty = ekdata.SequenceEqual(new byte[ekdata.Length]);
return new PK4(empty ? ekdata : PKX.decryptArray45(ekdata));
}
set set
{ {
refreshData(value); if (value == null)
return;
var pkdata = value.Data.SequenceEqual(new byte[value.Data.Length])
? value.Data
: PKX.encryptArray45(value.Data);
pkdata.CopyTo(Data, 8);
}
}
private byte[] Unknown
{
get
{
var data = new byte[0x10];
Array.Copy(Data, 0xF4, data, 0, 0x10);
return data;
}
set
{
if (value == null || value.Length != 10)
return;
value.CopyTo(Data, 0xF4);
} }
} }