fix(DB/Core): Play "Lament of the Highborne" as music instead of sound (#1926)

* fix(DB/Core): Play "Lament of the Highborne" as music instead of sound

* Update ScriptedCreature.cpp

* Update rev_1559456042362460279.sql

* Update rev_1559456042362460279.sql

* Update rev_1559456042362460279.sql

* Update rev_1559456042362460279.sql
This commit is contained in:
Stoabrogga
2019-06-14 07:51:29 +02:00
committed by Poszer
parent 613bb9d002
commit 5da61f1167
4 changed files with 59 additions and 1 deletions

View File

@@ -0,0 +1,14 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1559456042362460279');
-- use "SMART_ACTION_MUSIC" instead of "SMART_ACTION_SOUND" to play "Lament of the Highborne" as music for all players within 50 yards distance
-- changed the comments of the other SAI entries slightly
DELETE FROM `smart_scripts` WHERE `entryorguid` = 39048 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`, `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_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`)
VALUES
(39048,0,0,0,60,0,100,1,200,200,0,0,0,11,37090,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Sylvanas Lamenter - On Update - Cast Spell ''Lament of the Highborne: Highborne Aura'' (No Repeat)'),
(39048,0,1,0,1,0,100,0,0,0,5000,5000,0,216,15095,1,0,0,0,0,18,50,0,0,0,0,0,0,0,'Sylvanas Lamenter - OOC - Play music for players within 50 yards (Repeat every 5 seconds)'),
(39048,0,2,3,60,0,100,1,1000,1000,0,0,0,60,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Sylvanas Lamenter - On Update - Set Fly (No Repeat)'),
(39048,0,3,0,61,0,100,0,0,0,0,0,0,69,1,0,0,0,0,0,1,0,0,0,0,0,0,6,0,'Sylvanas Lamenter - Linked - Move Pos To Self offset Z');
-- use "onlySelf" 1 for Thrall event as the music needs to be played only for the players directly
UPDATE `smart_scripts` SET `action_param2` = 1 WHERE `entryorguid` = 19556 AND `source_type` = 0 AND `action_type` = 216;

View File

@@ -205,6 +205,45 @@ void ScriptedAI::DoPlaySoundToSet(WorldObject* source, uint32 soundId)
source->PlayDirectSound(soundId);
}
void ScriptedAI::DoPlayMusic(uint32 soundId, bool zone)
{
ObjectList* targets = NULL;
if (me && me->FindMap())
{
Map::PlayerList const &players = me->GetMap()->GetPlayers();
targets = new ObjectList();
if (!players.isEmpty())
{
for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
if (Player* player = i->GetSource())
{
if (player->GetZoneId() == me->GetZoneId())
{
if (!zone)
{
if (player->GetAreaId() == me->GetAreaId())
targets->push_back(player);
}
else
targets->push_back(player);
}
}
}
}
if (targets)
{
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
(*itr)->SendPlayMusic(soundId, true);
}
delete targets;
}
}
Creature* ScriptedAI::DoSpawnCreature(uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, uint32 type, uint32 despawntime)
{
return me->SummonCreature(entry, me->GetPositionX() + offsetX, me->GetPositionY() + offsetY, me->GetPositionZ() + offsetZ, angle, TempSummonType(type), despawntime);

View File

@@ -14,6 +14,8 @@
#define CAST_AI(a, b) (dynamic_cast<a*>(b))
typedef std::list<WorldObject*> ObjectList;
class InstanceScript;
class SummonList
@@ -237,6 +239,9 @@ struct ScriptedAI : public CreatureAI
//Plays a sound to all nearby players
void DoPlaySoundToSet(WorldObject* source, uint32 soundId);
//Plays music for all players in the zone (zone = true) or the area (zone = false)
void DoPlayMusic(uint32 soundId, bool zone);
//Drops all threat to 0%. Does not remove players from the threat list
void DoResetThreat();

View File

@@ -125,7 +125,7 @@ public:
if (type == GUID_EVENT_INVOKER)
{
Talk(EMOTE_LAMENT);
DoPlaySoundToSet(me, SOUND_CREDIT);
DoPlayMusic(SOUND_CREDIT, true);
DoCast(me, SPELL_SYLVANAS_CAST, false);
playerGUID = guid;
LamentEvent = true;