aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/auth/2013_09_10_00_auth_misc.sql25
-rw-r--r--sql/updates/auth/2013_09_10_00_auth_misc_434.sql15
-rw-r--r--sql/updates/auth/2013_09_10_01_auth_misc.sql19
-rw-r--r--sql/updates/auth/2013_09_10_02_auth_misc.sql21
-rw-r--r--sql/updates/auth/2013_09_10_03_auth_misc.sql107
-rw-r--r--sql/updates/auth/2013_09_10_04_auth_misc.sql23
-rw-r--r--sql/updates/auth/2013_09_10_05_auth_misc.sql68
-rw-r--r--sql/updates/auth/2013_09_10_06_auth_misc.sql75
-rw-r--r--sql/updates/auth/2013_09_10_07_auth_misc.sql21
-rw-r--r--sql/updates/auth/2013_09_10_08_auth_misc.sql217
-rw-r--r--sql/updates/auth/2013_09_10_09_auth_misc.sql27
-rw-r--r--sql/updates/auth/2013_09_10_10_auth_misc.sql46
-rw-r--r--sql/updates/auth/2013_09_10_11_auth_misc.sql21
-rw-r--r--sql/updates/auth/2013_09_10_12_auth_misc.sql49
-rw-r--r--sql/updates/auth/2013_09_10_13_auth_misc.sql39
-rw-r--r--sql/updates/auth/2013_09_10_14_auth_misc.sql4
-rw-r--r--sql/updates/auth/2013_09_10_15_auth_misc.sql92
-rw-r--r--sql/updates/world/2013_08_30_02_world_command.sql30
-rw-r--r--sql/updates/world/2013_09_09_00_world_sai.sql15
-rw-r--r--sql/updates/world/2013_09_10_00_world_command_434.sql7
-rw-r--r--sql/updates/world/2013_09_10_00_world_conditions.sql8
-rw-r--r--sql/updates/world/2013_09_10_01_world_command.sql15
-rw-r--r--sql/updates/world/2013_09_10_02_world_command.sql9
-rw-r--r--sql/updates/world/2013_09_10_03_world_sai.sql136
-rw-r--r--sql/updates/world/2013_09_10_04_world_command.sql10
-rw-r--r--sql/updates/world/2013_09_10_05_world_command.sql53
-rw-r--r--sql/updates/world/2013_09_10_06_world_command.sql11
-rw-r--r--sql/updates/world/2013_09_10_07_world_command.sql33
-rw-r--r--sql/updates/world/2013_09_10_08_world_command.sql37
-rw-r--r--sql/updates/world/2013_09_10_09_world_command.sql10
-rw-r--r--sql/updates/world/2013_09_10_10_world_command.sql108
-rw-r--r--sql/updates/world/2013_09_10_11_world_command.sql13
-rw-r--r--sql/updates/world/2013_09_10_12_world_command.sql24
-rw-r--r--sql/updates/world/2013_09_10_13_world_command.sql10
-rw-r--r--sql/updates/world/2013_09_10_14_world_command.sql24
-rw-r--r--sql/updates/world/2013_09_10_15_world_command.sql19
-rw-r--r--sql/updates/world/2013_09_10_16_world_command.sql2
-rw-r--r--sql/updates/world/2013_09_10_17_world_command.sql16
-rw-r--r--sql/updates/world/2013_09_10_18_world_command.sql9
-rw-r--r--sql/updates/world/2013_09_10_19_world_command.sql66
-rw-r--r--sql/updates/world/2013_09_10_20_world_creature_template.sql1
-rw-r--r--src/server/game/Accounts/RBAC.h1759
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp6
-rw-r--r--src/server/scripts/Commands/CMakeLists.txt104
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp2
-rw-r--r--src/server/scripts/Commands/cs_group.cpp338
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp760
-rw-r--r--src/server/scripts/Commands/cs_mmaps.cpp16
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp64
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp92
-rw-r--r--src/server/scripts/Commands/cs_pet.cpp190
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp14
-rw-r--r--src/server/scripts/Commands/cs_rbac.cpp4
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp206
-rw-r--r--src/server/scripts/Commands/cs_reset.cpp20
-rw-r--r--src/server/scripts/Commands/cs_send.cpp289
-rw-r--r--src/server/scripts/Commands/cs_server.cpp60
-rw-r--r--src/server/scripts/Commands/cs_tele.cpp16
-rw-r--r--src/server/scripts/Commands/cs_ticket.cpp44
-rw-r--r--src/server/scripts/Commands/cs_titles.cpp18
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp20
61 files changed, 3713 insertions, 1844 deletions
diff --git a/sql/updates/auth/2013_09_10_00_auth_misc.sql b/sql/updates/auth/2013_09_10_00_auth_misc.sql
new file mode 100644
index 00000000000..f62ecd83cab
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_00_auth_misc.sql
@@ -0,0 +1,25 @@
+/* cs_group.cpp */
+
+SET @id = 472;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+6;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0 , 'group'),
+(@id+1 , 'group leader'),
+(@id+2 , 'group disband'),
+(@id+3 , 'group remove'),
+(@id+4 , 'group join'),
+(@id+5 , 'group list'),
+(@id+6 , 'group summon');
+
+-- 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_10_00_auth_misc_434.sql b/sql/updates/auth/2013_09_10_00_auth_misc_434.sql
new file mode 100644
index 00000000000..73abc02f88a
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_00_auth_misc_434.sql
@@ -0,0 +1,15 @@
+/* cs_modify.cpp & cs_debug.cpp only 4.3.4 */
+
+SET @id = 775;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+13;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'modify currency'),
+(@id+1, 'debug phase');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+13;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(3, @id+0),
+(4, @id+1);
diff --git a/sql/updates/auth/2013_09_10_01_auth_misc.sql b/sql/updates/auth/2013_09_10_01_auth_misc.sql
new file mode 100644
index 00000000000..2dbfbcaaf46
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_01_auth_misc.sql
@@ -0,0 +1,19 @@
+/* cs_pet.cpp */
+
+SET @id = 479;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+3;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0 , 'pet'),
+(@id+1 , 'pet create'),
+(@id+2 , 'pet learn'),
+(@id+3 , 'pet unlearn');
+
+-- 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
+(3, @id+0),
+(3, @id+1),
+(3, @id+2),
+(3, @id+3);
diff --git a/sql/updates/auth/2013_09_10_02_auth_misc.sql b/sql/updates/auth/2013_09_10_02_auth_misc.sql
new file mode 100644
index 00000000000..2049cda2ffc
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_02_auth_misc.sql
@@ -0,0 +1,21 @@
+/* cs_send.cpp */
+
+SET @id = 483;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+4;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0 , 'send'),
+(@id+1 , 'send items'),
+(@id+2 , 'send mail'),
+(@id+3 , 'send message'),
+(@id+4 , 'send money');
+
+-- 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),
+(3, @id+2),
+(3, @id+3),
+(3, @id+4);
diff --git a/sql/updates/auth/2013_09_10_03_auth_misc.sql b/sql/updates/auth/2013_09_10_03_auth_misc.sql
new file mode 100644
index 00000000000..553830f6ecb
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_03_auth_misc.sql
@@ -0,0 +1,107 @@
+/* cs_misc.cpp */
+
+SET @id = 488;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+47;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'additem'),
+(@id+1, 'additemset'),
+(@id+2, 'appear'),
+(@id+3, 'aura'),
+(@id+4, 'bank'),
+(@id+5, 'bindsight'),
+(@id+6, 'combatstop'),
+(@id+7, 'cometome'),
+(@id+8, 'commands'),
+(@id+9, 'cooldown'),
+(@id+10, 'damage'),
+(@id+11, 'dev'),
+(@id+12, 'die'),
+(@id+13, 'dismount'),
+(@id+14, 'distance'),
+(@id+15, 'flusharenapoints'),
+(@id+16, 'freeze'),
+(@id+17, 'gps'),
+(@id+18, 'guid'),
+(@id+19, 'help'),
+(@id+20, 'hidearea'),
+(@id+21, 'itemmove'),
+(@id+22, 'kick'),
+(@id+23, 'linkgrave'),
+(@id+24, 'listfreeze'),
+(@id+25, 'maxskill'),
+(@id+26, 'movegens'),
+(@id+27, 'mute'),
+(@id+28, 'neargrave'),
+(@id+29, 'pinfo'),
+(@id+30, 'playall'),
+(@id+31, 'possess'),
+(@id+32, 'recall'),
+(@id+33, 'repairitems'),
+(@id+34, 'respawn'),
+(@id+35, 'revive'),
+(@id+36, 'saveall'),
+(@id+37, 'save'),
+(@id+38, 'setskill'),
+(@id+39, 'showarea'),
+(@id+40, 'summon'),
+(@id+41, 'unaura'),
+(@id+42, 'unbindsight'),
+(@id+43, 'unfreeze'),
+(@id+44, 'unmute'),
+(@id+45, 'unpossess'),
+(@id+46, 'unstuck'),
+(@id+47, 'wchange');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+47;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(4, @id+0),
+(4, @id+1),
+(2, @id+2),
+(4, @id+3),
+(4, @id+4),
+(4, @id+5),
+(3, @id+6),
+(4, @id+7),
+(1, @id+8),
+(4, @id+9),
+(4, @id+10),
+(4, @id+11),
+(4, @id+12),
+(1, @id+13),
+(4, @id+14),
+(4, @id+15),
+(2, @id+16),
+(4, @id+17),
+(3, @id+18),
+(1, @id+19),
+(4, @id+20),
+(3, @id+21),
+(3, @id+22),
+(4, @id+23),
+(2, @id+24),
+(4, @id+25),
+(4, @id+26),
+(2, @id+27),
+(4, @id+28),
+(3, @id+29),
+(3, @id+30),
+(4, @id+31),
+(2, @id+32),
+(3, @id+33),
+(4, @id+34),
+(4, @id+35),
+(2, @id+36),
+(1, @id+37),
+(4, @id+38),
+(4, @id+39),
+(2, @id+40),
+(4, @id+41),
+(4, @id+42),
+(2, @id+43),
+(2, @id+44),
+(4, @id+45),
+(1, @id+46),
+(4, @id+47);
diff --git a/sql/updates/auth/2013_09_10_04_auth_misc.sql b/sql/updates/auth/2013_09_10_04_auth_misc.sql
new file mode 100644
index 00000000000..9b1f48f2914
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_04_auth_misc.sql
@@ -0,0 +1,23 @@
+/* cs_mmaps.cpp */
+
+SET @id = 536;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+5;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'mmap'),
+(@id+1, 'mmap loadedtiles'),
+(@id+2, 'mmap loc'),
+(@id+3, 'mmap path'),
+(@id+4, 'mmap stats'),
+(@id+5, 'mmap testarea');
+
+-- 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_10_05_auth_misc.sql b/sql/updates/auth/2013_09_10_05_auth_misc.sql
new file mode 100644
index 00000000000..607821854d3
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_05_auth_misc.sql
@@ -0,0 +1,68 @@
+/* cs_modify.cpp */
+
+SET @id = 542;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+27;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'morph'),
+(@id+1, 'demorph'),
+(@id+2, 'modify'),
+(@id+3, 'modify arenapoints'),
+(@id+4, 'modify bit'),
+(@id+5, 'modify drunk'),
+(@id+6, 'modify energy'),
+(@id+7, 'modify faction'),
+(@id+8, 'modify gender'),
+(@id+9, 'modify honor'),
+(@id+10, 'modify hp'),
+(@id+11, 'modify mana'),
+(@id+12, 'modify money'),
+(@id+13, 'modify mount'),
+(@id+14, 'modify phase'),
+(@id+15, 'modify rage'),
+(@id+16, 'modify reputation'),
+(@id+17, 'modify runicpower'),
+(@id+18, 'modify scale'),
+(@id+19, 'modify speed'),
+(@id+20, 'modify speed all'),
+(@id+21, 'modify speed backwalk'),
+(@id+22, 'modify speed fly'),
+(@id+23, 'modify speed walk'),
+(@id+24, 'modify speed swim'),
+(@id+25, 'modify spell'),
+(@id+26, 'modify standstate'),
+(@id+27, 'modify talentpoints');
+
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+27;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(3, @id+0),
+(3, @id+1),
+(2, @id+2),
+(2, @id+3),
+(2, @id+4),
+(2, @id+5),
+(2, @id+6),
+(2, @id+7),
+(3, @id+8),
+(2, @id+9),
+(2, @id+10),
+(2, @id+11),
+(2, @id+12),
+(2, @id+13),
+(4, @id+14),
+(2, @id+15),
+(3, @id+16),
+(2, @id+17),
+(2, @id+18),
+(2, @id+19),
+(2, @id+20),
+(2, @id+21),
+(2, @id+22),
+(2, @id+23),
+(2, @id+24),
+(2, @id+25),
+(3, @id+26),
+(2, @id+27);
diff --git a/sql/updates/auth/2013_09_10_06_auth_misc.sql b/sql/updates/auth/2013_09_10_06_auth_misc.sql
new file mode 100644
index 00000000000..e83e5e3cdf4
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_06_auth_misc.sql
@@ -0,0 +1,75 @@
+/* cs_npc.cpp */
+
+SET @id = 570;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+31;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'npc'),
+(@id+1, 'npc add'),
+(@id+2, 'npc add formation'),
+(@id+3, 'npc add item'),
+(@id+4, 'npc add move'),
+(@id+5, 'npc add temp'),
+(@id+6, 'npc add delete'),
+(@id+7, 'npc add delete item'),
+(@id+8, 'npc add follow'),
+(@id+9, 'npc add follow stop'),
+(@id+10, 'npc set'),
+(@id+11, 'npc set allowmove'),
+(@id+12, 'npc set entry'),
+(@id+13, 'npc set factionid'),
+(@id+14, 'npc set flag'),
+(@id+15, 'npc set level'),
+(@id+16, 'npc set link'),
+(@id+17, 'npc set model'),
+(@id+18, 'npc set movetype'),
+(@id+19, 'npc set phase'),
+(@id+20, 'npc set spawndist'),
+(@id+21, 'npc set spawntime'),
+(@id+22, 'npc set data'),
+(@id+23, 'npc info'),
+(@id+24, 'npc near'),
+(@id+25, 'npc move'),
+(@id+26, 'npc playemote'),
+(@id+27, 'npc say'),
+(@id+28, 'npc textemote'),
+(@id+29, 'npc whisper'),
+(@id+30, 'npc yell'),
+(@id+31, 'npc tame');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+31;
+INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES
+(2, @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),
+(4, @id+11),
+(4, @id+12),
+(3, @id+13),
+(3, @id+14),
+(3, @id+15),
+(3, @id+16),
+(3, @id+17),
+(3, @id+18),
+(3, @id+19),
+(3, @id+20),
+(3, @id+21),
+(4, @id+22),
+(4, @id+23),
+(3, @id+24),
+(3, @id+25),
+(4, @id+26),
+(2, @id+27),
+(2, @id+28),
+(2, @id+29),
+(2, @id+30),
+(3, @id+31);
diff --git a/sql/updates/auth/2013_09_10_07_auth_misc.sql b/sql/updates/auth/2013_09_10_07_auth_misc.sql
new file mode 100644
index 00000000000..9988220d878
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_07_auth_misc.sql
@@ -0,0 +1,21 @@
+/* cs_quest.cpp */
+
+SET @id = 602;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+4;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'quest'),
+(@id+1, 'quest add'),
+(@id+2, 'quest complete'),
+(@id+3, 'quest remove'),
+(@id+4, 'quest reward');
+
+-- 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
+(4, @id+0),
+(4, @id+1),
+(4, @id+2),
+(4, @id+3),
+(4, @id+4);
diff --git a/sql/updates/auth/2013_09_10_08_auth_misc.sql b/sql/updates/auth/2013_09_10_08_auth_misc.sql
new file mode 100644
index 00000000000..c735009b7da
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_08_auth_misc.sql
@@ -0,0 +1,217 @@
+/* cs_reload.cpp */
+
+SET @id = 607;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+102;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'reload'),
+(@id+1, 'reload access_requirement'),
+(@id+2, 'reload achievement_criteria_data'),
+(@id+3, 'reload achievement_reward'),
+(@id+4, 'reload all'),
+(@id+5, 'reload all achievement'),
+(@id+6, 'reload all area'),
+(@id+7, 'reload all eventai'),
+(@id+8, 'reload all gossips'),
+(@id+9, 'reload all item'),
+(@id+10, 'reload all locales'),
+(@id+11, 'reload all loot'),
+(@id+12, 'reload all npc'),
+(@id+13, 'reload all quest'),
+(@id+14, 'reload all scripts'),
+(@id+15, 'reload all spell'),
+(@id+16, 'reload areatrigger_involvedrelation'),
+(@id+17, 'reload areatrigger_tavern'),
+(@id+18, 'reload areatrigger_teleport'),
+(@id+19, 'reload auctions'),
+(@id+20, 'reload autobroadcast'),
+(@id+21, 'reload command'),
+(@id+22, 'reload conditions'),
+(@id+23, 'reload config'),
+(@id+24, 'reload creature_text'),
+(@id+25, 'reload creature_ai_scripts'),
+(@id+26, 'reload creature_ai_texts'),
+(@id+27, 'reload creature_questender'),
+(@id+28, 'reload creature_linked_respawn'),
+(@id+29, 'reload creature_loot_template'),
+(@id+30, 'reload creature_onkill_reputation'),
+(@id+31, 'reload creature_queststarter'),
+(@id+32, 'reload creature_summon_groups'),
+(@id+33, 'reload creature_template'),
+(@id+34, 'reload disables'),
+(@id+35, 'reload disenchant_loot_template'),
+(@id+36, 'reload event_scripts'),
+(@id+37, 'reload fishing_loot_template'),
+(@id+38, 'reload game_graveyard_zone'),
+(@id+39, 'reload game_tele'),
+(@id+40, 'reload gameobject_questender'),
+(@id+41, 'reload gameobject_loot_template'),
+(@id+42, 'reload gameobject_queststarter'),
+(@id+43, 'reload gm_tickets'),
+(@id+44, 'reload gossip_menu'),
+(@id+45, 'reload gossip_menu_option'),
+(@id+46, 'reload item_enchantment_template'),
+(@id+47, 'reload item_loot_template'),
+(@id+48, 'reload item_set_names'),
+(@id+49, 'reload lfg_dungeon_rewards'),
+(@id+50, 'reload locales_achievement_reward'),
+(@id+51, 'reload locales_creature'),
+(@id+52, 'reload locales_creature_text'),
+(@id+53, 'reload locales_gameobject'),
+(@id+54, 'reload locales_gossip_menu_option'),
+(@id+55, 'reload locales_item'),
+(@id+56, 'reload locales_item_set_name'),
+(@id+57, 'reload locales_npc_text'),
+(@id+58, 'reload locales_page_text'),
+(@id+59, 'reload locales_points_of_interest'),
+(@id+60, 'reload locales_quest'),
+(@id+61, 'reload mail_level_reward'),
+(@id+62, 'reload mail_loot_template'),
+(@id+63, 'reload milling_loot_template'),
+(@id+64, 'reload npc_spellclick_spells'),
+(@id+65, 'reload npc_trainer'),
+(@id+66, 'reload npc_vendor'),
+(@id+67, 'reload page_text'),
+(@id+68, 'reload pickpocketing_loot_template'),
+(@id+69, 'reload points_of_interest'),
+(@id+70, 'reload prospecting_loot_template'),
+(@id+71, 'reload quest_poi'),
+(@id+72, 'reload quest_template'),
+(@id+73, 'reload rbac'),
+(@id+74, 'reload reference_loot_template'),
+(@id+75, 'reload reserved_name'),
+(@id+76, 'reload reputation_reward_rate'),
+(@id+77, 'reload reputation_spillover_template'),
+(@id+78, 'reload skill_discovery_template'),
+(@id+79, 'reload skill_extra_item_template'),
+(@id+80, 'reload skill_fishing_base_level'),
+(@id+81, 'reload skinning_loot_template'),
+(@id+82, 'reload smart_scripts'),
+(@id+83, 'reload spell_required'),
+(@id+84, 'reload spell_area'),
+(@id+85, 'reload spell_bonus_data'),
+(@id+86, 'reload spell_group'),
+(@id+87, 'reload spell_learn_spell'),
+(@id+88, 'reload spell_loot_template'),
+(@id+89, 'reload spell_linked_spell'),
+(@id+90, 'reload spell_pet_auras'),
+(@id+91, 'reload spell_proc_event'),
+(@id+92, 'reload spell_proc'),
+(@id+93, 'reload spell_scripts'),
+(@id+94, 'reload spell_target_position'),
+(@id+95, 'reload spell_threats'),
+(@id+96, 'reload spell_group_stack_rules'),
+(@id+97, 'reload trinity_string'),
+(@id+98, 'reload warden_action'),
+(@id+99, 'reload waypoint_scripts'),
+(@id+100, 'reload waypoint_data'),
+(@id+101, 'reload vehicle_accessory'),
+(@id+102, 'reload vehicle_template_accessory');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+102;
+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),
+(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),
+(4, @id+41),
+(4, @id+42),
+(4, @id+43),
+(4, @id+44),
+(4, @id+45),
+(4, @id+46),
+(4, @id+47),
+(4, @id+48),
+(4, @id+49),
+(4, @id+50),
+(4, @id+51),
+(4, @id+52),
+(4, @id+53),
+(4, @id+54),
+(4, @id+55),
+(4, @id+56),
+(4, @id+57),
+(4, @id+58),
+(4, @id+59),
+(4, @id+60),
+(4, @id+61),
+(4, @id+62),
+(4, @id+63),
+(4, @id+64),
+(4, @id+65),
+(4, @id+66),
+(4, @id+67),
+(4, @id+68),
+(4, @id+69),
+(4, @id+70),
+(4, @id+71),
+(4, @id+72),
+(4, @id+73),
+(4, @id+74),
+(4, @id+75),
+(4, @id+76),
+(4, @id+77),
+(4, @id+78),
+(4, @id+79),
+(4, @id+80),
+(4, @id+81),
+(4, @id+82),
+(4, @id+83),
+(4, @id+84),
+(4, @id+85),
+(4, @id+86),
+(4, @id+87),
+(4, @id+88),
+(4, @id+89),
+(4, @id+90),
+(4, @id+91),
+(4, @id+92),
+(4, @id+93),
+(4, @id+94),
+(4, @id+95),
+(4, @id+96),
+(4, @id+97),
+(4, @id+98),
+(4, @id+99),
+(4, @id+100),
+(4, @id+101),
+(4, @id+102);
diff --git a/sql/updates/auth/2013_09_10_09_auth_misc.sql b/sql/updates/auth/2013_09_10_09_auth_misc.sql
new file mode 100644
index 00000000000..8e0e340bfec
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_09_auth_misc.sql
@@ -0,0 +1,27 @@
+/* cs_reset.cpp */
+
+SET @id = 710;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+7;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'reset'),
+(@id+1, 'reset achievements'),
+(@id+2, 'reset honor'),
+(@id+3, 'reset level'),
+(@id+4, 'reset spells'),
+(@id+5, 'reset stats'),
+(@id+6, 'reset talents'),
+(@id+7, 'reset all');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+7;
+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);
diff --git a/sql/updates/auth/2013_09_10_10_auth_misc.sql b/sql/updates/auth/2013_09_10_10_auth_misc.sql
new file mode 100644
index 00000000000..a0587f75bf4
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_10_auth_misc.sql
@@ -0,0 +1,46 @@
+/* cs_server.cpp */
+
+SET @id = 718;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+18;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'server'),
+(@id+1, 'server corpses'),
+(@id+2, 'server exit'),
+(@id+3, 'server idlerestart'),
+(@id+4, 'server idlerestart cancel'),
+(@id+5, 'server idleshutdown'),
+(@id+6, 'server idleshutdown cancel'),
+(@id+7, 'server info'),
+(@id+8, 'server plimit'),
+(@id+9, 'server restart'),
+(@id+10, 'server restart cancel'),
+(@id+11, 'server set'),
+(@id+12, 'server set closed'),
+(@id+13, 'server set difftime'),
+(@id+14, 'server set loglevel'),
+(@id+15, 'server set motd'),
+(@id+16, 'server shutdown'),
+(@id+17, 'server shutdown cancel'),
+(@id+18, 'server motd');
+
+-- 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+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+15),
+(4, @id+16),
+(4, @id+17),
+(4, @id+18);
diff --git a/sql/updates/auth/2013_09_10_11_auth_misc.sql b/sql/updates/auth/2013_09_10_11_auth_misc.sql
new file mode 100644
index 00000000000..e92c1cb3fae
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_11_auth_misc.sql
@@ -0,0 +1,21 @@
+/* cs_tele.cpp */
+
+SET @id = 737;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+4;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'tele'),
+(@id+1, 'tele add'),
+(@id+2, 'tele del'),
+(@id+3, 'tele name'),
+(@id+4, 'tele group');
+
+-- 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),
+(4, @id+1),
+(4, @id+2),
+(2, @id+3),
+(2, @id+4);
diff --git a/sql/updates/auth/2013_09_10_12_auth_misc.sql b/sql/updates/auth/2013_09_10_12_auth_misc.sql
new file mode 100644
index 00000000000..fbf78e175c6
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_12_auth_misc.sql
@@ -0,0 +1,49 @@
+/* cs_ticket.cpp */
+
+SET @id = 742;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+18;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'ticket'),
+(@id+1, 'ticket assign'),
+(@id+2, 'ticket close'),
+(@id+3, 'ticket closedlist'),
+(@id+4, 'ticket comment'),
+(@id+5, 'ticket complete'),
+(@id+6, 'ticket delete'),
+(@id+7, 'ticket escalate'),
+(@id+8, 'ticket escalatedlist'),
+(@id+9, 'ticket list'),
+(@id+10, 'ticket onlinelist'),
+(@id+11, 'ticket reset'),
+(@id+12, 'ticket response'),
+(@id+13, 'ticket response append'),
+(@id+14, 'ticket response appendln'),
+(@id+15, 'ticket togglesystem'),
+(@id+16, 'ticket unassign'),
+(@id+17, 'ticket viewid'),
+(@id+18, 'ticket viewname');
+
+-- 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
+(2, @id+0),
+(3, @id+1),
+(2, @id+2),
+(2, @id+3),
+(2, @id+4),
+(2, @id+5),
+(4, @id+6),
+(2, @id+7),
+(3, @id+8),
+(2, @id+9),
+(2, @id+10),
+(4, @id+11),
+(2, @id+12),
+(2, @id+13),
+(2, @id+14),
+(4, @id+15),
+(3, @id+16),
+(2, @id+17),
+(2, @id+18);
diff --git a/sql/updates/auth/2013_09_10_13_auth_misc.sql b/sql/updates/auth/2013_09_10_13_auth_misc.sql
new file mode 100644
index 00000000000..becedad564d
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_13_auth_misc.sql
@@ -0,0 +1,39 @@
+/* cs_titles.cpp & cs_wp.cpp */
+
+SET @id = 761;
+
+-- Add new permissions
+DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+13;
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(@id+0, 'titles'),
+(@id+1, 'titles add'),
+(@id+2, 'titles current'),
+(@id+3, 'titles remove'),
+(@id+4, 'titles set'),
+(@id+5, 'titles set mask'),
+(@id+6, 'wp'),
+(@id+7, 'wp add'),
+(@id+8, 'wp event'),
+(@id+9, 'wp load'),
+(@id+10, 'wp modify'),
+(@id+11, 'wp unload'),
+(@id+12, 'wp reload'),
+(@id+13, 'wp show');
+
+-- Add permissions to "corresponding Commands Role"
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+13;
+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),
+(4, @id+12),
+(3, @id+13);
diff --git a/sql/updates/auth/2013_09_10_14_auth_misc.sql b/sql/updates/auth/2013_09_10_14_auth_misc.sql
new file mode 100644
index 00000000000..0f24f96ca99
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_14_auth_misc.sql
@@ -0,0 +1,4 @@
+-- Remove obsolete permissions
+
+DELETE FROM `rbac_role_permissions` WHERE `permissionId` IN (7, 8, 9, 10, 12);
+DELETE FROM `rbac_permissions` WHERE `id` IN (7, 8, 9, 10, 12);
diff --git a/sql/updates/auth/2013_09_10_15_auth_misc.sql b/sql/updates/auth/2013_09_10_15_auth_misc.sql
new file mode 100644
index 00000000000..8280024f74c
--- /dev/null
+++ b/sql/updates/auth/2013_09_10_15_auth_misc.sql
@@ -0,0 +1,92 @@
+/* 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);
+
+/* cs_cast.cpp */
+
+SET @id = 267;
+
+-- 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);
+
+/* 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);
+
+UPDATE `rbac_permissions` SET `name`='bf enable' WHERE `id`=262;
diff --git a/sql/updates/world/2013_08_30_02_world_command.sql b/sql/updates/world/2013_08_30_02_world_command.sql
index 7cf91342101..b6d859d5b45 100644
--- a/sql/updates/world/2013_08_30_02_world_command.sql
+++ b/sql/updates/world/2013_08_30_02_world_command.sql
@@ -1,16 +1,16 @@
-- Update command table with new RBAC permissions
-UPDATE `command` SET `permission` = 201 WHERE `name` = '.rbac account';
-UPDATE `command` SET `permission` = 202 WHERE `name` = '.rbac account group';
-UPDATE `command` SET `permission` = 203 WHERE `name` = '.rbac account group add';
-UPDATE `command` SET `permission` = 204 WHERE `name` = '.rbac account group remove';
-UPDATE `command` SET `permission` = 205 WHERE `name` = '.rbac account role';
-UPDATE `command` SET `permission` = 206 WHERE `name` = '.rbac account role grant';
-UPDATE `command` SET `permission` = 207 WHERE `name` = '.rbac account role deny';
-UPDATE `command` SET `permission` = 208 WHERE `name` = '.rbac account role revoke';
-UPDATE `command` SET `permission` = 209 WHERE `name` = '.rbac account permission';
-UPDATE `command` SET `permission` = 210 WHERE `name` = '.rbac account permission grant';
-UPDATE `command` SET `permission` = 211 WHERE `name` = '.rbac account permission deny';
-UPDATE `command` SET `permission` = 212 WHERE `name` = '.rbac account permission revoke';
-UPDATE `command` SET `permission` = 214 WHERE `name` = '.rbac account list groups';
-UPDATE `command` SET `permission` = 215 WHERE `name` = '.rbac account list roles';
-UPDATE `command` SET `permission` = 216 WHERE `name` = '.rbac account list permissions';
+UPDATE `command` SET `permission` = 201 WHERE `name` = 'rbac account';
+UPDATE `command` SET `permission` = 202 WHERE `name` = 'rbac account group';
+UPDATE `command` SET `permission` = 203 WHERE `name` = 'rbac account group add';
+UPDATE `command` SET `permission` = 204 WHERE `name` = 'rbac account group remove';
+UPDATE `command` SET `permission` = 205 WHERE `name` = 'rbac account role';
+UPDATE `command` SET `permission` = 206 WHERE `name` = 'rbac account role grant';
+UPDATE `command` SET `permission` = 207 WHERE `name` = 'rbac account role deny';
+UPDATE `command` SET `permission` = 208 WHERE `name` = 'rbac account role revoke';
+UPDATE `command` SET `permission` = 209 WHERE `name` = 'rbac account permission';
+UPDATE `command` SET `permission` = 210 WHERE `name` = 'rbac account permission grant';
+UPDATE `command` SET `permission` = 211 WHERE `name` = 'rbac account permission deny';
+UPDATE `command` SET `permission` = 212 WHERE `name` = 'rbac account permission revoke';
+UPDATE `command` SET `permission` = 214 WHERE `name` = 'rbac account list groups';
+UPDATE `command` SET `permission` = 215 WHERE `name` = 'rbac account list roles';
+UPDATE `command` SET `permission` = 216 WHERE `name` = 'rbac account list permissions';
diff --git a/sql/updates/world/2013_09_09_00_world_sai.sql b/sql/updates/world/2013_09_09_00_world_sai.sql
new file mode 100644
index 00000000000..b2491651bbf
--- /dev/null
+++ b/sql/updates/world/2013_09_09_00_world_sai.sql
@@ -0,0 +1,15 @@
+UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry` IN (30135,30144,29974);
+DELETE FROM `smart_scripts` WHERE entryorguid IN (30135,30144,29974);
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+-- Niffelem Forefather
+(29974, 0, 0, 0, 0, 0, 100, 0, 1000, 5000, 8000, 13000, 11, 57454, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Niffelem Forefather - IC - Cast Ice Spike'),
+(29974, 0, 1, 2, 8, 0, 100, 0, 55983, 0, 0, 0, 33, 30138, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Niffelem Forefather - On Spellhit - Give Kill Credit'),
+(29974, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Niffelem Forefather - Linked with Previous Event Despawn'),
+-- Restless Frostborn Warrior
+(30135, 0, 0, 0, 0, 0, 100, 0, 1000, 5000, 8000, 13000, 11, 57456, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Restless Frostborn Warrior - IC - Cast Frostbite'),
+(30135, 0, 1, 2, 8, 0, 100, 0, 55983, 0, 0, 0, 33, 30139, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Restless Frostborn Warrior - On Spellhit - Give Kill Credit'),
+(30135, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Restless Frostborn Warrior - Linked with Previous Event Despawn'),
+-- Restless Frostborn Ghost
+(30144, 0, 0, 0, 0, 0, 100, 0, 1000, 5000, 8000, 13000, 11, 57456, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Restless Frostborn Ghost - IC - Cast Frostbite'),
+(30144, 0, 1, 2, 8, 0, 100, 0, 55983, 0, 0, 0, 33, 30139, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Restless Frostborn Ghost - On Spellhit - Give Kill Credit'),
+(30144, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Restless Frostborn Ghost - Linked with Previous Event Despawn');
diff --git a/sql/updates/world/2013_09_10_00_world_command_434.sql b/sql/updates/world/2013_09_10_00_world_command_434.sql
new file mode 100644
index 00000000000..aa89539b1b0
--- /dev/null
+++ b/sql/updates/world/2013_09_10_00_world_command_434.sql
@@ -0,0 +1,7 @@
+/* cs_modify.cpp & cs_debug.cpp only 4.3.4 */
+
+SET @id = 775;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'modify currency';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'debug phase';
diff --git a/sql/updates/world/2013_09_10_00_world_conditions.sql b/sql/updates/world/2013_09_10_00_world_conditions.sql
new file mode 100644
index 00000000000..b18a660563a
--- /dev/null
+++ b/sql/updates/world/2013_09_10_00_world_conditions.sql
@@ -0,0 +1,8 @@
+DELETE FROM `conditions` WHERE `SourceEntry` = 55983;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(17, 0, 55983, 0, 0, 31, 1, 3, 29974, 0, 0, 0, 0, '', 'Blow Hodir''s Horn can hit Niffelem Forefather'),
+(17, 0, 55983, 0, 0, 36, 1, 0, 0, 0, 1, 0, 0, '', 'Blow Hodir''s Horn can only hit dead Niffelem Forefather'),
+(17, 0, 55983, 0, 1, 31, 1, 3, 30144, 0, 0, 0, 0, '', 'Blow Hodir''s Horn can hit Restless Frostborn Ghost'),
+(17, 0, 55983, 0, 1, 36, 1, 0, 0, 0, 1, 0, 0, '', 'Blow Hodir''s Horn can only hit dead Restless Frostborn Ghost'),
+(17, 0, 55983, 0, 2, 31, 1, 3, 30135, 0, 0, 0, 0, '', 'Blow Hodir''s Horn can hit Restless Frostborn Warrior'),
+(17, 0, 55983, 0, 2, 36, 1, 0, 0, 0, 1, 0, 0, '', 'Blow Hodir''s Horn can only hit dead Restless Frostborn Warrior');
diff --git a/sql/updates/world/2013_09_10_01_world_command.sql b/sql/updates/world/2013_09_10_01_world_command.sql
new file mode 100644
index 00000000000..3c287422cac
--- /dev/null
+++ b/sql/updates/world/2013_09_10_01_world_command.sql
@@ -0,0 +1,15 @@
+/* cs_group.cpp */
+
+SET @id = 472;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'group';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'group leader';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'group disband';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'group remove';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'group join';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'group list';
+
+UPDATE `command` SET `permission` = @id+6, `name` = 'group summon', `help` =
+'Syntax: .group summon [$charactername]\r\n\r\nTeleport the given character and his group to you. Teleported only online characters but original selected group member can be offline.'
+WHERE `name` = 'groupsummon';
diff --git a/sql/updates/world/2013_09_10_02_world_command.sql b/sql/updates/world/2013_09_10_02_world_command.sql
new file mode 100644
index 00000000000..b3eaff43691
--- /dev/null
+++ b/sql/updates/world/2013_09_10_02_world_command.sql
@@ -0,0 +1,9 @@
+/* cs_pet.cpp */
+
+SET @id = 479;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'pet';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'pet create';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'pet learn';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'pet unlearn';
diff --git a/sql/updates/world/2013_09_10_03_world_sai.sql b/sql/updates/world/2013_09_10_03_world_sai.sql
new file mode 100644
index 00000000000..26816b6f72f
--- /dev/null
+++ b/sql/updates/world/2013_09_10_03_world_sai.sql
@@ -0,0 +1,136 @@
+-- Test Flight Quests
+-- 10557 - The Zephyrium Capacitorium(part 1)
+-- 10710 - The Singing Ridge(part 2)
+-- 10711 - Razaan's Landing
+-- 10712 - Ruuan Weald
+SET @ENTRY := 21461; -- Rally Zapnabber
+SET @ENTRY2 := 21393; -- Cannon Channeler Dummy npc
+SET @BEAM := 36795; -- Cannon Channel(dnd) - Visual cannon beam
+SET @MENUID := 8304; -- Gossip
+SET @A_MENU := 8454; -- Action Gossip
+SET @A_MENU2 := 8455; -- Action Gossip 2
+SET @OPTION := 0;
+SET @SPEACH := 10360; -- Text 1
+SET @SPEACH2 := 10561; -- Text 2
+
+-- Disable obsolete quest
+DELETE FROM `disables` WHERE `entry`=10716;
+INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `params_0`, `params_1`, `comment`) VALUES
+(1,10716,0,'','','Deprecated quest Test Flight: Raven''s Wood');
+-- Make Canon Channeler float & Update position to match cannon
+UPDATE `creature_template` SET `InhabitType`=4, `modelid1`= 11686 ,`modelid2`=0 WHERE `entry`=@ENTRY2;
+UPDATE `creature` SET `position_x`=1924.6457, `position_y`= 5575.660, `position_z`=272.1429 WHERE `guid`=74872;-- Gossip & menus 1924.1457, 5575.647, 272.1429
+
+UPDATE `creature_template` SET `gossip_menu_id`=@MENUID, `AIName`= 'SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=@ENTRY2;
+DELETE FROM `gossip_menu` WHERE `entry` IN (@MENUID,@A_MENU);
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES
+(@MENUID,@SPEACH),
+(@A_MENU,@SPEACH2);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (@MENUID,@A_MENU2,@A_MENU);
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`) VALUES
+(@MENUID,@OPTION+0,0,'I''m ready for my test flight!',1,1,0,0,0,0,''), -- Test Flight: The Zephyrium Capacitorium
+(@MENUID,@OPTION+1,0,'Take me to Singing Ridge!',1,1,@A_MENU,0,0,0,''), -- Test Flight: The Singing Ridge
+(@MENUID,@OPTION+2,0,'Take me to Razaan''s Landing!',1,1,0,0,0,0,''), -- Test Flight: Razaan's Landing
+(@MENUID,@OPTION+3,0,'Take me to Ruuan Weald!',1,1,0,0,0,0,''), -- Test Flight: Ruuan Weald
+(@MENUID,@OPTION+4,0,'I want to fly to an old location!',1,1,@A_MENU2,0,0,0,''), -- Old locations from completed quests
+(@A_MENU2,@OPTION+1,0,'Take me to Singing Ridge.',1,1,0,0,0,0,''),
+(@A_MENU2,@OPTION+2,0,'Take me to Razaan''s Landing.',1,1,0,0,0,0,''),
+(@A_MENU2,@OPTION+3,0,'Take me to Ruuan Weald.',1,1,0,0,0,0,''),
+(@A_MENU,@OPTION+0,0,'I have the signed Waiver! Fire me into The Singing Ridge!',1,1,0,0,0,0,'');
+
+-- Fix teleport spell position
+DELETE FROM `spell_target_position` WHERE `Id` IN(37908,24831);
+INSERT INTO `spell_target_position` (`id`, `effIndex`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES
+(24831, 0, 530, 1920.07, 5582.04, 269.222, 5.1846);
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger`= 37908;
+INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
+(37908, 24831, 0, 'Aura Visual Teleport - teleport');
+
+-- SAI
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*101,@ENTRY*102,@ENTRY*103,@ENTRY2);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,62,0,100,0,@MENUID,@OPTION+0,0,0,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Run script'),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Close gossip'),
+(@ENTRY,0,2,3,62,0,100,0,@A_MENU,@OPTION+0,0,0,80,@ENTRY*101,0,0,0,0,0,1,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Run script'),
+(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Close gossip'),
+(@ENTRY,0,4,5,62,0,100,0,@MENUID,@OPTION+2,0,0,80,@ENTRY*102,0,0,0,0,0,1,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Run script'),
+(@ENTRY,0,5,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Close gossip'),
+(@ENTRY,0,6,7,62,0,100,0,@MENUID,@OPTION+3,0,0,80,@ENTRY*103,0,0,0,0,0,1,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Run script'),
+(@ENTRY,0,7,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Close gossip'),
+
+(@ENTRY,0,8,9,62,0,100,0,@A_MENU2,@OPTION+1,0,0,80,@ENTRY*101,0,0,0,0,0,1,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Run script'),
+(@ENTRY,0,9,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Close gossip'),
+(@ENTRY,0,10,11,62,0,100,0,@A_MENU2,@OPTION+2,0,0,80,@ENTRY*102,0,0,0,0,0,1,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Run script'),
+(@ENTRY,0,11,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Close gossip'),
+(@ENTRY,0,12,13,62,0,100,0,@A_MENU2,@OPTION+3,0,0,80,@ENTRY*103,0,0,0,0,0,1,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Run script'),
+(@ENTRY,0,13,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Close gossip'),
+--
+(@ENTRY*100,9,0,0,1,0,100,0,2000,2000,2000,2000,85,37908,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Zephyrium Capacitorium - After 2 seconds - Port visual'),
+(@ENTRY*100,9,1,0,1,0,100,0,2000,2000,2000,2000,45,1,1,0,0,0,0,10,74872,@ENTRY2,0,0,0,0,0,'The Zephyrium Capacitorium - After 2 seconds - Port visual'),
+(@ENTRY*100,9,2,0,1,0,100,0,3000,3000,3000,3000,85,36790,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Zephyrium Capacitorium - OOC Update - Invoker,cast charge state 2'),
+(@ENTRY*100,9,3,0,1,0,100,0,3000,3000,3000,3000,85,36792,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Zephyrium Capacitorium - OOC Update - Invoker,cast charge state 3'),
+(@ENTRY*100,9,4,0,1,0,100,0,3000,3000,3000,3000,85,36800,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Zephyrium Capacitorium - OOC Update - Invoker,cast charge state 4'),
+(@ENTRY*100,9,5,0,1,0,100,0,3000,3000,3000,3000,85,37910,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Zephyrium Capacitorium - OOC Update - Invoker,cast Soar&Credit'),
+(@ENTRY*100,9,6,0,1,0,100,0,0,0,0,0,85,37108,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Zephyrium Capacitorium - OOC Update - Invoker,cast Debuff'),
+--
+(@ENTRY*101,9,0,0,1,0,100,0,2000,2000,2000,2000,85,37908,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Singing Ridge - After 2 seconds - Port visual'),
+(@ENTRY*101,9,1,0,1,0,100,0,2000,2000,2000,2000,45,1,1,0,0,0,0,10,74872,@ENTRY2,0,0,0,0,0,'The Zephyrium Capacitorium - After 2 seconds - Set Data on Channeler'),
+(@ENTRY*101,9,2,0,1,0,100,0,3000,3000,3000,3000,85,36790,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Singing Ridge - OOC Update - Invoker,cast charge state 2'),
+(@ENTRY*101,9,3,0,1,0,100,0,3000,3000,3000,3000,85,36792,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Singing Ridge - OOC Update - Invoker,cast charge state 3'),
+(@ENTRY*101,9,4,0,1,0,100,0,3000,3000,3000,3000,85,36800,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Singing Ridge - OOC Update - Invoker,cast charge state 4'),
+(@ENTRY*101,9,5,0,1,0,100,0,3000,3000,3000,3000,85,37962,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Singing Ridge - OOC Update - Invoker,cast Soar&Credit'),
+(@ENTRY*101,9,6,0,1,0,100,0,0,0,0,0,85,37108,0,0,0,0,0,7,0,0,0,0,0,0,0,'The Singing Ridge - OOC Update - Invoker,cast Debuff'),
+--
+(@ENTRY*102,9,0,0,1,0,100,0,2000,2000,2000,2000,85,37908,0,0,0,0,0,7,0,0,0,0,0,0,0,'Razaan''s Landing - After 2 seconds - Port visual'),
+(@ENTRY*102,9,1,0,1,0,100,0,2000,2000,2000,2000,45,1,1,0,0,0,0,10,74872,@ENTRY2,0,0,0,0,0,'The Zephyrium Capacitorium - After 2 seconds - Set Data on Channeler'),
+(@ENTRY*102,9,2,0,1,0,100,0,3000,3000,3000,3000,85,36790,0,0,0,0,0,7,0,0,0,0,0,0,0,'Razaan''s Landing - OOC Update - Invoker,cast charge state 2'),
+(@ENTRY*102,9,3,0,1,0,100,0,3000,3000,3000,3000,85,36792,0,0,0,0,0,7,0,0,0,0,0,0,0,'Razaan''s Landing - OOC Update - Invoker,cast charge state 3'),
+(@ENTRY*102,9,4,0,1,0,100,0,3000,3000,3000,3000,85,36800,0,0,0,0,0,7,0,0,0,0,0,0,0,'Razaan''s Landing - OOC Update - Invoker,cast charge state 4'),
+(@ENTRY*102,9,5,0,1,0,100,0,3000,3000,3000,3000,85,36812,0,0,0,0,0,7,0,0,0,0,0,0,0,'Razaan''s Landing - OOC Update - Invoker,cast Soar&Credit'),
+(@ENTRY*102,9,6,0,1,0,100,0,0,0,0,0,85,37108,0,0,0,0,0,7,0,0,0,0,0,0,0,'Razaan''s Landing - OOC Update - Invoker,cast Debuff'),
+--
+(@ENTRY*103,9,0,0,1,0,100,0,2000,2000,2000,2000,85,37908,0,0,0,0,0,7,0,0,0,0,0,0,0,'Ruuan Weald - After 2 seconds - Port visual'),
+(@ENTRY*103,9,1,0,1,0,100,0,2000,2000,2000,2000,45,1,1,0,0,0,0,10,74872,@ENTRY2,0,0,0,0,0,'The Zephyrium Capacitorium - After 2 seconds - Set Data on Channeler'),
+(@ENTRY*103,9,2,0,1,0,100,0,3000,3000,3000,3000,85,36790,0,0,0,0,0,7,0,0,0,0,0,0,0,'Ruuan Weald - OOC Update - Invoker,cast charge state 2'),
+(@ENTRY*103,9,3,0,1,0,100,0,3000,3000,3000,3000,85,36792,0,0,0,0,0,7,0,0,0,0,0,0,0,'Ruuan Weald - OOC Update - Invoker,cast charge state 3'),
+(@ENTRY*103,9,4,0,1,0,100,0,3000,3000,3000,3000,85,36800,0,0,0,0,0,7,0,0,0,0,0,0,0,'Ruuan Weald - OOC Update - Invoker,cast charge state 4'),
+(@ENTRY*103,9,5,0,1,0,100,0,3000,3000,3000,3000,85,37968,0,0,0,0,0,7,0,0,0,0,0,0,0,'Ruuan Weald - OOC Update - Invoker,cast Soar&Credit'),
+(@ENTRY*103,9,6,0,1,0,100,0,0,0,0,0,85,37108,0,0,0,0,0,7,0,0,0,0,0,0,0,'Ruuan Weald - OOC Update - Invoker,cast Debuff'),
+--
+(@ENTRY2,0,0,0,38,0,100,0,1,1,0,0,11,36795,0,0,0,0,0,1,0,0,0,0,0,0,0,'Beam Channel Bunny - On Data Set - Cast Cannon Beam');
+
+DELETE FROM `conditions` WHERE `SourceEntry`=@BEAM OR `SourceGroup` IN (@MENUID,@A_MENU2,@A_MENU);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, @A_MENU2, 3, 0, 0, 1, 0, 37108, 0, 0, 1, 0, 0, '', 'Show gossip option 3 if player does not have aura Zephyrium Charged'),
+(15, @A_MENU2, 3, 0, 0, 8, 0, 10712, 0, 0, 0, 0, 0, '', 'Show gossip option 3 if player has quest Ruuan Weald marked as rewarded'),
+(15, @A_MENU2, 2, 0, 0, 8, 0, 10711, 0, 0, 0, 0, 0, '', 'Show gossip option 2 if player has quest Razaan''s Landing marked as rewarded'),
+(15, @A_MENU2, 2, 0, 0, 1, 0, 37108, 0, 0, 1, 0, 0, '', 'Show gossip option 2 if player does not have aura Zephyrium Charged'),
+(15, @A_MENU2, 1, 0, 0, 1, 0, 37108, 0, 0, 1, 0, 0, '', 'Show gossip option 1 if player does not have aura Zephyrium Charged'),
+(15, @A_MENU2, 1, 0, 0, 8, 0, 10710, 0, 0, 0, 0, 0, '', 'Show gossip option 1 if player has quest The Singing Ridge marked as rewarded'),
+(15, @A_MENU2, 4, 0, 0, 8, 0, 10557, 0, 0, 0, 0, 0, '', 'Show gossip option 4 if player has quest The Zephyrium Capacitorium marked as rewarded'),
+(15, @A_MENU, 0, 0, 0, 2, 0, 30539, 1, 0, 0, 0, 0, '', 'Show gossip option 0 if player has item Tally''s Waiver (Signed)'),
+(15, @MENUID, 3, 0, 0, 9, 0, 10712, 0, 0, 0, 0, 0, '', 'Show gossip option 3 if player has quest Ruuan Weald marked as taken'),
+(15, @MENUID, 3, 0, 0, 1, 0, 37108, 0, 0, 1, 0, 0, '', 'Show gossip option 3 if player does not have aura Zephyrium Charged'),
+(15, @MENUID, 2, 0, 0, 9, 0, 10711, 0, 0, 0, 0, 0, '', 'Show gossip option 2 if player has quest Razaan''s Landing marked as taken'),
+(15, @MENUID, 2, 0, 0, 1, 0, 37108, 0, 0, 1, 0, 0, '', 'Show gossip option 2 if player does not have aura Zephyrium Charged'),
+(15, @MENUID, 1, 0, 0, 9, 0, 10710, 0, 0, 0, 0, 0, '', 'Show gossip option 1 if player has quest The Singing Ridge marked as taken'),
+(15, @MENUID, 1, 0, 0, 1, 0, 37108, 0, 0, 1, 0, 0, '', 'Show gossip option 1 if player does not have aura Zephyrium Charged'),
+(15, @MENUID, 0, 0, 0, 9, 0, 10557, 0, 0, 0, 0, 0, '', 'Show gossip option 0 if player has quest The Zephyrium Capacitorium marked as taken'),
+(15, @MENUID, 0, 0, 0, 1, 0, 37108, 0, 0, 1, 0, 0, '', 'Show gossip option 0 if player does not have aura Zephyrium Charged'),
+--
+(13, 1, 36795, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Spell Cannon Channel(dnd) target player');
+
+-- SAI for Rally (Questgiver)
+UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=21460;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21460;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(21460,0,0,1,62,0,100,0,8303,0,0,0,56,30540,1,0,0,0,0,7,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Give Item '),
+(21460,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Rally Zapnabber - On gossip option select - Close gossip');
+
+DELETE FROM `conditions` WHERE `SourceGroup` = 8303;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 8303, 0, 0, 0, 2, 0, 30540, 1, 1, 1, 0, 0, '', 'Only allow gossip option to be visible if player doesn''t have item'),
+(15, 8303, 0, 0, 0, 9, 0, 10710, 0, 0, 0, 0, 0, '', 'Only allow gossip option to be visible if player has quest taken');
diff --git a/sql/updates/world/2013_09_10_04_world_command.sql b/sql/updates/world/2013_09_10_04_world_command.sql
new file mode 100644
index 00000000000..a49c65fe9e5
--- /dev/null
+++ b/sql/updates/world/2013_09_10_04_world_command.sql
@@ -0,0 +1,10 @@
+/* cs_send.cpp */
+
+SET @id = 483;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'send';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'send items';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'send mail';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'send message';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'send money';
diff --git a/sql/updates/world/2013_09_10_05_world_command.sql b/sql/updates/world/2013_09_10_05_world_command.sql
new file mode 100644
index 00000000000..3cb64e7c02d
--- /dev/null
+++ b/sql/updates/world/2013_09_10_05_world_command.sql
@@ -0,0 +1,53 @@
+/* cs_misc.cpp */
+
+SET @id = 488;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'additem';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'additemset';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'appear';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'aura';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'bank';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'bindsight';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'combatstop';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'cometome';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'commands';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'cooldown';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'damage';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'dev';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'die';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'dismount';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'distance';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'flusharenapoints';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'freeze';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'gps';
+UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'guid';
+UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'help';
+UPDATE `command` SET `permission` = @id+20 WHERE `name` = 'hidearea';
+UPDATE `command` SET `permission` = @id+21 WHERE `name` = 'itemmove';
+UPDATE `command` SET `permission` = @id+22 WHERE `name` = 'kick';
+UPDATE `command` SET `permission` = @id+23 WHERE `name` = 'linkgrave';
+UPDATE `command` SET `permission` = @id+24 WHERE `name` = 'listfreeze';
+UPDATE `command` SET `permission` = @id+25 WHERE `name` = 'maxskill';
+UPDATE `command` SET `permission` = @id+26 WHERE `name` = 'movegens';
+UPDATE `command` SET `permission` = @id+27 WHERE `name` = 'mute';
+UPDATE `command` SET `permission` = @id+28 WHERE `name` = 'neargrave';
+UPDATE `command` SET `permission` = @id+29 WHERE `name` = 'pinfo';
+UPDATE `command` SET `permission` = @id+30 WHERE `name` = 'playall';
+UPDATE `command` SET `permission` = @id+31 WHERE `name` = 'possess';
+UPDATE `command` SET `permission` = @id+32 WHERE `name` = 'recall';
+UPDATE `command` SET `permission` = @id+33 WHERE `name` = 'repairitems';
+UPDATE `command` SET `permission` = @id+34 WHERE `name` = 'respawn';
+UPDATE `command` SET `permission` = @id+35 WHERE `name` = 'revive';
+UPDATE `command` SET `permission` = @id+36 WHERE `name` = 'saveall';
+UPDATE `command` SET `permission` = @id+37 WHERE `name` = 'save';
+UPDATE `command` SET `permission` = @id+38 WHERE `name` = 'setskill';
+UPDATE `command` SET `permission` = @id+39 WHERE `name` = 'showarea';
+UPDATE `command` SET `permission` = @id+40 WHERE `name` = 'summon';
+UPDATE `command` SET `permission` = @id+41 WHERE `name` = 'unaura';
+UPDATE `command` SET `permission` = @id+42 WHERE `name` = 'unbindsight';
+UPDATE `command` SET `permission` = @id+43 WHERE `name` = 'unfreeze';
+UPDATE `command` SET `permission` = @id+44 WHERE `name` = 'unmute';
+UPDATE `command` SET `permission` = @id+45 WHERE `name` = 'unpossess';
+UPDATE `command` SET `permission` = @id+46 WHERE `name` = 'unstuck';
+UPDATE `command` SET `permission` = @id+47 WHERE `name` = 'wchange';
diff --git a/sql/updates/world/2013_09_10_06_world_command.sql b/sql/updates/world/2013_09_10_06_world_command.sql
new file mode 100644
index 00000000000..57aba9eadaa
--- /dev/null
+++ b/sql/updates/world/2013_09_10_06_world_command.sql
@@ -0,0 +1,11 @@
+/* cs_mmaps.cpp */
+
+SET @id = 536;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'mmap';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'mmap loadedtiles';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'mmap loc';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'mmap path';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'mmap stats';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'mmap testarea';
diff --git a/sql/updates/world/2013_09_10_07_world_command.sql b/sql/updates/world/2013_09_10_07_world_command.sql
new file mode 100644
index 00000000000..b07da9730d1
--- /dev/null
+++ b/sql/updates/world/2013_09_10_07_world_command.sql
@@ -0,0 +1,33 @@
+/* cs_modify.cpp */
+
+SET @id = 542;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'morph';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'demorph';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'modify';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'modify arenapoints';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'modify bit';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'modify drunk';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'modify energy';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'modify faction';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'modify gender';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'modify honor';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'modify hp';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'modify mana';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'modify money';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'modify mount';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'modify phase';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'modify rage';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'modify reputation';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'modify runicpower';
+UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'modify scale';
+UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'modify speed';
+UPDATE `command` SET `permission` = @id+20 WHERE `name` = 'modify speed all';
+UPDATE `command` SET `permission` = @id+21 WHERE `name` = 'modify speed backwalk';
+UPDATE `command` SET `permission` = @id+22 WHERE `name` = 'modify speed fly';
+UPDATE `command` SET `permission` = @id+23 WHERE `name` = 'modify speed walk';
+UPDATE `command` SET `permission` = @id+24 WHERE `name` = 'modify speed swim';
+UPDATE `command` SET `permission` = @id+25 WHERE `name` = 'modify spell';
+UPDATE `command` SET `permission` = @id+26 WHERE `name` = 'modify standstate';
+UPDATE `command` SET `permission` = @id+27 WHERE `name` = 'modify talentpoints';
diff --git a/sql/updates/world/2013_09_10_08_world_command.sql b/sql/updates/world/2013_09_10_08_world_command.sql
new file mode 100644
index 00000000000..5567a5fd248
--- /dev/null
+++ b/sql/updates/world/2013_09_10_08_world_command.sql
@@ -0,0 +1,37 @@
+/* cs_npc.cpp */
+
+SET @id = 570;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'npc';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'npc add';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'npc add formation';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'npc add item';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'npc add move';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'npc add temp';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'npc add delete';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'npc add delete item';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'npc add follow';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'npc add follow stop';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'npc set';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'npc set allowmove';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'npc set entry';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'npc set factionid';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'npc set flag';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'npc set level';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'npc set link';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'npc set model';
+UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'npc set movetype';
+UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'npc set phase';
+UPDATE `command` SET `permission` = @id+20 WHERE `name` = 'npc set spawndist';
+UPDATE `command` SET `permission` = @id+21 WHERE `name` = 'npc set spawntime';
+UPDATE `command` SET `permission` = @id+22 WHERE `name` = 'npc set data';
+UPDATE `command` SET `permission` = @id+23 WHERE `name` = 'npc info';
+UPDATE `command` SET `permission` = @id+24 WHERE `name` = 'npc near';
+UPDATE `command` SET `permission` = @id+25 WHERE `name` = 'npc move';
+UPDATE `command` SET `permission` = @id+26 WHERE `name` = 'npc playemote';
+UPDATE `command` SET `permission` = @id+27 WHERE `name` = 'npc say';
+UPDATE `command` SET `permission` = @id+28 WHERE `name` = 'npc textemote';
+UPDATE `command` SET `permission` = @id+29 WHERE `name` = 'npc whisper';
+UPDATE `command` SET `permission` = @id+30 WHERE `name` = 'npc yell';
+UPDATE `command` SET `permission` = @id+31 WHERE `name` = 'npc tame';
diff --git a/sql/updates/world/2013_09_10_09_world_command.sql b/sql/updates/world/2013_09_10_09_world_command.sql
new file mode 100644
index 00000000000..6f4070ed588
--- /dev/null
+++ b/sql/updates/world/2013_09_10_09_world_command.sql
@@ -0,0 +1,10 @@
+/* cs_quest.cpp */
+
+SET @id = 602;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'quest';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'quest add';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'quest complete';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'quest remove';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'quest reward';
diff --git a/sql/updates/world/2013_09_10_10_world_command.sql b/sql/updates/world/2013_09_10_10_world_command.sql
new file mode 100644
index 00000000000..f7c74f01537
--- /dev/null
+++ b/sql/updates/world/2013_09_10_10_world_command.sql
@@ -0,0 +1,108 @@
+/* cs_reload.cpp */
+
+SET @id = 607;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'reload';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'reload access_requirement';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'reload achievement_criteria_data';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'reload achievement_reward';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'reload all';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'reload all achievement';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'reload all area';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'reload all eventai';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'reload all gossips';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'reload all item';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'reload all locales';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'reload all loot';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'reload all npc';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'reload all quest';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'reload all scripts';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'reload all spell';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'reload areatrigger_involvedrelation';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'reload areatrigger_tavern';
+UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'reload areatrigger_teleport';
+UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'reload auctions';
+UPDATE `command` SET `permission` = @id+20 WHERE `name` = 'reload autobroadcast';
+UPDATE `command` SET `permission` = @id+21 WHERE `name` = 'reload command';
+UPDATE `command` SET `permission` = @id+22 WHERE `name` = 'reload conditions';
+UPDATE `command` SET `permission` = @id+23 WHERE `name` = 'reload config';
+UPDATE `command` SET `permission` = @id+24 WHERE `name` = 'reload creature_text';
+UPDATE `command` SET `permission` = @id+25 WHERE `name` = 'reload creature_ai_scripts';
+UPDATE `command` SET `permission` = @id+26 WHERE `name` = 'reload creature_ai_texts';
+UPDATE `command` SET `permission` = @id+27 WHERE `name` = 'reload creature_questender';
+UPDATE `command` SET `permission` = @id+28 WHERE `name` = 'reload creature_linked_respawn';
+UPDATE `command` SET `permission` = @id+29 WHERE `name` = 'reload creature_loot_template';
+UPDATE `command` SET `permission` = @id+30 WHERE `name` = 'reload creature_onkill_reputation';
+UPDATE `command` SET `permission` = @id+31 WHERE `name` = 'reload creature_queststarter';
+UPDATE `command` SET `permission` = @id+32 WHERE `name` = 'reload creature_summon_groups';
+UPDATE `command` SET `permission` = @id+33 WHERE `name` = 'reload creature_template';
+UPDATE `command` SET `permission` = @id+34 WHERE `name` = 'reload disables';
+UPDATE `command` SET `permission` = @id+35 WHERE `name` = 'reload disenchant_loot_template';
+UPDATE `command` SET `permission` = @id+36 WHERE `name` = 'reload event_scripts';
+UPDATE `command` SET `permission` = @id+37 WHERE `name` = 'reload fishing_loot_template';
+UPDATE `command` SET `permission` = @id+38 WHERE `name` = 'reload game_graveyard_zone';
+UPDATE `command` SET `permission` = @id+39 WHERE `name` = 'reload game_tele';
+UPDATE `command` SET `permission` = @id+40 WHERE `name` = 'reload gameobject_questender';
+UPDATE `command` SET `permission` = @id+41 WHERE `name` = 'reload gameobject_loot_template';
+UPDATE `command` SET `permission` = @id+42 WHERE `name` = 'reload gameobject_queststarter';
+UPDATE `command` SET `permission` = @id+43 WHERE `name` = 'reload gm_tickets';
+UPDATE `command` SET `permission` = @id+44 WHERE `name` = 'reload gossip_menu';
+UPDATE `command` SET `permission` = @id+45 WHERE `name` = 'reload gossip_menu_option';
+UPDATE `command` SET `permission` = @id+46 WHERE `name` = 'reload item_enchantment_template';
+UPDATE `command` SET `permission` = @id+47 WHERE `name` = 'reload item_loot_template';
+UPDATE `command` SET `permission` = @id+48 WHERE `name` = 'reload item_set_names';
+UPDATE `command` SET `permission` = @id+49 WHERE `name` = 'reload lfg_dungeon_rewards';
+UPDATE `command` SET `permission` = @id+50 WHERE `name` = 'reload locales_achievement_reward';
+UPDATE `command` SET `permission` = @id+51 WHERE `name` = 'reload locales_creature';
+UPDATE `command` SET `permission` = @id+52 WHERE `name` = 'reload locales_creature_text';
+UPDATE `command` SET `permission` = @id+53 WHERE `name` = 'reload locales_gameobject';
+UPDATE `command` SET `permission` = @id+54 WHERE `name` = 'reload locales_gossip_menu_option';
+UPDATE `command` SET `permission` = @id+55 WHERE `name` = 'reload locales_item';
+UPDATE `command` SET `permission` = @id+56 WHERE `name` = 'reload locales_item_set_name';
+UPDATE `command` SET `permission` = @id+57 WHERE `name` = 'reload locales_npc_text';
+UPDATE `command` SET `permission` = @id+58 WHERE `name` = 'reload locales_page_text';
+UPDATE `command` SET `permission` = @id+59 WHERE `name` = 'reload locales_points_of_interest';
+UPDATE `command` SET `permission` = @id+60 WHERE `name` = 'reload locales_quest';
+UPDATE `command` SET `permission` = @id+61 WHERE `name` = 'reload mail_level_reward';
+UPDATE `command` SET `permission` = @id+62 WHERE `name` = 'reload mail_loot_template';
+UPDATE `command` SET `permission` = @id+63 WHERE `name` = 'reload milling_loot_template';
+UPDATE `command` SET `permission` = @id+64 WHERE `name` = 'reload npc_spellclick_spells';
+UPDATE `command` SET `permission` = @id+65 WHERE `name` = 'reload npc_trainer';
+UPDATE `command` SET `permission` = @id+66 WHERE `name` = 'reload npc_vendor';
+UPDATE `command` SET `permission` = @id+67 WHERE `name` = 'reload page_text';
+UPDATE `command` SET `permission` = @id+68 WHERE `name` = 'reload pickpocketing_loot_template';
+UPDATE `command` SET `permission` = @id+69 WHERE `name` = 'reload points_of_interest';
+UPDATE `command` SET `permission` = @id+70 WHERE `name` = 'reload prospecting_loot_template';
+UPDATE `command` SET `permission` = @id+71 WHERE `name` = 'reload quest_poi';
+UPDATE `command` SET `permission` = @id+72 WHERE `name` = 'reload quest_template';
+UPDATE `command` SET `permission` = @id+73 WHERE `name` = 'reload rbac';
+UPDATE `command` SET `permission` = @id+74 WHERE `name` = 'reload reference_loot_template';
+UPDATE `command` SET `permission` = @id+75 WHERE `name` = 'reload reserved_name';
+UPDATE `command` SET `permission` = @id+76 WHERE `name` = 'reload reputation_reward_rate';
+UPDATE `command` SET `permission` = @id+77 WHERE `name` = 'reload reputation_spillover_template';
+UPDATE `command` SET `permission` = @id+78 WHERE `name` = 'reload skill_discovery_template';
+UPDATE `command` SET `permission` = @id+79 WHERE `name` = 'reload skill_extra_item_template';
+UPDATE `command` SET `permission` = @id+80 WHERE `name` = 'reload skill_fishing_base_level';
+UPDATE `command` SET `permission` = @id+81 WHERE `name` = 'reload skinning_loot_template';
+UPDATE `command` SET `permission` = @id+82 WHERE `name` = 'reload smart_scripts';
+UPDATE `command` SET `permission` = @id+83 WHERE `name` = 'reload spell_required';
+UPDATE `command` SET `permission` = @id+84 WHERE `name` = 'reload spell_area';
+UPDATE `command` SET `permission` = @id+85 WHERE `name` = 'reload spell_bonus_data';
+UPDATE `command` SET `permission` = @id+86 WHERE `name` = 'reload spell_group';
+UPDATE `command` SET `permission` = @id+87 WHERE `name` = 'reload spell_learn_spell';
+UPDATE `command` SET `permission` = @id+88 WHERE `name` = 'reload spell_loot_template';
+UPDATE `command` SET `permission` = @id+89 WHERE `name` = 'reload spell_linked_spell';
+UPDATE `command` SET `permission` = @id+90 WHERE `name` = 'reload spell_pet_auras';
+UPDATE `command` SET `permission` = @id+91 WHERE `name` = 'reload spell_proc_event';
+UPDATE `command` SET `permission` = @id+92 WHERE `name` = 'reload spell_proc';
+UPDATE `command` SET `permission` = @id+93 WHERE `name` = 'reload spell_scripts';
+UPDATE `command` SET `permission` = @id+94 WHERE `name` = 'reload spell_target_position';
+UPDATE `command` SET `permission` = @id+95 WHERE `name` = 'reload spell_threats';
+UPDATE `command` SET `permission` = @id+96 WHERE `name` = 'reload spell_group_stack_rules';
+UPDATE `command` SET `permission` = @id+97 WHERE `name` = 'reload trinity_string';
+UPDATE `command` SET `permission` = @id+98 WHERE `name` = 'reload warden_action';
+UPDATE `command` SET `permission` = @id+99 WHERE `name` = 'reload waypoint_scripts';
+UPDATE `command` SET `permission` = @id+100 WHERE `name` = 'reload waypoint_data';
+UPDATE `command` SET `permission` = @id+101 WHERE `name` = 'reload vehicle_accessory';
+UPDATE `command` SET `permission` = @id+102 WHERE `name` = 'reload vehicle_template_accessory';
diff --git a/sql/updates/world/2013_09_10_11_world_command.sql b/sql/updates/world/2013_09_10_11_world_command.sql
new file mode 100644
index 00000000000..3a0dc18e804
--- /dev/null
+++ b/sql/updates/world/2013_09_10_11_world_command.sql
@@ -0,0 +1,13 @@
+/* cs_reset.cpp */
+
+SET @id = 710;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'reset';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'reset achievements';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'reset honor';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'reset level';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'reset spells';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'reset stats';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'reset talents';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'reset all';
diff --git a/sql/updates/world/2013_09_10_12_world_command.sql b/sql/updates/world/2013_09_10_12_world_command.sql
new file mode 100644
index 00000000000..58542e5a10b
--- /dev/null
+++ b/sql/updates/world/2013_09_10_12_world_command.sql
@@ -0,0 +1,24 @@
+/* cs_server.cpp */
+
+SET @id = 718;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'server';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'server corpses';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'server exit';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'server idlerestart';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'server idlerestart cancel';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'server idleshutdown';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'server idleshutdown cancel';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'server info';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'server plimit';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'server restart';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'server restart cancel';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'server set';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'server set closed';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'server set difftime';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'server set loglevel';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'server set motd';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'server shutdown';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'server shutdown cancel';
+UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'server motd';
diff --git a/sql/updates/world/2013_09_10_13_world_command.sql b/sql/updates/world/2013_09_10_13_world_command.sql
new file mode 100644
index 00000000000..a81b90f21bb
--- /dev/null
+++ b/sql/updates/world/2013_09_10_13_world_command.sql
@@ -0,0 +1,10 @@
+/* cs_tele.cpp */
+
+SET @id = 737;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'tele';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'tele add';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'tele del';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'tele name';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'tele group';
diff --git a/sql/updates/world/2013_09_10_14_world_command.sql b/sql/updates/world/2013_09_10_14_world_command.sql
new file mode 100644
index 00000000000..36723992ed0
--- /dev/null
+++ b/sql/updates/world/2013_09_10_14_world_command.sql
@@ -0,0 +1,24 @@
+/* cs_ticket.cpp */
+
+SET @id = 742;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'ticket';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'ticket assign';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'ticket close';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'ticket closedlist';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'ticket comment';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'ticket complete';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'ticket delete';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'ticket escalate';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'ticket escalatedlist';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'ticket list';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'ticket onlinelist';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'ticket reset';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'ticket response';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'ticket response append';
+UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'ticket response appendln';
+UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'ticket togglesystem';
+UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'ticket unassign';
+UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'ticket viewid';
+UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'ticket viewname';
diff --git a/sql/updates/world/2013_09_10_15_world_command.sql b/sql/updates/world/2013_09_10_15_world_command.sql
new file mode 100644
index 00000000000..1f90dfdf2a4
--- /dev/null
+++ b/sql/updates/world/2013_09_10_15_world_command.sql
@@ -0,0 +1,19 @@
+/* cs_titles.cpp & cs_wp.cpp */
+
+SET @id = 761;
+
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'titles';
+UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'titles add';
+UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'titles current';
+UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'titles remove';
+UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'titles set';
+UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'titles set mask';
+UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'wp';
+UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'wp add';
+UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'wp event';
+UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'wp load';
+UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'wp modify';
+UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'wp unload';
+UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'wp reload';
+UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'wp show';
diff --git a/sql/updates/world/2013_09_10_16_world_command.sql b/sql/updates/world/2013_09_10_16_world_command.sql
new file mode 100644
index 00000000000..3a3baf206b8
--- /dev/null
+++ b/sql/updates/world/2013_09_10_16_world_command.sql
@@ -0,0 +1,2 @@
+-- Update command table and remove obsolete permissions (0 = non existent permission)
+UPDATE `command` SET `permission` = 0 WHERE `permission` IN (7, 8, 9, 10, 12);
diff --git a/sql/updates/world/2013_09_10_17_world_command.sql b/sql/updates/world/2013_09_10_17_world_command.sql
new file mode 100644
index 00000000000..b6d859d5b45
--- /dev/null
+++ b/sql/updates/world/2013_09_10_17_world_command.sql
@@ -0,0 +1,16 @@
+-- Update command table with new RBAC permissions
+UPDATE `command` SET `permission` = 201 WHERE `name` = 'rbac account';
+UPDATE `command` SET `permission` = 202 WHERE `name` = 'rbac account group';
+UPDATE `command` SET `permission` = 203 WHERE `name` = 'rbac account group add';
+UPDATE `command` SET `permission` = 204 WHERE `name` = 'rbac account group remove';
+UPDATE `command` SET `permission` = 205 WHERE `name` = 'rbac account role';
+UPDATE `command` SET `permission` = 206 WHERE `name` = 'rbac account role grant';
+UPDATE `command` SET `permission` = 207 WHERE `name` = 'rbac account role deny';
+UPDATE `command` SET `permission` = 208 WHERE `name` = 'rbac account role revoke';
+UPDATE `command` SET `permission` = 209 WHERE `name` = 'rbac account permission';
+UPDATE `command` SET `permission` = 210 WHERE `name` = 'rbac account permission grant';
+UPDATE `command` SET `permission` = 211 WHERE `name` = 'rbac account permission deny';
+UPDATE `command` SET `permission` = 212 WHERE `name` = 'rbac account permission revoke';
+UPDATE `command` SET `permission` = 214 WHERE `name` = 'rbac account list groups';
+UPDATE `command` SET `permission` = 215 WHERE `name` = 'rbac account list roles';
+UPDATE `command` SET `permission` = 216 WHERE `name` = 'rbac account list permissions';
diff --git a/sql/updates/world/2013_09_10_18_world_command.sql b/sql/updates/world/2013_09_10_18_world_command.sql
new file mode 100644
index 00000000000..8fa30cc3851
--- /dev/null
+++ b/sql/updates/world/2013_09_10_18_world_command.sql
@@ -0,0 +1,9 @@
+UPDATE `command` SET `permission`=214 WHERE `name`='rbac list groups';
+UPDATE `command` SET `permission`=215 WHERE `name`='rbac list roles';
+UPDATE `command` SET `permission`=216 WHERE `name`='rbac list permissions';
+UPDATE `command` SET `permission`=262 WHERE `name`='bf enable';
+UPDATE `command` SET `permission`=576 WHERE `name`='npc delete';
+UPDATE `command` SET `permission`=577 WHERE `name`='npc delete item';
+UPDATE `command` SET `permission`=578 WHERE `name`='npc follow';
+UPDATE `command` SET `permission`=579 WHERE `name`='npc follow stop';
+UPDATE `command` SET `permission`=316 WHERE `name`='debug play cinematic';
diff --git a/sql/updates/world/2013_09_10_19_world_command.sql b/sql/updates/world/2013_09_10_19_world_command.sql
new file mode 100644
index 00000000000..8efdbd3353f
--- /dev/null
+++ b/sql/updates/world/2013_09_10_19_world_command.sql
@@ -0,0 +1,66 @@
+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.');
+
+/* cs_cast.cpp */
+
+SET @id = 267;
+
+-- 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';
+
+/* cs_go.cpp */
+
+SET @id = 377;
+
+-- 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';
+
+/* cs_gobject.cpp */
+
+SET @id = 387;
+
+-- 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';
+
+/* cs_instance.cpp */
+
+SET @id = 412;
+
+-- 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+4 WHERE `name` = 'instance savedata';
diff --git a/sql/updates/world/2013_09_10_20_world_creature_template.sql b/sql/updates/world/2013_09_10_20_world_creature_template.sql
new file mode 100644
index 00000000000..e4f1cc77e09
--- /dev/null
+++ b/sql/updates/world/2013_09_10_20_world_creature_template.sql
@@ -0,0 +1 @@
+UPDATE `creature_template` SET `modelid1`=1126,`modelid2`=16925 WHERE `entry`=21393;
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index 492a7197cfe..e751cba0fbf 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -1,726 +1,1033 @@
-/*
- * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
-* @file RBAC.h
-* @brief Role Based Access Control related classes definition
-*
-* This file contains all the classes and enums used to implement
-* Role Based Access Control
-*
-* RBAC Rules:
-* - Pemission: Defines an autorization to perform certain operation.
-* - Role: Set of permissions.
-* - Group: Set of roles.
-* - An Account can have multiple groups, roles and permissions.
-* - Account Groups can only be granted or revoked
-* - Account Roles and Permissions can be granted, denied or revoked
-* - Grant: Assignment of the object (role/permission) and allow it
-* - Deny: Assignment of the object (role/permission) and deny it
-* - Revoke: Removal of the object (role/permission) no matter if it was granted or denied
-* - Global Permissions are computed as:
-* Group Grants + Role Grants + User Grans - Role Grants - User Grants
-* - Groups, Roles and Permissions can be assigned by realm
-*/
-
-#ifndef _RBAC_H
-#define _RBAC_H
-
-#include "Define.h"
-#include <string>
-#include <bitset>
-#include <set>
-#include <map>
-
-enum RBACPermissions
-{
- RBAC_PERM_INSTANT_LOGOUT = 1,
- RBAC_PERM_SKIP_QUEUE = 2,
- RBAC_PERM_JOIN_NORMAL_BG = 3,
- RBAC_PERM_JOIN_RANDOM_BG = 4,
- RBAC_PERM_JOIN_ARENAS = 5,
- RBAC_PERM_JOIN_DUNGEON_FINDER = 6,
- RBAC_PERM_PLAYER_COMMANDS = 7,
- RBAC_PERM_MODERATOR_COMMANDS = 8,
- RBAC_PERM_GAMEMASTER_COMMANDS = 9,
- RBAC_PERM_ADMINISTRATOR_COMMANDS = 10,
- RBAC_PERM_LOG_GM_TRADE = 11,
- RBAC_PERM_CONSOLE_COMMANDS = 12, // Not pressent in DB
- RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES = 13,
- RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_TEAMMASK = 14,
- RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_CLASSMASK = 15,
- RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK = 16,
- RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RESERVEDNAME = 17,
- RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_HEROIC_CHARACTER = 18,
- RBAC_PERM_SKIP_CHECK_CHAT_CHANNEL_REQ = 19,
- RBAC_PERM_SKIP_CHECK_DISABLE_MAP = 20,
- RBAC_PERM_SKIP_CHECK_MORE_TALENTS_THAN_ALLOWED = 21,
- RBAC_PERM_SKIP_CHECK_CHAT_SPAM = 22,
- RBAC_PERM_SKIP_CHECK_OVERSPEED_PING = 23,
- RBAC_PERM_TWO_SIDE_CHARACTER_CREATION = 24,
- RBAC_PERM_TWO_SIDE_INTERACTION_CHAT = 25,
- RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL = 26,
- RBAC_PERM_TWO_SIDE_INTERACTION_MAIL = 27,
- RBAC_PERM_TWO_SIDE_WHO_LIST = 28,
- RBAC_PERM_TWO_SIDE_ADD_FRIEND = 29,
- RBAC_PERM_COMMANDS_SAVE_WITHOUT_DELAY = 30,
- RBAC_PERM_COMMANDS_USE_UNSTUCK_WITH_ARGS = 31,
- RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET = 32,
- RBAC_PERM_COMMANDS_NOTIFY_COMMAND_NOT_FOUND_ERROR = 33,
- RBAC_PERM_COMMANDS_APPEAR_IN_GM_LIST = 34,
- RBAC_PERM_WHO_SEE_ALL_SEC_LEVELS = 35,
- RBAC_PERM_CAN_FILTER_WHISPERS = 36,
- RBAC_PERM_CHAT_USE_STAFF_BADGE = 37,
- RBAC_PERM_RESURRECT_WITH_FULL_HPS = 38,
- RBAC_PERM_RESTORE_SAVED_GM_STATE = 39,
- RBAC_PERM_ALLOW_GM_FRIEND = 40,
- RBAC_PERM_USE_START_GM_LEVEL = 41,
- RBAC_PERM_OPCODE_WORLD_TELEPORT = 42,
- RBAC_PERM_OPCODE_WHOIS = 43,
- RBAC_PERM_RECEIVE_GLOBAL_GM_TEXTMESSAGE = 44,
- RBAC_PERM_SILENTLY_JOIN_CHANNEL = 45,
- 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,
- RBAC_PERM_COMMAND_RBAC_ACC_GROUP = 202,
- RBAC_PERM_COMMAND_RBAC_ACC_GROUP_ADD = 203,
- RBAC_PERM_COMMAND_RBAC_ACC_GROUP_DEL = 204,
- RBAC_PERM_COMMAND_RBAC_ACC_ROLE = 205,
- RBAC_PERM_COMMAND_RBAC_ACC_ROLE_GRANT = 206,
- RBAC_PERM_COMMAND_RBAC_ACC_ROLE_DENY = 207,
- RBAC_PERM_COMMAND_RBAC_ACC_ROLE_REVOKE = 208,
- RBAC_PERM_COMMAND_RBAC_ACC_PERM = 209,
- RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT = 210,
- RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY = 211,
- RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE = 212,
- RBAC_PERM_COMMAND_RBAC_LIST = 213,
- RBAC_PERM_COMMAND_RBAC_LIST_GROUPS = 214,
- RBAC_PERM_COMMAND_RBAC_LIST_ROLES = 215,
- RBAC_PERM_COMMAND_RBAC_LIST_PERMS = 216,
- RBAC_PERM_COMMAND_ACCOUNT = 217,
- RBAC_PERM_COMMAND_ACCOUNT_ADDON = 218,
- RBAC_PERM_COMMAND_ACCOUNT_CREATE = 219,
- RBAC_PERM_COMMAND_ACCOUNT_DELETE = 220,
- RBAC_PERM_COMMAND_ACCOUNT_LOCK = 221,
- RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY = 222,
- RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP = 223,
- RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST = 224,
- RBAC_PERM_COMMAND_ACCOUNT_PASSWORD = 225,
- RBAC_PERM_COMMAND_ACCOUNT_SET = 226,
- RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON = 227,
- RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL = 228,
- RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD = 229,
- RBAC_PERM_COMMAND_ACHIEVEMENT = 230,
- RBAC_PERM_COMMAND_ACHIEVEMENT_ADD = 231,
- RBAC_PERM_COMMAND_ARENA = 232,
- RBAC_PERM_COMMAND_ARENA_CAPTAIN = 233,
- RBAC_PERM_COMMAND_ARENA_CREATE = 234,
- RBAC_PERM_COMMAND_ARENA_DISBAND = 235,
- RBAC_PERM_COMMAND_ARENA_INFO = 236,
- RBAC_PERM_COMMAND_ARENA_LOOKUP = 237,
- RBAC_PERM_COMMAND_ARENA_RENAME = 238,
- RBAC_PERM_COMMAND_BAN = 239,
- RBAC_PERM_COMMAND_BAN_ACCOUNT = 240,
- RBAC_PERM_COMMAND_BAN_CHARACTER = 241,
- RBAC_PERM_COMMAND_BAN_IP = 242,
- RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT = 243,
- RBAC_PERM_COMMAND_BANINFO = 244,
- RBAC_PERM_COMMAND_BANINFO_ACCOUNT = 245,
- RBAC_PERM_COMMAND_BANINFO_CHARACTER = 246,
- RBAC_PERM_COMMAND_BANINFO_IP = 247,
- RBAC_PERM_COMMAND_BANLIST = 248,
- RBAC_PERM_COMMAND_BANLIST_ACCOUNT = 249,
- RBAC_PERM_COMMAND_BANLIST_CHARACTER = 250,
- RBAC_PERM_COMMAND_BANLIST_IP = 251,
- RBAC_PERM_COMMAND_UNBAN = 252,
- RBAC_PERM_COMMAND_UNBAN_ACCOUNT = 253,
- RBAC_PERM_COMMAND_UNBAN_CHARACTER = 254,
- RBAC_PERM_COMMAND_UNBAN_IP = 255,
- RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT = 256,
- RBAC_PERM_COMMAND_BF = 257,
- RBAC_PERM_COMMAND_BF_START = 258,
- RBAC_PERM_COMMAND_BF_STOP = 259,
- 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
-};
-
-enum RBACCommandResult
-{
- RBAC_OK,
- RBAC_CANT_ADD_ALREADY_ADDED,
- RBAC_CANT_REVOKE_NOT_IN_LIST,
- RBAC_IN_GRANTED_LIST,
- RBAC_IN_DENIED_LIST,
- RBAC_ID_DOES_NOT_EXISTS
-};
-
-typedef std::bitset<RBAC_PERM_MAX> RBACPermissionContainer;
-typedef std::set<uint32> RBACRoleContainer;
-typedef std::set<uint32> RBACGroupContainer;
-
-class RBACObject
-{
- public:
- RBACObject(uint32 id = 0, std::string const& name = ""):
- _id(id), _name(name) { }
-
- virtual ~RBACObject() { }
-
- /// Gets the Name of the Object
- std::string const& GetName() const { return _name; }
- /// Gets the Id of the Object
- uint32 GetId() const { return _id; }
-
- private:
- uint32 _id; ///> id of the object
- std::string _name; ///> name of the object
-};
-
-/// Permission: Defines an autorization to perform certain operation
-class RBACPermission: public RBACObject
-{
- public:
- RBACPermission(uint32 id = 0, std::string const& name = ""):
- RBACObject(id, name) { }
-};
-
-/// Set of Permissions
-class RBACRole: public RBACObject
-{
- public:
- RBACRole(uint32 id = 0, std::string const& name = ""):
- RBACObject(id, name) { }
-
- /// Gets the Permissions assigned to this role
- RBACPermissionContainer const& GetPermissions() const { return _perms; }
- /// Grants a Permission (Adds)
- void GrantPermission(uint32 id);
- /// Revokes a Permission (Removes)
- void RevokePermission(uint32 id);
-
- private:
- RBACPermissionContainer _perms; ///> Set of permissions
-};
-
-/// Set of Roles
-class RBACGroup: public RBACObject
-{
- public:
- RBACGroup(uint32 id = 0, std::string const& name = ""):
- RBACObject(id, name) { }
-
- /// Gets the Roles assigned to this group
- RBACRoleContainer const& GetRoles() const { return _roles; }
- /// Grants a Role (Adds)
- void GrantRole(uint32 role);
- /// Revokes a Role (Removes)
- void RevokeRole(uint32 role);
-
- private:
- RBACRoleContainer _roles; ///> Set of Roles
-};
-
-/**
- * @name RBACData
- * @brief Contains all needed information about the acccount
- *
- * This class contains all the data needed to calculate the account permissions.
- * RBACDAta is formed by group permissions and user permissions through:
- * - Granted Groups, which contains roles, which contains permissions: Set of granted permissions
- * - Granted Roles, which contains permissions: Set of granted permissions
- * - Denied Roles, which contains permissions: Set of denied permissions
- * - Granted Permissions
- * - Denied Permissions
- *
- * Calculation of current Permissions: Granted permissions - Denied permissions
- * - Granted permissions: through groups, through roles and directly assigned
- * - Denied permissions: through roles and directly assigned
- */
-class RBACData: public RBACObject
-{
- public:
- RBACData(uint32 id, std::string const& name, int32 realmId):
- RBACObject(id, name), _realmId(realmId) { }
-
- /**
- * @name HasPermission
- * @brief Checks if certain action is allowed
- *
- * Checks if certain action can be performed.
- *
- * @return grant or deny action
- *
- * Example Usage:
- * @code
- * bool Player::CanJoinArena(Battleground* bg)
- * {
- * return bg->isArena() && HasPermission(RBAC_PERM_JOIN_ARENA);
- * }
- * @endcode
- */
- bool HasPermission(uint32 permission) const { return _globalPerms.test(permission); }
-
- // Functions enabled to be used by command system
- /// Returns all the granted permissions (after computation)
- RBACPermissionContainer const& GetPermissions() const { return _globalPerms; }
- /// Returns all the granted permissions
- RBACPermissionContainer const& GetGrantedPermissions() const { return _grantedPerms; }
- /// Returns all the denied permissions
- RBACPermissionContainer const& GetDeniedPermissions() const { return _deniedPerms; }
- /// Returns all the granted roles
- RBACRoleContainer const& GetGrantedRoles() const { return _grantedRoles; }
- /// Returns all the denied roles
- RBACRoleContainer const& GetDeniedRoles() const { return _deniedRoles; }
- /// Returns all the granted groups
- RBACGroupContainer const& GetGroups() const { return _groups; }
-
- /**
- * @name AddGroup
- * @brief Adds new group
- *
- * Add a new group to the account. If realm is 0 or the group can not be added
- * No save to db action will be performed.
- *
- * Fails if group Id does not exists or group already present
- *
- * @param groupId group to be added
- * @param realmId realm affected
- *
- * @return Success or failure (with reason) to add the group
- *
- * Example Usage:
- * @code
- * // previously defined "RBACData* rbac" with proper initialization
- * uint32 groupId = 2;
- * if (rbac->AddGroup(groupId) == RBAC_OK)
- * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Group %u succesfully added", groupId);
- * @endcode
- */
- RBACCommandResult AddGroup(uint32 groupId, int32 realmId = 0);
-
- /**
- * @name RemoveGroup
- * @brief Removes a group
- *
- * Removes a group from the account. If realm is 0 or the group can not be removed
- * No save to db action will be performed. Any delete operation will always affect
- * "all realms (-1)" in addition to the realm specified
- *
- * Fails if group not present
- *
- * @param groupId group to be removed
- * @param realmId realm affected
- *
- * @return Success or failure (with reason) to remove the group
- *
- * Example Usage:
- * // previously defined "RBACData* rbac" with proper initialization
- * uint32 groupId = 2;
- * if (rbac->RemoveGroup(groupId) == RBAC_OK)
- * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Group %u succesfully removed", groupId);
- * @endcode
- */
- RBACCommandResult RemoveGroup(uint32 groupId, int32 realmId = 0);
-
- /**
- * @name GrantRole
- * @brief Grants a role
- *
- * Grants a role to the account. If realm is 0 or the role can not be added
- * No save to db action will be performed.
- *
- * Fails if role Id does not exists or role already granted or denied
- *
- * @param roleId role to be granted
- * @param realmId realm affected
- *
- * @return Success or failure (with reason) to grant the role
- *
- * Example Usage:
- * // previously defined "RBACData* rbac" with proper initialization
- * uint32 roleId = 2;
- * if (rbac->GrantRole(roleId) == RBAC_IN_DENIED_LIST)
- * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Failed to grant role %u, already denied", roleId);
- * @endcode
- */
- RBACCommandResult GrantRole(uint32 roleId, int32 realmId = 0);
-
- /**
- * @name DenyRole
- * @brief Denies a role
- *
- * Denied a role to the account. If realm is 0 or the role can not be added
- * No save to db action will be performed.
- *
- * Fails if role Id does not exists or role already granted or denied
- *
- * @param roleId role to be denied
- * @param realmId realm affected
- *
- * @return Success or failure (with reason) to deny the role
- *
- * Example Usage:
- * // previously defined "RBACData* rbac" with proper initialization
- * uint32 roleId = 2;
- * if (rbac->DenyRole(roleId) == RBAC_ID_DOES_NOT_EXISTS)
- * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role Id %u does not exists", roleId);
- * @endcode
- */
- RBACCommandResult DenyRole(uint32 roleId, int32 realmId = 0);
-
- /**
- * @name RevokeRole
- * @brief Removes a role
- *
- * Removes a role from the account. If realm is 0 or the role can not be removed
- * No save to db action will be performed. Any delete operation will always affect
- * "all realms (-1)" in addition to the realm specified
- *
- * Fails if role not present
- *
- * @param roleId role to be removed
- * @param realmId realm affected
- *
- * @return Success or failure (with reason) to remove the role
- *
- * Example Usage:
- * // previously defined "RBACData* rbac" with proper initialization
- * uint32 roleId = 2;
- * if (rbac->RevokeRole(roleId) == RBAC_OK)
- * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role %u succesfully removed", roleId);
- * @endcode
- */
- RBACCommandResult RevokeRole(uint32 roleId, int32 realmId = 0);
-
- /**
- * @name GrantRole
- * @brief Grants a permission
- *
- * Grants a permission to the account. If realm is 0 or the permission can not be added
- * No save to db action will be performed.
- *
- * Fails if permission Id does not exists or permission already granted or denied
- *
- * @param permissionId permission to be granted
- * @param realmId realm affected
- *
- * @return Success or failure (with reason) to grant the permission
- *
- * Example Usage:
- * // previously defined "RBACData* rbac" with proper initialization
- * uint32 permissionId = 2;
- * if (rbac->GrantRole(permissionId) == RBAC_IN_DENIED_LIST)
- * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Failed to grant permission %u, already denied", permissionId);
- * @endcode
- */
- RBACCommandResult GrantPermission(uint32 permissionId, int32 realmId = 0);
-
- /**
- * @name DenyPermission
- * @brief Denies a permission
- *
- * Denied a permission to the account. If realm is 0 or the permission can not be added
- * No save to db action will be performed.
- *
- * Fails if permission Id does not exists or permission already granted or denied
- *
- * @param permissionId permission to be denied
- * @param realmId realm affected
- *
- * @return Success or failure (with reason) to deny the permission
- *
- * Example Usage:
- * // previously defined "RBACData* rbac" with proper initialization
- * uint32 permissionId = 2;
- * if (rbac->DenyRole(permissionId) == RBAC_ID_DOES_NOT_EXISTS)
- * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role Id %u does not exists", permissionId);
- * @endcode
- */
- RBACCommandResult DenyPermission(uint32 permissionId, int32 realmId = 0);
-
- /**
- * @name RevokePermission
- * @brief Removes a permission
- *
- * Removes a permission from the account. If realm is 0 or the permission can not be removed
- * No save to db action will be performed. Any delete operation will always affect
- * "all realms (-1)" in addition to the realm specified
- *
- * Fails if permission not present
- *
- * @param permissionId permission to be removed
- * @param realmId realm affected
- *
- * @return Success or failure (with reason) to remove the permission
- *
- * Example Usage:
- * // previously defined "RBACData* rbac" with proper initialization
- * uint32 permissionId = 2;
- * if (rbac->RevokeRole(permissionId) == RBAC_OK)
- * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Permission %u succesfully removed", permissionId);
- * @endcode
- */
- RBACCommandResult RevokePermission(uint32 permissionId, int32 realmId = 0);
-
- /// Loads all permissions, groups and roles assigned to current account
- void LoadFromDB();
- private:
- /// Saves a role to DB, Granted or Denied
- void SaveRole(uint32 role, bool granted, int32 realm);
- /// Saves a permission to DB, Granted or Denied
- void SavePermission(uint32 role, bool granted, int32 realm);
-
- /**
- * @name CalculateNewPermissions
- * @brief Calculates new permissions
- *
- * Calculates new permissions after some change in groups, roles or permissions.
- * The calculation is done Granted - Denied:
- * - Granted permissions: through groups, through roles and directly assigned
- * - Denied permissions: through roles and directly assigned
- */
- void CalculateNewPermissions();
-
- int32 GetRealmId() { return _realmId; }
-
- int32 _realmId; ///> RealmId Affected
- RBACGroupContainer _groups; ///> Granted groups
- RBACRoleContainer _grantedRoles; ///> Granted roles
- RBACRoleContainer _deniedRoles; ///> Denied roles
- RBACPermissionContainer _grantedPerms; ///> Granted permissions
- RBACPermissionContainer _deniedPerms; ///> Denied permissions
- RBACPermissionContainer _globalPerms; ///> Calculated permissions
-};
-
-#endif
+/*
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+* @file RBAC.h
+* @brief Role Based Access Control related classes definition
+*
+* This file contains all the classes and enums used to implement
+* Role Based Access Control
+*
+* RBAC Rules:
+* - Pemission: Defines an autorization to perform certain operation.
+* - Role: Set of permissions.
+* - Group: Set of roles.
+* - An Account can have multiple groups, roles and permissions.
+* - Account Groups can only be granted or revoked
+* - Account Roles and Permissions can be granted, denied or revoked
+* - Grant: Assignment of the object (role/permission) and allow it
+* - Deny: Assignment of the object (role/permission) and deny it
+* - Revoke: Removal of the object (role/permission) no matter if it was granted or denied
+* - Global Permissions are computed as:
+* Group Grants + Role Grants + User Grans - Role Grants - User Grants
+* - Groups, Roles and Permissions can be assigned by realm
+*/
+
+#ifndef _RBAC_H
+#define _RBAC_H
+
+#include "Define.h"
+#include <string>
+#include <bitset>
+#include <set>
+#include <map>
+
+enum RBACPermissions
+{
+ RBAC_PERM_INSTANT_LOGOUT = 1,
+ RBAC_PERM_SKIP_QUEUE = 2,
+ RBAC_PERM_JOIN_NORMAL_BG = 3,
+ RBAC_PERM_JOIN_RANDOM_BG = 4,
+ RBAC_PERM_JOIN_ARENAS = 5,
+ RBAC_PERM_JOIN_DUNGEON_FINDER = 6,
+ // 7 - reuse
+ // 8 - reuse
+ // 9 - reuse
+ // 10 - reuse
+ RBAC_PERM_LOG_GM_TRADE = 11,
+ // 12 - reuse
+ RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES = 13,
+ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_TEAMMASK = 14,
+ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_CLASSMASK = 15,
+ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK = 16,
+ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RESERVEDNAME = 17,
+ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_HEROIC_CHARACTER = 18,
+ RBAC_PERM_SKIP_CHECK_CHAT_CHANNEL_REQ = 19,
+ RBAC_PERM_SKIP_CHECK_DISABLE_MAP = 20,
+ RBAC_PERM_SKIP_CHECK_MORE_TALENTS_THAN_ALLOWED = 21,
+ RBAC_PERM_SKIP_CHECK_CHAT_SPAM = 22,
+ RBAC_PERM_SKIP_CHECK_OVERSPEED_PING = 23,
+ RBAC_PERM_TWO_SIDE_CHARACTER_CREATION = 24,
+ RBAC_PERM_TWO_SIDE_INTERACTION_CHAT = 25,
+ RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL = 26,
+ RBAC_PERM_TWO_SIDE_INTERACTION_MAIL = 27,
+ RBAC_PERM_TWO_SIDE_WHO_LIST = 28,
+ RBAC_PERM_TWO_SIDE_ADD_FRIEND = 29,
+ RBAC_PERM_COMMANDS_SAVE_WITHOUT_DELAY = 30,
+ RBAC_PERM_COMMANDS_USE_UNSTUCK_WITH_ARGS = 31,
+ RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET = 32,
+ RBAC_PERM_COMMANDS_NOTIFY_COMMAND_NOT_FOUND_ERROR = 33,
+ RBAC_PERM_COMMANDS_APPEAR_IN_GM_LIST = 34,
+ RBAC_PERM_WHO_SEE_ALL_SEC_LEVELS = 35,
+ RBAC_PERM_CAN_FILTER_WHISPERS = 36,
+ RBAC_PERM_CHAT_USE_STAFF_BADGE = 37,
+ RBAC_PERM_RESURRECT_WITH_FULL_HPS = 38,
+ RBAC_PERM_RESTORE_SAVED_GM_STATE = 39,
+ RBAC_PERM_ALLOW_GM_FRIEND = 40,
+ RBAC_PERM_USE_START_GM_LEVEL = 41,
+ RBAC_PERM_OPCODE_WORLD_TELEPORT = 42,
+ RBAC_PERM_OPCODE_WHOIS = 43,
+ RBAC_PERM_RECEIVE_GLOBAL_GM_TEXTMESSAGE = 44,
+ RBAC_PERM_SILENTLY_JOIN_CHANNEL = 45,
+ 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,
+ RBAC_PERM_COMMAND_RBAC_ACC_GROUP = 202,
+ RBAC_PERM_COMMAND_RBAC_ACC_GROUP_ADD = 203,
+ RBAC_PERM_COMMAND_RBAC_ACC_GROUP_DEL = 204,
+ RBAC_PERM_COMMAND_RBAC_ACC_ROLE = 205,
+ RBAC_PERM_COMMAND_RBAC_ACC_ROLE_GRANT = 206,
+ RBAC_PERM_COMMAND_RBAC_ACC_ROLE_DENY = 207,
+ RBAC_PERM_COMMAND_RBAC_ACC_ROLE_REVOKE = 208,
+ RBAC_PERM_COMMAND_RBAC_ACC_PERM = 209,
+ RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT = 210,
+ RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY = 211,
+ RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE = 212,
+ RBAC_PERM_COMMAND_RBAC_LIST = 213,
+ RBAC_PERM_COMMAND_RBAC_LIST_GROUPS = 214,
+ RBAC_PERM_COMMAND_RBAC_LIST_ROLES = 215,
+ RBAC_PERM_COMMAND_RBAC_LIST_PERMS = 216,
+ RBAC_PERM_COMMAND_ACCOUNT = 217,
+ RBAC_PERM_COMMAND_ACCOUNT_ADDON = 218,
+ RBAC_PERM_COMMAND_ACCOUNT_CREATE = 219,
+ RBAC_PERM_COMMAND_ACCOUNT_DELETE = 220,
+ RBAC_PERM_COMMAND_ACCOUNT_LOCK = 221,
+ RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY = 222,
+ RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP = 223,
+ RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST = 224,
+ RBAC_PERM_COMMAND_ACCOUNT_PASSWORD = 225,
+ RBAC_PERM_COMMAND_ACCOUNT_SET = 226,
+ RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON = 227,
+ RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL = 228,
+ RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD = 229,
+ RBAC_PERM_COMMAND_ACHIEVEMENT = 230,
+ RBAC_PERM_COMMAND_ACHIEVEMENT_ADD = 231,
+ RBAC_PERM_COMMAND_ARENA = 232,
+ RBAC_PERM_COMMAND_ARENA_CAPTAIN = 233,
+ RBAC_PERM_COMMAND_ARENA_CREATE = 234,
+ RBAC_PERM_COMMAND_ARENA_DISBAND = 235,
+ RBAC_PERM_COMMAND_ARENA_INFO = 236,
+ RBAC_PERM_COMMAND_ARENA_LOOKUP = 237,
+ RBAC_PERM_COMMAND_ARENA_RENAME = 238,
+ RBAC_PERM_COMMAND_BAN = 239,
+ RBAC_PERM_COMMAND_BAN_ACCOUNT = 240,
+ RBAC_PERM_COMMAND_BAN_CHARACTER = 241,
+ RBAC_PERM_COMMAND_BAN_IP = 242,
+ RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT = 243,
+ RBAC_PERM_COMMAND_BANINFO = 244,
+ RBAC_PERM_COMMAND_BANINFO_ACCOUNT = 245,
+ RBAC_PERM_COMMAND_BANINFO_CHARACTER = 246,
+ RBAC_PERM_COMMAND_BANINFO_IP = 247,
+ RBAC_PERM_COMMAND_BANLIST = 248,
+ RBAC_PERM_COMMAND_BANLIST_ACCOUNT = 249,
+ RBAC_PERM_COMMAND_BANLIST_CHARACTER = 250,
+ RBAC_PERM_COMMAND_BANLIST_IP = 251,
+ RBAC_PERM_COMMAND_UNBAN = 252,
+ RBAC_PERM_COMMAND_UNBAN_ACCOUNT = 253,
+ RBAC_PERM_COMMAND_UNBAN_CHARACTER = 254,
+ RBAC_PERM_COMMAND_UNBAN_IP = 255,
+ RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT = 256,
+ RBAC_PERM_COMMAND_BF = 257,
+ RBAC_PERM_COMMAND_BF_START = 258,
+ RBAC_PERM_COMMAND_BF_STOP = 259,
+ 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,
+ RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST = 279,
+ RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE = 280,
+ RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD = 281,
+ RBAC_PERM_COMMAND_CHARACTER_ERASE = 282,
+ 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,
+ // 400 - reuse
+ 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,
+ RBAC_PERM_COMMAND_GROUP = 472,
+ RBAC_PERM_COMMAND_GROUP_LEADER = 473,
+ RBAC_PERM_COMMAND_GROUP_DISBAND = 474,
+ RBAC_PERM_COMMAND_GROUP_REMOVE = 475,
+ RBAC_PERM_COMMAND_GROUP_JOIN = 476,
+ RBAC_PERM_COMMAND_GROUP_LIST = 477,
+ RBAC_PERM_COMMAND_GROUP_SUMMON = 478,
+ RBAC_PERM_COMMAND_PET = 479,
+ RBAC_PERM_COMMAND_PET_CREATE = 480,
+ RBAC_PERM_COMMAND_PET_LEARN = 481,
+ RBAC_PERM_COMMAND_PET_UNLEARN = 482,
+ RBAC_PERM_COMMAND_SEND = 483,
+ RBAC_PERM_COMMAND_SEND_ITEMS = 484,
+ RBAC_PERM_COMMAND_SEND_MAIL = 485,
+ RBAC_PERM_COMMAND_SEND_MESSAGE = 486,
+ RBAC_PERM_COMMAND_SEND_MONEY = 487,
+ RBAC_PERM_COMMAND_ADDITEM = 488,
+ RBAC_PERM_COMMAND_ADDITEMSET = 489,
+ RBAC_PERM_COMMAND_APPEAR = 490,
+ RBAC_PERM_COMMAND_AURA = 491,
+ RBAC_PERM_COMMAND_BANK = 492,
+ RBAC_PERM_COMMAND_BINDSIGHT = 493,
+ RBAC_PERM_COMMAND_COMBATSTOP = 494,
+ RBAC_PERM_COMMAND_COMETOME = 495,
+ RBAC_PERM_COMMAND_COMMANDS = 496,
+ RBAC_PERM_COMMAND_COOLDOWN = 497,
+ RBAC_PERM_COMMAND_DAMAGE = 498,
+ RBAC_PERM_COMMAND_DEV = 499,
+ RBAC_PERM_COMMAND_DIE = 500,
+ RBAC_PERM_COMMAND_DISMOUNT = 501,
+ RBAC_PERM_COMMAND_DISTANCE = 502,
+ RBAC_PERM_COMMAND_FLUSHARENAPOINTS = 503,
+ RBAC_PERM_COMMAND_FREEZE = 504,
+ RBAC_PERM_COMMAND_GPS = 505,
+ RBAC_PERM_COMMAND_GUID = 506,
+ RBAC_PERM_COMMAND_HELP = 507,
+ RBAC_PERM_COMMAND_HIDEAREA = 508,
+ RBAC_PERM_COMMAND_ITEMMOVE = 509,
+ RBAC_PERM_COMMAND_KICK = 510,
+ RBAC_PERM_COMMAND_LINKGRAVE = 511,
+ RBAC_PERM_COMMAND_LISTFREEZE = 512,
+ RBAC_PERM_COMMAND_MAXSKILL = 513,
+ RBAC_PERM_COMMAND_MOVEGENS = 514,
+ RBAC_PERM_COMMAND_MUTE = 515,
+ RBAC_PERM_COMMAND_NEARGRAVE = 516,
+ RBAC_PERM_COMMAND_PINFO = 517,
+ RBAC_PERM_COMMAND_PLAYALL = 518,
+ RBAC_PERM_COMMAND_POSSESS = 519,
+ RBAC_PERM_COMMAND_RECALL = 520,
+ RBAC_PERM_COMMAND_REPAIRITEMS = 521,
+ RBAC_PERM_COMMAND_RESPAWN = 522,
+ RBAC_PERM_COMMAND_REVIVE = 523,
+ RBAC_PERM_COMMAND_SAVE = 524,
+ RBAC_PERM_COMMAND_SAVEALL = 525,
+ RBAC_PERM_COMMAND_SETSKILL = 526,
+ RBAC_PERM_COMMAND_SHOWAREA = 527,
+ RBAC_PERM_COMMAND_SUMMON = 528,
+ RBAC_PERM_COMMAND_UNAURA = 529,
+ RBAC_PERM_COMMAND_UNBINDSIGHT = 530,
+ RBAC_PERM_COMMAND_UNFREEZE = 531,
+ RBAC_PERM_COMMAND_UNMUTE = 532,
+ RBAC_PERM_COMMAND_UNPOSSESS = 533,
+ RBAC_PERM_COMMAND_UNSTUCK = 534,
+ RBAC_PERM_COMMAND_WCHANGE = 535,
+ RBAC_PERM_COMMAND_MMAP = 536,
+ RBAC_PERM_COMMAND_MMAP_LOADEDTILES = 537,
+ RBAC_PERM_COMMAND_MMAP_LOC = 538,
+ RBAC_PERM_COMMAND_MMAP_PATH = 539,
+ RBAC_PERM_COMMAND_MMAP_STATS = 540,
+ RBAC_PERM_COMMAND_MMAP_TESTAREA = 541,
+ RBAC_PERM_COMMAND_MORPH = 542,
+ RBAC_PERM_COMMAND_DEMORPH = 543,
+ RBAC_PERM_COMMAND_MODIFY = 544,
+ RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS = 545,
+ RBAC_PERM_COMMAND_MODIFY_BIT = 546,
+ RBAC_PERM_COMMAND_MODIFY_DRUNK = 547,
+ RBAC_PERM_COMMAND_MODIFY_ENERGY = 548,
+ RBAC_PERM_COMMAND_MODIFY_FACTION = 549,
+ RBAC_PERM_COMMAND_MODIFY_GENDER = 550,
+ RBAC_PERM_COMMAND_MODIFY_HONOR = 551,
+ RBAC_PERM_COMMAND_MODIFY_HP = 552,
+ RBAC_PERM_COMMAND_MODIFY_MANA = 553,
+ RBAC_PERM_COMMAND_MODIFY_MONEY = 554,
+ RBAC_PERM_COMMAND_MODIFY_MOUNT = 555,
+ RBAC_PERM_COMMAND_MODIFY_PHASE = 556,
+ RBAC_PERM_COMMAND_MODIFY_RAGE = 557,
+ RBAC_PERM_COMMAND_MODIFY_REPUTATION = 558,
+ RBAC_PERM_COMMAND_MODIFY_RUNICPOWER = 559,
+ RBAC_PERM_COMMAND_MODIFY_SCALE = 560,
+ RBAC_PERM_COMMAND_MODIFY_SPEED = 561,
+ RBAC_PERM_COMMAND_MODIFY_SPEED_ALL = 562,
+ RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK = 563,
+ RBAC_PERM_COMMAND_MODIFY_SPEED_FLY = 564,
+ RBAC_PERM_COMMAND_MODIFY_SPEED_WALK = 565,
+ RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM = 566,
+ RBAC_PERM_COMMAND_MODIFY_SPELL = 567,
+ RBAC_PERM_COMMAND_MODIFY_STANDSTATE = 568,
+ RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS = 569,
+ RBAC_PERM_COMMAND_NPC = 570,
+ RBAC_PERM_COMMAND_NPC_ADD = 571,
+ RBAC_PERM_COMMAND_NPC_ADD_FORMATION = 572,
+ RBAC_PERM_COMMAND_NPC_ADD_ITEM = 573,
+ RBAC_PERM_COMMAND_NPC_ADD_MOVE = 574,
+ RBAC_PERM_COMMAND_NPC_ADD_TEMP = 575,
+ RBAC_PERM_COMMAND_NPC_DELETE = 576,
+ RBAC_PERM_COMMAND_NPC_DELETE_ITEM = 577,
+ RBAC_PERM_COMMAND_NPC_FOLLOW = 578,
+ RBAC_PERM_COMMAND_NPC_FOLLOW_STOP = 579,
+ RBAC_PERM_COMMAND_NPC_SET = 580,
+ RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE = 581,
+ RBAC_PERM_COMMAND_NPC_SET_ENTRY = 582,
+ RBAC_PERM_COMMAND_NPC_SET_FACTIONID = 583,
+ RBAC_PERM_COMMAND_NPC_SET_FLAG = 584,
+ RBAC_PERM_COMMAND_NPC_SET_LEVEL = 585,
+ RBAC_PERM_COMMAND_NPC_SET_LINK = 586,
+ RBAC_PERM_COMMAND_NPC_SET_MODEL = 587,
+ RBAC_PERM_COMMAND_NPC_SET_MOVETYPE = 588,
+ RBAC_PERM_COMMAND_NPC_SET_PHASE = 589,
+ RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST = 590,
+ RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME = 591,
+ RBAC_PERM_COMMAND_NPC_SET_DATA = 592,
+ RBAC_PERM_COMMAND_NPC_INFO = 593,
+ RBAC_PERM_COMMAND_NPC_NEAR = 594,
+ RBAC_PERM_COMMAND_NPC_MOVE = 595,
+ RBAC_PERM_COMMAND_NPC_PLAYEMOTE = 596,
+ RBAC_PERM_COMMAND_NPC_SAY = 597,
+ RBAC_PERM_COMMAND_NPC_TEXTEMOTE = 598,
+ RBAC_PERM_COMMAND_NPC_WHISPER = 599,
+ RBAC_PERM_COMMAND_NPC_YELL = 600,
+ RBAC_PERM_COMMAND_NPC_TAME = 601,
+ RBAC_PERM_COMMAND_QUEST = 602,
+ RBAC_PERM_COMMAND_QUEST_ADD = 603,
+ RBAC_PERM_COMMAND_QUEST_COMPLETE = 604,
+ RBAC_PERM_COMMAND_QUEST_REMOVE = 605,
+ RBAC_PERM_COMMAND_QUEST_REWARD = 606,
+ RBAC_PERM_COMMANDS_RELOAD = 607,
+ RBAC_PERM_COMMANDS_RELOAD_ACCESS_REQUIREMENT = 608,
+ RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_CRITERIA_DATA = 609,
+ RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_REWARD = 610,
+ RBAC_PERM_COMMANDS_RELOAD_ALL = 611,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_ACHIEVEMENT = 612,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_AREA = 613,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_EVENTAI = 614,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_GOSSIP = 615,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_ITEM = 616,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_LOCALES = 617,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_LOOT = 618,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_NPC = 619,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_QUEST = 620,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_SCRIPTS = 621,
+ RBAC_PERM_COMMANDS_RELOAD_ALL_SPELL = 622,
+ RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_INVOLVEDRELATION = 623,
+ RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TAVERN = 624,
+ RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TELEPORT = 625,
+ RBAC_PERM_COMMANDS_RELOAD_AUCTIONS = 626,
+ RBAC_PERM_COMMANDS_RELOAD_AUTOBROADCAST = 627,
+ RBAC_PERM_COMMANDS_RELOAD_COMMAND = 628,
+ RBAC_PERM_COMMANDS_RELOAD_CONDITIONS = 629,
+ RBAC_PERM_COMMANDS_RELOAD_CONFIG = 630,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_SCRIPTS = 631,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_TEXTS = 632,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_LINKED_RESPAWN = 633,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_LOOT_TEMPLATE = 634,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_ONKILL_REPUTATION = 635,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTENDER = 636,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTSTARTER = 637,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_SUMMON_GROUPS = 638,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEMPLATE = 639,
+ RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEXT = 640,
+ RBAC_PERM_COMMANDS_RELOAD_DISABLES = 641,
+ RBAC_PERM_COMMANDS_RELOAD_DISENCHANT_LOOT_TEMPLATE = 642,
+ RBAC_PERM_COMMANDS_RELOAD_EVENT_SCRIPTS = 643,
+ RBAC_PERM_COMMANDS_RELOAD_FISHING_LOOT_TEMPLATE = 644,
+ RBAC_PERM_COMMANDS_RELOAD_GAME_GRAVEYARD_ZONE = 645,
+ RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTENDER = 646,
+ RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE = 647,
+ RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTSTARTER = 648,
+ RBAC_PERM_COMMANDS_RELOAD_GAME_TELE = 649,
+ RBAC_PERM_COMMANDS_RELOAD_GM_TICKETS = 650,
+ RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU = 651,
+ RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU_OPTION = 652,
+ RBAC_PERM_COMMANDS_RELOAD_ITEM_ENCHANTMENT_TEMPLATE = 653,
+ RBAC_PERM_COMMANDS_RELOAD_ITEM_LOOT_TEMPLATE = 654,
+ RBAC_PERM_COMMANDS_RELOAD_ITEM_SET_NAMES = 655,
+ RBAC_PERM_COMMANDS_RELOAD_LFG_DUNGEON_REWARDS = 656,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_ACHIEVEMENT_REWARD = 657,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE = 658,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE_TEXT = 659,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_GAMEOBJECT = 660,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_GOSSIP_MENU_OPTION = 661,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM = 662,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM_SET_NAME = 663,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_NPC_TEXT = 664,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_PAGE_TEXT = 665,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_POINTS_OF_INTEREST = 666,
+ RBAC_PERM_COMMANDS_RELOAD_LOCALES_QUEST = 667,
+ RBAC_PERM_COMMANDS_RELOAD_MAIL_LEVEL_REWARD = 668,
+ RBAC_PERM_COMMANDS_RELOAD_MAIL_LOOT_TEMPLATE = 669,
+ RBAC_PERM_COMMANDS_RELOAD_MILLING_LOOT_TEMPLATE = 670,
+ RBAC_PERM_COMMANDS_RELOAD_NPC_SPELLCLICK_SPELLS = 671,
+ RBAC_PERM_COMMANDS_RELOAD_NPC_TRAINER = 672,
+ RBAC_PERM_COMMANDS_RELOAD_NPC_VENDOR = 673,
+ RBAC_PERM_COMMANDS_RELOAD_PAGE_TEXT = 674,
+ RBAC_PERM_COMMANDS_RELOAD_PICKPOCKETING_LOOT_TEMPLATE = 675,
+ RBAC_PERM_COMMANDS_RELOAD_POINTS_OF_INTEREST = 676,
+ RBAC_PERM_COMMANDS_RELOAD_PROSPECTING_LOOT_TEMPLATE = 677,
+ RBAC_PERM_COMMANDS_RELOAD_QUEST_POI = 678,
+ RBAC_PERM_COMMANDS_RELOAD_QUEST_TEMPLATE = 679,
+ RBAC_PERM_COMMANDS_RELOAD_RBAC = 680,
+ RBAC_PERM_COMMANDS_RELOAD_REFERENCE_LOOT_TEMPLATE = 681,
+ RBAC_PERM_COMMANDS_RELOAD_REPUTATION_REWARD_RATE = 682,
+ RBAC_PERM_COMMANDS_RELOAD_RESERVED_NAME = 683,
+ RBAC_PERM_COMMANDS_RELOAD_SKILL_DISCOVERY_TEMPLATE = 684,
+ RBAC_PERM_COMMANDS_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE = 685,
+ RBAC_PERM_COMMANDS_RELOAD_SKILL_FISHING_BASE_LEVEL = 686,
+ RBAC_PERM_COMMANDS_RELOAD_SKINNING_LOOT_TEMPLATE = 687,
+ RBAC_PERM_COMMANDS_RELOAD_SMART_SCRIPTS = 688,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_AREA = 689,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_BONUS_DATA = 690,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP = 691,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP_STACK_RULES = 692,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_LEARN_SPELL = 693,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_LINKED_SPELL = 694,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_LOOT_TEMPLATE = 695,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_PET_AURAS = 696,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC = 697,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC_EVENT = 698,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_REQUIRED = 699,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_SCRIPTS = 700,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_TARGET_POSITION = 701,
+ RBAC_PERM_COMMANDS_RELOAD_SPELL_THREATS = 702,
+ RBAC_PERM_COMMANDS_RELOAD_SPILLOVER_TEMPLATE = 703,
+ RBAC_PERM_COMMANDS_RELOAD_TRINITY_STRING = 704,
+ RBAC_PERM_COMMANDS_RELOAD_VEHICLE_ACCESORY = 705,
+ RBAC_PERM_COMMANDS_RELOAD_VEHICLE_TEMPLATE_ACCESSORY = 706,
+ RBAC_PERM_COMMANDS_RELOAD_WARDEN_ACTION = 707,
+ RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_DATA = 708,
+ RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_SCRIPTS = 709,
+ RBAC_PERM_COMMAND_RESET = 710,
+ RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS = 711,
+ RBAC_PERM_COMMAND_RESET_HONOR = 712,
+ RBAC_PERM_COMMAND_RESET_LEVEL = 713,
+ RBAC_PERM_COMMAND_RESET_SPELLS = 714,
+ RBAC_PERM_COMMAND_RESET_STATS = 715,
+ RBAC_PERM_COMMAND_RESET_TALENTS = 716,
+ RBAC_PERM_COMMAND_RESET_ALL = 717,
+ RBAC_PERM_COMMAND_SERVER = 718,
+ RBAC_PERM_COMMAND_SERVER_CORPSES = 719,
+ RBAC_PERM_COMMAND_SERVER_EXIT = 720,
+ RBAC_PERM_COMMAND_SERVER_IDLERESTART = 721,
+ RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL = 722,
+ RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN = 723,
+ RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL = 724,
+ RBAC_PERM_COMMAND_SERVER_INFO = 725,
+ RBAC_PERM_COMMAND_SERVER_PLIMIT = 726,
+ RBAC_PERM_COMMAND_SERVER_RESTART = 727,
+ RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL = 728,
+ RBAC_PERM_COMMAND_SERVER_SET = 729,
+ RBAC_PERM_COMMAND_SERVER_SET_CLOSED = 730,
+ RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME = 731,
+ RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL = 732,
+ RBAC_PERM_COMMAND_SERVER_SET_MOTD = 733,
+ RBAC_PERM_COMMAND_SERVER_SHUTDOWN = 734,
+ RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL = 735,
+ RBAC_PERM_COMMAND_SERVER_MOTD = 736,
+ RBAC_PERM_COMMAND_TELE = 737,
+ RBAC_PERM_COMMAND_TELE_ADD = 738,
+ RBAC_PERM_COMMAND_TELE_DEL = 739,
+ RBAC_PERM_COMMAND_TELE_NAME = 740,
+ RBAC_PERM_COMMAND_TELE_GROUP = 741,
+ RBAC_PERM_COMMAND_TICKET = 742,
+ RBAC_PERM_COMMAND_TICKET_ASSIGN = 743,
+ RBAC_PERM_COMMAND_TICKET_CLOSE = 744,
+ RBAC_PERM_COMMAND_TICKET_CLOSEDLIST = 745,
+ RBAC_PERM_COMMAND_TICKET_COMMENT = 746,
+ RBAC_PERM_COMMAND_TICKET_COMPLETE = 747,
+ RBAC_PERM_COMMAND_TICKET_DELETE = 748,
+ RBAC_PERM_COMMAND_TICKET_ESCALATE = 749,
+ RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST = 750,
+ RBAC_PERM_COMMAND_TICKET_LIST = 751,
+ RBAC_PERM_COMMAND_TICKET_ONLINELIST = 752,
+ RBAC_PERM_COMMAND_TICKET_RESET = 753,
+ RBAC_PERM_COMMAND_TICKET_RESPONSE = 754,
+ RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND = 755,
+ RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN = 756,
+ RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM = 757,
+ RBAC_PERM_COMMAND_TICKET_UNASSIGN = 758,
+ RBAC_PERM_COMMAND_TICKET_VIEWID = 759,
+ RBAC_PERM_COMMAND_TICKET_VIEWNAME = 760,
+ RBAC_PERM_COMMAND_TITLES = 761,
+ RBAC_PERM_COMMAND_TITLES_ADD = 762,
+ RBAC_PERM_COMMAND_TITLES_CURRENT = 763,
+ RBAC_PERM_COMMAND_TITLES_REMOVE = 764,
+ RBAC_PERM_COMMAND_TITLES_SET = 765,
+ RBAC_PERM_COMMAND_TITLES_SET_MASK = 766,
+ RBAC_PERM_COMMAND_WP = 767,
+ RBAC_PERM_COMMAND_WP_ADD = 768,
+ RBAC_PERM_COMMAND_WP_EVENT = 769,
+ RBAC_PERM_COMMAND_WP_LOAD = 770,
+ RBAC_PERM_COMMAND_WP_MODIFY = 771,
+ RBAC_PERM_COMMAND_WP_UNLOAD = 772,
+ RBAC_PERM_COMMAND_WP_RELOAD = 773,
+ RBAC_PERM_COMMAND_WP_SHOW = 774,
+ RBAC_PERM_COMMAND_MODIFY_CURRENCY = 775, // only 4.3.4
+ RBAC_PERM_COMMAND_DEBUG_PHASE = 776, // Only 4.3.4
+
+ // custom permissions 1000+
+ RBAC_PERM_MAX
+};
+
+enum RBACCommandResult
+{
+ RBAC_OK,
+ RBAC_CANT_ADD_ALREADY_ADDED,
+ RBAC_CANT_REVOKE_NOT_IN_LIST,
+ RBAC_IN_GRANTED_LIST,
+ RBAC_IN_DENIED_LIST,
+ RBAC_ID_DOES_NOT_EXISTS
+};
+
+typedef std::bitset<RBAC_PERM_MAX> RBACPermissionContainer;
+typedef std::set<uint32> RBACRoleContainer;
+typedef std::set<uint32> RBACGroupContainer;
+
+class RBACObject
+{
+ public:
+ RBACObject(uint32 id = 0, std::string const& name = ""):
+ _id(id), _name(name) { }
+
+ virtual ~RBACObject() { }
+
+ /// Gets the Name of the Object
+ std::string const& GetName() const { return _name; }
+ /// Gets the Id of the Object
+ uint32 GetId() const { return _id; }
+
+ private:
+ uint32 _id; ///> id of the object
+ std::string _name; ///> name of the object
+};
+
+/// Permission: Defines an autorization to perform certain operation
+class RBACPermission: public RBACObject
+{
+ public:
+ RBACPermission(uint32 id = 0, std::string const& name = ""):
+ RBACObject(id, name) { }
+};
+
+/// Set of Permissions
+class RBACRole: public RBACObject
+{
+ public:
+ RBACRole(uint32 id = 0, std::string const& name = ""):
+ RBACObject(id, name) { }
+
+ /// Gets the Permissions assigned to this role
+ RBACPermissionContainer const& GetPermissions() const { return _perms; }
+ /// Grants a Permission (Adds)
+ void GrantPermission(uint32 id);
+ /// Revokes a Permission (Removes)
+ void RevokePermission(uint32 id);
+
+ private:
+ RBACPermissionContainer _perms; ///> Set of permissions
+};
+
+/// Set of Roles
+class RBACGroup: public RBACObject
+{
+ public:
+ RBACGroup(uint32 id = 0, std::string const& name = ""):
+ RBACObject(id, name) { }
+
+ /// Gets the Roles assigned to this group
+ RBACRoleContainer const& GetRoles() const { return _roles; }
+ /// Grants a Role (Adds)
+ void GrantRole(uint32 role);
+ /// Revokes a Role (Removes)
+ void RevokeRole(uint32 role);
+
+ private:
+ RBACRoleContainer _roles; ///> Set of Roles
+};
+
+/**
+ * @name RBACData
+ * @brief Contains all needed information about the acccount
+ *
+ * This class contains all the data needed to calculate the account permissions.
+ * RBACDAta is formed by group permissions and user permissions through:
+ * - Granted Groups, which contains roles, which contains permissions: Set of granted permissions
+ * - Granted Roles, which contains permissions: Set of granted permissions
+ * - Denied Roles, which contains permissions: Set of denied permissions
+ * - Granted Permissions
+ * - Denied Permissions
+ *
+ * Calculation of current Permissions: Granted permissions - Denied permissions
+ * - Granted permissions: through groups, through roles and directly assigned
+ * - Denied permissions: through roles and directly assigned
+ */
+class RBACData: public RBACObject
+{
+ public:
+ RBACData(uint32 id, std::string const& name, int32 realmId):
+ RBACObject(id, name), _realmId(realmId) { }
+
+ /**
+ * @name HasPermission
+ * @brief Checks if certain action is allowed
+ *
+ * Checks if certain action can be performed.
+ *
+ * @return grant or deny action
+ *
+ * Example Usage:
+ * @code
+ * bool Player::CanJoinArena(Battleground* bg)
+ * {
+ * return bg->isArena() && HasPermission(RBAC_PERM_JOIN_ARENA);
+ * }
+ * @endcode
+ */
+ bool HasPermission(uint32 permission) const { return _globalPerms.test(permission); }
+
+ // Functions enabled to be used by command system
+ /// Returns all the granted permissions (after computation)
+ RBACPermissionContainer const& GetPermissions() const { return _globalPerms; }
+ /// Returns all the granted permissions
+ RBACPermissionContainer const& GetGrantedPermissions() const { return _grantedPerms; }
+ /// Returns all the denied permissions
+ RBACPermissionContainer const& GetDeniedPermissions() const { return _deniedPerms; }
+ /// Returns all the granted roles
+ RBACRoleContainer const& GetGrantedRoles() const { return _grantedRoles; }
+ /// Returns all the denied roles
+ RBACRoleContainer const& GetDeniedRoles() const { return _deniedRoles; }
+ /// Returns all the granted groups
+ RBACGroupContainer const& GetGroups() const { return _groups; }
+
+ /**
+ * @name AddGroup
+ * @brief Adds new group
+ *
+ * Add a new group to the account. If realm is 0 or the group can not be added
+ * No save to db action will be performed.
+ *
+ * Fails if group Id does not exists or group already present
+ *
+ * @param groupId group to be added
+ * @param realmId realm affected
+ *
+ * @return Success or failure (with reason) to add the group
+ *
+ * Example Usage:
+ * @code
+ * // previously defined "RBACData* rbac" with proper initialization
+ * uint32 groupId = 2;
+ * if (rbac->AddGroup(groupId) == RBAC_OK)
+ * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Group %u succesfully added", groupId);
+ * @endcode
+ */
+ RBACCommandResult AddGroup(uint32 groupId, int32 realmId = 0);
+
+ /**
+ * @name RemoveGroup
+ * @brief Removes a group
+ *
+ * Removes a group from the account. If realm is 0 or the group can not be removed
+ * No save to db action will be performed. Any delete operation will always affect
+ * "all realms (-1)" in addition to the realm specified
+ *
+ * Fails if group not present
+ *
+ * @param groupId group to be removed
+ * @param realmId realm affected
+ *
+ * @return Success or failure (with reason) to remove the group
+ *
+ * Example Usage:
+ * // previously defined "RBACData* rbac" with proper initialization
+ * uint32 groupId = 2;
+ * if (rbac->RemoveGroup(groupId) == RBAC_OK)
+ * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Group %u succesfully removed", groupId);
+ * @endcode
+ */
+ RBACCommandResult RemoveGroup(uint32 groupId, int32 realmId = 0);
+
+ /**
+ * @name GrantRole
+ * @brief Grants a role
+ *
+ * Grants a role to the account. If realm is 0 or the role can not be added
+ * No save to db action will be performed.
+ *
+ * Fails if role Id does not exists or role already granted or denied
+ *
+ * @param roleId role to be granted
+ * @param realmId realm affected
+ *
+ * @return Success or failure (with reason) to grant the role
+ *
+ * Example Usage:
+ * // previously defined "RBACData* rbac" with proper initialization
+ * uint32 roleId = 2;
+ * if (rbac->GrantRole(roleId) == RBAC_IN_DENIED_LIST)
+ * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Failed to grant role %u, already denied", roleId);
+ * @endcode
+ */
+ RBACCommandResult GrantRole(uint32 roleId, int32 realmId = 0);
+
+ /**
+ * @name DenyRole
+ * @brief Denies a role
+ *
+ * Denied a role to the account. If realm is 0 or the role can not be added
+ * No save to db action will be performed.
+ *
+ * Fails if role Id does not exists or role already granted or denied
+ *
+ * @param roleId role to be denied
+ * @param realmId realm affected
+ *
+ * @return Success or failure (with reason) to deny the role
+ *
+ * Example Usage:
+ * // previously defined "RBACData* rbac" with proper initialization
+ * uint32 roleId = 2;
+ * if (rbac->DenyRole(roleId) == RBAC_ID_DOES_NOT_EXISTS)
+ * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role Id %u does not exists", roleId);
+ * @endcode
+ */
+ RBACCommandResult DenyRole(uint32 roleId, int32 realmId = 0);
+
+ /**
+ * @name RevokeRole
+ * @brief Removes a role
+ *
+ * Removes a role from the account. If realm is 0 or the role can not be removed
+ * No save to db action will be performed. Any delete operation will always affect
+ * "all realms (-1)" in addition to the realm specified
+ *
+ * Fails if role not present
+ *
+ * @param roleId role to be removed
+ * @param realmId realm affected
+ *
+ * @return Success or failure (with reason) to remove the role
+ *
+ * Example Usage:
+ * // previously defined "RBACData* rbac" with proper initialization
+ * uint32 roleId = 2;
+ * if (rbac->RevokeRole(roleId) == RBAC_OK)
+ * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role %u succesfully removed", roleId);
+ * @endcode
+ */
+ RBACCommandResult RevokeRole(uint32 roleId, int32 realmId = 0);
+
+ /**
+ * @name GrantRole
+ * @brief Grants a permission
+ *
+ * Grants a permission to the account. If realm is 0 or the permission can not be added
+ * No save to db action will be performed.
+ *
+ * Fails if permission Id does not exists or permission already granted or denied
+ *
+ * @param permissionId permission to be granted
+ * @param realmId realm affected
+ *
+ * @return Success or failure (with reason) to grant the permission
+ *
+ * Example Usage:
+ * // previously defined "RBACData* rbac" with proper initialization
+ * uint32 permissionId = 2;
+ * if (rbac->GrantRole(permissionId) == RBAC_IN_DENIED_LIST)
+ * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Failed to grant permission %u, already denied", permissionId);
+ * @endcode
+ */
+ RBACCommandResult GrantPermission(uint32 permissionId, int32 realmId = 0);
+
+ /**
+ * @name DenyPermission
+ * @brief Denies a permission
+ *
+ * Denied a permission to the account. If realm is 0 or the permission can not be added
+ * No save to db action will be performed.
+ *
+ * Fails if permission Id does not exists or permission already granted or denied
+ *
+ * @param permissionId permission to be denied
+ * @param realmId realm affected
+ *
+ * @return Success or failure (with reason) to deny the permission
+ *
+ * Example Usage:
+ * // previously defined "RBACData* rbac" with proper initialization
+ * uint32 permissionId = 2;
+ * if (rbac->DenyRole(permissionId) == RBAC_ID_DOES_NOT_EXISTS)
+ * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role Id %u does not exists", permissionId);
+ * @endcode
+ */
+ RBACCommandResult DenyPermission(uint32 permissionId, int32 realmId = 0);
+
+ /**
+ * @name RevokePermission
+ * @brief Removes a permission
+ *
+ * Removes a permission from the account. If realm is 0 or the permission can not be removed
+ * No save to db action will be performed. Any delete operation will always affect
+ * "all realms (-1)" in addition to the realm specified
+ *
+ * Fails if permission not present
+ *
+ * @param permissionId permission to be removed
+ * @param realmId realm affected
+ *
+ * @return Success or failure (with reason) to remove the permission
+ *
+ * Example Usage:
+ * // previously defined "RBACData* rbac" with proper initialization
+ * uint32 permissionId = 2;
+ * if (rbac->RevokeRole(permissionId) == RBAC_OK)
+ * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Permission %u succesfully removed", permissionId);
+ * @endcode
+ */
+ RBACCommandResult RevokePermission(uint32 permissionId, int32 realmId = 0);
+
+ /// Loads all permissions, groups and roles assigned to current account
+ void LoadFromDB();
+ private:
+ /// Saves a role to DB, Granted or Denied
+ void SaveRole(uint32 role, bool granted, int32 realm);
+ /// Saves a permission to DB, Granted or Denied
+ void SavePermission(uint32 role, bool granted, int32 realm);
+
+ /**
+ * @name CalculateNewPermissions
+ * @brief Calculates new permissions
+ *
+ * Calculates new permissions after some change in groups, roles or permissions.
+ * The calculation is done Granted - Denied:
+ * - Granted permissions: through groups, through roles and directly assigned
+ * - Denied permissions: through roles and directly assigned
+ */
+ void CalculateNewPermissions();
+
+ int32 GetRealmId() { return _realmId; }
+
+ int32 _realmId; ///> RealmId Affected
+ RBACGroupContainer _groups; ///> Granted groups
+ RBACRoleContainer _grantedRoles; ///> Granted roles
+ RBACRoleContainer _deniedRoles; ///> Denied roles
+ RBACPermissionContainer _grantedPerms; ///> Granted permissions
+ RBACPermissionContainer _deniedPerms; ///> Denied permissions
+ RBACPermissionContainer _globalPerms; ///> Calculated permissions
+};
+
+#endif
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index bdb11c6db0e..0eb96bc52e9 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -59,6 +59,7 @@ void AddSC_event_commandscript();
void AddSC_gm_commandscript();
void AddSC_go_commandscript();
void AddSC_gobject_commandscript();
+void AddSC_group_commandscript();
void AddSC_guild_commandscript();
void AddSC_honor_commandscript();
void AddSC_instance_commandscript();
@@ -71,10 +72,12 @@ void AddSC_misc_commandscript();
void AddSC_mmaps_commandscript();
void AddSC_modify_commandscript();
void AddSC_npc_commandscript();
+void AddSC_pet_commandscript();
void AddSC_quest_commandscript();
void AddSC_rbac_commandscript();
void AddSC_reload_commandscript();
void AddSC_reset_commandscript();
+void AddSC_send_commandscript();
void AddSC_server_commandscript();
void AddSC_tele_commandscript();
void AddSC_ticket_commandscript();
@@ -746,6 +749,7 @@ void AddCommandScripts()
AddSC_gm_commandscript();
AddSC_go_commandscript();
AddSC_gobject_commandscript();
+ AddSC_group_commandscript();
AddSC_guild_commandscript();
AddSC_honor_commandscript();
AddSC_instance_commandscript();
@@ -759,9 +763,11 @@ void AddCommandScripts()
AddSC_modify_commandscript();
AddSC_npc_commandscript();
AddSC_quest_commandscript();
+ AddSC_pet_commandscript();
AddSC_rbac_commandscript();
AddSC_reload_commandscript();
AddSC_reset_commandscript();
+ AddSC_send_commandscript();
AddSC_server_commandscript();
AddSC_tele_commandscript();
AddSC_ticket_commandscript();
diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt
index ce31fa1f4d3..c38789ed90a 100644
--- a/src/server/scripts/Commands/CMakeLists.txt
+++ b/src/server/scripts/Commands/CMakeLists.txt
@@ -8,109 +8,11 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+file(GLOB_RECURSE sources_Commands Commands/*.cpp Commands/*.h)
+
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
- Commands/cs_account.cpp
- Commands/cs_achievement.cpp
- Commands/cs_arena.cpp
- Commands/cs_ban.cpp
- Commands/cs_bf.cpp
- Commands/cs_cast.cpp
- Commands/cs_character.cpp
- Commands/cs_cheat.cpp
- Commands/cs_debug.cpp
- Commands/cs_deserter.cpp
- Commands/cs_disable.cpp
- Commands/cs_event.cpp
- Commands/cs_gm.cpp
- Commands/cs_go.cpp
- Commands/cs_gobject.cpp
- Commands/cs_guild.cpp
- Commands/cs_honor.cpp
- Commands/cs_instance.cpp
- Commands/cs_learn.cpp
- Commands/cs_lfg.cpp
- Commands/cs_list.cpp
- Commands/cs_lookup.cpp
- Commands/cs_message.cpp
- Commands/cs_misc.cpp
- Commands/cs_modify.cpp
- Commands/cs_npc.cpp
- Commands/cs_quest.cpp
- Commands/cs_rbac.cpp
- Commands/cs_reload.cpp
- Commands/cs_reset.cpp
- Commands/cs_tele.cpp
- Commands/cs_ticket.cpp
- Commands/cs_server.cpp
- Commands/cs_titles.cpp
- Commands/cs_wp.cpp
- Commands/cs_mmaps.cpp
-# Commands/cs_pdump.cpp
-# Commands/cs_channel.cpp
-# Commands/cs_pet.cpp
-# Commands/cs_aura.cpp
-# Commands/cs_unaura.cpp
-# Commands/cs_nameannounce.cpp
-# Commands/cs_gmnameannounce.cpp
-# Commands/cs_announce.cpp
-# Commands/cs_gmannounce.cpp
-# Commands/cs_notify.cpp
-# Commands/cs_gmnotify.cpp
-# Commands/cs_appear.cpp
-# Commands/cs_summon.cpp
-# Commands/cs_groupsummon.cpp
-# Commands/cs_commands.cpp
-# Commands/cs_demorph.cpp
-# Commands/cs_die.cpp
-# Commands/cs_revive.cpp
-# Commands/cs_dismount.cpp
-# Commands/cs_guid.cpp
-# Commands/cs_help.cpp
-# Commands/cs_itemmove.cpp
-# Commands/cs_cooldown.cpp
-# Commands/cs_unlearn.cpp
-# Commands/cs_distance.cpp
-# Commands/cs_recall.cpp
-# Commands/cs_save.cpp
-# Commands/cs_saveall.cpp
-# Commands/cs_kick.cpp
-# Commands/cs_start.cpp
-# Commands/cs_taxicheat.cpp
-# Commands/cs_linkgrave.cpp
-# Commands/cs_neargrave.cpp
-# Commands/cs_explorecheat.cpp
-# Commands/cs_hover.cpp
-# Commands/cs_levelup.cpp
-# Commands/cs_showarea.cpp
-# Commands/cs_hidearea.cpp
-# Commands/cs_additem.cpp
-# Commands/cs_additemset.cpp
-# Commands/cs_bank.cpp
-# Commands/cs_wchange.cpp
-# Commands/cs_maxskill.cpp
-# Commands/cs_setskill.cpp
-# Commands/cs_whispers.cpp
-# Commands/cs_pinfo.cpp
-# Commands/cs_respawn.cpp
-# Commands/cs_send.cpp
-# Commands/cs_mute.cpp
-# Commands/cs_unmute.cpp
-# Commands/cs_movegens.cpp
-# Commands/cs_cometome.cpp
-# Commands/cs_damage.cpp
-# Commands/cs_combatstop.cpp
-# Commands/cs_flusharenapoints.cpp
-# Commands/cs_repairitems.cpp
-# Commands/cs_waterwalk.cpp
-# Commands/cs_freeze.cpp
-# Commands/cs_unfreeze.cpp
-# Commands/cs_listfreeze.cpp
-# Commands/cs_possess.cpp
-# Commands/cs_unpossess.cpp
-# Commands/cs_bindsight.cpp
-# Commands/cs_unbindsight.cpp
-# Commands/cs_playall.cpp
+ ${sources_Commands}
)
message(" -> Prepared: Commands")
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 76635879aed..52971d6553f 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -91,7 +91,7 @@ public:
{ "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 },
+ { "phase", RBAC_PERM_COMMAND_DEBUG_PHASE, false, &HandleDebugPhaseCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp
new file mode 100644
index 00000000000..784ff216c41
--- /dev/null
+++ b/src/server/scripts/Commands/cs_group.cpp
@@ -0,0 +1,338 @@
+/*
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Chat.h"
+#include "Language.h"
+#include "LFG.h"
+#include "Player.h"
+#include "ObjectMgr.h"
+#include "GroupMgr.h"
+#include "ScriptMgr.h"
+
+class group_commandscript : public CommandScript
+{
+public:
+ group_commandscript() : CommandScript("group_commandscript") { }
+
+ ChatCommand* GetCommands() const OVERRIDE
+ {
+ static ChatCommand groupCommandTable[] =
+ {
+ { "leader", RBAC_PERM_COMMAND_GROUP_LEADER, false, &HandleGroupLeaderCommand, "", NULL },
+ { "disband", RBAC_PERM_COMMAND_GROUP_DISBAND, false, &HandleGroupDisbandCommand, "", NULL },
+ { "remove", RBAC_PERM_COMMAND_GROUP_REMOVE, false, &HandleGroupRemoveCommand, "", NULL },
+ { "join", RBAC_PERM_COMMAND_GROUP_JOIN, false, &HandleGroupJoinCommand, "", NULL },
+ { "list", RBAC_PERM_COMMAND_GROUP_LIST, false, &HandleGroupListCommand, "", NULL },
+ { "summon", RBAC_PERM_COMMAND_GROUP_SUMMON, false, &HandleGroupSummonCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ static ChatCommand commandTable[] =
+ {
+ { "group", RBAC_PERM_COMMAND_GROUP, false, NULL, "", groupCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+ return commandTable;
+ }
+
+ // Summon group of player
+ static bool HandleGroupSummonCommand(ChatHandler* handler, char const* args)
+ {
+ Player* target;
+ if (!handler->extractPlayerTarget((char*)args, &target))
+ return false;
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ Group* group = target->GetGroup();
+
+ std::string nameLink = handler->GetNameLink(target);
+
+ if (!group)
+ {
+ handler->PSendSysMessage(LANG_NOT_IN_GROUP, nameLink.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* gmPlayer = handler->GetSession()->GetPlayer();
+ Group* gmGroup = gmPlayer->GetGroup();
+ Map* gmMap = gmPlayer->GetMap();
+ bool toInstance = gmMap->Instanceable();
+
+ // we are in instance, and can summon only player in our group with us as lead
+ if (toInstance && (
+ !gmGroup || group->GetLeaderGUID() != gmPlayer->GetGUID() ||
+ gmGroup->GetLeaderGUID() != gmPlayer->GetGUID()))
+ // the last check is a bit excessive, but let it be, just in case
+ {
+ handler->SendSysMessage(LANG_CANNOT_SUMMON_TO_INST);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
+ {
+ Player* player = itr->GetSource();
+
+ if (!player || player == gmPlayer || !player->GetSession())
+ continue;
+
+ // check online security
+ if (handler->HasLowerSecurity(player, 0))
+ return false;
+
+ std::string plNameLink = handler->GetNameLink(player);
+
+ if (player->IsBeingTeleported())
+ {
+ handler->PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (toInstance)
+ {
+ Map* playerMap = player->GetMap();
+
+ if (playerMap->Instanceable() && playerMap->GetInstanceId() != gmMap->GetInstanceId())
+ {
+ // cannot summon from instance to instance
+ handler->PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST, plNameLink.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+ }
+
+ handler->PSendSysMessage(LANG_SUMMONING, plNameLink.c_str(), "");
+ if (handler->needReportToTarget(player))
+ ChatHandler(player->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->GetNameLink().c_str());
+
+ // stop flight if need
+ if (player->IsInFlight())
+ {
+ player->GetMotionMaster()->MovementExpired();
+ player->CleanupAfterTaxiFlight();
+ }
+ // save only in non-flight case
+ else
+ player->SaveRecallPosition();
+
+ // before GM
+ float x, y, z;
+ gmPlayer->GetClosePoint(x, y, z, player->GetObjectSize());
+ player->TeleportTo(gmPlayer->GetMapId(), x, y, z, player->GetOrientation());
+ }
+
+ return true;
+ }
+
+ static bool HandleGroupLeaderCommand(ChatHandler* handler, char const* args)
+ {
+ Player* player = NULL;
+ Group* group = NULL;
+ uint64 guid = 0;
+ char* nameStr = strtok((char*)args, " ");
+
+ if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
+ return false;
+
+ if (!group)
+ {
+ handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (group->GetLeaderGUID() != guid)
+ {
+ group->ChangeLeader(guid);
+ group->SendUpdate();
+ }
+
+ return true;
+ }
+
+ static bool HandleGroupDisbandCommand(ChatHandler* handler, char const* args)
+ {
+ Player* player = NULL;
+ Group* group = NULL;
+ uint64 guid = 0;
+ char* nameStr = strtok((char*)args, " ");
+
+ if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
+ return false;
+
+ if (!group)
+ {
+ handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ group->Disband();
+ return true;
+ }
+
+ static bool HandleGroupRemoveCommand(ChatHandler* handler, char const* args)
+ {
+ Player* player = NULL;
+ Group* group = NULL;
+ uint64 guid = 0;
+ char* nameStr = strtok((char*)args, " ");
+
+ if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
+ return false;
+
+ if (!group)
+ {
+ handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ group->RemoveMember(guid);
+ return true;
+ }
+
+ static bool HandleGroupJoinCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* playerSource = NULL;
+ Player* playerTarget = NULL;
+ Group* groupSource = NULL;
+ Group* groupTarget = NULL;
+ uint64 guidSource = 0;
+ uint64 guidTarget = 0;
+ char* nameplgrStr = strtok((char*)args, " ");
+ char* nameplStr = strtok(NULL, " ");
+
+ if (!handler->GetPlayerGroupAndGUIDByName(nameplgrStr, playerSource, groupSource, guidSource, true))
+ return false;
+
+ if (!groupSource)
+ {
+ handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, playerSource->GetName().c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!handler->GetPlayerGroupAndGUIDByName(nameplStr, playerTarget, groupTarget, guidTarget, true))
+ return false;
+
+ if (groupTarget || playerTarget->GetGroup() == groupSource)
+ {
+ handler->PSendSysMessage(LANG_GROUP_ALREADY_IN_GROUP, playerTarget->GetName().c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!groupSource->IsFull())
+ {
+ handler->PSendSysMessage(LANG_GROUP_FULL);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ groupSource->AddMember(playerTarget);
+ groupSource->BroadcastGroupUpdate();
+ handler->PSendSysMessage(LANG_GROUP_PLAYER_JOINED, playerTarget->GetName().c_str(), playerSource->GetName().c_str());
+ return true;
+ }
+
+ static bool HandleGroupListCommand(ChatHandler* handler, char const* args)
+ {
+ Player* playerTarget;
+ uint64 guidTarget;
+ std::string nameTarget;
+
+ uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER);
+
+ if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget))
+ {
+ playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID);
+ guidTarget = parseGUID;
+ }
+ else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget))
+ return false;
+
+ Group* groupTarget = NULL;
+ if (playerTarget)
+ groupTarget = playerTarget->GetGroup();
+
+ if (!groupTarget)
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER);
+ stmt->setUInt32(0, guidTarget);
+ PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt);
+ if (resultGroup)
+ groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32());
+ }
+
+ if (!groupTarget)
+ {
+ handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party"));
+ Group::MemberSlotList const& members = groupTarget->GetMemberSlots();
+ for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
+ {
+ Group::MemberSlot const& slot = *itr;
+
+ std::string flags;
+ if (slot.flags & MEMBER_FLAG_ASSISTANT)
+ flags = "Assistant";
+
+ if (slot.flags & MEMBER_FLAG_MAINTANK)
+ {
+ if (!flags.empty())
+ flags.append(", ");
+ flags.append("MainTank");
+ }
+
+ if (slot.flags & MEMBER_FLAG_MAINASSIST)
+ {
+ if (!flags.empty())
+ flags.append(", ");
+ flags.append("MainAssist");
+ }
+
+ if (flags.empty())
+ flags = "None";
+
+ Player* p = ObjectAccessor::FindPlayer((*itr).guid);
+ const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline";
+
+ handler->PSendSysMessage(LANG_GROUP_PLAYER_NAME_GUID, slot.name.c_str(), onlineState,
+ GUID_LOPART(slot.guid), flags.c_str(), lfg::GetRolesString(slot.roles).c_str());
+ }
+
+ return true;
+ }
+};
+
+void AddSC_group_commandscript()
+{
+ new group_commandscript();
+}
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 486816d4de8..f05bb58b5b0 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -44,84 +44,56 @@ public:
ChatCommand* GetCommands() const OVERRIDE
{
- static ChatCommand groupCommandTable[] =
- {
- { "leader", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupLeaderCommand, "", NULL },
- { "disband", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupDisbandCommand, "", NULL },
- { "remove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupRemoveCommand, "", NULL },
- { "join", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupJoinCommand, "", NULL },
- { "list", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupListCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
- };
- static ChatCommand petCommandTable[] =
- {
- { "create", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleCreatePetCommand, "", NULL },
- { "learn", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandlePetLearnCommand, "", NULL },
- { "unlearn", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandlePetUnlearnCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
- };
- static ChatCommand sendCommandTable[] =
- {
- { "items", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendItemsCommand, "", NULL },
- { "mail", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleSendMailCommand, "", NULL },
- { "message", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendMessageCommand, "", NULL },
- { "money", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendMoneyCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
- };
static ChatCommand commandTable[] =
{
- { "dev", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDevCommand, "", NULL },
- { "gps", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGPSCommand, "", NULL },
- { "aura", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleAuraCommand, "", NULL },
- { "unaura", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleUnAuraCommand, "", NULL },
- { "appear", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleAppearCommand, "", NULL },
- { "summon", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleSummonCommand, "", NULL },
- { "groupsummon", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGroupSummonCommand, "", NULL },
- { "commands", RBAC_PERM_PLAYER_COMMANDS, true, &HandleCommandsCommand, "", NULL },
- { "die", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDieCommand, "", NULL },
- { "revive", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReviveCommand, "", NULL },
- { "dismount", RBAC_PERM_PLAYER_COMMANDS, false, &HandleDismountCommand, "", NULL },
- { "guid", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGUIDCommand, "", NULL },
- { "help", RBAC_PERM_PLAYER_COMMANDS, true, &HandleHelpCommand, "", NULL },
- { "itemmove", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleItemMoveCommand, "", NULL },
- { "cooldown", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleCooldownCommand, "", NULL },
- { "distance", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGetDistanceCommand, "", NULL },
- { "recall", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleRecallCommand, "", NULL },
- { "save", RBAC_PERM_PLAYER_COMMANDS, false, &HandleSaveCommand, "", NULL },
- { "saveall", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleSaveAllCommand, "", NULL },
- { "kick", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleKickPlayerCommand, "", NULL },
- { "unstuck", RBAC_PERM_PLAYER_COMMANDS, true, &HandleUnstuckCommand, "", NULL },
- { "linkgrave", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLinkGraveCommand, "", NULL },
- { "neargrave", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNearGraveCommand, "", NULL },
- { "showarea", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleShowAreaCommand, "", NULL },
- { "hidearea", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleHideAreaCommand, "", NULL },
- { "additem", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleAddItemCommand, "", NULL },
- { "additemset", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleAddItemSetCommand, "", NULL },
- { "bank", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleBankCommand, "", NULL },
- { "wchange", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleChangeWeather, "", NULL },
- { "maxskill", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMaxSkillCommand, "", NULL },
- { "setskill", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleSetSkillCommand, "", NULL },
- { "pinfo", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandlePInfoCommand, "", NULL },
- { "respawn", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleRespawnCommand, "", NULL },
- { "send", RBAC_PERM_MODERATOR_COMMANDS, true, NULL, "", sendCommandTable },
- { "pet", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", petCommandTable },
- { "mute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleMuteCommand, "", NULL },
- { "unmute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleUnmuteCommand, "", NULL },
- { "movegens", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMovegensCommand, "", NULL },
- { "cometome", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleComeToMeCommand, "", NULL },
- { "damage", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDamageCommand, "", NULL },
- { "combatstop", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleCombatStopCommand, "", NULL },
- { "repairitems", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleRepairitemsCommand, "", NULL },
- { "freeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleFreezeCommand, "", NULL },
- { "unfreeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleUnFreezeCommand, "", NULL },
- { "listfreeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleListFreezeCommand, "", NULL },
- { "group", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", groupCommandTable },
- { "possess", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandlePossessCommand, "", NULL },
- { "unpossess", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleUnPossessCommand, "", NULL },
- { "bindsight", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleBindSightCommand, "", NULL },
- { "unbindsight", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleUnbindSightCommand, "", NULL },
- { "playall", RBAC_PERM_GAMEMASTER_COMMANDS, false, HandlePlayAllCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "additem", RBAC_PERM_COMMAND_ADDITEM, false, &HandleAddItemCommand, "", NULL },
+ { "additemset", RBAC_PERM_COMMAND_ADDITEMSET, false, &HandleAddItemSetCommand, "", NULL },
+ { "appear", RBAC_PERM_COMMAND_APPEAR, false, &HandleAppearCommand, "", NULL },
+ { "aura", RBAC_PERM_COMMAND_AURA, false, &HandleAuraCommand, "", NULL },
+ { "bank", RBAC_PERM_COMMAND_BANK, false, &HandleBankCommand, "", NULL },
+ { "bindsight", RBAC_PERM_COMMAND_BINDSIGHT, false, &HandleBindSightCommand, "", NULL },
+ { "combatstop", RBAC_PERM_COMMAND_COMBATSTOP, true, &HandleCombatStopCommand, "", NULL },
+ { "cometome", RBAC_PERM_COMMAND_COMETOME, false, &HandleComeToMeCommand, "", NULL },
+ { "commands", RBAC_PERM_COMMAND_COMMANDS, true, &HandleCommandsCommand, "", NULL },
+ { "cooldown", RBAC_PERM_COMMAND_COOLDOWN, false, &HandleCooldownCommand, "", NULL },
+ { "damage", RBAC_PERM_COMMAND_DAMAGE, false, &HandleDamageCommand, "", NULL },
+ { "dev", RBAC_PERM_COMMAND_DEV, false, &HandleDevCommand, "", NULL },
+ { "die", RBAC_PERM_COMMAND_DIE, false, &HandleDieCommand, "", NULL },
+ { "dismount", RBAC_PERM_COMMAND_DISMOUNT, false, &HandleDismountCommand, "", NULL },
+ { "distance", RBAC_PERM_COMMAND_DISTANCE, false, &HandleGetDistanceCommand, "", NULL },
+ { "freeze", RBAC_PERM_COMMAND_FREEZE, false, &HandleFreezeCommand, "", NULL },
+ { "gps", RBAC_PERM_COMMAND_GPS, false, &HandleGPSCommand, "", NULL },
+ { "guid", RBAC_PERM_COMMAND_GUID, false, &HandleGUIDCommand, "", NULL },
+ { "help", RBAC_PERM_COMMAND_HELP, true, &HandleHelpCommand, "", NULL },
+ { "hidearea", RBAC_PERM_COMMAND_HIDEAREA, false, &HandleHideAreaCommand, "", NULL },
+ { "itemmove", RBAC_PERM_COMMAND_ITEMMOVE, false, &HandleItemMoveCommand, "", NULL },
+ { "kick", RBAC_PERM_COMMAND_KICK, true, &HandleKickPlayerCommand, "", NULL },
+ { "linkgrave", RBAC_PERM_COMMAND_LINKGRAVE, false, &HandleLinkGraveCommand, "", NULL },
+ { "listfreeze", RBAC_PERM_COMMAND_LISTFREEZE, false, &HandleListFreezeCommand, "", NULL },
+ { "maxskill", RBAC_PERM_COMMAND_MAXSKILL, false, &HandleMaxSkillCommand, "", NULL },
+ { "movegens", RBAC_PERM_COMMAND_MOVEGENS, false, &HandleMovegensCommand, "", NULL },
+ { "mute", RBAC_PERM_COMMAND_MUTE, true, &HandleMuteCommand, "", NULL },
+ { "neargrave", RBAC_PERM_COMMAND_NEARGRAVE, false, &HandleNearGraveCommand, "", NULL },
+ { "pinfo", RBAC_PERM_COMMAND_PINFO, true, &HandlePInfoCommand, "", NULL },
+ { "playall", RBAC_PERM_COMMAND_PLAYALL, false, &HandlePlayAllCommand, "", NULL },
+ { "possess", RBAC_PERM_COMMAND_POSSESS, false, &HandlePossessCommand, "", NULL },
+ { "recall", RBAC_PERM_COMMAND_RECALL, false, &HandleRecallCommand, "", NULL },
+ { "repairitems", RBAC_PERM_COMMAND_REPAIRITEMS, true, &HandleRepairitemsCommand, "", NULL },
+ { "respawn", RBAC_PERM_COMMAND_RESPAWN, false, &HandleRespawnCommand, "", NULL },
+ { "revive", RBAC_PERM_COMMAND_REVIVE, true, &HandleReviveCommand, "", NULL },
+ { "saveall", RBAC_PERM_COMMAND_SAVEALL, true, &HandleSaveAllCommand, "", NULL },
+ { "save", RBAC_PERM_COMMAND_SAVE, false, &HandleSaveCommand, "", NULL },
+ { "setskill", RBAC_PERM_COMMAND_SETSKILL, false, &HandleSetSkillCommand, "", NULL },
+ { "showarea", RBAC_PERM_COMMAND_SHOWAREA, false, &HandleShowAreaCommand, "", NULL },
+ { "summon", RBAC_PERM_COMMAND_SUMMON, false, &HandleSummonCommand, "", NULL },
+ { "unaura", RBAC_PERM_COMMAND_UNAURA, false, &HandleUnAuraCommand, "", NULL },
+ { "unbindsight", RBAC_PERM_COMMAND_UNBINDSIGHT, false, HandleUnbindSightCommand, "", NULL },
+ { "unfreeze", RBAC_PERM_COMMAND_UNFREEZE, false, &HandleUnFreezeCommand, "", NULL },
+ { "unmute", RBAC_PERM_COMMAND_UNMUTE, true, &HandleUnmuteCommand, "", NULL },
+ { "unpossess", RBAC_PERM_COMMAND_UNPOSSESS, false, &HandleUnPossessCommand, "", NULL },
+ { "unstuck", RBAC_PERM_COMMAND_UNSTUCK, true, &HandleUnstuckCommand, "", NULL },
+ { "wchange", RBAC_PERM_COMMAND_WCHANGE, false, &HandleChangeWeather, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -545,97 +517,6 @@ public:
return true;
}
- // Summon group of player
- static bool HandleGroupSummonCommand(ChatHandler* handler, char const* args)
- {
- Player* target;
- if (!handler->extractPlayerTarget((char*)args, &target))
- return false;
-
- // check online security
- if (handler->HasLowerSecurity(target, 0))
- return false;
-
- Group* group = target->GetGroup();
-
- std::string nameLink = handler->GetNameLink(target);
-
- if (!group)
- {
- handler->PSendSysMessage(LANG_NOT_IN_GROUP, nameLink.c_str());
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- Map* gmMap = handler->GetSession()->GetPlayer()->GetMap();
- bool toInstance = gmMap->Instanceable();
-
- // we are in instance, and can summon only player in our group with us as lead
- if (toInstance && (
- !handler->GetSession()->GetPlayer()->GetGroup() || (group->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()) ||
- (handler->GetSession()->GetPlayer()->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID())))
- // the last check is a bit excessive, but let it be, just in case
- {
- handler->SendSysMessage(LANG_CANNOT_SUMMON_TO_INST);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
- {
- Player* player = itr->GetSource();
-
- if (!player || player == handler->GetSession()->GetPlayer() || !player->GetSession())
- continue;
-
- // check online security
- if (handler->HasLowerSecurity(player, 0))
- return false;
-
- std::string plNameLink = handler->GetNameLink(player);
-
- if (player->IsBeingTeleported() == true)
- {
- handler->PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str());
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (toInstance)
- {
- Map* playerMap = player->GetMap();
-
- if (playerMap->Instanceable() && playerMap->GetInstanceId() != gmMap->GetInstanceId())
- {
- // cannot summon from instance to instance
- handler->PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST, plNameLink.c_str());
- handler->SetSentErrorMessage(true);
- return false;
- }
- }
-
- handler->PSendSysMessage(LANG_SUMMONING, plNameLink.c_str(), "");
- if (handler->needReportToTarget(player))
- ChatHandler(player->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->GetNameLink().c_str());
-
- // stop flight if need
- if (player->IsInFlight())
- {
- player->GetMotionMaster()->MovementExpired();
- player->CleanupAfterTaxiFlight();
- }
- // save only in non-flight case
- else
- player->SaveRecallPosition();
-
- // before GM
- float x, y, z;
- handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, player->GetObjectSize());
- player->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, player->GetOrientation());
- }
-
- return true;
- }
static bool HandleCommandsCommand(ChatHandler* handler, char const* /*args*/)
{
@@ -2351,380 +2232,6 @@ public:
return true;
}
- // Send mail by command
- static bool HandleSendMailCommand(ChatHandler* handler, char const* args)
- {
- // format: name "subject text" "mail text"
- Player* target;
- uint64 targetGuid;
- std::string targetName;
- if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
- return false;
-
- char* tail1 = strtok(NULL, "");
- if (!tail1)
- return false;
-
- char const* msgSubject = handler->extractQuotedArg(tail1);
- if (!msgSubject)
- return false;
-
- char* tail2 = strtok(NULL, "");
- if (!tail2)
- return false;
-
- char const* msgText = handler->extractQuotedArg(tail2);
- if (!msgText)
- return false;
-
- // msgSubject, msgText isn't NUL after prev. check
- std::string subject = msgSubject;
- std::string text = msgText;
-
- // from console show not existed sender
- MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
-
- /// @todo Fix poor design
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
- MailDraft(subject, text)
- .SendMailTo(trans, MailReceiver(target, GUID_LOPART(targetGuid)), sender);
-
- CharacterDatabase.CommitTransaction(trans);
-
- std::string nameLink = handler->playerLink(targetName);
- handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
- return true;
- }
- // Send items by mail
- static bool HandleSendItemsCommand(ChatHandler* handler, char const* args)
- {
- // format: name "subject text" "mail text" item1[:count1] item2[:count2] ... item12[:count12]
- Player* receiver;
- uint64 receiverGuid;
- std::string receiverName;
- if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName))
- return false;
-
- char* tail1 = strtok(NULL, "");
- if (!tail1)
- return false;
-
- char const* msgSubject = handler->extractQuotedArg(tail1);
- if (!msgSubject)
- return false;
-
- char* tail2 = strtok(NULL, "");
- if (!tail2)
- return false;
-
- char const* msgText = handler->extractQuotedArg(tail2);
- if (!msgText)
- return false;
-
- // msgSubject, msgText isn't NUL after prev. check
- std::string subject = msgSubject;
- std::string text = msgText;
-
- // extract items
- typedef std::pair<uint32, uint32> ItemPair;
- typedef std::list< ItemPair > ItemPairs;
- ItemPairs items;
-
- // get all tail string
- char* tail = strtok(NULL, "");
-
- // get from tail next item str
- while (char* itemStr = strtok(tail, " "))
- {
- // and get new tail
- tail = strtok(NULL, "");
-
- // parse item str
- char const* itemIdStr = strtok(itemStr, ":");
- char const* itemCountStr = strtok(NULL, " ");
-
- uint32 itemId = atoi(itemIdStr);
- if (!itemId)
- return false;
-
- ItemTemplate const* item_proto = sObjectMgr->GetItemTemplate(itemId);
- if (!item_proto)
- {
- handler->PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemId);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- uint32 itemCount = itemCountStr ? atoi(itemCountStr) : 1;
- if (itemCount < 1 || (item_proto->MaxCount > 0 && itemCount > uint32(item_proto->MaxCount)))
- {
- handler->PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, itemCount, itemId);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- while (itemCount > item_proto->GetMaxStackSize())
- {
- items.push_back(ItemPair(itemId, item_proto->GetMaxStackSize()));
- itemCount -= item_proto->GetMaxStackSize();
- }
-
- items.push_back(ItemPair(itemId, itemCount));
-
- if (items.size() > MAX_MAIL_ITEMS)
- {
- handler->PSendSysMessage(LANG_COMMAND_MAIL_ITEMS_LIMIT, MAX_MAIL_ITEMS);
- handler->SetSentErrorMessage(true);
- return false;
- }
- }
-
- // from console show not existed sender
- MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
-
- // fill mail
- MailDraft draft(subject, text);
-
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
-
- for (ItemPairs::const_iterator itr = items.begin(); itr != items.end(); ++itr)
- {
- if (Item* item = Item::CreateItem(itr->first, itr->second, handler->GetSession() ? handler->GetSession()->GetPlayer() : 0))
- {
- item->SaveToDB(trans); // save for prevent lost at next mail load, if send fail then item will deleted
- draft.AddItem(item);
- }
- }
-
- draft.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender);
- CharacterDatabase.CommitTransaction(trans);
-
- std::string nameLink = handler->playerLink(receiverName);
- handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
- return true;
- }
- /// Send money by mail
- static bool HandleSendMoneyCommand(ChatHandler* handler, char const* args)
- {
- /// format: name "subject text" "mail text" money
-
- Player* receiver;
- uint64 receiverGuid;
- std::string receiverName;
- if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName))
- return false;
-
- char* tail1 = strtok(NULL, "");
- if (!tail1)
- return false;
-
- char* msgSubject = handler->extractQuotedArg(tail1);
- if (!msgSubject)
- return false;
-
- char* tail2 = strtok(NULL, "");
- if (!tail2)
- return false;
-
- char* msgText = handler->extractQuotedArg(tail2);
- if (!msgText)
- return false;
-
- char* moneyStr = strtok(NULL, "");
- int32 money = moneyStr ? atoi(moneyStr) : 0;
- if (money <= 0)
- return false;
-
- // msgSubject, msgText isn't NUL after prev. check
- std::string subject = msgSubject;
- std::string text = msgText;
-
- // from console show not existed sender
- MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
-
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
-
- MailDraft(subject, text)
- .AddMoney(money)
- .SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender);
-
- CharacterDatabase.CommitTransaction(trans);
-
- std::string nameLink = handler->playerLink(receiverName);
- handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
- return true;
- }
- /// Send a message to a player in game
- static bool HandleSendMessageCommand(ChatHandler* handler, char const* args)
- {
- /// - Find the player
- Player* player;
- if (!handler->extractPlayerTarget((char*)args, &player))
- return false;
-
- char* msgStr = strtok(NULL, "");
- if (!msgStr)
- return false;
-
- ///- Check that he is not logging out.
- if (player->GetSession()->isLogingOut())
- {
- handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- /// - Send the message
- // Use SendAreaTriggerMessage for fastest delivery.
- player->GetSession()->SendAreaTriggerMessage("%s", msgStr);
- player->GetSession()->SendAreaTriggerMessage("|cffff0000[Message from administrator]:|r");
-
- // Confirmation message
- std::string nameLink = handler->GetNameLink(player);
- handler->PSendSysMessage(LANG_SENDMESSAGE, nameLink.c_str(), msgStr);
-
- return true;
- }
-
- static bool HandleCreatePetCommand(ChatHandler* handler, char const* /*args*/)
- {
- Player* player = handler->GetSession()->GetPlayer();
- Creature* creatureTarget = handler->getSelectedCreature();
-
- if (!creatureTarget || creatureTarget->IsPet() || creatureTarget->GetTypeId() == TYPEID_PLAYER)
- {
- handler->PSendSysMessage(LANG_SELECT_CREATURE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- CreatureTemplate const* creatrueTemplate = sObjectMgr->GetCreatureTemplate(creatureTarget->GetEntry());
- // Creatures with family 0 crashes the server
- if (!creatrueTemplate->family)
- {
- handler->PSendSysMessage("This creature cannot be tamed. (family id: 0).");
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (player->GetPetGUID())
- {
- handler->PSendSysMessage("You already have a pet");
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- // Everything looks OK, create new pet
- Pet* pet = new Pet(player, HUNTER_PET);
- if (!pet->CreateBaseAtCreature(creatureTarget))
- {
- delete pet;
- handler->PSendSysMessage("Error 1");
- return false;
- }
-
- creatureTarget->setDeathState(JUST_DIED);
- creatureTarget->RemoveCorpse();
- creatureTarget->SetHealth(0); // just for nice GM-mode view
-
- pet->SetUInt64Value(UNIT_FIELD_CREATEDBY, player->GetGUID());
- pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction());
-
- if (!pet->InitStatsForLevel(creatureTarget->getLevel()))
- {
- TC_LOG_ERROR(LOG_FILTER_GENERAL, "InitStatsForLevel() in EffectTameCreature failed! Pet deleted.");
- handler->PSendSysMessage("Error 2");
- delete pet;
- return false;
- }
-
- // prepare visual effect for levelup
- pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()-1);
-
- pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
- // this enables pet details window (Shift+P)
- pet->InitPetCreateSpells();
- pet->SetFullHealth();
-
- pet->GetMap()->AddToMap(pet->ToCreature());
-
- // visual effect for levelup
- pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel());
-
- player->SetMinion(pet, true);
- pet->SavePetToDB(PET_SAVE_AS_CURRENT);
- player->PetSpellInitialize();
-
- return true;
- }
-
- static bool HandlePetLearnCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- Player* player = handler->GetSession()->GetPlayer();
- Pet* pet = player->GetPet();
-
- if (!pet)
- {
- handler->PSendSysMessage("You have no pet");
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- uint32 spellId = handler->extractSpellIdFromLink((char*)args);
-
- if (!spellId || !sSpellMgr->GetSpellInfo(spellId))
- return false;
-
- // Check if pet already has it
- if (pet->HasSpell(spellId))
- {
- handler->PSendSysMessage("Pet already has spell: %u", spellId);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- // Check if spell is valid
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo))
- {
- handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- pet->learnSpell(spellId);
-
- handler->PSendSysMessage("Pet has learned spell %u", spellId);
- return true;
- }
-
- static bool HandlePetUnlearnCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- Player* player = handler->GetSession()->GetPlayer();
- Pet* pet = player->GetPet();
- if (!pet)
- {
- handler->PSendSysMessage("You have no pet");
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- uint32 spellId = handler->extractSpellIdFromLink((char*)args);
-
- if (pet->HasSpell(spellId))
- pet->removeSpell(spellId, false);
- else
- handler->PSendSysMessage("Pet doesn't have that spell");
-
- return true;
- }
-
static bool HandleFreezeCommand(ChatHandler* handler, char const* args)
{
std::string name;
@@ -2887,177 +2394,6 @@ public:
return true;
}
- static bool HandleGroupLeaderCommand(ChatHandler* handler, char const* args)
- {
- Player* player = NULL;
- Group* group = NULL;
- uint64 guid = 0;
- char* nameStr = strtok((char*)args, " ");
-
- if (handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
- if (group && group->GetLeaderGUID() != guid)
- {
- group->ChangeLeader(guid);
- group->SendUpdate();
- }
-
- return true;
- }
-
- static bool HandleGroupDisbandCommand(ChatHandler* handler, char const* args)
- {
- Player* player = NULL;
- Group* group = NULL;
- uint64 guid = 0;
- char* nameStr = strtok((char*)args, " ");
-
- if (handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
- if (group)
- group->Disband();
-
- return true;
- }
-
- static bool HandleGroupRemoveCommand(ChatHandler* handler, char const* args)
- {
- Player* player = NULL;
- Group* group = NULL;
- uint64 guid = 0;
- char* nameStr = strtok((char*)args, " ");
-
- if (handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid, true))
- if (group)
- group->RemoveMember(guid);
-
- return true;
- }
-
- static bool HandleGroupJoinCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- Player* playerSource = NULL;
- Player* playerTarget = NULL;
- Group* groupSource = NULL;
- Group* groupTarget = NULL;
- uint64 guidSource = 0;
- uint64 guidTarget = 0;
- char* nameplgrStr = strtok((char*)args, " ");
- char* nameplStr = strtok(NULL, " ");
-
- if (handler->GetPlayerGroupAndGUIDByName(nameplgrStr, playerSource, groupSource, guidSource, true))
- {
- if (groupSource)
- {
- if (handler->GetPlayerGroupAndGUIDByName(nameplStr, playerTarget, groupTarget, guidTarget, true))
- {
- if (!groupTarget && playerTarget->GetGroup() != groupSource)
- {
- if (!groupSource->IsFull())
- {
- groupSource->AddMember(playerTarget);
- groupSource->BroadcastGroupUpdate();
- handler->PSendSysMessage(LANG_GROUP_PLAYER_JOINED, playerTarget->GetName().c_str(), playerSource->GetName().c_str());
- return true;
- }
- else
- {
- // group is full
- handler->PSendSysMessage(LANG_GROUP_FULL);
- return true;
- }
- }
- else
- {
- // group is full or target player already in a group
- handler->PSendSysMessage(LANG_GROUP_ALREADY_IN_GROUP, playerTarget->GetName().c_str());
- return true;
- }
- }
- }
- else
- {
- // specified source player is not in a group
- handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, playerSource->GetName().c_str());
- return true;
- }
- }
-
- return true;
- }
-
- static bool HandleGroupListCommand(ChatHandler* handler, char const* args)
- {
- Player* playerTarget;
- uint64 guidTarget;
- std::string nameTarget;
-
- uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER);
-
- if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget))
- {
- playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID);
- guidTarget = parseGUID;
- }
- else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget))
- return false;
-
- Group* groupTarget = NULL;
- if (playerTarget)
- groupTarget = playerTarget->GetGroup();
-
- if (!groupTarget)
- {
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER);
- stmt->setUInt32(0, guidTarget);
- PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt);
- if (resultGroup)
- groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32());
- }
-
- if (groupTarget)
- {
- handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party"));
- Group::MemberSlotList const& members = groupTarget->GetMemberSlots();
- for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
- {
- Group::MemberSlot const& slot = *itr;
-
- std::string flags;
- if (slot.flags & MEMBER_FLAG_ASSISTANT)
- flags = "Assistant";
-
- if (slot.flags & MEMBER_FLAG_MAINTANK)
- {
- if (!flags.empty())
- flags.append(", ");
- flags.append("MainTank");
- }
-
- if (slot.flags & MEMBER_FLAG_MAINASSIST)
- {
- if (!flags.empty())
- flags.append(", ");
- flags.append("MainAssist");
- }
-
- if (flags.empty())
- flags = "None";
-
- Player* p = ObjectAccessor::FindPlayer((*itr).guid);
- const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline";
-
- handler->PSendSysMessage(LANG_GROUP_PLAYER_NAME_GUID, slot.name.c_str(), onlineState,
- GUID_LOPART(slot.guid), flags.c_str(), lfg::GetRolesString(slot.roles).c_str());
- }
- }
- else
- handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str());
-
- return true;
- }
-
static bool HandlePlayAllCommand(ChatHandler* handler, char const* args)
{
if (!*args)
diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp
index 6667499af58..caefcceb886 100644
--- a/src/server/scripts/Commands/cs_mmaps.cpp
+++ b/src/server/scripts/Commands/cs_mmaps.cpp
@@ -45,18 +45,18 @@ public:
{
static ChatCommand mmapCommandTable[] =
{
- { "path", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapPathCommand, "", NULL },
- { "loc", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapLocCommand, "", NULL },
- { "loadedtiles", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapLoadedTilesCommand, "", NULL },
- { "stats", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapStatsCommand, "", NULL },
- { "testarea", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapTestArea, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "loadedtiles", RBAC_PERM_COMMAND_MMAP_LOADEDTILES, false, &HandleMmapLoadedTilesCommand, "", NULL },
+ { "loc", RBAC_PERM_COMMAND_MMAP_LOC, false, &HandleMmapLocCommand, "", NULL },
+ { "path", RBAC_PERM_COMMAND_MMAP_PATH, false, &HandleMmapPathCommand, "", NULL },
+ { "stats", RBAC_PERM_COMMAND_MMAP_STATS, false, &HandleMmapStatsCommand, "", NULL },
+ { "testarea", RBAC_PERM_COMMAND_MMAP_TESTAREA, false, &HandleMmapTestArea, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "mmap", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", mmapCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "mmap", RBAC_PERM_COMMAND_MMAP, true, NULL, "", mmapCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index 0994fd510ef..67d9a4f692d 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -41,44 +41,44 @@ public:
{
static ChatCommand modifyspeedCommandTable[] =
{
- { "fly", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyFlyCommand, "", NULL },
- { "all", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyASpeedCommand, "", NULL },
- { "walk", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifySpeedCommand, "", NULL },
- { "backwalk", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyBWalkCommand, "", NULL },
- { "swim", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifySwimCommand, "", NULL },
- { "", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyASpeedCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "all", RBAC_PERM_COMMAND_MODIFY_SPEED_ALL, false, &HandleModifyASpeedCommand, "", NULL },
+ { "backwalk", RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK, false, &HandleModifyBWalkCommand, "", NULL },
+ { "fly", RBAC_PERM_COMMAND_MODIFY_SPEED_FLY, false, &HandleModifyFlyCommand, "", NULL },
+ { "walk", RBAC_PERM_COMMAND_MODIFY_SPEED_WALK, false, &HandleModifySpeedCommand, "", NULL },
+ { "swim", RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM, false, &HandleModifySwimCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_MODIFY_SPEED, false, &HandleModifyASpeedCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand modifyCommandTable[] =
{
- { "hp", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyHPCommand, "", NULL },
- { "mana", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyManaCommand, "", NULL },
- { "rage", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyRageCommand, "", NULL },
- { "runicpower", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyRunicPowerCommand, "", NULL },
- { "energy", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyEnergyCommand, "", NULL },
- { "money", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyMoneyCommand, "", NULL },
- { "scale", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyScaleCommand, "", NULL },
- { "bit", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyBitCommand, "", NULL },
- { "faction", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyFactionCommand, "", NULL },
- { "spell", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifySpellCommand, "", NULL },
- { "talentpoints", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyTalentCommand, "", NULL },
- { "mount", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyMountCommand, "", NULL },
- { "honor", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyHonorCommand, "", NULL },
- { "reputation", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyRepCommand, "", NULL },
- { "drunk", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyDrunkCommand, "", NULL },
- { "standstate", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyStandStateCommand, "", NULL },
- { "phase", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleModifyPhaseCommand, "", NULL },
- { "gender", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyGenderCommand, "", NULL },
- { "currency", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyCurrencyCommand, "", NULL },
- { "speed", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", modifyspeedCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "bit", RBAC_PERM_COMMAND_MODIFY_BIT, false, &HandleModifyBitCommand, "", NULL },
+ { "currency", RBAC_PERM_COMMAND_MODIFY_CURRENCY, false, &HandleModifyCurrencyCommand, "", NULL },
+ { "drunk", RBAC_PERM_COMMAND_MODIFY_DRUNK, false, &HandleModifyDrunkCommand, "", NULL },
+ { "energy", RBAC_PERM_COMMAND_MODIFY_ENERGY, false, &HandleModifyEnergyCommand, "", NULL },
+ { "faction", RBAC_PERM_COMMAND_MODIFY_FACTION, false, &HandleModifyFactionCommand, "", NULL },
+ { "gender", RBAC_PERM_COMMAND_MODIFY_GENDER, false, &HandleModifyGenderCommand, "", NULL },
+ { "honor", RBAC_PERM_COMMAND_MODIFY_HONOR, false, &HandleModifyHonorCommand, "", NULL },
+ { "hp", RBAC_PERM_COMMAND_MODIFY_HP, false, &HandleModifyHPCommand, "", NULL },
+ { "mana", RBAC_PERM_COMMAND_MODIFY_MANA, false, &HandleModifyManaCommand, "", NULL },
+ { "money", RBAC_PERM_COMMAND_MODIFY_MONEY, false, &HandleModifyMoneyCommand, "", NULL },
+ { "mount", RBAC_PERM_COMMAND_MODIFY_MOUNT, false, &HandleModifyMountCommand, "", NULL },
+ { "phase", RBAC_PERM_COMMAND_MODIFY_PHASE, false, &HandleModifyPhaseCommand, "", NULL },
+ { "rage", RBAC_PERM_COMMAND_MODIFY_RAGE, false, &HandleModifyRageCommand, "", NULL },
+ { "reputation", RBAC_PERM_COMMAND_MODIFY_REPUTATION, false, &HandleModifyRepCommand, "", NULL },
+ { "runicpower", RBAC_PERM_COMMAND_MODIFY_RUNICPOWER, false, &HandleModifyRunicPowerCommand, "", NULL },
+ { "scale", RBAC_PERM_COMMAND_MODIFY_SCALE, false, &HandleModifyScaleCommand, "", NULL },
+ { "speed", RBAC_PERM_COMMAND_MODIFY_SPEED, false, NULL, "", modifyspeedCommandTable },
+ { "spell", RBAC_PERM_COMMAND_MODIFY_SPELL, false, &HandleModifySpellCommand, "", NULL },
+ { "standstate", RBAC_PERM_COMMAND_MODIFY_STANDSTATE, false, &HandleModifyStandStateCommand, "", NULL },
+ { "talentpoints", RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS, false, &HandleModifyTalentCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "morph", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyMorphCommand, "", NULL },
- { "demorph", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleDeMorphCommand, "", NULL },
- { "modify", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", modifyCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "morph", RBAC_PERM_COMMAND_MORPH, false, &HandleModifyMorphCommand, "", NULL },
+ { "demorph", RBAC_PERM_COMMAND_DEMORPH, false, &HandleDeMorphCommand, "", NULL },
+ { "modify", RBAC_PERM_COMMAND_MODIFY, false, NULL, "", modifyCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index f48183dbeaf..233600e2a9c 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -154,69 +154,65 @@ public:
{
static ChatCommand npcAddCommandTable[] =
{
- { "formation", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcAddFormationCommand, "", NULL },
- { "item", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddVendorItemCommand, "", NULL },
- { "move", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddMoveCommand, "", NULL },
- { "temp", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddTempSpawnCommand, "", NULL },
- //{@todo fix or remove this command
- { "weapon", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcAddWeaponCommand, "", NULL },
- //}
- { "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddCommand, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "formation", RBAC_PERM_COMMAND_NPC_ADD_FORMATION, false, &HandleNpcAddFormationCommand, "", NULL },
+ { "item", RBAC_PERM_COMMAND_NPC_ADD_ITEM, false, &HandleNpcAddVendorItemCommand, "", NULL },
+ { "move", RBAC_PERM_COMMAND_NPC_ADD_MOVE, false, &HandleNpcAddMoveCommand, "", NULL },
+ { "temp", RBAC_PERM_COMMAND_NPC_ADD_TEMP, false, &HandleNpcAddTempSpawnCommand, "", NULL },
+ //{ "weapon", RBAC_PERM_COMMAND_NPC_ADD_WEAPON, false, &HandleNpcAddWeaponCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_NPC_ADD, false, &HandleNpcAddCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand npcDeleteCommandTable[] =
{
- { "item", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcDeleteVendorItemCommand, "", NULL },
- { "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcDeleteCommand, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "item", RBAC_PERM_COMMAND_NPC_DELETE_ITEM, false, &HandleNpcDeleteVendorItemCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_NPC_DELETE, false, &HandleNpcDeleteCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand npcFollowCommandTable[] =
{
- { "stop", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcUnFollowCommand, "", NULL },
- { "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcFollowCommand, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "stop", RBAC_PERM_COMMAND_NPC_FOLLOW_STOP, false, &HandleNpcUnFollowCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_NPC_FOLLOW, false, &HandleNpcFollowCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand npcSetCommandTable[] =
{
- { "allowmove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcSetAllowMovementCommand, "", NULL },
- { "entry", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcSetEntryCommand, "", NULL },
- { "factionid", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetFactionIdCommand, "", NULL },
- { "flag", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetFlagCommand, "", NULL },
- { "level", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetLevelCommand, "", NULL },
- { "link", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetLinkCommand, "", NULL },
- { "model", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetModelCommand, "", NULL },
- { "movetype", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetMoveTypeCommand, "", NULL },
- { "phase", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetPhaseCommand, "", NULL },
- { "spawndist", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetSpawnDistCommand, "", NULL },
- { "spawntime", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetSpawnTimeCommand, "", NULL },
- { "data", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcSetDataCommand, "", NULL },
- //{ @todo fix or remove these commands
- { "name", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetNameCommand, "", NULL },
- { "subname", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetSubNameCommand, "", NULL },
- //}
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "allowmove", RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE, false, &HandleNpcSetAllowMovementCommand, "", NULL },
+ { "entry", RBAC_PERM_COMMAND_NPC_SET_ENTRY, false, &HandleNpcSetEntryCommand, "", NULL },
+ { "factionid", RBAC_PERM_COMMAND_NPC_SET_FACTIONID, false, &HandleNpcSetFactionIdCommand, "", NULL },
+ { "flag", RBAC_PERM_COMMAND_NPC_SET_FLAG, false, &HandleNpcSetFlagCommand, "", NULL },
+ { "level", RBAC_PERM_COMMAND_NPC_SET_LEVEL, false, &HandleNpcSetLevelCommand, "", NULL },
+ { "link", RBAC_PERM_COMMAND_NPC_SET_LINK, false, &HandleNpcSetLinkCommand, "", NULL },
+ { "model", RBAC_PERM_COMMAND_NPC_SET_MODEL, false, &HandleNpcSetModelCommand, "", NULL },
+ { "movetype", RBAC_PERM_COMMAND_NPC_SET_MOVETYPE, false, &HandleNpcSetMoveTypeCommand, "", NULL },
+ { "phase", RBAC_PERM_COMMAND_NPC_SET_PHASE, false, &HandleNpcSetPhaseCommand, "", NULL },
+ { "spawndist", RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST, false, &HandleNpcSetSpawnDistCommand, "", NULL },
+ { "spawntime", RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME, false, &HandleNpcSetSpawnTimeCommand, "", NULL },
+ { "data", RBAC_PERM_COMMAND_NPC_SET_DATA, false, &HandleNpcSetDataCommand, "", NULL },
+ //{ "name", RBAC_PERM_COMMAND_NPC_SET_NAME, false, &HandleNpcSetNameCommand, "", NULL },
+ //{ "subname", RBAC_PERM_COMMAND_NPC_SET_SUBNAME, false, &HandleNpcSetSubNameCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand npcCommandTable[] =
{
- { "info", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcInfoCommand, "", NULL },
- { "near", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcNearCommand, "", NULL },
- { "move", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcMoveCommand, "", NULL },
- { "playemote", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcPlayEmoteCommand, "", NULL },
- { "say", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcSayCommand, "", NULL },
- { "textemote", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcTextEmoteCommand, "", NULL },
- { "whisper", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcWhisperCommand, "", NULL },
- { "yell", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcYellCommand, "", NULL },
- { "tame", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcTameCommand, "", NULL },
- { "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcAddCommandTable },
- { "delete", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcDeleteCommandTable },
- { "follow", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcFollowCommandTable },
- { "set", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcSetCommandTable },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "info", RBAC_PERM_COMMAND_NPC_INFO, false, &HandleNpcInfoCommand, "", NULL },
+ { "near", RBAC_PERM_COMMAND_NPC_NEAR, false, &HandleNpcNearCommand, "", NULL },
+ { "move", RBAC_PERM_COMMAND_NPC_MOVE, false, &HandleNpcMoveCommand, "", NULL },
+ { "playemote", RBAC_PERM_COMMAND_NPC_PLAYEMOTE, false, &HandleNpcPlayEmoteCommand, "", NULL },
+ { "say", RBAC_PERM_COMMAND_NPC_SAY, false, &HandleNpcSayCommand, "", NULL },
+ { "textemote", RBAC_PERM_COMMAND_NPC_TEXTEMOTE, false, &HandleNpcTextEmoteCommand, "", NULL },
+ { "whisper", RBAC_PERM_COMMAND_NPC_WHISPER, false, &HandleNpcWhisperCommand, "", NULL },
+ { "yell", RBAC_PERM_COMMAND_NPC_YELL, false, &HandleNpcYellCommand, "", NULL },
+ { "tame", RBAC_PERM_COMMAND_NPC_TAME, false, &HandleNpcTameCommand, "", NULL },
+ { "add", RBAC_PERM_COMMAND_NPC_ADD, false, NULL, "", npcAddCommandTable },
+ { "delete", RBAC_PERM_COMMAND_NPC_DELETE, false, NULL, "", npcDeleteCommandTable },
+ { "follow", RBAC_PERM_COMMAND_NPC_FOLLOW, false, NULL, "", npcFollowCommandTable },
+ { "set", RBAC_PERM_COMMAND_NPC_SET, false, NULL, "", npcSetCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "npc", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", npcCommandTable },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "npc", RBAC_PERM_COMMAND_NPC, false, NULL, "", npcCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp
new file mode 100644
index 00000000000..237b25634c1
--- /dev/null
+++ b/src/server/scripts/Commands/cs_pet.cpp
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Chat.h"
+#include "Language.h"
+#include "Pet.h"
+#include "Player.h"
+#include "ObjectMgr.h"
+#include "ScriptMgr.h"
+
+class pet_commandscript : public CommandScript
+{
+public:
+ pet_commandscript() : CommandScript("pet_commandscript") { }
+
+ ChatCommand* GetCommands() const OVERRIDE
+ {
+ static ChatCommand petCommandTable[] =
+ {
+ { "create", RBAC_PERM_COMMAND_PET_CREATE, false, &HandlePetCreateCommand, "", NULL },
+ { "learn", RBAC_PERM_COMMAND_PET_LEARN, false, &HandlePetLearnCommand, "", NULL },
+ { "unlearn", RBAC_PERM_COMMAND_PET_UNLEARN, false, &HandlePetUnlearnCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ static ChatCommand commandTable[] =
+ {
+ { "pet", RBAC_PERM_COMMAND_PET, false, NULL, "", petCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+ return commandTable;
+ }
+ static bool HandlePetCreateCommand(ChatHandler* handler, char const* /*args*/)
+ {
+ Player* player = handler->GetSession()->GetPlayer();
+ Creature* creatureTarget = handler->getSelectedCreature();
+
+ if (!creatureTarget || creatureTarget->IsPet() || creatureTarget->GetTypeId() == TYPEID_PLAYER)
+ {
+ handler->PSendSysMessage(LANG_SELECT_CREATURE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ CreatureTemplate const* creatrueTemplate = sObjectMgr->GetCreatureTemplate(creatureTarget->GetEntry());
+ // Creatures with family 0 crashes the server
+ if (!creatrueTemplate->family)
+ {
+ handler->PSendSysMessage("This creature cannot be tamed. (family id: 0).");
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (player->GetPetGUID())
+ {
+ handler->PSendSysMessage("You already have a pet");
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // Everything looks OK, create new pet
+ Pet* pet = new Pet(player, HUNTER_PET);
+ if (!pet->CreateBaseAtCreature(creatureTarget))
+ {
+ delete pet;
+ handler->PSendSysMessage("Error 1");
+ return false;
+ }
+
+ creatureTarget->setDeathState(JUST_DIED);
+ creatureTarget->RemoveCorpse();
+ creatureTarget->SetHealth(0); // just for nice GM-mode view
+
+ pet->SetUInt64Value(UNIT_FIELD_CREATEDBY, player->GetGUID());
+ pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction());
+
+ if (!pet->InitStatsForLevel(creatureTarget->getLevel()))
+ {
+ TC_LOG_ERROR(LOG_FILTER_GENERAL, "InitStatsForLevel() in EffectTameCreature failed! Pet deleted.");
+ handler->PSendSysMessage("Error 2");
+ delete pet;
+ return false;
+ }
+
+ // prepare visual effect for levelup
+ pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()-1);
+
+ pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
+ // this enables pet details window (Shift+P)
+ pet->InitPetCreateSpells();
+ pet->SetFullHealth();
+
+ pet->GetMap()->AddToMap(pet->ToCreature());
+
+ // visual effect for levelup
+ pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel());
+
+ player->SetMinion(pet, true);
+ pet->SavePetToDB(PET_SAVE_AS_CURRENT);
+ player->PetSpellInitialize();
+
+ return true;
+ }
+
+ static bool HandlePetLearnCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* player = handler->GetSession()->GetPlayer();
+ Pet* pet = player->GetPet();
+
+ if (!pet)
+ {
+ handler->PSendSysMessage("You have no pet");
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 spellId = handler->extractSpellIdFromLink((char*)args);
+
+ if (!spellId || !sSpellMgr->GetSpellInfo(spellId))
+ return false;
+
+ // Check if pet already has it
+ if (pet->HasSpell(spellId))
+ {
+ handler->PSendSysMessage("Pet already has spell: %u", spellId);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // Check if spell is valid
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
+ if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo))
+ {
+ handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ pet->learnSpell(spellId);
+
+ handler->PSendSysMessage("Pet has learned spell %u", spellId);
+ return true;
+ }
+
+ static bool HandlePetUnlearnCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* player = handler->GetSession()->GetPlayer();
+ Pet* pet = player->GetPet();
+ if (!pet)
+ {
+ handler->PSendSysMessage("You have no pet");
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 spellId = handler->extractSpellIdFromLink((char*)args);
+
+ if (pet->HasSpell(spellId))
+ pet->removeSpell(spellId, false);
+ else
+ handler->PSendSysMessage("Pet doesn't have that spell");
+
+ return true;
+ }
+};
+
+void AddSC_pet_commandscript()
+{
+ new pet_commandscript();
+}
diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp
index 20515eb0921..3ad1fea74a2 100644
--- a/src/server/scripts/Commands/cs_quest.cpp
+++ b/src/server/scripts/Commands/cs_quest.cpp
@@ -37,16 +37,16 @@ public:
{
static ChatCommand questCommandTable[] =
{
- { "add", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestAdd, "", NULL },
- { "complete", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestComplete, "", NULL },
- { "remove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestRemove, "", NULL },
- { "reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestReward, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "add", RBAC_PERM_COMMAND_QUEST_ADD, false, &HandleQuestAdd, "", NULL },
+ { "complete", RBAC_PERM_COMMAND_QUEST_COMPLETE, false, &HandleQuestComplete, "", NULL },
+ { "remove", RBAC_PERM_COMMAND_QUEST_REMOVE, false, &HandleQuestRemove, "", NULL },
+ { "reward", RBAC_PERM_COMMAND_QUEST_REWARD, false, &HandleQuestReward, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", questCommandTable },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "quest", RBAC_PERM_COMMAND_QUEST, false, NULL, "", questCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_rbac.cpp b/src/server/scripts/Commands/cs_rbac.cpp
index 9c682acb224..ba899fee077 100644
--- a/src/server/scripts/Commands/cs_rbac.cpp
+++ b/src/server/scripts/Commands/cs_rbac.cpp
@@ -64,7 +64,7 @@ public:
{ "grant", RBAC_PERM_COMMAND_RBAC_ACC_ROLE_GRANT, true, &HandleRBACRoleGrantCommand, "", NULL },
{ "deny", RBAC_PERM_COMMAND_RBAC_ACC_ROLE_DENY, true, &HandleRBACRoleDenyCommand, "", NULL },
{ "revoke", RBAC_PERM_COMMAND_RBAC_ACC_ROLE_REVOKE, true, &HandleRBACRoleRevokeCommand, "", NULL },
- { "", RBAC_PERM_COMMAND_RBAC_ACC_ROLE, true, &HandleRBACRoleListCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_RBAC_ACC_ROLE, true, &HandleRBACRoleListCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
@@ -73,7 +73,7 @@ public:
{ "grant", RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT, true, &HandleRBACPermGrantCommand, "", NULL },
{ "deny", RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY, true, &HandleRBACPermDenyCommand, "", NULL },
{ "revoke", RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE, true, &HandleRBACPermRevokeCommand, "", NULL },
- { "", RBAC_PERM_COMMAND_RBAC_ACC_PERM, true, &HandleRBACPermListCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_RBAC_ACC_PERM, true, &HandleRBACPermListCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index 89d69ded62b..694ce097455 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -50,115 +50,115 @@ public:
{
static ChatCommand reloadAllCommandTable[] =
{
- { "achievement", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllAchievementCommand, "", NULL },
- { "area", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllAreaCommand, "", NULL },
- { "gossips", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllGossipsCommand, "", NULL },
- { "item", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllItemCommand, "", NULL },
- { "locales", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllLocalesCommand, "", NULL },
- { "loot", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllLootCommand, "", NULL },
- { "npc", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllNpcCommand, "", NULL },
- { "quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllQuestCommand, "", NULL },
- { "scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllScriptsCommand, "", NULL },
- { "spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllSpellCommand, "", NULL },
- { "", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "achievement", RBAC_PERM_COMMANDS_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "", NULL },
+ { "area", RBAC_PERM_COMMANDS_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "", NULL },
+ { "gossips", RBAC_PERM_COMMANDS_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "", NULL },
+ { "item", RBAC_PERM_COMMANDS_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "", NULL },
+ { "locales", RBAC_PERM_COMMANDS_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "", NULL },
+ { "loot", RBAC_PERM_COMMANDS_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "", NULL },
+ { "npc", RBAC_PERM_COMMANDS_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "", NULL },
+ { "quest", RBAC_PERM_COMMANDS_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "", NULL },
+ { "scripts", RBAC_PERM_COMMANDS_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "", NULL },
+ { "spell", RBAC_PERM_COMMANDS_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "", NULL },
+ { "", RBAC_PERM_COMMANDS_RELOAD_ALL, true, &HandleReloadAllCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand reloadCommandTable[] =
{
- { "auctions", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAuctionsCommand, "", NULL },
- { "access_requirement", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAccessRequirementCommand, "", NULL },
- { "achievement_criteria_data", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL },
- { "achievement_reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAchievementRewardCommand, "", NULL },
- { "all", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", reloadAllCommandTable },
- { "areatrigger_involvedrelation", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadQuestAreaTriggersCommand, "", NULL },
- { "areatrigger_tavern", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAreaTriggerTavernCommand, "", NULL },
- { "areatrigger_teleport", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL },
- { "autobroadcast", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAutobroadcastCommand, "", NULL },
- { "command", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCommandCommand, "", NULL },
- { "conditions", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadConditions, "", NULL },
- { "config", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadConfigCommand, "", NULL },
- { "creature_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureText, "", NULL },
- { "creature_questender", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureQuestEnderCommand, "", NULL },
- { "creature_linked_respawn", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleReloadLinkedRespawnCommand, "", NULL },
- { "creature_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL },
- { "creature_onkill_reputation", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadOnKillReputationCommand, "", NULL },
- { "creature_queststarter", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureQuestStarterCommand, "", NULL },
- { "creature_summon_groups", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL },
- { "creature_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureTemplateCommand, "", NULL },
- //{ "db_script_string", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadDbScriptStringCommand, "", NULL },
- { "disables", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadDisablesCommand, "", NULL },
- { "disenchant_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL },
- { "event_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadEventScriptsCommand, "", NULL },
- { "fishing_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesFishingCommand, "", NULL },
- { "game_graveyard_zone", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGameGraveyardZoneCommand, "", NULL },
- { "game_tele", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGameTeleCommand, "", NULL },
- { "gameobject_questender", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGOQuestEnderCommand, "", NULL },
- { "gameobject_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL },
- { "gameobject_queststarter", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGOQuestStarterCommand, "", NULL },
- { "gm_tickets", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGMTicketsCommand, "", NULL },
- { "gossip_menu", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGossipMenuCommand, "", NULL },
- { "gossip_menu_option", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGossipMenuOptionCommand, "", NULL },
- { "item_enchantment_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadItemEnchantementsCommand, "", NULL },
- { "item_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesItemCommand, "", NULL },
- { "lfg_dungeon_rewards", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLfgRewardsCommand, "", NULL },
- { "locales_achievement_reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL },
- { "locales_creature", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesCreatureCommand, "", NULL },
- { "locales_creature_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesCreatureTextCommand, "", NULL },
- { "locales_gameobject", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesGameobjectCommand, "", NULL },
- { "locales_gossip_menu_option", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL },
- { "locales_item", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesItemCommand, "", NULL },
- { "locales_npc_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesNpcTextCommand, "", NULL },
- { "locales_page_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesPageTextCommand, "", NULL },
- { "locales_points_of_interest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL },
- { "locales_quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesQuestCommand, "", NULL },
- { "mail_level_reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadMailLevelRewardCommand, "", NULL },
- { "mail_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesMailCommand, "", NULL },
- { "milling_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesMillingCommand, "", NULL },
- { "npc_spellclick_spells", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellClickSpellsCommand, "", NULL},
- { "npc_trainer", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadNpcTrainerCommand, "", NULL },
- { "npc_vendor", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadNpcVendorCommand, "", NULL },
- { "page_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadPageTextsCommand, "", NULL },
- { "pickpocketing_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL},
- { "points_of_interest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadPointsOfInterestCommand, "", NULL },
- { "prospecting_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL },
- { "quest_poi", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadQuestPOICommand, "", NULL },
- { "quest_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadQuestTemplateCommand, "", NULL },
- { "rbac", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadRBACCommand, "", NULL },
- { "reference_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL },
- { "reserved_name", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadReservedNameCommand, "", NULL },
- { "reputation_reward_rate", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadReputationRewardRateCommand, "", NULL },
- { "reputation_spillover_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadReputationRewardRateCommand, "", NULL },
- { "skill_discovery_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
- { "skill_extra_item_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL },
- { "skill_fishing_base_level", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL },
- { "skinning_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL },
- { "smart_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSmartScripts, "", NULL },
- { "spell_required", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellRequiredCommand, "", NULL },
- { "spell_area", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellAreaCommand, "", NULL },
- { "spell_bonus_data", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellBonusesCommand, "", NULL },
- { "spell_group", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellGroupsCommand, "", NULL },
- { "spell_learn_spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellLearnSpellCommand, "", NULL },
- { "spell_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesSpellCommand, "", NULL },
- { "spell_linked_spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellLinkedSpellCommand, "", NULL },
- { "spell_pet_auras", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellPetAurasCommand, "", NULL },
- { "spell_proc_event", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellProcEventCommand, "", NULL },
- { "spell_proc", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellProcsCommand, "", NULL },
- { "spell_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellScriptsCommand, "", NULL },
- { "spell_target_position", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellTargetPositionCommand, "", NULL },
- { "spell_threats", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellThreatsCommand, "", NULL },
- { "spell_group_stack_rules", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL },
- { "trinity_string", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadTrinityStringCommand, "", NULL },
- { "warden_action", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadWardenactionCommand, "", NULL },
- { "waypoint_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadWpScriptsCommand, "", NULL },
- { "waypoint_data", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadWpCommand, "", NULL },
- { "vehicle_accessory", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadVehicleAccessoryCommand, "", NULL },
- { "vehicle_template_accessory", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "auctions", RBAC_PERM_COMMANDS_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "", NULL },
+ { "access_requirement", RBAC_PERM_COMMANDS_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "", NULL },
+ { "achievement_criteria_data", RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL },
+ { "achievement_reward", RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "", NULL },
+ { "all", RBAC_PERM_COMMANDS_RELOAD_ALL, true, NULL, "", reloadAllCommandTable },
+ { "areatrigger_involvedrelation", RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "", NULL },
+ { "areatrigger_tavern", RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "", NULL },
+ { "areatrigger_teleport", RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL },
+ { "autobroadcast", RBAC_PERM_COMMANDS_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "", NULL },
+ { "command", RBAC_PERM_COMMANDS_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "", NULL },
+ { "conditions", RBAC_PERM_COMMANDS_RELOAD_CONDITIONS, true, &HandleReloadConditions, "", NULL },
+ { "config", RBAC_PERM_COMMANDS_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "", NULL },
+ { "creature_text", RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "", NULL },
+ { "creature_questender", RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "", NULL },
+ { "creature_linked_respawn", RBAC_PERM_COMMANDS_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "", NULL },
+ { "creature_loot_template", RBAC_PERM_COMMANDS_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL },
+ { "creature_onkill_reputation", RBAC_PERM_COMMANDS_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "", NULL },
+ { "creature_queststarter", RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "", NULL },
+ { "creature_summon_groups", RBAC_PERM_COMMANDS_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL },
+ { "creature_template", RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "", NULL },
+ //{ "db_script_string", RBAC_PERM_COMMANDS_RELOAD_, true, &HandleReloadDbScriptStringCommand, "", NULL },
+ { "disables", RBAC_PERM_COMMANDS_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "", NULL },
+ { "disenchant_loot_template", RBAC_PERM_COMMANDS_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL },
+ { "event_scripts", RBAC_PERM_COMMANDS_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "", NULL },
+ { "fishing_loot_template", RBAC_PERM_COMMANDS_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "", NULL },
+ { "game_graveyard_zone", RBAC_PERM_COMMANDS_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "", NULL },
+ { "game_tele", RBAC_PERM_COMMANDS_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "", NULL },
+ { "gameobject_questender", RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "", NULL },
+ { "gameobject_loot_template", RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL },
+ { "gameobject_queststarter", RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "", NULL },
+ { "gm_tickets", RBAC_PERM_COMMANDS_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "", NULL },
+ { "gossip_menu", RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "", NULL },
+ { "gossip_menu_option", RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "", NULL },
+ { "item_enchantment_template", RBAC_PERM_COMMANDS_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "", NULL },
+ { "item_loot_template", RBAC_PERM_COMMANDS_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "", NULL },
+ { "lfg_dungeon_rewards", RBAC_PERM_COMMANDS_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "", NULL },
+ { "locales_achievement_reward", RBAC_PERM_COMMANDS_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL },
+ { "locales_creature", RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "", NULL },
+ { "locales_creature_text", RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "", NULL },
+ { "locales_gameobject", RBAC_PERM_COMMANDS_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "", NULL },
+ { "locales_gossip_menu_option", RBAC_PERM_COMMANDS_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL },
+ { "locales_item", RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "", NULL },
+ { "locales_npc_text", RBAC_PERM_COMMANDS_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL },
+ { "locales_page_text", RBAC_PERM_COMMANDS_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL },
+ { "locales_points_of_interest", RBAC_PERM_COMMANDS_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL },
+ { "locales_quest", RBAC_PERM_COMMANDS_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL },
+ { "mail_level_reward", RBAC_PERM_COMMANDS_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL },
+ { "mail_loot_template", RBAC_PERM_COMMANDS_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL },
+ { "milling_loot_template", RBAC_PERM_COMMANDS_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL },
+ { "npc_spellclick_spells", RBAC_PERM_COMMANDS_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "", NULL},
+ { "npc_trainer", RBAC_PERM_COMMANDS_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "", NULL },
+ { "npc_vendor", RBAC_PERM_COMMANDS_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "", NULL },
+ { "page_text", RBAC_PERM_COMMANDS_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "", NULL },
+ { "pickpocketing_loot_template", RBAC_PERM_COMMANDS_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL},
+ { "points_of_interest", RBAC_PERM_COMMANDS_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL },
+ { "prospecting_loot_template", RBAC_PERM_COMMANDS_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL },
+ { "quest_poi", RBAC_PERM_COMMANDS_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL },
+ { "quest_template", RBAC_PERM_COMMANDS_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL },
+ { "rbac", RBAC_PERM_COMMANDS_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL },
+ { "reference_loot_template", RBAC_PERM_COMMANDS_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL },
+ { "reserved_name", RBAC_PERM_COMMANDS_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "", NULL },
+ { "reputation_reward_rate", RBAC_PERM_COMMANDS_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
+ { "reputation_spillover_template", RBAC_PERM_COMMANDS_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
+ { "skill_discovery_template", RBAC_PERM_COMMANDS_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
+ { "skill_extra_item_template", RBAC_PERM_COMMANDS_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL },
+ { "skill_fishing_base_level", RBAC_PERM_COMMANDS_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL },
+ { "skinning_loot_template", RBAC_PERM_COMMANDS_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL },
+ { "smart_scripts", RBAC_PERM_COMMANDS_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "", NULL },
+ { "spell_required", RBAC_PERM_COMMANDS_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "", NULL },
+ { "spell_area", RBAC_PERM_COMMANDS_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "", NULL },
+ { "spell_bonus_data", RBAC_PERM_COMMANDS_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "", NULL },
+ { "spell_group", RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "", NULL },
+ { "spell_learn_spell", RBAC_PERM_COMMANDS_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "", NULL },
+ { "spell_loot_template", RBAC_PERM_COMMANDS_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "", NULL },
+ { "spell_linked_spell", RBAC_PERM_COMMANDS_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "", NULL },
+ { "spell_pet_auras", RBAC_PERM_COMMANDS_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "", NULL },
+ { "spell_proc_event", RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "", NULL },
+ { "spell_proc", RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "", NULL },
+ { "spell_scripts", RBAC_PERM_COMMANDS_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "", NULL },
+ { "spell_target_position", RBAC_PERM_COMMANDS_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "", NULL },
+ { "spell_threats", RBAC_PERM_COMMANDS_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "", NULL },
+ { "spell_group_stack_rules", RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL },
+ { "trinity_string", RBAC_PERM_COMMANDS_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "", NULL },
+ { "warden_action", RBAC_PERM_COMMANDS_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "", NULL },
+ { "waypoint_scripts", RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "", NULL },
+ { "waypoint_data", RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "", NULL },
+ { "vehicle_accessory", RBAC_PERM_COMMANDS_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "", NULL },
+ { "vehicle_template_accessory", RBAC_PERM_COMMANDS_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "reload", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", reloadCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "reload", RBAC_PERM_COMMANDS_RELOAD, true, NULL, "", reloadCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp
index 74e0ad3742d..95ee15d05f2 100644
--- a/src/server/scripts/Commands/cs_reset.cpp
+++ b/src/server/scripts/Commands/cs_reset.cpp
@@ -39,19 +39,19 @@ public:
{
static ChatCommand resetCommandTable[] =
{
- { "achievements", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetAchievementsCommand, "", NULL },
- { "honor", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetHonorCommand, "", NULL },
- { "level", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetLevelCommand, "", NULL },
- { "spells", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetSpellsCommand, "", NULL },
- { "stats", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetStatsCommand, "", NULL },
- { "talents", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetTalentsCommand, "", NULL },
- { "all", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetAllCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "achievements", RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS, true, &HandleResetAchievementsCommand, "", NULL },
+ { "honor", RBAC_PERM_COMMAND_RESET_HONOR, true, &HandleResetHonorCommand, "", NULL },
+ { "level", RBAC_PERM_COMMAND_RESET_LEVEL, true, &HandleResetLevelCommand, "", NULL },
+ { "spells", RBAC_PERM_COMMAND_RESET_SPELLS, true, &HandleResetSpellsCommand, "", NULL },
+ { "stats", RBAC_PERM_COMMAND_RESET_STATS, true, &HandleResetStatsCommand, "", NULL },
+ { "talents", RBAC_PERM_COMMAND_RESET_TALENTS, true, &HandleResetTalentsCommand, "", NULL },
+ { "all", RBAC_PERM_COMMAND_RESET_ALL, true, &HandleResetAllCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "reset", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", resetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "reset", RBAC_PERM_COMMAND_RESET, true, NULL, "", resetCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp
new file mode 100644
index 00000000000..5d50113249a
--- /dev/null
+++ b/src/server/scripts/Commands/cs_send.cpp
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Chat.h"
+#include "Language.h"
+#include "Pet.h"
+#include "Player.h"
+#include "ObjectMgr.h"
+#include "ScriptMgr.h"
+
+class send_commandscript : public CommandScript
+{
+public:
+ send_commandscript() : CommandScript("send_commandscript") { }
+
+ ChatCommand* GetCommands() const OVERRIDE
+ {
+ static ChatCommand sendCommandTable[] =
+ {
+ { "items", RBAC_PERM_COMMAND_SEND_ITEMS, true, &HandleSendItemsCommand, "", NULL },
+ { "mail", RBAC_PERM_COMMAND_SEND_MAIL, true, &HandleSendMailCommand, "", NULL },
+ { "message", RBAC_PERM_COMMAND_SEND_MESSAGE, true, &HandleSendMessageCommand, "", NULL },
+ { "money", RBAC_PERM_COMMAND_SEND_MONEY, true, &HandleSendMoneyCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ static ChatCommand commandTable[] =
+ {
+ { "send", RBAC_PERM_COMMAND_SEND, false, NULL, "", sendCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+ return commandTable;
+ }
+
+ // Send mail by command
+ static bool HandleSendMailCommand(ChatHandler* handler, char const* args)
+ {
+ // format: name "subject text" "mail text"
+ Player* target;
+ uint64 targetGuid;
+ std::string targetName;
+ if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
+ return false;
+
+ char* tail1 = strtok(NULL, "");
+ if (!tail1)
+ return false;
+
+ char const* msgSubject = handler->extractQuotedArg(tail1);
+ if (!msgSubject)
+ return false;
+
+ char* tail2 = strtok(NULL, "");
+ if (!tail2)
+ return false;
+
+ char const* msgText = handler->extractQuotedArg(tail2);
+ if (!msgText)
+ return false;
+
+ // msgSubject, msgText isn't NUL after prev. check
+ std::string subject = msgSubject;
+ std::string text = msgText;
+
+ // from console show not existed sender
+ MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
+
+ /// @todo Fix poor design
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ MailDraft(subject, text)
+ .SendMailTo(trans, MailReceiver(target, GUID_LOPART(targetGuid)), sender);
+
+ CharacterDatabase.CommitTransaction(trans);
+
+ std::string nameLink = handler->playerLink(targetName);
+ handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
+ return true;
+ }
+
+ // Send items by mail
+ static bool HandleSendItemsCommand(ChatHandler* handler, char const* args)
+ {
+ // format: name "subject text" "mail text" item1[:count1] item2[:count2] ... item12[:count12]
+ Player* receiver;
+ uint64 receiverGuid;
+ std::string receiverName;
+ if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName))
+ return false;
+
+ char* tail1 = strtok(NULL, "");
+ if (!tail1)
+ return false;
+
+ char const* msgSubject = handler->extractQuotedArg(tail1);
+ if (!msgSubject)
+ return false;
+
+ char* tail2 = strtok(NULL, "");
+ if (!tail2)
+ return false;
+
+ char const* msgText = handler->extractQuotedArg(tail2);
+ if (!msgText)
+ return false;
+
+ // msgSubject, msgText isn't NUL after prev. check
+ std::string subject = msgSubject;
+ std::string text = msgText;
+
+ // extract items
+ typedef std::pair<uint32, uint32> ItemPair;
+ typedef std::list< ItemPair > ItemPairs;
+ ItemPairs items;
+
+ // get all tail string
+ char* tail = strtok(NULL, "");
+
+ // get from tail next item str
+ while (char* itemStr = strtok(tail, " "))
+ {
+ // and get new tail
+ tail = strtok(NULL, "");
+
+ // parse item str
+ char const* itemIdStr = strtok(itemStr, ":");
+ char const* itemCountStr = strtok(NULL, " ");
+
+ uint32 itemId = atoi(itemIdStr);
+ if (!itemId)
+ return false;
+
+ ItemTemplate const* item_proto = sObjectMgr->GetItemTemplate(itemId);
+ if (!item_proto)
+ {
+ handler->PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemId);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 itemCount = itemCountStr ? atoi(itemCountStr) : 1;
+ if (itemCount < 1 || (item_proto->MaxCount > 0 && itemCount > uint32(item_proto->MaxCount)))
+ {
+ handler->PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, itemCount, itemId);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ while (itemCount > item_proto->GetMaxStackSize())
+ {
+ items.push_back(ItemPair(itemId, item_proto->GetMaxStackSize()));
+ itemCount -= item_proto->GetMaxStackSize();
+ }
+
+ items.push_back(ItemPair(itemId, itemCount));
+
+ if (items.size() > MAX_MAIL_ITEMS)
+ {
+ handler->PSendSysMessage(LANG_COMMAND_MAIL_ITEMS_LIMIT, MAX_MAIL_ITEMS);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+ }
+
+ // from console show not existed sender
+ MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
+
+ // fill mail
+ MailDraft draft(subject, text);
+
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+
+ for (ItemPairs::const_iterator itr = items.begin(); itr != items.end(); ++itr)
+ {
+ if (Item* item = Item::CreateItem(itr->first, itr->second, handler->GetSession() ? handler->GetSession()->GetPlayer() : 0))
+ {
+ item->SaveToDB(trans); // save for prevent lost at next mail load, if send fail then item will deleted
+ draft.AddItem(item);
+ }
+ }
+
+ draft.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender);
+ CharacterDatabase.CommitTransaction(trans);
+
+ std::string nameLink = handler->playerLink(receiverName);
+ handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
+ return true;
+ }
+ /// Send money by mail
+ static bool HandleSendMoneyCommand(ChatHandler* handler, char const* args)
+ {
+ /// format: name "subject text" "mail text" money
+
+ Player* receiver;
+ uint64 receiverGuid;
+ std::string receiverName;
+ if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName))
+ return false;
+
+ char* tail1 = strtok(NULL, "");
+ if (!tail1)
+ return false;
+
+ char* msgSubject = handler->extractQuotedArg(tail1);
+ if (!msgSubject)
+ return false;
+
+ char* tail2 = strtok(NULL, "");
+ if (!tail2)
+ return false;
+
+ char* msgText = handler->extractQuotedArg(tail2);
+ if (!msgText)
+ return false;
+
+ char* moneyStr = strtok(NULL, "");
+ int32 money = moneyStr ? atoi(moneyStr) : 0;
+ if (money <= 0)
+ return false;
+
+ // msgSubject, msgText isn't NUL after prev. check
+ std::string subject = msgSubject;
+ std::string text = msgText;
+
+ // from console show not existed sender
+ MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
+
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+
+ MailDraft(subject, text)
+ .AddMoney(money)
+ .SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender);
+
+ CharacterDatabase.CommitTransaction(trans);
+
+ std::string nameLink = handler->playerLink(receiverName);
+ handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
+ return true;
+ }
+ /// Send a message to a player in game
+ static bool HandleSendMessageCommand(ChatHandler* handler, char const* args)
+ {
+ /// - Find the player
+ Player* player;
+ if (!handler->extractPlayerTarget((char*)args, &player))
+ return false;
+
+ char* msgStr = strtok(NULL, "");
+ if (!msgStr)
+ return false;
+
+ ///- Check that he is not logging out.
+ if (player->GetSession()->isLogingOut())
+ {
+ handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ /// - Send the message
+ // Use SendAreaTriggerMessage for fastest delivery.
+ player->GetSession()->SendAreaTriggerMessage("%s", msgStr);
+ player->GetSession()->SendAreaTriggerMessage("|cffff0000[Message from administrator]:|r");
+
+ // Confirmation message
+ std::string nameLink = handler->GetNameLink(player);
+ handler->PSendSysMessage(LANG_SENDMESSAGE, nameLink.c_str(), msgStr);
+
+ return true;
+ }
+};
+
+void AddSC_send_commandscript()
+{
+ new send_commandscript();
+}
diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp
index 34543a1a4a5..71f232d33a6 100644
--- a/src/server/scripts/Commands/cs_server.cpp
+++ b/src/server/scripts/Commands/cs_server.cpp
@@ -39,60 +39,60 @@ public:
{
static ChatCommand serverIdleRestartCommandTable[] =
{
- { "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL },
- { "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerIdleRestartCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "cancel", RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
+ { "" , RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, &HandleServerIdleRestartCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverIdleShutdownCommandTable[] =
{
- { "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL },
- { "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerIdleShutDownCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "cancel", RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
+ { "" , RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, &HandleServerIdleShutDownCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverRestartCommandTable[] =
{
- { "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL },
- { "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerRestartCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "cancel", RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
+ { "" , RBAC_PERM_COMMAND_SERVER_RESTART, true, &HandleServerRestartCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverShutdownCommandTable[] =
{
- { "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL },
- { "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "cancel", RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
+ { "" , RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, &HandleServerShutDownCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverSetCommandTable[] =
{
- { "difftime", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleServerSetDiffTimeCommand, "", NULL },
- { "loglevel", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleServerSetLogLevelCommand, "", NULL },
- { "motd", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerSetMotdCommand, "", NULL },
- { "closed", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerSetClosedCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "difftime", RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME, true, &HandleServerSetDiffTimeCommand, "", NULL },
+ { "loglevel", RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL, true, &HandleServerSetLogLevelCommand, "", NULL },
+ { "motd", RBAC_PERM_COMMAND_SERVER_SET_MOTD, true, &HandleServerSetMotdCommand, "", NULL },
+ { "closed", RBAC_PERM_COMMAND_SERVER_SET_CLOSED, true, &HandleServerSetClosedCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverCommandTable[] =
{
- { "corpses", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleServerCorpsesCommand, "", NULL },
- { "exit", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleServerExitCommand, "", NULL },
- { "idlerestart", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverIdleRestartCommandTable },
- { "idleshutdown", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverIdleShutdownCommandTable },
- { "info", RBAC_PERM_PLAYER_COMMANDS, true, &HandleServerInfoCommand, "", NULL },
- { "motd", RBAC_PERM_PLAYER_COMMANDS, true, &HandleServerMotdCommand, "", NULL },
- { "plimit", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerPLimitCommand, "", NULL },
- { "restart", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverRestartCommandTable },
- { "shutdown", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverShutdownCommandTable },
- { "set", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverSetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "corpses", RBAC_PERM_COMMAND_SERVER_CORPSES, true, &HandleServerCorpsesCommand, "", NULL },
+ { "exit", RBAC_PERM_COMMAND_SERVER_EXIT, true, &HandleServerExitCommand, "", NULL },
+ { "idlerestart", RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, NULL, "", serverIdleRestartCommandTable },
+ { "idleshutdown", RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, NULL, "", serverIdleShutdownCommandTable },
+ { "info", RBAC_PERM_COMMAND_SERVER_INFO, true, &HandleServerInfoCommand, "", NULL },
+ { "motd", RBAC_PERM_COMMAND_SERVER_MOTD, true, &HandleServerMotdCommand, "", NULL },
+ { "plimit", RBAC_PERM_COMMAND_SERVER_PLIMIT, true, &HandleServerPLimitCommand, "", NULL },
+ { "restart", RBAC_PERM_COMMAND_SERVER_RESTART, true, NULL, "", serverRestartCommandTable },
+ { "shutdown", RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, NULL, "", serverShutdownCommandTable },
+ { "set", RBAC_PERM_COMMAND_SERVER_SET, true, NULL, "", serverSetCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "server", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "server", RBAC_PERM_COMMAND_SERVER, true, NULL, "", serverCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp
index 9dc013a995f..dec9895af26 100644
--- a/src/server/scripts/Commands/cs_tele.cpp
+++ b/src/server/scripts/Commands/cs_tele.cpp
@@ -39,17 +39,17 @@ public:
{
static ChatCommand teleCommandTable[] =
{
- { "add", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleTeleAddCommand, "", NULL },
- { "del", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleTeleDelCommand, "", NULL },
- { "name", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleTeleNameCommand, "", NULL },
- { "group", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleTeleGroupCommand, "", NULL },
- { "", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleTeleCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", RBAC_PERM_COMMAND_TELE_ADD, false, &HandleTeleAddCommand, "", NULL },
+ { "del", RBAC_PERM_COMMAND_TELE_DEL, true, &HandleTeleDelCommand, "", NULL },
+ { "name", RBAC_PERM_COMMAND_TELE_NAME, true, &HandleTeleNameCommand, "", NULL },
+ { "group", RBAC_PERM_COMMAND_TELE_GROUP, false, &HandleTeleGroupCommand, "", NULL },
+ { "", RBAC_PERM_COMMAND_TELE, false, &HandleTeleCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "tele", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", teleCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "tele", RBAC_PERM_COMMAND_TELE, false, NULL, "", teleCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp
index 5c1ce304723..1c60a8143b4 100644
--- a/src/server/scripts/Commands/cs_ticket.cpp
+++ b/src/server/scripts/Commands/cs_ticket.cpp
@@ -40,34 +40,34 @@ public:
{
static ChatCommand ticketResponseCommandTable[] =
{
- { "append", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketResponseAppendCommand, "", NULL },
- { "appendln", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketResponseAppendLnCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "append", RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND, true, &HandleGMTicketResponseAppendCommand, "", NULL },
+ { "appendln", RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN, true, &HandleGMTicketResponseAppendLnCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand ticketCommandTable[] =
{
- { "assign", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGMTicketAssignToCommand, "", NULL },
- { "close", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketCloseByIdCommand, "", NULL },
- { "closedlist", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketListClosedCommand, "", NULL },
- { "comment", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketCommentCommand, "", NULL },
- { "complete", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketCompleteCommand, "", NULL },
- { "delete", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleGMTicketDeleteByIdCommand, "", NULL },
- { "escalate", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketEscalateCommand, "", NULL },
- { "escalatedlist", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGMTicketListEscalatedCommand, "", NULL },
- { "list", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketListCommand, "", NULL },
- { "onlinelist", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketListOnlineCommand, "", NULL },
- { "reset", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleGMTicketResetCommand, "", NULL },
- { "response", RBAC_PERM_MODERATOR_COMMANDS, true, NULL, "", ticketResponseCommandTable },
- { "togglesystem", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleToggleGMTicketSystem, "", NULL },
- { "unassign", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGMTicketUnAssignCommand, "", NULL },
- { "viewid", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketGetByIdCommand, "", NULL },
- { "viewname", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketGetByNameCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "assign", RBAC_PERM_COMMAND_TICKET_ASSIGN, true, &HandleGMTicketAssignToCommand, "", NULL },
+ { "close", RBAC_PERM_COMMAND_TICKET_CLOSE, true, &HandleGMTicketCloseByIdCommand, "", NULL },
+ { "closedlist", RBAC_PERM_COMMAND_TICKET_CLOSEDLIST, true, &HandleGMTicketListClosedCommand, "", NULL },
+ { "comment", RBAC_PERM_COMMAND_TICKET_COMMENT, true, &HandleGMTicketCommentCommand, "", NULL },
+ { "complete", RBAC_PERM_COMMAND_TICKET_COMPLETE, true, &HandleGMTicketCompleteCommand, "", NULL },
+ { "delete", RBAC_PERM_COMMAND_TICKET_DELETE, true, &HandleGMTicketDeleteByIdCommand, "", NULL },
+ { "escalate", RBAC_PERM_COMMAND_TICKET_ESCALATE, true, &HandleGMTicketEscalateCommand, "", NULL },
+ { "escalatedlist", RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST, true, &HandleGMTicketListEscalatedCommand, "", NULL },
+ { "list", RBAC_PERM_COMMAND_TICKET_LIST, true, &HandleGMTicketListCommand, "", NULL },
+ { "onlinelist", RBAC_PERM_COMMAND_TICKET_ONLINELIST, true, &HandleGMTicketListOnlineCommand, "", NULL },
+ { "reset", RBAC_PERM_COMMAND_TICKET_RESET, true, &HandleGMTicketResetCommand, "", NULL },
+ { "response", RBAC_PERM_COMMAND_TICKET_RESPONSE, true, NULL, "", ticketResponseCommandTable },
+ { "togglesystem", RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM, true, &HandleToggleGMTicketSystem, "", NULL },
+ { "unassign", RBAC_PERM_COMMAND_TICKET_UNASSIGN, true, &HandleGMTicketUnAssignCommand, "", NULL },
+ { "viewid", RBAC_PERM_COMMAND_TICKET_VIEWID, true, &HandleGMTicketGetByIdCommand, "", NULL },
+ { "viewname", RBAC_PERM_COMMAND_TICKET_VIEWNAME, true, &HandleGMTicketGetByNameCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "ticket", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", ticketCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "ticket", RBAC_PERM_COMMAND_TICKET, false, NULL, "", ticketCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp
index 5d2edc45a35..1dc0ba76c17 100644
--- a/src/server/scripts/Commands/cs_titles.cpp
+++ b/src/server/scripts/Commands/cs_titles.cpp
@@ -37,21 +37,21 @@ public:
{
static ChatCommand titlesSetCommandTable[] =
{
- { "mask", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesSetMaskCommand, "", NULL },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "mask", RBAC_PERM_COMMAND_TITLES_SET_MASK, false, &HandleTitlesSetMaskCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand titlesCommandTable[] =
{
- { "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesAddCommand, "", NULL },
- { "current", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesCurrentCommand, "", NULL },
- { "remove", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesRemoveCommand, "", NULL },
- { "set", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", titlesSetCommandTable },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "add", RBAC_PERM_COMMAND_TITLES_ADD, false, &HandleTitlesAddCommand, "", NULL },
+ { "current", RBAC_PERM_COMMAND_TITLES_CURRENT, false, &HandleTitlesCurrentCommand, "", NULL },
+ { "remove", RBAC_PERM_COMMAND_TITLES_REMOVE, false, &HandleTitlesRemoveCommand, "", NULL },
+ { "set", RBAC_PERM_COMMAND_TITLES_SET, false, NULL, "", titlesSetCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "titles", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", titlesCommandTable },
- { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
+ { "titles", RBAC_PERM_COMMAND_TITLES, false, NULL, "", titlesCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index 1da918241c4..ff343a6380d 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -38,19 +38,19 @@ public:
{
static ChatCommand wpCommandTable[] =
{
- { "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpAddCommand, "", NULL },
- { "event", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpEventCommand, "", NULL },
- { "load", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpLoadCommand, "", NULL },
- { "modify", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpModifyCommand, "", NULL },
- { "unload", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpUnLoadCommand, "", NULL },
- { "reload", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleWpReloadCommand, "", NULL },
- { "show", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpShowCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", RBAC_PERM_COMMAND_WP_ADD, false, &HandleWpAddCommand, "", NULL },
+ { "event", RBAC_PERM_COMMAND_WP_EVENT, false, &HandleWpEventCommand, "", NULL },
+ { "load", RBAC_PERM_COMMAND_WP_LOAD, false, &HandleWpLoadCommand, "", NULL },
+ { "modify", RBAC_PERM_COMMAND_WP_MODIFY, false, &HandleWpModifyCommand, "", NULL },
+ { "unload", RBAC_PERM_COMMAND_WP_UNLOAD, false, &HandleWpUnLoadCommand, "", NULL },
+ { "reload", RBAC_PERM_COMMAND_WP_RELOAD, false, &HandleWpReloadCommand, "", NULL },
+ { "show", RBAC_PERM_COMMAND_WP_SHOW, false, &HandleWpShowCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "wp", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", wpCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "wp", RBAC_PERM_COMMAND_WP, false, NULL, "", wpCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}