aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Accounts/AccountMgr.cpp12
-rw-r--r--src/server/game/Accounts/AccountMgr.h1
-rw-r--r--src/server/game/Miscellaneous/Language.h3
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h3
-rw-r--r--src/server/game/World/World.cpp4
-rw-r--r--src/server/scripts/Commands/cs_ban.cpp3
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;