diff options
author | David Athay <ko2fan@gmail.com> | 2008-11-04 17:07:58 +0000 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2008-11-04 17:07:58 +0000 |
commit | 861fcef3203ffe32c3d8e9b62aa79e2a54934c09 (patch) | |
tree | d3a3f8296b479931fc51f1a6a015179ecb2397f7 /src/chat-server | |
parent | 450ef8ede6ff81f09fcadc3683ec7659c994ae83 (diff) | |
download | manaserv-861fcef3203ffe32c3d8e9b62aa79e2a54934c09.tar.gz manaserv-861fcef3203ffe32c3d8e9b62aa79e2a54934c09.tar.bz2 manaserv-861fcef3203ffe32c3d8e9b62aa79e2a54934c09.tar.xz manaserv-861fcef3203ffe32c3d8e9b62aa79e2a54934c09.zip |
Added notifiying party members when a player joins or leaves the party.
Diffstat (limited to 'src/chat-server')
-rw-r--r-- | src/chat-server/chathandler.cpp | 38 | ||||
-rw-r--r-- | src/chat-server/chathandler.hpp | 18 |
2 files changed, 56 insertions, 0 deletions
diff --git a/src/chat-server/chathandler.cpp b/src/chat-server/chathandler.cpp index 2cffbc2a..f0e97de9 100644 --- a/src/chat-server/chathandler.cpp +++ b/src/chat-server/chathandler.cpp @@ -983,6 +983,9 @@ bool ChatHandler::handlePartyJoin(const std::string &invited, const std::string out.writeByte(ERRMSG_OK); c1->send(out); + // tell everyone a player joined + informPartyMemberJoined(*c2); + // tell game server to update info updateInfo(c2, c2->party->getId()); return true; @@ -1060,6 +1063,8 @@ void ChatHandler::removeUserFromParty(ChatClient &client) if (client.party) { client.party->removeUser(client.characterName); + informPartyMemberQuit(client); + // if theres less than 1 member left, remove the party if (client.party->numUsers() < 1) { @@ -1069,6 +1074,39 @@ void ChatHandler::removeUserFromParty(ChatClient &client) } } +void ChatHandler::informPartyMemberQuit(ChatClient &client) +{ + std::map<std::string, ChatClient*>::iterator itr; + std::map<std::string, ChatClient*>::const_iterator itr_end = mPlayerMap.end(); + + for (itr = mPlayerMap.begin(); itr != itr_end; ++itr) + { + if (itr->second.party == client.party) + { + MessageOut out(CPMSG_PARTY_MEMBER_LEFT); + out.writeShort(client.characterId); + itr->second.send(out); + } + } +} + +void ChatHandler::informPartyMemberJoined(ChatClient &client) +{ + std::map<std::string, ChatClient*>::iterator itr; + std::map<std::string, ChatClient*>::const_iterator itr_end = mPlayerMap.end(); + + for (itr = mPlayerMap.begin(); itr != itr_end; ++itr) + { + if (itr->second.party == client.party) + { + MessageOut out(CPMSG_PARTY_NEW_MEMBER); + out.writeShort(client.characterId); + out.writeString(client.characterName); + itr->second.send(out); + } + } +} + ChatClient* ChatHandler::getClient(const std::string &name) { std::map<std::string, ChatClient*>::iterator itr; diff --git a/src/chat-server/chathandler.hpp b/src/chat-server/chathandler.hpp index 42866f77..c94d2999 100644 --- a/src/chat-server/chathandler.hpp +++ b/src/chat-server/chathandler.hpp @@ -271,6 +271,24 @@ class ChatHandler : public ConnectionHandler removeUserFromParty(ChatClient &client); /** + * Send new member info to party members. + */ + void + sendPartyMemberInfo(ChatClient &client, MessageIn &msg); + + /** + * Tell all the party members a member has left + */ + void + informPartyMemberQuit(ChatClient &client); + + /** + * Tell all the party members a member has joined + */ + void + informPartyMemberJoined(ChatClient &client); + + /** * Tell the player to be more polite. */ void warnPlayerAboutBadWords(ChatClient &computer); |