Conflicts:
	OpenSim/Region/Framework/Scenes/Scene.cs
viewer-2-initial-appearance
Jonathan Freedman 2010-11-21 19:51:23 -08:00
commit 562147475c
21 changed files with 175 additions and 113 deletions

View File

@ -117,7 +117,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
m_application = openSim;
string bind_ip_address = m_config.GetString("bind_ip_address", "0.0.0.0");
IPAddress ipaddr = IPAddress.Parse( bind_ip_address );
IPAddress ipaddr = IPAddress.Parse(bind_ip_address);
m_httpServer = MainServer.GetHttpServer((uint)port,ipaddr);
Dictionary<string, XmlRpcMethod> availableMethods = new Dictionary<string, XmlRpcMethod>();

View File

@ -177,7 +177,7 @@ namespace OpenSim.Framework
m_owner = appearance.Owner;
m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
for (int i = 0 ; i < AvatarWearable.MAX_WEARABLES ; i++ )
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
m_wearables[i] = new AvatarWearable();
if (copyWearables && (appearance.Wearables != null))
{
@ -204,9 +204,9 @@ namespace OpenSim.Framework
public void GetAssetsFrom(AvatarAppearance app)
{
for (int i = 0 ; i < AvatarWearable.MAX_WEARABLES ; i++ )
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
{
for (int j = 0 ; j < m_wearables[i].Count ; j++)
for (int j = 0; j < m_wearables[i].Count; j++)
{
UUID itemID = m_wearables[i][j].ItemID;
UUID assetID = app.Wearables[i].GetAsset(itemID);
@ -220,7 +220,7 @@ namespace OpenSim.Framework
public void ClearWearables()
{
m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
for (int i = 0 ; i < AvatarWearable.MAX_WEARABLES ; i++ )
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
m_wearables[i] = new AvatarWearable();
}
@ -347,11 +347,10 @@ namespace OpenSim.Framework
// m_log.WarnFormat("[AVATARAPPEARANCE] set wearable {0} --> {1}:{2}",wearableId,wearable.ItemID,wearable.AssetID);
// DEBUG OFF
m_wearables[wearableId].Clear();
for (int i = 0 ; i < wearable.Count ; i++)
for (int i = 0; i < wearable.Count; i++)
m_wearables[wearableId].Add(wearable[i].ItemID, wearable[i].AssetID);
}
// DEBUG ON
public override String ToString()
{
@ -365,7 +364,7 @@ namespace OpenSim.Framework
foreach (AvatarWearable awear in m_wearables)
{
for ( int i = 0 ; i < awear.Count ; i++ )
for (int i = 0; i < awear.Count; i++)
s += String.Format("Wearable: item={0}, asset={1}\n",awear[i].ItemID,awear[i].AssetID);
}

View File

@ -64,7 +64,7 @@ namespace OpenSim.Framework
m_Servers[port] = new BaseHttpServer(port);
if (ipaddr != null )
if (ipaddr != null)
m_Servers[port].ListenIPAddress = ipaddr;
m_log.InfoFormat("[MAIN HTTP SERVER]: Starting main http server on port {0}", port);

View File

@ -651,8 +651,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
catch (Exception e)
{
// Make sure that we see any exception caused by the asynchronous operation.
m_log.Error(
string.Format("[LLCLIENTVIEW]: Caught exception while processing {0}", packetObject.Pack), e);
m_log.ErrorFormat(
"[LLCLIENTVIEW]: Caught exception while processing {0} for {1}, {2} {3}",
packetObject.Pack, Name, e.Message, e.StackTrace);
}
}

View File

@ -178,12 +178,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
UUID itemID = UUID.Zero;
if (sp != null)
{
foreach (SceneObjectGroup grp in sp.GetAttachments(AttachmentPt))
foreach (SceneObjectGroup grp in sp.Attachments)
{
itemID = grp.GetFromItemID();
if (itemID != UUID.Zero)
DetachSingleAttachmentToInv(itemID, remoteClient);
if (grp.GetAttachmentPoint() == (byte)AttachmentPt)
{
itemID = grp.GetFromItemID();
break;
}
}
if (itemID != UUID.Zero)
DetachSingleAttachmentToInv(itemID, remoteClient);
}
if (group.GetFromItemID() == UUID.Zero)

View File

@ -139,7 +139,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
return cached;
}
/// <summary>
/// Set appearance data (textureentry and slider settings) received from the client
/// </summary>
@ -221,7 +220,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
public void QueueAppearanceSend(UUID agentid)
{
// m_log.WarnFormat("[AVATAR FACTORY MODULE]: Queue appearance send for {0}",agentid);
// m_log.WarnFormat("[AVATAR FACTORY MODULE]: Queue appearance send for {0}", agentid);
// 100 nanoseconds (ticks) we should wait
long timestamp = DateTime.Now.Ticks + Convert.ToInt64(m_sendtime * 10000000);
@ -234,7 +233,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
public void QueueAppearanceSave(UUID agentid)
{
// m_log.WarnFormat("[AVATAR FACTORY MODULE]: Queue appearance save for {0}",agentid);
// m_log.WarnFormat("[AVATAR FACTORY MODULE]: Queue appearance save for {0}", agentid);
// 100 nanoseconds (ticks) we should wait
long timestamp = DateTime.Now.Ticks + Convert.ToInt64(m_savetime * 10000000);
@ -262,7 +261,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
// Send the appearance back to the avatar
// AvatarAppearance avp = sp.Appearance;
// sp.ControllingClient.SendAppearance(avp.Owner,avp.VisualParams,avp.Texture.GetBytes());
// sp.ControllingClient.SendAppearance(avp.Owner, avp.VisualParams, avp.Texture.GetBytes());
/*
// this needs to be fixed, the flag should be on scene presence not the region module
@ -293,8 +292,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
lock (m_sendqueue)
{
Dictionary<UUID,long> sends = new Dictionary<UUID,long>(m_sendqueue);
foreach (KeyValuePair<UUID,long> kvp in sends)
Dictionary<UUID, long> sends = new Dictionary<UUID, long>(m_sendqueue);
foreach (KeyValuePair<UUID, long> kvp in sends)
{
if (kvp.Value < now)
{
@ -306,8 +305,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
lock (m_savequeue)
{
Dictionary<UUID,long> saves = new Dictionary<UUID,long>(m_savequeue);
foreach (KeyValuePair<UUID,long> kvp in saves)
Dictionary<UUID, long> saves = new Dictionary<UUID, long>(m_savequeue);
foreach (KeyValuePair<UUID, long> kvp in saves)
{
if (kvp.Value < now)
{
@ -337,7 +336,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
// m_log.WarnFormat("[AVATAR FACTORY MODULE]: Received request for wearables of {0}", client.AgentId);
client.SendWearables(sp.Appearance.Wearables,sp.Appearance.Serial++);
client.SendWearables(sp.Appearance.Wearables, sp.Appearance.Serial++);
}
/// <summary>
@ -354,14 +353,14 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
return;
}
// m_log.WarnFormat("[AVATAR FACTORY MODULE]: AvatarIsWearing called for {0}",client.AgentId);
// m_log.WarnFormat("[AVATAR FACTORY MODULE]: AvatarIsWearing called for {0}", client.AgentId);
AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance, false);
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
{
if (wear.Type < AvatarWearable.MAX_WEARABLES)
avatAppearance.Wearables[wear.Type].Add(wear.ItemID,UUID.Zero);
avatAppearance.Wearables[wear.Type].Add(wear.ItemID, UUID.Zero);
}
avatAppearance.GetAssetsFrom(sp.Appearance);
@ -381,7 +380,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
{
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
{
for (int j = 0 ; j < appearance.Wearables[j].Count ; j ++ )
for (int j = 0; j < appearance.Wearables[j].Count; j++)
{
if (appearance.Wearables[i][j].ItemID == UUID.Zero)
continue;

View File

@ -435,6 +435,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// Now let's make it officially a child agent
sp.MakeChildAgent();
sp.Scene.CleanDroppedAttachments();
// Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
if (NeedsClosing(oldRegionX, newRegionX, oldRegionY, newRegionY, reg))

View File

@ -1098,12 +1098,14 @@ namespace OpenSim.Region.CoreModules.World.Estate
if (m_scene.RegionInfo.RegionSettings.AllowLandJoinDivide)
flags |= RegionFlags.AllowParcelChanges;
if (m_scene.RegionInfo.RegionSettings.BlockShowInSearch)
flags |= (RegionFlags)(1 << 29);
flags |= RegionFlags.BlockParcelSearch;
if (m_scene.RegionInfo.RegionSettings.FixedSun)
flags |= RegionFlags.SunFixed;
if (m_scene.RegionInfo.RegionSettings.Sandbox)
flags |= RegionFlags.Sandbox;
if (m_scene.RegionInfo.EstateSettings.AllowVoice)
flags |= RegionFlags.AllowVoice;
// Fudge these to always on, so the menu options activate
//

View File

@ -88,7 +88,8 @@ namespace OpenSim.Region.CoreModules.World.Land
// caches ExtendedLandData
private Cache parcelInfoCache;
private Vector3? forcedPosition = null;
private Dictionary<UUID, Vector3> forcedPosition =
new Dictionary<UUID, Vector3>();
#region INonSharedRegionModule Members
@ -177,7 +178,7 @@ namespace OpenSim.Region.CoreModules.World.Land
void ClientOnPreAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData)
{
//If we are forcing a position for them to go
if (forcedPosition != null)
if (forcedPosition.ContainsKey(remoteClient.AgentId))
{
ScenePresence clientAvatar = m_scene.GetScenePresence(remoteClient.AgentId);
@ -187,23 +188,23 @@ namespace OpenSim.Region.CoreModules.World.Land
//Make sure we stop if they get about to the right place to prevent yoyo and prevents getting stuck on banlines
if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition.Value) < .2)
if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition[remoteClient.AgentId]) < .2)
{
Debug.WriteLine(string.Format("Stopping force position because {0} is close enough to position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition));
forcedPosition = null;
Debug.WriteLine(string.Format("Stopping force position because {0} is close enough to position {1}", forcedPosition[remoteClient.AgentId], clientAvatar.AbsolutePosition));
forcedPosition.Remove(remoteClient.AgentId);
}
//if we are far away, teleport
else if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition.Value) > 3)
else if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition[remoteClient.AgentId]) > 3)
{
Debug.WriteLine(string.Format("Teleporting out because {0} is too far from avatar position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition));
clientAvatar.Teleport(forcedPosition.Value);
forcedPosition = null;
Debug.WriteLine(string.Format("Teleporting out because {0} is too far from avatar position {1}", forcedPosition[remoteClient.AgentId], clientAvatar.AbsolutePosition));
clientAvatar.Teleport(forcedPosition[remoteClient.AgentId]);
forcedPosition.Remove(remoteClient.AgentId);
}
else
{
//Forces them toward the forced position we want if they aren't there yet
agentData.UseClientAgentPosition = true;
agentData.ClientAgentPosition = forcedPosition.Value;
agentData.ClientAgentPosition = forcedPosition[remoteClient.AgentId];
}
}
}
@ -326,7 +327,7 @@ namespace OpenSim.Region.CoreModules.World.Land
if (m_scene.Permissions.IsGod(avatar.UUID)) return;
if (position.HasValue)
{
forcedPosition = position;
forcedPosition[avatar.ControllingClient.AgentId] = (Vector3)position;
}
}
@ -457,7 +458,7 @@ namespace OpenSim.Region.CoreModules.World.Land
parcel.IsBannedFromLand(clientAvatar.UUID))
{
//once we've sent the message once, keep going toward the target until we are done
if (forcedPosition == null)
if (forcedPosition.ContainsKey(clientAvatar.ControllingClient.AgentId))
{
SendYouAreBannedNotice(clientAvatar);
ForceAvatarToPosition(clientAvatar, m_scene.GetNearestAllowedPosition(clientAvatar));
@ -466,7 +467,7 @@ namespace OpenSim.Region.CoreModules.World.Land
else if (parcel.IsRestrictedFromLand(clientAvatar.UUID))
{
//once we've sent the message once, keep going toward the target until we are done
if (forcedPosition == null)
if (forcedPosition.ContainsKey(clientAvatar.ControllingClient.AgentId))
{
SendYouAreRestrictedNotice(clientAvatar);
ForceAvatarToPosition(clientAvatar, m_scene.GetNearestAllowedPosition(clientAvatar));
@ -475,7 +476,7 @@ namespace OpenSim.Region.CoreModules.World.Land
else
{
//when we are finally in a safe place, lets release the forced position lock
forcedPosition = null;
forcedPosition.Remove(clientAvatar.ControllingClient.AgentId);
}
}
}

View File

@ -97,7 +97,6 @@ namespace OpenSim.Region.CoreModules.World.Sound
else
gain = (float)((double)gain * ((radius - dis) / radius));
m_log.DebugFormat("Play sound, gain {0}", gain);
sp.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)gain, flags);
});
}

View File

@ -174,6 +174,7 @@ namespace OpenSim.Region.Framework.Scenes
private bool m_firstHeartbeat = true;
private object m_deleting_scene_object = new object();
private object m_cleaningAttachments = new object();
private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time;
private bool m_reprioritizationEnabled = true;
@ -3162,6 +3163,7 @@ namespace OpenSim.Region.Framework.Scenes
}
m_eventManager.TriggerOnRemovePresence(agentID);
ForEachClient(
delegate(IClientAPI client)
{
@ -3194,6 +3196,7 @@ namespace OpenSim.Region.Framework.Scenes
}
m_authenticateHandler.RemoveCircuit(avatar.ControllingClient.CircuitCode);
CleanDroppedAttachments();
//m_log.InfoFormat("[SCENE] Memory pre GC {0}", System.GC.GetTotalMemory(false));
//m_log.InfoFormat("[SCENE] Memory post GC {0}", System.GC.GetTotalMemory(true));
}
@ -3408,6 +3411,8 @@ namespace OpenSim.Region.Framework.Scenes
if (vialogin)
{
CleanDroppedAttachments();
if (TestBorderCross(agent.startpos, Cardinals.E))
{
Border crossedBorder = GetCrossedBorder(agent.startpos, Cardinals.E);
@ -3756,7 +3761,13 @@ namespace OpenSim.Region.Framework.Scenes
// We have to wait until the viewer contacts this region after receiving EAC.
// That calls AddNewClient, which finally creates the ScenePresence
m_log.Debug("ICADU -> pre wait");
ILandObject nearestParcel = GetNearestAllowedParcel(cAgentData.AgentID, Constants.RegionSize / 2, Constants.RegionSize / 2);
if (nearestParcel == null)
{
m_log.DebugFormat("[SCENE]: Denying root agent entry to {0}: no allowed parcel", cAgentData.AgentID);
return false;
}
ScenePresence childAgentUpdate = WaitGetScenePresence(cAgentData.AgentID);
m_log.Debug("ICADU -> post wait");
if (childAgentUpdate != null)
@ -4738,7 +4749,6 @@ namespace OpenSim.Region.Framework.Scenes
Vector3 nearestRegionEdgePoint = GetNearestRegionEdgePosition(avatar);
//Debug.WriteLine("They are really in a place they don't belong, sending them to: " + nearestRegionEdgePoint.ToString());
return nearestRegionEdgePoint;
return null;
}
private Vector3 GetParcelCenterAtGround(ILandObject parcel)
@ -4987,5 +4997,40 @@ namespace OpenSim.Region.Framework.Scenes
throw new Exception(error);
}
}
public void CleanDroppedAttachments()
{
List<SceneObjectGroup> objectsToDelete =
new List<SceneObjectGroup>();
lock (m_cleaningAttachments)
{
ForEachSOG(delegate (SceneObjectGroup grp)
{
if (grp.RootPart.Shape.PCode == 0 && grp.RootPart.Shape.State != 0 && (!objectsToDelete.Contains(grp)))
{
UUID agentID = grp.OwnerID;
if (agentID == UUID.Zero)
{
objectsToDelete.Add(grp);
return;
}
ScenePresence sp = GetScenePresence(agentID);
if (sp == null)
{
objectsToDelete.Add(grp);
return;
}
}
});
}
foreach (SceneObjectGroup grp in objectsToDelete)
{
m_log.InfoFormat("[SCENE]: Deleting dropped attachment {0} of user {1}", grp.UUID, grp.OwnerID);
DeleteSceneObject(grp, true);
}
}
}
}

View File

@ -9882,6 +9882,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case "4":
ret = ret + new LSL_List(land.Area);
break;
case "5":
ret = ret + new LSL_List(land.GlobalID);
break;
default:
ret = ret + new LSL_List(0);
break;

View File

@ -507,6 +507,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
public const int PARCEL_DETAILS_OWNER = 2;
public const int PARCEL_DETAILS_GROUP = 3;
public const int PARCEL_DETAILS_AREA = 4;
public const int PARCEL_DETAILS_ID = 5;
// constants for llSetClickAction
public const int CLICK_ACTION_NONE = 0;

View File

@ -4,6 +4,9 @@
StorageProvider = "OpenSim.Data.SQLiteLegacy.dll"
ConnectionString = "URI=file:OpenSim.db,version=3,UseUTF16Encoding=True"
[AssetService]
ConnectionString = "URI=file:Asset.db,version=3"
[AvatarService]
ConnectionString = "URI=file:avatars.db,version=3"

View File

@ -4,6 +4,9 @@
StorageProvider = "OpenSim.Data.SQLite.dll"
ConnectionString = "URI=file:OpenSim.db,version=3,UseUTF16Encoding=True"
[AssetService]
ConnectionString = "URI=file:Asset.db,version=3"
[InventoryService]
;ConnectionString = "URI=file:inventory.db,version=3"
; if you have a legacy inventory store use the connection string below

View File

@ -2155,7 +2155,7 @@
<Reference name="OpenSim.Region.Framework"/>
<Reference name="OpenMetaverseTypes" path="../../../bin/"/>
<Reference name="OpenMetaverse" path="../../../bin/"/>
<Reference name="Mono.Data.SqliteClient"/>
<Reference name="Mono.Data.SqliteClient" path="../../../bin/"/>
<Reference name="Mono.Addins" path="../../../bin/"/>
<Reference name="log4net" path="../../../bin/"/>
@ -2503,7 +2503,7 @@
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenSim.Framework.Statistics"/>
<Reference name="OpenSim.Region.Physics.Manager"/>
<Reference name="Mono.Data.SqliteClient"/>
<Reference name="Mono.Data.SqliteClient" path="../../../bin/"/>
<Reference name="Mono.Addins"/>
<!-- For scripting in funny languages by default -->