Merge branch 'ubitworkmaster'
commit
2ab0790aa8
|
@ -358,7 +358,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
return queue.Count > 0;
|
||||
}
|
||||
|
||||
m_log.WarnFormat("POLLED FOR EVENTS BY {0} unknown agent", agentID);
|
||||
//m_log.WarnFormat("POLLED FOR EVENTS BY {0} unknown agent", agentID);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -388,6 +388,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
|
||||
Dictionary<SceneObjectGroup, string> scriptStates = new Dictionary<SceneObjectGroup, string>();
|
||||
|
||||
if (sp.PresenceType != PresenceType.Npc)
|
||||
{
|
||||
foreach (SceneObjectGroup so in attachments)
|
||||
{
|
||||
// Scripts MUST be snapshotted before the object is
|
||||
|
@ -402,10 +404,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
{
|
||||
foreach (SceneObjectGroup so in attachments)
|
||||
UpdateDetachedObject(sp, so, scriptStates[so]);
|
||||
|
||||
sp.ClearAttachments();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lock (sp.AttachmentsSyncLock)
|
||||
{
|
||||
foreach (SceneObjectGroup so in attachments)
|
||||
UpdateDetachedObject(sp, so, String.Empty);
|
||||
sp.ClearAttachments();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteAttachmentsFromScene(IScenePresence sp, bool silent)
|
||||
{
|
||||
|
@ -1014,6 +1025,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
// Remove the object from the scene so no more updates
|
||||
// are sent. Doing this before the below changes will ensure
|
||||
// updates can't cause "HUD artefacts"
|
||||
|
||||
m_scene.DeleteSceneObject(so, false, false);
|
||||
|
||||
// Prepare sog for storage
|
||||
|
|
|
@ -236,12 +236,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
|
|||
fromName = avatar.Name;
|
||||
fromID = c.Sender.AgentId;
|
||||
if (avatar.GodLevel >= 200)
|
||||
{
|
||||
{ // let gods speak to outside or things may get confusing
|
||||
fromNamePrefix = m_adminPrefix;
|
||||
checkParcelHide = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
checkParcelHide = true;
|
||||
}
|
||||
destination = UUID.Zero; // Avatars cant "SayTo"
|
||||
ownerID = c.Sender.AgentId;
|
||||
checkParcelHide = true;
|
||||
|
||||
hidePos = fromPos;
|
||||
break;
|
||||
|
||||
|
@ -305,7 +310,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
|
|||
// objects on a parcel with access restrictions
|
||||
if (checkParcelHide)
|
||||
{
|
||||
if (sourceParcelID != Presencecheck.LandData.GlobalID)
|
||||
if (sourceParcelID != Presencecheck.LandData.GlobalID && presence.GodLevel < 200)
|
||||
return;
|
||||
}
|
||||
if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true)
|
||||
|
|
|
@ -368,7 +368,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
public void SendOutNearestBanLine(IClientAPI client)
|
||||
{
|
||||
ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
|
||||
if (sp == null || sp.IsChildAgent)
|
||||
if (sp == null)
|
||||
return;
|
||||
|
||||
List<ILandObject> checkLandParcels = ParcelsNearPoint(sp.AbsolutePosition);
|
||||
|
@ -394,11 +394,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
if (!m_scene.TryGetScenePresence(remoteClient.AgentId, out avatar))
|
||||
return;
|
||||
if (avatar.IsChildAgent)
|
||||
return;
|
||||
|
||||
SendParcelOverlay(remoteClient);
|
||||
|
||||
if (avatar.IsChildAgent)
|
||||
return;
|
||||
|
||||
ILandObject over = GetLandObject(avatar.AbsolutePosition.X,avatar.AbsolutePosition.Y);
|
||||
if (over == null)
|
||||
return;
|
||||
|
@ -958,7 +959,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData);
|
||||
m_scene.ForEachClient(SendParcelOverlay);
|
||||
result.SendLandUpdateToAvatarsOverMe();
|
||||
|
||||
startLandObject.SendLandUpdateToAvatarsOverMe();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1047,7 +1048,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
/// <param name="remote_client">The object representing the client</param>
|
||||
public void SendParcelOverlay(IClientAPI remote_client)
|
||||
{
|
||||
|
||||
if (remote_client.SceneAgent.PresenceType == PresenceType.Npc)
|
||||
return;
|
||||
|
||||
|
@ -1198,20 +1198,24 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
bool needOverlay = false;
|
||||
if (land.UpdateLandProperties(args, remote_client, out snap_selection, out needOverlay))
|
||||
{
|
||||
//the proprieties to who changed it
|
||||
//the proprieties to who changed them
|
||||
|
||||
land.SendLandProperties(0, true, LandChannel.LAND_RESULT_SINGLE, remote_client);
|
||||
|
||||
if (needOverlay)
|
||||
{
|
||||
UUID parcelID = land.LandData.GlobalID;
|
||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence avatar)
|
||||
m_scene.ForEachScenePresence(delegate(ScenePresence avatar)
|
||||
{
|
||||
if (avatar.IsDeleted || avatar.IsChildAgent)
|
||||
if (avatar.IsDeleted || avatar.isNPC)
|
||||
return;
|
||||
|
||||
IClientAPI client = avatar.ControllingClient;
|
||||
SendParcelOverlay(client);
|
||||
|
||||
if (avatar.IsChildAgent)
|
||||
return;
|
||||
|
||||
ILandObject aland = GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
||||
if (aland != null)
|
||||
{
|
||||
|
|
|
@ -617,6 +617,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
avatar.Invulnerable = true;
|
||||
|
||||
SendLandUpdateToClient(snap_selection, avatar.ControllingClient);
|
||||
avatar.currentParcelUUID = LandData.GlobalID;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1366,7 +1366,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
try
|
||||
{
|
||||
// m_log.ErrorFormat("[EVENT MANAGER]: OnRemovePresenceDelegate: {0}",d.Target.ToString());
|
||||
d(agentId);
|
||||
// m_log.ErrorFormat("[EVENT MANAGER]: OnRemovePresenceDelegate done ");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -2037,7 +2039,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
try
|
||||
{
|
||||
// m_log.ErrorFormat("[EVENT MANAGER]: TriggerClientClosed: {0}", d.Target.ToString());
|
||||
d(ClientID, scene);
|
||||
// m_log.ErrorFormat("[EVENT MANAGER]: TriggerClientClosed done ");
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
@ -3640,13 +3640,17 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
m_eventManager.TriggerClientClosed(agentID, this);
|
||||
// m_log.Debug("[Scene]TriggerClientClosed done");
|
||||
m_eventManager.TriggerOnRemovePresence(agentID);
|
||||
// m_log.Debug("[Scene]TriggerOnRemovePresence done");
|
||||
|
||||
if (!isChildAgent)
|
||||
{
|
||||
if (AttachmentsModule != null)
|
||||
{
|
||||
// m_log.Debug("[Scene]DeRezAttachments");
|
||||
AttachmentsModule.DeRezAttachments(avatar);
|
||||
// m_log.Debug("[Scene]DeRezAttachments done");
|
||||
}
|
||||
|
||||
ForEachClient(
|
||||
|
@ -3660,7 +3664,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
// It's possible for child agents to have transactions if changes are being made cross-border.
|
||||
if (AgentTransactionsModule != null)
|
||||
{
|
||||
// m_log.Debug("[Scene]RemoveAgentAssetTransactions");
|
||||
AgentTransactionsModule.RemoveAgentAssetTransactions(agentID);
|
||||
}
|
||||
m_log.Debug("[Scene] The avatar has left the building");
|
||||
}
|
||||
catch (Exception e)
|
||||
|
|
|
@ -164,12 +164,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
lock (parcelLock)
|
||||
{
|
||||
bool oldhide = m_currentParcelHide;
|
||||
bool check = true;
|
||||
bool checksame = true;
|
||||
if (value != m_currentParcelUUID)
|
||||
{
|
||||
m_previusParcelHide = m_currentParcelHide;
|
||||
m_previusParcelUUID = m_currentParcelUUID;
|
||||
check = false;
|
||||
checksame = false;
|
||||
}
|
||||
m_currentParcelUUID = value;
|
||||
m_currentParcelHide = false;
|
||||
|
@ -177,8 +177,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
ILandObject land = m_scene.LandChannel.GetLandObject(AbsolutePosition.X, AbsolutePosition.Y);
|
||||
if (land != null && !land.LandData.SeeAVs)
|
||||
m_currentParcelHide = true;
|
||||
if (m_previusParcelUUID != UUID.Zero)
|
||||
ParcelCrossCheck(m_currentParcelUUID,m_previusParcelUUID,m_currentParcelHide, m_previusParcelHide, oldhide,check);
|
||||
|
||||
if (m_previusParcelUUID != UUID.Zero || checksame)
|
||||
ParcelCrossCheck(m_currentParcelUUID,m_previusParcelUUID,m_currentParcelHide, m_previusParcelHide, oldhide,checksame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1835,42 +1836,32 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_currentParcelUUID = UUID.Zero;
|
||||
|
||||
// send initial land overlay and parcel
|
||||
if (!IsChildAgent)
|
||||
{
|
||||
ILandChannel landch = m_scene.LandChannel;
|
||||
if (landch != null)
|
||||
{
|
||||
landch.sendClientInitialLandInfo(client);
|
||||
if (!IsChildAgent)
|
||||
{
|
||||
newhide = m_currentParcelHide;
|
||||
m_currentParcelHide = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// send agentData to all clients including us (?)
|
||||
// get appearance
|
||||
// if in cache sent it to all clients
|
||||
// send what we have to us, even if not in cache ( bad? )
|
||||
ValidateAndSendAppearanceAndAgentData();
|
||||
|
||||
// Create child agents in neighbouring regions
|
||||
if (openChildAgents && !IsChildAgent)
|
||||
{
|
||||
IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
|
||||
if (m_agentTransfer != null)
|
||||
m_agentTransfer.EnableChildAgents(this);
|
||||
}
|
||||
|
||||
|
||||
// attachments
|
||||
if (isNPC || (TeleportFlags & TeleportFlags.ViaLogin) != 0)
|
||||
{
|
||||
if (Scene.AttachmentsModule != null)
|
||||
Util.FireAndForget(
|
||||
o =>
|
||||
{
|
||||
// Util.FireAndForget(
|
||||
// o =>
|
||||
// {
|
||||
Scene.AttachmentsModule.RezAttachments(this);
|
||||
});
|
||||
// });
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1894,6 +1885,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms",
|
||||
// client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds);
|
||||
|
||||
// Create child agents in neighbouring regions
|
||||
if (openChildAgents && !IsChildAgent)
|
||||
{
|
||||
IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
|
||||
if (m_agentTransfer != null)
|
||||
m_agentTransfer.EnableChildAgents(this);
|
||||
}
|
||||
|
||||
// send the rest of the world
|
||||
if (m_teleportFlags > 0 && !isNPC)
|
||||
SendInitialDataToMe();
|
||||
|
@ -1923,8 +1922,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
// if hide force a check
|
||||
if (!IsChildAgent && newhide)
|
||||
ParcelCrossCheck(m_currentParcelUUID, m_previusParcelUUID,
|
||||
true, m_previusParcelHide, false, true);
|
||||
{
|
||||
ParcelLoginCheck(m_currentParcelUUID);
|
||||
m_currentParcelHide = newhide;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -3377,7 +3378,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (!remoteClient.IsActive)
|
||||
return;
|
||||
|
||||
if (ParcelHideThisAvatar && p.currentParcelUUID != currentParcelUUID)
|
||||
if (ParcelHideThisAvatar && p.currentParcelUUID != currentParcelUUID && p.GodLevel < 200)
|
||||
return;
|
||||
|
||||
|
||||
|
@ -3464,6 +3465,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// we created a new ScenePresence (a new child agent) in a fresh region.
|
||||
// Request info about all the (root) agents in this region
|
||||
// Note: This won't send data *to* other clients in that region (children don't send)
|
||||
if (m_teleportFlags <= 0)
|
||||
{
|
||||
ILandChannel landch = m_scene.LandChannel;
|
||||
if (landch != null)
|
||||
{
|
||||
landch.sendClientInitialLandInfo(ControllingClient);
|
||||
}
|
||||
}
|
||||
SendOtherAgentsAvatarDataToMe();
|
||||
SendOtherAgentsAppearanceToMe();
|
||||
|
||||
|
@ -3586,7 +3595,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public void SendAvatarDataToAgent(ScenePresence avatar)
|
||||
{
|
||||
//m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID);
|
||||
if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID)
|
||||
if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodLevel < 200)
|
||||
return;
|
||||
avatar.ControllingClient.SendAvatarDataImmediate(this);
|
||||
Animator.SendAnimPackToClient(avatar.ControllingClient);
|
||||
|
@ -3653,7 +3662,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID);
|
||||
if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID)
|
||||
if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodLevel < 200)
|
||||
return;
|
||||
avatar.ControllingClient.SendAppearance(
|
||||
UUID, Appearance.VisualParams, Appearance.Texture.GetBytes());
|
||||
|
@ -3866,14 +3875,21 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// </summary>
|
||||
protected bool CrossToNewRegion()
|
||||
{
|
||||
bool result = false;
|
||||
parcelRegionCross(false);
|
||||
try
|
||||
{
|
||||
return m_scene.CrossAgentToNewRegion(this, Flying);
|
||||
result = m_scene.CrossAgentToNewRegion(this, Flying);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return m_scene.CrossAgentToNewRegion(this, false);
|
||||
result = m_scene.CrossAgentToNewRegion(this, false);
|
||||
}
|
||||
if(!result)
|
||||
parcelRegionCross(true);
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
|
@ -3947,6 +3963,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// </summary>
|
||||
public void GrantGodlikePowers(UUID agentID, UUID sessionID, UUID token, bool godStatus)
|
||||
{
|
||||
int oldgodlevel = GodLevel;
|
||||
|
||||
if (godStatus)
|
||||
{
|
||||
// For now, assign god level 200 to anyone
|
||||
|
@ -3967,6 +3985,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
ControllingClient.SendAdminResponse(token, (uint)GodLevel);
|
||||
|
||||
if(oldgodlevel != GodLevel)
|
||||
parcelGodCheck(m_currentParcelUUID, GodLevel >= 200);
|
||||
}
|
||||
|
||||
#region Child Agent Updates
|
||||
|
@ -5377,7 +5398,221 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
}
|
||||
|
||||
private void ParcelCrossCheck(UUID currentParcelUUID,UUID previusParcelUUID,
|
||||
private void parcelGodCheck(UUID currentParcelID, bool isGod)
|
||||
{
|
||||
List<ScenePresence> allpresences = null;
|
||||
|
||||
|
||||
allpresences = m_scene.GetScenePresences();
|
||||
|
||||
if (isGod)
|
||||
{
|
||||
List<ScenePresence> viewsToSendme = new List<ScenePresence>();
|
||||
|
||||
foreach (ScenePresence p in allpresences)
|
||||
{
|
||||
if (p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive)
|
||||
continue;
|
||||
|
||||
if (p.ParcelHideThisAvatar && p.currentParcelUUID != currentParcelID)
|
||||
{
|
||||
viewsToSendme.Add(p); // i see them
|
||||
}
|
||||
}
|
||||
|
||||
if (viewsToSendme.Count > 0)
|
||||
{
|
||||
foreach (ScenePresence p in viewsToSendme)
|
||||
{
|
||||
if (p.IsChildAgent)
|
||||
continue;
|
||||
m_log.Debug("[AVATAR]: viewMe: " + Lastname + " " + p.Lastname);
|
||||
ControllingClient.SendAvatarDataImmediate(p);
|
||||
p.SendAppearanceToAgent(this);
|
||||
p.SendAttachmentsToClient(ControllingClient);
|
||||
if (p.Animator != null)
|
||||
p.Animator.SendAnimPackToClient(ControllingClient);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
List<ScenePresence> killsToSendme = new List<ScenePresence>();
|
||||
|
||||
foreach (ScenePresence p in allpresences)
|
||||
{
|
||||
if (p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive)
|
||||
continue;
|
||||
|
||||
if (p.ParcelHideThisAvatar && p.currentParcelUUID != currentParcelID)
|
||||
{
|
||||
killsToSendme.Add(p);
|
||||
}
|
||||
}
|
||||
|
||||
if (killsToSendme.Count > 0)
|
||||
{
|
||||
foreach (ScenePresence p in killsToSendme)
|
||||
{
|
||||
m_log.Debug("[AVATAR]: killMe: " + Lastname + " " + p.Lastname);
|
||||
try { ControllingClient.SendKillObject(new List<uint> { p.LocalId }); }
|
||||
catch (NullReferenceException) { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void ParcelLoginCheck(UUID currentParcelID)
|
||||
{
|
||||
List<ScenePresence> killsToSendto = new List<ScenePresence>();
|
||||
List<ScenePresence> killsToSendme = new List<ScenePresence>();
|
||||
List<ScenePresence> viewsToSendto = new List<ScenePresence>();
|
||||
List<ScenePresence> viewsToSendme = new List<ScenePresence>();
|
||||
List<ScenePresence> allpresences = null;
|
||||
|
||||
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)
|
||||
{
|
||||
if (p.GodLevel < 200)
|
||||
killsToSendto.Add(p);
|
||||
if (GodLevel < 200 && p.ParcelHideThisAvatar)
|
||||
killsToSendme.Add(p);
|
||||
}
|
||||
else
|
||||
{
|
||||
viewsToSendto.Add(p);
|
||||
viewsToSendme.Add(p);
|
||||
}
|
||||
}
|
||||
allpresences.Clear();
|
||||
|
||||
// send the things
|
||||
// kill main avatar object
|
||||
if (killsToSendto.Count > 0 && PresenceType != PresenceType.Npc)
|
||||
{
|
||||
foreach (ScenePresence p in killsToSendto)
|
||||
{
|
||||
m_log.Debug("[AVATAR]: killTo: " + Lastname + " " + p.Lastname);
|
||||
try { p.ControllingClient.SendKillObject(new List<uint> { LocalId }); }
|
||||
catch (NullReferenceException) { }
|
||||
}
|
||||
}
|
||||
|
||||
if (killsToSendme.Count > 0)
|
||||
{
|
||||
foreach (ScenePresence p in killsToSendme)
|
||||
{
|
||||
m_log.Debug("[AVATAR]: killMe: " + Lastname + " " + p.Lastname);
|
||||
try { ControllingClient.SendKillObject(new List<uint> { p.LocalId }); }
|
||||
catch (NullReferenceException) { }
|
||||
}
|
||||
}
|
||||
|
||||
if (viewsToSendto.Count > 0 && PresenceType != PresenceType.Npc)
|
||||
{
|
||||
foreach (ScenePresence p in viewsToSendto)
|
||||
{
|
||||
m_log.Debug("[AVATAR]: viewTo: " + Lastname + " " + p.Lastname);
|
||||
p.ControllingClient.SendAvatarDataImmediate(this);
|
||||
SendAppearanceToAgent(p);
|
||||
SendAttachmentsToClient(p.ControllingClient);
|
||||
if (Animator != null)
|
||||
Animator.SendAnimPackToClient(p.ControllingClient);
|
||||
}
|
||||
}
|
||||
|
||||
if (viewsToSendme.Count > 0)
|
||||
{
|
||||
foreach (ScenePresence p in viewsToSendme)
|
||||
{
|
||||
m_log.Debug("[AVATAR]: viewMe: " + Lastname + "<-" + p.Lastname);
|
||||
if (p.IsChildAgent)
|
||||
continue;
|
||||
ControllingClient.SendAvatarDataImmediate(p);
|
||||
p.SendAppearanceToAgent(this);
|
||||
p.SendAttachmentsToClient(ControllingClient);
|
||||
if (p.Animator != null)
|
||||
p.Animator.SendAnimPackToClient(ControllingClient);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void parcelRegionCross(bool abort)
|
||||
{
|
||||
if (!ParcelHideThisAvatar)
|
||||
return;
|
||||
|
||||
List<ScenePresence> allpresences = null;
|
||||
allpresences = m_scene.GetScenePresences();
|
||||
|
||||
if (abort)
|
||||
{
|
||||
List<ScenePresence> viewsToSendme = new List<ScenePresence>();
|
||||
|
||||
foreach (ScenePresence p in allpresences)
|
||||
{
|
||||
if (p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive)
|
||||
continue;
|
||||
|
||||
if (p.currentParcelUUID == m_currentParcelUUID)
|
||||
{
|
||||
viewsToSendme.Add(p);
|
||||
}
|
||||
}
|
||||
|
||||
if (viewsToSendme.Count > 0)
|
||||
{
|
||||
foreach (ScenePresence p in viewsToSendme)
|
||||
{
|
||||
if (p.IsChildAgent)
|
||||
continue;
|
||||
// m_log.Debug("[AVATAR]: viewMe: " + Lastname + " " + p.Lastname);
|
||||
ControllingClient.SendAvatarDataImmediate(p);
|
||||
p.SendAppearanceToAgent(this);
|
||||
p.SendAttachmentsToClient(ControllingClient);
|
||||
if (p.Animator != null)
|
||||
p.Animator.SendAnimPackToClient(ControllingClient);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GodLevel >= 200)
|
||||
return;
|
||||
|
||||
List<ScenePresence> killsToSendme = new List<ScenePresence>();
|
||||
foreach (ScenePresence p in allpresences)
|
||||
{
|
||||
if (p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive)
|
||||
continue;
|
||||
|
||||
if (p.currentParcelUUID == m_currentParcelUUID)
|
||||
{
|
||||
killsToSendme.Add(p);
|
||||
}
|
||||
}
|
||||
|
||||
if (killsToSendme.Count > 0)
|
||||
{
|
||||
foreach (ScenePresence p in killsToSendme)
|
||||
{
|
||||
m_log.Debug("[AVATAR]: killMe: " + Lastname + " " + p.Lastname);
|
||||
try { ControllingClient.SendKillObject(new List<uint> { p.LocalId }); }
|
||||
catch (NullReferenceException) { }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void ParcelCrossCheck(UUID currentParcelID,UUID previusParcelID,
|
||||
bool currentParcelHide, bool previusParcelHide, bool oldhide,bool check)
|
||||
{
|
||||
List<ScenePresence> killsToSendto = new List<ScenePresence>();
|
||||
|
@ -5391,6 +5626,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (check)
|
||||
{
|
||||
// check is relative to current parcel only
|
||||
if (currentParcelUUID == null || oldhide == currentParcelHide)
|
||||
return;
|
||||
|
||||
|
@ -5404,7 +5640,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
continue;
|
||||
|
||||
// those on not on parcel see me
|
||||
if (currentParcelUUID != p.currentParcelUUID)
|
||||
if (currentParcelID != p.currentParcelUUID)
|
||||
{
|
||||
viewsToSendto.Add(p); // they see me
|
||||
}
|
||||
|
@ -5419,14 +5655,13 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
continue;
|
||||
|
||||
// those not on parcel dont see me
|
||||
if (currentParcelUUID != p.currentParcelUUID)
|
||||
if (currentParcelID != p.currentParcelUUID && p.GodLevel < 200)
|
||||
{
|
||||
killsToSendto.Add(p); // they dont see me
|
||||
}
|
||||
}
|
||||
} // where public end
|
||||
|
||||
|
||||
allpresences.Clear();
|
||||
}
|
||||
else
|
||||
|
@ -5436,7 +5671,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// now on a private parcel
|
||||
allpresences = m_scene.GetScenePresences();
|
||||
|
||||
if (previusParcelHide && previusParcelUUID != UUID.Zero)
|
||||
if (previusParcelHide && previusParcelID != UUID.Zero)
|
||||
{
|
||||
foreach (ScenePresence p in allpresences)
|
||||
{
|
||||
|
@ -5444,13 +5679,15 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
continue;
|
||||
|
||||
// only those on previus parcel need receive kills
|
||||
if (previusParcelUUID == p.currentParcelUUID)
|
||||
if (previusParcelID == p.currentParcelUUID)
|
||||
{
|
||||
if(p.GodLevel < 200)
|
||||
killsToSendto.Add(p); // they dont see me
|
||||
if(GodLevel < 200)
|
||||
killsToSendme.Add(p); // i dont see them
|
||||
}
|
||||
// only those on new parcel need see
|
||||
if (currentParcelUUID == p.currentParcelUUID)
|
||||
if (currentParcelID == p.currentParcelUUID)
|
||||
{
|
||||
viewsToSendto.Add(p); // they see me
|
||||
viewsToSendme.Add(p); // i see them
|
||||
|
@ -5468,7 +5705,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
continue;
|
||||
|
||||
// those not on new parcel dont see me
|
||||
if (currentParcelUUID != p.currentParcelUUID)
|
||||
if (currentParcelID != p.currentParcelUUID && p.GodLevel < 200)
|
||||
{
|
||||
killsToSendto.Add(p); // they dont see me
|
||||
}
|
||||
|
@ -5484,7 +5721,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
else
|
||||
{
|
||||
// now on public parcel
|
||||
if (previusParcelHide && previusParcelUUID != UUID.Zero)
|
||||
if (previusParcelHide && previusParcelID != UUID.Zero)
|
||||
{
|
||||
// was on private area
|
||||
allpresences = m_scene.GetScenePresences();
|
||||
|
@ -5494,7 +5731,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive)
|
||||
continue;
|
||||
// only those old parcel need receive kills
|
||||
if (previusParcelUUID == p.currentParcelUUID)
|
||||
if (previusParcelID == p.currentParcelUUID && GodLevel < 200)
|
||||
{
|
||||
killsToSendme.Add(p); // i dont see them
|
||||
}
|
||||
|
@ -5511,29 +5748,32 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
// send the things
|
||||
// kill main avatar object
|
||||
if (killsToSendto.Count > 0)
|
||||
if (killsToSendto.Count > 0 && PresenceType != PresenceType.Npc)
|
||||
{
|
||||
foreach (ScenePresence p in killsToSendto)
|
||||
{
|
||||
m_log.Debug("[AVATAR]: killTo: " + Lastname + " " + p.Lastname);
|
||||
try { p.ControllingClient.SendKillObject(new List<uint> { LocalId }); }
|
||||
catch (NullReferenceException) { }
|
||||
}
|
||||
}
|
||||
|
||||
if (killsToSendme.Count > 0 && PresenceType != PresenceType.Npc)
|
||||
if (killsToSendme.Count > 0 )
|
||||
{
|
||||
foreach (ScenePresence p in killsToSendme)
|
||||
{
|
||||
m_log.Debug("[AVATAR]: killMe: " + Lastname + " " + p.Lastname);
|
||||
try {ControllingClient.SendKillObject(new List<uint> { p.LocalId }); }
|
||||
catch (NullReferenceException) { }
|
||||
}
|
||||
}
|
||||
|
||||
if (viewsToSendto.Count > 0)
|
||||
if (viewsToSendto.Count > 0 && PresenceType != PresenceType.Npc)
|
||||
{
|
||||
foreach (ScenePresence p in viewsToSendto)
|
||||
{
|
||||
p.ControllingClient.SendAvatarDataImmediate(this);
|
||||
// m_log.Debug("[AVATAR]: viewTo: " + Lastname + " " + p.Lastname);
|
||||
SendAppearanceToAgent(p);
|
||||
SendAttachmentsToClient(p.ControllingClient);
|
||||
if (Animator != null)
|
||||
|
@ -5541,10 +5781,13 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
if (viewsToSendme.Count > 0 && PresenceType != PresenceType.Npc)
|
||||
if (viewsToSendme.Count > 0 )
|
||||
{
|
||||
foreach (ScenePresence p in viewsToSendme)
|
||||
{
|
||||
if (p.IsChildAgent)
|
||||
continue;
|
||||
// m_log.Debug("[AVATAR]: viewMe: " + Lastname + "<-" + p.Lastname);
|
||||
ControllingClient.SendAvatarDataImmediate(p);
|
||||
p.SendAppearanceToAgent(this);
|
||||
p.SendAttachmentsToClient(ControllingClient);
|
||||
|
|
Loading…
Reference in New Issue