diff --git a/src/Client.cc b/src/Client.cc index 74b9d2a1..34554f0e 100644 --- a/src/Client.cc +++ b/src/Client.cc @@ -201,6 +201,7 @@ Client::Client( card_battle_table_number(-1), card_battle_table_seat_number(0), card_battle_table_seat_state(0), + last_game_info_requested(0), should_update_play_time(false), bb_character_index(-1), next_exp_value(0), diff --git a/src/Client.hh b/src/Client.hh index 6578c2cd..c08590e7 100644 --- a/src/Client.hh +++ b/src/Client.hh @@ -219,6 +219,7 @@ public: std::weak_ptr ep3_tournament_team; std::shared_ptr ep3_prev_battle_record; std::shared_ptr last_menu_sent; + uint32_t last_game_info_requested; struct JoinCommand { uint16_t command; uint32_t flag; diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 2c3904e3..b0d6109a 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -1720,7 +1720,7 @@ static void on_CA_Ep3(shared_ptr c, uint16_t, uint32_t, string& data) { } } if (s->ep3_behavior_flags & Episode3::BehaviorFlag::ENABLE_STATUS_MESSAGES) { - send_text_message(l, "$C6Recording enabled"); + send_text_message(l, "$C7Recording enabled"); } } } @@ -1795,10 +1795,10 @@ static void on_E2_Ep3(shared_ptr c, uint16_t, uint32_t flag, string&) { if (tourn) { send_ep3_tournament_entry_list(c, tourn, false); } else { - send_lobby_message_box(c, "$C6The tournament\nhas concluded."); + send_lobby_message_box(c, "$C7The tournament\nhas concluded."); } } else { - send_lobby_message_box(c, "$C6You are not\nregistered in a\ntournament."); + send_lobby_message_box(c, "$C7You are not\nregistered in a\ntournament."); } break; } @@ -1822,7 +1822,7 @@ static void on_E2_Ep3(shared_ptr c, uint16_t, uint32_t flag, string&) { } case 0x03: // Create tournament spectator team (get battle list) case 0x04: // Join tournament spectator team (get team list) - send_lobby_message_box(c, "$C6Use View Regular\nBattle for this"); + send_lobby_message_box(c, "$C7Use View Regular\nBattle for this"); break; default: throw runtime_error("invalid tournament operation"); @@ -1857,7 +1857,7 @@ static void on_09(shared_ptr c, uint16_t, uint32_t, string& data) { bool is_download_quest = !c->lobby.lock(); auto quest_index = s->quest_index(c->version()); if (!quest_index) { - send_quest_info(c, "$C6Quests are not available.", is_download_quest); + send_quest_info(c, "$C7Quests are not available.", is_download_quest); } else { auto q = quest_index->get(cmd.item_id); if (!q) { @@ -1889,72 +1889,43 @@ static void on_09(shared_ptr c, uint16_t, uint32_t, string& data) { } else { string info; - for (size_t x = 0; x < game->max_clients; x++) { - const auto& game_c = game->clients[x]; - if (game_c.get()) { - auto player = game_c->character(); - string name = escape_player_name(player->disp.name.decode(game_c->language())); - if (game->is_ep3()) { - info += string_printf("%zu: $C6%s$C7 L%" PRIu32 "\n", - x + 1, name.c_str(), player->disp.stats.level + 1); - } else { - info += string_printf("%zu: $C6%s$C7 %s L%" PRIu32 "\n", - x + 1, name.c_str(), - abbreviation_for_char_class(player->disp.visual.char_class), - player->disp.stats.level + 1); + if (c->last_game_info_requested != game->lobby_id) { + // Send page 1 (players) + c->last_game_info_requested = game->lobby_id; + for (size_t x = 0; x < game->max_clients; x++) { + const auto& game_c = game->clients[x]; + if (game_c.get()) { + auto player = game_c->character(); + string name = escape_player_name(player->disp.name.decode(game_c->language())); + info += string_printf("%s\n %s Lv%" PRIu32 " %c\n", + name.c_str(), + name_for_char_class(player->disp.visual.char_class), + player->disp.stats.level + 1, + char_for_language_code(game_c->language())); } } } - info += string_printf("%s %c %s %s\n", - abbreviation_for_episode(game->episode), - abbreviation_for_difficulty(game->difficulty), - abbreviation_for_mode(game->mode), - abbreviation_for_section_id(game->effective_section_id())); + // If page 1 is blank (there are no players) or we sent page 1 last + // time, send page 2 (extended info) + if (info.empty()) { + c->last_game_info_requested = 0; + info += string_printf("Section ID: %s\n", name_for_section_id(game->effective_section_id())); + if (game->max_level != 0xFFFFFFFF) { + info += string_printf("Req. level: %" PRIu32 "-%" PRIu32 "\n", game->min_level + 1, game->max_level + 1); + } else if (game->min_level != 0) { + info += string_printf("Req. level: %" PRIu32 "+\n", game->min_level + 1); + } + + if (c->config.check_flag(Client::Flag::DEBUG_ENABLED)) { + info += string_printf("%s\n", name_for_enum(game->base_version)); + } - if (c->config.check_flag(Client::Flag::DEBUG_ENABLED)) { - vector flags_tokens; - string quest_name; if (game->check_flag(Lobby::Flag::CHEATS_ENABLED)) { - flags_tokens.emplace_back("$C6C$C7"); + info += "$C6Cheats enabled$C7\n"; } if (game->check_flag(Lobby::Flag::PERSISTENT)) { - flags_tokens.emplace_back("$C6P$C7"); - } - if (!game->password.empty()) { - flags_tokens.emplace_back("$C4L$C7"); - } - if (game->check_flag(Lobby::Flag::IS_SPECTATOR_TEAM)) { - flags_tokens.emplace_back("$C8ST$C7"); - } - if (game->check_flag(Lobby::Flag::SPECTATORS_FORBIDDEN)) { - flags_tokens.emplace_back("$C8NS$C7"); - } - if (game->quest) { - flags_tokens.emplace_back(game->check_flag(Lobby::Flag::JOINABLE_QUEST_IN_PROGRESS) ? "$C3JQ$C7" : "$C3Q$C7"); - quest_name = remove_color(game->quest->name); - } else if (game->check_flag(Lobby::Flag::JOINABLE_QUEST_IN_PROGRESS)) { - flags_tokens.emplace_back("$C3JQ$C7"); - } else if (game->check_flag(Lobby::Flag::QUEST_IN_PROGRESS)) { - flags_tokens.emplace_back("$C3Q$C7"); - } else if (game->check_flag(Lobby::Flag::BATTLE_IN_PROGRESS)) { - flags_tokens.emplace_back("$C3B$C7"); - } - info += ("Flags: " + join(flags_tokens, ",") + "\n"); - if (!quest_name.empty()) { - info += ("Q: $C6" + quest_name + "$C7\n"); - } - info += string_printf("Version: %s\n", name_for_enum(game->base_version)); - - } else { - bool cheats_enabled = game->check_flag(Lobby::Flag::CHEATS_ENABLED); - bool locked = !game->password.empty(); - if (cheats_enabled && locked) { - info += "$C4Locked$C7, $C6cheats on$C7\n"; - } else if (cheats_enabled) { - info += "$C6Cheats on$C7\n"; - } else if (locked) { - info += "$C4Locked$C7\n"; + info += "$C6Persistence enabled$C7\n"; } if (game->quest) { @@ -1965,15 +1936,26 @@ static void on_09(shared_ptr c, uint16_t, uint32_t, string& data) { info += "$C6Quest in progress\n"; } else if (game->check_flag(Lobby::Flag::QUEST_IN_PROGRESS)) { info += "$C4Quest in progress\n"; - } else if (game->check_flag(Lobby::Flag::BATTLE_IN_PROGRESS)) { - info += "$C4Battle in progress\n"; } - if (game->check_flag(Lobby::Flag::SPECTATORS_FORBIDDEN)) { - info += "$C4View Battle forbidden\n"; + switch (game->drop_mode) { + case Lobby::DropMode::DISABLED: + info += "$C6Drops disabled$C7\n"; + break; + case Lobby::DropMode::CLIENT: + info += "$C6Client drops$C7\n"; + break; + case Lobby::DropMode::SERVER_SHARED: + info += "$C6Server drops$C7\n"; + break; + case Lobby::DropMode::SERVER_PRIVATE: + info += "$C6Private drops$C7\n"; + break; + case Lobby::DropMode::SERVER_DUPLICATE: + info += "$C6Duplicate drops$C7\n"; + break; } } - strip_trailing_whitespace(info); send_ship_info(c, info); } @@ -2500,7 +2482,7 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { auto s = c->require_server_state(); auto game = s->find_lobby(item_id); if (!game) { - send_lobby_message_box(c, "$C6You cannot join this\ngame because it no\nlonger exists."); + send_lobby_message_box(c, "$C7You cannot join this\ngame because it no\nlonger exists."); break; } switch (game->join_error_for_client(c, &password)) { @@ -2522,37 +2504,43 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { } break; case Lobby::JoinError::FULL: - send_lobby_message_box(c, "$C6You cannot join this\ngame because it is\nfull."); + send_lobby_message_box(c, "$C7You cannot join this\ngame because it is\nfull."); break; case Lobby::JoinError::VERSION_CONFLICT: - send_lobby_message_box(c, "$C6You cannot join this\ngame because it is\nfor a different\nversion of PSO."); + send_lobby_message_box(c, "$C7You cannot join this\ngame because it is\nfor a different\nversion of PSO."); break; case Lobby::JoinError::QUEST_IN_PROGRESS: - send_lobby_message_box(c, "$C6You cannot join this\ngame because a\nquest is already\nin progress."); + send_lobby_message_box(c, "$C7You cannot join this\ngame because a\nquest is already\nin progress."); break; case Lobby::JoinError::BATTLE_IN_PROGRESS: - send_lobby_message_box(c, "$C6You cannot join this\ngame because a\nbattle is already\nin progress."); + send_lobby_message_box(c, "$C7You cannot join this\ngame because a\nbattle is already\nin progress."); break; case Lobby::JoinError::LOADING: - send_lobby_message_box(c, "$C6You cannot join this\ngame because\nanother player is\ncurrently loading.\nTry again soon."); + send_lobby_message_box(c, "$C7You cannot join this\ngame because\nanother player is\ncurrently loading.\nTry again soon."); break; case Lobby::JoinError::SOLO: - send_lobby_message_box(c, "$C6You cannot join this\ngame because it is\na Solo Mode game."); + send_lobby_message_box(c, "$C7You cannot join this\ngame because it is\na Solo Mode game."); break; case Lobby::JoinError::INCORRECT_PASSWORD: - send_lobby_message_box(c, "$C6Incorrect password."); + send_lobby_message_box(c, "$C7Incorrect password."); break; - case Lobby::JoinError::LEVEL_TOO_LOW: - send_lobby_message_box(c, "$C6Your level is too\nlow to join this\ngame."); + case Lobby::JoinError::LEVEL_TOO_LOW: { + string msg = string_printf("$C7You must be level\n%zu or above to\njoin this game.", + static_cast(game->min_level + 1)); + send_lobby_message_box(c, msg); break; - case Lobby::JoinError::LEVEL_TOO_HIGH: - send_lobby_message_box(c, "$C6Your level is too\nhigh to join this\ngame."); + } + case Lobby::JoinError::LEVEL_TOO_HIGH: { + string msg = string_printf("$C7You must be level\n%zu or below to\njoin this game.", + static_cast(game->max_level + 1)); + send_lobby_message_box(c, msg); break; + } case Lobby::JoinError::NO_ACCESS_TO_QUEST: - send_lobby_message_box(c, "$C6You don't have access\nto the quest in progress\nin this game, or there\nis no space for another\nplayer in the quest."); + send_lobby_message_box(c, "$C7You don't have access\nto the quest in progress\nin this game, or there\nis no space for another\nplayer in the quest."); break; default: - send_lobby_message_box(c, "$C6You cannot join this\ngame."); + send_lobby_message_box(c, "$C7You cannot join this\ngame."); break; } break; @@ -2562,7 +2550,7 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { auto s = c->require_server_state(); auto quest_index = s->quest_index(c->version()); if (!quest_index) { - send_lobby_message_box(c, "$C6Quests are not available."); + send_lobby_message_box(c, "$C7Quests are not available."); break; } @@ -2583,12 +2571,12 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { auto s = c->require_server_state(); auto quest_index = s->quest_index(c->version()); if (!quest_index) { - send_lobby_message_box(c, "$C6Quests are not\navailable."); + send_lobby_message_box(c, "$C7Quests are not\navailable."); break; } auto q = quest_index->get(item_id); if (!q) { - send_lobby_message_box(c, "$C6Quest does not exist."); + send_lobby_message_box(c, "$C7Quest does not exist."); break; } @@ -2596,21 +2584,21 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { // Otherwise, they must be in a game to load a quest. auto l = c->lobby.lock(); if (l && !l->is_game()) { - send_lobby_message_box(c, "$C6Quests cannot be\nloaded in lobbies."); + send_lobby_message_box(c, "$C7Quests cannot be\nloaded in lobbies."); break; } if (l) { if (q->episode == Episode::EP3) { - send_lobby_message_box(c, "$C6Episode 3 quests\ncannot be loaded\nvia this interface."); + send_lobby_message_box(c, "$C7Episode 3 quests\ncannot be loaded\nvia this interface."); break; } if (l->quest) { - send_lobby_message_box(c, "$C6A quest is already\nin progress."); + send_lobby_message_box(c, "$C7A quest is already\nin progress."); break; } if (l->quest_include_condition()(q) != QuestIndex::IncludeState::AVAILABLE) { - send_lobby_message_box(c, "$C6This quest has not\nbeen unlocked for\nall players in this\ngame."); + send_lobby_message_box(c, "$C7This quest has not\nbeen unlocked for\nall players in this\ngame."); break; } set_lobby_quest(l, q); @@ -2618,7 +2606,7 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { } else { auto vq = q->version(c->version(), c->language()); if (!vq) { - send_lobby_message_box(c, "$C6Quest does not exist\nfor this game version."); + send_lobby_message_box(c, "$C7Quest does not exist\nfor this game version."); break; } // Episode 3 uses the download quest commands (A6/A7) but does not @@ -2699,7 +2687,7 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { throw runtime_error("non-Episode 3 client attempted to join tournament"); } if (c->ep3_tournament_team.lock()) { - send_lobby_message_box(c, "$C6You are registered\nin a different\ntournament already"); + send_lobby_message_box(c, "$C7You are registered\nin a different\ntournament already"); break; } if (team_name.empty()) { @@ -2899,14 +2887,14 @@ static void on_A2(shared_ptr c, uint16_t, uint32_t flag, string& data) { auto l = c->lobby.lock(); if (!l || !l->is_game()) { - send_lobby_message_box(c, "$C6Quests are not available\nin lobbies."); + send_lobby_message_box(c, "$C7Quests are not available\nin lobbies."); return; } // In Episode 3, there are no quest categories, so skip directly to the quest // filter menu. if (is_ep3(c->version())) { - send_lobby_message_box(c, "$C6Episode 3 does not\nprovide online quests\nvia this interface."); + send_lobby_message_box(c, "$C7Episode 3 does not\nprovide online quests\nvia this interface."); } else { QuestMenuType menu_type; if ((c->version() == Version::BB_V4) && flag) { @@ -3288,7 +3276,7 @@ static void on_61_98(shared_ptr c, uint16_t command, uint32_t flag, stri bb_player->choice_search_config = player->choice_search_config; try { Client::save_character_file(filename, c->system_file(), bb_player); - send_text_message(c, "$C6Character data saved"); + send_text_message(c, "$C7Character data saved"); } catch (const exception& e) { send_text_message_printf(c, "$C6Character data could\nnot be saved:\n%s", e.what()); } @@ -4107,7 +4095,8 @@ shared_ptr create_game_generic( if (!c->license->check_flag(License::Flag::FREE_JOIN_GAMES) && (min_level > p->disp.stats.level)) { // Note: We don't throw here because this is a situation players might // actually encounter while playing the game normally - send_lobby_message_box(c, "Your level is too\nlow for this\ndifficulty"); + string msg = string_printf("You must be level %zu\nor above to play\nthis difficulty.", static_cast(min_level + 1)); + send_lobby_message_box(c, msg); return nullptr; } @@ -4389,11 +4378,11 @@ static void on_0C_C1_E7_EC(shared_ptr c, uint16_t command, uint32_t, str } watched_lobby = s->find_lobby(cmd.item_id); if (!watched_lobby) { - send_lobby_message_box(c, "$C6This game no longer\nexists"); + send_lobby_message_box(c, "$C7This game no longer\nexists"); return; } if (watched_lobby->check_flag(Lobby::Flag::SPECTATORS_FORBIDDEN)) { - send_lobby_message_box(c, "$C6This game does not\nallow spectators"); + send_lobby_message_box(c, "$C7This game does not\nallow spectators"); return; } } @@ -4451,11 +4440,11 @@ static void on_C1_BB(shared_ptr c, uint16_t, uint32_t, string& data) { episode = Episode::EP4; // Disallow battle/challenge in Ep4 if (mode == GameMode::BATTLE) { - send_lobby_message_box(c, "$C6Episode 4 does not\nsupport Battle Mode."); + send_lobby_message_box(c, "$C7Episode 4 does not\nsupport Battle Mode."); return; } if (mode == GameMode::CHALLENGE) { - send_lobby_message_box(c, "$C6Episode 4 does not\nsupport Challenge Mode."); + send_lobby_message_box(c, "$C7Episode 4 does not\nsupport Challenge Mode."); return; } break; @@ -4515,7 +4504,7 @@ static void on_6F(shared_ptr c, uint16_t command, uint32_t, string& data if (c) { c->ep3_prev_battle_record = l->battle_record; if ((s->ep3_behavior_flags & Episode3::BehaviorFlag::ENABLE_STATUS_MESSAGES)) { - send_text_message(l, "$C6Recording complete"); + send_text_message(l, "$C7Recording complete"); } } } diff --git a/tests/DCNTE-GameSmokeTest.test.txt b/tests/DCNTE-GameSmokeTest.test.txt index 35a6e6dc..636b8544 100644 --- a/tests/DCNTE-GameSmokeTest.test.txt +++ b/tests/DCNTE-GameSmokeTest.test.txt @@ -1251,10 +1251,9 @@ I 91446 2023-12-31 21:06:28 - [Commands] Sending to C-4 (BBBBBBBBBBBB) (version= I 91446 2023-12-31 21:06:30 - [Commands] Received from C-4 (BBBBBBBBBBBB) (version=DC_NTE command=09 flag=00) 0000 | 09 00 0C 00 44 00 00 44 15 00 00 00 | D D I 91446 2023-12-31 21:06:30 - [Commands] Sending to C-4 (BBBBBBBBBBBB) (version=DC_NTE command=11 flag=00) -0000 | 11 00 3C 00 00 00 00 00 00 00 00 00 31 3A 20 41 | < 1: A -0010 | 42 43 44 45 46 47 48 49 4A 4B 4C 20 52 41 63 74 | BCDEFGHIJKL RAct -0020 | 20 4C 31 0A 45 70 31 20 4E 20 4E 6D 6C 20 52 65 | L1 Ep1 N Nml Re -0030 | 64 0A 43 68 65 61 74 73 20 6F 6E 00 | d Cheats on +0000 | 11 00 28 00 00 00 00 00 00 00 00 00 41 42 43 44 | ( ABCD +0010 | 45 46 47 48 49 4A 4B 4C 0A 20 20 52 41 63 61 73 | EFGHIJKL RAcas +0020 | 74 20 4C 76 31 20 4A 00 | t Lv1 J I 91446 2023-12-31 21:06:36 - [Commands] Received from C-2 (ABCDEFGHIJKL) (version=DC_NTE command=60 flag=00) 0000 | 60 00 1C 00 36 06 00 00 00 00 00 00 00 00 00 00 | ` 6 0010 | 5C 0F C6 43 00 00 00 00 C3 75 95 42 | \ C u B diff --git a/tests/GC-Episode2PrivateDrops2P.test.txt b/tests/GC-Episode2PrivateDrops2P.test.txt index 0b5f2832..2c67add8 100644 --- a/tests/GC-Episode2PrivateDrops2P.test.txt +++ b/tests/GC-Episode2PrivateDrops2P.test.txt @@ -1170,19 +1170,17 @@ I 94381 2023-12-29 15:36:34 - [Commands] Sending to C-5 (Jonah) (version=GC_V3 c I 94381 2023-12-29 15:36:34 - [Commands] Received from C-5 (Jonah) (version=GC_V3 command=09 flag=00) 0000 | 09 00 0C 00 44 00 00 44 15 00 00 00 | D D I 94381 2023-12-29 15:36:34 - [Commands] Sending to C-5 (Jonah) (version=GC_V3 command=11 flag=00) -0000 | 11 00 44 00 00 00 00 00 00 00 00 00 31 3A 20 09 | D 1: -0010 | 43 36 4A 65 73 73 09 43 37 20 52 41 6D 6C 20 4C | C6Jess C7 RAml L -0020 | 32 39 0A 45 70 32 20 4E 20 4E 6D 6C 20 50 6E 6B | 29 Ep2 N Nml Pnk -0030 | 0A 09 43 36 43 68 65 61 74 73 20 6F 6E 09 43 37 | C6Cheats on C7 -0040 | 00 00 00 00 | +0000 | 11 00 24 00 00 00 00 00 00 00 00 00 4A 65 73 73 | $ Jess +0010 | 0A 20 20 52 41 6D 61 72 6C 20 4C 76 32 39 20 45 | RAmarl Lv29 E +0020 | 00 00 00 00 | I 94381 2023-12-29 15:36:36 - [Commands] Received from C-5 (Jonah) (version=GC_V3 command=09 flag=00) 0000 | 09 00 0C 00 44 00 00 44 15 00 00 00 | D D I 94381 2023-12-29 15:36:36 - [Commands] Sending to C-5 (Jonah) (version=GC_V3 command=11 flag=00) -0000 | 11 00 44 00 00 00 00 00 00 00 00 00 31 3A 20 09 | D 1: -0010 | 43 36 4A 65 73 73 09 43 37 20 52 41 6D 6C 20 4C | C6Jess C7 RAml L -0020 | 32 39 0A 45 70 32 20 4E 20 4E 6D 6C 20 50 6E 6B | 29 Ep2 N Nml Pnk -0030 | 0A 09 43 36 43 68 65 61 74 73 20 6F 6E 09 43 37 | C6Cheats on C7 -0040 | 00 00 00 00 | +0000 | 11 00 48 00 00 00 00 00 00 00 00 00 53 65 63 74 | H Sect +0010 | 69 6F 6E 20 49 44 3A 20 50 69 6E 6B 61 6C 0A 09 | ion ID: Pinkal +0020 | 43 36 43 68 65 61 74 73 20 65 6E 61 62 6C 65 64 | C6Cheats enabled +0030 | 09 43 37 0A 09 43 36 43 6C 69 65 6E 74 20 64 72 | C7 C6Client dr +0040 | 6F 70 73 09 43 37 00 00 | ops C7 I 94381 2023-12-29 15:36:44 - [Commands] Received from C-2 (Jess) (version=GC_V3 command=60 flag=00) 0000 | 60 00 1C 00 3F 06 00 00 00 00 00 80 0F 00 00 00 | ` ? 0010 | 00 00 20 41 00 00 00 00 00 00 70 43 | A pC @@ -1198,11 +1196,9 @@ I 94381 2023-12-29 15:36:44 - [Commands] Sending to C-2 (Jess) (version=GC_V3 co I 94381 2023-12-29 15:36:45 - [Commands] Received from C-5 (Jonah) (version=GC_V3 command=09 flag=00) 0000 | 09 00 0C 00 44 00 00 44 15 00 00 00 | D D I 94381 2023-12-29 15:36:45 - [Commands] Sending to C-5 (Jonah) (version=GC_V3 command=11 flag=00) -0000 | 11 00 44 00 00 00 00 00 00 00 00 00 31 3A 20 09 | D 1: -0010 | 43 36 4A 65 73 73 09 43 37 20 52 41 6D 6C 20 4C | C6Jess C7 RAml L -0020 | 32 39 0A 45 70 32 20 4E 20 4E 6D 6C 20 50 6E 6B | 29 Ep2 N Nml Pnk -0030 | 0A 09 43 36 43 68 65 61 74 73 20 6F 6E 09 43 37 | C6Cheats on C7 -0040 | 00 00 00 00 | +0000 | 11 00 24 00 00 00 00 00 00 00 00 00 4A 65 73 73 | $ Jess +0010 | 0A 20 20 52 41 6D 61 72 6C 20 4C 76 32 39 20 45 | RAmarl Lv29 E +0020 | 00 00 00 00 | I 94381 2023-12-29 15:36:45 - [Commands] Received from C-2 (Jess) (version=GC_V3 command=99 flag=00) 0000 | 99 00 04 00 | I 94381 2023-12-29 15:36:49 - [Commands] Received from C-5 (Jonah) (version=GC_V3 command=10 flag=00) @@ -7967,11 +7963,11 @@ I 94381 2023-12-29 15:42:16 - [Commands] Sending to C-5 (Jonah) (version=GC_V3 c I 94381 2023-12-29 15:42:16 - [Commands] Received from C-5 (Jonah) (version=GC_V3 command=09 flag=00) 0000 | 09 00 0C 00 44 00 00 44 15 00 00 00 | D D I 94381 2023-12-29 15:42:16 - [Commands] Sending to C-5 (Jonah) (version=GC_V3 command=11 flag=00) -0000 | 11 00 44 00 00 00 00 00 00 00 00 00 31 3A 20 09 | D 1: -0010 | 43 36 4A 65 73 73 09 43 37 20 52 41 6D 6C 20 4C | C6Jess C7 RAml L -0020 | 32 39 0A 45 70 32 20 4E 20 4E 6D 6C 20 50 6E 6B | 29 Ep2 N Nml Pnk -0030 | 0A 09 43 36 43 68 65 61 74 73 20 6F 6E 09 43 37 | C6Cheats on C7 -0040 | 00 00 00 00 | +0000 | 11 00 48 00 00 00 00 00 00 00 00 00 53 65 63 74 | H Sect +0010 | 69 6F 6E 20 49 44 3A 20 50 69 6E 6B 61 6C 0A 09 | ion ID: Pinkal +0020 | 43 36 43 68 65 61 74 73 20 65 6E 61 62 6C 65 64 | C6Cheats enabled +0030 | 09 43 37 0A 09 43 36 50 72 69 76 61 74 65 20 64 | C7 C6Private d +0040 | 72 6F 70 73 09 43 37 00 | rops C7 I 94381 2023-12-29 15:42:18 - [Commands] Received from C-5 (Jonah) (version=GC_V3 command=10 flag=00) 0000 | 10 00 0C 00 44 00 00 44 15 00 00 00 | D D I 94381 2023-12-29 15:42:18 - [C-5] Assigned inventory item IDs diff --git a/tests/GC-Episode3Battle.test.txt b/tests/GC-Episode3Battle.test.txt index f1a526e8..e0b7dae3 100644 --- a/tests/GC-Episode3Battle.test.txt +++ b/tests/GC-Episode3Battle.test.txt @@ -4023,7 +4023,7 @@ I 16332 2023-09-17 10:14:46 - [Commands] Sending to C-2 (Tali) (version=GC comma 0010 | 20 63 6C 69 65 6E 74 20 49 44 3A 20 09 43 36 30 | client ID: C60 0020 | 00 00 00 00 | I 16332 2023-09-17 10:14:46 - [Commands] Sending to C-2 (Tali) (version=GC command=B0 flag=00) -0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 36 52 | $ C6R +0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 37 52 | $ C7R 0010 | 65 63 6F 72 64 69 6E 67 20 65 6E 61 62 6C 65 64 | ecording enabled 0020 | 00 00 00 00 | I 16332 2023-09-17 10:14:46 - [Commands] Sending to C-2 (Tali) (version=GC command=B0 flag=00) @@ -30338,7 +30338,7 @@ I 16332 2023-09-17 10:22:26 - [Commands] Received from C-2 (Tali) (version=GC co I 16332 2023-09-17 10:22:26 - [Commands] Received from C-2 (Tali) (version=GC command=6F flag=00) 0000 | 6F 00 04 00 | o I 16332 2023-09-17 10:22:26 - [Commands] Sending to C-2 (Tali) (version=GC command=B1 flag=00) -0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 36 52 | $ C6R +0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 37 52 | $ C7R 0010 | 65 63 6F 72 64 69 6E 67 20 63 6F 6D 70 6C 65 74 | ecording complet 0020 | 65 00 00 00 | e I 16332 2023-09-17 10:22:26 - [Commands] Sending to C-2 (Tali) (version=GC command=B1 flag=00) @@ -30424,7 +30424,7 @@ I 16332 2023-09-17 10:22:26 - [Commands] Sending to C-2 (Tali) (version=GC comma 0010 | 20 63 6C 69 65 6E 74 20 49 44 3A 20 09 43 36 30 | client ID: C60 0020 | 00 00 00 00 | I 16332 2023-09-17 10:22:26 - [Commands] Sending to C-2 (Tali) (version=GC command=B0 flag=00) -0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 36 52 | $ C6R +0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 37 52 | $ C7R 0010 | 65 63 6F 72 64 69 6E 67 20 65 6E 61 62 6C 65 64 | ecording enabled 0020 | 00 00 00 00 | I 16332 2023-09-17 10:22:26 - [Commands] Sending to C-2 (Tali) (version=GC command=B0 flag=00) diff --git a/tests/GC-Episode3BattleWithSpectator.test.txt b/tests/GC-Episode3BattleWithSpectator.test.txt index 9ac96ec4..1ef509f9 100644 --- a/tests/GC-Episode3BattleWithSpectator.test.txt +++ b/tests/GC-Episode3BattleWithSpectator.test.txt @@ -4023,7 +4023,7 @@ I 17097 2023-09-19 21:52:59 - [Commands] Sending to C-2 (Tali) (version=GC comma 0010 | 20 63 6C 69 65 6E 74 20 49 44 3A 20 09 43 36 30 | client ID: C60 0020 | 00 00 00 00 | I 17097 2023-09-19 21:52:59 - [Commands] Sending to C-2 (Tali) (version=GC command=B0 flag=00) -0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 36 52 | $ C6R +0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 37 52 | $ C7R 0010 | 65 63 6F 72 64 69 6E 67 20 65 6E 61 62 6C 65 64 | ecording enabled 0020 | 00 00 00 00 | I 17097 2023-09-19 21:52:59 - [Commands] Sending to C-2 (Tali) (version=GC command=B0 flag=00) @@ -77175,7 +77175,7 @@ I 17097 2023-09-19 22:11:24 - [Commands] Received from C-2 (Tali) (version=GC co I 17097 2023-09-19 22:11:24 - [Commands] Received from C-2 (Tali) (version=GC command=6F flag=00) 0000 | 6F 00 04 00 | o I 17097 2023-09-19 22:11:24 - [Commands] Sending to C-2 (Tali) (version=GC command=B0 flag=00) -0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 36 52 | $ C6R +0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 37 52 | $ C7R 0010 | 65 63 6F 72 64 69 6E 67 20 63 6F 6D 70 6C 65 74 | ecording complet 0020 | 65 00 00 00 | e I 17097 2023-09-19 22:11:24 - [Commands] Sending to C-2 (Tali) (version=GC command=B1 flag=00) @@ -77261,7 +77261,7 @@ I 17097 2023-09-19 22:11:24 - [Commands] Sending to C-2 (Tali) (version=GC comma 0010 | 20 63 6C 69 65 6E 74 20 49 44 3A 20 09 43 36 30 | client ID: C60 0020 | 00 00 00 00 | I 17097 2023-09-19 22:11:24 - [Commands] Sending to C-2 (Tali) (version=GC command=B0 flag=00) -0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 36 52 | $ C6R +0000 | B0 00 24 00 00 00 00 00 00 00 00 00 09 43 37 52 | $ C7R 0010 | 65 63 6F 72 64 69 6E 67 20 65 6E 61 62 6C 65 64 | ecording enabled 0020 | 00 00 00 00 | I 17097 2023-09-19 22:11:24 - [Commands] Sending to C-2 (Tali) (version=GC command=B0 flag=00) diff --git a/tests/GC-HeartSymbol.test.txt b/tests/GC-HeartSymbol.test.txt index 1060d683..ff1cd81d 100644 --- a/tests/GC-HeartSymbol.test.txt +++ b/tests/GC-HeartSymbol.test.txt @@ -5281,9 +5281,13 @@ I 23921 2024-03-03 21:21:17 - [Commands] Received from C-2 (Jess) (version=GC_V3 I 23921 2024-03-03 21:21:19 - [Commands] Received from C-2 (Jess) (version=GC_V3 command=09 flag=00) 0000 | 09 00 0C 00 44 00 00 44 15 00 00 00 | D D I 23921 2024-03-03 21:21:19 - [Commands] Sending to C-2 (Jess) (version=GC_V3 command=11 flag=00) -0000 | 11 00 2C 00 00 00 00 00 00 00 00 00 45 70 32 20 | , Ep2 -0010 | 4E 20 4E 6D 6C 20 56 69 72 0A 09 43 36 43 68 65 | N Nml Vir C6Che -0020 | 61 74 73 20 6F 6E 09 43 37 00 00 00 | ats on C7 +0000 | 11 00 64 00 00 00 00 00 00 00 00 00 53 65 63 74 | d Sect +0010 | 69 6F 6E 20 49 44 3A 20 56 69 72 69 64 69 61 0A | ion ID: Viridia +0020 | 09 43 36 43 68 65 61 74 73 20 65 6E 61 62 6C 65 | C6Cheats enable +0030 | 64 09 43 37 0A 09 43 36 50 65 72 73 69 73 74 65 | d C7 C6Persiste +0040 | 6E 63 65 20 65 6E 61 62 6C 65 64 09 43 37 0A 09 | nce enabled C7 +0050 | 43 36 43 6C 69 65 6E 74 20 64 72 6F 70 73 09 43 | C6Client drops C +0060 | 37 00 00 00 | 7 I 23921 2024-03-03 21:21:22 - [Commands] Received from C-2 (Jess) (version=GC_V3 command=60 flag=00) 0000 | 60 00 10 00 52 03 00 00 00 00 00 00 00 80 FF FF | ` R I 23921 2024-03-03 21:21:22 - [Commands] Received from C-2 (Jess) (version=GC_V3 command=60 flag=00) diff --git a/tests/PC-DCv1-CrossplayPrivateDrops.test.txt b/tests/PC-DCv1-CrossplayPrivateDrops.test.txt index e62732f5..bb0a2eeb 100644 --- a/tests/PC-DCv1-CrossplayPrivateDrops.test.txt +++ b/tests/PC-DCv1-CrossplayPrivateDrops.test.txt @@ -839,11 +839,9 @@ I 97037 2023-12-29 15:57:03 - [Commands] Sending to C-5 (88888888) (version=DC_V I 97037 2023-12-29 15:57:05 - [Commands] Received from C-5 (88888888) (version=DC_V1 command=09 flag=00) 0000 | 09 00 0C 00 44 00 00 44 15 00 00 00 | D D I 97037 2023-12-29 15:57:05 - [Commands] Sending to C-5 (88888888) (version=DC_V1 command=11 flag=00) -0000 | 11 00 44 00 00 00 00 00 00 00 00 00 31 3A 20 09 | D 1: -0010 | 43 36 54 61 6C 69 09 43 37 20 52 41 63 6C 20 4C | C6Tali C7 RAcl L -0020 | 31 38 35 0A 45 70 31 20 4E 20 4E 6D 6C 20 50 72 | 185 Ep1 N Nml Pr -0030 | 70 0A 09 43 36 43 68 65 61 74 73 20 6F 6E 09 43 | p C6Cheats on C -0040 | 37 00 00 00 | 7 +0000 | 11 00 24 00 00 00 00 00 00 00 00 00 54 61 6C 69 | $ Tali +0010 | 0A 20 20 52 41 63 61 73 65 61 6C 20 4C 76 31 38 | RAcaseal Lv18 +0020 | 35 20 45 00 | 5 E I 97037 2023-12-29 15:57:06 - [Commands] Received from C-5 (88888888) (version=DC_V1 command=10 flag=00) 0000 | 10 00 0C 00 44 00 00 44 15 00 00 00 | D D I 97037 2023-12-29 15:57:06 - [C-5] Assigned inventory item IDs