aboutsummaryrefslogtreecommitdiff
path: root/src/game/World.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2009-03-22 19:20:03 -0600
committermegamage <none@none>2009-03-22 19:20:03 -0600
commita47d2e1c22237e1b2337e89b0f1d910cca68b6ed (patch)
treec8b48faff0f424b69c0178395ebd609a068dcb73 /src/game/World.cpp
parentce71c0e798ed3f47dd6356c34766e16d951a8ca5 (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.cpp50
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;