fix some ep3 documentation

This commit is contained in:
Martin Michelsen
2022-10-05 11:12:50 -07:00
parent 026befe6ac
commit 4eb46b293e
2 changed files with 21 additions and 16 deletions
+20 -15
View File
@@ -2072,7 +2072,8 @@ struct C_SetBlockedSenders_BB_C6 : C_SetBlockedSenders_C6<28> { };
// CC (S->C): Confirm tournament entry (Episode 3) // CC (S->C): Confirm tournament entry (Episode 3)
// This command is not valid on Episode 3 Trial Edition. // This command is not valid on Episode 3 Trial Edition.
// header.flag is 1, apparently, regardless of the number of valid entries. // header.flag determines the client's registration state - 1 if the client is
// registered for the tournament, 0 if not.
struct S_ConfirmTournamentEntry_GC_Ep3_CC { struct S_ConfirmTournamentEntry_GC_Ep3_CC {
ptext<char, 0x40> tournament_name; ptext<char, 0x40> tournament_name;
@@ -2081,7 +2082,7 @@ struct S_ConfirmTournamentEntry_GC_Ep3_CC {
ptext<char, 0x20> start_time; // e.g. "15:09:30" or "13:03 PST" ptext<char, 0x20> start_time; // e.g. "15:09:30" or "13:03 PST"
struct Entry { struct Entry {
le_uint16_t unknown_a1; le_uint16_t unknown_a1;
le_uint32_t present; // 1 if team present, 0 otherwise le_uint16_t present; // 1 if team present, 0 otherwise
ptext<char, 0x20> team_name; ptext<char, 0x20> team_name;
}; };
Entry entries[0x20]; Entry entries[0x20];
@@ -2302,7 +2303,7 @@ struct C_Unknown_BB_07DF {
// E0 (S->C): Tournament list (Episode 3) // E0 (S->C): Tournament list (Episode 3)
// The client will send 09 and 10 commands to inspect or enter a tournament. The // The client will send 09 and 10 commands to inspect or enter a tournament. The
// server should respond to an 09 command with an E3 command; the server should // server should respond to an 09 command with an E3 command; the server should
// respond to a 10 command with an E2 04 command. // respond to a 10 command with an E2 command.
// header.flag is the count of filled-in entries. // header.flag is the count of filled-in entries.
struct S_TournamentList_GC_Ep3_E0 { struct S_TournamentList_GC_Ep3_E0 {
@@ -2336,13 +2337,16 @@ struct S_Unknown_GC_Ep3_E1 {
}; };
// E2 (C->S): Tournament control (Episode 3) // E2 (C->S): Tournament control (Episode 3)
// No arguments (in any of its forms) // No arguments (in any of its forms) except header.flag, which determines ths
// Command meaning differs based on the value of header.flag. Specifically: // command's meaning. Specifically:
// header.flag = 00 => request tournament list (server responds with E0) // header.flag = 00 => request tournament list (server responds with E0)
// header.flag = 01 => check tournament // header.flag = 01 => check tournament (server responds with E2)
// header.flag = 02 => cancel tournament entry // header.flag = 02 => cancel tournament entry (server responds with CC)
// header.flag = 03 => create tournament spectator team (get battle list) // header.flag = 03 => create tournament spectator team (get battle list)
// header.flag = 04 => join tournament spectator team (get team list) // header.flag = 04 => join tournament spectator team (get team list)
// In case 02, the resulting CC command is apparently completely blank (all 0),
// and has header.flag = 0 to indicate the player isn't registered.
// In cases 03 and 04, it's not clear what the server should respond with.
// E2 (S->C): Tournament entry list (Episode 3) // E2 (S->C): Tournament entry list (Episode 3)
// Client may send 09 commands if the player presses X. It's not clear what the // Client may send 09 commands if the player presses X. It's not clear what the
@@ -2352,7 +2356,7 @@ struct S_Unknown_GC_Ep3_E1 {
// password is the team password. The server should respond to that with a CC // password is the team password. The server should respond to that with a CC
// command. // command.
struct S_TournamentControl_GC_Ep3_E2 { struct S_TournamentEntryList_GC_Ep3_E2 {
le_uint16_t unknown_a1; le_uint16_t unknown_a1;
le_uint16_t unknown_a2; le_uint16_t unknown_a2;
struct Entry { struct Entry {
@@ -2375,7 +2379,6 @@ struct S_TournamentInfo_GC_Ep3_E3 {
le_uint16_t unknown_a2; le_uint16_t unknown_a2;
ptext<char, 0x20> team_name; ptext<char, 0x20> team_name;
}; };
ptext<char, 0x20> name; ptext<char, 0x20> name;
ptext<char, 0x20> map_name; ptext<char, 0x20> map_name;
Ep3BattleRules rules; Ep3BattleRules rules;
@@ -2395,18 +2398,18 @@ struct C_PlayerPreviewRequest_BB_E3 {
le_uint32_t unused; le_uint32_t unused;
}; };
// E4: CARD lobby game (Episode 3) // E4: CARD lobby battle table state (Episode 3)
// When client sends an E4, server should respond with another E4 (but these // When client sends an E4, server should respond with another E4 (but these
// commands have different formats). // commands have different formats).
// Header flag = seated state (1 = present, 0 = leaving) // Header flag = seated state (1 = present, 0 = leaving)
struct C_CardLobbyGame_GC_Ep3_E4 { struct C_CardBattleTableState_GC_Ep3_E4 {
le_uint16_t table_number; le_uint16_t table_number;
le_uint16_t seat_number; le_uint16_t seat_number;
}; };
// Header flag = table number // Header flag = table number
struct S_CardLobbyGame_GC_Ep3_E4 { struct S_CardBattleTableState_GC_Ep3_E4 {
struct Entry { struct Entry {
le_uint16_t present; // 1 = player present, 0 = no player le_uint16_t present; // 1 = player present, 0 = no player
le_uint16_t unknown_a1; le_uint16_t unknown_a1;
@@ -2427,9 +2430,11 @@ struct S_PlayerPreview_NoPlayer_BB_00E4 {
le_uint32_t error; // 2 = no player present le_uint32_t error; // 2 = no player present
}; };
// E5 (C->S): CARD lobby game? (Episode 3) // E5 (C->S): Unknown (CARD lobby battle table) (Episode 3)
// Appears to be the same as E4 (C->S), but also appears never to be sent by the
// client. struct S_CardBattleTable_Unknown_GC_Ep3_E5 {
le_uint32_t unknown_a1;
};
// E5 (S->C): Player preview (BB) // E5 (S->C): Player preview (BB)
// E5 (C->S): Create character (BB) // E5 (C->S): Create character (BB)
+1 -1
View File
@@ -721,7 +721,7 @@ constexpr on_command_t S_V3_C4 = &S_C4<S_ChoiceSearchResultEntry_V3_C4>;
static HandlerResult S_G_E4(shared_ptr<ServerState>, static HandlerResult S_G_E4(shared_ptr<ServerState>,
ProxyServer::LinkedSession& session, uint16_t, uint32_t, string& data) { ProxyServer::LinkedSession& session, uint16_t, uint32_t, string& data) {
auto& cmd = check_size_t<S_CardLobbyGame_GC_Ep3_E4>(data); auto& cmd = check_size_t<S_CardBattleTableState_GC_Ep3_E4>(data);
bool modified = false; bool modified = false;
for (size_t x = 0; x < 4; x++) { for (size_t x = 0; x < 4; x++) {
if (cmd.entries[x].guild_card_number == session.remote_guild_card_number) { if (cmd.entries[x].guild_card_number == session.remote_guild_card_number) {