diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Accounts/AccountMgr.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Accounts/AccountMgr.h | 1 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/Language.h | 3 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 3 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_ban.cpp | 3 |
6 files changed, 24 insertions, 2 deletions
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index b7aebd74f0c..448f5168282 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -390,6 +390,18 @@ std::string AccountMgr::CalculateShaPassHash(std::string const& name, std::strin return ByteArrayToHexStr(sha.GetDigest(), sha.GetLength()); } +bool AccountMgr::IsBannedAccount(std::string const& name) +{ + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BANNED_BY_USERNAME); + stmt->setString(0, name); + PreparedQueryResult result = LoginDatabase.Query(stmt); + + if (!result) + return false; + + return true; +} + bool AccountMgr::IsPlayerAccount(uint32 gmlevel) { return gmlevel == SEC_PLAYER; diff --git a/src/server/game/Accounts/AccountMgr.h b/src/server/game/Accounts/AccountMgr.h index 7159f32ce1a..deb473bc974 100644 --- a/src/server/game/Accounts/AccountMgr.h +++ b/src/server/game/Accounts/AccountMgr.h @@ -75,6 +75,7 @@ class TC_GAME_API AccountMgr static uint32 GetCharactersCount(uint32 accountId); static std::string CalculateShaPassHash(std::string const& name, std::string const& password); + static bool IsBannedAccount(std::string const& name); static bool IsPlayerAccount(uint32 gmlevel); static bool IsAdminAccount(uint32 gmlevel); static bool IsConsoleAccount(uint32 gmlevel); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 400685c1c1b..002604dfaf1 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -999,7 +999,8 @@ enum TrinityStrings LANG_GROUP_NOT_IN_RAID_GROUP = 1185, LANG_GROUP_ROLE_CHANGED = 1186, LANG_LEADER_CANNOT_BE_ASSISTANT = 1187, - // Room for more level 3 1188-1198 not used + LANG_BAN_EXISTS = 1188, + // Room for more level 3 1189-1198 not used // Debug commands LANG_DO_NOT_USE_6X_DEBUG_AREATRIGGER_LEFT = 1999, diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index d6bea21f2ad..4e34c20ebb4 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -3367,7 +3367,8 @@ enum BanReturn { BAN_SUCCESS, BAN_SYNTAX_ERROR, - BAN_NOTFOUND + BAN_NOTFOUND, + BAN_EXISTS }; enum BattlegroundTeamId diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index af4039783ea..d3f42088e32 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2671,6 +2671,10 @@ BanReturn World::BanAccount(BanMode mode, std::string const& nameOrIP, uint32 du PreparedQueryResult resultAccounts = PreparedQueryResult(nullptr); //used for kicking PreparedStatement* stmt = nullptr; + // Prevent banning an already banned account + if (mode == BAN_ACCOUNT && AccountMgr::IsBannedAccount(nameOrIP)) + return BAN_EXISTS; + ///- Update the database with ban information switch (mode) { diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index 137620123a6..82a6ed477d8 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -233,6 +233,9 @@ public: } handler->SetSentErrorMessage(true); return false; + case BAN_EXISTS: + handler->PSendSysMessage(LANG_BAN_EXISTS); + break; } return true; |