From 6b7716a7e7c2735fb24548b2a94501c799ab6a60 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Mon, 24 Dec 2012 13:11:01 -0330 Subject: [PATCH 1/4] DB/SAI: correct some issues with Eliza's Grave Dirt Previous Commit Fix by vincent_michael --- sql/updates/world/2012_12_24_09_world_sai.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2012_12_24_09_world_sai.sql diff --git a/sql/updates/world/2012_12_24_09_world_sai.sql b/sql/updates/world/2012_12_24_09_world_sai.sql new file mode 100644 index 00000000000..d75dd937598 --- /dev/null +++ b/sql/updates/world/2012_12_24_09_world_sai.sql @@ -0,0 +1,2 @@ +-- DB/SAI: correct some issues with Eliza's Grave Dirt Previous Commit +UPDATE `smart_scripts` SET `event_param1`=15,`event_param2`=100 WHERE `entryorguid`=314 AND `source_type`=0 AND `id`=13; From 75e7cf7eb5ba0218eb5d29d8f961a619347df78d Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 24 Dec 2012 19:53:28 +0100 Subject: [PATCH 2/4] Core/Quests: Added support for 10/25 man only raid quests --- src/server/game/Entities/Player/Player.cpp | 8 ++++---- src/server/game/Handlers/QuestHandler.cpp | 12 ++---------- src/server/game/Quests/QuestDef.cpp | 21 +++++++++++++++++++-- src/server/game/Quests/QuestDef.h | 4 ++-- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 87a7b2e6277..f85a251f010 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16036,7 +16036,7 @@ void Player::KilledMonsterCredit(uint32 entry, uint64 guid) continue; // just if !ingroup || !noraidgroup || raidgroup QuestStatusData& q_status = m_QuestStatus[questid]; - if (q_status.Status == QUEST_STATUS_INCOMPLETE && (!GetGroup() || !GetGroup()->isRaidGroup() || qInfo->IsAllowedInRaid())) + if (q_status.Status == QUEST_STATUS_INCOMPLETE && (!GetGroup() || !GetGroup()->isRaidGroup() || qInfo->IsAllowedInRaid(GetMap()->GetDifficulty()))) { if (qInfo->HasFlag(QUEST_TRINITY_FLAGS_KILL_OR_CAST)) { @@ -16091,7 +16091,7 @@ void Player::KilledPlayerCredit() continue; // just if !ingroup || !noraidgroup || raidgroup QuestStatusData& q_status = m_QuestStatus[questid]; - if (q_status.Status == QUEST_STATUS_INCOMPLETE && (!GetGroup() || !GetGroup()->isRaidGroup() || qInfo->IsAllowedInRaid())) + if (q_status.Status == QUEST_STATUS_INCOMPLETE && (!GetGroup() || !GetGroup()->isRaidGroup() || qInfo->IsAllowedInRaid(GetMap()->GetDifficulty()))) { if (qInfo->HasFlag(QUEST_TRINITY_FLAGS_PLAYER_KILL)) { @@ -16359,7 +16359,7 @@ bool Player::HasQuestForItem(uint32 itemid) const continue; // hide quest if player is in raid-group and quest is no raid quest - if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid()) + if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid(GetMap()->GetDifficulty())) if (!InBattleground()) //there are two ways.. we can make every bg-quest a raidquest, or add this code here.. i don't know if this can be exploited by other quests, but i think all other quests depend on a specific area.. but keep this in mind, if something strange happens later continue; @@ -22767,7 +22767,7 @@ bool Player::HasQuestForGO(int32 GOId) const if (!qinfo) continue; - if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid()) + if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid(GetMap()->GetDifficulty())) continue; for (uint8 j = 0; j < QUEST_OBJECTIVES_COUNT; ++j) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 8b230ae05c9..8181bdd6b6e 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -461,16 +461,8 @@ void WorldSession::HandleQuestConfirmAccept(WorldPacket& recvData) if (!pOriginalPlayer) return; - if (quest->IsRaidQuest()) - { - if (!_player->IsInSameRaidWith(pOriginalPlayer)) - return; - } - else - { - if (!_player->IsInSameGroupWith(pOriginalPlayer)) - return; - } + if (!_player->IsInSameRaidWith(pOriginalPlayer)) + return; if (_player->CanAddQuest(quest, true)) _player->AddQuest(quest, NULL); // NULL, this prevent DB script from duplicate running diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 1238afe2ee1..a918a19334f 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -219,9 +219,26 @@ bool Quest::IsAutoComplete() const return sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_COMPLETE) ? false : (Method == 0 || HasFlag(QUEST_FLAGS_AUTOCOMPLETE)); } -bool Quest::IsAllowedInRaid() const +bool Quest::IsRaidQuest(Difficulty difficulty) const { - if (IsRaidQuest()) + switch (Type) + { + case QUEST_TYPE_RAID: + return true; + case QUEST_TYPE_RAID_10: + return !(difficulty & RAID_DIFFICULTY_MASK_25MAN); + case QUEST_TYPE_RAID_25: + return difficulty & RAID_DIFFICULTY_MASK_25MAN; + default: + break; + } + + return false; +} + +bool Quest::IsAllowedInRaid(Difficulty difficulty) const +{ + if (IsRaidQuest(difficulty)) return true; return sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_RAID); diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 61b3de5f327..8b18872b016 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -254,8 +254,8 @@ class Quest bool IsMonthly() const { return Flags & QUEST_TRINITY_FLAGS_MONTHLY; } bool IsSeasonal() const { return (ZoneOrSort == -QUEST_SORT_SEASONAL || ZoneOrSort == -QUEST_SORT_SPECIAL || ZoneOrSort == -QUEST_SORT_LUNAR_FESTIVAL || ZoneOrSort == -QUEST_SORT_MIDSUMMER || ZoneOrSort == -QUEST_SORT_BREWFEST || ZoneOrSort == -QUEST_SORT_LOVE_IS_IN_THE_AIR || ZoneOrSort == -QUEST_SORT_NOBLEGARDEN) && !IsRepeatable(); } bool IsDailyOrWeekly() const { return Flags & (QUEST_FLAGS_DAILY | QUEST_FLAGS_WEEKLY); } - bool IsRaidQuest() const { return Type == QUEST_TYPE_RAID || Type == QUEST_TYPE_RAID_10 || Type == QUEST_TYPE_RAID_25; } - bool IsAllowedInRaid() const; + bool IsRaidQuest(Difficulty difficulty) const; + bool IsAllowedInRaid(Difficulty difficulty) const; bool IsDFQuest() const { return Flags & QUEST_TRINITY_FLAGS_DF_QUEST; } uint32 CalculateHonorGain(uint8 level) const; From 6189eeb8e639aeff6e722c28174a041a1048c7d4 Mon Sep 17 00:00:00 2001 From: Trista Date: Mon, 24 Dec 2012 23:59:25 +0200 Subject: [PATCH 3/4] Core/Movement: Fix codestyle -7092e9350bbb8123de688be0bf5dd87d8196d34f --- src/server/game/Entities/Unit/Unit.cpp | 5 +---- src/server/game/Entities/Unit/Unit.h | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2b956f028c7..320204ed892 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -17325,7 +17325,6 @@ void Unit::NearTeleportTo(float x, float y, float z, float orientation, bool cas else { Position pos = {x, y, z, orientation}; - SendTeleportPacket(pos); UpdatePosition(x, y, z, orientation, true); UpdateObjectVisibility(); @@ -17342,12 +17341,10 @@ void Unit::SendTeleportPacket(Position& pos) WorldPacket data2(MSG_MOVE_TELEPORT, 38); data2.append(GetPackGUID()); BuildMovementPacket(&data2); - if (GetTypeId() == TYPEID_UNIT) - Relocate(&oldPos); + Relocate(&oldPos); if (GetTypeId() == TYPEID_PLAYER) Relocate(&pos); - SendMessageToSet(&data2, true); } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index e46fbb99a8c..f83a5409f6e 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1592,7 +1592,7 @@ class Unit : public WorldObject void SendSpellDamageImmune(Unit* target, uint32 spellId); void NearTeleportTo(float x, float y, float z, float orientation, bool casting = false); - void SendTeleportPacket(Position& oldPos); + void SendTeleportPacket(Position& pos); virtual bool UpdatePosition(float x, float y, float z, float ang, bool teleport = false); // returns true if unit's position really changed bool UpdatePosition(const Position &pos, bool teleport = false) { return UpdatePosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teleport); } From a05bc2fcfddee05c061505c55c4733339c47f6bf Mon Sep 17 00:00:00 2001 From: Trista Date: Tue, 25 Dec 2012 00:05:08 +0200 Subject: [PATCH 4/4] DB/Quest: Jin'arrak's End * This covers all that involve main quest mechanics npcs + awarding quest * However 2nd effect of http://www.wowhead.com/spell=48059 needs to be scripted, it is supposed to spawn a lot of guids - it's the event * It closes the problem in #4552, however event remains so leaving it open, I won't spawn them --- sql/updates/world/2012_12_25_00_world_sai.sql | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 sql/updates/world/2012_12_25_00_world_sai.sql diff --git a/sql/updates/world/2012_12_25_00_world_sai.sql b/sql/updates/world/2012_12_25_00_world_sai.sql new file mode 100644 index 00000000000..33363d33573 --- /dev/null +++ b/sql/updates/world/2012_12_25_00_world_sai.sql @@ -0,0 +1,40 @@ +-- Add support for quest: http://www.wowhead.com/quest=12152 +-- Indexes +-- TO DO: Add spawns with "Place Offering" Effect 1 - send event for the npc that come after ward summon Jin'Jarrack, also put his spawn in that spell, if anyone ever do it +SET @OFFERING_BUNNY := 27200; +SET @OFFERING_TARGET_BUNNY := 27201; +SET @JIN_ARRAK := 27199; +SET @SCRIPT := @JIN_ARRAK * 100; + +-- Template updates +UPDATE `creature_template` SET `AIName`='SmartAI',`unit_flags`=unit_flags|0x00000100|0x00000200,`faction_A`=14,`faction_H`=14 WHERE `entry`=@JIN_ARRAK; +UPDATE `creature_template` SET `unit_flags`=unit_flags|0x00000100|0x02000000,`flags_extra`=0x00000080,`AIName`='SmartAI' WHERE `entry`=@OFFERING_BUNNY; +UPDATE `creature_template` SET `unit_flags`=unit_flags|0x00000100|0x02000000,`flags_extra`=0x00000080 WHERE `entry`=@OFFERING_TARGET_BUNNY; + +-- SAI support +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@OFFERING_BUNNY,@JIN_ARRAK) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@SCRIPT 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 +(@OFFERING_BUNNY,0,0,1,54,0,100,0,0,0,0,0,11,48059,0,0,0,0,0,1,0,0,0,0,0,0,0,'Offering Bunny - On just summoned - Cast spell that send event'), +(@OFFERING_BUNNY,0,1,2,61,0,100,0,0,0,0,0,11,48194,0,0,0,0,0,0,0,0,0,0,0,0,0,'Offering Bunny - Linked - Cast kill credit spell'), +(@OFFERING_BUNNY,0,2,0,61,0,100,0,0,0,0,0,12,@JIN_ARRAK,3,30000,0,0,0,8,0,0,0,4678.617,-4859.459,35.56327,3.124139,'Offering Bunny - Linked - Summon Jin''Arrack [need to be put in the spell event, when all rest are added]'), +(@JIN_ARRAK,0,0,1,54,0,100,0,0,0,0,0,11,17327,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - On just summoned - Cast Spirit Particles on self'), +(@JIN_ARRAK,0,1,2,61,0,100,0,0,0,0,0,5,15,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Linked - Play emote roar'), +(@JIN_ARRAK,0,2,0,61,0,100,0,0,0,0,0,80,@SCRIPT,2,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Linked - Start actionlist'), +(@SCRIPT,9,0,0,0,0,100,0,1500,1500,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Action 0 - Say 0'), +(@SCRIPT,9,1,0,0,0,100,0,1000,1000,0,0,11,48060,0,0,0,0,0,19,@OFFERING_BUNNY,0,0,0,0,0,0,'Warlord Jin''Arrak - Action 1 - Cast feed'), +(@SCRIPT,9,2,0,0,0,100,0,0,0,0,0,11,31951,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Action 2 - Cast super particle on self'), +(@SCRIPT,9,3,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Action 3 - Say 2'), +(@SCRIPT,9,4,0,0,0,100,0,100,100,0,0,90,7,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Action 4 - Set field_byte_1 to 7'); + +-- Texts +DELETE FROM `creature_text` WHERE `entry`=@JIN_ARRAK; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@JIN_ARRAK,0,0,'Finally, a worthy offering!',41,0,100,15,0,0, 'Warlord Jin''Arrak'), +(@JIN_ARRAK,1,0,'Ahhh! What be happenin'' to me, mon?',41,0,100,0,0,0, 'Warlord Jin''Arrak'); + +-- Conditions +DELETE FROM `conditions` WHERE `SourceEntry`=48194 AND `SourceTypeOrReferenceId`=13; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13,1,48194,0,0,32,0,144,0,0,0,0,'', 'Jin''Arrak quest kill credit can hit only players'), +(13,1,48194,0,0,9,0,12152,0,0,0,0,'', 'Jin''Arrak quest kill credit hit target must be on quest Jin''Arrak end');