aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp21
-rw-r--r--src/server/game/Accounts/AccountMgr.cpp85
-rw-r--r--src/server/game/Accounts/AccountMgr.h17
-rw-r--r--src/server/game/Accounts/RBAC.h210
-rw-r--r--src/server/game/Miscellaneous/Language.h13
-rw-r--r--src/server/game/Server/WorldSocket.cpp8
-rw-r--r--src/server/game/World/World.cpp3
-rw-r--r--src/server/game/World/World.h1
-rw-r--r--src/server/scripts/Commands/cs_account.cpp359
-rw-r--r--src/server/scripts/Commands/cs_cast.cpp18
-rw-r--r--src/server/scripts/Commands/cs_character.cpp44
-rw-r--r--src/server/scripts/Commands/cs_cheat.cpp22
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp92
-rw-r--r--src/server/scripts/Commands/cs_deserter.cpp22
-rw-r--r--src/server/scripts/Commands/cs_disable.cpp46
-rw-r--r--src/server/scripts/Commands/cs_event.cpp14
-rw-r--r--src/server/scripts/Commands/cs_gm.cpp18
-rw-r--r--src/server/scripts/Commands/cs_go.cpp26
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp36
-rw-r--r--src/server/scripts/Commands/cs_guild.cpp18
-rw-r--r--src/server/scripts/Commands/cs_honor.cpp16
-rw-r--r--src/server/scripts/Commands/cs_instance.cpp14
-rw-r--r--src/server/scripts/Commands/cs_learn.cpp44
-rw-r--r--src/server/scripts/Commands/cs_lfg.cpp16
-rw-r--r--src/server/scripts/Commands/cs_list.cpp16
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp50
-rw-r--r--src/server/scripts/Commands/cs_message.cpp26
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp60
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp3
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp15
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp22
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp401
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp26
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h88
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp429
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp2
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.cpp7
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.h3
-rw-r--r--src/server/worldserver/worldserver.conf.dist21
39 files changed, 1480 insertions, 852 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index ae87d7122d4..01f9080fba1 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -28,6 +28,8 @@
#include "ScriptedCreature.h"
#include "GameEventMgr.h"
#include "CreatureTextMgr.h"
+#include "SpellMgr.h"
+#include "SpellInfo.h"
#include "SmartScriptMgr.h"
@@ -778,6 +780,25 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_CALL_KILLEDMONSTER:
if (!IsCreatureValid(e, e.action.killedMonster.creature))
return false;
+
+ for (uint32 i = 0; i < sSpellMgr->GetSpellInfoStoreSize(); ++i)
+ {
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(i);
+ if (!spellInfo)
+ continue;
+
+ for (uint32 j = 0; j < MAX_SPELL_EFFECTS; ++j)
+ {
+ if (spellInfo->Effects[j].Effect == SPELL_EFFECT_KILL_CREDIT || spellInfo->Effects[j].Effect == SPELL_EFFECT_KILL_CREDIT2)
+ {
+ uint32 killCredit = spellInfo->Effects[j].MiscValue;
+
+ if (e.action.killedMonster.creature == killCredit)
+ TC_LOG_ERROR(LOG_FILTER_SQL, "SmartAIMgr: Entry %d SourceType %u Event %u Action %u Kill Credit: %u has already spell kill credit (SpellId: %u effect: %u)", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.killedMonster.creature, spellInfo->Id, j);
+ }
+ }
+ }
+
if (e.GetTargetType() == SMART_TARGET_POSITION)
{
TC_LOG_ERROR(LOG_FILTER_SQL, "SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses incorrect TargetType %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.GetTargetType());
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp
index a9f178685d9..819a3b85fe6 100644
--- a/src/server/game/Accounts/AccountMgr.cpp
+++ b/src/server/game/Accounts/AccountMgr.cpp
@@ -34,21 +34,24 @@ AccountMgr::~AccountMgr()
ClearRBAC();
}
-AccountOpResult AccountMgr::CreateAccount(std::string username, std::string password)
+AccountOpResult AccountMgr::CreateAccount(std::string username, std::string password, std::string email = "")
{
if (utf8length(username) > MAX_ACCOUNT_STR)
return AOR_NAME_TOO_LONG; // username's too long
normalizeString(username);
normalizeString(password);
+ normalizeString(email);
if (GetId(username))
- return AOR_NAME_ALREDY_EXIST; // username does already exist
+ return AOR_NAME_ALREADY_EXIST; // username does already exist
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT);
stmt->setString(0, username);
stmt->setString(1, CalculateShaPassHash(username, password));
+ stmt->setString(2, email);
+ stmt->setString(3, email);
LoginDatabase.DirectExecute(stmt); // Enforce saving, otherwise AddGroup can fail
@@ -202,6 +205,52 @@ AccountOpResult AccountMgr::ChangePassword(uint32 accountId, std::string newPass
return AOR_OK;
}
+AccountOpResult AccountMgr::ChangeEmail(uint32 accountId, std::string newEmail)
+{
+ std::string username;
+
+ if (!GetName(accountId, username))
+ return AOR_NAME_NOT_EXIST; // account doesn't exist
+
+ if (utf8length(newEmail) > MAX_EMAIL_STR)
+ return AOR_EMAIL_TOO_LONG;
+
+ normalizeString(username);
+ normalizeString(newEmail);
+
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_EMAIL);
+
+ stmt->setString(0, newEmail);
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
+
+ return AOR_OK;
+}
+
+AccountOpResult AccountMgr::ChangeRegEmail(uint32 accountId, std::string newEmail)
+{
+ std::string username;
+
+ if (!GetName(accountId, username))
+ return AOR_NAME_NOT_EXIST; // account doesn't exist
+
+ if (utf8length(newEmail) > MAX_EMAIL_STR)
+ return AOR_EMAIL_TOO_LONG;
+
+ normalizeString(username);
+ normalizeString(newEmail);
+
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_REG_EMAIL);
+
+ stmt->setString(0, newEmail);
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
+
+ return AOR_OK;
+}
+
uint32 AccountMgr::GetId(std::string const& username)
{
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_ACCOUNT_ID_BY_USERNAME);
@@ -245,6 +294,21 @@ bool AccountMgr::GetName(uint32 accountId, std::string& name)
return false;
}
+bool AccountMgr::GetEmail(uint32 accountId, std::string& email)
+{
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_EMAIL_BY_ID);
+ stmt->setUInt32(0, accountId);
+ PreparedQueryResult result = LoginDatabase.Query(stmt);
+
+ if (result)
+ {
+ email = (*result)[0].GetString();
+ return true;
+ }
+
+ return false;
+}
+
bool AccountMgr::CheckPassword(uint32 accountId, std::string password)
{
std::string username;
@@ -263,6 +327,23 @@ bool AccountMgr::CheckPassword(uint32 accountId, std::string password)
return (result) ? true : false;
}
+bool AccountMgr::CheckEmail(uint32 accountId, std::string newEmail)
+{
+ std::string oldEmail;
+
+ // We simply return false for a non-existing email
+ if (!GetEmail(accountId, oldEmail))
+ return false;
+
+ normalizeString(oldEmail);
+ normalizeString(newEmail);
+
+ if (strcmp(oldEmail.c_str(), newEmail.c_str()) == 0)
+ return true;
+
+ return false;
+}
+
uint32 AccountMgr::GetCharactersCount(uint32 accountId)
{
// check character count
diff --git a/src/server/game/Accounts/AccountMgr.h b/src/server/game/Accounts/AccountMgr.h
index 878ecde24f9..92c1e2292d0 100644
--- a/src/server/game/Accounts/AccountMgr.h
+++ b/src/server/game/Accounts/AccountMgr.h
@@ -27,12 +27,21 @@ enum AccountOpResult
AOR_OK,
AOR_NAME_TOO_LONG,
AOR_PASS_TOO_LONG,
- AOR_NAME_ALREDY_EXIST,
+ AOR_EMAIL_TOO_LONG,
+ AOR_NAME_ALREADY_EXIST,
AOR_NAME_NOT_EXIST,
AOR_DB_INTERNAL_ERROR
};
+enum PasswordChangeSecurity
+{
+ PW_NONE,
+ PW_EMAIL,
+ PW_RBAC
+};
+
#define MAX_ACCOUNT_STR 16
+#define MAX_EMAIL_STR 64
typedef std::map<uint32, RBACPermission*> RBACPermissionsContainer;
typedef std::map<uint32, RBACRole*> RBACRolesContainer;
@@ -48,16 +57,20 @@ class AccountMgr
~AccountMgr();
public:
- AccountOpResult CreateAccount(std::string username, std::string password);
+ AccountOpResult CreateAccount(std::string username, std::string password, std::string email);
static AccountOpResult DeleteAccount(uint32 accountId);
static AccountOpResult ChangeUsername(uint32 accountId, std::string newUsername, std::string newPassword);
static AccountOpResult ChangePassword(uint32 accountId, std::string newPassword);
+ static AccountOpResult ChangeEmail(uint32 accountId, std::string newEmail);
+ static AccountOpResult ChangeRegEmail(uint32 accountId, std::string newEmail);
static bool CheckPassword(uint32 accountId, std::string password);
+ static bool CheckEmail(uint32 accountId, std::string newEmail);
static uint32 GetId(std::string const& username);
static uint32 GetSecurity(uint32 accountId);
static uint32 GetSecurity(uint32 accountId, int32 realmId);
static bool GetName(uint32 accountId, std::string& name);
+ static bool GetEmail(uint32 accountId, std::string& email);
static uint32 GetCharactersCount(uint32 accountId);
static std::string CalculateShaPassHash(std::string const& name, std::string const& password);
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index be4356f6b54..492a7197cfe 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -96,6 +96,8 @@ enum RBACPermissions
RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR = 46,
RBAC_PERM_CHECK_FOR_LOWER_SECURITY = 47,
RBAC_PERM_COMMANDS_PINFO_CHECK_PERSONAL_DATA = 48,
+ RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE = 49,
+ RBAC_PERM_MAY_CHECK_OWN_EMAIL = 50,
// Leave some space for core permissions
RBAC_PERM_COMMAND_RBAC = 200,
RBAC_PERM_COMMAND_RBAC_ACC = 201,
@@ -160,6 +162,214 @@ enum RBACPermissions
RBAC_PERM_COMMAND_BF_SWITCH = 260,
RBAC_PERM_COMMAND_BF_TIMER = 261,
RBAC_PERM_COMMAND_BF_ENABLE = 262,
+ RBAC_PERM_COMMAND_ACCOUNT_EMAIL = 263,
+ RBAC_PERM_COMMAND_ACCOUNT_SET_SEC = 264,
+ RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_EMAIL = 265,
+ RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_REGMAIL = 266,
+ RBAC_PERM_COMMAND_CAST = 267,
+ RBAC_PERM_COMMAND_CAST_BACK = 268,
+ RBAC_PERM_COMMAND_CAST_DIST = 269,
+ RBAC_PERM_COMMAND_CAST_SELF = 270,
+ RBAC_PERM_COMMAND_CAST_TARGET = 271,
+ RBAC_PERM_COMMAND_CAST_DEST = 272,
+ RBAC_PERM_COMMAND_CHARACTER = 273,
+ RBAC_PERM_COMMAND_CHARACTER_CUSTOMIZE = 274,
+ RBAC_PERM_COMMAND_CHARACTER_CHANGEFACTION = 275,
+ RBAC_PERM_COMMAND_CHARACTER_CHANGERACE = 276,
+ RBAC_PERM_COMMAND_CHARACTER_DELETED = 277,
+ RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE = 278, // Not in DB - console
+ RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST = 279,
+ RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE = 280,
+ RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD = 281, // Not in DB - console
+ RBAC_PERM_COMMAND_CHARACTER_ERASE = 282, // Not in DB - console
+ RBAC_PERM_COMMAND_CHARACTER_LEVEL = 283,
+ RBAC_PERM_COMMAND_CHARACTER_RENAME = 284,
+ RBAC_PERM_COMMAND_CHARACTER_REPUTATION = 285,
+ RBAC_PERM_COMMAND_CHARACTER_TITLES = 286,
+ RBAC_PERM_COMMAND_LEVELUP = 287,
+ RBAC_PERM_COMMAND_PDUMP = 288,
+ RBAC_PERM_COMMAND_PDUMP_LOAD = 289,
+ RBAC_PERM_COMMAND_PDUMP_WRITE = 290,
+ RBAC_PERM_COMMAND_CHEAT = 291,
+ RBAC_PERM_COMMAND_CHEAT_CASTTIME = 292,
+ RBAC_PERM_COMMAND_CHEAT_COOLDOWN = 293,
+ RBAC_PERM_COMMAND_CHEAT_EXPLORE = 294,
+ RBAC_PERM_COMMAND_CHEAT_GOD = 295,
+ RBAC_PERM_COMMAND_CHEAT_POWER = 296,
+ RBAC_PERM_COMMAND_CHEAT_STATUS = 297,
+ RBAC_PERM_COMMAND_CHEAT_TAXI = 298,
+ RBAC_PERM_COMMAND_CHEAT_WATERWALK = 299,
+ RBAC_PERM_COMMAND_DEBUG = 300,
+ RBAC_PERM_COMMAND_DEBUG_ANIM = 301,
+ RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS = 302,
+ RBAC_PERM_COMMAND_DEBUG_ARENA = 303,
+ RBAC_PERM_COMMAND_DEBUG_BG = 304,
+ RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE = 305,
+ RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE = 306,
+ RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE = 307,
+ RBAC_PERM_COMMAND_DEBUG_GETVALUE = 308,
+ RBAC_PERM_COMMAND_DEBUG_HOSTIL = 309,
+ RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE = 310,
+ RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT = 311,
+ RBAC_PERM_COMMAND_DEBUG_LOS = 312,
+ RBAC_PERM_COMMAND_DEBUG_MOD32VALUE = 313,
+ RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS = 314,
+ RBAC_PERM_COMMAND_DEBUG_PLAY = 315,
+ RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC = 316,
+ RBAC_PERM_COMMAND_DEBUG_PLAY_MOVIE = 317,
+ RBAC_PERM_COMMAND_DEBUG_PLAY_SOUND = 318,
+ RBAC_PERM_COMMAND_DEBUG_SEND = 319,
+ RBAC_PERM_COMMAND_DEBUG_SEND_BUYERROR = 320,
+ RBAC_PERM_COMMAND_DEBUG_SEND_CHANNELNOTIFY = 321,
+ RBAC_PERM_COMMAND_DEBUG_SEND_CHATMESSAGE = 322,
+ RBAC_PERM_COMMAND_DEBUG_SEND_EQUIPERROR = 323,
+ RBAC_PERM_COMMAND_DEBUG_SEND_LARGEPACKET = 324,
+ RBAC_PERM_COMMAND_DEBUG_SEND_OPCODE = 325,
+ RBAC_PERM_COMMAND_DEBUG_SEND_QINVALIDMSG = 326,
+ RBAC_PERM_COMMAND_DEBUG_SEND_QPARTYMSG = 327,
+ RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR = 328,
+ RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT = 329,
+ RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL = 330,
+ RBAC_PERM_COMMAND_DEBUG_SETAURASTATE = 331,
+ RBAC_PERM_COMMAND_DEBUG_SETBIT = 332,
+ RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE = 333,
+ RBAC_PERM_COMMAND_DEBUG_SETVALUE = 334,
+ RBAC_PERM_COMMAND_DEBUG_SETVID = 335,
+ RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE = 336,
+ RBAC_PERM_COMMAND_DEBUG_THREAT = 337,
+ RBAC_PERM_COMMAND_DEBUG_UPDATE = 338,
+ RBAC_PERM_COMMAND_DEBUG_UWS = 339,
+ RBAC_PERM_COMMAND_WPGPS = 340,
+ RBAC_PERM_COMMAND_DESERTER = 341,
+ RBAC_PERM_COMMAND_DESERTER_BG = 342,
+ RBAC_PERM_COMMAND_DESERTER_BG_ADD = 343,
+ RBAC_PERM_COMMAND_DESERTER_BG_REMOVE = 344,
+ RBAC_PERM_COMMAND_DESERTER_INSTANCE = 345,
+ RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD = 346,
+ RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE = 347,
+ RBAC_PERM_COMMAND_DISABLE = 348,
+ RBAC_PERM_COMMAND_DISABLE_ADD = 349,
+ RBAC_PERM_COMMAND_DISABLE_ADD_ACHIEVEMENT_CRITERIA = 350,
+ RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND = 351,
+ RBAC_PERM_COMMAND_DISABLE_ADD_MAP = 352,
+ RBAC_PERM_COMMAND_DISABLE_ADD_MMAP = 353,
+ RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP = 354,
+ RBAC_PERM_COMMAND_DISABLE_ADD_QUEST = 355,
+ RBAC_PERM_COMMAND_DISABLE_ADD_SPELL = 356,
+ RBAC_PERM_COMMAND_DISABLE_ADD_VMAP = 357,
+ RBAC_PERM_COMMAND_DISABLE_REMOVE = 358,
+ RBAC_PERM_COMMAND_DISABLE_REMOVE_ACHIEVEMENT_CRITERIA = 359,
+ RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND = 360,
+ RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP = 361,
+ RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP = 362,
+ RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP = 363,
+ RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST = 364,
+ RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL = 365,
+ RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP = 366,
+ RBAC_PERM_COMMAND_EVENT = 367,
+ RBAC_PERM_COMMAND_EVENT_ACTIVELIST = 368,
+ RBAC_PERM_COMMAND_EVENT_START = 369,
+ RBAC_PERM_COMMAND_EVENT_STOP = 370,
+ RBAC_PERM_COMMAND_GM = 371,
+ RBAC_PERM_COMMAND_GM_CHAT = 372,
+ RBAC_PERM_COMMAND_GM_FLY = 373,
+ RBAC_PERM_COMMAND_GM_INGAME = 374,
+ RBAC_PERM_COMMAND_GM_LIST = 375,
+ RBAC_PERM_COMMAND_GM_VISIBLE = 376,
+ RBAC_PERM_COMMAND_GO = 377,
+ RBAC_PERM_COMMAND_GO_CREATURE = 378,
+ RBAC_PERM_COMMAND_GO_GRAVEYARD = 379,
+ RBAC_PERM_COMMAND_GO_GRID = 380,
+ RBAC_PERM_COMMAND_GO_OBJECT = 381,
+ RBAC_PERM_COMMAND_GO_TAXINODE = 382,
+ RBAC_PERM_COMMAND_GO_TICKET = 383,
+ RBAC_PERM_COMMAND_GO_TRIGGER = 384,
+ RBAC_PERM_COMMAND_GO_XYZ = 385,
+ RBAC_PERM_COMMAND_GO_ZONEXY = 386,
+ RBAC_PERM_COMMAND_GOBJECT = 387,
+ RBAC_PERM_COMMAND_GOBJECT_ACTIVATE = 388,
+ RBAC_PERM_COMMAND_GOBJECT_ADD = 389,
+ RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP = 390,
+ RBAC_PERM_COMMAND_GOBJECT_DELETE = 391,
+ RBAC_PERM_COMMAND_GOBJECT_INFO = 392,
+ RBAC_PERM_COMMAND_GOBJECT_MOVE = 393,
+ RBAC_PERM_COMMAND_GOBJECT_NEAR = 394,
+ RBAC_PERM_COMMAND_GOBJECT_SET = 395,
+ RBAC_PERM_COMMAND_GOBJECT_SET_PHASE = 396,
+ RBAC_PERM_COMMAND_GOBJECT_SET_STATE = 397,
+ RBAC_PERM_COMMAND_GOBJECT_TARGET = 398,
+ RBAC_PERM_COMMAND_GOBJECT_TURN = 399,
+ RBAC_PERM_COMMAND_GUILD = 401,
+ RBAC_PERM_COMMAND_GUILD_CREATE = 402,
+ RBAC_PERM_COMMAND_GUILD_DELETE = 403,
+ RBAC_PERM_COMMAND_GUILD_INVITE = 404,
+ RBAC_PERM_COMMAND_GUILD_UNINVITE = 405,
+ RBAC_PERM_COMMAND_GUILD_RANK = 406,
+ RBAC_PERM_COMMAND_GUILD_RENAME = 407,
+ RBAC_PERM_COMMAND_HONOR = 408,
+ RBAC_PERM_COMMAND_HONOR_ADD = 409,
+ RBAC_PERM_COMMAND_HONOR_ADD_KILL = 410,
+ RBAC_PERM_COMMAND_HONOR_UPDATE = 411,
+ RBAC_PERM_COMMAND_INSTANCE = 412,
+ RBAC_PERM_COMMAND_INSTANCE_LISTBINDS = 413,
+ RBAC_PERM_COMMAND_INSTANCE_UNBIND = 414,
+ RBAC_PERM_COMMAND_INSTANCE_STATS = 415,
+ RBAC_PERM_COMMAND_INSTANCE_SAVEDATA = 416,
+ RBAC_PERM_COMMAND_LEARN = 417,
+ RBAC_PERM_COMMAND_LEARN_ALL = 418,
+ RBAC_PERM_COMMAND_LEARN_ALL_MY = 419,
+ RBAC_PERM_COMMAND_LEARN_ALL_MY_CLASS = 420,
+ RBAC_PERM_COMMAND_LEARN_ALL_MY_PETTALENTS = 421,
+ RBAC_PERM_COMMAND_LEARN_ALL_MY_SPELLS = 422,
+ RBAC_PERM_COMMAND_LEARN_ALL_MY_TALENTS = 423,
+ RBAC_PERM_COMMAND_LEARN_ALL_GM = 424,
+ RBAC_PERM_COMMAND_LEARN_ALL_CRAFTS = 425,
+ RBAC_PERM_COMMAND_LEARN_ALL_DEFAULT = 426,
+ RBAC_PERM_COMMAND_LEARN_ALL_LANG = 427,
+ RBAC_PERM_COMMAND_LEARN_ALL_RECIPES = 428,
+ RBAC_PERM_COMMAND_UNLEARN = 429,
+ RBAC_PERM_COMMAND_LFG = 430,
+ RBAC_PERM_COMMAND_LFG_PLAYER = 431,
+ RBAC_PERM_COMMAND_LFG_GROUP = 432,
+ RBAC_PERM_COMMAND_LFG_QUEUE = 433,
+ RBAC_PERM_COMMAND_LFG_CLEAN = 434,
+ RBAC_PERM_COMMAND_LFG_OPTIONS = 435,
+ RBAC_PERM_COMMAND_LIST = 436,
+ RBAC_PERM_COMMAND_LIST_CREATURE = 437,
+ RBAC_PERM_COMMAND_LIST_ITEM = 438,
+ RBAC_PERM_COMMAND_LIST_OBJECT = 439,
+ RBAC_PERM_COMMAND_LIST_AURAS = 440,
+ RBAC_PERM_COMMAND_LIST_MAIL = 441,
+ RBAC_PERM_COMMAND_LOOKUP = 442,
+ RBAC_PERM_COMMAND_LOOKUP_AREA = 443,
+ RBAC_PERM_COMMAND_LOOKUP_CREATURE = 444,
+ RBAC_PERM_COMMAND_LOOKUP_EVENT = 445,
+ RBAC_PERM_COMMAND_LOOKUP_FACTION = 446,
+ RBAC_PERM_COMMAND_LOOKUP_ITEM = 447,
+ RBAC_PERM_COMMAND_LOOKUP_ITEMSET = 448,
+ RBAC_PERM_COMMAND_LOOKUP_OBJECT = 449,
+ RBAC_PERM_COMMAND_LOOKUP_QUEST = 450,
+ RBAC_PERM_COMMAND_LOOKUP_PLAYER = 451,
+ RBAC_PERM_COMMAND_LOOKUP_PLAYER_IP = 452,
+ RBAC_PERM_COMMAND_LOOKUP_PLAYER_ACCOUNT = 453,
+ RBAC_PERM_COMMAND_LOOKUP_PLAYER_EMAIL = 454,
+ RBAC_PERM_COMMAND_LOOKUP_SKILL = 455,
+ RBAC_PERM_COMMAND_LOOKUP_SPELL = 456,
+ RBAC_PERM_COMMAND_LOOKUP_SPELL_ID = 457,
+ RBAC_PERM_COMMAND_LOOKUP_TAXINODE = 458,
+ RBAC_PERM_COMMAND_LOOKUP_TELE = 459,
+ RBAC_PERM_COMMAND_LOOKUP_TITLE = 460,
+ RBAC_PERM_COMMAND_LOOKUP_MAP = 461,
+ RBAC_PERM_COMMAND_ANNOUNCE = 462,
+ RBAC_PERM_COMMAND_CHANNEL = 463,
+ RBAC_PERM_COMMAND_CHANNEL_SET = 464,
+ RBAC_PERM_COMMAND_CHANNEL_SET_OWNERSHIP = 465,
+ RBAC_PERM_COMMAND_GMANNOUNCE = 466,
+ RBAC_PERM_COMMAND_GMNAMEANNOUNCE = 467,
+ RBAC_PERM_COMMAND_GMNOTIFY = 468,
+ RBAC_PERM_COMMAND_NAMEANNOUNCE = 469,
+ RBAC_PERM_COMMAND_NOTIFY = 470,
+ RBAC_PERM_COMMAND_WHISPERS = 471,
// custom permissions 1000+
RBAC_PERM_MAX
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index efc6423bb5c..c30795de475 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -819,6 +819,7 @@ enum TrinityStrings
LANG_PINFO_ACC_ACCOUNT = 714,
LANG_PINFO_ACC_LASTLOGIN = 716,
LANG_PINFO_ACC_OS = 749,
+ LANG_PINFO_ACC_REGMAILS = 879,
LANG_PINFO_ACC_IP = 752,
LANG_PINFO_CHR_LEVEL_LOW = 843,
LANG_PINFO_CHR_RACE = 844,
@@ -852,7 +853,17 @@ enum TrinityStrings
LANG_ARENA_INFO_MEMBERS = 869,
LANG_ARENA_LOOKUP = 870,
// = 871, see LANG_PINFO_CHR_LEVEL_HIGH
- // Room for in-game strings 872-999 not used
+ LANG_COMMAND_WRONGEMAIL = 872,
+ LANG_NEW_EMAILS_NOT_MATCH = 873,
+ LANG_COMMAND_EMAIL = 874,
+ LANG_EMAIL_TOO_LONG = 875,
+ LANG_COMMAND_NOTCHANGEEMAIL = 876,
+ LANG_OLD_EMAIL_IS_NEW_EMAIL = 877,
+ LANG_COMMAND_EMAIL_OUTPUT = 878,
+ // = 879, see LANG_PINFO_CHR_REGMAILS
+ LANG_ACCOUNT_SEC_TYPE = 880,
+ LANG_RBAC_EMAIL_REQUIRED = 881,
+ // Room for in-game strings 882-999 not used
// Level 4 (CLI only commands)
LANG_COMMAND_EXIT = 1000,
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 15cb32113dd..a1e084bc286 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -457,9 +457,15 @@ int WorldSocket::Update (void)
if (closing_)
return -1;
- if (m_OutActive || (m_OutBuffer->length() == 0 && msg_queue()->is_empty()))
+ if (m_OutActive)
return 0;
+ {
+ ACE_GUARD_RETURN (LockType, Guard, m_OutBufferLock, 0);
+ if (m_OutBuffer->length() == 0 && msg_queue()->is_empty())
+ return 0;
+ }
+
int ret;
do
ret = handle_output(get_handle());
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 7ec30c49d3c..377446f210d 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1228,6 +1228,9 @@ void World::LoadConfigSettings(bool reload)
// DBC_ItemAttributes
m_bool_configs[CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES] = sConfigMgr->GetBoolDefault("DBC.EnforceItemAttributes", true);
+ // Accountpassword Secruity
+ m_int_configs[CONFIG_ACC_PASSCHANGESEC] = sConfigMgr->GetIntDefault("Account.PasswordChangeSecurity", 0);
+
// Max instances per hour
m_int_configs[CONFIG_MAX_INSTANCES_PER_HOUR] = sConfigMgr->GetIntDefault("AccountInstancesPerHour", 5);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 8de393ee54b..b375e2cedfd 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -346,6 +346,7 @@ enum WorldIntConfigs
CONFIG_PACKET_SPOOF_POLICY,
CONFIG_PACKET_SPOOF_BANMODE,
CONFIG_PACKET_SPOOF_BANDURATION,
+ CONFIG_ACC_PASSCHANGESEC,
INT_CONFIG_VALUE_COUNT
};
diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp
index 42e33faee1c..40bfd46e19f 100644
--- a/src/server/scripts/Commands/cs_account.cpp
+++ b/src/server/scripts/Commands/cs_account.cpp
@@ -35,35 +35,43 @@ public:
ChatCommand* GetCommands() const OVERRIDE
{
+ static ChatCommand accountSetSecTable[] =
+ {
+ { "regmail", RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_REGMAIL, true, &HandleAccountSetRegEmailCommand, "", NULL },
+ { "email", RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_EMAIL, true, &HandleAccountSetEmailCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
static ChatCommand accountSetCommandTable[] =
{
- { "addon", RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON, true, &HandleAccountSetAddonCommand, "", NULL },
- { "gmlevel", RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL, true, &HandleAccountSetGmLevelCommand, "", NULL },
- { "password", RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD, true, &HandleAccountSetPasswordCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "addon", RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON, true, &HandleAccountSetAddonCommand, "", NULL },
+ { "sec", RBAC_PERM_COMMAND_ACCOUNT_SET_SEC, true, NULL, "", accountSetSecTable },
+ { "gmlevel", RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL, true, &HandleAccountSetGmLevelCommand, "", NULL },
+ { "password", RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD, true, &HandleAccountSetPasswordCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand accountLockCommandTable[] =
{
- { "country", RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY, true, &HandleAccountLockCountryCommand, "", NULL },
- { "ip", RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP, true, &HandleAccountLockIpCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "country", RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY, true, &HandleAccountLockCountryCommand, "", NULL },
+ { "ip", RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP, true, &HandleAccountLockIpCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand accountCommandTable[] =
{
- { "addon", RBAC_PERM_COMMAND_ACCOUNT_ADDON, false, &HandleAccountAddonCommand, "", NULL },
- { "create", RBAC_PERM_COMMAND_ACCOUNT_CREATE, true, &HandleAccountCreateCommand, "", NULL },
- { "delete", RBAC_PERM_COMMAND_ACCOUNT_DELETE, true, &HandleAccountDeleteCommand, "", NULL },
- { "onlinelist", RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST, true, &HandleAccountOnlineListCommand, "", NULL },
- { "lock", RBAC_PERM_COMMAND_ACCOUNT_LOCK, false, NULL, "", accountLockCommandTable },
- { "set", RBAC_PERM_COMMAND_ACCOUNT_SET, true, NULL, "", accountSetCommandTable },
- { "password", RBAC_PERM_COMMAND_ACCOUNT_PASSWORD, false, &HandleAccountPasswordCommand, "", NULL },
- { "", RBAC_PERM_COMMAND_ACCOUNT, false, &HandleAccountCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "addon", RBAC_PERM_COMMAND_ACCOUNT_ADDON, false, &HandleAccountAddonCommand, "", NULL },
+ { "create", RBAC_PERM_COMMAND_ACCOUNT_CREATE, true, &HandleAccountCreateCommand, "", NULL },
+ { "delete", RBAC_PERM_COMMAND_ACCOUNT_DELETE, true, &HandleAccountDeleteCommand, "", NULL },
+ { "email", RBAC_PERM_COMMAND_ACCOUNT_EMAIL, false, &HandleAccountEmailCommand, "", NULL },
+ { "onlinelist", RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST, true, &HandleAccountOnlineListCommand, "", NULL },
+ { "lock", RBAC_PERM_COMMAND_ACCOUNT_LOCK, false, NULL, "", accountLockCommandTable },
+ { "set", RBAC_PERM_COMMAND_ACCOUNT_SET, true, NULL, "", accountSetCommandTable },
+ { "password", RBAC_PERM_COMMAND_ACCOUNT_PASSWORD, false, &HandleAccountPasswordCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_ACCOUNT, false, &HandleAccountCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "account", RBAC_PERM_COMMAND_ACCOUNT, true, NULL, "", accountCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "account", RBAC_PERM_COMMAND_ACCOUNT, true, NULL, "", accountCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -106,29 +114,36 @@ public:
if (!*args)
return false;
+ std::string email;
+
///- %Parse the command line arguments
char* accountName = strtok((char*)args, " ");
char* password = strtok(NULL, " ");
+ char* possibleEmail = strtok(NULL, " ' ");
+ if (possibleEmail)
+ email = possibleEmail;
+
if (!accountName || !password)
return false;
- AccountOpResult result = sAccountMgr->CreateAccount(std::string(accountName), std::string(password));
+ AccountOpResult result = sAccountMgr->CreateAccount(std::string(accountName), std::string(password), email);
switch (result)
{
case AOR_OK:
handler->PSendSysMessage(LANG_ACCOUNT_CREATED, accountName);
if (handler->GetSession())
{
- TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %d (IP: %s) Character:[%s] (GUID: %u) Change Password.",
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %d (IP: %s) Character:[%s] (GUID: %u) created Account %s (Email: '%s')",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow());
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
+ accountName, email.c_str());
}
break;
case AOR_NAME_TOO_LONG:
handler->SendSysMessage(LANG_ACCOUNT_TOO_LONG);
handler->SetSentErrorMessage(true);
return false;
- case AOR_NAME_ALREDY_EXIST:
+ case AOR_NAME_ALREADY_EXIST:
handler->SendSysMessage(LANG_ACCOUNT_ALREADY_EXIST);
handler->SetSentErrorMessage(true);
return false;
@@ -338,6 +353,89 @@ public:
return false;
}
+ static bool HandleAccountEmailCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ {
+ handler->SendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ char* oldEmail = strtok(NULL, " ");
+ char* password = strtok(NULL, " ");
+ char* email = strtok((char*)args, " ");
+ char* emailConfirmation = strtok(NULL, " ");
+
+ if (!oldEmail || !password || !email || !emailConfirmation)
+ {
+ handler->SendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!AccountMgr::CheckEmail(handler->GetSession()->GetAccountId(), std::string(oldEmail)))
+ {
+ handler->SendSysMessage(LANG_COMMAND_WRONGEMAIL);
+ handler->SetSentErrorMessage(true);
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided email [%s] is not equal to registration email [%s].",
+ handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
+ email, oldEmail);
+ return false;
+ }
+
+ if (!AccountMgr::CheckPassword(handler->GetSession()->GetAccountId(), std::string(password)))
+ {
+ handler->SendSysMessage(LANG_COMMAND_WRONGOLDPASSWORD);
+ handler->SetSentErrorMessage(true);
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.",
+ handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow());
+ return false;
+ }
+
+ if (strcmp(email, oldEmail) == 0)
+ {
+ handler->SendSysMessage(LANG_OLD_EMAIL_IS_NEW_EMAIL);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (strcmp(email, emailConfirmation) != 0)
+ {
+ handler->SendSysMessage(LANG_NEW_EMAILS_NOT_MATCH);
+ handler->SetSentErrorMessage(true);
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.",
+ handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow());
+ return false;
+ }
+
+
+ AccountOpResult result = AccountMgr::ChangeEmail(handler->GetSession()->GetAccountId(), std::string(email));
+ switch (result)
+ {
+ case AOR_OK:
+ handler->SendSysMessage(LANG_COMMAND_EMAIL);
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %u (IP: %s) Character:[%s] (GUID: %u) Changed Email from [%s] to [%s].",
+ handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
+ oldEmail, email);
+ break;
+ case AOR_EMAIL_TOO_LONG:
+ handler->SendSysMessage(LANG_EMAIL_TOO_LONG);
+ handler->SetSentErrorMessage(true);
+ return false;
+ default:
+ handler->SendSysMessage(LANG_COMMAND_NOTCHANGEEMAIL);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ return true;
+ }
+
static bool HandleAccountPasswordCommand(ChatHandler* handler, char const* args)
{
if (!*args)
@@ -347,9 +445,12 @@ public:
return false;
}
+ uint32 pwConfig = sWorld->getIntConfig(CONFIG_ACC_PASSCHANGESEC); // 0 - PW_NONE, 1 - PW_EMAIL, 2 - PW_RBAC
+
char* oldPassword = strtok((char*)args, " ");
char* newPassword = strtok(NULL, " ");
char* passwordConfirmation = strtok(NULL, " ");
+ char* emailConfirmation = strtok(NULL, " ");
if (!oldPassword || !newPassword || !passwordConfirmation)
{
@@ -358,16 +459,37 @@ public:
return false;
}
+ if ((pwConfig == PW_EMAIL || pwConfig == PW_RBAC && handler->HasPermission(RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE)) && !emailConfirmation)
+ {
+ handler->SendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but entered no email at all. Has Perm: [%s]",
+ handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
+ handler->HasPermission(RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE) ? "Yes" : "No");
+ }
+
if (!AccountMgr::CheckPassword(handler->GetSession()->GetAccountId(), std::string(oldPassword)))
{
handler->SendSysMessage(LANG_COMMAND_WRONGOLDPASSWORD);
handler->SetSentErrorMessage(true);
- TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password.",
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the provided old password is wrong.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow());
return false;
}
+ if ((pwConfig == PW_EMAIL || pwConfig == PW_RBAC && handler->HasPermission(RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE)) // Either PW_EMAIL or PW_RBAC with the Permission
+ && !AccountMgr::CheckEmail(handler->GetSession()->GetAccountId(), std::string(emailConfirmation)))
+ {
+ handler->SendSysMessage(LANG_COMMAND_WRONGEMAIL);
+ handler->SetSentErrorMessage(true);
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the entered email [%s] is wrong.",
+ handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
+ emailConfirmation);
+ }
+
if (strcmp(newPassword, passwordConfirmation) != 0)
{
handler->SendSysMessage(LANG_NEW_PASSWORDS_NOT_MATCH);
@@ -399,8 +521,40 @@ public:
static bool HandleAccountCommand(ChatHandler* handler, char const* /*args*/)
{
+ // GM Level
AccountTypes gmLevel = handler->GetSession()->GetSecurity();
handler->PSendSysMessage(LANG_ACCOUNT_LEVEL, uint32(gmLevel));
+
+ // Security level required
+ bool hasRBAC = (handler->HasPermission(RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE) ? true : false);
+ uint32 pwConfig = sWorld->getIntConfig(CONFIG_ACC_PASSCHANGESEC); // 0 - PW_NONE, 1 - PW_EMAIL, 2 - PW_RBAC
+
+ handler->PSendSysMessage(LANG_ACCOUNT_SEC_TYPE, (pwConfig == PW_NONE ? "Lowest level: No Email input required." :
+ pwConfig == PW_EMAIL ? "Highest level: Email input required." :
+ pwConfig == PW_RBAC ? "Special level: Your account may require email input depending on settings. That is the case if another lien is printed." :
+ "Unknown security level: Notify technician for details."));
+
+ // RBAC required display - is not displayed for console
+ if (pwConfig == PW_RBAC && handler->GetSession() && hasRBAC)
+ handler->PSendSysMessage(LANG_RBAC_EMAIL_REQUIRED);
+
+ // Email display if sufficient rights
+ if (handler->HasPermission(RBAC_PERM_MAY_CHECK_OWN_EMAIL))
+ {
+ std::string emailoutput;
+ uint32 accountId = handler->GetSession()->GetAccountId();
+
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_EMAIL_BY_ID);
+ stmt->setUInt32(0, accountId);
+ PreparedQueryResult result = LoginDatabase.Query(stmt);
+
+ if (result)
+ {
+ emailoutput = (*result)[0].GetString();
+ handler->PSendSysMessage(LANG_COMMAND_EMAIL_OUTPUT, emailoutput.c_str());
+ }
+ }
+
return true;
}
@@ -471,7 +625,11 @@ public:
static bool HandleAccountSetGmLevelCommand(ChatHandler* handler, char const* args)
{
if (!*args)
+ {
+ handler->SendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
return false;
+ }
std::string targetAccountName;
uint32 targetAccountId = 0;
@@ -524,7 +682,7 @@ public:
playerSecurity = SEC_CONSOLE;
// can set security level only for target with less security and to less security that we have
- // This is also reject self apply in fact
+ // This also restricts setting handler's own security.
targetSecurity = AccountMgr::GetSecurity(targetAccountId, gmRealmID);
if (targetSecurity >= playerSecurity || gm >= playerSecurity)
{
@@ -570,7 +728,11 @@ public:
static bool HandleAccountSetPasswordCommand(ChatHandler* handler, char const* args)
{
if (!*args)
+ {
+ handler->SendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
return false;
+ }
///- Get the command line arguments
char* account = strtok((char*)args, " ");
@@ -597,7 +759,7 @@ public:
}
/// can set password only for target with less security
- /// This is also reject self apply in fact
+ /// This also restricts setting handler's own password
if (handler->HasLowerSecurityAccount(NULL, targetAccountId, true))
return false;
@@ -630,6 +792,153 @@ public:
}
return true;
}
+
+ /// Set normal email for account
+ static bool HandleAccountSetEmailCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ ///- Get the command line arguments
+ char* account = strtok((char*)args, " ");
+ char* email = strtok(NULL, " ");
+ char* emailConfirmation = strtok(NULL, " ");
+
+ if (!account || !email || !emailConfirmation)
+ {
+ handler->SendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ std::string accountName = account;
+ if (!AccountMgr::normalizeString(accountName))
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 targetAccountId = AccountMgr::GetId(accountName);
+ if (!targetAccountId)
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ /// can set email only for target with less security
+ /// This also restricts setting handler's own email.
+ if (handler->HasLowerSecurityAccount(NULL, targetAccountId, true))
+ return false;
+
+ if (strcmp(email, emailConfirmation) != 0)
+ {
+ handler->SendSysMessage(LANG_NEW_EMAILS_NOT_MATCH);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ AccountOpResult result = AccountMgr::ChangeEmail(targetAccountId, email);
+ switch (result)
+ {
+ case AOR_OK:
+ handler->SendSysMessage(LANG_COMMAND_EMAIL);
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "ChangeEmail: Account %s [Id: %u] had it's email changed to %s.",
+ accountName.c_str(), targetAccountId, email);
+ break;
+ case AOR_NAME_NOT_EXIST:
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ case AOR_EMAIL_TOO_LONG:
+ handler->SendSysMessage(LANG_EMAIL_TOO_LONG);
+ handler->SetSentErrorMessage(true);
+ return false;
+ default:
+ handler->SendSysMessage(LANG_COMMAND_NOTCHANGEEMAIL);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ return true;
+ }
+
+ /// Change registration email for account
+ static bool HandleAccountSetRegEmailCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ //- We do not want anything short of console to use this by default.
+ //- So we force that.
+ if (handler->GetSession())
+ return false;
+
+ ///- Get the command line arguments
+ char* account = strtok((char*)args, " ");
+ char* email = strtok(NULL, " ");
+ char* emailConfirmation = strtok(NULL, " ");
+
+ if (!account || !email || !emailConfirmation)
+ {
+ handler->SendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ std::string accountName = account;
+ if (!AccountMgr::normalizeString(accountName))
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 targetAccountId = AccountMgr::GetId(accountName);
+ if (!targetAccountId)
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ /// can set email only for target with less security
+ /// This also restricts setting handler's own email.
+ if (handler->HasLowerSecurityAccount(NULL, targetAccountId, true))
+ return false;
+
+ if (strcmp(email, emailConfirmation) != 0)
+ {
+ handler->SendSysMessage(LANG_NEW_EMAILS_NOT_MATCH);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ AccountOpResult result = AccountMgr::ChangeRegEmail(targetAccountId, email);
+ switch (result)
+ {
+ case AOR_OK:
+ handler->SendSysMessage(LANG_COMMAND_EMAIL);
+ TC_LOG_INFO(LOG_FILTER_CHARACTER, "ChangeRegEmail: Account %s [Id: %u] had it's Registration Email changed to %s.",
+ accountName.c_str(), targetAccountId, email);
+ break;
+ case AOR_NAME_NOT_EXIST:
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ case AOR_EMAIL_TOO_LONG:
+ handler->SendSysMessage(LANG_EMAIL_TOO_LONG);
+ handler->SetSentErrorMessage(true);
+ return false;
+ default:
+ handler->SendSysMessage(LANG_COMMAND_NOTCHANGEEMAIL);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ return true;
+ }
};
void AddSC_account_commandscript()
diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp
index 02a3aec9e82..cbcbbd214b3 100644
--- a/src/server/scripts/Commands/cs_cast.cpp
+++ b/src/server/scripts/Commands/cs_cast.cpp
@@ -37,18 +37,18 @@ public:
{
static ChatCommand castCommandTable[] =
{
- { "back", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleCastBackCommand, "", NULL },
- { "dist", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleCastDistCommand, "", NULL },
- { "self", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleCastSelfCommand, "", NULL },
- { "target", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleCastTargetCommad, "", NULL },
- { "dest", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleCastDestCommand, "", NULL },
- { "", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleCastCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "back", RBAC_PERM_COMMAND_CAST_BACK, false, &HandleCastBackCommand, "", NULL },
+ { "dist", RBAC_PERM_COMMAND_CAST_DIST, false, &HandleCastDistCommand, "", NULL },
+ { "self", RBAC_PERM_COMMAND_CAST_SELF, false, &HandleCastSelfCommand, "", NULL },
+ { "target", RBAC_PERM_COMMAND_CAST_TARGET, false, &HandleCastTargetCommad, "", NULL },
+ { "dest", RBAC_PERM_COMMAND_CAST_DEST, false, &HandleCastDestCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_CAST, false, &HandleCastCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "cast", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", castCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "cast", RBAC_PERM_COMMAND_CAST, false, NULL, "", castCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp
index e7515d18d08..4a69e9cc61b 100644
--- a/src/server/scripts/Commands/cs_character.cpp
+++ b/src/server/scripts/Commands/cs_character.cpp
@@ -39,39 +39,39 @@ public:
{
static ChatCommand pdumpCommandTable[] =
{
- { "load", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandlePDumpLoadCommand, "", NULL },
- { "write", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandlePDumpWriteCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "load", RBAC_PERM_COMMAND_PDUMP_LOAD, true, &HandlePDumpLoadCommand, "", NULL },
+ { "write", RBAC_PERM_COMMAND_PDUMP_WRITE, true, &HandlePDumpWriteCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand characterDeletedCommandTable[] =
{
- { "delete", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleCharacterDeletedDeleteCommand, "", NULL },
- { "list", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleCharacterDeletedListCommand, "", NULL },
- { "restore", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleCharacterDeletedRestoreCommand, "", NULL },
- { "old", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleCharacterDeletedOldCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "delete", RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE, true, &HandleCharacterDeletedDeleteCommand, "", NULL },
+ { "list", RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST, true, &HandleCharacterDeletedListCommand, "", NULL },
+ { "restore", RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE, true, &HandleCharacterDeletedRestoreCommand, "", NULL },
+ { "old", RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD, true, &HandleCharacterDeletedOldCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand characterCommandTable[] =
{
- { "customize", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleCharacterCustomizeCommand, "", NULL },
- { "changefaction", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleCharacterChangeFactionCommand, "", NULL },
- { "changerace", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleCharacterChangeRaceCommand, "", NULL },
- { "deleted", RBAC_PERM_GAMEMASTER_COMMANDS, true, NULL, "", characterDeletedCommandTable },
- { "erase", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleCharacterEraseCommand, "", NULL },
- { "level", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleCharacterLevelCommand, "", NULL },
- { "rename", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleCharacterRenameCommand, "", NULL },
- { "reputation", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleCharacterReputationCommand, "", NULL },
- { "titles", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleCharacterTitlesCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "customize", RBAC_PERM_COMMAND_CHARACTER_CUSTOMIZE, true, &HandleCharacterCustomizeCommand, "", NULL },
+ { "changefaction", RBAC_PERM_COMMAND_CHARACTER_CHANGEFACTION, true, &HandleCharacterChangeFactionCommand, "", NULL },
+ { "changerace", RBAC_PERM_COMMAND_CHARACTER_CHANGERACE, true, &HandleCharacterChangeRaceCommand, "", NULL },
+ { "deleted", RBAC_PERM_COMMAND_CHARACTER_DELETED, true, NULL, "", characterDeletedCommandTable },
+ { "erase", RBAC_PERM_COMMAND_CHARACTER_ERASE, true, &HandleCharacterEraseCommand, "", NULL },
+ { "level", RBAC_PERM_COMMAND_CHARACTER_LEVEL, true, &HandleCharacterLevelCommand, "", NULL },
+ { "rename", RBAC_PERM_COMMAND_CHARACTER_RENAME, true, &HandleCharacterRenameCommand, "", NULL },
+ { "reputation", RBAC_PERM_COMMAND_CHARACTER_REPUTATION, true, &HandleCharacterReputationCommand, "", NULL },
+ { "titles", RBAC_PERM_COMMAND_CHARACTER_TITLES, true, &HandleCharacterTitlesCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "character", RBAC_PERM_GAMEMASTER_COMMANDS, true, NULL, "", characterCommandTable },
- { "levelup", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLevelUpCommand, "", NULL },
- { "pdump", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", pdumpCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "character", RBAC_PERM_COMMAND_CHARACTER, true, NULL, "", characterCommandTable },
+ { "levelup", RBAC_PERM_COMMAND_LEVELUP, false, &HandleLevelUpCommand, "", NULL },
+ { "pdump", RBAC_PERM_COMMAND_PDUMP, true, NULL, "", pdumpCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp
index 86acc7b1a68..6d27e2c4f0f 100644
--- a/src/server/scripts/Commands/cs_cheat.cpp
+++ b/src/server/scripts/Commands/cs_cheat.cpp
@@ -38,22 +38,22 @@ public:
static ChatCommand cheatCommandTable[] =
{
- { "god", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGodModeCheatCommand, "", NULL },
- { "casttime", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleCasttimeCheatCommand, "", NULL },
- { "cooldown", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleCoolDownCheatCommand, "", NULL },
- { "power", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandlePowerCheatCommand, "", NULL },
- { "waterwalk", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWaterWalkCheatCommand, "", NULL },
- { "status", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleCheatStatusCommand, "", NULL },
- { "taxi", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTaxiCheatCommand, "", NULL },
- { "explore", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleExploreCheatCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "god", RBAC_PERM_COMMAND_CHEAT_GOD, false, &HandleGodModeCheatCommand, "", NULL },
+ { "casttime", RBAC_PERM_COMMAND_CHEAT_CASTTIME, false, &HandleCasttimeCheatCommand, "", NULL },
+ { "cooldown", RBAC_PERM_COMMAND_CHEAT_COOLDOWN, false, &HandleCoolDownCheatCommand, "", NULL },
+ { "power", RBAC_PERM_COMMAND_CHEAT_POWER, false, &HandlePowerCheatCommand, "", NULL },
+ { "waterwalk", RBAC_PERM_COMMAND_CHEAT_WATERWALK, false, &HandleWaterWalkCheatCommand, "", NULL },
+ { "status", RBAC_PERM_COMMAND_CHEAT_STATUS, false, &HandleCheatStatusCommand, "", NULL },
+ { "taxi", RBAC_PERM_COMMAND_CHEAT_TAXI, false, &HandleTaxiCheatCommand, "", NULL },
+ { "explore", RBAC_PERM_COMMAND_CHEAT_EXPLORE, false, &HandleExploreCheatCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "cheat", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", cheatCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "cheat", RBAC_PERM_COMMAND_CHEAT, false, NULL, "", cheatCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index ec12b08e9c0..6be26d53680 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -44,61 +44,61 @@ public:
{
static ChatCommand debugPlayCommandTable[] =
{
- { "cinematic", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleDebugPlayCinematicCommand, "", NULL },
- { "movie", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleDebugPlayMovieCommand, "", NULL },
- { "sound", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleDebugPlaySoundCommand, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "cinematic", RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC, false, &HandleDebugPlayCinematicCommand, "", NULL },
+ { "movie", RBAC_PERM_COMMAND_DEBUG_PLAY_MOVIE, false, &HandleDebugPlayMovieCommand, "", NULL },
+ { "sound", RBAC_PERM_COMMAND_DEBUG_PLAY_SOUND, false, &HandleDebugPlaySoundCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand debugSendCommandTable[] =
{
- { "buyerror", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendBuyErrorCommand, "", NULL },
- { "channelnotify", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendChannelNotifyCommand, "", NULL },
- { "chatmmessage", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendChatMsgCommand, "", NULL },
- { "equiperror", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendEquipErrorCommand, "", NULL },
- { "largepacket", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendLargePacketCommand, "", NULL },
- { "opcode", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendOpcodeCommand, "", NULL },
- { "qpartymsg", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendQuestPartyMsgCommand, "", NULL },
- { "qinvalidmsg", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendQuestInvalidMsgCommand, "", NULL },
- { "sellerror", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendSellErrorCommand, "", NULL },
- { "setphaseshift", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendSetPhaseShiftCommand, "", NULL },
- { "spellfail", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSendSpellFailCommand, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "buyerror", RBAC_PERM_COMMAND_DEBUG_SEND_BUYERROR, false, &HandleDebugSendBuyErrorCommand, "", NULL },
+ { "channelnotify", RBAC_PERM_COMMAND_DEBUG_SEND_CHANNELNOTIFY, false, &HandleDebugSendChannelNotifyCommand, "", NULL },
+ { "chatmessage", RBAC_PERM_COMMAND_DEBUG_SEND_CHATMESSAGE, false, &HandleDebugSendChatMsgCommand, "", NULL },
+ { "equiperror", RBAC_PERM_COMMAND_DEBUG_SEND_EQUIPERROR, false, &HandleDebugSendEquipErrorCommand, "", NULL },
+ { "largepacket", RBAC_PERM_COMMAND_DEBUG_SEND_LARGEPACKET, false, &HandleDebugSendLargePacketCommand, "", NULL },
+ { "opcode", RBAC_PERM_COMMAND_DEBUG_SEND_OPCODE, false, &HandleDebugSendOpcodeCommand, "", NULL },
+ { "qpartymsg", RBAC_PERM_COMMAND_DEBUG_SEND_QPARTYMSG, false, &HandleDebugSendQuestPartyMsgCommand, "", NULL },
+ { "qinvalidmsg", RBAC_PERM_COMMAND_DEBUG_SEND_QINVALIDMSG, false, &HandleDebugSendQuestInvalidMsgCommand, "", NULL },
+ { "sellerror", RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR, false, &HandleDebugSendSellErrorCommand, "", NULL },
+ { "setphaseshift", RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT, false, &HandleDebugSendSetPhaseShiftCommand, "", NULL },
+ { "spellfail", RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL, false, &HandleDebugSendSpellFailCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand debugCommandTable[] =
{
- { "setbit", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSet32BitCommand, "", NULL },
- { "threat", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugThreatListCommand, "", NULL },
- { "hostil", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugHostileRefListCommand, "", NULL },
- { "anim", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleDebugAnimCommand, "", NULL },
- { "arena", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugArenaCommand, "", NULL },
- { "bg", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugBattlegroundCommand, "", NULL },
- { "getitemstate", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugGetItemStateCommand, "", NULL },
- { "lootrecipient", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleDebugGetLootRecipientCommand, "", NULL },
- { "getvalue", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugGetValueCommand, "", NULL },
- { "getitemvalue", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugGetItemValueCommand, "", NULL },
- { "Mod32Value", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugMod32ValueCommand, "", NULL },
- { "play", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", debugPlayCommandTable },
- { "send", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", debugSendCommandTable },
- { "setaurastate", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSetAuraStateCommand, "", NULL },
- { "setitemvalue", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSetItemValueCommand, "", NULL },
- { "setvalue", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSetValueCommand, "", NULL },
- { "spawnvehicle", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSpawnVehicleCommand, "", NULL },
- { "setvid", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugSetVehicleIdCommand, "", NULL },
- { "entervehicle", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugEnterVehicleCommand, "", NULL },
- { "uws", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugUpdateWorldStateCommand, "", NULL },
- { "update", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugUpdateCommand, "", NULL },
- { "itemexpire", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugItemExpireCommand, "", NULL },
- { "areatriggers", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugAreaTriggersCommand, "", NULL },
- { "los", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleDebugLoSCommand, "", NULL },
- { "moveflags", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDebugMoveflagsCommand, "", NULL },
- { "phase", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleDebugPhaseCommand, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "setbit", RBAC_PERM_COMMAND_DEBUG_SETBIT, false, &HandleDebugSet32BitCommand, "", NULL },
+ { "threat", RBAC_PERM_COMMAND_DEBUG_THREAT, false, &HandleDebugThreatListCommand, "", NULL },
+ { "hostil", RBAC_PERM_COMMAND_DEBUG_HOSTIL, false, &HandleDebugHostileRefListCommand, "", NULL },
+ { "anim", RBAC_PERM_COMMAND_DEBUG_ANIM, false, &HandleDebugAnimCommand, "", NULL },
+ { "arena", RBAC_PERM_COMMAND_DEBUG_ARENA, false, &HandleDebugArenaCommand, "", NULL },
+ { "bg", RBAC_PERM_COMMAND_DEBUG_BG, false, &HandleDebugBattlegroundCommand, "", NULL },
+ { "getitemstate", RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE, false, &HandleDebugGetItemStateCommand, "", NULL },
+ { "lootrecipient", RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT, false, &HandleDebugGetLootRecipientCommand, "", NULL },
+ { "getvalue", RBAC_PERM_COMMAND_DEBUG_GETVALUE, false, &HandleDebugGetValueCommand, "", NULL },
+ { "getitemvalue", RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE, false, &HandleDebugGetItemValueCommand, "", NULL },
+ { "Mod32Value", RBAC_PERM_COMMAND_DEBUG_MOD32VALUE, false, &HandleDebugMod32ValueCommand, "", NULL },
+ { "play", RBAC_PERM_COMMAND_DEBUG_PLAY, false, NULL, "", debugPlayCommandTable },
+ { "send", RBAC_PERM_COMMAND_DEBUG_SEND, false, NULL, "", debugSendCommandTable },
+ { "setaurastate", RBAC_PERM_COMMAND_DEBUG_SETAURASTATE, false, &HandleDebugSetAuraStateCommand, "", NULL },
+ { "setitemvalue", RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE, false, &HandleDebugSetItemValueCommand, "", NULL },
+ { "setvalue", RBAC_PERM_COMMAND_DEBUG_SETVALUE, false, &HandleDebugSetValueCommand, "", NULL },
+ { "spawnvehicle", RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE, false, &HandleDebugSpawnVehicleCommand, "", NULL },
+ { "setvid", RBAC_PERM_COMMAND_DEBUG_SETVID, false, &HandleDebugSetVehicleIdCommand, "", NULL },
+ { "entervehicle", RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE, false, &HandleDebugEnterVehicleCommand, "", NULL },
+ { "uws", RBAC_PERM_COMMAND_DEBUG_UWS, false, &HandleDebugUpdateWorldStateCommand, "", NULL },
+ { "update", RBAC_PERM_COMMAND_DEBUG_UPDATE, false, &HandleDebugUpdateCommand, "", NULL },
+ { "itemexpire", RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE, false, &HandleDebugItemExpireCommand, "", NULL },
+ { "areatriggers", RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "", NULL },
+ { "los", RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "", NULL },
+ { "moveflags", RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS, false, &HandleDebugMoveflagsCommand, "", NULL },
+ { "phase", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleDebugPhaseCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "debug", RBAC_PERM_MODERATOR_COMMANDS, true, NULL, "", debugCommandTable },
- { "wpgps", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleWPGPSCommand, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "debug", RBAC_PERM_COMMAND_DEBUG, true, NULL, "", debugCommandTable },
+ { "wpgps", RBAC_PERM_COMMAND_WPGPS, false, &HandleWPGPSCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_deserter.cpp b/src/server/scripts/Commands/cs_deserter.cpp
index 583b6b741bd..aa0d34e3638 100644
--- a/src/server/scripts/Commands/cs_deserter.cpp
+++ b/src/server/scripts/Commands/cs_deserter.cpp
@@ -47,27 +47,27 @@ public:
{
static ChatCommand deserterInstanceCommandTable[] =
{
- { "add", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDeserterInstanceAdd, "", NULL },
- { "remove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDeserterInstanceRemove, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "add", RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD, false, &HandleDeserterInstanceAdd, "", NULL },
+ { "remove", RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE, false, &HandleDeserterInstanceRemove, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand deserterBGCommandTable[] =
{
- { "add", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDeserterBGAdd, "", NULL },
- { "remove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDeserterBGRemove, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "add", RBAC_PERM_COMMAND_DESERTER_BG_ADD, false, &HandleDeserterBGAdd, "", NULL },
+ { "remove", RBAC_PERM_COMMAND_DESERTER_BG_REMOVE, false, &HandleDeserterBGRemove, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand deserterCommandTable[] =
{
- { "instance", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", deserterInstanceCommandTable },
- { "bg", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", deserterBGCommandTable },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "instance", RBAC_PERM_COMMAND_DESERTER_INSTANCE, false, NULL, "", deserterInstanceCommandTable },
+ { "bg", RBAC_PERM_COMMAND_DESERTER_BG, false, NULL, "", deserterBGCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "deserter", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", deserterCommandTable },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "deserter", RBAC_PERM_COMMAND_DESERTER, false, NULL, "", deserterCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_disable.cpp b/src/server/scripts/Commands/cs_disable.cpp
index 038727a6207..23e7fa8eb98 100644
--- a/src/server/scripts/Commands/cs_disable.cpp
+++ b/src/server/scripts/Commands/cs_disable.cpp
@@ -41,38 +41,38 @@ public:
{
static ChatCommand removeDisableCommandTable[] =
{
- { "spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleRemoveDisableSpellCommand, "", NULL },
- { "quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleRemoveDisableQuestCommand, "", NULL },
- { "map", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleRemoveDisableMapCommand, "", NULL },
- { "battleground", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleRemoveDisableBattlegroundCommand, "", NULL },
- { "achievement_criteria", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleRemoveDisableAchievementCriteriaCommand, "", NULL },
- { "outdoorpvp", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleRemoveDisableOutdoorPvPCommand, "", NULL },
- { "vmap", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleRemoveDisableVmapCommand, "", NULL },
- { "mmap", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleRemoveDisableMMapCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "spell", RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL, true, &HandleRemoveDisableSpellCommand, "", NULL },
+ { "quest", RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST, true, &HandleRemoveDisableQuestCommand, "", NULL },
+ { "map", RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP, true, &HandleRemoveDisableMapCommand, "", NULL },
+ { "battleground", RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND, true, &HandleRemoveDisableBattlegroundCommand, "", NULL },
+ { "achievement_criteria", RBAC_PERM_COMMAND_DISABLE_REMOVE_ACHIEVEMENT_CRITERIA, true, &HandleRemoveDisableAchievementCriteriaCommand, "", NULL },
+ { "outdoorpvp", RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP, true, &HandleRemoveDisableOutdoorPvPCommand, "", NULL },
+ { "vmap", RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP, true, &HandleRemoveDisableVmapCommand, "", NULL },
+ { "mmap", RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP, true, &HandleRemoveDisableMMapCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand addDisableCommandTable[] =
{
- { "spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleAddDisableSpellCommand, "", NULL },
- { "quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleAddDisableQuestCommand, "", NULL },
- { "map", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleAddDisableMapCommand, "", NULL },
- { "battleground", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleAddDisableBattlegroundCommand, "", NULL },
- { "achievement_criteria", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleAddDisableAchievementCriteriaCommand, "", NULL },
- { "outdoorpvp", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleAddDisableOutdoorPvPCommand, "", NULL },
- { "vmap", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleAddDisableVmapCommand, "", NULL },
- { "mmap", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleAddDisableMMapCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "spell", RBAC_PERM_COMMAND_DISABLE_ADD_SPELL, true, &HandleAddDisableSpellCommand, "", NULL },
+ { "quest", RBAC_PERM_COMMAND_DISABLE_ADD_QUEST, true, &HandleAddDisableQuestCommand, "", NULL },
+ { "map", RBAC_PERM_COMMAND_DISABLE_ADD_MAP, true, &HandleAddDisableMapCommand, "", NULL },
+ { "battleground", RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND, true, &HandleAddDisableBattlegroundCommand, "", NULL },
+ { "achievement_criteria", RBAC_PERM_COMMAND_DISABLE_ADD_ACHIEVEMENT_CRITERIA, true, &HandleAddDisableAchievementCriteriaCommand, "", NULL },
+ { "outdoorpvp", RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP, true, &HandleAddDisableOutdoorPvPCommand, "", NULL },
+ { "vmap", RBAC_PERM_COMMAND_DISABLE_ADD_VMAP, true, &HandleAddDisableVmapCommand, "", NULL },
+ { "mmap", RBAC_PERM_COMMAND_DISABLE_ADD_MMAP, true, &HandleAddDisableMMapCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand disableCommandTable[] =
{
- { "add", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", addDisableCommandTable },
- { "remove", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", removeDisableCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", RBAC_PERM_COMMAND_DISABLE_ADD, true, NULL, "", addDisableCommandTable },
+ { "remove", RBAC_PERM_COMMAND_DISABLE_REMOVE, true, NULL, "", removeDisableCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "disable", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", disableCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "disable", RBAC_PERM_COMMAND_DISABLE, false, NULL, "", disableCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_event.cpp b/src/server/scripts/Commands/cs_event.cpp
index 0deb0c95fcc..491ae65e0ca 100644
--- a/src/server/scripts/Commands/cs_event.cpp
+++ b/src/server/scripts/Commands/cs_event.cpp
@@ -37,16 +37,16 @@ public:
{
static ChatCommand eventCommandTable[] =
{
- { "activelist", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleEventActiveListCommand, "", NULL },
- { "start", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleEventStartCommand, "", NULL },
- { "stop", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleEventStopCommand, "", NULL },
- { "", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleEventInfoCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "activelist", RBAC_PERM_COMMAND_EVENT_ACTIVELIST, true, &HandleEventActiveListCommand, "", NULL },
+ { "start", RBAC_PERM_COMMAND_EVENT_START, true, &HandleEventStartCommand, "", NULL },
+ { "stop", RBAC_PERM_COMMAND_EVENT_STOP, true, &HandleEventStopCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_EVENT, true, &HandleEventInfoCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "event", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", eventCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "event", RBAC_PERM_COMMAND_EVENT, false, NULL, "", eventCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp
index 58f7eb050c5..888afcfdf2f 100644
--- a/src/server/scripts/Commands/cs_gm.cpp
+++ b/src/server/scripts/Commands/cs_gm.cpp
@@ -40,18 +40,18 @@ public:
{
static ChatCommand gmCommandTable[] =
{
- { "chat", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGMChatCommand, "", NULL },
- { "fly", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGMFlyCommand, "", NULL },
- { "ingame", RBAC_PERM_PLAYER_COMMANDS, true, &HandleGMListIngameCommand, "", NULL },
- { "list", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleGMListFullCommand, "", NULL },
- { "visible", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGMVisibleCommand, "", NULL },
- { "", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGMCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "chat", RBAC_PERM_COMMAND_GM_CHAT, false, &HandleGMChatCommand, "", NULL },
+ { "fly", RBAC_PERM_COMMAND_GM_FLY, false, &HandleGMFlyCommand, "", NULL },
+ { "ingame", RBAC_PERM_COMMAND_GM_INGAME, true, &HandleGMListIngameCommand, "", NULL },
+ { "list", RBAC_PERM_COMMAND_GM_LIST, true, &HandleGMListFullCommand, "", NULL },
+ { "visible", RBAC_PERM_COMMAND_GM_VISIBLE, false, &HandleGMVisibleCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_GM, false, &HandleGMCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "gm", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", gmCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "gm", RBAC_PERM_COMMAND_GM, false, NULL, "", gmCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp
index b9c94a2abe1..48c1e8eb3fa 100644
--- a/src/server/scripts/Commands/cs_go.cpp
+++ b/src/server/scripts/Commands/cs_go.cpp
@@ -39,23 +39,23 @@ public:
{
static ChatCommand goCommandTable[] =
{
- { "creature", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoCreatureCommand, "", NULL },
- { "graveyard", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoGraveyardCommand, "", NULL },
- { "grid", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoGridCommand, "", NULL },
- { "object", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoObjectCommand, "", NULL },
- { "taxinode", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoTaxinodeCommand, "", NULL },
- { "trigger", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoTriggerCommand, "", NULL },
- { "zonexy", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoZoneXYCommand, "", NULL },
- { "xyz", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoXYZCommand, "", NULL },
- { "ticket", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoTicketCommand, "", NULL },
- { "", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGoXYZCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "creature", RBAC_PERM_COMMAND_GO_CREATURE, false, &HandleGoCreatureCommand, "", NULL },
+ { "graveyard", RBAC_PERM_COMMAND_GO_GRAVEYARD, false, &HandleGoGraveyardCommand, "", NULL },
+ { "grid", RBAC_PERM_COMMAND_GO_GRID, false, &HandleGoGridCommand, "", NULL },
+ { "object", RBAC_PERM_COMMAND_GO_OBJECT, false, &HandleGoObjectCommand, "", NULL },
+ { "taxinode", RBAC_PERM_COMMAND_GO_TAXINODE, false, &HandleGoTaxinodeCommand, "", NULL },
+ { "trigger", RBAC_PERM_COMMAND_GO_TRIGGER, false, &HandleGoTriggerCommand, "", NULL },
+ { "zonexy", RBAC_PERM_COMMAND_GO_ZONEXY, false, &HandleGoZoneXYCommand, "", NULL },
+ { "xyz", RBAC_PERM_COMMAND_GO_XYZ, false, &HandleGoXYZCommand, "", NULL },
+ { "ticket", RBAC_PERM_COMMAND_GO_TICKET, false, &HandleGoTicketCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_GO, false, &HandleGoXYZCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "go", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", goCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "go", RBAC_PERM_COMMAND_GO, false, NULL, "", goCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp
index 383720e37c0..d3a1849d56f 100644
--- a/src/server/scripts/Commands/cs_gobject.cpp
+++ b/src/server/scripts/Commands/cs_gobject.cpp
@@ -41,33 +41,33 @@ public:
{
static ChatCommand gobjectAddCommandTable[] =
{
- { "temp", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectAddTempCommand, "", NULL },
- { "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectAddCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "temp", RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP, false, &HandleGameObjectAddTempCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_GOBJECT_ADD, false, &HandleGameObjectAddCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand gobjectSetCommandTable[] =
{
- { "phase", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectSetPhaseCommand, "", NULL },
- { "state", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectSetStateCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "phase", RBAC_PERM_COMMAND_GOBJECT_SET_PHASE, false, &HandleGameObjectSetPhaseCommand, "", NULL },
+ { "state", RBAC_PERM_COMMAND_GOBJECT_SET_STATE, false, &HandleGameObjectSetStateCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand gobjectCommandTable[] =
{
- { "activate", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectActivateCommand, "", NULL },
- { "delete", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectDeleteCommand, "", NULL },
- { "info", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectInfoCommand, "", NULL },
- { "move", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectMoveCommand, "", NULL },
- { "near", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectNearCommand, "", NULL },
- { "target", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectTargetCommand, "", NULL },
- { "turn", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGameObjectTurnCommand, "", NULL },
- { "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", gobjectAddCommandTable },
- { "set", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", gobjectSetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "activate", RBAC_PERM_COMMAND_GOBJECT_ACTIVATE, false, &HandleGameObjectActivateCommand, "", NULL },
+ { "delete", RBAC_PERM_COMMAND_GOBJECT_DELETE, false, &HandleGameObjectDeleteCommand, "", NULL },
+ { "info", RBAC_PERM_COMMAND_GOBJECT_INFO, false, &HandleGameObjectInfoCommand, "", NULL },
+ { "move", RBAC_PERM_COMMAND_GOBJECT_MOVE, false, &HandleGameObjectMoveCommand, "", NULL },
+ { "near", RBAC_PERM_COMMAND_GOBJECT_NEAR, false, &HandleGameObjectNearCommand, "", NULL },
+ { "target", RBAC_PERM_COMMAND_GOBJECT_TARGET, false, &HandleGameObjectTargetCommand, "", NULL },
+ { "turn", RBAC_PERM_COMMAND_GOBJECT_TURN, false, &HandleGameObjectTurnCommand, "", NULL },
+ { "add", RBAC_PERM_COMMAND_GOBJECT_ADD, false, NULL, "", gobjectAddCommandTable },
+ { "set", RBAC_PERM_COMMAND_GOBJECT_SET, false, NULL, "", gobjectSetCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "gobject", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", gobjectCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "gobject", RBAC_PERM_COMMAND_GOBJECT, false, NULL, "", gobjectCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp
index 048930fc7bd..390594ac57b 100644
--- a/src/server/scripts/Commands/cs_guild.cpp
+++ b/src/server/scripts/Commands/cs_guild.cpp
@@ -39,18 +39,18 @@ public:
{
static ChatCommand guildCommandTable[] =
{
- { "create", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGuildCreateCommand, "", NULL },
- { "delete", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGuildDeleteCommand, "", NULL },
- { "invite", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGuildInviteCommand, "", NULL },
- { "uninvite", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGuildUninviteCommand, "", NULL },
- { "rank", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGuildRankCommand, "", NULL },
- { "rename", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGuildRenameCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "create", RBAC_PERM_COMMAND_GUILD_CREATE, true, &HandleGuildCreateCommand, "", NULL },
+ { "delete", RBAC_PERM_COMMAND_GUILD_DELETE, true, &HandleGuildDeleteCommand, "", NULL },
+ { "invite", RBAC_PERM_COMMAND_GUILD_INVITE, true, &HandleGuildInviteCommand, "", NULL },
+ { "uninvite", RBAC_PERM_COMMAND_GUILD_UNINVITE, true, &HandleGuildUninviteCommand, "", NULL },
+ { "rank", RBAC_PERM_COMMAND_GUILD_RANK, true, &HandleGuildRankCommand, "", NULL },
+ { "rename", RBAC_PERM_COMMAND_GUILD_RENAME, true, &HandleGuildRenameCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "guild", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", guildCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "guild", RBAC_PERM_COMMAND_GUILD, true, NULL, "", guildCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_honor.cpp b/src/server/scripts/Commands/cs_honor.cpp
index 4707e3d65c3..cd8e2630a67 100644
--- a/src/server/scripts/Commands/cs_honor.cpp
+++ b/src/server/scripts/Commands/cs_honor.cpp
@@ -37,22 +37,22 @@ public:
{
static ChatCommand honorAddCommandTable[] =
{
- { "kill", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleHonorAddKillCommand, "", NULL },
- { "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleHonorAddCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "kill", RBAC_PERM_COMMAND_HONOR_ADD_KILL, false, &HandleHonorAddKillCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_HONOR_ADD, false, &HandleHonorAddCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand honorCommandTable[] =
{
- { "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", honorAddCommandTable },
- { "update", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleHonorUpdateCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", RBAC_PERM_COMMAND_HONOR_ADD, false, NULL, "", honorAddCommandTable },
+ { "update", RBAC_PERM_COMMAND_HONOR_UPDATE, false, &HandleHonorUpdateCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "honor", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", honorCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "honor", RBAC_PERM_COMMAND_HONOR, false, NULL, "", honorCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp
index 65dfa46ebd7..b597caf0ae0 100644
--- a/src/server/scripts/Commands/cs_instance.cpp
+++ b/src/server/scripts/Commands/cs_instance.cpp
@@ -39,17 +39,17 @@ public:
{
static ChatCommand instanceCommandTable[] =
{
- { "listbinds", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleInstanceListBindsCommand, "", NULL },
- { "unbind", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleInstanceUnbindCommand, "", NULL },
- { "stats", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleInstanceStatsCommand, "", NULL },
- { "savedata", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleInstanceSaveDataCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "listbinds", RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, false, &HandleInstanceListBindsCommand, "", NULL },
+ { "unbind", RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleInstanceUnbindCommand, "", NULL },
+ { "stats", RBAC_PERM_COMMAND_INSTANCE_STATS, true, &HandleInstanceStatsCommand, "", NULL },
+ { "savedata", RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, false, &HandleInstanceSaveDataCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "instance", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", instanceCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "instance", RBAC_PERM_COMMAND_INSTANCE, true, NULL, "", instanceCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp
index c26000c27df..90ab4eff86a 100644
--- a/src/server/scripts/Commands/cs_learn.cpp
+++ b/src/server/scripts/Commands/cs_learn.cpp
@@ -40,36 +40,36 @@ public:
{
static ChatCommand learnAllMyCommandTable[] =
{
- { "class", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLearnAllMyClassCommand, "", NULL },
- { "pettalents", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLearnAllMyPetTalentsCommand, "", NULL },
- { "spells", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLearnAllMySpellsCommand, "", NULL },
- { "talents", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLearnAllMyTalentsCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "class", RBAC_PERM_COMMAND_LEARN_ALL_MY_CLASS, false, &HandleLearnAllMyClassCommand, "", NULL },
+ { "pettalents", RBAC_PERM_COMMAND_LEARN_ALL_MY_PETTALENTS, false, &HandleLearnAllMyPetTalentsCommand, "", NULL },
+ { "spells", RBAC_PERM_COMMAND_LEARN_ALL_MY_SPELLS, false, &HandleLearnAllMySpellsCommand, "", NULL },
+ { "talents", RBAC_PERM_COMMAND_LEARN_ALL_MY_TALENTS, false, &HandleLearnAllMyTalentsCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand learnAllCommandTable[] =
{
- { "my", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", learnAllMyCommandTable },
- { "gm", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleLearnAllGMCommand, "", NULL },
- { "crafts", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleLearnAllCraftsCommand, "", NULL },
- { "default", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleLearnAllDefaultCommand, "", NULL },
- { "lang", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleLearnAllLangCommand, "", NULL },
- { "recipes", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleLearnAllRecipesCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "my", RBAC_PERM_COMMAND_LEARN_ALL_MY, false, NULL, "", learnAllMyCommandTable },
+ { "gm", RBAC_PERM_COMMAND_LEARN_ALL_GM, false, &HandleLearnAllGMCommand, "", NULL },
+ { "crafts", RBAC_PERM_COMMAND_LEARN_ALL_CRAFTS, false, &HandleLearnAllCraftsCommand, "", NULL },
+ { "default", RBAC_PERM_COMMAND_LEARN_ALL_DEFAULT, false, &HandleLearnAllDefaultCommand, "", NULL },
+ { "lang", RBAC_PERM_COMMAND_LEARN_ALL_LANG, false, &HandleLearnAllLangCommand, "", NULL },
+ { "recipes", RBAC_PERM_COMMAND_LEARN_ALL_RECIPES, false, &HandleLearnAllRecipesCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand learnCommandTable[] =
{
- { "all", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", learnAllCommandTable },
- { "", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLearnCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "all", RBAC_PERM_COMMAND_LEARN_ALL, false, NULL, "", learnAllCommandTable },
+ { "", RBAC_PERM_COMMAND_LEARN, false, &HandleLearnCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "learn", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", learnCommandTable },
- { "unlearn", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleUnLearnCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "learn", RBAC_PERM_COMMAND_LEARN, false, NULL, "", learnCommandTable },
+ { "unlearn", RBAC_PERM_COMMAND_UNLEARN, false, &HandleUnLearnCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -339,8 +339,12 @@ public:
return true;
}
- static bool HandleLearnAllCraftsCommand(ChatHandler* handler, char const* /*args*/)
+ static bool HandleLearnAllCraftsCommand(ChatHandler* handler, char const* args)
{
+ Player* target;
+ if (!handler->extractPlayerTarget((char*)args, &target))
+ return false;
+
for (uint32 i = 0; i < sSkillLineStore.GetNumRows(); ++i)
{
SkillLineEntry const* skillInfo = sSkillLineStore.LookupEntry(i);
@@ -350,7 +354,7 @@ public:
if ((skillInfo->categoryId == SKILL_CATEGORY_PROFESSION || skillInfo->categoryId == SKILL_CATEGORY_SECONDARY) &&
skillInfo->canLink) // only prof. with recipes have
{
- HandleLearnSkillRecipesHelper(handler->GetSession()->GetPlayer(), skillInfo->id);
+ HandleLearnSkillRecipesHelper(target, skillInfo->id);
}
}
diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp
index c11a00c7bba..76d9fe50de1 100644
--- a/src/server/scripts/Commands/cs_lfg.cpp
+++ b/src/server/scripts/Commands/cs_lfg.cpp
@@ -45,18 +45,18 @@ public:
{
static ChatCommand lfgCommandTable[] =
{
- { "player", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleLfgPlayerInfoCommand, "", NULL },
- { "group", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleLfgGroupInfoCommand, "", NULL },
- { "queue", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleLfgQueueInfoCommand, "", NULL },
- { "clean", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLfgCleanCommand, "", NULL },
- { "options", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLfgOptionsCommand, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "player", RBAC_PERM_COMMAND_LFG_PLAYER, false, &HandleLfgPlayerInfoCommand, "", NULL },
+ { "group", RBAC_PERM_COMMAND_LFG_GROUP, false, &HandleLfgGroupInfoCommand, "", NULL },
+ { "queue", RBAC_PERM_COMMAND_LFG_QUEUE, false, &HandleLfgQueueInfoCommand, "", NULL },
+ { "clean", RBAC_PERM_COMMAND_LFG_CLEAN, false, &HandleLfgCleanCommand, "", NULL },
+ { "options", RBAC_PERM_COMMAND_LFG_OPTIONS, false, &HandleLfgOptionsCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "lfg", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", lfgCommandTable },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "lfg", RBAC_PERM_COMMAND_LFG, false, NULL, "", lfgCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp
index dbf01f6bfbb..4921b82b47e 100644
--- a/src/server/scripts/Commands/cs_list.cpp
+++ b/src/server/scripts/Commands/cs_list.cpp
@@ -40,17 +40,17 @@ public:
{
static ChatCommand listCommandTable[] =
{
- { "creature", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleListCreatureCommand, "", NULL },
- { "item", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleListItemCommand, "", NULL },
- { "object", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleListObjectCommand, "", NULL },
- { "auras", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleListAurasCommand, "", NULL },
- { "mail", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleListMailCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "creature", RBAC_PERM_COMMAND_LIST_CREATURE, true, &HandleListCreatureCommand, "", NULL },
+ { "item", RBAC_PERM_COMMAND_LIST_ITEM, true, &HandleListItemCommand, "", NULL },
+ { "object", RBAC_PERM_COMMAND_LIST_OBJECT, true, &HandleListObjectCommand, "", NULL },
+ { "auras", RBAC_PERM_COMMAND_LIST_AURAS, false, &HandleListAurasCommand, "", NULL },
+ { "mail", RBAC_PERM_COMMAND_LIST_MAIL, true, &HandleListMailCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "list", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", listCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "list", RBAC_PERM_COMMAND_LIST,true, NULL, "", listCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index ca6d883c338..736b8085eeb 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -41,43 +41,43 @@ public:
{
static ChatCommand lookupPlayerCommandTable[] =
{
- { "ip", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleLookupPlayerIpCommand, "", NULL },
- { "account", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleLookupPlayerAccountCommand, "", NULL },
- { "email", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleLookupPlayerEmailCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "ip", RBAC_PERM_COMMAND_LOOKUP_PLAYER_IP, true, &HandleLookupPlayerIpCommand, "", NULL },
+ { "account", RBAC_PERM_COMMAND_LOOKUP_PLAYER_ACCOUNT, true, &HandleLookupPlayerAccountCommand, "", NULL },
+ { "email", RBAC_PERM_COMMAND_LOOKUP_PLAYER_EMAIL, true, &HandleLookupPlayerEmailCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand lookupSpellCommandTable[] =
{
- { "id", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupSpellIdCommand, "", NULL },
- { "", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupSpellCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "id", RBAC_PERM_COMMAND_LOOKUP_SPELL_ID, true, &HandleLookupSpellIdCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_LOOKUP_SPELL, true, &HandleLookupSpellCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand lookupCommandTable[] =
{
- { "area", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleLookupAreaCommand, "", NULL },
- { "creature", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupCreatureCommand, "", NULL },
- { "event", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleLookupEventCommand, "", NULL },
- { "faction", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupFactionCommand, "", NULL },
- { "item", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupItemCommand, "", NULL },
- { "itemset", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupItemSetCommand, "", NULL },
- { "object", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupObjectCommand, "", NULL },
- { "quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupQuestCommand, "", NULL },
- { "player", RBAC_PERM_GAMEMASTER_COMMANDS, true, NULL, "", lookupPlayerCommandTable },
- { "skill", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupSkillCommand, "", NULL },
- { "spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", lookupSpellCommandTable },
- { "taxinode", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupTaxiNodeCommand, "", NULL },
- { "tele", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleLookupTeleCommand, "", NULL },
- { "title", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleLookupTitleCommand, "", NULL },
- { "map", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleLookupMapCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "area", RBAC_PERM_COMMAND_LOOKUP_AREA, true, &HandleLookupAreaCommand, "", NULL },
+ { "creature", RBAC_PERM_COMMAND_LOOKUP_CREATURE, true, &HandleLookupCreatureCommand, "", NULL },
+ { "event", RBAC_PERM_COMMAND_LOOKUP_EVENT, true, &HandleLookupEventCommand, "", NULL },
+ { "faction", RBAC_PERM_COMMAND_LOOKUP_FACTION, true, &HandleLookupFactionCommand, "", NULL },
+ { "item", RBAC_PERM_COMMAND_LOOKUP_ITEM, true, &HandleLookupItemCommand, "", NULL },
+ { "itemset", RBAC_PERM_COMMAND_LOOKUP_ITEMSET, true, &HandleLookupItemSetCommand, "", NULL },
+ { "object", RBAC_PERM_COMMAND_LOOKUP_OBJECT, true, &HandleLookupObjectCommand, "", NULL },
+ { "quest", RBAC_PERM_COMMAND_LOOKUP_QUEST, true, &HandleLookupQuestCommand, "", NULL },
+ { "player", RBAC_PERM_COMMAND_LOOKUP_PLAYER, true, NULL, "", lookupPlayerCommandTable },
+ { "skill", RBAC_PERM_COMMAND_LOOKUP_SKILL, true, &HandleLookupSkillCommand, "", NULL },
+ { "spell", RBAC_PERM_COMMAND_LOOKUP_SPELL, true, NULL, "", lookupSpellCommandTable },
+ { "taxinode", RBAC_PERM_COMMAND_LOOKUP_TAXINODE, true, &HandleLookupTaxiNodeCommand, "", NULL },
+ { "tele", RBAC_PERM_COMMAND_LOOKUP_TELE, true, &HandleLookupTeleCommand, "", NULL },
+ { "title", RBAC_PERM_COMMAND_LOOKUP_TITLE, true, &HandleLookupTitleCommand, "", NULL },
+ { "map", RBAC_PERM_COMMAND_LOOKUP_MAP, true, &HandleLookupMapCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "lookup", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", lookupCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "lookup", RBAC_PERM_COMMAND_LOOKUP, true, NULL, "", lookupCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_message.cpp b/src/server/scripts/Commands/cs_message.cpp
index 334968037c3..8c06d87bd7c 100644
--- a/src/server/scripts/Commands/cs_message.cpp
+++ b/src/server/scripts/Commands/cs_message.cpp
@@ -38,25 +38,25 @@ public:
{
static ChatCommand channelSetCommandTable[] =
{
- { "ownership", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleChannelSetOwnership, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "ownership", RBAC_PERM_COMMAND_CHANNEL_SET_OWNERSHIP, false, &HandleChannelSetOwnership, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand channelCommandTable[] =
{
- { "set", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", channelSetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "set", RBAC_PERM_COMMAND_CHANNEL_SET, true, NULL, "", channelSetCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "channel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", channelCommandTable },
- { "nameannounce", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleNameAnnounceCommand, "", NULL },
- { "gmnameannounce", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMNameAnnounceCommand, "", NULL },
- { "announce", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleAnnounceCommand, "", NULL },
- { "gmannounce", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMAnnounceCommand, "", NULL },
- { "notify", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleNotifyCommand, "", NULL },
- { "gmnotify", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMNotifyCommand, "", NULL },
- { "whispers", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleWhispersCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "channel", RBAC_PERM_COMMAND_CHANNEL, true, NULL, "", channelCommandTable },
+ { "nameannounce", RBAC_PERM_COMMAND_NAMEANNOUNCE, true, &HandleNameAnnounceCommand, "", NULL },
+ { "gmnameannounce", RBAC_PERM_COMMAND_GMNAMEANNOUNCE, true, &HandleGMNameAnnounceCommand, "", NULL },
+ { "announce", RBAC_PERM_COMMAND_ANNOUNCE, true, &HandleAnnounceCommand, "", NULL },
+ { "gmannounce", RBAC_PERM_COMMAND_GMANNOUNCE, true, &HandleGMAnnounceCommand, "", NULL },
+ { "notify", RBAC_PERM_COMMAND_NOTIFY, true, &HandleNotifyCommand, "", NULL },
+ { "gmnotify", RBAC_PERM_COMMAND_GMNOTIFY, true, &HandleGMNotifyCommand, "", NULL },
+ { "whispers", RBAC_PERM_COMMAND_WHISPERS, false, &HandleWhispersCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 1c867294e3a..486816d4de8 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1519,20 +1519,21 @@ public:
* ** Muted: (Time, Reason, By) - IV. LANG_PINFO_MUTED (if muted)
* * Account: %s (id: %u), GM Level: %u - V. LANG_PINFO_ACC_ACCOUNT
* * Last Login: %u (Failed Logins: %u) - VI. LANG_PINFO_ACC_LASTLOGIN
- * * Uses OS: %s - Latency: %u ms - Email %s - VII. LANG_PINFO_ACC_OS
- * * Last IP: %u (Locked: %s) - VIII. LANG_PINFO_ACC_IP
- * * Level: %u (%u/%u XP (%u XP left) - IX. LANG_PINFO_CHR_LEVEL
- * * Race: %s %s, Class %s - X. LANG_PINFO_CHR_RACE
- * * Alive ?: %s - XI. LANG_PINFO_CHR_ALIVE
- * * Phase: %s - XII. LANG_PINFO_CHR_PHASE (if not GM)
- * * Money: %ug%us%uc - XIII. LANG_PINFO_CHR_MONEY
- * * Map: %s, Area: %s - XIV. LANG_PINFO_CHR_MAP
- * * Guild: %s (Id: %u) - XV. LANG_PINFO_CHR_GUILD (if in guild)
- * ** Rank: %s - XVI. LANG_PINFO_CHR_GUILD_RANK (if in guild)
- * ** Note: %s - XVII. LANG_PINFO_CHR_GUILD_NOTE (if in guild and has note)
- * ** O. Note: %s - XVIII.LANG_PINFO_CHR_GUILD_ONOTE (if in guild and has officer note)
- * * Played time: %s - XIX. LANG_PINFO_CHR_PLAYEDTIME
- * * Mails: %u Read/%u Total - XX. LANG_PINFO_CHR_MAILS (if has mails)
+ * * Uses OS: %s - Latency: %u ms - VII. LANG_PINFO_ACC_OS
+ * * Registration Email: %s - Email: %s - VIII. LANG_PINFO_ACC_REGMAILS
+ * * Last IP: %u (Locked: %s) - IX. LANG_PINFO_ACC_IP
+ * * Level: %u (%u/%u XP (%u XP left) - X. LANG_PINFO_CHR_LEVEL
+ * * Race: %s %s, Class %s - XI. LANG_PINFO_CHR_RACE
+ * * Alive ?: %s - XII. LANG_PINFO_CHR_ALIVE
+ * * Phase: %s - XIII. LANG_PINFO_CHR_PHASE (if not GM)
+ * * Money: %ug%us%uc - XIV. LANG_PINFO_CHR_MONEY
+ * * Map: %s, Area: %s - XV. LANG_PINFO_CHR_MAP
+ * * Guild: %s (Id: %u) - XVI. LANG_PINFO_CHR_GUILD (if in guild)
+ * ** Rank: %s - XVII. LANG_PINFO_CHR_GUILD_RANK (if in guild)
+ * ** Note: %s - XVIII.LANG_PINFO_CHR_GUILD_NOTE (if in guild and has note)
+ * ** O. Note: %s - XVIX. LANG_PINFO_CHR_GUILD_ONOTE (if in guild and has officer note)
+ * * Played time: %s - XX. LANG_PINFO_CHR_PLAYEDTIME
+ * * Mails: %u Read/%u Total - XXI. LANG_PINFO_CHR_MAILS (if has mails)
*
* Not all of them can be moved to the top. These should
* place the most important ones to the head, though.
@@ -1545,6 +1546,7 @@ public:
uint32 accId = 0;
uint32 lowguid = GUID_LOPART(targetGuid);
std::string eMail = handler->GetTrinityString(LANG_ERROR);
+ std::string regMail = handler->GetTrinityString(LANG_ERROR);
uint32 security = 0;
std::string lastIp = handler->GetTrinityString(LANG_ERROR);
uint8 locked = 0;
@@ -1665,8 +1667,9 @@ public:
(!handler->GetSession() || handler->GetSession()->GetSecurity() >= AccountTypes(security)))
{
eMail = fields[2].GetString();
- lastIp = fields[3].GetString();
- lastLogin = fields[4].GetString();
+ regMail = fields[3].GetString();
+ lastIp = fields[4].GetString();
+ lastLogin = fields[5].GetString();
uint32 ip = inet_addr(lastIp.c_str());
EndianConvertReverse(ip);
@@ -1688,12 +1691,12 @@ public:
lastIp = "Unauthorized";
lastLogin = "Unauthorized";
}
- muteTime = fields[5].GetUInt64();
- muteReason = fields[6].GetString();
- muteBy = fields[7].GetString();
- failedLogins = fields[8].GetUInt32();
- locked = fields[9].GetUInt8();
- OS = fields[10].GetString();
+ muteTime = fields[6].GetUInt64();
+ muteReason = fields[7].GetString();
+ muteBy = fields[8].GetString();
+ failedLogins = fields[9].GetUInt32();
+ locked = fields[10].GetUInt8();
+ OS = fields[11].GetString();
}
// Creates a chat link to the character. Returns nameLink
@@ -1782,8 +1785,11 @@ public:
// Output VI. LANG_PINFO_ACC_LASTLOGIN
handler->PSendSysMessage(LANG_PINFO_ACC_LASTLOGIN, lastLogin.c_str(), failedLogins);
- // Output VIII. LANG_PINFO_ACC_OS
- handler->PSendSysMessage(LANG_PINFO_ACC_OS, OS.c_str(), latency, eMail.c_str());
+ // Output VII. LANG_PINFO_ACC_OS
+ handler->PSendSysMessage(LANG_PINFO_ACC_OS, OS.c_str(), latency);
+
+ // Output VIII. LANG_PINFO_ACC_REGMAILS
+ handler->PSendSysMessage(LANG_PINFO_ACC_REGMAILS, regMail.c_str(), eMail.c_str());
// Output IX. LANG_PINFO_ACC_IP
handler->PSendSysMessage(LANG_PINFO_ACC_IP, lastIp.c_str(), locked ? "Yes" : "No");
@@ -1827,7 +1833,7 @@ public:
if (target)
handler->PSendSysMessage(LANG_PINFO_CHR_MAP, map->name, (!zoneName.empty() ? zoneName.c_str() : "<Unknown>"), (!areaName.empty() ? areaName.c_str() : "<Unknown>"));
- // Output XVII. - XX. if they are not empty
+ // Output XVII. - XVIX. if they are not empty
if (!guildName.empty())
{
handler->PSendSysMessage(LANG_PINFO_CHR_GUILD, guildName.c_str(), guildId);
@@ -1838,7 +1844,7 @@ public:
handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_ONOTE, officeNote.c_str());
}
- // Output XXI. LANG_PINFO_CHR_PLAYEDTIME
+ // Output XX. LANG_PINFO_CHR_PLAYEDTIME
handler->PSendSysMessage(LANG_PINFO_CHR_PLAYEDTIME, (secsToTimeString(totalPlayerTime, true, true)).c_str());
// Mail Data - an own query, because it may or may not be useful.
@@ -1860,7 +1866,7 @@ public:
// ... we have to convert it from Char to int. We can use totalmail as it is
rmailint = atol(readmail.c_str());
- // Output XXII. LANG_INFO_CHR_MAILS if at least one mail is given
+ // Output XXI. LANG_INFO_CHR_MAILS if at least one mail is given
if (totalmail >= 1)
handler->PSendSysMessage(LANG_PINFO_CHR_MAILS, rmailint, totalmail);
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
index 6baf5dc6d93..c45d3704d5d 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
@@ -21,7 +21,6 @@
DoorData const doorData[] =
{
- { GO_BJARNGRIM_DOOR, DATA_BJARNGRIM, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_VOLKHAN_DOOR, DATA_VOLKHAN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_IONAR_DOOR, DATA_IONAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_LOKEN_DOOR, DATA_LOKEN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
@@ -73,7 +72,6 @@ class instance_halls_of_lightning : public InstanceMapScript
{
switch (go->GetEntry())
{
- case GO_BJARNGRIM_DOOR:
case GO_VOLKHAN_DOOR:
case GO_IONAR_DOOR:
case GO_LOKEN_DOOR:
@@ -91,7 +89,6 @@ class instance_halls_of_lightning : public InstanceMapScript
{
switch (go->GetEntry())
{
- case GO_BJARNGRIM_DOOR:
case GO_VOLKHAN_DOOR:
case GO_IONAR_DOOR:
case GO_LOKEN_DOOR:
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
index e1c9dec8540..b6a4375d0eb 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
@@ -56,11 +56,6 @@ class boss_krystallus : public CreatureScript
public:
boss_krystallus() : CreatureScript("boss_krystallus") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_krystallusAI(creature);
- }
-
struct boss_krystallusAI : public ScriptedAI
{
boss_krystallusAI(Creature* creature) : ScriptedAI(creature)
@@ -89,14 +84,14 @@ public:
uiShatterTimer = 0;
if (instance)
- instance->SetData(DATA_KRYSTALLUS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_KRYSTALLUS, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
Talk(SAY_AGGRO);
if (instance)
- instance->SetData(DATA_KRYSTALLUS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_KRYSTALLUS, IN_PROGRESS);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -149,7 +144,7 @@ public:
Talk(SAY_DEATH);
if (instance)
- instance->SetData(DATA_KRYSTALLUS_EVENT, DONE);
+ instance->SetBossState(DATA_KRYSTALLUS, DONE);
}
void KilledUnit(Unit* victim) OVERRIDE
@@ -182,6 +177,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return GetHallsOfStoneAI<boss_krystallusAI>(creature);
+ }
};
class spell_krystallus_shatter : public SpellScriptLoader
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
index 5b34db663d5..f4ea3ff556c 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
@@ -56,11 +56,6 @@ class boss_maiden_of_grief : public CreatureScript
public:
boss_maiden_of_grief() : CreatureScript("boss_maiden_of_grief") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_maiden_of_griefAI(creature);
- }
-
struct boss_maiden_of_griefAI : public ScriptedAI
{
boss_maiden_of_griefAI(Creature* creature) : ScriptedAI(creature)
@@ -84,7 +79,7 @@ public:
if (instance)
{
- instance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_MAIDEN_OF_GRIEF, NOT_STARTED);
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT);
}
}
@@ -95,14 +90,7 @@ public:
if (instance)
{
- if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_MAIDEN_DOOR)))
- if (pDoor->GetGoState() == GO_STATE_READY)
- {
- EnterEvadeMode();
- return;
- }
-
- instance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_MAIDEN_OF_GRIEF, IN_PROGRESS);
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT);
}
}
@@ -158,7 +146,7 @@ public:
Talk(SAY_DEATH);
if (instance)
- instance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, DONE);
+ instance->SetBossState(DATA_MAIDEN_OF_GRIEF, DONE);
}
void KilledUnit(Unit* victim) OVERRIDE
@@ -170,6 +158,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return GetHallsOfStoneAI<boss_maiden_of_griefAI>(creature);
+ }
};
void AddSC_boss_maiden_of_grief()
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
index 185d8e5fd0c..618628adf88 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
@@ -15,310 +15,265 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* Script Data Start
-SDName: Boss sjonnir
-SDAuthor: LordVanMartin
-SD%Complete:
-SDComment:
-SDCategory:
-Script Data End */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "halls_of_stone.h"
enum Spells
{
- SPELL_LIGHTING_RING = 51849, //Periodic Trigger (interval 2s) spell = 50841
- H_SPELL_LIGHTING_RING = 59861, //Periodic Trigger (interval 2s) spell = 59849
- SPELL_LIGHTING_RING_1 = 50840, //Periodic Trigger (interval 2s) spell = 50841
- H_SPELL_LIGHTING_RING_1 = 59848, //Periodic Trigger (interval 2s) spell = 59849
- SPELL_STATIC_CHARGE = 50834, //Periodic Trigger 2s interval, spell =50835
- H_SPELL_STATIC_CHARGE = 59846, //Periodic Trigger 2s interval, spell =50847
- SPELL_CHAIN_LIGHTING = 50830,
- H_SPELL_CHAIN_LIGHTING = 59844,
- SPELL_LIGHTING_SHIELD = 50831,
- H_SPELL_LIGHTING_SHIELD = 59845,
- SPELL_FRENZY = 28747
+ SPELL_LIGHTING_RING = 51849, // Periodic Trigger (interval 2s) spell = 50841
+ SPELL_LIGHTING_RING_1 = 50840, // Periodic Trigger (interval 2s) spell = 50841
+ SPELL_STATIC_CHARGE = 50834, // Periodic Trigger 2s interval, spell =50835
+ SPELL_CHAIN_LIGHTING = 50830,
+ SPELL_LIGHTING_SHIELD = 50831,
+ SPELL_FRENZY = 28747
};
enum Yells
{
- SAY_AGGRO = 0,
- SAY_SLAY = 1,
- SAY_DEATH = 2
+ SAY_AGGRO = 0,
+ SAY_SLAY = 1,
+ SAY_DEATH = 2
};
-#define EMOTE_GENERIC_FRENZY -1000002
-
enum SjonnirCreatures
{
- CREATURE_FORGED_IRON_TROGG = 27979,
- CREATURE_MALFORMED_OOZE = 27981,
- CREATURE_FORGED_IRON_DWARF = 27982,
- CREATURE_IRON_SLUDGE = 28165
+ NPC_FORGED_IRON_TROGG = 27979,
+ NPC_MALFORMED_OOZE = 27981,
+ NPC_FORGED_IRON_DWARF = 27982,
+ NPC_IRON_SLUDGE = 28165,
+ NPC_EARTHEN_DWARF = 27980
};
enum Misc
{
- DATA_TIME_BEFORE_OOZE = 150000, // 2min 30 secs
- ACTION_OOZE_DEAD = 1,
- DATA_ABUSE_THE_OOZE = 2
+ ACTION_OOZE_DEAD = 1,
+ DATA_ABUSE_THE_OOZE = 2
};
-struct Locations
+enum Events
{
- float x, y, z;
+ EVENT_CHAIN_LIGHTNING = 1,
+ EVENT_LIGHTNING_SHIELD,
+ EVENT_STATIC_CHARGE,
+ EVENT_LIGHTNING_RING,
+ EVENT_SUMMON,
+ EVENT_FRENZY,
};
-static Locations PipeLocations[] =
+Position const PipeLocations[] =
{
- {1295.44f, 734.07f, 200.3f}, //left
- {1297.7f, 595.6f, 199.9f} //right
+ { 1295.44f, 734.07f, 200.3f, 0.0f }, // left
+ { 1297.7f, 595.6f, 199.9f, 0.0f } // right
};
-static Locations CenterPoint = {1295.21f, 667.157f, 189.691f};
+Position const CenterPoint = { 1295.21f, 667.157f, 189.691f, 0.0f };
class boss_sjonnir : public CreatureScript
{
-public:
- boss_sjonnir() : CreatureScript("boss_sjonnir") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_sjonnirAI(creature);
- }
-
- struct boss_sjonnirAI : public ScriptedAI
- {
- boss_sjonnirAI(Creature* creature) : ScriptedAI(creature), lSummons(me)
- {
- instance = creature->GetInstanceScript();
- }
-
- bool bIsFrenzy;
-
- uint32 uiChainLightningTimer;
- uint32 uiLightningShieldTimer;
- uint32 uiStaticChargeTimer;
- uint32 uiLightningRingTimer;
- uint32 uiSummonTimer;
- uint32 uiFrenzyTimer;
- uint32 uiEncounterTimer;
- uint8 abuseTheOoze;
-
- SummonList lSummons;
-
- InstanceScript* instance;
+ public:
+ boss_sjonnir() : CreatureScript("boss_sjonnir") { }
- void Reset() OVERRIDE
+ struct boss_sjonnirAI : public BossAI
{
- bIsFrenzy = false;
-
- uiEncounterTimer = 0;
- uiChainLightningTimer = urand(3000, 8000);
- uiLightningShieldTimer = urand(20000, 25000);
- uiStaticChargeTimer = urand(20000, 25000);
- uiLightningRingTimer = urand(30000, 35000);
- uiSummonTimer = 5000;
- uiFrenzyTimer = 300000; //5 minutes
- abuseTheOoze = 0;
+ boss_sjonnirAI(Creature* creature) : BossAI(creature, DATA_SJONNIR) { }
- lSummons.DespawnAll();
+ void Reset() OVERRIDE
+ {
+ _Reset();
+ abuseTheOoze = 0;
+ }
- if (instance)
- instance->SetData(DATA_SJONNIR_EVENT, NOT_STARTED);
- }
+ void EnterCombat(Unit* who) OVERRIDE
+ {
+ if (!instance->CheckRequiredBosses(DATA_SJONNIR, who->ToPlayer()))
+ {
+ EnterEvadeMode();
+ return;
+ }
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- Talk(SAY_AGGRO);
+ _EnterCombat();
+ Talk(SAY_AGGRO);
- uiEncounterTimer = 0;
+ events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, urand(3000, 8000));
+ events.ScheduleEvent(EVENT_LIGHTNING_SHIELD, urand(20000, 25000));
+ events.ScheduleEvent(EVENT_STATIC_CHARGE, urand(20000, 25000));
+ events.ScheduleEvent(EVENT_LIGHTNING_RING, urand(30000, 35000));
+ events.ScheduleEvent(EVENT_SUMMON, 5000);
+ events.ScheduleEvent(EVENT_FRENZY, 300000);
+ }
- if (instance)
+ void JustSummoned(Creature* summon) OVERRIDE
{
- if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_SJONNIR_DOOR)))
- if (pDoor->GetGoState() == GO_STATE_READY)
- {
- EnterEvadeMode();
- return;
- }
-
- instance->SetData(DATA_SJONNIR_EVENT, IN_PROGRESS);
+ summon->GetMotionMaster()->MovePoint(0, CenterPoint);
+ /*if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ summon->AI()->AttackStart(target);*/
+ summons.Summon(summon);
}
- }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- if (uiChainLightningTimer <= diff)
+ void JustDied(Unit* /*killer*/) OVERRIDE
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_CHAIN_LIGHTING);
- uiChainLightningTimer = urand(10000, 15000);
- } else uiChainLightningTimer -= diff;
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
- if (uiLightningShieldTimer <= diff)
+ void KilledUnit(Unit* who) OVERRIDE
{
- DoCast(me, SPELL_LIGHTING_SHIELD);
- uiLightningShieldTimer -= diff;
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
- if (uiStaticChargeTimer <= diff)
+ void DoAction(int32 action) OVERRIDE
{
- DoCastVictim(SPELL_STATIC_CHARGE);
- uiStaticChargeTimer = urand(20000, 25000);
- } uiStaticChargeTimer -= diff;
+ if (action == ACTION_OOZE_DEAD)
+ ++abuseTheOoze;
+ }
- if (uiLightningRingTimer <= diff)
+ uint32 GetData(uint32 type) const OVERRIDE
{
- if (me->IsNonMeleeSpellCasted(false))
- me->InterruptNonMeleeSpells(false);
- DoCast(me, SPELL_LIGHTING_RING);
- uiLightningRingTimer = urand(30000, 35000);
- } else uiLightningRingTimer -= diff;
+ if (type == DATA_ABUSE_THE_OOZE)
+ return abuseTheOoze;
- if (uiSummonTimer <= diff)
- {
- uint32 uiSummonPipe = rand()%2;
- me->SummonCreature(uiEncounterTimer > DATA_TIME_BEFORE_OOZE ? CREATURE_MALFORMED_OOZE :
- RAND(CREATURE_FORGED_IRON_DWARF, CREATURE_FORGED_IRON_TROGG),
- PipeLocations[uiSummonPipe].x, PipeLocations[uiSummonPipe].y, PipeLocations[uiSummonPipe].z, 0.0f,
- TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
- uiSummonTimer = 20000;
- } else uiSummonTimer -= diff;
-
- if (!bIsFrenzy)
- {
- if (uiFrenzyTimer <= diff)
- {
- DoCast(me, SPELL_FRENZY);
- bIsFrenzy = true;
- }
- else uiFrenzyTimer -= diff;
+ return 0;
}
- uiEncounterTimer +=diff;
-
- DoMeleeAttackIfReady();
- }
-
- void JustSummoned(Creature* summon) OVERRIDE
- {
- summon->GetMotionMaster()->MovePoint(0, CenterPoint.x, CenterPoint.y, CenterPoint.z);
- /*if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- summon->AI()->AttackStart(target);*/
- lSummons.Summon(summon);
- }
+ void UpdateAI(uint32 diff) OVERRIDE
+ {
+ if (!UpdateVictim())
+ return;
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- Talk(SAY_DEATH);
- lSummons.DespawnAll();
+ events.Update(diff);
- if (instance)
- instance->SetData(DATA_SJONNIR_EVENT, DONE);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void KilledUnit(Unit* victim) OVERRIDE
- {
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_CHAIN_LIGHTNING:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ DoCast(target, SPELL_CHAIN_LIGHTING);
+ events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, urand(10000, 15000));
+ break;
+ case EVENT_LIGHTNING_SHIELD:
+ DoCast(me, SPELL_LIGHTING_SHIELD);
+ break;
+ case EVENT_STATIC_CHARGE:
+ DoCastVictim(SPELL_STATIC_CHARGE);
+ events.ScheduleEvent(EVENT_STATIC_CHARGE, urand(20000, 25000));
+ break;
+ case EVENT_LIGHTNING_RING:
+ DoCast(me, SPELL_LIGHTING_RING);
+ events.ScheduleEvent(EVENT_LIGHTNING_RING, urand(30000, 35000));
+ break;
+ case EVENT_SUMMON:
+ {
+ uint8 summonPipe = urand(0, 1);
+ if (HealthAbovePct(75))
+ me->SummonCreature(NPC_FORGED_IRON_DWARF, PipeLocations[summonPipe], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ else if (HealthAbovePct(50))
+ me->SummonCreature(NPC_FORGED_IRON_TROGG, PipeLocations[summonPipe], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ else if (HealthAbovePct(25))
+ me->SummonCreature(NPC_MALFORMED_OOZE, PipeLocations[summonPipe], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ else
+ me->SummonCreature(NPC_EARTHEN_DWARF, PipeLocations[summonPipe], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+
+ events.ScheduleEvent(EVENT_SUMMON, 20000);
+ break;
+ }
+ case EVENT_FRENZY:
+ /// @todo: add emote
+ DoCast(me, SPELL_FRENZY, true);
+ break;
+ default:
+ break;
+ }
+ }
- Talk(SAY_SLAY);
- }
+ DoMeleeAttackIfReady();
+ }
- void DoAction(int32 action) OVERRIDE
- {
- if (action == ACTION_OOZE_DEAD)
- ++abuseTheOoze;
- }
+ private:
+ uint8 abuseTheOoze;
+ };
- uint32 GetData(uint32 type) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- if (type == DATA_ABUSE_THE_OOZE)
- return abuseTheOoze;
-
- return 0;
+ return GetHallsOfStoneAI<boss_sjonnirAI>(creature);
}
- };
-
};
class npc_malformed_ooze : public CreatureScript
{
-public:
- npc_malformed_ooze() : CreatureScript("npc_malformed_ooze") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_malformed_oozeAI(creature);
- }
-
- struct npc_malformed_oozeAI : public ScriptedAI
- {
- npc_malformed_oozeAI(Creature* creature) : ScriptedAI(creature) {}
-
- uint32 uiMergeTimer;
+ public:
+ npc_malformed_ooze() : CreatureScript("npc_malformed_ooze") { }
- void Reset() OVERRIDE
+ struct npc_malformed_oozeAI : public ScriptedAI
{
- uiMergeTimer = 10000;
- }
+ npc_malformed_oozeAI(Creature* creature) : ScriptedAI(creature) { }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (uiMergeTimer <= diff)
+ void Reset() OVERRIDE
{
- if (Creature* temp = me->FindNearestCreature(CREATURE_MALFORMED_OOZE, 3.0f, true))
+ _mergeTimer = 10000;
+ }
+
+ void UpdateAI(uint32 diff) OVERRIDE
+ {
+ if (_mergeTimer <= diff)
{
- DoSpawnCreature(CREATURE_IRON_SLUDGE, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 20000);
- temp->DisappearAndDie();
- me->DisappearAndDie();
+ if (Creature* temp = me->FindNearestCreature(NPC_MALFORMED_OOZE, 3.0f, true))
+ {
+ DoSpawnCreature(NPC_IRON_SLUDGE, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 20000);
+ temp->DisappearAndDie();
+ me->DisappearAndDie();
+ }
+ _mergeTimer = 3000;
}
- uiMergeTimer = 3000;
- } else uiMergeTimer -= diff;
+ else
+ _mergeTimer -= diff;
- if (!UpdateVictim())
- return;
+ if (!UpdateVictim())
+ return;
- DoMeleeAttackIfReady();
- }
- };
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ uint32 _mergeTimer;
+ };
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return GetHallsOfStoneAI<npc_malformed_oozeAI>(creature);
+ }
};
class npc_iron_sludge : public CreatureScript
{
-public:
- npc_iron_sludge() : CreatureScript("npc_iron_sludge") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_iron_sludgeAI(creature);
- }
+ public:
+ npc_iron_sludge() : CreatureScript("npc_iron_sludge") { }
- struct npc_iron_sludgeAI : public ScriptedAI
- {
- npc_iron_sludgeAI(Creature* creature) : ScriptedAI(creature)
+ struct npc_iron_sludgeAI : public ScriptedAI
{
- instance = creature->GetInstanceScript();
- }
+ npc_iron_sludgeAI(Creature* creature) : ScriptedAI(creature)
+ {
+ instance = creature->GetInstanceScript();
+ }
- InstanceScript* instance;
+ InstanceScript* instance;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) OVERRIDE
+ {
+ if (Creature* sjonnir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SJONNIR)))
+ sjonnir->AI()->DoAction(ACTION_OOZE_DEAD);
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- if (instance)
- if (Creature* Sjonnir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SJONNIR)))
- Sjonnir->AI()->DoAction(ACTION_OOZE_DEAD);
+ return GetHallsOfStoneAI<npc_iron_sludgeAI>(creature);
}
- };
-
};
class achievement_abuse_the_ooze : public AchievementCriteriaScript
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
index 7b5c7f2e061..ff4a5d1b43a 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
@@ -137,11 +137,6 @@ class npc_tribuna_controller : public CreatureScript
public:
npc_tribuna_controller() : CreatureScript("npc_tribuna_controller") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_tribuna_controllerAI(creature);
- }
-
struct npc_tribuna_controllerAI : public ScriptedAI
{
npc_tribuna_controllerAI(Creature* creature) : ScriptedAI(creature)
@@ -263,6 +258,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return GetHallsOfStoneAI<npc_tribuna_controllerAI>(creature);
+ }
};
class npc_brann_hos : public CreatureScript
@@ -293,11 +292,6 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_brann_hosAI(creature);
- }
-
struct npc_brann_hosAI : public npc_escortAI
{
npc_brann_hosAI(Creature* creature) : npc_escortAI(creature)
@@ -331,7 +325,7 @@ public:
DespawnDwarf();
if (instance)
- instance->SetData(DATA_BRANN_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_BRANN_EVENT, NOT_STARTED);
}
}
@@ -446,9 +440,9 @@ public:
case 1:
if (instance)
{
- if (instance->GetData(DATA_BRANN_EVENT) != NOT_STARTED)
+ if (instance->GetBossState(DATA_BRANN_EVENT) != NOT_STARTED)
return;
- instance->SetData(DATA_BRANN_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_BRANN_EVENT, IN_PROGRESS);
}
bIsBattle = false;
Talk(SAY_ESCORT_START);
@@ -598,7 +592,7 @@ public:
case 29:
Talk(SAY_EVENT_END_02);
if (instance)
- instance->SetData(DATA_BRANN_EVENT, DONE);
+ instance->SetBossState(DATA_BRANN_EVENT, DONE);
me->CastSpell(me, SPELL_REWARD_ACHIEVEMENT, true);
JumpToNextStep(5500);
break;
@@ -735,6 +729,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return GetHallsOfStoneAI<npc_brann_hosAI>(creature);
+ }
};
class achievement_brann_spankin_new : public AchievementCriteriaScript
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h
index d00649e409b..b8af76bba20 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h
@@ -15,55 +15,61 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef DEF_HALLS_OF_STONE_H
-#define DEF_HALLS_OF_STONE_H
-enum Data
-{
- DATA_KRYSTALLUS_EVENT,
- DATA_MAIDEN_OF_GRIEF_EVENT,
- DATA_SJONNIR_EVENT,
- DATA_BRANN_EVENT
-};
+#ifndef HALLS_OF_STONE_H_
+#define HALLS_OF_STONE_H_
+
+#define HoSScriptName "instance_halls_of_stone"
+
+uint32 const EncounterCount = 4;
-enum Data64
+enum DataTypes
{
- DATA_KRYSTALLUS,
- DATA_MAIDEN_OF_GRIEF,
- DATA_SJONNIR,
- DATA_KADDRAK,
- DATA_MARNAK,
- DATA_ABEDNEUM,
- DATA_GO_TRIBUNAL_CONSOLE,
- DATA_GO_KADDRAK,
- DATA_GO_MARNAK,
- DATA_GO_ABEDNEUM,
- DATA_GO_SKY_FLOOR,
- DATA_SJONNIR_DOOR,
- DATA_MAIDEN_DOOR
+ // Encounter States/Boss GUIDs
+ DATA_KRYSTALLUS = 0,
+ DATA_MAIDEN_OF_GRIEF = 1,
+ DATA_BRANN_EVENT = 2,
+ DATA_SJONNIR = 3,
+
+ // Additional data
+ DATA_KADDRAK = 4,
+ DATA_MARNAK = 5,
+ DATA_ABEDNEUM = 6,
+ DATA_GO_TRIBUNAL_CONSOLE = 7,
+ DATA_GO_KADDRAK = 8,
+ DATA_GO_MARNAK = 9,
+ DATA_GO_ABEDNEUM = 10,
+ DATA_GO_SKY_FLOOR = 11
};
-enum CreaturesIds
+enum CreatureIds
{
- CREATURE_MAIDEN = 27975,
- CREATURE_KRYSTALLUS = 27977,
- CREATURE_SJONNIR = 27978,
- CREATURE_MARNAK = 30897,
- CREATURE_KADDRAK = 30898,
- CREATURE_ABEDNEUM = 30899,
- CREATURE_BRANN = 28070
+ NPC_MAIDEN = 27975,
+ NPC_KRYSTALLUS = 27977,
+ NPC_SJONNIR = 27978,
+ NPC_MARNAK = 30897,
+ NPC_KADDRAK = 30898,
+ NPC_ABEDNEUM = 30899,
+ NPC_BRANN = 28070
};
enum GameObjectIds
{
- GO_ABEDNEUM = 191669,
- GO_MARNAK = 192170,
- GO_KADDRAK = 192171,
- GO_MAIDEN_DOOR = 191292,
- GO_BRANN_DOOR = 191295,
- GO_SJONNIR_DOOR = 191296,
- GO_TRIBUNAL_CONSOLE = 193907,
- GO_TRIBUNAL_CHEST = 190586,
- GO_TRIBUNAL_CHEST_HERO = 193996
+ GO_ABEDNEUM = 191669,
+ GO_MARNAK = 191670,
+ GO_KADDRAK = 191671,
+ GO_MAIDEN_DOOR = 191292,
+ GO_BRANN_DOOR = 191295,
+ GO_SJONNIR_DOOR = 191296,
+ GO_TRIBUNAL_CONSOLE = 193907,
+ GO_TRIBUNAL_CHEST = 190586,
+ GO_TRIBUNAL_CHEST_HERO = 193996,
+ GO_TRIBUNAL_SKY_FLOOR = 191527
};
-#endif
+template<class AI>
+AI* GetHallsOfStoneAI(Creature* creature)
+{
+ return GetInstanceAI<AI>(creature, HoSScriptName);
+}
+
+#endif // HALLS_OF_STONE_H_
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
index d4b8750dbba..2a899d26d5a 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
@@ -17,256 +17,257 @@
#include "ScriptMgr.h"
#include "InstanceScript.h"
+#include "WorldSession.h"
#include "halls_of_stone.h"
+#include <Player.h>
-#define MAX_ENCOUNTER 4
-
-/* Halls of Stone encounters:
-0- Krystallus
-1- Maiden of Grief
-2- Escort Event
-3- Sjonnir The Ironshaper
-*/
+DoorData const doorData[] =
+{
+ { GO_SJONNIR_DOOR, DATA_BRANN_EVENT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+};
class instance_halls_of_stone : public InstanceMapScript
{
-public:
- instance_halls_of_stone() : InstanceMapScript("instance_halls_of_stone", 599) { }
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- {
- return new instance_halls_of_stone_InstanceMapScript(map);
- }
-
- struct instance_halls_of_stone_InstanceMapScript : public InstanceScript
- {
- instance_halls_of_stone_InstanceMapScript(Map* map) : InstanceScript(map) {}
-
- uint64 uiMaidenOfGrief;
- uint64 uiKrystallus;
- uint64 uiSjonnir;
-
- uint64 uiKaddrak;
- uint64 uiAbedneum;
- uint64 uiMarnak;
- uint64 uiBrann;
-
- uint64 uiMaidenOfGriefDoor;
- uint64 uiSjonnirDoor;
- uint64 uiBrannDoor;
- uint64 uiTribunalConsole;
- uint64 uiTribunalChest;
- uint64 uiTribunalSkyFloor;
- uint64 uiKaddrakGo;
- uint64 uiAbedneumGo;
- uint64 uiMarnakGo;
-
- uint32 m_auiEncounter[MAX_ENCOUNTER];
-
- std::string str_data;
-
- void Initialize() OVERRIDE
- {
- uiMaidenOfGrief = 0;
- uiKrystallus = 0;
- uiSjonnir = 0;
-
- uiKaddrak = 0;
- uiMarnak = 0;
- uiAbedneum = 0;
- uiBrann = 0;
-
- uiMaidenOfGriefDoor = 0;
- uiSjonnirDoor = 0;
- uiBrannDoor = 0;
- uiKaddrakGo = 0;
- uiMarnakGo = 0;
- uiAbedneumGo = 0;
- uiTribunalConsole = 0;
- uiTribunalChest = 0;
- uiTribunalSkyFloor = 0;
-
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- m_auiEncounter[i] = NOT_STARTED;
- }
+ public:
+ instance_halls_of_stone() : InstanceMapScript(HoSScriptName, 599) { }
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ struct instance_halls_of_stone_InstanceMapScript : public InstanceScript
{
- switch (creature->GetEntry())
+ instance_halls_of_stone_InstanceMapScript(Map* map) : InstanceScript(map)
{
- case CREATURE_MAIDEN: uiMaidenOfGrief = creature->GetGUID(); break;
- case CREATURE_KRYSTALLUS: uiKrystallus = creature->GetGUID(); break;
- case CREATURE_SJONNIR: uiSjonnir = creature->GetGUID(); break;
- case CREATURE_MARNAK: uiMarnak = creature->GetGUID(); break;
- case CREATURE_KADDRAK: uiKaddrak = creature->GetGUID(); break;
- case CREATURE_ABEDNEUM: uiAbedneum = creature->GetGUID(); break;
- case CREATURE_BRANN: uiBrann = creature->GetGUID(); break;
+ SetBossNumber(EncounterCount);
+ LoadDoorData(doorData);
+
+ KrystallusGUID = 0;
+ MaidenOfGriefGUID = 0;
+ SjonnirGUID = 0;
+
+ KaddrakGUID = 0;
+ AbedneumGUID = 0;
+ MarnakGUID = 0;
+ BrannGUID = 0;
+
+ TribunalConsoleGUID = 0;
+ TribunalChestGUID = 0;
+ TribunalSkyFloorGUID = 0;
+ KaddrakGoGUID = 0;
+ AbedneumGoGUID = 0;
+ MarnakGoGUID = 0;
}
- }
- void OnGameObjectCreate(GameObject* go) OVERRIDE
- {
- switch (go->GetEntry())
+ void OnCreatureCreate(Creature* creature) OVERRIDE
{
- case GO_ABEDNEUM:
- uiAbedneumGo = go->GetGUID();
- break;
- case GO_MARNAK:
- uiMarnakGo = go->GetGUID();
- break;
- case GO_KADDRAK:
- uiKaddrakGo = go->GetGUID();
- break;
- case GO_MAIDEN_DOOR:
- uiMaidenOfGriefDoor = go->GetGUID();
- if (m_auiEncounter[0] == DONE)
- go->SetGoState(GO_STATE_ACTIVE);
- else
- go->SetGoState(GO_STATE_READY);
- break;
- case GO_BRANN_DOOR:
- uiBrannDoor = go->GetGUID();
- if (m_auiEncounter[1] == DONE)
- go->SetGoState(GO_STATE_ACTIVE);
- else
- go->SetGoState(GO_STATE_READY);
- break;
- case GO_SJONNIR_DOOR:
- uiSjonnirDoor = go->GetGUID();
- if (m_auiEncounter[2] == DONE)
- go->SetGoState(GO_STATE_ACTIVE);
- else
- go->SetGoState(GO_STATE_READY);
- break;
- case GO_TRIBUNAL_CONSOLE:
- uiTribunalConsole = go->GetGUID();
- break;
- case GO_TRIBUNAL_CHEST:
- case GO_TRIBUNAL_CHEST_HERO:
- uiTribunalChest = go->GetGUID();
- if (m_auiEncounter[2] == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- break;
- case 191527:
- uiTribunalSkyFloor = go->GetGUID();
- break;
+ switch (creature->GetEntry())
+ {
+ case NPC_KRYSTALLUS:
+ KrystallusGUID = creature->GetGUID();
+ break;
+ case NPC_MAIDEN:
+ MaidenOfGriefGUID = creature->GetGUID();
+ break;
+ case NPC_SJONNIR:
+ SjonnirGUID = creature->GetGUID();
+ break;
+ case NPC_MARNAK:
+ MarnakGUID = creature->GetGUID();
+ break;
+ case NPC_KADDRAK:
+ KaddrakGUID = creature->GetGUID();
+ break;
+ case NPC_ABEDNEUM:
+ AbedneumGUID = creature->GetGUID();
+ break;
+ case NPC_BRANN:
+ BrannGUID = creature->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- }
- void SetData(uint32 type, uint32 data) OVERRIDE
- {
- switch (type)
+ void OnGameObjectCreate(GameObject* go) OVERRIDE
{
- case DATA_MAIDEN_OF_GRIEF_EVENT:
- m_auiEncounter[1] = data;
- if (m_auiEncounter[1] == DONE)
- HandleGameObject(uiBrannDoor, true);
- break;
- case DATA_KRYSTALLUS_EVENT:
- m_auiEncounter[0] = data;
- if (m_auiEncounter[0] == DONE)
- HandleGameObject(uiMaidenOfGriefDoor, true);
- break;
- case DATA_SJONNIR_EVENT:
- m_auiEncounter[3] = data;
- break;
- case DATA_BRANN_EVENT:
- m_auiEncounter[2] = data;
- if (m_auiEncounter[2] == DONE)
- {
- HandleGameObject(uiSjonnirDoor, true);
- GameObject* go = instance->GetGameObject(uiTribunalChest);
- if (go)
+ switch (go->GetEntry())
+ {
+ case GO_ABEDNEUM:
+ AbedneumGoGUID = go->GetGUID();
+ break;
+ case GO_MARNAK:
+ MarnakGoGUID = go->GetGUID();
+ break;
+ case GO_KADDRAK:
+ KaddrakGoGUID = go->GetGUID();
+ break;
+ case GO_TRIBUNAL_CONSOLE:
+ TribunalConsoleGUID = go->GetGUID();
+ break;
+ case GO_TRIBUNAL_CHEST:
+ case GO_TRIBUNAL_CHEST_HERO:
+ TribunalChestGUID = go->GetGUID();
+ if (GetBossState(DATA_BRANN_EVENT) == DONE)
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- }
- break;
+ break;
+ case GO_TRIBUNAL_SKY_FLOOR:
+ TribunalSkyFloorGUID = go->GetGUID();
+ break;
+ case GO_SJONNIR_DOOR:
+ AddDoor(go, true);
+ break;
+ default:
+ break;
+ }
}
- if (data == DONE)
- SaveToDB();
- }
-
- uint32 GetData(uint32 type) const OVERRIDE
- {
- switch (type)
+ void OnGameObjectRemove(GameObject* go) OVERRIDE
{
- case DATA_KRYSTALLUS_EVENT: return m_auiEncounter[0];
- case DATA_MAIDEN_OF_GRIEF_EVENT: return m_auiEncounter[1];
- case DATA_SJONNIR_EVENT: return m_auiEncounter[2];
- case DATA_BRANN_EVENT: return m_auiEncounter[3];
+ switch (go->GetEntry())
+ {
+ case GO_SJONNIR_DOOR:
+ AddDoor(go, false);
+ break;
+ default:
+ break;
+ }
}
- return 0;
- }
-
- uint64 GetData64(uint32 identifier) const OVERRIDE
- {
- switch (identifier)
+ uint64 GetData64(uint32 type) const OVERRIDE
{
- case DATA_MAIDEN_OF_GRIEF: return uiMaidenOfGrief;
- case DATA_KRYSTALLUS: return uiKrystallus;
- case DATA_SJONNIR: return uiSjonnir;
- case DATA_KADDRAK: return uiKaddrak;
- case DATA_MARNAK: return uiMarnak;
- case DATA_ABEDNEUM: return uiAbedneum;
- case DATA_GO_TRIBUNAL_CONSOLE: return uiTribunalConsole;
- case DATA_GO_KADDRAK: return uiKaddrakGo;
- case DATA_GO_ABEDNEUM: return uiAbedneumGo;
- case DATA_GO_MARNAK: return uiMarnakGo;
- case DATA_GO_SKY_FLOOR: return uiTribunalSkyFloor;
- case DATA_SJONNIR_DOOR: return uiSjonnirDoor;
- case DATA_MAIDEN_DOOR: return uiMaidenOfGriefDoor;
+ switch (type)
+ {
+ case DATA_MAIDEN_OF_GRIEF:
+ return MaidenOfGriefGUID;
+ case DATA_KRYSTALLUS:
+ return KrystallusGUID;
+ case DATA_SJONNIR:
+ return SjonnirGUID;
+ case DATA_KADDRAK:
+ return KaddrakGUID;
+ case DATA_MARNAK:
+ return MarnakGUID;
+ case DATA_ABEDNEUM:
+ return AbedneumGUID;
+ case DATA_GO_TRIBUNAL_CONSOLE:
+ return TribunalConsoleGUID;
+ case DATA_GO_KADDRAK:
+ return KaddrakGoGUID;
+ case DATA_GO_ABEDNEUM:
+ return AbedneumGoGUID;
+ case DATA_GO_MARNAK:
+ return MarnakGoGUID;
+ case DATA_GO_SKY_FLOOR:
+ return TribunalSkyFloorGUID;
+ default:
+ break;
+ }
+
+ return 0;
}
- return 0;
- }
-
- std::string GetSaveData() OVERRIDE
- {
- OUT_SAVE_INST_DATA;
+ bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ {
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case DATA_BRANN_EVENT:
+ if (state == DONE)
+ {
+ if (GameObject* go = instance->GetGameObject(TribunalChestGUID))
+ go->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_INTERACT_COND);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
- std::ostringstream saveStream;
- saveStream << "H S " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << m_auiEncounter[3];
+ bool CheckRequiredBosses(uint32 bossId, Player const* player /*= NULL*/) const OVERRIDE
+ {
+ if (player && player->GetSession()->HasPermission(RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES))
+ return true;
+
+ switch (bossId)
+ {
+ case DATA_SJONNIR:
+ if (GetBossState(DATA_BRANN_EVENT) != DONE)
+ return false;
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
- str_data = saveStream.str();
+ std::string GetSaveData() OVERRIDE
+ {
+ OUT_SAVE_INST_DATA;
- OUT_SAVE_INST_DATA_COMPLETE;
- return str_data;
- }
+ std::ostringstream saveStream;
+ saveStream << "H S " << GetBossSaveData();
- void Load(const char* in) OVERRIDE
- {
- if (!in)
- {
- OUT_LOAD_INST_DATA_FAIL;
- return;
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
}
- OUT_LOAD_INST_DATA(in);
+ void Load(char const* str) OVERRIDE
+ {
+ if (!str)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
- char dataHead1, dataHead2;
- uint16 data0, data1, data2, data3;
+ OUT_LOAD_INST_DATA(str);
- std::istringstream loadStream(in);
- loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3;
+ char dataHead1, dataHead2;
- if (dataHead1 == 'H' && dataHead2 == 'S')
- {
- m_auiEncounter[0] = data0;
- m_auiEncounter[1] = data1;
- m_auiEncounter[2] = data2;
- m_auiEncounter[3] = data3;
+ std::istringstream loadStream(str);
+ loadStream >> dataHead1 >> dataHead2;
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- m_auiEncounter[i] = NOT_STARTED;
+ if (dataHead1 == 'H' && dataHead2 == 'S')
+ {
+ for (uint32 i = 0; i < EncounterCount; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+ SetBossState(i, EncounterState(tmpState));
+ }
+ }
+ else
+ OUT_LOAD_INST_DATA_FAIL;
- } else OUT_LOAD_INST_DATA_FAIL;
+ OUT_LOAD_INST_DATA_COMPLETE;
+ }
- OUT_LOAD_INST_DATA_COMPLETE;
+ protected:
+ uint64 KrystallusGUID;
+ uint64 MaidenOfGriefGUID;
+ uint64 SjonnirGUID;
+
+ uint64 KaddrakGUID;
+ uint64 AbedneumGUID;
+ uint64 MarnakGUID;
+ uint64 BrannGUID;
+
+ uint64 TribunalConsoleGUID;
+ uint64 TribunalChestGUID;
+ uint64 TribunalSkyFloorGUID;
+ uint64 KaddrakGoGUID;
+ uint64 AbedneumGoGUID;
+ uint64 MarnakGoGUID;
+ };
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ {
+ return new instance_halls_of_stone_InstanceMapScript(map);
}
- };
-
};
void AddSC_instance_halls_of_stone()
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 7021f6251a2..8804410d814 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -2072,7 +2072,7 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader
{
uint32 spellId = 0;
- TC_LOG_ERROR(LOG_FILTER_SPELLS_AURAS, "spell_q12641_death_comes_from_on_high:: Caster: %s (GUID: %u) On Hit Target: Creature: %s (Entry: %u GUID: %u)",
+ TC_LOG_DEBUG(LOG_FILTER_SPELLS_AURAS, "spell_q12641_death_comes_from_on_high:: Caster: %s (GUID: %u) On Hit Target: Creature: %s (Entry: %u GUID: %u)",
GetOriginalCaster()->GetName().c_str(), GetOriginalCaster()->GetGUIDLow(), GetHitCreature()->GetName().c_str(), GetHitCreature()->GetEntry(), GetHitCreature()->GetGUIDLow());
switch (GetHitCreature()->GetEntry())
{
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp
index 26940c8a599..6e01e8f515a 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp
@@ -56,7 +56,7 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_DEL_REALM_CHARACTERS, "DELETE FROM realmcharacters WHERE acctid = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_INS_REALM_CHARACTERS, "INSERT INTO realmcharacters (numchars, acctid, realmid) VALUES (?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_SUM_REALM_CHARACTERS, "SELECT SUM(numchars) FROM realmcharacters WHERE acctid = ?", CONNECTION_ASYNC);
- PrepareStatement(LOGIN_INS_ACCOUNT, "INSERT INTO account(username, sha_pass_hash, joindate) VALUES(?, ?, NOW())", CONNECTION_SYNCH);
+ PrepareStatement(LOGIN_INS_ACCOUNT, "INSERT INTO account(username, sha_pass_hash, reg_mail, email, joindate) VALUES(?, ?, ?, ?, NOW())", CONNECTION_SYNCH);
PrepareStatement(LOGIN_INS_REALM_CHARACTERS_INIT, "INSERT INTO realmcharacters (realmid, acctid, numchars) SELECT realmlist.id, account.id, 0 FROM realmlist, account LEFT JOIN realmcharacters ON acctid=account.id WHERE acctid IS NULL", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_EXPANSION, "UPDATE account SET expansion = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_ACCOUNT_LOCK, "UPDATE account SET locked = ? WHERE id = ?", CONNECTION_ASYNC);
@@ -64,6 +64,8 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_INS_LOG, "INSERT INTO logs (time, realm, type, level, string) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_USERNAME, "UPDATE account SET v = 0, s = 0, username = ?, sha_pass_hash = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_PASSWORD, "UPDATE account SET v = 0, s = 0, sha_pass_hash = ? WHERE id = ?", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_UPD_EMAIL, "UPDATE account SET email = ? WHERE id = ?", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_UPD_REG_EMAIL, "UPDATE account SET reg_mail = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_MUTE_TIME, "UPDATE account SET mutetime = ? , mutereason = ? , muteby = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_MUTE_TIME_LOGIN, "UPDATE account SET mutetime = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_LAST_IP, "UPDATE account SET last_ip = ? WHERE username = ?", CONNECTION_ASYNC);
@@ -79,7 +81,7 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_GET_USERNAME_BY_ID, "SELECT username FROM account WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_CHECK_PASSWORD, "SELECT 1 FROM account WHERE id = ? AND sha_pass_hash = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_CHECK_PASSWORD_BY_NAME, "SELECT 1 FROM account WHERE username = ? AND sha_pass_hash = ?", CONNECTION_SYNCH);
- PrepareStatement(LOGIN_SEL_PINFO, "SELECT a.username, aa.gmlevel, a.email, a.last_ip, DATE_FORMAT(a.last_login, '%Y-%m-%d %T'), a.mutetime, a.mutereason, a.muteby, a.failed_logins, a.locked, a.OS FROM account a LEFT JOIN account_access aa ON (a.id = aa.id AND (aa.RealmID = ? OR aa.RealmID = -1)) WHERE a.id = ?", CONNECTION_SYNCH);
+ PrepareStatement(LOGIN_SEL_PINFO, "SELECT a.username, aa.gmlevel, a.email, a.reg_mail, a.last_ip, DATE_FORMAT(a.last_login, '%Y-%m-%d %T'), a.mutetime, a.mutereason, a.muteby, a.failed_logins, a.locked, a.OS FROM account a LEFT JOIN account_access aa ON (a.id = aa.id AND (aa.RealmID = ? OR aa.RealmID = -1)) WHERE a.id = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_PINFO_BANS, "SELECT unbandate, bandate = unbandate, bannedby, banreason FROM account_banned WHERE id = ? AND active ORDER BY bandate ASC LIMIT 1", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_GM_ACCOUNTS, "SELECT a.username, aa.gmlevel FROM account a, account_access aa WHERE a.id=aa.id AND aa.gmlevel >= ? AND (aa.realmid = -1 OR aa.realmid = ?)", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_INFO, "SELECT a.username, a.last_ip, aa.gmlevel, a.expansion FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.id = ?", CONNECTION_SYNCH);
@@ -92,6 +94,7 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_DEL_ACCOUNT, "DELETE FROM account WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_IP2NATION_COUNTRY, "SELECT c.country FROM ip2nationCountries c, ip2nation i WHERE i.ip < ? AND c.code = i.country ORDER BY i.ip DESC LIMIT 0,1", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_AUTOBROADCAST, "SELECT id, weight, text FROM autobroadcast WHERE realmid = ? OR realmid = -1", CONNECTION_SYNCH);
+ PrepareStatement(LOGIN_GET_EMAIL_BY_ID, "SELECT email FROM account WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS_BY_ID, "SELECT gmlevel, RealmID FROM account_access WHERE id = ? and (RealmID = ? OR RealmID = -1) ORDER BY gmlevel desc", CONNECTION_SYNCH);
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h
index 97cf91fc178..47fa48c6ada 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.h
+++ b/src/server/shared/Database/Implementation/LoginDatabase.h
@@ -84,6 +84,8 @@ enum LoginDatabaseStatements
LOGIN_INS_LOG,
LOGIN_UPD_USERNAME,
LOGIN_UPD_PASSWORD,
+ LOGIN_UPD_EMAIL,
+ LOGIN_UPD_REG_EMAIL,
LOGIN_UPD_MUTE_TIME,
LOGIN_UPD_MUTE_TIME_LOGIN,
LOGIN_UPD_LAST_IP,
@@ -112,6 +114,7 @@ enum LoginDatabaseStatements
LOGIN_DEL_ACCOUNT,
LOGIN_SEL_IP2NATION_COUNTRY,
LOGIN_SEL_AUTOBROADCAST,
+ LOGIN_GET_EMAIL_BY_ID,
LOGIN_SEL_ACCOUNT_ACCESS_BY_ID,
LOGIN_SEL_RBAC_ACCOUNT_GROUPS,
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 9da746f3f42..3076447b0a8 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -29,6 +29,7 @@
# CUSTOM SERVER OPTIONS
# LOGGING SYSTEM SETTINGS
# CURRENCIES SETTINGS
+# PACKET SPOOF PROTECTION SETTINGS
#
###################################################################################################
@@ -1080,7 +1081,6 @@ AllowTickets = 1
DungeonFinder.OptionsMask = 1
-
#
# DBC.EnforceItemAttributes
# Description: Disallow overriding item attributes stored in DBC files with values from the
@@ -1106,6 +1106,15 @@ AccountInstancesPerHour = 5
RBAC.DefaultGroups = ""
#
+# Account.PasswordChangeSecurity
+# Description: Controls how secure the password changes are.
+# Default: 0 - None (Old and new password)
+# 1 - Email (Email confirmation necessary)
+# 2 - RBAC (RBAC enable or disables email confirmation per group)
+
+Account.PasswordChangeSecurity = 0
+
+#
###################################################################################################
###################################################################################################
@@ -2911,14 +2920,14 @@ Currency.ConquestPointsArenaReward = 180
#
###################################################################################################
#
-# Packet Spoof Protection Settings
+# PACKET SPOOF PROTECTION SETTINGS
#
# These settings determine which action to take when harmful packet spoofing is detected.
#
# PacketSpoof.Policy
# Description: Determines the course of action when packet spoofing is detected.
-# Values: 0 - Log only (LOG_FILTER_NETWORKIO)
-# 1 - Log + kick
+# Default: 1 - Log + kick
+# 0 - Log only (LOG_FILTER_NETWORKIO)
# 2 - Log + kick + ban
PacketSpoof.Policy = 1
@@ -2926,9 +2935,9 @@ PacketSpoof.Policy = 1
#
# PacketSpoof.BanMode
# Description: If PacketSpoof.Policy equals 2, this will determine the ban mode.
-# Values: 0 - Ban Account
-# 2 - Ban IP
# Note: Banning by character not supported for logical reasons.
+# Default: 0 - Ban Account
+# 2 - Ban IP
#
PacketSpoof.BanMode = 0