Merge branch 'careminster-presence-refactor' of ssh://3dhosting.de/var/git/careminster into careminster-presence-refactor
commit
63531b1df5
|
@ -1723,5 +1723,9 @@ namespace OpenSim.Client.MXP.ClientStack
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StopFlying(ISceneEntity presence)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1208,6 +1208,10 @@ namespace OpenSim.Client.Sirikata.ClientStack
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StopFlying(ISceneEntity presence)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1223,5 +1223,9 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StopFlying(ISceneEntity presence)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1310,5 +1310,7 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
void SendChangeUserRights(UUID agentID, UUID friendID, int rights);
|
void SendChangeUserRights(UUID agentID, UUID friendID, int rights);
|
||||||
void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId);
|
void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId);
|
||||||
|
|
||||||
|
void StopFlying(ISceneEntity presence);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace OpenSim
|
||||||
{
|
{
|
||||||
public class VersionInfo
|
public class VersionInfo
|
||||||
{
|
{
|
||||||
private const string VERSION_NUMBER = "0.7CM";
|
private const string VERSION_NUMBER = "0.7.1CM";
|
||||||
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
||||||
|
|
||||||
public enum Flavour
|
public enum Flavour
|
||||||
|
|
|
@ -11873,5 +11873,60 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
dialog.Buttons = buttons;
|
dialog.Buttons = buttons;
|
||||||
OutPacket(dialog, ThrottleOutPacketType.Task);
|
OutPacket(dialog, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StopFlying(ISceneEntity p)
|
||||||
|
{
|
||||||
|
if (p is ScenePresence)
|
||||||
|
{
|
||||||
|
ScenePresence presence = p as ScenePresence;
|
||||||
|
// It turns out to get the agent to stop flying, you have to feed it stop flying velocities
|
||||||
|
// There's no explicit message to send the client to tell it to stop flying.. it relies on the
|
||||||
|
// velocity, collision plane and avatar height
|
||||||
|
|
||||||
|
// Add 1/6 the avatar's height to it's position so it doesn't shoot into the air
|
||||||
|
// when the avatar stands up
|
||||||
|
|
||||||
|
Vector3 pos = presence.AbsolutePosition;
|
||||||
|
|
||||||
|
if (presence.Appearance.AvatarHeight != 127.0f)
|
||||||
|
pos += new Vector3(0f, 0f, (presence.Appearance.AvatarHeight/6f));
|
||||||
|
else
|
||||||
|
pos += new Vector3(0f, 0f, (1.56f/6f));
|
||||||
|
|
||||||
|
presence.AbsolutePosition = pos;
|
||||||
|
|
||||||
|
// attach a suitable collision plane regardless of the actual situation to force the LLClient to land.
|
||||||
|
// Collision plane below the avatar's position a 6th of the avatar's height is suitable.
|
||||||
|
// Mind you, that this method doesn't get called if the avatar's velocity magnitude is greater then a
|
||||||
|
// certain amount.. because the LLClient wouldn't land in that situation anyway.
|
||||||
|
|
||||||
|
// why are we still testing for this really old height value default???
|
||||||
|
if (presence.Appearance.AvatarHeight != 127.0f)
|
||||||
|
presence.CollisionPlane = new Vector4(0, 0, 0, pos.Z - presence.Appearance.AvatarHeight/6f);
|
||||||
|
else
|
||||||
|
presence.CollisionPlane = new Vector4(0, 0, 0, pos.Z - (1.56f/6f));
|
||||||
|
|
||||||
|
|
||||||
|
ImprovedTerseObjectUpdatePacket.ObjectDataBlock block =
|
||||||
|
CreateImprovedTerseBlock(p, false);
|
||||||
|
|
||||||
|
const float TIME_DILATION = 1.0f;
|
||||||
|
ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f);
|
||||||
|
|
||||||
|
|
||||||
|
ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket();
|
||||||
|
packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
|
||||||
|
packet.RegionData.TimeDilation = timeDilation;
|
||||||
|
packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
|
||||||
|
|
||||||
|
packet.ObjectData[0] = block;
|
||||||
|
|
||||||
|
OutPacket(packet, ThrottleOutPacketType.Task, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ControllingClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId,
|
||||||
|
// AbsolutePosition, Velocity, Vector3.Zero, m_bodyRot, new Vector4(0,0,1,AbsolutePosition.Z - 0.5f), m_uuid, null, GetUpdatePriority(ControllingClient)));
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,40 +219,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
CreateFoldersForPath(destFolder, archivePathSectionToCreate, resolvedFolders, loadedNodes);
|
CreateFoldersForPath(destFolder, archivePathSectionToCreate, resolvedFolders, loadedNodes);
|
||||||
|
|
||||||
return destFolder;
|
return destFolder;
|
||||||
|
|
||||||
/*
|
|
||||||
string[] rawFolders = filePath.Split(new char[] { '/' });
|
|
||||||
|
|
||||||
// Find the folders that do exist along the path given
|
|
||||||
int i = 0;
|
|
||||||
bool noFolder = false;
|
|
||||||
InventoryFolderImpl foundFolder = rootDestinationFolder;
|
|
||||||
while (!noFolder && i < rawFolders.Length)
|
|
||||||
{
|
|
||||||
InventoryFolderImpl folder = foundFolder.FindFolderByPath(rawFolders[i]);
|
|
||||||
if (null != folder)
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("[INVENTORY ARCHIVER]: Found folder {0}", folder.Name);
|
|
||||||
foundFolder = folder;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
noFolder = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create any folders that did not previously exist
|
|
||||||
while (i < rawFolders.Length)
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("[INVENTORY ARCHIVER]: Creating folder {0}", rawFolders[i]);
|
|
||||||
|
|
||||||
UUID newFolderId = UUID.Random();
|
|
||||||
m_userInfo.CreateFolder(
|
|
||||||
rawFolders[i++], newFolderId, (ushort)AssetType.Folder, foundFolder.ID);
|
|
||||||
foundFolder = foundFolder.GetChildFolder(newFolderId);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -279,7 +279,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
public void TestIarV0_1WithEscapedChars()
|
public void TestIarV0_1WithEscapedChars()
|
||||||
{
|
{
|
||||||
TestHelper.InMethod();
|
TestHelper.InMethod();
|
||||||
log4net.Config.XmlConfigurator.Configure();
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
string itemName = "You & you are a mean/man/";
|
string itemName = "You & you are a mean/man/";
|
||||||
string humanEscapedItemName = @"You & you are a mean\/man\/";
|
string humanEscapedItemName = @"You & you are a mean\/man\/";
|
||||||
|
@ -505,7 +505,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
/// Test replication of an archive path to the user's inventory.
|
/// Test replication of an archive path to the user's inventory.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
public void TestReplicateArchivePathToUserInventory()
|
public void TestNewIarPath()
|
||||||
{
|
{
|
||||||
TestHelper.InMethod();
|
TestHelper.InMethod();
|
||||||
//log4net.Config.XmlConfigurator.Configure();
|
//log4net.Config.XmlConfigurator.Configure();
|
||||||
|
@ -540,5 +540,51 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
InventoryFolderBase folder2 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, "b");
|
InventoryFolderBase folder2 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, "b");
|
||||||
Assert.That(folder2, Is.Not.Null, "Could not find folder b");
|
Assert.That(folder2, Is.Not.Null, "Could not find folder b");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test replication of a partly existing archive path to the user's inventory.
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public void TestPartExistingIarPath()
|
||||||
|
{
|
||||||
|
TestHelper.InMethod();
|
||||||
|
//log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
Scene scene = SceneSetupHelpers.SetupScene("inventory");
|
||||||
|
UserAccount ua1 = UserProfileTestUtils.CreateUserWithInventory(scene);
|
||||||
|
|
||||||
|
string folder1ExistingName = "a";
|
||||||
|
string folder2Name = "b";
|
||||||
|
string itemName = "c.lsl";
|
||||||
|
|
||||||
|
InventoryFolderBase folder1
|
||||||
|
= UserInventoryTestUtils.CreateInventoryFolder(
|
||||||
|
scene.InventoryService, ua1.PrincipalID, folder1ExistingName);
|
||||||
|
|
||||||
|
string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random());
|
||||||
|
string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random());
|
||||||
|
string itemArchiveName = InventoryArchiveWriteRequest.CreateArchiveItemName(itemName, UUID.Random());
|
||||||
|
|
||||||
|
string itemArchivePath
|
||||||
|
= string.Format(
|
||||||
|
"{0}{1}{2}{3}",
|
||||||
|
ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemArchiveName);
|
||||||
|
|
||||||
|
new InventoryArchiveReadRequest(scene, ua1, null, (Stream)null)
|
||||||
|
.ReplicateArchivePathToUserInventory(
|
||||||
|
itemArchivePath, scene.InventoryService.GetRootFolder(ua1.PrincipalID),
|
||||||
|
new Dictionary<string, InventoryFolderBase>(), new List<InventoryNodeBase>());
|
||||||
|
|
||||||
|
InventoryFolderBase folder1Post
|
||||||
|
= InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName);
|
||||||
|
Assert.That(folder1Post.ID, Is.EqualTo(folder1.ID));
|
||||||
|
/*
|
||||||
|
InventoryFolderBase folder2
|
||||||
|
= InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b");
|
||||||
|
Assert.That(folder2, Is.Not.Null);
|
||||||
|
InventoryItemBase item = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, folder2, itemName);
|
||||||
|
Assert.That(item, Is.Not.Null);
|
||||||
|
*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -154,17 +154,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
|
||||||
private void OnInstantMessage(IClientAPI client, GridInstantMessage im)
|
private void OnInstantMessage(IClientAPI client, GridInstantMessage im)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[INVENTORY TRANSFER]: OnInstantMessage {0}", im.dialog);
|
m_log.InfoFormat("[INVENTORY TRANSFER]: OnInstantMessage {0}", im.dialog);
|
||||||
|
|
||||||
Scene scene = FindClientScene(client.AgentId);
|
Scene scene = FindClientScene(client.AgentId);
|
||||||
|
|
||||||
if (scene == null) // Something seriously wrong here.
|
if (scene == null) // Something seriously wrong here.
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (im.dialog == (byte) InstantMessageDialog.InventoryOffered)
|
if (im.dialog == (byte) InstantMessageDialog.InventoryOffered)
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("Asset type {0}", ((AssetType)im.binaryBucket[0]));
|
//m_log.DebugFormat("Asset type {0}", ((AssetType)im.binaryBucket[0]));
|
||||||
|
|
||||||
|
if (im.binaryBucket.Length < 17) // Invalid
|
||||||
|
return;
|
||||||
|
|
||||||
UUID receipientID = new UUID(im.toAgentID);
|
UUID receipientID = new UUID(im.toAgentID);
|
||||||
ScenePresence user = scene.GetScenePresence(receipientID);
|
ScenePresence user = scene.GetScenePresence(receipientID);
|
||||||
UUID copyID;
|
UUID copyID;
|
||||||
|
@ -420,8 +423,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
|
||||||
{
|
{
|
||||||
// Check if this is ours to handle
|
// Check if this is ours to handle
|
||||||
//
|
//
|
||||||
m_log.Info("OnGridInstantMessage");
|
|
||||||
|
|
||||||
Scene scene = FindClientScene(new UUID(msg.toAgentID));
|
Scene scene = FindClientScene(new UUID(msg.toAgentID));
|
||||||
|
|
||||||
if (scene == null)
|
if (scene == null)
|
||||||
|
|
|
@ -180,6 +180,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags);
|
sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags);
|
||||||
sp.Teleport(position);
|
sp.Teleport(position);
|
||||||
|
|
||||||
|
foreach (SceneObjectGroup grp in sp.Attachments)
|
||||||
|
sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT);
|
||||||
}
|
}
|
||||||
else // Another region possibly in another simulator
|
else // Another region possibly in another simulator
|
||||||
{
|
{
|
||||||
|
|
|
@ -70,10 +70,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
|
|
||||||
#region IMapImageGenerator Members
|
#region IMapImageGenerator Members
|
||||||
|
|
||||||
public byte[] WriteJpeg2000Image(string gradientmap)
|
public Bitmap CreateMapTile(string gradientmap)
|
||||||
{
|
{
|
||||||
byte[] imageData = null;
|
|
||||||
|
|
||||||
bool drawPrimVolume = true;
|
bool drawPrimVolume = true;
|
||||||
bool textureTerrain = false;
|
bool textureTerrain = false;
|
||||||
|
|
||||||
|
@ -98,32 +96,36 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
}
|
}
|
||||||
terrainRenderer.Initialise(m_scene, m_config);
|
terrainRenderer.Initialise(m_scene, m_config);
|
||||||
|
|
||||||
using (Bitmap mapbmp = new Bitmap((int)Constants.RegionSize, (int)Constants.RegionSize))
|
Bitmap mapbmp = new Bitmap((int)Constants.RegionSize, (int)Constants.RegionSize, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
|
||||||
|
//long t = System.Environment.TickCount;
|
||||||
|
//for (int i = 0; i < 10; ++i) {
|
||||||
|
terrainRenderer.TerrainToBitmap(mapbmp);
|
||||||
|
//}
|
||||||
|
//t = System.Environment.TickCount - t;
|
||||||
|
//m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t);
|
||||||
|
|
||||||
|
|
||||||
|
if (drawPrimVolume)
|
||||||
{
|
{
|
||||||
//long t = System.Environment.TickCount;
|
DrawObjectVolume(m_scene, mapbmp);
|
||||||
//for (int i = 0; i < 10; ++i) {
|
|
||||||
terrainRenderer.TerrainToBitmap(mapbmp);
|
|
||||||
//}
|
|
||||||
//t = System.Environment.TickCount - t;
|
|
||||||
//m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t);
|
|
||||||
|
|
||||||
|
|
||||||
if (drawPrimVolume)
|
|
||||||
{
|
|
||||||
DrawObjectVolume(m_scene, mapbmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
imageData = OpenJPEG.EncodeFromImage(mapbmp, true);
|
|
||||||
}
|
|
||||||
catch (Exception e) // LEGIT: Catching problems caused by OpenJPEG p/invoke
|
|
||||||
{
|
|
||||||
m_log.Error("Failed generating terrain map: " + e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return imageData;
|
return mapbmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] WriteJpeg2000Image(string gradientmap)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (Bitmap mapbmp = CreateMapTile(gradientmap))
|
||||||
|
return OpenJPEG.EncodeFromImage(mapbmp, true);
|
||||||
|
}
|
||||||
|
catch (Exception e) // LEGIT: Catching problems caused by OpenJPEG p/invoke
|
||||||
|
{
|
||||||
|
m_log.Error("Failed generating terrain map: " + e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -37,6 +37,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
{
|
{
|
||||||
public class ShadedMapTileRenderer : IMapTileTerrainRenderer
|
public class ShadedMapTileRenderer : IMapTileTerrainRenderer
|
||||||
{
|
{
|
||||||
|
private static readonly Color WATER_COLOR = Color.FromArgb(29, 71, 95);
|
||||||
|
|
||||||
private static readonly ILog m_log =
|
private static readonly ILog m_log =
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
@ -221,8 +223,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Color water = Color.FromArgb((int)heightvalue, (int)heightvalue, 255);
|
mapbmp.SetPixel(x, yr, WATER_COLOR);
|
||||||
mapbmp.SetPixel(x, yr, water);
|
|
||||||
}
|
}
|
||||||
catch (ArgumentException)
|
catch (ArgumentException)
|
||||||
{
|
{
|
||||||
|
|
|
@ -136,6 +136,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
private static readonly UUID defaultTerrainTexture4 = new UUID("53a2f406-4895-1d13-d541-d2e3b86bc19c");
|
private static readonly UUID defaultTerrainTexture4 = new UUID("53a2f406-4895-1d13-d541-d2e3b86bc19c");
|
||||||
private static readonly Color defaultColor4 = Color.FromArgb(200, 200, 200);
|
private static readonly Color defaultColor4 = Color.FromArgb(200, 200, 200);
|
||||||
|
|
||||||
|
private static readonly Color WATER_COLOR = Color.FromArgb(29, 71, 95);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
@ -406,8 +408,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
|
|
||||||
heightvalue = 100f - (heightvalue * 100f) / 19f; // 0 - 19 => 100 - 0
|
heightvalue = 100f - (heightvalue * 100f) / 19f; // 0 - 19 => 100 - 0
|
||||||
|
|
||||||
Color water = Color.FromArgb((int)heightvalue, (int)heightvalue, 255);
|
mapbmp.SetPixel(x, yr, WATER_COLOR);
|
||||||
mapbmp.SetPixel(x, yr, water);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1002,41 +1002,15 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
|
|
||||||
public void RegenerateMaptile(byte[] data)
|
public void RegenerateMaptile(byte[] data)
|
||||||
{
|
{
|
||||||
// Overwrites the local Asset cache with new maptile data
|
|
||||||
// Assets are single write, this causes the asset server to ignore this update,
|
|
||||||
// but the local asset cache does not
|
|
||||||
|
|
||||||
// this is on purpose! The net result of this is the region always has the most up to date
|
|
||||||
// map tile while protecting the (grid) asset database from bloat caused by a new asset each
|
|
||||||
// time a mapimage is generated!
|
|
||||||
|
|
||||||
UUID lastMapRegionUUID = m_scene.RegionInfo.RegionSettings.TerrainImageID;
|
UUID lastMapRegionUUID = m_scene.RegionInfo.RegionSettings.TerrainImageID;
|
||||||
|
|
||||||
int lastMapRefresh = 0;
|
|
||||||
int twoDays = 172800;
|
|
||||||
// int RefreshSeconds = twoDays;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
lastMapRefresh = Convert.ToInt32(m_scene.RegionInfo.lastMapRefresh);
|
|
||||||
}
|
|
||||||
catch (ArgumentException)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
catch (FormatException)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
catch (OverflowException)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
m_log.Debug("[MAPTILE]: STORING MAPTILE IMAGE");
|
m_log.Debug("[MAPTILE]: STORING MAPTILE IMAGE");
|
||||||
|
|
||||||
m_scene.RegionInfo.RegionSettings.TerrainImageID = UUID.Random();
|
m_scene.RegionInfo.RegionSettings.TerrainImageID = UUID.Random();
|
||||||
|
|
||||||
AssetBase asset = new AssetBase(
|
AssetBase asset = new AssetBase(
|
||||||
m_scene.RegionInfo.RegionSettings.TerrainImageID,
|
m_scene.RegionInfo.RegionSettings.TerrainImageID,
|
||||||
"terrainImage_" + m_scene.RegionInfo.RegionID.ToString() + "_" + lastMapRefresh.ToString(),
|
"terrainImage_" + m_scene.RegionInfo.RegionID.ToString(),
|
||||||
(sbyte)AssetType.Texture,
|
(sbyte)AssetType.Texture,
|
||||||
m_scene.RegionInfo.RegionID.ToString());
|
m_scene.RegionInfo.RegionID.ToString());
|
||||||
asset.Data = data;
|
asset.Data = data;
|
||||||
|
|
|
@ -1164,5 +1164,9 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StopFlying(ISceneEntity presence)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
|
|
||||||
public interface IMapImageGenerator
|
public interface IMapImageGenerator
|
||||||
{
|
{
|
||||||
|
System.Drawing.Bitmap CreateMapTile(string gradientmap);
|
||||||
byte[] WriteJpeg2000Image(string gradientmap);
|
byte[] WriteJpeg2000Image(string gradientmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -681,7 +681,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
foreach (TaskInventoryItem item in items)
|
foreach (TaskInventoryItem item in items)
|
||||||
{
|
{
|
||||||
m_items.Add(item.ItemID, item);
|
m_items.Add(item.ItemID, item);
|
||||||
m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
|
// m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
|
||||||
}
|
}
|
||||||
m_items.LockItemsForWrite(false);
|
m_items.LockItemsForWrite(false);
|
||||||
|
|
||||||
|
|
|
@ -1098,27 +1098,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public void StopFlying()
|
public void StopFlying()
|
||||||
{
|
{
|
||||||
// It turns out to get the agent to stop flying, you have to feed it stop flying velocities
|
ControllingClient.StopFlying(this);
|
||||||
// There's no explicit message to send the client to tell it to stop flying.. it relies on the
|
|
||||||
// velocity, collision plane and avatar height
|
|
||||||
|
|
||||||
// Add 1/6 the avatar's height to it's position so it doesn't shoot into the air
|
|
||||||
// when the avatar stands up
|
|
||||||
|
|
||||||
if (m_avHeight != 127.0f)
|
|
||||||
{
|
|
||||||
AbsolutePosition = AbsolutePosition + new Vector3(0f, 0f, (m_avHeight / 6f));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AbsolutePosition = AbsolutePosition + new Vector3(0f, 0f, (1.56f / 6f));
|
|
||||||
}
|
|
||||||
|
|
||||||
m_updateCount = UPDATE_COUNT; //KF: Trigger Anim updates to catch falling anim.
|
|
||||||
|
|
||||||
ControllingClient.SendPrimUpdate(this, PrimUpdateFlags.Position);
|
|
||||||
//ControllingClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId,
|
|
||||||
// AbsolutePosition, Velocity, Vector3.Zero, m_bodyRot, new Vector4(0,0,1,AbsolutePosition.Z - 0.5f), m_uuid, null, GetUpdatePriority(ControllingClient)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddNeighbourRegion(ulong regionHandle, string cap)
|
public void AddNeighbourRegion(ulong regionHandle, string cap)
|
||||||
|
|
|
@ -221,7 +221,16 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
sr = new StringReader(parts[i].OuterXml);
|
sr = new StringReader(parts[i].OuterXml);
|
||||||
reader = new XmlTextReader(sr);
|
reader = new XmlTextReader(sr);
|
||||||
SceneObjectPart part = SceneObjectPart.FromXml(reader);
|
SceneObjectPart part = SceneObjectPart.FromXml(reader);
|
||||||
|
|
||||||
|
int originalLinkNum = part.LinkNum;
|
||||||
|
|
||||||
sceneObject.AddPart(part);
|
sceneObject.AddPart(part);
|
||||||
|
|
||||||
|
// SceneObjectGroup.AddPart() tries to be smart and automatically set the LinkNum.
|
||||||
|
// We override that here
|
||||||
|
if (originalLinkNum != 0)
|
||||||
|
part.LinkNum = originalLinkNum;
|
||||||
|
|
||||||
part.StoreUndoState();
|
part.StoreUndoState();
|
||||||
reader.Close();
|
reader.Close();
|
||||||
sr.Close();
|
sr.Close();
|
||||||
|
|
|
@ -1689,5 +1689,9 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StopFlying(ISceneEntity presence)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1171,5 +1171,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StopFlying(ISceneEntity presence)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2862,6 +2862,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
// objects rezzed with this method are die_at_edge by default.
|
// objects rezzed with this method are die_at_edge by default.
|
||||||
new_group.RootPart.SetDieAtEdge(true);
|
new_group.RootPart.SetDieAtEdge(true);
|
||||||
|
|
||||||
|
new_group.ResumeScripts();
|
||||||
|
|
||||||
m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams(
|
m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams(
|
||||||
"object_rez", new Object[] {
|
"object_rez", new Object[] {
|
||||||
new LSL_String(
|
new LSL_String(
|
||||||
|
|
|
@ -18,10 +18,10 @@
|
||||||
</DeploymentInformation>
|
</DeploymentInformation>
|
||||||
<Contents>
|
<Contents>
|
||||||
<File name="./CM_Constants.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
<File name="./CM_Constants.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
||||||
<File name="./CM_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
|
||||||
<File name="./Executor.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
<File name="./Executor.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
||||||
<File name="./LSL_Constants.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
<File name="./LSL_Constants.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
||||||
<File name="./LSL_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
<File name="./LSL_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
||||||
|
<File name="./LS_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
||||||
<File name="./MOD_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
<File name="./MOD_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
||||||
<File name="./OSSL_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
<File name="./OSSL_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
||||||
<File name="./ScriptBase.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
<File name="./ScriptBase.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
|
||||||
|
|
|
@ -28,17 +28,18 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Mono.Addins;
|
using Mono.Addins;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
using OpenSim.Server.Base;
|
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
|
|
||||||
|
@ -62,7 +63,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
#region ISharedRegionModule
|
#region ISharedRegionModule
|
||||||
|
|
||||||
public Type ReplaceableInterface { get { return null; } }
|
public Type ReplaceableInterface { get { return null; } }
|
||||||
public void RegionLoaded(Scene scene) { }
|
public void RegionLoaded(Scene scene) { if (!String.IsNullOrEmpty(m_serverUrl)) { UploadMapTile(scene); } }
|
||||||
public void PostInitialise() { }
|
public void PostInitialise() { }
|
||||||
public void Close() { }
|
public void Close() { }
|
||||||
|
|
||||||
|
@ -358,6 +359,83 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
#endregion IGridService
|
#endregion IGridService
|
||||||
|
|
||||||
|
private void UploadMapTile(IScene scene)
|
||||||
|
{
|
||||||
|
string errorMessage = null;
|
||||||
|
|
||||||
|
// Create a PNG map tile and upload it to the AddMapTile API
|
||||||
|
byte[] pngData = Utils.EmptyBytes;
|
||||||
|
IMapImageGenerator tileGenerator = scene.RequestModuleInterface<IMapImageGenerator>();
|
||||||
|
if (tileGenerator == null)
|
||||||
|
{
|
||||||
|
m_log.Warn("[SIMIAN GRID CONNECTOR]: Cannot upload PNG map tile without an IMapImageGenerator");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (Image mapTile = tileGenerator.CreateMapTile("defaultstripe.png"))
|
||||||
|
{
|
||||||
|
using (MemoryStream stream = new MemoryStream())
|
||||||
|
{
|
||||||
|
mapTile.Save(stream, ImageFormat.Png);
|
||||||
|
pngData = stream.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<MultipartForm.Element> postParameters = new List<MultipartForm.Element>()
|
||||||
|
{
|
||||||
|
new MultipartForm.Parameter("X", scene.RegionInfo.RegionLocX.ToString()),
|
||||||
|
new MultipartForm.Parameter("Y", scene.RegionInfo.RegionLocY.ToString()),
|
||||||
|
new MultipartForm.File("Tile", "tile.png", "image/png", pngData)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Make the remote storage request
|
||||||
|
try
|
||||||
|
{
|
||||||
|
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(m_serverUrl);
|
||||||
|
|
||||||
|
HttpWebResponse response = MultipartForm.Post(request, postParameters);
|
||||||
|
using (Stream responseStream = response.GetResponseStream())
|
||||||
|
{
|
||||||
|
string responseStr = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
responseStr = responseStream.GetStreamString();
|
||||||
|
OSD responseOSD = OSDParser.Deserialize(responseStr);
|
||||||
|
if (responseOSD.Type == OSDType.Map)
|
||||||
|
{
|
||||||
|
OSDMap responseMap = (OSDMap)responseOSD;
|
||||||
|
if (responseMap["Success"].AsBoolean())
|
||||||
|
m_log.Info("[SIMIAN GRID CONNECTOR]: Uploaded " + pngData.Length + " byte PNG map tile to AddMapTile");
|
||||||
|
else
|
||||||
|
errorMessage = "Upload failed: " + responseMap["Message"].AsString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errorMessage = "Response format was invalid:\n" + responseStr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
if (!String.IsNullOrEmpty(responseStr))
|
||||||
|
errorMessage = "Failed to parse the response:\n" + responseStr;
|
||||||
|
else
|
||||||
|
errorMessage = "Failed to retrieve the response: " + ex.Message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (WebException ex)
|
||||||
|
{
|
||||||
|
errorMessage = ex.Message;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!String.IsNullOrEmpty(errorMessage))
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("[SIMIAN GRID CONNECTOR]: Failed to store {0} byte PNG map tile for {1}: {2}",
|
||||||
|
pngData.Length, scene.RegionInfo.RegionName, errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private GridRegion GetNearestRegion(Vector3d position, bool onlyEnabled)
|
private GridRegion GetNearestRegion(Vector3d position, bool onlyEnabled)
|
||||||
{
|
{
|
||||||
NameValueCollection requestArgs = new NameValueCollection
|
NameValueCollection requestArgs = new NameValueCollection
|
||||||
|
|
|
@ -1224,5 +1224,9 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StopFlying(ISceneEntity presence)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,25 +36,29 @@ namespace OpenSim.Tests.Common
|
||||||
public class AssetHelpers
|
public class AssetHelpers
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create an asset from the given data
|
/// Create a notecard asset with a random uuid and dummy text.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static AssetBase CreateAsset(UUID assetUuid, AssetType assetType, byte[] data, UUID creatorID)
|
/// <param name="creatorId">/param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static AssetBase CreateAsset(UUID creatorId)
|
||||||
{
|
{
|
||||||
AssetBase asset = new AssetBase(assetUuid, assetUuid.ToString(), (sbyte)assetType, creatorID.ToString());
|
return CreateAsset(UUID.Random(), AssetType.Notecard, "hello", creatorId);
|
||||||
asset.Data = data;
|
|
||||||
return asset;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Create an asset from the given data
|
|
||||||
/// </summary>
|
|
||||||
public static AssetBase CreateAsset(UUID assetUuid, AssetType assetType, string data, UUID creatorID)
|
|
||||||
{
|
|
||||||
return CreateAsset(assetUuid, assetType, Encoding.ASCII.GetBytes(data), creatorID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create an asset from the given scene object
|
/// Create and store a notecard asset with a random uuid and dummy text.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="creatorId">/param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static AssetBase CreateAsset(Scene scene, UUID creatorId)
|
||||||
|
{
|
||||||
|
AssetBase asset = CreateAsset(UUID.Random(), AssetType.Notecard, "hello", creatorId);
|
||||||
|
scene.AssetService.Store(asset);
|
||||||
|
return asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create an asset from the given scene object.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetUuid"></param>
|
/// <param name="assetUuid"></param>
|
||||||
/// <param name="sog"></param>
|
/// <param name="sog"></param>
|
||||||
|
@ -67,5 +71,23 @@ namespace OpenSim.Tests.Common
|
||||||
Encoding.ASCII.GetBytes(SceneObjectSerializer.ToXml2Format(sog)),
|
Encoding.ASCII.GetBytes(SceneObjectSerializer.ToXml2Format(sog)),
|
||||||
sog.OwnerID);
|
sog.OwnerID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create an asset from the given data.
|
||||||
|
/// </summary>
|
||||||
|
public static AssetBase CreateAsset(UUID assetUuid, AssetType assetType, string data, UUID creatorID)
|
||||||
|
{
|
||||||
|
return CreateAsset(assetUuid, assetType, Encoding.ASCII.GetBytes(data), creatorID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create an asset from the given data.
|
||||||
|
/// </summary>
|
||||||
|
public static AssetBase CreateAsset(UUID assetUuid, AssetType assetType, byte[] data, UUID creatorID)
|
||||||
|
{
|
||||||
|
AssetBase asset = new AssetBase(assetUuid, assetUuid.ToString(), (sbyte)assetType, creatorID.ToString());
|
||||||
|
asset.Data = data;
|
||||||
|
return asset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
using System;
|
using System;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
|
|
||||||
namespace OpenSim.Tests.Common
|
namespace OpenSim.Tests.Common
|
||||||
|
@ -39,6 +40,23 @@ namespace OpenSim.Tests.Common
|
||||||
{
|
{
|
||||||
public static readonly string PATH_DELIMITER = "/";
|
public static readonly string PATH_DELIMITER = "/";
|
||||||
|
|
||||||
|
public static InventoryItemBase CreateInventoryItem(
|
||||||
|
Scene scene, string itemName, UUID itemId, string folderPath, UUID userId)
|
||||||
|
{
|
||||||
|
InventoryItemBase item = new InventoryItemBase();
|
||||||
|
item.Name = itemName;
|
||||||
|
item.AssetID = AssetHelpers.CreateAsset(scene, userId).FullID;
|
||||||
|
item.ID = itemId;
|
||||||
|
|
||||||
|
// Really quite bad since the objs folder could be moved in the future and confuse the tests
|
||||||
|
InventoryFolderBase objsFolder = scene.InventoryService.GetFolderForType(userId, AssetType.Object);
|
||||||
|
|
||||||
|
item.Folder = objsFolder.ID;
|
||||||
|
scene.AddInventoryItem(userId, item);
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create inventory folders starting from the user's root folder.
|
/// Create inventory folders starting from the user's root folder.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue