summaryrefslogtreecommitdiff
path: root/src/net/tmwa
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-11-30 18:13:03 +0300
committerAndrei Karas <akaras@inbox.ru>2011-11-30 20:09:16 +0300
commit7c6621108b54fd66fbb7aa87be067a34abcc3ced (patch)
tree5859964db8917a35ebb244a0114d5d3cf6578ae0 /src/net/tmwa
parent8871ef8ba38a11213de3cc7f35f5f9f0f3000dc0 (diff)
downloadmanaplus-7c6621108b54fd66fbb7aa87be067a34abcc3ced.tar.gz
manaplus-7c6621108b54fd66fbb7aa87be067a34abcc3ced.tar.bz2
manaplus-7c6621108b54fd66fbb7aa87be067a34abcc3ced.tar.xz
manaplus-7c6621108b54fd66fbb7aa87be067a34abcc3ced.zip
Add server side online players list support.
Diffstat (limited to 'src/net/tmwa')
-rw-r--r--src/net/tmwa/network.cpp2
-rw-r--r--src/net/tmwa/playerhandler.cpp41
-rw-r--r--src/net/tmwa/playerhandler.h2
-rw-r--r--src/net/tmwa/protocol.h2
4 files changed, 46 insertions, 1 deletions
diff --git a/src/net/tmwa/network.cpp b/src/net/tmwa/network.cpp
index 3181ec898..db006c5c0 100644
--- a/src/net/tmwa/network.cpp
+++ b/src/net/tmwa/network.cpp
@@ -83,7 +83,7 @@ short packet_lengths[] =
-1, -1, 20, 10, 32, 9, 34, 14, 2, 6, 48, 56, -1, 4, 5, 10,
// #0x0200
26, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 10, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-1, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
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
diff --git a/src/net/tmwa/playerhandler.h b/src/net/tmwa/playerhandler.h
index bf8e861ff..898bdae3d 100644
--- a/src/net/tmwa/playerhandler.h
+++ b/src/net/tmwa/playerhandler.h
@@ -51,6 +51,8 @@ class PlayerHandler : public MessageHandler, public Ea::PlayerHandler
void setDirection(char direction);
void setDestination(int x, int y, int direction = -1);
void changeAction(Being::Action action);
+ void processOnlineList(Net::MessageIn &msg);
+ void requestOnlineList();
void respawn();
};
diff --git a/src/net/tmwa/protocol.h b/src/net/tmwa/protocol.h
index caf3c8e53..37f036ca8 100644
--- a/src/net/tmwa/protocol.h
+++ b/src/net/tmwa/protocol.h
@@ -333,5 +333,7 @@ enum
#define SMSG_PVP_SET 0x019a
#define CMSG_IGNORE_ALL 0x00d0
#define SMSG_IGNORE_ALL_RESPONSE 0x00d2
+#define CMSG_ONLINE_LIST 0x0210
+#define SMSG_ONLINE_LIST 0x0211
#endif