aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDDuarte <dnpd.dd@gmail.com>2014-10-19 00:23:18 +0100
committerDDuarte <dnpd.dd@gmail.com>2014-10-19 00:23:18 +0100
commit98f98fa17fde4a1294b3e9227973ce5df70fbd6b (patch)
tree911710fb74f5b3665c8c88a0608969f2d9c2fbf4
parent8936723291985d1759a4903901c7a29cc54fdcbf (diff)
parenteb68b116271780f36d34e432cd6f2e9ad12d2b54 (diff)
Merge remote-tracking branch 'origin/4.3.4' into 6.x
-rw-r--r--sql/base/auth_database.sql32
-rw-r--r--sql/base/characters_database.sql34
-rw-r--r--sql/updates/auth/2014_10_18_00_auth.sql9
-rw-r--r--sql/updates/auth/2014_10_18_01_auth.sql23
-rw-r--r--sql/updates/characters/2014_10_18_00_characters.sql12
-rw-r--r--sql/updates/world/2014_10_18_00_world.sql105
-rw-r--r--sql/updates/world/2014_10_18_00_world_434.sql23
-rw-r--r--sql/updates/world/2014_10_18_01_world.sql3
-rw-r--r--sql/updates/world/2014_10_18_02_world.sql9
-rw-r--r--sql/updates/world/2014_10_18_03_world.sql83
-rw-r--r--sql/updates/world/2014_10_18_04_world.sql6
-rw-r--r--src/server/game/Accounts/RBAC.h4
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp27
-rw-r--r--src/server/game/Battlegrounds/Battleground.h9
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp237
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.h492
-rw-r--r--src/server/game/Entities/Player/Player.cpp25
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp26
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp2
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp11
-rw-r--r--src/server/game/Instances/InstanceScript.h2
-rw-r--r--src/server/game/Miscellaneous/Language.h9
-rw-r--r--src/server/game/Spells/Spell.cpp34
-rw-r--r--src/server/game/Spells/Spell.h4
-rw-r--r--src/server/game/Spells/SpellEffects.cpp4
-rw-r--r--src/server/game/Spells/SpellInfo.cpp5
-rw-r--r--src/server/game/World/World.cpp2
-rw-r--r--src/server/game/World/World.h1
-rw-r--r--src/server/scripts/Commands/cs_instance.cpp144
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp66
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp11
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp112
-rw-r--r--src/server/scripts/Northrend/isle_of_conquest.cpp151
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp309
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp28
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.cpp5
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.h5
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.cpp3
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.h3
-rw-r--r--src/server/worldserver/worldserver.conf.dist8
41 files changed, 1652 insertions, 427 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index ed2112c04c5..47ef5ec9c8b 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -117,6 +117,32 @@ LOCK TABLES `account_banned` WRITE;
UNLOCK TABLES;
--
+-- Table structure for table `account_muted`
+--
+
+DROP TABLE IF EXISTS `account_muted`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `account_muted` (
+ `guid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier',
+ `mutedate` int(10) unsigned NOT NULL DEFAULT '0',
+ `mutetime` int(10) unsigned NOT NULL DEFAULT '0',
+ `mutedby` varchar(50) NOT NULL,
+ `mutereason` varchar(255) NOT NULL,
+ PRIMARY KEY (`guid`,`mutedate`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='mute List';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `account_muted`
+--
+
+LOCK TABLES `account_muted` WRITE;
+/*!40000 ALTER TABLE `account_muted` DISABLE KEYS */;
+/*!40000 ALTER TABLE `account_muted` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
-- Table structure for table `autobroadcast`
--
@@ -506,7 +532,7 @@ CREATE TABLE `rbac_linked_permissions` (
LOCK TABLES `rbac_linked_permissions` WRITE;
/*!40000 ALTER TABLE `rbac_linked_permissions` DISABLE KEYS */;
-INSERT INTO `rbac_linked_permissions` VALUES (192,21),(192,42),(192,43),(192,193),(192,196),(192,778),(192,779),(192,780),(192,781),(192,782),(192,783),(192,784),(192,785),(192,786),(192,787),(192,788),(192,789),(192,790),(192,791),(192,792),(192,793),(192,794),(193,48),(193,194),(193,197),(194,1),(194,2),(194,11),(194,13),(194,14),(194,15),(194,16),(194,17),(194,18),(194,19),(194,20),(194,22),(194,23),(194,25),(194,26),(194,27),(194,28),(194,29),(194,30),(194,31),(194,32),(194,33),(194,34),(194,35),(194,36),(194,37),(194,38),(194,39),(194,40),(194,41),(194,44),(194,46),(194,47),(194,195),(194,198),(195,3),(195,4),(195,5),(195,6),(195,24),(195,49),(195,199),(196,200),(196,201),(196,208),(196,212),(196,213),(196,226),(196,227),(196,230),(196,231),(196,233),(196,234),(196,235),(196,238),(196,239),(196,240),(196,241),(196,242),(196,243),(196,244),(196,245),(196,246),(196,247),(196,248),(196,249),(196,250),(196,251),(196,252),(196,253),(196,254),(196,255),(196,256),(196,257),(196,258),(196,259),(196,260),(196,261),(196,262),(196,264),(196,265),(196,266),(196,267),(196,268),(196,269),(196,270),(196,271),(196,272),(196,279),(196,280),(196,283),(196,287),(196,288),(196,289),(196,290),(196,291),(196,292),(196,293),(196,294),(196,295),(196,296),(196,297),(196,298),(196,299),(196,302),(196,303),(196,304),(196,305),(196,306),(196,307),(196,308),(196,309),(196,310),(196,313),(196,314),(196,319),(196,320),(196,321),(196,322),(196,323),(196,324),(196,325),(196,326),(196,327),(196,328),(196,329),(196,330),(196,331),(196,332),(196,333),(196,334),(196,335),(196,336),(196,337),(196,338),(196,339),(196,340),(196,341),(196,342),(196,343),(196,344),(196,345),(196,346),(196,347),(196,348),(196,349),(196,350),(196,351),(196,352),(196,353),(196,354),(196,355),(196,356),(196,357),(196,358),(196,359),(196,360),(196,361),(196,362),(196,363),(196,364),(196,365),(196,366),(196,373),(196,375),(196,400),(196,401),(196,402),(196,403),(196,404),(196,405),(196,406),(196,407),(196,417),(196,418),(196,419),(196,420),(196,421),(196,422),(196,423),(196,424),(196,425),(196,426),(196,427),(196,428),(196,429),(196,434),(196,435),(196,436),(196,437),(196,438),(196,439),(196,440),(196,441),(196,442),(196,443),(196,444),(196,445),(196,446),(196,447),(196,448),(196,449),(196,450),(196,451),(196,452),(196,453),(196,454),(196,455),(196,456),(196,457),(196,458),(196,459),(196,461),(196,463),(196,464),(196,465),(196,472),(196,473),(196,474),(196,475),(196,476),(196,477),(196,478),(196,488),(196,489),(196,491),(196,492),(196,493),(196,495),(196,497),(196,498),(196,499),(196,500),(196,502),(196,503),(196,505),(196,508),(196,511),(196,513),(196,514),(196,516),(196,519),(196,522),(196,523),(196,526),(196,527),(196,529),(196,530),(196,533),(196,535),(196,536),(196,537),(196,538),(196,539),(196,540),(196,541),(196,556),(196,581),(196,582),(196,592),(196,593),(196,596),(196,602),(196,603),(196,604),(196,605),(196,606),(196,607),(196,608),(196,609),(196,610),(196,611),(196,612),(196,613),(196,614),(196,615),(196,616),(196,617),(196,618),(196,619),(196,620),(196,621),(196,622),(196,623),(196,624),(196,625),(196,626),(196,627),(196,628),(196,629),(196,630),(196,631),(196,633),(196,634),(196,635),(196,636),(196,637),(196,638),(196,639),(196,640),(196,641),(196,642),(196,643),(196,644),(196,645),(196,646),(196,647),(196,648),(196,649),(196,650),(196,651),(196,652),(196,653),(196,654),(196,655),(196,656),(196,657),(196,658),(196,659),(196,660),(196,661),(196,662),(196,663),(196,664),(196,665),(196,666),(196,667),(196,668),(196,669),(196,670),(196,671),(196,672),(196,673),(196,674),(196,675),(196,676),(196,677),(196,678),(196,679),(196,680),(196,681),(196,682),(196,683),(196,684),(196,685),(196,686),(196,687),(196,688),(196,689),(196,690),(196,691),(196,692),(196,693),(196,694),(196,695),(196,696),(196,697),(196,698),(196,699),(196,700),(196,701),(196,702),(196,703),(196,704),(196,705),(196,706),(196,707),(196,708),(196,709),(196,710),(196,711),(196,712),(196,713),(196,714),(196,715),(196,716),(196,717),(196,718),(196,719),(196,721),(196,722),(196,723),(196,724),(196,725),(196,726),(196,727),(196,728),(196,729),(196,730),(196,733),(196,734),(196,735),(196,736),(196,738),(196,739),(196,748),(196,753),(196,757),(196,773),(196,777),(197,232),(197,236),(197,237),(197,273),(197,274),(197,275),(197,276),(197,277),(197,284),(197,285),(197,286),(197,301),(197,311),(197,387),(197,388),(197,389),(197,390),(197,391),(197,392),(197,393),(197,394),(197,395),(197,396),(197,397),(197,398),(197,399),(197,479),(197,480),(197,481),(197,482),(197,485),(197,486),(197,487),(197,494),(197,506),(197,509),(197,510),(197,517),(197,518),(197,521),(197,542),(197,543),(197,550),(197,558),(197,568),(197,571),(197,572),(197,573),(197,574),(197,575),(197,576),(197,577),(197,578),(197,579),(197,580),(197,583),(197,584),(197,585),(197,586),(197,587),(197,588),(197,589),(197,590),(197,591),(197,594),(197,595),(197,601),(197,743),(197,750),(197,758),(197,761),(197,762),(197,763),(197,764),(197,765),(197,766),(197,767),(197,768),(197,769),(197,770),(197,771),(197,772),(197,774),(198,218),(198,300),(198,312),(198,315),(198,316),(198,317),(198,318),(198,367),(198,368),(198,369),(198,370),(198,371),(198,372),(198,374),(198,376),(198,377),(198,378),(198,379),(198,380),(198,381),(198,382),(198,383),(198,384),(198,385),(198,386),(198,408),(198,409),(198,410),(198,411),(198,412),(198,413),(198,414),(198,415),(198,416),(198,430),(198,431),(198,432),(198,433),(198,462),(198,466),(198,467),(198,468),(198,469),(198,470),(198,471),(198,483),(198,484),(198,490),(198,504),(198,512),(198,515),(198,520),(198,524),(198,528),(198,531),(198,532),(198,544),(198,545),(198,546),(198,547),(198,548),(198,549),(198,551),(198,552),(198,553),(198,554),(198,555),(198,557),(198,559),(198,560),(198,561),(198,562),(198,563),(198,564),(198,565),(198,566),(198,567),(198,569),(198,570),(198,597),(198,598),(198,599),(198,600),(198,737),(198,740),(198,741),(198,742),(198,744),(198,745),(198,746),(198,747),(198,749),(198,751),(198,752),(198,754),(198,755),(198,756),(198,759),(198,760),(199,207),(199,209),(199,210),(199,211),(199,217),(199,221),(199,222),(199,223),(199,225),(199,263),(199,496),(199,501),(199,507),(199,525),(199,534);
+INSERT INTO `rbac_linked_permissions` VALUES (192,21),(192,42),(192,43),(192,193),(192,196),(192,778),(192,779),(192,780),(192,781),(192,782),(192,783),(192,784),(192,785),(192,786),(192,787),(192,788),(192,789),(192,790),(192,791),(192,792),(192,793),(192,794),(193,48),(193,194),(193,197),(194,1),(194,2),(194,11),(194,13),(194,14),(194,15),(194,16),(194,17),(194,18),(194,19),(194,20),(194,22),(194,23),(194,25),(194,26),(194,27),(194,28),(194,29),(194,30),(194,31),(194,32),(194,33),(194,34),(194,35),(194,36),(194,37),(194,38),(194,39),(194,40),(194,41),(194,44),(194,46),(194,47),(194,195),(194,198),(195,3),(195,4),(195,5),(195,6),(195,24),(195,49),(195,199),(196,200),(196,201),(196,208),(196,212),(196,213),(196,226),(196,227),(196,230),(196,231),(196,233),(196,234),(196,235),(196,238),(196,239),(196,240),(196,241),(196,242),(196,243),(196,244),(196,245),(196,246),(196,247),(196,248),(196,249),(196,250),(196,251),(196,252),(196,253),(196,254),(196,255),(196,256),(196,257),(196,258),(196,259),(196,260),(196,261),(196,262),(196,264),(196,265),(196,266),(196,267),(196,268),(196,269),(196,270),(196,271),(196,272),(196,279),(196,280),(196,283),(196,287),(196,288),(196,289),(196,290),(196,291),(196,292),(196,293),(196,294),(196,295),(196,296),(196,297),(196,298),(196,299),(196,302),(196,303),(196,304),(196,305),(196,306),(196,307),(196,308),(196,309),(196,310),(196,313),(196,314),(196,319),(196,320),(196,321),(196,322),(196,323),(196,324),(196,325),(196,326),(196,327),(196,328),(196,329),(196,330),(196,331),(196,332),(196,333),(196,334),(196,335),(196,336),(196,337),(196,338),(196,339),(196,340),(196,341),(196,342),(196,343),(196,344),(196,345),(196,346),(196,347),(196,348),(196,349),(196,350),(196,351),(196,352),(196,353),(196,354),(196,355),(196,356),(196,357),(196,358),(196,359),(196,360),(196,361),(196,362),(196,363),(196,364),(196,365),(196,366),(196,373),(196,375),(196,400),(196,401),(196,402),(196,403),(196,404),(196,405),(196,406),(196,407),(196,417),(196,418),(196,419),(196,420),(196,421),(196,422),(196,423),(196,424),(196,425),(196,426),(196,427),(196,428),(196,429),(196,434),(196,435),(196,436),(196,437),(196,438),(196,439),(196,440),(196,441),(196,442),(196,443),(196,444),(196,445),(196,446),(196,447),(196,448),(196,449),(196,450),(196,451),(196,452),(196,453),(196,454),(196,455),(196,456),(196,457),(196,458),(196,459),(196,461),(196,463),(196,464),(196,465),(196,472),(196,473),(196,474),(196,475),(196,476),(196,477),(196,478),(196,488),(196,489),(196,491),(196,492),(196,493),(196,495),(196,497),(196,498),(196,499),(196,500),(196,502),(196,503),(196,505),(196,508),(196,511),(196,513),(196,514),(196,516),(196,519),(196,522),(196,523),(196,526),(196,527),(196,529),(196,530),(196,533),(196,535),(196,536),(196,537),(196,538),(196,539),(196,540),(196,541),(196,556),(196,581),(196,582),(196,592),(196,593),(196,596),(196,602),(196,603),(196,604),(196,605),(196,606),(196,607),(196,608),(196,609),(196,610),(196,611),(196,612),(196,613),(196,614),(196,615),(196,616),(196,617),(196,618),(196,619),(196,620),(196,621),(196,622),(196,623),(196,624),(196,625),(196,626),(196,627),(196,628),(196,629),(196,630),(196,631),(194,632),(196,633),(196,634),(196,635),(196,636),(196,637),(196,638),(196,639),(196,640),(196,641),(196,642),(196,643),(196,644),(196,645),(196,646),(196,647),(196,648),(196,649),(196,650),(196,651),(196,652),(196,653),(196,654),(196,655),(196,656),(196,657),(196,658),(196,659),(196,660),(196,661),(196,662),(196,663),(196,664),(196,665),(196,666),(196,667),(196,668),(196,669),(196,670),(196,671),(196,672),(196,673),(196,674),(196,675),(196,676),(196,677),(196,678),(196,679),(196,680),(196,681),(196,682),(196,683),(196,684),(196,685),(196,686),(196,687),(196,688),(196,689),(196,690),(196,691),(196,692),(196,693),(196,694),(196,695),(196,696),(196,697),(196,698),(196,699),(196,700),(196,701),(196,702),(196,703),(196,704),(196,705),(196,706),(196,707),(196,708),(196,709),(196,710),(196,711),(196,712),(196,713),(196,714),(196,715),(196,716),(196,717),(196,718),(196,719),(196,721),(196,722),(196,723),(196,724),(196,725),(196,726),(196,727),(196,728),(196,729),(196,730),(196,733),(196,734),(196,735),(196,736),(196,738),(196,739),(196,748),(196,753),(196,757),(196,773),(196,777),(197,232),(197,236),(197,237),(197,273),(197,274),(197,275),(197,276),(197,277),(197,284),(197,285),(197,286),(197,301),(197,311),(197,387),(197,388),(197,389),(197,390),(197,391),(197,392),(197,393),(197,394),(197,395),(197,396),(197,397),(197,398),(197,399),(197,479),(197,480),(197,481),(197,482),(197,485),(197,486),(197,487),(197,494),(197,506),(197,509),(197,510),(197,517),(197,518),(197,521),(197,542),(197,543),(197,550),(197,558),(197,568),(197,571),(197,572),(197,573),(197,574),(197,575),(197,576),(197,577),(197,578),(197,579),(197,580),(197,583),(197,584),(197,585),(197,586),(197,587),(197,588),(197,589),(197,590),(197,591),(197,594),(197,595),(197,601),(197,743),(197,750),(197,758),(197,761),(197,762),(197,763),(197,764),(197,765),(197,766),(197,767),(197,768),(197,769),(197,770),(197,771),(197,772),(197,774),(198,218),(198,300),(198,312),(198,315),(198,316),(198,317),(198,318),(198,367),(198,368),(198,369),(198,370),(198,371),(198,372),(198,374),(198,376),(198,377),(198,378),(198,379),(198,380),(198,381),(198,382),(198,383),(198,384),(198,385),(198,386),(198,408),(198,409),(198,410),(198,411),(198,412),(198,413),(198,414),(198,415),(198,416),(198,430),(198,431),(198,432),(198,433),(198,462),(198,466),(198,467),(198,468),(198,469),(198,470),(198,471),(198,483),(198,484),(198,490),(198,504),(198,512),(198,515),(198,520),(198,524),(198,528),(198,531),(198,532),(198,544),(198,545),(198,546),(198,547),(198,548),(198,549),(198,551),(198,552),(198,553),(198,554),(198,555),(198,557),(198,559),(198,560),(198,561),(198,562),(198,563),(198,564),(198,565),(198,566),(198,567),(198,569),(198,570),(198,597),(198,598),(198,599),(198,600),(198,737),(198,740),(198,741),(198,742),(198,744),(198,745),(198,746),(198,747),(198,749),(198,751),(198,752),(198,754),(198,755),(198,756),(198,759),(198,760),(199,207),(199,209),(199,210),(199,211),(199,217),(199,221),(199,222),(199,223),(199,225),(199,263),(199,496),(199,501),(199,507),(199,525),(199,534);
/*!40000 ALTER TABLE `rbac_linked_permissions` ENABLE KEYS */;
UNLOCK TABLES;
@@ -530,7 +556,7 @@ CREATE TABLE `rbac_permissions` (
LOCK TABLES `rbac_permissions` WRITE;
/*!40000 ALTER TABLE `rbac_permissions` DISABLE KEYS */;
-INSERT INTO `rbac_permissions` VALUES (1,'Instant logout'),(2,'Skip Queue'),(3,'Join Normal Battleground'),(4,'Join Random Battleground'),(5,'Join Arenas'),(6,'Join Dungeon Finder'),(11,'Log GM trades'),(13,'Skip Instance required bosses check'),(14,'Skip character creation team mask check'),(15,'Skip character creation class mask check'),(16,'Skip character creation race mask check'),(17,'Skip character creation reserved name check'),(18,'Skip character creation heroic min level check'),(19,'Skip needed requirements to use channel check'),(20,'Skip disable map check'),(21,'Skip reset talents when used more than allowed check'),(22,'Skip spam chat check'),(23,'Skip over-speed ping check'),(24,'Two side faction characters on the same account'),(25,'Allow say chat between factions'),(26,'Allow channel chat between factions'),(27,'Two side mail interaction'),(28,'See two side who list'),(29,'Add friends of other faction'),(30,'Save character without delay with .save command'),(31,'Use params with .unstuck command'),(32,'Can be assigned tickets with .assign ticket command'),(33,'Notify if a command was not found'),(34,'Check if should appear in list using .gm ingame command'),(35,'See all security levels with who command'),(36,'Filter whispers'),(37,'Use staff badge in chat'),(38,'Resurrect with full Health Points'),(39,'Restore saved gm setting states'),(40,'Allows to add a gm to friend list'),(41,'Use Config option START_GM_LEVEL to assign new character level'),(42,'Allows to use CMSG_WORLD_TELEPORT opcode'),(43,'Allows to use CMSG_WHOIS opcode'),(44,'Receive global GM messages/texts'),(45,'Join channels without announce'),(46,'Change channel settings without being channel moderator'),(47,'Enables lower security than target check'),(48,'Enable IP, Last Login and EMail output in pinfo'),(49,'Forces to enter the email for confirmation on password change'),(50,'Allow user to check his own email with .account'),(192,'Role: Sec Level Administrator'),(193,'Role: Sec Level Gamemaster'),(194,'Role: Sec Level Moderator'),(195,'Role: Sec Level Player'),(196,'Role: Administrator Commands'),(197,'Role: Gamemaster Commands'),(198,'Role: Moderator Commands'),(199,'Role: Player Commands'),(200,'Command: rbac'),(201,'Command: rbac account'),(202,'Command: rbac account list'),(203,'Command: rbac account grant'),(204,'Command: rbac account deny'),(205,'Command: rbac account revoke'),(206,'Command: rbac list'),(207,'Command: battlenetaccount'),(208,'Command: battlenetaccount create'),(209,'Command: battlenetaccount lock country'),(210,'Command: battlenetaccount lock ip'),(211,'Command: battlenetaccount password'),(212,'Command: battlenetaccount set'),(213,'Command: battlenetaccount set password'),(217,'Command: account'),(218,'Command: account addon'),(219,'Command: account create'),(220,'Command: account delete'),(221,'Command: account lock'),(222,'Command: account lock country'),(223,'Command: account lock ip'),(224,'Command: account onlinelist'),(225,'Command: account password'),(226,'Command: account set'),(227,'Command: account set addon'),(228,'Command: account set gmlevel'),(229,'Command: account set password'),(230,'Command: achievement'),(231,'Command: achievement add'),(232,'Command: arena'),(233,'Command: arena captain'),(234,'Command: arena create'),(235,'Command: arena disband'),(236,'Command: arena info'),(237,'Command: arena lookup'),(238,'Command: arena rename'),(239,'Command: ban'),(240,'Command: ban account'),(241,'Command: ban character'),(242,'Command: ban ip'),(243,'Command: ban playeraccount'),(244,'Command: baninfo'),(245,'Command: baninfo account'),(246,'Command: baninfo character'),(247,'Command: baninfo ip'),(248,'Command: banlist'),(249,'Command: banlist account'),(250,'Command: banlist character'),(251,'Command: banlist ip'),(252,'Command: unban'),(253,'Command: unban account'),(254,'Command: unban character'),(255,'Command: unban ip'),(256,'Command: unban playeraccount'),(257,'Command: bf'),(258,'Command: bf start'),(259,'Command: bf stop'),(260,'Command: bf switch'),(261,'Command: bf timer'),(262,'Command: bf enable'),(263,'Command: account email'),(264,'Command: account set sec'),(265,'Command: account set sec email'),(266,'Command: account set sec regmail'),(267,'Command: cast'),(268,'Command: cast back'),(269,'Command: cast dist'),(270,'Command: cast self'),(271,'Command: cast target'),(272,'Command: cast dest'),(273,'Command: character'),(274,'Command: character customize'),(275,'Command: character changefaction'),(276,'Command: character changerace'),(277,'Command: character deleted'),(279,'Command: character deleted list'),(280,'Command: character deleted restore'),(283,'Command: character level'),(284,'Command: character rename'),(285,'Command: character reputation'),(286,'Command: character titles'),(287,'Command: levelup'),(288,'Command: pdump'),(289,'Command: pdump load'),(290,'Command: pdump write'),(291,'Command: cheat'),(292,'Command: cheat casttime'),(293,'Command: cheat cooldown'),(294,'Command: cheat explore'),(295,'Command: cheat god'),(296,'Command: cheat power'),(297,'Command: cheat status'),(298,'Command: cheat taxi'),(299,'Command: cheat waterwalk'),(300,'Command: debug'),(301,'Command: debug anim'),(302,'Command: debug areatriggers'),(303,'Command: debug arena'),(304,'Command: debug bg'),(305,'Command: debug entervehicle'),(306,'Command: debug getitemstate'),(307,'Command: debug getitemvalue'),(308,'Command: debug getvalue'),(309,'Command: debug hostil'),(310,'Command: debug itemexpire'),(311,'Command: debug lootrecipient'),(312,'Command: debug los'),(313,'Command: debug mod32value'),(314,'Command: debug moveflags'),(315,'Command: debug play'),(316,'Command: debug play cinematics'),(317,'Command: debug play movie'),(318,'Command: debug play sound'),(319,'Command: debug send'),(320,'Command: debug send buyerror'),(321,'Command: debug send channelnotify'),(322,'Command: debug send chatmessage'),(323,'Command: debug send equiperror'),(324,'Command: debug send largepacket'),(325,'Command: debug send opcode'),(326,'Command: debug send qinvalidmsg'),(327,'Command: debug send qpartymsg'),(328,'Command: debug send sellerror'),(329,'Command: debug send setphaseshift'),(330,'Command: debug send spellfail'),(331,'Command: debug setaurastate'),(332,'Command: debug setbit'),(333,'Command: debug setitemvalue'),(334,'Command: debug setvalue'),(335,'Command: debug setvid'),(336,'Command: debug spawnvehicle'),(337,'Command: debug threat'),(338,'Command: debug update'),(339,'Command: debug uws'),(340,'Command: wpgps'),(341,'Command: deserter'),(342,'Command: deserter bg'),(343,'Command: deserter bg add'),(344,'Command: deserter bg remove'),(345,'Command: deserter instance'),(346,'Command: deserter instance add'),(347,'Command: deserter instance remove'),(348,'Command: disable'),(349,'Command: disable add'),(350,'Command: disable add achievement_criteria'),(351,'Command: disable add battleground'),(352,'Command: disable add map'),(353,'Command: disable add mmap'),(354,'Command: disable add outdoorpvp'),(355,'Command: disable add quest'),(356,'Command: disable add spell'),(357,'Command: disable add vmap'),(358,'Command: disable remove'),(359,'Command: disable remove achievement_criteria'),(360,'Command: disable remove battleground'),(361,'Command: disable remove map'),(362,'Command: disable remove mmap'),(363,'Command: disable remove outdoorpvp'),(364,'Command: disable remove quest'),(365,'Command: disable remove spell'),(366,'Command: disable remove vmap'),(367,'Command: event'),(368,'Command: event activelist'),(369,'Command: event start'),(370,'Command: event stop'),(371,'Command: gm'),(372,'Command: gm chat'),(373,'Command: gm fly'),(374,'Command: gm ingame'),(375,'Command: gm list'),(376,'Command: gm visible'),(377,'Command: go'),(378,'Command: go creature'),(379,'Command: go graveyard'),(380,'Command: go grid'),(381,'Command: go object'),(382,'Command: go taxinode'),(383,'Command: go ticket'),(384,'Command: go trigger'),(385,'Command: go xyz'),(386,'Command: go zonexy'),(387,'Command: gobject'),(388,'Command: gobject activate'),(389,'Command: gobject add'),(390,'Command: gobject add temp'),(391,'Command: gobject delete'),(392,'Command: gobject info'),(393,'Command: gobject move'),(394,'Command: gobject near'),(395,'Command: gobject set'),(396,'Command: gobject set phase'),(397,'Command: gobject set state'),(398,'Command: gobject target'),(399,'Command: gobject turn'),(400,'debug transport'),(401,'Command: guild'),(402,'Command: guild create'),(403,'Command: guild delete'),(404,'Command: guild invite'),(405,'Command: guild uninvite'),(406,'Command: guild rank'),(407,'Command: guild rename'),(408,'Command: honor'),(409,'Command: honor add'),(410,'Command: honor add kill'),(411,'Command: honor update'),(412,'Command: instance'),(413,'Command: instance listbinds'),(414,'Command: instance unbind'),(415,'Command: instance stats'),(416,'Command: instance savedata'),(417,'Command: learn'),(418,'Command: learn all'),(419,'Command: learn all my'),(420,'Command: learn all my class'),(421,'Command: learn all my pettalents'),(422,'Command: learn all my spells'),(423,'Command: learn all my talents'),(424,'Command: learn all gm'),(425,'Command: learn all crafts'),(426,'Command: learn all default'),(427,'Command: learn all lang'),(428,'Command: learn all recipes'),(429,'Command: unlearn'),(430,'Command: lfg'),(431,'Command: lfg player'),(432,'Command: lfg group'),(433,'Command: lfg queue'),(434,'Command: lfg clean'),(435,'Command: lfg options'),(436,'Command: list'),(437,'Command: list creature'),(438,'Command: list item'),(439,'Command: list object'),(440,'Command: list auras'),(441,'Command: list mail'),(442,'Command: lookup'),(443,'Command: lookup area'),(444,'Command: lookup creature'),(445,'Command: lookup event'),(446,'Command: lookup faction'),(447,'Command: lookup item'),(448,'Command: lookup itemset'),(449,'Command: lookup object'),(450,'Command: lookup quest'),(451,'Command: lookup player'),(452,'Command: lookup player ip'),(453,'Command: lookup player account'),(454,'Command: lookup player email'),(455,'Command: lookup skill'),(456,'Command: lookup spell'),(457,'Command: lookup spell id'),(458,'Command: lookup taxinode'),(459,'Command: lookup tele'),(460,'Command: lookup title'),(461,'Command: lookup map'),(462,'Command: announce'),(463,'Command: channel'),(464,'Command: channel set'),(465,'Command: channel set ownership'),(466,'Command: gmannounce'),(467,'Command: gmnameannounce'),(468,'Command: gmnotify'),(469,'Command: nameannounce'),(470,'Command: notify'),(471,'Command: whispers'),(472,'Command: group'),(473,'Command: group leader'),(474,'Command: group disband'),(475,'Command: group remove'),(476,'Command: group join'),(477,'Command: group list'),(478,'Command: group summon'),(479,'Command: pet'),(480,'Command: pet create'),(481,'Command: pet learn'),(482,'Command: pet unlearn'),(483,'Command: send'),(484,'Command: send items'),(485,'Command: send mail'),(486,'Command: send message'),(487,'Command: send money'),(488,'Command: additem'),(489,'Command: additemset'),(490,'Command: appear'),(491,'Command: aura'),(492,'Command: bank'),(493,'Command: bindsight'),(494,'Command: combatstop'),(495,'Command: cometome'),(496,'Command: commands'),(497,'Command: cooldown'),(498,'Command: damage'),(499,'Command: dev'),(500,'Command: die'),(501,'Command: dismount'),(502,'Command: distance'),(503,'Command: flusharenapoints'),(504,'Command: freeze'),(505,'Command: gps'),(506,'Command: guid'),(507,'Command: help'),(508,'Command: hidearea'),(509,'Command: itemmove'),(510,'Command: kick'),(511,'Command: linkgrave'),(512,'Command: listfreeze'),(513,'Command: maxskill'),(514,'Command: movegens'),(515,'Command: mute'),(516,'Command: neargrave'),(517,'Command: pinfo'),(518,'Command: playall'),(519,'Command: possess'),(520,'Command: recall'),(521,'Command: repairitems'),(522,'Command: respawn'),(523,'Command: revive'),(524,'Command: saveall'),(525,'Command: save'),(526,'Command: setskill'),(527,'Command: showarea'),(528,'Command: summon'),(529,'Command: unaura'),(530,'Command: unbindsight'),(531,'Command: unfreeze'),(532,'Command: unmute'),(533,'Command: unpossess'),(534,'Command: unstuck'),(535,'Command: wchange'),(536,'Command: mmap'),(537,'Command: mmap loadedtiles'),(538,'Command: mmap loc'),(539,'Command: mmap path'),(540,'Command: mmap stats'),(541,'Command: mmap testarea'),(542,'Command: morph'),(543,'Command: demorph'),(544,'Command: modify'),(545,'Command: modify arenapoints'),(546,'Command: modify bit'),(547,'Command: modify drunk'),(548,'Command: modify energy'),(549,'Command: modify faction'),(550,'Command: modify gender'),(551,'Command: modify honor'),(552,'Command: modify hp'),(553,'Command: modify mana'),(554,'Command: modify money'),(555,'Command: modify mount'),(556,'Command: modify phase'),(557,'Command: modify rage'),(558,'Command: modify reputation'),(559,'Command: modify runicpower'),(560,'Command: modify scale'),(561,'Command: modify speed'),(562,'Command: modify speed all'),(563,'Command: modify speed backwalk'),(564,'Command: modify speed fly'),(565,'Command: modify speed walk'),(566,'Command: modify speed swim'),(567,'Command: modify spell'),(568,'Command: modify standstate'),(569,'Command: modify talentpoints'),(570,'Command: npc'),(571,'Command: npc add'),(572,'Command: npc add formation'),(573,'Command: npc add item'),(574,'Command: npc add move'),(575,'Command: npc add temp'),(576,'Command: npc add delete'),(577,'Command: npc add delete item'),(578,'Command: npc add follow'),(579,'Command: npc add follow stop'),(580,'Command: npc set'),(581,'Command: npc set allowmove'),(582,'Command: npc set entry'),(583,'Command: npc set factionid'),(584,'Command: npc set flag'),(585,'Command: npc set level'),(586,'Command: npc set link'),(587,'Command: npc set model'),(588,'Command: npc set movetype'),(589,'Command: npc set phase'),(590,'Command: npc set spawndist'),(591,'Command: npc set spawntime'),(592,'Command: npc set data'),(593,'Command: npc info'),(594,'Command: npc near'),(595,'Command: npc move'),(596,'Command: npc playemote'),(597,'Command: npc say'),(598,'Command: npc textemote'),(599,'Command: npc whisper'),(600,'Command: npc yell'),(601,'Command: npc tame'),(602,'Command: quest'),(603,'Command: quest add'),(604,'Command: quest complete'),(605,'Command: quest remove'),(606,'Command: quest reward'),(607,'Command: reload'),(608,'Command: reload access_requirement'),(609,'Command: reload achievement_criteria_data'),(610,'Command: reload achievement_reward'),(611,'Command: reload all'),(612,'Command: reload all achievement'),(613,'Command: reload all area'),(614,'Command: broadcast_text'),(615,'Command: reload all gossips'),(616,'Command: reload all item'),(617,'Command: reload all locales'),(618,'Command: reload all loot'),(619,'Command: reload all npc'),(620,'Command: reload all quest'),(621,'Command: reload all scripts'),(622,'Command: reload all spell'),(623,'Command: reload areatrigger_involvedrelation'),(624,'Command: reload areatrigger_tavern'),(625,'Command: reload areatrigger_teleport'),(626,'Command: reload auctions'),(627,'Command: reload autobroadcast'),(628,'Command: reload command'),(629,'Command: reload conditions'),(630,'Command: reload config'),(631,'Command: reload battleground_template'),(633,'Command: reload creature_linked_respawn'),(634,'Command: reload creature_loot_template'),(635,'Command: reload creature_onkill_reputation'),(636,'Command: reload creature_questender'),(637,'Command: reload creature_queststarter'),(638,'Command: reload creature_summon_groups'),(639,'Command: reload creature_template'),(640,'Command: reload creature_text'),(641,'Command: reload disables'),(642,'Command: reload disenchant_loot_template'),(643,'Command: reload event_scripts'),(644,'Command: reload fishing_loot_template'),(645,'Command: reload game_graveyard_zone'),(646,'Command: reload game_tele'),(647,'Command: reload gameobject_questender'),(648,'Command: reload gameobject_loot_template'),(649,'Command: reload gameobject_queststarter'),(650,'Command: reload gm_tickets'),(651,'Command: reload gossip_menu'),(652,'Command: reload gossip_menu_option'),(653,'Command: reload item_enchantment_template'),(654,'Command: reload item_loot_template'),(655,'Command: reload item_set_names'),(656,'Command: reload lfg_dungeon_rewards'),(657,'Command: reload locales_achievement_reward'),(658,'Command: reload locales_creature'),(659,'Command: reload locales_creature_text'),(660,'Command: reload locales_gameobject'),(661,'Command: reload locales_gossip_menu_option'),(662,'Command: reload locales_item'),(663,'Command: reload locales_item_set_name'),(664,'Command: reload locales_npc_text'),(665,'Command: reload locales_page_text'),(666,'Command: reload locales_points_of_interest'),(667,'Command: reload locales_quest'),(668,'Command: reload mail_level_reward'),(669,'Command: reload mail_loot_template'),(670,'Command: reload milling_loot_template'),(671,'Command: reload npc_spellclick_spells'),(672,'Command: reload npc_trainer'),(673,'Command: reload npc_vendor'),(674,'Command: reload page_text'),(675,'Command: reload pickpocketing_loot_template'),(676,'Command: reload points_of_interest'),(677,'Command: reload prospecting_loot_template'),(678,'Command: reload quest_poi'),(679,'Command: reload quest_template'),(680,'Command: reload rbac'),(681,'Command: reload reference_loot_template'),(682,'Command: reload reserved_name'),(683,'Command: reload reputation_reward_rate'),(684,'Command: reload reputation_spillover_template'),(685,'Command: reload skill_discovery_template'),(686,'Command: reload skill_extra_item_template'),(687,'Command: reload skill_fishing_base_level'),(688,'Command: reload skinning_loot_template'),(689,'Command: reload smart_scripts'),(690,'Command: reload spell_required'),(691,'Command: reload spell_area'),(692,'Command: reload spell_bonus_data'),(693,'Command: reload spell_group'),(694,'Command: reload spell_learn_spell'),(695,'Command: reload spell_loot_template'),(696,'Command: reload spell_linked_spell'),(697,'Command: reload spell_pet_auras'),(698,'Command: reload spell_proc_event'),(699,'Command: reload spell_proc'),(700,'Command: reload spell_scripts'),(701,'Command: reload spell_target_position'),(702,'Command: reload spell_threats'),(703,'Command: reload spell_group_stack_rules'),(704,'Command: reload trinity_string'),(705,'Command: reload warden_action'),(706,'Command: reload waypoint_scripts'),(707,'Command: reload waypoint_data'),(708,'Command: reload vehicle_accessory'),(709,'Command: reload vehicle_template_accessory'),(710,'Command: reset'),(711,'Command: reset achievements'),(712,'Command: reset honor'),(713,'Command: reset level'),(714,'Command: reset spells'),(715,'Command: reset stats'),(716,'Command: reset talents'),(717,'Command: reset all'),(718,'Command: server'),(719,'Command: server corpses'),(720,'Command: server exit'),(721,'Command: server idlerestart'),(722,'Command: server idlerestart cancel'),(723,'Command: server idleshutdown'),(724,'Command: server idleshutdown cancel'),(725,'Command: server info'),(726,'Command: server plimit'),(727,'Command: server restart'),(728,'Command: server restart cancel'),(729,'Command: server set'),(730,'Command: server set closed'),(731,'Command: server set difftime'),(732,'Command: server set loglevel'),(733,'Command: server set motd'),(734,'Command: server shutdown'),(735,'Command: server shutdown cancel'),(736,'Command: server motd'),(737,'Command: tele'),(738,'Command: tele add'),(739,'Command: tele del'),(740,'Command: tele name'),(741,'Command: tele group'),(742,'Command: ticket'),(743,'Command: ticket assign'),(744,'Command: ticket close'),(745,'Command: ticket closedlist'),(746,'Command: ticket comment'),(747,'Command: ticket complete'),(748,'Command: ticket delete'),(749,'Command: ticket escalate'),(750,'Command: ticket escalatedlist'),(751,'Command: ticket list'),(752,'Command: ticket onlinelist'),(753,'Command: ticket reset'),(754,'Command: ticket response'),(755,'Command: ticket response append'),(756,'Command: ticket response appendln'),(757,'Command: ticket togglesystem'),(758,'Command: ticket unassign'),(759,'Command: ticket viewid'),(760,'Command: ticket viewname'),(761,'Command: titles'),(762,'Command: titles add'),(763,'Command: titles current'),(764,'Command: titles remove'),(765,'Command: titles set'),(766,'Command: titles set mask'),(767,'Command: wp'),(768,'Command: wp add'),(769,'Command: wp event'),(770,'Command: wp load'),(771,'Command: wp modify'),(772,'Command: wp unload'),(773,'Command: wp reload'),(774,'Command: wp show'),(777,'Command: mailbox'),(778,'Command: ahbot'),(779,'Command: ahbot items'),(780,'Command: ahbot items gray'),(781,'Command: ahbot items white'),(782,'Command: ahbot items green'),(783,'Command: ahbot items blue'),(784,'Command: ahbot items purple'),(785,'Command: ahbot items orange'),(786,'Command: ahbot items yellow'),(787,'Command: ahbot ratio'),(788,'Command: ahbot ratio alliance'),(789,'Command: ahbot ratio horde'),(790,'Command: ahbot ratio neutral'),(791,'Command: ahbot rebuild'),(792,'Command: ahbot reload'),(793,'Command: ahbot status'),(794,'Command: .guild info');
+INSERT INTO `rbac_permissions` VALUES (1,'Instant logout'),(2,'Skip Queue'),(3,'Join Normal Battleground'),(4,'Join Random Battleground'),(5,'Join Arenas'),(6,'Join Dungeon Finder'),(11,'Log GM trades'),(13,'Skip Instance required bosses check'),(14,'Skip character creation team mask check'),(15,'Skip character creation class mask check'),(16,'Skip character creation race mask check'),(17,'Skip character creation reserved name check'),(18,'Skip character creation heroic min level check'),(19,'Skip needed requirements to use channel check'),(20,'Skip disable map check'),(21,'Skip reset talents when used more than allowed check'),(22,'Skip spam chat check'),(23,'Skip over-speed ping check'),(24,'Two side faction characters on the same account'),(25,'Allow say chat between factions'),(26,'Allow channel chat between factions'),(27,'Two side mail interaction'),(28,'See two side who list'),(29,'Add friends of other faction'),(30,'Save character without delay with .save command'),(31,'Use params with .unstuck command'),(32,'Can be assigned tickets with .assign ticket command'),(33,'Notify if a command was not found'),(34,'Check if should appear in list using .gm ingame command'),(35,'See all security levels with who command'),(36,'Filter whispers'),(37,'Use staff badge in chat'),(38,'Resurrect with full Health Points'),(39,'Restore saved gm setting states'),(40,'Allows to add a gm to friend list'),(41,'Use Config option START_GM_LEVEL to assign new character level'),(42,'Allows to use CMSG_WORLD_TELEPORT opcode'),(43,'Allows to use CMSG_WHOIS opcode'),(44,'Receive global GM messages/texts'),(45,'Join channels without announce'),(46,'Change channel settings without being channel moderator'),(47,'Enables lower security than target check'),(48,'Enable IP, Last Login and EMail output in pinfo'),(49,'Forces to enter the email for confirmation on password change'),(50,'Allow user to check his own email with .account'),(192,'Role: Sec Level Administrator'),(193,'Role: Sec Level Gamemaster'),(194,'Role: Sec Level Moderator'),(195,'Role: Sec Level Player'),(196,'Role: Administrator Commands'),(197,'Role: Gamemaster Commands'),(198,'Role: Moderator Commands'),(199,'Role: Player Commands'),(200,'Command: rbac'),(201,'Command: rbac account'),(202,'Command: rbac account list'),(203,'Command: rbac account grant'),(204,'Command: rbac account deny'),(205,'Command: rbac account revoke'),(206,'Command: rbac list'),(207,'Command: battlenetaccount'),(208,'Command: battlenetaccount create'),(209,'Command: battlenetaccount lock country'),(210,'Command: battlenetaccount lock ip'),(211,'Command: battlenetaccount password'),(212,'Command: battlenetaccount set'),(213,'Command: battlenetaccount set password'),(217,'Command: account'),(218,'Command: account addon'),(219,'Command: account create'),(220,'Command: account delete'),(221,'Command: account lock'),(222,'Command: account lock country'),(223,'Command: account lock ip'),(224,'Command: account onlinelist'),(225,'Command: account password'),(226,'Command: account set'),(227,'Command: account set addon'),(228,'Command: account set gmlevel'),(229,'Command: account set password'),(230,'Command: achievement'),(231,'Command: achievement add'),(232,'Command: arena'),(233,'Command: arena captain'),(234,'Command: arena create'),(235,'Command: arena disband'),(236,'Command: arena info'),(237,'Command: arena lookup'),(238,'Command: arena rename'),(239,'Command: ban'),(240,'Command: ban account'),(241,'Command: ban character'),(242,'Command: ban ip'),(243,'Command: ban playeraccount'),(244,'Command: baninfo'),(245,'Command: baninfo account'),(246,'Command: baninfo character'),(247,'Command: baninfo ip'),(248,'Command: banlist'),(249,'Command: banlist account'),(250,'Command: banlist character'),(251,'Command: banlist ip'),(252,'Command: unban'),(253,'Command: unban account'),(254,'Command: unban character'),(255,'Command: unban ip'),(256,'Command: unban playeraccount'),(257,'Command: bf'),(258,'Command: bf start'),(259,'Command: bf stop'),(260,'Command: bf switch'),(261,'Command: bf timer'),(262,'Command: bf enable'),(263,'Command: account email'),(264,'Command: account set sec'),(265,'Command: account set sec email'),(266,'Command: account set sec regmail'),(267,'Command: cast'),(268,'Command: cast back'),(269,'Command: cast dist'),(270,'Command: cast self'),(271,'Command: cast target'),(272,'Command: cast dest'),(273,'Command: character'),(274,'Command: character customize'),(275,'Command: character changefaction'),(276,'Command: character changerace'),(277,'Command: character deleted'),(279,'Command: character deleted list'),(280,'Command: character deleted restore'),(283,'Command: character level'),(284,'Command: character rename'),(285,'Command: character reputation'),(286,'Command: character titles'),(287,'Command: levelup'),(288,'Command: pdump'),(289,'Command: pdump load'),(290,'Command: pdump write'),(291,'Command: cheat'),(292,'Command: cheat casttime'),(293,'Command: cheat cooldown'),(294,'Command: cheat explore'),(295,'Command: cheat god'),(296,'Command: cheat power'),(297,'Command: cheat status'),(298,'Command: cheat taxi'),(299,'Command: cheat waterwalk'),(300,'Command: debug'),(301,'Command: debug anim'),(302,'Command: debug areatriggers'),(303,'Command: debug arena'),(304,'Command: debug bg'),(305,'Command: debug entervehicle'),(306,'Command: debug getitemstate'),(307,'Command: debug getitemvalue'),(308,'Command: debug getvalue'),(309,'Command: debug hostil'),(310,'Command: debug itemexpire'),(311,'Command: debug lootrecipient'),(312,'Command: debug los'),(313,'Command: debug mod32value'),(314,'Command: debug moveflags'),(315,'Command: debug play'),(316,'Command: debug play cinematics'),(317,'Command: debug play movie'),(318,'Command: debug play sound'),(319,'Command: debug send'),(320,'Command: debug send buyerror'),(321,'Command: debug send channelnotify'),(322,'Command: debug send chatmessage'),(323,'Command: debug send equiperror'),(324,'Command: debug send largepacket'),(325,'Command: debug send opcode'),(326,'Command: debug send qinvalidmsg'),(327,'Command: debug send qpartymsg'),(328,'Command: debug send sellerror'),(329,'Command: debug send setphaseshift'),(330,'Command: debug send spellfail'),(331,'Command: debug setaurastate'),(332,'Command: debug setbit'),(333,'Command: debug setitemvalue'),(334,'Command: debug setvalue'),(335,'Command: debug setvid'),(336,'Command: debug spawnvehicle'),(337,'Command: debug threat'),(338,'Command: debug update'),(339,'Command: debug uws'),(340,'Command: wpgps'),(341,'Command: deserter'),(342,'Command: deserter bg'),(343,'Command: deserter bg add'),(344,'Command: deserter bg remove'),(345,'Command: deserter instance'),(346,'Command: deserter instance add'),(347,'Command: deserter instance remove'),(348,'Command: disable'),(349,'Command: disable add'),(350,'Command: disable add achievement_criteria'),(351,'Command: disable add battleground'),(352,'Command: disable add map'),(353,'Command: disable add mmap'),(354,'Command: disable add outdoorpvp'),(355,'Command: disable add quest'),(356,'Command: disable add spell'),(357,'Command: disable add vmap'),(358,'Command: disable remove'),(359,'Command: disable remove achievement_criteria'),(360,'Command: disable remove battleground'),(361,'Command: disable remove map'),(362,'Command: disable remove mmap'),(363,'Command: disable remove outdoorpvp'),(364,'Command: disable remove quest'),(365,'Command: disable remove spell'),(366,'Command: disable remove vmap'),(367,'Command: event'),(368,'Command: event activelist'),(369,'Command: event start'),(370,'Command: event stop'),(371,'Command: gm'),(372,'Command: gm chat'),(373,'Command: gm fly'),(374,'Command: gm ingame'),(375,'Command: gm list'),(376,'Command: gm visible'),(377,'Command: go'),(378,'Command: go creature'),(379,'Command: go graveyard'),(380,'Command: go grid'),(381,'Command: go object'),(382,'Command: go taxinode'),(383,'Command: go ticket'),(384,'Command: go trigger'),(385,'Command: go xyz'),(386,'Command: go zonexy'),(387,'Command: gobject'),(388,'Command: gobject activate'),(389,'Command: gobject add'),(390,'Command: gobject add temp'),(391,'Command: gobject delete'),(392,'Command: gobject info'),(393,'Command: gobject move'),(394,'Command: gobject near'),(395,'Command: gobject set'),(396,'Command: gobject set phase'),(397,'Command: gobject set state'),(398,'Command: gobject target'),(399,'Command: gobject turn'),(400,'debug transport'),(401,'Command: guild'),(402,'Command: guild create'),(403,'Command: guild delete'),(404,'Command: guild invite'),(405,'Command: guild uninvite'),(406,'Command: guild rank'),(407,'Command: guild rename'),(408,'Command: honor'),(409,'Command: honor add'),(410,'Command: honor add kill'),(411,'Command: honor update'),(412,'Command: instance'),(413,'Command: instance listbinds'),(414,'Command: instance unbind'),(415,'Command: instance stats'),(416,'Command: instance savedata'),(417,'Command: learn'),(418,'Command: learn all'),(419,'Command: learn all my'),(420,'Command: learn all my class'),(421,'Command: learn all my pettalents'),(422,'Command: learn all my spells'),(423,'Command: learn all my talents'),(424,'Command: learn all gm'),(425,'Command: learn all crafts'),(426,'Command: learn all default'),(427,'Command: learn all lang'),(428,'Command: learn all recipes'),(429,'Command: unlearn'),(430,'Command: lfg'),(431,'Command: lfg player'),(432,'Command: lfg group'),(433,'Command: lfg queue'),(434,'Command: lfg clean'),(435,'Command: lfg options'),(436,'Command: list'),(437,'Command: list creature'),(438,'Command: list item'),(439,'Command: list object'),(440,'Command: list auras'),(441,'Command: list mail'),(442,'Command: lookup'),(443,'Command: lookup area'),(444,'Command: lookup creature'),(445,'Command: lookup event'),(446,'Command: lookup faction'),(447,'Command: lookup item'),(448,'Command: lookup itemset'),(449,'Command: lookup object'),(450,'Command: lookup quest'),(451,'Command: lookup player'),(452,'Command: lookup player ip'),(453,'Command: lookup player account'),(454,'Command: lookup player email'),(455,'Command: lookup skill'),(456,'Command: lookup spell'),(457,'Command: lookup spell id'),(458,'Command: lookup taxinode'),(459,'Command: lookup tele'),(460,'Command: lookup title'),(461,'Command: lookup map'),(462,'Command: announce'),(463,'Command: channel'),(464,'Command: channel set'),(465,'Command: channel set ownership'),(466,'Command: gmannounce'),(467,'Command: gmnameannounce'),(468,'Command: gmnotify'),(469,'Command: nameannounce'),(470,'Command: notify'),(471,'Command: whispers'),(472,'Command: group'),(473,'Command: group leader'),(474,'Command: group disband'),(475,'Command: group remove'),(476,'Command: group join'),(477,'Command: group list'),(478,'Command: group summon'),(479,'Command: pet'),(480,'Command: pet create'),(481,'Command: pet learn'),(482,'Command: pet unlearn'),(483,'Command: send'),(484,'Command: send items'),(485,'Command: send mail'),(486,'Command: send message'),(487,'Command: send money'),(488,'Command: additem'),(489,'Command: additemset'),(490,'Command: appear'),(491,'Command: aura'),(492,'Command: bank'),(493,'Command: bindsight'),(494,'Command: combatstop'),(495,'Command: cometome'),(496,'Command: commands'),(497,'Command: cooldown'),(498,'Command: damage'),(499,'Command: dev'),(500,'Command: die'),(501,'Command: dismount'),(502,'Command: distance'),(503,'Command: flusharenapoints'),(504,'Command: freeze'),(505,'Command: gps'),(506,'Command: guid'),(507,'Command: help'),(508,'Command: hidearea'),(509,'Command: itemmove'),(510,'Command: kick'),(511,'Command: linkgrave'),(512,'Command: listfreeze'),(513,'Command: maxskill'),(514,'Command: movegens'),(515,'Command: mute'),(516,'Command: neargrave'),(517,'Command: pinfo'),(518,'Command: playall'),(519,'Command: possess'),(520,'Command: recall'),(521,'Command: repairitems'),(522,'Command: respawn'),(523,'Command: revive'),(524,'Command: saveall'),(525,'Command: save'),(526,'Command: setskill'),(527,'Command: showarea'),(528,'Command: summon'),(529,'Command: unaura'),(530,'Command: unbindsight'),(531,'Command: unfreeze'),(532,'Command: unmute'),(533,'Command: unpossess'),(534,'Command: unstuck'),(535,'Command: wchange'),(536,'Command: mmap'),(537,'Command: mmap loadedtiles'),(538,'Command: mmap loc'),(539,'Command: mmap path'),(540,'Command: mmap stats'),(541,'Command: mmap testarea'),(542,'Command: morph'),(543,'Command: demorph'),(544,'Command: modify'),(545,'Command: modify arenapoints'),(546,'Command: modify bit'),(547,'Command: modify drunk'),(548,'Command: modify energy'),(549,'Command: modify faction'),(550,'Command: modify gender'),(551,'Command: modify honor'),(552,'Command: modify hp'),(553,'Command: modify mana'),(554,'Command: modify money'),(555,'Command: modify mount'),(556,'Command: modify phase'),(557,'Command: modify rage'),(558,'Command: modify reputation'),(559,'Command: modify runicpower'),(560,'Command: modify scale'),(561,'Command: modify speed'),(562,'Command: modify speed all'),(563,'Command: modify speed backwalk'),(564,'Command: modify speed fly'),(565,'Command: modify speed walk'),(566,'Command: modify speed swim'),(567,'Command: modify spell'),(568,'Command: modify standstate'),(569,'Command: modify talentpoints'),(570,'Command: npc'),(571,'Command: npc add'),(572,'Command: npc add formation'),(573,'Command: npc add item'),(574,'Command: npc add move'),(575,'Command: npc add temp'),(576,'Command: npc add delete'),(577,'Command: npc add delete item'),(578,'Command: npc add follow'),(579,'Command: npc add follow stop'),(580,'Command: npc set'),(581,'Command: npc set allowmove'),(582,'Command: npc set entry'),(583,'Command: npc set factionid'),(584,'Command: npc set flag'),(585,'Command: npc set level'),(586,'Command: npc set link'),(587,'Command: npc set model'),(588,'Command: npc set movetype'),(589,'Command: npc set phase'),(590,'Command: npc set spawndist'),(591,'Command: npc set spawntime'),(592,'Command: npc set data'),(593,'Command: npc info'),(594,'Command: npc near'),(595,'Command: npc move'),(596,'Command: npc playemote'),(597,'Command: npc say'),(598,'Command: npc textemote'),(599,'Command: npc whisper'),(600,'Command: npc yell'),(601,'Command: npc tame'),(602,'Command: quest'),(603,'Command: quest add'),(604,'Command: quest complete'),(605,'Command: quest remove'),(606,'Command: quest reward'),(607,'Command: reload'),(608,'Command: reload access_requirement'),(609,'Command: reload achievement_criteria_data'),(610,'Command: reload achievement_reward'),(611,'Command: reload all'),(612,'Command: reload all achievement'),(613,'Command: reload all area'),(614,'Command: broadcast_text'),(615,'Command: reload all gossips'),(616,'Command: reload all item'),(617,'Command: reload all locales'),(618,'Command: reload all loot'),(619,'Command: reload all npc'),(620,'Command: reload all quest'),(621,'Command: reload all scripts'),(622,'Command: reload all spell'),(623,'Command: reload areatrigger_involvedrelation'),(624,'Command: reload areatrigger_tavern'),(625,'Command: reload areatrigger_teleport'),(626,'Command: reload auctions'),(627,'Command: reload autobroadcast'),(628,'Command: reload command'),(629,'Command: reload conditions'),(630,'Command: reload config'),(631,'Command: reload battleground_template'),(632, 'Command: .mutehistory'),(633,'Command: reload creature_linked_respawn'),(634,'Command: reload creature_loot_template'),(635,'Command: reload creature_onkill_reputation'),(636,'Command: reload creature_questender'),(637,'Command: reload creature_queststarter'),(638,'Command: reload creature_summon_groups'),(639,'Command: reload creature_template'),(640,'Command: reload creature_text'),(641,'Command: reload disables'),(642,'Command: reload disenchant_loot_template'),(643,'Command: reload event_scripts'),(644,'Command: reload fishing_loot_template'),(645,'Command: reload game_graveyard_zone'),(646,'Command: reload game_tele'),(647,'Command: reload gameobject_questender'),(648,'Command: reload gameobject_loot_template'),(649,'Command: reload gameobject_queststarter'),(650,'Command: reload gm_tickets'),(651,'Command: reload gossip_menu'),(652,'Command: reload gossip_menu_option'),(653,'Command: reload item_enchantment_template'),(654,'Command: reload item_loot_template'),(655,'Command: reload item_set_names'),(656,'Command: reload lfg_dungeon_rewards'),(657,'Command: reload locales_achievement_reward'),(658,'Command: reload locales_creature'),(659,'Command: reload locales_creature_text'),(660,'Command: reload locales_gameobject'),(661,'Command: reload locales_gossip_menu_option'),(662,'Command: reload locales_item'),(663,'Command: reload locales_item_set_name'),(664,'Command: reload locales_npc_text'),(665,'Command: reload locales_page_text'),(666,'Command: reload locales_points_of_interest'),(667,'Command: reload locales_quest'),(668,'Command: reload mail_level_reward'),(669,'Command: reload mail_loot_template'),(670,'Command: reload milling_loot_template'),(671,'Command: reload npc_spellclick_spells'),(672,'Command: reload npc_trainer'),(673,'Command: reload npc_vendor'),(674,'Command: reload page_text'),(675,'Command: reload pickpocketing_loot_template'),(676,'Command: reload points_of_interest'),(677,'Command: reload prospecting_loot_template'),(678,'Command: reload quest_poi'),(679,'Command: reload quest_template'),(680,'Command: reload rbac'),(681,'Command: reload reference_loot_template'),(682,'Command: reload reserved_name'),(683,'Command: reload reputation_reward_rate'),(684,'Command: reload reputation_spillover_template'),(685,'Command: reload skill_discovery_template'),(686,'Command: reload skill_extra_item_template'),(687,'Command: reload skill_fishing_base_level'),(688,'Command: reload skinning_loot_template'),(689,'Command: reload smart_scripts'),(690,'Command: reload spell_required'),(691,'Command: reload spell_area'),(692,'Command: reload spell_bonus_data'),(693,'Command: reload spell_group'),(694,'Command: reload spell_learn_spell'),(695,'Command: reload spell_loot_template'),(696,'Command: reload spell_linked_spell'),(697,'Command: reload spell_pet_auras'),(698,'Command: reload spell_proc_event'),(699,'Command: reload spell_proc'),(700,'Command: reload spell_scripts'),(701,'Command: reload spell_target_position'),(702,'Command: reload spell_threats'),(703,'Command: reload spell_group_stack_rules'),(704,'Command: reload trinity_string'),(705,'Command: reload warden_action'),(706,'Command: reload waypoint_scripts'),(707,'Command: reload waypoint_data'),(708,'Command: reload vehicle_accessory'),(709,'Command: reload vehicle_template_accessory'),(710,'Command: reset'),(711,'Command: reset achievements'),(712,'Command: reset honor'),(713,'Command: reset level'),(714,'Command: reset spells'),(715,'Command: reset stats'),(716,'Command: reset talents'),(717,'Command: reset all'),(718,'Command: server'),(719,'Command: server corpses'),(720,'Command: server exit'),(721,'Command: server idlerestart'),(722,'Command: server idlerestart cancel'),(723,'Command: server idleshutdown'),(724,'Command: server idleshutdown cancel'),(725,'Command: server info'),(726,'Command: server plimit'),(727,'Command: server restart'),(728,'Command: server restart cancel'),(729,'Command: server set'),(730,'Command: server set closed'),(731,'Command: server set difftime'),(732,'Command: server set loglevel'),(733,'Command: server set motd'),(734,'Command: server shutdown'),(735,'Command: server shutdown cancel'),(736,'Command: server motd'),(737,'Command: tele'),(738,'Command: tele add'),(739,'Command: tele del'),(740,'Command: tele name'),(741,'Command: tele group'),(742,'Command: ticket'),(743,'Command: ticket assign'),(744,'Command: ticket close'),(745,'Command: ticket closedlist'),(746,'Command: ticket comment'),(747,'Command: ticket complete'),(748,'Command: ticket delete'),(749,'Command: ticket escalate'),(750,'Command: ticket escalatedlist'),(751,'Command: ticket list'),(752,'Command: ticket onlinelist'),(753,'Command: ticket reset'),(754,'Command: ticket response'),(755,'Command: ticket response append'),(756,'Command: ticket response appendln'),(757,'Command: ticket togglesystem'),(758,'Command: ticket unassign'),(759,'Command: ticket viewid'),(760,'Command: ticket viewname'),(761,'Command: titles'),(762,'Command: titles add'),(763,'Command: titles current'),(764,'Command: titles remove'),(765,'Command: titles set'),(766,'Command: titles set mask'),(767,'Command: wp'),(768,'Command: wp add'),(769,'Command: wp event'),(770,'Command: wp load'),(771,'Command: wp modify'),(772,'Command: wp unload'),(773,'Command: wp reload'),(774,'Command: wp show'),(777,'Command: mailbox'),(778,'Command: ahbot'),(779,'Command: ahbot items'),(780,'Command: ahbot items gray'),(781,'Command: ahbot items white'),(782,'Command: ahbot items green'),(783,'Command: ahbot items blue'),(784,'Command: ahbot items purple'),(785,'Command: ahbot items orange'),(786,'Command: ahbot items yellow'),(787,'Command: ahbot ratio'),(788,'Command: ahbot ratio alliance'),(789,'Command: ahbot ratio horde'),(790,'Command: ahbot ratio neutral'),(791,'Command: ahbot rebuild'),(792,'Command: ahbot reload'),(793,'Command: ahbot status'),(794,'Command: .guild info');
/*!40000 ALTER TABLE `rbac_permissions` ENABLE KEYS */;
UNLOCK TABLES;
@@ -631,4 +657,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2014-08-28 23:00:51
+-- Dump completed on 2014-10-18 23:33:11
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 4f58caf0888..100bd007b35 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -1,8 +1,8 @@
--- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64)
+-- MySQL dump 10.13 Distrib 5.5.40, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: characters_4x
-- ------------------------------------------------------
--- Server version 5.6.9-rc
+-- Server version 5.5.40-0ubuntu0.14.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -2666,6 +2666,34 @@ LOCK TABLES `pvpstats_players` WRITE;
UNLOCK TABLES;
--
+-- Table structure for table `quest_tracker`
+--
+
+DROP TABLE IF EXISTS `quest_tracker`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `quest_tracker` (
+ `id` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `character_guid` int(10) unsigned NOT NULL DEFAULT '0',
+ `quest_accept_time` datetime NOT NULL,
+ `quest_complete_time` datetime DEFAULT NULL,
+ `quest_abandon_time` datetime DEFAULT NULL,
+ `completed_by_gm` tinyint(1) NOT NULL DEFAULT '0',
+ `core_hash` varchar(120) NOT NULL DEFAULT '0',
+ `core_revision` varchar(120) NOT NULL DEFAULT '0'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `quest_tracker`
+--
+
+LOCK TABLES `quest_tracker` WRITE;
+/*!40000 ALTER TABLE `quest_tracker` DISABLE KEYS */;
+/*!40000 ALTER TABLE `quest_tracker` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
-- Table structure for table `reserved_name`
--
@@ -2744,4 +2772,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2014-08-28 15:30:47
+-- Dump completed on 2014-10-18 18:02:06
diff --git a/sql/updates/auth/2014_10_18_00_auth.sql b/sql/updates/auth/2014_10_18_00_auth.sql
new file mode 100644
index 00000000000..fbae94a4195
--- /dev/null
+++ b/sql/updates/auth/2014_10_18_00_auth.sql
@@ -0,0 +1,9 @@
+DELETE FROM `rbac_permissions` WHERE `id` IN (795, 796);
+INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
+(795, 'Command: .instance setbossstate'),
+(796, 'Command: .instance getbossstate');
+
+DELETE FROM `rbac_linked_permissions` WHERE `linkedId` IN (795, 796);
+INSERT INTO `rbac_linked_permissions` (`id`, `linkedId`) VALUES
+(192, 795),
+(192, 796);
diff --git a/sql/updates/auth/2014_10_18_01_auth.sql b/sql/updates/auth/2014_10_18_01_auth.sql
new file mode 100644
index 00000000000..60808b8a9c9
--- /dev/null
+++ b/sql/updates/auth/2014_10_18_01_auth.sql
@@ -0,0 +1,23 @@
+/* drop then create account_muted table */
+DROP TABLE IF EXISTS `account_muted`;
+
+CREATE TABLE `account_muted` (
+ `guid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier',
+ `mutedate` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `mutetime` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `mutedby` VARCHAR(50) NOT NULL,
+ `mutereason` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`guid`, `mutedate`)
+)
+COMMENT='mute List' ENGINE=InnoDB;
+
+/* add rbac permissions to new commands */
+DELETE FROM `rbac_permissions` WHERE `id`=632;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+(632, 'Command: .mutehistory');
+
+/* adds qc to players */
+DELETE FROM `rbac_linked_permissions` WHERE `id`=632;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+/* add mutehistory to gms */
+(194, 632);
diff --git a/sql/updates/characters/2014_10_18_00_characters.sql b/sql/updates/characters/2014_10_18_00_characters.sql
new file mode 100644
index 00000000000..36b2d042374
--- /dev/null
+++ b/sql/updates/characters/2014_10_18_00_characters.sql
@@ -0,0 +1,12 @@
+DROP TABLE IF EXISTS `quest_tracker`;
+CREATE TABLE `quest_tracker` (
+ `id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
+ `character_guid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `quest_accept_time` DATETIME NOT NULL,
+ `quest_complete_time` DATETIME DEFAULT NULL,
+ `quest_abandon_time` DATETIME DEFAULT NULL,
+ `completed_by_gm` BOOL NOT NULL DEFAULT '0',
+ `core_hash` VARCHAR(120) NOT NULL DEFAULT '0',
+ `core_revision` VARCHAR(120) NOT NULL DEFAULT '0'
+)
+ENGINE=InnoDB;
diff --git a/sql/updates/world/2014_10_18_00_world.sql b/sql/updates/world/2014_10_18_00_world.sql
new file mode 100644
index 00000000000..92bd0741dab
--- /dev/null
+++ b/sql/updates/world/2014_10_18_00_world.sql
@@ -0,0 +1,105 @@
+SET @CGUID := 74976;
+SET @OGUID := 7087;
+
+DELETE FROM `creature` WHERE (`guid` BETWEEN @CGUID+0 AND @CGUID+23) OR (`id` IN (34929, 34935)) OR (`map` IN (641, 642));
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+-- Goblin Engineering Crew
+(@CGUID+0, 36162, 642, 3, 1, 0, -22.16258, 11.19428, 35.09622, 3.961897, 7200, 0, 0),
+(@CGUID+1, 36162, 642, 3, 1, 0, -18.38382, -11.11724, 34.91919, 3.089233, 7200, 0, 0),
+
+-- Kor'kron Reaver
+(@CGUID+2, 36164, 642, 3, 1, 0, 28.44413, 18.95949, 35.95979, 2.234021, 7200, 0, 0),
+(@CGUID+3, 36164, 642, 3, 1, 0, 37.40386, -8.937434, 30.1788, 6.265732, 7200, 0, 0),
+(@CGUID+4, 36164, 642, 3, 1, 0, 6.56619, 7.988725, 34.4726, 3.07178, 7200, 0, 0),
+(@CGUID+5, 36164, 642, 3, 1, 0, 37.47043, 8.731059, 30.17881, 6.003932, 7200, 0, 0),
+(@CGUID+6, 36164, 642, 3, 1, 0, 28.40881, -19.30474, 35.98264, 4.153883, 7200, 0, 0),
+(@CGUID+7, 36164, 642, 3, 1, 0, 17.52033, -14.02618, 35.07203, 3.07178, 7200, 0, 0),
+(@CGUID+8, 36164, 642, 3, 1, 0, 6.645779, -8.052721, 34.47524, 3.07178, 7200, 0, 0),
+(@CGUID+9, 36164, 642, 3, 1, 0, 16.94911, 14.93277, 35.08105, 3.071779, 7200, 0, 0),
+(@CGUID+10, 36164, 642, 3, 1, 0, -31.12894, -19.48676, 34.24918, 4.153883, 7200, 0, 0),
+(@CGUID+11, 36164, 642, 3, 1, 0, -30.18002, 17.94827, 34.34239, 2.234021, 7200, 0, 0),
+
+-- 7th Legion Marine
+(@CGUID+12, 36166, 641, 3, 1, 0, -53.55445, 2.977596, 23.44318, 0.3316126, 7200, 0, 0),
+(@CGUID+13, 36166, 641, 3, 1, 0, 17.0807, -7.109451, 20.5052, 3.124139, 7200, 0, 0),
+(@CGUID+14, 36166, 641, 3, 1, 0, 49.93306, -7.458596, 40.16777, 3.979351, 7200, 0, 0),
+(@CGUID+15, 36166, 641, 3, 1, 0, 50.20697, 8.003532, 40.16655, 2.530727, 7200, 0, 0),
+(@CGUID+16, 36166, 641, 3, 1, 0, 39.78789, -38.58735, 25.11459, 3.979351, 7200, 0, 0),
+(@CGUID+17, 36166, 641, 3, 1, 0, -17.57936, 4.24393, 20.84544, 3.12414, 7200, 0, 0),
+(@CGUID+18, 36166, 641, 3, 1, 0, 16.84876, 6.618541, 20.51171, 3.12414, 7200, 0, 0),
+(@CGUID+19, 36166, 641, 3, 1, 0, -61.94096, 0.089971, 23.56898, 3.124139, 7200, 0, 0),
+(@CGUID+20, 36166, 641, 3, 1, 0, -17.59357, -4.383727, 20.84574, 3.12414, 7200, 0, 0),
+(@CGUID+21, 36166, 641, 3, 1, 0, -53.6908, -3.682069, 23.44308, 6.056293, 7200, 0, 0),
+
+-- 7th Legion Deckhand
+(@CGUID+22, 36165, 641, 3, 1, 0, -35.88269, 3.162697, 20.53507, 1.658063, 7200, 0, 0),
+(@CGUID+23, 36165, 641, 3, 1, 0, -36.38501, -7.325379, 20.44885, 1.653776, 7200, 0, 0),
+
+-- Horde Gunship Cannon
+(@CGUID+24, 34935, 642, 3, 1, 0, -21.40090, -31.34303, 34.25633, 4.677482, 7200, 0, 0),
+(@CGUID+25, 34935, 642, 3, 1, 0, -12.10641, -31.96964, 34.46390, 4.625123, 7200, 0, 0),
+(@CGUID+26, 34935, 642, 3, 1, 0, -2.487608, -31.98854, 34.92170, 4.834562, 7200, 0, 0),
+(@CGUID+27, 34935, 642, 3, 1, 0, 19.463670, -30.79399, 36.30841, 4.852015, 7200, 0, 0),
+(@CGUID+28, 34935, 642, 3, 1, 0, 10.266400, -32.07130, 35.81895, 4.852015, 7200, 0, 0),
+
+-- Alliance Gunship Cannon
+(@CGUID+29, 34929, 641, 3, 1, 0, -12.47339, 25.72650, 21.67813, 1.742887, 7200, 0, 0),
+(@CGUID+30, 34929, 641, 3, 1, 0, -41.71228, 22.90814, 22.60103, 1.902409, 7200, 0, 0),
+(@CGUID+31, 34929, 641, 3, 1, 0, -2.811304, 25.78116, 21.69148, 1.658063, 7200, 0, 0),
+(@CGUID+32, 34929, 641, 3, 1, 0, -21.44925, 25.39890, 21.66956, 1.658063, 7200, 0, 0),
+(@CGUID+33, 34929, 641, 3, 1, 0, -31.03540, 24.86197, 21.70274, 1.658063, 7200, 0, 0);
+
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+3;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@OGUID+0, 195705, 641, 3, 1, 16.48109, -0.00539, 20.41618, 3.036838, 0, 0, 0, 1, 7200, 255, 0),
+(@OGUID+1, 195371, 641, 3, 1, 16.47634, 0.018369, 20.41617, 3.036838, 0, 0, 0, 1, 7200, 255, 1),
+(@OGUID+2, 195706, 642, 3, 1, 12.28939, 0.081029, 34.6497, 3.159062, 0, 0, 0, 1, 7200, 255, 0),
+(@OGUID+3, 196413, 642, 3, 1, 12.31993, 0.096332, 34.65082, 3.159062, 0, 0, 0, 1, 7200, 255, 1);
+
+-- Template Updates
+-- Teleporter
+UPDATE `gameobject_template` SET `flags`=48 WHERE `entry` IN (195313, 195314);
+
+-- Horde Gunship Cannon
+UPDATE `creature_template` SET `difficulty_entry_1`=35427 WHERE `entry`=34935;
+UPDATE `creature_template` SET `spell1`=66529, `unit_flags`=33570816 WHERE `entry`=35427;
+
+-- Alliance Gunship Cannon
+UPDATE `creature_template` SET `spell1`=66518, `unit_flags`=33570816 WHERE `entry`=35410;
+
+-- Goblin Engineering Crew
+UPDATE `creature_template` SET `minlevel`=80, `maxlevel`=80, `faction`=1978 WHERE `entry`=36162;
+
+-- 7th Legion Deckhand
+UPDATE `creature_template` SET `minlevel`=80, `maxlevel`=80, `faction`=1973 WHERE `entry`=36165;
+
+-- Template Addon
+DELETE FROM `creature_template_addon` WHERE `entry` IN (36162, 36165);
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(36162, 0, 0, 0x0, 0x101, 0, ''),
+(36165, 0, 0, 0x0, 0x101, 0, '');
+
+-- Spell Target Positions
+DELETE FROM `spell_target_position` WHERE `id`=66899;
+INSERT INTO `spell_target_position` VALUES
+(66899,0, 628, 747, -1075, 135, 0, 18414);
+
+-- Spell linked spell
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=66899;
+INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
+(66899, -66656, 0, 'On cast 66899 (Gunship Portal Click (to Hangar)) - Remove 66656 (Parachute)');
+
+-- conditions
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND (`SourceEntry`=66637 OR `SourceEntry`=66630) AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=31 AND `ConditionTarget`=0 AND `ConditionValue1`=3 AND `ConditionValue2`=34984 AND `ConditionValue3`=0;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`) VALUES
+(13, 1, 66630, 31, 3, 34984),
+(13, 1, 66637, 31, 3, 34984);
+
+-- Texts
+DELETE FROM `creature_text` WHERE `entry` IN (35003, 34960);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(35003, 0, 0, 'All aboard the gunship! Man the guns!', 14, 0, 100, 0, 0, 0, 35241, 'Horde Gunship Captain'),
+(34960, 0, 0, 'All aboard the gunship! Man the guns!', 14, 0, 100, 0, 0, 0, 35228, 'Alliance Gunship Captain');
+
+-- Scripts
+UPDATE `creature_template` SET `ScriptName`='npc_ioc_gunship_captain' WHERE `entry` IN (35003, 34960);
diff --git a/sql/updates/world/2014_10_18_00_world_434.sql b/sql/updates/world/2014_10_18_00_world_434.sql
new file mode 100644
index 00000000000..c59dddf2aa7
--- /dev/null
+++ b/sql/updates/world/2014_10_18_00_world_434.sql
@@ -0,0 +1,23 @@
+-- Fear No Evil quest updates
+-- Set Health Random spell script
+DELETE FROM `spell_script_names` WHERE `spell_id` = 53034;
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(53034, 'spell_q28813_set_health_random');
+
+-- More accurate times, added random emote script, corrected target_type field to face player.
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 5004700 AND `source_type` = 9;
+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
+(5004700, 9, 0, 0, 0, 0, 100, 1, 1000, 1000, 0, 0, 91, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Injured Stormwind Infantry - Actionlist - Stand up'),
+(5004700, 9, 1, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 66, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 'Injured Stormwind Infantry - Actionlist - Face Player'),
+(5004700, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 10, 4, 5, 22, 25, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Injured Stormwind Infantry - Actionlist - Random Emote'),
+(5004700, 9, 3, 0, 0, 0, 100, 1, 200, 200, 0, 0, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 'Injured Stormwind Infantry - Actionlist - Say line 0 (random)'),
+(5004700, 9, 4, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 59, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Injured Stormwind Infantry - Actionlist - Set Run'),
+(5004700, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 53, 1, 50047, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Injured Stormwind Infantry - Actionlist - Start WP movement');
+
+-- BroadcastTextIds
+UPDATE `creature_text` SET `BroadcastTextId`=49916 WHERE `entry`=50047 AND `groupid`=0 AND `id`=0;
+UPDATE `creature_text` SET `BroadcastTextId`=49918 WHERE `entry`=50047 AND `groupid`=0 AND `id`=1;
+UPDATE `creature_text` SET `BroadcastTextId`=49919 WHERE `entry`=50047 AND `groupid`=0 AND `id`=2;
+UPDATE `creature_text` SET `BroadcastTextId`=49917 WHERE `entry`=50047 AND `groupid`=0 AND `id`=3;
+UPDATE `creature_text` SET `BroadcastTextId`=49922 WHERE `entry`=50047 AND `groupid`=0 AND `id`=4;
+UPDATE `creature_text` SET `BroadcastTextId`=49915 WHERE `entry`=50047 AND `groupid`=0 AND `id`=5;
diff --git a/sql/updates/world/2014_10_18_01_world.sql b/sql/updates/world/2014_10_18_01_world.sql
new file mode 100644
index 00000000000..779e59446b4
--- /dev/null
+++ b/sql/updates/world/2014_10_18_01_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=23138;
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(23138, 'spell_shazzrah_gate_dummy');
diff --git a/sql/updates/world/2014_10_18_02_world.sql b/sql/updates/world/2014_10_18_02_world.sql
new file mode 100644
index 00000000000..564e3dc125b
--- /dev/null
+++ b/sql/updates/world/2014_10_18_02_world.sql
@@ -0,0 +1,9 @@
+DELETE FROM `trinity_string` WHERE `entry` IN (5057, 5058);
+INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES
+(5057, 'Boss id %i state is now set to %i.'),
+(5058, 'Boss id %i state is %i.');
+
+DELETE FROM `command` WHERE `permission` IN (795, 796);
+INSERT INTO `command` (`name`, `permission`, `help`) VALUES
+('instance setbossstate', '795', 'Syntax: .instance setbossstate $bossId $encounterState [$Name]\r\nSets the EncounterState for the given boss id to a new value. EncounterStates range from 0 to 5.\r\nIf no character name is provided, the current map will be used as target.'),
+('instance getbossstate', '796', 'Syntax: .instance getbossstate $bossId [$Name]\r\nGets the current EncounterState for the provided boss id.\r\nIf no character name is provided, the current map will be used as target.');
diff --git a/sql/updates/world/2014_10_18_03_world.sql b/sql/updates/world/2014_10_18_03_world.sql
new file mode 100644
index 00000000000..708dd3295c9
--- /dev/null
+++ b/sql/updates/world/2014_10_18_03_world.sql
@@ -0,0 +1,83 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_gen_mixology_bonus';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(53755,'spell_gen_mixology_bonus'),
+(53758,'spell_gen_mixology_bonus'),
+(53760,'spell_gen_mixology_bonus'),
+(54212,'spell_gen_mixology_bonus'),
+(62380,'spell_gen_mixology_bonus'),
+(53752,'spell_gen_mixology_bonus'),
+(28521,'spell_gen_mixology_bonus'),
+(42735,'spell_gen_mixology_bonus'),
+(28518,'spell_gen_mixology_bonus'),
+(28519,'spell_gen_mixology_bonus'),
+(28540,'spell_gen_mixology_bonus'),
+(28520,'spell_gen_mixology_bonus'),
+(17629,'spell_gen_mixology_bonus'),
+(17627,'spell_gen_mixology_bonus'),
+(17628,'spell_gen_mixology_bonus'),
+(17626,'spell_gen_mixology_bonus'),
+(28497,'spell_gen_mixology_bonus'),
+(60340,'spell_gen_mixology_bonus'),
+(60341,'spell_gen_mixology_bonus'),
+(60343,'spell_gen_mixology_bonus'),
+(60344,'spell_gen_mixology_bonus'),
+(60345,'spell_gen_mixology_bonus'),
+(60346,'spell_gen_mixology_bonus'),
+(53751,'spell_gen_mixology_bonus'),
+(53764,'spell_gen_mixology_bonus'),
+(53748,'spell_gen_mixology_bonus'),
+(60347,'spell_gen_mixology_bonus'),
+(53763,'spell_gen_mixology_bonus'),
+(53747,'spell_gen_mixology_bonus'),
+(53749,'spell_gen_mixology_bonus'),
+(33721,'spell_gen_mixology_bonus'),
+(53746,'spell_gen_mixology_bonus'),
+(28514,'spell_gen_mixology_bonus'),
+(28509,'spell_gen_mixology_bonus'),
+(28503,'spell_gen_mixology_bonus'),
+(28502,'spell_gen_mixology_bonus'),
+(38954,'spell_gen_mixology_bonus'),
+(39628,'spell_gen_mixology_bonus'),
+(54494,'spell_gen_mixology_bonus'),
+(39627,'spell_gen_mixology_bonus'),
+(28501,'spell_gen_mixology_bonus'),
+(28493,'spell_gen_mixology_bonus'),
+(39626,'spell_gen_mixology_bonus'),
+(33726,'spell_gen_mixology_bonus'),
+(28491,'spell_gen_mixology_bonus'),
+(39625,'spell_gen_mixology_bonus'),
+(28490,'spell_gen_mixology_bonus'),
+(54452,'spell_gen_mixology_bonus'),
+(33720,'spell_gen_mixology_bonus'),
+(24361,'spell_gen_mixology_bonus'),
+(17539,'spell_gen_mixology_bonus'),
+(17538,'spell_gen_mixology_bonus'),
+(17537,'spell_gen_mixology_bonus'),
+(17535,'spell_gen_mixology_bonus'),
+(11348,'spell_gen_mixology_bonus'),
+(11406,'spell_gen_mixology_bonus'),
+(26276,'spell_gen_mixology_bonus'),
+(11474,'spell_gen_mixology_bonus'),
+(24363,'spell_gen_mixology_bonus'),
+(11405,'spell_gen_mixology_bonus'),
+(11334,'spell_gen_mixology_bonus'),
+(11390,'spell_gen_mixology_bonus'),
+(11396,'spell_gen_mixology_bonus'),
+(11349,'spell_gen_mixology_bonus'),
+(21920,'spell_gen_mixology_bonus'),
+(11328,'spell_gen_mixology_bonus'),
+(3223,'spell_gen_mixology_bonus'),
+(3593,'spell_gen_mixology_bonus'),
+(3164,'spell_gen_mixology_bonus'),
+(7844,'spell_gen_mixology_bonus'),
+(3160,'spell_gen_mixology_bonus'),
+(3220,'spell_gen_mixology_bonus'),
+(3222,'spell_gen_mixology_bonus'),
+(63729,'spell_gen_mixology_bonus'),
+(3166,'spell_gen_mixology_bonus'),
+(8212,'spell_gen_mixology_bonus'),
+(2374,'spell_gen_mixology_bonus'),
+(2378,'spell_gen_mixology_bonus'),
+(3219,'spell_gen_mixology_bonus'),
+(2367,'spell_gen_mixology_bonus'),
+(673,'spell_gen_mixology_bonus');
diff --git a/sql/updates/world/2014_10_18_04_world.sql b/sql/updates/world/2014_10_18_04_world.sql
new file mode 100644
index 00000000000..c4d1fe9f039
--- /dev/null
+++ b/sql/updates/world/2014_10_18_04_world.sql
@@ -0,0 +1,6 @@
+/* new trinity_strings */
+DELETE FROM `trinity_string` WHERE `entry` IN (5059,5060,5061);
+INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES
+(5059, 'Mutes for account: %s'),
+(5060, 'No mutes for account: %s'),
+(5061, 'Mute Date: %20s Mutetime: %10u mins. Reason: %s Set by: %s');
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index fc22f76e949..ded2a58d7f1 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -535,7 +535,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_RELOAD_CONDITIONS = 629,
RBAC_PERM_COMMAND_RELOAD_CONFIG = 630,
RBAC_PERM_COMMAND_RELOAD_BATTLEGROUND_TEMPLATE = 631,
- RBAC_PERM_UNUSED_632 = 632, // unused
+ RBAC_PERM_COMMAND_MUTEHISTORY = 632,
RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN = 633,
RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE = 634,
RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION = 635,
@@ -698,6 +698,8 @@ enum RBACPermissions
RBAC_PERM_COMMAND_AHBOT_RELOAD = 792,
RBAC_PERM_COMMAND_AHBOT_STATUS = 793,
RBAC_PERM_COMMAND_GUILD_INFO = 794,
+ RBAC_PERM_COMMAND_INSTANCE_SET_BOSS_STATE = 795,
+ RBAC_PERM_COMMAND_INSTANCE_GET_BOSS_STATE = 796,
// custom permissions 1000+
RBAC_PERM_MAX
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 52843b97a51..73951a5b35e 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -37,6 +37,7 @@
#include "SpellAuras.h"
#include "Util.h"
#include "WorldPacket.h"
+#include "Transport.h"
namespace Trinity
{
@@ -1407,7 +1408,7 @@ void Battleground::RelocateDeadPlayers(ObjectGuid guideGuid)
}
}
-bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 /*respawnTime*/)
+bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 /*respawnTime*/, GOState goState)
{
// If the assert is called, means that BgObjects must be resized!
ASSERT(type < BgObjects.size());
@@ -1420,7 +1421,7 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float
// So we must create it specific for this instance
GameObject* go = new GameObject;
if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, GetBgMap(),
- PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY))
+ PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, goState))
{
TC_LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!",
entry, m_MapId, m_InstanceID);
@@ -1460,9 +1461,9 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float
return true;
}
-bool Battleground::AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime /*= 0*/)
+bool Battleground::AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime /*= 0*/, GOState goState /*= GO_STATE_READY*/)
{
- return AddObject(type, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), rotation0, rotation1, rotation2, rotation3, respawnTime);
+ return AddObject(type, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), rotation0, rotation1, rotation2, rotation3, respawnTime, goState);
}
// Some doors aren't despawned so we cannot handle their closing in gameobject::update()
@@ -1541,7 +1542,7 @@ void Battleground::SpawnBGObject(uint32 type, uint32 respawntime)
}
}
-Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/)
+Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/, Transport* transport)
{
// If the assert is called, means that BgCreatures must be resized!
ASSERT(type < BgCreatures.size());
@@ -1550,7 +1551,19 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y,
if (!map)
return NULL;
+ if (transport)
+ {
+ if (Creature* creature = transport->SummonPassenger(entry, { x, y, z, o }, TEMPSUMMON_MANUAL_DESPAWN))
+ {
+ BgCreatures[type] = creature->GetGUID();
+ return creature;
+ }
+
+ return NULL;
+ }
+
Creature* creature = new Creature();
+
if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o))
{
TC_LOG_ERROR("bg.battleground", "Battleground::AddCreature: cannot create creature (entry: %u) for BG (map: %u, instance id: %u)!",
@@ -1584,9 +1597,9 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y,
return creature;
}
-Creature* Battleground::AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId /*= TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/)
+Creature* Battleground::AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId /*= TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/, Transport* transport)
{
- return AddCreature(entry, type, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId, respawntime);
+ return AddCreature(entry, type, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId, respawntime, transport);
}
bool Battleground::DelCreature(uint32 type)
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index 1c4b3de4f76..851a191927c 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -25,6 +25,7 @@
#include "DBCEnums.h"
#include "WorldPacket.h"
#include "Object.h"
+#include "GameObject.h"
class Creature;
class GameObject;
@@ -435,10 +436,10 @@ class Battleground
GuidVector BgObjects;
GuidVector BgCreatures;
void SpawnBGObject(uint32 type, uint32 respawntime);
- virtual bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0);
- bool AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0);
- virtual Creature* AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0);
- Creature* AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0);
+ virtual bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0, GOState goState = GO_STATE_READY);
+ bool AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0, GOState goState = GO_STATE_READY);
+ virtual Creature* AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0, Transport* transport = NULL);
+ Creature* AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0, Transport* transport = NULL);
bool DelCreature(uint32 type);
bool DelObject(uint32 type);
virtual bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
index 4e0bdd17162..bd3ef91daac 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -26,11 +26,12 @@
#include "Vehicle.h"
#include "Transport.h"
#include "WorldSession.h"
+#include "ScriptedCreature.h"
BattlegroundIC::BattlegroundIC()
{
- BgObjects.resize(MAX_NORMAL_GAMEOBJECTS_SPAWNS + MAX_AIRSHIPS_SPAWNS + MAX_HANGAR_TELEPORTERS_SPAWNS + MAX_FORTRESS_TELEPORTERS_SPAWNS);
- BgCreatures.resize(MAX_NORMAL_NPCS_SPAWNS + MAX_WORKSHOP_SPAWNS + MAX_DOCKS_SPAWNS + MAX_SPIRIT_GUIDES_SPAWNS);
+ BgObjects.resize(MAX_NORMAL_GAMEOBJECTS_SPAWNS + MAX_AIRSHIPS_SPAWNS + MAX_HANGAR_TELEPORTERS_SPAWNS + MAX_FORTRESS_TELEPORTERS_SPAWNS + MAX_HANGAR_TELEPORTER_EFFECTS_SPAWNS + MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS);
+ BgCreatures.resize(MAX_NORMAL_NPCS_SPAWNS + MAX_WORKSHOP_SPAWNS + MAX_DOCKS_SPAWNS + MAX_SPIRIT_GUIDES_SPAWNS + MAX_HANGAR_NPCS_SPAWNS);
StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_BG_IC_START_TWO_MINUTES;
StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_BG_IC_START_ONE_MINUTE;
@@ -68,38 +69,8 @@ void BattlegroundIC::HandlePlayerResurrect(Player* player)
player->CastSpell(player, SPELL_OIL_REFINERY, true);
}
-void BattlegroundIC::DoAction(uint32 action, ObjectGuid var)
-{
- if (action != ACTION_TELEPORT_PLAYER_TO_TRANSPORT)
- return;
-
- if (!gunshipAlliance || !gunshipHorde)
- return;
-
- Player* player = ObjectAccessor::FindPlayer(var);
- if (!player)
- return;
-
- (player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->AddPassenger(player);
-
- player->m_movementInfo.transport.pos.m_positionX = TransportMovementInfo.GetPositionX();
- player->m_movementInfo.transport.pos.m_positionY = TransportMovementInfo.GetPositionY();
- player->m_movementInfo.transport.pos.m_positionZ = TransportMovementInfo.GetPositionZ();
-
- if (player->TeleportTo(GetMapId(), TeleportToTransportPosition.GetPositionX(),
- TeleportToTransportPosition.GetPositionY(),
- TeleportToTransportPosition.GetPositionZ(),
- TeleportToTransportPosition.GetOrientation(),
- TELE_TO_NOT_LEAVE_TRANSPORT))
- {
- player->CastSpell(player, SPELL_PARACHUTE, true); // this must be changed, there is a trigger in each transport that casts the spell.
- player->CastSpell(player, SPELL_SLOW_FALL, true);
- }
-}
-
void BattlegroundIC::PostUpdateImpl(uint32 diff)
{
-
if (GetStatus() != STATUS_IN_PROGRESS)
return;
@@ -109,9 +80,17 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
{
GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01)->RemoveFromWorld();
GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01)->RemoveFromWorld();
-
- GetBGObject(BG_IC_GO_ALLIANCE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); // Alliance door
- GetBGObject(BG_IC_GO_HORDE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); // Horde door
+ GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR02)->RemoveFromWorld();
+ GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR02)->RemoveFromWorld();
+ GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR03)->RemoveFromWorld();
+ GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03)->RemoveFromWorld();
+
+ GetBGObject(BG_IC_GO_ALLIANCE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
+ GetBGObject(BG_IC_GO_HORDE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
+ GetBGObject(BG_IC_GO_ALLIANCE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
+ GetBGObject(BG_IC_GO_HORDE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
+ GetBGObject(BG_IC_GO_ALLIANCE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
+ GetBGObject(BG_IC_GO_HORDE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
doorsClosed = true;
} else closeFortressDoorsTimer -= diff;
@@ -240,11 +219,6 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
void BattlegroundIC::StartingEventCloseDoors()
{
- // Show Full Gate Displays
- GetBGObject(BG_IC_GO_ALLIANCE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
- GetBGObject(BG_IC_GO_ALLIANCE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
- GetBGObject(BG_IC_GO_HORDE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
- GetBGObject(BG_IC_GO_HORDE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
}
void BattlegroundIC::StartingEventOpenDoors()
@@ -252,6 +226,10 @@ void BattlegroundIC::StartingEventOpenDoors()
//after 20 seconds they should be despawned
DoorOpen(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01);
DoorOpen(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01);
+ DoorOpen(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR02);
+ DoorOpen(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR02);
+ DoorOpen(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR03);
+ DoorOpen(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03);
DoorOpen(BG_IC_GO_DOODAD_HU_PORTCULLIS01_1);
DoorOpen(BG_IC_GO_DOODAD_HU_PORTCULLIS01_2);
@@ -259,15 +237,10 @@ void BattlegroundIC::StartingEventOpenDoors()
DoorOpen(BG_IC_GO_DOODAD_VR_PORTCULLIS01_2);
for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTERS_SPAWNS; ++i)
- {
- if (!AddObject(BG_IC_Teleporters[i].type, BG_IC_Teleporters[i].entry,
- BG_IC_Teleporters[i].x, BG_IC_Teleporters[i].y,
- BG_IC_Teleporters[i].z, BG_IC_Teleporters[i].o,
- 0, 0, 0, 0, RESPAWN_ONE_DAY))
- {
- TC_LOG_ERROR("bg.battleground", "Isle of Conquest | Starting Event Open Doors: There was an error spawning gameobject %u", BG_IC_Teleporters[i].entry);
- }
- }
+ GetBGObject(BG_IC_Teleporters[i].type)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+
+ for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS; ++i)
+ GetBGObject(BG_IC_TeleporterEffects[i].type)->SetGoState(GO_STATE_ACTIVE);
}
void BattlegroundIC::AddPlayer(Player* player)
@@ -335,32 +308,44 @@ bool BattlegroundIC::SetupBattleground()
{
for (uint8 i = 0; i < MAX_NORMAL_GAMEOBJECTS_SPAWNS; ++i)
{
- if (!AddObject(BG_IC_ObjSpawnlocs[i].type, BG_IC_ObjSpawnlocs[i].entry,
- BG_IC_ObjSpawnlocs[i].x, BG_IC_ObjSpawnlocs[i].y,
- BG_IC_ObjSpawnlocs[i].z, BG_IC_ObjSpawnlocs[i].o,
- 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ if (!AddObject(BG_IC_ObjSpawnlocs[i].type, BG_IC_ObjSpawnlocs[i].entry, BG_IC_ObjSpawnlocs[i].x, BG_IC_ObjSpawnlocs[i].y, BG_IC_ObjSpawnlocs[i].z, BG_IC_ObjSpawnlocs[i].o, 0, 0, 0, 0, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning gameobject %u", BG_IC_ObjSpawnlocs[i].entry);
return false;
}
}
+ for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTERS_SPAWNS; ++i)
+ {
+ if (!AddObject(BG_IC_Teleporters[i].type, BG_IC_Teleporters[i].entry, BG_IC_Teleporters[i].x, BG_IC_Teleporters[i].y, BG_IC_Teleporters[i].z, BG_IC_Teleporters[i].o, 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ {
+ TC_LOG_ERROR("bg.battleground", "Isle of Conquest | Starting Event Open Doors: There was an error spawning gameobject %u", BG_IC_Teleporters[i].entry);
+ return false;
+ }
+ }
+
+ for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS; ++i)
+ {
+ if (!AddObject(BG_IC_TeleporterEffects[i].type, BG_IC_TeleporterEffects[i].entry, BG_IC_TeleporterEffects[i].x, BG_IC_TeleporterEffects[i].y, BG_IC_TeleporterEffects[i].z, BG_IC_TeleporterEffects[i].o, 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ {
+ TC_LOG_ERROR("bg.battleground", "Isle of Conquest | Starting Event Open Doors: There was an error spawning gameobject %u", BG_IC_Teleporters[i].entry);
+ return false;
+ }
+ }
+
for (uint8 i = 2; i < MAX_NORMAL_NPCS_SPAWNS; ++i)
{
- if (!AddCreature(BG_IC_NpcSpawnlocs[i].entry, BG_IC_NpcSpawnlocs[i].type,
- BG_IC_NpcSpawnlocs[i].x, BG_IC_NpcSpawnlocs[i].y,
- BG_IC_NpcSpawnlocs[i].z, BG_IC_NpcSpawnlocs[i].o,
- BG_IC_NpcSpawnlocs[i].team, RESPAWN_ONE_DAY))
+ if (!AddCreature(BG_IC_NpcSpawnlocs[i].entry, BG_IC_NpcSpawnlocs[i].type, BG_IC_NpcSpawnlocs[i].x, BG_IC_NpcSpawnlocs[i].y, BG_IC_NpcSpawnlocs[i].z, BG_IC_NpcSpawnlocs[i].o, BG_IC_NpcSpawnlocs[i].team, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning creature %u", BG_IC_NpcSpawnlocs[i].entry);
return false;
}
}
- if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+5, BG_IC_SpiritGuidePos[5], TEAM_ALLIANCE)
- || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+6, BG_IC_SpiritGuidePos[6], TEAM_HORDE)
- || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+3, BG_IC_SpiritGuidePos[7], TEAM_ALLIANCE)
- || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+4, BG_IC_SpiritGuidePos[8], TEAM_HORDE))
+ if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+3, BG_IC_SpiritGuidePos[5], TEAM_ALLIANCE)
+ || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+4, BG_IC_SpiritGuidePos[6], TEAM_HORDE)
+ || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+5, BG_IC_SpiritGuidePos[7], TEAM_ALLIANCE)
+ || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+6, BG_IC_SpiritGuidePos[8], TEAM_HORDE))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: Failed to spawn initial spirit guide!");
return false;
@@ -379,9 +364,9 @@ bool BattlegroundIC::SetupBattleground()
gunshipAlliance->EnableMovement(false);
// setting correct factions for Keep Cannons
- for (uint8 i = BG_IC_NPC_KEEP_CANNON_1; i < BG_IC_NPC_KEEP_CANNON_12; ++i)
+ for (uint8 i = BG_IC_NPC_KEEP_CANNON_1; i <= BG_IC_NPC_KEEP_CANNON_12; ++i)
GetBGCreature(i)->setFaction(BG_IC_Factions[0]);
- for (uint8 i = BG_IC_NPC_KEEP_CANNON_13; i < BG_IC_NPC_KEEP_CANNON_25; ++i)
+ for (uint8 i = BG_IC_NPC_KEEP_CANNON_13; i <= BG_IC_NPC_KEEP_CANNON_25; ++i)
GetBGCreature(i)->setFaction(BG_IC_Factions[1]);
// correcting spawn time for keeps bombs
@@ -459,8 +444,7 @@ void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target
nodePoint[i].gameobject_entry = nextBanner;
// this is just needed if the next banner is grey
- if (nodePoint[i].banners[BANNER_A_CONTESTED] == nextBanner ||
- nodePoint[i].banners[BANNER_H_CONTESTED] == nextBanner)
+ if (nodePoint[i].banners[BANNER_A_CONTESTED] == nextBanner || nodePoint[i].banners[BANNER_H_CONTESTED] == nextBanner)
{
nodePoint[i].timer = BANNER_STATE_CHANGE_TIME; // 1 minute for last change (real faction banner)
nodePoint[i].needChange = true;
@@ -478,9 +462,8 @@ void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target
SendMessage2ToAll(LANG_BG_IC_TEAM_ASSAULTED_NODE_1, CHAT_MSG_BG_SYSTEM_NEUTRAL, player, nodePoint[i].string);
SendMessage2ToAll(LANG_BG_IC_TEAM_ASSAULTED_NODE_2, CHAT_MSG_BG_SYSTEM_NEUTRAL, player, nodePoint[i].string, (player->GetTeamId() == TEAM_ALLIANCE ? LANG_BG_IC_ALLIANCE : LANG_BG_IC_HORDE));
HandleContestedNodes(&nodePoint[i]);
- } else if (nextBanner == nodePoint[i].banners[BANNER_A_CONTROLLED] ||
- nextBanner == nodePoint[i].banners[BANNER_H_CONTROLLED])
- // if we are going to spawn the definitve faction banner, we dont need the timer anymore
+ }
+ else if (nextBanner == nodePoint[i].banners[BANNER_A_CONTROLLED] || nextBanner == nodePoint[i].banners[BANNER_H_CONTROLLED]) // if we are going to spawn the definitve faction banner, we dont need the timer anymore
{
nodePoint[i].timer = BANNER_STATE_CHANGE_TIME;
nodePoint[i].needChange = false;
@@ -505,12 +488,6 @@ void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target
GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]);
- if (nodePoint[i].nodeType == NODE_TYPE_WORKSHOP)
- {
- DelObject(BG_IC_GO_SEAFORIUM_BOMBS_1);
- DelObject(BG_IC_GO_SEAFORIUM_BOMBS_2);
- }
-
UpdateNodeWorldState(&nodePoint[i]);
// we dont need iterating if we are here
// If the needChange bool was set true, we will handle the rest in the Update Map function.
@@ -573,11 +550,39 @@ void BattlegroundIC::HandleContestedNodes(ICNodePoint* nodePoint)
{
if (nodePoint->nodeType == NODE_TYPE_HANGAR)
{
- if (gunshipAlliance && gunshipHorde)
- (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->EnableMovement(false);
+ if (gunshipAlliance && gunshipHorde)
+ (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->EnableMovement(false);
+
+ for (uint8 u = BG_IC_GO_HANGAR_TELEPORTER_1; u <= BG_IC_GO_HANGAR_TELEPORTER_3; ++u)
+ DelObject(u);
- for (uint8 u = BG_IC_GO_HANGAR_TELEPORTER_1; u < BG_IC_GO_HANGAR_TELEPORTER_3; ++u)
+ for (uint8 u = BG_IC_GO_HANGAR_TELEPORTER_EFFECT_1; u <= BG_IC_GO_HANGAR_TELEPORTER_EFFECT_3; ++u)
DelObject(u);
+
+ DelCreature(BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING);
+
+ for (uint8 u = 0; u < MAX_CAPTAIN_SPAWNS_PER_FACTION; ++u)
+ {
+ uint8 type = BG_IC_NPC_GUNSHIP_CAPTAIN_1 + u;
+ DelCreature(type);
+ }
+
+ std::list<Creature*> cannons;
+ if (nodePoint->faction == TEAM_HORDE)
+ gunshipAlliance->GetCreatureListWithEntryInGrid(cannons, NPC_ALLIANCE_GUNSHIP_CANNON, 150.0f);
+ else
+ gunshipHorde->GetCreatureListWithEntryInGrid(cannons, NPC_HORDE_GUNSHIP_CANNON, 150.0f);
+
+ for (Creature* cannon : cannons)
+ {
+ cannon->GetVehicleKit()->RemoveAllPassengers();
+ cannon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ }
+ }
+ else if (nodePoint->nodeType == NODE_TYPE_WORKSHOP)
+ {
+ DelObject(BG_IC_GO_SEAFORIUM_BOMBS_1);
+ DelObject(BG_IC_GO_SEAFORIUM_BOMBS_2);
}
}
@@ -592,26 +597,55 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
switch (nodePoint->gameobject_type)
{
case BG_IC_GO_HANGAR_BANNER:
- // all the players on the stopped transport should be teleported out
- if (!gunshipAlliance || !gunshipHorde)
- break;
-
- for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; ++u)
{
- uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1+u;
- if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL),
- BG_IC_HangarTeleporters[u], 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ if (!gunshipAlliance || !gunshipHorde)
+ break;
+
+ std::list<Creature*> cannons;
+ if (nodePoint->faction == TEAM_ALLIANCE)
+ gunshipAlliance->GetCreatureListWithEntryInGrid(cannons, NPC_ALLIANCE_GUNSHIP_CANNON, 150.0f);
+ else
+ gunshipHorde->GetCreatureListWithEntryInGrid(cannons, NPC_HORDE_GUNSHIP_CANNON, 150.0f);
+
+ for (Creature* cannon : cannons)
+ cannon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+
+ for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; ++u)
{
- TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1+u);
+ uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1 + u;
+ if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL), BG_IC_HangarTeleporters[u], 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1 + u);
+ }
+
+ for (uint8 u = 0; u < MAX_HANGAR_TELEPORTER_EFFECTS_SPAWNS; ++u)
+ {
+ uint8 type = BG_IC_GO_HANGAR_TELEPORTER_EFFECT_1 + u;
+ if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL_EFFECTS : GO_HORDE_GUNSHIP_PORTAL_EFFECTS), BG_IC_HangarTeleporterEffects[u], 0, 0, 0, 0, RESPAWN_ONE_DAY, GO_STATE_ACTIVE))
+ TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal effects. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1 + u);
}
- }
- //TC_LOG_ERROR("bg.battleground", "BG_IC_GO_HANGAR_BANNER CAPTURED Faction: %u", nodePoint->faction);
+ for (uint8 u = 0; u < MAX_TRIGGER_SPAWNS_PER_FACTION; ++u)
+ {
+ if (!AddCreature(NPC_WORLD_TRIGGER_NOT_FLOATING, BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING, BG_IC_HangarTrigger[nodePoint->faction], nodePoint->faction, RESPAWN_ONE_DAY, nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde))
+ TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a world trigger. Type: %u", BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING);
+ }
- (nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->EnableMovement(true);
- (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->EnableMovement(false);
- // we should spawn teleporters
- break;
+ for (uint8 u = 0; u < MAX_CAPTAIN_SPAWNS_PER_FACTION; ++u)
+ {
+ uint8 type = BG_IC_NPC_GUNSHIP_CAPTAIN_1 + u;
+
+ if (type == BG_IC_NPC_GUNSHIP_CAPTAIN_1)
+ if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_ALLIANCE_GUNSHIP_CAPTAIN : NPC_HORDE_GUNSHIP_CAPTAIN, type, BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 2 : 0], nodePoint->faction, RESPAWN_ONE_DAY))
+ GetBGCreature(BG_IC_NPC_GUNSHIP_CAPTAIN_1)->GetAI()->DoAction(ACTION_GUNSHIP_READY);
+
+ if (type == BG_IC_NPC_GUNSHIP_CAPTAIN_2)
+ if (!AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_ALLIANCE_GUNSHIP_CAPTAIN : NPC_HORDE_GUNSHIP_CAPTAIN, type, BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 3 : 1], nodePoint->faction, RESPAWN_ONE_DAY, nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde))
+ TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a world trigger. Type: %u", BG_IC_NPC_GUNSHIP_CAPTAIN_2);
+ }
+
+ (nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->EnableMovement(true);
+ break;
+ }
case BG_IC_GO_QUARRY_BANNER:
RemoveAuraOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE));
CastSpellOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE));
@@ -621,7 +655,6 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
CastSpellOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE));
break;
case BG_IC_GO_DOCKS_BANNER:
-
if (recapture)
break;
@@ -661,8 +694,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive())
continue;
- if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type,
- BG_IC_DocksVehiclesGlaives[i], nodePoint->faction, RESPAWN_ONE_DAY))
+ if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, BG_IC_DocksVehiclesGlaives[i], nodePoint->faction, RESPAWN_ONE_DAY))
GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
}
@@ -767,7 +799,16 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go)
UpdateWorldState(uws_close, 0);
UpdateWorldState(uws_open, 1);
}
- DoorOpen((player->GetTeamId() == TEAM_ALLIANCE ? BG_IC_GO_HORDE_KEEP_PORTCULLIS : BG_IC_GO_DOODAD_PORTCULLISACTIVE02));
+ if (player->GetTeamId() == TEAM_ALLIANCE)
+ {
+ DoorOpen(BG_IC_GO_HORDE_KEEP_PORTCULLIS);
+ GetBGObject(BG_IC_GO_HORDE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
+ else
+ {
+ DoorOpen(BG_IC_GO_DOODAD_PORTCULLISACTIVE02);
+ GetBGObject(BG_IC_GO_ALLIANCE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
uint32 lang_entry = 0;
@@ -787,8 +828,8 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go)
case GO_ALLIANCE_GATE_3:
lang_entry = LANG_BG_IC_SOUTH_GATE_DESTROYED;
break;
- default:
- break;
+ default:
+ break;
}
if (go->GetEntry() == GO_HORDE_GATE_1 || go->GetEntry() == GO_HORDE_GATE_2 || go->GetEntry() == GO_HORDE_GATE_3)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
index 64186faf9ea..52fda127ecf 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
@@ -32,156 +32,160 @@ const uint32 BG_IC_Factions[2] =
enum creaturesIC
{
- NPC_HIGH_COMMANDER_HALFORD_WYRMBANE = 34924, // Alliance Boss
- NPC_OVERLORD_AGMAR = 34922, // Horde Boss
- NPC_KOR_KRON_GUARD = 34918, // horde guard
- NPC_SEVEN_TH_LEGION_INFANTRY = 34919, // alliance guard
- NPC_KEEP_CANNON = 34944,
- NPC_DEMOLISHER = 34775,
- NPC_SIEGE_ENGINE_H = 35069,
- NPC_SIEGE_ENGINE_A = 34776,
- NPC_GLAIVE_THROWER_A = 34802,
- NPC_GLAIVE_THROWER_H = 35273,
- NPC_CATAPULT = 34793,
- NPC_HORDE_GUNSHIP_CANNON = 34935,
- NPC_ALLIANCE_GUNSHIP_CANNON = 34929
+ NPC_HIGH_COMMANDER_HALFORD_WYRMBANE = 34924, // Alliance Boss
+ NPC_OVERLORD_AGMAR = 34922, // Horde Boss
+ NPC_KOR_KRON_GUARD = 34918, // horde guard
+ NPC_SEVEN_TH_LEGION_INFANTRY = 34919, // alliance guard
+ NPC_KEEP_CANNON = 34944,
+ NPC_DEMOLISHER = 34775,
+ NPC_SIEGE_ENGINE_H = 35069,
+ NPC_SIEGE_ENGINE_A = 34776,
+ NPC_GLAIVE_THROWER_A = 34802,
+ NPC_GLAIVE_THROWER_H = 35273,
+ NPC_CATAPULT = 34793,
+ NPC_HORDE_GUNSHIP_CANNON = 34935,
+ NPC_ALLIANCE_GUNSHIP_CANNON = 34929,
+ NPC_HORDE_GUNSHIP_CAPTAIN = 35003,
+ NPC_ALLIANCE_GUNSHIP_CAPTAIN = 34960,
+ NPC_WORLD_TRIGGER_NOT_FLOATING = 34984,
+ NPC_WORLD_TRIGGER_ALLIANCE_FRIENDLY = 20213,
+ NPC_WORLD_TRIGGER_HORDE_FRIENDLY = 20212
};
enum gameobjectsIC
{
- GO_ALLIANCE_BANNER = 195396,
+ GO_ALLIANCE_BANNER = 195396,
- GO_ALLIANCE_GATE_1 = 195699,
- GO_ALLIANCE_GATE_2 = 195698,
- GO_ALLIANCE_GATE_3 = 195700,
+ GO_ALLIANCE_GATE_1 = 195699,
+ GO_ALLIANCE_GATE_2 = 195698,
+ GO_ALLIANCE_GATE_3 = 195700,
- GO_ALLIANCE_GUNSHIP_PORTAL = 195320,
+ GO_ALLIANCE_GUNSHIP_PORTAL = 195320,
- GO_ALLIANCE_GUNSHIP_PORTAL_EFFECTS = 195705,
+ GO_ALLIANCE_GUNSHIP_PORTAL_EFFECTS = 195705,
- GO_BENCH_1 = 186896,
- GO_BENCH_2 = 186922,
- GO_BENCH_3 = 186899,
- GO_BENCH_4 = 186904,
- GO_BENCH_5 = 186897,
+ GO_BENCH_1 = 186896,
+ GO_BENCH_2 = 186922,
+ GO_BENCH_3 = 186899,
+ GO_BENCH_4 = 186904,
+ GO_BENCH_5 = 186897,
- GO_BONFIRE_1 = 195376,
- GO_BONFIRE_2 = 195208,
- GO_BONFIRE_3 = 195210,
- GO_BONFIRE_4 = 195207,
- GO_BONFIRE_5 = 195209,
- GO_BONFIRE_6 = 195377,
+ GO_BONFIRE_1 = 195376,
+ GO_BONFIRE_2 = 195208,
+ GO_BONFIRE_3 = 195210,
+ GO_BONFIRE_4 = 195207,
+ GO_BONFIRE_5 = 195209,
+ GO_BONFIRE_6 = 195377,
- GO_DOCKS_BANNER = 195157,
+ GO_DOCKS_BANNER = 195157,
- GO_DOODAD_HU_PORTCULLIS01 = 195436,
+ GO_DOODAD_HU_PORTCULLIS01 = 195436,
- GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01 = 195703,
+ GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01 = 195703,
- GO_DOODAD_PORTCULLISACTIVE01 = 195451,
+ GO_DOODAD_PORTCULLISACTIVE01 = 195451,
- GO_DOODAD_PORTCULLISACTIVE02 = 195452,
+ GO_DOODAD_PORTCULLISACTIVE02 = 195452,
- GO_DOODAD_VR_PORTCULLIS01 = 195437,
+ GO_DOODAD_VR_PORTCULLIS01 = 195437,
- GO_CHAIR_1 = 195410,
- GO_CHAIR_2 = 195414,
- GO_CHAIR_3 = 160415,
- GO_CHAIR_4 = 195418,
- GO_CHAIR_5 = 195416,
- GO_CHAIR_6 = 160410,
- GO_CHAIR_7 = 160418,
- GO_CHAIR_8 = 160416,
- GO_CHAIR_9 = 160419,
+ GO_CHAIR_1 = 195410,
+ GO_CHAIR_2 = 195414,
+ GO_CHAIR_3 = 160415,
+ GO_CHAIR_4 = 195418,
+ GO_CHAIR_5 = 195416,
+ GO_CHAIR_6 = 160410,
+ GO_CHAIR_7 = 160418,
+ GO_CHAIR_8 = 160416,
+ GO_CHAIR_9 = 160419,
- GO_FLAGPOLE_1 = 195131,
- GO_FLAGPOLE_2 = 195439,
+ GO_FLAGPOLE_1 = 195131,
+ GO_FLAGPOLE_2 = 195439,
- GO_GUNSHIP_PORTAL_1 = 195371,
- GO_GUNSHIP_PORTAL_2 = 196413,
+ GO_GUNSHIP_PORTAL_1 = 195371,
+ GO_GUNSHIP_PORTAL_2 = 196413,
- GO_HANGAR_BANNER = 195158,
+ GO_HANGAR_BANNER = 195158,
- GO_HORDE_BANNER = 195393,
+ GO_HORDE_BANNER = 195393,
- GO_HORDE_GATE_1 = 195494,
- GO_HORDE_GATE_2 = 195496,
- GO_HORDE_GATE_3 = 195495,
+ GO_HORDE_GATE_1 = 195494,
+ GO_HORDE_GATE_2 = 195496,
+ GO_HORDE_GATE_3 = 195495,
- GO_HORDE_GUNSHIP_PORTAL = 195326,
+ GO_HORDE_GUNSHIP_PORTAL = 195326,
- GO_HORDE_GUNSHIP_PORTAL_EFFECTS = 195706,
+ GO_HORDE_GUNSHIP_PORTAL_EFFECTS = 195706,
- GO_HORDE_KEEP_PORTCULLIS = 195223,
+ GO_HORDE_KEEP_PORTCULLIS = 195223,
- GO_HUGE_SEAFORIUM_BOMB_A = 195332,
- GO_HUGE_SEAFORIUM_BOMB_H = 195333,
+ GO_HUGE_SEAFORIUM_BOMB_A = 195332,
+ GO_HUGE_SEAFORIUM_BOMB_H = 195333,
- GO_QUARRY_BANNER = 195338,
- GO_REFRESHMENT_PORTAL = 186811,
- GO_SEAFORIUM_BOMBS = 195237,
+ GO_QUARRY_BANNER = 195338,
+ GO_REFRESHMENT_PORTAL = 186811,
+ GO_SEAFORIUM_BOMBS = 195237,
- GO_STOVE_1 = 174863,
- GO_STOVE_2 = 160411,
+ GO_STOVE_1 = 174863,
+ GO_STOVE_2 = 160411,
- GO_TELEPORTER_1 = 195314, // 195314 H-OUT 66549
- GO_TELEPORTER_2 = 195313, // 195313 H-IN 66548
+ GO_TELEPORTER_1 = 195314, // 195314 H-OUT 66549
+ GO_TELEPORTER_2 = 195313, // 195313 H-IN 66548
- GO_TELEPORTER_3 = 195315, // 195315 A-OUT 66549
- GO_TELEPORTER_4 = 195316, // 195316 A-IN 66548
+ GO_TELEPORTER_3 = 195315, // 195315 A-OUT 66549
+ GO_TELEPORTER_4 = 195316, // 195316 A-IN 66548
- GO_TELEPORTER_EFFECTS_A = 195701,
+ GO_TELEPORTER_EFFECTS_A = 195701,
+ GO_TELEPORTER_EFFECTS_H = 195702,
- GO_TELEPORTER_EFFECTS_H = 195702,
+ GO_WORKSHOP_BANNER = 195133,
- GO_WORKSHOP_BANNER = 195133,
+ GO_BRAZIER_1 = 195402,
+ GO_BRAZIER_2 = 195403,
+ GO_BRAZIER_3 = 195425,
+ GO_BRAZIER_4 = 195424,
- GO_BRAZIER_1 = 195402,
- GO_BRAZIER_2 = 195403,
- GO_BRAZIER_3 = 195425,
- GO_BRAZIER_4 = 195424,
+ GO_REFINERY_BANNER = 195343,
- GO_REFINERY_BANNER = 195343,
+ GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01 = 195491,
- GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01 = 195491,
+ GO_ALLIANCE_BANNER_DOCK = 195153,
+ GO_ALLIANCE_BANNER_DOCK_CONT = 195154,
+ GO_HORDE_BANNER_DOCK = 195155,
+ GO_HORDE_BANNER_DOCK_CONT = 195156,
- GO_ALLIANCE_BANNER_DOCK = 195153,
- GO_ALLIANCE_BANNER_DOCK_CONT = 195154,
- GO_HORDE_BANNER_DOCK = 195155,
- GO_HORDE_BANNER_DOCK_CONT = 195156,
+ GO_HORDE_BANNER_HANGAR = 195130,
+ GO_HORDE_BANNER_HANGAR_CONT = 195145,
+ GO_ALLIANCE_BANNER_HANGAR = 195132,
+ GO_ALLIANCE_BANNER_HANGAR_CONT = 195144,
- GO_HORDE_BANNER_HANGAR = 195130,
- GO_HORDE_BANNER_HANGAR_CONT = 195145,
- GO_ALLIANCE_BANNER_HANGAR = 195132,
- GO_ALLIANCE_BANNER_HANGAR_CONT= 195144,
+ GO_ALLIANCE_BANNER_QUARRY = 195334,
+ GO_ALLIANCE_BANNER_QUARRY_CONT = 195335,
+ GO_HORDE_BANNER_QUARRY = 195336,
+ GO_HORDE_BANNER_QUARRY_CONT = 195337,
- GO_ALLIANCE_BANNER_QUARRY = 195334,
- GO_ALLIANCE_BANNER_QUARRY_CONT = 195335,
- GO_HORDE_BANNER_QUARRY = 195336,
- GO_HORDE_BANNER_QUARRY_CONT = 195337,
+ GO_ALLIANCE_BANNER_REFINERY = 195339,
+ GO_ALLIANCE_BANNER_REFINERY_CONT = 195340,
+ GO_HORDE_BANNER_REFINERY = 195341,
+ GO_HORDE_BANNER_REFINERY_CONT = 195342,
- GO_ALLIANCE_BANNER_REFINERY = 195339,
- GO_ALLIANCE_BANNER_REFINERY_CONT = 195340,
- GO_HORDE_BANNER_REFINERY = 195341,
- GO_HORDE_BANNER_REFINERY_CONT = 195342,
+ GO_ALLIANCE_BANNER_WORKSHOP = 195149,
+ GO_ALLIANCE_BANNER_WORKSHOP_CONT = 195150,
+ GO_HORDE_BANNER_WORKSHOP = 195151,
+ GO_HORDE_BANNER_WORKSHOP_CONT = 195152,
- GO_ALLIANCE_BANNER_WORKSHOP = 195149,
- GO_ALLIANCE_BANNER_WORKSHOP_CONT = 195150,
- GO_HORDE_BANNER_WORKSHOP = 195151,
- GO_HORDE_BANNER_WORKSHOP_CONT = 195152,
+ GO_ALLIANCE_BANNER_GRAVEYARD_A = 195396,
+ GO_ALLIANCE_BANNER_GRAVEYARD_A_CONT = 195397,
+ GO_HORDE_BANNER_GRAVEYARD_A = 195398,
+ GO_HORDE_BANNER_GRAVEYARD_A_CONT = 195399,
- GO_ALLIANCE_BANNER_GRAVEYARD_A = 195396,
- GO_ALLIANCE_BANNER_GRAVEYARD_A_CONT = 195397,
- GO_HORDE_BANNER_GRAVEYARD_A = 195398,
- GO_HORDE_BANNER_GRAVEYARD_A_CONT = 195399,
+ GO_ALLIANCE_BANNER_GRAVEYARD_H = 195391,
+ GO_ALLIANCE_BANNER_GRAVEYARD_H_CONT = 195392,
+ GO_HORDE_BANNER_GRAVEYARD_H = 195393,
+ GO_HORDE_BANNER_GRAVEYARD_H_CONT = 195394,
- GO_ALLIANCE_BANNER_GRAVEYARD_H = 195391,
- GO_ALLIANCE_BANNER_GRAVEYARD_H_CONT = 195392,
- GO_HORDE_BANNER_GRAVEYARD_H = 195393,
- GO_HORDE_BANNER_GRAVEYARD_H_CONT = 195394,
-
- GO_HORDE_GUNSHIP = 195276,
- GO_ALLIANCE_GUNSHIP = 195121
+ GO_HORDE_GUNSHIP = 195276,
+ GO_ALLIANCE_GUNSHIP = 195121
};
#define MAX_REINFORCEMENTS 300
@@ -198,7 +202,7 @@ enum Times
enum Actions
{
- ACTION_TELEPORT_PLAYER_TO_TRANSPORT = 1
+ ACTION_GUNSHIP_READY = 1
};
struct ICNpc
@@ -257,6 +261,8 @@ enum BG_IC_GOs
BG_IC_GO_DOODAD_HU_PORTCULLIS01_2,
BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01,
+ BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR02,
+ BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR03,
BG_IC_GO_DOODAD_PORTCULLISACTIVE01,
@@ -306,6 +312,8 @@ enum BG_IC_GOs
BG_IC_GO_HUGE_SEAFORIUM_BOMBS_H_4,
BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01,
+ BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR02,
+ BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03,
BG_IC_GO_SEAFORIUM_BOMBS_1,
BG_IC_GO_SEAFORIUM_BOMBS_2,
@@ -314,6 +322,10 @@ enum BG_IC_GOs
BG_IC_GO_HANGAR_TELEPORTER_2,
BG_IC_GO_HANGAR_TELEPORTER_3,
+ BG_IC_GO_HANGAR_TELEPORTER_EFFECT_1,
+ BG_IC_GO_HANGAR_TELEPORTER_EFFECT_2,
+ BG_IC_GO_HANGAR_TELEPORTER_EFFECT_3,
+
BG_IC_GO_TELEPORTER_1_1,
BG_IC_GO_TELEPORTER_1_2,
BG_IC_GO_TELEPORTER_2_1,
@@ -408,6 +420,10 @@ enum BG_IC_NPCs
BG_IC_NPC_CATAPULT_3_H,
BG_IC_NPC_CATAPULT_4_H,
+ BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING,
+ BG_IC_NPC_GUNSHIP_CAPTAIN_1,
+ BG_IC_NPC_GUNSHIP_CAPTAIN_2,
+
BG_IC_NPC_SPIRIT_GUIDE_1,
BG_IC_NPC_SPIRIT_GUIDE_2,
BG_IC_NPC_SPIRIT_GUIDE_3,
@@ -427,26 +443,33 @@ enum BannersTypes
enum BG_IC_MaxSpawns
{
- MAX_NORMAL_GAMEOBJECTS_SPAWNS = BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01+1,
- MAX_NORMAL_NPCS_SPAWNS = BG_IC_NPC_KEEP_CANNON_25+1,
- MAX_WORKSHOP_SPAWNS = 10,
- MAX_DOCKS_SPAWNS = 12,
- MAX_SPIRIT_GUIDES_SPAWNS = 7,
- MAX_HANGAR_TELEPORTERS_SPAWNS = 3,
- MAX_AIRSHIPS_SPAWNS = 2,
- MAX_FORTRESS_GATES_SPAWNS = 6,
- MAX_FORTRESS_TELEPORTERS_SPAWNS = 24,
+ MAX_NORMAL_GAMEOBJECTS_SPAWNS = BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03+1,
+ MAX_NORMAL_NPCS_SPAWNS = BG_IC_NPC_KEEP_CANNON_25+1,
+ MAX_WORKSHOP_SPAWNS = 10,
+ MAX_DOCKS_SPAWNS = 12,
+ MAX_SPIRIT_GUIDES_SPAWNS = 7,
+ MAX_HANGAR_TELEPORTERS_SPAWNS = 3,
+ MAX_HANGAR_TELEPORTER_EFFECTS_SPAWNS = 3,
+ MAX_AIRSHIPS_SPAWNS = 2,
+ MAX_FORTRESS_GATES_SPAWNS = 6,
+ MAX_FORTRESS_TELEPORTERS_SPAWNS = 12,
+ MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS = 12,
+ MAX_HANGAR_NPCS_SPAWNS = 3,
// docks
- MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION = 2,
- MAX_CATAPULTS_SPAWNS_PER_FACTION = 4,
+ MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION = 2,
+ MAX_CATAPULTS_SPAWNS_PER_FACTION = 4,
// workshop
- MAX_DEMOLISHERS_SPAWNS_PER_FACTION = 4,
- MAX_WORKSHOP_BOMBS_SPAWNS_PER_FACTION = 2
+ MAX_DEMOLISHERS_SPAWNS_PER_FACTION = 4,
+ MAX_WORKSHOP_BOMBS_SPAWNS_PER_FACTION = 2,
+
+ // Hangar
+ MAX_TRIGGER_SPAWNS_PER_FACTION = 1,
+ MAX_CAPTAIN_SPAWNS_PER_FACTION = 2,
};
-const ICNpc BG_IC_NpcSpawnlocs[MAX_NORMAL_NPCS_SPAWNS]=
+const ICNpc BG_IC_NpcSpawnlocs[MAX_NORMAL_NPCS_SPAWNS] =
{
{BG_IC_NPC_OVERLORD_AGMAR, NPC_OVERLORD_AGMAR, TEAM_HORDE, 1295.44f, -765.733f, 70.0541f, 0.0f}, //Overlord Agmar 1
{BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE, NPC_HIGH_COMMANDER_HALFORD_WYRMBANE, TEAM_ALLIANCE, 224.983f, -831.573f, 60.9034f, 0.0f}, //High Commander Halford Wyrmbane 2
@@ -485,7 +508,7 @@ const ICNpc BG_IC_NpcSpawnlocs[MAX_NORMAL_NPCS_SPAWNS]=
{BG_IC_NPC_KEEP_CANNON_22, NPC_KEEP_CANNON, TEAM_HORDE, 1144.33f, -833.309f, 87.9268f, 2.14675f}, // 32
{BG_IC_NPC_KEEP_CANNON_23, NPC_KEEP_CANNON, TEAM_HORDE, 1135.29f, -840.878f, 88.0252f, 2.30383f}, // 33
{BG_IC_NPC_KEEP_CANNON_24, NPC_KEEP_CANNON, TEAM_HORDE, 1142.59f, -691.946f, 87.9756f, 3.9619f}, // 34
- {BG_IC_NPC_KEEP_CANNON_25, NPC_KEEP_CANNON, TEAM_HORDE, 1166.13f, -858.391f, 87.9653f, 5.63741f}, // 35
+ {BG_IC_NPC_KEEP_CANNON_25, NPC_KEEP_CANNON, TEAM_HORDE, 1166.13f, -858.391f, 87.9653f, 5.63741f} // 35
};
const Position BG_IC_WorkshopVehicles[5] =
@@ -499,8 +522,8 @@ const Position BG_IC_WorkshopVehicles[5] =
const Position BG_IC_DocksVehiclesGlaives[2] =
{
- { 779.3125f, -342.972229f, 12.2104874f, 4.712389f }, // Glaive Throwers
- { 790.029541f, -342.899323f, 12.2128582f, 4.71238f }, // Glaive Throwers
+ {779.3125f, -342.972229f, 12.2104874f, 4.712389f}, // Glaive Throwers
+ {790.029541f, -342.899323f, 12.2128582f, 4.71238f} // Glaive Throwers
};
const Position BG_IC_DocksVehiclesCatapults[4] =
@@ -508,14 +531,35 @@ const Position BG_IC_DocksVehiclesCatapults[4] =
{757.283f, -341.7795f, 12.2113762f, 4.729842f}, // Catapults
{766.947937f, -342.053833f, 12.2009945f, 4.694f}, // Catapults
{800.3785f, -342.607635f, 12.1669979f, 4.6774f}, // Catapults
- {810.7257f, -342.083344f, 12.1675768f, 4.6600f}, // Catapults
+ {810.7257f, -342.083344f, 12.1675768f, 4.6600f} // Catapults
};
const Position BG_IC_HangarTeleporters[3] =
{
- {827.958f, -994.467f, 134.071f, 0.0f}, // Gunship Portal
- {738.613f, -1106.58f, 134.745f, 2.54818f}, // Gunship Portal
- {672.283f, -1156.99f, 133.706f, 1.37881f}, // Gunship Portal
+ {827.9219f, -993.3249f, 134.1972f, 3.141593f}, // Gunship Portal
+ {739.0226f, -1106.661f, 134.7551f, 2.426008f}, // Gunship Portal
+ {672.0799f, -1156.776f, 133.7057f, 1.832595f} // Gunship Portal
+};
+
+const Position BG_IC_HangarTeleporterEffects[3] =
+{
+ {827.9236f, -993.2986f, 134.2002f, 3.141593f}, // Gunship Portal Effect
+ {739.0139f, -1106.661f, 134.7548f, 3.141593f}, // Gunship Portal Effect
+ {672.0868f, -1156.786f, 133.7057f, 3.141593f} // Gunship Portal Effect
+};
+
+const Position BG_IC_HangarTrigger[2] =
+{
+ {11.69965f, 0.034146f, 20.62076f, 3.211406f},
+ {7.305609f, -0.095246f, 34.51022f, 3.159046f}
+};
+
+const Position BG_IC_HangarCaptains[4] =
+{
+ {825.6667f, -994.00520f, 134.3569f, 3.403392f},
+ {53.65112f, -0.1139221f, 30.09546f, 3.106686f},
+ {826.2205f, -994.40280f, 134.2812f, 3.351032f},
+ {10.89952f, 4.88029700f, 20.49038f, 4.840575f}
};
struct ICGo
@@ -541,8 +585,11 @@ const ICGo BG_IC_Teleporters[MAX_FORTRESS_TELEPORTERS_SPAWNS] =
{BG_IC_GO_TELEPORTER_4_2, GO_TELEPORTER_4, 323.54f, -888.361f, 48.9197f, 0.0349063f}, // Teleporter
{BG_IC_GO_TELEPORTER_4_3, GO_TELEPORTER_4, 326.285f, -777.366f, 49.0208f, 3.12412f}, // Teleporter
{BG_IC_GO_TELEPORTER_1_3, GO_TELEPORTER_1, 1235.09f, -857.898f, 48.9163f, 3.07177f}, // Teleporter
- {BG_IC_GO_TELEPORTER_2_3, GO_TELEPORTER_2, 1158.76f, -746.182f, 48.6277f, -1.51844f}, // Teleporter
+ {BG_IC_GO_TELEPORTER_2_3, GO_TELEPORTER_2, 1158.76f, -746.182f, 48.6277f, -1.51844f} // Teleporter
+};
+const ICGo BG_IC_TeleporterEffects[MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS] =
+{
{BG_IC_GO_TELEPORTER_EFFECTS_A_1, GO_TELEPORTER_EFFECTS_A, 425.686f, -857.092f, 48.51f, -1.62316f}, // Teleporter Effects (Alliance)
{BG_IC_GO_TELEPORTER_EFFECTS_A_2, GO_TELEPORTER_EFFECTS_A, 324.634f, -749.148f, 49.359f, 0.0174525f}, // Teleporter Effects (Alliance)
{BG_IC_GO_TELEPORTER_EFFECTS_A_3, GO_TELEPORTER_EFFECTS_A, 311.911f, -913.986f, 48.8157f, 3.08918f}, // Teleporter Effects (Alliance)
@@ -555,7 +602,7 @@ const ICGo BG_IC_Teleporters[MAX_FORTRESS_TELEPORTERS_SPAWNS] =
{BG_IC_GO_TELEPORTER_EFFECTS_H_3, GO_TELEPORTER_EFFECTS_H, 1233.25f, -844.573f, 48.8836f, 0.0174525f}, // Teleporter Effects (Horde)
{BG_IC_GO_TELEPORTER_EFFECTS_H_4, GO_TELEPORTER_EFFECTS_H, 1235.07f, -857.957f, 48.9163f, 3.05433f}, // Teleporter Effects (Horde)
{BG_IC_GO_TELEPORTER_EFFECTS_H_5, GO_TELEPORTER_EFFECTS_H, 1236.46f, -669.344f, 48.2684f, 0.087266f}, // Teleporter Effects (Horde)
- {BG_IC_GO_TELEPORTER_EFFECTS_H_6, GO_TELEPORTER_EFFECTS_H, 1235.6f, -683.806f, 49.3028f, -3.07177f}, // Teleporter Effects (Horde)
+ {BG_IC_GO_TELEPORTER_EFFECTS_H_6, GO_TELEPORTER_EFFECTS_H, 1235.6f, -683.806f, 49.3028f, -3.07177f} // Teleporter Effects (Horde)
};
const ICGo BG_IC_ObjSpawnlocs[MAX_NORMAL_GAMEOBJECTS_SPAWNS] =
@@ -612,6 +659,8 @@ const ICGo BG_IC_ObjSpawnlocs[MAX_NORMAL_GAMEOBJECTS_SPAWNS] =
{BG_IC_GO_DOODAD_HU_PORTCULLIS01_2, GO_DOODAD_HU_PORTCULLIS01, 399.802f, -885.208f, 50.1939f, 2.516f}, // Doodad_HU_Portcullis01
{BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01, GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01, 413.479f, -833.95f, 48.5238f, 3.14159f}, // Doodad_ND_Human_Gate_ClosedFX_Door01
+ {BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR02, GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01, 351.615f, -762.75f, 48.91625f, 4.71292f}, // Doodad_ND_Human_Gate_ClosedFX_Door01
+ {BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR03, GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01, 351.024f, -903.33f, 48.92472f, 1.570796f}, // Doodad_ND_Human_Gate_ClosedFX_Door01
{BG_IC_GO_DOODAD_PORTCULLISACTIVE01, GO_DOODAD_PORTCULLISACTIVE01, -832.595f, 51.4109f, -0.0261791f, 0.0f}, // Doodad_PortcullisActive01
@@ -646,7 +695,9 @@ const ICGo BG_IC_ObjSpawnlocs[MAX_NORMAL_GAMEOBJECTS_SPAWNS] =
{BG_IC_GO_HUGE_SEAFORIUM_BOMBS_H_3, GO_HUGE_SEAFORIUM_BOMB_H, 1273.066f, -786.572937f, 48.9419174f, -0.94247663f},
{BG_IC_GO_HUGE_SEAFORIUM_BOMBS_H_4, GO_HUGE_SEAFORIUM_BOMB_H, 1273.849f, -796.2778f, 48.9364281f, -2.75761318f},
- {BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, 1150.9f, -762.606f, 47.0f, 3.14159f} // Doodad_ND_WinterOrc_Wall_GateFX_Door01 -> this was not sniffed because I only had alliance sniffs
+ {BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, 1150.903f, -762.6059f, 47.50768f, 3.141593f},
+ {BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR02, GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, 1217.899f, -676.9479f, 47.63408f, 1.570796f},
+ {BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03, GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, 1218.743f, -851.1545f, 48.25328f, 4.712392f}
};
const Position workshopBombs[2] =
@@ -657,16 +708,20 @@ const Position workshopBombs[2] =
enum Spells
{
- SPELL_OIL_REFINERY = 68719,
- SPELL_QUARRY = 68720,
- SPELL_PARACHUTE = 66656,
- SPELL_SLOW_FALL = 12438,
- SPELL_DESTROYED_VEHICLE_ACHIEVEMENT = 68357,
- SPELL_BACK_DOOR_JOB_ACHIEVEMENT = 68502,
- SPELL_DRIVING_CREDIT_DEMOLISHER = 68365,
- SPELL_DRIVING_CREDIT_GLAIVE = 68363,
- SPELL_DRIVING_CREDIT_SIEGE = 68364,
- SPELL_DRIVING_CREDIT_CATAPULT = 68362,
+ SPELL_OIL_REFINERY = 68719,
+ SPELL_QUARRY = 68720,
+ SPELL_PARACHUTE = 66656,
+ SPELL_SLOW_FALL = 12438,
+ SPELL_DESTROYED_VEHICLE_ACHIEVEMENT = 68357,
+ SPELL_BACK_DOOR_JOB_ACHIEVEMENT = 68502,
+ SPELL_DRIVING_CREDIT_DEMOLISHER = 68365,
+ SPELL_DRIVING_CREDIT_GLAIVE = 68363,
+ SPELL_DRIVING_CREDIT_SIEGE = 68364,
+ SPELL_DRIVING_CREDIT_CATAPULT = 68362,
+ SPELL_SIMPLE_TELEPORT = 12980,
+ SPELL_TELEPORT_VISUAL_ONLY = 51347,
+ SPELL_PARACHUTE_IC = 66657,
+ SPELL_LAUNCH_NO_FALLING_DAMAGE = 66251
};
enum BG_IC_Objectives
@@ -677,71 +732,71 @@ enum BG_IC_Objectives
enum ICWorldStates
{
- BG_IC_ALLIANCE_RENFORT_SET = 4221,
- BG_IC_HORDE_RENFORT_SET = 4222,
- BG_IC_ALLIANCE_RENFORT = 4226,
- BG_IC_HORDE_RENFORT = 4227,
- BG_IC_GATE_FRONT_H_WS_CLOSED = 4317,
- BG_IC_GATE_WEST_H_WS_CLOSED = 4318,
- BG_IC_GATE_EAST_H_WS_CLOSED = 4319,
- BG_IC_GATE_FRONT_A_WS_CLOSED = 4328,
- BG_IC_GATE_WEST_A_WS_CLOSED = 4327,
- BG_IC_GATE_EAST_A_WS_CLOSED = 4326,
- BG_IC_GATE_FRONT_H_WS_OPEN = 4322,
- BG_IC_GATE_WEST_H_WS_OPEN = 4321,
- BG_IC_GATE_EAST_H_WS_OPEN = 4320,
- BG_IC_GATE_FRONT_A_WS_OPEN = 4323,
- BG_IC_GATE_WEST_A_WS_OPEN = 4324,
- BG_IC_GATE_EAST_A_WS_OPEN = 4325,
-
- BG_IC_DOCKS_UNCONTROLLED = 4301,
- BG_IC_DOCKS_CONFLICT_A = 4305,
- BG_IC_DOCKS_CONFLICT_H = 4302,
- BG_IC_DOCKS_CONTROLLED_A = 4304,
- BG_IC_DOCKS_CONTROLLED_H = 4303,
-
- BG_IC_HANGAR_UNCONTROLLED = 4296,
- BG_IC_HANGAR_CONFLICT_A = 4300,
- BG_IC_HANGAR_CONFLICT_H = 4297,
- BG_IC_HANGAR_CONTROLLED_A = 4299,
- BG_IC_HANGAR_CONTROLLED_H = 4298,
-
- BG_IC_QUARRY_UNCONTROLLED = 4306,
- BG_IC_QUARRY_CONFLICT_A = 4310,
- BG_IC_QUARRY_CONFLICT_H = 4307,
- BG_IC_QUARRY_CONTROLLED_A = 4309,
- BG_IC_QUARRY_CONTROLLED_H = 4308,
-
- BG_IC_REFINERY_UNCONTROLLED = 4311,
- BG_IC_REFINERY_CONFLICT_A = 4315,
- BG_IC_REFINERY_CONFLICT_H = 4312,
- BG_IC_REFINERY_CONTROLLED_A = 4314,
- BG_IC_REFINERY_CONTROLLED_H = 4313,
-
- BG_IC_WORKSHOP_UNCONTROLLED = 4294,
- BG_IC_WORKSHOP_CONFLICT_A = 4228,
- BG_IC_WORKSHOP_CONFLICT_H = 4293,
- BG_IC_WORKSHOP_CONTROLLED_A = 4229,
- BG_IC_WORKSHOP_CONTROLLED_H = 4230,
-
- BG_IC_ALLIANCE_KEEP_UNCONTROLLED = 4341,
- BG_IC_ALLIANCE_KEEP_CONFLICT_A = 4342,
- BG_IC_ALLIANCE_KEEP_CONFLICT_H = 4343,
- BG_IC_ALLIANCE_KEEP_CONTROLLED_A = 4339,
- BG_IC_ALLIANCE_KEEP_CONTROLLED_H = 4340,
-
- BG_IC_HORDE_KEEP_UNCONTROLLED = 4346,
- BG_IC_HORDE_KEEP_CONFLICT_A = 4347,
- BG_IC_HORDE_KEEP_CONFLICT_H = 4348,
- BG_IC_HORDE_KEEP_CONTROLLED_A = 4344,
- BG_IC_HORDE_KEEP_CONTROLLED_H = 4345
+ BG_IC_ALLIANCE_RENFORT_SET = 4221,
+ BG_IC_HORDE_RENFORT_SET = 4222,
+ BG_IC_ALLIANCE_RENFORT = 4226,
+ BG_IC_HORDE_RENFORT = 4227,
+ BG_IC_GATE_FRONT_H_WS_CLOSED = 4317,
+ BG_IC_GATE_WEST_H_WS_CLOSED = 4318,
+ BG_IC_GATE_EAST_H_WS_CLOSED = 4319,
+ BG_IC_GATE_FRONT_A_WS_CLOSED = 4328,
+ BG_IC_GATE_WEST_A_WS_CLOSED = 4327,
+ BG_IC_GATE_EAST_A_WS_CLOSED = 4326,
+ BG_IC_GATE_FRONT_H_WS_OPEN = 4322,
+ BG_IC_GATE_WEST_H_WS_OPEN = 4321,
+ BG_IC_GATE_EAST_H_WS_OPEN = 4320,
+ BG_IC_GATE_FRONT_A_WS_OPEN = 4323,
+ BG_IC_GATE_WEST_A_WS_OPEN = 4324,
+ BG_IC_GATE_EAST_A_WS_OPEN = 4325,
+
+ BG_IC_DOCKS_UNCONTROLLED = 4301,
+ BG_IC_DOCKS_CONFLICT_A = 4305,
+ BG_IC_DOCKS_CONFLICT_H = 4302,
+ BG_IC_DOCKS_CONTROLLED_A = 4304,
+ BG_IC_DOCKS_CONTROLLED_H = 4303,
+
+ BG_IC_HANGAR_UNCONTROLLED = 4296,
+ BG_IC_HANGAR_CONFLICT_A = 4300,
+ BG_IC_HANGAR_CONFLICT_H = 4297,
+ BG_IC_HANGAR_CONTROLLED_A = 4299,
+ BG_IC_HANGAR_CONTROLLED_H = 4298,
+
+ BG_IC_QUARRY_UNCONTROLLED = 4306,
+ BG_IC_QUARRY_CONFLICT_A = 4310,
+ BG_IC_QUARRY_CONFLICT_H = 4307,
+ BG_IC_QUARRY_CONTROLLED_A = 4309,
+ BG_IC_QUARRY_CONTROLLED_H = 4308,
+
+ BG_IC_REFINERY_UNCONTROLLED = 4311,
+ BG_IC_REFINERY_CONFLICT_A = 4315,
+ BG_IC_REFINERY_CONFLICT_H = 4312,
+ BG_IC_REFINERY_CONTROLLED_A = 4314,
+ BG_IC_REFINERY_CONTROLLED_H = 4313,
+
+ BG_IC_WORKSHOP_UNCONTROLLED = 4294,
+ BG_IC_WORKSHOP_CONFLICT_A = 4228,
+ BG_IC_WORKSHOP_CONFLICT_H = 4293,
+ BG_IC_WORKSHOP_CONTROLLED_A = 4229,
+ BG_IC_WORKSHOP_CONTROLLED_H = 4230,
+
+ BG_IC_ALLIANCE_KEEP_UNCONTROLLED = 4341,
+ BG_IC_ALLIANCE_KEEP_CONFLICT_A = 4342,
+ BG_IC_ALLIANCE_KEEP_CONFLICT_H = 4343,
+ BG_IC_ALLIANCE_KEEP_CONTROLLED_A = 4339,
+ BG_IC_ALLIANCE_KEEP_CONTROLLED_H = 4340,
+
+ BG_IC_HORDE_KEEP_UNCONTROLLED = 4346,
+ BG_IC_HORDE_KEEP_CONFLICT_A = 4347,
+ BG_IC_HORDE_KEEP_CONFLICT_H = 4348,
+ BG_IC_HORDE_KEEP_CONTROLLED_A = 4344,
+ BG_IC_HORDE_KEEP_CONTROLLED_H = 4345
};
enum BG_IC_GateState
{
- BG_IC_GATE_OK = 1,
- BG_IC_GATE_DAMAGED = 2,
- BG_IC_GATE_DESTROYED = 3
+ BG_IC_GATE_OK = 1,
+ BG_IC_GATE_DAMAGED = 2,
+ BG_IC_GATE_DESTROYED = 3
};
enum ICDoorList
@@ -781,9 +836,6 @@ enum ICNodeState
const uint32 BG_IC_GraveyardIds[MAX_NODE_TYPES+2] = {0, 0, 1480, 1481, 1482, 1485, 1486, 1483, 1484};
-const Position TransportMovementInfo = {7.305609f, -0.095246f, 34.51022f, 0.0f};
-const Position TeleportToTransportPosition = {661.0f, -1244.0f, 288.0f, 0.0f};
-
Position const BG_IC_SpiritGuidePos[MAX_NODE_TYPES+2] =
{
{0.0f, 0.0f, 0.0f, 0.0f}, // no grave
@@ -797,24 +849,6 @@ Position const BG_IC_SpiritGuidePos[MAX_NODE_TYPES+2] =
{1148.65f, -1250.98f, 16.60f, 1.74f}, // last resort horde
};
-const Position hordeGunshipPassengers[5] =
-{
- {-21.401f, -31.343f, 34.173f, 4.62057f},
- {-12.1064f, -31.9697f, 34.3807f, 4.62057f},
- {-2.4877f, -31.9885f, 34.8384f, 4.62057f},
- {10.2664f, -32.0713f, 35.7357f, 4.62057f},
- {19.4636f, -30.794f, 36.2254f, 4.83106f}
-};
-
-const Position allianceGunshipPassengers[5] =
-{
- {-41.7122f, 23.1838f, 22.5605f, 1.60659f},
- {-31.0354f, 25.1286f, 21.6921f, 1.60659f},
- {-21.4492f, 25.8326f, 21.6309f, 1.60659f},
- {-12.4734f, 26.321f, 21.6237f, 1.60659f},
- {-2.81125f, 26.2077f, 21.6566f, 1.60659f}
-};
-
// I.E: Hangar, Quarry, Graveyards .. etc
struct ICNodePoint
{
@@ -839,13 +873,13 @@ const ICNodePoint nodePointInitial[7] =
{BG_IC_GO_HANGAR_BANNER, GO_HANGAR_BANNER, TEAM_NEUTRAL, NODE_TYPE_HANGAR, {GO_ALLIANCE_BANNER_HANGAR, GO_ALLIANCE_BANNER_HANGAR_CONT, GO_HORDE_BANNER_HANGAR, GO_HORDE_BANNER_HANGAR_CONT}, false, 0, 0, {BG_IC_HANGAR_UNCONTROLLED, BG_IC_HANGAR_CONFLICT_A, BG_IC_HANGAR_CONFLICT_H, BG_IC_HANGAR_CONTROLLED_A, BG_IC_HANGAR_CONTROLLED_H}, NODE_STATE_UNCONTROLLED, LANG_BG_IC_HANGAR},
{BG_IC_GO_WORKSHOP_BANNER, GO_WORKSHOP_BANNER, TEAM_NEUTRAL, NODE_TYPE_WORKSHOP, {GO_ALLIANCE_BANNER_WORKSHOP, GO_ALLIANCE_BANNER_WORKSHOP_CONT, GO_HORDE_BANNER_WORKSHOP, GO_HORDE_BANNER_WORKSHOP_CONT}, false, 0, 0, {BG_IC_WORKSHOP_UNCONTROLLED, BG_IC_WORKSHOP_CONFLICT_A, BG_IC_WORKSHOP_CONFLICT_H, BG_IC_WORKSHOP_CONTROLLED_A, BG_IC_WORKSHOP_CONTROLLED_H}, NODE_STATE_UNCONTROLLED, LANG_BG_IC_WORKSHOP},
{BG_IC_GO_ALLIANCE_BANNER, GO_ALLIANCE_BANNER, TEAM_ALLIANCE, NODE_TYPE_GRAVEYARD_A, {GO_ALLIANCE_BANNER_GRAVEYARD_A, GO_ALLIANCE_BANNER_GRAVEYARD_A_CONT, GO_HORDE_BANNER_GRAVEYARD_A, GO_HORDE_BANNER_GRAVEYARD_A_CONT}, false, 0, 0, {BG_IC_ALLIANCE_KEEP_UNCONTROLLED, BG_IC_ALLIANCE_KEEP_CONFLICT_A, BG_IC_ALLIANCE_KEEP_CONFLICT_H, BG_IC_ALLIANCE_KEEP_CONTROLLED_A, BG_IC_ALLIANCE_KEEP_CONTROLLED_H}, NODE_STATE_CONTROLLED_A, LANG_BG_IC_ALLIANCE_KEEP},
- {BG_IC_GO_HORDE_BANNER, GO_HORDE_BANNER, TEAM_HORDE, NODE_TYPE_GRAVEYARD_H, {GO_ALLIANCE_BANNER_GRAVEYARD_H, GO_ALLIANCE_BANNER_GRAVEYARD_H_CONT, GO_HORDE_BANNER_GRAVEYARD_H, GO_HORDE_BANNER_GRAVEYARD_H_CONT}, false, 0, 0, {BG_IC_HORDE_KEEP_UNCONTROLLED, BG_IC_HORDE_KEEP_CONFLICT_A, BG_IC_HORDE_KEEP_CONFLICT_H, BG_IC_HORDE_KEEP_CONTROLLED_A, BG_IC_HORDE_KEEP_CONTROLLED_H}, NODE_STATE_CONTROLLED_H, LANG_BG_IC_HORDE_KEEP},
+ {BG_IC_GO_HORDE_BANNER, GO_HORDE_BANNER, TEAM_HORDE, NODE_TYPE_GRAVEYARD_H, {GO_ALLIANCE_BANNER_GRAVEYARD_H, GO_ALLIANCE_BANNER_GRAVEYARD_H_CONT, GO_HORDE_BANNER_GRAVEYARD_H, GO_HORDE_BANNER_GRAVEYARD_H_CONT}, false, 0, 0, {BG_IC_HORDE_KEEP_UNCONTROLLED, BG_IC_HORDE_KEEP_CONFLICT_A, BG_IC_HORDE_KEEP_CONFLICT_H, BG_IC_HORDE_KEEP_CONTROLLED_A, BG_IC_HORDE_KEEP_CONTROLLED_H}, NODE_STATE_CONTROLLED_H, LANG_BG_IC_HORDE_KEEP}
};
enum HonorRewards
{
- RESOURCE_HONOR_AMOUNT = 12,
- WINNER_HONOR_AMOUNT = 500
+ RESOURCE_HONOR_AMOUNT = 12,
+ WINNER_HONOR_AMOUNT = 500
};
struct BattlegroundICScore final : public BattlegroundScore
@@ -913,8 +947,6 @@ class BattlegroundIC : public Battleground
/* Scorekeeping */
void FillInitialWorldStates(WorldPacket& data) override;
- void DoAction(uint32 action, ObjectGuid var) override;
-
void HandlePlayerResurrect(Player* player) override;
uint32 GetNodeState(uint8 nodeType) const { return (uint8)nodePoint[nodeType].nodeState; }
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 14ca3a645d7..9b74797e703 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -62,6 +62,7 @@
#include "Pet.h"
#include "QuestDef.h"
#include "ReputationMgr.h"
+#include "revision.h"
#include "SkillDiscovery.h"
#include "SocialMgr.h"
#include "Spell.h"
@@ -15262,6 +15263,19 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, quest_id);
SendQuestUpdate(quest_id);
+
+ if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
+ {
+ // prepare Quest Tracker datas
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_QUEST_TRACK);
+ stmt->setUInt32(0, quest_id);
+ stmt->setUInt32(1, GetGUIDLow());
+ stmt->setString(2, _HASH);
+ stmt->setString(3, _DATE);
+
+ // add to Quest Tracker
+ CharacterDatabase.Execute(stmt);
+ }
}
void Player::CompleteQuest(uint32 quest_id)
@@ -15282,6 +15296,17 @@ void Player::CompleteQuest(uint32 quest_id)
SendQuestComplete(qInfo);
}
}
+
+ if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
+ {
+ // prepare Quest Tracker datas
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_COMPLETE_TIME);
+ stmt->setUInt32(0, quest_id);
+ stmt->setUInt32(1, GetGUIDLow());
+
+ // add to Quest Tracker
+ CharacterDatabase.Execute(stmt);
+ }
}
void Player::IncompleteQuest(uint32 quest_id)
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index d96074626ab..1bf6993ad4b 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -3239,7 +3239,7 @@ void Unit::_UnapplyAura(AuraApplicationMap::iterator &i, AuraRemoveMode removeMo
ASSERT(!aurApp->GetEffectMask());
// Remove totem at next update if totem loses its aura
- if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE && GetTypeId() == TYPEID_UNIT && ToCreature()->IsTotem()&& ToTotem()->GetSummonerGUID() == aura->GetCasterGUID())
+ if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE && GetTypeId() == TYPEID_UNIT && ToCreature()->IsTotem())
{
if (ToTotem()->GetSpell() == aura->GetId() && ToTotem()->GetTotemType() == TOTEM_PASSIVE)
ToTotem()->setDeathState(JUST_DIED);
@@ -7123,6 +7123,10 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(trigger_spell_id))
return false;
+ // extra attack should hit same target
+ if (triggerEntry->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS))
+ target = victim;
+
// try detect target manually if not set
if (target == NULL)
target = !(procFlags & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)) && triggerEntry && triggerEntry->IsPositive() ? this : victim;
@@ -8153,6 +8157,15 @@ int32 Unit::DealHeal(Unit* victim, uint32 addhealth)
return gain;
}
+bool Unit::IsMagnet() const
+{
+ // Grounding Totem
+ if (GetUInt32Value(UNIT_CREATED_BY_SPELL) == 8177) /// @todo: find a more generic solution
+ return true;
+
+ return false;
+}
+
Unit* Unit::GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo)
{
// Patch 1.2 notes: Spell Reflection no longer reflects abilities
@@ -8168,7 +8181,16 @@ Unit* Unit::GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo)
&& _IsValidAttackTarget(magnet, spellInfo))
{
/// @todo handle this charge drop by proc in cast phase on explicit target
- (*itr)->GetBase()->DropCharge(AURA_REMOVE_BY_EXPIRE);
+ if (victim && spellInfo->Speed > 0.0f)
+ {
+ // Set up missile speed based delay
+ uint32 delay = uint32(std::floor(std::max<float>(victim->GetDistance(this), 5.0f) / spellInfo->Speed * 1000.0f));
+ // Schedule charge drop
+ (*itr)->GetBase()->DropChargeDelayed(delay,AURA_REMOVE_BY_EXPIRE);
+ }
+ else
+ (*itr)->GetBase()->DropCharge(AURA_REMOVE_BY_EXPIRE);
+
return magnet;
}
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index fd986083bcb..4d6bb4cd6f1 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1988,6 +1988,7 @@ class Unit : public WorldObject
uint32 BuildAuraStateUpdateForTarget(Unit* target) const;
bool HasAuraState(AuraStateType flag, SpellInfo const* spellProto = NULL, Unit const* Caster = NULL) const;
void UnsummonAllTotems();
+ bool IsMagnet() const;
Unit* GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo);
Unit* GetMeleeHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo = NULL);
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index 1e7779065d2..3eefc7d9209 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -203,6 +203,8 @@ void Vehicle::ApplyAllImmunities()
case 160: // Strand of the Ancients
case 244: // Wintergrasp
case 510: // Isle of Conquest
+ case 452: // Isle of Conquest
+ case 543: // Isle of Conquest
_me->SetControlled(true, UNIT_STATE_ROOT);
// why we need to apply this? we can simple add immunities to slow mechanic in DB
_me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_DECREASE_SPEED, true);
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index 331256c7edd..8eade08b32c 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -427,6 +427,17 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPacket& recvData)
_player->RemoveTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, questId);
TC_LOG_INFO("network", "Player %u abandoned quest %u", _player->GetGUIDLow(), questId);
+
+ if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
+ {
+ // prepare Quest Tracker datas
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_ABANDON_TIME);
+ stmt->setUInt32(0, questId);
+ stmt->setUInt32(1, _player->GetGUIDLow());
+
+ // add to Quest Tracker
+ CharacterDatabase.Execute(stmt);
+ }
}
_player->SetQuestSlot(slot, 0);
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 24a0296491c..ccc98de0de7 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -247,6 +247,8 @@ class InstanceScript : public ZoneScript
// ReCheck PhaseTemplate related conditions
void UpdatePhasing();
+ uint32 GetEncounterCount() const { return bosses.size(); }
+
protected:
void SetHeaders(std::string const& dataHeaders);
void SetBossNumber(uint32 number) { bosses.resize(number); }
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index fe38c0dff62..41654f80dd4 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -1118,8 +1118,15 @@ enum TrinityStrings
LANG_COMMAND_INST_STAT_GROUPSBOUND = 5054,
LANG_NOT_DUNGEON = 5055, // Map is not a dungeon.
LANG_NO_INSTANCE_DATA = 5056, // Map has no instance data.
+ LANG_COMMAND_INST_SET_BOSS_STATE = 5057,
+ LANG_COMMAND_INST_GET_BOSS_STATE = 5058,
- // Room for more Trinity strings 5057-9999
+ // Mutehistory commands
+ LANG_COMMAND_MUTEHISTORY = 5059,
+ LANG_COMMAND_MUTEHISTORY_EMPTY = 5060,
+ LANG_COMMAND_MUTEHISTORY_OUTPUT = 5061,
+
+ // Room for more Trinity strings 5062-9999
// Level requirement notifications
LANG_SAY_REQ = 6604,
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 3d0955f5d97..81b7198b2e8 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -113,8 +113,6 @@ SpellCastTargets::SpellCastTargets() : m_elevation(0), m_speed(0), m_strTarget()
m_objectTarget = NULL;
m_itemTarget = NULL;
- m_objectTargetGUID.Clear();
- m_itemTargetGUID.Clear();
m_itemTargetEntry = 0;
m_targetMask = 0;
@@ -212,6 +210,28 @@ void SpellCastTargets::Write(ByteBuffer& data)
data << m_strTarget;
}
+ObjectGuid SpellCastTargets::GetOrigUnitTargetGUID() const
+{
+ switch (m_origObjectTargetGUID.GetHigh())
+ {
+ case HIGHGUID_PLAYER:
+ case HIGHGUID_VEHICLE:
+ case HIGHGUID_UNIT:
+ case HIGHGUID_PET:
+ return m_origObjectTargetGUID;
+ default:
+ return ObjectGuid();
+ }
+}
+
+void SpellCastTargets::SetOrigUnitTarget(Unit* target)
+{
+ if (!target)
+ return;
+
+ m_origObjectTargetGUID = target->GetGUID();
+}
+
ObjectGuid SpellCastTargets::GetUnitTargetGUID() const
{
if (m_objectTargetGUID.IsUnit())
@@ -638,6 +658,7 @@ Spell::~Spell()
void Spell::InitExplicitTargets(SpellCastTargets const& targets)
{
m_targets = targets;
+ m_targets.SetOrigUnitTarget(m_targets.GetUnitTarget());
// this function tries to correct spell explicit targets for spell
// client doesn't send explicit targets correctly sometimes - we need to fix such spells serverside
// this also makes sure that we correctly send explicit targets to client (removes redundant data)
@@ -3411,8 +3432,13 @@ void Spell::_handle_finish_phase()
HandleHolyPower(m_caster->m_movedPlayer);
}
- if (m_caster->m_extraAttacks && GetSpellInfo()->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS))
- m_caster->HandleProcExtraAttackFor(m_caster->GetVictim());
+ if (m_caster->m_extraAttacks && m_spellInfo->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS))
+ {
+ if (Unit* victim = ObjectAccessor::FindUnit(m_targets.GetOrigUnitTargetGUID()))
+ m_caster->HandleProcExtraAttackFor(victim);
+ else
+ m_caster->m_extraAttacks = 0;
+ }
/// @todo trigger proc phase finish here
}
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 9fc3deaef99..65fe51b37e3 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -109,6 +109,9 @@ class SpellCastTargets
void SetTargetFlag(SpellCastTargetFlags flag) { m_targetMask |= flag; }
+ ObjectGuid GetOrigUnitTargetGUID() const;
+ void SetOrigUnitTarget(Unit* target);
+
ObjectGuid GetUnitTargetGUID() const;
Unit* GetUnitTarget() const;
void SetUnitTarget(Unit* target);
@@ -174,6 +177,7 @@ class SpellCastTargets
Item* m_itemTarget;
// object GUID/etc, can be used always
+ ObjectGuid m_origObjectTargetGUID;
ObjectGuid m_objectTargetGUID;
ObjectGuid m_itemTargetGUID;
uint32 m_itemTargetEntry;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 9724765007a..e3c06da3874 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -4276,7 +4276,7 @@ void Spell::EffectAddExtraAttacks(SpellEffIndex effIndex)
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
- if (!unitTarget || !unitTarget->IsAlive() || !unitTarget->GetVictim())
+ if (!unitTarget || !unitTarget->IsAlive())
return;
if (unitTarget->m_extraAttacks)
@@ -4284,7 +4284,7 @@ void Spell::EffectAddExtraAttacks(SpellEffIndex effIndex)
unitTarget->m_extraAttacks = damage;
- ExecuteLogEffectExtraAttacks(effIndex, unitTarget->GetVictim(), damage);
+ ExecuteLogEffectExtraAttacks(effIndex, unitTarget, damage);
}
void Spell::EffectParry(SpellEffIndex /*effIndex*/)
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 49e84d26d60..62d5763d6e2 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1911,6 +1911,11 @@ bool SpellInfo::CheckTargetCreatureType(Unit const* target) const
else
return true;
}
+
+ // if target is magnet (i.e Grounding Totem) the check is skipped
+ if (target->IsMagnet())
+ return true;
+
uint32 creatureType = target->GetCreatureTypeMask();
return !TargetCreatureType || !creatureType || (creatureType & TargetCreatureType);
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index d3d06d0ee8a..a43baed9ae0 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -996,6 +996,8 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_WORLD_BOSS_LEVEL_DIFF] = sConfigMgr->GetIntDefault("WorldBossLevelDiff", 3);
+ m_bool_configs[CONFIG_QUEST_ENABLE_QUEST_TRACKER] = sConfigMgr->GetBoolDefault("Quests.EnableQuestTracker", false);
+
// note: disable value (-1) will assigned as 0xFFFFFFF, to prevent overflow at calculations limit it to max possible player level MAX_LEVEL(100)
m_int_configs[CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF] = sConfigMgr->GetIntDefault("Quests.LowLevelHideDiff", 4);
if (m_int_configs[CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF] > MAX_LEVEL)
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 2c74e3929fe..ae07a5434f1 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -157,6 +157,7 @@ enum WorldBoolConfigs
CONFIG_PDUMP_NO_OVERWRITE,
CONFIG_QUEST_IGNORE_AUTO_ACCEPT,
CONFIG_QUEST_IGNORE_AUTO_COMPLETE,
+ CONFIG_QUEST_ENABLE_QUEST_TRACKER,
CONFIG_WARDEN_ENABLED,
CONFIG_ENABLE_MMAPS,
CONFIG_WINTERGRASP_ENABLE,
diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp
index a426c49a5f7..0bc352be842 100644
--- a/src/server/scripts/Commands/cs_instance.cpp
+++ b/src/server/scripts/Commands/cs_instance.cpp
@@ -40,11 +40,13 @@ public:
{
static ChatCommand instanceCommandTable[] =
{
- { "listbinds", rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, false, &HandleInstanceListBindsCommand, "", NULL },
- { "unbind", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleInstanceUnbindCommand, "", NULL },
- { "stats", rbac::RBAC_PERM_COMMAND_INSTANCE_STATS, true, &HandleInstanceStatsCommand, "", NULL },
- { "savedata", rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, false, &HandleInstanceSaveDataCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "listbinds", rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, false, &HandleInstanceListBindsCommand, "", NULL },
+ { "unbind", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleInstanceUnbindCommand, "", NULL },
+ { "stats", rbac::RBAC_PERM_COMMAND_INSTANCE_STATS, true, &HandleInstanceStatsCommand, "", NULL },
+ { "savedata", rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, false, &HandleInstanceSaveDataCommand, "", NULL },
+ { "setbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_SET_BOSS_STATE, true, &HandleInstanceSetBossStateCommand, "", NULL },
+ { "getbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_GET_BOSS_STATE, true, &HandleInstanceGetBossStateCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
@@ -187,6 +189,138 @@ public:
return true;
}
+
+ static bool HandleInstanceSetBossStateCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ char* param1 = strtok((char*)args, " ");
+ char* param2 = strtok(nullptr, " ");
+ char* param3 = strtok(nullptr, " ");
+ uint32 encounterId = 0;
+ int32 state = 0;
+ Player* player = nullptr;
+ std::string playerName;
+
+ // Character name must be provided when using this from console.
+ if (!param2 || (!param3 && !handler->GetSession()))
+ {
+ handler->PSendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!param3)
+ player = handler->GetSession()->GetPlayer();
+ else
+ {
+ playerName = param3;
+ if (normalizePlayerName(playerName))
+ player = sObjectAccessor->FindPlayerByName(playerName);
+ }
+
+ if (!player)
+ {
+ handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Map* map = player->GetMap();
+ if (!map->IsDungeon())
+ {
+ handler->PSendSysMessage(LANG_NOT_DUNGEON);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!map->ToInstanceMap()->GetInstanceScript())
+ {
+ handler->PSendSysMessage(LANG_NO_INSTANCE_DATA);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ encounterId = atoi(param1);
+ state = atoi(param2);
+
+ // Reject improper values.
+ if (state > TO_BE_DECIDED || encounterId > map->ToInstanceMap()->GetInstanceScript()->GetEncounterCount())
+ {
+ handler->PSendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ map->ToInstanceMap()->GetInstanceScript()->SetBossState(encounterId, (EncounterState)state);
+ handler->PSendSysMessage(LANG_COMMAND_INST_SET_BOSS_STATE, encounterId, state);
+ return true;
+ }
+
+ static bool HandleInstanceGetBossStateCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ char* param1 = strtok((char*)args, " ");
+ char* param2 = strtok(nullptr, " ");
+ uint32 encounterId = 0;
+ Player* player = nullptr;
+ std::string playerName;
+
+ // Character name must be provided when using this from console.
+ if (!param1 || (!param2 && !handler->GetSession()))
+ {
+ handler->PSendSysMessage(LANG_CMD_SYNTAX);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!param2)
+ player = handler->GetSession()->GetPlayer();
+ else
+ {
+ playerName = param2;
+ if (normalizePlayerName(playerName))
+ player = sObjectAccessor->FindPlayerByName(playerName);
+ }
+
+ if (!player)
+ {
+ handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Map* map = player->GetMap();
+ if (!map->IsDungeon())
+ {
+ handler->PSendSysMessage(LANG_NOT_DUNGEON);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!map->ToInstanceMap()->GetInstanceScript())
+ {
+ handler->PSendSysMessage(LANG_NO_INSTANCE_DATA);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ encounterId = atoi(param1);
+
+ if (encounterId > map->ToInstanceMap()->GetInstanceScript()->GetEncounterCount())
+ {
+ handler->PSendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint8 state = map->ToInstanceMap()->GetInstanceScript()->GetBossState(encounterId);
+ handler->PSendSysMessage(LANG_COMMAND_INST_GET_BOSS_STATE, encounterId, state);
+ return true;
+ }
};
void AddSC_instance_commandscript()
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 75dbf975857..c34e32b134f 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -73,6 +73,7 @@ public:
{ "maxskill", rbac::RBAC_PERM_COMMAND_MAXSKILL, false, &HandleMaxSkillCommand, "", NULL },
{ "movegens", rbac::RBAC_PERM_COMMAND_MOVEGENS, false, &HandleMovegensCommand, "", NULL },
{ "mute", rbac::RBAC_PERM_COMMAND_MUTE, true, &HandleMuteCommand, "", NULL },
+ { "mutehistory", rbac::RBAC_PERM_COMMAND_MUTEHISTORY, true, &HandleMuteInfoCommand, "", NULL },
{ "neargrave", rbac::RBAC_PERM_COMMAND_NEARGRAVE, false, &HandleNearGraveCommand, "", NULL },
{ "pinfo", rbac::RBAC_PERM_COMMAND_PINFO, true, &HandlePInfoCommand, "", NULL },
{ "playall", rbac::RBAC_PERM_COMMAND_PLAYALL, false, &HandlePlayAllCommand, "", NULL },
@@ -1850,6 +1851,12 @@ public:
stmt->setString(2, muteBy.c_str());
stmt->setUInt32(3, accountId);
LoginDatabase.Execute(stmt);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_MUTE);
+ stmt->setUInt32(0, accountId);
+ stmt->setUInt32(1, notSpeakTime);
+ stmt->setString(2, muteBy.c_str());
+ stmt->setString(3, muteReasonStr.c_str());
+ LoginDatabase.Execute(stmt);
std::string nameLink = handler->playerLink(targetName);
if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
@@ -1909,6 +1916,65 @@ public:
return true;
}
+ // mutehistory command
+ static bool HandleMuteInfoCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ char *nameStr = strtok((char*)args, "");
+ if (!nameStr)
+ return false;
+
+ std::string accountName = nameStr;
+ if (!AccountMgr::normalizeString(accountName))
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 accountId = AccountMgr::GetId(accountName);
+ if (!accountId)
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
+ return false;
+ }
+
+ return HandleMuteInfoHelper(accountId, accountName.c_str(), handler);
+ }
+
+ // helper for mutehistory
+ static bool HandleMuteInfoHelper(uint32 accountId, char const* accountName, ChatHandler *handler)
+ {
+ PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_MUTE_INFO);
+ stmt->setUInt16(0, accountId);
+ PreparedQueryResult result = LoginDatabase.Query(stmt);
+
+ if (!result)
+ {
+ handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_EMPTY, accountName);
+ return true;
+ }
+
+ handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY, accountName);
+ do
+ {
+ Field* fields = result->Fetch();
+
+ // we have to manually set the string for mutedate
+ time_t sqlTime = fields[0].GetUInt32();
+ tm timeinfo;
+ char buffer[80];
+
+ // set it to string
+ localtime_r(&sqlTime, &timeinfo);
+ strftime(buffer, sizeof(buffer),"%Y-%m-%d %I:%M%p", &timeinfo);
+
+ handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_OUTPUT, buffer, fields[1].GetUInt32(), fields[2].GetCString(), fields[3].GetCString());
+ } while (result->NextRow());
+ return true;
+ }
static bool HandleMovegensCommand(ChatHandler* handler, char const* /*args*/)
{
diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp
index dc75e0aedab..fb486128049 100644
--- a/src/server/scripts/Commands/cs_quest.cpp
+++ b/src/server/scripts/Commands/cs_quest.cpp
@@ -238,6 +238,17 @@ public:
if (ReqOrRewMoney < 0)
player->ModifyMoney(-ReqOrRewMoney);
+ if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
+ {
+ // prepare Quest Tracker datas
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE);
+ stmt->setUInt32(0, quest->GetQuestId());
+ stmt->setUInt32(1, player->GetGUIDLow());
+
+ // add to Quest Tracker
+ CharacterDatabase.Execute(stmt);
+ }
+
player->CompleteQuest(entry);
return true;
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp
index fcabf3d1b18..44c41a6be0f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* 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
@@ -16,33 +15,29 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Shazzrah
-SD%Complete: 75
-SDComment: Teleport NYI
-SDCategory: Molten Core
-EndScriptData */
-
-#include "ObjectMgr.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellScript.h"
#include "molten_core.h"
enum Spells
{
- SPELL_ARCANE_EXPLOSION = 19712,
- SPELL_SHAZZRAH_CURSE = 19713,
- SPELL_MAGIC_GROUNDING = 19714,
- SPELL_COUNTERSPELL = 19715,
+ SPELL_ARCANE_EXPLOSION = 19712,
+ SPELL_SHAZZRAH_CURSE = 19713,
+ SPELL_MAGIC_GROUNDING = 19714,
+ SPELL_COUNTERSPELL = 19715,
+ SPELL_SHAZZRAH_GATE_DUMMY = 23138, // Teleports to and attacks a random target.
+ SPELL_SHAZZRAH_GATE = 23139,
};
enum Events
{
- EVENT_ARCANE_EXPLOSION = 1,
- EVENT_SHAZZRAH_CURSE = 2,
- EVENT_MAGIC_GROUNDING = 3,
- EVENT_COUNTERSPELL = 4,
- EVENT_BLINK = 5,
+ EVENT_ARCANE_EXPLOSION = 1,
+ EVENT_ARCANE_EXPLOSION_TRIGGERED = 2,
+ EVENT_SHAZZRAH_CURSE = 3,
+ EVENT_MAGIC_GROUNDING = 4,
+ EVENT_COUNTERSPELL = 5,
+ EVENT_SHAZZRAH_GATE = 6,
};
class boss_shazzrah : public CreatureScript
@@ -52,9 +47,7 @@ class boss_shazzrah : public CreatureScript
struct boss_shazzrahAI : public BossAI
{
- boss_shazzrahAI(Creature* creature) : BossAI(creature, BOSS_SHAZZRAH)
- {
- }
+ boss_shazzrahAI(Creature* creature) : BossAI(creature, BOSS_SHAZZRAH) { }
void EnterCombat(Unit* target) override
{
@@ -63,7 +56,7 @@ class boss_shazzrah : public CreatureScript
events.ScheduleEvent(EVENT_SHAZZRAH_CURSE, 10000);
events.ScheduleEvent(EVENT_MAGIC_GROUNDING, 24000);
events.ScheduleEvent(EVENT_COUNTERSPELL, 15000);
- events.ScheduleEvent(EVENT_BLINK, 30000);
+ events.ScheduleEvent(EVENT_SHAZZRAH_GATE, 45000);
}
void UpdateAI(uint32 diff) override
@@ -82,10 +75,14 @@ class boss_shazzrah : public CreatureScript
{
case EVENT_ARCANE_EXPLOSION:
DoCastVictim(SPELL_ARCANE_EXPLOSION);
- events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, urand(5000, 9000));
+ events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, urand(4000, 7000));
+ break;
+ // Triggered subsequent to using "Gate of Shazzrah".
+ case EVENT_ARCANE_EXPLOSION_TRIGGERED:
+ DoCastVictim(SPELL_ARCANE_EXPLOSION);
break;
case EVENT_SHAZZRAH_CURSE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -EVENT_SHAZZRAH_CURSE))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_SHAZZRAH_CURSE))
DoCast(target, SPELL_SHAZZRAH_CURSE);
events.ScheduleEvent(EVENT_SHAZZRAH_CURSE, urand(25000, 30000));
break;
@@ -97,16 +94,12 @@ class boss_shazzrah : public CreatureScript
DoCastVictim(SPELL_COUNTERSPELL);
events.ScheduleEvent(EVENT_COUNTERSPELL, urand(16000, 20000));
break;
- case EVENT_BLINK:
- // Teleporting him to a random player and casting Arcane Explosion after that.
- // Blink is not working cause of LoS System we need to do this hardcoded.
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100.0f, true))
- {
- DoTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
- DoCast(target, SPELL_ARCANE_EXPLOSION);
- DoResetThreat();
- }
- events.ScheduleEvent(EVENT_BLINK, 45000);
+ case EVENT_SHAZZRAH_GATE:
+ DoResetThreat();
+ DoCastAOE(SPELL_SHAZZRAH_GATE_DUMMY);
+ events.ScheduleEvent(EVENT_ARCANE_EXPLOSION_TRIGGERED, 2000);
+ events.RescheduleEvent(EVENT_ARCANE_EXPLOSION, urand(3000, 6000));
+ events.ScheduleEvent(EVENT_SHAZZRAH_GATE, 45000);
break;
default:
break;
@@ -123,7 +116,58 @@ class boss_shazzrah : public CreatureScript
}
};
+// 23138 - Gate of Shazzrah
+class spell_shazzrah_gate_dummy : public SpellScriptLoader
+{
+ public:
+ spell_shazzrah_gate_dummy() : SpellScriptLoader("spell_shazzrah_gate_dummy") { }
+
+ class spell_shazzrah_gate_dummy_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_shazzrah_gate_dummy_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAZZRAH_GATE))
+ return false;
+ return true;
+ }
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ if (targets.empty())
+ return;
+
+ WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
+ targets.clear();
+ targets.push_back(target);
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* target = GetHitUnit())
+ {
+ target->CastSpell(GetCaster(), SPELL_SHAZZRAH_GATE, true);
+ if (Creature* creature = GetCaster()->ToCreature())
+ creature->AI()->AttackStart(target); // Attack the target which caster will teleport to.
+ }
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_shazzrah_gate_dummy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
+ OnEffectHitTarget += SpellEffectFn(spell_shazzrah_gate_dummy_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_shazzrah_gate_dummy_SpellScript();
+ }
+};
+
void AddSC_boss_shazzrah()
{
new boss_shazzrah();
+ new spell_shazzrah_gate_dummy();
}
diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp
index 84541eb7b99..7d4c396f29e 100644
--- a/src/server/scripts/Northrend/isle_of_conquest.cpp
+++ b/src/server/scripts/Northrend/isle_of_conquest.cpp
@@ -73,6 +73,68 @@ class npc_four_car_garage : public CreatureScript
}
};
+enum Events
+{
+ EVENT_TALK = 1,
+ EVENT_DESPAWN
+};
+
+enum Texts
+{
+ SAY_ONBOARD = 0
+};
+
+class npc_ioc_gunship_captain : public CreatureScript
+{
+ public:
+ npc_ioc_gunship_captain() : CreatureScript("npc_ioc_gunship_captain") { }
+
+ struct npc_ioc_gunship_captainAI : public ScriptedAI
+ {
+ npc_ioc_gunship_captainAI(Creature* creature) : ScriptedAI(creature) { }
+
+ void DoAction(int32 action) override
+ {
+ if (action == ACTION_GUNSHIP_READY)
+ {
+ DoCast(me, SPELL_SIMPLE_TELEPORT);
+ _events.ScheduleEvent(EVENT_TALK, 3000);
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_TALK:
+ _events.ScheduleEvent(EVENT_DESPAWN, 1000);
+ Talk(SAY_ONBOARD);
+ DoCast(me, SPELL_TELEPORT_VISUAL_ONLY);
+ break;
+ case EVENT_DESPAWN:
+ if (me->GetMap()->ToBattlegroundMap())
+ if (Battleground* bgIoC = me->GetMap()->ToBattlegroundMap()->GetBG())
+ bgIoC->DelCreature(BG_IC_NPC_GUNSHIP_CAPTAIN_1);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ private:
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_ioc_gunship_captainAI(creature);
+ }
+};
+
class spell_ioc_gunship_portal : public SpellScriptLoader
{
public:
@@ -90,9 +152,28 @@ class spell_ioc_gunship_portal : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
Player* caster = GetCaster()->ToPlayer();
- if (Battleground* bg = caster->GetBattleground())
- if (bg->GetTypeID(true) == BATTLEGROUND_IC)
- bg->DoAction(1, caster->GetGUID());
+ /*
+ * HACK: GetWorldLocation() returns real position and not transportposition.
+ * ServertoClient: SMSG_MOVE_TELEPORT (0x0B39)
+ * counter: 45
+ * Tranpsort Guid: Full: xxxx Type: MOTransport Low: xxx
+ * Transport Position X: 0 Y: 0 Z: 0 O: 0
+ * Position: X: 7.305609 Y: -0.095246 Z: 34.51022 O: 0
+ */
+ caster->TeleportTo(GetHitCreature()->GetWorldLocation(), TELE_TO_NOT_LEAVE_TRANSPORT);
+ /*
+ * HACK: This aura should be added by 20212 and 20213 but can't find any SMSG_SPELL_GO. Could't find their position.
+ * ServerToClient: SMSG_AURA_UPDATE (0x0072)
+ * [0] CasterGUID: Full: xxxxx Type: Unit Entry: 20212 Low: xxx
+ * [0] Flags: None (0)
+ * [0] Caster Level: 60
+ * [0] Spell ID: 66656
+ * [0] Charges: 0
+ * [0] Effect Mask: 1
+ * [0] Slot: 37
+ * Guid: Full: xxxxx Type: Player2 Low: xxxxx
+ */
+ caster->AddAura(SPELL_PARACHUTE, caster);
}
void Register() override
@@ -107,11 +188,6 @@ class spell_ioc_gunship_portal : public SpellScriptLoader
}
};
-enum ParachuteIC
-{
- SPELL_PARACHUTE_IC = 66657
-};
-
class spell_ioc_parachute_ic : public SpellScriptLoader
{
public:
@@ -124,7 +200,7 @@ class spell_ioc_parachute_ic : public SpellScriptLoader
void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
{
if (Player* target = GetTarget()->ToPlayer())
- if (target->m_movementInfo.GetFallTime() > 2000)
+ if (target->m_movementInfo.GetFallTime() > 2000 && !target->GetTransport())
target->CastSpell(target, SPELL_PARACHUTE_IC, true);
}
@@ -140,9 +216,31 @@ class spell_ioc_parachute_ic : public SpellScriptLoader
}
};
-enum Launch
+class StartLaunchEvent : public BasicEvent
{
- SPELL_LAUNCH_NO_FALLING_DAMAGE = 66251
+ public:
+ StartLaunchEvent(float x, float y, float z, uint32 lowGuid) : _x(x), _y(y), _z(z), _lowGuid(lowGuid)
+ {
+ }
+
+ bool Execute(uint64 /*time*/, uint32 /*diff*/)
+ {
+ Player* player = sObjectMgr->GetPlayerByLowGUID(_lowGuid);
+ if (!player || !player->GetVehicle())
+ return true;
+
+ player->AddAura(SPELL_LAUNCH_NO_FALLING_DAMAGE, player); // prevents falling damage
+ float speedZ = 10.0f;
+ float dist = player->GetExactDist2d(_x, _y);
+
+ player->ExitVehicle();
+ player->GetMotionMaster()->MoveJump(_x, _y, _z, dist, speedZ);
+ return true;
+ }
+
+ private:
+ float _x, _y, _z;
+ uint32 _lowGuid;
};
class spell_ioc_launch : public SpellScriptLoader
@@ -154,34 +252,20 @@ class spell_ioc_launch : public SpellScriptLoader
{
PrepareSpellScript(spell_ioc_launch_SpellScript);
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- if (Player* player = GetHitPlayer())
- player->AddAura(SPELL_LAUNCH_NO_FALLING_DAMAGE, player); // prevents falling damage
- }
-
void Launch()
{
- WorldLocation const* const position = GetExplTargetDest();
-
- if (Player* player = GetHitPlayer())
- {
- player->ExitVehicle();
-
- // A better research is needed
- // There is no spell for this, the following calculation was based on void Spell::CalculateJumpSpeeds
-
- float speedZ = 10.0f;
- float dist = position->GetExactDist2d(player->GetPositionX(), player->GetPositionY());
- float speedXY = dist;
-
- player->GetMotionMaster()->MoveJump(position->GetPositionX(), position->GetPositionY(), position->GetPositionZ(), speedXY, speedZ);
- }
+ if (!GetCaster()->ToCreature() || !GetExplTargetDest())
+ return;
+
+ float x, y, z;
+ x = GetExplTargetDest()->GetPositionX();
+ y = GetExplTargetDest()->GetPositionY();
+ z = GetExplTargetDest()->GetPositionZ();
+ GetCaster()->ToCreature()->m_Events.AddEvent(new StartLaunchEvent(x, y, z, GetHitPlayer()->GetGUIDLow()), GetCaster()->ToCreature()->m_Events.CalculateTime(2500));
}
void Register() override
{
- OnEffectHitTarget += SpellEffectFn(spell_ioc_launch_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_FORCE_CAST);
AfterHit += SpellHitFn(spell_ioc_launch_SpellScript::Launch);
}
};
@@ -195,6 +279,7 @@ class spell_ioc_launch : public SpellScriptLoader
void AddSC_isle_of_conquest()
{
new npc_four_car_garage();
+ new npc_ioc_gunship_captain();
new spell_ioc_gunship_portal();
new spell_ioc_parachute_ic();
new spell_ioc_launch();
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 225920aa2dc..a774a8a7db7 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -3721,6 +3721,314 @@ public:
}
};
+enum RequiredMixologySpells
+{
+ SPELL_MIXOLOGY = 53042,
+ // Flasks
+ SPELL_FLASK_OF_THE_FROST_WYRM = 53755,
+ SPELL_FLASK_OF_STONEBLOOD = 53758,
+ SPELL_FLASK_OF_ENDLESS_RAGE = 53760,
+ SPELL_FLASK_OF_PURE_MOJO = 54212,
+ SPELL_LESSER_FLASK_OF_RESISTANCE = 62380,
+ SPELL_LESSER_FLASK_OF_TOUGHNESS = 53752,
+ SPELL_FLASK_OF_BLINDING_LIGHT = 28521,
+ SPELL_FLASK_OF_CHROMATIC_WONDER = 42735,
+ SPELL_FLASK_OF_FORTIFICATION = 28518,
+ SPELL_FLASK_OF_MIGHTY_RESTORATION = 28519,
+ SPELL_FLASK_OF_PURE_DEATH = 28540,
+ SPELL_FLASK_OF_RELENTLESS_ASSAULT = 28520,
+ SPELL_FLASK_OF_CHROMATIC_RESISTANCE = 17629,
+ SPELL_FLASK_OF_DISTILLED_WISDOM = 17627,
+ SPELL_FLASK_OF_SUPREME_POWER = 17628,
+ SPELL_FLASK_OF_THE_TITANS = 17626,
+ // Elixirs
+ SPELL_ELIXIR_OF_MIGHTY_AGILITY = 28497,
+ SPELL_ELIXIR_OF_ACCURACY = 60340,
+ SPELL_ELIXIR_OF_DEADLY_STRIKES = 60341,
+ SPELL_ELIXIR_OF_MIGHTY_DEFENSE = 60343,
+ SPELL_ELIXIR_OF_EXPERTISE = 60344,
+ SPELL_ELIXIR_OF_ARMOR_PIERCING = 60345,
+ SPELL_ELIXIR_OF_LIGHTNING_SPEED = 60346,
+ SPELL_ELIXIR_OF_MIGHTY_FORTITUDE = 53751,
+ SPELL_ELIXIR_OF_MIGHTY_MAGEBLOOD = 53764,
+ SPELL_ELIXIR_OF_MIGHTY_STRENGTH = 53748,
+ SPELL_ELIXIR_OF_MIGHTY_TOUGHTS = 60347,
+ SPELL_ELIXIR_OF_PROTECTION = 53763,
+ SPELL_ELIXIR_OF_SPIRIT = 53747,
+ SPELL_GURUS_ELIXIR = 53749,
+ SPELL_SHADOWPOWER_ELIXIR = 33721,
+ SPELL_WRATH_ELIXIR = 53746,
+ SPELL_ELIXIR_OF_EMPOWERMENT = 28514,
+ SPELL_ELIXIR_OF_MAJOR_MAGEBLOOD = 28509,
+ SPELL_ELIXIR_OF_MAJOR_SHADOW_POWER = 28503,
+ SPELL_ELIXIR_OF_MAJOR_DEFENSE = 28502,
+ SPELL_FEL_STRENGTH_ELIXIR = 38954,
+ SPELL_ELIXIR_OF_IRONSKIN = 39628,
+ SPELL_ELIXIR_OF_MAJOR_AGILITY = 54494,
+ SPELL_ELIXIR_OF_DRAENIC_WISDOM = 39627,
+ SPELL_ELIXIR_OF_MAJOR_FIREPOWER = 28501,
+ SPELL_ELIXIR_OF_MAJOR_FROST_POWER = 28493,
+ SPELL_EARTHEN_ELIXIR = 39626,
+ SPELL_ELIXIR_OF_MASTERY = 33726,
+ SPELL_ELIXIR_OF_HEALING_POWER = 28491,
+ SPELL_ELIXIR_OF_MAJOR_FORTITUDE = 39625,
+ SPELL_ELIXIR_OF_MAJOR_STRENGTH = 28490,
+ SPELL_ADEPTS_ELIXIR = 54452,
+ SPELL_ONSLAUGHT_ELIXIR = 33720,
+ SPELL_MIGHTY_TROLLS_BLOOD_ELIXIR = 24361,
+ SPELL_GREATER_ARCANE_ELIXIR = 17539,
+ SPELL_ELIXIR_OF_THE_MONGOOSE = 17538,
+ SPELL_ELIXIR_OF_BRUTE_FORCE = 17537,
+ SPELL_ELIXIR_OF_SAGES = 17535,
+ SPELL_ELIXIR_OF_SUPERIOR_DEFENSE = 11348,
+ SPELL_ELIXIR_OF_DEMONSLAYING = 11406,
+ SPELL_ELIXIR_OF_GREATER_FIREPOWER = 26276,
+ SPELL_ELIXIR_OF_SHADOW_POWER = 11474,
+ SPELL_MAGEBLOOD_ELIXIR = 24363,
+ SPELL_ELIXIR_OF_GIANTS = 11405,
+ SPELL_ELIXIR_OF_GREATER_AGILITY = 11334,
+ SPELL_ARCANE_ELIXIR = 11390,
+ SPELL_ELIXIR_OF_GREATER_INTELLECT = 11396,
+ SPELL_ELIXIR_OF_GREATER_DEFENSE = 11349,
+ SPELL_ELIXIR_OF_FROST_POWER = 21920,
+ SPELL_ELIXIR_OF_AGILITY = 11328,
+ SPELL_MAJOR_TROLLS_BLLOOD_ELIXIR = 3223,
+ SPELL_ELIXIR_OF_FORTITUDE = 3593,
+ SPELL_ELIXIR_OF_OGRES_STRENGTH = 3164,
+ SPELL_ELIXIR_OF_FIREPOWER = 7844,
+ SPELL_ELIXIR_OF_LESSER_AGILITY = 3160,
+ SPELL_ELIXIR_OF_DEFENSE = 3220,
+ SPELL_STRONG_TROLLS_BLOOD_ELIXIR = 3222,
+ SPELL_ELIXIR_OF_MINOR_ACCURACY = 63729,
+ SPELL_ELIXIR_OF_WISDOM = 3166,
+ SPELL_ELIXIR_OF_GIANTH_GROWTH = 8212,
+ SPELL_ELIXIR_OF_MINOR_AGILITY = 2374,
+ SPELL_ELIXIR_OF_MINOR_FORTITUDE = 2378,
+ SPELL_WEAK_TROLLS_BLOOD_ELIXIR = 3219,
+ SPELL_ELIXIR_OF_LIONS_STRENGTH = 2367,
+ SPELL_ELIXIR_OF_MINOR_DEFENSE = 673
+};
+
+class spell_gen_mixology_bonus : public SpellScriptLoader
+{
+public:
+ spell_gen_mixology_bonus() : SpellScriptLoader("spell_gen_mixology_bonus") { }
+
+ class spell_gen_mixology_bonus_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_mixology_bonus_AuraScript);
+
+ public:
+ spell_gen_mixology_bonus_AuraScript()
+ {
+ bonus = 0;
+ }
+
+ private:
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_MIXOLOGY))
+ return false;
+ return true;
+ }
+
+ bool Load() override
+ {
+ return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
+
+ void SetBonusValueForEffect(SpellEffIndex effIndex, int32 value, AuraEffect const* aurEff)
+ {
+ if (aurEff->GetEffIndex() == uint32(effIndex))
+ bonus = value;
+ }
+
+ void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
+ {
+ if (GetCaster()->HasAura(SPELL_MIXOLOGY) && GetCaster()->HasSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell))
+ {
+ switch (GetId())
+ {
+ case SPELL_WEAK_TROLLS_BLOOD_ELIXIR:
+ case SPELL_MAGEBLOOD_ELIXIR:
+ bonus = amount;
+ break;
+ case SPELL_ELIXIR_OF_FROST_POWER:
+ case SPELL_LESSER_FLASK_OF_TOUGHNESS:
+ case SPELL_LESSER_FLASK_OF_RESISTANCE:
+ bonus = CalculatePct(amount, 80);
+ break;
+ case SPELL_ELIXIR_OF_MINOR_DEFENSE:
+ case SPELL_ELIXIR_OF_LIONS_STRENGTH:
+ case SPELL_ELIXIR_OF_MINOR_AGILITY:
+ case SPELL_MAJOR_TROLLS_BLLOOD_ELIXIR:
+ case SPELL_ELIXIR_OF_SHADOW_POWER:
+ case SPELL_ELIXIR_OF_BRUTE_FORCE:
+ case SPELL_MIGHTY_TROLLS_BLOOD_ELIXIR:
+ case SPELL_ELIXIR_OF_GREATER_FIREPOWER:
+ case SPELL_ONSLAUGHT_ELIXIR:
+ case SPELL_EARTHEN_ELIXIR:
+ case SPELL_ELIXIR_OF_MAJOR_AGILITY:
+ case SPELL_FLASK_OF_THE_TITANS:
+ case SPELL_FLASK_OF_RELENTLESS_ASSAULT:
+ case SPELL_FLASK_OF_STONEBLOOD:
+ case SPELL_ELIXIR_OF_MINOR_ACCURACY:
+ bonus = CalculatePct(amount, 50);
+ break;
+ case SPELL_ELIXIR_OF_PROTECTION:
+ bonus = 280;
+ break;
+ case SPELL_ELIXIR_OF_MAJOR_DEFENSE:
+ bonus = 200;
+ break;
+ case SPELL_ELIXIR_OF_GREATER_DEFENSE:
+ case SPELL_ELIXIR_OF_SUPERIOR_DEFENSE:
+ bonus = 140;
+ break;
+ case SPELL_ELIXIR_OF_FORTITUDE:
+ bonus = 100;
+ break;
+ case SPELL_FLASK_OF_ENDLESS_RAGE:
+ bonus = 82;
+ break;
+ case SPELL_ELIXIR_OF_DEFENSE:
+ bonus = 70;
+ break;
+ case SPELL_ELIXIR_OF_DEMONSLAYING:
+ bonus = 50;
+ break;
+ case SPELL_FLASK_OF_THE_FROST_WYRM:
+ bonus = 47;
+ break;
+ case SPELL_WRATH_ELIXIR:
+ bonus = 32;
+ break;
+ case SPELL_ELIXIR_OF_MAJOR_FROST_POWER:
+ case SPELL_ELIXIR_OF_MAJOR_FIREPOWER:
+ case SPELL_ELIXIR_OF_MAJOR_SHADOW_POWER:
+ bonus = 29;
+ break;
+ case SPELL_ELIXIR_OF_MIGHTY_TOUGHTS:
+ bonus = 27;
+ break;
+ case SPELL_FLASK_OF_SUPREME_POWER:
+ case SPELL_FLASK_OF_BLINDING_LIGHT:
+ case SPELL_FLASK_OF_PURE_DEATH:
+ case SPELL_SHADOWPOWER_ELIXIR:
+ bonus = 23;
+ break;
+ case SPELL_ELIXIR_OF_MIGHTY_AGILITY:
+ case SPELL_FLASK_OF_DISTILLED_WISDOM:
+ case SPELL_ELIXIR_OF_SPIRIT:
+ case SPELL_ELIXIR_OF_MIGHTY_STRENGTH:
+ case SPELL_FLASK_OF_PURE_MOJO:
+ case SPELL_ELIXIR_OF_ACCURACY:
+ case SPELL_ELIXIR_OF_DEADLY_STRIKES:
+ case SPELL_ELIXIR_OF_MIGHTY_DEFENSE:
+ case SPELL_ELIXIR_OF_EXPERTISE:
+ case SPELL_ELIXIR_OF_ARMOR_PIERCING:
+ case SPELL_ELIXIR_OF_LIGHTNING_SPEED:
+ bonus = 20;
+ break;
+ case SPELL_FLASK_OF_CHROMATIC_RESISTANCE:
+ bonus = 17;
+ break;
+ case SPELL_ELIXIR_OF_MINOR_FORTITUDE:
+ case SPELL_ELIXIR_OF_MAJOR_STRENGTH:
+ bonus = 15;
+ break;
+ case SPELL_FLASK_OF_MIGHTY_RESTORATION:
+ bonus = 13;
+ break;
+ case SPELL_ARCANE_ELIXIR:
+ bonus = 12;
+ break;
+ case SPELL_ELIXIR_OF_GREATER_AGILITY:
+ case SPELL_ELIXIR_OF_GIANTS:
+ bonus = 11;
+ break;
+ case SPELL_ELIXIR_OF_AGILITY:
+ case SPELL_ELIXIR_OF_GREATER_INTELLECT:
+ case SPELL_ELIXIR_OF_SAGES:
+ case SPELL_ELIXIR_OF_IRONSKIN:
+ case SPELL_ELIXIR_OF_MIGHTY_MAGEBLOOD:
+ bonus = 10;
+ break;
+ case SPELL_ELIXIR_OF_HEALING_POWER:
+ bonus = 9;
+ break;
+ case SPELL_ELIXIR_OF_DRAENIC_WISDOM:
+ case SPELL_GURUS_ELIXIR:
+ bonus = 8;
+ break;
+ case SPELL_ELIXIR_OF_FIREPOWER:
+ case SPELL_ELIXIR_OF_MAJOR_MAGEBLOOD:
+ case SPELL_ELIXIR_OF_MASTERY:
+ bonus = 6;
+ break;
+ case SPELL_ELIXIR_OF_LESSER_AGILITY:
+ case SPELL_ELIXIR_OF_OGRES_STRENGTH:
+ case SPELL_ELIXIR_OF_WISDOM:
+ case SPELL_ELIXIR_OF_THE_MONGOOSE:
+ bonus = 5;
+ break;
+ case SPELL_STRONG_TROLLS_BLOOD_ELIXIR:
+ case SPELL_FLASK_OF_CHROMATIC_WONDER:
+ bonus = 4;
+ break;
+ case SPELL_ELIXIR_OF_EMPOWERMENT:
+ bonus = -10;
+ break;
+ case SPELL_ADEPTS_ELIXIR:
+ SetBonusValueForEffect(EFFECT_0, 13, aurEff);
+ SetBonusValueForEffect(EFFECT_1, 13, aurEff);
+ SetBonusValueForEffect(EFFECT_2, 8, aurEff);
+ break;
+ case SPELL_ELIXIR_OF_MIGHTY_FORTITUDE:
+ SetBonusValueForEffect(EFFECT_0, 160, aurEff);
+ break;
+ case SPELL_ELIXIR_OF_MAJOR_FORTITUDE:
+ SetBonusValueForEffect(EFFECT_0, 116, aurEff);
+ SetBonusValueForEffect(EFFECT_1, 6, aurEff);
+ break;
+ case SPELL_FEL_STRENGTH_ELIXIR:
+ SetBonusValueForEffect(EFFECT_0, 40, aurEff);
+ SetBonusValueForEffect(EFFECT_1, 40, aurEff);
+ break;
+ case SPELL_FLASK_OF_FORTIFICATION:
+ SetBonusValueForEffect(EFFECT_0, 210, aurEff);
+ SetBonusValueForEffect(EFFECT_1, 5, aurEff);
+ break;
+ case SPELL_GREATER_ARCANE_ELIXIR:
+ SetBonusValueForEffect(EFFECT_0, 19, aurEff);
+ SetBonusValueForEffect(EFFECT_1, 19, aurEff);
+ SetBonusValueForEffect(EFFECT_2, 5, aurEff);
+ break;
+ case SPELL_ELIXIR_OF_GIANTH_GROWTH:
+ SetBonusValueForEffect(EFFECT_0, 5, aurEff);
+ break;
+ default:
+ TC_LOG_ERROR("spells", "SpellId %u couldn't be processed in spell_gen_mixology_bonus", GetId());
+ break;
+ }
+ amount += bonus;
+ }
+ }
+
+ int32 bonus;
+
+ void Register() override
+ {
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_mixology_bonus_AuraScript::CalculateAmount, EFFECT_ALL, SPELL_AURA_ANY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_gen_mixology_bonus_AuraScript();
+ }
+};
+
void AddSC_generic_spell_scripts()
{
new spell_gen_absorb0_hitlimit1();
@@ -3805,4 +4113,5 @@ void AddSC_generic_spell_scripts()
new spell_gen_eject_all_passengers();
new spell_gen_gm_freeze();
new spell_gen_stand();
+ new spell_gen_mixology_bonus();
}
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 93828865a16..311c37e085f 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -2446,6 +2446,33 @@ public:
}
};
+class spell_q28813_set_health_random : public SpellScriptLoader
+{
+public:
+ spell_q28813_set_health_random() : SpellScriptLoader("spell_q28813_set_health_random") { }
+
+ class spell_q28813_set_health_random_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_q28813_set_health_random_SpellScript);
+
+ void HandleDummyEffect()
+ {
+ Unit* caster = GetCaster();
+ caster->SetHealth(caster->CountPctFromMaxHealth(urand(3, 5)*10));
+ }
+
+ void Register() override
+ {
+ OnCast += SpellCastFn(spell_q28813_set_health_random_SpellScript::HandleDummyEffect);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_q28813_set_health_random_SpellScript();
+ }
+};
+
void AddSC_quest_spell_scripts()
{
new spell_q55_sacred_cleansing();
@@ -2505,4 +2532,5 @@ void AddSC_quest_spell_scripts()
new spell_q14100_q14111_make_player_destroy_totems();
new spell_q10929_fumping();
new spell_q28813_get_our_boys_back_dummy();
+ new spell_q28813_set_health_random();
}
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index a0fb6e74a39..0c62ea19f99 100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -635,4 +635,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_INS_PVPSTATS_BATTLEGROUND, "INSERT INTO pvpstats_battlegrounds (id, winner_faction, bracket_id, type, date) VALUES (?, ?, ?, ?, NOW())", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_PVPSTATS_PLAYER, "INSERT INTO pvpstats_players (battleground_id, character_guid, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done, attr_1, attr_2, attr_3, attr_4, attr_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ // QuestTracker
+ PrepareStatement(CHAR_INS_QUEST_TRACK, "INSERT INTO quest_tracker (id, character_guid, quest_accept_time, core_hash, core_revision) VALUES (?, ?, NOW(), ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE, "UPDATE quest_tracker SET completed_by_gm = 1 WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_UPD_QUEST_TRACK_COMPLETE_TIME, "UPDATE quest_tracker SET quest_complete_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_UPD_QUEST_TRACK_ABANDON_TIME, "UPDATE quest_tracker SET quest_abandon_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC);
}
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
index 4764d653f17..18eb2e09c5d 100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.h
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
@@ -563,6 +563,11 @@ enum CharacterDatabaseStatements
CHAR_INS_PVPSTATS_BATTLEGROUND,
CHAR_INS_PVPSTATS_PLAYER,
+ CHAR_INS_QUEST_TRACK,
+ CHAR_UPD_QUEST_TRACK_GM_COMPLETE,
+ CHAR_UPD_QUEST_TRACK_COMPLETE_TIME,
+ CHAR_UPD_QUEST_TRACK_ABANDON_TIME,
+
MAX_CHARACTERDATABASE_STATEMENTS
};
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp
index 2bdbc70933d..4aa8adac764 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp
@@ -112,6 +112,9 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_INS_RBAC_ACCOUNT_PERMISSION, "INSERT INTO rbac_account_permissions (accountId, permissionId, granted, realmId) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE granted = VALUES(granted)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_DEL_RBAC_ACCOUNT_PERMISSION, "DELETE FROM rbac_account_permissions WHERE accountId = ? AND permissionId = ? AND (realmId = ? OR realmId = -1)", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_INS_ACCOUNT_MUTE, "INSERT INTO account_muted VALUES (?, UNIX_TIMESTAMP(), ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_SEL_ACCOUNT_MUTE_INFO, "SELECT mutedate, mutetime, mutereason, mutedby FROM account_muted WHERE guid = ? ORDER BY mutedate ASC", CONNECTION_SYNCH);
+
PrepareStatement(LOGIN_SEL_BNET_ACCOUNT_INFO, "SELECT sha_pass_hash, id, locked, lock_country, last_ip, v, s FROM battlenet_accounts WHERE email = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_DEL_BNET_EXPIRED_BANS, "UPDATE battlenet_account_bans SET active = 0 WHERE active = 1 AND unbandate <> bandate AND unbandate <= UNIX_TIMESTAMP()", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_BNET_ACTIVE_ACCOUNT_BAN, "SELECT bandate, unbandate FROM battlenet_account_bans WHERE id = ? AND active = 1", CONNECTION_SYNCH);
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h
index c1816784f07..bfbbc9023e2 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.h
+++ b/src/server/shared/Database/Implementation/LoginDatabase.h
@@ -128,6 +128,9 @@ enum LoginDatabaseStatements
LOGIN_INS_RBAC_ACCOUNT_PERMISSION,
LOGIN_DEL_RBAC_ACCOUNT_PERMISSION,
+ LOGIN_INS_ACCOUNT_MUTE,
+ LOGIN_SEL_ACCOUNT_MUTE_INFO
+
LOGIN_SEL_BNET_ACCOUNT_INFO,
LOGIN_DEL_BNET_EXPIRED_BANS,
LOGIN_SEL_BNET_ACTIVE_ACCOUNT_BAN,
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 57d97756d70..de62005642b 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -821,6 +821,14 @@ Instance.UnloadDelay = 1800000
InstancesResetAnnounce = false
#
+# Quests.EnableQuestTracker
+# Description: Store datas in the database about quest completion and abandonment to help finding out bugged quests.
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+Quests.EnableQuestTracker = 0
+
+#
# Quests.LowLevelHideDiff
# Description: Level difference between player and quest level at which quests are
# considered low-level and are not shown via exclamation mark (!) at quest