Core/Chat: Send broadcast text id in sound packets to allow playing encrypted sound files

Port From (https://github.com/TrinityCore/TrinityCore/commit/2e4609f6e18c181fbb54ec851a9ccd5bd3c6eb7b)
This commit is contained in:
hondacrx
2020-12-31 21:00:19 -05:00
parent 87c54f63ec
commit 10c1adf2d8
8 changed files with 18 additions and 13 deletions
@@ -2416,6 +2416,8 @@ namespace Game.AI
{ {
public uint soundId; public uint soundId;
public uint onlySelf; public uint onlySelf;
public uint distance; // NYI: awaiting cherry-pick
public uint keyBroadcastTextId;
} }
public struct Emote public struct Emote
{ {
+1 -1
View File
@@ -178,7 +178,7 @@ namespace Game.AI
{ {
if (IsUnit(target)) if (IsUnit(target))
{ {
target.PlayDirectSound(e.Action.sound.soundId, e.Action.sound.onlySelf != 0 ? target.ToPlayer() : null); target.PlayDirectSound(e.Action.sound.soundId, e.Action.sound.onlySelf != 0 ? target.ToPlayer() : null, e.Action.sound.keyBroadcastTextId);
Log.outDebug(LogFilter.ScriptsAi, "SmartScript.ProcessAction. SMART_ACTION_SOUND: target: {0} (GuidLow: {1}), sound: {2}, onlyself: {3}", Log.outDebug(LogFilter.ScriptsAi, "SmartScript.ProcessAction. SMART_ACTION_SOUND: target: {0} (GuidLow: {1}), sound: {2}, onlyself: {3}",
target.GetName(), target.GetGUID().ToString(), e.Action.sound.soundId, e.Action.sound.onlySelf); target.GetName(), target.GetGUID().ToString(), e.Action.sound.soundId, e.Action.sound.onlySelf);
} }
+1 -1
View File
@@ -357,7 +357,7 @@ namespace Game.BattleFields
void DoPlaySoundToAll(uint soundID) void DoPlaySoundToAll(uint soundID)
{ {
BroadcastPacketToWar(new PlaySound(ObjectGuid.Empty, soundID)); BroadcastPacketToWar(new PlaySound(ObjectGuid.Empty, soundID, 0));
} }
public bool HasPlayer(Player player) public bool HasPlayer(Player player)
+2 -2
View File
@@ -567,12 +567,12 @@ namespace Game.BattleGrounds
public void PlaySoundToAll(uint soundID) public void PlaySoundToAll(uint soundID)
{ {
SendPacketToAll(new PlaySound(ObjectGuid.Empty, soundID)); SendPacketToAll(new PlaySound(ObjectGuid.Empty, soundID, 0));
} }
void PlaySoundToTeam(uint soundID, Team team) void PlaySoundToTeam(uint soundID, Team team)
{ {
SendPacketToTeam(team, new PlaySound(ObjectGuid.Empty, soundID)); SendPacketToTeam(team, new PlaySound(ObjectGuid.Empty, soundID, 0));
} }
public void CastSpellOnTeam(uint SpellID, Team team) public void CastSpellOnTeam(uint SpellID, Team team)
+3 -1
View File
@@ -1834,7 +1834,9 @@ namespace Game.Chat
return false; return false;
} }
Global.WorldMgr.SendGlobalMessage(new PlaySound(handler.GetSession().GetPlayer().GetGUID(), soundId)); uint broadcastTextId = args.NextUInt32();
Global.WorldMgr.SendGlobalMessage(new PlaySound(handler.GetSession().GetPlayer().GetGUID(), soundId, broadcastTextId));
handler.SendSysMessage(CypherStrings.CommandPlayedToAll, soundId); handler.SendSysMessage(CypherStrings.CommandPlayedToAll, soundId);
return true; return true;
+2 -2
View File
@@ -1618,9 +1618,9 @@ namespace Game.Entities
SendMessageToSet(playSpeakerBoxSound, true); SendMessageToSet(playSpeakerBoxSound, true);
} }
public void PlayDirectSound(uint soundId, Player target = null) public void PlayDirectSound(uint soundId, Player target = null, uint broadcastTextId = 0)
{ {
PlaySound sound = new PlaySound(GetGUID(), soundId); PlaySound sound = new PlaySound(GetGUID(), soundId, broadcastTextId);
if (target) if (target)
target.SendPacket(sound); target.SendPacket(sound);
else else
@@ -885,22 +885,23 @@ namespace Game.Networking.Packets
class PlaySound : ServerPacket class PlaySound : ServerPacket
{ {
public PlaySound(ObjectGuid sourceObjectGuid, uint soundKitID) : base(ServerOpcodes.PlaySound) public PlaySound(ObjectGuid sourceObjectGuid, uint soundKitID, uint broadcastTextId) : base(ServerOpcodes.PlaySound)
{ {
SourceObjectGuid = sourceObjectGuid; SourceObjectGuid = sourceObjectGuid;
SoundKitID = soundKitID; SoundKitID = soundKitID;
BroadcastTextID = broadcastTextId;
} }
public override void Write() public override void Write()
{ {
_worldPacket.WriteUInt32(SoundKitID); _worldPacket.WriteUInt32(SoundKitID);
_worldPacket.WritePackedGuid(SourceObjectGuid); _worldPacket.WritePackedGuid(SourceObjectGuid);
_worldPacket.WriteInt32(BroadcastTextID); _worldPacket.WriteUInt32(BroadcastTextID);
} }
public ObjectGuid SourceObjectGuid; public ObjectGuid SourceObjectGuid;
public uint SoundKitID; public uint SoundKitID;
public int BroadcastTextID; public uint BroadcastTextID;
} }
class PlaySpeakerBoxSound : ServerPacket class PlaySpeakerBoxSound : ServerPacket
+3 -3
View File
@@ -213,7 +213,7 @@ namespace Game
range = textEntry.TextRange; range = textEntry.TextRange;
if (finalSound != 0) if (finalSound != 0)
SendSound(source, finalSound, finalType, whisperTarget, range, team, gmOnly); SendSound(source, finalSound, finalType, whisperTarget, range, team, gmOnly, textEntry.BroadcastTextId);
Unit finalSource = source; Unit finalSource = source;
if (srcPlr) if (srcPlr)
@@ -256,12 +256,12 @@ namespace Game
return dist; return dist;
} }
public void SendSound(Creature source, uint sound, ChatMsg msgType, WorldObject whisperTarget = null, CreatureTextRange range = CreatureTextRange.Normal, Team team = Team.Other, bool gmOnly = false) public void SendSound(Creature source, uint sound, ChatMsg msgType, WorldObject whisperTarget = null, CreatureTextRange range = CreatureTextRange.Normal, Team team = Team.Other, bool gmOnly = false, uint keyBroadcastTextId = 0)
{ {
if (sound == 0 || !source) if (sound == 0 || !source)
return; return;
SendNonChatPacket(source, new PlaySound(source.GetGUID(), sound), msgType, whisperTarget, range, team, gmOnly); SendNonChatPacket(source, new PlaySound(source.GetGUID(), sound, keyBroadcastTextId), msgType, whisperTarget, range, team, gmOnly);
} }
void SendNonChatPacket(WorldObject source, ServerPacket data, ChatMsg msgType, WorldObject whisperTarget, CreatureTextRange range, Team team, bool gmOnly) void SendNonChatPacket(WorldObject source, ServerPacket data, ChatMsg msgType, WorldObject whisperTarget, CreatureTextRange range, Team team, bool gmOnly)