mirror of
https://github.com/opensim/opensim.git
synced 2026-08-12 12:25:42 +08:00
*Fixed bug that incorrectly tabulated 'others' prims on a parcel
*Added support for selected prims (does not yet support prims being sat on) *Added support for listing avatars with prims on parcel with their prim count
This commit is contained in:
@@ -33,6 +33,7 @@ using OpenSim.Framework.Interfaces;
|
||||
using OpenSim.Framework.Types;
|
||||
using OpenSim.Region.Environment.Scenes;
|
||||
using Avatar = OpenSim.Region.Environment.Scenes.ScenePresence;
|
||||
using System.IO;
|
||||
|
||||
namespace OpenSim.Region.Environment
|
||||
{
|
||||
@@ -501,6 +502,11 @@ namespace OpenSim.Region.Environment
|
||||
{
|
||||
parcelList[local_id].sendForceObjectSelect(local_id, request_type, remote_client);
|
||||
}
|
||||
|
||||
public void handleParcelObjectOwnersRequest(int local_id, IClientAPI remote_client)
|
||||
{
|
||||
parcelList[local_id].sendParcelObjectOwners(remote_client);
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
@@ -591,7 +597,7 @@ namespace OpenSim.Region.Environment
|
||||
foreach (Parcel p in parcelOwnersAndParcels[owner])
|
||||
{
|
||||
simArea += p.parcelData.area;
|
||||
simPrims += p.parcelData.ownerPrims + p.parcelData.otherPrims + p.parcelData.groupPrims;
|
||||
simPrims += p.parcelData.ownerPrims + p.parcelData.otherPrims + p.parcelData.groupPrims + p.parcelData.selectedPrims;
|
||||
}
|
||||
|
||||
foreach (Parcel p in parcelOwnersAndParcels[owner])
|
||||
@@ -713,7 +719,7 @@ namespace OpenSim.Region.Environment
|
||||
updatePacket.ParcelData.Name = Helpers.StringToField(parcelData.parcelName);
|
||||
updatePacket.ParcelData.OtherCleanTime = 0; //unemplemented
|
||||
updatePacket.ParcelData.OtherCount = 0; //unemplemented
|
||||
updatePacket.ParcelData.OtherPrims = parcelData.groupPrims;
|
||||
updatePacket.ParcelData.OtherPrims = parcelData.otherPrims;
|
||||
updatePacket.ParcelData.OwnerID = parcelData.ownerID;
|
||||
updatePacket.ParcelData.OwnerPrims = parcelData.ownerPrims;
|
||||
updatePacket.ParcelData.ParcelFlags = parcelData.parcelFlags;
|
||||
@@ -728,7 +734,7 @@ namespace OpenSim.Region.Environment
|
||||
updatePacket.ParcelData.RentPrice = 0;
|
||||
updatePacket.ParcelData.RequestResult = request_result;
|
||||
updatePacket.ParcelData.SalePrice = parcelData.salePrice;
|
||||
updatePacket.ParcelData.SelectedPrims = 0; //unemeplemented
|
||||
updatePacket.ParcelData.SelectedPrims = parcelData.selectedPrims;
|
||||
updatePacket.ParcelData.SelfCount = 0;//unemplemented
|
||||
updatePacket.ParcelData.SequenceID = sequence_id;
|
||||
if (parcelData.simwideArea > 0)
|
||||
@@ -743,7 +749,7 @@ namespace OpenSim.Region.Environment
|
||||
updatePacket.ParcelData.SnapSelection = snap_selection;
|
||||
updatePacket.ParcelData.SnapshotID = parcelData.snapshotID;
|
||||
updatePacket.ParcelData.Status = (byte)parcelData.parcelStatus;
|
||||
updatePacket.ParcelData.TotalPrims = parcelData.ownerPrims + parcelData.groupPrims + parcelData.otherPrims;
|
||||
updatePacket.ParcelData.TotalPrims = parcelData.ownerPrims + parcelData.groupPrims + parcelData.otherPrims + parcelData.selectedPrims;
|
||||
updatePacket.ParcelData.UserLocation = parcelData.userLocation;
|
||||
updatePacket.ParcelData.UserLookAt = parcelData.userLookAt;
|
||||
remote_client.OutPacket((Packet)updatePacket);
|
||||
@@ -1042,7 +1048,7 @@ namespace OpenSim.Region.Environment
|
||||
|
||||
|
||||
bool firstCall = true;
|
||||
int MAX_OBJECTS_PER_PACKET = 255;
|
||||
int MAX_OBJECTS_PER_PACKET = 251;
|
||||
ForceObjectSelectPacket pack = new ForceObjectSelectPacket();
|
||||
ForceObjectSelectPacket.DataBlock[] data;
|
||||
while (resultLocalIDs.Count > 0)
|
||||
@@ -1074,16 +1080,55 @@ namespace OpenSim.Region.Environment
|
||||
resultLocalIDs.RemoveAt(0);
|
||||
}
|
||||
pack.Data = data;
|
||||
|
||||
remote_client.OutPacket((Packet)pack);
|
||||
}
|
||||
|
||||
}
|
||||
public void sendParcelObjectOwners(IClientAPI remote_client)
|
||||
{
|
||||
Dictionary<LLUUID, int> ownersAndCount = new Dictionary<LLUUID,int>();
|
||||
foreach(SceneObject obj in primsOverMe)
|
||||
{
|
||||
if(!ownersAndCount.ContainsKey(obj.rootPrimitive.OwnerID))
|
||||
{
|
||||
ownersAndCount.Add(obj.rootPrimitive.OwnerID,0);
|
||||
}
|
||||
ownersAndCount[obj.rootPrimitive.OwnerID] += obj.primCount;
|
||||
}
|
||||
if (ownersAndCount.Count > 0)
|
||||
{
|
||||
|
||||
ParcelObjectOwnersReplyPacket.DataBlock[] dataBlock = new ParcelObjectOwnersReplyPacket.DataBlock[32];
|
||||
|
||||
if(ownersAndCount.Count < 32)
|
||||
{
|
||||
dataBlock = new ParcelObjectOwnersReplyPacket.DataBlock[ownersAndCount.Count];
|
||||
}
|
||||
|
||||
|
||||
int num = 0;
|
||||
foreach (LLUUID owner in ownersAndCount.Keys)
|
||||
{
|
||||
dataBlock[num] = new ParcelObjectOwnersReplyPacket.DataBlock();
|
||||
dataBlock[num].Count = ownersAndCount[owner];
|
||||
dataBlock[num].IsGroupOwned = false; //TODO: fix me when group support is added
|
||||
dataBlock[num].OnlineStatus = true; //TODO: fix me later
|
||||
dataBlock[num].OwnerID = owner;
|
||||
|
||||
num++;
|
||||
}
|
||||
|
||||
ParcelObjectOwnersReplyPacket pack = new ParcelObjectOwnersReplyPacket();
|
||||
pack.Data = dataBlock;
|
||||
remote_client.OutPacket(pack);
|
||||
}
|
||||
}
|
||||
public void resetParcelPrimCounts()
|
||||
{
|
||||
parcelData.groupPrims = 0;
|
||||
parcelData.ownerPrims = 0;
|
||||
parcelData.groupPrims = 0;
|
||||
parcelData.otherPrims = 0;
|
||||
parcelData.selectedPrims = 0;
|
||||
primsOverMe.Clear();
|
||||
}
|
||||
|
||||
@@ -1092,14 +1137,22 @@ namespace OpenSim.Region.Environment
|
||||
LLUUID prim_owner = obj.rootPrimitive.OwnerID;
|
||||
int prim_count = obj.primCount;
|
||||
|
||||
if(prim_owner == parcelData.ownerID)
|
||||
if (obj.isSelected)
|
||||
{
|
||||
parcelData.ownerPrims += prim_count;
|
||||
parcelData.selectedPrims += prim_count;
|
||||
}
|
||||
else
|
||||
{
|
||||
parcelData.otherPrims += prim_count;
|
||||
if (prim_owner == parcelData.ownerID)
|
||||
{
|
||||
parcelData.ownerPrims += prim_count;
|
||||
}
|
||||
else
|
||||
{
|
||||
parcelData.otherPrims += prim_count;
|
||||
}
|
||||
}
|
||||
|
||||
primsOverMe.Add(obj);
|
||||
|
||||
}
|
||||
|
||||
@@ -341,6 +341,29 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
if (((SceneObject)ent).rootLocalID == primLocalID)
|
||||
{
|
||||
((SceneObject)ent).GetProperites(remoteClient);
|
||||
((SceneObject)ent).isSelected = true;
|
||||
this.ParcelManager.setPrimsTainted();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="primLocalID"></param>
|
||||
/// <param name="remoteClient"></param>
|
||||
public void DeselectPrim(uint primLocalID, IClientAPI remoteClient)
|
||||
{
|
||||
foreach (EntityBase ent in Entities.Values)
|
||||
{
|
||||
if (ent is SceneObject)
|
||||
{
|
||||
if (((SceneObject)ent).rootLocalID == primLocalID)
|
||||
{
|
||||
((SceneObject)ent).isSelected = false;
|
||||
this.ParcelManager.setPrimsTainted();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -537,6 +537,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
client.OnUpdatePrimTexture += this.UpdatePrimTexture;
|
||||
client.OnTeleportLocationRequest += this.RequestTeleportLocation;
|
||||
client.OnObjectSelect += this.SelectPrim;
|
||||
client.OnObjectDeselect += this.DeselectPrim;
|
||||
client.OnGrapUpdate += this.MoveObject;
|
||||
client.OnNameFromUUIDRequest += this.commsManager.HandleUUIDNameRequest;
|
||||
client.OnObjectDescription += this.PrimDescription;
|
||||
@@ -549,6 +550,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
client.OnParcelJoinRequest += new ParcelJoinRequest(m_parcelManager.handleParcelJoinRequest);
|
||||
client.OnParcelPropertiesUpdateRequest += new ParcelPropertiesUpdateRequest(m_parcelManager.handleParcelPropertiesUpdateRequest);
|
||||
client.OnParcelSelectObjects += new ParcelSelectObjects(m_parcelManager.handleParcelSelectObjectsRequest);
|
||||
client.OnParcelObjectOwnerRequest += new ParcelObjectOwnerRequest(m_parcelManager.handleParcelObjectOwnersRequest);
|
||||
|
||||
client.OnEstateOwnerMessage += new EstateOwnerMessageRequest(m_estateManager.handleEstateOwnerMessage);
|
||||
|
||||
}
|
||||
|
||||
@@ -49,6 +49,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
|
||||
private EventManager m_eventManager;
|
||||
|
||||
public bool isSelected = false;
|
||||
|
||||
public LLUUID rootUUID
|
||||
{
|
||||
get
|
||||
|
||||
Reference in New Issue
Block a user