document more ep3 commands

This commit is contained in:
Martin Michelsen
2022-12-03 12:14:58 -08:00
parent 421f27d63c
commit c3c6f60664
7 changed files with 109 additions and 120 deletions
+10 -3
View File
@@ -208,6 +208,11 @@ void on_connect(std::shared_ptr<ServerState> s, std::shared_ptr<Client> c) {
}
void on_login_complete(shared_ptr<ServerState> s, shared_ptr<Client> c) {
if (c->flags & Client::Flag::IS_EPISODE_3) {
c->ep3_context_token = random_object<uint32_t>();
send_ep3_set_context_token(c, c->ep3_context_token);
}
// On the BB data server, this function is called only on the last connection
// (when we should send the ship select menu).
if ((c->server_behavior == ServerBehavior::LOGIN_SERVER) ||
@@ -911,12 +916,14 @@ static void on_ep3_server_data_request(shared_ptr<ServerState> s, shared_ptr<Cli
throw runtime_error("Episode 3 server data request sent in lobby or non-Episode 3 game");
}
const auto& header = check_size_t<G_CardBattleCommandHeader>(
data, sizeof(G_CardBattleCommandHeader), 0xFFFF);
const auto& header = check_size_t<G_CardServerDataCommandHeader>(
data, sizeof(G_CardServerDataCommandHeader), 0xFFFF);
if (header.subcommand != 0xB3) {
throw runtime_error("unknown Episode 3 server data request");
}
if (header.context_token != c->ep3_context_token) {
throw runtime_error("incorrect context token");
}
if (!l->ep3_server_base || l->ep3_server_base->server->battle_finished) {
if (!l->ep3_server_base) {