mirror of
https://github.com/mm201/pkmn-classic-framework.git
synced 2026-09-08 18:25:13 -05:00
FakeOpponentGenerator now works on Gen5 but has issues.
This commit is contained in:
@@ -12,7 +12,8 @@ namespace PkmnFoundations.GTS
|
||||
/// </summary>
|
||||
public static class FakeOpponentGenerator
|
||||
{
|
||||
const int FAKE_OPPONENTS_COUNT = 7;
|
||||
const int FAKE_OPPONENTS_COUNT_4 = 7;
|
||||
const int FAKE_OPPONENTS_COUNT_5 = 7;
|
||||
|
||||
/// <summary>
|
||||
/// Randomly selects some fake opponents without repeats (if possible)
|
||||
@@ -21,9 +22,11 @@ namespace PkmnFoundations.GTS
|
||||
/// <returns></returns>
|
||||
public static BattleTowerRecordBase[] GenerateFakeOpponents(FakeOpponentFactory factory, int count)
|
||||
{
|
||||
int fakeOpponentsCount = (factory.Generation < Generations.Generation5) ? FAKE_OPPONENTS_COUNT_4 : FAKE_OPPONENTS_COUNT_5;
|
||||
|
||||
// todo: allow more with repeats
|
||||
if (count > FAKE_OPPONENTS_COUNT) throw new ArgumentOutOfRangeException("count");
|
||||
List<int> values = Enumerable.Range(0, FAKE_OPPONENTS_COUNT).ToList();
|
||||
if (count > fakeOpponentsCount) throw new ArgumentOutOfRangeException("count");
|
||||
List<int> values = Enumerable.Range(0, fakeOpponentsCount).ToList();
|
||||
BattleTowerRecordBase[] result = new BattleTowerRecordBase[count];
|
||||
|
||||
Random rand = new Random();
|
||||
@@ -42,17 +45,15 @@ namespace PkmnFoundations.GTS
|
||||
|
||||
public static BattleTowerRecordBase GenerateFakeOpponent(FakeOpponentFactory factory, Pokedex.Pokedex pokedex, int index)
|
||||
{
|
||||
if (index >= FAKE_OPPONENTS_COUNT) throw new ArgumentOutOfRangeException("index");
|
||||
|
||||
BattleTowerRecord4 record = new BattleTowerRecord4(pokedex);
|
||||
record.Party = new BattleTowerPokemon4[3];
|
||||
record.Unknown3 = 7983;
|
||||
BattleTowerRecordBase record = factory.CreateRecord(pokedex);
|
||||
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
record.Party[0] = new BattleTowerPokemon4(pokedex,
|
||||
throw new ArgumentOutOfRangeException("index");
|
||||
|
||||
case 0:
|
||||
record.Party[0] = factory.CreatePokemon(pokedex,
|
||||
9, // Blastoise
|
||||
234, // Leftovers
|
||||
new ushort[] {
|
||||
@@ -65,10 +66,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 10, 20, 31, 31, 20),
|
||||
new byte[] { 6, 0, 0, 252, 252, 0 },
|
||||
0, Languages.English, 67, // Torrent
|
||||
255, new EncodedString4("Leonardo", 22)
|
||||
255, "Leonardo"
|
||||
);
|
||||
|
||||
record.Party[1] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[1] = factory.CreatePokemon(pokedex,
|
||||
389, // Torterra
|
||||
287, // Choice scarf
|
||||
new ushort[] {
|
||||
@@ -81,10 +82,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),
|
||||
new byte[] { 6, 252, 0, 252, 0, 0 },
|
||||
0, Languages.English, 65, // Overgrow
|
||||
255, new EncodedString4("Donatello", 22)
|
||||
255, "Donatello"
|
||||
);
|
||||
|
||||
record.Party[2] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[2] = factory.CreatePokemon(pokedex,
|
||||
324, // Torkoal
|
||||
217, // Quick claw
|
||||
new ushort[] {
|
||||
@@ -97,24 +98,24 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 10, 31, 20, 10, 31),
|
||||
new byte[] { 252, 0, 6, 0, 0, 252 },
|
||||
0, Languages.English, 73, // White smoke
|
||||
255, new EncodedString4("Raphael", 22)
|
||||
255, "Raphael"
|
||||
);
|
||||
|
||||
record.Profile = new BattleTowerProfile4(
|
||||
new EncodedString4("Splnter", 16),
|
||||
record.Profile = factory.CreateProfile(
|
||||
"Splnter",
|
||||
Versions.Platinum, Languages.English,
|
||||
0, 0, 0x01020304,
|
||||
new TrendyPhrase4(0, 16, 291, 7), // Ninjask! Squirtle power!
|
||||
factory.CreateTrendyPhrase(0, 16, 291, 7), // Ninjask! Squirtle power!
|
||||
0, 14 // Black belt
|
||||
);
|
||||
|
||||
record.PhraseChallenged = new TrendyPhrase4(0, 16, 291, 7);
|
||||
record.PhraseWon = new TrendyPhrase4(1, 11, 766, 65535); // I might have won with HELPING HAND!
|
||||
record.PhraseLost = new TrendyPhrase4(2, 8, 1406, 65535); // You're INCREDIBLE, aren't you?
|
||||
record.PhraseChallenged = factory.CreateTrendyPhrase(0, 16, 291, 7);
|
||||
record.PhraseWon = factory.CreateTrendyPhrase(1, 11, 766, 65535); // I might have won with HELPING HAND!
|
||||
record.PhraseLost = factory.CreateTrendyPhrase(2, 8, 1406, 65535); // You're INCREDIBLE, aren't you?
|
||||
break;
|
||||
|
||||
case 1:
|
||||
record.Party[0] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[0] = factory.CreatePokemon(pokedex,
|
||||
376, // Metagross
|
||||
268, // Expert belt
|
||||
new ushort[] {
|
||||
@@ -127,10 +128,10 @@ namespace PkmnFoundations.GTS
|
||||
493780176, // Actual IVs which are crap.
|
||||
new byte[] { 252, 238, 0, 20, 0, 0 },
|
||||
0, Languages.English, 29, // Clear body
|
||||
255, new EncodedString4("Goldfinger", 22)
|
||||
255, "Goldfinger"
|
||||
);
|
||||
|
||||
record.Party[1] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[1] = factory.CreatePokemon(pokedex,
|
||||
282, // Gardevoir
|
||||
297, // Choice specs
|
||||
new ushort[] {
|
||||
@@ -143,10 +144,10 @@ namespace PkmnFoundations.GTS
|
||||
663420771, // Actual IVs, should be decent
|
||||
new byte[] { 254, 0, 56, 144, 56, 0 },
|
||||
0, Languages.English, 36, // Trace
|
||||
255, new EncodedString4("Curly", 22)
|
||||
255, "Curly"
|
||||
);
|
||||
|
||||
record.Party[2] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[2] = factory.CreatePokemon(pokedex,
|
||||
134, // Vaporeon
|
||||
234, // Leftovers
|
||||
new ushort[] {
|
||||
@@ -159,24 +160,25 @@ namespace PkmnFoundations.GTS
|
||||
514292539,
|
||||
new byte[] { 204, 0, 254, 0, 52, 0 },
|
||||
0, Languages.English, 11, // Water absorb
|
||||
255, new EncodedString4("Seabiscuit", 22)
|
||||
255, "Seabiscuit"
|
||||
);
|
||||
|
||||
record.Profile = new BattleTowerProfile4(
|
||||
new EncodedString4("Megan", 16),
|
||||
// fixme: Trendy phrases and trainer classes are nonsense on Gen5 because the magic numbers are only valid for Gen4.
|
||||
record.Profile = factory.CreateProfile(
|
||||
"Megan",
|
||||
Versions.Platinum, Languages.English,
|
||||
0, 0, 0x02030405,
|
||||
new TrendyPhrase4(3, 8, 1487, 65535), // There's only WI-FI left!
|
||||
factory.CreateTrendyPhrase(3, 8, 1487, 65535), // There's only WI-FI left!
|
||||
2, 33 // Lady
|
||||
);
|
||||
|
||||
record.PhraseChallenged = new TrendyPhrase4(3, 8, 1487, 65535);
|
||||
record.PhraseWon = new TrendyPhrase4(3, 3, 1492, 1439); // This BATTLE TOWER is DIFFICULT, isn't it?
|
||||
record.PhraseLost = new TrendyPhrase4(3, 2, 1493, 1492); // I love GTS! I love BATTLE TOWER too!
|
||||
record.PhraseChallenged = factory.CreateTrendyPhrase(3, 8, 1487, 65535);
|
||||
record.PhraseWon = factory.CreateTrendyPhrase(3, 3, 1492, 1439); // This BATTLE TOWER is DIFFICULT, isn't it?
|
||||
record.PhraseLost = factory.CreateTrendyPhrase(3, 2, 1493, 1492); // I love GTS! I love BATTLE TOWER too!
|
||||
break;
|
||||
|
||||
case 2:
|
||||
record.Party[0] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[0] = factory.CreatePokemon(pokedex,
|
||||
392, // Infernape
|
||||
275, // Focus sash
|
||||
new ushort[] {
|
||||
@@ -189,10 +191,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),
|
||||
new byte[] { 6, 252, 0, 252, 0, 0 },
|
||||
0, Languages.English, 66, // Blaze
|
||||
255, new EncodedString4("FunkyMunky", 22)
|
||||
255, "FunkyMunky"
|
||||
);
|
||||
|
||||
record.Party[1] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[1] = factory.CreatePokemon(pokedex,
|
||||
235, // Smeargle
|
||||
210, // Custap
|
||||
new ushort[] {
|
||||
@@ -205,10 +207,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 10, 31, 31, 10, 20),
|
||||
new byte[] { 252, 0, 6, 252, 0, 0 },
|
||||
0, Languages.English, 101, // Technician
|
||||
255, new EncodedString4("Yourself", 22)
|
||||
255, "Yourself"
|
||||
);
|
||||
|
||||
record.Party[2] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[2] = factory.CreatePokemon(pokedex,
|
||||
365, // Walrein
|
||||
217, // Quick claw
|
||||
new ushort[] {
|
||||
@@ -221,24 +223,24 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 10, 20, 31, 10, 31),
|
||||
new byte[] { 252, 0, 0, 252, 0, 6 },
|
||||
0, Languages.English, 47, // Thick fat
|
||||
255, new EncodedString4("Problem?", 22)
|
||||
255, "Problem?"
|
||||
);
|
||||
|
||||
record.Profile = new BattleTowerProfile4(
|
||||
new EncodedString4("Dennis", 16),
|
||||
record.Profile = factory.CreateProfile(
|
||||
"Dennis",
|
||||
Versions.Platinum, Languages.English,
|
||||
0, 0, 0x02030405,
|
||||
new TrendyPhrase4(1, 12, 1147, 65535), // I get the happiest with MOTHER
|
||||
factory.CreateTrendyPhrase(1, 12, 1147, 65535), // I get the happiest with MOTHER
|
||||
0, 32 // Rich boy
|
||||
);
|
||||
|
||||
record.PhraseChallenged = new TrendyPhrase4(1, 12, 1147, 65535);
|
||||
record.PhraseWon = new TrendyPhrase4(2, 8, 1140, 65535); // You're WEAK, aren't you?
|
||||
record.PhraseLost = new TrendyPhrase4(2, 6, 1421, 65535); // ROFL! How awful!
|
||||
record.PhraseChallenged = factory.CreateTrendyPhrase(1, 12, 1147, 65535);
|
||||
record.PhraseWon = factory.CreateTrendyPhrase(2, 8, 1140, 65535); // You're WEAK, aren't you?
|
||||
record.PhraseLost = factory.CreateTrendyPhrase(2, 6, 1421, 65535); // ROFL! How awful!
|
||||
break;
|
||||
|
||||
case 3:
|
||||
record.Party[0] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[0] = factory.CreatePokemon(pokedex,
|
||||
248, // Tyranitar
|
||||
189, // Chople
|
||||
new ushort[] {
|
||||
@@ -251,10 +253,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),
|
||||
new byte[] { 6, 252, 0, 252, 0, 0 },
|
||||
0, Languages.English, 45, // Sand stream
|
||||
255, new EncodedString4("Tyranitar", 22)
|
||||
255, "Tyranitar"
|
||||
);
|
||||
|
||||
record.Party[1] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[1] = factory.CreatePokemon(pokedex,
|
||||
212, // Scizor
|
||||
270, // Life orb
|
||||
new ushort[] {
|
||||
@@ -267,10 +269,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),
|
||||
new byte[] { 6, 252, 0, 252, 0, 0 },
|
||||
0, Languages.English, 101, // Technician
|
||||
255, new EncodedString4("Scizor", 22)
|
||||
255, "Scizor"
|
||||
);
|
||||
|
||||
record.Party[2] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[2] = factory.CreatePokemon(pokedex,
|
||||
485, // Heatran
|
||||
234, // Leftovers
|
||||
new ushort[] {
|
||||
@@ -284,24 +286,24 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 10, 20, 20, 31, 31),
|
||||
new byte[] { 250, 0, 0, 0, 56, 204 },
|
||||
0, Languages.English, 18, // Flash fire
|
||||
255, new EncodedString4("Heatran", 22)
|
||||
255, "Heatran"
|
||||
);
|
||||
|
||||
record.Profile = new BattleTowerProfile4(
|
||||
new EncodedString4("Dusty", 16),
|
||||
record.Profile = factory.CreateProfile(
|
||||
"Dusty",
|
||||
Versions.Platinum, Languages.English,
|
||||
0, 0, 0x03040506,
|
||||
new TrendyPhrase4(3, 4, 1342, 65535), // I can do anything for TREASURE
|
||||
factory.CreateTrendyPhrase(3, 4, 1342, 65535), // I can do anything for TREASURE
|
||||
0, 48 // Ruin Maniac
|
||||
);
|
||||
|
||||
record.PhraseChallenged = new TrendyPhrase4(3, 4, 1342, 65535);
|
||||
record.PhraseWon = new TrendyPhrase4(3, 6, 1148, 1107); // GRANDFATHER is the real NO.1
|
||||
record.PhraseLost = new TrendyPhrase4(3, 10, 1389, 65535); // I prefer VACATION after all
|
||||
record.PhraseChallenged = factory.CreateTrendyPhrase(3, 4, 1342, 65535);
|
||||
record.PhraseWon = factory.CreateTrendyPhrase(3, 6, 1148, 1107); // GRANDFATHER is the real NO.1
|
||||
record.PhraseLost = factory.CreateTrendyPhrase(3, 10, 1389, 65535); // I prefer VACATION after all
|
||||
break;
|
||||
|
||||
case 4:
|
||||
record.Party[0] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[0] = factory.CreatePokemon(pokedex,
|
||||
460, // Abomasnow
|
||||
287, // Scarf
|
||||
new ushort[] {
|
||||
@@ -316,10 +318,10 @@ namespace PkmnFoundations.GTS
|
||||
// Adjusted for Hidden Power IVs, sacrificing some Attack
|
||||
new byte[] { 0, 148, 0, 234, 128, 0 },
|
||||
0, Languages.English, 117, // Snow warning
|
||||
255, new EncodedString4("Abomasnow", 22)
|
||||
255, "Abomasnow"
|
||||
);
|
||||
|
||||
record.Party[1] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[1] = factory.CreatePokemon(pokedex,
|
||||
471, // Glaceon
|
||||
246, // Nevermeltice
|
||||
new ushort[] {
|
||||
@@ -332,10 +334,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 10, 20, 31, 31, 20),
|
||||
new byte[] { 6, 0, 0, 252, 252, 0 },
|
||||
0, Languages.English, 81, // Snow cloak
|
||||
255, new EncodedString4("Glaceon", 22)
|
||||
255, "Glaceon"
|
||||
);
|
||||
|
||||
record.Party[2] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[2] = factory.CreatePokemon(pokedex,
|
||||
461, // Weavile
|
||||
275, // Focus sash
|
||||
new ushort[] {
|
||||
@@ -348,24 +350,24 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),
|
||||
new byte[] { 40, 252, 0, 218, 0, 0 },
|
||||
0, Languages.English, 46, // Pressure
|
||||
255, new EncodedString4("Weavile", 22)
|
||||
255, "Weavile"
|
||||
);
|
||||
|
||||
record.Profile = new BattleTowerProfile4(
|
||||
new EncodedString4("Frosty", 16),
|
||||
record.Profile = factory.CreateProfile(
|
||||
"Frosty",
|
||||
Versions.Platinum, Languages.English,
|
||||
0, 0, 0x04050607,
|
||||
new TrendyPhrase4(3, 3, 677, 1438), // This POWDER SNOW is NICE, isn't it?
|
||||
factory.CreateTrendyPhrase(3, 3, 677, 1438), // This POWDER SNOW is NICE, isn't it?
|
||||
2, 35 // Socialite
|
||||
);
|
||||
|
||||
record.PhraseChallenged = new TrendyPhrase4(3, 3, 677, 1438);
|
||||
record.PhraseWon = new TrendyPhrase4(1, 14, 797, 65535); // This ICE BALL was really good
|
||||
record.PhraseLost = new TrendyPhrase4(2, 5, 752, 65535); // Could it be? HEAT WAVE
|
||||
record.PhraseChallenged = factory.CreateTrendyPhrase(3, 3, 677, 1438);
|
||||
record.PhraseWon = factory.CreateTrendyPhrase(1, 14, 797, 65535); // This ICE BALL was really good
|
||||
record.PhraseLost = factory.CreateTrendyPhrase(2, 5, 752, 65535); // Could it be? HEAT WAVE
|
||||
break;
|
||||
|
||||
case 5:
|
||||
record.Party[0] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[0] = factory.CreatePokemon(pokedex,
|
||||
437, // Bronzong
|
||||
234, // Leftovers
|
||||
new ushort[] {
|
||||
@@ -378,10 +380,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 20, 31, 0, 10, 20),
|
||||
new byte[] { 252, 0, 252, 0, 0, 6 },
|
||||
0, Languages.English, 26, // Levitate
|
||||
255, new EncodedString4("Bronzong", 22)
|
||||
255, "Bronzong"
|
||||
);
|
||||
|
||||
record.Party[1] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[1] = factory.CreatePokemon(pokedex,
|
||||
464, // Rhyperior
|
||||
270, // Life orb
|
||||
new ushort[] {
|
||||
@@ -394,10 +396,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 31, 31, 10, 10, 20),
|
||||
new byte[] { 248, 252, 10, 0, 0, 0 },
|
||||
0, Languages.English, 116, // Solid rock
|
||||
255, new EncodedString4("Rhyperior", 22)
|
||||
255, "Rhyperior"
|
||||
);
|
||||
|
||||
record.Party[2] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[2] = factory.CreatePokemon(pokedex,
|
||||
462, // Magnezone
|
||||
268, // Expert belt
|
||||
new ushort[] {
|
||||
@@ -410,24 +412,24 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 10, 31, 10, 31, 20),
|
||||
new byte[] { 252, 0, 6, 0, 252, 0 },
|
||||
0, Languages.English, 42, // Magnet pull
|
||||
255, new EncodedString4("Magnezone", 22)
|
||||
255, "Magnezone"
|
||||
);
|
||||
|
||||
record.Profile = new BattleTowerProfile4(
|
||||
new EncodedString4("Cassie", 16),
|
||||
record.Profile = factory.CreateProfile(
|
||||
"Cassie",
|
||||
Versions.Platinum, Languages.English,
|
||||
0, 0, 0x05060708,
|
||||
new TrendyPhrase4(2, 3, 1146, 65535), // I want to go home with YOU...
|
||||
factory.CreateTrendyPhrase(2, 3, 1146, 65535), // I want to go home with YOU...
|
||||
2, 85 // Idol
|
||||
);
|
||||
|
||||
record.PhraseChallenged = new TrendyPhrase4(2, 3, 1146, 65535);
|
||||
record.PhraseWon = new TrendyPhrase4(4, 10, 1245, 65535); // Let's GO AHEAD!
|
||||
record.PhraseLost = new TrendyPhrase4(4, 11, 1348, 65535); // Want to DATE?
|
||||
record.PhraseChallenged = factory.CreateTrendyPhrase(2, 3, 1146, 65535);
|
||||
record.PhraseWon = factory.CreateTrendyPhrase(4, 10, 1245, 65535); // Let's GO AHEAD!
|
||||
record.PhraseLost = factory.CreateTrendyPhrase(4, 11, 1348, 65535); // Want to DATE?
|
||||
break;
|
||||
|
||||
case 6:
|
||||
record.Party[0] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[0] = factory.CreatePokemon(pokedex,
|
||||
65, // Alakazam
|
||||
275, // Focus sash
|
||||
new ushort[] {
|
||||
@@ -440,10 +442,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 10, 20, 31, 31, 20),
|
||||
new byte[] { 6, 0, 0, 252, 252, 6 },
|
||||
0, Languages.English, 39, // Inner focus
|
||||
255, new EncodedString4("Alakazam", 22)
|
||||
255, "Alakazam"
|
||||
);
|
||||
|
||||
record.Party[1] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[1] = factory.CreatePokemon(pokedex,
|
||||
445, // Garchomp
|
||||
270, // Life orb
|
||||
new ushort[] {
|
||||
@@ -456,10 +458,10 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),
|
||||
new byte[] { 6, 252, 0, 252, 0, 0 },
|
||||
0, Languages.English, 8, // Sand veil
|
||||
255, new EncodedString4("Garchomp", 22)
|
||||
255, "Garchomp"
|
||||
);
|
||||
|
||||
record.Party[2] = new BattleTowerPokemon4(pokedex,
|
||||
record.Party[2] = factory.CreatePokemon(pokedex,
|
||||
242, // Blissey
|
||||
234, // Leftovers
|
||||
new ushort[] {
|
||||
@@ -472,20 +474,20 @@ namespace PkmnFoundations.GTS
|
||||
IvStatValues.PackIVs(31, 10, 31, 31, 20, 20),
|
||||
new byte[] { 252, 0, 252, 6, 0, 0 },
|
||||
0, Languages.English, 30, // Natural cure
|
||||
255, new EncodedString4("Blissey", 22)
|
||||
255, "Blissey"
|
||||
);
|
||||
|
||||
record.Profile = new BattleTowerProfile4(
|
||||
new EncodedString4("Evan", 16),
|
||||
record.Profile = factory.CreateProfile(
|
||||
"Evan",
|
||||
Versions.Platinum, Languages.English,
|
||||
0, 0, 0x06070809,
|
||||
new TrendyPhrase4(0, 2, 566, 65535), // I'll battle with STRENGTH!
|
||||
factory.CreateTrendyPhrase(0, 2, 566, 65535), // I'll battle with STRENGTH!
|
||||
0, 24 // Ace trainer M
|
||||
);
|
||||
|
||||
record.PhraseChallenged = new TrendyPhrase4(0, 2, 566, 65535);
|
||||
record.PhraseWon = new TrendyPhrase4(1, 1, 1418, 65535); // I won! I won with SKILLFUL!
|
||||
record.PhraseLost = new TrendyPhrase4(2, 17, 1428, 65535); // The way I lost... It's like RARE...
|
||||
record.PhraseChallenged = factory.CreateTrendyPhrase(0, 2, 566, 65535);
|
||||
record.PhraseWon = factory.CreateTrendyPhrase(1, 1, 1418, 65535); // I won! I won with SKILLFUL!
|
||||
record.PhraseLost = factory.CreateTrendyPhrase(2, 17, 1428, 65535); // The way I lost... It's like RARE...
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -506,6 +508,8 @@ namespace PkmnFoundations.GTS
|
||||
TrendyPhraseBase phrase_leader, byte gender, byte unknown);
|
||||
|
||||
public abstract TrendyPhraseBase CreateTrendyPhrase(ushort mood, ushort index, ushort word1, ushort word2);
|
||||
|
||||
public abstract Generations Generation { get; }
|
||||
}
|
||||
|
||||
public class FakeOpponentFactory4 : FakeOpponentFactory
|
||||
@@ -554,6 +558,14 @@ namespace PkmnFoundations.GTS
|
||||
{
|
||||
return new TrendyPhrase4(mood, index, word1, word2);
|
||||
}
|
||||
|
||||
public override Generations Generation
|
||||
{
|
||||
get
|
||||
{
|
||||
return Generations.Generation4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class FakeOpponentFactory5 : FakeOpponentFactory
|
||||
@@ -601,6 +613,13 @@ namespace PkmnFoundations.GTS
|
||||
{
|
||||
return new TrendyPhrase5(mood, index, word1, word2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public override Generations Generation
|
||||
{
|
||||
get
|
||||
{
|
||||
return Generations.Generation5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -518,14 +518,14 @@ namespace PkmnFoundations.GTS
|
||||
return;
|
||||
}
|
||||
|
||||
FakeOpponentFactory5 fact = new FakeOpponentFactory5();
|
||||
BattleSubwayRecord5[] opponents = Database.Instance.BattleSubwayGetOpponents5(pokedex, pid, rank, roomNum);
|
||||
BattleSubwayProfile5[] leaders = Database.Instance.BattleSubwayGetLeaders5(pokedex, rank, roomNum);
|
||||
BattleTowerRecordBase[] fakeOpponents = FakeOpponentGenerator.GenerateFakeOpponents(fact, 7 - opponents.Length);
|
||||
|
||||
if (opponents.Length != 7)
|
||||
foreach (BattleSubwayRecord5 record in fakeOpponents)
|
||||
{
|
||||
// todo: Implement fake trainers on Gen5 too.
|
||||
ShowError(context, 500);
|
||||
return;
|
||||
response.Write(record.Save(), 0, 240);
|
||||
}
|
||||
|
||||
foreach (BattleSubwayRecord5 record in opponents)
|
||||
|
||||
@@ -686,9 +686,9 @@ namespace PkmnFoundations.Data
|
||||
"TimeUpdated = UTC_TIMESTAMP() WHERE id = @id",
|
||||
_params.ToArray());
|
||||
|
||||
UpdateBattleTowerPokemon4(tran, record.Party[0], pkey, 0);
|
||||
UpdateBattleTowerPokemon4(tran, record.Party[1], pkey, 1);
|
||||
UpdateBattleTowerPokemon4(tran, record.Party[2], pkey, 2);
|
||||
UpdateBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[0], pkey, 0);
|
||||
UpdateBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[1], pkey, 1);
|
||||
UpdateBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[2], pkey, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -707,9 +707,9 @@ namespace PkmnFoundations.Data
|
||||
"SELECT LAST_INSERT_ID()",
|
||||
_params.ToArray()));
|
||||
|
||||
InsertBattleTowerPokemon4(tran, record.Party[0], pkey, 0);
|
||||
InsertBattleTowerPokemon4(tran, record.Party[1], pkey, 1);
|
||||
InsertBattleTowerPokemon4(tran, record.Party[2], pkey, 2);
|
||||
InsertBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[0], pkey, 0);
|
||||
InsertBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[1], pkey, 1);
|
||||
InsertBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[2], pkey, 2);
|
||||
}
|
||||
|
||||
return pkey;
|
||||
@@ -754,16 +754,17 @@ namespace PkmnFoundations.Data
|
||||
private List<MySqlParameter> ParamsFromBattleTowerRecord4(BattleTowerRecord4 record, bool leader)
|
||||
{
|
||||
List<MySqlParameter> result = new List<MySqlParameter>(15);
|
||||
BattleTowerProfile4 profile = (BattleTowerProfile4)record.Profile;
|
||||
result.Add(new MySqlParameter("@pid", record.PID));
|
||||
result.Add(new MySqlParameter("@name", record.Profile.Name.RawData));
|
||||
result.Add(new MySqlParameter("@version", (byte)record.Profile.Version));
|
||||
result.Add(new MySqlParameter("@language", (byte)record.Profile.Language));
|
||||
result.Add(new MySqlParameter("@country", record.Profile.Country));
|
||||
result.Add(new MySqlParameter("@region", record.Profile.Region));
|
||||
result.Add(new MySqlParameter("@trainer_id", record.Profile.OT));
|
||||
result.Add(new MySqlParameter("@phrase_leader", record.Profile.PhraseLeader.Data));
|
||||
result.Add(new MySqlParameter("@gender", record.Profile.Gender));
|
||||
result.Add(new MySqlParameter("@unknown2", record.Profile.Unknown));
|
||||
result.Add(new MySqlParameter("@name", profile.Name.RawData));
|
||||
result.Add(new MySqlParameter("@version", (byte)profile.Version));
|
||||
result.Add(new MySqlParameter("@language", (byte)profile.Language));
|
||||
result.Add(new MySqlParameter("@country", profile.Country));
|
||||
result.Add(new MySqlParameter("@region", profile.Region));
|
||||
result.Add(new MySqlParameter("@trainer_id", profile.OT));
|
||||
result.Add(new MySqlParameter("@phrase_leader", profile.PhraseLeader.Data));
|
||||
result.Add(new MySqlParameter("@gender", profile.Gender));
|
||||
result.Add(new MySqlParameter("@unknown2", profile.Unknown));
|
||||
result.Add(new MySqlParameter("@rank", record.Rank));
|
||||
result.Add(new MySqlParameter("@room", record.RoomNum));
|
||||
if (!leader)
|
||||
@@ -870,6 +871,7 @@ namespace PkmnFoundations.Data
|
||||
|
||||
if (oPkey == null)
|
||||
{
|
||||
BattleTowerProfile4 profile = (BattleTowerProfile4)record.Profile;
|
||||
// PID isn't found. Try to match one of Pikachu025's saved
|
||||
// records based on unchanging properties of the savegame.
|
||||
oPkey = tran.ExecuteScalar("SELECT id FROM " + tblName +
|
||||
@@ -878,10 +880,10 @@ namespace PkmnFoundations.Data
|
||||
"AND Language = @language AND TrainerID = @trainer_id",
|
||||
new MySqlParameter("@rank", record.Rank),
|
||||
new MySqlParameter("@room", record.RoomNum),
|
||||
new MySqlParameter("@name", record.Profile.Name.RawData),
|
||||
new MySqlParameter("@version", (byte)record.Profile.Version),
|
||||
new MySqlParameter("@language", (byte)record.Profile.Language),
|
||||
new MySqlParameter("@trainer_id", record.Profile.OT)
|
||||
new MySqlParameter("@name", profile.Name.RawData),
|
||||
new MySqlParameter("@version", (byte)profile.Version),
|
||||
new MySqlParameter("@language", (byte)profile.Language),
|
||||
new MySqlParameter("@trainer_id", profile.OT)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1000,7 +1002,7 @@ namespace PkmnFoundations.Data
|
||||
new MySqlParameter("@room", roomNum)))
|
||||
{
|
||||
while (reader.Read())
|
||||
profiles.Add(BattleTowerRecord4FromReader(reader, pokedex).Profile);
|
||||
profiles.Add((BattleTowerProfile4)BattleTowerRecord4FromReader(reader, pokedex).Profile);
|
||||
|
||||
reader.Close();
|
||||
}
|
||||
@@ -1915,9 +1917,9 @@ namespace PkmnFoundations.Data
|
||||
"TimeUpdated = UTC_TIMESTAMP() WHERE id = @id",
|
||||
_params.ToArray());
|
||||
|
||||
UpdateBattleSubwayPokemon5(tran, record.Party[0], pkey, 0);
|
||||
UpdateBattleSubwayPokemon5(tran, record.Party[1], pkey, 1);
|
||||
UpdateBattleSubwayPokemon5(tran, record.Party[2], pkey, 2);
|
||||
UpdateBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[0], pkey, 0);
|
||||
UpdateBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[1], pkey, 1);
|
||||
UpdateBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[2], pkey, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1936,9 +1938,9 @@ namespace PkmnFoundations.Data
|
||||
"SELECT LAST_INSERT_ID()",
|
||||
_params.ToArray()));
|
||||
|
||||
InsertBattleSubwayPokemon5(tran, record.Party[0], pkey, 0);
|
||||
InsertBattleSubwayPokemon5(tran, record.Party[1], pkey, 1);
|
||||
InsertBattleSubwayPokemon5(tran, record.Party[2], pkey, 2);
|
||||
InsertBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[0], pkey, 0);
|
||||
InsertBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[1], pkey, 1);
|
||||
InsertBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[2], pkey, 2);
|
||||
}
|
||||
|
||||
return pkey;
|
||||
@@ -1978,17 +1980,18 @@ namespace PkmnFoundations.Data
|
||||
|
||||
private List<MySqlParameter> ParamsFromBattleSubwayRecord5(BattleSubwayRecord5 record, bool leader)
|
||||
{
|
||||
BattleSubwayProfile5 profile = (BattleSubwayProfile5)record.Profile;
|
||||
List<MySqlParameter> result = new List<MySqlParameter>(15);
|
||||
result.Add(new MySqlParameter("@pid", record.PID));
|
||||
result.Add(new MySqlParameter("@name", record.Profile.Name.RawData));
|
||||
result.Add(new MySqlParameter("@version", (byte)record.Profile.Version));
|
||||
result.Add(new MySqlParameter("@language", (byte)record.Profile.Language));
|
||||
result.Add(new MySqlParameter("@country", record.Profile.Country));
|
||||
result.Add(new MySqlParameter("@region", record.Profile.Region));
|
||||
result.Add(new MySqlParameter("@trainer_id", record.Profile.OT));
|
||||
result.Add(new MySqlParameter("@phrase_leader", record.Profile.PhraseLeader.Data));
|
||||
result.Add(new MySqlParameter("@gender", record.Profile.Gender));
|
||||
result.Add(new MySqlParameter("@unknown2", record.Profile.Unknown));
|
||||
result.Add(new MySqlParameter("@name", profile.Name.RawData));
|
||||
result.Add(new MySqlParameter("@version", (byte)profile.Version));
|
||||
result.Add(new MySqlParameter("@language", (byte)profile.Language));
|
||||
result.Add(new MySqlParameter("@country", profile.Country));
|
||||
result.Add(new MySqlParameter("@region", profile.Region));
|
||||
result.Add(new MySqlParameter("@trainer_id", profile.OT));
|
||||
result.Add(new MySqlParameter("@phrase_leader", profile.PhraseLeader.Data));
|
||||
result.Add(new MySqlParameter("@gender", profile.Gender));
|
||||
result.Add(new MySqlParameter("@unknown2", profile.Unknown));
|
||||
result.Add(new MySqlParameter("@rank", record.Rank));
|
||||
result.Add(new MySqlParameter("@room", record.RoomNum));
|
||||
if (!leader)
|
||||
@@ -2097,6 +2100,7 @@ namespace PkmnFoundations.Data
|
||||
|
||||
if (oPkey == null)
|
||||
{
|
||||
BattleSubwayProfile5 profile = (BattleSubwayProfile5)record.Profile;
|
||||
// PID isn't found. Try to match one of Pikachu025's saved
|
||||
// records based on unchanging properties of the savegame.
|
||||
oPkey = tran.ExecuteScalar("SELECT id FROM " + tblName +
|
||||
@@ -2105,10 +2109,10 @@ namespace PkmnFoundations.Data
|
||||
"AND Language = @language AND TrainerID = @trainer_id",
|
||||
new MySqlParameter("@rank", record.Rank),
|
||||
new MySqlParameter("@room", record.RoomNum),
|
||||
new MySqlParameter("@name", record.Profile.Name.RawData),
|
||||
new MySqlParameter("@version", (byte)record.Profile.Version),
|
||||
new MySqlParameter("@language", (byte)record.Profile.Language),
|
||||
new MySqlParameter("@trainer_id", record.Profile.OT)
|
||||
new MySqlParameter("@name", profile.Name.RawData),
|
||||
new MySqlParameter("@version", (byte)profile.Version),
|
||||
new MySqlParameter("@language", (byte)profile.Language),
|
||||
new MySqlParameter("@trainer_id", profile.OT)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2235,7 +2239,7 @@ namespace PkmnFoundations.Data
|
||||
new MySqlParameter("@room", roomNum)))
|
||||
{
|
||||
while (reader.Read())
|
||||
profiles.Add(BattleSubwayRecord5FromReader(reader, pokedex).Profile);
|
||||
profiles.Add((BattleSubwayProfile5)BattleSubwayRecord5FromReader(reader, pokedex).Profile);
|
||||
|
||||
reader.Close();
|
||||
}
|
||||
|
||||
@@ -28,12 +28,80 @@ namespace PkmnFoundations.Structures
|
||||
|
||||
public Pokedex.Pokedex Pokedex { get; set; }
|
||||
|
||||
public BattleSubwayPokemon5[] Party;
|
||||
public BattleSubwayProfile5 Profile;
|
||||
private BattleSubwayPokemon5[] m_party;
|
||||
private BattleSubwayProfile5 m_profile;
|
||||
private TrendyPhrase5 m_phrase_challenged;
|
||||
private TrendyPhrase5 m_phrase_won;
|
||||
private TrendyPhrase5 m_phrase_lost;
|
||||
|
||||
public override IList<BattleTowerPokemonBase> Party
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_party;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (!(value is BattleSubwayPokemon5[])) throw new ArgumentException("value must be BattleSubwayPokemon5[]");
|
||||
BattleSubwayPokemon5[] party = (BattleSubwayPokemon5[])value;
|
||||
if (party.Length != 3) throw new ArgumentException("value must have length 3");
|
||||
m_party = party;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override BattleTowerProfileBase Profile
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_profile;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
m_profile = (BattleSubwayProfile5)value;
|
||||
}
|
||||
}
|
||||
|
||||
public override TrendyPhraseBase PhraseChallenged
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_phrase_challenged;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
m_phrase_challenged = (TrendyPhrase5)value;
|
||||
}
|
||||
}
|
||||
|
||||
public override TrendyPhraseBase PhraseWon
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_phrase_won;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
m_phrase_won = (TrendyPhrase5)value;
|
||||
}
|
||||
}
|
||||
|
||||
public override TrendyPhraseBase PhraseLost
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_phrase_lost;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
m_phrase_lost = (TrendyPhrase5)value;
|
||||
}
|
||||
}
|
||||
|
||||
public TrendyPhrase5 PhraseChallenged;
|
||||
public TrendyPhrase5 PhraseWon;
|
||||
public TrendyPhrase5 PhraseLost;
|
||||
public ushort Unknown3;
|
||||
|
||||
public byte Rank;
|
||||
@@ -53,7 +121,7 @@ namespace PkmnFoundations.Structures
|
||||
{
|
||||
writer.Write(Party[x].Save());
|
||||
}
|
||||
writer.Write(Profile.Save());
|
||||
writer.Write(((BattleSubwayProfile5)Profile).Save());
|
||||
writer.Write(PhraseChallenged.Data);
|
||||
writer.Write(PhraseWon.Data);
|
||||
writer.Write(PhraseLost.Data);
|
||||
|
||||
@@ -28,12 +28,80 @@ namespace PkmnFoundations.Structures
|
||||
|
||||
public Pokedex.Pokedex Pokedex { get; set; }
|
||||
|
||||
public BattleTowerPokemon4[] Party;
|
||||
public BattleTowerProfile4 Profile;
|
||||
private BattleTowerPokemon4[] m_party;
|
||||
private BattleTowerProfile4 m_profile;
|
||||
private TrendyPhrase4 m_phrase_challenged;
|
||||
private TrendyPhrase4 m_phrase_won;
|
||||
private TrendyPhrase4 m_phrase_lost;
|
||||
|
||||
public override IList<BattleTowerPokemonBase> Party
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_party;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (!(value is BattleTowerPokemon4[])) throw new ArgumentException("value must be BattleTowerPokemon4[]");
|
||||
BattleTowerPokemon4[] party = (BattleTowerPokemon4[])value;
|
||||
if (party.Length != 3) throw new ArgumentException("value must have length 3");
|
||||
m_party = party;
|
||||
}
|
||||
}
|
||||
|
||||
public override BattleTowerProfileBase Profile
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_profile;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
m_profile = (BattleTowerProfile4)value;
|
||||
}
|
||||
}
|
||||
|
||||
public override TrendyPhraseBase PhraseChallenged
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_phrase_challenged;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
m_phrase_challenged = (TrendyPhrase4)value;
|
||||
}
|
||||
}
|
||||
|
||||
public override TrendyPhraseBase PhraseWon
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_phrase_won;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
m_phrase_won = (TrendyPhrase4)value;
|
||||
}
|
||||
}
|
||||
|
||||
public override TrendyPhraseBase PhraseLost
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_phrase_lost;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
m_phrase_lost = (TrendyPhrase4)value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public TrendyPhrase4 PhraseChallenged;
|
||||
public TrendyPhrase4 PhraseWon;
|
||||
public TrendyPhrase4 PhraseLost;
|
||||
public ushort Unknown3; // Seems to be some sort of Elo rating. Goes up to about 8000.
|
||||
|
||||
public byte Rank;
|
||||
@@ -52,7 +120,7 @@ namespace PkmnFoundations.Structures
|
||||
{
|
||||
writer.Write(Party[x].Save());
|
||||
}
|
||||
writer.Write(Profile.Save());
|
||||
writer.Write(((BattleTowerProfile4)Profile).Save());
|
||||
writer.Write(PhraseChallenged.Data);
|
||||
writer.Write(PhraseWon.Data);
|
||||
writer.Write(PhraseLost.Data);
|
||||
@@ -67,7 +135,7 @@ namespace PkmnFoundations.Structures
|
||||
{
|
||||
if (start + 0xe4 > data.Length) throw new ArgumentOutOfRangeException("start");
|
||||
|
||||
Party = new BattleTowerPokemon4[3];
|
||||
m_party = new BattleTowerPokemon4[3];
|
||||
for (int x = 0; x < 3; x++)
|
||||
{
|
||||
Party[x] = new BattleTowerPokemon4(Pokedex, data, start + x * 0x38);
|
||||
|
||||
@@ -2,11 +2,20 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using PkmnFoundations.Support;
|
||||
|
||||
namespace PkmnFoundations.Structures
|
||||
{
|
||||
public abstract class BattleTowerRecordBase
|
||||
{
|
||||
// todo: move much of implementation in here from derived classes
|
||||
|
||||
public abstract IList<BattleTowerPokemonBase> Party { get; set; }
|
||||
|
||||
public abstract BattleTowerProfileBase Profile { get; set; }
|
||||
|
||||
public abstract TrendyPhraseBase PhraseChallenged { get; set; }
|
||||
public abstract TrendyPhraseBase PhraseWon { get; set; }
|
||||
public abstract TrendyPhraseBase PhraseLost { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user