* Spring cleaning on Region.Environment.
* Converted a large number of read-only fields to be actually, readonly. * Reformatted code sections. * Removed redundant code.0.6.0-stable
parent
01f31fd933
commit
13526097f2
|
@ -32,13 +32,10 @@ namespace OpenSim.Region.Environment
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Bit Vector for Which Modules to send an instant message to from the Scene or an Associated Module
|
/// Bit Vector for Which Modules to send an instant message to from the Scene or an Associated Module
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
// This prevents the Modules from sending Instant messages to other modules through the scene
|
// This prevents the Modules from sending Instant messages to other modules through the scene
|
||||||
// and then receiving the same messages
|
// and then receiving the same messages
|
||||||
|
|
||||||
// This is mostly here because on LLSL and the SecondLife Client, IMs,Groups and friends are linked
|
// This is mostly here because on LLSL and the SecondLife Client, IMs,Groups and friends are linked
|
||||||
// inseparably
|
// inseparably
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum InstantMessageReceiver : uint
|
public enum InstantMessageReceiver : uint
|
||||||
{
|
{
|
||||||
|
|
|
@ -70,7 +70,8 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
void handleSignificantClientMovement(IClientAPI remote_client);
|
void handleSignificantClientMovement(IClientAPI remote_client);
|
||||||
void handleAnyClientMovement(ScenePresence avatar);
|
void handleAnyClientMovement(ScenePresence avatar);
|
||||||
void handleParcelAccessRequest(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client);
|
void handleParcelAccessRequest(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client);
|
||||||
void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID, uint flags, int landLocalID, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client);
|
|
||||||
|
|
||||||
|
void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID, uint flags, int landLocalID, List<ParcelManager.ParcelAccessEntry> entries,
|
||||||
|
IClientAPI remote_client);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -32,10 +32,10 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
{
|
{
|
||||||
public interface IRegionModule
|
public interface IRegionModule
|
||||||
{
|
{
|
||||||
|
string Name { get; }
|
||||||
|
bool IsSharedModule { get; }
|
||||||
void Initialise(Scene scene, IConfigSource source);
|
void Initialise(Scene scene, IConfigSource source);
|
||||||
void PostInitialise();
|
void PostInitialise();
|
||||||
void Close();
|
void Close();
|
||||||
string Name { get; }
|
|
||||||
bool IsSharedModule { get; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -47,12 +47,11 @@ namespace OpenSim.Region.Environment
|
||||||
public class ModuleLoader
|
public class ModuleLoader
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
private readonly IConfigSource m_config;
|
||||||
public Dictionary<string, Assembly> LoadedAssemblys = new Dictionary<string, Assembly>();
|
|
||||||
|
|
||||||
private readonly List<IRegionModule> m_loadedModules = new List<IRegionModule>();
|
private readonly List<IRegionModule> m_loadedModules = new List<IRegionModule>();
|
||||||
private readonly Dictionary<string, IRegionModule> m_loadedSharedModules = new Dictionary<string, IRegionModule>();
|
private readonly Dictionary<string, IRegionModule> m_loadedSharedModules = new Dictionary<string, IRegionModule>();
|
||||||
private readonly IConfigSource m_config;
|
public Dictionary<string, Assembly> LoadedAssemblys = new Dictionary<string, Assembly>();
|
||||||
|
|
||||||
public ModuleLoader(IConfigSource config)
|
public ModuleLoader(IConfigSource config)
|
||||||
{
|
{
|
||||||
|
@ -86,7 +85,8 @@ namespace OpenSim.Region.Environment
|
||||||
DynamicTextureModule dynamicModule = new DynamicTextureModule();
|
DynamicTextureModule dynamicModule = new DynamicTextureModule();
|
||||||
if (m_loadedSharedModules.ContainsKey(dynamicModule.Name))
|
if (m_loadedSharedModules.ContainsKey(dynamicModule.Name))
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", dynamicModule.Name, "DynamicTextureModule");
|
m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", dynamicModule.Name,
|
||||||
|
"DynamicTextureModule");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -149,13 +149,13 @@ namespace OpenSim.Region.Environment
|
||||||
AssetTransactionModule transactionsModule = new AssetTransactionModule();
|
AssetTransactionModule transactionsModule = new AssetTransactionModule();
|
||||||
if (m_loadedSharedModules.ContainsKey(transactionsModule.Name))
|
if (m_loadedSharedModules.ContainsKey(transactionsModule.Name))
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", transactionsModule.Name, "TransactionModule");
|
m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", transactionsModule.Name,
|
||||||
|
"TransactionModule");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_loadedSharedModules.Add(transactionsModule.Name, transactionsModule);
|
m_loadedSharedModules.Add(transactionsModule.Name, transactionsModule);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitialiseSharedModules(Scene scene)
|
public void InitialiseSharedModules(Scene scene)
|
||||||
|
@ -284,7 +284,7 @@ namespace OpenSim.Region.Environment
|
||||||
{
|
{
|
||||||
if (pluginType.GetInterface("IRegionModule") != null)
|
if (pluginType.GetInterface("IRegionModule") != null)
|
||||||
{
|
{
|
||||||
modules.Add((IRegionModule)Activator.CreateInstance(pluginType));
|
modules.Add((IRegionModule) Activator.CreateInstance(pluginType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,15 +40,16 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Asset requests with data which are ready to be sent back to requesters. This includes textures.
|
/// Asset requests with data which are ready to be sent back to requesters. This includes textures.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private List<AssetRequest> AssetRequests;
|
private readonly List<AssetRequest> AssetRequests;
|
||||||
|
|
||||||
private Scene m_scene;
|
private readonly Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
||||||
private Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Assets requests (for each user) which are waiting for asset server data. This includes texture requests
|
/// Assets requests (for each user) which are waiting for asset server data. This includes texture requests
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private Dictionary<LLUUID, Dictionary<LLUUID, AssetRequest>> RequestedAssets;
|
private readonly Dictionary<LLUUID, Dictionary<LLUUID, AssetRequest>> RequestedAssets;
|
||||||
|
|
||||||
|
private Scene m_scene;
|
||||||
|
|
||||||
public AssetDownloadModule()
|
public AssetDownloadModule()
|
||||||
{
|
{
|
||||||
|
@ -205,22 +206,18 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload
|
||||||
{
|
{
|
||||||
public AssetBase AssetInf;
|
public AssetBase AssetInf;
|
||||||
public byte AssetRequestSource = 2;
|
public byte AssetRequestSource = 2;
|
||||||
public long DataPointer = 0;
|
public long DataPointer;
|
||||||
public int DiscardLevel = -1;
|
public int DiscardLevel = -1;
|
||||||
public AssetBase ImageInfo;
|
public AssetBase ImageInfo;
|
||||||
public bool IsTextureRequest;
|
public bool IsTextureRequest;
|
||||||
public int NumPackets = 0;
|
public int NumPackets;
|
||||||
public int PacketCounter = 0;
|
public int PacketCounter;
|
||||||
public byte[] Params = null;
|
public byte[] Params;
|
||||||
public LLUUID RequestAssetID;
|
public LLUUID RequestAssetID;
|
||||||
public IClientAPI RequestUser;
|
public IClientAPI RequestUser;
|
||||||
public LLUUID TransferRequestID;
|
public LLUUID TransferRequestID;
|
||||||
//public bool AssetInCache;
|
//public bool AssetInCache;
|
||||||
//public int TimeRequested;
|
//public int TimeRequested;
|
||||||
|
|
||||||
public AssetRequest()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
// Fields
|
// Fields
|
||||||
private bool m_dumpAssetsToFile;
|
private readonly bool m_dumpAssetsToFile;
|
||||||
public AgentAssetTransactionsManager Manager;
|
public AgentAssetTransactionsManager Manager;
|
||||||
public LLUUID UserID;
|
public LLUUID UserID;
|
||||||
public Dictionary<LLUUID, AssetXferUploader> XferUploaders = new Dictionary<LLUUID, AssetXferUploader>();
|
public Dictionary<LLUUID, AssetXferUploader> XferUploaders = new Dictionary<LLUUID, AssetXferUploader>();
|
||||||
|
@ -141,23 +141,23 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
public class AssetXferUploader
|
public class AssetXferUploader
|
||||||
{
|
{
|
||||||
// Fields
|
// Fields
|
||||||
|
private readonly bool m_dumpAssetToFile;
|
||||||
|
private readonly AgentAssetTransactions m_userTransactions;
|
||||||
public bool AddToInventory;
|
public bool AddToInventory;
|
||||||
public AssetBase Asset;
|
public AssetBase Asset;
|
||||||
public LLUUID InventFolder = LLUUID.Zero;
|
public LLUUID InventFolder = LLUUID.Zero;
|
||||||
private sbyte invType = 0;
|
private sbyte invType;
|
||||||
private bool m_createItem = false;
|
private bool m_createItem;
|
||||||
private string m_description = String.Empty;
|
private string m_description = String.Empty;
|
||||||
private bool m_dumpAssetToFile;
|
private bool m_finished;
|
||||||
private bool m_finished = false;
|
|
||||||
private string m_name = String.Empty;
|
private string m_name = String.Empty;
|
||||||
private bool m_storeLocal;
|
private bool m_storeLocal;
|
||||||
private AgentAssetTransactions m_userTransactions;
|
private uint nextPerm;
|
||||||
private uint nextPerm = 0;
|
|
||||||
private IClientAPI ourClient;
|
private IClientAPI ourClient;
|
||||||
public LLUUID TransactionID = LLUUID.Zero;
|
public LLUUID TransactionID = LLUUID.Zero;
|
||||||
private sbyte type = 0;
|
private sbyte type;
|
||||||
public bool UploadComplete;
|
public bool UploadComplete;
|
||||||
private byte wearableType = 0;
|
private byte wearableType;
|
||||||
public ulong XferID;
|
public ulong XferID;
|
||||||
|
|
||||||
public AssetXferUploader(AgentAssetTransactions transactions, bool dumpAssetToFile)
|
public AssetXferUploader(AgentAssetTransactions transactions, bool dumpAssetToFile)
|
||||||
|
@ -390,7 +390,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
item.BasePermissions = 2147483647;
|
item.BasePermissions = 2147483647;
|
||||||
item.CurrentPermissions = 2147483647;
|
item.CurrentPermissions = 2147483647;
|
||||||
item.NextPermissions = nextPerm;
|
item.NextPermissions = nextPerm;
|
||||||
item.Flags = (uint) wearableType;
|
item.Flags = wearableType;
|
||||||
|
|
||||||
userInfo.AddItem(ourClient.AgentId, item);
|
userInfo.AddItem(ourClient.AgentId, item);
|
||||||
ourClient.SendInventoryItemCreateUpdate(item);
|
ourClient.SendInventoryItemCreateUpdate(item);
|
||||||
|
|
|
@ -40,16 +40,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
public class AssetTransactionModule : IRegionModule, IAgentAssetTransactions
|
public class AssetTransactionModule : IRegionModule, IAgentAssetTransactions
|
||||||
{
|
{
|
||||||
private readonly Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
private readonly Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
||||||
private bool m_dumpAssetsToFile = false;
|
private bool m_dumpAssetsToFile;
|
||||||
private Scene m_scene = null;
|
private Scene m_scene;
|
||||||
|
|
||||||
private AgentAssetTransactionsManager m_transactionManager;
|
private AgentAssetTransactionsManager m_transactionManager;
|
||||||
|
|
||||||
public AssetTransactionModule()
|
|
||||||
{
|
|
||||||
// System.Console.WriteLine("creating AgentAssetTransactionModule");
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IAgentAssetTransactions Members
|
#region IAgentAssetTransactions Members
|
||||||
|
|
||||||
public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID,
|
public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID,
|
||||||
|
@ -145,13 +140,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Each agent has its own singleton collection of transactions
|
/// Each agent has its own singleton collection of transactions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private Dictionary<LLUUID, AgentAssetTransactions> AgentTransactions =
|
private readonly Dictionary<LLUUID, AgentAssetTransactions> AgentTransactions =
|
||||||
new Dictionary<LLUUID, AgentAssetTransactions>();
|
new Dictionary<LLUUID, AgentAssetTransactions>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Should we dump uploaded assets to the filesystem?
|
/// Should we dump uploaded assets to the filesystem?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private bool m_dumpAssetsToFile;
|
private readonly bool m_dumpAssetsToFile;
|
||||||
|
|
||||||
public Scene MyScene;
|
public Scene MyScene;
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
|
||||||
private readonly BlockingQueue<ITextureSender> m_queueSenders
|
private readonly BlockingQueue<ITextureSender> m_queueSenders
|
||||||
= new BlockingQueue<ITextureSender>();
|
= new BlockingQueue<ITextureSender>();
|
||||||
|
|
||||||
|
private readonly List<Scene> m_scenes = new List<Scene>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Each user has their own texture download service.
|
/// Each user has their own texture download service.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -54,14 +56,9 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
|
||||||
new Dictionary<LLUUID, UserTextureDownloadService>();
|
new Dictionary<LLUUID, UserTextureDownloadService>();
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private List<Scene> m_scenes = new List<Scene>();
|
|
||||||
|
|
||||||
private Thread m_thread;
|
private Thread m_thread;
|
||||||
|
|
||||||
public TextureDownloadModule()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
@ -69,7 +66,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
|
||||||
if (m_scene == null)
|
if (m_scene == null)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("Creating Texture download module");
|
//Console.WriteLine("Creating Texture download module");
|
||||||
m_thread = new Thread(new ThreadStart(ProcessTextureSenders));
|
m_thread = new Thread(ProcessTextureSenders);
|
||||||
m_thread.Name = "ProcessTextureSenderThread";
|
m_thread.Name = "ProcessTextureSenderThread";
|
||||||
m_thread.IsBackground = true;
|
m_thread.IsBackground = true;
|
||||||
m_thread.Start();
|
m_thread.Start();
|
||||||
|
|
|
@ -40,13 +40,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
|
||||||
//private static readonly log4net.ILog m_log
|
//private static readonly log4net.ILog m_log
|
||||||
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private bool m_cancel = false;
|
private readonly LLUUID m_textureId;
|
||||||
|
private bool m_cancel;
|
||||||
private IClientAPI m_client;
|
private IClientAPI m_client;
|
||||||
|
|
||||||
// See ITextureSender
|
// See ITextureSender
|
||||||
|
|
||||||
private bool m_sending = false;
|
private bool m_sending;
|
||||||
private LLUUID m_textureId;
|
|
||||||
|
|
||||||
// See ITextureSender
|
// See ITextureSender
|
||||||
|
|
||||||
|
|
|
@ -43,12 +43,14 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
|
||||||
private static readonly ILog m_log
|
private static readonly ILog m_log
|
||||||
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private readonly IClientAPI RequestUser;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Records the number of times texture send has been called.
|
/// Records the number of times texture send has been called.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int counter = 0;
|
public int counter;
|
||||||
|
|
||||||
public bool ImageLoaded = false;
|
public bool ImageLoaded;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Holds the texture asset to send.
|
/// Holds the texture asset to send.
|
||||||
|
@ -57,27 +59,26 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
|
||||||
|
|
||||||
//public LLUUID assetID { get { return m_asset.FullID; } }
|
//public LLUUID assetID { get { return m_asset.FullID; } }
|
||||||
|
|
||||||
private bool m_cancel = false;
|
private bool m_cancel;
|
||||||
|
|
||||||
// See ITextureSender
|
// See ITextureSender
|
||||||
|
|
||||||
private bool m_sending = false;
|
private bool m_sending;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is actually the number of extra packets required to send the texture data! We always assume
|
/// This is actually the number of extra packets required to send the texture data! We always assume
|
||||||
/// at least one is required.
|
/// at least one is required.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private int NumPackets = 0;
|
private int NumPackets;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Holds the packet number to send next. In this case, each packet is 1000 bytes long and starts
|
/// Holds the packet number to send next. In this case, each packet is 1000 bytes long and starts
|
||||||
/// at the 600th byte (0th indexed).
|
/// at the 600th byte (0th indexed).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private int PacketCounter = 0;
|
private int PacketCounter;
|
||||||
|
|
||||||
private int RequestedDiscardLevel = -1;
|
private int RequestedDiscardLevel = -1;
|
||||||
private IClientAPI RequestUser;
|
private uint StartPacketNumber;
|
||||||
private uint StartPacketNumber = 0;
|
|
||||||
|
|
||||||
public TextureSender(IClientAPI client, int discardLevel, uint packetNumber)
|
public TextureSender(IClientAPI client, int discardLevel, uint packetNumber)
|
||||||
{
|
{
|
||||||
|
@ -190,7 +191,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
|
||||||
catch (ArgumentOutOfRangeException)
|
catch (ArgumentOutOfRangeException)
|
||||||
{
|
{
|
||||||
m_log.Error("[TEXTURE SENDER]: Unable to separate texture into multiple packets: Array bounds failure on asset:" +
|
m_log.Error("[TEXTURE SENDER]: Unable to separate texture into multiple packets: Array bounds failure on asset:" +
|
||||||
m_asset.FullID.ToString());
|
m_asset.FullID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RequestUser.OutPacket(im, ThrottleOutPacketType.Texture);
|
RequestUser.OutPacket(im, ThrottleOutPacketType.Texture);
|
||||||
|
|
|
@ -41,10 +41,6 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
|
||||||
public Dictionary<string, byte[]> NewFiles = new Dictionary<string, byte[]>();
|
public Dictionary<string, byte[]> NewFiles = new Dictionary<string, byte[]>();
|
||||||
public Dictionary<ulong, XferDownLoad> Transfers = new Dictionary<ulong, XferDownLoad>();
|
public Dictionary<ulong, XferDownLoad> Transfers = new Dictionary<ulong, XferDownLoad>();
|
||||||
|
|
||||||
public XferModule()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
@ -149,11 +145,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
|
||||||
public IClientAPI Client;
|
public IClientAPI Client;
|
||||||
private bool complete;
|
private bool complete;
|
||||||
public byte[] Data = new byte[0];
|
public byte[] Data = new byte[0];
|
||||||
public int DataPointer = 0;
|
public int DataPointer;
|
||||||
public string FileName = String.Empty;
|
public string FileName = String.Empty;
|
||||||
public uint Packet = 0;
|
public uint Packet;
|
||||||
public uint Serial = 1;
|
public uint Serial = 1;
|
||||||
public ulong XferID = 0;
|
public ulong XferID;
|
||||||
|
|
||||||
public XferDownLoad(string fileName, byte[] data, ulong xferID, IClientAPI client)
|
public XferDownLoad(string fileName, byte[] data, ulong xferID, IClientAPI client)
|
||||||
{
|
{
|
||||||
|
@ -217,7 +213,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
|
||||||
{
|
{
|
||||||
byte[] transferData = new byte[Data.Length - DataPointer];
|
byte[] transferData = new byte[Data.Length - DataPointer];
|
||||||
Array.Copy(Data, DataPointer, transferData, 0, Data.Length - DataPointer);
|
Array.Copy(Data, DataPointer, transferData, 0, Data.Length - DataPointer);
|
||||||
uint endPacket = Packet |= (uint) 0x80000000;
|
uint endPacket = Packet |= 0x80000000;
|
||||||
Client.SendXferPacket(XferID, endPacket, transferData);
|
Client.SendXferPacket(XferID, endPacket, transferData);
|
||||||
Packet++;
|
Packet++;
|
||||||
DataPointer += (Data.Length - DataPointer);
|
DataPointer += (Data.Length - DataPointer);
|
||||||
|
|
|
@ -44,15 +44,15 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
public class ChatModule : IRegionModule, ISimChat
|
public class ChatModule : IRegionModule, ISimChat
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private string m_defaultzone = null;
|
private readonly List<Scene> m_scenes = new List<Scene>();
|
||||||
|
private string m_defaultzone;
|
||||||
|
|
||||||
private IRCChatModule m_irc = null;
|
private IRCChatModule m_irc;
|
||||||
private Thread m_irc_connector = null;
|
private Thread m_irc_connector;
|
||||||
|
|
||||||
private string m_last_leaving_user = null;
|
private string m_last_leaving_user;
|
||||||
private string m_last_new_user = null;
|
private string m_last_new_user;
|
||||||
private int m_saydistance = 30;
|
private int m_saydistance = 30;
|
||||||
private List<Scene> m_scenes = new List<Scene>();
|
|
||||||
private int m_shoutdistance = 100;
|
private int m_shoutdistance = 100;
|
||||||
internal object m_syncInit = new object();
|
internal object m_syncInit = new object();
|
||||||
internal object m_syncLogout = new object();
|
internal object m_syncLogout = new object();
|
||||||
|
@ -257,7 +257,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: NewClient exception trap:" + ex.ToString());
|
m_log.Error("[IRC]: NewClient exception trap:" + ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: ClientLoggedOut exception trap:" + ex.ToString());
|
m_log.Error("[IRC]: ClientLoggedOut exception trap:" + ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -372,24 +372,24 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private Thread listener;
|
|
||||||
|
|
||||||
private string m_basenick = null;
|
private readonly string m_basenick;
|
||||||
private string m_channel = null;
|
private readonly string m_channel;
|
||||||
private bool m_connected = false;
|
private readonly bool m_enabled;
|
||||||
private bool m_enabled = false;
|
private readonly uint m_port = 6668;
|
||||||
private List<Scene> m_last_scenes = null;
|
private readonly string m_privmsgformat = "PRIVMSG {0} :<{1} in {2}>: {3}";
|
||||||
private string m_nick = null;
|
private readonly string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot";
|
||||||
private uint m_port = 6668;
|
private Thread listener;
|
||||||
private string m_privmsgformat = "PRIVMSG {0} :<{1} in {2}>: {3}";
|
private bool m_connected;
|
||||||
|
private List<Scene> m_last_scenes;
|
||||||
|
private string m_nick;
|
||||||
private StreamReader m_reader;
|
private StreamReader m_reader;
|
||||||
private List<Scene> m_scenes = null;
|
private List<Scene> m_scenes;
|
||||||
private string m_server = null;
|
private string m_server;
|
||||||
|
|
||||||
private NetworkStream m_stream;
|
private NetworkStream m_stream;
|
||||||
internal object m_syncConnect = new object();
|
internal object m_syncConnect = new object();
|
||||||
private TcpClient m_tcp;
|
private TcpClient m_tcp;
|
||||||
private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot";
|
|
||||||
private StreamWriter m_writer;
|
private StreamWriter m_writer;
|
||||||
|
|
||||||
private Thread pingSender;
|
private Thread pingSender;
|
||||||
|
@ -478,13 +478,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
m_reader = new StreamReader(m_stream);
|
m_reader = new StreamReader(m_stream);
|
||||||
m_writer = new StreamWriter(m_stream);
|
m_writer = new StreamWriter(m_stream);
|
||||||
|
|
||||||
pingSender = new Thread(new ThreadStart(PingRun));
|
pingSender = new Thread(PingRun);
|
||||||
pingSender.Name = "PingSenderThread";
|
pingSender.Name = "PingSenderThread";
|
||||||
pingSender.IsBackground = true;
|
pingSender.IsBackground = true;
|
||||||
pingSender.Start();
|
pingSender.Start();
|
||||||
ThreadTracker.Add(pingSender);
|
ThreadTracker.Add(pingSender);
|
||||||
|
|
||||||
listener = new Thread(new ThreadStart(ListenerRun));
|
listener = new Thread(ListenerRun);
|
||||||
listener.Name = "IRCChatModuleListenerThread";
|
listener.Name = "IRCChatModuleListenerThread";
|
||||||
listener.IsBackground = true;
|
listener.IsBackground = true;
|
||||||
listener.Start();
|
listener.Start();
|
||||||
|
@ -545,7 +545,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: PrivMsg exception trap:" + ex.ToString());
|
m_log.Error("[IRC]: PrivMsg exception trap:" + ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -588,7 +588,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (m_connected == true)
|
if (m_connected)
|
||||||
{
|
{
|
||||||
m_writer.WriteLine("PING :" + m_server);
|
m_writer.WriteLine("PING :" + m_server);
|
||||||
m_writer.Flush();
|
m_writer.Flush();
|
||||||
|
@ -602,7 +602,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: PingRun exception trap:" + ex.ToString() + "\n" + ex.StackTrace);
|
m_log.Error("[IRC]: PingRun exception trap:" + ex + "\n" + ex.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -615,7 +615,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
while ((m_connected == true) && ((inputLine = m_reader.ReadLine()) != null))
|
while (m_connected && ((inputLine = m_reader.ReadLine()) != null))
|
||||||
{
|
{
|
||||||
// Console.WriteLine(inputLine);
|
// Console.WriteLine(inputLine);
|
||||||
if (inputLine.Contains(m_channel))
|
if (inputLine.Contains(m_channel))
|
||||||
|
@ -659,7 +659,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: ListenerRun exception trap:" + ex.ToString() + "\n" + ex.StackTrace);
|
m_log.Error("[IRC]: ListenerRun exception trap:" + ex + "\n" + ex.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -685,7 +685,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex) // IRC gate should not crash Sim
|
catch (Exception ex) // IRC gate should not crash Sim
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: BroadcastSim Exception Trap:" + ex.ToString() + "\n" + ex.StackTrace);
|
m_log.Error("[IRC]: BroadcastSim Exception Trap:" + ex + "\n" + ex.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,55 +65,55 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
public class SampleMoneyModule : IMoneyModule
|
public class SampleMoneyModule : IMoneyModule
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
private readonly Dictionary<LLUUID, int> m_KnownClientFunds = new Dictionary<LLUUID, int>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Region UUIDS indexed by AgentID
|
||||||
|
/// </summary>
|
||||||
|
private readonly Dictionary<LLUUID, LLUUID> m_rootAgents = new Dictionary<LLUUID, LLUUID>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Scenes by Region Handle
|
||||||
|
/// </summary>
|
||||||
|
private readonly Dictionary<ulong, Scene> m_scenel = new Dictionary<ulong, Scene>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Where Stipends come from and Fees go to.
|
/// Where Stipends come from and Fees go to.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private LLUUID EconomyBaseAccount = LLUUID.Zero;
|
private LLUUID EconomyBaseAccount = LLUUID.Zero;
|
||||||
|
|
||||||
private float EnergyEfficiency = 0f;
|
private float EnergyEfficiency;
|
||||||
private bool gridmode = false;
|
private bool gridmode;
|
||||||
private ObjectPaid handerOnObjectPaid;
|
private ObjectPaid handerOnObjectPaid;
|
||||||
private bool m_enabled = true;
|
private bool m_enabled = true;
|
||||||
|
|
||||||
private IConfigSource m_gConfig;
|
private IConfigSource m_gConfig;
|
||||||
|
|
||||||
private bool m_keepMoneyAcrossLogins = true;
|
private bool m_keepMoneyAcrossLogins = true;
|
||||||
private Dictionary<LLUUID, int> m_KnownClientFunds = new Dictionary<LLUUID, int>();
|
|
||||||
private string m_LandAddress = String.Empty;
|
private string m_LandAddress = String.Empty;
|
||||||
|
|
||||||
private int m_minFundsBeforeRefresh = 100;
|
private int m_minFundsBeforeRefresh = 100;
|
||||||
private string m_MoneyAddress = String.Empty;
|
private string m_MoneyAddress = String.Empty;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Region UUIDS indexed by AgentID
|
|
||||||
/// </summary>
|
|
||||||
private Dictionary<LLUUID, LLUUID> m_rootAgents = new Dictionary<LLUUID, LLUUID>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Scenes by Region Handle
|
|
||||||
/// </summary>
|
|
||||||
private Dictionary<ulong, Scene> m_scenel = new Dictionary<ulong, Scene>();
|
|
||||||
|
|
||||||
private int m_stipend = 1000;
|
private int m_stipend = 1000;
|
||||||
|
|
||||||
private int ObjectCapacity = 45000;
|
private int ObjectCapacity = 45000;
|
||||||
private int ObjectCount = 0;
|
private int ObjectCount;
|
||||||
private int PriceEnergyUnit = 0;
|
private int PriceEnergyUnit;
|
||||||
private int PriceGroupCreate = 0;
|
private int PriceGroupCreate;
|
||||||
private int PriceObjectClaim = 0;
|
private int PriceObjectClaim;
|
||||||
private float PriceObjectRent = 0f;
|
private float PriceObjectRent;
|
||||||
private float PriceObjectScaleFactor = 0f;
|
private float PriceObjectScaleFactor;
|
||||||
private int PriceParcelClaim = 0;
|
private int PriceParcelClaim;
|
||||||
private float PriceParcelClaimFactor = 0f;
|
private float PriceParcelClaimFactor;
|
||||||
private int PriceParcelRent = 0;
|
private int PriceParcelRent;
|
||||||
private int PricePublicObjectDecay = 0;
|
private int PricePublicObjectDecay;
|
||||||
private int PricePublicObjectDelete = 0;
|
private int PricePublicObjectDelete;
|
||||||
private int PriceRentLight = 0;
|
private int PriceRentLight;
|
||||||
private int PriceUpload = 0;
|
private int PriceUpload;
|
||||||
private int TeleportMinPrice = 0;
|
private int TeleportMinPrice;
|
||||||
|
|
||||||
private float TeleportPriceExponent = 0f;
|
private float TeleportPriceExponent;
|
||||||
private int UserLevelPaysFees = 2;
|
private int UserLevelPaysFees = 2;
|
||||||
private Scene XMLRPCHandler;
|
private Scene XMLRPCHandler;
|
||||||
|
|
||||||
|
@ -305,7 +305,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
Hashtable hbinfo =
|
Hashtable hbinfo =
|
||||||
GetBalanceForUserFromMoneyServer(client.AgentId, client.SecureSessionId, s.RegionInfo.originRegionID.ToString(),
|
GetBalanceForUserFromMoneyServer(client.AgentId, client.SecureSessionId, s.RegionInfo.originRegionID.ToString(),
|
||||||
s.RegionInfo.regionSecret);
|
s.RegionInfo.regionSecret);
|
||||||
if ((bool) hbinfo["success"] == true)
|
if ((bool) hbinfo["success"])
|
||||||
{
|
{
|
||||||
Helpers.TryParse((string) hbinfo["agentId"], out agentID);
|
Helpers.TryParse((string) hbinfo["agentId"], out agentID);
|
||||||
try
|
try
|
||||||
|
@ -333,7 +333,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentID,
|
m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentID,
|
||||||
(string) hbinfo["errorMessage"]);
|
hbinfo["errorMessage"]);
|
||||||
client.SendAlertMessage((string) hbinfo["errorMessage"]);
|
client.SendAlertMessage((string) hbinfo["errorMessage"]);
|
||||||
}
|
}
|
||||||
SendMoneyBalance(client, agentID, client.SessionId, LLUUID.Zero);
|
SendMoneyBalance(client, agentID, client.SessionId, LLUUID.Zero);
|
||||||
|
@ -660,7 +660,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
|
|
||||||
Hashtable hresult = genericCurrencyXMLRPCRequest(ht, "regionMoveMoney");
|
Hashtable hresult = genericCurrencyXMLRPCRequest(ht, "regionMoveMoney");
|
||||||
|
|
||||||
if ((bool) hresult["success"] == true)
|
if ((bool) hresult["success"])
|
||||||
{
|
{
|
||||||
int funds1 = 0;
|
int funds1 = 0;
|
||||||
int funds2 = 0;
|
int funds2 = 0;
|
||||||
|
@ -718,7 +718,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
Hashtable hbinfo =
|
Hashtable hbinfo =
|
||||||
GetBalanceForUserFromMoneyServer(aClient.AgentId, aClient.SecureSessionId, s.RegionInfo.originRegionID.ToString(),
|
GetBalanceForUserFromMoneyServer(aClient.AgentId, aClient.SecureSessionId, s.RegionInfo.originRegionID.ToString(),
|
||||||
s.RegionInfo.regionSecret);
|
s.RegionInfo.regionSecret);
|
||||||
if ((bool) hbinfo["success"] == true)
|
if ((bool) hbinfo["success"])
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -743,7 +743,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentId,
|
m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentId,
|
||||||
(string) hbinfo["errorMessage"]);
|
hbinfo["errorMessage"]);
|
||||||
aClient.SendAlertMessage((string) hbinfo["errorMessage"]);
|
aClient.SendAlertMessage((string) hbinfo["errorMessage"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -812,7 +812,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
string secret = (string) requestData["secret"];
|
string secret = (string) requestData["secret"];
|
||||||
|
|
||||||
Scene userScene = GetRandomScene();
|
Scene userScene = GetRandomScene();
|
||||||
if (userScene.RegionInfo.regionSecret.ToString() == secret)
|
if (userScene.RegionInfo.regionSecret == secret)
|
||||||
{
|
{
|
||||||
IClientAPI client = LocateClientObject(agentId);
|
IClientAPI client = LocateClientObject(agentId);
|
||||||
|
|
||||||
|
@ -1238,7 +1238,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
{
|
{
|
||||||
lock (e)
|
lock (e)
|
||||||
{
|
{
|
||||||
if (e.economyValidated == true && e.transactionID == 0)
|
if (e.economyValidated && e.transactionID == 0)
|
||||||
{
|
{
|
||||||
e.transactionID = Util.UnixTimeSinceEpoch();
|
e.transactionID = Util.UnixTimeSinceEpoch();
|
||||||
|
|
||||||
|
@ -1328,7 +1328,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Warn("[MONEY]: Potential Fraud Warning, got money transfer request for avatar that isn't in this simulator - Details; Sender:" +
|
m_log.Warn("[MONEY]: Potential Fraud Warning, got money transfer request for avatar that isn't in this simulator - Details; Sender:" +
|
||||||
e.sender.ToString() + " Receiver: " + e.receiver.ToString() + " Amount: " + e.amount.ToString());
|
e.sender + " Receiver: " + e.receiver + " Amount: " + e.amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1400,7 +1400,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
{
|
{
|
||||||
Hashtable hresult =
|
Hashtable hresult =
|
||||||
claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
||||||
if ((bool) hresult["success"] == true)
|
if ((bool) hresult["success"])
|
||||||
{
|
{
|
||||||
int funds = 0;
|
int funds = 0;
|
||||||
try
|
try
|
||||||
|
@ -1432,7 +1432,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
if (RegionItem != null)
|
if (RegionItem != null)
|
||||||
{
|
{
|
||||||
Hashtable hresult = claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
Hashtable hresult = claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
||||||
if ((bool) hresult["success"] == true)
|
if ((bool) hresult["success"])
|
||||||
{
|
{
|
||||||
int funds = 0;
|
int funds = 0;
|
||||||
try
|
try
|
||||||
|
@ -1460,7 +1460,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum TransactionType : int
|
public enum TransactionType
|
||||||
{
|
{
|
||||||
SystemGenerated = 0,
|
SystemGenerated = 0,
|
||||||
RegionMoneyRequest = 1,
|
RegionMoneyRequest = 1,
|
||||||
|
|
|
@ -42,10 +42,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private Dictionary<LLUUID, List<FriendListItem>> FriendLists = new Dictionary<LLUUID, List<FriendListItem>>();
|
private readonly Dictionary<LLUUID, List<FriendListItem>> FriendLists = new Dictionary<LLUUID, List<FriendListItem>>();
|
||||||
private Dictionary<LLUUID, LLUUID> m_pendingFriendRequests = new Dictionary<LLUUID, LLUUID>();
|
private readonly Dictionary<LLUUID, LLUUID> m_pendingFriendRequests = new Dictionary<LLUUID, LLUUID>();
|
||||||
private Dictionary<LLUUID, ulong> m_rootAgents = new Dictionary<LLUUID, ulong>();
|
private readonly Dictionary<LLUUID, ulong> m_rootAgents = new Dictionary<LLUUID, ulong>();
|
||||||
private List<Scene> m_scene = new List<Scene>();
|
private readonly List<Scene> m_scene = new List<Scene>();
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
List<LLUUID> updateUsers = new List<LLUUID>();
|
List<LLUUID> updateUsers = new List<LLUUID>();
|
||||||
foreach (FriendListItem fli in lfli)
|
foreach (FriendListItem fli in lfli)
|
||||||
{
|
{
|
||||||
if (fli.onlinestatus == true)
|
if (fli.onlinestatus)
|
||||||
{
|
{
|
||||||
updateUsers.Add(fli.Friend);
|
updateUsers.Add(fli.Friend);
|
||||||
}
|
}
|
||||||
|
@ -357,20 +357,20 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
// https://wiki.secondlife.com/wiki/ImprovedInstantMessage
|
// https://wiki.secondlife.com/wiki/ImprovedInstantMessage
|
||||||
|
|
||||||
// 38 == Offer friendship
|
// 38 == Offer friendship
|
||||||
if (dialog == (byte) 38)
|
if (dialog == 38)
|
||||||
{
|
{
|
||||||
LLUUID friendTransactionID = LLUUID.Random();
|
LLUUID friendTransactionID = LLUUID.Random();
|
||||||
|
|
||||||
m_pendingFriendRequests.Add(friendTransactionID, fromAgentID);
|
m_pendingFriendRequests.Add(friendTransactionID, fromAgentID);
|
||||||
|
|
||||||
m_log.Info("[FRIEND]: 38 - From:" + fromAgentID.ToString() + " To: " + toAgentID.ToString() + " Session:" + imSessionID.ToString() + " Message:" +
|
m_log.Info("[FRIEND]: 38 - From:" + fromAgentID + " To: " + toAgentID + " Session:" + imSessionID + " Message:" +
|
||||||
message);
|
message);
|
||||||
GridInstantMessage msg = new GridInstantMessage();
|
GridInstantMessage msg = new GridInstantMessage();
|
||||||
msg.fromAgentID = fromAgentID.UUID;
|
msg.fromAgentID = fromAgentID.UUID;
|
||||||
msg.fromAgentSession = fromAgentSession.UUID;
|
msg.fromAgentSession = fromAgentSession.UUID;
|
||||||
msg.toAgentID = toAgentID.UUID;
|
msg.toAgentID = toAgentID.UUID;
|
||||||
msg.imSessionID = friendTransactionID.UUID; // This is the item we're mucking with here
|
msg.imSessionID = friendTransactionID.UUID; // This is the item we're mucking with here
|
||||||
m_log.Info("[FRIEND]: Filling Session: " + msg.imSessionID.ToString());
|
m_log.Info("[FRIEND]: Filling Session: " + msg.imSessionID);
|
||||||
msg.timestamp = timestamp;
|
msg.timestamp = timestamp;
|
||||||
if (client != null)
|
if (client != null)
|
||||||
{
|
{
|
||||||
|
@ -393,16 +393,16 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
}
|
}
|
||||||
|
|
||||||
// 39 == Accept Friendship
|
// 39 == Accept Friendship
|
||||||
if (dialog == (byte) 39)
|
if (dialog == 39)
|
||||||
{
|
{
|
||||||
m_log.Info("[FRIEND]: 39 - From:" + fromAgentID.ToString() + " To: " + toAgentID.ToString() + " Session:" + imSessionID.ToString() + " Message:" +
|
m_log.Info("[FRIEND]: 39 - From:" + fromAgentID + " To: " + toAgentID + " Session:" + imSessionID + " Message:" +
|
||||||
message);
|
message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 40 == Decline Friendship
|
// 40 == Decline Friendship
|
||||||
if (dialog == (byte) 40)
|
if (dialog == 40)
|
||||||
{
|
{
|
||||||
m_log.Info("[FRIEND]: 40 - From:" + fromAgentID.ToString() + " To: " + toAgentID.ToString() + " Session:" + imSessionID.ToString() + " Message:" +
|
m_log.Info("[FRIEND]: 40 - From:" + fromAgentID + " To: " + toAgentID + " Session:" + imSessionID + " Message:" +
|
||||||
message);
|
message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -433,14 +433,14 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
msg.ParentEstateID = 0;
|
msg.ParentEstateID = 0;
|
||||||
msg.timestamp = (uint) Util.UnixTimeSinceEpoch();
|
msg.timestamp = (uint) Util.UnixTimeSinceEpoch();
|
||||||
msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID;
|
msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID;
|
||||||
msg.dialog = (byte) 39; // Approved friend request
|
msg.dialog = 39; // Approved friend request
|
||||||
msg.Position = new sLLVector3();
|
msg.Position = new sLLVector3();
|
||||||
msg.offline = (byte) 0;
|
msg.offline = 0;
|
||||||
msg.binaryBucket = new byte[0];
|
msg.binaryBucket = new byte[0];
|
||||||
// We don't really care which scene we pipe it through, it goes to the shared IM Module and/or the database
|
// We don't really care which scene we pipe it through, it goes to the shared IM Module and/or the database
|
||||||
|
|
||||||
SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
|
SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
|
||||||
SceneAgentIn.StoreAddFriendship(m_pendingFriendRequests[transactionID], agentID, (uint) 1);
|
SceneAgentIn.StoreAddFriendship(m_pendingFriendRequests[transactionID], agentID, 1);
|
||||||
m_pendingFriendRequests.Remove(transactionID);
|
m_pendingFriendRequests.Remove(transactionID);
|
||||||
|
|
||||||
// TODO: Inform agent that the friend is online
|
// TODO: Inform agent that the friend is online
|
||||||
|
@ -471,9 +471,9 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
msg.ParentEstateID = 0;
|
msg.ParentEstateID = 0;
|
||||||
msg.timestamp = (uint) Util.UnixTimeSinceEpoch();
|
msg.timestamp = (uint) Util.UnixTimeSinceEpoch();
|
||||||
msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID;
|
msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID;
|
||||||
msg.dialog = (byte) 40; // Deny friend request
|
msg.dialog = 40; // Deny friend request
|
||||||
msg.Position = new sLLVector3();
|
msg.Position = new sLLVector3();
|
||||||
msg.offline = (byte) 0;
|
msg.offline = 0;
|
||||||
msg.binaryBucket = new byte[0];
|
msg.binaryBucket = new byte[0];
|
||||||
SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
|
SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
|
||||||
m_pendingFriendRequests.Remove(transactionID);
|
m_pendingFriendRequests.Remove(transactionID);
|
||||||
|
|
|
@ -41,10 +41,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private Dictionary<LLUUID, GroupList> m_grouplistmap = new Dictionary<LLUUID, GroupList>();
|
private readonly Dictionary<LLUUID, GroupList> m_grouplistmap = new Dictionary<LLUUID, GroupList>();
|
||||||
private Dictionary<LLUUID, GroupData> m_groupmap = new Dictionary<LLUUID, GroupData>();
|
private readonly Dictionary<LLUUID, GroupData> m_groupmap = new Dictionary<LLUUID, GroupData>();
|
||||||
private Dictionary<LLUUID, IClientAPI> m_iclientmap = new Dictionary<LLUUID, IClientAPI>();
|
private readonly Dictionary<LLUUID, IClientAPI> m_iclientmap = new Dictionary<LLUUID, IClientAPI>();
|
||||||
private List<Scene> m_scene = new List<Scene>();
|
private readonly List<Scene> m_scene = new List<Scene>();
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Info("[GROUP]: Removing all reference to groups for " + agentID.ToString());
|
m_log.Info("[GROUP]: Removing all reference to groups for " + agentID);
|
||||||
}
|
}
|
||||||
m_iclientmap.Remove(agentID);
|
m_iclientmap.Remove(agentID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory
|
||||||
/// occurs in the initial offer message, not the accept message. So this dictionary links
|
/// occurs in the initial offer message, not the accept message. So this dictionary links
|
||||||
/// IM Session Ids to ItemIds
|
/// IM Session Ids to ItemIds
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private IDictionary<LLUUID, LLUUID> m_pendingOffers = new Dictionary<LLUUID, LLUUID>();
|
private readonly IDictionary<LLUUID, LLUUID> m_pendingOffers = new Dictionary<LLUUID, LLUUID>();
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
|
|
|
@ -41,10 +41,6 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
public AvatarProfilesModule()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
@ -104,7 +100,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Debug("[AvatarProfilesModule]: Got null for profile for " + avatarID.ToString());
|
m_log.Debug("[AvatarProfilesModule]: Got null for profile for " + avatarID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,11 +42,11 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
public class Command : ICommand
|
public class Command : ICommand
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private List<CommandArgument> m_args = new List<CommandArgument>();
|
private readonly List<CommandArgument> m_args = new List<CommandArgument>();
|
||||||
|
|
||||||
private Action<object[]> m_command;
|
private readonly Action<object[]> m_command;
|
||||||
private string m_help;
|
private readonly string m_help;
|
||||||
private string m_name;
|
private readonly string m_name;
|
||||||
|
|
||||||
public Command(string name, Action<Object[]> command, string help)
|
public Command(string name, Action<Object[]> command, string help)
|
||||||
{
|
{
|
||||||
|
@ -164,9 +164,9 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class CommandArgument
|
public class CommandArgument
|
||||||
{
|
{
|
||||||
private string m_help;
|
private readonly string m_help;
|
||||||
private string m_name;
|
private readonly string m_name;
|
||||||
private string m_type;
|
private readonly string m_type;
|
||||||
private Object m_val;
|
private Object m_val;
|
||||||
|
|
||||||
public CommandArgument(string name, string help, string type)
|
public CommandArgument(string name, string help, string type)
|
||||||
|
@ -204,8 +204,8 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
public class Commander : ICommander
|
public class Commander : ICommander
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private Dictionary<string, ICommand> m_commands = new Dictionary<string, ICommand>();
|
private readonly Dictionary<string, ICommand> m_commands = new Dictionary<string, ICommand>();
|
||||||
private string m_name;
|
private readonly string m_name;
|
||||||
|
|
||||||
public Commander(string name)
|
public Commander(string name)
|
||||||
{
|
{
|
||||||
|
@ -235,11 +235,11 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
}
|
}
|
||||||
classSrc = classSrc.Remove(classSrc.Length - 1); // Delete the last comma
|
classSrc = classSrc.Remove(classSrc.Length - 1); // Delete the last comma
|
||||||
classSrc += " )\n\t{\n";
|
classSrc += " )\n\t{\n";
|
||||||
classSrc += "\t\tObject[] args = new Object[" + com.Arguments.Count.ToString() + "];\n";
|
classSrc += "\t\tObject[] args = new Object[" + com.Arguments.Count + "];\n";
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (KeyValuePair<string, string> arg in com.Arguments)
|
foreach (KeyValuePair<string, string> arg in com.Arguments)
|
||||||
{
|
{
|
||||||
classSrc += "\t\targs[" + i.ToString() + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n";
|
classSrc += "\t\targs[" + i + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n";
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
classSrc += "\t\tGetCommander(\"" + m_name + "\").Run(\"" + com.Name + "\", args);\n";
|
classSrc += "\t\tGetCommander(\"" + m_name + "\").Run(\"" + com.Name + "\", args);\n";
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
{
|
{
|
||||||
public class CommanderTestModule : IRegionModule, ICommandableModule
|
public class CommanderTestModule : IRegionModule, ICommandableModule
|
||||||
{
|
{
|
||||||
private Commander m_commander = new Commander("CommanderTest");
|
private readonly Commander m_commander = new Commander("CommanderTest");
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
#region ICommandableModule Members
|
#region ICommandableModule Members
|
||||||
|
|
|
@ -29,14 +29,14 @@ namespace OpenSim.Region.Environment.Modules.Grid.Interregion
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private readonly Dictionary<Type, Object> m_interfaces = new Dictionary<Type, object>();
|
private readonly Dictionary<Type, Object> m_interfaces = new Dictionary<Type, object>();
|
||||||
|
private readonly Object m_lockObject = new object();
|
||||||
private readonly List<Location> m_myLocations = new List<Location>();
|
private readonly List<Location> m_myLocations = new List<Location>();
|
||||||
|
|
||||||
private readonly Dictionary<Location, string[]> m_neighbourInterfaces = new Dictionary<Location, string[]>();
|
private readonly Dictionary<Location, string[]> m_neighbourInterfaces = new Dictionary<Location, string[]>();
|
||||||
private readonly Dictionary<Location, RemotingObject> m_neighbourRemote = new Dictionary<Location, RemotingObject>();
|
private readonly Dictionary<Location, RemotingObject> m_neighbourRemote = new Dictionary<Location, RemotingObject>();
|
||||||
private IConfigSource m_config;
|
private IConfigSource m_config;
|
||||||
private bool m_enabled = false;
|
private bool m_enabled;
|
||||||
|
|
||||||
private Object m_lockObject = new object();
|
|
||||||
private RemotingObject m_myRemote;
|
private RemotingObject m_myRemote;
|
||||||
private TcpChannel m_tcpChannel;
|
private TcpChannel m_tcpChannel;
|
||||||
private int m_tcpPort = 10101;
|
private int m_tcpPort = 10101;
|
||||||
|
|
|
@ -40,12 +40,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture
|
||||||
{
|
{
|
||||||
public class DynamicTextureModule : IRegionModule, IDynamicTextureManager
|
public class DynamicTextureModule : IRegionModule, IDynamicTextureManager
|
||||||
{
|
{
|
||||||
private Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
private readonly Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
||||||
|
|
||||||
private Dictionary<string, IDynamicTextureRender> RenderPlugins =
|
private readonly Dictionary<string, IDynamicTextureRender> RenderPlugins =
|
||||||
new Dictionary<string, IDynamicTextureRender>();
|
new Dictionary<string, IDynamicTextureRender>();
|
||||||
|
|
||||||
private Dictionary<LLUUID, DynamicTextureUpdater> Updaters = new Dictionary<LLUUID, DynamicTextureUpdater>();
|
private readonly Dictionary<LLUUID, DynamicTextureUpdater> Updaters = new Dictionary<LLUUID, DynamicTextureUpdater>();
|
||||||
|
|
||||||
#region IDynamicTextureManager Members
|
#region IDynamicTextureManager Members
|
||||||
|
|
||||||
|
@ -176,14 +176,14 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture
|
||||||
|
|
||||||
public class DynamicTextureUpdater
|
public class DynamicTextureUpdater
|
||||||
{
|
{
|
||||||
public bool BlendWithOldTexture = false;
|
public bool BlendWithOldTexture;
|
||||||
public string BodyData;
|
public string BodyData;
|
||||||
public string ContentType;
|
public string ContentType;
|
||||||
public byte FrontAlpha = 255;
|
public byte FrontAlpha = 255;
|
||||||
public LLUUID LastAssetID;
|
public LLUUID LastAssetID;
|
||||||
public string Params;
|
public string Params;
|
||||||
public LLUUID PrimID;
|
public LLUUID PrimID;
|
||||||
public bool SetNewFrontAlpha = false;
|
public bool SetNewFrontAlpha;
|
||||||
public LLUUID SimUUID;
|
public LLUUID SimUUID;
|
||||||
public LLUUID UpdaterID;
|
public LLUUID UpdaterID;
|
||||||
public int UpdateTimer;
|
public int UpdateTimer;
|
||||||
|
|
|
@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
|
||||||
{
|
{
|
||||||
public class HttpRequestModule : IRegionModule, IHttpRequests
|
public class HttpRequestModule : IRegionModule, IHttpRequests
|
||||||
{
|
{
|
||||||
private object HttpListLock = new object();
|
private readonly object HttpListLock = new object();
|
||||||
private int httpTimeout = 30000;
|
private int httpTimeout = 30000;
|
||||||
private string m_name = "HttpScriptRequests";
|
private string m_name = "HttpScriptRequests";
|
||||||
|
|
||||||
|
@ -93,10 +93,6 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private Queue<HttpRequestClass> rpcQueue = new Queue<HttpRequestClass>();
|
private Queue<HttpRequestClass> rpcQueue = new Queue<HttpRequestClass>();
|
||||||
|
|
||||||
public HttpRequestModule()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IHttpRequests Members
|
#region IHttpRequests Members
|
||||||
|
|
||||||
public LLUUID MakeHttpRequest(string url, string parameters, string body)
|
public LLUUID MakeHttpRequest(string url, string parameters, string body)
|
||||||
|
|
|
@ -120,9 +120,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL
|
||||||
|
|
||||||
private void MakeHttpRequest(string url, LLUUID requestID)
|
private void MakeHttpRequest(string url, LLUUID requestID)
|
||||||
{
|
{
|
||||||
WebRequest request = HttpWebRequest.Create(url);
|
WebRequest request = WebRequest.Create(url);
|
||||||
RequestState state = new RequestState((HttpWebRequest) request, requestID);
|
RequestState state = new RequestState((HttpWebRequest) request, requestID);
|
||||||
IAsyncResult result = request.BeginGetResponse(new AsyncCallback(HttpRequestReturn), state);
|
IAsyncResult result = request.BeginGetResponse(HttpRequestReturn, state);
|
||||||
|
|
||||||
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
|
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
|
||||||
state.TimeOfRequest = (int) t.TotalSeconds;
|
state.TimeOfRequest = (int) t.TotalSeconds;
|
||||||
|
@ -131,7 +131,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL
|
||||||
private void HttpRequestReturn(IAsyncResult result)
|
private void HttpRequestReturn(IAsyncResult result)
|
||||||
{
|
{
|
||||||
RequestState state = (RequestState) result.AsyncState;
|
RequestState state = (RequestState) result.AsyncState;
|
||||||
WebRequest request = (WebRequest) state.Request;
|
WebRequest request = state.Request;
|
||||||
HttpWebResponse response = (HttpWebResponse) request.EndGetResponse(result);
|
HttpWebResponse response = (HttpWebResponse) request.EndGetResponse(result);
|
||||||
if (response.StatusCode == HttpStatusCode.OK)
|
if (response.StatusCode == HttpStatusCode.OK)
|
||||||
{
|
{
|
||||||
|
@ -175,9 +175,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL
|
||||||
|
|
||||||
public class RequestState
|
public class RequestState
|
||||||
{
|
{
|
||||||
public HttpWebRequest Request = null;
|
public HttpWebRequest Request;
|
||||||
public LLUUID RequestID = LLUUID.Zero;
|
public LLUUID RequestID = LLUUID.Zero;
|
||||||
public int TimeOfRequest = 0;
|
public int TimeOfRequest;
|
||||||
|
|
||||||
public RequestState(HttpWebRequest request, LLUUID requestID)
|
public RequestState(HttpWebRequest request, LLUUID requestID)
|
||||||
{
|
{
|
||||||
|
|
|
@ -48,10 +48,6 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private IDynamicTextureManager m_textureManager;
|
private IDynamicTextureManager m_textureManager;
|
||||||
|
|
||||||
public VectorRenderModule()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IDynamicTextureRender Members
|
#region IDynamicTextureRender Members
|
||||||
|
|
||||||
public string GetContentType()
|
public string GetContentType()
|
||||||
|
@ -138,7 +134,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
//Ckrinke: Add a WriteLine to remove the warning about 'e' defined but not used
|
//Ckrinke: Add a WriteLine to remove the warning about 'e' defined but not used
|
||||||
Console.WriteLine("Problem with Draw. Please verify parameters." + e.ToString());
|
Console.WriteLine("Problem with Draw. Please verify parameters." + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((size < 128) || (size > 1024))
|
if ((size < 128) || (size > 1024))
|
||||||
|
@ -260,7 +256,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender
|
||||||
endPoint.X = (int) x;
|
endPoint.X = (int) x;
|
||||||
endPoint.Y = (int) y;
|
endPoint.Y = (int) y;
|
||||||
Image image = ImageHttpRequest(nextLine);
|
Image image = ImageHttpRequest(nextLine);
|
||||||
graph.DrawImage(image, (float) startPoint.X, (float) startPoint.Y, x, y);
|
graph.DrawImage(image, startPoint.X, startPoint.Y, x, y);
|
||||||
startPoint.X += endPoint.X;
|
startPoint.X += endPoint.X;
|
||||||
startPoint.Y += endPoint.Y;
|
startPoint.Y += endPoint.Y;
|
||||||
}
|
}
|
||||||
|
@ -353,7 +349,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender
|
||||||
|
|
||||||
private Bitmap ImageHttpRequest(string url)
|
private Bitmap ImageHttpRequest(string url)
|
||||||
{
|
{
|
||||||
WebRequest request = HttpWebRequest.Create(url);
|
WebRequest request = WebRequest.Create(url);
|
||||||
//Ckrinke: Comment out for now as 'str' is unused. Bring it back into play later when it is used.
|
//Ckrinke: Comment out for now as 'str' is unused. Bring it back into play later when it is used.
|
||||||
//Ckrinke Stream str = null;
|
//Ckrinke Stream str = null;
|
||||||
HttpWebResponse response = (HttpWebResponse) (request).GetResponse();
|
HttpWebResponse response = (HttpWebResponse) (request).GetResponse();
|
||||||
|
|
|
@ -75,10 +75,6 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm
|
||||||
private Queue m_pendingQ;
|
private Queue m_pendingQ;
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
public WorldCommModule()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
@ -324,8 +320,8 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm
|
||||||
public class ListenerManager
|
public class ListenerManager
|
||||||
{
|
{
|
||||||
//private Dictionary<int, ListenerInfo> m_listeners;
|
//private Dictionary<int, ListenerInfo> m_listeners;
|
||||||
|
private readonly Hashtable m_listeners = Hashtable.Synchronized(new Hashtable());
|
||||||
private object ListenersLock = new object();
|
private object ListenersLock = new object();
|
||||||
private Hashtable m_listeners = Hashtable.Synchronized(new Hashtable());
|
|
||||||
private int m_MaxListeners = 100;
|
private int m_MaxListeners = 100;
|
||||||
|
|
||||||
public int AddListener(uint localID, LLUUID itemID, LLUUID hostID, int channel, string name, string id, string msg)
|
public int AddListener(uint localID, LLUUID itemID, LLUUID hostID, int channel, string name, string id, string msg)
|
||||||
|
@ -485,6 +481,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm
|
||||||
|
|
||||||
public class ListenerInfo
|
public class ListenerInfo
|
||||||
{
|
{
|
||||||
|
private readonly LLUUID m_sourceItemID; // ID of the scenePart or avatar source of the message
|
||||||
private bool m_active; // Listener is active or not
|
private bool m_active; // Listener is active or not
|
||||||
private int m_channel; // Channel
|
private int m_channel; // Channel
|
||||||
private int m_handle; // Assigned handle of this listener
|
private int m_handle; // Assigned handle of this listener
|
||||||
|
@ -494,7 +491,6 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm
|
||||||
private uint m_localID; // Local ID from script engine
|
private uint m_localID; // Local ID from script engine
|
||||||
private string m_message; // The message
|
private string m_message; // The message
|
||||||
private string m_name; // Object name to filter messages from
|
private string m_name; // Object name to filter messages from
|
||||||
private LLUUID m_sourceItemID; // ID of the scenePart or avatar source of the message
|
|
||||||
|
|
||||||
public ListenerInfo(uint localID, int handle, LLUUID ItemID, LLUUID hostID, int channel, string name, LLUUID id, string message)
|
public ListenerInfo(uint localID, int handle, LLUUID ItemID, LLUUID hostID, int channel, string name, LLUUID id, string message)
|
||||||
{
|
{
|
||||||
|
|
|
@ -78,20 +78,20 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC
|
||||||
public class XMLRPCModule : IRegionModule, IXMLRPC
|
public class XMLRPCModule : IRegionModule, IXMLRPC
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
private readonly List<Scene> m_scenes = new List<Scene>();
|
||||||
|
private readonly object XMLRPCListLock = new object();
|
||||||
|
|
||||||
private string m_name = "XMLRPCModule";
|
private string m_name = "XMLRPCModule";
|
||||||
|
|
||||||
// <channel id, RPCChannelInfo>
|
// <channel id, RPCChannelInfo>
|
||||||
private Dictionary<LLUUID, RPCChannelInfo> m_openChannels;
|
private Dictionary<LLUUID, RPCChannelInfo> m_openChannels;
|
||||||
private Dictionary<LLUUID, SendRemoteDataRequest> m_pendingSRDResponses;
|
private Dictionary<LLUUID, SendRemoteDataRequest> m_pendingSRDResponses;
|
||||||
private int m_remoteDataPort = 0;
|
private int m_remoteDataPort;
|
||||||
|
|
||||||
private Dictionary<LLUUID, RPCRequestInfo> m_rpcPending;
|
private Dictionary<LLUUID, RPCRequestInfo> m_rpcPending;
|
||||||
private Dictionary<LLUUID, RPCRequestInfo> m_rpcPendingResponses;
|
private Dictionary<LLUUID, RPCRequestInfo> m_rpcPendingResponses;
|
||||||
private List<Scene> m_scenes = new List<Scene>();
|
|
||||||
private int RemoteReplyScriptTimeout = 9000;
|
private int RemoteReplyScriptTimeout = 9000;
|
||||||
private int RemoteReplyScriptWait = 300;
|
private int RemoteReplyScriptWait = 300;
|
||||||
private object XMLRPCListLock = new object();
|
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
|
@ -428,15 +428,15 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC
|
||||||
|
|
||||||
public class RPCRequestInfo
|
public class RPCRequestInfo
|
||||||
{
|
{
|
||||||
private LLUUID m_ChannelKey;
|
private readonly LLUUID m_ChannelKey;
|
||||||
private string m_IntVal;
|
private readonly string m_IntVal;
|
||||||
private LLUUID m_ItemID;
|
private readonly LLUUID m_ItemID;
|
||||||
private uint m_localID;
|
private readonly uint m_localID;
|
||||||
private LLUUID m_MessageID;
|
private readonly LLUUID m_MessageID;
|
||||||
|
private readonly string m_StrVal;
|
||||||
private bool m_processed;
|
private bool m_processed;
|
||||||
private int m_respInt;
|
private int m_respInt;
|
||||||
private string m_respStr;
|
private string m_respStr;
|
||||||
private string m_StrVal;
|
|
||||||
|
|
||||||
public RPCRequestInfo(uint localID, LLUUID itemID, LLUUID channelKey, string strVal, string intVal)
|
public RPCRequestInfo(uint localID, LLUUID itemID, LLUUID channelKey, string strVal, string intVal)
|
||||||
{
|
{
|
||||||
|
@ -514,9 +514,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC
|
||||||
|
|
||||||
public class RPCChannelInfo
|
public class RPCChannelInfo
|
||||||
{
|
{
|
||||||
private LLUUID m_ChannelKey;
|
private readonly LLUUID m_ChannelKey;
|
||||||
private LLUUID m_itemID;
|
private readonly LLUUID m_itemID;
|
||||||
private uint m_localID;
|
private readonly uint m_localID;
|
||||||
|
|
||||||
public RPCChannelInfo(uint localID, LLUUID itemID, LLUUID channelID)
|
public RPCChannelInfo(uint localID, LLUUID itemID, LLUUID channelID)
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,8 +44,8 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
//Land types set with flags in ParcelOverlay.
|
//Land types set with flags in ParcelOverlay.
|
||||||
//Only one of these can be used.
|
//Only one of these can be used.
|
||||||
public const float BAN_LINE_SAFETY_HIEGHT = 100;
|
public const float BAN_LINE_SAFETY_HIEGHT = 100;
|
||||||
public const byte LAND_FLAG_PROPERTY_BORDER_SOUTH = (byte) 128; //Equals 10000000
|
public const byte LAND_FLAG_PROPERTY_BORDER_SOUTH = 128; //Equals 10000000
|
||||||
public const byte LAND_FLAG_PROPERTY_BORDER_WEST = (byte) 64; //Equals 01000000
|
public const byte LAND_FLAG_PROPERTY_BORDER_WEST = 64; //Equals 01000000
|
||||||
|
|
||||||
//RequestResults (I think these are right, they seem to work):
|
//RequestResults (I think these are right, they seem to work):
|
||||||
public const int LAND_RESULT_MULTIPLE = 1; // The request they made contained more than a single peice of land
|
public const int LAND_RESULT_MULTIPLE = 1; // The request they made contained more than a single peice of land
|
||||||
|
@ -55,26 +55,26 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
public const int LAND_SELECT_OBJECTS_GROUP = 4;
|
public const int LAND_SELECT_OBJECTS_GROUP = 4;
|
||||||
public const int LAND_SELECT_OBJECTS_OTHER = 8;
|
public const int LAND_SELECT_OBJECTS_OTHER = 8;
|
||||||
public const int LAND_SELECT_OBJECTS_OWNER = 2;
|
public const int LAND_SELECT_OBJECTS_OWNER = 2;
|
||||||
public const byte LAND_TYPE_IS_BEING_AUCTIONED = (byte) 5; //Equals 00000101
|
public const byte LAND_TYPE_IS_BEING_AUCTIONED = 5; //Equals 00000101
|
||||||
public const byte LAND_TYPE_IS_FOR_SALE = (byte) 4; //Equals 00000100
|
public const byte LAND_TYPE_IS_FOR_SALE = 4; //Equals 00000100
|
||||||
public const byte LAND_TYPE_OWNED_BY_GROUP = (byte) 2; //Equals 00000010
|
public const byte LAND_TYPE_OWNED_BY_GROUP = 2; //Equals 00000010
|
||||||
public const byte LAND_TYPE_OWNED_BY_OTHER = (byte) 1; //Equals 00000001
|
public const byte LAND_TYPE_OWNED_BY_OTHER = 1; //Equals 00000001
|
||||||
public const byte LAND_TYPE_OWNED_BY_REQUESTER = (byte) 3; //Equals 00000011
|
public const byte LAND_TYPE_OWNED_BY_REQUESTER = 3; //Equals 00000011
|
||||||
public const byte LAND_TYPE_PUBLIC = (byte) 0; //Equals 00000000
|
public const byte LAND_TYPE_PUBLIC = 0; //Equals 00000000
|
||||||
|
|
||||||
//These are other constants. Yay!
|
//These are other constants. Yay!
|
||||||
public const int START_LAND_LOCAL_ID = 1;
|
public const int START_LAND_LOCAL_ID = 1;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private int[,] landIDList = new int[64,64];
|
private readonly int[,] landIDList = new int[64,64];
|
||||||
private Dictionary<int, ILandObject> landList = new Dictionary<int, ILandObject>();
|
private readonly Dictionary<int, ILandObject> landList = new Dictionary<int, ILandObject>();
|
||||||
|
private readonly Scene m_scene;
|
||||||
|
|
||||||
private bool landPrimCountTainted = false;
|
private bool landPrimCountTainted;
|
||||||
private int lastLandLocalID = START_LAND_LOCAL_ID - 1;
|
private int lastLandLocalID = START_LAND_LOCAL_ID - 1;
|
||||||
|
|
||||||
private bool m_allowedForcefulBans = true;
|
private bool m_allowedForcefulBans = true;
|
||||||
private Scene m_scene;
|
|
||||||
|
|
||||||
public LandChannel(Scene scene)
|
public LandChannel(Scene scene)
|
||||||
{
|
{
|
||||||
|
@ -192,7 +192,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
lastLandLocalID++;
|
lastLandLocalID++;
|
||||||
new_land.landData.localID = lastLandLocalID;
|
new_land.landData.localID = lastLandLocalID;
|
||||||
landList.Add(lastLandLocalID, (LandObject) new_land.Copy());
|
landList.Add(lastLandLocalID, new_land.Copy());
|
||||||
|
|
||||||
|
|
||||||
bool[,] landBitmap = new_land.getLandBitmap();
|
bool[,] landBitmap = new_land.getLandBitmap();
|
||||||
|
@ -532,7 +532,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
for (x = 0; x < 64; x++)
|
for (x = 0; x < 64; x++)
|
||||||
{
|
{
|
||||||
byte tempByte = (byte) 0; //This represents the byte for the current 4x4
|
byte tempByte = 0; //This represents the byte for the current 4x4
|
||||||
ILandObject currentParcelBlock = null;
|
ILandObject currentParcelBlock = null;
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -611,7 +611,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
packet = (ParcelOverlayPacket) PacketPool.Instance.GetPacket(PacketType.ParcelOverlay);
|
packet = (ParcelOverlayPacket) PacketPool.Instance.GetPacket(PacketType.ParcelOverlay);
|
||||||
packet.ParcelData.Data = byteArray;
|
packet.ParcelData.Data = byteArray;
|
||||||
packet.ParcelData.SequenceID = sequenceID;
|
packet.ParcelData.SequenceID = sequenceID;
|
||||||
remote_client.OutPacket((Packet) packet, ThrottleOutPacketType.Task);
|
remote_client.OutPacket(packet, ThrottleOutPacketType.Task);
|
||||||
sequenceID++;
|
sequenceID++;
|
||||||
byteArray = new byte[LAND_BLOCKS_PER_PACKET];
|
byteArray = new byte[LAND_BLOCKS_PER_PACKET];
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,14 +45,14 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
|
|
||||||
m_scene.EventManager.OnParcelPrimCountAdd += landChannel.addPrimToLandPrimCounts;
|
m_scene.EventManager.OnParcelPrimCountAdd += landChannel.addPrimToLandPrimCounts;
|
||||||
m_scene.EventManager.OnParcelPrimCountUpdate += landChannel.updateLandPrimCounts;
|
m_scene.EventManager.OnParcelPrimCountUpdate += landChannel.updateLandPrimCounts;
|
||||||
m_scene.EventManager.OnAvatarEnteringNewParcel += new EventManager.AvatarEnteringNewParcel(landChannel.handleAvatarChangingParcel);
|
m_scene.EventManager.OnAvatarEnteringNewParcel += landChannel.handleAvatarChangingParcel;
|
||||||
m_scene.EventManager.OnClientMovement += new EventManager.ClientMovement(landChannel.handleAnyClientMovement);
|
m_scene.EventManager.OnClientMovement += landChannel.handleAnyClientMovement;
|
||||||
m_scene.EventManager.OnValidateLandBuy += landChannel.handleLandValidationRequest;
|
m_scene.EventManager.OnValidateLandBuy += landChannel.handleLandValidationRequest;
|
||||||
m_scene.EventManager.OnLandBuy += landChannel.handleLandBuyRequest;
|
m_scene.EventManager.OnLandBuy += landChannel.handleLandBuyRequest;
|
||||||
|
|
||||||
lock (m_scene)
|
lock (m_scene)
|
||||||
{
|
{
|
||||||
m_scene.LandChannel = (ILandChannel) landChannel;
|
m_scene.LandChannel = landChannel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,8 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
get { return m_scene.RegionInfo.RegionID; }
|
get { return m_scene.RegionInfo.RegionID; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public LandObject(LLUUID owner_id, bool is_group_owned, Scene scene)
|
public LandObject(LLUUID owner_id, bool is_group_owned, Scene scene)
|
||||||
|
@ -98,7 +100,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
if (x >= 0 && y >= 0 && x <= Constants.RegionSize && x <= Constants.RegionSize)
|
if (x >= 0 && y >= 0 && x <= Constants.RegionSize && x <= Constants.RegionSize)
|
||||||
{
|
{
|
||||||
return (landBitmap[x / 4, y / 4] == true);
|
return landBitmap[x / 4, y / 4];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -148,7 +150,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
updatePacket.ParcelData.GroupID = landData.groupID;
|
updatePacket.ParcelData.GroupID = landData.groupID;
|
||||||
updatePacket.ParcelData.GroupPrims = landData.groupPrims;
|
updatePacket.ParcelData.GroupPrims = landData.groupPrims;
|
||||||
updatePacket.ParcelData.IsGroupOwned = landData.isGroupOwned;
|
updatePacket.ParcelData.IsGroupOwned = landData.isGroupOwned;
|
||||||
updatePacket.ParcelData.LandingType = (byte) landData.landingType;
|
updatePacket.ParcelData.LandingType = landData.landingType;
|
||||||
updatePacket.ParcelData.LocalID = landData.localID;
|
updatePacket.ParcelData.LocalID = landData.localID;
|
||||||
if (landData.area > 0)
|
if (landData.area > 0)
|
||||||
{
|
{
|
||||||
|
@ -212,7 +214,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
landData.selectedPrims;
|
landData.selectedPrims;
|
||||||
updatePacket.ParcelData.UserLocation = landData.userLocation;
|
updatePacket.ParcelData.UserLocation = landData.userLocation;
|
||||||
updatePacket.ParcelData.UserLookAt = landData.userLookAt;
|
updatePacket.ParcelData.UserLookAt = landData.userLookAt;
|
||||||
remote_client.OutPacket((Packet) updatePacket, ThrottleOutPacketType.Task);
|
remote_client.OutPacket(updatePacket, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateLandProperties(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client)
|
public void updateLandProperties(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client)
|
||||||
|
@ -355,7 +357,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
||||||
|
|
||||||
listBlock.Flags = (uint) 0;
|
listBlock.Flags = 0;
|
||||||
listBlock.ID = entry.AgentID;
|
listBlock.ID = entry.AgentID;
|
||||||
listBlock.Time = 0;
|
listBlock.Time = 0;
|
||||||
|
|
||||||
|
@ -367,7 +369,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
||||||
|
|
||||||
listBlock.Flags = (uint) 0;
|
listBlock.Flags = 0;
|
||||||
listBlock.ID = LLUUID.Zero;
|
listBlock.ID = LLUUID.Zero;
|
||||||
listBlock.Time = 0;
|
listBlock.Time = 0;
|
||||||
|
|
||||||
|
@ -390,7 +392,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
replyPacket.Data.SequenceID = 0;
|
replyPacket.Data.SequenceID = 0;
|
||||||
|
|
||||||
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Access);
|
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Access);
|
||||||
remote_client.OutPacket((Packet) replyPacket, ThrottleOutPacketType.Task);
|
remote_client.OutPacket(replyPacket, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags == (uint) ParcelManager.AccessList.Ban || flags == (uint) ParcelManager.AccessList.Both)
|
if (flags == (uint) ParcelManager.AccessList.Ban || flags == (uint) ParcelManager.AccessList.Both)
|
||||||
|
@ -402,7 +404,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
replyPacket.Data.SequenceID = 0;
|
replyPacket.Data.SequenceID = 0;
|
||||||
|
|
||||||
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Ban);
|
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Ban);
|
||||||
remote_client.OutPacket((Packet) replyPacket, ThrottleOutPacketType.Task);
|
remote_client.OutPacket(replyPacket, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -482,7 +484,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
for (y = 0; y < 64; y++)
|
for (y = 0; y < 64; y++)
|
||||||
{
|
{
|
||||||
if (landBitmap[x, y] == true)
|
if (landBitmap[x, y])
|
||||||
{
|
{
|
||||||
if (min_x > x) min_x = x;
|
if (min_x > x) min_x = x;
|
||||||
if (min_y > y) min_y = y;
|
if (min_y > y) min_y = y;
|
||||||
|
@ -499,7 +501,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
if (ty > 255)
|
if (ty > 255)
|
||||||
ty = 255;
|
ty = 255;
|
||||||
landData.AABBMin =
|
landData.AABBMin =
|
||||||
new LLVector3((float) (min_x * 4), (float) (min_y * 4),
|
new LLVector3((min_x * 4), (min_y * 4),
|
||||||
(float) m_scene.Heightmap[tx, ty]);
|
(float) m_scene.Heightmap[tx, ty]);
|
||||||
|
|
||||||
tx = max_x * 4;
|
tx = max_x * 4;
|
||||||
|
@ -509,7 +511,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
if (ty > 255)
|
if (ty > 255)
|
||||||
ty = 255;
|
ty = 255;
|
||||||
landData.AABBMax =
|
landData.AABBMax =
|
||||||
new LLVector3((float) (max_x * 4), (float) (max_y * 4),
|
new LLVector3((max_x * 4), (max_y * 4),
|
||||||
(float) m_scene.Heightmap[tx, ty]);
|
(float) m_scene.Heightmap[tx, ty]);
|
||||||
landData.area = tempArea;
|
landData.area = tempArea;
|
||||||
}
|
}
|
||||||
|
@ -657,7 +659,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
if (i % 8 == 0)
|
if (i % 8 == 0)
|
||||||
{
|
{
|
||||||
tempConvertArr[byteNum] = tempByte;
|
tempConvertArr[byteNum] = tempByte;
|
||||||
tempByte = (byte) 0;
|
tempByte = 0;
|
||||||
i = 0;
|
i = 0;
|
||||||
byteNum++;
|
byteNum++;
|
||||||
}
|
}
|
||||||
|
@ -677,7 +679,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
tempByte = landData.landBitmapByteArray[i];
|
tempByte = landData.landBitmapByteArray[i];
|
||||||
for (bitNum = 0; bitNum < 8; bitNum++)
|
for (bitNum = 0; bitNum < 8; bitNum++)
|
||||||
{
|
{
|
||||||
bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte) 1);
|
bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & 1);
|
||||||
tempConvertMap[x, y] = bit;
|
tempConvertMap[x, y] = bit;
|
||||||
x++;
|
x++;
|
||||||
if (x > 63)
|
if (x > 63)
|
||||||
|
@ -751,7 +753,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
resultLocalIDs.RemoveAt(0);
|
resultLocalIDs.RemoveAt(0);
|
||||||
}
|
}
|
||||||
pack.Data = data;
|
pack.Data = data;
|
||||||
remote_client.OutPacket((Packet) pack, ThrottleOutPacketType.Task);
|
remote_client.OutPacket(pack, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -922,7 +924,5 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -37,10 +37,10 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
|
||||||
{
|
{
|
||||||
public class SerialiserModule : IRegionModule, IRegionSerialiser
|
public class SerialiserModule : IRegionModule, IRegionSerialiser
|
||||||
{
|
{
|
||||||
private Commander m_commander = new Commander("Export");
|
private readonly Commander m_commander = new Commander("Export");
|
||||||
private List<Scene> m_regions = new List<Scene>();
|
private readonly List<Scene> m_regions = new List<Scene>();
|
||||||
|
private readonly List<IFileSerialiser> m_serialisers = new List<IFileSerialiser>();
|
||||||
private string m_savedir = "exports" + "/";
|
private string m_savedir = "exports" + "/";
|
||||||
private List<IFileSerialiser> m_serialisers = new List<IFileSerialiser>();
|
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
|
@ -105,8 +105,8 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
|
||||||
|
|
||||||
TextWriter regionInfoWriter = new StreamWriter(saveDir + "README.TXT");
|
TextWriter regionInfoWriter = new StreamWriter(saveDir + "README.TXT");
|
||||||
regionInfoWriter.WriteLine("Region Name: " + scene.RegionInfo.RegionName);
|
regionInfoWriter.WriteLine("Region Name: " + scene.RegionInfo.RegionName);
|
||||||
regionInfoWriter.WriteLine("Region ID: " + scene.RegionInfo.RegionID.ToString());
|
regionInfoWriter.WriteLine("Region ID: " + scene.RegionInfo.RegionID);
|
||||||
regionInfoWriter.WriteLine("Backup Time: UTC " + DateTime.UtcNow.ToString());
|
regionInfoWriter.WriteLine("Backup Time: UTC " + DateTime.UtcNow);
|
||||||
regionInfoWriter.WriteLine("Serialise Version: 0.1");
|
regionInfoWriter.WriteLine("Serialise Version: 0.1");
|
||||||
regionInfoWriter.Close();
|
regionInfoWriter.Close();
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
|
||||||
{
|
{
|
||||||
if (region.RegionInfo.RegionName == (string) args[0])
|
if (region.RegionInfo.RegionName == (string) args[0])
|
||||||
{
|
{
|
||||||
List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/");
|
List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID + "/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,7 +150,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
|
||||||
{
|
{
|
||||||
foreach (Scene region in m_regions)
|
foreach (Scene region in m_regions)
|
||||||
{
|
{
|
||||||
List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/");
|
List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID + "/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@ namespace OpenSim.Region.Environment.Modules.World.Sun
|
||||||
{
|
{
|
||||||
long m_addticks = (DateTime.Now.Ticks - m_start) * m_dilation;
|
long m_addticks = (DateTime.Now.Ticks - m_start) * m_dilation;
|
||||||
DateTime dt = new DateTime(m_start + m_addticks);
|
DateTime dt = new DateTime(m_start + m_addticks);
|
||||||
return (double) dt.Hour + ((double) dt.Minute / 60.0);
|
return dt.Hour + (dt.Minute / 60.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private LLVector3 SunPos(double hour)
|
private LLVector3 SunPos(double hour)
|
||||||
|
|
|
@ -78,7 +78,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.Effects
|
||||||
{
|
{
|
||||||
for (y = 0; y < map.Height; y++)
|
for (y = 0; y < map.Height; y++)
|
||||||
{
|
{
|
||||||
if (cliffMask[x, y] == true)
|
if (cliffMask[x, y])
|
||||||
eroder.PaintEffect(map, x, y, 4, 0.1);
|
eroder.PaintEffect(map, x, y, 4, 0.1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders
|
||||||
{
|
{
|
||||||
for (x = 0; x < retval.Width; x++)
|
for (x = 0; x < retval.Width; x++)
|
||||||
{
|
{
|
||||||
retval[x, y] = (double) bs.ReadByte() * ((double) bs.ReadByte() / 127.0);
|
retval[x, y] = bs.ReadByte() * (bs.ReadByte() / 127.0);
|
||||||
bs.ReadBytes(11); // Advance the stream to next bytes.
|
bs.ReadBytes(11); // Advance the stream to next bytes.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders
|
||||||
{
|
{
|
||||||
for (j = 0; j < 256; j++)
|
for (j = 0; j < 256; j++)
|
||||||
{
|
{
|
||||||
lookupHeightTable[i + (j * 256)] = ((double) i * ((double) j / 127.0));
|
lookupHeightTable[i + (j * 256)] = (i * (j / 127.0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,14 +50,14 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders
|
||||||
BinaryReader bs = new BinaryReader(s);
|
BinaryReader bs = new BinaryReader(s);
|
||||||
|
|
||||||
bool eof = false;
|
bool eof = false;
|
||||||
if (ASCIIEncoding.ASCII.GetString(bs.ReadBytes(16)) == "TERRAGENTERRAIN ")
|
if (Encoding.ASCII.GetString(bs.ReadBytes(16)) == "TERRAGENTERRAIN ")
|
||||||
{
|
{
|
||||||
// Terragen file
|
// Terragen file
|
||||||
while (eof == false)
|
while (eof == false)
|
||||||
{
|
{
|
||||||
int w = 256;
|
int w = 256;
|
||||||
int h = 256;
|
int h = 256;
|
||||||
string tmp = ASCIIEncoding.ASCII.GetString(bs.ReadBytes(4));
|
string tmp = Encoding.ASCII.GetString(bs.ReadBytes(4));
|
||||||
switch (tmp)
|
switch (tmp)
|
||||||
{
|
{
|
||||||
case "SIZE":
|
case "SIZE":
|
||||||
|
@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders
|
||||||
{
|
{
|
||||||
for (y = 0; y < h; y++)
|
for (y = 0; y < h; y++)
|
||||||
{
|
{
|
||||||
retval[x, y] = (double) baseHeight + (double) bs.ReadInt16() * (double) heightScale / 65536.0;
|
retval[x, y] = baseHeight + bs.ReadInt16() * (double) heightScale / 65536.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -31,7 +31,6 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes
|
||||||
{
|
{
|
||||||
public class FlattenSphere : ITerrainPaintableEffect
|
public class FlattenSphere : ITerrainPaintableEffect
|
||||||
{
|
{
|
||||||
|
|
||||||
#region ITerrainPaintableEffect Members
|
#region ITerrainPaintableEffect Members
|
||||||
|
|
||||||
public void PaintEffect(ITerrainChannel map, double rx, double ry, double strength, double duration)
|
public void PaintEffect(ITerrainChannel map, double rx, double ry, double strength, double duration)
|
||||||
|
|
|
@ -57,7 +57,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes
|
||||||
z *= z;
|
z *= z;
|
||||||
z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry));
|
z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry));
|
||||||
|
|
||||||
double noise = TerrainUtil.PerlinNoise2D((double) x / (double) Constants.RegionSize, (double) y / (double) Constants.RegionSize, 8, 1.0);
|
double noise = TerrainUtil.PerlinNoise2D(x / (double) Constants.RegionSize, y / (double) Constants.RegionSize, 8, 1.0);
|
||||||
|
|
||||||
if (z > 0.0)
|
if (z > 0.0)
|
||||||
map[x, y] += noise * z * duration;
|
map[x, y] += noise * z * duration;
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes
|
||||||
{
|
{
|
||||||
public class RevertSphere : ITerrainPaintableEffect
|
public class RevertSphere : ITerrainPaintableEffect
|
||||||
{
|
{
|
||||||
private ITerrainChannel m_revertmap;
|
private readonly ITerrainChannel m_revertmap;
|
||||||
|
|
||||||
public RevertSphere(ITerrainChannel revertmap)
|
public RevertSphere(ITerrainChannel revertmap)
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain
|
||||||
{
|
{
|
||||||
public class TerrainException : Exception
|
public class TerrainException : Exception
|
||||||
{
|
{
|
||||||
public TerrainException() : base()
|
public TerrainException()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain
|
||||||
private Dictionary<string, ITerrainEffect> m_plugineffects;
|
private Dictionary<string, ITerrainEffect> m_plugineffects;
|
||||||
private ITerrainChannel m_revert;
|
private ITerrainChannel m_revert;
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private bool m_tainted = false;
|
private bool m_tainted;
|
||||||
|
|
||||||
#region ICommandableModule Members
|
#region ICommandableModule Members
|
||||||
|
|
||||||
|
@ -223,6 +223,8 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Plugin Loading Methods
|
#region Plugin Loading Methods
|
||||||
|
|
||||||
private void LoadPlugins()
|
private void LoadPlugins()
|
||||||
|
@ -276,8 +278,6 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Installs into terrain module the standard suite of brushes
|
/// Installs into terrain module the standard suite of brushes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -66,10 +66,10 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator
|
||||||
m_trees = new List<LLUUID>();
|
m_trees = new List<LLUUID>();
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
|
|
||||||
m_scene.EventManager.OnPluginConsole += new EventManager.OnPluginConsoleDelegate(EventManager_OnPluginConsole);
|
m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
|
||||||
|
|
||||||
Timer CalculateTrees = new Timer(m_tree_updates);
|
Timer CalculateTrees = new Timer(m_tree_updates);
|
||||||
CalculateTrees.Elapsed += new ElapsedEventHandler(CalculateTrees_Elapsed);
|
CalculateTrees.Elapsed += CalculateTrees_Elapsed;
|
||||||
CalculateTrees.Start();
|
CalculateTrees.Start();
|
||||||
m_log.Debug("[TREES]: Initialised tree module");
|
m_log.Debug("[TREES]: Initialised tree module");
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,27 +33,21 @@ namespace OpenSim.Region.Environment
|
||||||
{
|
{
|
||||||
public class PermissionManager
|
public class PermissionManager
|
||||||
{
|
{
|
||||||
protected Scene m_scene;
|
|
||||||
|
|
||||||
// These are here for testing. They will be taken out
|
|
||||||
|
|
||||||
//private uint PERM_ALL = (uint)2147483647;
|
|
||||||
private uint PERM_COPY = (uint)32768;
|
|
||||||
//private uint PERM_MODIFY = (uint)16384;
|
|
||||||
private uint PERM_MOVE = (uint)524288;
|
|
||||||
//private uint PERM_TRANS = (uint)8192;
|
|
||||||
private uint PERM_LOCKED = (uint)540672;
|
|
||||||
// Bypasses the permissions engine (always returns OK)
|
// Bypasses the permissions engine (always returns OK)
|
||||||
// disable in any production environment
|
// disable in any production environment
|
||||||
// TODO: Change this to false when permissions are a desired default
|
// TODO: Change this to false when permissions are a desired default
|
||||||
// TODO: Move to configuration option.
|
// TODO: Move to configuration option.
|
||||||
private bool m_bypassPermissions = true;
|
private bool m_bypassPermissions = true;
|
||||||
|
protected Scene m_scene;
|
||||||
|
|
||||||
|
// These are here for testing. They will be taken out
|
||||||
|
//private uint PERM_ALL = (uint)2147483647;
|
||||||
|
private uint PERM_COPY = 32768;
|
||||||
|
//private uint PERM_MODIFY = (uint)16384;
|
||||||
|
//private uint PERM_TRANS = (uint)8192;
|
||||||
|
private uint PERM_LOCKED = 540672;
|
||||||
|
private uint PERM_MOVE = 524288;
|
||||||
|
|
||||||
public bool BypassPermissions
|
|
||||||
{
|
|
||||||
get { return m_bypassPermissions; }
|
|
||||||
set { m_bypassPermissions = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public PermissionManager()
|
public PermissionManager()
|
||||||
{
|
{
|
||||||
|
@ -64,6 +58,12 @@ namespace OpenSim.Region.Environment
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool BypassPermissions
|
||||||
|
{
|
||||||
|
get { return m_bypassPermissions; }
|
||||||
|
set { m_bypassPermissions = value; }
|
||||||
|
}
|
||||||
|
|
||||||
public void Initialise(Scene scene)
|
public void Initialise(Scene scene)
|
||||||
{
|
{
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
|
@ -129,8 +129,8 @@ namespace OpenSim.Region.Environment
|
||||||
ILandObject land = m_scene.LandChannel.getLandObject(position.X, position.Y);
|
ILandObject land = m_scene.LandChannel.getLandObject(position.X, position.Y);
|
||||||
if (land == null) return false;
|
if (land == null) return false;
|
||||||
|
|
||||||
if ((land.landData.landFlags & ((int)Parcel.ParcelFlags.CreateObjects)) ==
|
if ((land.landData.landFlags & ((int) Parcel.ParcelFlags.CreateObjects)) ==
|
||||||
(int)Parcel.ParcelFlags.CreateObjects)
|
(int) Parcel.ParcelFlags.CreateObjects)
|
||||||
permission = true;
|
permission = true;
|
||||||
|
|
||||||
//TODO: check for group rights
|
//TODO: check for group rights
|
||||||
|
@ -168,8 +168,6 @@ namespace OpenSim.Region.Environment
|
||||||
/// <returns>Has permission?</returns>
|
/// <returns>Has permission?</returns>
|
||||||
public virtual bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos)
|
public virtual bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if ((newPos.X > 257f || newPos.X < -1f || newPos.Y > 257f || newPos.Y < -1f))
|
if ((newPos.X > 257f || newPos.X < -1f || newPos.Y > 257f || newPos.Y < -1f))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -193,7 +191,7 @@ namespace OpenSim.Region.Environment
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((land2.landData.landFlags & ((int)Parcel.ParcelFlags.AllowAllObjectEntry)) != 0)
|
if ((land2.landData.landFlags & ((int) Parcel.ParcelFlags.AllowAllObjectEntry)) != 0)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -210,355 +208,6 @@ namespace OpenSim.Region.Environment
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Object Permissions
|
|
||||||
|
|
||||||
public virtual uint GenerateClientFlags(LLUUID user, LLUUID objID)
|
|
||||||
{
|
|
||||||
|
|
||||||
// Here's the way this works,
|
|
||||||
// ObjectFlags and Permission flags are two different enumerations
|
|
||||||
// ObjectFlags, however, tells the client to change what it will allow the user to do.
|
|
||||||
// So, that means that all of the permissions type ObjectFlags are /temporary/ and only
|
|
||||||
// supposed to be set when customizing the objectflags for the client.
|
|
||||||
|
|
||||||
// These temporary objectflags get computed and added in this function based on the
|
|
||||||
// Permission mask that's appropriate!
|
|
||||||
// Outside of this method, they should never be added to objectflags!
|
|
||||||
// -teravus
|
|
||||||
|
|
||||||
SceneObjectPart task=m_scene.GetSceneObjectPart(objID);
|
|
||||||
|
|
||||||
// this shouldn't ever happen.. return no permissions/objectflags.
|
|
||||||
if (task == null)
|
|
||||||
return (uint)0;
|
|
||||||
|
|
||||||
uint objflags = task.GetEffectiveObjectFlags();
|
|
||||||
LLUUID objectOwner = task.OwnerID;
|
|
||||||
|
|
||||||
|
|
||||||
// Remove any of the objectFlags that are temporary. These will get added back if appropriate
|
|
||||||
// in the next bit of code
|
|
||||||
|
|
||||||
objflags &= (uint)
|
|
||||||
~(LLObject.ObjectFlags.ObjectCopy | // Tells client you can copy the object
|
|
||||||
LLObject.ObjectFlags.ObjectModify | // tells client you can modify the object
|
|
||||||
LLObject.ObjectFlags.ObjectMove | // tells client that you can move the object (only, no mod)
|
|
||||||
LLObject.ObjectFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it
|
|
||||||
LLObject.ObjectFlags.ObjectYouOwner | // Tells client that you're the owner of the object
|
|
||||||
LLObject.ObjectFlags.ObjectYouOfficer // Tells client that you've got group object editing permission. Used when ObjectGroupOwned is set
|
|
||||||
);
|
|
||||||
|
|
||||||
// Creating the three ObjectFlags options for this method to choose from.
|
|
||||||
// Customize the OwnerMask
|
|
||||||
uint objectOwnerMask = ApplyObjectModifyMasks(task.OwnerMask, objflags);
|
|
||||||
objectOwnerMask |= (uint)LLObject.ObjectFlags.ObjectYouOwner;
|
|
||||||
|
|
||||||
// Customize the GroupMask
|
|
||||||
uint objectGroupMask = ApplyObjectModifyMasks(task.GroupMask, objflags);
|
|
||||||
|
|
||||||
// Customize the EveryoneMask
|
|
||||||
uint objectEveryoneMask = ApplyObjectModifyMasks(task.EveryoneMask, objflags);
|
|
||||||
|
|
||||||
|
|
||||||
// Hack to allow collaboration until Groups and Group Permissions are implemented
|
|
||||||
if ((objectEveryoneMask & (uint)LLObject.ObjectFlags.ObjectMove) != 0)
|
|
||||||
objectEveryoneMask |= (uint)LLObject.ObjectFlags.ObjectModify;
|
|
||||||
|
|
||||||
if (m_bypassPermissions)
|
|
||||||
return objectOwnerMask;
|
|
||||||
|
|
||||||
// Object owners should be able to edit their own content
|
|
||||||
if (user == objectOwner)
|
|
||||||
{
|
|
||||||
return objectOwnerMask;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Users should be able to edit what is over their land.
|
|
||||||
ILandObject parcel = m_scene.LandChannel.getLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y);
|
|
||||||
if (parcel != null && parcel.landData.ownerID == user)
|
|
||||||
return objectOwnerMask;
|
|
||||||
|
|
||||||
// Admin objects should not be editable by the above
|
|
||||||
if (IsAdministrator(objectOwner))
|
|
||||||
return objectEveryoneMask;
|
|
||||||
|
|
||||||
// Estate users should be able to edit anything in the sim
|
|
||||||
if (IsEstateManager(user))
|
|
||||||
return objectOwnerMask;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Admin should be able to edit anything in the sim (including admin objects)
|
|
||||||
if (IsAdministrator(user))
|
|
||||||
return objectOwnerMask;
|
|
||||||
|
|
||||||
|
|
||||||
return objectEveryoneMask;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private uint ApplyObjectModifyMasks(uint setPermissionMask, uint objectFlagsMask)
|
|
||||||
{
|
|
||||||
// We are adding the temporary objectflags to the object's objectflags based on the
|
|
||||||
// permission flag given. These change the F flags on the client.
|
|
||||||
|
|
||||||
if ((setPermissionMask & (uint)PermissionMask.Copy) != 0)
|
|
||||||
{
|
|
||||||
objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectCopy;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((setPermissionMask & (uint)PermissionMask.Move) != 0)
|
|
||||||
{
|
|
||||||
objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectMove;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((setPermissionMask & (uint)PermissionMask.Modify) != 0)
|
|
||||||
{
|
|
||||||
objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectModify;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((setPermissionMask & (uint)PermissionMask.Transfer) != 0)
|
|
||||||
{
|
|
||||||
objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectTransfer;
|
|
||||||
}
|
|
||||||
|
|
||||||
return objectFlagsMask;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual bool GenericObjectPermission(LLUUID currentUser, LLUUID objId)
|
|
||||||
{
|
|
||||||
// Default: deny
|
|
||||||
bool permission = false;
|
|
||||||
bool locked = false;
|
|
||||||
|
|
||||||
if (!m_scene.Entities.ContainsKey(objId))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if ((!(m_scene.Entities[objId] is SceneObjectGroup)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[objId];
|
|
||||||
|
|
||||||
LLUUID objectOwner = group.OwnerID;
|
|
||||||
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
|
||||||
|
|
||||||
// People shouldn't be able to do anything with locked objects, except the Administrator
|
|
||||||
// The 'set permissions' runs through a different permission check, so when an object owner
|
|
||||||
// sets an object locked, the only thing that they can do is unlock it.
|
|
||||||
//
|
|
||||||
// Nobody but the object owner can set permissions on an object
|
|
||||||
//
|
|
||||||
|
|
||||||
if (locked && (!IsAdministrator(currentUser)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Object owners should be able to edit their own content
|
|
||||||
if (currentUser == objectOwner)
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Users should be able to edit what is over their land.
|
|
||||||
ILandObject parcel = m_scene.LandChannel.getLandObject(group.AbsolutePosition.X, group.AbsolutePosition.Y);
|
|
||||||
if ((parcel != null) && (parcel.landData.ownerID == currentUser))
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Estate users should be able to edit anything in the sim
|
|
||||||
if (IsEstateManager(currentUser))
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Admin objects should not be editable by the above
|
|
||||||
if (IsAdministrator(objectOwner))
|
|
||||||
{
|
|
||||||
permission = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Admin should be able to edit anything in the sim (including admin objects)
|
|
||||||
if (IsAdministrator(currentUser))
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Permissions check - can user delete an object?
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="user">User attempting the delete</param>
|
|
||||||
/// <param name="obj">Target object</param>
|
|
||||||
/// <returns>Has permission?</returns>
|
|
||||||
public virtual bool CanDeRezObject(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
return GenericObjectPermission(user, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanEditObject(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
return GenericObjectPermission(user, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanEditObjectPosition(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
bool permission = GenericObjectPermission(user, obj);
|
|
||||||
if (!permission)
|
|
||||||
{
|
|
||||||
if (!m_scene.Entities.ContainsKey(obj))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The client
|
|
||||||
// may request to edit linked parts, and therefore, it needs
|
|
||||||
// to also check for SceneObjectPart
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[obj];
|
|
||||||
|
|
||||||
|
|
||||||
LLUUID taskOwner = null;
|
|
||||||
// Added this because at this point in time it wouldn't be wise for
|
|
||||||
// the administrator object permissions to take effect.
|
|
||||||
LLUUID objectOwner = task.OwnerID;
|
|
||||||
|
|
||||||
// Anyone can move
|
|
||||||
if ((task.RootPart.EveryoneMask & PERM_MOVE) != 0)
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
// Locked
|
|
||||||
if ((task.RootPart.OwnerMask & PERM_LOCKED) == 0)
|
|
||||||
permission = false;
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bool locked = false;
|
|
||||||
if (!m_scene.Entities.ContainsKey(obj))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[obj];
|
|
||||||
|
|
||||||
LLUUID objectOwner = group.OwnerID;
|
|
||||||
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
|
||||||
|
|
||||||
|
|
||||||
// This is an exception to the generic object permission.
|
|
||||||
// Administrators who lock their objects should not be able to move them,
|
|
||||||
// however generic object permission should return true.
|
|
||||||
// This keeps locked objects from being affected by random click + drag actions by accident
|
|
||||||
// and allows the administrator to grab or delete a locked object.
|
|
||||||
|
|
||||||
// Administrators and estate managers are still able to click+grab locked objects not
|
|
||||||
// owned by them in the scene
|
|
||||||
// This is by design.
|
|
||||||
|
|
||||||
if (locked && (user == objectOwner))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanCopyObject(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
bool permission = GenericObjectPermission(user, obj);
|
|
||||||
if (!permission)
|
|
||||||
{
|
|
||||||
if (!m_scene.Entities.ContainsKey(obj))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if (!(m_scene.Entities[obj] is SceneObjectGroup))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[obj];
|
|
||||||
LLUUID taskOwner = null;
|
|
||||||
// Added this because at this point in time it wouldn't be wise for
|
|
||||||
// the administrator object permissions to take effect.
|
|
||||||
LLUUID objectOwner = task.OwnerID;
|
|
||||||
if ((task.RootPart.EveryoneMask & PERM_COPY) != 0)
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanReturnObject(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
return GenericObjectPermission(user, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Communication Permissions
|
|
||||||
|
|
||||||
public virtual bool GenericCommunicationPermission(LLUUID user, LLUUID target)
|
|
||||||
{
|
|
||||||
bool permission = false;
|
|
||||||
string reason = "Only registered users may communicate with another account.";
|
|
||||||
|
|
||||||
if (IsGridUser(user))
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
if (!IsGridUser(user))
|
|
||||||
{
|
|
||||||
permission = false;
|
|
||||||
reason = "The person that you are messaging is not a registered user.";
|
|
||||||
}
|
|
||||||
if (IsAdministrator(user))
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
if (IsEstateManager(user))
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
if (!permission)
|
|
||||||
SendPermissionError(user, reason);
|
|
||||||
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanInstantMessage(LLUUID user, LLUUID target)
|
|
||||||
{
|
|
||||||
return GenericCommunicationPermission(user, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanInventoryTransfer(LLUUID user, LLUUID target)
|
|
||||||
{
|
|
||||||
return GenericCommunicationPermission(user, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public virtual bool CanEditScript(LLUUID user, LLUUID script)
|
public virtual bool CanEditScript(LLUUID user, LLUUID script)
|
||||||
{
|
{
|
||||||
return IsAdministrator(user);
|
return IsAdministrator(user);
|
||||||
|
@ -690,5 +339,351 @@ namespace OpenSim.Region.Environment
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Object Permissions
|
||||||
|
|
||||||
|
public virtual uint GenerateClientFlags(LLUUID user, LLUUID objID)
|
||||||
|
{
|
||||||
|
// Here's the way this works,
|
||||||
|
// ObjectFlags and Permission flags are two different enumerations
|
||||||
|
// ObjectFlags, however, tells the client to change what it will allow the user to do.
|
||||||
|
// So, that means that all of the permissions type ObjectFlags are /temporary/ and only
|
||||||
|
// supposed to be set when customizing the objectflags for the client.
|
||||||
|
|
||||||
|
// These temporary objectflags get computed and added in this function based on the
|
||||||
|
// Permission mask that's appropriate!
|
||||||
|
// Outside of this method, they should never be added to objectflags!
|
||||||
|
// -teravus
|
||||||
|
|
||||||
|
SceneObjectPart task = m_scene.GetSceneObjectPart(objID);
|
||||||
|
|
||||||
|
// this shouldn't ever happen.. return no permissions/objectflags.
|
||||||
|
if (task == null)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
uint objflags = task.GetEffectiveObjectFlags();
|
||||||
|
LLUUID objectOwner = task.OwnerID;
|
||||||
|
|
||||||
|
|
||||||
|
// Remove any of the objectFlags that are temporary. These will get added back if appropriate
|
||||||
|
// in the next bit of code
|
||||||
|
|
||||||
|
objflags &= (uint)
|
||||||
|
~(LLObject.ObjectFlags.ObjectCopy | // Tells client you can copy the object
|
||||||
|
LLObject.ObjectFlags.ObjectModify | // tells client you can modify the object
|
||||||
|
LLObject.ObjectFlags.ObjectMove | // tells client that you can move the object (only, no mod)
|
||||||
|
LLObject.ObjectFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it
|
||||||
|
LLObject.ObjectFlags.ObjectYouOwner | // Tells client that you're the owner of the object
|
||||||
|
LLObject.ObjectFlags.ObjectYouOfficer
|
||||||
|
// Tells client that you've got group object editing permission. Used when ObjectGroupOwned is set
|
||||||
|
);
|
||||||
|
|
||||||
|
// Creating the three ObjectFlags options for this method to choose from.
|
||||||
|
// Customize the OwnerMask
|
||||||
|
uint objectOwnerMask = ApplyObjectModifyMasks(task.OwnerMask, objflags);
|
||||||
|
objectOwnerMask |= (uint) LLObject.ObjectFlags.ObjectYouOwner;
|
||||||
|
|
||||||
|
// Customize the GroupMask
|
||||||
|
uint objectGroupMask = ApplyObjectModifyMasks(task.GroupMask, objflags);
|
||||||
|
|
||||||
|
// Customize the EveryoneMask
|
||||||
|
uint objectEveryoneMask = ApplyObjectModifyMasks(task.EveryoneMask, objflags);
|
||||||
|
|
||||||
|
|
||||||
|
// Hack to allow collaboration until Groups and Group Permissions are implemented
|
||||||
|
if ((objectEveryoneMask & (uint) LLObject.ObjectFlags.ObjectMove) != 0)
|
||||||
|
objectEveryoneMask |= (uint) LLObject.ObjectFlags.ObjectModify;
|
||||||
|
|
||||||
|
if (m_bypassPermissions)
|
||||||
|
return objectOwnerMask;
|
||||||
|
|
||||||
|
// Object owners should be able to edit their own content
|
||||||
|
if (user == objectOwner)
|
||||||
|
{
|
||||||
|
return objectOwnerMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Users should be able to edit what is over their land.
|
||||||
|
ILandObject parcel = m_scene.LandChannel.getLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y);
|
||||||
|
if (parcel != null && parcel.landData.ownerID == user)
|
||||||
|
return objectOwnerMask;
|
||||||
|
|
||||||
|
// Admin objects should not be editable by the above
|
||||||
|
if (IsAdministrator(objectOwner))
|
||||||
|
return objectEveryoneMask;
|
||||||
|
|
||||||
|
// Estate users should be able to edit anything in the sim
|
||||||
|
if (IsEstateManager(user))
|
||||||
|
return objectOwnerMask;
|
||||||
|
|
||||||
|
|
||||||
|
// Admin should be able to edit anything in the sim (including admin objects)
|
||||||
|
if (IsAdministrator(user))
|
||||||
|
return objectOwnerMask;
|
||||||
|
|
||||||
|
|
||||||
|
return objectEveryoneMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private uint ApplyObjectModifyMasks(uint setPermissionMask, uint objectFlagsMask)
|
||||||
|
{
|
||||||
|
// We are adding the temporary objectflags to the object's objectflags based on the
|
||||||
|
// permission flag given. These change the F flags on the client.
|
||||||
|
|
||||||
|
if ((setPermissionMask & (uint) PermissionMask.Copy) != 0)
|
||||||
|
{
|
||||||
|
objectFlagsMask |= (uint) LLObject.ObjectFlags.ObjectCopy;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((setPermissionMask & (uint) PermissionMask.Move) != 0)
|
||||||
|
{
|
||||||
|
objectFlagsMask |= (uint) LLObject.ObjectFlags.ObjectMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((setPermissionMask & (uint) PermissionMask.Modify) != 0)
|
||||||
|
{
|
||||||
|
objectFlagsMask |= (uint) LLObject.ObjectFlags.ObjectModify;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((setPermissionMask & (uint) PermissionMask.Transfer) != 0)
|
||||||
|
{
|
||||||
|
objectFlagsMask |= (uint) LLObject.ObjectFlags.ObjectTransfer;
|
||||||
|
}
|
||||||
|
|
||||||
|
return objectFlagsMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual bool GenericObjectPermission(LLUUID currentUser, LLUUID objId)
|
||||||
|
{
|
||||||
|
// Default: deny
|
||||||
|
bool permission = false;
|
||||||
|
bool locked = false;
|
||||||
|
|
||||||
|
if (!m_scene.Entities.ContainsKey(objId))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if ((!(m_scene.Entities[objId] is SceneObjectGroup)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SceneObjectGroup group = (SceneObjectGroup) m_scene.Entities[objId];
|
||||||
|
|
||||||
|
LLUUID objectOwner = group.OwnerID;
|
||||||
|
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
||||||
|
|
||||||
|
// People shouldn't be able to do anything with locked objects, except the Administrator
|
||||||
|
// The 'set permissions' runs through a different permission check, so when an object owner
|
||||||
|
// sets an object locked, the only thing that they can do is unlock it.
|
||||||
|
//
|
||||||
|
// Nobody but the object owner can set permissions on an object
|
||||||
|
//
|
||||||
|
|
||||||
|
if (locked && (!IsAdministrator(currentUser)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Object owners should be able to edit their own content
|
||||||
|
if (currentUser == objectOwner)
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Users should be able to edit what is over their land.
|
||||||
|
ILandObject parcel = m_scene.LandChannel.getLandObject(group.AbsolutePosition.X, group.AbsolutePosition.Y);
|
||||||
|
if ((parcel != null) && (parcel.landData.ownerID == currentUser))
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Estate users should be able to edit anything in the sim
|
||||||
|
if (IsEstateManager(currentUser))
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admin objects should not be editable by the above
|
||||||
|
if (IsAdministrator(objectOwner))
|
||||||
|
{
|
||||||
|
permission = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admin should be able to edit anything in the sim (including admin objects)
|
||||||
|
if (IsAdministrator(currentUser))
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Permissions check - can user delete an object?
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="user">User attempting the delete</param>
|
||||||
|
/// <param name="obj">Target object</param>
|
||||||
|
/// <returns>Has permission?</returns>
|
||||||
|
public virtual bool CanDeRezObject(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
return GenericObjectPermission(user, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanEditObject(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
return GenericObjectPermission(user, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanEditObjectPosition(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
bool permission = GenericObjectPermission(user, obj);
|
||||||
|
if (!permission)
|
||||||
|
{
|
||||||
|
if (!m_scene.Entities.ContainsKey(obj))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The client
|
||||||
|
// may request to edit linked parts, and therefore, it needs
|
||||||
|
// to also check for SceneObjectPart
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SceneObjectGroup task = (SceneObjectGroup) m_scene.Entities[obj];
|
||||||
|
|
||||||
|
|
||||||
|
LLUUID taskOwner = null;
|
||||||
|
// Added this because at this point in time it wouldn't be wise for
|
||||||
|
// the administrator object permissions to take effect.
|
||||||
|
LLUUID objectOwner = task.OwnerID;
|
||||||
|
|
||||||
|
// Anyone can move
|
||||||
|
if ((task.RootPart.EveryoneMask & PERM_MOVE) != 0)
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
// Locked
|
||||||
|
if ((task.RootPart.OwnerMask & PERM_LOCKED) == 0)
|
||||||
|
permission = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool locked = false;
|
||||||
|
if (!m_scene.Entities.ContainsKey(obj))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SceneObjectGroup group = (SceneObjectGroup) m_scene.Entities[obj];
|
||||||
|
|
||||||
|
LLUUID objectOwner = group.OwnerID;
|
||||||
|
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
||||||
|
|
||||||
|
|
||||||
|
// This is an exception to the generic object permission.
|
||||||
|
// Administrators who lock their objects should not be able to move them,
|
||||||
|
// however generic object permission should return true.
|
||||||
|
// This keeps locked objects from being affected by random click + drag actions by accident
|
||||||
|
// and allows the administrator to grab or delete a locked object.
|
||||||
|
|
||||||
|
// Administrators and estate managers are still able to click+grab locked objects not
|
||||||
|
// owned by them in the scene
|
||||||
|
// This is by design.
|
||||||
|
|
||||||
|
if (locked && (user == objectOwner))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanCopyObject(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
bool permission = GenericObjectPermission(user, obj);
|
||||||
|
if (!permission)
|
||||||
|
{
|
||||||
|
if (!m_scene.Entities.ContainsKey(obj))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if (!(m_scene.Entities[obj] is SceneObjectGroup))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SceneObjectGroup task = (SceneObjectGroup) m_scene.Entities[obj];
|
||||||
|
LLUUID taskOwner = null;
|
||||||
|
// Added this because at this point in time it wouldn't be wise for
|
||||||
|
// the administrator object permissions to take effect.
|
||||||
|
LLUUID objectOwner = task.OwnerID;
|
||||||
|
if ((task.RootPart.EveryoneMask & PERM_COPY) != 0)
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanReturnObject(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
return GenericObjectPermission(user, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Communication Permissions
|
||||||
|
|
||||||
|
public virtual bool GenericCommunicationPermission(LLUUID user, LLUUID target)
|
||||||
|
{
|
||||||
|
bool permission = false;
|
||||||
|
string reason = "Only registered users may communicate with another account.";
|
||||||
|
|
||||||
|
if (IsGridUser(user))
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
if (!IsGridUser(user))
|
||||||
|
{
|
||||||
|
permission = false;
|
||||||
|
reason = "The person that you are messaging is not a registered user.";
|
||||||
|
}
|
||||||
|
if (IsAdministrator(user))
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
if (IsEstateManager(user))
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
if (!permission)
|
||||||
|
SendPermissionError(user, reason);
|
||||||
|
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanInstantMessage(LLUUID user, LLUUID target)
|
||||||
|
{
|
||||||
|
return GenericCommunicationPermission(user, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanInventoryTransfer(LLUUID user, LLUUID target)
|
||||||
|
{
|
||||||
|
return GenericCommunicationPermission(user, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -46,8 +46,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (nod.Attributes["name"] != null)
|
if (nod.Attributes["name"] != null)
|
||||||
{
|
{
|
||||||
string name = (string)nod.Attributes["name"].Value;
|
string name = nod.Attributes["name"].Value;
|
||||||
LLUUID id = (LLUUID)nod.InnerText;
|
LLUUID id = (LLUUID) nod.InnerText;
|
||||||
|
|
||||||
AnimsLLUUID.Add(name, id);
|
AnimsLLUUID.Add(name, id);
|
||||||
AnimsNames.Add(id, name);
|
AnimsNames.Add(id, name);
|
||||||
|
|
|
@ -37,52 +37,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class AvatarAppearance : ISerializable
|
public class AvatarAppearance : ISerializable
|
||||||
{
|
{
|
||||||
|
protected float m_avatarHeight;
|
||||||
protected LLUUID m_scenePresenceID;
|
protected LLUUID m_scenePresenceID;
|
||||||
|
protected LLObject.TextureEntry m_textureEntry;
|
||||||
public LLUUID ScenePresenceID
|
|
||||||
{
|
|
||||||
get { return m_scenePresenceID; }
|
|
||||||
set { m_scenePresenceID = value; }
|
|
||||||
}
|
|
||||||
protected int m_wearablesSerial = 1;
|
|
||||||
|
|
||||||
public int WearablesSerial
|
|
||||||
{
|
|
||||||
get { return m_wearablesSerial; }
|
|
||||||
set { m_wearablesSerial = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected byte[] m_visualParams;
|
protected byte[] m_visualParams;
|
||||||
|
|
||||||
public byte[] VisualParams
|
|
||||||
{
|
|
||||||
get { return m_visualParams; }
|
|
||||||
set { m_visualParams = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected AvatarWearable[] m_wearables;
|
protected AvatarWearable[] m_wearables;
|
||||||
|
|
||||||
public AvatarWearable[] Wearables
|
protected int m_wearablesSerial = 1;
|
||||||
{
|
|
||||||
get { return m_wearables; }
|
|
||||||
set { m_wearables = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected LLObject.TextureEntry m_textureEntry;
|
|
||||||
|
|
||||||
public LLObject.TextureEntry TextureEntry
|
|
||||||
{
|
|
||||||
get { return m_textureEntry; }
|
|
||||||
set { m_textureEntry = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected float m_avatarHeight = 0;
|
|
||||||
|
|
||||||
public float AvatarHeight
|
|
||||||
{
|
|
||||||
get { return m_avatarHeight; }
|
|
||||||
set { m_avatarHeight = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public AvatarAppearance()
|
public AvatarAppearance()
|
||||||
{
|
{
|
||||||
|
@ -97,6 +58,86 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_textureEntry = GetDefaultTextureEntry();
|
m_textureEntry = GetDefaultTextureEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected AvatarAppearance(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
//System.Console.WriteLine("AvatarAppearance Deserialize BGN");
|
||||||
|
|
||||||
|
if (info == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("info");
|
||||||
|
}
|
||||||
|
|
||||||
|
m_scenePresenceID = new LLUUID((Guid) info.GetValue("m_scenePresenceID", typeof (Guid)));
|
||||||
|
m_wearablesSerial = (int) info.GetValue("m_wearablesSerial", typeof (int));
|
||||||
|
m_visualParams = (byte[]) info.GetValue("m_visualParams", typeof (byte[]));
|
||||||
|
m_wearables = (AvatarWearable[]) info.GetValue("m_wearables", typeof (AvatarWearable[]));
|
||||||
|
|
||||||
|
byte[] m_textureEntry_work = (byte[]) info.GetValue("m_textureEntry", typeof (byte[]));
|
||||||
|
m_textureEntry = new LLObject.TextureEntry(m_textureEntry_work, 0, m_textureEntry_work.Length);
|
||||||
|
|
||||||
|
m_avatarHeight = (float) info.GetValue("m_avatarHeight", typeof (float));
|
||||||
|
|
||||||
|
//System.Console.WriteLine("AvatarAppearance Deserialize END");
|
||||||
|
}
|
||||||
|
|
||||||
|
public LLUUID ScenePresenceID
|
||||||
|
{
|
||||||
|
get { return m_scenePresenceID; }
|
||||||
|
set { m_scenePresenceID = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public int WearablesSerial
|
||||||
|
{
|
||||||
|
get { return m_wearablesSerial; }
|
||||||
|
set { m_wearablesSerial = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] VisualParams
|
||||||
|
{
|
||||||
|
get { return m_visualParams; }
|
||||||
|
set { m_visualParams = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public AvatarWearable[] Wearables
|
||||||
|
{
|
||||||
|
get { return m_wearables; }
|
||||||
|
set { m_wearables = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public LLObject.TextureEntry TextureEntry
|
||||||
|
{
|
||||||
|
get { return m_textureEntry; }
|
||||||
|
set { m_textureEntry = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public float AvatarHeight
|
||||||
|
{
|
||||||
|
get { return m_avatarHeight; }
|
||||||
|
set { m_avatarHeight = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#region ISerializable Members
|
||||||
|
|
||||||
|
[SecurityPermission(SecurityAction.LinkDemand,
|
||||||
|
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
||||||
|
public virtual void GetObjectData(
|
||||||
|
SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
if (info == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("info");
|
||||||
|
}
|
||||||
|
|
||||||
|
info.AddValue("m_scenePresenceID", m_scenePresenceID.UUID);
|
||||||
|
info.AddValue("m_wearablesSerial", m_wearablesSerial);
|
||||||
|
info.AddValue("m_visualParams", m_visualParams);
|
||||||
|
info.AddValue("m_wearables", m_wearables);
|
||||||
|
info.AddValue("m_textureEntry", m_textureEntry.ToBytes());
|
||||||
|
info.AddValue("m_avatarHeight", m_avatarHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -115,8 +156,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Teravus : Nifty AV Height Getting Maaaaagical formula. Oh how we love turning 0-255 into meters.
|
// Teravus : Nifty AV Height Getting Maaaaagical formula. Oh how we love turning 0-255 into meters.
|
||||||
// (float)m_visualParams[25] = Height
|
// (float)m_visualParams[25] = Height
|
||||||
// (float)m_visualParams[125] = LegLength
|
// (float)m_visualParams[125] = LegLength
|
||||||
m_avatarHeight = (1.50856f + (((float) m_visualParams[25]/255.0f)*(2.525506f - 1.50856f)))
|
m_avatarHeight = (1.50856f + ((m_visualParams[25] / 255.0f) * (2.525506f - 1.50856f)))
|
||||||
+ (((float) m_visualParams[125]/255.0f)/1.5f);
|
+ ((m_visualParams[125] / 255.0f) / 1.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -152,45 +193,5 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
textu.CreateFace(6).TextureID = new LLUUID("00000000-0000-1111-9999-000000000011");
|
textu.CreateFace(6).TextureID = new LLUUID("00000000-0000-1111-9999-000000000011");
|
||||||
return textu;
|
return textu;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected AvatarAppearance(SerializationInfo info, StreamingContext context)
|
|
||||||
{
|
|
||||||
//System.Console.WriteLine("AvatarAppearance Deserialize BGN");
|
|
||||||
|
|
||||||
if (info == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("info");
|
|
||||||
}
|
|
||||||
|
|
||||||
m_scenePresenceID = new LLUUID((Guid)info.GetValue("m_scenePresenceID", typeof(Guid)));
|
|
||||||
m_wearablesSerial = (int)info.GetValue("m_wearablesSerial", typeof(int));
|
|
||||||
m_visualParams = (byte[])info.GetValue("m_visualParams", typeof(byte[]));
|
|
||||||
m_wearables = (AvatarWearable[])info.GetValue("m_wearables", typeof(AvatarWearable[]));
|
|
||||||
|
|
||||||
byte[] m_textureEntry_work = (byte[])info.GetValue("m_textureEntry", typeof(byte[]));
|
|
||||||
m_textureEntry = new LLObject.TextureEntry(m_textureEntry_work, 0, m_textureEntry_work.Length);
|
|
||||||
|
|
||||||
m_avatarHeight = (float)info.GetValue("m_avatarHeight", typeof(float));
|
|
||||||
|
|
||||||
//System.Console.WriteLine("AvatarAppearance Deserialize END");
|
|
||||||
}
|
|
||||||
|
|
||||||
[SecurityPermission(SecurityAction.LinkDemand,
|
|
||||||
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
|
||||||
public virtual void GetObjectData(
|
|
||||||
SerializationInfo info, StreamingContext context)
|
|
||||||
{
|
|
||||||
if (info == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("info");
|
|
||||||
}
|
|
||||||
|
|
||||||
info.AddValue("m_scenePresenceID", m_scenePresenceID.UUID);
|
|
||||||
info.AddValue("m_wearablesSerial", m_wearablesSerial);
|
|
||||||
info.AddValue("m_visualParams", m_visualParams);
|
|
||||||
info.AddValue("m_wearables", m_wearables);
|
|
||||||
info.AddValue("m_textureEntry", m_textureEntry.ToBytes());
|
|
||||||
info.AddValue("m_avatarHeight", m_avatarHeight);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -36,70 +36,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public abstract class EntityBase : ISerializable
|
public abstract class EntityBase : ISerializable
|
||||||
{
|
{
|
||||||
|
protected uint m_localId;
|
||||||
|
protected string m_name;
|
||||||
|
protected LLVector3 m_pos;
|
||||||
|
protected Quaternion m_rotation = new Quaternion(0, 0, 1, 0);
|
||||||
|
protected LLVector3 m_rotationalvelocity;
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
|
|
||||||
public Scene Scene
|
|
||||||
{
|
|
||||||
get { return m_scene; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected LLUUID m_uuid;
|
protected LLUUID m_uuid;
|
||||||
|
|
||||||
public virtual LLUUID UUID
|
|
||||||
{
|
|
||||||
get { return m_uuid; }
|
|
||||||
set { m_uuid = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected string m_name;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public virtual string Name
|
|
||||||
{
|
|
||||||
get { return m_name; }
|
|
||||||
set { m_name = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected LLVector3 m_pos;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public virtual LLVector3 AbsolutePosition
|
|
||||||
{
|
|
||||||
get { return m_pos; }
|
|
||||||
set { m_pos = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected LLVector3 m_velocity;
|
protected LLVector3 m_velocity;
|
||||||
protected LLVector3 m_rotationalvelocity;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public virtual LLVector3 Velocity
|
|
||||||
{
|
|
||||||
get { return m_velocity; }
|
|
||||||
set { m_velocity = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Quaternion m_rotation = new Quaternion(0, 0, 1, 0);
|
|
||||||
|
|
||||||
public virtual Quaternion Rotation
|
|
||||||
{
|
|
||||||
get { return m_rotation; }
|
|
||||||
set { m_rotation = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected uint m_localId;
|
|
||||||
|
|
||||||
public virtual uint LocalId
|
|
||||||
{
|
|
||||||
get { return m_localId; }
|
|
||||||
set { m_localId = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new Entity (should not occur on it's own)
|
/// Creates a new Entity (should not occur on it's own)
|
||||||
|
@ -115,28 +60,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_rotationalvelocity = new LLVector3(0, 0, 0);
|
m_rotationalvelocity = new LLVector3(0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public abstract void UpdateMovement();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Performs any updates that need to be done at each frame.
|
|
||||||
/// </summary>
|
|
||||||
public abstract void Update();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Copies the entity
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public virtual EntityBase Copy()
|
|
||||||
{
|
|
||||||
return (EntityBase) MemberwiseClone();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public abstract void SetText(string text, Vector3 color, double alpha);
|
|
||||||
|
|
||||||
protected EntityBase(SerializationInfo info, StreamingContext context)
|
protected EntityBase(SerializationInfo info, StreamingContext context)
|
||||||
{
|
{
|
||||||
//System.Console.WriteLine("EntityBase Deserialize BGN");
|
//System.Console.WriteLine("EntityBase Deserialize BGN");
|
||||||
|
@ -146,39 +69,91 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
throw new ArgumentNullException("info");
|
throw new ArgumentNullException("info");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_uuid = new LLUUID((Guid)info.GetValue("m_uuid", typeof(Guid)));
|
m_uuid = new LLUUID((Guid) info.GetValue("m_uuid", typeof (Guid)));
|
||||||
m_name = (string)info.GetValue("m_name", typeof(string));
|
m_name = (string) info.GetValue("m_name", typeof (string));
|
||||||
|
|
||||||
m_pos
|
m_pos
|
||||||
= new LLVector3(
|
= new LLVector3(
|
||||||
(float)info.GetValue("m_pos.X", typeof(float)),
|
(float) info.GetValue("m_pos.X", typeof (float)),
|
||||||
(float)info.GetValue("m_pos.Y", typeof(float)),
|
(float) info.GetValue("m_pos.Y", typeof (float)),
|
||||||
(float)info.GetValue("m_pos.Z", typeof(float)));
|
(float) info.GetValue("m_pos.Z", typeof (float)));
|
||||||
|
|
||||||
m_velocity
|
m_velocity
|
||||||
= new LLVector3(
|
= new LLVector3(
|
||||||
(float)info.GetValue("m_velocity.X", typeof(float)),
|
(float) info.GetValue("m_velocity.X", typeof (float)),
|
||||||
(float)info.GetValue("m_velocity.Y", typeof(float)),
|
(float) info.GetValue("m_velocity.Y", typeof (float)),
|
||||||
(float)info.GetValue("m_velocity.Z", typeof(float)));
|
(float) info.GetValue("m_velocity.Z", typeof (float)));
|
||||||
|
|
||||||
m_rotationalvelocity
|
m_rotationalvelocity
|
||||||
= new LLVector3(
|
= new LLVector3(
|
||||||
(float)info.GetValue("m_rotationalvelocity.X", typeof(float)),
|
(float) info.GetValue("m_rotationalvelocity.X", typeof (float)),
|
||||||
(float)info.GetValue("m_rotationalvelocity.Y", typeof(float)),
|
(float) info.GetValue("m_rotationalvelocity.Y", typeof (float)),
|
||||||
(float)info.GetValue("m_rotationalvelocity.Z", typeof(float)));
|
(float) info.GetValue("m_rotationalvelocity.Z", typeof (float)));
|
||||||
|
|
||||||
m_rotation
|
m_rotation
|
||||||
= new Quaternion(
|
= new Quaternion(
|
||||||
(float)info.GetValue("m_rotation.w", typeof(float)),
|
(float) info.GetValue("m_rotation.w", typeof (float)),
|
||||||
(float)info.GetValue("m_rotation.x", typeof(float)),
|
(float) info.GetValue("m_rotation.x", typeof (float)),
|
||||||
(float)info.GetValue("m_rotation.y", typeof(float)),
|
(float) info.GetValue("m_rotation.y", typeof (float)),
|
||||||
(float)info.GetValue("m_rotation.z", typeof(float)));
|
(float) info.GetValue("m_rotation.z", typeof (float)));
|
||||||
|
|
||||||
m_localId = (uint)info.GetValue("m_localId", typeof(uint));
|
m_localId = (uint) info.GetValue("m_localId", typeof (uint));
|
||||||
|
|
||||||
//System.Console.WriteLine("EntityBase Deserialize END");
|
//System.Console.WriteLine("EntityBase Deserialize END");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Scene Scene
|
||||||
|
{
|
||||||
|
get { return m_scene; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual LLUUID UUID
|
||||||
|
{
|
||||||
|
get { return m_uuid; }
|
||||||
|
set { m_uuid = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public virtual string Name
|
||||||
|
{
|
||||||
|
get { return m_name; }
|
||||||
|
set { m_name = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public virtual LLVector3 AbsolutePosition
|
||||||
|
{
|
||||||
|
get { return m_pos; }
|
||||||
|
set { m_pos = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public virtual LLVector3 Velocity
|
||||||
|
{
|
||||||
|
get { return m_velocity; }
|
||||||
|
set { m_velocity = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Quaternion Rotation
|
||||||
|
{
|
||||||
|
get { return m_rotation; }
|
||||||
|
set { m_rotation = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual uint LocalId
|
||||||
|
{
|
||||||
|
get { return m_localId; }
|
||||||
|
set { m_localId = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#region ISerializable Members
|
||||||
|
|
||||||
[SecurityPermission(SecurityAction.LinkDemand,
|
[SecurityPermission(SecurityAction.LinkDemand,
|
||||||
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
||||||
public virtual void GetObjectData(
|
public virtual void GetObjectData(
|
||||||
|
@ -215,18 +190,42 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
info.AddValue("m_localId", m_localId);
|
info.AddValue("m_localId", m_localId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public abstract void UpdateMovement();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Performs any updates that need to be done at each frame.
|
||||||
|
/// </summary>
|
||||||
|
public abstract void Update();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Copies the entity
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public virtual EntityBase Copy()
|
||||||
|
{
|
||||||
|
return (EntityBase) MemberwiseClone();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public abstract void SetText(string text, Vector3 color, double alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Nested Classes
|
//Nested Classes
|
||||||
public class EntityIntersection
|
public class EntityIntersection
|
||||||
{
|
{
|
||||||
|
public Vector3 AAfaceNormal = new Vector3(0, 0, 0);
|
||||||
|
public float distance;
|
||||||
|
public int face = -1;
|
||||||
|
public bool HitTF;
|
||||||
public Vector3 ipoint = new Vector3(0, 0, 0);
|
public Vector3 ipoint = new Vector3(0, 0, 0);
|
||||||
public Vector3 normal = new Vector3(0, 0, 0);
|
public Vector3 normal = new Vector3(0, 0, 0);
|
||||||
public Vector3 AAfaceNormal = new Vector3(0, 0, 0);
|
|
||||||
public int face = -1;
|
|
||||||
public bool HitTF = false;
|
|
||||||
public SceneObjectPart obj;
|
public SceneObjectPart obj;
|
||||||
public float distance = 0;
|
|
||||||
|
|
||||||
public EntityIntersection()
|
public EntityIntersection()
|
||||||
{
|
{
|
||||||
|
|
|
@ -46,36 +46,33 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#region Events
|
#region Events
|
||||||
|
|
||||||
|
private PhysicsCrash handlerPhysicsCrash;
|
||||||
public event PhysicsCrash UnRecoverableError;
|
public event PhysicsCrash UnRecoverableError;
|
||||||
private PhysicsCrash handlerPhysicsCrash = null;
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
public Dictionary<LLUUID, ScenePresence> ScenePresences;
|
|
||||||
// SceneObjects is not currently populated or used.
|
// SceneObjects is not currently populated or used.
|
||||||
//public Dictionary<LLUUID, SceneObjectGroup> SceneObjects;
|
//public Dictionary<LLUUID, SceneObjectGroup> SceneObjects;
|
||||||
|
public PhysicsScene _PhyScene;
|
||||||
public Dictionary<LLUUID, EntityBase> Entities;
|
public Dictionary<LLUUID, EntityBase> Entities;
|
||||||
public Dictionary<LLUUID, ScenePresence> RestorePresences;
|
protected int m_activeScripts;
|
||||||
|
protected int m_numChildAgents;
|
||||||
public BasicQuadTreeNode QuadTree;
|
protected int m_numPrim;
|
||||||
|
protected int m_numRootAgents;
|
||||||
protected RegionInfo m_regInfo;
|
|
||||||
protected Scene m_parentScene;
|
protected Scene m_parentScene;
|
||||||
protected PermissionManager PermissionsMngr;
|
protected int m_physicalPrim;
|
||||||
protected List<EntityBase> m_updateList = new List<EntityBase>();
|
protected RegionInfo m_regInfo;
|
||||||
protected int m_numRootAgents = 0;
|
|
||||||
protected int m_numPrim = 0;
|
|
||||||
protected int m_numChildAgents = 0;
|
|
||||||
protected int m_physicalPrim = 0;
|
|
||||||
|
|
||||||
protected int m_activeScripts = 0;
|
protected int m_scriptLPS;
|
||||||
protected int m_scriptLPS = 0;
|
|
||||||
|
|
||||||
internal object m_syncRoot = new object();
|
internal object m_syncRoot = new object();
|
||||||
|
protected List<EntityBase> m_updateList = new List<EntityBase>();
|
||||||
public PhysicsScene _PhyScene;
|
protected PermissionManager PermissionsMngr;
|
||||||
|
public BasicQuadTreeNode QuadTree;
|
||||||
|
public Dictionary<LLUUID, ScenePresence> RestorePresences;
|
||||||
|
public Dictionary<LLUUID, ScenePresence> ScenePresences;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -84,7 +81,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_parentScene = parent;
|
m_parentScene = parent;
|
||||||
m_regInfo = regInfo;
|
m_regInfo = regInfo;
|
||||||
PermissionsMngr = permissionsMngr;
|
PermissionsMngr = permissionsMngr;
|
||||||
QuadTree = new BasicQuadTreeNode(null, "/0/", 0, 0, (short)Constants.RegionSize, (short)Constants.RegionSize);
|
QuadTree = new BasicQuadTreeNode(null, "/0/", 0, 0, (short) Constants.RegionSize, (short) Constants.RegionSize);
|
||||||
QuadTree.Subdivide();
|
QuadTree.Subdivide();
|
||||||
QuadTree.Subdivide();
|
QuadTree.Subdivide();
|
||||||
}
|
}
|
||||||
|
@ -162,7 +159,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
lock (m_syncRoot)
|
lock (m_syncRoot)
|
||||||
{
|
{
|
||||||
return _PhyScene.Simulate((float)elapsed);
|
return _PhyScene.Simulate((float) elapsed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +184,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
foreach (SceneObjectPart part in sceneObject.Children.Values)
|
foreach (SceneObjectPart part in sceneObject.Children.Values)
|
||||||
{
|
{
|
||||||
part.LocalId = m_parentScene.PrimIDAllocate();
|
part.LocalId = m_parentScene.PrimIDAllocate();
|
||||||
|
|
||||||
}
|
}
|
||||||
sceneObject.UpdateParentIDs();
|
sceneObject.UpdateParentIDs();
|
||||||
AddEntity(sceneObject);
|
AddEntity(sceneObject);
|
||||||
|
@ -249,7 +245,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[INNER SCENE]: Failed to update {0}, - {1}", entity.Name, e);//entity.m_uuid
|
m_log.ErrorFormat("[INNER SCENE]: Failed to update {0}, - {1}", entity.Name, e); //entity.m_uuid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_updateList.Clear();
|
m_updateList.Clear();
|
||||||
|
@ -284,15 +280,16 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (obj is SceneObjectGroup)
|
if (obj is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)obj).LocalId == localID)
|
if ((obj).LocalId == localID)
|
||||||
{
|
{
|
||||||
m_parentScene.RemoveEntity((SceneObjectGroup)obj);
|
m_parentScene.RemoveEntity((SceneObjectGroup) obj);
|
||||||
m_numPrim--;
|
m_numPrim--;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DetachObject(uint objectLocalID, IClientAPI remoteClient)
|
public void DetachObject(uint objectLocalID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
List<EntityBase> EntityList = GetEntities();
|
List<EntityBase> EntityList = GetEntities();
|
||||||
|
@ -301,16 +298,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (obj is SceneObjectGroup)
|
if (obj is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)obj).LocalId == objectLocalID)
|
if ((obj).LocalId == objectLocalID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = (SceneObjectGroup)obj;
|
SceneObjectGroup group = (SceneObjectGroup) obj;
|
||||||
|
|
||||||
//group.DetachToGround();
|
//group.DetachToGround();
|
||||||
DetachSingleAttachmentToInv(group.GetFromAssetID(),remoteClient);
|
DetachSingleAttachmentToInv(group.GetFromAssetID(), remoteClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleUndo(IClientAPI remoteClient, LLUUID primId)
|
public void HandleUndo(IClientAPI remoteClient, LLUUID primId)
|
||||||
|
@ -320,10 +316,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId);
|
SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
part.Undo();
|
part.Undo();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -338,27 +331,29 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Calls attach with a Zero position
|
// Calls attach with a Zero position
|
||||||
AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, LLVector3.Zero);
|
AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, LLVector3.Zero);
|
||||||
}
|
}
|
||||||
public void RezSingleAttachment(IClientAPI remoteClient, LLUUID itemID, uint AttachmentPt,uint ItemFlags, uint NextOwnerMask)
|
|
||||||
|
public void RezSingleAttachment(IClientAPI remoteClient, LLUUID itemID, uint AttachmentPt, uint ItemFlags, uint NextOwnerMask)
|
||||||
{
|
{
|
||||||
SceneObjectGroup objatt = m_parentScene.RezObject(remoteClient, itemID, LLVector3.Zero, LLVector3.Zero, LLUUID.Zero, (byte)1, true,
|
SceneObjectGroup objatt = m_parentScene.RezObject(remoteClient, itemID, LLVector3.Zero, LLVector3.Zero, LLUUID.Zero, 1, true,
|
||||||
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
(uint)
|
||||||
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
||||||
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
(uint)
|
||||||
|
(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
||||||
|
(uint)
|
||||||
|
(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
||||||
ItemFlags, false, false, remoteClient.AgentId, true);
|
ItemFlags, false, false, remoteClient.AgentId, true);
|
||||||
|
|
||||||
if (objatt != null)
|
if (objatt != null)
|
||||||
{
|
{
|
||||||
AttachObject(remoteClient,objatt.LocalId,AttachmentPt,new LLQuaternion(0,0,0,1),objatt.AbsolutePosition);
|
AttachObject(remoteClient, objatt.LocalId, AttachmentPt, new LLQuaternion(0, 0, 0, 1), objatt.AbsolutePosition);
|
||||||
objatt.ScheduleGroupForFullUpdate();
|
objatt.ScheduleGroupForFullUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// What makes this method odd and unique is it tries to detach using an LLUUID.... Yay for standards.
|
// What makes this method odd and unique is it tries to detach using an LLUUID.... Yay for standards.
|
||||||
// To LocalId or LLUUID, *THAT* is the question. How now Brown LLUUID??
|
// To LocalId or LLUUID, *THAT* is the question. How now Brown LLUUID??
|
||||||
public void DetachSingleAttachmentToInv(LLUUID itemID, IClientAPI remoteClient)
|
public void DetachSingleAttachmentToInv(LLUUID itemID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (itemID == LLUUID.Zero) // If this happened, someone made a mistake....
|
if (itemID == LLUUID.Zero) // If this happened, someone made a mistake....
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -368,17 +363,16 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (obj is SceneObjectGroup)
|
if (obj is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)obj).GetFromAssetID() == itemID)
|
if (((SceneObjectGroup) obj).GetFromAssetID() == itemID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = (SceneObjectGroup)obj;
|
SceneObjectGroup group = (SceneObjectGroup) obj;
|
||||||
group.DetachToInventoryPrep();
|
group.DetachToInventoryPrep();
|
||||||
m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint)group.GetAttachmentPoint()).ToString());
|
m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint) group.GetAttachmentPoint()));
|
||||||
m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(),group.OwnerID);
|
m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(), group.OwnerID);
|
||||||
m_parentScene.DeleteSceneObjectGroup(group);
|
m_parentScene.DeleteSceneObjectGroup(group);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, LLVector3 attachPos)
|
public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, LLVector3 attachPos)
|
||||||
|
@ -388,38 +382,33 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (obj is SceneObjectGroup)
|
if (obj is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)obj).LocalId == objectLocalID)
|
if ((obj).LocalId == objectLocalID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = (SceneObjectGroup)obj;
|
SceneObjectGroup group = (SceneObjectGroup) obj;
|
||||||
|
|
||||||
// If the attachment point isn't the same as the one previously used
|
// If the attachment point isn't the same as the one previously used
|
||||||
// set it's offset position = 0 so that it appears on the attachment point
|
// set it's offset position = 0 so that it appears on the attachment point
|
||||||
// and not in a weird location somewhere unknown.
|
// and not in a weird location somewhere unknown.
|
||||||
if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint())
|
if (AttachmentPt != 0 && AttachmentPt != group.GetAttachmentPoint())
|
||||||
{
|
{
|
||||||
|
|
||||||
attachPos = LLVector3.Zero;
|
attachPos = LLVector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
// AttachmentPt 0 means the client chose to 'wear' the attachment.
|
// AttachmentPt 0 means the client chose to 'wear' the attachment.
|
||||||
if (AttachmentPt == 0)
|
if (AttachmentPt == 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Check object for stored attachment point
|
// Check object for stored attachment point
|
||||||
AttachmentPt = (uint)group.GetAttachmentPoint();
|
AttachmentPt = group.GetAttachmentPoint();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we still didn't find a suitable attachment point.......
|
// if we still didn't find a suitable attachment point.......
|
||||||
if (AttachmentPt == 0)
|
if (AttachmentPt == 0)
|
||||||
{
|
{
|
||||||
// Stick it on left hand with Zero Offset from the attachment point.
|
// Stick it on left hand with Zero Offset from the attachment point.
|
||||||
AttachmentPt = (uint)AttachmentPoint.LeftHand;
|
AttachmentPt = (uint) AttachmentPoint.LeftHand;
|
||||||
attachPos = LLVector3.Zero;
|
attachPos = LLVector3.Zero;
|
||||||
}
|
}
|
||||||
m_log.Debug("[ATTACH]: Using attachpoint: " + AttachmentPt.ToString());
|
m_log.Debug("[ATTACH]: Using attachpoint: " + AttachmentPt);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Saves and gets assetID
|
// Saves and gets assetID
|
||||||
|
@ -431,13 +420,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
group.SetFromAssetID(newAssetID);
|
group.SetFromAssetID(newAssetID);
|
||||||
}
|
}
|
||||||
group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos);
|
group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
// Use the above method.
|
// Use the above method.
|
||||||
public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot,
|
public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot,
|
||||||
bool deadMethod)
|
bool deadMethod)
|
||||||
|
@ -489,7 +476,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
objupdate.ObjectData[0].ParentID = 0;
|
objupdate.ObjectData[0].ParentID = 0;
|
||||||
objupdate.ObjectData[0].OwnerID = LLUUID.Zero;
|
objupdate.ObjectData[0].OwnerID = LLUUID.Zero;
|
||||||
objupdate.ObjectData[0].Scale = new LLVector3(1, 1, 1);
|
objupdate.ObjectData[0].Scale = new LLVector3(1, 1, 1);
|
||||||
objupdate.ObjectData[0].PCode = (byte)PCode.Avatar;
|
objupdate.ObjectData[0].PCode = (byte) PCode.Avatar;
|
||||||
objupdate.ObjectData[0].TextureEntry = ScenePresence.DefaultTexture;
|
objupdate.ObjectData[0].TextureEntry = ScenePresence.DefaultTexture;
|
||||||
|
|
||||||
objupdate.ObjectData[0].ID = av.LocalId;
|
objupdate.ObjectData[0].ID = av.LocalId;
|
||||||
|
@ -529,7 +516,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
objupdate.ObjectData[1].TextureEntry = primData.TextureEntry;
|
objupdate.ObjectData[1].TextureEntry = primData.TextureEntry;
|
||||||
objupdate.ObjectData[1].PCode = primData.PCode;
|
objupdate.ObjectData[1].PCode = primData.PCode;
|
||||||
objupdate.ObjectData[1].State = (byte)(((byte)AttachmentPt) << 4);
|
objupdate.ObjectData[1].State = (byte) (((byte) AttachmentPt) << 4);
|
||||||
objupdate.ObjectData[1].PathBegin = primData.PathBegin;
|
objupdate.ObjectData[1].PathBegin = primData.PathBegin;
|
||||||
objupdate.ObjectData[1].PathEnd = primData.PathEnd;
|
objupdate.ObjectData[1].PathEnd = primData.PathEnd;
|
||||||
objupdate.ObjectData[1].PathScaleX = primData.PathScaleX;
|
objupdate.ObjectData[1].PathScaleX = primData.PathScaleX;
|
||||||
|
@ -567,7 +554,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
objupdate.ObjectData[1].Radius = 20;
|
objupdate.ObjectData[1].Radius = 20;
|
||||||
objupdate.ObjectData[1].NameValue =
|
objupdate.ObjectData[1].NameValue =
|
||||||
Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID);
|
Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID);
|
||||||
LLVector3 pos = new LLVector3((float)0.0, (float)0.0, (float)0.0);
|
LLVector3 pos = new LLVector3((float) 0.0, (float) 0.0, (float) 0.0);
|
||||||
|
|
||||||
pb = pos.GetBytes();
|
pb = pos.GetBytes();
|
||||||
Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length);
|
Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length);
|
||||||
|
@ -738,6 +725,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_scriptLPS = 0;
|
m_scriptLPS = 0;
|
||||||
return returnval;
|
return returnval;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Get Methods
|
#region Get Methods
|
||||||
|
@ -831,8 +819,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)ent).HasChildPrim(localID))
|
if (((SceneObjectGroup) ent).HasChildPrim(localID))
|
||||||
return (SceneObjectGroup)ent;
|
return (SceneObjectGroup) ent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -846,8 +834,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)ent).HasChildPrim(fullID))
|
if (((SceneObjectGroup) ent).HasChildPrim(fullID))
|
||||||
return (SceneObjectGroup)ent;
|
return (SceneObjectGroup) ent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -862,7 +850,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
SceneObjectGroup reportingG = (SceneObjectGroup)ent;
|
SceneObjectGroup reportingG = (SceneObjectGroup) ent;
|
||||||
EntityIntersection result = reportingG.TestIntersection(hray, frontFacesOnly, faceCenters);
|
EntityIntersection result = reportingG.TestIntersection(hray, frontFacesOnly, faceCenters);
|
||||||
if (result.HitTF)
|
if (result.HitTF)
|
||||||
{
|
{
|
||||||
|
@ -987,8 +975,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
if (presence.IsChildAgent && m_parentScene.m_seeIntoRegionFromNeighbor)
|
if (presence.IsChildAgent && m_parentScene.m_seeIntoRegionFromNeighbor)
|
||||||
{
|
{
|
||||||
LLVector3 oLoc = ((SceneObjectGroup)ent).AbsolutePosition;
|
LLVector3 oLoc = (ent).AbsolutePosition;
|
||||||
float distResult = (float)Util.GetDistanceTo(presence.AbsolutePosition, oLoc);
|
float distResult = (float) Util.GetDistanceTo(presence.AbsolutePosition, oLoc);
|
||||||
|
|
||||||
//m_log.Info("[DISTANCE]: " + distResult.ToString());
|
//m_log.Info("[DISTANCE]: " + distResult.ToString());
|
||||||
|
|
||||||
|
@ -996,13 +984,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
// Send Only if we don't already know about it.
|
// Send Only if we don't already know about it.
|
||||||
// KnownPrim also makes the prim known when called.
|
// KnownPrim also makes the prim known when called.
|
||||||
if (!presence.KnownPrim(((SceneObjectGroup)ent).UUID))
|
if (!presence.KnownPrim((ent).UUID))
|
||||||
((SceneObjectGroup)ent).ScheduleFullUpdateToAvatar(presence);
|
((SceneObjectGroup) ent).ScheduleFullUpdateToAvatar(presence);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
((SceneObjectGroup)ent).ScheduleFullUpdateToAvatar(presence);
|
((SceneObjectGroup) ent).ScheduleFullUpdateToAvatar(presence);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1037,6 +1025,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdatePrimGroupScale(uint localID, LLVector3 scale, IClientAPI remoteClient)
|
public void UpdatePrimGroupScale(uint localID, LLVector3 scale, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = GetGroupByPrim(localID);
|
SceneObjectGroup group = GetGroupByPrim(localID);
|
||||||
|
@ -1151,7 +1140,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SceneObjectGroup group = GetGroupByPrim(localID);
|
SceneObjectGroup group = GetGroupByPrim(localID);
|
||||||
if (group != null)
|
if (group != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
LLVector3 oldPos = group.AbsolutePosition;
|
LLVector3 oldPos = group.AbsolutePosition;
|
||||||
if (group.RootPart.m_IsAttachment)
|
if (group.RootPart.m_IsAttachment)
|
||||||
{
|
{
|
||||||
|
@ -1203,7 +1191,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (PermissionsMngr.CanEditObject(remoteClient.AgentId, group.UUID))
|
if (PermissionsMngr.CanEditObject(remoteClient.AgentId, group.UUID))
|
||||||
{
|
{
|
||||||
group.UpdatePrimFlags(localID, (ushort)packet.Type, true, packet.ToBytes());
|
group.UpdatePrimFlags(localID, (ushort) packet.Type, true, packet.ToBytes());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1213,7 +1201,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SceneObjectGroup group = GetGroupByPrim(objectID);
|
SceneObjectGroup group = GetGroupByPrim(objectID);
|
||||||
if (group != null)
|
if (group != null)
|
||||||
{
|
{
|
||||||
if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID))// && PermissionsMngr.)
|
if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) // && PermissionsMngr.)
|
||||||
{
|
{
|
||||||
group.GrabMovement(offset, pos, remoteClient);
|
group.GrabMovement(offset, pos, remoteClient);
|
||||||
}
|
}
|
||||||
|
@ -1304,9 +1292,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)ent).LocalId == parentPrim)
|
if ((ent).LocalId == parentPrim)
|
||||||
{
|
{
|
||||||
parenPrim = (SceneObjectGroup)ent;
|
parenPrim = (SceneObjectGroup) ent;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1321,9 +1309,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)ent).LocalId == childPrims[i])
|
if ((ent).LocalId == childPrims[i])
|
||||||
{
|
{
|
||||||
children.Add((SceneObjectGroup)ent);
|
children.Add((SceneObjectGroup) ent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1360,19 +1348,16 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
SceneObjectGroup obj = (SceneObjectGroup)ent;
|
SceneObjectGroup obj = (SceneObjectGroup) ent;
|
||||||
sceneObjects.Add(obj.LocalId, obj);
|
sceneObjects.Add(obj.LocalId, obj);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the root prim among the prim ids we've been given
|
// Find the root prim among the prim ids we've been given
|
||||||
for (int i = 0; i < primIds.Count; i++)
|
for (int i = 0; i < primIds.Count; i++)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (sceneObjects.ContainsKey(primIds[i]))
|
if (sceneObjects.ContainsKey(primIds[i]))
|
||||||
{
|
{
|
||||||
|
|
||||||
parenPrim = sceneObjects[primIds[i]];
|
parenPrim = sceneObjects[primIds[i]];
|
||||||
primIds.RemoveAt(i);
|
primIds.RemoveAt(i);
|
||||||
break;
|
break;
|
||||||
|
@ -1402,7 +1387,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
grp.DelinkFromGroup(primIds[i]);
|
grp.DelinkFromGroup(primIds[i]);
|
||||||
delinkedSomething = true;
|
delinkedSomething = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!delinkedSomething)
|
if (!delinkedSomething)
|
||||||
|
@ -1425,7 +1409,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<LLUUID, SceneObjectPart> subent in ((SceneObjectGroup)ent).Children)
|
foreach (KeyValuePair<LLUUID, SceneObjectPart> subent in ((SceneObjectGroup) ent).Children)
|
||||||
{
|
{
|
||||||
if (subent.Value.LocalId == localID)
|
if (subent.Value.LocalId == localID)
|
||||||
{
|
{
|
||||||
|
@ -1475,9 +1459,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)ent).LocalId == originalPrim)
|
if ((ent).LocalId == originalPrim)
|
||||||
{
|
{
|
||||||
originPrim = (SceneObjectGroup)ent;
|
originPrim = (SceneObjectGroup) ent;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -298,7 +298,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IAgentAssetTransactions agentTransactions = this.RequestModuleInterface<IAgentAssetTransactions>();
|
IAgentAssetTransactions agentTransactions = RequestModuleInterface<IAgentAssetTransactions>();
|
||||||
if (agentTransactions != null)
|
if (agentTransactions != null)
|
||||||
{
|
{
|
||||||
agentTransactions.HandleItemUpdateFromTransaction(
|
agentTransactions.HandleItemUpdateFromTransaction(
|
||||||
|
@ -395,7 +395,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemId.ToString() + ", no root folder");
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemId + ", no root folder");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -413,7 +413,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(oldAgentID);
|
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(oldAgentID);
|
||||||
if (userInfo == null)
|
if (userInfo == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find user " + oldAgentID.ToString());
|
m_log.Error("[AGENT INVENTORY]: Failed to find user " + oldAgentID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -422,20 +422,20 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
item = userInfo.RootFolder.HasItem(oldItemID);
|
item = userInfo.RootFolder.HasItem(oldItemID);
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString());
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString());
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetBase asset
|
AssetBase asset
|
||||||
= AssetCache.GetAsset(
|
= AssetCache.GetAsset(
|
||||||
item.AssetID, (item.AssetType == (int)AssetType.Texture ? true : false));
|
item.AssetID, (item.AssetType == (int) AssetType.Texture ? true : false));
|
||||||
|
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
{
|
{
|
||||||
|
@ -472,7 +472,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
if (userInfo == null)
|
if (userInfo == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString());
|
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,13 +493,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString());
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString() + ", no root folder");
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID + ", no root folder");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -575,14 +575,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
ScenePresence presence;
|
ScenePresence presence;
|
||||||
TryGetAvatar(remoteClient.AgentId, out presence);
|
TryGetAvatar(remoteClient.AgentId, out presence);
|
||||||
byte[] data = null;
|
byte[] data = null;
|
||||||
if(invType == 3 && presence != null) // libsecondlife.asset.assettype.landmark = 3 - needs to be turned into an enum
|
if (invType == 3 && presence != null) // libsecondlife.asset.assettype.landmark = 3 - needs to be turned into an enum
|
||||||
{
|
{
|
||||||
LLVector3 pos=presence.AbsolutePosition;
|
LLVector3 pos = presence.AbsolutePosition;
|
||||||
string strdata=String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n",
|
string strdata = String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n",
|
||||||
presence.Scene.RegionInfo.RegionID,
|
presence.Scene.RegionInfo.RegionID,
|
||||||
pos.X, pos.Y, pos.Z,
|
pos.X, pos.Y, pos.Z,
|
||||||
presence.RegionHandle);
|
presence.RegionHandle);
|
||||||
data=Encoding.ASCII.GetBytes(strdata);
|
data = Encoding.ASCII.GetBytes(strdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetBase asset = CreateAsset(name, description, invType, assetType, data);
|
AssetBase asset = CreateAsset(name, description, invType, assetType, data);
|
||||||
|
@ -599,15 +599,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IAgentAssetTransactions agentTransactions = this.RequestModuleInterface<IAgentAssetTransactions>();
|
IAgentAssetTransactions agentTransactions = RequestModuleInterface<IAgentAssetTransactions>();
|
||||||
if (agentTransactions != null)
|
if (agentTransactions != null)
|
||||||
{
|
{
|
||||||
agentTransactions.HandleItemCreationFromTransaction(
|
agentTransactions.HandleItemCreationFromTransaction(
|
||||||
remoteClient, transactionID, folderID, callbackID, description,
|
remoteClient, transactionID, folderID, callbackID, description,
|
||||||
name, invType, assetType, wearableType, nextOwnerMask);
|
name, invType, assetType, wearableType, nextOwnerMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -617,7 +615,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
if (userInfo == null)
|
if (userInfo == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString());
|
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -641,7 +639,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
if (userInfo == null)
|
if (userInfo == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString());
|
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -784,7 +782,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
agentItem.Folder = folderId;
|
agentItem.Folder = folderId;
|
||||||
agentItem.EveryOnePermissions = taskItem.EveryoneMask;
|
agentItem.EveryOnePermissions = taskItem.EveryoneMask;
|
||||||
|
|
||||||
if (remoteClient.AgentId != taskItem.OwnerID) {
|
if (remoteClient.AgentId != taskItem.OwnerID)
|
||||||
|
{
|
||||||
agentItem.BasePermissions = taskItem.NextOwnerMask;
|
agentItem.BasePermissions = taskItem.NextOwnerMask;
|
||||||
agentItem.CurrentPermissions = taskItem.NextOwnerMask;
|
agentItem.CurrentPermissions = taskItem.NextOwnerMask;
|
||||||
agentItem.NextPermissions = taskItem.NextOwnerMask;
|
agentItem.NextPermissions = taskItem.NextOwnerMask;
|
||||||
|
@ -959,14 +958,16 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
bool permission;
|
bool permission;
|
||||||
if (DeRezPacket.AgentBlock.Destination == 1)
|
if (DeRezPacket.AgentBlock.Destination == 1)
|
||||||
{ // Take Copy
|
{
|
||||||
|
// Take Copy
|
||||||
permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId,
|
permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId,
|
||||||
((SceneObjectGroup) selectedEnt).UUID);
|
(selectedEnt).UUID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // Take
|
{
|
||||||
|
// Take
|
||||||
permission = PermissionsMngr.CanDeRezObject(remoteClient.AgentId,
|
permission = PermissionsMngr.CanDeRezObject(remoteClient.AgentId,
|
||||||
((SceneObjectGroup) selectedEnt).UUID);
|
(selectedEnt).UUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (permission)
|
if (permission)
|
||||||
|
@ -997,7 +998,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
item.InvType = asset.InvType;
|
item.InvType = asset.InvType;
|
||||||
item.Folder = DeRezPacket.AgentBlock.DestinationID;
|
item.Folder = DeRezPacket.AgentBlock.DestinationID;
|
||||||
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
||||||
if (remoteClient.AgentId != objectGroup.RootPart.OwnerID) {
|
if (remoteClient.AgentId != objectGroup.RootPart.OwnerID)
|
||||||
|
{
|
||||||
item.BasePermissions = objectGroup.RootPart.NextOwnerMask;
|
item.BasePermissions = objectGroup.RootPart.NextOwnerMask;
|
||||||
item.CurrentPermissions = objectGroup.RootPart.NextOwnerMask;
|
item.CurrentPermissions = objectGroup.RootPart.NextOwnerMask;
|
||||||
item.NextPermissions = objectGroup.RootPart.NextOwnerMask;
|
item.NextPermissions = objectGroup.RootPart.NextOwnerMask;
|
||||||
|
@ -1025,6 +1027,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateKnownAsset(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID assetID, LLUUID agentID)
|
public void updateKnownAsset(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID assetID, LLUUID agentID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup objectGroup = grp;
|
SceneObjectGroup objectGroup = grp;
|
||||||
|
@ -1044,7 +1047,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// search through folders to find the asset.
|
// search through folders to find the asset.
|
||||||
while (searchfolders.Count > 0)
|
while (searchfolders.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
InventoryFolderImpl fld = searchfolders.Dequeue();
|
InventoryFolderImpl fld = searchfolders.Dequeue();
|
||||||
lock (fld)
|
lock (fld)
|
||||||
{
|
{
|
||||||
|
@ -1069,8 +1071,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
AssetBase asset = CreateAsset(
|
AssetBase asset = CreateAsset(
|
||||||
objectGroup.GetPartName(objectGroup.LocalId),
|
objectGroup.GetPartName(objectGroup.LocalId),
|
||||||
objectGroup.GetPartDescription(objectGroup.LocalId),
|
objectGroup.GetPartDescription(objectGroup.LocalId),
|
||||||
(sbyte)InventoryType.Object,
|
(sbyte) InventoryType.Object,
|
||||||
(sbyte)AssetType.Object,
|
(sbyte) AssetType.Object,
|
||||||
Helpers.StringToField(sceneObjectXml));
|
Helpers.StringToField(sceneObjectXml));
|
||||||
AssetCache.AddAsset(asset);
|
AssetCache.AddAsset(asset);
|
||||||
|
|
||||||
|
@ -1086,7 +1088,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
// Sticking it in root folder for now.. objects folder later?
|
// Sticking it in root folder for now.. objects folder later?
|
||||||
|
|
||||||
item.Folder = foundFolder;// DeRezPacket.AgentBlock.DestinationID;
|
item.Folder = foundFolder; // DeRezPacket.AgentBlock.DestinationID;
|
||||||
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
||||||
if (agentID != objectGroup.RootPart.OwnerID)
|
if (agentID != objectGroup.RootPart.OwnerID)
|
||||||
{
|
{
|
||||||
|
@ -1108,10 +1110,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
remoteClient.SendInventoryItemCreateUpdate(item);
|
remoteClient.SendInventoryItemCreateUpdate(item);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public LLUUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID AgentId)
|
public LLUUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID AgentId)
|
||||||
{
|
{
|
||||||
SceneObjectGroup objectGroup = grp;
|
SceneObjectGroup objectGroup = grp;
|
||||||
|
@ -1126,8 +1128,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
AssetBase asset = CreateAsset(
|
AssetBase asset = CreateAsset(
|
||||||
objectGroup.GetPartName(objectGroup.LocalId),
|
objectGroup.GetPartName(objectGroup.LocalId),
|
||||||
objectGroup.GetPartDescription(objectGroup.LocalId),
|
objectGroup.GetPartDescription(objectGroup.LocalId),
|
||||||
(sbyte)InventoryType.Object,
|
(sbyte) InventoryType.Object,
|
||||||
(sbyte)AssetType.Object,
|
(sbyte) AssetType.Object,
|
||||||
Helpers.StringToField(sceneObjectXml));
|
Helpers.StringToField(sceneObjectXml));
|
||||||
AssetCache.AddAsset(asset);
|
AssetCache.AddAsset(asset);
|
||||||
|
|
||||||
|
@ -1143,7 +1145,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
// Sticking it in root folder for now.. objects folder later?
|
// Sticking it in root folder for now.. objects folder later?
|
||||||
|
|
||||||
item.Folder = userInfo.RootFolder.ID;// DeRezPacket.AgentBlock.DestinationID;
|
item.Folder = userInfo.RootFolder.ID; // DeRezPacket.AgentBlock.DestinationID;
|
||||||
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
||||||
if (remoteClient.AgentId != objectGroup.RootPart.OwnerID)
|
if (remoteClient.AgentId != objectGroup.RootPart.OwnerID)
|
||||||
{
|
{
|
||||||
|
@ -1165,7 +1167,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return LLUUID.Zero;
|
return LLUUID.Zero;
|
||||||
}
|
}
|
||||||
return LLUUID.Zero;
|
return LLUUID.Zero;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1198,7 +1199,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns SceneObjectGroup or null from asset request.
|
/// Returns SceneObjectGroup or null from asset request.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1224,15 +1224,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
bool RezSelected, bool RemoveItem, LLUUID fromTaskID, bool attachment)
|
bool RezSelected, bool RemoveItem, LLUUID fromTaskID, bool attachment)
|
||||||
{
|
{
|
||||||
// Work out position details
|
// Work out position details
|
||||||
byte bRayEndIsIntersection = (byte)0;
|
byte bRayEndIsIntersection = 0;
|
||||||
|
|
||||||
if (RayEndIsIntersection)
|
if (RayEndIsIntersection)
|
||||||
{
|
{
|
||||||
bRayEndIsIntersection = (byte)1;
|
bRayEndIsIntersection = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bRayEndIsIntersection = (byte)0;
|
bRayEndIsIntersection = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVector3 scale = new LLVector3(0.5f, 0.5f, 0.5f);
|
LLVector3 scale = new LLVector3(0.5f, 0.5f, 0.5f);
|
||||||
|
@ -1240,7 +1240,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
LLVector3 pos = GetNewRezLocation(
|
LLVector3 pos = GetNewRezLocation(
|
||||||
RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1),
|
RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1),
|
||||||
BypassRayCast, bRayEndIsIntersection,true,scale, false);
|
BypassRayCast, bRayEndIsIntersection, true, scale, false);
|
||||||
|
|
||||||
if (!PermissionsMngr.CanRezObject(remoteClient.AgentId, pos) && !attachment)
|
if (!PermissionsMngr.CanRezObject(remoteClient.AgentId, pos) && !attachment)
|
||||||
{
|
{
|
||||||
|
@ -1306,7 +1306,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
if (!attachment)
|
if (!attachment)
|
||||||
{
|
{
|
||||||
if (group.RootPart.Shape.PCode == (byte)PCode.Prim)
|
if (group.RootPart.Shape.PCode == (byte) PCode.Prim)
|
||||||
{
|
{
|
||||||
group.ClearPartAttachmentData();
|
group.ClearPartAttachmentData();
|
||||||
}
|
}
|
||||||
|
@ -1327,7 +1327,5 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -79,10 +79,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup) ent).LocalId == primLocalID)
|
if ((ent).LocalId == primLocalID)
|
||||||
{
|
{
|
||||||
// A prim is only tainted if it's allowed to be edited by the person clicking it.
|
// A prim is only tainted if it's allowed to be edited by the person clicking it.
|
||||||
if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || m_permissionManager.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID))
|
if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, (ent).UUID) ||
|
||||||
|
m_permissionManager.CanEditObject(remoteClient.AgentId, (ent).UUID))
|
||||||
{
|
{
|
||||||
((SceneObjectGroup) ent).GetProperties(remoteClient);
|
((SceneObjectGroup) ent).GetProperties(remoteClient);
|
||||||
((SceneObjectGroup) ent).IsSelected = true;
|
((SceneObjectGroup) ent).IsSelected = true;
|
||||||
|
@ -107,9 +108,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup) ent).LocalId == primLocalID)
|
if ((ent).LocalId == primLocalID)
|
||||||
{
|
{
|
||||||
if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || m_permissionManager.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID))
|
if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, (ent).UUID) ||
|
||||||
|
m_permissionManager.CanEditObject(remoteClient.AgentId, (ent).UUID))
|
||||||
{
|
{
|
||||||
((SceneObjectGroup) ent).IsSelected = false;
|
((SceneObjectGroup) ent).IsSelected = false;
|
||||||
LandChannel.setPrimsTainted();
|
LandChannel.setPrimsTainted();
|
||||||
|
@ -143,7 +145,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient)
|
public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
|
|
||||||
List<EntityBase> EntitieList = GetEntities();
|
List<EntityBase> EntitieList = GetEntities();
|
||||||
|
|
||||||
foreach (EntityBase ent in EntitieList)
|
foreach (EntityBase ent in EntitieList)
|
||||||
|
@ -178,7 +179,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient)
|
public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
|
|
||||||
List<EntityBase> EntitieList = GetEntities();
|
List<EntityBase> EntitieList = GetEntities();
|
||||||
|
|
||||||
foreach (EntityBase ent in EntitieList)
|
foreach (EntityBase ent in EntitieList)
|
||||||
|
@ -190,7 +190,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Is this prim part of the group
|
// Is this prim part of the group
|
||||||
if (obj.HasChildPrim(localID))
|
if (obj.HasChildPrim(localID))
|
||||||
{
|
{
|
||||||
SceneObjectPart part=obj.GetChildPart(localID);
|
SceneObjectPart part = obj.GetChildPart(localID);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
// If the touched prim handles touches, deliver it
|
// If the touched prim handles touches, deliver it
|
||||||
|
@ -233,8 +233,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
LLUUID translatedIDtem = item.AvatarID;
|
LLUUID translatedIDtem = item.AvatarID;
|
||||||
searchData[i] = new AvatarPickerReplyPacket.DataBlock();
|
searchData[i] = new AvatarPickerReplyPacket.DataBlock();
|
||||||
searchData[i].AvatarID = translatedIDtem;
|
searchData[i].AvatarID = translatedIDtem;
|
||||||
searchData[i].FirstName = Helpers.StringToField((string) item.firstName);
|
searchData[i].FirstName = Helpers.StringToField(item.firstName);
|
||||||
searchData[i].LastName = Helpers.StringToField((string) item.lastName);
|
searchData[i].LastName = Helpers.StringToField(item.lastName);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (AvatarResponses.Count == 0)
|
if (AvatarResponses.Count == 0)
|
||||||
|
|
|
@ -53,107 +53,99 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public partial class Scene : SceneBase
|
public partial class Scene : SceneBase
|
||||||
{
|
{
|
||||||
|
#region Delegates
|
||||||
|
|
||||||
public delegate void SynchronizeSceneHandler(Scene scene);
|
public delegate void SynchronizeSceneHandler(Scene scene);
|
||||||
public SynchronizeSceneHandler SynchronizeScene = null;
|
|
||||||
public int splitID = 0;
|
#endregion
|
||||||
|
|
||||||
|
public int splitID;
|
||||||
|
public SynchronizeSceneHandler SynchronizeScene;
|
||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
protected Timer m_heartbeatTimer = new Timer();
|
|
||||||
protected Timer m_restartWaitTimer = new Timer();
|
|
||||||
|
|
||||||
protected SimStatsReporter m_statsReporter;
|
|
||||||
|
|
||||||
protected List<RegionInfo> m_regionRestartNotifyList = new List<RegionInfo>();
|
|
||||||
protected List<RegionInfo> m_neighbours = new List<RegionInfo>();
|
|
||||||
|
|
||||||
public InnerScene m_innerScene;
|
|
||||||
|
|
||||||
private Random Rand = new Random();
|
|
||||||
private uint _primCount = 720000;
|
|
||||||
private readonly Mutex _primAllocateMutex = new Mutex(false);
|
private readonly Mutex _primAllocateMutex = new Mutex(false);
|
||||||
|
|
||||||
private int m_timePhase = 24;
|
|
||||||
|
|
||||||
private readonly Mutex updateLock;
|
|
||||||
public bool m_physicalPrim;
|
|
||||||
public bool m_seeIntoRegionFromNeighbor;
|
|
||||||
public int MaxUndoCount = 5;
|
|
||||||
private int m_RestartTimerCounter;
|
|
||||||
private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
|
private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
|
||||||
private int m_incrementsof15seconds = 0;
|
private readonly Mutex updateLock;
|
||||||
|
private uint _primCount = 720000;
|
||||||
public string m_simulatorVersion = "OpenSimulator 0.5";
|
|
||||||
|
|
||||||
protected ModuleLoader m_moduleLoader;
|
|
||||||
protected StorageManager m_storageManager;
|
|
||||||
protected AgentCircuitManager m_authenticateHandler;
|
|
||||||
public CommunicationsManager CommsManager;
|
public CommunicationsManager CommsManager;
|
||||||
|
private int frameMS;
|
||||||
|
protected AgentCircuitManager m_authenticateHandler;
|
||||||
// protected XferManager xferManager;
|
// protected XferManager xferManager;
|
||||||
protected SceneCommunicationService m_sceneGridService;
|
protected IAvatarFactory m_AvatarFactory;
|
||||||
protected SceneXmlLoader m_sceneXmlLoader;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Each agent has its own capabilities handler.
|
/// Each agent has its own capabilities handler.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected Dictionary<LLUUID, Caps> m_capsHandlers = new Dictionary<LLUUID, Caps>();
|
protected Dictionary<LLUUID, Caps> m_capsHandlers = new Dictionary<LLUUID, Caps>();
|
||||||
|
|
||||||
protected BaseHttpServer m_httpListener;
|
|
||||||
|
|
||||||
protected Dictionary<string, IRegionModule> Modules = new Dictionary<string, IRegionModule>();
|
|
||||||
public Dictionary<Type, object> ModuleInterfaces = new Dictionary<Type, object>();
|
|
||||||
protected Dictionary<string, object> ModuleAPIMethods = new Dictionary<string, object>();
|
|
||||||
public Dictionary<string, ICommander> m_moduleCommanders = new Dictionary<string, ICommander>();
|
|
||||||
|
|
||||||
//API module interfaces
|
|
||||||
|
|
||||||
public IXfer XferManager;
|
|
||||||
|
|
||||||
protected IHttpRequests m_httpRequestModule;
|
|
||||||
protected ISimChat m_simChatModule;
|
|
||||||
protected IXMLRPC m_xmlrpcModule;
|
|
||||||
protected IWorldComm m_worldCommModule;
|
|
||||||
protected IAvatarFactory m_AvatarFactory;
|
|
||||||
|
|
||||||
// Central Update Loop
|
// Central Update Loop
|
||||||
|
|
||||||
protected int m_fps = 10;
|
protected int m_fps = 10;
|
||||||
protected int m_frame = 0;
|
protected int m_frame;
|
||||||
protected float m_timespan = 0.089f;
|
protected Timer m_heartbeatTimer = new Timer();
|
||||||
|
protected BaseHttpServer m_httpListener;
|
||||||
|
protected IHttpRequests m_httpRequestModule;
|
||||||
|
private int m_incrementsof15seconds;
|
||||||
|
public InnerScene m_innerScene;
|
||||||
protected DateTime m_lastupdate = DateTime.Now;
|
protected DateTime m_lastupdate = DateTime.Now;
|
||||||
|
public Dictionary<string, ICommander> m_moduleCommanders = new Dictionary<string, ICommander>();
|
||||||
|
protected ModuleLoader m_moduleLoader;
|
||||||
|
protected List<RegionInfo> m_neighbours = new List<RegionInfo>();
|
||||||
|
public bool m_physicalPrim;
|
||||||
|
private bool m_physics_enabled = true;
|
||||||
|
protected List<RegionInfo> m_regionRestartNotifyList = new List<RegionInfo>();
|
||||||
|
private int m_RestartTimerCounter;
|
||||||
|
protected Timer m_restartWaitTimer = new Timer();
|
||||||
|
protected SceneCommunicationService m_sceneGridService;
|
||||||
|
protected SceneXmlLoader m_sceneXmlLoader;
|
||||||
|
private bool m_scripts_enabled = true;
|
||||||
|
public bool m_seeIntoRegionFromNeighbor;
|
||||||
|
protected ISimChat m_simChatModule;
|
||||||
|
public string m_simulatorVersion = "OpenSimulator 0.5";
|
||||||
|
protected SimStatsReporter m_statsReporter;
|
||||||
|
protected StorageManager m_storageManager;
|
||||||
|
|
||||||
protected float m_timedilation = 1.0f;
|
protected float m_timedilation = 1.0f;
|
||||||
|
private int m_timePhase = 24;
|
||||||
|
protected float m_timespan = 0.089f;
|
||||||
|
private int m_update_backup = 200;
|
||||||
|
|
||||||
private int m_update_physics = 1;
|
|
||||||
private int m_update_entitymovement = 1;
|
|
||||||
private int m_update_entities = 1; // Run through all objects checking for updates
|
private int m_update_entities = 1; // Run through all objects checking for updates
|
||||||
private int m_update_entitiesquick = 200; // Run through objects that have scheduled updates checking for updates
|
private int m_update_entitiesquick = 200; // Run through objects that have scheduled updates checking for updates
|
||||||
private int m_update_presences = 1; // Update scene presence movements
|
private int m_update_entitymovement = 1;
|
||||||
private int m_update_events = 1;
|
private int m_update_events = 1;
|
||||||
private int m_update_backup = 200;
|
|
||||||
private int m_update_terrain = 50;
|
|
||||||
private int m_update_land = 1;
|
private int m_update_land = 1;
|
||||||
|
private int m_update_physics = 1;
|
||||||
|
private int m_update_presences = 1; // Update scene presence movements
|
||||||
|
private int m_update_terrain = 50;
|
||||||
|
protected IWorldComm m_worldCommModule;
|
||||||
|
protected IXMLRPC m_xmlrpcModule;
|
||||||
|
public int MaxUndoCount = 5;
|
||||||
|
protected Dictionary<string, object> ModuleAPIMethods = new Dictionary<string, object>();
|
||||||
|
public Dictionary<Type, object> ModuleInterfaces = new Dictionary<Type, object>();
|
||||||
|
protected Dictionary<string, IRegionModule> Modules = new Dictionary<string, IRegionModule>();
|
||||||
|
|
||||||
private int frameMS = 0;
|
private int otherMS;
|
||||||
private int physicsMS2 = 0;
|
private int physicsMS;
|
||||||
private int physicsMS = 0;
|
private int physicsMS2;
|
||||||
private int otherMS = 0;
|
private Random Rand = new Random();
|
||||||
|
public IXfer XferManager;
|
||||||
private bool m_physics_enabled = true;
|
|
||||||
private bool m_scripts_enabled = true;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
|
protected readonly EstateManager m_estateManager;
|
||||||
|
protected readonly PermissionManager m_permissionManager;
|
||||||
|
public int objectCapacity = 45000;
|
||||||
|
|
||||||
public AgentCircuitManager AuthenticateHandler
|
public AgentCircuitManager AuthenticateHandler
|
||||||
{
|
{
|
||||||
get { return m_authenticateHandler; }
|
get { return m_authenticateHandler; }
|
||||||
}
|
}
|
||||||
|
|
||||||
protected readonly EstateManager m_estateManager;
|
|
||||||
// an instance to the physics plugin's Scene object.
|
// an instance to the physics plugin's Scene object.
|
||||||
public PhysicsScene PhysicsScene
|
public PhysicsScene PhysicsScene
|
||||||
{
|
{
|
||||||
|
@ -177,7 +169,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
get { return m_timedilation; }
|
get { return m_timedilation; }
|
||||||
}
|
}
|
||||||
|
|
||||||
protected readonly PermissionManager m_permissionManager;
|
|
||||||
// This is the instance to the permissions manager.
|
// This is the instance to the permissions manager.
|
||||||
// This manages permissions to clients on in world objects
|
// This manages permissions to clients on in world objects
|
||||||
|
|
||||||
|
@ -215,14 +206,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
get { return m_innerScene.Entities; }
|
get { return m_innerScene.Entities; }
|
||||||
set { m_innerScene.Entities = value; }
|
set { m_innerScene.Entities = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dictionary<LLUUID, ScenePresence> m_restorePresences
|
public Dictionary<LLUUID, ScenePresence> m_restorePresences
|
||||||
{
|
{
|
||||||
get { return m_innerScene.RestorePresences; }
|
get { return m_innerScene.RestorePresences; }
|
||||||
set { m_innerScene.RestorePresences = value; }
|
set { m_innerScene.RestorePresences = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public int objectCapacity = 45000;
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
@ -252,9 +242,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
//Bind Storage Manager functions to some land manager functions for this scene
|
//Bind Storage Manager functions to some land manager functions for this scene
|
||||||
EventManager.OnLandObjectAdded +=
|
EventManager.OnLandObjectAdded +=
|
||||||
new EventManager.LandObjectAdded(m_storageManager.DataStore.StoreLandObject);
|
m_storageManager.DataStore.StoreLandObject;
|
||||||
EventManager.OnLandObjectRemoved +=
|
EventManager.OnLandObjectRemoved +=
|
||||||
new EventManager.LandObjectRemoved(m_storageManager.DataStore.RemoveLandObject);
|
m_storageManager.DataStore.RemoveLandObject;
|
||||||
|
|
||||||
m_estateManager = new EstateManager(this, m_regInfo);
|
m_estateManager = new EstateManager(this, m_regInfo);
|
||||||
|
|
||||||
|
@ -321,7 +311,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
OSString = OSString.Substring(0, 45);
|
OSString = OSString.Substring(0, 45);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_simulatorVersion = "OpenSimulator v0.5-SVN on " + OSString + " ChilTasks:" + m_seeIntoRegionFromNeighbor.ToString() + " PhysPrim:" + m_physicalPrim.ToString();
|
m_simulatorVersion = "OpenSimulator v0.5-SVN on " + OSString + " ChilTasks:" + m_seeIntoRegionFromNeighbor + " PhysPrim:" + m_physicalPrim;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -382,8 +372,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
// If these are cast to INT because long + negative values + abs returns invalid data
|
// If these are cast to INT because long + negative values + abs returns invalid data
|
||||||
|
|
||||||
int resultX = Math.Abs((int)otherRegion.RegionLocX - (int)RegionInfo.RegionLocX);
|
int resultX = Math.Abs((int) otherRegion.RegionLocX - (int) RegionInfo.RegionLocX);
|
||||||
int resultY = Math.Abs((int)otherRegion.RegionLocY - (int)RegionInfo.RegionLocY);
|
int resultY = Math.Abs((int) otherRegion.RegionLocY - (int) RegionInfo.RegionLocY);
|
||||||
if ((resultX <= 1) &&
|
if ((resultX <= 1) &&
|
||||||
(resultY <= 1))
|
(resultY <= 1))
|
||||||
{
|
{
|
||||||
|
@ -410,9 +400,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Info("[INTERGRID]: Got notice about far away Region: " + otherRegion.RegionName.ToString() +
|
m_log.Info("[INTERGRID]: Got notice about far away Region: " + otherRegion.RegionName +
|
||||||
" at (" + otherRegion.RegionLocX.ToString() + ", " +
|
" at (" + otherRegion.RegionLocX + ", " +
|
||||||
otherRegion.RegionLocY.ToString() + ")");
|
otherRegion.RegionLocY + ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -436,10 +426,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
// Now we figure out what to set the timer to that does the notifications and calls, RestartNow()
|
// Now we figure out what to set the timer to that does the notifications and calls, RestartNow()
|
||||||
m_restartTimer.Interval = 15000;
|
m_restartTimer.Interval = 15000;
|
||||||
m_incrementsof15seconds = (int)seconds / 15;
|
m_incrementsof15seconds = (int) seconds / 15;
|
||||||
m_RestartTimerCounter = 0;
|
m_RestartTimerCounter = 0;
|
||||||
m_restartTimer.AutoReset = true;
|
m_restartTimer.AutoReset = true;
|
||||||
m_restartTimer.Elapsed += new ElapsedEventHandler(RestartTimer_Elapsed);
|
m_restartTimer.Elapsed += RestartTimer_Elapsed;
|
||||||
m_log.Error("[REGION]: Restarting Region in " + (seconds / 60) + " minutes");
|
m_log.Error("[REGION]: Restarting Region in " + (seconds / 60) + " minutes");
|
||||||
m_restartTimer.Start();
|
m_restartTimer.Start();
|
||||||
SendRegionMessageFromEstateTools(LLUUID.Random(), LLUUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in 2 Minutes");
|
SendRegionMessageFromEstateTools(LLUUID.Random(), LLUUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in 2 Minutes");
|
||||||
|
@ -537,7 +527,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
((SceneObjectGroup)ent).StopScripts();
|
((SceneObjectGroup) ent).StopScripts();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -551,12 +541,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
((SceneObjectGroup)ent).StartScripts();
|
((SceneObjectGroup) ent).StartScripts();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
m_scripts_enabled = !ScriptEngine;
|
m_scripts_enabled = !ScriptEngine;
|
||||||
m_log.Info("[TOTEDD]: Here is the method to trigger disabling of the scripting engine");
|
m_log.Info("[TOTEDD]: Here is the method to trigger disabling of the scripting engine");
|
||||||
|
@ -564,9 +552,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (m_physics_enabled != !PhysicsEngine)
|
if (m_physics_enabled != !PhysicsEngine)
|
||||||
{
|
{
|
||||||
m_physics_enabled = !PhysicsEngine;
|
m_physics_enabled = !PhysicsEngine;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is the method that shuts down the scene.
|
// This is the method that shuts down the scene.
|
||||||
|
@ -619,8 +605,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
m_log.Debug("[SCENE]: Starting timer");
|
m_log.Debug("[SCENE]: Starting timer");
|
||||||
m_heartbeatTimer.Enabled = true;
|
m_heartbeatTimer.Enabled = true;
|
||||||
m_heartbeatTimer.Interval = (int)(m_timespan * 1000);
|
m_heartbeatTimer.Interval = (int) (m_timespan * 1000);
|
||||||
m_heartbeatTimer.Elapsed += new ElapsedEventHandler(Heartbeat);
|
m_heartbeatTimer.Elapsed += Heartbeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetModuleInterfaces()
|
public void SetModuleInterfaces()
|
||||||
|
@ -756,28 +742,25 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
catch (AccessViolationException e)
|
catch (AccessViolationException e)
|
||||||
{
|
{
|
||||||
m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName);
|
m_log.Error("[Scene]: Failed with exception " + e + " On Region: " + RegionInfo.RegionName);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (NullReferenceException e)
|
catch (NullReferenceException e)
|
||||||
{
|
{
|
||||||
m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName);
|
m_log.Error("[Scene]: Failed with exception " + e + " On Region: " + RegionInfo.RegionName);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException e)
|
catch (InvalidOperationException e)
|
||||||
{
|
{
|
||||||
m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName);
|
m_log.Error("[Scene]: Failed with exception " + e + " On Region: " + RegionInfo.RegionName);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName);
|
m_log.Error("[Scene]: Failed with exception " + e + " On Region: " + RegionInfo.RegionName);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
updateLock.ReleaseMutex();
|
updateLock.ReleaseMutex();
|
||||||
// Get actual time dilation
|
// Get actual time dilation
|
||||||
float tmpval = (m_timespan / (float)SinceLastFrame.TotalSeconds);
|
float tmpval = (m_timespan / (float) SinceLastFrame.TotalSeconds);
|
||||||
|
|
||||||
// If actual time dilation is greater then one, we're catching up, so subtract
|
// If actual time dilation is greater then one, we're catching up, so subtract
|
||||||
// the amount that's greater then 1 from the time dilation
|
// the amount that's greater then 1 from the time dilation
|
||||||
|
@ -856,10 +839,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public void ExportWorldMap(string fileName)
|
public void ExportWorldMap(string fileName)
|
||||||
{
|
{
|
||||||
List<MapBlockData> mapBlocks =
|
List<MapBlockData> mapBlocks =
|
||||||
m_sceneGridService.RequestNeighbourMapBlocks((int)(RegionInfo.RegionLocX - 9),
|
m_sceneGridService.RequestNeighbourMapBlocks((int) (RegionInfo.RegionLocX - 9),
|
||||||
(int)(RegionInfo.RegionLocY - 9),
|
(int) (RegionInfo.RegionLocY - 9),
|
||||||
(int)(RegionInfo.RegionLocX + 9),
|
(int) (RegionInfo.RegionLocX + 9),
|
||||||
(int)(RegionInfo.RegionLocY + 9));
|
(int) (RegionInfo.RegionLocY + 9));
|
||||||
List<AssetBase> textures = new List<AssetBase>();
|
List<AssetBase> textures = new List<AssetBase>();
|
||||||
List<Image> bitImages = new List<Image>();
|
List<Image> bitImages = new List<Image>();
|
||||||
|
|
||||||
|
@ -894,8 +877,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
for (int i = 0; i < mapBlocks.Count; i++)
|
for (int i = 0; i < mapBlocks.Count; i++)
|
||||||
{
|
{
|
||||||
ushort x = (ushort)((mapBlocks[i].X - RegionInfo.RegionLocX) + 10);
|
ushort x = (ushort) ((mapBlocks[i].X - RegionInfo.RegionLocX) + 10);
|
||||||
ushort y = (ushort)((mapBlocks[i].Y - RegionInfo.RegionLocY) + 10);
|
ushort y = (ushort) ((mapBlocks[i].Y - RegionInfo.RegionLocY) + 10);
|
||||||
g.DrawImage(bitImages[i], (x * 128), (y * 128), 128, 128);
|
g.DrawImage(bitImages[i], (x * 128), (y * 128), 128, 128);
|
||||||
}
|
}
|
||||||
mapTexture.Save(fileName, ImageFormat.Jpeg);
|
mapTexture.Save(fileName, ImageFormat.Jpeg);
|
||||||
|
@ -926,11 +909,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
Heightmap = new TerrainChannel(map);
|
Heightmap = new TerrainChannel(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Warn("[terrain]: Scene.cs: LoadWorldMap() - Failed with exception " + e.ToString());
|
m_log.Warn("[terrain]: Scene.cs: LoadWorldMap() - Failed with exception " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -991,7 +973,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
for (int y = 0; y < 256; y++)
|
for (int y = 0; y < 256; y++)
|
||||||
{
|
{
|
||||||
float hmval = (float)hm[x, y];
|
float hmval = (float) hm[x, y];
|
||||||
if (hmval < low)
|
if (hmval < low)
|
||||||
low = hmval;
|
low = hmval;
|
||||||
if (hmval > high)
|
if (hmval > high)
|
||||||
|
@ -1021,10 +1003,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
//}
|
//}
|
||||||
//else
|
//else
|
||||||
//{
|
//{
|
||||||
float tmpval = (float)hm[x, y];
|
float tmpval = (float) hm[x, y];
|
||||||
heightvalue = (float)hm[x, y];
|
heightvalue = (float) hm[x, y];
|
||||||
|
|
||||||
if ((float)heightvalue > m_regInfo.EstateSettings.waterHeight)
|
if (heightvalue > m_regInfo.EstateSettings.waterHeight)
|
||||||
{
|
{
|
||||||
// scale height value
|
// scale height value
|
||||||
heightvalue = low + mid * (heightvalue - low) / mid;
|
heightvalue = low + mid * (heightvalue - low) / mid;
|
||||||
|
@ -1036,7 +1018,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
heightvalue = 0;
|
heightvalue = 0;
|
||||||
|
|
||||||
|
|
||||||
Color green = Color.FromArgb((int)heightvalue, 100, (int)heightvalue);
|
Color green = Color.FromArgb((int) heightvalue, 100, (int) heightvalue);
|
||||||
|
|
||||||
// Y flip the cordinates
|
// Y flip the cordinates
|
||||||
mapbmp.SetPixel(x, (256 - y) - 1, green);
|
mapbmp.SetPixel(x, (256 - y) - 1, green);
|
||||||
|
@ -1058,12 +1040,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (heightvalue < 0)
|
if (heightvalue < 0)
|
||||||
heightvalue = 0;
|
heightvalue = 0;
|
||||||
|
|
||||||
Color water = Color.FromArgb((int)heightvalue, (int)heightvalue, 255);
|
Color water = Color.FromArgb((int) heightvalue, (int) heightvalue, 255);
|
||||||
mapbmp.SetPixel(x, (256 - y) - 1, water);
|
mapbmp.SetPixel(x, (256 - y) - 1, water);
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//tc = System.Environment.TickCount - tc;
|
//tc = System.Environment.TickCount - tc;
|
||||||
//m_log.Info("[MAPTILE]: Completed One row in " + tc + " ms");
|
//m_log.Info("[MAPTILE]: Completed One row in " + tc + " ms");
|
||||||
|
@ -1087,7 +1067,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
asset.Type = 0;
|
asset.Type = 0;
|
||||||
asset.Temporary = temporary;
|
asset.Temporary = temporary;
|
||||||
AssetCache.AddAsset(asset);
|
AssetCache.AddAsset(asset);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1105,7 +1084,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
AssetCache.AddAsset(asset);
|
AssetCache.AddAsset(asset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -1143,14 +1121,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
AddEntityFromStorage(group);
|
AddEntityFromStorage(group);
|
||||||
SceneObjectPart rootPart = group.GetChildPart(group.UUID);
|
SceneObjectPart rootPart = group.GetChildPart(group.UUID);
|
||||||
rootPart.ObjectFlags &= ~(uint)LLObject.ObjectFlags.Scripted;
|
rootPart.ObjectFlags &= ~(uint) LLObject.ObjectFlags.Scripted;
|
||||||
rootPart.TrimPermissions();
|
rootPart.TrimPermissions();
|
||||||
|
|
||||||
group.ApplyPhysics(m_physicalPrim);
|
group.ApplyPhysics(m_physicalPrim);
|
||||||
//rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
|
//rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)");
|
m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count + " SceneObject(s)");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1169,10 +1147,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return myID;
|
return myID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LLVector3 GetNewRezLocation(LLVector3 RayStart, LLVector3 RayEnd, LLUUID RayTargetID, LLQuaternion rot, byte bypassRayCast, byte RayEndIsIntersection, bool frontFacesOnly, LLVector3 scale, bool FaceCenter)
|
public LLVector3 GetNewRezLocation(LLVector3 RayStart, LLVector3 RayEnd, LLUUID RayTargetID, LLQuaternion rot, byte bypassRayCast,
|
||||||
|
byte RayEndIsIntersection, bool frontFacesOnly, LLVector3 scale, bool FaceCenter)
|
||||||
{
|
{
|
||||||
LLVector3 pos = LLVector3.Zero;
|
LLVector3 pos = LLVector3.Zero;
|
||||||
if (RayEndIsIntersection == (byte)1)
|
if (RayEndIsIntersection == 1)
|
||||||
{
|
{
|
||||||
pos = RayEnd;
|
pos = RayEnd;
|
||||||
return pos;
|
return pos;
|
||||||
|
@ -1196,7 +1175,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
Ray NewRay = new Ray(AXOrigin, AXdirection);
|
Ray NewRay = new Ray(AXOrigin, AXdirection);
|
||||||
|
|
||||||
// Ray Trace against target here
|
// Ray Trace against target here
|
||||||
EntityIntersection ei = target.TestIntersectionOBB(NewRay, new Quaternion(1,0,0,0), frontFacesOnly, FaceCenter);
|
EntityIntersection ei = target.TestIntersectionOBB(NewRay, new Quaternion(1, 0, 0, 0), frontFacesOnly, FaceCenter);
|
||||||
|
|
||||||
// Un-comment out the following line to Get Raytrace results printed to the console.
|
// Un-comment out the following line to Get Raytrace results printed to the console.
|
||||||
// m_log.Info("[RAYTRACERESULTS]: Hit:" + ei.HitTF.ToString() + " Point: " + ei.ipoint.ToString() + " Normal: " + ei.normal.ToString());
|
// m_log.Info("[RAYTRACERESULTS]: Hit:" + ei.HitTF.ToString() + " Point: " + ei.ipoint.ToString() + " Normal: " + ei.normal.ToString());
|
||||||
|
@ -1218,7 +1197,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
// Un-offset the prim (it gets offset later by the consumer method)
|
// Un-offset the prim (it gets offset later by the consumer method)
|
||||||
pos.Z -= 0.25F;
|
pos.Z -= 0.25F;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1253,8 +1231,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID,
|
byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID,
|
||||||
byte RayEndIsIntersection)
|
byte RayEndIsIntersection)
|
||||||
{
|
{
|
||||||
|
LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f, 0.5f, 0.5f),
|
||||||
LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f,0.5f,0.5f), false);
|
false);
|
||||||
|
|
||||||
if (PermissionsMngr.CanRezObject(ownerID, pos))
|
if (PermissionsMngr.CanRezObject(ownerID, pos))
|
||||||
{
|
{
|
||||||
|
@ -1274,7 +1252,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
|
SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
|
||||||
// if grass or tree, make phantom
|
// if grass or tree, make phantom
|
||||||
//rootPart.TrimPermissions();
|
//rootPart.TrimPermissions();
|
||||||
if ((rootPart.Shape.PCode == (byte)PCode.Grass) || (rootPart.Shape.PCode == (byte)PCode.Tree) || (rootPart.Shape.PCode == (byte)PCode.NewTree))
|
if ((rootPart.Shape.PCode == (byte) PCode.Grass) || (rootPart.Shape.PCode == (byte) PCode.Tree) || (rootPart.Shape.PCode == (byte) PCode.NewTree))
|
||||||
{
|
{
|
||||||
rootPart.AddFlag(LLObject.ObjectFlags.Phantom);
|
rootPart.AddFlag(LLObject.ObjectFlags.Phantom);
|
||||||
//rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom;
|
//rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom;
|
||||||
|
@ -1289,13 +1267,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public SceneObjectGroup AddTree(LLVector3 scale, LLQuaternion rotation, LLVector3 position,
|
public SceneObjectGroup AddTree(LLVector3 scale, LLQuaternion rotation, LLVector3 position,
|
||||||
Tree treeType, bool newTree)
|
Tree treeType, bool newTree)
|
||||||
{
|
{
|
||||||
LLUUID uuid = this.RegionInfo.MasterAvatarAssignedUUID;
|
LLUUID uuid = RegionInfo.MasterAvatarAssignedUUID;
|
||||||
PrimitiveBaseShape treeShape = new PrimitiveBaseShape();
|
PrimitiveBaseShape treeShape = new PrimitiveBaseShape();
|
||||||
treeShape.PathCurve = 16;
|
treeShape.PathCurve = 16;
|
||||||
treeShape.PathEnd = 49900;
|
treeShape.PathEnd = 49900;
|
||||||
treeShape.PCode = newTree ? (byte)PCode.NewTree : (byte)PCode.Tree;
|
treeShape.PCode = newTree ? (byte) PCode.NewTree : (byte) PCode.Tree;
|
||||||
treeShape.Scale = scale;
|
treeShape.Scale = scale;
|
||||||
treeShape.State = (byte)treeType;
|
treeShape.State = (byte) treeType;
|
||||||
return AddNewPrim(uuid, position, rotation, treeShape);
|
return AddNewPrim(uuid, position, rotation, treeShape);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1360,12 +1338,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="position">current position of Group</param>
|
/// <param name="position">current position of Group</param>
|
||||||
/// <param name="grp">Scene Object Group that we're crossing</param>
|
/// <param name="grp">Scene Object Group that we're crossing</param>
|
||||||
|
|
||||||
public void CrossPrimGroupIntoNewRegion(LLVector3 position, SceneObjectGroup grp)
|
public void CrossPrimGroupIntoNewRegion(LLVector3 position, SceneObjectGroup grp)
|
||||||
{
|
{
|
||||||
m_log.Warn("Prim crossing: " + grp.UUID.ToString());
|
m_log.Warn("Prim crossing: " + grp.UUID);
|
||||||
int thisx = (int)RegionInfo.RegionLocX;
|
int thisx = (int) RegionInfo.RegionLocX;
|
||||||
int thisy = (int)RegionInfo.RegionLocY;
|
int thisy = (int) RegionInfo.RegionLocY;
|
||||||
|
|
||||||
ulong newRegionHandle = 0;
|
ulong newRegionHandle = 0;
|
||||||
LLVector3 pos = position;
|
LLVector3 pos = position;
|
||||||
|
@ -1374,27 +1351,27 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
pos.X = ((pos.X - Constants.RegionSize));
|
pos.X = ((pos.X - Constants.RegionSize));
|
||||||
|
|
||||||
newRegionHandle = Util.UIntsToLong((uint)((thisx + 1) * Constants.RegionSize), (uint)(thisy * Constants.RegionSize));
|
newRegionHandle = Util.UIntsToLong((uint) ((thisx + 1) * Constants.RegionSize), (uint) (thisy * Constants.RegionSize));
|
||||||
|
|
||||||
// x + 1
|
// x + 1
|
||||||
}
|
}
|
||||||
else if (position.X < -0.1f)
|
else if (position.X < -0.1f)
|
||||||
{
|
{
|
||||||
pos.X = ((pos.X + Constants.RegionSize));
|
pos.X = ((pos.X + Constants.RegionSize));
|
||||||
newRegionHandle = Util.UIntsToLong((uint)((thisx - 1) * Constants.RegionSize), (uint)(thisy * Constants.RegionSize));
|
newRegionHandle = Util.UIntsToLong((uint) ((thisx - 1) * Constants.RegionSize), (uint) (thisy * Constants.RegionSize));
|
||||||
// x - 1
|
// x - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if (position.Y > Constants.RegionSize + 0.1f)
|
if (position.Y > Constants.RegionSize + 0.1f)
|
||||||
{
|
{
|
||||||
pos.Y = ((pos.Y - Constants.RegionSize));
|
pos.Y = ((pos.Y - Constants.RegionSize));
|
||||||
newRegionHandle = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy + 1) * Constants.RegionSize));
|
newRegionHandle = Util.UIntsToLong((uint) (thisx * Constants.RegionSize), (uint) ((thisy + 1) * Constants.RegionSize));
|
||||||
// y + 1
|
// y + 1
|
||||||
}
|
}
|
||||||
else if (position.Y < -1f)
|
else if (position.Y < -1f)
|
||||||
{
|
{
|
||||||
pos.Y = ((pos.Y + Constants.RegionSize));
|
pos.Y = ((pos.Y + Constants.RegionSize));
|
||||||
newRegionHandle = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy - 1) * Constants.RegionSize));
|
newRegionHandle = Util.UIntsToLong((uint) (thisx * Constants.RegionSize), (uint) ((thisy - 1) * Constants.RegionSize));
|
||||||
// y - 1
|
// y - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1402,15 +1379,16 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
grp.OffsetForNewRegion(pos);
|
grp.OffsetForNewRegion(pos);
|
||||||
|
|
||||||
CrossPrimGroupIntoNewRegion(newRegionHandle, grp);
|
CrossPrimGroupIntoNewRegion(newRegionHandle, grp);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CrossPrimGroupIntoNewRegion(ulong newRegionHandle, SceneObjectGroup grp)
|
public void CrossPrimGroupIntoNewRegion(ulong newRegionHandle, SceneObjectGroup grp)
|
||||||
{
|
{
|
||||||
int primcrossingXMLmethod = 0;
|
int primcrossingXMLmethod = 0;
|
||||||
if (newRegionHandle != 0)
|
if (newRegionHandle != 0)
|
||||||
{
|
{
|
||||||
bool successYN = false;
|
bool successYN = false;
|
||||||
successYN = m_sceneGridService.PrimCrossToNeighboringRegion(newRegionHandle, grp.UUID, m_sceneXmlLoader.SavePrimGroupToXML2String(grp), primcrossingXMLmethod);
|
successYN = m_sceneGridService.PrimCrossToNeighboringRegion(newRegionHandle, grp.UUID, m_sceneXmlLoader.SavePrimGroupToXML2String(grp),
|
||||||
|
primcrossingXMLmethod);
|
||||||
if (successYN)
|
if (successYN)
|
||||||
{
|
{
|
||||||
// We remove the object here
|
// We remove the object here
|
||||||
|
@ -1446,7 +1424,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SceneObjectPart RootPrim = GetSceneObjectPart(primID);
|
SceneObjectPart RootPrim = GetSceneObjectPart(primID);
|
||||||
if (RootPrim != null)
|
if (RootPrim != null)
|
||||||
{
|
{
|
||||||
if (RootPrim.Shape.PCode == (byte)PCode.Prim)
|
if (RootPrim.Shape.PCode == (byte) PCode.Prim)
|
||||||
{
|
{
|
||||||
SceneObjectGroup grp = RootPrim.ParentGroup;
|
SceneObjectGroup grp = RootPrim.ParentGroup;
|
||||||
if (grp != null)
|
if (grp != null)
|
||||||
|
@ -1462,12 +1440,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// with the deeded object, it goes back to them
|
// with the deeded object, it goes back to them
|
||||||
|
|
||||||
grp.SetFromAssetID(grp.RootPart.LastOwnerID);
|
grp.SetFromAssetID(grp.RootPart.LastOwnerID);
|
||||||
m_innerScene.AttachObject(sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition);
|
m_innerScene.AttachObject(sp.ControllingClient, grp.LocalId, 0, grp.GroupRotation, grp.AbsolutePosition);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -1476,7 +1452,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -1563,19 +1538,19 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
client.OnObjectDuplicateOnRay += doObjectDuplicateOnRay;
|
client.OnObjectDuplicateOnRay += doObjectDuplicateOnRay;
|
||||||
client.OnUpdatePrimFlags += m_innerScene.UpdatePrimFlags;
|
client.OnUpdatePrimFlags += m_innerScene.UpdatePrimFlags;
|
||||||
client.OnRequestObjectPropertiesFamily += m_innerScene.RequestObjectPropertiesFamily;
|
client.OnRequestObjectPropertiesFamily += m_innerScene.RequestObjectPropertiesFamily;
|
||||||
client.OnParcelPropertiesRequest += new ParcelPropertiesRequest(LandChannel.handleParcelPropertiesRequest);
|
client.OnParcelPropertiesRequest += LandChannel.handleParcelPropertiesRequest;
|
||||||
client.OnParcelDivideRequest += new ParcelDivideRequest(LandChannel.handleParcelDivideRequest);
|
client.OnParcelDivideRequest += LandChannel.handleParcelDivideRequest;
|
||||||
client.OnParcelJoinRequest += new ParcelJoinRequest(LandChannel.handleParcelJoinRequest);
|
client.OnParcelJoinRequest += LandChannel.handleParcelJoinRequest;
|
||||||
client.OnParcelPropertiesUpdateRequest +=
|
client.OnParcelPropertiesUpdateRequest +=
|
||||||
new ParcelPropertiesUpdateRequest(LandChannel.handleParcelPropertiesUpdateRequest);
|
LandChannel.handleParcelPropertiesUpdateRequest;
|
||||||
client.OnParcelSelectObjects += new ParcelSelectObjects(LandChannel.handleParcelSelectObjectsRequest);
|
client.OnParcelSelectObjects += LandChannel.handleParcelSelectObjectsRequest;
|
||||||
client.OnParcelObjectOwnerRequest +=
|
client.OnParcelObjectOwnerRequest +=
|
||||||
new ParcelObjectOwnerRequest(LandChannel.handleParcelObjectOwnersRequest);
|
LandChannel.handleParcelObjectOwnersRequest;
|
||||||
client.OnParcelAccessListRequest += new ParcelAccessListRequest(LandChannel.handleParcelAccessRequest);
|
client.OnParcelAccessListRequest += LandChannel.handleParcelAccessRequest;
|
||||||
client.OnParcelAccessListUpdateRequest +=
|
client.OnParcelAccessListUpdateRequest +=
|
||||||
new ParcelAccessListUpdateRequest(LandChannel.handleParcelAccessUpdateRequest);
|
LandChannel.handleParcelAccessUpdateRequest;
|
||||||
|
|
||||||
client.OnEstateOwnerMessage += new EstateOwnerMessageRequest(m_estateManager.handleEstateOwnerMessage);
|
client.OnEstateOwnerMessage += m_estateManager.handleEstateOwnerMessage;
|
||||||
client.OnRegionInfoRequest += m_estateManager.HandleRegionInfoRequest;
|
client.OnRegionInfoRequest += m_estateManager.HandleRegionInfoRequest;
|
||||||
client.OnEstateCovenantRequest += m_estateManager.HandleEstateCovenantRequest;
|
client.OnEstateCovenantRequest += m_estateManager.HandleEstateCovenantRequest;
|
||||||
client.OnRequestGodlikePowers += handleRequestGodlikePowers;
|
client.OnRequestGodlikePowers += handleRequestGodlikePowers;
|
||||||
|
@ -1619,25 +1594,23 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
EventManager.TriggerOnNewClient(client);
|
EventManager.TriggerOnNewClient(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void TeleportClientHome(LLUUID AgentId, IClientAPI client)
|
public virtual void TeleportClientHome(LLUUID AgentId, IClientAPI client)
|
||||||
{
|
{
|
||||||
UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(AgentId);
|
UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(AgentId);
|
||||||
if (UserProfile != null)
|
if (UserProfile != null)
|
||||||
{
|
{
|
||||||
ulong homeRegion = UserProfile.HomeRegion;
|
ulong homeRegion = UserProfile.HomeRegion;
|
||||||
LLVector3 homePostion = new LLVector3(UserProfile.HomeLocationX,UserProfile.HomeLocationY,UserProfile.HomeLocationZ);
|
LLVector3 homePostion = new LLVector3(UserProfile.HomeLocationX, UserProfile.HomeLocationY, UserProfile.HomeLocationZ);
|
||||||
LLVector3 homeLookat = new LLVector3(UserProfile.HomeLookAt);
|
LLVector3 homeLookat = new LLVector3(UserProfile.HomeLookAt);
|
||||||
RequestTeleportLocation(client, homeRegion, homePostion,homeLookat,(uint)0);
|
RequestTeleportLocation(client, homeRegion, homePostion, homeLookat, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
public void doObjectDuplicateOnRay(uint localID, uint dupeFlags, LLUUID AgentID, LLUUID GroupID,
|
public void doObjectDuplicateOnRay(uint localID, uint dupeFlags, LLUUID AgentID, LLUUID GroupID,
|
||||||
LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart,
|
LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart,
|
||||||
bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates)
|
bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates)
|
||||||
{
|
{
|
||||||
|
|
||||||
LLVector3 pos = LLVector3.Zero;
|
LLVector3 pos = LLVector3.Zero;
|
||||||
bool frontFacesOnly = true;
|
bool frontFacesOnly = true;
|
||||||
|
|
||||||
|
@ -1645,7 +1618,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
if (target != null)
|
if (target != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
LLVector3 direction = LLVector3.Norm(RayEnd - RayStart);
|
LLVector3 direction = LLVector3.Norm(RayEnd - RayStart);
|
||||||
Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z);
|
Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z);
|
||||||
Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z);
|
Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z);
|
||||||
|
@ -1682,7 +1654,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
LLVector3 intersectionpoint = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z);
|
LLVector3 intersectionpoint = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (CopyCenters)
|
if (CopyCenters)
|
||||||
{
|
{
|
||||||
// now we cast a ray from inside the prim(absolute position) to one of it's faces along the face normal.
|
// now we cast a ray from inside the prim(absolute position) to one of it's faces along the face normal.
|
||||||
|
@ -1694,7 +1665,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (ei2.HitTF)
|
if (ei2.HitTF)
|
||||||
{
|
{
|
||||||
//m_log.Info("[RAYTRACERESULTS]: Hit:" + ei2.HitTF.ToString() + " Point: " + ei2.ipoint.ToString() + " Normal: " + ei2.normal.ToString());
|
//m_log.Info("[RAYTRACERESULTS]: Hit:" + ei2.HitTF.ToString() + " Point: " + ei2.ipoint.ToString() + " Normal: " + ei2.normal.ToString());
|
||||||
pos = new LLVector3(ei2.ipoint.x,ei2.ipoint.y,ei2.ipoint.z);
|
pos = new LLVector3(ei2.ipoint.x, ei2.ipoint.y, ei2.ipoint.z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LLVector3 normal = new LLVector3(ei.normal.x, ei.normal.y, ei.normal.z);
|
LLVector3 normal = new LLVector3(ei.normal.x, ei.normal.y, ei.normal.z);
|
||||||
|
@ -1712,13 +1683,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags)
|
public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags)
|
||||||
{
|
{
|
||||||
UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(remoteClient.AgentId);
|
UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(remoteClient.AgentId);
|
||||||
|
@ -1731,22 +1698,22 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// We cast these to an int so as not to cause a breaking change with old regions
|
// We cast these to an int so as not to cause a breaking change with old regions
|
||||||
// Newer regions treat this as a float on the ExpectUser method.. so we need to wait a few
|
// Newer regions treat this as a float on the ExpectUser method.. so we need to wait a few
|
||||||
// releases before setting these to floats. (r4257)
|
// releases before setting these to floats. (r4257)
|
||||||
UserProfile.HomeLocationX = (int)position.X;
|
UserProfile.HomeLocationX = (int) position.X;
|
||||||
UserProfile.HomeLocationY = (int)position.Y;
|
UserProfile.HomeLocationY = (int) position.Y;
|
||||||
UserProfile.HomeLocationZ = (int)position.Z;
|
UserProfile.HomeLocationZ = (int) position.Z;
|
||||||
UserProfile.HomeLookAtX = (int)lookAt.X;
|
UserProfile.HomeLookAtX = (int) lookAt.X;
|
||||||
UserProfile.HomeLookAtY = (int)lookAt.Y;
|
UserProfile.HomeLookAtY = (int) lookAt.Y;
|
||||||
UserProfile.HomeLookAtZ = (int)lookAt.Z;
|
UserProfile.HomeLookAtZ = (int) lookAt.Z;
|
||||||
CommsManager.UserService.UpdateUserProfileProperties(UserProfile);
|
CommsManager.UserService.UpdateUserProfileProperties(UserProfile);
|
||||||
|
|
||||||
remoteClient.SendAgentAlertMessage("Set home to here if supported by login service",false);
|
remoteClient.SendAgentAlertMessage("Set home to here if supported by login service", false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
remoteClient.SendAgentAlertMessage("Set Home request Failed",false);
|
remoteClient.SendAgentAlertMessage("Set Home request Failed", false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client, bool child)
|
protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client, bool child)
|
||||||
{
|
{
|
||||||
ScenePresence avatar = null;
|
ScenePresence avatar = null;
|
||||||
|
@ -1839,7 +1806,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
ForEachScenePresence(
|
ForEachScenePresence(
|
||||||
delegate(ScenePresence presence) { presence.CoarseLocationChange(); });
|
delegate(ScenePresence presence) { presence.CoarseLocationChange(); });
|
||||||
|
|
||||||
IAgentAssetTransactions agentTransactions = this.RequestModuleInterface<IAgentAssetTransactions>();
|
IAgentAssetTransactions agentTransactions = RequestModuleInterface<IAgentAssetTransactions>();
|
||||||
if (agentTransactions != null)
|
if (agentTransactions != null)
|
||||||
{
|
{
|
||||||
agentTransactions.RemoveAgentAssetTransactions(agentID);
|
agentTransactions.RemoveAgentAssetTransactions(agentID);
|
||||||
|
@ -1879,7 +1846,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error("[SCENE] Scene.cs:RemoveClient exception: " + e.ToString());
|
m_log.Error("[SCENE] Scene.cs:RemoveClient exception: " + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove client agent from profile, so new logins will work
|
// Remove client agent from profile, so new logins will work
|
||||||
|
@ -1899,14 +1866,12 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
lock (av)
|
lock (av)
|
||||||
{
|
{
|
||||||
|
|
||||||
for (int i = 0; i < regionslst.Count; i++)
|
for (int i = 0; i < regionslst.Count; i++)
|
||||||
{
|
{
|
||||||
av.KnownChildRegions.Remove(regionslst[i]);
|
av.KnownChildRegions.Remove(regionslst[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void CloseAllAgents(uint circuitcode)
|
public override void CloseAllAgents(uint circuitcode)
|
||||||
|
@ -2003,7 +1968,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
ILandObject land = LandChannel.getLandObject(agent.startpos.X, agent.startpos.Y);
|
ILandObject land = LandChannel.getLandObject(agent.startpos.X, agent.startpos.Y);
|
||||||
if (land != null)
|
if (land != null)
|
||||||
{
|
{
|
||||||
if (land.landData.landingType == (byte)1 && land.landData.userLocation != LLVector3.Zero)
|
if (land.landData.landingType == 1 && land.landData.userLocation != LLVector3.Zero)
|
||||||
{
|
{
|
||||||
agent.startpos = land.landData.userLocation;
|
agent.startpos = land.landData.userLocation;
|
||||||
}
|
}
|
||||||
|
@ -2105,7 +2070,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Info("[SCENE]: Unable to do Agent Crossing.");
|
m_log.Info("[SCENE]: Unable to do Agent Crossing.");
|
||||||
m_log.Debug("[SCENE]: " + e.ToString());
|
m_log.Debug("[SCENE]: " + e);
|
||||||
}
|
}
|
||||||
//m_innerScene.SwapRootChildAgent(false);
|
//m_innerScene.SwapRootChildAgent(false);
|
||||||
}
|
}
|
||||||
|
@ -2121,15 +2086,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// however to avoid a race condition crossing borders..
|
// however to avoid a race condition crossing borders..
|
||||||
if (childAgentUpdate.IsChildAgent)
|
if (childAgentUpdate.IsChildAgent)
|
||||||
{
|
{
|
||||||
uint rRegionX = (uint)(cAgentData.regionHandle >> 40);
|
uint rRegionX = (uint) (cAgentData.regionHandle >> 40);
|
||||||
uint rRegionY = (((uint)(cAgentData.regionHandle)) >> 8);
|
uint rRegionY = (((uint) (cAgentData.regionHandle)) >> 8);
|
||||||
uint tRegionX = RegionInfo.RegionLocX;
|
uint tRegionX = RegionInfo.RegionLocX;
|
||||||
uint tRegionY = RegionInfo.RegionLocY;
|
uint tRegionY = RegionInfo.RegionLocY;
|
||||||
//Send Data to ScenePresence
|
//Send Data to ScenePresence
|
||||||
childAgentUpdate.ChildAgentDataUpdate(cAgentData, tRegionX, tRegionY, rRegionX, rRegionY);
|
childAgentUpdate.ChildAgentDataUpdate(cAgentData, tRegionX, tRegionY, rRegionX, rRegionY);
|
||||||
// Not Implemented:
|
// Not Implemented:
|
||||||
//TODO: Do we need to pass the message on to one of our neighbors?
|
//TODO: Do we need to pass the message on to one of our neighbors?
|
||||||
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2157,7 +2121,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_innerScene.removeUserCount(true);
|
m_innerScene.removeUserCount(true);
|
||||||
}
|
}
|
||||||
// Tell a single agent to disconnect from the region.
|
// Tell a single agent to disconnect from the region.
|
||||||
DisableSimulatorPacket disable = (DisableSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.DisableSimulator);
|
DisableSimulatorPacket disable = (DisableSimulatorPacket) PacketPool.Instance.GetPacket(PacketType.DisableSimulator);
|
||||||
presence.ControllingClient.OutPacket(disable, ThrottleOutPacketType.Unknown);
|
presence.ControllingClient.OutPacket(disable, ThrottleOutPacketType.Unknown);
|
||||||
presence.ControllingClient.Close(true);
|
presence.ControllingClient.Close(true);
|
||||||
}
|
}
|
||||||
|
@ -2307,9 +2271,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// <param name="mod"></param>
|
/// <param name="mod"></param>
|
||||||
public void RegisterModuleInterface<M>(M mod)
|
public void RegisterModuleInterface<M>(M mod)
|
||||||
{
|
{
|
||||||
if (!ModuleInterfaces.ContainsKey(typeof(M)))
|
if (!ModuleInterfaces.ContainsKey(typeof (M)))
|
||||||
{
|
{
|
||||||
ModuleInterfaces.Add(typeof(M), mod);
|
ModuleInterfaces.Add(typeof (M), mod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2319,9 +2283,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public T RequestModuleInterface<T>()
|
public T RequestModuleInterface<T>()
|
||||||
{
|
{
|
||||||
if (ModuleInterfaces.ContainsKey(typeof(T)))
|
if (ModuleInterfaces.ContainsKey(typeof (T)))
|
||||||
{
|
{
|
||||||
return (T)ModuleInterfaces[typeof(T)];
|
return (T) ModuleInterfaces[typeof (T)];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2336,7 +2300,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_statsReporter.SetObjectCapacity(objects);
|
m_statsReporter.SetObjectCapacity(objects);
|
||||||
}
|
}
|
||||||
objectCapacity = objects;
|
objectCapacity = objects;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<FriendListItem> GetFriendList(LLUUID avatarID)
|
public List<FriendListItem> GetFriendList(LLUUID avatarID)
|
||||||
|
@ -2344,7 +2307,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return CommsManager.GetUserFriendList(avatarID);
|
return CommsManager.GetUserFriendList(avatarID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Other Methods
|
#region Other Methods
|
||||||
|
@ -2378,7 +2340,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendDialogToUser(LLUUID avatarID, string objectName, LLUUID objectID, LLUUID ownerID, string message, LLUUID TextureID, int ch, string[] buttonlabels)
|
public void SendDialogToUser(LLUUID avatarID, string objectName, LLUUID objectID, LLUUID ownerID, string message, LLUUID TextureID, int ch,
|
||||||
|
string[] buttonlabels)
|
||||||
{
|
{
|
||||||
if (m_scenePresences.ContainsKey(avatarID))
|
if (m_scenePresences.ContainsKey(avatarID))
|
||||||
{
|
{
|
||||||
|
@ -2436,6 +2399,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// TODO: m_sceneGridService.DoStuff;
|
// TODO: m_sceneGridService.DoStuff;
|
||||||
m_sceneGridService.RemoveUserFriend(ownerID, ExfriendID);
|
m_sceneGridService.RemoveUserFriend(ownerID, ExfriendID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual List<FriendListItem> StoreGetFriendsForUser(LLUUID ownerID)
|
public virtual List<FriendListItem> StoreGetFriendsForUser(LLUUID ownerID)
|
||||||
{
|
{
|
||||||
// TODO: m_sceneGridService.DoStuff;
|
// TODO: m_sceneGridService.DoStuff;
|
||||||
|
@ -2448,11 +2412,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_statsReporter.AddOutPackets(outPackets);
|
m_statsReporter.AddOutPackets(outPackets);
|
||||||
m_statsReporter.AddunAckedBytes(unAckedBytes);
|
m_statsReporter.AddunAckedBytes(unAckedBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddAgentTime(int ms)
|
public void AddAgentTime(int ms)
|
||||||
{
|
{
|
||||||
m_statsReporter.addFrameMS(ms);
|
m_statsReporter.addFrameMS(ms);
|
||||||
m_statsReporter.addAgentMS(ms);
|
m_statsReporter.addAgentMS(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddAgentUpdates(int count)
|
public void AddAgentUpdates(int count)
|
||||||
{
|
{
|
||||||
m_statsReporter.AddAgentUpdates(count);
|
m_statsReporter.AddAgentUpdates(count);
|
||||||
|
@ -2546,7 +2512,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// <param name="Message">The Message being sent to the user</param>
|
/// <param name="Message">The Message being sent to the user</param>
|
||||||
public void SendRegionMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message)
|
public void SendRegionMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message)
|
||||||
{
|
{
|
||||||
|
|
||||||
List<ScenePresence> presenceList = GetScenePresences();
|
List<ScenePresence> presenceList = GetScenePresences();
|
||||||
|
|
||||||
foreach (ScenePresence presence in presenceList)
|
foreach (ScenePresence presence in presenceList)
|
||||||
|
@ -2566,11 +2531,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// <param name="Message">The Message being sent to the user</param>
|
/// <param name="Message">The Message being sent to the user</param>
|
||||||
public void SendEstateMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message)
|
public void SendEstateMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message)
|
||||||
{
|
{
|
||||||
|
ClientManager.ForEachClient(delegate(IClientAPI controller) { controller.SendBlueBoxMessage(FromAvatarID, fromSessionID, FromAvatarName, Message); }
|
||||||
ClientManager.ForEachClient(delegate(IClientAPI controller)
|
|
||||||
{
|
|
||||||
controller.SendBlueBoxMessage(FromAvatarID, fromSessionID, FromAvatarName, Message);
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2599,9 +2560,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (controller.AgentId != godID)
|
if (controller.AgentId != godID)
|
||||||
controller.Kick(Helpers.FieldToUTF8String(reason));
|
controller.Kick(Helpers.FieldToUTF8String(reason));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
// This is a bit crude. It seems the client will be null before it actually stops the thread
|
// This is a bit crude. It seems the client will be null before it actually stops the thread
|
||||||
|
@ -2647,7 +2605,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Check for spoofing.. since this is permissions we're talking about here!
|
// Check for spoofing.. since this is permissions we're talking about here!
|
||||||
if ((controller.SessionId == sessionID) && (controller.AgentId == agentID))
|
if ((controller.SessionId == sessionID) && (controller.AgentId == agentID))
|
||||||
{
|
{
|
||||||
|
|
||||||
// Tell the object to do permission update
|
// Tell the object to do permission update
|
||||||
if (localId != 0)
|
if (localId != 0)
|
||||||
{
|
{
|
||||||
|
@ -2657,7 +2614,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
chObjectGroup.UpdatePermissions(agentID, field, localId, mask, set);
|
chObjectGroup.UpdatePermissions(agentID, field, localId, mask, set);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2723,7 +2679,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
((SceneObjectGroup)ent).ScheduleGroupForFullUpdate();
|
((SceneObjectGroup) ent).ScheduleGroupForFullUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2743,7 +2699,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = ((SceneObjectGroup)ent).GetChildPart(((SceneObjectGroup)ent).UUID);
|
SceneObjectPart part = ((SceneObjectGroup) ent).GetChildPart((ent).UUID);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
if (part.Name == cmdparams[0])
|
if (part.Name == cmdparams[0])
|
||||||
|
@ -2867,8 +2823,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#region Script Engine
|
#region Script Engine
|
||||||
|
|
||||||
private List<ScriptEngineInterface> ScriptEngines = new List<ScriptEngineInterface>();
|
private readonly bool m_dumpAssetsToFile;
|
||||||
private bool m_dumpAssetsToFile;
|
private readonly List<ScriptEngineInterface> ScriptEngines = new List<ScriptEngineInterface>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
|
@ -2882,13 +2838,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public void TriggerObjectChanged(uint localID, uint change)
|
public void TriggerObjectChanged(uint localID, uint change)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_eventManager.TriggerOnScriptChangedEvent(localID, change);
|
m_eventManager.TriggerOnScriptChangedEvent(localID, change);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos)
|
public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_eventManager.TriggerAtTargetEvent(localID, handle, targetpos, currentpos);
|
m_eventManager.TriggerAtTargetEvent(localID, handle, targetpos, currentpos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2897,20 +2851,21 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_eventManager.TriggerNotAtTargetEvent(localID);
|
m_eventManager.TriggerNotAtTargetEvent(localID);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool scriptDanger(SceneObjectPart part,LLVector3 pos)
|
private bool scriptDanger(SceneObjectPart part, LLVector3 pos)
|
||||||
{
|
{
|
||||||
ILandObject parcel = LandChannel.getLandObject(pos.X, pos.Y);
|
ILandObject parcel = LandChannel.getLandObject(pos.X, pos.Y);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
if (parcel != null)
|
if (parcel != null)
|
||||||
{
|
{
|
||||||
if ((parcel.landData.landFlags & (uint)Parcel.ParcelFlags.AllowOtherScripts) != 0)
|
if ((parcel.landData.landFlags & (uint) Parcel.ParcelFlags.AllowOtherScripts) != 0)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if ((parcel.landData.landFlags & (uint)Parcel.ParcelFlags.AllowGroupScripts) != 0)
|
else if ((parcel.landData.landFlags & (uint) Parcel.ParcelFlags.AllowGroupScripts) != 0)
|
||||||
{
|
{
|
||||||
if (part.OwnerID == parcel.landData.ownerID || (parcel.landData.isGroupOwned && part.GroupID == parcel.landData.groupID) || PermissionsMngr.GenericEstatePermission(part.OwnerID))
|
if (part.OwnerID == parcel.landData.ownerID || (parcel.landData.isGroupOwned && part.GroupID == parcel.landData.groupID) ||
|
||||||
|
PermissionsMngr.GenericEstatePermission(part.OwnerID))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2933,7 +2888,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
if (pos.X > 0f && pos.X < Constants.RegionSize && pos.Y > 0f && pos.Y < Constants.RegionSize)
|
if (pos.X > 0f && pos.X < Constants.RegionSize && pos.Y > 0f && pos.Y < Constants.RegionSize)
|
||||||
{
|
{
|
||||||
// The only time parcel != null when an object is inside a region is when
|
// The only time parcel != null when an object is inside a region is when
|
||||||
|
@ -2952,6 +2906,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool scriptDanger(uint localID, LLVector3 pos)
|
public bool scriptDanger(uint localID, LLVector3 pos)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = GetSceneObjectPart(localID);
|
SceneObjectPart part = GetSceneObjectPart(localID);
|
||||||
|
@ -2967,13 +2922,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public bool pipeEventsForScript(uint localID)
|
public bool pipeEventsForScript(uint localID)
|
||||||
{
|
{
|
||||||
|
|
||||||
SceneObjectPart part = GetSceneObjectPart(localID);
|
SceneObjectPart part = GetSceneObjectPart(localID);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
LLVector3 pos = part.GetWorldPosition();
|
LLVector3 pos = part.GetWorldPosition();
|
||||||
return scriptDanger(part, pos);
|
return scriptDanger(part, pos);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3090,7 +3043,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Info("[BUG]: " + e.ToString());
|
m_log.Info("[BUG]: " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3145,7 +3098,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// action(presence);
|
// action(presence);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -3235,6 +3187,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
return visualParams;
|
return visualParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -40,6 +40,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// XXX These two methods are very temporary
|
||||||
|
/// </summary>
|
||||||
|
protected Dictionary<LLUUID, string> capsPaths = new Dictionary<LLUUID, string>();
|
||||||
|
|
||||||
#region Events
|
#region Events
|
||||||
|
|
||||||
public event restart OnRestart;
|
public event restart OnRestart;
|
||||||
|
@ -50,41 +55,38 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
private readonly ClientManager m_clientManager = new ClientManager();
|
private readonly ClientManager m_clientManager = new ClientManager();
|
||||||
|
|
||||||
public ClientManager ClientManager
|
|
||||||
{
|
|
||||||
get { return m_clientManager; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ulong m_regionHandle;
|
|
||||||
protected string m_regionName;
|
|
||||||
protected RegionInfo m_regInfo;
|
|
||||||
|
|
||||||
//public TerrainEngine Terrain;
|
//public TerrainEngine Terrain;
|
||||||
public ITerrainChannel Heightmap;
|
public ITerrainChannel Heightmap;
|
||||||
|
|
||||||
public ILandChannel LandChannel;
|
public ILandChannel LandChannel;
|
||||||
|
private AssetCache m_assetCache;
|
||||||
|
|
||||||
|
|
||||||
|
protected string m_datastore;
|
||||||
protected EventManager m_eventManager;
|
protected EventManager m_eventManager;
|
||||||
|
|
||||||
|
private uint m_nextLocalId = 8880000;
|
||||||
|
protected RegionInfo m_regInfo;
|
||||||
|
protected ulong m_regionHandle;
|
||||||
|
protected string m_regionName;
|
||||||
|
|
||||||
|
protected RegionStatus m_regStatus;
|
||||||
|
|
||||||
public EventManager EventManager
|
public EventManager EventManager
|
||||||
{
|
{
|
||||||
get { return m_eventManager; }
|
get { return m_eventManager; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected string m_datastore;
|
|
||||||
|
|
||||||
private uint m_nextLocalId = 8880000;
|
|
||||||
|
|
||||||
private AssetCache m_assetCache;
|
|
||||||
|
|
||||||
public AssetCache AssetCache
|
public AssetCache AssetCache
|
||||||
{
|
{
|
||||||
get { return m_assetCache; }
|
get { return m_assetCache; }
|
||||||
set { m_assetCache = value; }
|
set { m_assetCache = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
protected RegionStatus m_regStatus;
|
public ClientManager ClientManager
|
||||||
|
{
|
||||||
|
get { return m_clientManager; }
|
||||||
|
}
|
||||||
|
|
||||||
public RegionStatus Region_Status
|
public RegionStatus Region_Status
|
||||||
{
|
{
|
||||||
|
@ -141,6 +143,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region IScene Members
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -155,6 +159,18 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
get { return m_nextLocalId++; }
|
get { return m_nextLocalId++; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GetCapsPath(LLUUID agentId)
|
||||||
|
{
|
||||||
|
if (capsPaths.ContainsKey(agentId))
|
||||||
|
{
|
||||||
|
return capsPaths[agentId];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region admin stuff
|
#region admin stuff
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -173,6 +189,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract bool OtherRegionUp(RegionInfo thisRegion);
|
public abstract bool OtherRegionUp(RegionInfo thisRegion);
|
||||||
|
|
||||||
public virtual string GetSimulatorVersion()
|
public virtual string GetSimulatorVersion()
|
||||||
|
@ -195,24 +212,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error("[SCENE]: SceneBase.cs: Close() - Failed with exception " + e.ToString());
|
m_log.Error("[SCENE]: SceneBase.cs: Close() - Failed with exception " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// XXX These two methods are very temporary
|
|
||||||
/// </summary>
|
|
||||||
protected Dictionary<LLUUID, string> capsPaths = new Dictionary<LLUUID, string>();
|
|
||||||
public string GetCapsPath(LLUUID agentId)
|
|
||||||
{
|
|
||||||
if (capsPaths.ContainsKey(agentId))
|
|
||||||
{
|
|
||||||
return capsPaths[agentId];
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -43,13 +43,47 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public class SceneCommunicationService //one instance per region
|
public class SceneCommunicationService //one instance per region
|
||||||
{
|
{
|
||||||
|
#region Delegates
|
||||||
|
|
||||||
|
public delegate void InformNeighbourThatRegionUpDelegate(RegionInfo region, ulong regionhandle);
|
||||||
|
|
||||||
|
public delegate void SendChildAgentDataUpdateDelegate(ChildAgentDataUpdate cAgentData, ScenePresence presence);
|
||||||
|
|
||||||
|
public delegate void SendCloseChildAgentDelegate(LLUUID agentID, List<ulong> regionlst);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
public string _debugRegionName = String.Empty;
|
||||||
|
private AgentCrossing handlerAvatarCrossingIntoRegion; // OnAvatarCrossingIntoRegion;
|
||||||
|
private ChildAgentUpdate handlerChildAgentUpdate; // OnChildAgentUpdate;
|
||||||
|
private CloseAgentConnection handlerCloseAgentConnection; // OnCloseAgentConnection;
|
||||||
|
private ExpectPrimDelegate handlerExpectPrim; // OnExpectPrim;
|
||||||
|
private ExpectUserDelegate handlerExpectUser; // OnExpectUser;
|
||||||
|
private PrimCrossing handlerPrimCrossingIntoRegion; // OnPrimCrossingIntoRegion;
|
||||||
|
private RegionUp handlerRegionUp; // OnRegionUp;
|
||||||
|
private RemoveKnownRegionsFromAvatarList handlerRemoveKnownRegionFromAvatar; // OnRemoveKnownRegionFromAvatar;
|
||||||
|
|
||||||
|
public KillObjectDelegate KillObject;
|
||||||
|
|
||||||
protected CommunicationsManager m_commsProvider;
|
protected CommunicationsManager m_commsProvider;
|
||||||
protected RegionInfo m_regionInfo;
|
protected RegionInfo m_regionInfo;
|
||||||
|
|
||||||
protected RegionCommsListener regionCommsHost;
|
protected RegionCommsListener regionCommsHost;
|
||||||
|
|
||||||
|
public SceneCommunicationService(CommunicationsManager commsMan)
|
||||||
|
{
|
||||||
|
m_commsProvider = commsMan;
|
||||||
|
m_commsProvider.GridService.gdebugRegionName = _debugRegionName;
|
||||||
|
m_commsProvider.InterRegion.rdebugRegionName = _debugRegionName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string debugRegionName
|
||||||
|
{
|
||||||
|
get { return _debugRegionName; }
|
||||||
|
set { _debugRegionName = value; }
|
||||||
|
}
|
||||||
|
|
||||||
public event AgentCrossing OnAvatarCrossingIntoRegion;
|
public event AgentCrossing OnAvatarCrossingIntoRegion;
|
||||||
public event ExpectUserDelegate OnExpectUser;
|
public event ExpectUserDelegate OnExpectUser;
|
||||||
public event ExpectPrimDelegate OnExpectPrim;
|
public event ExpectPrimDelegate OnExpectPrim;
|
||||||
|
@ -59,31 +93,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public event ChildAgentUpdate OnChildAgentUpdate;
|
public event ChildAgentUpdate OnChildAgentUpdate;
|
||||||
public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar;
|
public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar;
|
||||||
|
|
||||||
private AgentCrossing handlerAvatarCrossingIntoRegion = null; // OnAvatarCrossingIntoRegion;
|
|
||||||
private ExpectUserDelegate handlerExpectUser = null; // OnExpectUser;
|
|
||||||
private ExpectPrimDelegate handlerExpectPrim = null; // OnExpectPrim;
|
|
||||||
private CloseAgentConnection handlerCloseAgentConnection = null; // OnCloseAgentConnection;
|
|
||||||
private PrimCrossing handlerPrimCrossingIntoRegion = null; // OnPrimCrossingIntoRegion;
|
|
||||||
private RegionUp handlerRegionUp = null; // OnRegionUp;
|
|
||||||
private ChildAgentUpdate handlerChildAgentUpdate = null; // OnChildAgentUpdate;
|
|
||||||
private RemoveKnownRegionsFromAvatarList handlerRemoveKnownRegionFromAvatar = null; // OnRemoveKnownRegionFromAvatar;
|
|
||||||
|
|
||||||
public KillObjectDelegate KillObject;
|
|
||||||
public string _debugRegionName = String.Empty;
|
|
||||||
|
|
||||||
public string debugRegionName
|
|
||||||
{
|
|
||||||
get { return _debugRegionName; }
|
|
||||||
set { _debugRegionName = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public SceneCommunicationService(CommunicationsManager commsMan)
|
|
||||||
{
|
|
||||||
m_commsProvider = commsMan;
|
|
||||||
m_commsProvider.GridService.gdebugRegionName = _debugRegionName;
|
|
||||||
m_commsProvider.InterRegion.rdebugRegionName = _debugRegionName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RegisterRegion(RegionInfo regionInfos)
|
public void RegisterRegion(RegionInfo regionInfos)
|
||||||
{
|
{
|
||||||
m_regionInfo = regionInfos;
|
m_regionInfo = regionInfos;
|
||||||
|
@ -122,6 +131,329 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void InformNeighborsThatRegionisUpCompleted(IAsyncResult iar)
|
||||||
|
{
|
||||||
|
InformNeighbourThatRegionUpDelegate icon = (InformNeighbourThatRegionUpDelegate) iar.AsyncState;
|
||||||
|
icon.EndInvoke(iar);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronous call to information neighbouring regions that this region is up
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="region"></param>
|
||||||
|
/// <param name="regionhandle"></param>
|
||||||
|
private void InformNeighboursThatRegionIsUpAsync(RegionInfo region, ulong regionhandle)
|
||||||
|
{
|
||||||
|
m_log.Info("[INTERGRID]: Starting to inform neighbors that I'm here");
|
||||||
|
//RegionUpData regiondata = new RegionUpData(region.RegionLocX, region.RegionLocY, region.ExternalHostName, region.InternalEndPoint.Port);
|
||||||
|
|
||||||
|
bool regionAccepted =
|
||||||
|
m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region), regionhandle);
|
||||||
|
|
||||||
|
if (regionAccepted)
|
||||||
|
{
|
||||||
|
m_log.Info("[INTERGRID]: Completed informing neighbors that I'm here");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.Warn("[INTERGRID]: Failed to inform neighbors that I'm here.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called by scene when region is initialized (not always when it's listening for agents)
|
||||||
|
/// This is an inter-region message that informs the surrounding neighbors that the sim is up.
|
||||||
|
/// </summary>
|
||||||
|
public void InformNeighborsThatRegionisUp(RegionInfo region)
|
||||||
|
{
|
||||||
|
//m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending InterRegion Notification that region is up " + region.RegionName);
|
||||||
|
|
||||||
|
|
||||||
|
List<SimpleRegionInfo> neighbours = new List<SimpleRegionInfo>();
|
||||||
|
// This stays uncached because we don't already know about our neighbors at this point.
|
||||||
|
neighbours = m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
||||||
|
if (neighbours != null)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < neighbours.Count; i++)
|
||||||
|
{
|
||||||
|
InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync;
|
||||||
|
|
||||||
|
d.BeginInvoke(region, neighbours[i].RegionHandle,
|
||||||
|
InformNeighborsThatRegionisUpCompleted,
|
||||||
|
d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//bool val = m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This informs all neighboring regions about the settings of it's child agent.
|
||||||
|
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
||||||
|
///
|
||||||
|
/// This contains information, such as, Draw Distance, Camera location, Current Position, Current throttle settings, etc.
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
private void SendChildAgentDataUpdateAsync(ChildAgentDataUpdate cAgentData, ScenePresence presence)
|
||||||
|
{
|
||||||
|
//m_log.Info("[INTERGRID]: Informing neighbors about my agent.");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (ulong regionHandle in presence.KnownChildRegions)
|
||||||
|
{
|
||||||
|
bool regionAccepted = m_commsProvider.InterRegion.ChildAgentUpdate(regionHandle, cAgentData);
|
||||||
|
|
||||||
|
if (regionAccepted)
|
||||||
|
{
|
||||||
|
//m_log.Info("[INTERGRID]: Completed sending a neighbor an update about my agent");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//m_log.Info("[INTERGRID]: Failed sending a neighbor an update about my agent");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException)
|
||||||
|
{
|
||||||
|
// We're ignoring a collection was modified error because this data gets old and outdated fast.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendChildAgentDataUpdateCompleted(IAsyncResult iar)
|
||||||
|
{
|
||||||
|
SendChildAgentDataUpdateDelegate icon = (SendChildAgentDataUpdateDelegate) iar.AsyncState;
|
||||||
|
icon.EndInvoke(iar);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendChildAgentDataUpdate(ChildAgentDataUpdate cAgentData, ScenePresence presence)
|
||||||
|
{
|
||||||
|
// This assumes that we know what our neighbors are.
|
||||||
|
SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync;
|
||||||
|
d.BeginInvoke(cAgentData, presence,
|
||||||
|
SendChildAgentDataUpdateCompleted,
|
||||||
|
d);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This Closes child agents on neighboring regions
|
||||||
|
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
||||||
|
/// </summary>
|
||||||
|
private void SendCloseChildAgentAsync(LLUUID agentID, List<ulong> regionlst)
|
||||||
|
{
|
||||||
|
foreach (ulong regionHandle in regionlst)
|
||||||
|
{
|
||||||
|
bool regionAccepted = m_commsProvider.InterRegion.TellRegionToCloseChildConnection(regionHandle, agentID);
|
||||||
|
|
||||||
|
if (regionAccepted)
|
||||||
|
{
|
||||||
|
m_log.Info("[INTERGRID]: Completed sending agent Close agent Request to neighbor");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.Info("[INTERGRID]: Failed sending agent Close agent Request to neighbor");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// We remove the list of known regions from the agent's known region list through an event
|
||||||
|
// to scene, because, if an agent logged of, it's likely that there will be no scene presence
|
||||||
|
// by the time we get to this part of the method.
|
||||||
|
handlerRemoveKnownRegionFromAvatar = OnRemoveKnownRegionFromAvatar;
|
||||||
|
if (handlerRemoveKnownRegionFromAvatar != null)
|
||||||
|
{
|
||||||
|
handlerRemoveKnownRegionFromAvatar(agentID, regionlst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendCloseChildAgentCompleted(IAsyncResult iar)
|
||||||
|
{
|
||||||
|
SendCloseChildAgentDelegate icon = (SendCloseChildAgentDelegate) iar.AsyncState;
|
||||||
|
icon.EndInvoke(iar);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendCloseChildAgentConnections(LLUUID agentID, List<ulong> regionslst)
|
||||||
|
{
|
||||||
|
// This assumes that we know what our neighbors are.
|
||||||
|
SendCloseChildAgentDelegate d = SendCloseChildAgentAsync;
|
||||||
|
d.BeginInvoke(agentID, regionslst,
|
||||||
|
SendCloseChildAgentCompleted,
|
||||||
|
d);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Helper function to request neighbors from grid-comms
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="regionHandle"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public virtual RegionInfo RequestNeighbouringRegionInfo(ulong regionHandle)
|
||||||
|
{
|
||||||
|
//m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending Grid Services Request about neighbor " + regionHandle.ToString());
|
||||||
|
return m_commsProvider.GridService.RequestNeighbourInfo(regionHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Requests map blocks in area of minX, maxX, minY, MaxY in world cordinates
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="minX"></param>
|
||||||
|
/// <param name="minY"></param>
|
||||||
|
/// <param name="maxX"></param>
|
||||||
|
/// <param name="maxY"></param>
|
||||||
|
public virtual void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY)
|
||||||
|
{
|
||||||
|
List<MapBlockData> mapBlocks;
|
||||||
|
mapBlocks = m_commsProvider.GridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, minX + 4, minY + 4);
|
||||||
|
remoteClient.SendMapBlock(mapBlocks);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Try to teleport an agent to a new region.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="remoteClient"></param>
|
||||||
|
/// <param name="RegionHandle"></param>
|
||||||
|
/// <param name="position"></param>
|
||||||
|
/// <param name="lookAt"></param>
|
||||||
|
/// <param name="flags"></param>
|
||||||
|
public virtual void RequestTeleportToLocation(ScenePresence avatar, ulong regionHandle, LLVector3 position,
|
||||||
|
LLVector3 lookAt, uint flags)
|
||||||
|
{
|
||||||
|
bool destRegionUp = false;
|
||||||
|
if (regionHandle == m_regionInfo.RegionHandle)
|
||||||
|
{
|
||||||
|
avatar.ControllingClient.SendTeleportLocationStart();
|
||||||
|
avatar.ControllingClient.SendLocalTeleport(position, lookAt, flags);
|
||||||
|
avatar.Teleport(position);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RegionInfo reg = RequestNeighbouringRegionInfo(regionHandle);
|
||||||
|
if (reg != null)
|
||||||
|
{
|
||||||
|
avatar.ControllingClient.SendTeleportLocationStart();
|
||||||
|
AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo();
|
||||||
|
agent.BaseFolder = LLUUID.Zero;
|
||||||
|
agent.InventoryFolder = LLUUID.Zero;
|
||||||
|
agent.startpos = position;
|
||||||
|
agent.child = true;
|
||||||
|
|
||||||
|
if (reg.RemotingAddress != "" && reg.RemotingPort != 0)
|
||||||
|
{
|
||||||
|
// region is remote. see if it is up
|
||||||
|
m_commsProvider.InterRegion.CheckRegion(reg.RemotingAddress, reg.RemotingPort);
|
||||||
|
destRegionUp = m_commsProvider.InterRegion.Available;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// assume local regions are always up
|
||||||
|
destRegionUp = true;
|
||||||
|
}
|
||||||
|
if (destRegionUp)
|
||||||
|
{
|
||||||
|
avatar.Close();
|
||||||
|
|
||||||
|
// Compared to ScenePresence.CrossToNewRegion(), there's no obvious code to handle a teleport
|
||||||
|
// failure at this point (unlike a border crossing failure). So perhaps this can never fail
|
||||||
|
// once we reach here...
|
||||||
|
avatar.Scene.RemoveCapsHandler(avatar.UUID);
|
||||||
|
|
||||||
|
m_commsProvider.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
|
||||||
|
m_commsProvider.InterRegion.ExpectAvatarCrossing(regionHandle, avatar.ControllingClient.AgentId,
|
||||||
|
position, false);
|
||||||
|
AgentCircuitData circuitdata = avatar.ControllingClient.RequestClientInfo();
|
||||||
|
|
||||||
|
// TODO Should construct this behind a method
|
||||||
|
string capsPath =
|
||||||
|
"http://" + reg.ExternalHostName + ":" + reg.HttpPort
|
||||||
|
+ "/CAPS/" + circuitdata.CapsPath + "0000/";
|
||||||
|
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, avatar.UUID);
|
||||||
|
|
||||||
|
avatar.ControllingClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4),
|
||||||
|
capsPath);
|
||||||
|
avatar.MakeChildAgent();
|
||||||
|
Thread.Sleep(5000);
|
||||||
|
avatar.CrossAttachmentsIntoNewRegion(regionHandle);
|
||||||
|
if (KillObject != null)
|
||||||
|
{
|
||||||
|
KillObject(avatar.LocalId);
|
||||||
|
}
|
||||||
|
uint newRegionX = (uint) (regionHandle >> 40);
|
||||||
|
uint newRegionY = (((uint) (regionHandle)) >> 8);
|
||||||
|
uint oldRegionX = (uint) (m_regionInfo.RegionHandle >> 40);
|
||||||
|
uint oldRegionY = (((uint) (m_regionInfo.RegionHandle)) >> 8);
|
||||||
|
if (Util.fast_distance2d((int) (newRegionX - oldRegionX), (int) (newRegionY - oldRegionY)) > 3)
|
||||||
|
{
|
||||||
|
SendCloseChildAgentConnections(avatar.UUID, avatar.GetKnownRegionList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
avatar.ControllingClient.SendTeleportFailed("Remote Region appears to be down");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="regionhandle"></param>
|
||||||
|
/// <param name="agentID"></param>
|
||||||
|
/// <param name="position"></param>
|
||||||
|
public bool CrossToNeighbouringRegion(ulong regionhandle, LLUUID agentID, LLVector3 position, bool isFlying)
|
||||||
|
{
|
||||||
|
return m_commsProvider.InterRegion.ExpectAvatarCrossing(regionhandle, agentID, position, isFlying);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool PrimCrossToNeighboringRegion(ulong regionhandle, LLUUID primID, string objData, int XMLMethod)
|
||||||
|
{
|
||||||
|
return m_commsProvider.InterRegion.InformRegionOfPrimCrossing(regionhandle, primID, objData, XMLMethod);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Dictionary<string, string> GetGridSettings()
|
||||||
|
{
|
||||||
|
return m_commsProvider.GridService.GetGridSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz)
|
||||||
|
{
|
||||||
|
m_commsProvider.LogOffUser(userid, regionid, regionhandle, posx, posy, posz);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearUserAgent(LLUUID avatarID)
|
||||||
|
{
|
||||||
|
m_commsProvider.UserService.clearUserAgent(avatarID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms)
|
||||||
|
{
|
||||||
|
m_commsProvider.AddNewUserFriend(friendlistowner, friend, perms);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms)
|
||||||
|
{
|
||||||
|
m_commsProvider.UpdateUserFriendPerms(friendlistowner, friend, perms);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend)
|
||||||
|
{
|
||||||
|
m_commsProvider.RemoveUserFriend(friendlistowner, friend);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<FriendListItem> GetUserFriendList(LLUUID friendlistowner)
|
||||||
|
{
|
||||||
|
return m_commsProvider.GetUserFriendList(friendlistowner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY)
|
||||||
|
{
|
||||||
|
return m_commsProvider.GridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AvatarPickerAvatar> GenerateAgentPickerRequestResponse(LLUUID queryID, string query)
|
||||||
|
{
|
||||||
|
return m_commsProvider.GenerateAgentPickerRequestResponse(queryID, query);
|
||||||
|
}
|
||||||
|
|
||||||
#region CommsManager Event handlers
|
#region CommsManager Event handlers
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -181,7 +513,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void PrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical)
|
protected void PrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical)
|
||||||
|
@ -195,7 +526,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
protected bool CloseConnection(ulong regionHandle, LLUUID agentID)
|
protected bool CloseConnection(ulong regionHandle, LLUUID agentID)
|
||||||
{
|
{
|
||||||
m_log.Info("[INTERREGION]: Incoming Agent Close Request for agent: " + agentID.ToString());
|
m_log.Info("[INTERREGION]: Incoming Agent Close Request for agent: " + agentID);
|
||||||
handlerCloseAgentConnection = OnCloseAgentConnection;
|
handlerCloseAgentConnection = OnCloseAgentConnection;
|
||||||
if (handlerCloseAgentConnection != null)
|
if (handlerCloseAgentConnection != null)
|
||||||
{
|
{
|
||||||
|
@ -208,9 +539,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#region Inform Client of Neighbours
|
#region Inform Client of Neighbours
|
||||||
|
|
||||||
private delegate void InformClientOfNeighbourDelegate(
|
|
||||||
ScenePresence avatar, AgentCircuitData a, ulong regionHandle, IPEndPoint endPoint);
|
|
||||||
|
|
||||||
private void InformClientOfNeighbourCompleted(IAsyncResult iar)
|
private void InformClientOfNeighbourCompleted(IAsyncResult iar)
|
||||||
{
|
{
|
||||||
InformClientOfNeighbourDelegate icon = (InformClientOfNeighbourDelegate) iar.AsyncState;
|
InformClientOfNeighbourDelegate icon = (InformClientOfNeighbourDelegate) iar.AsyncState;
|
||||||
|
@ -306,7 +634,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
// XXX: Well, decided to swallow the exception instead for now. Let us see how that goes.
|
// XXX: Well, decided to swallow the exception instead for now. Let us see how that goes.
|
||||||
// throw e;
|
// throw e;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -330,340 +657,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
d);
|
d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private delegate void InformClientOfNeighbourDelegate(
|
||||||
|
ScenePresence avatar, AgentCircuitData a, ulong regionHandle, IPEndPoint endPoint);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public delegate void InformNeighbourThatRegionUpDelegate(RegionInfo region, ulong regionhandle);
|
|
||||||
|
|
||||||
private void InformNeighborsThatRegionisUpCompleted(IAsyncResult iar)
|
|
||||||
{
|
|
||||||
InformNeighbourThatRegionUpDelegate icon = (InformNeighbourThatRegionUpDelegate) iar.AsyncState;
|
|
||||||
icon.EndInvoke(iar);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Asynchronous call to information neighbouring regions that this region is up
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="region"></param>
|
|
||||||
/// <param name="regionhandle"></param>
|
|
||||||
private void InformNeighboursThatRegionIsUpAsync(RegionInfo region, ulong regionhandle)
|
|
||||||
{
|
|
||||||
m_log.Info("[INTERGRID]: Starting to inform neighbors that I'm here");
|
|
||||||
//RegionUpData regiondata = new RegionUpData(region.RegionLocX, region.RegionLocY, region.ExternalHostName, region.InternalEndPoint.Port);
|
|
||||||
|
|
||||||
bool regionAccepted =
|
|
||||||
m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region), regionhandle);
|
|
||||||
|
|
||||||
if (regionAccepted)
|
|
||||||
{
|
|
||||||
m_log.Info("[INTERGRID]: Completed informing neighbors that I'm here");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.Warn("[INTERGRID]: Failed to inform neighbors that I'm here.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Called by scene when region is initialized (not always when it's listening for agents)
|
|
||||||
/// This is an inter-region message that informs the surrounding neighbors that the sim is up.
|
|
||||||
/// </summary>
|
|
||||||
public void InformNeighborsThatRegionisUp(RegionInfo region)
|
|
||||||
{
|
|
||||||
//m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending InterRegion Notification that region is up " + region.RegionName);
|
|
||||||
|
|
||||||
|
|
||||||
List<SimpleRegionInfo> neighbours = new List<SimpleRegionInfo>();
|
|
||||||
// This stays uncached because we don't already know about our neighbors at this point.
|
|
||||||
neighbours = m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
|
||||||
if (neighbours != null)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < neighbours.Count; i++)
|
|
||||||
{
|
|
||||||
InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync;
|
|
||||||
|
|
||||||
d.BeginInvoke(region, neighbours[i].RegionHandle,
|
|
||||||
InformNeighborsThatRegionisUpCompleted,
|
|
||||||
d);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//bool val = m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region));
|
|
||||||
}
|
|
||||||
|
|
||||||
public delegate void SendChildAgentDataUpdateDelegate(ChildAgentDataUpdate cAgentData, ScenePresence presence);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This informs all neighboring regions about the settings of it's child agent.
|
|
||||||
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
|
||||||
///
|
|
||||||
/// This contains information, such as, Draw Distance, Camera location, Current Position, Current throttle settings, etc.
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
private void SendChildAgentDataUpdateAsync(ChildAgentDataUpdate cAgentData, ScenePresence presence)
|
|
||||||
{
|
|
||||||
//m_log.Info("[INTERGRID]: Informing neighbors about my agent.");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (ulong regionHandle in presence.KnownChildRegions)
|
|
||||||
{
|
|
||||||
bool regionAccepted = m_commsProvider.InterRegion.ChildAgentUpdate(regionHandle, cAgentData);
|
|
||||||
|
|
||||||
if (regionAccepted)
|
|
||||||
{
|
|
||||||
//m_log.Info("[INTERGRID]: Completed sending a neighbor an update about my agent");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//m_log.Info("[INTERGRID]: Failed sending a neighbor an update about my agent");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (InvalidOperationException)
|
|
||||||
{
|
|
||||||
// We're ignoring a collection was modified error because this data gets old and outdated fast.
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SendChildAgentDataUpdateCompleted(IAsyncResult iar)
|
|
||||||
{
|
|
||||||
SendChildAgentDataUpdateDelegate icon = (SendChildAgentDataUpdateDelegate) iar.AsyncState;
|
|
||||||
icon.EndInvoke(iar);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SendChildAgentDataUpdate(ChildAgentDataUpdate cAgentData, ScenePresence presence)
|
|
||||||
{
|
|
||||||
// This assumes that we know what our neighbors are.
|
|
||||||
SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync;
|
|
||||||
d.BeginInvoke(cAgentData,presence,
|
|
||||||
SendChildAgentDataUpdateCompleted,
|
|
||||||
d);
|
|
||||||
}
|
|
||||||
|
|
||||||
public delegate void SendCloseChildAgentDelegate( LLUUID agentID, List<ulong> regionlst);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This Closes child agents on neighboring regions
|
|
||||||
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
|
||||||
/// </summary>
|
|
||||||
private void SendCloseChildAgentAsync(LLUUID agentID, List<ulong> regionlst)
|
|
||||||
{
|
|
||||||
|
|
||||||
foreach (ulong regionHandle in regionlst)
|
|
||||||
{
|
|
||||||
bool regionAccepted = m_commsProvider.InterRegion.TellRegionToCloseChildConnection(regionHandle, agentID);
|
|
||||||
|
|
||||||
if (regionAccepted)
|
|
||||||
{
|
|
||||||
m_log.Info("[INTERGRID]: Completed sending agent Close agent Request to neighbor");
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.Info("[INTERGRID]: Failed sending agent Close agent Request to neighbor");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// We remove the list of known regions from the agent's known region list through an event
|
|
||||||
// to scene, because, if an agent logged of, it's likely that there will be no scene presence
|
|
||||||
// by the time we get to this part of the method.
|
|
||||||
handlerRemoveKnownRegionFromAvatar = OnRemoveKnownRegionFromAvatar;
|
|
||||||
if (handlerRemoveKnownRegionFromAvatar != null)
|
|
||||||
{
|
|
||||||
handlerRemoveKnownRegionFromAvatar(agentID, regionlst);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SendCloseChildAgentCompleted(IAsyncResult iar)
|
|
||||||
{
|
|
||||||
SendCloseChildAgentDelegate icon = (SendCloseChildAgentDelegate)iar.AsyncState;
|
|
||||||
icon.EndInvoke(iar);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SendCloseChildAgentConnections(LLUUID agentID, List<ulong> regionslst)
|
|
||||||
{
|
|
||||||
// This assumes that we know what our neighbors are.
|
|
||||||
SendCloseChildAgentDelegate d = SendCloseChildAgentAsync;
|
|
||||||
d.BeginInvoke(agentID, regionslst,
|
|
||||||
SendCloseChildAgentCompleted,
|
|
||||||
d);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Helper function to request neighbors from grid-comms
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="regionHandle"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public virtual RegionInfo RequestNeighbouringRegionInfo(ulong regionHandle)
|
|
||||||
{
|
|
||||||
//m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending Grid Services Request about neighbor " + regionHandle.ToString());
|
|
||||||
return m_commsProvider.GridService.RequestNeighbourInfo(regionHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Requests map blocks in area of minX, maxX, minY, MaxY in world cordinates
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="minX"></param>
|
|
||||||
/// <param name="minY"></param>
|
|
||||||
/// <param name="maxX"></param>
|
|
||||||
/// <param name="maxY"></param>
|
|
||||||
public virtual void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY)
|
|
||||||
{
|
|
||||||
List<MapBlockData> mapBlocks;
|
|
||||||
mapBlocks = m_commsProvider.GridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, minX + 4, minY + 4);
|
|
||||||
remoteClient.SendMapBlock(mapBlocks);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Try to teleport an agent to a new region.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="remoteClient"></param>
|
|
||||||
/// <param name="RegionHandle"></param>
|
|
||||||
/// <param name="position"></param>
|
|
||||||
/// <param name="lookAt"></param>
|
|
||||||
/// <param name="flags"></param>
|
|
||||||
public virtual void RequestTeleportToLocation(ScenePresence avatar, ulong regionHandle, LLVector3 position,
|
|
||||||
LLVector3 lookAt, uint flags)
|
|
||||||
{
|
|
||||||
bool destRegionUp = false;
|
|
||||||
if (regionHandle == m_regionInfo.RegionHandle)
|
|
||||||
{
|
|
||||||
avatar.ControllingClient.SendTeleportLocationStart();
|
|
||||||
avatar.ControllingClient.SendLocalTeleport(position, lookAt, flags);
|
|
||||||
avatar.Teleport(position);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RegionInfo reg = RequestNeighbouringRegionInfo(regionHandle);
|
|
||||||
if (reg != null)
|
|
||||||
{
|
|
||||||
avatar.ControllingClient.SendTeleportLocationStart();
|
|
||||||
AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo();
|
|
||||||
agent.BaseFolder = LLUUID.Zero;
|
|
||||||
agent.InventoryFolder = LLUUID.Zero;
|
|
||||||
agent.startpos = position;
|
|
||||||
agent.child = true;
|
|
||||||
|
|
||||||
if (reg.RemotingAddress != "" && reg.RemotingPort != 0)
|
|
||||||
{
|
|
||||||
// region is remote. see if it is up
|
|
||||||
m_commsProvider.InterRegion.CheckRegion(reg.RemotingAddress, reg.RemotingPort);
|
|
||||||
destRegionUp = m_commsProvider.InterRegion.Available;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// assume local regions are always up
|
|
||||||
destRegionUp = true;
|
|
||||||
}
|
|
||||||
if(destRegionUp)
|
|
||||||
{
|
|
||||||
avatar.Close();
|
|
||||||
|
|
||||||
// Compared to ScenePresence.CrossToNewRegion(), there's no obvious code to handle a teleport
|
|
||||||
// failure at this point (unlike a border crossing failure). So perhaps this can never fail
|
|
||||||
// once we reach here...
|
|
||||||
avatar.Scene.RemoveCapsHandler(avatar.UUID);
|
|
||||||
|
|
||||||
m_commsProvider.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
|
|
||||||
m_commsProvider.InterRegion.ExpectAvatarCrossing(regionHandle, avatar.ControllingClient.AgentId,
|
|
||||||
position, false);
|
|
||||||
AgentCircuitData circuitdata = avatar.ControllingClient.RequestClientInfo();
|
|
||||||
|
|
||||||
// TODO Should construct this behind a method
|
|
||||||
string capsPath =
|
|
||||||
"http://" + reg.ExternalHostName + ":" + reg.HttpPort
|
|
||||||
+ "/CAPS/" + circuitdata.CapsPath + "0000/";
|
|
||||||
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, avatar.UUID);
|
|
||||||
|
|
||||||
avatar.ControllingClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4),
|
|
||||||
capsPath);
|
|
||||||
avatar.MakeChildAgent();
|
|
||||||
Thread.Sleep(5000);
|
|
||||||
avatar.CrossAttachmentsIntoNewRegion(regionHandle);
|
|
||||||
if (KillObject != null)
|
|
||||||
{
|
|
||||||
KillObject(avatar.LocalId);
|
|
||||||
}
|
|
||||||
uint newRegionX = (uint)(regionHandle >> 40);
|
|
||||||
uint newRegionY = (((uint)(regionHandle)) >> 8);
|
|
||||||
uint oldRegionX = (uint)(m_regionInfo.RegionHandle >> 40);
|
|
||||||
uint oldRegionY = (((uint)(m_regionInfo.RegionHandle)) >> 8);
|
|
||||||
if (Util.fast_distance2d((int)(newRegionX - oldRegionX), (int)(newRegionY - oldRegionY)) > 3)
|
|
||||||
{
|
|
||||||
SendCloseChildAgentConnections(avatar.UUID,avatar.GetKnownRegionList());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
avatar.ControllingClient.SendTeleportFailed("Remote Region appears to be down");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="regionhandle"></param>
|
|
||||||
/// <param name="agentID"></param>
|
|
||||||
/// <param name="position"></param>
|
|
||||||
public bool CrossToNeighbouringRegion(ulong regionhandle, LLUUID agentID, LLVector3 position, bool isFlying)
|
|
||||||
{
|
|
||||||
return m_commsProvider.InterRegion.ExpectAvatarCrossing(regionhandle, agentID, position, isFlying);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool PrimCrossToNeighboringRegion(ulong regionhandle, LLUUID primID, string objData, int XMLMethod)
|
|
||||||
{
|
|
||||||
return m_commsProvider.InterRegion.InformRegionOfPrimCrossing(regionhandle, primID, objData, XMLMethod);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Dictionary<string, string> GetGridSettings()
|
|
||||||
{
|
|
||||||
return m_commsProvider.GridService.GetGridSettings();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz)
|
|
||||||
{
|
|
||||||
m_commsProvider.LogOffUser(userid, regionid, regionhandle, posx, posy, posz);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ClearUserAgent(LLUUID avatarID)
|
|
||||||
{
|
|
||||||
m_commsProvider.UserService.clearUserAgent(avatarID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms)
|
|
||||||
{
|
|
||||||
m_commsProvider.AddNewUserFriend(friendlistowner, friend, perms);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms)
|
|
||||||
{
|
|
||||||
m_commsProvider.UpdateUserFriendPerms(friendlistowner, friend, perms);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend)
|
|
||||||
{
|
|
||||||
m_commsProvider.RemoveUserFriend(friendlistowner, friend);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<FriendListItem> GetUserFriendList(LLUUID friendlistowner)
|
|
||||||
{
|
|
||||||
return m_commsProvider.GetUserFriendList(friendlistowner);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY)
|
|
||||||
{
|
|
||||||
return m_commsProvider.GridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<AvatarPickerAvatar> GenerateAgentPickerRequestResponse(LLUUID queryID, string query)
|
|
||||||
{
|
|
||||||
return m_commsProvider.GenerateAgentPickerRequestResponse(queryID, query);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -38,118 +38,59 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class EventManager
|
public class EventManager
|
||||||
{
|
{
|
||||||
public delegate void OnFrameDelegate();
|
#region Delegates
|
||||||
|
|
||||||
public event OnFrameDelegate OnFrame;
|
|
||||||
|
|
||||||
public delegate void ClientMovement(ScenePresence client);
|
|
||||||
|
|
||||||
public event ClientMovement OnClientMovement;
|
|
||||||
|
|
||||||
public delegate void OnTerrainTickDelegate();
|
|
||||||
|
|
||||||
public event OnTerrainTickDelegate OnTerrainTick;
|
|
||||||
|
|
||||||
public delegate void OnBackupDelegate(IRegionDataStore datastore);
|
|
||||||
|
|
||||||
public event OnBackupDelegate OnBackup;
|
|
||||||
|
|
||||||
public delegate void OnNewClientDelegate(IClientAPI client);
|
|
||||||
|
|
||||||
public event OnNewClientDelegate OnNewClient;
|
|
||||||
|
|
||||||
public delegate void OnNewPresenceDelegate(ScenePresence presence);
|
|
||||||
|
|
||||||
public event OnNewPresenceDelegate OnNewPresence;
|
|
||||||
|
|
||||||
public delegate void OnRemovePresenceDelegate(LLUUID agentId);
|
|
||||||
|
|
||||||
public event OnRemovePresenceDelegate OnRemovePresence;
|
|
||||||
|
|
||||||
public delegate void OnParcelPrimCountUpdateDelegate();
|
|
||||||
|
|
||||||
public event OnParcelPrimCountUpdateDelegate OnParcelPrimCountUpdate;
|
|
||||||
|
|
||||||
public delegate void OnParcelPrimCountAddDelegate(SceneObjectGroup obj);
|
|
||||||
|
|
||||||
public event OnParcelPrimCountAddDelegate OnParcelPrimCountAdd;
|
|
||||||
|
|
||||||
public delegate void OnPluginConsoleDelegate(string[] args);
|
|
||||||
|
|
||||||
public event OnPluginConsoleDelegate OnPluginConsole;
|
|
||||||
|
|
||||||
public delegate void OnShutdownDelegate();
|
|
||||||
|
|
||||||
public event OnShutdownDelegate OnShutdown;
|
|
||||||
|
|
||||||
public delegate void ObjectGrabDelegate(uint localID, LLVector3 offsetPos, IClientAPI remoteClient);
|
|
||||||
public delegate void ObjectDeGrabDelegate(uint localID, IClientAPI remoteClient);
|
|
||||||
|
|
||||||
public delegate void OnPermissionErrorDelegate(LLUUID user, string reason);
|
|
||||||
|
|
||||||
public event ObjectGrabDelegate OnObjectGrab;
|
|
||||||
public event ObjectDeGrabDelegate OnObjectDeGrab;
|
|
||||||
|
|
||||||
public event OnPermissionErrorDelegate OnPermissionError;
|
|
||||||
|
|
||||||
public delegate void NewRezScript(uint localID, LLUUID itemID, string script);
|
|
||||||
|
|
||||||
public event NewRezScript OnRezScript;
|
|
||||||
|
|
||||||
public delegate void RemoveScript(uint localID, LLUUID itemID);
|
|
||||||
|
|
||||||
public event RemoveScript OnRemoveScript;
|
|
||||||
|
|
||||||
public delegate bool SceneGroupMoved(LLUUID groupID, LLVector3 delta);
|
|
||||||
|
|
||||||
public event SceneGroupMoved OnSceneGroupMove;
|
|
||||||
|
|
||||||
public delegate void SceneGroupGrabed(LLUUID groupID, LLVector3 offset, LLUUID userID);
|
|
||||||
|
|
||||||
public event SceneGroupGrabed OnSceneGroupGrab;
|
|
||||||
|
|
||||||
public delegate void LandObjectAdded(ILandObject newParcel);
|
|
||||||
|
|
||||||
public event LandObjectAdded OnLandObjectAdded;
|
|
||||||
|
|
||||||
public delegate void LandObjectRemoved(LLUUID globalID);
|
|
||||||
|
|
||||||
public event LandObjectRemoved OnLandObjectRemoved;
|
|
||||||
|
|
||||||
public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, LLUUID regionID);
|
public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, LLUUID regionID);
|
||||||
|
|
||||||
public event AvatarEnteringNewParcel OnAvatarEnteringNewParcel;
|
public delegate void ClientClosed(LLUUID clientID);
|
||||||
|
|
||||||
|
public delegate void ClientMovement(ScenePresence client);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DeregisterCapsEvent is called by Scene when the caps
|
||||||
|
/// handler for an agent are removed.
|
||||||
|
/// </summary>
|
||||||
|
public delegate void DeregisterCapsEvent(LLUUID agentID, Caps caps);
|
||||||
|
|
||||||
|
public delegate void LandBuy(Object sender, LandBuyArgs e);
|
||||||
|
|
||||||
|
public delegate void LandObjectAdded(ILandObject newParcel);
|
||||||
|
|
||||||
|
public delegate void LandObjectRemoved(LLUUID globalID);
|
||||||
|
|
||||||
|
public delegate void MoneyTransferEvent(Object sender, MoneyTransferArgs e);
|
||||||
|
|
||||||
public delegate void NewGridInstantMessage(GridInstantMessage message);
|
public delegate void NewGridInstantMessage(GridInstantMessage message);
|
||||||
|
|
||||||
public event NewGridInstantMessage OnGridInstantMessageToIMModule;
|
|
||||||
|
|
||||||
public event NewGridInstantMessage OnGridInstantMessageToFriendsModule;
|
|
||||||
|
|
||||||
public event NewGridInstantMessage OnGridInstantMessageToGroupsModule;
|
|
||||||
|
|
||||||
public delegate void ClientClosed(LLUUID clientID);
|
|
||||||
|
|
||||||
public event ClientClosed OnClientClosed;
|
|
||||||
|
|
||||||
public delegate void ScriptChangedEvent(uint localID, uint change);
|
|
||||||
|
|
||||||
public event ScriptChangedEvent OnScriptChangedEvent;
|
|
||||||
|
|
||||||
public delegate void ScriptAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 atpos);
|
|
||||||
|
|
||||||
public event ScriptAtTargetEvent OnScriptAtTargetEvent;
|
|
||||||
|
|
||||||
public delegate void ScriptNotAtTargetEvent(uint localID);
|
|
||||||
|
|
||||||
public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent;
|
|
||||||
|
|
||||||
public event OnNewPresenceDelegate OnMakeChildAgent;
|
|
||||||
|
|
||||||
public delegate void NewInventoryItemUploadComplete(LLUUID avatarID, LLUUID assetID, string name, int userlevel);
|
public delegate void NewInventoryItemUploadComplete(LLUUID avatarID, LLUUID assetID, string name, int userlevel);
|
||||||
|
|
||||||
public event NewInventoryItemUploadComplete OnNewInventoryItemUploadComplete;
|
public delegate void NewRezScript(uint localID, LLUUID itemID, string script);
|
||||||
|
|
||||||
|
public delegate void ObjectDeGrabDelegate(uint localID, IClientAPI remoteClient);
|
||||||
|
|
||||||
|
public delegate void ObjectGrabDelegate(uint localID, LLVector3 offsetPos, IClientAPI remoteClient);
|
||||||
|
|
||||||
|
public delegate void OnBackupDelegate(IRegionDataStore datastore);
|
||||||
|
|
||||||
|
public delegate void OnFrameDelegate();
|
||||||
|
|
||||||
|
public delegate void OnNewClientDelegate(IClientAPI client);
|
||||||
|
|
||||||
|
public delegate void OnNewPresenceDelegate(ScenePresence presence);
|
||||||
|
|
||||||
|
public delegate void OnParcelPrimCountAddDelegate(SceneObjectGroup obj);
|
||||||
|
|
||||||
|
public delegate void OnParcelPrimCountUpdateDelegate();
|
||||||
|
|
||||||
|
public delegate void OnPermissionErrorDelegate(LLUUID user, string reason);
|
||||||
|
|
||||||
|
public delegate void OnPluginConsoleDelegate(string[] args);
|
||||||
|
|
||||||
|
public delegate void OnRemovePresenceDelegate(LLUUID agentId);
|
||||||
|
|
||||||
|
public delegate void OnShutdownDelegate();
|
||||||
|
|
||||||
|
public delegate void OnTerrainTickDelegate();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// RegisterCapsEvent is called by Scene after the Caps object
|
/// RegisterCapsEvent is called by Scene after the Caps object
|
||||||
|
@ -157,117 +98,126 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// client and provides region modules to add their caps.
|
/// client and provides region modules to add their caps.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public delegate void RegisterCapsEvent(LLUUID agentID, Caps caps);
|
public delegate void RegisterCapsEvent(LLUUID agentID, Caps caps);
|
||||||
|
|
||||||
|
public delegate void RemoveScript(uint localID, LLUUID itemID);
|
||||||
|
|
||||||
|
public delegate void SceneGroupGrabed(LLUUID groupID, LLVector3 offset, LLUUID userID);
|
||||||
|
|
||||||
|
public delegate bool SceneGroupMoved(LLUUID groupID, LLVector3 delta);
|
||||||
|
|
||||||
|
public delegate void ScriptAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 atpos);
|
||||||
|
|
||||||
|
public delegate void ScriptChangedEvent(uint localID, uint change);
|
||||||
|
|
||||||
|
public delegate void ScriptNotAtTargetEvent(uint localID);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private AvatarEnteringNewParcel handlerAvatarEnteringNewParcel; //OnAvatarEnteringNewParcel;
|
||||||
|
private OnBackupDelegate handlerBackup; //OnBackup;
|
||||||
|
private ClientClosed handlerClientClosed; //OnClientClosed;
|
||||||
|
private ClientMovement handlerClientMovement; //OnClientMovement;
|
||||||
|
private DeregisterCapsEvent handlerDeregisterCaps; // OnDeregisterCaps;
|
||||||
|
private OnFrameDelegate handlerFrame; //OnFrame;
|
||||||
|
private NewGridInstantMessage handlerGridInstantMessageToFriends; //OnGridInstantMessageToFriendsModule;
|
||||||
|
private NewGridInstantMessage handlerGridInstantMessageToIM; //OnGridInstantMessageToIMModule;
|
||||||
|
private LandBuy handlerLandBuy;
|
||||||
|
private LandObjectAdded handlerLandObjectAdded; //OnLandObjectAdded;
|
||||||
|
private LandObjectRemoved handlerLandObjectRemoved; //OnLandObjectRemoved;
|
||||||
|
private OnNewPresenceDelegate handlerMakeChildAgent; //OnMakeChildAgent;
|
||||||
|
private MoneyTransferEvent handlerMoneyTransfer; //OnMoneyTransfer;
|
||||||
|
private OnNewClientDelegate handlerNewClient; //OnNewClient;
|
||||||
|
private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete;
|
||||||
|
private OnNewPresenceDelegate handlerNewPresence; //OnNewPresence;
|
||||||
|
private ObjectDeGrabDelegate handlerObjectDeGrab; //OnObjectDeGrab;
|
||||||
|
private ObjectGrabDelegate handlerObjectGrab; //OnObjectGrab;
|
||||||
|
private OnParcelPrimCountAddDelegate handlerParcelPrimCountAdd; //OnParcelPrimCountAdd;
|
||||||
|
private OnParcelPrimCountUpdateDelegate handlerParcelPrimCountUpdate; //OnParcelPrimCountUpdate;
|
||||||
|
private OnPermissionErrorDelegate handlerPermissionError; //OnPermissionError;
|
||||||
|
private OnPluginConsoleDelegate handlerPluginConsole; //OnPluginConsole;
|
||||||
|
private RegisterCapsEvent handlerRegisterCaps; // OnRegisterCaps;
|
||||||
|
private OnRemovePresenceDelegate handlerRemovePresence; //OnRemovePresence;
|
||||||
|
private RemoveScript handlerRemoveScript; //OnRemoveScript;
|
||||||
|
private NewRezScript handlerRezScript; //OnRezScript;
|
||||||
|
private SceneGroupGrabed handlerSceneGroupGrab; //OnSceneGroupGrab;
|
||||||
|
private SceneGroupMoved handlerSceneGroupMove; //OnSceneGroupMove;
|
||||||
|
private ScriptAtTargetEvent handlerScriptAtTargetEvent;
|
||||||
|
private ScriptChangedEvent handlerScriptChangedEvent; //OnScriptChangedEvent;
|
||||||
|
private ScriptNotAtTargetEvent handlerScriptNotAtTargetEvent;
|
||||||
|
private OnShutdownDelegate handlerShutdown; //OnShutdown;
|
||||||
|
private OnTerrainTickDelegate handlerTerrainTick; // OnTerainTick;
|
||||||
|
private LandBuy handlerValidateLandBuy;
|
||||||
|
|
||||||
|
public event OnFrameDelegate OnFrame;
|
||||||
|
|
||||||
|
public event ClientMovement OnClientMovement;
|
||||||
|
|
||||||
|
public event OnTerrainTickDelegate OnTerrainTick;
|
||||||
|
|
||||||
|
public event OnBackupDelegate OnBackup;
|
||||||
|
|
||||||
|
public event OnNewClientDelegate OnNewClient;
|
||||||
|
|
||||||
|
public event OnNewPresenceDelegate OnNewPresence;
|
||||||
|
|
||||||
|
public event OnRemovePresenceDelegate OnRemovePresence;
|
||||||
|
|
||||||
|
public event OnParcelPrimCountUpdateDelegate OnParcelPrimCountUpdate;
|
||||||
|
|
||||||
|
public event OnParcelPrimCountAddDelegate OnParcelPrimCountAdd;
|
||||||
|
|
||||||
|
public event OnPluginConsoleDelegate OnPluginConsole;
|
||||||
|
|
||||||
|
public event OnShutdownDelegate OnShutdown;
|
||||||
|
|
||||||
|
public event ObjectGrabDelegate OnObjectGrab;
|
||||||
|
public event ObjectDeGrabDelegate OnObjectDeGrab;
|
||||||
|
|
||||||
|
public event OnPermissionErrorDelegate OnPermissionError;
|
||||||
|
|
||||||
|
public event NewRezScript OnRezScript;
|
||||||
|
|
||||||
|
public event RemoveScript OnRemoveScript;
|
||||||
|
|
||||||
|
public event SceneGroupMoved OnSceneGroupMove;
|
||||||
|
|
||||||
|
public event SceneGroupGrabed OnSceneGroupGrab;
|
||||||
|
|
||||||
|
public event LandObjectAdded OnLandObjectAdded;
|
||||||
|
|
||||||
|
public event LandObjectRemoved OnLandObjectRemoved;
|
||||||
|
|
||||||
|
public event AvatarEnteringNewParcel OnAvatarEnteringNewParcel;
|
||||||
|
|
||||||
|
|
||||||
|
public event NewGridInstantMessage OnGridInstantMessageToIMModule;
|
||||||
|
|
||||||
|
public event NewGridInstantMessage OnGridInstantMessageToFriendsModule;
|
||||||
|
|
||||||
|
public event NewGridInstantMessage OnGridInstantMessageToGroupsModule;
|
||||||
|
|
||||||
|
public event ClientClosed OnClientClosed;
|
||||||
|
|
||||||
|
public event ScriptChangedEvent OnScriptChangedEvent;
|
||||||
|
|
||||||
|
public event ScriptAtTargetEvent OnScriptAtTargetEvent;
|
||||||
|
|
||||||
|
public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent;
|
||||||
|
|
||||||
|
public event OnNewPresenceDelegate OnMakeChildAgent;
|
||||||
|
|
||||||
|
public event NewInventoryItemUploadComplete OnNewInventoryItemUploadComplete;
|
||||||
|
|
||||||
public event RegisterCapsEvent OnRegisterCaps;
|
public event RegisterCapsEvent OnRegisterCaps;
|
||||||
/// <summary>
|
|
||||||
/// DeregisterCapsEvent is called by Scene when the caps
|
|
||||||
/// handler for an agent are removed.
|
|
||||||
/// </summary>
|
|
||||||
public delegate void DeregisterCapsEvent(LLUUID agentID, Caps caps);
|
|
||||||
public event DeregisterCapsEvent OnDeregisterCaps;
|
public event DeregisterCapsEvent OnDeregisterCaps;
|
||||||
|
|
||||||
public class MoneyTransferArgs : EventArgs
|
|
||||||
{
|
|
||||||
public LLUUID sender;
|
|
||||||
public LLUUID receiver;
|
|
||||||
|
|
||||||
// Always false. The SL protocol sucks.
|
|
||||||
public bool authenticated = false;
|
|
||||||
|
|
||||||
public int amount;
|
|
||||||
public int transactiontype;
|
|
||||||
public string description;
|
|
||||||
|
|
||||||
public MoneyTransferArgs(LLUUID asender, LLUUID areceiver, int aamount, int atransactiontype, string adescription) {
|
|
||||||
sender = asender;
|
|
||||||
receiver = areceiver;
|
|
||||||
amount = aamount;
|
|
||||||
transactiontype = atransactiontype;
|
|
||||||
description = adescription;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class LandBuyArgs : EventArgs
|
|
||||||
{
|
|
||||||
public LLUUID agentId = LLUUID.Zero;
|
|
||||||
|
|
||||||
public LLUUID groupId = LLUUID.Zero;
|
|
||||||
|
|
||||||
public LLUUID parcelOwnerID = LLUUID.Zero;
|
|
||||||
|
|
||||||
public bool final = false;
|
|
||||||
public bool groupOwned = false;
|
|
||||||
public bool removeContribution = false;
|
|
||||||
public int parcelLocalID = 0;
|
|
||||||
public int parcelArea = 0;
|
|
||||||
public int parcelPrice = 0;
|
|
||||||
public bool authenticated = false;
|
|
||||||
public bool landValidated = false;
|
|
||||||
public bool economyValidated = false;
|
|
||||||
public int transactionID = 0;
|
|
||||||
public int amountDebited = 0;
|
|
||||||
|
|
||||||
|
|
||||||
public LandBuyArgs(LLUUID pagentId, LLUUID pgroupId, bool pfinal, bool pgroupOwned,
|
|
||||||
bool premoveContribution, int pparcelLocalID, int pparcelArea, int pparcelPrice,
|
|
||||||
bool pauthenticated)
|
|
||||||
{
|
|
||||||
agentId = pagentId;
|
|
||||||
groupId = pgroupId;
|
|
||||||
final = pfinal;
|
|
||||||
groupOwned = pgroupOwned;
|
|
||||||
removeContribution = premoveContribution;
|
|
||||||
parcelLocalID = pparcelLocalID;
|
|
||||||
parcelArea = pparcelArea;
|
|
||||||
parcelPrice = pparcelPrice;
|
|
||||||
authenticated = pauthenticated;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public delegate void MoneyTransferEvent(Object sender, MoneyTransferArgs e);
|
|
||||||
|
|
||||||
public delegate void LandBuy(Object sender, LandBuyArgs e);
|
|
||||||
|
|
||||||
public event MoneyTransferEvent OnMoneyTransfer;
|
public event MoneyTransferEvent OnMoneyTransfer;
|
||||||
public event LandBuy OnLandBuy;
|
public event LandBuy OnLandBuy;
|
||||||
public event LandBuy OnValidateLandBuy;
|
public event LandBuy OnValidateLandBuy;
|
||||||
|
|
||||||
/* Designated Event Deletage Instances */
|
/* Designated Event Deletage Instances */
|
||||||
|
|
||||||
private ScriptChangedEvent handlerScriptChangedEvent = null; //OnScriptChangedEvent;
|
|
||||||
private ScriptAtTargetEvent handlerScriptAtTargetEvent = null;
|
|
||||||
private ScriptNotAtTargetEvent handlerScriptNotAtTargetEvent = null;
|
|
||||||
private ClientMovement handlerClientMovement = null; //OnClientMovement;
|
|
||||||
private OnPermissionErrorDelegate handlerPermissionError = null; //OnPermissionError;
|
|
||||||
private OnPluginConsoleDelegate handlerPluginConsole = null; //OnPluginConsole;
|
|
||||||
private OnFrameDelegate handlerFrame = null; //OnFrame;
|
|
||||||
private OnNewClientDelegate handlerNewClient = null; //OnNewClient;
|
|
||||||
private OnNewPresenceDelegate handlerNewPresence = null; //OnNewPresence;
|
|
||||||
private OnRemovePresenceDelegate handlerRemovePresence = null; //OnRemovePresence;
|
|
||||||
private OnBackupDelegate handlerBackup = null; //OnBackup;
|
|
||||||
private OnParcelPrimCountUpdateDelegate handlerParcelPrimCountUpdate = null; //OnParcelPrimCountUpdate;
|
|
||||||
private MoneyTransferEvent handlerMoneyTransfer = null; //OnMoneyTransfer;
|
|
||||||
private OnParcelPrimCountAddDelegate handlerParcelPrimCountAdd = null; //OnParcelPrimCountAdd;
|
|
||||||
private OnShutdownDelegate handlerShutdown = null; //OnShutdown;
|
|
||||||
private ObjectGrabDelegate handlerObjectGrab = null; //OnObjectGrab;
|
|
||||||
private ObjectDeGrabDelegate handlerObjectDeGrab = null; //OnObjectDeGrab;
|
|
||||||
private NewRezScript handlerRezScript = null; //OnRezScript;
|
|
||||||
private RemoveScript handlerRemoveScript = null; //OnRemoveScript;
|
|
||||||
private SceneGroupMoved handlerSceneGroupMove = null; //OnSceneGroupMove;
|
|
||||||
private SceneGroupGrabed handlerSceneGroupGrab = null; //OnSceneGroupGrab;
|
|
||||||
private LandObjectAdded handlerLandObjectAdded = null; //OnLandObjectAdded;
|
|
||||||
private LandObjectRemoved handlerLandObjectRemoved = null; //OnLandObjectRemoved;
|
|
||||||
private AvatarEnteringNewParcel handlerAvatarEnteringNewParcel = null; //OnAvatarEnteringNewParcel;
|
|
||||||
private NewGridInstantMessage handlerGridInstantMessageToIM = null; //OnGridInstantMessageToIMModule;
|
|
||||||
private NewGridInstantMessage handlerGridInstantMessageToFriends = null; //OnGridInstantMessageToFriendsModule;
|
|
||||||
private ClientClosed handlerClientClosed = null; //OnClientClosed;
|
|
||||||
private OnNewPresenceDelegate handlerMakeChildAgent = null; //OnMakeChildAgent;
|
|
||||||
private OnTerrainTickDelegate handlerTerrainTick = null; // OnTerainTick;
|
|
||||||
private RegisterCapsEvent handlerRegisterCaps = null; // OnRegisterCaps;
|
|
||||||
private DeregisterCapsEvent handlerDeregisterCaps = null; // OnDeregisterCaps;
|
|
||||||
private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete = null;
|
|
||||||
private LandBuy handlerLandBuy = null;
|
|
||||||
private LandBuy handlerValidateLandBuy = null;
|
|
||||||
|
|
||||||
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
||||||
{
|
{
|
||||||
handlerScriptChangedEvent = OnScriptChangedEvent;
|
handlerScriptChangedEvent = OnScriptChangedEvent;
|
||||||
|
@ -492,7 +442,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
handlerGridInstantMessageToFriends(message);
|
handlerGridInstantMessageToFriends(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -540,7 +489,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
handlerNewInventoryItemUpdateComplete(agentID, AssetID, AssetName, userlevel);
|
handlerNewInventoryItemUpdateComplete(agentID, AssetID, AssetName, userlevel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void TriggerLandBuy (Object sender, LandBuyArgs e)
|
|
||||||
|
public void TriggerLandBuy(Object sender, LandBuyArgs e)
|
||||||
{
|
{
|
||||||
handlerLandBuy = OnLandBuy;
|
handlerLandBuy = OnLandBuy;
|
||||||
if (handlerLandBuy != null)
|
if (handlerLandBuy != null)
|
||||||
|
@ -548,6 +498,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
handlerLandBuy(sender, e);
|
handlerLandBuy(sender, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerValidateLandBuy(Object sender, LandBuyArgs e)
|
public void TriggerValidateLandBuy(Object sender, LandBuyArgs e)
|
||||||
{
|
{
|
||||||
handlerValidateLandBuy = OnValidateLandBuy;
|
handlerValidateLandBuy = OnValidateLandBuy;
|
||||||
|
@ -574,5 +525,67 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
handlerScriptNotAtTargetEvent(localID);
|
handlerScriptNotAtTargetEvent(localID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Nested type: LandBuyArgs
|
||||||
|
|
||||||
|
public class LandBuyArgs : EventArgs
|
||||||
|
{
|
||||||
|
public LLUUID agentId = LLUUID.Zero;
|
||||||
|
public int amountDebited;
|
||||||
|
public bool authenticated;
|
||||||
|
public bool economyValidated;
|
||||||
|
|
||||||
|
public bool final;
|
||||||
|
public LLUUID groupId = LLUUID.Zero;
|
||||||
|
public bool groupOwned;
|
||||||
|
public bool landValidated;
|
||||||
|
public int parcelArea;
|
||||||
|
public int parcelLocalID;
|
||||||
|
public LLUUID parcelOwnerID = LLUUID.Zero;
|
||||||
|
public int parcelPrice;
|
||||||
|
public bool removeContribution;
|
||||||
|
public int transactionID;
|
||||||
|
|
||||||
|
|
||||||
|
public LandBuyArgs(LLUUID pagentId, LLUUID pgroupId, bool pfinal, bool pgroupOwned,
|
||||||
|
bool premoveContribution, int pparcelLocalID, int pparcelArea, int pparcelPrice,
|
||||||
|
bool pauthenticated)
|
||||||
|
{
|
||||||
|
agentId = pagentId;
|
||||||
|
groupId = pgroupId;
|
||||||
|
final = pfinal;
|
||||||
|
groupOwned = pgroupOwned;
|
||||||
|
removeContribution = premoveContribution;
|
||||||
|
parcelLocalID = pparcelLocalID;
|
||||||
|
parcelArea = pparcelArea;
|
||||||
|
parcelPrice = pparcelPrice;
|
||||||
|
authenticated = pauthenticated;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Nested type: MoneyTransferArgs
|
||||||
|
|
||||||
|
public class MoneyTransferArgs : EventArgs
|
||||||
|
{
|
||||||
|
public int amount;
|
||||||
|
public bool authenticated;
|
||||||
|
public string description;
|
||||||
|
public LLUUID receiver;
|
||||||
|
public LLUUID sender;
|
||||||
|
public int transactiontype;
|
||||||
|
|
||||||
|
public MoneyTransferArgs(LLUUID asender, LLUUID areceiver, int aamount, int atransactiontype, string adescription)
|
||||||
|
{
|
||||||
|
sender = asender;
|
||||||
|
receiver = areceiver;
|
||||||
|
amount = aamount;
|
||||||
|
transactiontype = atransactiontype;
|
||||||
|
description = adescription;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -41,10 +41,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public event RestartSim OnRestartSim;
|
|
||||||
|
|
||||||
private readonly List<Scene> m_localScenes;
|
private readonly List<Scene> m_localScenes;
|
||||||
private Scene m_currentScene = null;
|
private Scene m_currentScene;
|
||||||
|
|
||||||
|
public SceneManager()
|
||||||
|
{
|
||||||
|
m_localScenes = new List<Scene>();
|
||||||
|
}
|
||||||
|
|
||||||
public List<Scene> Scenes
|
public List<Scene> Scenes
|
||||||
{
|
{
|
||||||
|
@ -71,10 +74,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SceneManager()
|
public event RestartSim OnRestartSim;
|
||||||
{
|
|
||||||
m_localScenes = new List<Scene>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
{
|
{
|
||||||
|
@ -252,7 +252,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public bool TrySetCurrentScene(LLUUID regionID)
|
public bool TrySetCurrentScene(LLUUID regionID)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Searching for Region: '{0}'", regionID.ToString());
|
Console.WriteLine("Searching for Region: '{0}'", regionID);
|
||||||
|
|
||||||
foreach (Scene scene in m_localScenes)
|
foreach (Scene scene in m_localScenes)
|
||||||
{
|
{
|
||||||
|
@ -313,7 +313,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
foreach (Scene mscene in m_localScenes)
|
foreach (Scene mscene in m_localScenes)
|
||||||
{
|
{
|
||||||
if((mscene.RegionInfo.InternalEndPoint.Equals(ipEndPoint.Address)) &&
|
if ((mscene.RegionInfo.InternalEndPoint.Equals(ipEndPoint.Address)) &&
|
||||||
(mscene.RegionInfo.InternalEndPoint.Port == ipEndPoint.Port))
|
(mscene.RegionInfo.InternalEndPoint.Port == ipEndPoint.Port))
|
||||||
{
|
{
|
||||||
scene = mscene;
|
scene = mscene;
|
||||||
|
|
|
@ -49,7 +49,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
part.StartScript(itemID);
|
part.StartScript(itemID);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -72,7 +72,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
object_rez = 4194304
|
object_rez = 4194304
|
||||||
}
|
}
|
||||||
|
|
||||||
struct scriptPosTarget
|
internal struct scriptPosTarget
|
||||||
{
|
{
|
||||||
public LLVector3 targetPos;
|
public LLVector3 targetPos;
|
||||||
public float tolerance;
|
public float tolerance;
|
||||||
|
@ -82,14 +82,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public partial class SceneObjectGroup : EntityBase
|
public partial class SceneObjectGroup : EntityBase
|
||||||
{
|
{
|
||||||
private PrimCountTaintedDelegate handlerPrimCountTainted = null;
|
private readonly Dictionary<uint, scriptPosTarget> m_targets = new Dictionary<uint, scriptPosTarget>();
|
||||||
|
private PrimCountTaintedDelegate handlerPrimCountTainted;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Signal whether the non-inventory attributes of any prims in the group have changed
|
/// Signal whether the non-inventory attributes of any prims in the group have changed
|
||||||
/// since the group's last persistent backup
|
/// since the group's last persistent backup
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool HasGroupChanged = false;
|
public bool HasGroupChanged;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private LLVector3 lastPhysGroupPos;
|
private LLVector3 lastPhysGroupPos;
|
||||||
|
@ -104,11 +104,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
protected SceneObjectPart m_rootPart;
|
protected SceneObjectPart m_rootPart;
|
||||||
private Dictionary<LLUUID, scriptEvents> m_scriptEvents = new Dictionary<LLUUID, scriptEvents>();
|
private Dictionary<LLUUID, scriptEvents> m_scriptEvents = new Dictionary<LLUUID, scriptEvents>();
|
||||||
|
|
||||||
private Dictionary<uint, scriptPosTarget> m_targets = new Dictionary<uint, scriptPosTarget>();
|
private bool m_scriptListens_atTarget;
|
||||||
|
private bool m_scriptListens_notAtTarget;
|
||||||
private bool m_scriptListens_atTarget = false;
|
|
||||||
private bool m_scriptListens_notAtTarget = false;
|
|
||||||
|
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
|
@ -119,7 +116,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// think really there should be a list (or whatever) in each scenepresence
|
/// think really there should be a list (or whatever) in each scenepresence
|
||||||
/// saying what prim(s) that user has selected.
|
/// saying what prim(s) that user has selected.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected bool m_isSelected = false;
|
protected bool m_isSelected;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
|
@ -187,7 +184,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return m_rootPart.GroupPosition;
|
return m_rootPart.GroupPosition;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
|
@ -515,10 +511,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_scene.EventManager.OnBackup += ProcessBackup;
|
m_scene.EventManager.OnBackup += ProcessBackup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public LLVector3 GroupScale()
|
public LLVector3 GroupScale()
|
||||||
{
|
{
|
||||||
LLVector3 minScale = new LLVector3(Constants.RegionSize,Constants.RegionSize,Constants.RegionSize);
|
LLVector3 minScale = new LLVector3(Constants.RegionSize, Constants.RegionSize, Constants.RegionSize);
|
||||||
LLVector3 maxScale = new LLVector3(0f,0f,0f);
|
LLVector3 maxScale = new LLVector3(0f, 0f, 0f);
|
||||||
LLVector3 finalScale = new LLVector3(0.5f, 0.5f, 0.5f);
|
LLVector3 finalScale = new LLVector3(0.5f, 0.5f, 0.5f);
|
||||||
|
|
||||||
lock (m_parts)
|
lock (m_parts)
|
||||||
|
@ -541,8 +538,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
finalScale.Y = (minScale.Y > maxScale.Y) ? minScale.Y : maxScale.Y;
|
finalScale.Y = (minScale.Y > maxScale.Y) ? minScale.Y : maxScale.Y;
|
||||||
finalScale.Z = (minScale.Z > maxScale.Z) ? minScale.Z : maxScale.Z;
|
finalScale.Z = (minScale.Z > maxScale.Z) ? minScale.Z : maxScale.Z;
|
||||||
return finalScale;
|
return finalScale;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public EntityIntersection TestIntersection(Ray hRay, bool frontFacesOnly, bool faceCenters)
|
public EntityIntersection TestIntersection(Ray hRay, bool frontFacesOnly, bool faceCenters)
|
||||||
{
|
{
|
||||||
// We got a request from the inner_scene to raytrace along the Ray hRay
|
// We got a request from the inner_scene to raytrace along the Ray hRay
|
||||||
|
@ -565,7 +562,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Telling the prim to raytrace.
|
// Telling the prim to raytrace.
|
||||||
//EntityIntersection inter = part.TestIntersection(hRay, parentrotation);
|
//EntityIntersection inter = part.TestIntersection(hRay, parentrotation);
|
||||||
|
|
||||||
EntityIntersection inter = part.TestIntersectionOBB(hRay, parentrotation,frontFacesOnly, faceCenters);
|
EntityIntersection inter = part.TestIntersectionOBB(hRay, parentrotation, frontFacesOnly, faceCenters);
|
||||||
|
|
||||||
// This may need to be updated to the maximum draw distance possible..
|
// This may need to be updated to the maximum draw distance possible..
|
||||||
// We might (and probably will) be checking for prim creation from other sims
|
// We might (and probably will) be checking for prim creation from other sims
|
||||||
|
@ -689,7 +686,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
m_scene.PhysicsScene.RemovePrim(m_rootPart.PhysActor);
|
m_scene.PhysicsScene.RemovePrim(m_rootPart.PhysActor);
|
||||||
m_rootPart.PhysActor = null;
|
m_rootPart.PhysActor = null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AbsolutePosition = AttachOffset;
|
AbsolutePosition = AttachOffset;
|
||||||
|
@ -709,27 +705,28 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_rootPart.ScheduleFullUpdate();
|
m_rootPart.ScheduleFullUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte GetAttachmentPoint()
|
public byte GetAttachmentPoint()
|
||||||
{
|
{
|
||||||
if (m_rootPart != null)
|
if (m_rootPart != null)
|
||||||
{
|
{
|
||||||
return m_rootPart.Shape.State;
|
return m_rootPart.Shape.State;
|
||||||
}
|
}
|
||||||
return (byte)0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearPartAttachmentData()
|
public void ClearPartAttachmentData()
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
{
|
{
|
||||||
part.SetAttachmentPoint((Byte)0);
|
part.SetAttachmentPoint(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DetachToGround()
|
public void DetachToGround()
|
||||||
{
|
{
|
||||||
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar);
|
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar);
|
||||||
LLVector3 detachedpos = new LLVector3(127f,127f,127f);
|
LLVector3 detachedpos = new LLVector3(127f, 127f, 127f);
|
||||||
if (avatar != null)
|
if (avatar != null)
|
||||||
{
|
{
|
||||||
detachedpos = avatar.AbsolutePosition;
|
detachedpos = avatar.AbsolutePosition;
|
||||||
|
@ -738,14 +735,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
AbsolutePosition = detachedpos;
|
AbsolutePosition = detachedpos;
|
||||||
m_rootPart.m_attachedAvatar = LLUUID.Zero;
|
m_rootPart.m_attachedAvatar = LLUUID.Zero;
|
||||||
m_rootPart.SetParentLocalId(0);
|
m_rootPart.SetParentLocalId(0);
|
||||||
m_rootPart.SetAttachmentPoint((byte)0);
|
m_rootPart.SetAttachmentPoint(0);
|
||||||
m_rootPart.m_IsAttachment = false;
|
m_rootPart.m_IsAttachment = false;
|
||||||
m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
||||||
AttachToBackup();
|
AttachToBackup();
|
||||||
m_rootPart.ScheduleFullUpdate();
|
m_rootPart.ScheduleFullUpdate();
|
||||||
m_rootPart.ClearUndoState();
|
m_rootPart.ClearUndoState();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DetachToInventoryPrep()
|
public void DetachToInventoryPrep()
|
||||||
{
|
{
|
||||||
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar);
|
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar);
|
||||||
|
@ -764,8 +761,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
//m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
//m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
||||||
//AttachToBackup();
|
//AttachToBackup();
|
||||||
//m_rootPart.ScheduleFullUpdate();
|
//m_rootPart.ScheduleFullUpdate();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -826,7 +823,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_parts.Add(part.UUID, part);
|
m_parts.Add(part.UUID, part);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -847,7 +843,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (part.UUID != m_rootPart.UUID)
|
if (part.UUID != m_rootPart.UUID)
|
||||||
{
|
{
|
||||||
part.ParentID = m_rootPart.LocalId;
|
part.ParentID = m_rootPart.LocalId;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -860,10 +855,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
{
|
{
|
||||||
part.UUID = LLUUID.Random();
|
part.UUID = LLUUID.Random();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// helper provided for parts.
|
// helper provided for parts.
|
||||||
public int GetSceneMaxUndo()
|
public int GetSceneMaxUndo()
|
||||||
{
|
{
|
||||||
|
@ -871,6 +866,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return m_scene.MaxUndoCount;
|
return m_scene.MaxUndoCount;
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetChildPrimPhysicsPositions()
|
public void ResetChildPrimPhysicsPositions()
|
||||||
{
|
{
|
||||||
AbsolutePosition = AbsolutePosition;
|
AbsolutePosition = AbsolutePosition;
|
||||||
|
@ -897,7 +893,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
SceneObjectPart part = GetChildPart(localId);
|
SceneObjectPart part = GetChildPart(localId);
|
||||||
OnGrabPart(part, offsetPos, remoteClient);
|
OnGrabPart(part, offsetPos, remoteClient);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -905,7 +900,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
part.StoreUndoState();
|
part.StoreUndoState();
|
||||||
part.OnGrab(offsetPos, remoteClient);
|
part.OnGrab(offsetPos, remoteClient);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void OnGrabGroup(LLVector3 offsetPos, IClientAPI remoteClient)
|
public virtual void OnGrabGroup(LLVector3 offsetPos, IClientAPI remoteClient)
|
||||||
|
@ -969,17 +963,17 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public void aggregateScriptEvents()
|
public void aggregateScriptEvents()
|
||||||
{
|
{
|
||||||
uint objectflagupdate=(uint)RootPart.GetEffectiveObjectFlags();
|
uint objectflagupdate = RootPart.GetEffectiveObjectFlags();
|
||||||
|
|
||||||
scriptEvents aggregateScriptEvents=0;
|
scriptEvents aggregateScriptEvents = 0;
|
||||||
|
|
||||||
lock (m_parts)
|
lock (m_parts)
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
{
|
{
|
||||||
if(part == null)
|
if (part == null)
|
||||||
continue;
|
continue;
|
||||||
if(part != RootPart)
|
if (part != RootPart)
|
||||||
part.ObjectFlags = objectflagupdate;
|
part.ObjectFlags = objectflagupdate;
|
||||||
aggregateScriptEvents |= part.m_aggregateScriptEvents;
|
aggregateScriptEvents |= part.m_aggregateScriptEvents;
|
||||||
}
|
}
|
||||||
|
@ -1065,6 +1059,139 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void SetAxisRotation(int axis, int rotate10)
|
||||||
|
{
|
||||||
|
bool setX = false;
|
||||||
|
bool setY = false;
|
||||||
|
bool setZ = false;
|
||||||
|
|
||||||
|
int xaxis = 2;
|
||||||
|
int yaxis = 4;
|
||||||
|
int zaxis = 8;
|
||||||
|
|
||||||
|
if (m_rootPart != null)
|
||||||
|
{
|
||||||
|
setX = ((axis & xaxis) != 0) ? true : false;
|
||||||
|
setY = ((axis & yaxis) != 0) ? true : false;
|
||||||
|
setZ = ((axis & zaxis) != 0) ? true : false;
|
||||||
|
|
||||||
|
float setval = (rotate10 > 0) ? 1f : 0f;
|
||||||
|
|
||||||
|
if (setX)
|
||||||
|
m_rootPart.m_rotationAxis.X = setval;
|
||||||
|
if (setY)
|
||||||
|
m_rootPart.m_rotationAxis.Y = setval;
|
||||||
|
if (setZ)
|
||||||
|
m_rootPart.m_rotationAxis.Z = setval;
|
||||||
|
|
||||||
|
if (setX || setY || setZ)
|
||||||
|
{
|
||||||
|
m_rootPart.SetPhysicsAxisRotation();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int registerTargetWaypoint(LLVector3 target, float tolerance)
|
||||||
|
{
|
||||||
|
scriptPosTarget waypoint = new scriptPosTarget();
|
||||||
|
waypoint.targetPos = target;
|
||||||
|
waypoint.tolerance = tolerance;
|
||||||
|
uint handle = m_scene.PrimIDAllocate();
|
||||||
|
lock (m_targets)
|
||||||
|
{
|
||||||
|
m_targets.Add(handle, waypoint);
|
||||||
|
}
|
||||||
|
return (int) handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterTargetWaypoint(int handle)
|
||||||
|
{
|
||||||
|
lock (m_targets)
|
||||||
|
{
|
||||||
|
if (m_targets.ContainsKey((uint) handle))
|
||||||
|
m_targets.Remove((uint) handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkAtTargets()
|
||||||
|
{
|
||||||
|
if (m_scriptListens_atTarget || m_scriptListens_notAtTarget)
|
||||||
|
{
|
||||||
|
if (m_targets.Count > 0)
|
||||||
|
{
|
||||||
|
bool at_target = false;
|
||||||
|
//LLVector3 targetPos;
|
||||||
|
//uint targetHandle;
|
||||||
|
Dictionary<uint, scriptPosTarget> atTargets = new Dictionary<uint, scriptPosTarget>();
|
||||||
|
lock (m_targets)
|
||||||
|
{
|
||||||
|
foreach (uint idx in m_targets.Keys)
|
||||||
|
{
|
||||||
|
scriptPosTarget target = m_targets[idx];
|
||||||
|
if (Util.GetDistanceTo(target.targetPos, m_rootPart.GroupPosition) <= target.tolerance)
|
||||||
|
{
|
||||||
|
// trigger at_target
|
||||||
|
if (m_scriptListens_atTarget)
|
||||||
|
{
|
||||||
|
// Reusing att.tolerance to hold the index of the target in the targets dictionary
|
||||||
|
// to avoid deadlocking the sim.
|
||||||
|
at_target = true;
|
||||||
|
scriptPosTarget att = new scriptPosTarget();
|
||||||
|
att.targetPos = target.targetPos;
|
||||||
|
att.tolerance = idx;
|
||||||
|
atTargets.Add(idx, att);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (atTargets.Count > 0)
|
||||||
|
{
|
||||||
|
uint[] localids = new uint[0];
|
||||||
|
lock (m_parts)
|
||||||
|
{
|
||||||
|
localids = new uint[m_parts.Count];
|
||||||
|
int cntr = 0;
|
||||||
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
|
{
|
||||||
|
localids[cntr] = part.LocalId;
|
||||||
|
cntr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int ctr = 0; ctr < localids.Length; ctr++)
|
||||||
|
{
|
||||||
|
foreach (uint target in atTargets.Keys)
|
||||||
|
{
|
||||||
|
scriptPosTarget att = atTargets[target];
|
||||||
|
// Reusing att.tolerance to hold the index of the target in the targets dictionary
|
||||||
|
// to avoid deadlocking the sim.
|
||||||
|
m_scene.TriggerAtTargetEvent(localids[ctr], (uint) att.tolerance, att.targetPos, m_rootPart.GroupPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (m_scriptListens_notAtTarget && !at_target)
|
||||||
|
{
|
||||||
|
//trigger not_at_target
|
||||||
|
uint[] localids = new uint[0];
|
||||||
|
lock (m_parts)
|
||||||
|
{
|
||||||
|
localids = new uint[m_parts.Count];
|
||||||
|
int cntr = 0;
|
||||||
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
|
{
|
||||||
|
localids[cntr] = part.LocalId;
|
||||||
|
cntr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int ctr = 0; ctr < localids.Length; ctr++)
|
||||||
|
{
|
||||||
|
m_scene.TriggerNotAtTargetEvent(localids[ctr]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#region Events
|
#region Events
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1364,7 +1491,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
SetPartAsNonRoot(newPart);
|
SetPartAsNonRoot(newPart);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1434,7 +1560,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
|
|
||||||
lock (m_parts)
|
lock (m_parts)
|
||||||
{
|
{
|
||||||
//if (m_rootPart.m_IsAttachment)
|
//if (m_rootPart.m_IsAttachment)
|
||||||
|
@ -1457,7 +1582,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
checkAtTargets();
|
checkAtTargets();
|
||||||
|
|
||||||
|
|
||||||
|
@ -2391,140 +2515,5 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
internal void SetAxisRotation(int axis, int rotate10)
|
|
||||||
{
|
|
||||||
bool setX = false;
|
|
||||||
bool setY = false;
|
|
||||||
bool setZ = false;
|
|
||||||
|
|
||||||
int xaxis = 2;
|
|
||||||
int yaxis = 4;
|
|
||||||
int zaxis = 8;
|
|
||||||
|
|
||||||
if (m_rootPart != null)
|
|
||||||
{
|
|
||||||
setX = ((axis & xaxis) != 0) ? true : false;
|
|
||||||
setY = ((axis & yaxis) != 0) ? true : false;
|
|
||||||
setZ = ((axis & zaxis) != 0) ? true : false;
|
|
||||||
|
|
||||||
float setval = (rotate10 > 0) ? 1f : 0f;
|
|
||||||
|
|
||||||
if (setX)
|
|
||||||
m_rootPart.m_rotationAxis.X = setval;
|
|
||||||
if (setY)
|
|
||||||
m_rootPart.m_rotationAxis.Y = setval;
|
|
||||||
if (setZ)
|
|
||||||
m_rootPart.m_rotationAxis.Z = setval;
|
|
||||||
|
|
||||||
if (setX || setY || setZ)
|
|
||||||
{
|
|
||||||
m_rootPart.SetPhysicsAxisRotation();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int registerTargetWaypoint(LLVector3 target, float tolerance)
|
|
||||||
{
|
|
||||||
scriptPosTarget waypoint = new scriptPosTarget();
|
|
||||||
waypoint.targetPos = target;
|
|
||||||
waypoint.tolerance = tolerance;
|
|
||||||
uint handle = m_scene.PrimIDAllocate();
|
|
||||||
lock (m_targets)
|
|
||||||
{
|
|
||||||
m_targets.Add(handle, waypoint);
|
|
||||||
}
|
|
||||||
return (int)handle;
|
|
||||||
}
|
|
||||||
public void unregisterTargetWaypoint(int handle)
|
|
||||||
{
|
|
||||||
lock (m_targets)
|
|
||||||
{
|
|
||||||
if (m_targets.ContainsKey((uint)handle))
|
|
||||||
m_targets.Remove((uint)handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkAtTargets()
|
|
||||||
{
|
|
||||||
if (m_scriptListens_atTarget || m_scriptListens_notAtTarget)
|
|
||||||
{
|
|
||||||
if (m_targets.Count > 0)
|
|
||||||
{
|
|
||||||
bool at_target = false;
|
|
||||||
//LLVector3 targetPos;
|
|
||||||
//uint targetHandle;
|
|
||||||
Dictionary<uint, scriptPosTarget> atTargets = new Dictionary<uint, scriptPosTarget>();
|
|
||||||
lock (m_targets)
|
|
||||||
{
|
|
||||||
foreach (uint idx in m_targets.Keys)
|
|
||||||
{
|
|
||||||
scriptPosTarget target = m_targets[idx];
|
|
||||||
if (Util.GetDistanceTo(target.targetPos, m_rootPart.GroupPosition) <= target.tolerance)
|
|
||||||
{
|
|
||||||
// trigger at_target
|
|
||||||
if (m_scriptListens_atTarget)
|
|
||||||
{
|
|
||||||
// Reusing att.tolerance to hold the index of the target in the targets dictionary
|
|
||||||
// to avoid deadlocking the sim.
|
|
||||||
at_target = true;
|
|
||||||
scriptPosTarget att = new scriptPosTarget();
|
|
||||||
att.targetPos = target.targetPos;
|
|
||||||
att.tolerance = (float)idx;
|
|
||||||
atTargets.Add(idx, att);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (atTargets.Count > 0)
|
|
||||||
{
|
|
||||||
uint[] localids = new uint[0];
|
|
||||||
lock (m_parts)
|
|
||||||
{
|
|
||||||
localids = new uint[m_parts.Count];
|
|
||||||
int cntr = 0;
|
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
|
||||||
{
|
|
||||||
localids[cntr] = part.LocalId;
|
|
||||||
cntr++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int ctr = 0; ctr < localids.Length; ctr++)
|
|
||||||
{
|
|
||||||
foreach (uint target in atTargets.Keys)
|
|
||||||
{
|
|
||||||
scriptPosTarget att = atTargets[target];
|
|
||||||
// Reusing att.tolerance to hold the index of the target in the targets dictionary
|
|
||||||
// to avoid deadlocking the sim.
|
|
||||||
m_scene.TriggerAtTargetEvent(localids[ctr], (uint)att.tolerance, att.targetPos, m_rootPart.GroupPosition);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (m_scriptListens_notAtTarget && !at_target)
|
|
||||||
{
|
|
||||||
//trigger not_at_target
|
|
||||||
uint[] localids = new uint[0];
|
|
||||||
lock (m_parts)
|
|
||||||
{
|
|
||||||
localids = new uint[m_parts.Count];
|
|
||||||
int cntr = 0;
|
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
|
||||||
{
|
|
||||||
localids[cntr] = part.LocalId;
|
|
||||||
cntr++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int ctr = 0; ctr < localids.Length; ctr++)
|
|
||||||
{
|
|
||||||
m_scene.TriggerNotAtTargetEvent(localids[ctr]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -41,13 +41,29 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private string m_inventoryFileName = String.Empty;
|
private readonly string m_inventoryFileName = String.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tracks whether inventory has changed since the last persistent backup
|
||||||
|
/// </summary>
|
||||||
|
private bool HasInventoryChanged;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The inventory folder for this prim
|
/// The inventory folder for this prim
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private LLUUID m_folderID = LLUUID.Zero;
|
private LLUUID m_folderID = LLUUID.Zero;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Serial count for inventory file , used to tell if inventory has changed
|
||||||
|
/// no need for this to be part of Database backup
|
||||||
|
/// </summary>
|
||||||
|
protected uint m_inventorySerial;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Holds in memory prim inventory
|
||||||
|
/// </summary>
|
||||||
|
protected TaskInventoryDictionary m_taskInventory = new TaskInventoryDictionary();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Exposing this is not particularly good, but it's one of the least evils at the moment to see
|
/// Exposing this is not particularly good, but it's one of the least evils at the moment to see
|
||||||
/// folder id from prim inventory item data, since it's not (yet) actually stored with the prim.
|
/// folder id from prim inventory item data, since it's not (yet) actually stored with the prim.
|
||||||
|
@ -58,34 +74,18 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
set { m_folderID = value; }
|
set { m_folderID = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Serial count for inventory file , used to tell if inventory has changed
|
|
||||||
/// no need for this to be part of Database backup
|
|
||||||
/// </summary>
|
|
||||||
protected uint m_inventorySerial = 0;
|
|
||||||
|
|
||||||
public uint InventorySerial
|
public uint InventorySerial
|
||||||
{
|
{
|
||||||
get { return m_inventorySerial; }
|
get { return m_inventorySerial; }
|
||||||
set { m_inventorySerial = value; }
|
set { m_inventorySerial = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Holds in memory prim inventory
|
|
||||||
/// </summary>
|
|
||||||
protected TaskInventoryDictionary m_taskInventory = new TaskInventoryDictionary();
|
|
||||||
|
|
||||||
public TaskInventoryDictionary TaskInventory
|
public TaskInventoryDictionary TaskInventory
|
||||||
{
|
{
|
||||||
get { return m_taskInventory; }
|
get { return m_taskInventory; }
|
||||||
set { m_taskInventory = value; }
|
set { m_taskInventory = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tracks whether inventory has changed since the last persistent backup
|
|
||||||
/// </summary>
|
|
||||||
private bool HasInventoryChanged;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reset LLUUIDs for all the items in the prim's inventory. This involves either generating
|
/// Reset LLUUIDs for all the items in the prim's inventory. This involves either generating
|
||||||
/// new ones or setting existing UUIDs to the correct parent UUIDs.
|
/// new ones or setting existing UUIDs to the correct parent UUIDs.
|
||||||
|
@ -133,8 +133,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
item.LastOwnerID = item.OwnerID;
|
item.LastOwnerID = item.OwnerID;
|
||||||
item.OwnerID = ownerId;
|
item.OwnerID = ownerId;
|
||||||
item.BaseMask = item.NextOwnerMask & (uint)PermissionMask.All;
|
item.BaseMask = item.NextOwnerMask & (uint) PermissionMask.All;
|
||||||
item.OwnerMask = item.NextOwnerMask & (uint)PermissionMask.All;
|
item.OwnerMask = item.NextOwnerMask & (uint) PermissionMask.All;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -205,7 +205,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string script = Helpers.FieldToUTF8String(asset.Data);
|
string script = Helpers.FieldToUTF8String(asset.Data);
|
||||||
m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId,item.ItemID,script);
|
m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId, item.ItemID, script);
|
||||||
m_parentGroup.AddActiveScriptCount(1);
|
m_parentGroup.AddActiveScriptCount(1);
|
||||||
ScheduleFullUpdate();
|
ScheduleFullUpdate();
|
||||||
}
|
}
|
||||||
|
@ -226,7 +226,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (m_taskInventory.ContainsKey(itemId))
|
if (m_taskInventory.ContainsKey(itemId))
|
||||||
{
|
{
|
||||||
StartScript(m_taskInventory[itemId]);
|
StartScript(m_taskInventory[itemId]);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -263,7 +262,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
foreach (TaskInventoryItem item in m_taskInventory.Values)
|
foreach (TaskInventoryItem item in m_taskInventory.Values)
|
||||||
{
|
{
|
||||||
if(item.Name == name)
|
if (item.Name == name)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -271,14 +270,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
private string FindAvailableInventoryName(string name)
|
private string FindAvailableInventoryName(string name)
|
||||||
{
|
{
|
||||||
if(!InventoryContainsName(name))
|
if (!InventoryContainsName(name))
|
||||||
return name;
|
return name;
|
||||||
|
|
||||||
int suffix=1;
|
int suffix = 1;
|
||||||
while(suffix < 256)
|
while (suffix < 256)
|
||||||
{
|
{
|
||||||
string tryName=String.Format("{0} {1}", name, suffix);
|
string tryName = String.Format("{0} {1}", name, suffix);
|
||||||
if(!InventoryContainsName(tryName))
|
if (!InventoryContainsName(tryName))
|
||||||
return tryName;
|
return tryName;
|
||||||
suffix++;
|
suffix++;
|
||||||
}
|
}
|
||||||
|
@ -295,11 +294,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
item.CreationDate = 1000;
|
item.CreationDate = 1000;
|
||||||
item.ParentPartID = UUID;
|
item.ParentPartID = UUID;
|
||||||
|
|
||||||
string name=FindAvailableInventoryName(item.Name);
|
string name = FindAvailableInventoryName(item.Name);
|
||||||
if(name == String.Empty)
|
if (name == String.Empty)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
item.Name=name;
|
item.Name = name;
|
||||||
|
|
||||||
lock (m_taskInventory)
|
lock (m_taskInventory)
|
||||||
{
|
{
|
||||||
|
@ -428,7 +427,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
scriptcount++;
|
scriptcount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (scriptcount <= 0)
|
if (scriptcount <= 0)
|
||||||
{
|
{
|
||||||
|
@ -464,7 +462,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
if (m_inventorySerial > 0)
|
if (m_inventorySerial > 0)
|
||||||
{
|
{
|
||||||
client.SendTaskInventory(m_uuid, (short)m_inventorySerial,
|
client.SendTaskInventory(m_uuid, (short) m_inventorySerial,
|
||||||
Helpers.StringToField(m_inventoryFileName));
|
Helpers.StringToField(m_inventoryFileName));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -571,6 +569,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Nested type: InventoryStringBuilder
|
||||||
|
|
||||||
public class InventoryStringBuilder
|
public class InventoryStringBuilder
|
||||||
{
|
{
|
||||||
public string BuildString = String.Empty;
|
public string BuildString = String.Empty;
|
||||||
|
@ -629,5 +629,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -39,8 +39,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public class SceneXmlLoader // can move to a module?
|
public class SceneXmlLoader // can move to a module?
|
||||||
{
|
{
|
||||||
protected InnerScene m_innerScene;
|
protected InnerScene m_innerScene;
|
||||||
protected RegionInfo m_regInfo;
|
|
||||||
protected Scene m_parentScene;
|
protected Scene m_parentScene;
|
||||||
|
protected RegionInfo m_regInfo;
|
||||||
|
|
||||||
public SceneXmlLoader(Scene parentScene, InnerScene innerScene, RegionInfo regionInfo)
|
public SceneXmlLoader(Scene parentScene, InnerScene innerScene, RegionInfo regionInfo)
|
||||||
{
|
{
|
||||||
|
@ -136,7 +136,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
returnstring += grp.ToXmlString2();
|
returnstring += grp.ToXmlString2();
|
||||||
returnstring += "</scene>\n";
|
returnstring += "</scene>\n";
|
||||||
return returnstring;
|
return returnstring;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadGroupFromXml2String(string xmlString)
|
public void LoadGroupFromXml2String(string xmlString)
|
||||||
|
@ -153,7 +152,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
CreatePrimFromXml(aPrimNode.OuterXml);
|
CreatePrimFromXml(aPrimNode.OuterXml);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadPrimsFromXml2(string fileName)
|
public void LoadPrimsFromXml2(string fileName)
|
||||||
|
|
|
@ -33,7 +33,9 @@ namespace OpenSim.Region.Environment.Scenes.Scripting
|
||||||
{
|
{
|
||||||
public class NullScriptHost : IScriptHost
|
public class NullScriptHost : IScriptHost
|
||||||
{
|
{
|
||||||
private LLVector3 m_pos = new LLVector3(128, 128, 30);
|
private readonly LLVector3 m_pos = new LLVector3(128, 128, 30);
|
||||||
|
|
||||||
|
#region IScriptHost Members
|
||||||
|
|
||||||
public string Name
|
public string Name
|
||||||
{
|
{
|
||||||
|
@ -83,5 +85,7 @@ namespace OpenSim.Region.Environment.Scenes.Scripting
|
||||||
{
|
{
|
||||||
Console.WriteLine("Tried to SetText [{0}] on NullScriptHost", text);
|
Console.WriteLine("Tried to SetText [{0}] on NullScriptHost", text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -51,7 +51,7 @@ namespace OpenSim.Region.Environment.Scenes.Scripting
|
||||||
{
|
{
|
||||||
m_log.Error("[ScriptEngine]: " +
|
m_log.Error("[ScriptEngine]: " +
|
||||||
"Error loading assembly \"" + EngineName + "\": " + e.Message + ", " +
|
"Error loading assembly \"" + EngineName + "\": " + e.Message + ", " +
|
||||||
e.StackTrace.ToString());
|
e.StackTrace);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,105 +34,68 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
public class SimStatsReporter
|
public class SimStatsReporter
|
||||||
{
|
{
|
||||||
|
#region Delegates
|
||||||
|
|
||||||
public delegate void SendStatResult(SimStatsPacket pack);
|
public delegate void SendStatResult(SimStatsPacket pack);
|
||||||
|
|
||||||
public event SendStatResult OnSendStatsResult;
|
#endregion
|
||||||
|
|
||||||
private SendStatResult handlerSendStatResult = null;
|
private readonly Timer m_report = new Timer();
|
||||||
|
private readonly SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock();
|
||||||
|
private readonly RegionInfo ReportingRegion;
|
||||||
|
private readonly SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[21];
|
||||||
|
private readonly SimStatsPacket statpack = (SimStatsPacket) PacketPool.Instance.GetPacket(PacketType.SimStats);
|
||||||
|
|
||||||
private enum Stats : uint
|
private SendStatResult handlerSendStatResult;
|
||||||
{
|
private int m_activePrim;
|
||||||
TimeDilation = 0,
|
private int m_activeScripts;
|
||||||
SimFPS = 1,
|
private int m_agentMS;
|
||||||
PhysicsFPS = 2,
|
|
||||||
AgentUpdates = 3,
|
|
||||||
FrameMS = 4,
|
|
||||||
NetMS = 5,
|
|
||||||
OtherMS = 6,
|
|
||||||
PhysicsMS = 7,
|
|
||||||
AgentMS = 8,
|
|
||||||
ImageMS = 9,
|
|
||||||
ScriptMS = 10,
|
|
||||||
TotalPrim = 11,
|
|
||||||
ActivePrim = 12,
|
|
||||||
Agents = 13,
|
|
||||||
ChildAgents = 14,
|
|
||||||
ActiveScripts = 15,
|
|
||||||
ScriptLinesPerSecond = 16,
|
|
||||||
InPacketsPerSecond = 17,
|
|
||||||
OutPacketsPerSecond = 18,
|
|
||||||
PendingDownloads = 19,
|
|
||||||
PendingUploads = 20,
|
|
||||||
UnAckedBytes = 24,
|
|
||||||
|
|
||||||
// Havok4 related... May or may not be in upcoming LLclients
|
private int m_agentUpdates;
|
||||||
// (kelly added them sometime late in January 2008)
|
private int m_childAgents;
|
||||||
NumRCCSLODReduced = 25,
|
private int m_fps;
|
||||||
NumRCCSFixed = 26
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sending a stats update every 3 seconds
|
private int m_frameMS;
|
||||||
private int statsUpdatesEveryMS = 3000;
|
private int m_imageMS;
|
||||||
private float statsUpdateFactor = 0;
|
private int m_inPacketsPerSecond;
|
||||||
private float m_timeDilation = 0;
|
private int m_netMS;
|
||||||
private int m_fps = 0;
|
private int m_numPrim;
|
||||||
private float m_pfps = 0;
|
private int m_otherMS;
|
||||||
private int m_agentUpdates = 0;
|
private int m_outPacketsPerSecond;
|
||||||
|
private int m_pendingDownloads;
|
||||||
private int m_frameMS = 0;
|
private int m_pendingUploads;
|
||||||
private int m_netMS = 0;
|
private float m_pfps;
|
||||||
private int m_agentMS = 0;
|
private int m_physicsMS;
|
||||||
private int m_physicsMS = 0;
|
private int m_rootAgents;
|
||||||
private int m_imageMS = 0;
|
private int m_scriptLinesPerSecond;
|
||||||
private int m_otherMS = 0;
|
private float m_timeDilation;
|
||||||
|
private int m_unAckedBytes;
|
||||||
//Ckrinke: (3-21-08) Comment out to remove a compiler warning. Bring back into play when needed.
|
|
||||||
//Ckrinke private int m_scriptMS = 0;
|
|
||||||
|
|
||||||
private int m_rootAgents = 0;
|
|
||||||
private int m_childAgents = 0;
|
|
||||||
private int m_numPrim = 0;
|
|
||||||
private int m_inPacketsPerSecond = 0;
|
|
||||||
private int m_outPacketsPerSecond = 0;
|
|
||||||
private int m_activePrim = 0;
|
|
||||||
private int m_unAckedBytes = 0;
|
|
||||||
private int m_pendingDownloads = 0;
|
|
||||||
private int m_pendingUploads = 0;
|
|
||||||
private int m_activeScripts = 0;
|
|
||||||
private int m_scriptLinesPerSecond = 0;
|
|
||||||
|
|
||||||
private int objectCapacity = 45000;
|
private int objectCapacity = 45000;
|
||||||
|
private float statsUpdateFactor;
|
||||||
|
private int statsUpdatesEveryMS = 3000;
|
||||||
SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[21];
|
|
||||||
SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock();
|
|
||||||
SimStatsPacket statpack = (SimStatsPacket)PacketPool.Instance.GetPacket(PacketType.SimStats);
|
|
||||||
|
|
||||||
|
|
||||||
private RegionInfo ReportingRegion;
|
|
||||||
|
|
||||||
private Timer m_report = new Timer();
|
|
||||||
|
|
||||||
|
|
||||||
public SimStatsReporter(RegionInfo regionData)
|
public SimStatsReporter(RegionInfo regionData)
|
||||||
{
|
{
|
||||||
|
statsUpdateFactor = (statsUpdatesEveryMS / 1000);
|
||||||
statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000);
|
|
||||||
ReportingRegion = regionData;
|
ReportingRegion = regionData;
|
||||||
for (int i = 0; i<21;i++)
|
for (int i = 0; i < 21; i++)
|
||||||
{
|
{
|
||||||
sb[i] = new SimStatsPacket.StatBlock();
|
sb[i] = new SimStatsPacket.StatBlock();
|
||||||
}
|
}
|
||||||
m_report.AutoReset = true;
|
m_report.AutoReset = true;
|
||||||
m_report.Interval = statsUpdatesEveryMS;
|
m_report.Interval = statsUpdatesEveryMS;
|
||||||
m_report.Elapsed += new ElapsedEventHandler(statsHeartBeat);
|
m_report.Elapsed += statsHeartBeat;
|
||||||
m_report.Enabled = true;
|
m_report.Enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public event SendStatResult OnSendStatsResult;
|
||||||
|
|
||||||
public void SetUpdateMS(int ms)
|
public void SetUpdateMS(int ms)
|
||||||
{
|
{
|
||||||
statsUpdatesEveryMS = ms;
|
statsUpdatesEveryMS = ms;
|
||||||
statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000);
|
statsUpdateFactor = (statsUpdatesEveryMS / 1000);
|
||||||
m_report.Interval = statsUpdatesEveryMS;
|
m_report.Interval = statsUpdatesEveryMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,15 +117,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
statpack.Region.RegionFlags = (uint) 0;
|
statpack.Region.RegionFlags = 0;
|
||||||
}
|
}
|
||||||
statpack.Region.ObjectCapacity = (uint) objectCapacity;
|
statpack.Region.ObjectCapacity = (uint) objectCapacity;
|
||||||
|
|
||||||
#region various statistic googly moogly
|
#region various statistic googly moogly
|
||||||
|
|
||||||
// Our FPS is actually 10fps, so multiplying by 5 to get the amount that people expect there
|
// Our FPS is actually 10fps, so multiplying by 5 to get the amount that people expect there
|
||||||
// 0-50 is pretty close to 0-45
|
// 0-50 is pretty close to 0-45
|
||||||
float simfps = (int) ((m_fps * 5));
|
float simfps = ((m_fps * 5));
|
||||||
|
|
||||||
//if (simfps > 45)
|
//if (simfps > 45)
|
||||||
//simfps = simfps - (simfps - 45);
|
//simfps = simfps - (simfps - 45);
|
||||||
|
@ -178,7 +141,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (physfps < 0)
|
if (physfps < 0)
|
||||||
physfps = 0;
|
physfps = 0;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
//Our time dilation is 0.91 when we're running a full speed,
|
//Our time dilation is 0.91 when we're running a full speed,
|
||||||
// therefore to make sure we get an appropriate range,
|
// therefore to make sure we get an appropriate range,
|
||||||
|
@ -188,10 +151,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Then we divide the whole amount by the amount of seconds pass in between stats updates.
|
// Then we divide the whole amount by the amount of seconds pass in between stats updates.
|
||||||
|
|
||||||
sb[0].StatID = (uint) Stats.TimeDilation;
|
sb[0].StatID = (uint) Stats.TimeDilation;
|
||||||
sb[0].StatValue = m_timeDilation ; //((((m_timeDilation + (0.10f * statsUpdateFactor)) /10) / statsUpdateFactor));
|
sb[0].StatValue = m_timeDilation; //((((m_timeDilation + (0.10f * statsUpdateFactor)) /10) / statsUpdateFactor));
|
||||||
|
|
||||||
sb[1].StatID = (uint) Stats.SimFPS;
|
sb[1].StatID = (uint) Stats.SimFPS;
|
||||||
sb[1].StatValue = simfps/statsUpdateFactor;
|
sb[1].StatValue = simfps / statsUpdateFactor;
|
||||||
|
|
||||||
sb[2].StatID = (uint) Stats.PhysicsFPS;
|
sb[2].StatID = (uint) Stats.PhysicsFPS;
|
||||||
sb[2].StatValue = physfps / statsUpdateFactor;
|
sb[2].StatValue = physfps / statsUpdateFactor;
|
||||||
|
@ -211,43 +174,43 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
sb[7].StatID = (uint) Stats.ActivePrim;
|
sb[7].StatID = (uint) Stats.ActivePrim;
|
||||||
sb[7].StatValue = m_activePrim;
|
sb[7].StatValue = m_activePrim;
|
||||||
|
|
||||||
sb[8].StatID = (uint)Stats.FrameMS;
|
sb[8].StatID = (uint) Stats.FrameMS;
|
||||||
sb[8].StatValue = m_frameMS / statsUpdateFactor;
|
sb[8].StatValue = m_frameMS / statsUpdateFactor;
|
||||||
|
|
||||||
sb[9].StatID = (uint)Stats.NetMS;
|
sb[9].StatID = (uint) Stats.NetMS;
|
||||||
sb[9].StatValue = m_netMS / statsUpdateFactor;
|
sb[9].StatValue = m_netMS / statsUpdateFactor;
|
||||||
|
|
||||||
sb[10].StatID = (uint)Stats.PhysicsMS;
|
sb[10].StatID = (uint) Stats.PhysicsMS;
|
||||||
sb[10].StatValue = m_physicsMS / statsUpdateFactor;
|
sb[10].StatValue = m_physicsMS / statsUpdateFactor;
|
||||||
|
|
||||||
sb[11].StatID = (uint)Stats.ImageMS ;
|
sb[11].StatID = (uint) Stats.ImageMS;
|
||||||
sb[11].StatValue = m_imageMS / statsUpdateFactor;
|
sb[11].StatValue = m_imageMS / statsUpdateFactor;
|
||||||
|
|
||||||
sb[12].StatID = (uint)Stats.OtherMS;
|
sb[12].StatID = (uint) Stats.OtherMS;
|
||||||
sb[12].StatValue = m_otherMS / statsUpdateFactor;
|
sb[12].StatValue = m_otherMS / statsUpdateFactor;
|
||||||
|
|
||||||
sb[13].StatID = (uint)Stats.InPacketsPerSecond;
|
sb[13].StatID = (uint) Stats.InPacketsPerSecond;
|
||||||
sb[13].StatValue = (m_inPacketsPerSecond);
|
sb[13].StatValue = (m_inPacketsPerSecond);
|
||||||
|
|
||||||
sb[14].StatID = (uint)Stats.OutPacketsPerSecond;
|
sb[14].StatID = (uint) Stats.OutPacketsPerSecond;
|
||||||
sb[14].StatValue = (m_outPacketsPerSecond / statsUpdateFactor);
|
sb[14].StatValue = (m_outPacketsPerSecond / statsUpdateFactor);
|
||||||
|
|
||||||
sb[15].StatID = (uint)Stats.UnAckedBytes;
|
sb[15].StatID = (uint) Stats.UnAckedBytes;
|
||||||
sb[15].StatValue = m_unAckedBytes;
|
sb[15].StatValue = m_unAckedBytes;
|
||||||
|
|
||||||
sb[16].StatID = (uint)Stats.AgentMS;
|
sb[16].StatID = (uint) Stats.AgentMS;
|
||||||
sb[16].StatValue = m_agentMS / statsUpdateFactor;
|
sb[16].StatValue = m_agentMS / statsUpdateFactor;
|
||||||
|
|
||||||
sb[17].StatID = (uint)Stats.PendingDownloads;
|
sb[17].StatID = (uint) Stats.PendingDownloads;
|
||||||
sb[17].StatValue = m_pendingDownloads;
|
sb[17].StatValue = m_pendingDownloads;
|
||||||
|
|
||||||
sb[18].StatID = (uint)Stats.PendingUploads;
|
sb[18].StatID = (uint) Stats.PendingUploads;
|
||||||
sb[18].StatValue = m_pendingUploads;
|
sb[18].StatValue = m_pendingUploads;
|
||||||
|
|
||||||
sb[19].StatID = (uint)Stats.ActiveScripts;
|
sb[19].StatID = (uint) Stats.ActiveScripts;
|
||||||
sb[19].StatValue = m_activeScripts;
|
sb[19].StatValue = m_activeScripts;
|
||||||
|
|
||||||
sb[20].StatID = (uint)Stats.ScriptLinesPerSecond;
|
sb[20].StatID = (uint) Stats.ScriptLinesPerSecond;
|
||||||
sb[20].StatValue = m_scriptLinesPerSecond / statsUpdateFactor;
|
sb[20].StatValue = m_scriptLinesPerSecond / statsUpdateFactor;
|
||||||
|
|
||||||
statpack.Stat = sb;
|
statpack.Stat = sb;
|
||||||
|
@ -284,6 +247,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
# region methods called from Scene
|
# region methods called from Scene
|
||||||
|
|
||||||
// The majority of these functions are additive
|
// The majority of these functions are additive
|
||||||
// so that you can easily change the amount of
|
// so that you can easily change the amount of
|
||||||
// seconds in between sim stats updates
|
// seconds in between sim stats updates
|
||||||
|
@ -353,22 +317,27 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
m_frameMS += ms;
|
m_frameMS += ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addNetMS(int ms)
|
public void addNetMS(int ms)
|
||||||
{
|
{
|
||||||
m_netMS += ms;
|
m_netMS += ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addAgentMS(int ms)
|
public void addAgentMS(int ms)
|
||||||
{
|
{
|
||||||
m_agentMS += ms;
|
m_agentMS += ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addPhysicsMS(int ms)
|
public void addPhysicsMS(int ms)
|
||||||
{
|
{
|
||||||
m_physicsMS += ms;
|
m_physicsMS += ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addImageMS(int ms)
|
public void addImageMS(int ms)
|
||||||
{
|
{
|
||||||
m_imageMS += ms;
|
m_imageMS += ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addOtherMS(int ms)
|
public void addOtherMS(int ms)
|
||||||
{
|
{
|
||||||
m_otherMS += ms;
|
m_otherMS += ms;
|
||||||
|
@ -399,5 +368,40 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Nested type: Stats
|
||||||
|
|
||||||
|
private enum Stats : uint
|
||||||
|
{
|
||||||
|
TimeDilation = 0,
|
||||||
|
SimFPS = 1,
|
||||||
|
PhysicsFPS = 2,
|
||||||
|
AgentUpdates = 3,
|
||||||
|
FrameMS = 4,
|
||||||
|
NetMS = 5,
|
||||||
|
OtherMS = 6,
|
||||||
|
PhysicsMS = 7,
|
||||||
|
AgentMS = 8,
|
||||||
|
ImageMS = 9,
|
||||||
|
ScriptMS = 10,
|
||||||
|
TotalPrim = 11,
|
||||||
|
ActivePrim = 12,
|
||||||
|
Agents = 13,
|
||||||
|
ChildAgents = 14,
|
||||||
|
ActiveScripts = 15,
|
||||||
|
ScriptLinesPerSecond = 16,
|
||||||
|
InPacketsPerSecond = 17,
|
||||||
|
OutPacketsPerSecond = 18,
|
||||||
|
PendingDownloads = 19,
|
||||||
|
PendingUploads = 20,
|
||||||
|
UnAckedBytes = 24,
|
||||||
|
|
||||||
|
// Havok4 related... May or may not be in upcoming LLclients
|
||||||
|
// (kelly added them sometime late in January 2008)
|
||||||
|
NumRCCSLODReduced = 25,
|
||||||
|
NumRCCSFixed = 26
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -32,8 +32,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public class UndoState
|
public class UndoState
|
||||||
{
|
{
|
||||||
public LLVector3 Position = LLVector3.Zero;
|
public LLVector3 Position = LLVector3.Zero;
|
||||||
public LLVector3 Scale = LLVector3.Zero;
|
|
||||||
public LLQuaternion Rotation = LLQuaternion.Identity;
|
public LLQuaternion Rotation = LLQuaternion.Identity;
|
||||||
|
public LLVector3 Scale = LLVector3.Zero;
|
||||||
|
|
||||||
public UndoState(LLVector3 pos, LLQuaternion rot, LLVector3 scale)
|
public UndoState(LLVector3 pos, LLQuaternion rot, LLVector3 scale)
|
||||||
{
|
{
|
||||||
|
@ -50,16 +50,18 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
Position = part.AbsolutePosition;
|
Position = part.AbsolutePosition;
|
||||||
Rotation = part.RotationOffset;
|
Rotation = part.RotationOffset;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Position = part.GroupPosition;
|
Position = part.GroupPosition;
|
||||||
Rotation = part.RotationOffset;
|
Rotation = part.RotationOffset;
|
||||||
Scale = part.Shape.Scale;
|
Scale = part.Shape.Scale;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
public UndoState()
|
||||||
}
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Compare(SceneObjectPart part)
|
public bool Compare(SceneObjectPart part)
|
||||||
|
@ -79,7 +81,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -105,12 +106,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
part.ScheduleTerseUpdate();
|
part.ScheduleTerseUpdate();
|
||||||
}
|
}
|
||||||
part.m_undoing = false;
|
part.m_undoing = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public UndoState()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -36,12 +36,7 @@ namespace OpenSim.Region.Environment
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private IRegionDataStore m_dataStore;
|
private readonly IRegionDataStore m_dataStore;
|
||||||
|
|
||||||
public IRegionDataStore DataStore
|
|
||||||
{
|
|
||||||
get { return m_dataStore; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public StorageManager(IRegionDataStore storage)
|
public StorageManager(IRegionDataStore storage)
|
||||||
{
|
{
|
||||||
|
@ -74,5 +69,10 @@ namespace OpenSim.Region.Environment
|
||||||
|
|
||||||
//TODO: Add checking and warning to make sure it initialised.
|
//TODO: Add checking and warning to make sure it initialised.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IRegionDataStore DataStore
|
||||||
|
{
|
||||||
|
get { return m_dataStore; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -33,16 +33,15 @@ namespace OpenSim.Region.Environment.Types
|
||||||
{
|
{
|
||||||
public class BasicQuadTreeNode
|
public class BasicQuadTreeNode
|
||||||
{
|
{
|
||||||
private List<SceneObjectGroup> m_objects = new List<SceneObjectGroup>();
|
private readonly short m_height;
|
||||||
private BasicQuadTreeNode[] m_childNodes = null;
|
private readonly short m_leftX;
|
||||||
private BasicQuadTreeNode m_parent = null;
|
private readonly short m_leftY;
|
||||||
|
private readonly List<SceneObjectGroup> m_objects = new List<SceneObjectGroup>();
|
||||||
private short m_leftX;
|
private readonly BasicQuadTreeNode m_parent;
|
||||||
private short m_leftY;
|
|
||||||
private short m_width;
|
|
||||||
private short m_height;
|
|
||||||
//private int m_quadNumber;
|
//private int m_quadNumber;
|
||||||
private string m_quadID;
|
private readonly string m_quadID;
|
||||||
|
private readonly short m_width;
|
||||||
|
private BasicQuadTreeNode[] m_childNodes;
|
||||||
|
|
||||||
public BasicQuadTreeNode(BasicQuadTreeNode parent, string quadID, short leftX, short leftY, short width,
|
public BasicQuadTreeNode(BasicQuadTreeNode parent, string quadID, short leftX, short leftY, short width,
|
||||||
short height)
|
short height)
|
||||||
|
@ -67,9 +66,9 @@ namespace OpenSim.Region.Environment.Types
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (obj.AbsolutePosition.X < (m_leftX + (m_width/2)))
|
if (obj.AbsolutePosition.X < (m_leftX + (m_width / 2)))
|
||||||
{
|
{
|
||||||
if (obj.AbsolutePosition.Y < (m_leftY + (m_height/2)))
|
if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2)))
|
||||||
{
|
{
|
||||||
m_childNodes[0].AddObject(obj);
|
m_childNodes[0].AddObject(obj);
|
||||||
}
|
}
|
||||||
|
@ -80,7 +79,7 @@ namespace OpenSim.Region.Environment.Types
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (obj.AbsolutePosition.Y < (m_leftY + (m_height/2)))
|
if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2)))
|
||||||
{
|
{
|
||||||
m_childNodes[1].AddObject(obj);
|
m_childNodes[1].AddObject(obj);
|
||||||
}
|
}
|
||||||
|
@ -98,17 +97,17 @@ namespace OpenSim.Region.Environment.Types
|
||||||
{
|
{
|
||||||
m_childNodes = new BasicQuadTreeNode[4];
|
m_childNodes = new BasicQuadTreeNode[4];
|
||||||
m_childNodes[0] =
|
m_childNodes[0] =
|
||||||
new BasicQuadTreeNode(this, m_quadID + "1/", m_leftX, m_leftY, (short) (m_width/2),
|
new BasicQuadTreeNode(this, m_quadID + "1/", m_leftX, m_leftY, (short) (m_width / 2),
|
||||||
(short) (m_height/2));
|
(short) (m_height / 2));
|
||||||
m_childNodes[1] =
|
m_childNodes[1] =
|
||||||
new BasicQuadTreeNode(this, m_quadID + "2/", (short) (m_leftX + (m_width/2)), m_leftY,
|
new BasicQuadTreeNode(this, m_quadID + "2/", (short) (m_leftX + (m_width / 2)), m_leftY,
|
||||||
(short) (m_width/2), (short) (m_height/2));
|
(short) (m_width / 2), (short) (m_height / 2));
|
||||||
m_childNodes[2] =
|
m_childNodes[2] =
|
||||||
new BasicQuadTreeNode(this, m_quadID + "3/", m_leftX, (short) (m_leftY + (m_height/2)),
|
new BasicQuadTreeNode(this, m_quadID + "3/", m_leftX, (short) (m_leftY + (m_height / 2)),
|
||||||
(short) (m_width/2), (short) (m_height/2));
|
(short) (m_width / 2), (short) (m_height / 2));
|
||||||
m_childNodes[3] =
|
m_childNodes[3] =
|
||||||
new BasicQuadTreeNode(this, m_quadID + "4/", (short) (m_leftX + (m_width/2)),
|
new BasicQuadTreeNode(this, m_quadID + "4/", (short) (m_leftX + (m_width / 2)),
|
||||||
(short) (m_height + (m_height/2)), (short) (m_width/2), (short) (m_height/2));
|
(short) (m_height + (m_height / 2)), (short) (m_width / 2), (short) (m_height / 2));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -127,9 +126,9 @@ namespace OpenSim.Region.Environment.Types
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (x < m_leftX + (m_width/2))
|
if (x < m_leftX + (m_width / 2))
|
||||||
{
|
{
|
||||||
if (y < m_leftY + (m_height/2))
|
if (y < m_leftY + (m_height / 2))
|
||||||
{
|
{
|
||||||
return m_childNodes[0].GetObjectsFrom(x, y);
|
return m_childNodes[0].GetObjectsFrom(x, y);
|
||||||
}
|
}
|
||||||
|
@ -140,7 +139,7 @@ namespace OpenSim.Region.Environment.Types
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (y < m_leftY + (m_height/2))
|
if (y < m_leftY + (m_height / 2))
|
||||||
{
|
{
|
||||||
return m_childNodes[1].GetObjectsFrom(x, y);
|
return m_childNodes[1].GetObjectsFrom(x, y);
|
||||||
}
|
}
|
||||||
|
@ -181,9 +180,9 @@ namespace OpenSim.Region.Environment.Types
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (x < m_leftX + (m_width/2))
|
if (x < m_leftX + (m_width / 2))
|
||||||
{
|
{
|
||||||
if (y < m_leftY + (m_height/2))
|
if (y < m_leftY + (m_height / 2))
|
||||||
{
|
{
|
||||||
return m_childNodes[0].GetNodeID(x, y);
|
return m_childNodes[0].GetNodeID(x, y);
|
||||||
}
|
}
|
||||||
|
@ -194,7 +193,7 @@ namespace OpenSim.Region.Environment.Types
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (y < m_leftY + (m_height/2))
|
if (y < m_leftY + (m_height / 2))
|
||||||
{
|
{
|
||||||
return m_childNodes[1].GetNodeID(x, y);
|
return m_childNodes[1].GetNodeID(x, y);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,16 +37,10 @@ namespace OpenSim.Region.Environment.Types
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class UpdateQueue : ISerializable
|
public class UpdateQueue : ISerializable
|
||||||
{
|
{
|
||||||
private Queue<SceneObjectPart> m_queue;
|
private readonly List<LLUUID> m_ids;
|
||||||
|
private readonly Queue<SceneObjectPart> m_queue;
|
||||||
|
|
||||||
private List<LLUUID> m_ids;
|
private readonly object m_syncObject = new object();
|
||||||
|
|
||||||
private object m_syncObject = new object();
|
|
||||||
|
|
||||||
public int Count
|
|
||||||
{
|
|
||||||
get { return m_queue.Count; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public UpdateQueue()
|
public UpdateQueue()
|
||||||
{
|
{
|
||||||
|
@ -54,6 +48,56 @@ namespace OpenSim.Region.Environment.Types
|
||||||
m_ids = new List<LLUUID>();
|
m_ids = new List<LLUUID>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected UpdateQueue(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
//System.Console.WriteLine("UpdateQueue Deserialize BGN");
|
||||||
|
|
||||||
|
if (info == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("info");
|
||||||
|
}
|
||||||
|
|
||||||
|
m_queue = (Queue<SceneObjectPart>) info.GetValue("m_queue", typeof (Queue<SceneObjectPart>));
|
||||||
|
List<Guid> ids_work = (List<Guid>) info.GetValue("m_ids", typeof (List<Guid>));
|
||||||
|
|
||||||
|
foreach (Guid guid in ids_work)
|
||||||
|
{
|
||||||
|
m_ids.Add(new LLUUID(guid));
|
||||||
|
}
|
||||||
|
|
||||||
|
//System.Console.WriteLine("UpdateQueue Deserialize END");
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Count
|
||||||
|
{
|
||||||
|
get { return m_queue.Count; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#region ISerializable Members
|
||||||
|
|
||||||
|
[SecurityPermission(SecurityAction.LinkDemand,
|
||||||
|
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
||||||
|
public virtual void GetObjectData(
|
||||||
|
SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
if (info == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("info");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Guid> ids_work = new List<Guid>();
|
||||||
|
|
||||||
|
foreach (LLUUID uuid in m_ids)
|
||||||
|
{
|
||||||
|
ids_work.Add(uuid.UUID);
|
||||||
|
}
|
||||||
|
|
||||||
|
info.AddValue("m_queue", m_queue);
|
||||||
|
info.AddValue("m_ids", ids_work);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
lock (m_syncObject)
|
lock (m_syncObject)
|
||||||
|
@ -89,46 +133,5 @@ namespace OpenSim.Region.Environment.Types
|
||||||
|
|
||||||
return part;
|
return part;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected UpdateQueue(SerializationInfo info, StreamingContext context)
|
|
||||||
{
|
|
||||||
//System.Console.WriteLine("UpdateQueue Deserialize BGN");
|
|
||||||
|
|
||||||
if (info == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("info");
|
|
||||||
}
|
|
||||||
|
|
||||||
m_queue = (Queue<SceneObjectPart>)info.GetValue("m_queue", typeof(Queue<SceneObjectPart>));
|
|
||||||
List<Guid> ids_work = (List<Guid>)info.GetValue("m_ids", typeof(List<Guid>));
|
|
||||||
|
|
||||||
foreach (Guid guid in ids_work)
|
|
||||||
{
|
|
||||||
m_ids.Add(new LLUUID(guid));
|
|
||||||
}
|
|
||||||
|
|
||||||
//System.Console.WriteLine("UpdateQueue Deserialize END");
|
|
||||||
}
|
|
||||||
|
|
||||||
[SecurityPermission(SecurityAction.LinkDemand,
|
|
||||||
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
|
||||||
public virtual void GetObjectData(
|
|
||||||
SerializationInfo info, StreamingContext context)
|
|
||||||
{
|
|
||||||
if (info == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("info");
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Guid> ids_work = new List<Guid>();
|
|
||||||
|
|
||||||
foreach (LLUUID uuid in m_ids)
|
|
||||||
{
|
|
||||||
ids_work.Add(uuid.UUID);
|
|
||||||
}
|
|
||||||
|
|
||||||
info.AddValue("m_queue", m_queue);
|
|
||||||
info.AddValue("m_ids", ids_work);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue