implement bb simple mail

This commit is contained in:
Martin Michelsen
2022-07-30 00:26:25 -07:00
parent b901e8846d
commit cf59858e1e
3 changed files with 31 additions and 0 deletions
+9
View File
@@ -1043,6 +1043,15 @@ struct SC_SimpleMail_81 {
struct SC_SimpleMail_PC_81 : SC_SimpleMail_81<char16_t> { };
struct SC_SimpleMail_V3_81 : SC_SimpleMail_81<char> { };
struct SC_SimpleMail_BB_81 {
le_uint32_t player_tag;
le_uint32_t from_guild_card_number;
ptext<char16_t, 0x10> from_name;
le_uint32_t to_guild_card_number;
ptext<char16_t, 0x14> received_date;
ptext<char16_t, 0x200> text;
};
// 82: Invalid command
// 83 (S->C): Lobby menu
+5
View File
@@ -1848,6 +1848,11 @@ void process_simple_mail(shared_ptr<ServerState> s, shared_ptr<Client> c,
to_guild_card_number = cmd.to_guild_card_number;
message = cmd.text;
} else if (c->version == GameVersion::BB) {
const auto& cmd = check_size_t<SC_SimpleMail_BB_81>(data);
to_guild_card_number = cmd.to_guild_card_number;
message = cmd.text;
} else {
// TODO
send_text_message(c, u"$C6Simple Mail is not\nsupported yet on\nthis platform.");
+17
View File
@@ -566,6 +566,21 @@ void send_simple_mail_t(
send_command_t(c, 0x81, 0x00, cmd);
}
void send_simple_mail_bb(
shared_ptr<Client> c,
uint32_t from_guild_card_number,
const u16string& from_name,
const u16string& text) {
SC_SimpleMail_BB_81 cmd;
cmd.player_tag = 0x00010000;
cmd.from_guild_card_number = from_guild_card_number;
cmd.from_name = from_name;
cmd.to_guild_card_number = c->license->serial_number;
cmd.received_date = decode_sjis(format_time(now()));
cmd.text = text;
send_command_t(c, 0x81, 0x00, cmd);
}
void send_simple_mail(shared_ptr<Client> c, uint32_t from_guild_card_number,
const u16string& from_name, const u16string& text) {
if ((c->version == GameVersion::GC) || (c->version == GameVersion::XB)) {
@@ -574,6 +589,8 @@ void send_simple_mail(shared_ptr<Client> c, uint32_t from_guild_card_number,
} else if (c->version == GameVersion::PC) {
send_simple_mail_t<SC_SimpleMail_PC_81>(
c, from_guild_card_number, from_name, text);
} else if (c->version == GameVersion::BB) {
send_simple_mail_bb(c, from_guild_card_number, from_name, text);
} else {
throw logic_error("unimplemented versioned command");
}