diff --git a/sql/mangos.sql b/sql/mangos.sql index cd306f1f6..c9d23fbec 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -22,7 +22,7 @@ DROP TABLE IF EXISTS `db_version`; CREATE TABLE `db_version` ( `version` varchar(120) default NULL, - `required_7388_01_mangos_mangos_string` bit(1) default NULL + `required_7390_01_mangos_areatrigger_teleport` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -135,6 +135,7 @@ CREATE TABLE `areatrigger_teleport` ( `heroic_key` mediumint(8) unsigned NOT NULL default '0', `heroic_key2` mediumint(8) unsigned NOT NULL default '0', `required_quest_done` int(11) unsigned NOT NULL default '0', + `required_quest_done_heroic` int(11) unsigned NOT NULL default '0', `required_failed_text` text, `target_map` smallint(5) unsigned NOT NULL default '0', `target_position_x` float NOT NULL default '0', diff --git a/sql/updates/7388_01_mangos_mangos_string.sql b/sql/updates/7388_01_mangos_mangos_string.sql index 07f60a7fe..5a876e713 100644 --- a/sql/updates/7388_01_mangos_mangos_string.sql +++ b/sql/updates/7388_01_mangos_mangos_string.sql @@ -1,3 +1,5 @@ -DELETE FROM mangos_string WHERE entry = 726; +ALTER TABLE db_version CHANGE COLUMN required_7382_01_mangos_creature_template required_7388_01_mangos_mangos_string bit; + +DELETE FROM mangos_string WHERE entry IN (750,751); INSERT INTO mangos_string VALUES (750,'Not enough players. This game will close in %u mins.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); INSERT INTO mangos_string VALUES (751,'Not enough players. This game will close in %u seconds.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); diff --git a/sql/updates/7390_01_mangos_areatrigger_teleport.sql b/sql/updates/7390_01_mangos_areatrigger_teleport.sql new file mode 100644 index 000000000..784272a57 --- /dev/null +++ b/sql/updates/7390_01_mangos_areatrigger_teleport.sql @@ -0,0 +1,4 @@ +ALTER TABLE db_version CHANGE COLUMN required_7388_01_mangos_mangos_string required_7390_01_mangos_areatrigger_teleport bit; + +ALTER TABLE areatrigger_teleport + ADD COLUMN required_quest_done_heroic int(11) unsigned NOT NULL default '0' AFTER required_quest_done; \ No newline at end of file diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 804fb97bd..4d541d014 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -192,6 +192,7 @@ pkgdata_DATA = \ 7376_01_mangos_spell_area.sql \ 7382_01_mangos_creature_template.sql \ 7388_01_mangos_mangos_string.sql \ + 7390_01_mangos_areatrigger_teleport.sql \ README ## Additional files to include when running 'make dist' @@ -364,4 +365,5 @@ EXTRA_DIST = \ 7376_01_mangos_spell_area.sql \ 7382_01_mangos_creature_template.sql \ 7388_01_mangos_mangos_string.sql \ + 7390_01_mangos_areatrigger_teleport.sql \ README diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 5258f4778..d52d80c10 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -859,8 +859,16 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data) } uint32 missingQuest = 0; - if(at->requiredQuest && !GetPlayer()->GetQuestRewardStatus(at->requiredQuest)) - missingQuest = at->requiredQuest; + if(GetPlayer()->GetDifficulty() == DIFFICULTY_HEROIC) + { + if (at->requiredQuestHeroic && !GetPlayer()->GetQuestRewardStatus(at->requiredQuestHeroic)) + missingQuest = at->requiredQuestHeroic; + } + else + { + if(at->requiredQuest && !GetPlayer()->GetQuestRewardStatus(at->requiredQuest)) + missingQuest = at->requiredQuest; + } if(missingLevel || missingItem || missingKey || missingQuest) { diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index df7e6ab5b..948f7d06a 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -4849,8 +4849,8 @@ void ObjectMgr::LoadAreaTriggerTeleports() uint32 count = 0; - // 0 1 2 3 4 5 6 7 8 9 10 11 12 - QueryResult *result = WorldDatabase.Query("SELECT id, required_level, required_item, required_item2, heroic_key, heroic_key2, required_quest_done, required_failed_text, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM areatrigger_teleport"); + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + QueryResult *result = WorldDatabase.Query("SELECT id, required_level, required_item, required_item2, heroic_key, heroic_key2, required_quest_done, required_quest_done_heroic, required_failed_text, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM areatrigger_teleport"); if( !result ) { @@ -4877,18 +4877,19 @@ void ObjectMgr::LoadAreaTriggerTeleports() AreaTrigger at; - at.requiredLevel = fields[1].GetUInt8(); - at.requiredItem = fields[2].GetUInt32(); - at.requiredItem2 = fields[3].GetUInt32(); - at.heroicKey = fields[4].GetUInt32(); - at.heroicKey2 = fields[5].GetUInt32(); - at.requiredQuest = fields[6].GetUInt32(); - at.requiredFailedText = fields[7].GetCppString(); - at.target_mapId = fields[8].GetUInt32(); - at.target_X = fields[9].GetFloat(); - at.target_Y = fields[10].GetFloat(); - at.target_Z = fields[11].GetFloat(); - at.target_Orientation = fields[12].GetFloat(); + at.requiredLevel = fields[1].GetUInt8(); + at.requiredItem = fields[2].GetUInt32(); + at.requiredItem2 = fields[3].GetUInt32(); + at.heroicKey = fields[4].GetUInt32(); + at.heroicKey2 = fields[5].GetUInt32(); + at.requiredQuest = fields[6].GetUInt32(); + at.requiredQuestHeroic = fields[7].GetUInt32(); + at.requiredFailedText = fields[8].GetCppString(); + at.target_mapId = fields[9].GetUInt32(); + at.target_X = fields[10].GetFloat(); + at.target_Y = fields[11].GetFloat(); + at.target_Z = fields[12].GetFloat(); + at.target_Orientation = fields[13].GetFloat(); AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(Trigger_ID); if(!atEntry) @@ -4945,6 +4946,15 @@ void ObjectMgr::LoadAreaTriggerTeleports() } } + if(at.requiredQuestHeroic) + { + if(!mQuestTemplates[at.requiredQuestHeroic]) + { + sLog.outErrorDb("Required Quest %u not exist for trigger %u, remove quest done requirement.",at.requiredQuestHeroic,Trigger_ID); + at.requiredQuestHeroic = 0; + } + } + MapEntry const* mapEntry = sMapStore.LookupEntry(at.target_mapId); if(!mapEntry) { diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 011edb85d..89047f60f 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -103,6 +103,7 @@ struct AreaTrigger uint32 heroicKey; uint32 heroicKey2; uint32 requiredQuest; + uint32 requiredQuestHeroic; std::string requiredFailedText; uint32 target_mapId; float target_X; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ee9321bda..8fc9ed7d7 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7389" + #define REVISION_NR "7390" #endif // __REVISION_NR_H__