*Added delegates and events for parcel and estate management

*Only thing left is to get the master user setup in both sandbox and grid mode
Sugilite
mingchen 2007-06-08 21:30:51 +00:00
parent 9d1eacad7a
commit 2c04171990
7 changed files with 121 additions and 5 deletions

View File

@ -34,6 +34,8 @@ namespace OpenSim.Framework.Interfaces
public delegate void ParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client); public delegate void ParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client);
public delegate void ParcelPropertiesUpdateRequest(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client); // NOTETOSELFremove the packet part public delegate void ParcelPropertiesUpdateRequest(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client); // NOTETOSELFremove the packet part
public delegate void EstateOwnerMessageRequest(EstateOwnerMessagePacket packet, IClientAPI remote_client);
public interface IClientAPI public interface IClientAPI
{ {
event ChatFromViewer OnChatFromViewer; event ChatFromViewer OnChatFromViewer;
@ -61,6 +63,13 @@ namespace OpenSim.Framework.Interfaces
event NewAvatar OnNewAvatar; event NewAvatar OnNewAvatar;
event GenericCall6 OnRemoveAvatar; event GenericCall6 OnRemoveAvatar;
event ParcelPropertiesRequest OnParcelPropertiesRequest;
event ParcelDivideRequest OnParcelDivideRequest;
event ParcelJoinRequest OnParcelJoinRequest;
event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
event EstateOwnerMessageRequest OnEstateOwnerMessage;
LLVector3 StartPos LLVector3 StartPos
{ {
get; get;

View File

@ -4,6 +4,7 @@ using System.Text;
using OpenSim.Framework.Interfaces; using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Inventory; using OpenSim.Framework.Inventory;
using OpenSim.Framework.Types; using OpenSim.Framework.Types;
using libsecondlife; using libsecondlife;
using libsecondlife.Packets; using libsecondlife.Packets;
@ -36,6 +37,13 @@ namespace OpenSim
public event NewAvatar OnNewAvatar; public event NewAvatar OnNewAvatar;
public event GenericCall6 OnRemoveAvatar; public event GenericCall6 OnRemoveAvatar;
public event ParcelPropertiesRequest OnParcelPropertiesRequest;
public event ParcelDivideRequest OnParcelDivideRequest;
public event ParcelJoinRequest OnParcelJoinRequest;
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
public event EstateOwnerMessageRequest OnEstateOwnerMessage;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

View File

@ -454,6 +454,31 @@ namespace OpenSim
break; break;
#endregion #endregion
#region Parcel related packets
case PacketType.ParcelPropertiesRequest:
ParcelPropertiesRequestPacket propertiesRequest = (ParcelPropertiesRequestPacket)Pack;
OnParcelPropertiesRequest((int)Math.Round(propertiesRequest.ParcelData.West), (int)Math.Round(propertiesRequest.ParcelData.South), (int)Math.Round(propertiesRequest.ParcelData.East), (int)Math.Round(propertiesRequest.ParcelData.North), propertiesRequest.ParcelData.SequenceID, propertiesRequest.ParcelData.SnapSelection, this);
break;
case PacketType.ParcelDivide:
ParcelDividePacket parcelDivide = (ParcelDividePacket)Pack;
OnParcelDivideRequest((int)Math.Round(parcelDivide.ParcelData.West), (int)Math.Round(parcelDivide.ParcelData.South), (int)Math.Round(parcelDivide.ParcelData.East), (int)Math.Round(parcelDivide.ParcelData.North), this);
break;
case PacketType.ParcelJoin:
ParcelJoinPacket parcelJoin = (ParcelJoinPacket)Pack;
OnParcelJoinRequest((int)Math.Round(parcelJoin.ParcelData.West), (int)Math.Round(parcelJoin.ParcelData.South), (int)Math.Round(parcelJoin.ParcelData.East), (int)Math.Round(parcelJoin.ParcelData.North), this);
break;
case PacketType.ParcelPropertiesUpdate:
ParcelPropertiesUpdatePacket updatePacket = (ParcelPropertiesUpdatePacket)Pack;
OnParcelPropertiesUpdateRequest(updatePacket, this);
break;
#endregion
#region Estate Packets
case PacketType.EstateOwnerMessage:
EstateOwnerMessagePacket messagePacket = (EstateOwnerMessagePacket)Pack;
OnEstateOwnerMessage(messagePacket, this);
break;
#endregion
#region unimplemented handlers #region unimplemented handlers
case PacketType.AgentIsNowWearing: case PacketType.AgentIsNowWearing:
// AgentIsNowWearingPacket wear = (AgentIsNowWearingPacket)Pack; // AgentIsNowWearingPacket wear = (AgentIsNowWearingPacket)Pack;

View File

@ -83,6 +83,13 @@ namespace OpenSim.world
ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange); ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange);
ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement); ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement);
* */ * */
ControllingClient.OnParcelPropertiesRequest +=new ParcelPropertiesRequest(this.m_world.parcelManager.handleParcelPropertiesRequest);
ControllingClient.OnParcelDivideRequest += new ParcelDivideRequest(this.m_world.parcelManager.handleParcelDivideRequest);
ControllingClient.OnParcelJoinRequest += new ParcelJoinRequest(this.m_world.parcelManager.handleParcelJoinRequest);
ControllingClient.OnParcelPropertiesUpdateRequest += new ParcelPropertiesUpdateRequest(this.m_world.parcelManager.handleParcelPropertiesUpdateRequest);
ControllingClient.OnEstateOwnerMessage += new EstateOwnerMessageRequest(this.m_world.estateManager.handleEstateOwnerMessage);
} }
/// <summary> /// <summary>

