summaryrefslogtreecommitdiffstats
path: root/src/account-server
diff options
context:
space:
mode:
authorErik Schilling <ablu.erikschilling@googlemail.com>2012-03-21 21:01:53 +0100
committerErik Schilling <ablu.erikschilling@googlemail.com>2012-04-19 19:10:50 +0200
commit67a608b1d13780d19271fedec004bf49b2b2b908 (patch)
treea5b90dc8f650ebe99185650629bddf3f6c424a19 /src/account-server
parenta8d65824ea87d5c52ad662530b699650195e83ce (diff)
downloadmanaserv-67a608b1d13780d19271fedec004bf49b2b2b908.tar.gz
manaserv-67a608b1d13780d19271fedec004bf49b2b2b908.tar.xz
manaserv-67a608b1d13780d19271fedec004bf49b2b2b908.zip
Fixed guild support
List of things fixed: - fixed having multiple guild support everywhere - implemented kick code (untested due to missing kick possiblity in client) - fixed giving owner rights to next member when owner leaves guild - fixed potentional segmention fault when trying to access deleted guild after all members left - fixed saving right changes to database - made searching for guilds faster a bit (at least when having many guilds) TODO: + Fix conflict between guild and normal channels + Fix being able to leave guild channel without leaving guild itself + Add kick possiblity to client Reviewed-by: bjorn.
Diffstat (limited to 'src/account-server')
-rw-r--r--src/account-server/storage.cpp30
-rw-r--r--src/account-server/storage.h9
2 files changed, 36 insertions, 3 deletions
diff --git a/src/account-server/storage.cpp b/src/account-server/storage.cpp
index 8876cd4..c39bfc5 100644
--- a/src/account-server/storage.cpp
+++ b/src/account-server/storage.cpp
@@ -591,6 +591,30 @@ Character *Storage::getCharacter(const std::string &name)
return 0;
}
+unsigned int Storage::getCharacterId(const std::string &name)
+{
+ std::ostringstream sql;
+ sql << "SELECT id FROM " << CHARACTERS_TBL_NAME << " WHERE name = ?";
+ if (!mDb->prepareSql(sql.str()))
+ return 0;
+ try
+ {
+ mDb->bindValue(1, name);
+ const dal::RecordSet &charInfo = mDb->processSql();
+ if (charInfo.isEmpty())
+ return 0;
+
+ string_to< unsigned > toUint;
+ return toUint(charInfo(0, 0));
+ }
+ catch (const dal::DbSqlQueryExecFailure &e)
+ {
+ utils::throwError("DALStorage::getCharacterId #1) SQL query failure: ",
+ e);
+ }
+ return 0;
+}
+
bool Storage::doesUserNameExist(const std::string &name)
{
try
@@ -1478,9 +1502,9 @@ void Storage::setMemberRights(int guildId, int memberId, int rights)
{
std::ostringstream sql;
sql << "UPDATE " << GUILD_MEMBERS_TBL_NAME
- << " SET rights = '" << rights << "'"
- << " WHERE member_id = '" << memberId << "'"
- << " AND guild_id = '" << guildId << "'';";
+ << " SET rights = " << rights
+ << " WHERE member_id = " << memberId
+ << " AND guild_id = " << guildId << ";";
mDb->execSql(sql.str());
}
catch (const dal::DbSqlQueryExecFailure& e)
diff --git a/src/account-server/storage.h b/src/account-server/storage.h
index d6fb3ed..b71be22 100644
--- a/src/account-server/storage.h
+++ b/src/account-server/storage.h
@@ -95,6 +95,15 @@ class Storage
Character *getCharacter(const std::string &name);
/**
+ * Gets the id of a character by its name.
+ *
+ * @param name the name of the character.
+ *
+ * @return the id of the character
+ */
+ unsigned int getCharacterId(const std::string &name);
+
+ /**
* Add an account to the database.
*
* @param account the new account.