aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/auth_database.sql11
-rw-r--r--sql/updates/auth/2013_09_01_00_auth_misc.sql34
-rw-r--r--sql/updates/auth/2013_09_01_01_auth_misc.sql35
-rw-r--r--sql/updates/auth/2013_09_02_00_auth_misc.sql29
-rw-r--r--sql/updates/auth/2013_09_02_01_auth_misc.sql93
-rw-r--r--sql/updates/auth/2013_09_02_02_auth_misc.sql25
-rw-r--r--sql/updates/auth/2013_09_02_03_auth_misc.sql49
-rw-r--r--sql/updates/auth/2013_09_02_04_auth_misc.sql19
-rw-r--r--sql/updates/auth/2013_09_02_05_auth_misc.sql23
-rw-r--r--sql/updates/auth/2013_09_02_06_auth_misc.sql31
-rw-r--r--sql/updates/auth/2013_09_02_07_auth_misc.sql37
-rw-r--r--sql/updates/auth/2013_09_02_08_auth_misc.sql25
-rw-r--r--sql/updates/auth/2013_09_02_09_auth_misc.sql19
-rw-r--r--sql/updates/auth/2013_09_02_10_auth_misc.sql21
-rw-r--r--sql/updates/auth/2013_09_02_11_auth_misc.sql37
-rw-r--r--sql/updates/auth/2013_09_02_12_auth_misc.sql23
-rw-r--r--sql/updates/auth/2013_09_02_13_auth_misc.sql23
-rw-r--r--sql/updates/auth/2013_09_02_14_auth_misc.sql50
-rw-r--r--sql/updates/auth/2013_09_02_15_auth_misc.sql31
-rw-r--r--sql/updates/auth/2013_09_02_16_auth_misc.sql23
-rw-r--r--sql/updates/auth/2013_09_02_17_auth_misc.sql47
-rw-r--r--sql/updates/world/2013_09_01_07_world_trinity_strings.sql25
-rw-r--r--sql/updates/world/2013_09_02_01_world_command.sql14
-rw-r--r--sql/updates/world/2013_09_02_02_world_command.sql46
-rw-r--r--sql/updates/world/2013_09_02_03_world_command.sql12
-rw-r--r--sql/updates/world/2013_09_02_04_world_command.sql24
-rw-r--r--sql/updates/world/2013_09_02_05_world_command.sql9
-rw-r--r--sql/updates/world/2013_09_02_06_world_command.sql11
-rw-r--r--sql/updates/world/2013_09_02_07_world_command.sql15
-rw-r--r--sql/updates/world/2013_09_02_08_world_command.sql18
-rw-r--r--sql/updates/world/2013_09_02_09_world_command.sql12
-rw-r--r--sql/updates/world/2013_09_02_10_world_command.sql9
-rw-r--r--sql/updates/world/2013_09_02_11_world_command.sql10
-rw-r--r--sql/updates/world/2013_09_02_12_world_command.sql18
-rw-r--r--sql/updates/world/2013_09_02_13_world_command.sql11
-rw-r--r--sql/updates/world/2013_09_02_14_world_command.sql11
-rw-r--r--sql/updates/world/2013_09_02_15_world_command.sql25
-rw-r--r--sql/updates/world/2013_09_02_16_world_command.sql15
-rw-r--r--sql/updates/world/2013_09_02_17_world_command.sql11
-rw-r--r--sql/updates/world/2013_09_02_18_world_command.sql23
-rw-r--r--sql/updates/world/2013_09_02_19_world_spelldifficulty_dbc.sql7
-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
80 files changed, 2486 insertions, 857 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index 1d612fae666..02a94c95c6c 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -30,7 +30,8 @@ CREATE TABLE `account` (
`v` varchar(64) NOT NULL DEFAULT '',
`s` varchar(64) NOT NULL DEFAULT '',
`token_key` varchar(100) NOT NULL DEFAULT '',
- `email` varchar(254) NOT NULL DEFAULT '',
+ `email` varchar(255) NOT NULL DEFAULT '',
+ `reg_mail` varchar(255) NOT NULL DEFAULT '',
`joindate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_ip` varchar(15) NOT NULL DEFAULT '127.0.0.1',
`failed_logins` int(10) unsigned NOT NULL DEFAULT '0',
@@ -307,7 +308,7 @@ CREATE TABLE `rbac_group_roles` (
LOCK TABLES `rbac_group_roles` WRITE;
/*!40000 ALTER TABLE `rbac_group_roles` DISABLE KEYS */;
-INSERT INTO `rbac_group_roles` VALUES (1,1),(2,2),(3,3),(4,4),(2,5),(1,6),(1,7),(2,8),(3,8),(4,8),(2,9),(3,9),(4,9),(2,10),(3,10),(4,10),(2,11),(3,11),(4,11),(2,12),(3,12),(4,12),(2,13),(3,13),(4,13),(2,14),(3,14),(4,14),(2,15),(3,15),(4,15),(2,16),(3,16),(4,16),(2,17),(3,17),(4,17),(4,18),(2,19),(3,19),(4,19),(2,20),(3,20),(4,20),(2,21),(3,21),(4,21),(2,22),(3,22),(4,22),(4,23),(2,24),(3,24),(4,24),(2,25),(3,25),(4,25),(2,26),(3,26),(4,26),(2,27),(3,27),(4,27),(2,28),(3,28),(4,28),(2,29),(3,29),(4,29),(2,30),(3,30),(4,30),(2,32),(3,32),(4,32),(2,33),(3,33),(4,33),(1,34),(2,35),(3,35),(4,35),(2,36),(3,36),(4,36),(2,37),(3,37),(4,37),(2,38),(3,38),(4,38),(3,39),(4,39);
+INSERT INTO `rbac_group_roles` VALUES (1,1),(2,2),(3,3),(4,4),(2,5),(1,6),(1,7),(2,8),(3,8),(4,8),(2,9),(3,9),(4,9),(2,10),(3,10),(4,10),(2,11),(3,11),(4,11),(2,12),(3,12),(4,12),(2,13),(3,13),(4,13),(2,14),(3,14),(4,14),(2,15),(3,15),(4,15),(2,16),(3,16),(4,16),(2,17),(3,17),(4,17),(4,18),(2,19),(3,19),(4,19),(2,20),(3,20),(4,20),(2,21),(3,21),(4,21),(2,22),(3,22),(4,22),(4,23),(2,24),(3,24),(4,24),(2,25),(3,25),(4,25),(2,26),(3,26),(4,26),(2,27),(3,27),(4,27),(2,28),(3,28),(4,28),(2,29),(3,29),(4,29),(2,30),(3,30),(4,30),(2,32),(3,32),(4,32),(2,33),(3,33),(4,33),(1,34),(2,35),(3,35),(4,35),(2,36),(3,36),(4,36),(2,37),(3,37),(4,37),(2,38),(3,38),(4,38),(3,39),(4,39),(1,40),(2,40),(3,40),(4,40);
/*!40000 ALTER TABLE `rbac_group_roles` ENABLE KEYS */;
UNLOCK TABLES;
@@ -355,7 +356,7 @@ CREATE TABLE `rbac_permissions` (
LOCK TABLES `rbac_permissions` WRITE;
/*!40000 ALTER TABLE `rbac_permissions` DISABLE KEYS */;
-INSERT INTO `rbac_permissions` VALUES (1,'Instant logout'),(2,'Skip Queue'),(3,'Join Normal Battleground'),(4,'Join Random Battleground'),(5,'Join Arenas'),(6,'Join Dungeon Finder'),(7,'Player Commands (Temporal till commands moved to rbac)'),(8,'Moderator Commands (Temporal till commands moved to rbac)'),(9,'GameMaster Commands (Temporal till commands moved to rbac)'),(10,'Administrator Commands (Temporal till commands moved to rbac)'),(11,'Log GM trades'),(13,'Skip Instance required bosses check'),(14,'Skip character creation team mask check'),(15,'Skip character creation class mask check'),(16,'Skip character creation race mask check'),(17,'Skip character creation reserved name check'),(18,'Skip character creation heroic min level check'),(19,'Skip needed requirements to use channel check'),(20,'Skip disable map check'),(21,'Skip reset talents when used more than allowed check'),(22,'Skip spam chat check'),(23,'Skip over-speed ping check'),(24,'Two side faction characters on the same account'),(25,'Allow say chat between factions'),(26,'Allow channel chat between factions'),(27,'Two side mail interaction'),(28,'See two side who list'),(29,'Add friends of other faction'),(30,'Save character without delay with .save command'),(31,'Use params with .unstuck command'),(32,'Can be assigned tickets with .assign ticket command'),(33,'Notify if a command was not found'),(34,'Check if should appear in list using .gm ingame command'),(35,'See all security levels with who command'),(36,'Filter whispers'),(37,'Use staff badge in chat'),(38,'Resurrect with full Health Points'),(39,'Restore saved gm setting states'),(40,'Allows to add a gm to friend list'),(41,'Use Config option START_GM_LEVEL to assign new character level'),(42,'Allows to use CMSG_WORLD_TELEPORT opcode'),(43,'Allows to use CMSG_WHOIS opcode'),(44,'Receive global GM messages/texts'),(45,'Join channels without announce'),(46,'Change channel settings without being channel moderator'),(47,'Enables lower security than target check'),(48,'Enable IP, Last Login and EMail output in pinfo');
+INSERT INTO `rbac_permissions` VALUES (1,'Instant logout'),(2,'Skip Queue'),(3,'Join Normal Battleground'),(4,'Join Random Battleground'),(5,'Join Arenas'),(6,'Join Dungeon Finder'),(7,'Player Commands (Temporal till commands moved to rbac)'),(8,'Moderator Commands (Temporal till commands moved to rbac)'),(9,'GameMaster Commands (Temporal till commands moved to rbac)'),(10,'Administrator Commands (Temporal till commands moved to rbac)'),(11,'Log GM trades'),(13,'Skip Instance required bosses check'),(14,'Skip character creation team mask check'),(15,'Skip character creation class mask check'),(16,'Skip character creation race mask check'),(17,'Skip character creation reserved name check'),(18,'Skip character creation heroic min level check'),(19,'Skip needed requirements to use channel check'),(20,'Skip disable map check'),(21,'Skip reset talents when used more than allowed check'),(22,'Skip spam chat check'),(23,'Skip over-speed ping check'),(24,'Two side faction characters on the same account'),(25,'Allow say chat between factions'),(26,'Allow channel chat between factions'),(27,'Two side mail interaction'),(28,'See two side who list'),(29,'Add friends of other faction'),(30,'Save character without delay with .save command'),(31,'Use params with .unstuck command'),(32,'Can be assigned tickets with .assign ticket command'),(33,'Notify if a command was not found'),(34,'Check if should appear in list using .gm ingame command'),(35,'See all security levels with who command'),(36,'Filter whispers'),(37,'Use staff badge in chat'),(38,'Resurrect with full Health Points'),(39,'Restore saved gm setting states'),(40,'Allows to add a gm to friend list'),(41,'Use Config option START_GM_LEVEL to assign new character level'),(42,'Allows to use CMSG_WORLD_TELEPORT opcode'),(43,'Allows to use CMSG_WHOIS opcode'),(44,'Receive global GM messages/texts'),(45,'Join channels without announce'),(46,'Change channel settings without being channel moderator'),(47,'Enables lower security than target check'),(48,'Enable IP, Last Login and EMail output in pinfo'),(49,'Forces to enter the email for confirmation on password change'),(50,'Allow user to check his own email with .account');
/*!40000 ALTER TABLE `rbac_permissions` ENABLE KEYS */;
UNLOCK TABLES;
@@ -382,7 +383,7 @@ CREATE TABLE `rbac_role_permissions` (
LOCK TABLES `rbac_role_permissions` WRITE;
/*!40000 ALTER TABLE `rbac_role_permissions` DISABLE KEYS */;
-INSERT INTO `rbac_role_permissions` VALUES (5,1),(5,2),(6,3),(6,4),(6,5),(7,6),(1,7),(2,8),(3,9),(4,10),(8,11),(9,13),(33,14),(33,15),(33,16),(33,17),(33,18),(27,19),(22,20),(23,21),(24,22),(17,23),(34,24),(28,25),(30,26),(19,27),(35,28),(36,29),(11,30),(12,31),(10,32),(20,33),(14,34),(37,35),(29,36),(15,37),(13,38),(25,39),(38,40),(26,41),(18,42),(18,43),(16,44),(31,45),(32,46),(21,47),(39,48);
+INSERT INTO `rbac_role_permissions` VALUES (5,1),(5,2),(6,3),(6,4),(6,5),(7,6),(1,7),(2,8),(3,9),(4,10),(8,11),(9,13),(33,14),(33,15),(33,16),(33,17),(33,18),(27,19),(22,20),(23,21),(24,22),(17,23),(34,24),(28,25),(30,26),(19,27),(35,28),(36,29),(11,30),(12,31),(10,32),(20,33),(14,34),(37,35),(29,36),(15,37),(13,38),(25,39),(38,40),(26,41),(18,42),(18,43),(16,44),(31,45),(32,46),(21,47),(39,48),(40,49), (41,50);
/*!40000 ALTER TABLE `rbac_role_permissions` ENABLE KEYS */;
UNLOCK TABLES;
@@ -406,7 +407,7 @@ CREATE TABLE `rbac_roles` (
LOCK TABLES `rbac_roles` WRITE;
/*!40000 ALTER TABLE `rbac_roles` DISABLE KEYS */;
-INSERT INTO `rbac_roles` VALUES (1,'Player Commands'),(2,'Moderator Commands'),(3,'GameMaster Commands'),(4,'Administrator Commands'),(5,'Quick Login/Logout'),(6,'Use Battleground/Arenas'),(7,'Use Dungeon Finder'),(8,'Log GM trades'),(9,'Skip Instance required bosses check'),(10,'Ticket management'),(11,'Instant .save'),(12,'Allow params with .unstuck'),(13,'Full HP after resurrect'),(14,'Appear in GM ingame list'),(15,'Use staff badge in chat'),(16,'Receive global GM messages/texts'),(17,'Skip over-speed ping check'),(18,'Allows Admin Opcodes'),(19,'Two side mail interaction'),(20,'Notify if a command was not found'),(21,'Enables lower security than target check'),(22,'Skip disable map check'),(23,'Skip reset talents when used more than allowed check'),(24,'Skip spam chat check'),(25,'Restore saved gm setting states'),(26,'Use Config option START_GM_LEVEL to assign new character level'),(27,'Skip needed requirements to use channel check'),(28,'Allow say chat between factions'),(29,'Filter whispers'),(30,'Allow channel chat between factions'),(31,'Join channels without announce'),(32,'Change channel settings without being channel moderator'),(33,'Skip character creation checks'),(34,'Two side faction characters on the same account'),(35,'See two side who list'),(36,'Add friends of other faction'),(37,'See all security levels with who command'),(38,'Allows to add a gm to friend list'),(39,'Enable IP, Last Login and EMail output in pinfo');
+INSERT INTO `rbac_roles` VALUES (1,'Player Commands'),(2,'Moderator Commands'),(3,'GameMaster Commands'),(4,'Administrator Commands'),(5,'Quick Login/Logout'),(6,'Use Battleground/Arenas'),(7,'Use Dungeon Finder'),(8,'Log GM trades'),(9,'Skip Instance required bosses check'),(10,'Ticket management'),(11,'Instant .save'),(12,'Allow params with .unstuck'),(13,'Full HP after resurrect'),(14,'Appear in GM ingame list'),(15,'Use staff badge in chat'),(16,'Receive global GM messages/texts'),(17,'Skip over-speed ping check'),(18,'Allows Admin Opcodes'),(19,'Two side mail interaction'),(20,'Notify if a command was not found'),(21,'Enables lower security than target check'),(22,'Skip disable map check'),(23,'Skip reset talents when used more than allowed check'),(24,'Skip spam chat check'),(25,'Restore saved gm setting states'),(26,'Use Config option START_GM_LEVEL to assign new character level'),(27,'Skip needed requirements to use channel check'),(28,'Allow say chat between factions'),(29,'Filter whispers'),(30,'Allow channel chat between factions'),(31,'Join channels without announce'),(32,'Change channel settings without being channel moderator'),(33,'Skip character creation checks'),(34,'Two side faction characters on the same account'),(35,'See two side who list'),(36,'Add friends of other faction'),(37,'See all security levels with who command'),(38,'Allows to add a gm to friend list'),(39,'Enable IP, Last Login and EMail output in pinfo'),(40,'Forces to enter the email for confirmation on password change'),(41,'Allow user to check his own email with .account');
/*!40000 ALTER TABLE `rbac_roles` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/auth/2013_09_01_00_auth_misc.sql b/sql/updates/auth/2013_09_01_00_auth_misc.sql
new file mode 100644
index 00000000000..5a48a4233ba
--- /dev/null
+++ b/sql/updates/auth/2013_09_01_00_auth_misc.sql
@@ -0,0 +1,34 @@
+/* account email */
+SET @amail = 263;
+
+-- Add new permissions for account mail
+DELETE FROM `rbac_permissions` WHERE `id` = @amail;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@amail, 'account email');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` = @amail;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(1, @amail),
+(2, @amail),
+(3, @amail),
+(4, @amail);
+
+
+/* account set sec email
+ account set sec regmail */
+SET @setsec = 264;
+
+-- Add new permissions for account set sec
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @setsec AND @setsec+2;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@setsec+0, 'account set sec'),
+(@setsec+1, 'account set sec email'),
+(@setsec+2, 'account set sec regmail');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @setsec AND @setsec+2;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @setsec+0),
+(4, @setsec+1),
+(4, @setsec+2);
diff --git a/sql/updates/auth/2013_09_01_01_auth_misc.sql b/sql/updates/auth/2013_09_01_01_auth_misc.sql
new file mode 100644
index 00000000000..14c219deaf4
--- /dev/null
+++ b/sql/updates/auth/2013_09_01_01_auth_misc.sql
@@ -0,0 +1,35 @@
+ALTER TABLE `account`
+ ADD COLUMN `reg_mail` VARCHAR(255) NOT NULL DEFAULT '' AFTER `s`;
+
+UPDATE `account` SET reg_mail = email;
+
+DELETE FROM `rbac_permissions` WHERE `id` = 49;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES (49, 'Forces to enter the email for confirmation on password change');
+
+DELETE FROM `rbac_roles` WHERE `id` = 40;
+INSERT INTO `rbac_roles` (`id`, `name`) VALUES (40, 'Forces to enter the email for confirmation on password change');
+
+DELETE FROM `rbac_role_permissions` WHERE `roleId` = 40 AND `permissionId` = 49;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (40, 49);
+
+DELETE FROM `rbac_group_roles` WHERE `groupId` = 1 AND `roleId` = 40;
+INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (1, 40);
+
+DELETE FROM `rbac_group_roles` WHERE `groupId` = 2 AND `roleId` = 40;
+INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (2, 40);
+
+DELETE FROM `rbac_group_roles` WHERE `groupId` = 3 AND `roleId` = 40;
+INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (3, 40);
+
+DELETE FROM `rbac_group_roles` WHERE `groupId` = 4 AND `roleId` = 40;
+INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (4, 40);
+
+DELETE FROM `rbac_permissions` WHERE `id` = 50;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES (50, 'Allow user to check his own email with .account');
+
+DELETE FROM `rbac_roles` WHERE `id` = 41;
+INSERT INTO `rbac_roles` (`id`, `name`) VALUES (41, 'Allow user to check his own email with .account');
+
+DELETE FROM `rbac_role_permissions` WHERE `roleId` = 41 AND `permissionId` = 50;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (41, 50);
+
diff --git a/sql/updates/auth/2013_09_02_00_auth_misc.sql b/sql/updates/auth/2013_09_02_00_auth_misc.sql
new file mode 100644
index 00000000000..46a8054e086
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_00_auth_misc.sql
@@ -0,0 +1,29 @@
+/* cs_cheat.cpp */
+
+SET @id = 291;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+8;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'cheat'),
+(@id+1, 'cheat casttime'),
+(@id+2, 'cheat cooldown'),
+(@id+3, 'cheat explore'),
+(@id+4, 'cheat god'),
+(@id+5, 'cheat power'),
+(@id+6, 'cheat status'),
+(@id+7, 'cheat taxi'),
+(@id+8, 'cheat waterwalk');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+8;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5),
+(4, @id+6),
+(4, @id+7),
+(4, @id+8);
diff --git a/sql/updates/auth/2013_09_02_01_auth_misc.sql b/sql/updates/auth/2013_09_02_01_auth_misc.sql
new file mode 100644
index 00000000000..7d13404d087
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_01_auth_misc.sql
@@ -0,0 +1,93 @@
+/* cs_debug.cpp */
+
+SET @id = 300;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+40;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'debug'),
+(@id+1, 'debug anim'),
+(@id+2, 'debug areatriggers'),
+(@id+3, 'debug arena'),
+(@id+4, 'debug bg'),
+(@id+5, 'debug entervehicle'),
+(@id+6, 'debug getitemstate'),
+(@id+7, 'debug getitemvalue'),
+(@id+8, 'debug getvalue'),
+(@id+9, 'debug hostil'),
+(@id+10, 'debug itemexpire'),
+(@id+11, 'debug lootrecipient'),
+(@id+12, 'debug los'),
+(@id+13, 'debug mod32value'),
+(@id+14, 'debug moveflags'),
+(@id+15, 'debug play'),
+(@id+16, 'debug play cinematics'),
+(@id+17, 'debug play movie'),
+(@id+18, 'debug play sound'),
+(@id+19, 'debug send'),
+(@id+20, 'debug send buyerror'),
+(@id+21, 'debug send channelnotify'),
+(@id+22, 'debug send chatmessage'),
+(@id+23, 'debug send equiperror'),
+(@id+24, 'debug send largepacket'),
+(@id+25, 'debug send opcode'),
+(@id+26, 'debug send qinvalidmsg'),
+(@id+27, 'debug send qpartymsg'),
+(@id+28, 'debug send sellerror'),
+(@id+29, 'debug send setphaseshift'),
+(@id+30, 'debug send spellfail'),
+(@id+31, 'debug setaurastate'),
+(@id+32, 'debug setbit'),
+(@id+33, 'debug setitemvalue'),
+(@id+34, 'debug setvalue'),
+(@id+35, 'debug setvid'),
+(@id+36, 'debug spawnvehicle'),
+(@id+37, 'debug threat'),
+(@id+38, 'debug update'),
+(@id+39, 'debug uws'),
+(@id+40, 'wpgps');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+40;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(2, @id+0),
+(3, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5),
+(4, @id+6),
+(4, @id+7),
+(4, @id+8),
+(4, @id+9),
+(4, @id+10),
+(3, @id+11),
+(2, @id+12),
+(4, @id+13),
+(4, @id+14),
+(2, @id+15),
+(2, @id+16),
+(2, @id+17),
+(2, @id+18),
+(4, @id+19),
+(4, @id+20),
+(4, @id+21),
+(4, @id+22),
+(4, @id+23),
+(4, @id+24),
+(4, @id+25),
+(4, @id+26),
+(4, @id+27),
+(4, @id+28),
+(4, @id+29),
+(4, @id+30),
+(4, @id+31),
+(4, @id+32),
+(4, @id+33),
+(4, @id+34),
+(4, @id+35),
+(4, @id+36),
+(4, @id+37),
+(4, @id+38),
+(4, @id+39),
+(4, @id+40);
diff --git a/sql/updates/auth/2013_09_02_02_auth_misc.sql b/sql/updates/auth/2013_09_02_02_auth_misc.sql
new file mode 100644
index 00000000000..29ab2abf80d
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_02_auth_misc.sql
@@ -0,0 +1,25 @@
+/* cs_deserter.cpp */
+
+SET @id = 341;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+6;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'deserter'),
+(@id+1, 'deserter bg'),
+(@id+2, 'deserter bg add'),
+(@id+3, 'deserter bg remove'),
+(@id+4, 'deserter instance'),
+(@id+5, 'deserter instance add'),
+(@id+6, 'deserter instance remove');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+6;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5),
+(4, @id+6);
diff --git a/sql/updates/auth/2013_09_02_03_auth_misc.sql b/sql/updates/auth/2013_09_02_03_auth_misc.sql
new file mode 100644
index 00000000000..cf1f1837af4
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_03_auth_misc.sql
@@ -0,0 +1,49 @@
+/* cs_disable.cpp */
+
+SET @id = 348;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+18;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'disable'),
+(@id+1, 'disable add'),
+(@id+2, 'disable add achievement_criteria'),
+(@id+3, 'disable add battleground'),
+(@id+4, 'disable add map'),
+(@id+5, 'disable add mmap'),
+(@id+6, 'disable add outdoorpvp'),
+(@id+7, 'disable add quest'),
+(@id+8, 'disable add spell'),
+(@id+9, 'disable add vmap'),
+(@id+10, 'disable remove'),
+(@id+11, 'disable remove achievement_criteria'),
+(@id+12, 'disable remove battleground'),
+(@id+13, 'disable remove map'),
+(@id+14, 'disable remove mmap'),
+(@id+15, 'disable remove outdoorpvp'),
+(@id+16, 'disable remove quest'),
+(@id+17, 'disable remove spell'),
+(@id+18, 'disable remove vmap');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+18;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5),
+(4, @id+6),
+(4, @id+7),
+(4, @id+8),
+(4, @id+9),
+(4, @id+10),
+(4, @id+11),
+(4, @id+12),
+(4, @id+13),
+(4, @id+14),
+(4, @id+15),
+(4, @id+16),
+(4, @id+17),
+(4, @id+18);
diff --git a/sql/updates/auth/2013_09_02_04_auth_misc.sql b/sql/updates/auth/2013_09_02_04_auth_misc.sql
new file mode 100644
index 00000000000..4734aa6bbd4
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_04_auth_misc.sql
@@ -0,0 +1,19 @@
+/* cs_event.cpp */
+
+SET @id = 367;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+3;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'event'),
+(@id+1, 'event activelist'),
+(@id+2, 'event start'),
+(@id+3, 'event stop');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+3;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(2, @id+0),
+(2, @id+1),
+(2, @id+2),
+(2, @id+3);
diff --git a/sql/updates/auth/2013_09_02_05_auth_misc.sql b/sql/updates/auth/2013_09_02_05_auth_misc.sql
new file mode 100644
index 00000000000..8d71ab530dd
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_05_auth_misc.sql
@@ -0,0 +1,23 @@
+/* cs_gm.cpp */
+
+SET @id = 371;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+5;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'gm'),
+(@id+1, 'gm chat'),
+(@id+2, 'gm fly'),
+(@id+3, 'gm ingame'),
+(@id+4, 'gm list'),
+(@id+5, 'gm visible');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+5;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(2, @id+0),
+(2, @id+1),
+(4, @id+2),
+(2, @id+3),
+(4, @id+4),
+(2, @id+5);
diff --git a/sql/updates/auth/2013_09_02_06_auth_misc.sql b/sql/updates/auth/2013_09_02_06_auth_misc.sql
new file mode 100644
index 00000000000..e66e4d30db1
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_06_auth_misc.sql
@@ -0,0 +1,31 @@
+/* cs_go.cpp */
+
+SET @id = 377;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+9;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'go'),
+(@id+1, 'go creature'),
+(@id+2, 'go graveyard'),
+(@id+3, 'go grid'),
+(@id+4, 'go object'),
+(@id+5, 'go taxinode'),
+(@id+6, 'go ticket'),
+(@id+7, 'go trigger'),
+(@id+8, 'go xyz'),
+(@id+9, 'go zonexy');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+9;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(2, @id+0),
+(2, @id+1),
+(2, @id+2),
+(2, @id+3),
+(2, @id+4),
+(2, @id+5),
+(2, @id+6),
+(2, @id+7),
+(2, @id+8),
+(2, @id+9);
diff --git a/sql/updates/auth/2013_09_02_07_auth_misc.sql b/sql/updates/auth/2013_09_02_07_auth_misc.sql
new file mode 100644
index 00000000000..3fb2b343b9b
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_07_auth_misc.sql
@@ -0,0 +1,37 @@
+/* cs_gobject.cpp */
+
+SET @id = 387;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+12;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'gobject'),
+(@id+1, 'gobject activate'),
+(@id+2, 'gobject add'),
+(@id+3, 'gobject add temp'),
+(@id+4, 'gobject delete'),
+(@id+5, 'gobject info'),
+(@id+6, 'gobject move'),
+(@id+7, 'gobject near'),
+(@id+8, 'gobject set'),
+(@id+9, 'gobject set phase'),
+(@id+10, 'gobject set state'),
+(@id+11, 'gobject target'),
+(@id+12, 'gobject turn');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+12;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(3, @id+0),
+(3, @id+1),
+(3, @id+2),
+(3, @id+3),
+(3, @id+4),
+(3, @id+5),
+(3, @id+6),
+(3, @id+7),
+(3, @id+8),
+(3, @id+9),
+(3, @id+10),
+(3, @id+11),
+(3, @id+12);
diff --git a/sql/updates/auth/2013_09_02_08_auth_misc.sql b/sql/updates/auth/2013_09_02_08_auth_misc.sql
new file mode 100644
index 00000000000..b6bf442aeb5
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_08_auth_misc.sql
@@ -0,0 +1,25 @@
+/* cs_guild.cpp */
+
+SET @id = 401;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+6;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'guild'),
+(@id+1, 'guild create'),
+(@id+2, 'guild delete'),
+(@id+3, 'guild invite'),
+(@id+4, 'guild uninvite'),
+(@id+5, 'guild rank'),
+(@id+6, 'guild rename');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+6;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5),
+(4, @id+6);
diff --git a/sql/updates/auth/2013_09_02_09_auth_misc.sql b/sql/updates/auth/2013_09_02_09_auth_misc.sql
new file mode 100644
index 00000000000..3b16d9181d5
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_09_auth_misc.sql
@@ -0,0 +1,19 @@
+/* cs_honor.cpp */
+
+SET @id = 408;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+3;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'honor'),
+(@id+1, 'honor add'),
+(@id+2, 'honor add kill'),
+(@id+3, 'honor update');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+3;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(2, @id+0),
+(2, @id+1),
+(2, @id+2),
+(2, @id+3);
diff --git a/sql/updates/auth/2013_09_02_10_auth_misc.sql b/sql/updates/auth/2013_09_02_10_auth_misc.sql
new file mode 100644
index 00000000000..a69174d6ca3
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_10_auth_misc.sql
@@ -0,0 +1,21 @@
+/* cs_instance.cpp */
+
+SET @id = 412;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+4;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'instance'),
+(@id+1, 'instance listbinds'),
+(@id+2, 'instance unbind'),
+(@id+3, 'instance stats'),
+(@id+4, 'instance savedata');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+4;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(2, @id+0),
+(2, @id+1),
+(2, @id+2),
+(2, @id+3),
+(2, @id+4);
diff --git a/sql/updates/auth/2013_09_02_11_auth_misc.sql b/sql/updates/auth/2013_09_02_11_auth_misc.sql
new file mode 100644
index 00000000000..04c9b4fb6b4
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_11_auth_misc.sql
@@ -0,0 +1,37 @@
+/* cs_learn.cpp */
+
+SET @id = 417;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+12;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'learn'),
+(@id+1, 'learn all'),
+(@id+2, 'learn all my'),
+(@id+3, 'learn all my class'),
+(@id+4, 'learn all my pettalents'),
+(@id+5, 'learn all my spells'),
+(@id+6, 'learn all my talents'),
+(@id+7, 'learn all gm'),
+(@id+8, 'learn all crafts'),
+(@id+9, 'learn all default'),
+(@id+10, 'learn all lang'),
+(@id+11, 'learn all recipes'),
+(@id+12, 'unlearn');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+12;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5),
+(4, @id+6),
+(4, @id+7),
+(4, @id+8),
+(4, @id+9),
+(4, @id+10),
+(4, @id+11),
+(4, @id+12);
diff --git a/sql/updates/auth/2013_09_02_12_auth_misc.sql b/sql/updates/auth/2013_09_02_12_auth_misc.sql
new file mode 100644
index 00000000000..640f54b03f8
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_12_auth_misc.sql
@@ -0,0 +1,23 @@
+/* cs_lfg.cpp */
+
+SET @id = 430;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+5;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'lfg'),
+(@id+1, 'lfg player'),
+(@id+2, 'lfg group'),
+(@id+3, 'lfg queue'),
+(@id+4, 'lfg clean'),
+(@id+5, 'lfg options');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+5;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(2, @id+0),
+(2, @id+1),
+(2, @id+2),
+(2, @id+3),
+(4, @id+4),
+(4, @id+5);
diff --git a/sql/updates/auth/2013_09_02_13_auth_misc.sql b/sql/updates/auth/2013_09_02_13_auth_misc.sql
new file mode 100644
index 00000000000..d370b3f959d
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_13_auth_misc.sql
@@ -0,0 +1,23 @@
+/* cs_list.cpp */
+
+SET @id = 436;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+5;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'list'),
+(@id+1, 'list creature'),
+(@id+2, 'list item'),
+(@id+3, 'list object'),
+(@id+4, 'list auras'),
+(@id+5, 'list mail');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+5;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5);
diff --git a/sql/updates/auth/2013_09_02_14_auth_misc.sql b/sql/updates/auth/2013_09_02_14_auth_misc.sql
new file mode 100644
index 00000000000..c580639da80
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_14_auth_misc.sql
@@ -0,0 +1,50 @@
+/* cs_lookup.cpp */
+
+SET @id = 442;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+19;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'lookup'),
+(@id+1, 'lookup area'),
+(@id+2, 'lookup creature'),
+(@id+3, 'lookup event'),
+(@id+4, 'lookup faction'),
+(@id+5, 'lookup item'),
+(@id+6, 'lookup itemset'),
+(@id+7, 'lookup object'),
+(@id+8, 'lookup quest'),
+(@id+9, 'lookup player'),
+(@id+10, 'lookup player ip'),
+(@id+11, 'lookup player account'),
+(@id+12, 'lookup player email'),
+(@id+13, 'lookup skill'),
+(@id+14, 'lookup spell'),
+(@id+15, 'lookup spell id'),
+(@id+16, 'lookup taxinode'),
+(@id+17, 'lookup tele'),
+(@id+18, 'lookup title'),
+(@id+19, 'lookup map');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+19;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5),
+(4, @id+6),
+(4, @id+7),
+(4, @id+8),
+(4, @id+9),
+(4, @id+10),
+(4, @id+11),
+(4, @id+12),
+(4, @id+13),
+(4, @id+14),
+(4, @id+15),
+(4, @id+16),
+(4, @id+17),
+(4, @id+19);
diff --git a/sql/updates/auth/2013_09_02_15_auth_misc.sql b/sql/updates/auth/2013_09_02_15_auth_misc.sql
new file mode 100644
index 00000000000..6e5db6e1384
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_15_auth_misc.sql
@@ -0,0 +1,31 @@
+/* cs_message.cpp */
+
+SET @id = 462;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+9;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'announce'),
+(@id+1, 'channel'),
+(@id+2, 'channel set'),
+(@id+3, 'channel set ownership'),
+(@id+4, 'gmannounce'),
+(@id+5, 'gmnameannounce'),
+(@id+6, 'gmnotify'),
+(@id+7, 'nameannounce'),
+(@id+8, 'notify'),
+(@id+9, 'whispers');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+9;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(2, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(2, @id+4),
+(2, @id+5),
+(2, @id+6),
+(2, @id+7),
+(2, @id+8),
+(2, @id+9);
diff --git a/sql/updates/auth/2013_09_02_16_auth_misc.sql b/sql/updates/auth/2013_09_02_16_auth_misc.sql
new file mode 100644
index 00000000000..5d3a7754e86
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_16_auth_misc.sql
@@ -0,0 +1,23 @@
+/* cs_cast.cpp */
+
+SET @id = 263;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+5;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'cast'),
+(@id+1, 'cast back'),
+(@id+2, 'cast dist'),
+(@id+3, 'cast self'),
+(@id+4, 'cast target'),
+(@id+5, 'cast dest');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+5;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5);
diff --git a/sql/updates/auth/2013_09_02_17_auth_misc.sql b/sql/updates/auth/2013_09_02_17_auth_misc.sql
new file mode 100644
index 00000000000..54087e64c22
--- /dev/null
+++ b/sql/updates/auth/2013_09_02_17_auth_misc.sql
@@ -0,0 +1,47 @@
+/* cs_character.cpp */
+
+SET @id = 273;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+17;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0 , 'character'),
+(@id+1 , 'character customize'),
+(@id+2 , 'character changefaction'),
+(@id+3 , 'character changerace'),
+(@id+4 , 'character deleted'),
+-- (@id+5 , 'character deleted delete'),
+(@id+6 , 'character deleted list'),
+(@id+7 , 'character deleted restore'),
+-- (@id+8 , 'character deleted old'),
+-- (@id+9 , 'character erase'),
+(@id+10, 'character level'),
+(@id+11, 'character rename'),
+(@id+12, 'character reputation'),
+(@id+13, 'character titles'),
+(@id+14, 'levelup'),
+(@id+15, 'pdump'),
+(@id+16, 'pdump load'),
+(@id+17, 'pdump write');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+17;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(3, @id+0 ),
+(3, @id+1 ),
+(3, @id+2 ),
+(3, @id+3 ),
+(3, @id+4 ),
+-- (c, @id+5 ),
+(4, @id+6 ),
+(4, @id+7 ),
+-- (c, @id+8 ),
+-- (c, @id+9 ),
+(4, @id+10),
+(3, @id+11),
+(3, @id+12),
+(3, @id+13),
+(4, @id+14),
+(4, @id+15),
+(4, @id+16),
+(4, @id+17);
diff --git a/sql/updates/world/2013_09_01_07_world_trinity_strings.sql b/sql/updates/world/2013_09_01_07_world_trinity_strings.sql
new file mode 100644
index 00000000000..6c69a0a44ff
--- /dev/null
+++ b/sql/updates/world/2013_09_01_07_world_trinity_strings.sql
@@ -0,0 +1,25 @@
+DELETE FROM `trinity_string` WHERE `entry` IN (749, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881);
+INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES
+(749,'│ OS: %s - Latency: %u ms'),
+(872, 'Entered email is not equal to registration email, check input'),
+(873, 'The new emails do not match'),
+(874, 'The email was changed'),
+(875, 'Your email can''t be longer than 64 characters, email not changed!'),
+(876, 'Email not changed (unknown error)!'),
+(877, 'Email change unnecessary, new email is equal to old email'),
+(878, 'Your email is: %s'),
+(879, '│ Registration Email: %s - Email: %s'),
+(880, 'Security Level: %s'),
+(881, 'You require an email to change your password.');
+
+UPDATE `command` SET `help` = 'Syntax: .account password $old_password $new_password $new_password [$email]\r\n\r\nChange your account password. You may need to check the actual security mode to see if email input is necessary.' WHERE name = 'account password';
+UPDATE `command` SET `help` = 'Syntax: .account\r\n\r\nDisplay the access level of your account and the email adress if you possess the necessary permissions.' WHERE name = 'account';
+
+DELETE FROM `command` WHERE `name` = 'account email';
+DELETE FROM `command` WHERE `name` = 'account set sec email';
+DELETE FROM `command` WHERE `name` = 'account set sec regmail';
+
+INSERT INTO `command` (`name`, `permission`, `help`) VALUES
+('account email', 263, 'Syntax: .account email $oldemail $currentpassword $newemail $newemailconfirmation\r\n\r\n Change your account email. You may need to check the actual security mode to see if email input is necessary for password change'),
+('account set sec email', 265, 'Syntax: .account set sec email $accountname $email $emailconfirmation\r\n\r\nSet the email for entered player account.'),
+('account set sec regmail', 266, 'Syntax: .account set sec regmail $account $regmail $regmailconfirmation\r\n\r\nSets the regmail for entered player account.');
diff --git a/sql/updates/world/2013_09_02_01_world_command.sql b/sql/updates/world/2013_09_02_01_world_command.sql
new file mode 100644
index 00000000000..aab76efa562
--- /dev/null
+++ b/sql/updates/world/2013_09_02_01_world_command.sql
@@ -0,0 +1,14 @@
+/* cs_cheat.cpp */
+
+SET @id = 291;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'cheat';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'cheat casttime';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'cheat cooldown';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'cheat explore';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'cheat god';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'cheat power';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'cheat status';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'cheat taxi';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'cheat waterwalk';
diff --git a/sql/updates/world/2013_09_02_02_world_command.sql b/sql/updates/world/2013_09_02_02_world_command.sql
new file mode 100644
index 00000000000..af7b68a87da
--- /dev/null
+++ b/sql/updates/world/2013_09_02_02_world_command.sql
@@ -0,0 +1,46 @@
+/* cs_debug.cpp */
+
+SET @id = 300;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'debug';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'debug anim';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'debug areatriggers';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'debug arena';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'debug bg';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'debug entervehicle';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'debug getitemstate';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'debug getitemvalue';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'debug getvalue';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'debug hostil';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'debug itemexpire';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'debug lootrecipient';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'debug los';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'debug mod32value';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'debug moveflags';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'debug play';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'debug play cinematics';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'debug play movie';
+UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'debug play sound';
+UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'debug send';
+UPDATE `command` SET `permission` = @id+20 WHERE `name` = 'debug send buyerror';
+UPDATE `command` SET `permission` = @id+21 WHERE `name` = 'debug send channelnotify';
+UPDATE `command` SET `permission` = @id+22 WHERE `name` = 'debug send chatmessage';
+UPDATE `command` SET `permission` = @id+23 WHERE `name` = 'debug send equiperror';
+UPDATE `command` SET `permission` = @id+24 WHERE `name` = 'debug send largepacket';
+UPDATE `command` SET `permission` = @id+25 WHERE `name` = 'debug send opcode';
+UPDATE `command` SET `permission` = @id+26 WHERE `name` = 'debug send qinvalidmsg';
+UPDATE `command` SET `permission` = @id+27 WHERE `name` = 'debug send qpartymsg';
+UPDATE `command` SET `permission` = @id+28 WHERE `name` = 'debug send sellerror';
+UPDATE `command` SET `permission` = @id+29 WHERE `name` = 'debug send setphaseshift';
+UPDATE `command` SET `permission` = @id+30 WHERE `name` = 'debug send spellfail';
+UPDATE `command` SET `permission` = @id+31 WHERE `name` = 'debug setaurastate';
+UPDATE `command` SET `permission` = @id+32 WHERE `name` = 'debug setbit';
+UPDATE `command` SET `permission` = @id+33 WHERE `name` = 'debug setitemvalue';
+UPDATE `command` SET `permission` = @id+34 WHERE `name` = 'debug setvalue';
+UPDATE `command` SET `permission` = @id+35 WHERE `name` = 'debug setvid';
+UPDATE `command` SET `permission` = @id+36 WHERE `name` = 'debug spawnvehicle';
+UPDATE `command` SET `permission` = @id+37 WHERE `name` = 'debug threat';
+UPDATE `command` SET `permission` = @id+38 WHERE `name` = 'debug update';
+UPDATE `command` SET `permission` = @id+39 WHERE `name` = 'debug uws';
+UPDATE `command` SET `permission` = @id+40 WHERE `name` = 'wpgps';
diff --git a/sql/updates/world/2013_09_02_03_world_command.sql b/sql/updates/world/2013_09_02_03_world_command.sql
new file mode 100644
index 00000000000..3ba92cc30e7
--- /dev/null
+++ b/sql/updates/world/2013_09_02_03_world_command.sql
@@ -0,0 +1,12 @@
+/* cs_deserter.cpp */
+
+SET @id = 341;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'deserter';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'deserter bg';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'deserter bg add';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'deserter bg remove';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'deserter instance';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'deserter instance add';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'deserter instance remove';
diff --git a/sql/updates/world/2013_09_02_04_world_command.sql b/sql/updates/world/2013_09_02_04_world_command.sql
new file mode 100644
index 00000000000..4fd1e0db8e2
--- /dev/null
+++ b/sql/updates/world/2013_09_02_04_world_command.sql
@@ -0,0 +1,24 @@
+/* cs_disable.cpp */
+
+SET @id = 348;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'disable';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'disable add';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'disable add achievement_criteria';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'disable add battleground';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'disable add map';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'disable add mmap';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'disable add outdoorpvp';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'disable add quest';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'disable add spell';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'disable add vmap';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'disable remove';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'disable remove achievement_criteria';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'disable remove battleground';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'disable remove map';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'disable remove mmap';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'disable remove outdoorpvp';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'disable remove quest';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'disable remove spell';
+UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'disable remove vmap';
diff --git a/sql/updates/world/2013_09_02_05_world_command.sql b/sql/updates/world/2013_09_02_05_world_command.sql
new file mode 100644
index 00000000000..db279dd6f60
--- /dev/null
+++ b/sql/updates/world/2013_09_02_05_world_command.sql
@@ -0,0 +1,9 @@
+/* cs_event.cpp */
+
+SET @id = 367;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'event';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'event activelist';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'event start';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'event stop';
diff --git a/sql/updates/world/2013_09_02_06_world_command.sql b/sql/updates/world/2013_09_02_06_world_command.sql
new file mode 100644
index 00000000000..fe033e544ea
--- /dev/null
+++ b/sql/updates/world/2013_09_02_06_world_command.sql
@@ -0,0 +1,11 @@
+/* cs_gm.cpp */
+
+SET @id = 371;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'gm';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'gm chat';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'gm fly';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'gm ingame';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'gm list';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'gm visible';
diff --git a/sql/updates/world/2013_09_02_07_world_command.sql b/sql/updates/world/2013_09_02_07_world_command.sql
new file mode 100644
index 00000000000..4f73ee4e439
--- /dev/null
+++ b/sql/updates/world/2013_09_02_07_world_command.sql
@@ -0,0 +1,15 @@
+/* cs_go.cpp */
+
+SET @id = 371;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'go';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'go creature';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'go graveyard';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'go grid';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'go object';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'go taxinode';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'go ticket';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'go trigger';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'go xyz';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'go zonexy';
diff --git a/sql/updates/world/2013_09_02_08_world_command.sql b/sql/updates/world/2013_09_02_08_world_command.sql
new file mode 100644
index 00000000000..5190a8f8a61
--- /dev/null
+++ b/sql/updates/world/2013_09_02_08_world_command.sql
@@ -0,0 +1,18 @@
+/* cs_gobject.cpp */
+
+SET @id = 371;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'gobject';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'gobject activate';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'gobject add';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'gobject add temp';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'gobject delete';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'gobject info';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'gobject move';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'gobject near';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'gobject set';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'gobject set phase';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'gobject set state';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'gobject target';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'gobject turn';
diff --git a/sql/updates/world/2013_09_02_09_world_command.sql b/sql/updates/world/2013_09_02_09_world_command.sql
new file mode 100644
index 00000000000..e40ec5a355a
--- /dev/null
+++ b/sql/updates/world/2013_09_02_09_world_command.sql
@@ -0,0 +1,12 @@
+/* cs_guild.cpp */
+
+SET @id = 401;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'guild';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'guild create';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'guild delete';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'guild invite';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'guild uninvite';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'guild rank';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'guild rename';
diff --git a/sql/updates/world/2013_09_02_10_world_command.sql b/sql/updates/world/2013_09_02_10_world_command.sql
new file mode 100644
index 00000000000..f038adf1b30
--- /dev/null
+++ b/sql/updates/world/2013_09_02_10_world_command.sql
@@ -0,0 +1,9 @@
+/* cs_honor.cpp */
+
+SET @id = 408;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'honor';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'honor add';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'honor add kill';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'honor update';
diff --git a/sql/updates/world/2013_09_02_11_world_command.sql b/sql/updates/world/2013_09_02_11_world_command.sql
new file mode 100644
index 00000000000..c134fb703e6
--- /dev/null
+++ b/sql/updates/world/2013_09_02_11_world_command.sql
@@ -0,0 +1,10 @@
+/* cs_instance.cpp */
+
+SET @id = 408;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'instance';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'instance listbinds';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'instance unbind';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'instance stats';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'instance savedata';
diff --git a/sql/updates/world/2013_09_02_12_world_command.sql b/sql/updates/world/2013_09_02_12_world_command.sql
new file mode 100644
index 00000000000..7320b87f823
--- /dev/null
+++ b/sql/updates/world/2013_09_02_12_world_command.sql
@@ -0,0 +1,18 @@
+/* cs_learn.cpp */
+
+SET @id = 417;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'learn';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'learn all';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'learn all my';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'learn all my class';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'learn all my pettalents';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'learn all my spells';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'learn all my talents';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'learn all gm';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'learn all crafts';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'learn all default';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'learn all lang';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'learn all recipes';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'unlearn';
diff --git a/sql/updates/world/2013_09_02_13_world_command.sql b/sql/updates/world/2013_09_02_13_world_command.sql
new file mode 100644
index 00000000000..6ecc3b8374f
--- /dev/null
+++ b/sql/updates/world/2013_09_02_13_world_command.sql
@@ -0,0 +1,11 @@
+/* cs_lfg.cpp */
+
+SET @id = 430;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'lfg';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'lfg player';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'lfg group';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'lfg queue';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'lfg clean';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'lfg options';
diff --git a/sql/updates/world/2013_09_02_14_world_command.sql b/sql/updates/world/2013_09_02_14_world_command.sql
new file mode 100644
index 00000000000..4d0b5d35d6f
--- /dev/null
+++ b/sql/updates/world/2013_09_02_14_world_command.sql
@@ -0,0 +1,11 @@
+/* cs_list.cpp */
+
+SET @id = 436;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'list';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'list creature';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'list item';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'list object';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'list auras';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'list mail';
diff --git a/sql/updates/world/2013_09_02_15_world_command.sql b/sql/updates/world/2013_09_02_15_world_command.sql
new file mode 100644
index 00000000000..0ec5002b61c
--- /dev/null
+++ b/sql/updates/world/2013_09_02_15_world_command.sql
@@ -0,0 +1,25 @@
+/* cs_lookup.cpp */
+
+SET @id = 442;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'lookup';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'lookup area';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'lookup creature';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'lookup event';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'lookup faction';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'lookup item';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'lookup itemset';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'lookup object';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'lookup quest';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'lookup player';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'lookup player ip';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'lookup player account';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'lookup player email';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'lookup skill';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'lookup spell';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'lookup spell id';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'lookup taxinode';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'lookup tele';
+UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'lookup title';
+UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'lookup map';
diff --git a/sql/updates/world/2013_09_02_16_world_command.sql b/sql/updates/world/2013_09_02_16_world_command.sql
new file mode 100644
index 00000000000..f9930afd213
--- /dev/null
+++ b/sql/updates/world/2013_09_02_16_world_command.sql
@@ -0,0 +1,15 @@
+/* cs_message.cpp */
+
+SET @id = 462;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'announce';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'channel';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'channel set';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'channel set ownership';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'gmannounce';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'gmnameannounce';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'gmnotify';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'nameannounce';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'notify';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'whispers';
diff --git a/sql/updates/world/2013_09_02_17_world_command.sql b/sql/updates/world/2013_09_02_17_world_command.sql
new file mode 100644
index 00000000000..1bbb062626d
--- /dev/null
+++ b/sql/updates/world/2013_09_02_17_world_command.sql
@@ -0,0 +1,11 @@
+/* cs_cast.cpp */
+
+SET @id = 263;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'cast';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'cast back';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'cast dist';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'cast self';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'cast target';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'cast dest';
diff --git a/sql/updates/world/2013_09_02_18_world_command.sql b/sql/updates/world/2013_09_02_18_world_command.sql
new file mode 100644
index 00000000000..f9923e7d755
--- /dev/null
+++ b/sql/updates/world/2013_09_02_18_world_command.sql
@@ -0,0 +1,23 @@
+/* cs_character.cpp */
+
+SET @id = 273;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'character';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'character customize';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'character changefaction';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'character changerace';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'character deleted';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'character deleted delete';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'character deleted list';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'character deleted restore';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'character deleted old';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'character erase';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'character level';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'character rename';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'character reputation';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'character titles';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'levelup';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'pdump';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'pdump load';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'pdump write';
diff --git a/sql/updates/world/2013_09_02_19_world_spelldifficulty_dbc.sql b/sql/updates/world/2013_09_02_19_world_spelldifficulty_dbc.sql
new file mode 100644
index 00000000000..5c8f810da55
--- /dev/null
+++ b/sql/updates/world/2013_09_02_19_world_spelldifficulty_dbc.sql
@@ -0,0 +1,7 @@
+DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (51849, 50840, 50834, 50830, 50831);
+INSERT INTO `spelldifficulty_dbc`(`id`,`spellid0`,`spellid1`) VALUES
+(51849, 51849, 59861),
+(50840, 50840, 59848),
+(50834, 50834, 59846),
+(50830, 50830, 59844),
+(50831, 50831, 59845);
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