some cleanup ( well or not )
parent
9a8d8d2130
commit
0295e6822d
|
@ -576,6 +576,16 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||||
m_scenePresence.SendAnimPack(animations, seqs, objectIDs);
|
m_scenePresence.SendAnimPack(animations, seqs, objectIDs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GetArrays(out UUID[] animIDs, out int[] sequenceNums, out UUID[] objectIDs)
|
||||||
|
{
|
||||||
|
animIDs = null;
|
||||||
|
sequenceNums = null;
|
||||||
|
objectIDs = null;
|
||||||
|
|
||||||
|
if(m_animations != null)
|
||||||
|
m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs);
|
||||||
|
}
|
||||||
|
|
||||||
public void SendAnimPackToClient(IClientAPI client)
|
public void SendAnimPackToClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
if (m_scenePresence.IsChildAgent)
|
if (m_scenePresence.IsChildAgent)
|
||||||
|
|
|
@ -3000,13 +3000,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (sp == null)
|
if (sp == null)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[SCENE]: Adding new child scene presence {0} {1} to scene {2} at pos {3}",
|
"[SCENE]: Adding new child scene presence {0} {1} to scene {2} at pos {3}, tpflags: {4}",
|
||||||
client.Name, client.AgentId, RegionInfo.RegionName, client.StartPos);
|
client.Name, client.AgentId, RegionInfo.RegionName, client.StartPos,
|
||||||
|
((TPFlags)aCircuit.teleportFlags).ToString());
|
||||||
|
|
||||||
m_clientManager.Add(client);
|
m_clientManager.Add(client);
|
||||||
SubscribeToClientEvents(client);
|
SubscribeToClientEvents(client);
|
||||||
|
|
||||||
sp = m_sceneGraph.CreateAndAddChildScenePresence(client, aCircuit.Appearance, type);
|
sp = m_sceneGraph.CreateAndAddChildScenePresence(client, aCircuit.Appearance, type);
|
||||||
|
|
||||||
|
sp.TeleportFlags = (TPFlags)aCircuit.teleportFlags;
|
||||||
|
|
||||||
|
/* done in completMovement
|
||||||
InventoryFolderBase cof = InventoryService.GetFolderForType(client.AgentId, (AssetType)46);
|
InventoryFolderBase cof = InventoryService.GetFolderForType(client.AgentId, (AssetType)46);
|
||||||
if (cof == null)
|
if (cof == null)
|
||||||
sp.COF = UUID.Zero;
|
sp.COF = UUID.Zero;
|
||||||
|
@ -3014,9 +3019,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
sp.COF = cof.ID;
|
sp.COF = cof.ID;
|
||||||
|
|
||||||
m_log.DebugFormat("[SCENE]: COF for {0} is {1}", client.AgentId, sp.COF);
|
m_log.DebugFormat("[SCENE]: COF for {0} is {1}", client.AgentId, sp.COF);
|
||||||
|
*/
|
||||||
m_eventManager.TriggerOnNewPresence(sp);
|
m_eventManager.TriggerOnNewPresence(sp);
|
||||||
|
|
||||||
sp.TeleportFlags = (TPFlags)aCircuit.teleportFlags;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -2718,14 +2718,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RootPart.SendFullUpdateToAllClients();
|
RootPart.SendFullUpdateToAllClientsInternal();
|
||||||
|
|
||||||
SceneObjectPart[] parts = m_parts.GetArray();
|
SceneObjectPart[] parts = m_parts.GetArray();
|
||||||
for (int i = 0; i < parts.Length; i++)
|
for (int i = 0; i < parts.Length; i++)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = parts[i];
|
SceneObjectPart part = parts[i];
|
||||||
if (part != RootPart)
|
if (part != RootPart)
|
||||||
part.SendFullUpdateToAllClients();
|
part.SendFullUpdateToAllClientsInternal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2740,16 +2740,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (IsDeleted)
|
if (IsDeleted)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (IsAttachment)
|
|
||||||
{
|
|
||||||
ScenePresence sp = m_scene.GetScenePresence(AttachedAvatar);
|
|
||||||
if (sp != null)
|
|
||||||
{
|
|
||||||
sp.SendAttachmentUpdate(RootPart, UpdateRequired.TERSE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RootPart.SendTerseUpdateToAllClients();
|
RootPart.SendTerseUpdateToAllClients();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2781,7 +2771,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
SceneObjectPart[] parts = m_parts.GetArray();
|
SceneObjectPart[] parts = m_parts.GetArray();
|
||||||
for (int i = 0; i < parts.Length; i++)
|
for (int i = 0; i < parts.Length; i++)
|
||||||
parts[i].SendTerseUpdateToAllClients();
|
parts[i].SendTerseUpdateToAllClientsInternal();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -862,7 +862,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
Vector3 offset = (m_offsetPosition - oldpos);
|
Vector3 offset = (m_offsetPosition - oldpos);
|
||||||
av.AbsolutePosition += offset;
|
av.AbsolutePosition += offset;
|
||||||
av.SendAvatarDataToAllAgents();
|
// av.SendAvatarDataToAllAgents();
|
||||||
|
av.SendTerseUpdateToAllClients();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3257,7 +3258,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send a full update for this part to all clients.
|
/// Send a full update for this part to all clients.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SendFullUpdateToAllClients()
|
public void SendFullUpdateToAllClientsInternal()
|
||||||
{
|
{
|
||||||
if (ParentGroup == null)
|
if (ParentGroup == null)
|
||||||
return;
|
return;
|
||||||
|
@ -3276,6 +3277,36 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendFullUpdateToAllClients()
|
||||||
|
{
|
||||||
|
if (ParentGroup == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Update the "last" values
|
||||||
|
m_lastPosition = OffsetPosition;
|
||||||
|
m_lastRotation = RotationOffset;
|
||||||
|
m_lastVelocity = Velocity;
|
||||||
|
m_lastAcceleration = Acceleration;
|
||||||
|
m_lastAngularVelocity = AngularVelocity;
|
||||||
|
m_lastUpdateSentTime = Environment.TickCount;
|
||||||
|
|
||||||
|
if (ParentGroup.IsAttachment)
|
||||||
|
{
|
||||||
|
ScenePresence sp = ParentGroup.Scene.GetScenePresence(ParentGroup.AttachedAvatar);
|
||||||
|
if (sp != null)
|
||||||
|
{
|
||||||
|
sp.SendAttachmentUpdate(this, UpdateRequired.FULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ParentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar)
|
||||||
|
{
|
||||||
|
SendFullUpdate(avatar.ControllingClient);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends a full update to the client
|
/// Sends a full update to the client
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -3345,24 +3376,24 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
!OffsetPosition.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) ||
|
!OffsetPosition.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) ||
|
||||||
Environment.TickCount - m_lastUpdateSentTime > TIME_MS_TOLERANCE)
|
Environment.TickCount - m_lastUpdateSentTime > TIME_MS_TOLERANCE)
|
||||||
{
|
{
|
||||||
SendTerseUpdateToAllClients();
|
SendTerseUpdateToAllClientsInternal();
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case UpdateRequired.FULL:
|
case UpdateRequired.FULL:
|
||||||
{
|
{
|
||||||
ClearUpdateSchedule();
|
ClearUpdateSchedule();
|
||||||
SendFullUpdateToAllClients();
|
SendFullUpdateToAllClientsInternal();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send a terse update to all clients
|
/// Send a terse update to all clients
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SendTerseUpdateToAllClients()
|
public void SendTerseUpdateToAllClientsInternal()
|
||||||
{
|
{
|
||||||
if (ParentGroup == null || ParentGroup.Scene == null)
|
if (ParentGroup == null || ParentGroup.Scene == null)
|
||||||
return;
|
return;
|
||||||
|
@ -3381,6 +3412,36 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendTerseUpdateToAllClients()
|
||||||
|
{
|
||||||
|
if (ParentGroup == null || ParentGroup.Scene == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Update the "last" values
|
||||||
|
m_lastPosition = OffsetPosition;
|
||||||
|
m_lastRotation = RotationOffset;
|
||||||
|
m_lastVelocity = Velocity;
|
||||||
|
m_lastAcceleration = Acceleration;
|
||||||
|
m_lastAngularVelocity = AngularVelocity;
|
||||||
|
m_lastUpdateSentTime = Environment.TickCount;
|
||||||
|
|
||||||
|
if (ParentGroup.IsAttachment)
|
||||||
|
{
|
||||||
|
ScenePresence sp = ParentGroup.Scene.GetScenePresence(ParentGroup.AttachedAvatar);
|
||||||
|
if (sp != null)
|
||||||
|
{
|
||||||
|
sp.SendAttachmentUpdate(this, UpdateRequired.TERSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ParentGroup.Scene.ForEachClient(delegate(IClientAPI client)
|
||||||
|
{
|
||||||
|
SendTerseUpdateToClient(client);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SetAxisRotation(int axis, int rotate)
|
public void SetAxisRotation(int axis, int rotate)
|
||||||
{
|
{
|
||||||
ParentGroup.SetAxisRotation(axis, rotate);
|
ParentGroup.SetAxisRotation(axis, rotate);
|
||||||
|
|
|
@ -1341,6 +1341,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
RemoveFromPhysicalScene();
|
RemoveFromPhysicalScene();
|
||||||
ParentID = 0; // Child agents can't be sitting
|
ParentID = 0; // Child agents can't be sitting
|
||||||
|
|
||||||
|
// we dont have land information for child
|
||||||
|
m_previusParcelHide = false;
|
||||||
|
m_previusParcelUUID = UUID.Zero;
|
||||||
|
m_currentParcelHide = false;
|
||||||
|
m_currentParcelUUID = UUID.Zero;
|
||||||
// FIXME: Set RegionHandle to the region handle of the scene this agent is moving into
|
// FIXME: Set RegionHandle to the region handle of the scene this agent is moving into
|
||||||
|
|
||||||
m_scene.EventManager.TriggerOnMakeChildAgent(this);
|
m_scene.EventManager.TriggerOnMakeChildAgent(this);
|
||||||
|
@ -1753,13 +1758,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Tell the client that we're totally ready
|
// Tell the client that we're totally ready
|
||||||
ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look);
|
ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look);
|
||||||
|
|
||||||
// Remember in HandleUseCircuitCode, we delayed this to here
|
|
||||||
// this prims etc, moved down
|
|
||||||
// if (m_teleportFlags > 0)
|
|
||||||
// SendInitialDataToMe();
|
|
||||||
|
|
||||||
// m_log.DebugFormat("[SCENE PRESENCE] Completed movement");
|
|
||||||
|
|
||||||
m_log.DebugFormat("[CompleteMovement] MoveAgentIntoRegion: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
m_log.DebugFormat("[CompleteMovement] MoveAgentIntoRegion: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(m_callbackURI))
|
if (!string.IsNullOrEmpty(m_callbackURI))
|
||||||
|
@ -1805,17 +1803,80 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (!IsChildAgent)
|
if (!IsChildAgent)
|
||||||
{
|
{
|
||||||
|
|
||||||
ValidateAndSendAppearanceAndAgentData();
|
// ValidateAndSendAppearanceAndAgentData();
|
||||||
|
|
||||||
|
// do it here in line
|
||||||
|
// so sequence is clear
|
||||||
|
|
||||||
|
// verify baked textures and cache
|
||||||
|
|
||||||
|
bool cachedbaked = false;
|
||||||
|
|
||||||
|
if (m_scene.AvatarFactory != null)
|
||||||
|
cachedbaked = m_scene.AvatarFactory.ValidateBakedTextureCache(this);
|
||||||
|
|
||||||
|
// not sure we need this
|
||||||
|
if (!cachedbaked)
|
||||||
|
{
|
||||||
|
if (m_scene.AvatarFactory != null)
|
||||||
|
m_scene.AvatarFactory.QueueAppearanceSave(UUID);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ScenePresence> allpresences = m_scene.GetScenePresences();
|
||||||
|
|
||||||
|
// send avatar object to all presences including us, so they cross it into region
|
||||||
|
// then hide if necessary
|
||||||
|
SendInitialAvatarDataToAllAgents(allpresences);
|
||||||
|
|
||||||
|
// send this look
|
||||||
|
SendAppearanceToAgent(this);
|
||||||
|
|
||||||
|
// send this animations
|
||||||
|
UUID[] animIDs = null;
|
||||||
|
int[] animseqs = null;
|
||||||
|
UUID[] animsobjs = null;
|
||||||
|
|
||||||
|
if (Animator != null)
|
||||||
|
Animator.GetArrays(out animIDs, out animseqs, out animsobjs);
|
||||||
|
|
||||||
|
bool haveAnims = (animIDs != null && animseqs != null && animsobjs != null);
|
||||||
|
|
||||||
|
if(haveAnims)
|
||||||
|
SendAnimPackToAgent(this, animIDs, animseqs, animsobjs);
|
||||||
|
|
||||||
|
// we should be able to receive updates, etc
|
||||||
|
// so release them
|
||||||
|
m_inTransit = false;
|
||||||
|
|
||||||
|
// send look and animations to others
|
||||||
|
// if not cached we send greys
|
||||||
|
// uncomented if will wait till avatar does baking
|
||||||
|
//if (cachedbaked)
|
||||||
|
{
|
||||||
|
foreach (ScenePresence p in allpresences)
|
||||||
|
{
|
||||||
|
if (p == this)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
SendAppearanceToAgentNF(p);
|
||||||
|
if (haveAnims)
|
||||||
|
SendAnimPackToAgentNF(p, animIDs, animseqs, animsobjs);
|
||||||
|
}
|
||||||
|
} // greys if
|
||||||
|
|
||||||
m_log.DebugFormat("[CompleteMovement] ValidateAndSendAppearanceAndAgentData: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
m_log.DebugFormat("[CompleteMovement] ValidateAndSendAppearanceAndAgentData: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
||||||
|
|
||||||
// attachments
|
// attachments
|
||||||
|
|
||||||
if (isNPC || (TeleportFlags & TeleportFlags.ViaLogin) != 0)
|
if (isNPC || (TeleportFlags & TeleportFlags.ViaLogin) != 0)
|
||||||
{
|
{
|
||||||
if (Scene.AttachmentsModule != null)
|
if (Scene.AttachmentsModule != null)
|
||||||
// Util.FireAndForget(
|
// Util.FireAndForget(
|
||||||
// o =>
|
// o =>
|
||||||
// {
|
// {
|
||||||
Scene.AttachmentsModule.RezAttachments(this);
|
Scene.AttachmentsModule.RezAttachments(this);
|
||||||
// });
|
// });
|
||||||
}
|
}
|
||||||
|
@ -1829,23 +1890,23 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Resume scripts this possible should also be moved down after sending the avatar to viewer ?
|
// Resume scripts this possible should also be moved down after sending the avatar to viewer ?
|
||||||
foreach (SceneObjectGroup sog in m_attachments)
|
foreach (SceneObjectGroup sog in m_attachments)
|
||||||
{
|
{
|
||||||
sog.SendFullUpdateToClient(ControllingClient);
|
|
||||||
SendFullUpdateToClient(ControllingClient);
|
SendFullUpdateToClient(ControllingClient);
|
||||||
|
sog.SendFullUpdateToClient(ControllingClient);
|
||||||
|
|
||||||
if (!sog.HasPrivateAttachmentPoint)
|
if (!sog.HasPrivateAttachmentPoint)
|
||||||
{
|
{
|
||||||
// sog.ScheduleGroupForFullUpdate();
|
// sog.ScheduleGroupForFullUpdate();
|
||||||
m_scene.ForEachScenePresence(delegate(ScenePresence p)
|
foreach(ScenePresence p in allpresences)
|
||||||
{
|
{
|
||||||
if (p == this)
|
if (p == this)
|
||||||
return;
|
continue;
|
||||||
|
|
||||||
if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200)
|
if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200)
|
||||||
return;
|
continue;
|
||||||
|
|
||||||
sog.SendFullUpdateToClient(p.ControllingClient);
|
|
||||||
SendFullUpdateToClient(p.ControllingClient); // resend our data by updates path
|
SendFullUpdateToClient(p.ControllingClient); // resend our data by updates path
|
||||||
});
|
sog.SendFullUpdateToClient(p.ControllingClient);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource());
|
sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource());
|
||||||
sog.ResumeScripts();
|
sog.ResumeScripts();
|
||||||
|
@ -1872,25 +1933,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
m_log.DebugFormat("[CompleteMovement] SendInitialDataToMe: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
m_log.DebugFormat("[CompleteMovement] SendInitialDataToMe: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
||||||
|
|
||||||
if (!IsChildAgent)
|
if (!IsChildAgent && openChildAgents)
|
||||||
{
|
|
||||||
// moved from makeroot missing in sendInitialDataToMe
|
|
||||||
// its already there
|
|
||||||
/*
|
|
||||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence presence)
|
|
||||||
{
|
|
||||||
if (presence != this)
|
|
||||||
presence.Animator.SendAnimPackToClient(ControllingClient);
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
if (openChildAgents)
|
|
||||||
{
|
{
|
||||||
IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>();
|
IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>();
|
||||||
if (friendsModule != null)
|
if (friendsModule != null)
|
||||||
friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
|
friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
|
||||||
|
|
||||||
m_log.DebugFormat("[CompleteMovement] friendsModule: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
m_log.DebugFormat("[CompleteMovement] friendsModule: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -3481,6 +3531,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Do everything required once a client completes its movement into a region and becomes
|
/// Do everything required once a client completes its movement into a region and becomes
|
||||||
/// a root agent.
|
/// a root agent.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
///
|
||||||
|
/* only called from on place, do done inline there
|
||||||
private void ValidateAndSendAppearanceAndAgentData()
|
private void ValidateAndSendAppearanceAndAgentData()
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("[SCENE PRESENCE] SendInitialData: {0} ({1})", Name, UUID);
|
//m_log.DebugFormat("[SCENE PRESENCE] SendInitialData: {0} ({1})", Name, UUID);
|
||||||
|
@ -3502,11 +3554,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_scene.AvatarFactory.QueueAppearanceSave(UUID);
|
m_scene.AvatarFactory.QueueAppearanceSave(UUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// send avatar object to all viewers so they cross it into region
|
||||||
bool newhide = m_currentParcelHide;
|
bool newhide = m_currentParcelHide;
|
||||||
m_currentParcelHide = false;
|
m_currentParcelHide = false;
|
||||||
|
|
||||||
SendAvatarDataToAllAgents();
|
SendAvatarDataToAllAgents();
|
||||||
|
|
||||||
|
// now hide
|
||||||
if (newhide)
|
if (newhide)
|
||||||
{
|
{
|
||||||
ParcelLoginCheck(m_currentParcelUUID);
|
ParcelLoginCheck(m_currentParcelUUID);
|
||||||
|
@ -3522,7 +3576,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if(Animator!= null)
|
if(Animator!= null)
|
||||||
Animator.SendAnimPack();
|
Animator.SendAnimPack();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send avatar full data appearance and animations for all other root agents to this agent, this agent
|
/// Send avatar full data appearance and animations for all other root agents to this agent, this agent
|
||||||
/// can be either a child or root
|
/// can be either a child or root
|
||||||
|
@ -3530,15 +3584,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void SendOtherAgentsAvatarFullToMe()
|
public void SendOtherAgentsAvatarFullToMe()
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
|
m_scene.ForEachRootScenePresence(delegate(ScenePresence p)
|
||||||
{
|
{
|
||||||
// only send information about other root agents
|
// only send information about other root agents
|
||||||
if (scenePresence.UUID == UUID)
|
if (p.UUID == UUID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
scenePresence.SendAvatarDataToAgent(this);
|
if (p.ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && GodLevel < 200)
|
||||||
scenePresence.SendAppearanceToAgent(this);
|
return;
|
||||||
scenePresence.SendAnimPackToAgent(this);
|
|
||||||
|
p.SendAvatarDataToAgentNF(this);
|
||||||
|
p.SendAppearanceToAgentNF(this);
|
||||||
|
p.SendAnimPackToAgentNF(this);
|
||||||
// for now attachments are sent with all SOG
|
// for now attachments are sent with all SOG
|
||||||
count++;
|
count++;
|
||||||
});
|
});
|
||||||
|
@ -3559,7 +3616,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[SCENE PRESENCE]: Attempt to send avatar data from a child agent for {0} in {1}",
|
"[SCENE PRESENCE]: Attempt to send avatar data from a child agent for {0} in {1}",
|
||||||
Name, Scene.RegionInfo.RegionName);
|
Name, Scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3575,6 +3631,26 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_scene.StatsReporter.AddAgentUpdates(count);
|
m_scene.StatsReporter.AddAgentUpdates(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sends avatar object to all clients so they cross it into region
|
||||||
|
// then sends kills to hide
|
||||||
|
public void SendInitialAvatarDataToAllAgents(List<ScenePresence> presences)
|
||||||
|
{
|
||||||
|
m_lastSize = Appearance.AvatarSize;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
foreach (ScenePresence p in presences)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
m_scene.StatsReporter.AddAgentUpdates(count);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send avatar data to an agent.
|
/// Send avatar data to an agent.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -3637,6 +3713,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
UUID, Appearance.VisualParams, Appearance.Texture.GetBytes());
|
UUID, Appearance.VisualParams, Appearance.Texture.GetBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAppearanceToAgentNF(ScenePresence avatar)
|
||||||
|
{
|
||||||
|
avatar.ControllingClient.SendAppearance(
|
||||||
|
UUID, Appearance.VisualParams, Appearance.Texture.GetBytes());
|
||||||
|
}
|
||||||
|
|
||||||
public void SendAnimPackToAgent(ScenePresence p)
|
public void SendAnimPackToAgent(ScenePresence p)
|
||||||
{
|
{
|
||||||
if (IsChildAgent || Animator == null)
|
if (IsChildAgent || Animator == null)
|
||||||
|
@ -3648,6 +3730,29 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Animator.SendAnimPackToClient(p.ControllingClient);
|
Animator.SendAnimPackToClient(p.ControllingClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAnimPackToAgent(ScenePresence p, UUID[] animations, int[] seqs, UUID[] objectIDs)
|
||||||
|
{
|
||||||
|
if (IsChildAgent)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200)
|
||||||
|
return;
|
||||||
|
|
||||||
|
p.ControllingClient.SendAnimations(animations, seqs, ControllingClient.AgentId, objectIDs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendAnimPackToAgentNF(ScenePresence p)
|
||||||
|
{
|
||||||
|
if (IsChildAgent || Animator == null)
|
||||||
|
return;
|
||||||
|
Animator.SendAnimPackToClient(p.ControllingClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendAnimPackToAgentNF(ScenePresence p, UUID[] animations, int[] seqs, UUID[] objectIDs)
|
||||||
|
{
|
||||||
|
p.ControllingClient.SendAnimations(animations, seqs, ControllingClient.AgentId, objectIDs);
|
||||||
|
}
|
||||||
|
|
||||||
public void SendAnimPack(UUID[] animations, int[] seqs, UUID[] objectIDs)
|
public void SendAnimPack(UUID[] animations, int[] seqs, UUID[] objectIDs)
|
||||||
{
|
{
|
||||||
if (IsChildAgent)
|
if (IsChildAgent)
|
||||||
|
@ -5634,22 +5739,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ParcelLoginCheck(UUID currentParcelID)
|
|
||||||
{
|
|
||||||
List<ScenePresence> allpresences = m_scene.GetScenePresences();
|
|
||||||
|
|
||||||
foreach (ScenePresence p in allpresences)
|
|
||||||
{
|
|
||||||
if (p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (currentParcelID != p.currentParcelUUID && p.GodLevel < 200)
|
|
||||||
{
|
|
||||||
SendKillTo(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void parcelRegionCross()
|
public void parcelRegionCross()
|
||||||
{
|
{
|
||||||
if (!ParcelHideThisAvatar || GodLevel >= 200)
|
if (!ParcelHideThisAvatar || GodLevel >= 200)
|
||||||
|
@ -5817,8 +5906,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (killsToSendme.Count > 0)
|
if (killsToSendme.Count > 0)
|
||||||
{
|
{
|
||||||
m_log.Debug("[AVATAR]: killtoMe: " + Lastname + " " + killsToSendme.Count.ToString());
|
|
||||||
|
|
||||||
foreach (ScenePresence p in killsToSendme)
|
foreach (ScenePresence p in killsToSendme)
|
||||||
{
|
{
|
||||||
m_log.Debug("[AVATAR]: killToMe: " + Lastname + " " + p.Lastname);
|
m_log.Debug("[AVATAR]: killToMe: " + Lastname + " " + p.Lastname);
|
||||||
|
|
Loading…
Reference in New Issue