mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-23 12:33:06 +00:00
Faster G7TID generation
#823 generate a random T7SID instead of brute forcing a pair
This commit is contained in:
parent
77a68c23b9
commit
f64d31c557
2 changed files with 30 additions and 29 deletions
|
@ -389,35 +389,9 @@ namespace PKHeX.WinForms
|
||||||
|
|
||||||
private void B_GenTID_Click(object sender, EventArgs e)
|
private void B_GenTID_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
B_GenTID.Text = "Generating";
|
var tuple = SaveUtil.getTIDSID(Util.ToUInt32(MT_G7TID.Text), ModifierKeys == Keys.Control);
|
||||||
B_GenTID.Enabled = false;
|
MT_TID.Text = tuple.Item1.ToString("D5");
|
||||||
int final, i_TID, i_SID;
|
MT_SID.Text = tuple.Item2.ToString("D5");
|
||||||
Random random = new Random();
|
|
||||||
i_TID = random.Next(0, 65535);
|
|
||||||
bool matchFound = false;
|
|
||||||
|
|
||||||
while (!matchFound)
|
|
||||||
{
|
|
||||||
i_SID = 0;
|
|
||||||
|
|
||||||
while (i_SID < 65535 && !matchFound)
|
|
||||||
{
|
|
||||||
final = i_TID + (i_SID * 65536) % 1000000;
|
|
||||||
|
|
||||||
if (final == int.Parse(MT_G7TID.Text))
|
|
||||||
{
|
|
||||||
MT_TID.Text = i_TID.ToString();
|
|
||||||
MT_SID.Text = i_SID.ToString();
|
|
||||||
matchFound = true;
|
|
||||||
B_GenTID.Text = "Generate";
|
|
||||||
B_GenTID.Enabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
i_SID++;
|
|
||||||
}
|
|
||||||
|
|
||||||
i_TID = (i_TID == 65535) ? 0 : i_TID + 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly Dictionary<int, string> RecordList = new Dictionary<int, string>
|
private readonly Dictionary<int, string> RecordList = new Dictionary<int, string>
|
||||||
|
|
|
@ -975,5 +975,32 @@ namespace PKHeX.Core
|
||||||
|
|
||||||
return keys;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a 16bit TID/SID tuple for a given G7TID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="G7TID">Desired G7TID</param>
|
||||||
|
/// <param name="minimizeSID">Optional param to yield minimum SID.</param>
|
||||||
|
/// <returns>16bit TID/SID tuple</returns>
|
||||||
|
public static Tuple<uint, uint> getTIDSID(uint G7TID, bool minimizeSID = false)
|
||||||
|
{
|
||||||
|
// 32 bit number = 4294 967295
|
||||||
|
// lowest 6 digits G7TID
|
||||||
|
|
||||||
|
// Bare minimum 32bit value to get ID, yields min SID
|
||||||
|
uint val = G7TID;
|
||||||
|
if (!minimizeSID) // randomize SID
|
||||||
|
{
|
||||||
|
uint s7 = 4294;
|
||||||
|
if (val > 967295)
|
||||||
|
s7 -= 1;
|
||||||
|
s7 = (uint)Util.rand.Next(0, (int)s7);
|
||||||
|
val += s7 * 1000000;
|
||||||
|
}
|
||||||
|
uint TID = val & 0xFFFF;
|
||||||
|
uint SID = val >> 16;
|
||||||
|
|
||||||
|
return new Tuple<uint, uint>(TID, SID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue