diff options
Diffstat (limited to 'src/chat-server/guildmanager.cpp')
-rw-r--r-- | src/chat-server/guildmanager.cpp | 63 |
1 files changed, 32 insertions, 31 deletions
diff --git a/src/chat-server/guildmanager.cpp b/src/chat-server/guildmanager.cpp index 51254862..39b0bdbb 100644 --- a/src/chat-server/guildmanager.cpp +++ b/src/chat-server/guildmanager.cpp @@ -24,6 +24,7 @@ #include "common/manaserv_protocol.h" #include "account-server/storage.h" #include "chat-server/chatclient.h" +#include "chat-server/chatchannelmanager.h" #include "chat-server/chathandler.h" using namespace ManaServ; @@ -49,9 +50,8 @@ Guild* GuildManager::createGuild(const std::string &name, int playerId) // Add guild to db storage->addGuild(guild); - // Add guild, and add owner + // Add guild mGuilds[guild->getId()] = guild; - mOwners.push_back(playerId); // put the owner in the guild addGuildMember(guild, playerId); @@ -67,7 +67,6 @@ Guild* GuildManager::createGuild(const std::string &name, int playerId) void GuildManager::removeGuild(Guild *guild) { storage->removeGuild(guild); - mOwners.remove(guild->getOwner()); mGuilds.erase(guild->getId()); delete guild; } @@ -78,17 +77,37 @@ void GuildManager::addGuildMember(Guild *guild, int playerId) guild->addMember(playerId); } -void GuildManager::removeGuildMember(Guild *guild, int playerId) +void GuildManager::removeGuildMember(Guild *guild, int playerId, + const std::string &characterName, + ChatClient *client) { // remove the user from the guild storage->removeGuildMember(guild->getId(), playerId); guild->removeMember(playerId); + chatHandler->sendGuildListUpdate(guild, characterName, + GUILD_EVENT_LEAVING_PLAYER); + // if theres no more members left delete the guild if (guild->memberCount() == 0) + { + chatChannelManager->removeChannel( + chatChannelManager->getChannelId(guild->getName())); removeGuild(guild); + } - mOwners.remove(playerId); + if (client) + { + for (std::vector<Guild *>::iterator it = client->guilds.begin(), + it_end = client->guilds.end(); it != it_end; ++it) + { + if (*it == guild) + { + client->guilds.erase(it); + break; + } + } + } } Guild *GuildManager::findById(short id) const @@ -115,29 +134,26 @@ bool GuildManager::doesExist(const std::string &name) const return findByName(name) != 0; } -std::vector<Guild*> GuildManager::getGuildsForPlayer(int playerId) const +std::vector<Guild *> GuildManager::getGuildsForPlayer(int playerId) const { - std::vector<Guild*> guildList; - + std::vector<Guild *> guilds; for (std::map<int, Guild*>::const_iterator it = mGuilds.begin(); it != mGuilds.end(); ++it) { if (it->second->checkInGuild(playerId)) { - guildList.push_back(it->second); + guilds.push_back(it->second); } } - return guildList; + return guilds; } void GuildManager::disconnectPlayer(ChatClient *player) { - std::vector<Guild*> guildList = getGuildsForPlayer(player->characterId); - - for (std::vector<Guild*>::const_iterator it = guildList.begin(); - it != guildList.end(); ++it) + for (std::vector<Guild *>::iterator it = player->guilds.begin(), + it_end = player->guilds.end(); it != it_end; ++it) { - chatHandler->sendGuildListUpdate((*it)->getName(), + chatHandler->sendGuildListUpdate(*it, player->characterName, GUILD_EVENT_OFFLINE_PLAYER); } @@ -146,7 +162,7 @@ void GuildManager::disconnectPlayer(ChatClient *player) int GuildManager::changeMemberLevel(ChatClient *player, Guild *guild, int playerId, int level) { - if (guild->checkInGuild(player->characterId) && guild->checkInGuild(playerId)) + if (guild->checkInGuild(playerId)) { int playerLevel = guild->getUserPermissions(player->characterId); @@ -161,21 +177,6 @@ int GuildManager::changeMemberLevel(ChatClient *player, Guild *guild, return -1; } -bool GuildManager::alreadyOwner(int playerId) const -{ - std::list<int>::const_iterator it = mOwners.begin(); - std::list<int>::const_iterator it_end = mOwners.end(); - - while (it != it_end) - { - if (*it == playerId) - return true; - ++it; - } - - return false; -} - void GuildManager::setUserRights(Guild *guild, int playerId, int rights) { // Set and save the member rights |