diff options
author | Nay <dnpd.dd@gmail.com> | 2012-12-24 22:20:17 +0000 |
---|---|---|
committer | Nay <dnpd.dd@gmail.com> | 2012-12-24 22:20:17 +0000 |
commit | 81fee56bfe5b1fd596ef2e3183c55c84adb023fe (patch) | |
tree | 2ac0cde9f2d4d7e77a377a190ba6a2a4693b7c16 | |
parent | d3d9dfd7346b46eb0994ab89ac97a09d5dbde2fb (diff) | |
parent | a05bc2fcfddee05c061505c55c4733339c47f6bf (diff) |
Merge remote-tracking branch 'origin/master' into 4.3.4
Conflicts:
src/server/game/Entities/Unit/Unit.cpp
src/server/game/Quests/QuestDef.h
-rw-r--r-- | sql/updates/world/2012_12_24_09_world_sai.sql | 2 | ||||
-rw-r--r-- | sql/updates/world/2012_12_25_00_world_sai.sql | 40 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.cpp | 21 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.h | 4 |
7 files changed, 69 insertions, 20 deletions
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; 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'); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 52002fd39bd..676304a7ece 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16065,7 +16065,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->HasSpecialFlag(QUEST_SPECIAL_FLAGS_KILL_OR_CAST)) { @@ -16120,7 +16120,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->HasSpecialFlag(QUEST_SPECIAL_FLAGS_PLAYER_KILL)) { @@ -16388,7 +16388,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; @@ -23144,7 +23144,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/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index de1044271c9..5f163bc33b0 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -16695,7 +16695,6 @@ void Unit::SendTeleportPacket(Position& pos) data.WriteBit(transGuid[6]); data.WriteBit(transGuid[4]); } - data.WriteBit(guid[4]); data.WriteBit(guid[7]); data.WriteBit(guid[5]); @@ -16731,7 +16730,6 @@ void Unit::SendTeleportPacket(Position& pos) Relocate(&pos); else Relocate(&oldPos); - SendMessageToSet(&data, true); } diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index cb10b607c4a..94c7b345ea1 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -474,16 +474,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 d9c8b480c6f..1c8fdfacf11 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -328,9 +328,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 086dab4a284..3e91ba2ac8c 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -291,8 +291,8 @@ class Quest bool IsMonthly() const { return Flags & QUEST_SPECIAL_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 SpecialFlags & QUEST_SPECIAL_FLAGS_DF_QUEST; } uint32 CalculateHonorGain(uint8 level) const; |