diff --git a/src/NetworkSyncManager.cpp b/src/NetworkSyncManager.cpp index 05b99ea010..707d4c38cc 100644 --- a/src/NetworkSyncManager.cpp +++ b/src/NetworkSyncManager.cpp @@ -52,6 +52,8 @@ std::map ettClientMessageMap = { std::map ettServerMessageMap = { { "hello", ettps_hello }, { "roomlist", ettps_roomlist }, + { "lobbyuserlist", ettps_lobbyuserlist }, + { "lobbyuserlistupdate", ettps_lobbyuserlistupdate }, { "ping", ettps_ping }, { "chat", ettps_recievechat }, { "login", ettps_loginresponse }, @@ -926,6 +928,26 @@ ETTProtocol::Update(NetworkSyncManager* n, float fDeltaTime) e.what()); } break; + case ettps_lobbyuserlist: { + NSMAN->lobbyuserlist.clear(); + auto users = payload->at("users"); + for (auto& user : users) { + NSMAN->lobbyuserlist.emplace_back(user.get()); + } + } break; + case ettps_lobbyuserlistupdate: { + auto newUsers = payload->at("on"); + for (auto& user : newUsers) { + auto& vec = NSMAN->lobbyuserlist; + vec.erase(std::remove( + vec.begin(), vec.end(), user.get()), + vec.end()); + } + auto removedUsers = payload->at("off"); + for (auto& user : removedUsers) { + NSMAN->lobbyuserlist.emplace_back(user.get()); + } + } break; case ettps_roomlist: { RoomData tmp; n->m_Rooms.clear(); @@ -1856,9 +1878,21 @@ class LunaChartRequest : public Luna lua_pushnumber(L, p->rate / 1000); return 1; } + static int GetLobbyUserList(T* p, lua_State* L) + { + lua_newtable(L); + int i = 1; + for (auto& user : NSMAN->lobbyuserlist) { + lua_pushstring(L, user.c_str()); + lua_rawseti(L, -2, i); + i++; + } + return 1; + } LunaChartRequest() { ADD_METHOD(GetChartkey); + ADD_METHOD(GetLobbyUserList); ADD_METHOD(GetUser); ADD_METHOD(GetRate); } diff --git a/src/NetworkSyncManager.h b/src/NetworkSyncManager.h index a75411e86e..155c71e308 100644 --- a/src/NetworkSyncManager.h +++ b/src/NetworkSyncManager.h @@ -86,6 +86,8 @@ enum ETTServerMessageTypes ettps_recievechat, ettps_loginresponse, ettps_roomlist, + ettps_lobbyuserlist, + ettps_lobbyuserlistupdate, ettps_recievescore, ettps_mpleaderboardupdate, ettps_createroomresponse, @@ -376,6 +378,8 @@ class NetworkSyncManager // since function was last called. RString m_Scoreboard[NUM_NSScoreBoardColumn]; + vector lobbyuserlist; + void SendMPLeaderboardUpdate(float wife, RString& jdgstr); // Used for chatting