Changes:
*Added support for Subdivision (use master avatar to login to try out) *Added Parcel Border support *Enabled user account storage, but only when a new account is created Bug Fixes: *Fixed crash on startup while in sandbox when "Setting up master avatar" *Fixed most core functions in ParcelManager and Parcel that where broken *Fixed Parcel saving to database Known Issues: *Dividing parcel fails in viewer (gives an error about needing 2 parcels)zircon^2
parent
bc380ccba6
commit
ea79819575
|
@ -28,6 +28,34 @@ namespace OpenSim.Framework.Types
|
|||
public libsecondlife.Parcel.ParcelFlags parcelFlags = libsecondlife.Parcel.ParcelFlags.None;
|
||||
|
||||
public int localID = 0;
|
||||
|
||||
public ParcelData Copy()
|
||||
{
|
||||
ParcelData parcelData = new ParcelData();
|
||||
|
||||
parcelData.AABBMax = this.AABBMax;
|
||||
parcelData.AABBMin = this.AABBMin;
|
||||
parcelData.area = this.area;
|
||||
parcelData.auctionID = this.auctionID;
|
||||
parcelData.authBuyerID = this.authBuyerID;
|
||||
parcelData.category = this.category;
|
||||
parcelData.claimDate = this.claimDate;
|
||||
parcelData.claimPrice = this.claimPrice;
|
||||
parcelData.groupID = this.groupID;
|
||||
parcelData.groupPrims = this.groupPrims;
|
||||
parcelData.isGroupOwned = this.isGroupOwned;
|
||||
parcelData.localID = this.localID;
|
||||
parcelData.ownerID = this.ownerID;
|
||||
parcelData.parcelBitmapByteArray = (byte[])this.parcelBitmapByteArray.Clone();
|
||||
parcelData.parcelDesc = this.parcelDesc;
|
||||
parcelData.parcelFlags = this.parcelFlags;
|
||||
parcelData.parcelName = this.parcelName;
|
||||
parcelData.parcelStatus = this.parcelStatus;
|
||||
parcelData.salePrice = this.salePrice;
|
||||
|
||||
return parcelData;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -133,6 +133,7 @@ namespace OpenSim.Framework.User
|
|||
newprofile.UUID = LLUUID.Random();
|
||||
newprofile.Inventory.CreateRootFolder(newprofile.UUID, true);
|
||||
this.UserProfiles.Add(newprofile.UUID, newprofile);
|
||||
SaveUserProfiles();
|
||||
return newprofile;
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ namespace OpenSim.UserServer
|
|||
|
||||
public override void InitUserProfiles()
|
||||
{
|
||||
// TODO: need to load from database
|
||||
base.InitUserProfiles();
|
||||
}
|
||||
|
||||
public override void CustomiseResponse(ref System.Collections.Hashtable response, UserProfile theUser)
|
||||
|
|
|
@ -98,7 +98,7 @@ namespace OpenSim.UserServer
|
|||
this._mpasswd = EncodePassword("testpass");
|
||||
|
||||
userManager = new LocalUserProfileManager(this.m_gridServer, m_simPort, m_simAddr, regionX, regionY);
|
||||
//userManager.InitUserProfiles();
|
||||
userManager.InitUserProfiles();
|
||||
userManager.SetKeys("", "", "", "Welcome to OpenSim");
|
||||
}
|
||||
|
||||
|
|
|
@ -84,6 +84,7 @@ namespace OpenSim
|
|||
public event UpdatePrimVector OnUpdatePrimScale;
|
||||
public event StatusChange OnChildAgentStatus;
|
||||
public event ParcelPropertiesRequest OnParcelPropertiesRequest;
|
||||
public event ParcelDivideRequest OnParcelDivideRequest;
|
||||
|
||||
protected override void ProcessInPacket(Packet Pack)
|
||||
{
|
||||
|
@ -472,6 +473,10 @@ namespace OpenSim
|
|||
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;
|
||||
#endregion
|
||||
|
||||
#region unimplemented handlers
|
||||
|
@ -481,19 +486,7 @@ namespace OpenSim
|
|||
case PacketType.ObjectScale:
|
||||
break;
|
||||
case PacketType.MoneyBalanceRequest:
|
||||
//This need to be actually done and not thrown back with fake info
|
||||
MoneyBalanceRequestPacket incoming = (MoneyBalanceRequestPacket)Pack;
|
||||
MoneyBalanceReplyPacket outgoing = new MoneyBalanceReplyPacket();
|
||||
outgoing.MoneyData.AgentID = incoming.AgentData.AgentID;
|
||||
outgoing.MoneyData.MoneyBalance = 31337;
|
||||
outgoing.MoneyData.SquareMetersCommitted = 0;
|
||||
outgoing.MoneyData.SquareMetersCredit = 100000000;
|
||||
outgoing.MoneyData.TransactionID = incoming.MoneyData.TransactionID;
|
||||
outgoing.MoneyData.TransactionSuccess = true;
|
||||
outgoing.MoneyData.Description = libsecondlife.Helpers.StringToField("");
|
||||
this.OutPacket((Packet)outgoing);
|
||||
MainConsole.Instance.Notice("Sent Temporary Money packet (they have leet monies)");
|
||||
|
||||
//This need to be actually done and not thrown back with fake infos
|
||||
break;
|
||||
|
||||
case PacketType.EstateCovenantRequest:
|
||||
|
|
|
@ -37,7 +37,7 @@ using OpenSim.Framework.Types;
|
|||
namespace OpenSim.RegionServer.world
|
||||
{
|
||||
public delegate void ParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, ClientView remote_client);
|
||||
|
||||
public delegate void ParcelDivideRequest(int west, int south, int east, int north, ClientView remote_client);
|
||||
|
||||
#region ParcelManager Class
|
||||
/// <summary>
|
||||
|
@ -49,25 +49,28 @@ namespace OpenSim.RegionServer.world
|
|||
#region Constants
|
||||
//Parcel types set with flags in ParcelOverlay.
|
||||
//Only one of these can be used.
|
||||
public static byte PARCEL_TYPE_PUBLIC = (byte)0; //Equals 00000000
|
||||
public static byte PARCEL_TYPE_OWNED_BY_OTHER = (byte)1; //Equals 00000001
|
||||
public static byte PARCEL_TYPE_OWNED_BY_GROUP = (byte)2; //Equals 00000010
|
||||
public static byte PARCEL_TYPE_OWNED_BY_REQUESTER = (byte)3; //Equals 00000011
|
||||
public static byte PARCEL_TYPE_IS_FOR_SALE = (byte)4; //Equals 00000100
|
||||
public static byte PARCEL_TYPE_IS_BEING_AUCTIONED = (byte)5; //Equals 00000101
|
||||
public const byte PARCEL_TYPE_PUBLIC = (byte)0; //Equals 00000000
|
||||
public const byte PARCEL_TYPE_OWNED_BY_OTHER = (byte)1; //Equals 00000001
|
||||
public const byte PARCEL_TYPE_OWNED_BY_GROUP = (byte)2; //Equals 00000010
|
||||
public const byte PARCEL_TYPE_OWNED_BY_REQUESTER = (byte)3; //Equals 00000011
|
||||
public const byte PARCEL_TYPE_IS_FOR_SALE = (byte)4; //Equals 00000100
|
||||
public const byte PARCEL_TYPE_IS_BEING_AUCTIONED = (byte)5; //Equals 00000101
|
||||
|
||||
|
||||
//Flags that when set, a border on the given side will be placed
|
||||
//NOTE: North and East is assumable by the west and south sides (if parcel to east has a west border, then I have an east border; etc)
|
||||
//This took forever to figure out -- jeesh. /blame LL for even having to send these
|
||||
public static byte PARCEL_FLAG_PROPERTY_BORDER_WEST = (byte)64; //Equals 01000000
|
||||
public static byte PARCEL_FLAG_PROPERTY_BORDER_SOUTH = (byte)128; //Equals 10000000
|
||||
public const byte PARCEL_FLAG_PROPERTY_BORDER_WEST = (byte)64; //Equals 01000000
|
||||
public const byte PARCEL_FLAG_PROPERTY_BORDER_SOUTH = (byte)128; //Equals 10000000
|
||||
|
||||
|
||||
//These are other constants. Yay!
|
||||
public const int START_PARCEL_LOCAL_ID = 1;
|
||||
#endregion
|
||||
|
||||
#region Member Variables
|
||||
public Dictionary<int, Parcel> parcelList = new Dictionary<int, Parcel>();
|
||||
private int lastParcelLocalID = -1;
|
||||
private int lastParcelLocalID = START_PARCEL_LOCAL_ID - 1;
|
||||
private int[,] parcelIDList = new int[64, 64];
|
||||
|
||||
private static World m_world;
|
||||
|
@ -78,8 +81,7 @@ namespace OpenSim.RegionServer.world
|
|||
{
|
||||
|
||||
m_world = world;
|
||||
Console.WriteLine("Created ParcelManager Object");
|
||||
|
||||
parcelIDList.Initialize();
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
@ -90,15 +92,15 @@ namespace OpenSim.RegionServer.world
|
|||
public void ParcelFromStorage(ParcelData data)
|
||||
{
|
||||
Parcel new_parcel = new Parcel(data.ownerID, data.isGroupOwned, m_world);
|
||||
new_parcel.parcelData = data;
|
||||
new_parcel.parcelData = data.Copy();
|
||||
new_parcel.setParcelBitmapFromByteArray();
|
||||
addParcel(new_parcel);
|
||||
|
||||
this.addParcel(new_parcel);
|
||||
}
|
||||
|
||||
public void NoParcelDataFromStorage()
|
||||
{
|
||||
this.resetSimParcels();
|
||||
resetSimParcels();
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
@ -120,7 +122,7 @@ namespace OpenSim.RegionServer.world
|
|||
{
|
||||
lastParcelLocalID++;
|
||||
new_parcel.parcelData.localID = lastParcelLocalID;
|
||||
parcelList.Add(lastParcelLocalID, new_parcel);
|
||||
parcelList.Add(lastParcelLocalID, new_parcel.Copy());
|
||||
|
||||
|
||||
bool[,] parcelBitmap = new_parcel.getParcelBitmap();
|
||||
|
@ -135,6 +137,9 @@ namespace OpenSim.RegionServer.world
|
|||
}
|
||||
}
|
||||
}
|
||||
parcelList[lastParcelLocalID].forceUpdateParcelInfo();
|
||||
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// Removes a parcel from the list. Will not remove if local_id is still owning an area in parcelIDList
|
||||
|
@ -198,9 +203,9 @@ namespace OpenSim.RegionServer.world
|
|||
int totalX = end_x - start_x;
|
||||
int totalY = end_y - start_y;
|
||||
int x, y;
|
||||
for (x = 0; x < totalX; x++)
|
||||
for (y = 0; y < totalY; y++)
|
||||
{
|
||||
for (y = 0; y < totalY; y++)
|
||||
for (x = 0; x < totalX; x++)
|
||||
{
|
||||
Parcel tempParcel = getParcel(start_x + x, start_y + y);
|
||||
if (tempParcel == null) return false; //No such parcel at that point
|
||||
|
@ -221,16 +226,24 @@ namespace OpenSim.RegionServer.world
|
|||
}
|
||||
|
||||
//Lets create a new parcel with bitmap activated at that point (keeping the old parcels info)
|
||||
Parcel newParcel = startParcel;
|
||||
Parcel newParcel = startParcel.Copy();
|
||||
newParcel.parcelData.parcelName = "Subdivision of " + newParcel.parcelData.parcelName;
|
||||
|
||||
newParcel.setParcelBitmap(Parcel.getSquareParcelBitmap(start_x, start_y, end_x, end_y));
|
||||
|
||||
//Now, lets set the subdivision area of the original to false
|
||||
int startParcelIndex = startParcel.parcelData.localID;
|
||||
parcelList[startParcelIndex].setParcelBitmap(Parcel.modifyParcelBitmapSquare(parcelList[startParcelIndex].getParcelBitmap(), start_x, start_y, end_x, end_y, false));
|
||||
parcelList[startParcelIndex].setParcelBitmap(Parcel.modifyParcelBitmapSquare(startParcel.getParcelBitmap(), start_x, start_y, end_x, end_y, false));
|
||||
parcelList[startParcelIndex].forceUpdateParcelInfo();
|
||||
|
||||
|
||||
//Now add the new parcel
|
||||
addParcel(newParcel);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
/// <summary>
|
||||
|
@ -247,6 +260,7 @@ namespace OpenSim.RegionServer.world
|
|||
//NOTE: The following only connects the parcels in each corner and not all the parcels that are within the selection box!
|
||||
//This should be fixed later -- somewhat "incomplete code" --Ming
|
||||
Parcel startParcel, endParcel;
|
||||
|
||||
try
|
||||
{
|
||||
startParcel = getParcel(start_x, start_y);
|
||||
|
@ -295,9 +309,9 @@ namespace OpenSim.RegionServer.world
|
|||
int sequenceID = 0;
|
||||
ParcelOverlayPacket packet;
|
||||
|
||||
for (x = 0; x < 64; x++)
|
||||
for (y = 0; y < 64; y++)
|
||||
{
|
||||
for (y = 0; y < 64; y++)
|
||||
for (x = 0; x < 64; x++)
|
||||
{
|
||||
byte tempByte = (byte)0; //This represents the byte for the current 4x4
|
||||
Parcel currentParcelBlock = getParcel(x * 4, y * 4);
|
||||
|
@ -329,7 +343,7 @@ namespace OpenSim.RegionServer.world
|
|||
{
|
||||
tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_WEST);
|
||||
}
|
||||
else if (getParcel(x - 1, y) != currentParcelBlock)
|
||||
else if (getParcel((x - 1) * 4, y * 4) != currentParcelBlock)
|
||||
{
|
||||
tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_WEST);
|
||||
}
|
||||
|
@ -338,7 +352,7 @@ namespace OpenSim.RegionServer.world
|
|||
{
|
||||
tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_SOUTH);
|
||||
}
|
||||
else if (getParcel(x, y - 1) != currentParcelBlock)
|
||||
else if (getParcel(x * 4, (y - 1) * 4) != currentParcelBlock)
|
||||
{
|
||||
tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_SOUTH);
|
||||
}
|
||||
|
@ -373,8 +387,10 @@ namespace OpenSim.RegionServer.world
|
|||
//Remove all the parcels in the sim and add a blank, full sim parcel set to public
|
||||
parcelList.Clear();
|
||||
parcelIDList.Initialize();
|
||||
|
||||
Parcel fullSimParcel = new Parcel(LLUUID.Zero, false, m_world);
|
||||
fullSimParcel.setParcelBitmap(Parcel.basicFullRegionParcelBitmap());
|
||||
|
||||
fullSimParcel.setParcelBitmap(Parcel.getSquareParcelBitmap(0, 0, 256, 256));
|
||||
fullSimParcel.parcelData.parcelName = "Your Sim Parcel";
|
||||
fullSimParcel.parcelData.parcelDesc = "";
|
||||
|
||||
|
@ -382,8 +398,8 @@ namespace OpenSim.RegionServer.world
|
|||
fullSimParcel.parcelData.salePrice = 1;
|
||||
fullSimParcel.parcelData.parcelFlags = libsecondlife.Parcel.ParcelFlags.ForSale;
|
||||
fullSimParcel.parcelData.parcelStatus = libsecondlife.Parcel.ParcelStatus.Leased;
|
||||
addParcel(fullSimParcel);
|
||||
|
||||
addParcel(fullSimParcel);
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
@ -430,13 +446,25 @@ namespace OpenSim.RegionServer.world
|
|||
{
|
||||
if (x >= 0 && y >= 0 && x <= 256 && x <= 256)
|
||||
{
|
||||
return (this.parcelBitmap[x / 4, y / 4] == true);
|
||||
return (parcelBitmap[x / 4, y / 4] == true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Parcel Copy()
|
||||
{
|
||||
Parcel newParcel = new Parcel(this.parcelData.ownerID, this.parcelData.isGroupOwned, m_world);
|
||||
|
||||
//Place all new variables here!
|
||||
newParcel.parcelBitmap = (bool[,])(this.parcelBitmap.Clone());
|
||||
newParcel.parcelData = parcelData.Copy();
|
||||
|
||||
return newParcel;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
@ -453,33 +481,33 @@ namespace OpenSim.RegionServer.world
|
|||
ParcelPropertiesPacket updatePacket = new ParcelPropertiesPacket();
|
||||
updatePacket.ParcelData.AABBMax = parcelData.AABBMax;
|
||||
updatePacket.ParcelData.AABBMin = parcelData.AABBMin;
|
||||
updatePacket.ParcelData.Area = this.parcelData.area;
|
||||
updatePacket.ParcelData.AuctionID = this.parcelData.auctionID;
|
||||
updatePacket.ParcelData.AuthBuyerID = this.parcelData.authBuyerID; //unemplemented
|
||||
updatePacket.ParcelData.Area = parcelData.area;
|
||||
updatePacket.ParcelData.AuctionID = parcelData.auctionID;
|
||||
updatePacket.ParcelData.AuthBuyerID =parcelData.authBuyerID; //unemplemented
|
||||
|
||||
updatePacket.ParcelData.Bitmap = this.convertParcelBitmapToBytes();
|
||||
updatePacket.ParcelData.Bitmap = parcelData.parcelBitmapByteArray;
|
||||
|
||||
updatePacket.ParcelData.Desc = libsecondlife.Helpers.StringToField(this.parcelData.parcelDesc);
|
||||
updatePacket.ParcelData.Category = (byte)this.parcelData.category;
|
||||
updatePacket.ParcelData.ClaimDate = this.parcelData.claimDate;
|
||||
updatePacket.ParcelData.ClaimPrice = this.parcelData.claimPrice;
|
||||
updatePacket.ParcelData.GroupID = this.parcelData.groupID;
|
||||
updatePacket.ParcelData.GroupPrims = this.parcelData.groupPrims;
|
||||
updatePacket.ParcelData.IsGroupOwned = this.parcelData.isGroupOwned;
|
||||
updatePacket.ParcelData.Desc = libsecondlife.Helpers.StringToField(parcelData.parcelDesc);
|
||||
updatePacket.ParcelData.Category = (byte)parcelData.category;
|
||||
updatePacket.ParcelData.ClaimDate = parcelData.claimDate;
|
||||
updatePacket.ParcelData.ClaimPrice = parcelData.claimPrice;
|
||||
updatePacket.ParcelData.GroupID = parcelData.groupID;
|
||||
updatePacket.ParcelData.GroupPrims = parcelData.groupPrims;
|
||||
updatePacket.ParcelData.IsGroupOwned = parcelData.isGroupOwned;
|
||||
updatePacket.ParcelData.LandingType = (byte)0; //unemplemented
|
||||
updatePacket.ParcelData.LocalID = (byte)this.parcelData.localID;
|
||||
updatePacket.ParcelData.LocalID = (byte)parcelData.localID;
|
||||
updatePacket.ParcelData.MaxPrims = 1000; //unemplemented
|
||||
updatePacket.ParcelData.MediaAutoScale = (byte)0; //unemplemented
|
||||
updatePacket.ParcelData.MediaID = LLUUID.Zero; //unemplemented
|
||||
updatePacket.ParcelData.MediaURL = Helpers.StringToField(""); //unemplemented
|
||||
updatePacket.ParcelData.MusicURL = Helpers.StringToField(""); //unemplemented
|
||||
updatePacket.ParcelData.Name = Helpers.StringToField(this.parcelData.parcelName);
|
||||
updatePacket.ParcelData.Name = Helpers.StringToField(parcelData.parcelName);
|
||||
updatePacket.ParcelData.OtherCleanTime = 0; //unemplemented
|
||||
updatePacket.ParcelData.OtherCount = 0; //unemplemented
|
||||
updatePacket.ParcelData.OtherPrims = 0; //unemplented
|
||||
updatePacket.ParcelData.OwnerID = this.parcelData.ownerID;
|
||||
updatePacket.ParcelData.OwnerID = parcelData.ownerID;
|
||||
updatePacket.ParcelData.OwnerPrims = 0; //unemplemented
|
||||
updatePacket.ParcelData.ParcelFlags = (uint)this.parcelData.parcelFlags; //unemplemented
|
||||
updatePacket.ParcelData.ParcelFlags = (uint)parcelData.parcelFlags; //unemplemented
|
||||
updatePacket.ParcelData.ParcelPrimBonus = (float)1.0; //unemplemented
|
||||
updatePacket.ParcelData.PassHours = (float)0.0; //unemplemented
|
||||
updatePacket.ParcelData.PassPrice = 0; //unemeplemented
|
||||
|
@ -490,7 +518,7 @@ namespace OpenSim.RegionServer.world
|
|||
updatePacket.ParcelData.RegionPushOverride = true; //unemplemented
|
||||
updatePacket.ParcelData.RentPrice = 0; //??
|
||||
updatePacket.ParcelData.RequestResult = 0;//??
|
||||
updatePacket.ParcelData.SalePrice = this.parcelData.salePrice; //unemplemented
|
||||
updatePacket.ParcelData.SalePrice = parcelData.salePrice; //unemplemented
|
||||
updatePacket.ParcelData.SelectedPrims = 0; //unemeplemented
|
||||
updatePacket.ParcelData.SelfCount = 0;//unemplemented
|
||||
updatePacket.ParcelData.SequenceID = sequence_id;
|
||||
|
@ -498,7 +526,7 @@ namespace OpenSim.RegionServer.world
|
|||
updatePacket.ParcelData.SimWideTotalPrims = 0; //unemplemented
|
||||
updatePacket.ParcelData.SnapSelection = snap_selection; //Bleh - not important yet
|
||||
updatePacket.ParcelData.SnapshotID = LLUUID.Zero; //Unemplemented
|
||||
updatePacket.ParcelData.Status = (byte)this.parcelData.parcelStatus; //??
|
||||
updatePacket.ParcelData.Status = (byte)parcelData.parcelStatus; //??
|
||||
updatePacket.ParcelData.TotalPrims = 0; //unemplemented
|
||||
updatePacket.ParcelData.UserLocation = LLVector3.Zero; //unemplemented
|
||||
updatePacket.ParcelData.UserLookAt = LLVector3.Zero; //unemeplemented
|
||||
|
@ -534,15 +562,25 @@ namespace OpenSim.RegionServer.world
|
|||
}
|
||||
}
|
||||
}
|
||||
this.parcelData.AABBMin = new LLVector3((float)(min_x * 4), (float)(min_y * 4), m_world.Terrain[(min_x * 4), (min_y * 4)]);
|
||||
this.parcelData.AABBMax = new LLVector3((float)(max_x * 4), (float)(max_y * 4), m_world.Terrain[(max_x * 4), (max_y * 4)]);
|
||||
this.parcelData.area = tempArea;
|
||||
parcelData.AABBMin = new LLVector3((float)(min_x * 4), (float)(min_y * 4), m_world.Terrain[(min_x * 4), (min_y * 4)]);
|
||||
parcelData.AABBMax = new LLVector3((float)(max_x * 4), (float)(max_y * 4), m_world.Terrain[(max_x * 4), (max_y * 4)]);
|
||||
parcelData.area = tempArea;
|
||||
}
|
||||
|
||||
public void updateParcelBitmapByteArray()
|
||||
{
|
||||
parcelData.parcelBitmapByteArray = convertParcelBitmapToBytes();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update all settings in parcel such as area, bitmap byte array, etc
|
||||
/// </summary>
|
||||
public void forceUpdateParcelInfo()
|
||||
{
|
||||
this.updateAABBAndAreaValues();
|
||||
this.updateParcelBitmapByteArray();
|
||||
}
|
||||
|
||||
public void setParcelBitmapFromByteArray()
|
||||
{
|
||||
parcelBitmap = convertBytesToParcelBitmap();
|
||||
|
@ -565,9 +603,9 @@ namespace OpenSim.RegionServer.world
|
|||
else
|
||||
{
|
||||
//Valid: Lets set it
|
||||
this.parcelBitmap = bitmap;
|
||||
updateAABBAndAreaValues();
|
||||
updateParcelBitmapByteArray();
|
||||
parcelBitmap = bitmap;
|
||||
forceUpdateParcelInfo();
|
||||
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
|
@ -608,9 +646,17 @@ namespace OpenSim.RegionServer.world
|
|||
private bool[,] convertBytesToParcelBitmap()
|
||||
{
|
||||
bool[,] tempConvertMap = new bool[64, 64];
|
||||
|
||||
//00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
//00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
//00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
//00000000 00000000 00000000 00000001 10000000 00000000 00000000 00000000
|
||||
//00000000 00000000 00000000 00000001 10000000 00000000 00000000 00000000
|
||||
//00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
//00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
//00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
//
|
||||
byte tempByte = 0;
|
||||
int x = 0, y = 0, i = 0, bitNum = 0;
|
||||
int x = 63, y = 63, i = 0, bitNum = 0;
|
||||
for(i = 0; i < 512; i++)
|
||||
{
|
||||
tempByte = parcelData.parcelBitmapByteArray[i];
|
||||
|
@ -618,7 +664,12 @@ namespace OpenSim.RegionServer.world
|
|||
{
|
||||
bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte)1);
|
||||
tempConvertMap[x, y] = bit;
|
||||
if (x >= 64) y++;
|
||||
x--;
|
||||
if (x < 0)
|
||||
{
|
||||
y--;
|
||||
x = 63;
|
||||
}
|
||||
}
|
||||
}
|
||||
return tempConvertMap;
|
||||
|
@ -646,7 +697,7 @@ namespace OpenSim.RegionServer.world
|
|||
bool[,] tempBitmap = new bool[64, 64];
|
||||
tempBitmap.Initialize();
|
||||
|
||||
tempBitmap = modifyParcelBitmapSquare(tempBitmap, start_x, start_y, end_x, end_x, true);
|
||||
tempBitmap = modifyParcelBitmapSquare(tempBitmap, start_x, start_y, end_x, end_y, true);
|
||||
return tempBitmap;
|
||||
}
|
||||
|
||||
|
@ -669,14 +720,14 @@ namespace OpenSim.RegionServer.world
|
|||
}
|
||||
|
||||
int x, y;
|
||||
for (x = 0; x < 64; x++)
|
||||
for (y = 0; y < 64; y++)
|
||||
{
|
||||
for (y = 0; y < 64; y++)
|
||||
for (x = 0; x < 64; x++)
|
||||
{
|
||||
if (x >= start_x / 4 && x <= end_x / 4
|
||||
&& y >= start_y / 4 && y <= end_y / 4)
|
||||
if (x >= start_x / 4 && x < end_x / 4
|
||||
&& y >= start_y / 4 && y < end_y / 4)
|
||||
{
|
||||
parcel_bitmap[x, y] = true;
|
||||
parcel_bitmap[x, y] = set_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -699,12 +750,13 @@ namespace OpenSim.RegionServer.world
|
|||
{
|
||||
//Throw an exception - The bitmap is not 64x64
|
||||
throw new Exception("Error: Invalid Parcel Bitmap - Bitmap_add in mergeParcelBitmaps");
|
||||
|
||||
}
|
||||
|
||||
int x, y;
|
||||
for (x = 0; x < 64; x++)
|
||||
for (y = 0; y < 64; y++)
|
||||
{
|
||||
for (y = 0; y < 64; y++)
|
||||
for (x = 0; x < 64; x++)
|
||||
{
|
||||
if (bitmap_add[x, y])
|
||||
{
|
||||
|
|
|
@ -336,6 +336,7 @@ namespace OpenSim.world
|
|||
if(!temp.Contains(currentParcel))
|
||||
{
|
||||
temp.Add(currentParcel);
|
||||
currentParcel.forceUpdateParcelInfo();
|
||||
currentParcel.sendParcelProperties(sequence_id,snap_selection,remote_client);
|
||||
}
|
||||
}
|
||||
|
@ -343,6 +344,11 @@ namespace OpenSim.world
|
|||
|
||||
parcelManager.sendParcelOverlay(remote_client);
|
||||
}
|
||||
|
||||
void ParcelDivideRequest(int west, int south, int east, int north, ClientView remote_client)
|
||||
{
|
||||
parcelManager.subdivide(west, south, east, north, remote_client.AgentID);
|
||||
}
|
||||
#endregion
|
||||
|
||||
/*
|
||||
|
|
|
@ -283,9 +283,9 @@ namespace OpenSim.world
|
|||
//Parcel backup routines. Yay!
|
||||
ParcelData[] parcels = new ParcelData[parcelManager.parcelList.Count];
|
||||
int i;
|
||||
for(i = 0; i < parcelManager.parcelList.Count; i++)
|
||||
for (i = 0; i < parcelManager.parcelList.Count; i++)
|
||||
{
|
||||
parcels[i] = parcelManager.parcelList[i].parcelData;
|
||||
parcels[i] = parcelManager.parcelList[OpenSim.RegionServer.world.ParcelManager.START_PARCEL_LOCAL_ID + i].parcelData;
|
||||
}
|
||||
localStorage.SaveParcels(parcels);
|
||||
|
||||
|
@ -615,6 +615,7 @@ namespace OpenSim.world
|
|||
agentClient.OnDeRezObject += new ClientView.GenericCall4(this.DeRezObject);
|
||||
|
||||
agentClient.OnParcelPropertiesRequest += new OpenSim.RegionServer.world.ParcelPropertiesRequest(ParcelPropertiesRequest);
|
||||
agentClient.OnParcelDivideRequest += new OpenSim.RegionServer.world.ParcelDivideRequest(ParcelDivideRequest);
|
||||
Avatar newAvatar = null;
|
||||
try
|
||||
{
|
||||
|
@ -662,6 +663,8 @@ namespace OpenSim.world
|
|||
return newAvatar;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public override void RemoveViewerAgent(ClientView agentClient)
|
||||
|
|
|
@ -189,7 +189,8 @@ namespace OpenSim.Storage.LocalStorageDb4o
|
|||
int i;
|
||||
for (i = 0; i < parcel_data.GetLength(0); i++)
|
||||
{
|
||||
MainConsole.Instance.Notice("Adding : " + i);
|
||||
|
||||
MainConsole.Instance.Notice("Adding : " + i + " - SAMPLE: " + parcel_data[i].parcelBitmapByteArray[0]);
|
||||
db.Set(parcel_data[i]);
|
||||
|
||||
}
|
||||
|
@ -206,6 +207,7 @@ namespace OpenSim.Storage.LocalStorageDb4o
|
|||
MainConsole.Instance.Notice("Parcel Backup: Parcels exist in database.");
|
||||
foreach (ParcelData parcelData in result)
|
||||
{
|
||||
|
||||
recv.ParcelFromStorage(parcelData);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,6 +58,7 @@ namespace OpenSim
|
|||
if (args[i] == "-sandbox")
|
||||
{
|
||||
sandBoxMode = true;
|
||||
userAccounts = true;
|
||||
startLoginServer = true;
|
||||
}
|
||||
/*
|
||||
|
|
|
@ -506,6 +506,7 @@ namespace OpenSim
|
|||
case "help":
|
||||
m_console.Error("show users - show info about connected users");
|
||||
m_console.Error("shutdown - disconnect all clients and shutdown");
|
||||
m_console.Error("backup - start a backup manually");
|
||||
break;
|
||||
|
||||
case "show":
|
||||
|
@ -524,6 +525,9 @@ namespace OpenSim
|
|||
Shutdown();
|
||||
break;
|
||||
|
||||
case "backup":
|
||||
LocalWorld.Backup();
|
||||
break;
|
||||
default:
|
||||
m_console.Error("Unknown command");
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue