clean sendKill a bit, remove a IsChild that is set too early in a calling
pathavinationmerge
parent
06b6238d00
commit
f4a6be8654
|
@ -1677,28 +1677,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
kill.Header.Reliable = true;
|
kill.Header.Reliable = true;
|
||||||
kill.Header.Zerocoded = true;
|
kill.Header.Zerocoded = true;
|
||||||
|
|
||||||
if (localIDs.Count == 1 && m_scene.GetScenePresence(localIDs[0]) != null)
|
OutPacket(kill, ThrottleOutPacketType.Task);
|
||||||
{
|
}
|
||||||
OutPacket(kill, ThrottleOutPacketType.Task);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// We MUST lock for both manipulating the kill record and sending the packet, in order to avoid a race
|
|
||||||
// condition where a kill can be processed before an out-of-date update for the same object.
|
|
||||||
// ProcessEntityUpdates() also takes the m_killRecord lock.
|
|
||||||
// lock (m_killRecord)
|
|
||||||
// {
|
|
||||||
// foreach (uint localID in localIDs)
|
|
||||||
// m_killRecord.Add(localID);
|
|
||||||
|
|
||||||
// The throttle queue used here must match that being used for updates. Otherwise, there is a
|
|
||||||
// chance that a kill packet put on a separate queue will be sent to the client before an existing
|
|
||||||
// update packet on another queue. Receiving updates after kills results in unowned and undeletable
|
|
||||||
// scene objects in a viewer until that viewer is relogged in.
|
|
||||||
OutPacket(kill, ThrottleOutPacketType.Task);
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send information about the items contained in a folder to the client.
|
/// Send information about the items contained in a folder to the client.
|
||||||
|
|
|
@ -3590,10 +3590,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (p.UUID == UUID)
|
if (p.UUID == UUID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// get the avatar, then a kill if can't see it
|
||||||
|
p.SendInitialAvatarDataToAgent(this);
|
||||||
|
|
||||||
if (p.ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && GodLevel < 200)
|
if (p.ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && GodLevel < 200)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
p.SendAvatarDataToAgentNF(this);
|
|
||||||
p.SendAppearanceToAgentNF(this);
|
p.SendAppearanceToAgentNF(this);
|
||||||
p.SendAnimPackToAgentNF(this);
|
p.SendAnimPackToAgentNF(this);
|
||||||
p.SendAttachmentsToAgentNF(this);
|
p.SendAttachmentsToAgentNF(this);
|
||||||
|
@ -3651,6 +3653,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_scene.StatsReporter.AddAgentUpdates(count);
|
m_scene.StatsReporter.AddAgentUpdates(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendInitialAvatarDataToAgent(ScenePresence p)
|
||||||
|
{
|
||||||
|
p.ControllingClient.SendAvatarDataImmediate(this);
|
||||||
|
if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200)
|
||||||
|
// either just kill the object
|
||||||
|
// p.ControllingClient.SendKillObject(new List<uint> {LocalId});
|
||||||
|
// or also attachments viewer may still know about
|
||||||
|
SendKillTo(p);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send avatar data to an agent.
|
/// Send avatar data to an agent.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -5959,7 +5971,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (p == this)
|
if (p == this)
|
||||||
continue;
|
continue;
|
||||||
SendKillTo(p);
|
SendKillTo(p);
|
||||||
p.SendKillTo(this);
|
if (!p.IsChildAgent)
|
||||||
|
p.SendKillTo(this);
|
||||||
}
|
}
|
||||||
if (Scene.AttachmentsModule != null)
|
if (Scene.AttachmentsModule != null)
|
||||||
Scene.AttachmentsModule.DeleteAttachmentsFromScene(this, true);
|
Scene.AttachmentsModule.DeleteAttachmentsFromScene(this, true);
|
||||||
|
|
Loading…
Reference in New Issue