View File

@ -166,7 +166,7 @@ namespace OpenSim.world
parcelList.Remove(local_id); parcelList.Remove(local_id);
} }
public void performFinalParcelJoin(Parcel master, Parcel slave) private void performFinalParcelJoin(Parcel master, Parcel slave)
{ {
int x, y; int x, y;
bool[,] parcelBitmapSlave = slave.getParcelBitmap(); bool[,] parcelBitmapSlave = slave.getParcelBitmap();
@ -212,7 +212,7 @@ namespace OpenSim.world
/// <param name="end_y">North Point</param> /// <param name="end_y">North Point</param>
/// <param name="attempting_user_id">LLUUID of user who is trying to subdivide</param> /// <param name="attempting_user_id">LLUUID of user who is trying to subdivide</param>
/// <returns>Returns true if successful</returns> /// <returns>Returns true if successful</returns>
public bool subdivide(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id) private bool subdivide(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id)
{ {
//First, lets loop through the points and make sure they are all in the same parcel //First, lets loop through the points and make sure they are all in the same parcel
//Get the parcel at start //Get the parcel at start
@ -278,7 +278,7 @@ namespace OpenSim.world
/// <param name="end_y">y value in second parcel</param> /// <param name="end_y">y value in second parcel</param>
/// <param name="attempting_user_id">LLUUID of the avatar trying to join the parcels</param> /// <param name="attempting_user_id">LLUUID of the avatar trying to join the parcels</param>
/// <returns>Returns true if successful</returns> /// <returns>Returns true if successful</returns>
public bool join(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id) private bool join(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id)
{ {
end_x -= 4; end_x -= 4;
end_y -= 4; end_y -= 4;
@ -406,6 +406,58 @@ namespace OpenSim.world
packet.ParcelData.SequenceID = sequenceID; //Eh? packet.ParcelData.SequenceID = sequenceID; //Eh?
remote_client.OutPacket((Packet)packet); remote_client.OutPacket((Packet)packet);
} }
public void handleParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, IClientAPI remote_client)
{
//Get the parcels within the bounds
List<Parcel> temp = new List<Parcel>();
int x, y, i;
int inc_x = end_x - start_x;
int inc_y = end_y - start_y;
for (x = 0; x < inc_x; x++)
{
for (y = 0; y < inc_y; y++)
{
OpenSim.world.Parcel currentParcel = getParcel(start_x + x, start_y + y);
if (!temp.Contains(currentParcel))
{
currentParcel.forceUpdateParcelInfo();
temp.Add(currentParcel);
}
}
}
int requestResult = ParcelManager.PARCEL_RESULT_ONE_PARCEL;
if (temp.Count > 1)
{
requestResult = ParcelManager.PARCEL_RESULT_MULTIPLE_PARCELS;
}
for (i = 0; i < temp.Count; i++)
{
temp[i].sendParcelProperties(sequence_id, snap_selection, requestResult, remote_client);
}
sendParcelOverlay(remote_client);
}
public void handleParcelPropertiesUpdateRequest(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client)
{
if (parcelList.ContainsKey(packet.ParcelData.LocalID))
{
parcelList[packet.ParcelData.LocalID].updateParcelProperties(packet, remote_client);
}
}
public void handleParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client)
{
subdivide(west, south, east, north, remote_client.AgentId);
}
public void handleParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client)
{
join(west, south, east, north, remote_client.AgentId);
}
#endregion #endregion
/// <summary> /// <summary>

View File

@ -217,6 +217,16 @@ namespace OpenSim.world
Entities[UUID].BackUp(); Entities[UUID].BackUp();
} }
//Parcel backup routines
ParcelData[] parcels = new ParcelData[parcelManager.parcelList.Count];
int i = 0;
foreach (OpenSim.world.Parcel parcel in parcelManager.parcelList.Values)
{
parcels[i] = parcel.parcelData;
i++;
}
localStorage.SaveParcels(parcels);
// Backup successful // Backup successful
return true; return true;
} }

View File

@ -253,6 +253,8 @@ namespace OpenSim
LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this.m_physicsEngine); LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this.m_physicsEngine);
LocalWorld.PhysScene.SetTerrain(LocalWorld.Terrain.getHeights1D()); LocalWorld.PhysScene.SetTerrain(LocalWorld.Terrain.getHeights1D());
LocalWorld.LoadPrimsFromStorage(); LocalWorld.LoadPrimsFromStorage();
LocalWorld.localStorage.LoadParcels((ILocalStorageParcelReceiver)LocalWorld.parcelManager);
LocalWorld.StartTimer(); LocalWorld.StartTimer();
} }
@ -417,11 +419,14 @@ namespace OpenSim
break; break;
case "show": case "show":
Show(cmdparams[0]); if (cmdparams.Length > 0)
{
Show(cmdparams[0]);
}
break; break;
case "terrain": case "terrain":
string result = ""; //string result = "";
/* if (!((World)m_localWorld).Terrain.RunTerrainCmd(cmdparams, ref result)) /* if (!((World)m_localWorld).Terrain.RunTerrainCmd(cmdparams, ref result))
{ {
m_console.WriteLine(OpenSim.Framework.Console.LogPriority.HIGH, result); m_console.WriteLine(OpenSim.Framework.Console.LogPriority.HIGH, result);