From ab2bdc3e69e34c84a583ccedc34dba460aed144d Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 22 Mar 2009 20:02:45 +0300 Subject: [PATCH] [7518] Implement new script command SCRIPT_COMMAND_PLAY_SOUND (look in World.h for args) * Also rewrite use SMSG_PLAY_OBJECT_SOUND/SMSG_PLAY_SOUND Now WorldObject have 2 function for sound level dependent from distance (PlayDistanceSound) and for not depednet (PlayDirectSound) * Old Player::PlaySound function removed and uses need to be updated to WorldObject functions Note: function called for _source_ of sound in different from old function. * chat command .debug ps removed and .debug playsound can used for bother packects test: if no selection used SMSG_PLAY_SOUND, if selection exist including self then SMSG_PLAY_OBJECT_SOUND. --- contrib/extractor/ad.exe | Bin 163840 -> 163328 bytes src/game/Chat.cpp | 1 - src/game/Chat.h | 1 - src/game/Level1.cpp | 29 --------------------------- src/game/Object.cpp | 21 ++++++++++++++++++++ src/game/Object.h | 3 +++ src/game/Player.cpp | 10 ---------- src/game/Player.h | 2 -- src/game/SpellAuras.cpp | 3 +-- src/game/World.cpp | 41 +++++++++++++++++++++++++++++++++++++++ src/game/World.h | 1 + src/game/debugcmds.cpp | 36 ++++++++++++++++++++++++++++++---- src/shared/revision_nr.h | 2 +- 13 files changed, 100 insertions(+), 50 deletions(-) diff --git a/contrib/extractor/ad.exe b/contrib/extractor/ad.exe index 208eb2da03065891ec5012d36de6dc24c8c1b530..6c6c2c9969b626a1ec76dc1259e1dee17ed3788c 100755 GIT binary patch delta 5810 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 g19o5oOF=Hk1}2aU5l2xc~qF diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index e0aa19aed..458d23495 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -118,7 +118,6 @@ ChatCommand * ChatHandler::getCommandTable() { "sendopcode", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendOpcodeCommand, "", NULL }, { "spawnvehicle", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSpawnVehicle, "", NULL }, { "uws", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugUpdateWorldStateCommand, "", NULL }, - { "ps", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugPlaySound2Command, "", NULL }, { "scn", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendChannelNotifyCommand, "", NULL }, { "scm", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendChatMsgCommand, "", NULL }, { "sps", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendSetPhaseShiftCommand, "", NULL }, diff --git a/src/game/Chat.h b/src/game/Chat.h index cfcebc354..0e06b3272 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -417,7 +417,6 @@ class ChatHandler bool HandleDebugSellErrorCommand(const char* args); bool HandleDebugBuyErrorCommand(const char* args); bool HandleDebugUpdateWorldStateCommand(const char* args); - bool HandleDebugPlaySound2Command(const char* args); bool HandleDebugSendChannelNotifyCommand(const char* args); bool HandleDebugSendChatMsgCommand(const char* args); bool HandleRenameCommand(const char * args); diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 7935f59e1..885846048 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -1971,35 +1971,6 @@ bool ChatHandler::HandleWhispersCommand(const char* args) return false; } -//Play sound -bool ChatHandler::HandleDebugPlaySoundCommand(const char* args) -{ - // USAGE: .debug playsound #soundid - // #soundid - ID decimal number from SoundEntries.dbc (1st column) - // this file have about 5000 sounds. - // In this realization only caller can hear this sound. - if( *args ) - { - uint32 dwSoundId = atoi((char*)args); - - if( !sSoundEntriesStore.LookupEntry(dwSoundId) ) - { - PSendSysMessage(LANG_SOUND_NOT_EXIST, dwSoundId); - SetSentErrorMessage(true); - return false; - } - - WorldPacket data(SMSG_PLAY_OBJECT_SOUND,4+8); - data << uint32(dwSoundId) << m_session->GetPlayer()->GetGUID(); - m_session->SendPacket(&data); - - PSendSysMessage(LANG_YOU_HEAR_SOUND, dwSoundId); - return true; - } - - return false; -} - //Save all players in the world bool ChatHandler::HandleSaveAllCommand(const char* /*args*/) { diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 571cb4826..c09d94cd6 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1688,3 +1688,24 @@ void WorldObject::SetPhaseMask(uint32 newPhaseMask, bool update) if(update && IsInWorld()) ObjectAccessor::UpdateObjectVisibility(this); } + +void WorldObject::PlayDistanceSound( uint32 sound_id, Player* target /*= NULL*/ ) +{ + WorldPacket data(SMSG_PLAY_OBJECT_SOUND,4+8); + data << uint32(sound_id); + data << GetGUID(); + if (target) + target->SendDirectMessage( &data ); + else + SendMessageToSet( &data, true ); +} + +void WorldObject::PlayDirectSound( uint32 sound_id, Player* target /*= NULL*/ ) +{ + WorldPacket data(SMSG_PLAY_SOUND, 4); + data << uint32(sound_id); + if (target) + target->SendDirectMessage( &data ); + else + SendMessageToSet( &data, true ); +} diff --git a/src/game/Object.h b/src/game/Object.h index 03e329b0d..cac13000c 100644 --- a/src/game/Object.h +++ b/src/game/Object.h @@ -458,6 +458,9 @@ class MANGOS_DLL_SPEC WorldObject : public Object void MonsterWhisper(int32 textId, uint64 receiver, bool IsBossWhisper = false); void BuildMonsterChat(WorldPacket *data, uint8 msgtype, char const* text, uint32 language, char const* name, uint64 TargetGuid) const; + void PlayDistanceSound(uint32 sound_id, Player* target = NULL); + void PlayDirectSound(uint32 sound_id, Player* target = NULL); + void SendObjectDeSpawnAnim(uint64 guid); virtual void SaveRespawnTime() {} diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 62af51a70..e12d440ae 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -16363,16 +16363,6 @@ void Player::SendAutoRepeatCancel() GetSession()->SendPacket( &data ); } -void Player::PlaySound(uint32 Sound, bool OnlySelf) -{ - WorldPacket data(SMSG_PLAY_SOUND, 4); - data << Sound; - if (OnlySelf) - GetSession()->SendPacket( &data ); - else - SendMessageToSet( &data, true ); -} - void Player::SendExplorationExperience(uint32 Area, uint32 Experience) { WorldPacket data( SMSG_EXPLORATION_EXPERIENCE, 8 ); diff --git a/src/game/Player.h b/src/game/Player.h index 62a8210bd..1004b5b5d 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1603,8 +1603,6 @@ class MANGOS_DLL_SPEC Player : public Unit void SendDelayResponse(const uint32); void SendLogXPGain(uint32 GivenXP,Unit* victim,uint32 RestXP); - //Low Level Packets - void PlaySound(uint32 Sound, bool OnlySelf); //notifiers void SendAttackSwingCantAttack(); void SendAttackSwingCancelAttack(); diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 71969e30d..94a218a5e 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2046,8 +2046,7 @@ void Aura::HandleAuraDummy(bool apply, bool Real) m_target->CastSpell(m_target, 51581, true, NULL, this); return; case 43873: // Headless Horseman Laugh - if(caster->GetTypeId() == TYPEID_PLAYER) - ((Player*)caster)->PlaySound(11965, false); + m_target->PlayDistanceSound(11965); return; case 46354: // Blood Elf Illusion if(caster) diff --git a/src/game/World.cpp b/src/game/World.cpp index 436f8c8fd..d4341953c 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -2237,6 +2237,47 @@ void World::ScriptsProcess() break; } + case SCRIPT_COMMAND_PLAY_SOUND: + { + if(!source) + { + sLog.outError("SCRIPT_COMMAND_PLAY_SOUND call for NULL creature."); + break; + } + + WorldObject* pSource = dynamic_cast(source); + if(!pSource) + { + sLog.outError("SCRIPT_COMMAND_PLAY_SOUND call for non-world object (TypeId: %u), skipping.",source->GetTypeId()); + break; + } + + // bitmask: 0/1=anyone/target, 0/2=with distance dependent + Player* pTarget = NULL; + if(step.script->datalong2 & 1) + { + if(!target) + { + sLog.outError("SCRIPT_COMMAND_PLAY_SOUND in targeted mode call for NULL target."); + break; + } + + if(target->GetTypeId()!=TYPEID_PLAYER) + { + sLog.outError("SCRIPT_COMMAND_PLAY_SOUND in targeted mode call for non-player (TypeId: %u), skipping.",target->GetTypeId()); + break; + } + + pTarget = (Player*)target; + } + + // bitmask: 0/1=anyone/target, 0/2=with distance dependent + if(step.script->datalong2 & 2) + pSource->PlayDistanceSound(step.script->datalong,pTarget); + else + pSource->PlayDirectSound(step.script->datalong,pTarget); + break; + } default: sLog.outError("Unknown script command %u called.",step.script->command); break; diff --git a/src/game/World.h b/src/game/World.h index 55c0649ae..17fd9b474 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -322,6 +322,7 @@ enum RealmZone #define SCRIPT_COMMAND_ACTIVATE_OBJECT 13 // source = unit, target=GO #define SCRIPT_COMMAND_REMOVE_AURA 14 // source (datalong2!=0) or target (datalong==0) unit, datalong = spell_id #define SCRIPT_COMMAND_CAST_SPELL 15 // source/target cast spell at target/source (script->datalong2: 0: s->t 1: s->s 2: t->t 3: t->s +#define SCRIPT_COMMAND_PLAY_SOUND 16 // source = any object, target=any/player, datalong (sound_id), datalong2 (bitmask: 0/1=anyone/target, 0/2=with distance dependent, so 1|2 = 3 is target with distance dependent) /// Storage class for commands issued for delayed execution struct CliCommandHolder diff --git a/src/game/debugcmds.cpp b/src/game/debugcmds.cpp index 1e8704689..dbc8f4b2c 100644 --- a/src/game/debugcmds.cpp +++ b/src/game/debugcmds.cpp @@ -213,13 +213,41 @@ bool ChatHandler::HandleDebugUpdateWorldStateCommand(const char* args) return true; } -bool ChatHandler::HandleDebugPlaySound2Command(const char* args) +//Play sound +bool ChatHandler::HandleDebugPlaySoundCommand(const char* args) { - if(!args) + // USAGE: .debug playsound #soundid + // #soundid - ID decimal number from SoundEntries.dbc (1st column) + if( !*args ) + { + SendSysMessage(LANG_BAD_VALUE); + SetSentErrorMessage(true); return false; + } - uint32 soundid = atoi(args); - m_session->GetPlayer()->PlaySound(soundid, false); + uint32 dwSoundId = atoi((char*)args); + + if(!sSoundEntriesStore.LookupEntry(dwSoundId)) + { + PSendSysMessage(LANG_SOUND_NOT_EXIST, dwSoundId); + SetSentErrorMessage(true); + return false; + } + + Unit* unit = getSelectedUnit(); + if(!unit) + { + SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE); + SetSentErrorMessage(true); + return false; + } + + if(m_session->GetPlayer()->GetSelection()) + unit->PlayDistanceSound(dwSoundId,m_session->GetPlayer()); + else + unit->PlayDirectSound(dwSoundId,m_session->GetPlayer()); + + PSendSysMessage(LANG_YOU_HEAR_SOUND, dwSoundId); return true; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c2ffcecab..742cbec33 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7517" + #define REVISION_NR "7518" #endif // __REVISION_NR_H__