summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--src/account-server/dalstorage.cpp26
-rw-r--r--src/account-server/dalstorage.hpp10
-rw-r--r--src/account-server/dalstoragesql.hpp3
-rw-r--r--src/chat-server/guild.cpp9
-rw-r--r--src/chat-server/guild.hpp5
-rw-r--r--src/chat-server/guildmanager.cpp11
7 files changed, 60 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index f715a28d..02124526 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,10 @@
* src/chat-server/guild.cpp, src/chat-server/guild.hpp,
src/chat-server/chathandler.cpp, src/defines.h: Add permissions to guild
members.
+ * src/account-server/dalstorage.cpp, src/account-server/dalstorage.hpp,
+ src/account-server/dalstoragesql.hpp, src/chat-server/guildmanager.cpp,
+ src/chat-server/guild.cpp, src/chat-server/guild.hpp: Save guild member
+ permissions.
2008-07-07 Philipp Sehmisch <tmw@crushnet.org>
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);
}
}