diff --git a/src/Episode3/BattleRecord.cc b/src/Episode3/BattleRecord.cc index 3c9d2d21..81b24783 100644 --- a/src/Episode3/BattleRecord.cc +++ b/src/Episode3/BattleRecord.cc @@ -32,6 +32,7 @@ BattleRecord::Event::Event(StringReader& r) { case Event::Type::GAME_COMMAND: case Event::Type::BATTLE_COMMAND: case Event::Type::EP3_GAME_COMMAND: + case Event::Type::SERVER_DATA_COMMAND: this->data = r.read(r.get_u16l()); break; default: @@ -64,6 +65,7 @@ void BattleRecord::Event::serialize(StringWriter& w) const { case Event::Type::GAME_COMMAND: case Event::Type::BATTLE_COMMAND: case Event::Type::EP3_GAME_COMMAND: + case Event::Type::SERVER_DATA_COMMAND: w.put_u16l(this->data.size()); w.write(this->data); break; @@ -356,6 +358,10 @@ void BattleRecordPlayer::schedule_events() { case BattleRecord::Event::Type::CHAT_MESSAGE: send_prepared_chat_message(l, ev.guild_card_number, ev.data); break; + case BattleRecord::Event::Type::SERVER_DATA_COMMAND: + // These are not replayed, since the battle record also contains + // the results of these commands. + break; } this->event_it++; diff --git a/src/Episode3/BattleRecord.hh b/src/Episode3/BattleRecord.hh index 994aaa5a..c751da64 100644 --- a/src/Episode3/BattleRecord.hh +++ b/src/Episode3/BattleRecord.hh @@ -35,6 +35,7 @@ public: GAME_COMMAND = 4, EP3_GAME_COMMAND = 5, CHAT_MESSAGE = 6, + SERVER_DATA_COMMAND = 7, }; // Fields used for all events diff --git a/src/Episode3/Server.cc b/src/Episode3/Server.cc index a14d1df2..b03c01c2 100644 --- a/src/Episode3/Server.cc +++ b/src/Episode3/Server.cc @@ -1837,6 +1837,11 @@ void Server::on_server_data_input(shared_ptr sender_c, const string& dat throw runtime_error("unknown CAx subsubcommand"); } + auto l = this->lobby.lock(); + if (l && l->battle_record && l->battle_record->writable()) { + l->battle_record->add_command(BattleRecord::Event::Type::SERVER_DATA_COMMAND, data.data(), data.size()); + } + if ((sender_c->version() == Version::GC_EP3_NTE) || !header.mask_key) { (this->*handler)(sender_c, data); } else {