diff options
author | megamage <none@none> | 2009-03-22 19:20:03 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-22 19:20:03 -0600 |
commit | a47d2e1c22237e1b2337e89b0f1d910cca68b6ed (patch) | |
tree | c8b48faff0f424b69c0178395ebd609a068dcb73 /src/game/World.cpp | |
parent | ce71c0e798ed3f47dd6356c34766e16d951a8ca5 (diff) |
*Note some script id are changed. DB change may be needed.
[7518] Implement new script command SCRIPT_COMMAND_PLAY_SOUND (look in World.h for args) Author: VladimirMangos
* 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.
--HG--
branch : trunk
Diffstat (limited to 'src/game/World.cpp')
-rw-r--r-- | src/game/World.cpp | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/src/game/World.cpp b/src/game/World.cpp index 12d8d2ed64b..3e25ff086c0 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -2510,15 +2510,6 @@ void World::ScriptsProcess() return; } - case SCRIPT_COMMAND_PLAYSOUND: - { - if(!source) - break; - //datalong sound_id, datalong2 onlyself - ((WorldObject*)source)->SendPlaySound(step.script->datalong, step.script->datalong2); - break; - } - case SCRIPT_COMMAND_KILL: { if(!source || ((Creature*)source)->isDead()) @@ -2534,6 +2525,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<WorldObject*>(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; |