summaryrefslogtreecommitdiff
path: root/src/net/tmwa/playerhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/tmwa/playerhandler.cpp')
-rw-r--r--src/net/tmwa/playerhandler.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/net/tmwa/playerhandler.cpp b/src/net/tmwa/playerhandler.cpp
index c34c661e8..20156d8cb 100644
--- a/src/net/tmwa/playerhandler.cpp
+++ b/src/net/tmwa/playerhandler.cpp
@@ -30,6 +30,8 @@
#include "net/tmwa/npchandler.h"
#include "net/tmwa/inventoryhandler.h"
+#include "gui/whoisonline.h"
+
#include "debug.h"
extern Net::PlayerHandler *playerHandler;
@@ -50,6 +52,7 @@ PlayerHandler::PlayerHandler()
SMSG_PLAYER_STAT_UPDATE_5,
SMSG_PLAYER_STAT_UPDATE_6,
SMSG_PLAYER_ARROW_MESSAGE,
+ SMSG_ONLINE_LIST,
0
};
handledMessages = _messages;
@@ -97,6 +100,9 @@ void PlayerHandler::handleMessage(Net::MessageIn &msg)
processPlayerArrowMessage(msg);
break;
+ case SMSG_ONLINE_LIST:
+ processOnlineList(msg);
+
default:
break;
}
@@ -201,4 +207,39 @@ void PlayerHandler::respawn()
outMsg.writeInt8(0);
}
+void PlayerHandler::requestOnlineList()
+{
+ MessageOut outMsg(CMSG_ONLINE_LIST);
+}
+
+void PlayerHandler::processOnlineList(Net::MessageIn &msg)
+{
+ if (!whoIsOnline)
+ return;
+
+ int size = msg.readInt16() - 4;
+ std::vector<std::string> arr;
+
+ if (!size)
+ {
+ if (whoIsOnline)
+ whoIsOnline->loadList(arr);
+ return;
+ }
+
+ const char *start = msg.readBytes(size);
+ const char *buf = start;
+
+ while (buf - start + 1 < size && *(buf + 1))
+ {
+ char status = *buf; // now unused
+ buf ++;
+ arr.push_back(buf);
+ buf += strlen(buf) + 1;
+ }
+
+ if (whoIsOnline)
+ whoIsOnline->loadList(arr);
+}
+
} // namespace TmwAthena