Mantis#1406. Thank you kindly, Xantor for a patch that:
llLoopSound sends out one packet to clients in view, so it doesn't work anymore when clients enter later on, or the prim is modified in any way. Solution: Stored sound data on prim, send full update instead. llStartSound and llLoopSound now accept both LLUUIDs to a sound as well as object inventory sound names. llStopSound clears prim data and sends full update.0.6.0-stable
parent
de43c2db57
commit
06147d0492
|
@ -892,7 +892,7 @@ namespace OpenSim.Framework
|
|||
LLVector3 pos, LLVector3 vel, LLVector3 acc, LLQuaternion rotation, LLVector3 rvel,
|
||||
uint flags,
|
||||
LLUUID objectID, LLUUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem,
|
||||
byte clickAction, byte[] textureanim, bool attachment, uint AttachPoint, LLUUID AssetId);
|
||||
byte clickAction, byte[] textureanim, bool attachment, uint AttachPoint, LLUUID AssetId, LLUUID SoundId, double SoundVolume, byte SoundFlags, double SoundRadius);
|
||||
|
||||
|
||||
void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape,
|
||||
|
|
|
@ -2194,7 +2194,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
SendPrimitiveToClient(regionHandle, timeDilation, localID, primShape, pos, vel,
|
||||
acc, rotation, rvel, flags,
|
||||
objectID, ownerID, text, color, parentID, particleSystem,
|
||||
clickAction, textureanim, false,(uint)0, LLUUID.Zero);
|
||||
clickAction, textureanim, false,(uint)0, LLUUID.Zero, LLUUID.Zero,0,0,0);
|
||||
}
|
||||
|
||||
public void SendPrimitiveToClient(
|
||||
|
@ -2202,12 +2202,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
LLVector3 pos, LLVector3 velocity, LLVector3 acceleration, LLQuaternion rotation, LLVector3 rotational_velocity,
|
||||
uint flags,
|
||||
LLUUID objectID, LLUUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem,
|
||||
byte clickAction, byte[] textureanim, bool attachment, uint AttachPoint, LLUUID AssetId)
|
||||
byte clickAction, byte[] textureanim, bool attachment, uint AttachPoint, LLUUID AssetId, LLUUID SoundId, double SoundGain, byte SoundFlags, double SoundRadius)
|
||||
{
|
||||
if (rotation.X == rotation.Y && rotation.Y == rotation.Z && rotation.Z == rotation.W && rotation.W == 0)
|
||||
rotation = LLQuaternion.Identity;
|
||||
|
||||
ObjectUpdatePacket outPacket = (ObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ObjectUpdate);
|
||||
|
||||
|
||||
|
||||
// TODO: don't create new blocks if recycling an old packet
|
||||
outPacket.RegionData.RegionHandle = regionHandle;
|
||||
outPacket.RegionData.TimeDilation = timeDilation;
|
||||
|
@ -2234,7 +2237,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
outPacket.ObjectData[0].ParentID = parentID;
|
||||
outPacket.ObjectData[0].PSBlock = particleSystem;
|
||||
outPacket.ObjectData[0].ClickAction = clickAction;
|
||||
//outPacket.ObjectData[0].Flags = 0;
|
||||
outPacket.ObjectData[0].Flags = 0;
|
||||
|
||||
if (attachment)
|
||||
{
|
||||
|
@ -2248,8 +2251,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
outPacket.ObjectData[0].State = (byte)((AttachPoint % 16) * 16 + (AttachPoint / 16));
|
||||
}
|
||||
|
||||
// Sound Radius
|
||||
outPacket.ObjectData[0].Radius = 20;
|
||||
// Xantor 20080528: Send sound info as well
|
||||
outPacket.ObjectData[0].Sound = SoundId;
|
||||
outPacket.ObjectData[0].OwnerID = ownerID;
|
||||
outPacket.ObjectData[0].Gain = (float) SoundGain;
|
||||
outPacket.ObjectData[0].Radius = (float) SoundRadius;
|
||||
outPacket.ObjectData[0].Flags = SoundFlags;
|
||||
|
||||
|
||||
byte[] pb = pos.GetBytes();
|
||||
Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
|
||||
|
|
|
@ -515,7 +515,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
|
|||
LLUUID objectID, LLUUID ownerID, string text, byte[] color,
|
||||
uint parentID,
|
||||
byte[] particleSystem, byte clickAction, byte[] textureanimation,
|
||||
bool attachment, uint AttachmentPoint, LLUUID AssetId)
|
||||
bool attachment, uint AttachmentPoint, LLUUID AssetId, LLUUID SoundId, double SoundVolume, byte SoundFlags, double SoundRadius)
|
||||
{
|
||||
}
|
||||
public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID,
|
||||
|
|
|
@ -592,6 +592,20 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
//Xantor 20080528 Sound stuff:
|
||||
// Note: This isn't persisted in the database right now, as the fields for that aren't just there yet.
|
||||
// Not a big problem as long as the script that sets it remains in the prim on startup.
|
||||
// for SL compatibility it should be persisted though (set sound / displaytext / particlesystem, kill script)
|
||||
[XmlIgnore]
|
||||
public LLUUID Sound;
|
||||
[XmlIgnore]
|
||||
public byte SoundFlags;
|
||||
[XmlIgnore]
|
||||
public double SoundGain;
|
||||
[XmlIgnore]
|
||||
public double SoundRadius;
|
||||
|
||||
|
||||
private string m_sitName = String.Empty;
|
||||
|
||||
public string SitName
|
||||
|
@ -2406,7 +2420,7 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, m_shape,
|
||||
lPos, Velocity, Acceleration, RotationOffset, RotationalVelocity, clientFlags, m_uuid,
|
||||
OwnerID,
|
||||
m_text, color, ParentID, m_particleSystem, m_clickAction, m_TextureAnimation, m_IsAttachment, m_attachmentPoint,fromAssetID);
|
||||
m_text, color, ParentID, m_particleSystem, m_clickAction, m_TextureAnimation, m_IsAttachment, m_attachmentPoint,fromAssetID, Sound, SoundGain, SoundFlags, SoundRadius);
|
||||
}
|
||||
|
||||
/// Terse updates
|
||||
|
|
|
@ -430,7 +430,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
|||
LLUUID objectID, LLUUID ownerID, string text, byte[] color,
|
||||
uint parentID,
|
||||
byte[] particleSystem, byte clickAction, byte[] textureanimation,
|
||||
bool attachment, uint AttachmentPoint, LLUUID AssetId)
|
||||
bool attachment, uint AttachmentPoint, LLUUID AssetId, LLUUID SoundId, double SoundVolume, byte SoundFlags, double SoundRadius)
|
||||
{
|
||||
}
|
||||
public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID,
|
||||
|
|
|
@ -1390,16 +1390,59 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
Deprecated("llSound");
|
||||
}
|
||||
|
||||
// Xantor 20080528 PlaySound updated so it accepts an objectinventory name -or- a key to a sound
|
||||
public void llPlaySound(string sound, double volume)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
LLUUID key = LLUUID.Zero;
|
||||
|
||||
// if we can parse the string as a key, use it.
|
||||
if (LLUUID.TryParse(sound, out key))
|
||||
{
|
||||
sound = key.ToString();
|
||||
}
|
||||
// else try to locate the name in inventory of object. found returns key,
|
||||
// not found returns LLUUID.Zero
|
||||
else
|
||||
{
|
||||
sound = InventoryKey(sound).ToString();
|
||||
}
|
||||
|
||||
// send the sound, once, to all clients in range
|
||||
m_host.SendSound(sound, volume, false, 0);
|
||||
|
||||
}
|
||||
|
||||
// Xantor 20080528 we should do this differently.
|
||||
// 1) apply the sound to the object
|
||||
// 2) schedule full update
|
||||
// just sending the sound out once doesn't work so well when other avatars come in view later on
|
||||
// or when the prim gets moved, changed, sat on, whatever
|
||||
// see large number of mantises (mantes?)
|
||||
public void llLoopSound(string sound, double volume)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
m_host.SendSound(sound, volume, false, 1);
|
||||
// m_host.SendSound(sound, volume, false, 1);
|
||||
LLUUID key = LLUUID.Zero;
|
||||
|
||||
// if we can parse the string as a key, use it.
|
||||
if (LLUUID.TryParse(sound, out key))
|
||||
{
|
||||
m_host.Sound = key;
|
||||
}
|
||||
// else try to locate the name in inventory of object. found returns key,
|
||||
// not found returns LLUUID.Zero
|
||||
else
|
||||
{
|
||||
m_host.Sound = InventoryKey(sound.ToString());
|
||||
}
|
||||
|
||||
m_host.SoundGain = volume;
|
||||
m_host.SoundFlags = 1; // looping
|
||||
m_host.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
|
||||
|
||||
m_host.SendFullUpdateToAllClients();
|
||||
}
|
||||
|
||||
public void llLoopSoundMaster(string sound, double volume)
|
||||
|
@ -1426,10 +1469,19 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
m_host.SendSound(sound, volume, true, 0);
|
||||
}
|
||||
|
||||
// Xantor 20080528: Clear prim data of sound instead
|
||||
public void llStopSound()
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
m_host.SendSound(LLUUID.Zero.ToString(), 1.0, false, 2);
|
||||
|
||||
m_host.Sound = LLUUID.Zero;
|
||||
m_host.SoundGain = 0;
|
||||
m_host.SoundFlags = 0;
|
||||
m_host.SoundRadius = 0;
|
||||
|
||||
m_host.SendFullUpdateToAllClients();
|
||||
|
||||
// m_host.SendSound(LLUUID.Zero.ToString(), 1.0, false, 2);
|
||||
}
|
||||
|
||||
public void llPreloadSound(string sound)
|
||||
|
|
Loading…
Reference in New Issue