diff --git a/src/Client.hh b/src/Client.hh index 2534a204..11ccaafd 100644 --- a/src/Client.hh +++ b/src/Client.hh @@ -58,6 +58,7 @@ public: AT_BANK_COUNTER = 0x0000000080000000, SHOULD_SEND_ARTIFICIAL_ITEM_STATE = 0x0001000000000000, SHOULD_SEND_ARTIFICIAL_FLAG_STATE = 0x0002000000000000, + SHOULD_SEND_ENABLE_SAVE = 0x0004000000000000, // Cheat mode flags SWITCH_ASSIST_ENABLED = 0x0000000100000000, @@ -96,6 +97,9 @@ public: Config() = default; + bool operator==(const Config& other) const = default; + bool operator!=(const Config& other) const = default; + [[nodiscard]] static inline bool check_flag(uint64_t enabled_flags, Flag flag) { return !!(enabled_flags & static_cast(flag)); } @@ -177,6 +181,7 @@ public: // Lobby/positioning Config config; + Config synced_config; int32_t sub_version; float x; float z; @@ -260,6 +265,8 @@ public: void set_license(std::shared_ptr l); + void sync_config(); + std::shared_ptr require_server_state() const; std::shared_ptr require_lobby() const; diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index 1bb25b84..f81cd9a3 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -1765,6 +1765,9 @@ struct C_CharSaveInfo_DCv2_PC_V3_BB_96 { // "character data was improperly saved", and will delete the character's items // and challenge mode records. newserv (and all other unofficial servers) always // send this command with flag == 1, which causes the client to save normally. +// If a PSO PC client receives this command multiple times during a session, the +// player will see the "character data may be damaged" message and be asked if +// they want to restore the pre-session backup data. // Client will respond with a B1 command if header.flag is nonzero. // 98 (C->S): Leave game diff --git a/src/ProxyCommands.cc b/src/ProxyCommands.cc index 491c5de1..231be79d 100644 --- a/src/ProxyCommands.cc +++ b/src/ProxyCommands.cc @@ -142,7 +142,8 @@ static HandlerResult S_97(shared_ptr ses, uint16_t, } else { // Update the newserv client config so we'll know not to show the Programs // menu if they return to newserv - ses->config.set_flag(Client::Flag::PROXY_SUPPRESS_CLIENT_PINGS); + ses->config.clear_flag(Client::Flag::SHOULD_SEND_ENABLE_SAVE); + ses->config.set_flag(Client::Flag::SAVE_ENABLED); // Trap any 97 command that would have triggered cheat protection, and // always send 97 01 04 00 if (flag == 0) { diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 71194571..86c8e59d 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -162,10 +162,7 @@ void on_connect(std::shared_ptr c) { break; } - case ServerBehavior::SUBSEQUENT_LOGIN_SERVER: - c->config.set_flag(Client::Flag::SAVE_ENABLED); - [[fallthrough]]; - case ServerBehavior::INITIAL_LOGIN_SERVER: + case ServerBehavior::LOGIN_SERVER: send_server_init(c, SendServerInitFlag::IS_INITIAL_CONNECTION); break; @@ -263,8 +260,7 @@ void on_login_complete(shared_ptr c) { // On BB, this function is called when the data server phase is done (and we // should send the ship select menu), so we don't need to check for it here. switch (c->server_behavior) { - case ServerBehavior::INITIAL_LOGIN_SERVER: - case ServerBehavior::SUBSEQUENT_LOGIN_SERVER: { + case ServerBehavior::LOGIN_SERVER: { auto s = c->require_server_state(); // On the login server, send the events/songs, ep3 updates, and the main @@ -287,9 +283,8 @@ void on_login_complete(shared_ptr c) { c->config.check_flag(Client::Flag::NO_D6) || !c->config.check_flag(Client::Flag::AT_WELCOME_MESSAGE)) { c->config.clear_flag(Client::Flag::AT_WELCOME_MESSAGE); - if (send_enable_send_function_call_if_applicable(c)) { - send_update_client_config(c); - } + send_enable_send_function_call_if_applicable(c); + send_update_client_config(c, false); send_main_menu(c); } else { send_message_box(c, s->welcome_message.c_str()); @@ -541,7 +536,7 @@ static void on_8B_DCNTE(shared_ptr c, uint16_t, uint32_t, string& data) } if (!c->should_disconnect) { - send_update_client_config(c); + send_update_client_config(c, true); on_login_complete(c); } } @@ -651,7 +646,7 @@ static void on_93_DC(shared_ptr c, uint16_t, uint32_t, string& data) { } } - send_update_client_config(c); + send_update_client_config(c, true); // The first time we receive a 93 from a DC client, we set this flag and send // a 92. The IS_DC_V1_PROTOTYPE flag will be removed if the client sends a 92 @@ -973,7 +968,7 @@ static void on_9D_9E(shared_ptr c, uint16_t command, uint32_t, string& d } } - send_update_client_config(c); + send_update_client_config(c, true); on_login_complete(c); } @@ -1167,7 +1162,7 @@ static void on_9F(shared_ptr c, uint16_t, uint32_t, string& data) { } catch (const invalid_argument&) { c->config.set_flag(Client::Flag::AT_WELCOME_MESSAGE); } - send_update_client_config(c); + send_update_client_config(c, true); on_login_complete(c); break; } @@ -1183,6 +1178,8 @@ static void on_9F(shared_ptr c, uint16_t, uint32_t, string& data) { static void on_96(shared_ptr c, uint16_t, uint32_t, string& data) { check_size_t(data); + c->config.set_flag(Client::Flag::SHOULD_SEND_ENABLE_SAVE); + send_update_client_config(c, false); send_server_time(c); } @@ -1731,9 +1728,9 @@ static void on_D6_V3(shared_ptr c, uint16_t, uint32_t, string& data) { auto s = c->require_server_state(); send_menu(c, s->information_menu_for_version(c->version())); } else if (c->config.check_flag(Client::Flag::AT_WELCOME_MESSAGE)) { - send_enable_send_function_call_if_applicable(c); c->config.clear_flag(Client::Flag::AT_WELCOME_MESSAGE); - send_update_client_config(c); + send_enable_send_function_call_if_applicable(c); + send_update_client_config(c, false); send_main_menu(c); } } @@ -2086,15 +2083,17 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { switch (item_id) { case MainMenuItemID::GO_TO_LOBBY: { c->should_send_to_lobby_server = true; - if (!c->config.check_flag(Client::Flag::SAVE_ENABLED)) { + if (!c->config.check_flag(Client::Flag::SAVE_ENABLED) && + c->config.check_flag(Client::Flag::SHOULD_SEND_ENABLE_SAVE)) { c->config.set_flag(Client::Flag::SAVE_ENABLED); + c->config.clear_flag(Client::Flag::SHOULD_SEND_ENABLE_SAVE); // DC NTE and the v1 prototype crash if they receive a 97 command, // so we instead do the redirect immediately if ((c->version() == Version::DC_NTE) || (c->version() == Version::DC_V1_11_2000_PROTOTYPE)) { send_client_to_lobby_server(c); } else { send_command(c, 0x97, 0x01); - send_update_client_config(c); + send_update_client_config(c, false); } } else { send_client_to_lobby_server(c); @@ -2289,13 +2288,15 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { c->config.proxy_destination_address = resolve_ipv4(dest->first); c->config.proxy_destination_port = dest->second; - if (!c->config.check_flag(Client::Flag::SAVE_ENABLED)) { + if (!c->config.check_flag(Client::Flag::SAVE_ENABLED) && + c->config.check_flag(Client::Flag::SHOULD_SEND_ENABLE_SAVE)) { c->should_send_to_proxy_server = true; c->config.set_flag(Client::Flag::SAVE_ENABLED); + c->config.clear_flag(Client::Flag::SHOULD_SEND_ENABLE_SAVE); send_command(c, 0x97, 0x01); - send_update_client_config(c); + send_update_client_config(c, false); } else { - send_update_client_config(c); + send_update_client_config(c, false); send_client_to_proxy_server(c); } } @@ -2980,23 +2981,18 @@ static void on_61_98(shared_ptr c, uint16_t command, uint32_t flag, stri // to delay sending them until now, instead of sending them during the // login sequence. if (is_ep3(c->version())) { - bool flags_changed = false; if (!c->config.check_flag(Client::Flag::HAS_EP3_CARD_DEFS)) { send_ep3_card_list_update(c); c->config.set_flag(Client::Flag::HAS_EP3_CARD_DEFS); - flags_changed = true; } if (!c->config.check_flag(Client::Flag::HAS_EP3_MEDIA_UPDATES)) { for (const auto& banner : s->ep3_lobby_banners) { send_ep3_media_update(c, banner.type, banner.which, banner.data); c->config.set_flag(Client::Flag::HAS_EP3_MEDIA_UPDATES); - flags_changed = true; } } s->ep3_tournament_index->link_client(c); - if (flags_changed) { - send_update_client_config(c); - } + send_update_client_config(c, false); } player->inventory = cmd->inventory; diff --git a/src/SendCommands.cc b/src/SendCommands.cc index 7cedaa3a..5b124c24 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -281,38 +281,41 @@ void send_server_init(shared_ptr c, uint8_t flags) { } } -void send_update_client_config(shared_ptr c) { - switch (c->version()) { - case Version::DC_NTE: - case Version::DC_V1_11_2000_PROTOTYPE: - case Version::DC_V1: - case Version::DC_V2: - case Version::PC_NTE: - case Version::PC_V2: { - if (!c->config.check_flag(Client::Flag::HAS_GUILD_CARD_NUMBER)) { +void send_update_client_config(shared_ptr c, bool always_send) { + if (always_send || (is_v3(c->version()) && (c->config != c->synced_config))) { + switch (c->version()) { + case Version::DC_NTE: + case Version::DC_V1_11_2000_PROTOTYPE: + case Version::DC_V1: + case Version::DC_V2: + case Version::PC_NTE: + case Version::PC_V2: { + if (!c->config.check_flag(Client::Flag::HAS_GUILD_CARD_NUMBER)) { + c->config.set_flag(Client::Flag::HAS_GUILD_CARD_NUMBER); + S_UpdateClientConfig_DC_PC_04 cmd; + cmd.player_tag = 0x00010000; + cmd.guild_card_number = c->license->serial_number; + send_command_t(c, 0x04, 0x00, cmd); + } + break; + } + case Version::GC_NTE: + case Version::GC_V3: + case Version::GC_EP3_TRIAL_EDITION: + case Version::GC_EP3: + case Version::XB_V3: { c->config.set_flag(Client::Flag::HAS_GUILD_CARD_NUMBER); - S_UpdateClientConfig_DC_PC_04 cmd; + S_UpdateClientConfig_V3_04 cmd; cmd.player_tag = 0x00010000; cmd.guild_card_number = c->license->serial_number; + c->config.serialize_into(cmd.client_config); send_command_t(c, 0x04, 0x00, cmd); + break; } - break; + default: + throw logic_error("send_update_client_config called on incorrect game version"); } - case Version::GC_NTE: - case Version::GC_V3: - case Version::GC_EP3_TRIAL_EDITION: - case Version::GC_EP3: - case Version::XB_V3: { - c->config.set_flag(Client::Flag::HAS_GUILD_CARD_NUMBER); - S_UpdateClientConfig_V3_04 cmd; - cmd.player_tag = 0x00010000; - cmd.guild_card_number = c->license->serial_number; - c->config.serialize_into(cmd.client_config); - send_command_t(c, 0x04, 0x00, cmd); - break; - } - default: - throw logic_error("send_update_client_config called on incorrect game version"); + c->synced_config = c->config; } } @@ -390,7 +393,7 @@ void prepare_client_for_patches(shared_ptr c, function on_comple } c->log.info("Client cache behavior patched"); c->config.set_flag(Client::Flag::SEND_FUNCTION_CALL_NO_CACHE_PATCH); - send_update_client_config(c); + send_update_client_config(c, false); send_version_detect(); }); }); @@ -2136,7 +2139,7 @@ void send_join_lobby(shared_ptr c, shared_ptr l) { // joining any lobby, set the appropriate flag and update the client config if (c->config.check_flag(Client::Flag::NO_D6_AFTER_LOBBY) && !c->config.check_flag(Client::Flag::NO_D6)) { c->config.set_flag(Client::Flag::NO_D6); - send_update_client_config(c); + send_update_client_config(c, false); } } diff --git a/src/SendCommands.hh b/src/SendCommands.hh index d34ebe0b..54f0e396 100644 --- a/src/SendCommands.hh +++ b/src/SendCommands.hh @@ -128,7 +128,7 @@ prepare_server_init_contents_bb( const parray& client_key, uint8_t flags); void send_server_init(std::shared_ptr c, uint8_t flags); -void send_update_client_config(std::shared_ptr c); +void send_update_client_config(std::shared_ptr c, bool always_send); void empty_function_call_response_handler(uint32_t, uint32_t); diff --git a/src/Version.cc b/src/Version.cc index 19595611..d16816e5 100644 --- a/src/Version.cc +++ b/src/Version.cc @@ -166,10 +166,8 @@ const char* name_for_enum(ServerBehavior behavior) { switch (behavior) { case ServerBehavior::PC_CONSOLE_DETECT: return "pc_console_detect"; - case ServerBehavior::INITIAL_LOGIN_SERVER: - return "initial_login_server"; - case ServerBehavior::SUBSEQUENT_LOGIN_SERVER: - return "subsequent_login_server"; + case ServerBehavior::LOGIN_SERVER: + return "login_server"; case ServerBehavior::LOBBY_SERVER: return "lobby_server"; case ServerBehavior::PATCH_SERVER_PC: @@ -186,12 +184,8 @@ template <> ServerBehavior enum_for_name(const char* name) { if (!strcasecmp(name, "pc_console_detect")) { return ServerBehavior::PC_CONSOLE_DETECT; - } else if (!strcasecmp(name, "login_server")) { - throw invalid_argument("the login_server behavior name is not supported; replace it with initial_login_server or subsequent_login_server"); - } else if (!strcasecmp(name, "initial_login_server")) { - return ServerBehavior::INITIAL_LOGIN_SERVER; - } else if (!strcasecmp(name, "subsequent_login_server") || !strcasecmp(name, "data_server_bb")) { - return ServerBehavior::SUBSEQUENT_LOGIN_SERVER; + } else if (!strcasecmp(name, "login_server") || !strcasecmp(name, "login") || !strcasecmp(name, "data_server_bb")) { + return ServerBehavior::LOGIN_SERVER; } else if (!strcasecmp(name, "lobby_server") || !strcasecmp(name, "lobby")) { return ServerBehavior::LOBBY_SERVER; } else if (!strcasecmp(name, "patch_server_pc") || !strcasecmp(name, "patch_pc")) { diff --git a/src/Version.hh b/src/Version.hh index bdac4ffe..64d3a220 100644 --- a/src/Version.hh +++ b/src/Version.hh @@ -109,8 +109,7 @@ uint32_t default_specific_version_for_version(Version version, int64_t sub_versi enum class ServerBehavior { PC_CONSOLE_DETECT = 0, - INITIAL_LOGIN_SERVER, - SUBSEQUENT_LOGIN_SERVER, + LOGIN_SERVER, LOBBY_SERVER, PATCH_SERVER_PC, PATCH_SERVER_BB, diff --git a/system/config.example.json b/system/config.example.json index 861dd1ea..a3b7cea9 100644 --- a/system/config.example.json +++ b/system/config.example.json @@ -58,32 +58,32 @@ // Note: It is not an error that no ports appear here with "dc" in their // definitions. DC clients use the same ports as GC clients, and newserv can // tell them apart at the time they connect. - "gc-jp10": [9000, "gc", "initial_login_server"], - "gc-jp11": [9001, "gc", "initial_login_server"], - "gc-jp3te": [9002, "gc", "initial_login_server"], - "gc-jp3": [9003, "gc", "initial_login_server"], - "gc-us12t1": [9064, "gc", "initial_login_server"], + "gc-jp10": [9000, "gc", "login_server"], + "gc-jp11": [9001, "gc", "login_server"], + "gc-jp3te": [9002, "gc", "login_server"], + "gc-jp3": [9003, "gc", "login_server"], + "gc-us12t1": [9064, "gc", "login_server"], "gc-us10": [9100, "pc", "pc_console_detect"], - "gc-us3": [9103, "gc", "initial_login_server"], - "gc-eu10": [9200, "gc", "initial_login_server"], - "gc-eu11": [9201, "gc", "initial_login_server"], - "gc-eu3-50": [9202, "gc", "initial_login_server"], - "gc-eu3-60a": [9203, "gc", "initial_login_server"], - "gc-eu3-60b": [9204, "gc", "initial_login_server"], - "pc": [9300, "pc", "initial_login_server"], + "gc-us3": [9103, "gc", "login_server"], + "gc-eu10": [9200, "gc", "login_server"], + "gc-eu11": [9201, "gc", "login_server"], + "gc-eu3-50": [9202, "gc", "login_server"], + "gc-eu3-60a": [9203, "gc", "login_server"], + "gc-eu3-60b": [9204, "gc", "login_server"], + "pc": [9300, "pc", "login_server"], "pc-patch": [10000, "patch", "patch_server_pc"], "bb-patch": [11000, "patch", "patch_server_bb"], - "bb-init": [12000, "bb", "initial_login_server"], + "bb-init": [12000, "bb", "login_server"], // PSO Xbox tunnels its connections through the Xbox Live service (or, in // modern times, Insignia), and that service determines which port the // connection goes to on the server side. By default, newserv uses 9500 for // PSO Xbox connections, but this is not hardcoded in the client. - "xb-login": [9500, "xb", "initial_login_server"], + "xb-login": [9500, "xb", "login_server"], // Schthack PSOBB uses these ports. // "bb-patch2": [10500, "patch", "patch_server_bb"], - // "bb-init2": [13000, "bb", "initial_login_server"], + // "bb-init2": [13000, "bb", "login_server"], // Ephinea PSOBB uses these ports. Note that 13000 is also used by Schthack // PSOBB, but not for the patch server; this means you unfortunately can't @@ -91,7 +91,7 @@ // may be fixed in the future using a similar technique as the // pc_console_detect behavior, but this isn't implemented yet. // "bb-patch3": [13000, "patch", "patch_server_bb"], - // "bb-init3": [14000, "bb", "initial_login_server"], + // "bb-init3": [14000, "bb", "login_server"], // newserv uses these ports, but there is no external reason that these // numbers were chosen. You can change the port numbers here without any @@ -112,10 +112,10 @@ // - The proxy ports do not need to be defined unless the proxy server is // enabled for the respective version via the ProxyDestinations fields // (below). - "console-login": [5100, "gc", "subsequent_login_server"], - "pc-login": [5101, "pc", "subsequent_login_server"], - "xb-login": [5102, "xb", "subsequent_login_server"], - "xb-lobby": [5105, "xb", "subsequent_login_server"], + "console-login": [5100, "gc", "login_server"], + "pc-login": [5101, "pc", "login_server"], + "xb-login": [5102, "xb", "login_server"], + "xb-lobby": [5105, "xb", "login_server"], "console-lobby": [5110, "gc", "lobby_server"], "pc-lobby": [5111, "pc", "lobby_server"], "bb-lobby": [5112, "bb", "lobby_server"], @@ -124,8 +124,8 @@ "gc-proxy": [5122, "gc", "proxy_server"], "xb-proxy": [5123, "xb", "proxy_server"], "bb-proxy": [5124, "bb", "proxy_server"], - "bb-data1": [12004, "bb", "subsequent_login_server"], - "bb-data2": [12005, "bb", "subsequent_login_server"], + "bb-data1": [12004, "bb", "login_server"], + "bb-data2": [12005, "bb", "login_server"], }, // Where to listen for IP and PPP stack clients. This exists to interface with diff --git a/tests/GC-Episode3Battle.test.txt b/tests/GC-Episode3Battle.test.txt index 18d74611..2329dc30 100644 --- a/tests/GC-Episode3Battle.test.txt +++ b/tests/GC-Episode3Battle.test.txt @@ -71,6 +71,10 @@ I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=D5 f 0020 | 61 6E 64 72 69 61 09 43 37 2E 00 00 | andria C7. I 16332 2023-09-17 10:14:34 - [Commands] Received from C-1 (version=GC command=96 flag=00) 0000 | 96 00 0C 00 03 1B 8F 2C C0 00 00 00 | , +I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=04 flag=00) +0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 +0010 | 30 45 53 33 00 91 00 42 60 00 04 00 00 00 00 00 | 0ES3@ ` +0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 30 39 3A 31 37 3A 20 | 2023:09:17: 0010 | 31 37 3A 31 34 3A 33 34 2E 30 30 30 | 17:14:34.000 @@ -2619,7 +2623,7 @@ I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=CC f 0500 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 4A 60 00 00 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 4A 60 00 04 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16332 2023-09-17 10:14:34 - [Commands] Received from C-1 (Tali) (version=GC command=99 flag=00) 0000 | 99 00 04 00 | @@ -2627,7 +2631,7 @@ I 16332 2023-09-17 10:14:34 - [Commands] Received from C-1 (Tali) (version=GC co 0000 | D6 00 04 00 | I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (Tali) (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 48 60 00 00 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 48 60 00 04 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (Tali) (version=GC command=07 flag=06) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al diff --git a/tests/GC-Episode3BattleWithSpectator.test.txt b/tests/GC-Episode3BattleWithSpectator.test.txt index cac91ab1..49096dc9 100644 --- a/tests/GC-Episode3BattleWithSpectator.test.txt +++ b/tests/GC-Episode3BattleWithSpectator.test.txt @@ -71,6 +71,10 @@ I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=D5 f 0020 | 61 6E 64 72 69 61 09 43 37 2E 00 00 | andria C7. I 17097 2023-09-19 21:52:47 - [Commands] Received from C-1 (version=GC command=96 flag=00) 0000 | 96 00 0C 00 03 1B 8F 2C 06 01 00 00 | , +I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=04 flag=00) +0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 +0010 | 30 45 53 33 00 91 00 42 60 00 04 00 00 00 00 00 | 0ES3@ ` +0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 30 39 3A 32 30 3A 20 | 2023:09:20: 0010 | 30 34 3A 35 32 3A 34 37 2E 30 30 30 | 04:52:47.000 @@ -2619,15 +2623,15 @@ I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=CC f 0500 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 4A 60 00 00 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 4A 60 00 04 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:52:47 - [Commands] Received from C-1 (Tali) (version=GC command=99 flag=00) 0000 | 99 00 04 00 | I 17097 2023-09-19 21:52:47 - [Commands] Received from C-1 (Tali) (version=GC command=D6 flag=00) 0000 | D6 00 04 00 | -I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (Tali) (version=GC command=04 flag=00) +I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 48 60 00 00 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 48 60 00 04 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (Tali) (version=GC command=07 flag=06) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al @@ -5882,6 +5886,10 @@ I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=D5 f 0020 | 61 6E 64 72 69 61 09 43 37 2E 00 00 | andria C7. I 17097 2023-09-19 21:53:53 - [Commands] Received from C-3 (version=GC command=96 flag=00) 0000 | 96 00 0C 00 30 AA 74 2C 27 00 00 00 | 0 t,' +I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=04 flag=00) +0000 | 04 00 2C 00 00 00 01 00 22 22 22 22 32 AC 99 83 | , """"2 +0010 | 00 00 00 33 00 A1 00 42 60 00 04 00 00 00 00 00 | 3@ ` +0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 30 39 3A 32 30 3A 20 | 2023:09:20: 0010 | 30 34 3A 35 33 3A 35 33 2E 30 30 30 | 04:53:53.000 @@ -8430,7 +8438,7 @@ I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=CC f 0500 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 22 22 22 22 32 AC 99 83 | , """"2 -0010 | 30 4A 53 33 00 A1 00 4A 60 00 00 00 00 00 00 00 | 3@ ` +0010 | 30 4A 53 33 00 A1 00 4A 60 00 04 00 00 00 00 00 | 3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:53:53 - [Commands] Received from C-3 (Tali) (version=GC command=99 flag=00) 0000 | 99 00 04 00 | @@ -8438,7 +8446,7 @@ I 17097 2023-09-19 21:53:53 - [Commands] Received from C-3 (Tali) (version=GC co 0000 | D6 00 04 00 | I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (Tali) (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 22 22 22 22 32 AC 99 83 | , """"2 -0010 | 30 4A 53 33 00 A1 00 48 60 00 00 00 00 00 00 00 | 3@ ` +0010 | 30 4A 53 33 00 A1 00 48 60 00 04 00 00 00 00 00 | 3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (Tali) (version=GC command=07 flag=08) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al diff --git a/tests/GC-Episode3TrialEditionLobbySmokeTest.test.txt b/tests/GC-Episode3TrialEditionLobbySmokeTest.test.txt index 442257b3..48d8a0a0 100644 --- a/tests/GC-Episode3TrialEditionLobbySmokeTest.test.txt +++ b/tests/GC-Episode3TrialEditionLobbySmokeTest.test.txt @@ -75,6 +75,10 @@ I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3 command= 0020 | 61 6E 64 72 69 61 09 43 37 2E 00 00 | andria C7. I 25793 2023-11-24 23:03:38 - [Commands] Received from C-4 (version=GC_EP3 command=96 flag=00) 0000 | 96 00 0C 00 5C E6 6B 2C 3B 00 00 00 | \ k,; +I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3 command=04 flag=00) +0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 +0010 | 00 00 00 33 00 A1 00 42 60 00 04 00 00 00 00 00 | 3 B` +0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3 command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 31 31 3A 32 35 3A 20 | 2023:11:25: 0010 | 30 37 3A 30 33 3A 33 38 2E 30 30 30 | 07:03:38.000 @@ -2130,15 +2134,15 @@ I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3_TRIAL_ED 7940 | 00 00 00 00 | I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3_TRIAL_EDITION command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 54 4A 53 33 00 81 00 4A 60 00 00 00 00 00 00 00 | TJS3 J` +0010 | 54 4A 53 33 00 81 00 4A 60 00 04 00 00 00 00 00 | TJS3 J` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 25793 2023-11-24 23:03:38 - [Commands] Received from C-4 (Tali) (version=GC_EP3_TRIAL_EDITION command=99 flag=00) 0000 | 99 00 04 00 | I 25793 2023-11-24 23:03:38 - [Commands] Received from C-4 (Tali) (version=GC_EP3_TRIAL_EDITION command=D6 flag=00) 0000 | D6 00 04 00 | -I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (Tali) (version=GC_EP3_TRIAL_EDITION command=04 flag=00) +I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3_TRIAL_EDITION command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 54 4A 53 33 00 81 00 48 60 00 00 00 00 00 00 00 | TJS3 H` +0010 | 54 4A 53 33 00 81 00 48 60 00 04 00 00 00 00 00 | TJS3 J` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (Tali) (version=GC_EP3_TRIAL_EDITION command=07 flag=08) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al @@ -2357,6 +2361,10 @@ I 25793 2023-11-24 23:03:44 - [Commands] Received from C-5 (version=GC_EP3 comma 0670 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 25793 2023-11-24 23:03:44 - [C-5] Game version changed to GC_EP3_TRIAL_EDITION I 25793 2023-11-24 23:03:44 - [Commands] Sending to C-5 (Tali) (version=GC_EP3_TRIAL_EDITION command=C5 flag=01) +0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 +0010 | 54 4A 53 33 00 81 00 4C 60 00 00 00 00 00 00 00 | TJS3 L` +0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | +I 25793 2023-11-24 23:03:44 - [Commands] Sending to C-5 (Tali) (version=GC_EP3_TRIAL_EDITION command=C5 flag=01) 0000 | C5 01 20 01 00 00 00 00 FF 7F 00 00 00 00 00 00 | 0010 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 0020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | diff --git a/tests/GC-ForestGame.test.txt b/tests/GC-ForestGame.test.txt index b2d4b17a..532303d7 100644 --- a/tests/GC-ForestGame.test.txt +++ b/tests/GC-ForestGame.test.txt @@ -66,6 +66,10 @@ I 49108 2023-05-26 16:18:01 - [Commands] Sending to C-1 (version=GC command=D5 f 0020 | 61 6E 64 72 69 61 09 43 37 2E 00 00 | andria C7. I 49108 2023-05-26 16:18:01 - [Commands] Received from C-1 (version=GC command=96 flag=00) 0000 | 96 00 0C 00 C7 32 CE 2A 57 00 00 00 | 2 *W +I 49108 2023-05-26 16:18:01 - [Commands] Sending to C-1 (version=GC command=04 flag=00) +0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 +0010 | 30 50 4F 33 00 01 00 42 60 00 04 00 00 00 00 00 | 3 ` +0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 49108 2023-05-26 16:18:01 - [Commands] Sending to C-1 (version=GC command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 30 35 3A 32 36 3A 20 | 2023:05:26: 0010 | 32 33 3A 31 38 3A 30 31 2E 30 30 30 | 23:18:01.000 @@ -75,7 +79,7 @@ I 49108 2023-05-26 16:18:02 - [Commands] Received from C-1 (version=GC command=D 0000 | D6 00 04 00 | I 49108 2023-05-26 16:18:02 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 50 4F 33 00 01 00 40 60 00 00 00 00 00 00 00 | 3 ` +0010 | 30 50 4F 33 00 01 00 40 60 00 04 00 00 00 00 00 | 3 ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 49108 2023-05-26 16:18:02 - [Commands] Sending to C-1 (version=GC command=07 flag=08) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al diff --git a/tests/XB-ForestGame.test.txt b/tests/XB-ForestGame.test.txt index 702b8b56..59e8db7b 100644 --- a/tests/XB-ForestGame.test.txt +++ b/tests/XB-ForestGame.test.txt @@ -60,6 +60,10 @@ I 16496 2023-11-08 01:54:08 - [Commands] Sending to C-1 (version=XB command=D5 f 0020 | 61 6E 64 72 69 61 09 43 37 2E 00 00 | andria C7. I 16496 2023-11-08 01:54:09 - [Commands] Received from C-1 (version=XB command=96 flag=00) 0000 | 96 00 0C 00 7C 9C DA 2C 62 00 00 00 | | ,b +I 16496 2023-11-08 01:54:09 - [Commands] Sending to C-1 (version=XB command=04 flag=00) +0000 | 04 00 2C 00 00 00 01 00 E2 D4 45 39 32 AC 99 83 | , E92 +0010 | 00 00 00 00 00 81 00 42 60 00 04 00 00 00 00 00 | 4 @` +0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16496 2023-11-08 01:54:09 - [Commands] Sending to C-1 (version=XB command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 31 31 3A 30 38 3A 20 | 2023:11:08: 0010 | 30 31 3A 35 34 3A 30 39 2E 30 30 30 | 01:54:09.000 @@ -69,7 +73,7 @@ I 16496 2023-11-08 01:54:13 - [Commands] Received from C-1 (version=XB command=D 0000 | D6 00 04 00 | I 16496 2023-11-08 01:54:13 - [Commands] Sending to C-1 (version=XB command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 E2 D4 45 39 32 AC 99 83 | , E92 -0010 | 00 00 00 00 00 81 00 40 60 00 00 00 00 00 00 00 | 4 @` +0010 | 00 00 00 00 00 81 00 40 60 00 04 00 00 00 00 00 | 4 @` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16496 2023-11-08 01:54:13 - [Commands] Sending to C-1 (version=XB command=07 flag=05) 0000 | 07 04 90 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al diff --git a/tests/config.json b/tests/config.json index 5022fe21..95024f5f 100644 --- a/tests/config.json +++ b/tests/config.json @@ -45,29 +45,29 @@ "Episode3FinalRoundMesetaBonus": 300, "PortConfiguration": { - "gc-jp10": [9000, "gc", "initial_login_server"], - "gc-jp11": [9001, "gc", "initial_login_server"], - "gc-jp3te": [9002, "gc", "initial_login_server"], - "gc-jp3": [9003, "gc", "initial_login_server"], - "gc-us12t1": [9064, "gc", "initial_login_server"], + "gc-jp10": [9000, "gc", "login_server"], + "gc-jp11": [9001, "gc", "login_server"], + "gc-jp3te": [9002, "gc", "login_server"], + "gc-jp3": [9003, "gc", "login_server"], + "gc-us12t1": [9064, "gc", "login_server"], "gc-us10": [9100, "pc", "pc_console_detect"], - "gc-us3": [9103, "gc", "initial_login_server"], - "gc-eu10": [9200, "gc", "initial_login_server"], - "gc-eu11": [9201, "gc", "initial_login_server"], - "gc-eu3-50": [9202, "gc", "initial_login_server"], - "gc-eu3-60a": [9203, "gc", "initial_login_server"], - "gc-eu3-60b": [9204, "gc", "initial_login_server"], - "pc": [9300, "pc", "initial_login_server"], - "xb": [9500, "xb", "initial_login_server"], + "gc-us3": [9103, "gc", "login_server"], + "gc-eu10": [9200, "gc", "login_server"], + "gc-eu11": [9201, "gc", "login_server"], + "gc-eu3-50": [9202, "gc", "login_server"], + "gc-eu3-60a": [9203, "gc", "login_server"], + "gc-eu3-60b": [9204, "gc", "login_server"], + "pc": [9300, "pc", "login_server"], + "xb": [9500, "xb", "login_server"], "pc-patch": [10000, "patch", "patch_server_pc"], "bb-patch": [11000, "patch", "patch_server_bb"], - "bb-init": [12000, "bb", "initial_login_server"], + "bb-init": [12000, "bb", "login_server"], "bb-patch2": [10500, "patch", "patch_server_bb"], "bb-proxy2": [9932, "bb", "proxy_server"], - "bb-patch3": [13000, "bb", "initial_login_server"], - "console-login": [5100, "gc", "subsequent_login_server"], - "pc-login": [5101, "pc", "subsequent_login_server"], - "xb-login": [5102, "xb", "subsequent_login_server"], + "bb-patch3": [13000, "bb", "login_server"], + "console-login": [5100, "gc", "login_server"], + "pc-login": [5101, "pc", "login_server"], + "xb-login": [5102, "xb", "login_server"], "console-lobby": [5110, "gc", "lobby_server"], "pc-lobby": [5111, "pc", "lobby_server"], "xb-lobby": [5105, "xb", "lobby_server"], @@ -77,8 +77,8 @@ "xb-proxy": [5113, "xb", "proxy_server"], "pc-proxy": [5121, "pc", "proxy_server"], "bb-proxy": [5122, "bb", "proxy_server"], - "bb-data1": [12004, "bb", "subsequent_login_server"], - "bb-data2": [12005, "bb", "subsequent_login_server"], + "bb-data1": [12004, "bb", "login_server"], + "bb-data2": [12005, "bb", "login_server"], }, "ProxyDestinations-GC": {