From 97172717da7c6dc801d2f002e56ea96aaa2b4f44 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Tue, 21 Feb 2023 09:35:05 -0800 Subject: [PATCH] add $song on proxy server --- src/ChatCommands.cc | 14 ++++++++++++-- src/ReceiveCommands.cc | 2 +- src/SendCommands.cc | 4 ++-- src/SendCommands.hh | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/ChatCommands.cc b/src/ChatCommands.cc index 3ccbe982..2d007ef2 100644 --- a/src/ChatCommands.cc +++ b/src/ChatCommands.cc @@ -1012,7 +1012,17 @@ static void server_command_song(shared_ptr, shared_ptr, check_is_ep3(c, true); uint32_t song = stoul(encode_sjis(args), nullptr, 0); - send_ep3_change_music(c, song); + send_ep3_change_music(c->channel, song); +} + +static void proxy_command_song(shared_ptr, + ProxyServer::LinkedSession& session, const std::u16string& args) { + int32_t song = stol(encode_sjis(args), nullptr, 0); + if (song < 0) { + song = -song; + send_ep3_change_music(session.server_channel, song); + } + send_ep3_change_music(session.client_channel, song); } static void server_command_infinite_hp(shared_ptr, shared_ptr l, @@ -1200,7 +1210,7 @@ static const unordered_map chat_commands({ {u"$secid", {server_command_secid, proxy_command_secid, u"Usage:\nsecid [section ID]\nomit section ID to\nrevert to normal"}}, {u"$silence", {server_command_silence, nullptr, u"Usage:\nsilence "}}, // TODO: implement this on proxy server - {u"$song", {server_command_song, nullptr, u"Usage:\nsong "}}, + {u"$song", {server_command_song, proxy_command_song, u"Usage:\nsong "}}, {u"$spec", {server_command_spec, nullptr, u"Usage:\nspec"}}, {u"$ss", {nullptr, proxy_command_send_server, u"Usage:\nss "}}, {u"$swa", {server_command_switch_assist, proxy_command_switch_assist, u"Usage:\nswa"}}, diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index eb3810f5..8bb69cc0 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -226,7 +226,7 @@ void on_login_complete(shared_ptr s, shared_ptr c) { // menu or welcome message if (c->flags & Client::Flag::IS_EPISODE_3) { if (s->ep3_menu_song >= 0) { - send_ep3_change_music(c, s->ep3_menu_song); + send_ep3_change_music(c->channel, s->ep3_menu_song); } else if (s->pre_lobby_event) { send_change_event(c, s->pre_lobby_event); } diff --git a/src/SendCommands.cc b/src/SendCommands.cc index 42a8b84e..638852ba 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -1743,9 +1743,9 @@ void send_warp(shared_ptr c, uint32_t area) { c->area = area; } -void send_ep3_change_music(shared_ptr c, uint32_t song) { +void send_ep3_change_music(Channel& ch, uint32_t song) { G_ChangeLobbyMusic_GC_Ep3_6xBF cmd = {{0xBF, 0x02, 0}, song}; - send_command_t(c, 0x60, 0x00, cmd); + ch.send(0x60, 0x00, cmd); } void send_set_player_visibility(shared_ptr l, shared_ptr c, diff --git a/src/SendCommands.hh b/src/SendCommands.hh index 87745a4d..166172a4 100644 --- a/src/SendCommands.hh +++ b/src/SendCommands.hh @@ -292,7 +292,7 @@ void send_player_stats_change( void send_warp(Channel& ch, uint8_t client_id, uint32_t area); void send_warp(std::shared_ptr c, uint32_t area); -void send_ep3_change_music(std::shared_ptr c, uint32_t song); +void send_ep3_change_music(Channel& ch, uint32_t song); void send_set_player_visibility(std::shared_ptr l, std::shared_ptr c, bool visible); void send_revive_player(std::shared_ptr l, std::shared_ptr c);