diff options
author | David Athay <ko2fan@gmail.com> | 2008-07-22 14:45:49 +0000 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2008-07-22 14:45:49 +0000 |
commit | 26d4751d4d382bfcfb7196e355f85d584c335a6c (patch) | |
tree | cfba68689389c9b597ed03f3892ecc1540c14b23 /src | |
parent | 8be5590e63235f10bc037ab4c05d589e4df6a9fe (diff) | |
download | manaserv-26d4751d4d382bfcfb7196e355f85d584c335a6c.tar.gz manaserv-26d4751d4d382bfcfb7196e355f85d584c335a6c.tar.bz2 manaserv-26d4751d4d382bfcfb7196e355f85d584c335a6c.tar.xz manaserv-26d4751d4d382bfcfb7196e355f85d584c335a6c.zip |
Save guild member permissions to db
Diffstat (limited to 'src')
-rw-r--r-- | src/account-server/dalstorage.cpp | 26 | ||||
-rw-r--r-- | src/account-server/dalstorage.hpp | 10 | ||||
-rw-r--r-- | src/account-server/dalstoragesql.hpp | 3 | ||||
-rw-r--r-- | src/chat-server/guild.cpp | 9 | ||||
-rw-r--r-- | src/chat-server/guild.hpp | 5 | ||||
-rw-r--r-- | src/chat-server/guildmanager.cpp | 11 |
6 files changed, 56 insertions, 8 deletions
diff --git a/src/account-server/dalstorage.cpp b/src/account-server/dalstorage.cpp index 21ec171a..5772b547 100644 --- a/src/account-server/dalstorage.cpp +++ b/src/account-server/dalstorage.cpp @@ -915,10 +915,11 @@ void DALStorage::addGuildMember(int guildId, const std::string &memberName) try { sql << "insert into " << GUILD_MEMBERS_TBL_NAME - << " (guild_id, member_name)" + << " (guild_id, member_name, rights)" << " values (" << guildId << ", \"" - << memberName << "\");"; + << memberName << "\", " + << 0 << ");"; mDb->execSql(sql.str()); } catch (const dal::DbSqlQueryExecFailure& e) { @@ -942,7 +943,26 @@ void DALStorage::removeGuildMember(int guildId, const std::string &memberName) << guildId << "';"; mDb->execSql(sql.str()); } - catch (const dal::DbSqlQueryExecFailure& e) { + catch (const dal::DbSqlQueryExecFailure& e) + { + // TODO: throw an exception. + LOG_ERROR("SQL query failure: " << e.what()); + } +} + +void DALStorage::setMemberRights(const std::string &memberName, int rights) +{ + std::ostringstream sql; + + try + { + sql << "update " << GUILD_MEMBERS_TBL_NAME + << " set rights = '" << rights << "'" + << " where member_name = \"" + << memberName << "\";"; + } + catch (const dal::DbSqlQueryExecFailure& e) + { // TODO: throw an exception. LOG_ERROR("SQL query failure: " << e.what()); } diff --git a/src/account-server/dalstorage.hpp b/src/account-server/dalstorage.hpp index e9a15af8..14222473 100644 --- a/src/account-server/dalstorage.hpp +++ b/src/account-server/dalstorage.hpp @@ -155,7 +155,7 @@ class DALStorage /** * Add a new guild - * + * */ void addGuild(Guild* guild); @@ -172,7 +172,7 @@ class DALStorage * */ void - addGuildMember(int guild_id, const std::string &member_name); + addGuildMember(int guild_id, const std::string &memberName); /** * Remove member from guild @@ -181,6 +181,12 @@ class DALStorage removeGuildMember(int guildId, const std::string &memberName); /** + * Save guild member rights + */ + void + setMemberRights(const std::string &memberName, int rights); + + /** * Get guild list *@return a list of guilds * diff --git a/src/account-server/dalstoragesql.hpp b/src/account-server/dalstoragesql.hpp index ee77d8f2..83062838 100644 --- a/src/account-server/dalstoragesql.hpp +++ b/src/account-server/dalstoragesql.hpp @@ -284,16 +284,19 @@ static char const *SQL_GUILD_MEMBERS_TABLE = #if defined (MYSQL_SUPPORT) "guild_id INTEGER NOT NULL," "member_name VARCHAR(32) NOT NULL," + "rights INTEGER NOT NULL," "FOREIGN KEY (guild_id) REFERENCES tmw_guilds(id)," "FOREIGN KEY (member_name) REFERENCES tmw_characters(name)" #elif defined (SQLITE_SUPPORT) "guild_id INTEGER NOT NULL," "member_name TEXT NOT NULL," + "rights INTEGER NOT NULL," "FOREIGN KEY (guild_id) REFERENCES tmw_guilds(id)," "FOREIGN KEY (member_name) REFERENCES tmw_characters(name)" #elif defined (POSTGRESQL_SUPPORT) "guild_id INTEGER NOT NULL," "member_name TEXT NOT NULL," + "rights INTEGER NOT NULL," "FOREIGN KEY (guild_id) REFERENCES tmw_guilds(id)," "FOREIGN KEY (member_name) REFERENCES tmw_characters(name)" #endif diff --git a/src/chat-server/guild.cpp b/src/chat-server/guild.cpp index 3110b05f..7320ed7e 100644 --- a/src/chat-server/guild.cpp +++ b/src/chat-server/guild.cpp @@ -84,6 +84,15 @@ bool Guild::checkLeader(const std::string &playerName) } +void Guild::setLeader(const std::string &playerName) +{ + GuildMember *member = getMember(playerName); + if (member) + { + member->setPermission(GuildMember::LEADER); + } +} + bool Guild::checkInvited(const std::string &playerName) { return std::find(mInvited.begin(), mInvited.end(), playerName) != mInvited.end(); diff --git a/src/chat-server/guild.hpp b/src/chat-server/guild.hpp index c5952fd9..05a8bd70 100644 --- a/src/chat-server/guild.hpp +++ b/src/chat-server/guild.hpp @@ -100,6 +100,11 @@ class Guild bool checkLeader(const std::string &playerName); /** + * Set player as leader of the guild. + */ + void setLeader(const std::string &playerName); + + /** * Set the ID of the guild. */ void setId(int id) diff --git a/src/chat-server/guildmanager.cpp b/src/chat-server/guildmanager.cpp index 95159175..1cc3a4b6 100644 --- a/src/chat-server/guildmanager.cpp +++ b/src/chat-server/guildmanager.cpp @@ -54,6 +54,11 @@ Guild* GuildManager::createGuild(const std::string &name, const std::string &pla mGuilds.push_back(guild); addGuildMember(guild, playerName); + // Set and save the member rights + storage->setMemberRights(playerName, GuildMember::LEADER); + + guild->setLeader(playerName); + return guild; } @@ -126,7 +131,7 @@ bool GuildManager::doesExist(const std::string &name) std::vector<Guild*> GuildManager::getGuildsForPlayer(const std::string &name) { std::vector<Guild*> guildList; - + for (std::list<Guild*>::iterator itr = mGuilds.begin(); itr != mGuilds.end(); ++itr) { @@ -145,8 +150,8 @@ void GuildManager::disconnectPlayer(ChatClient *player) for (std::vector<Guild*>::const_iterator itr = guildList.begin(); itr != guildList.end(); ++itr) { - chatHandler->sendGuildListUpdate((*itr)->getName(), - player->characterName, + chatHandler->sendGuildListUpdate((*itr)->getName(), + player->characterName, GUILD_EVENT_OFFLINE_PLAYER); } } |