From 506011cda69e2094ef7b3e7c3e11d623a2ec37d6 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 18 May 2019 04:49:11 +0200 Subject: [PATCH] Scripts/Uldum: ported db updates for "Dirty Birds" * added generic spell script to correctly filter targets for launch quest spells * added launch quest spell to Mangy Hyjenas --- .../custom/custom_2019_05_18_02_world.sql | 29 ++++++++++++++ src/server/scripts/Spells/spell_generic.cpp | 40 ++++++++++++++++++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/custom/custom_2019_05_18_02_world.sql diff --git a/sql/updates/world/custom/custom_2019_05_18_02_world.sql b/sql/updates/world/custom/custom_2019_05_18_02_world.sql new file mode 100644 index 0000000000..ad1771041a --- /dev/null +++ b/sql/updates/world/custom/custom_2019_05_18_02_world.sql @@ -0,0 +1,29 @@ +-- Diseased Vulture SAI +SET @ENTRY := 47202; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY) AND `source_type`=0 AND `id`=1; +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`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,1,0,6,0,100,0,0,0,0,0,0,11,87965,2,0,0,0,0,1,0,0,0,0,0,0,0,"Diseased Vulture - On Death - Cast '87965'"); + +-- Remove npcflags. Quest is not offered by the npc +UPDATE `creature_template` SET `npcflag`=0 WHERE `entry`=47202; + +-- Remove quest starter +DELETE FROM `creature_queststarter` WHERE `quest`=27940; + +-- Condition for source Quest available condition type Quest taken +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=19 AND `SourceGroup`=0 AND `SourceEntry`=27940 AND `SourceId`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(19, 0, 27940, 0, 1, 14, 0, 27928, 0, 0, 0, 0, 0, '', 'Quest Dirty Birds available if quest A Favor for the Furrier has not not been taken.'), +(19, 0, 27940, 0, 1, 14, 0, 27939, 0, 0, 0, 0, 0, '', 'Quest Dirty Birds available if quest The Desert Fox has not not been taken.'); + +DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_gen_launch_quest' AND `spell_id`= 87965; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(87965, 'spell_gen_launch_quest'); + +-- Creature Mangy Hyena 45202 SAI +SET @ENTRY := 45202; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`= @ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@ENTRY, 0, 0, 0, 0, 0, 100, 0, 5000, 8000, 12000, 12000, 11, 85415, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 5000 and 8000 ms (and later repeats every 12000 and 12000 ms) - Self: Cast spell Mangle (85415) on Victim // Mangy Hyena - In Combat - Cast 'Mangle'"), +(@ENTRY, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 11, 84437, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "On death - Self: Cast spell Launch Quest (84437) on Self // "); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 852b99813a..89dc73f84e 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -4937,6 +4937,44 @@ class spell_gen_reverse_cast_ride_vehicle : public SpellScript } }; +class GroupMemberCheck +{ +public: + GroupMemberCheck(Player* player) : _player(player) { } + + bool operator()(WorldObject* object) + { + if (Player* player = object->ToPlayer()) + return !player->IsInSameGroupWith(_player); + + return false; + } +private: + Player* _player; +}; + +class spell_gen_launch_quest : public SpellScript +{ + PrepareSpellScript(spell_gen_launch_quest); + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } + + void FilterTargets(std::list& targets) + { + if (targets.size() > 1) + if (Player* player = GetCaster()->ToCreature()->GetLootRecipient()) + targets.remove_if(GroupMemberCheck(player)); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gen_launch_quest::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -5050,5 +5088,5 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_revserse_cast_mirror_image); RegisterSpellScript(spell_gen_mirror_image_aura); RegisterSpellScript(spell_gen_reverse_cast_ride_vehicle); - + RegisterSpellScript(spell_gen_launch_quest); }