diff --git a/OpenSim/Region/Environment/InstantMessageReceiver.cs b/OpenSim/Region/Environment/InstantMessageReceiver.cs index b82b4aa1dc..cc7880d6ba 100644 --- a/OpenSim/Region/Environment/InstantMessageReceiver.cs +++ b/OpenSim/Region/Environment/InstantMessageReceiver.cs @@ -32,13 +32,10 @@ namespace OpenSim.Region.Environment /// /// Bit Vector for Which Modules to send an instant message to from the Scene or an Associated Module /// - // This prevents the Modules from sending Instant messages to other modules through the scene // and then receiving the same messages - // This is mostly here because on LLSL and the SecondLife Client, IMs,Groups and friends are linked // inseparably - [Flags] public enum InstantMessageReceiver : uint { @@ -51,4 +48,4 @@ namespace OpenSim.Region.Environment /// The Groups Module GroupsModule = 0x00000004 } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs b/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs index c099fa1139..5d2ec89b9a 100644 --- a/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs +++ b/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs @@ -41,4 +41,4 @@ namespace OpenSim.Region.Environment.Interfaces void RemoveAgentAssetTransactions(LLUUID userID); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs b/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs index 3ebbaab843..d5473fb2d8 100644 --- a/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs +++ b/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs @@ -30,9 +30,9 @@ using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.Environment.Interfaces { - public interface IAvatarFactory + public interface IAvatarFactory { bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance); void UpdateDatabase(LLUUID userID, AvatarAppearance avatAppearance); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs b/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs index 46ba9b2694..8e2c978d4c 100644 --- a/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs +++ b/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs @@ -39,4 +39,4 @@ namespace OpenSim.Region.Environment.Interfaces HttpRequestClass GetNextCompletedRequest(); void RemoveCompletedRequest(LLUUID id); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/ILandChannel.cs b/OpenSim/Region/Environment/Interfaces/ILandChannel.cs index 464a213691..8486f701b6 100644 --- a/OpenSim/Region/Environment/Interfaces/ILandChannel.cs +++ b/OpenSim/Region/Environment/Interfaces/ILandChannel.cs @@ -70,7 +70,8 @@ namespace OpenSim.Region.Environment.Interfaces void handleSignificantClientMovement(IClientAPI remote_client); void handleAnyClientMovement(ScenePresence avatar); 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 entries, IClientAPI remote_client); + void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID, uint flags, int landLocalID, List entries, + IClientAPI remote_client); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs index c757461e17..e7af0a99ed 100644 --- a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs +++ b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs @@ -48,7 +48,7 @@ namespace OpenSim.Region.Environment.Interfaces /// /// void StoreObject(SceneObjectGroup obj, LLUUID regionUUID); - + /// /// Entirely removes the object, including inventory /// @@ -56,7 +56,7 @@ namespace OpenSim.Region.Environment.Interfaces /// /// void RemoveObject(LLUUID uuid, LLUUID regionUUID); - + /// /// Store a prim's inventory /// @@ -74,4 +74,4 @@ namespace OpenSim.Region.Environment.Interfaces void Shutdown(); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/IRegionModule.cs b/OpenSim/Region/Environment/Interfaces/IRegionModule.cs index ffa4f32cd7..80698d51e1 100644 --- a/OpenSim/Region/Environment/Interfaces/IRegionModule.cs +++ b/OpenSim/Region/Environment/Interfaces/IRegionModule.cs @@ -32,10 +32,10 @@ namespace OpenSim.Region.Environment.Interfaces { public interface IRegionModule { + string Name { get; } + bool IsSharedModule { get; } void Initialise(Scene scene, IConfigSource source); void PostInitialise(); void Close(); - string Name { get; } - bool IsSharedModule { get; } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/ISimChat.cs b/OpenSim/Region/Environment/Interfaces/ISimChat.cs index d52e58b513..9335b00826 100644 --- a/OpenSim/Region/Environment/Interfaces/ISimChat.cs +++ b/OpenSim/Region/Environment/Interfaces/ISimChat.cs @@ -34,4 +34,4 @@ namespace OpenSim.Region.Environment.Interfaces { void SimChat(Object sender, ChatFromViewerArgs e); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/IWorldComm.cs b/OpenSim/Region/Environment/Interfaces/IWorldComm.cs index 8a63c54ebe..992db19f21 100644 --- a/OpenSim/Region/Environment/Interfaces/IWorldComm.cs +++ b/OpenSim/Region/Environment/Interfaces/IWorldComm.cs @@ -43,4 +43,4 @@ namespace OpenSim.Region.Environment.Interfaces uint PeekNextMessageLocalID(); LLUUID PeekNextMessageItemID(); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs b/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs index 6c1d0256c2..959b0b793c 100644 --- a/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs +++ b/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs @@ -45,4 +45,4 @@ namespace OpenSim.Region.Environment.Interfaces void RemoveCompletedSRDRequest(LLUUID id); void CancelSRDRequests(LLUUID itemID); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Interfaces/IXfer.cs b/OpenSim/Region/Environment/Interfaces/IXfer.cs index bad1833ead..bb2caca44b 100644 --- a/OpenSim/Region/Environment/Interfaces/IXfer.cs +++ b/OpenSim/Region/Environment/Interfaces/IXfer.cs @@ -31,4 +31,4 @@ namespace OpenSim.Region.Environment.Interfaces { bool AddNewFile(string fileName, byte[] data); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/ModuleLoader.cs b/OpenSim/Region/Environment/ModuleLoader.cs index 3f8b9ff5d3..caaa28f4a4 100644 --- a/OpenSim/Region/Environment/ModuleLoader.cs +++ b/OpenSim/Region/Environment/ModuleLoader.cs @@ -47,12 +47,11 @@ namespace OpenSim.Region.Environment public class ModuleLoader { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - public Dictionary LoadedAssemblys = new Dictionary(); + private readonly IConfigSource m_config; private readonly List m_loadedModules = new List(); private readonly Dictionary m_loadedSharedModules = new Dictionary(); - private readonly IConfigSource m_config; + public Dictionary LoadedAssemblys = new Dictionary(); public ModuleLoader(IConfigSource config) { @@ -86,7 +85,8 @@ namespace OpenSim.Region.Environment DynamicTextureModule dynamicModule = new DynamicTextureModule(); 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 { @@ -123,15 +123,15 @@ namespace OpenSim.Region.Environment m_loadedSharedModules.Add(loadMod.Name, loadMod); } - // AvatarFactoryModule avatarFactory = new AvatarFactoryModule(); - // if (m_loadedSharedModules.ContainsKey(avatarFactory.Name)) - // { - // m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", avatarFactory.Name, "AvarFactoryModule"); - // } - // else - // { - // m_loadedSharedModules.Add(avatarFactory.Name, avatarFactory); - // } + // AvatarFactoryModule avatarFactory = new AvatarFactoryModule(); + // if (m_loadedSharedModules.ContainsKey(avatarFactory.Name)) + // { + // m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", avatarFactory.Name, "AvarFactoryModule"); + // } + // else + // { + // m_loadedSharedModules.Add(avatarFactory.Name, avatarFactory); + // } XMLRPCModule xmlRpcMod = new XMLRPCModule(); if (m_loadedSharedModules.ContainsKey(xmlRpcMod.Name)) @@ -149,13 +149,13 @@ namespace OpenSim.Region.Environment AssetTransactionModule transactionsModule = new AssetTransactionModule(); 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 { m_loadedSharedModules.Add(transactionsModule.Name, transactionsModule); } - } public void InitialiseSharedModules(Scene scene) @@ -284,7 +284,7 @@ namespace OpenSim.Region.Environment { if (pluginType.GetInterface("IRegionModule") != null) { - modules.Add((IRegionModule)Activator.CreateInstance(pluginType)); + modules.Add((IRegionModule) Activator.CreateInstance(pluginType)); } } } @@ -320,8 +320,8 @@ namespace OpenSim.Region.Environment public void UnloadModule(IRegionModule rm) { rm.Close(); - + m_loadedModules.Remove(rm); } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs b/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs index 48db51b622..550b673b4e 100644 --- a/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs @@ -40,15 +40,16 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload /// /// Asset requests with data which are ready to be sent back to requesters. This includes textures. /// - private List AssetRequests; + private readonly List AssetRequests; - private Scene m_scene; - private Dictionary RegisteredScenes = new Dictionary(); + private readonly Dictionary RegisteredScenes = new Dictionary(); /// /// Assets requests (for each user) which are waiting for asset server data. This includes texture requests /// - private Dictionary> RequestedAssets; + private readonly Dictionary> RequestedAssets; + + private Scene m_scene; public AssetDownloadModule() { @@ -205,22 +206,18 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload { public AssetBase AssetInf; public byte AssetRequestSource = 2; - public long DataPointer = 0; + public long DataPointer; public int DiscardLevel = -1; public AssetBase ImageInfo; public bool IsTextureRequest; - public int NumPackets = 0; - public int PacketCounter = 0; - public byte[] Params = null; + public int NumPackets; + public int PacketCounter; + public byte[] Params; public LLUUID RequestAssetID; public IClientAPI RequestUser; public LLUUID TransferRequestID; //public bool AssetInCache; //public int TimeRequested; - - public AssetRequest() - { - } } #endregion diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs index 555d5f4650..008daa2cb5 100644 --- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs +++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs @@ -44,7 +44,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); // Fields - private bool m_dumpAssetsToFile; + private readonly bool m_dumpAssetsToFile; public AgentAssetTransactionsManager Manager; public LLUUID UserID; public Dictionary XferUploaders = new Dictionary(); @@ -141,23 +141,23 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction public class AssetXferUploader { // Fields + private readonly bool m_dumpAssetToFile; + private readonly AgentAssetTransactions m_userTransactions; public bool AddToInventory; public AssetBase Asset; public LLUUID InventFolder = LLUUID.Zero; - private sbyte invType = 0; - private bool m_createItem = false; + private sbyte invType; + private bool m_createItem; private string m_description = String.Empty; - private bool m_dumpAssetToFile; - private bool m_finished = false; + private bool m_finished; private string m_name = String.Empty; private bool m_storeLocal; - private AgentAssetTransactions m_userTransactions; - private uint nextPerm = 0; + private uint nextPerm; private IClientAPI ourClient; public LLUUID TransactionID = LLUUID.Zero; - private sbyte type = 0; + private sbyte type; public bool UploadComplete; - private byte wearableType = 0; + private byte wearableType; public ulong XferID; public AssetXferUploader(AgentAssetTransactions transactions, bool dumpAssetToFile) @@ -390,7 +390,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction item.BasePermissions = 2147483647; item.CurrentPermissions = 2147483647; item.NextPermissions = nextPerm; - item.Flags = (uint) wearableType; + item.Flags = wearableType; userInfo.AddItem(ourClient.AgentId, item); ourClient.SendInventoryItemCreateUpdate(item); diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs index fcd0e0c010..d7f5804338 100644 --- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs @@ -40,16 +40,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction public class AssetTransactionModule : IRegionModule, IAgentAssetTransactions { private readonly Dictionary RegisteredScenes = new Dictionary(); - private bool m_dumpAssetsToFile = false; - private Scene m_scene = null; + private bool m_dumpAssetsToFile; + private Scene m_scene; private AgentAssetTransactionsManager m_transactionManager; - public AssetTransactionModule() - { - // System.Console.WriteLine("creating AgentAssetTransactionModule"); - } - #region IAgentAssetTransactions Members public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, @@ -145,13 +140,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// /// Each agent has its own singleton collection of transactions /// - private Dictionary AgentTransactions = + private readonly Dictionary AgentTransactions = new Dictionary(); /// /// Should we dump uploaded assets to the filesystem? /// - private bool m_dumpAssetsToFile; + private readonly bool m_dumpAssetsToFile; public Scene MyScene; diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs index 474ac75d99..96ef61f30c 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs @@ -47,6 +47,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload private readonly BlockingQueue m_queueSenders = new BlockingQueue(); + private readonly List m_scenes = new List(); + /// /// Each user has their own texture download service. /// @@ -54,14 +56,9 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload new Dictionary(); private Scene m_scene; - private List m_scenes = new List(); private Thread m_thread; - public TextureDownloadModule() - { - } - #region IRegionModule Members public void Initialise(Scene scene, IConfigSource config) @@ -69,7 +66,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload if (m_scene == null) { //Console.WriteLine("Creating Texture download module"); - m_thread = new Thread(new ThreadStart(ProcessTextureSenders)); + m_thread = new Thread(ProcessTextureSenders); m_thread.Name = "ProcessTextureSenderThread"; m_thread.IsBackground = true; m_thread.Start(); diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs index 70e44d4f66..7d4c919c75 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs @@ -40,13 +40,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload //private static readonly log4net.ILog m_log // = 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; // See ITextureSender - private bool m_sending = false; - private LLUUID m_textureId; + private bool m_sending; // See ITextureSender diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs index 02c541b2b0..44b9a2372b 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs @@ -43,12 +43,14 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private readonly IClientAPI RequestUser; + /// /// Records the number of times texture send has been called. /// - public int counter = 0; + public int counter; - public bool ImageLoaded = false; + public bool ImageLoaded; /// /// 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; } } - private bool m_cancel = false; + private bool m_cancel; // See ITextureSender - private bool m_sending = false; + private bool m_sending; /// /// This is actually the number of extra packets required to send the texture data! We always assume /// at least one is required. /// - private int NumPackets = 0; + private int NumPackets; /// /// Holds the packet number to send next. In this case, each packet is 1000 bytes long and starts /// at the 600th byte (0th indexed). /// - private int PacketCounter = 0; + private int PacketCounter; private int RequestedDiscardLevel = -1; - private IClientAPI RequestUser; - private uint StartPacketNumber = 0; + private uint StartPacketNumber; public TextureSender(IClientAPI client, int discardLevel, uint packetNumber) { @@ -190,7 +191,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender catch (ArgumentOutOfRangeException) { 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; } RequestUser.OutPacket(im, ThrottleOutPacketType.Texture); diff --git a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs index 8e90d1798f..eaf2198597 100644 --- a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs @@ -41,10 +41,6 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer public Dictionary NewFiles = new Dictionary(); public Dictionary Transfers = new Dictionary(); - public XferModule() - { - } - #region IRegionModule Members public void Initialise(Scene scene, IConfigSource config) @@ -149,11 +145,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer public IClientAPI Client; private bool complete; public byte[] Data = new byte[0]; - public int DataPointer = 0; + public int DataPointer; public string FileName = String.Empty; - public uint Packet = 0; + public uint Packet; public uint Serial = 1; - public ulong XferID = 0; + public ulong XferID; 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]; Array.Copy(Data, DataPointer, transferData, 0, Data.Length - DataPointer); - uint endPacket = Packet |= (uint) 0x80000000; + uint endPacket = Packet |= 0x80000000; Client.SendXferPacket(XferID, endPacket, transferData); Packet++; DataPointer += (Data.Length - DataPointer); diff --git a/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs index 15720fc469..8d42681431 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs @@ -44,15 +44,15 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat public class ChatModule : IRegionModule, ISimChat { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private string m_defaultzone = null; + private readonly List m_scenes = new List(); + private string m_defaultzone; - private IRCChatModule m_irc = null; - private Thread m_irc_connector = null; + private IRCChatModule m_irc; + private Thread m_irc_connector; - private string m_last_leaving_user = null; - private string m_last_new_user = null; + private string m_last_leaving_user; + private string m_last_new_user; private int m_saydistance = 30; - private List m_scenes = new List(); private int m_shoutdistance = 100; internal object m_syncInit = new object(); internal object m_syncLogout = new object(); @@ -257,7 +257,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat } 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) { - 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 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private Thread listener; - private string m_basenick = null; - private string m_channel = null; - private bool m_connected = false; - private bool m_enabled = false; - private List m_last_scenes = null; - private string m_nick = null; - private uint m_port = 6668; - private string m_privmsgformat = "PRIVMSG {0} :<{1} in {2}>: {3}"; + private readonly string m_basenick; + private readonly string m_channel; + private readonly bool m_enabled; + private readonly uint m_port = 6668; + private readonly string m_privmsgformat = "PRIVMSG {0} :<{1} in {2}>: {3}"; + private readonly string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot"; + private Thread listener; + private bool m_connected; + private List m_last_scenes; + private string m_nick; private StreamReader m_reader; - private List m_scenes = null; - private string m_server = null; + private List m_scenes; + private string m_server; private NetworkStream m_stream; internal object m_syncConnect = new object(); private TcpClient m_tcp; - private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot"; private StreamWriter m_writer; private Thread pingSender; @@ -478,13 +478,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat m_reader = new StreamReader(m_stream); m_writer = new StreamWriter(m_stream); - pingSender = new Thread(new ThreadStart(PingRun)); + pingSender = new Thread(PingRun); pingSender.Name = "PingSenderThread"; pingSender.IsBackground = true; pingSender.Start(); ThreadTracker.Add(pingSender); - listener = new Thread(new ThreadStart(ListenerRun)); + listener = new Thread(ListenerRun); listener.Name = "IRCChatModuleListenerThread"; listener.IsBackground = true; listener.Start(); @@ -545,7 +545,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat } 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 { - if (m_connected == true) + if (m_connected) { m_writer.WriteLine("PING :" + m_server); m_writer.Flush(); @@ -602,7 +602,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat } 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 { - while ((m_connected == true) && ((inputLine = m_reader.ReadLine()) != null)) + while (m_connected && ((inputLine = m_reader.ReadLine()) != null)) { // Console.WriteLine(inputLine); if (inputLine.Contains(m_channel)) @@ -659,7 +659,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat } 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 { - m_log.Error("[IRC]: BroadcastSim Exception Trap:" + ex.ToString() + "\n" + ex.StackTrace); + m_log.Error("[IRC]: BroadcastSim Exception Trap:" + ex + "\n" + ex.StackTrace); } } diff --git a/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs index 966c5e2093..cc6fd771eb 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs @@ -65,55 +65,55 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney public class SampleMoneyModule : IMoneyModule { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private readonly Dictionary m_KnownClientFunds = new Dictionary(); + + /// + /// Region UUIDS indexed by AgentID + /// + private readonly Dictionary m_rootAgents = new Dictionary(); + + /// + /// Scenes by Region Handle + /// + private readonly Dictionary m_scenel = new Dictionary(); /// /// Where Stipends come from and Fees go to. /// private LLUUID EconomyBaseAccount = LLUUID.Zero; - private float EnergyEfficiency = 0f; - private bool gridmode = false; + private float EnergyEfficiency; + private bool gridmode; private ObjectPaid handerOnObjectPaid; private bool m_enabled = true; private IConfigSource m_gConfig; private bool m_keepMoneyAcrossLogins = true; - private Dictionary m_KnownClientFunds = new Dictionary(); private string m_LandAddress = String.Empty; private int m_minFundsBeforeRefresh = 100; private string m_MoneyAddress = String.Empty; - /// - /// Region UUIDS indexed by AgentID - /// - private Dictionary m_rootAgents = new Dictionary(); - - /// - /// Scenes by Region Handle - /// - private Dictionary m_scenel = new Dictionary(); - private int m_stipend = 1000; private int ObjectCapacity = 45000; - private int ObjectCount = 0; - private int PriceEnergyUnit = 0; - private int PriceGroupCreate = 0; - private int PriceObjectClaim = 0; - private float PriceObjectRent = 0f; - private float PriceObjectScaleFactor = 0f; - private int PriceParcelClaim = 0; - private float PriceParcelClaimFactor = 0f; - private int PriceParcelRent = 0; - private int PricePublicObjectDecay = 0; - private int PricePublicObjectDelete = 0; - private int PriceRentLight = 0; - private int PriceUpload = 0; - private int TeleportMinPrice = 0; + private int ObjectCount; + private int PriceEnergyUnit; + private int PriceGroupCreate; + private int PriceObjectClaim; + private float PriceObjectRent; + private float PriceObjectScaleFactor; + private int PriceParcelClaim; + private float PriceParcelClaimFactor; + private int PriceParcelRent; + private int PricePublicObjectDecay; + private int PricePublicObjectDelete; + private int PriceRentLight; + private int PriceUpload; + private int TeleportMinPrice; - private float TeleportPriceExponent = 0f; + private float TeleportPriceExponent; private int UserLevelPaysFees = 2; private Scene XMLRPCHandler; @@ -305,7 +305,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney Hashtable hbinfo = GetBalanceForUserFromMoneyServer(client.AgentId, client.SecureSessionId, s.RegionInfo.originRegionID.ToString(), s.RegionInfo.regionSecret); - if ((bool) hbinfo["success"] == true) + if ((bool) hbinfo["success"]) { Helpers.TryParse((string) hbinfo["agentId"], out agentID); try @@ -333,7 +333,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney else { 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"]); } SendMoneyBalance(client, agentID, client.SessionId, LLUUID.Zero); @@ -660,7 +660,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney Hashtable hresult = genericCurrencyXMLRPCRequest(ht, "regionMoveMoney"); - if ((bool) hresult["success"] == true) + if ((bool) hresult["success"]) { int funds1 = 0; int funds2 = 0; @@ -718,7 +718,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney Hashtable hbinfo = GetBalanceForUserFromMoneyServer(aClient.AgentId, aClient.SecureSessionId, s.RegionInfo.originRegionID.ToString(), s.RegionInfo.regionSecret); - if ((bool) hbinfo["success"] == true) + if ((bool) hbinfo["success"]) { try { @@ -743,7 +743,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney else { 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"]); } } @@ -812,7 +812,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney string secret = (string) requestData["secret"]; Scene userScene = GetRandomScene(); - if (userScene.RegionInfo.regionSecret.ToString() == secret) + if (userScene.RegionInfo.regionSecret == secret) { IClientAPI client = LocateClientObject(agentId); @@ -1238,7 +1238,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney { lock (e) { - if (e.economyValidated == true && e.transactionID == 0) + if (e.economyValidated && e.transactionID == 0) { e.transactionID = Util.UnixTimeSinceEpoch(); @@ -1328,7 +1328,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney else { 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 = claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret); - if ((bool) hresult["success"] == true) + if ((bool) hresult["success"]) { int funds = 0; try @@ -1432,7 +1432,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney if (RegionItem != null) { 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; try @@ -1460,7 +1460,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney #endregion } - public enum TransactionType : int + public enum TransactionType { SystemGenerated = 0, RegionMoneyRequest = 1, diff --git a/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs index dd6a92e70b..1dffc62604 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs @@ -42,10 +42,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private Dictionary> FriendLists = new Dictionary>(); - private Dictionary m_pendingFriendRequests = new Dictionary(); - private Dictionary m_rootAgents = new Dictionary(); - private List m_scene = new List(); + private readonly Dictionary> FriendLists = new Dictionary>(); + private readonly Dictionary m_pendingFriendRequests = new Dictionary(); + private readonly Dictionary m_rootAgents = new Dictionary(); + private readonly List m_scene = new List(); #region IRegionModule Members @@ -213,7 +213,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends List updateUsers = new List(); foreach (FriendListItem fli in lfli) { - if (fli.onlinestatus == true) + if (fli.onlinestatus) { updateUsers.Add(fli.Friend); } @@ -357,20 +357,20 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends // https://wiki.secondlife.com/wiki/ImprovedInstantMessage // 38 == Offer friendship - if (dialog == (byte) 38) + if (dialog == 38) { LLUUID friendTransactionID = LLUUID.Random(); 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); GridInstantMessage msg = new GridInstantMessage(); msg.fromAgentID = fromAgentID.UUID; msg.fromAgentSession = fromAgentSession.UUID; msg.toAgentID = toAgentID.UUID; 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; if (client != null) { @@ -393,16 +393,16 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } // 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); } // 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); } } @@ -433,14 +433,14 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends msg.ParentEstateID = 0; msg.timestamp = (uint) Util.UnixTimeSinceEpoch(); msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID; - msg.dialog = (byte) 39; // Approved friend request + msg.dialog = 39; // Approved friend request msg.Position = new sLLVector3(); - msg.offline = (byte) 0; + msg.offline = 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 SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule); - SceneAgentIn.StoreAddFriendship(m_pendingFriendRequests[transactionID], agentID, (uint) 1); + SceneAgentIn.StoreAddFriendship(m_pendingFriendRequests[transactionID], agentID, 1); m_pendingFriendRequests.Remove(transactionID); // TODO: Inform agent that the friend is online @@ -471,9 +471,9 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends msg.ParentEstateID = 0; msg.timestamp = (uint) Util.UnixTimeSinceEpoch(); msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID; - msg.dialog = (byte) 40; // Deny friend request + msg.dialog = 40; // Deny friend request msg.Position = new sLLVector3(); - msg.offline = (byte) 0; + msg.offline = 0; msg.binaryBucket = new byte[0]; SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule); m_pendingFriendRequests.Remove(transactionID); diff --git a/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs index 6edc44de4a..858cf213b8 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs @@ -41,10 +41,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private Dictionary m_grouplistmap = new Dictionary(); - private Dictionary m_groupmap = new Dictionary(); - private Dictionary m_iclientmap = new Dictionary(); - private List m_scene = new List(); + private readonly Dictionary m_grouplistmap = new Dictionary(); + private readonly Dictionary m_groupmap = new Dictionary(); + private readonly Dictionary m_iclientmap = new Dictionary(); + private readonly List m_scene = new List(); #region IRegionModule Members @@ -214,7 +214,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups } 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); } diff --git a/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs index 624f307055..9f2d461d48 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs @@ -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 /// IM Session Ids to ItemIds /// - private IDictionary m_pendingOffers = new Dictionary(); + private readonly IDictionary m_pendingOffers = new Dictionary(); private Scene m_scene; diff --git a/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs index 15825b6206..87f0177f06 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs @@ -41,10 +41,6 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private Scene m_scene; - public AvatarProfilesModule() - { - } - #region IRegionModule Members public void Initialise(Scene scene, IConfigSource config) @@ -104,7 +100,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles } else { - m_log.Debug("[AvatarProfilesModule]: Got null for profile for " + avatarID.ToString()); + m_log.Debug("[AvatarProfilesModule]: Got null for profile for " + avatarID); } } diff --git a/OpenSim/Region/Environment/Modules/Framework/Commander.cs b/OpenSim/Region/Environment/Modules/Framework/Commander.cs index 4430c10d40..d226c3da2d 100644 --- a/OpenSim/Region/Environment/Modules/Framework/Commander.cs +++ b/OpenSim/Region/Environment/Modules/Framework/Commander.cs @@ -42,11 +42,11 @@ namespace OpenSim.Region.Environment.Modules.Framework public class Command : ICommand { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private List m_args = new List(); + private readonly List m_args = new List(); - private Action m_command; - private string m_help; - private string m_name; + private readonly Action m_command; + private readonly string m_help; + private readonly string m_name; public Command(string name, Action command, string help) { @@ -164,9 +164,9 @@ namespace OpenSim.Region.Environment.Modules.Framework /// public class CommandArgument { - private string m_help; - private string m_name; - private string m_type; + private readonly string m_help; + private readonly string m_name; + private readonly string m_type; private Object m_val; public CommandArgument(string name, string help, string type) @@ -204,8 +204,8 @@ namespace OpenSim.Region.Environment.Modules.Framework public class Commander : ICommander { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private Dictionary m_commands = new Dictionary(); - private string m_name; + private readonly Dictionary m_commands = new Dictionary(); + private readonly string m_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 += " )\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; foreach (KeyValuePair arg in com.Arguments) { - classSrc += "\t\targs[" + i.ToString() + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n"; + classSrc += "\t\targs[" + i + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n"; i++; } classSrc += "\t\tGetCommander(\"" + m_name + "\").Run(\"" + com.Name + "\", args);\n"; diff --git a/OpenSim/Region/Environment/Modules/Framework/CommanderTestModule.cs b/OpenSim/Region/Environment/Modules/Framework/CommanderTestModule.cs index 7b5c98181f..3df9129a06 100644 --- a/OpenSim/Region/Environment/Modules/Framework/CommanderTestModule.cs +++ b/OpenSim/Region/Environment/Modules/Framework/CommanderTestModule.cs @@ -34,7 +34,7 @@ namespace OpenSim.Region.Environment.Modules.Framework { public class CommanderTestModule : IRegionModule, ICommandableModule { - private Commander m_commander = new Commander("CommanderTest"); + private readonly Commander m_commander = new Commander("CommanderTest"); private Scene m_scene; #region ICommandableModule Members diff --git a/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs b/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs index 2ca4df9ba8..ac2ac0bf16 100644 --- a/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs +++ b/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs @@ -29,14 +29,14 @@ namespace OpenSim.Region.Environment.Modules.Grid.Interregion #endregion private readonly Dictionary m_interfaces = new Dictionary(); + private readonly Object m_lockObject = new object(); private readonly List m_myLocations = new List(); private readonly Dictionary m_neighbourInterfaces = new Dictionary(); private readonly Dictionary m_neighbourRemote = new Dictionary(); private IConfigSource m_config; - private bool m_enabled = false; + private bool m_enabled; - private Object m_lockObject = new object(); private RemotingObject m_myRemote; private TcpChannel m_tcpChannel; private int m_tcpPort = 10101; diff --git a/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs b/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs index c0e3d3b97b..d926714eef 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs @@ -40,12 +40,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture { public class DynamicTextureModule : IRegionModule, IDynamicTextureManager { - private Dictionary RegisteredScenes = new Dictionary(); + private readonly Dictionary RegisteredScenes = new Dictionary(); - private Dictionary RenderPlugins = + private readonly Dictionary RenderPlugins = new Dictionary(); - private Dictionary Updaters = new Dictionary(); + private readonly Dictionary Updaters = new Dictionary(); #region IDynamicTextureManager Members @@ -176,14 +176,14 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture public class DynamicTextureUpdater { - public bool BlendWithOldTexture = false; + public bool BlendWithOldTexture; public string BodyData; public string ContentType; public byte FrontAlpha = 255; public LLUUID LastAssetID; public string Params; public LLUUID PrimID; - public bool SetNewFrontAlpha = false; + public bool SetNewFrontAlpha; public LLUUID SimUUID; public LLUUID UpdaterID; public int UpdateTimer; diff --git a/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs b/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs index e1339a36d9..4bde33b048 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs @@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest { public class HttpRequestModule : IRegionModule, IHttpRequests { - private object HttpListLock = new object(); + private readonly object HttpListLock = new object(); private int httpTimeout = 30000; private string m_name = "HttpScriptRequests"; @@ -93,10 +93,6 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest private Scene m_scene; private Queue rpcQueue = new Queue(); - public HttpRequestModule() - { - } - #region IHttpRequests Members public LLUUID MakeHttpRequest(string url, string parameters, string body) diff --git a/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs b/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs index c828ef05f7..f39f16d6f6 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs @@ -120,9 +120,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL private void MakeHttpRequest(string url, LLUUID requestID) { - WebRequest request = HttpWebRequest.Create(url); + WebRequest request = WebRequest.Create(url); 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)); state.TimeOfRequest = (int) t.TotalSeconds; @@ -131,7 +131,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL private void HttpRequestReturn(IAsyncResult result) { RequestState state = (RequestState) result.AsyncState; - WebRequest request = (WebRequest) state.Request; + WebRequest request = state.Request; HttpWebResponse response = (HttpWebResponse) request.EndGetResponse(result); if (response.StatusCode == HttpStatusCode.OK) { @@ -175,9 +175,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL public class RequestState { - public HttpWebRequest Request = null; + public HttpWebRequest Request; public LLUUID RequestID = LLUUID.Zero; - public int TimeOfRequest = 0; + public int TimeOfRequest; public RequestState(HttpWebRequest request, LLUUID requestID) { diff --git a/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs b/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs index 626c60fc78..8e434c757d 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs @@ -48,10 +48,6 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender private Scene m_scene; private IDynamicTextureManager m_textureManager; - public VectorRenderModule() - { - } - #region IDynamicTextureRender Members public string GetContentType() @@ -138,7 +134,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender catch (Exception e) { //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)) @@ -260,7 +256,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender endPoint.X = (int) x; endPoint.Y = (int) y; 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.Y += endPoint.Y; } @@ -353,7 +349,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender 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 Stream str = null; HttpWebResponse response = (HttpWebResponse) (request).GetResponse(); diff --git a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs index e79b2bdb94..c4c1718861 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs @@ -75,10 +75,6 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm private Queue m_pendingQ; private Scene m_scene; - public WorldCommModule() - { - } - #region IRegionModule Members public void Initialise(Scene scene, IConfigSource config) @@ -324,8 +320,8 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm public class ListenerManager { //private Dictionary m_listeners; + private readonly Hashtable m_listeners = Hashtable.Synchronized(new Hashtable()); private object ListenersLock = new object(); - private Hashtable m_listeners = Hashtable.Synchronized(new Hashtable()); private int m_MaxListeners = 100; 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 { + 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 int m_channel; // Channel 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 string m_message; // The message 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) { diff --git a/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs b/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs index a039d423cb..4f6808e1f9 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs @@ -78,20 +78,20 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC public class XMLRPCModule : IRegionModule, IXMLRPC { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private readonly List m_scenes = new List(); + private readonly object XMLRPCListLock = new object(); private string m_name = "XMLRPCModule"; // private Dictionary m_openChannels; private Dictionary m_pendingSRDResponses; - private int m_remoteDataPort = 0; + private int m_remoteDataPort; private Dictionary m_rpcPending; private Dictionary m_rpcPendingResponses; - private List m_scenes = new List(); private int RemoteReplyScriptTimeout = 9000; private int RemoteReplyScriptWait = 300; - private object XMLRPCListLock = new object(); #region IRegionModule Members @@ -428,15 +428,15 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC public class RPCRequestInfo { - private LLUUID m_ChannelKey; - private string m_IntVal; - private LLUUID m_ItemID; - private uint m_localID; - private LLUUID m_MessageID; + private readonly LLUUID m_ChannelKey; + private readonly string m_IntVal; + private readonly LLUUID m_ItemID; + private readonly uint m_localID; + private readonly LLUUID m_MessageID; + private readonly string m_StrVal; private bool m_processed; private int m_respInt; private string m_respStr; - private string m_StrVal; 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 { - private LLUUID m_ChannelKey; - private LLUUID m_itemID; - private uint m_localID; + private readonly LLUUID m_ChannelKey; + private readonly LLUUID m_itemID; + private readonly uint m_localID; public RPCChannelInfo(uint localID, LLUUID itemID, LLUUID channelID) { diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs b/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs index 9ac3cc3eac..20d02c42b5 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs @@ -44,8 +44,8 @@ namespace OpenSim.Region.Environment.Modules.World.Land //Land types set with flags in ParcelOverlay. //Only one of these can be used. 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_WEST = (byte) 64; //Equals 01000000 + public const byte LAND_FLAG_PROPERTY_BORDER_SOUTH = 128; //Equals 10000000 + public const byte LAND_FLAG_PROPERTY_BORDER_WEST = 64; //Equals 01000000 //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 @@ -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_OTHER = 8; 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_FOR_SALE = (byte) 4; //Equals 00000100 - public const byte LAND_TYPE_OWNED_BY_GROUP = (byte) 2; //Equals 00000010 - public const byte LAND_TYPE_OWNED_BY_OTHER = (byte) 1; //Equals 00000001 - public const byte LAND_TYPE_OWNED_BY_REQUESTER = (byte) 3; //Equals 00000011 - public const byte LAND_TYPE_PUBLIC = (byte) 0; //Equals 00000000 + public const byte LAND_TYPE_IS_BEING_AUCTIONED = 5; //Equals 00000101 + public const byte LAND_TYPE_IS_FOR_SALE = 4; //Equals 00000100 + public const byte LAND_TYPE_OWNED_BY_GROUP = 2; //Equals 00000010 + public const byte LAND_TYPE_OWNED_BY_OTHER = 1; //Equals 00000001 + public const byte LAND_TYPE_OWNED_BY_REQUESTER = 3; //Equals 00000011 + public const byte LAND_TYPE_PUBLIC = 0; //Equals 00000000 //These are other constants. Yay! public const int START_LAND_LOCAL_ID = 1; #endregion - private int[,] landIDList = new int[64,64]; - private Dictionary landList = new Dictionary(); + private readonly int[,] landIDList = new int[64,64]; + private readonly Dictionary landList = new Dictionary(); + private readonly Scene m_scene; - private bool landPrimCountTainted = false; + private bool landPrimCountTainted; private int lastLandLocalID = START_LAND_LOCAL_ID - 1; private bool m_allowedForcefulBans = true; - private Scene m_scene; public LandChannel(Scene scene) { @@ -192,7 +192,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { lastLandLocalID++; new_land.landData.localID = lastLandLocalID; - landList.Add(lastLandLocalID, (LandObject) new_land.Copy()); + landList.Add(lastLandLocalID, new_land.Copy()); bool[,] landBitmap = new_land.getLandBitmap(); @@ -532,7 +532,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { 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; try @@ -611,7 +611,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land packet = (ParcelOverlayPacket) PacketPool.Instance.GetPacket(PacketType.ParcelOverlay); packet.ParcelData.Data = byteArray; packet.ParcelData.SequenceID = sequenceID; - remote_client.OutPacket((Packet) packet, ThrottleOutPacketType.Task); + remote_client.OutPacket(packet, ThrottleOutPacketType.Task); sequenceID++; byteArray = new byte[LAND_BLOCKS_PER_PACKET]; } diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs index 877bed5d71..e6e1ae44eb 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs @@ -45,14 +45,14 @@ namespace OpenSim.Region.Environment.Modules.World.Land m_scene.EventManager.OnParcelPrimCountAdd += landChannel.addPrimToLandPrimCounts; m_scene.EventManager.OnParcelPrimCountUpdate += landChannel.updateLandPrimCounts; - m_scene.EventManager.OnAvatarEnteringNewParcel += new EventManager.AvatarEnteringNewParcel(landChannel.handleAvatarChangingParcel); - m_scene.EventManager.OnClientMovement += new EventManager.ClientMovement(landChannel.handleAnyClientMovement); + m_scene.EventManager.OnAvatarEnteringNewParcel += landChannel.handleAvatarChangingParcel; + m_scene.EventManager.OnClientMovement += landChannel.handleAnyClientMovement; m_scene.EventManager.OnValidateLandBuy += landChannel.handleLandValidationRequest; m_scene.EventManager.OnLandBuy += landChannel.handleLandBuyRequest; lock (m_scene) { - m_scene.LandChannel = (ILandChannel) landChannel; + m_scene.LandChannel = landChannel; } } diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs index e297b10f71..54fe9ae6c5 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs @@ -73,6 +73,8 @@ namespace OpenSim.Region.Environment.Modules.World.Land get { return m_scene.RegionInfo.RegionID; } } + #endregion + #region Constructors 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) { - return (landBitmap[x / 4, y / 4] == true); + return landBitmap[x / 4, y / 4]; } else { @@ -148,7 +150,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land updatePacket.ParcelData.GroupID = landData.groupID; updatePacket.ParcelData.GroupPrims = landData.groupPrims; updatePacket.ParcelData.IsGroupOwned = landData.isGroupOwned; - updatePacket.ParcelData.LandingType = (byte) landData.landingType; + updatePacket.ParcelData.LandingType = landData.landingType; updatePacket.ParcelData.LocalID = landData.localID; if (landData.area > 0) { @@ -212,7 +214,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land landData.selectedPrims; updatePacket.ParcelData.UserLocation = landData.userLocation; 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) @@ -355,7 +357,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock(); - listBlock.Flags = (uint) 0; + listBlock.Flags = 0; listBlock.ID = entry.AgentID; listBlock.Time = 0; @@ -367,7 +369,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock(); - listBlock.Flags = (uint) 0; + listBlock.Flags = 0; listBlock.ID = LLUUID.Zero; listBlock.Time = 0; @@ -390,7 +392,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land replyPacket.Data.SequenceID = 0; 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) @@ -402,7 +404,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land replyPacket.Data.SequenceID = 0; 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++) { - if (landBitmap[x, y] == true) + if (landBitmap[x, y]) { if (min_x > x) min_x = x; if (min_y > y) min_y = y; @@ -499,7 +501,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land if (ty > 255) ty = 255; 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]); tx = max_x * 4; @@ -509,7 +511,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land if (ty > 255) ty = 255; 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]); landData.area = tempArea; } @@ -657,7 +659,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land if (i % 8 == 0) { tempConvertArr[byteNum] = tempByte; - tempByte = (byte) 0; + tempByte = 0; i = 0; byteNum++; } @@ -677,7 +679,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land tempByte = landData.landBitmapByteArray[i]; 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; x++; if (x > 63) @@ -751,7 +753,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land resultLocalIDs.RemoveAt(0); } 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 } } \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs index 4406e177a7..854d2ee8e5 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs @@ -37,10 +37,10 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser { public class SerialiserModule : IRegionModule, IRegionSerialiser { - private Commander m_commander = new Commander("Export"); - private List m_regions = new List(); + private readonly Commander m_commander = new Commander("Export"); + private readonly List m_regions = new List(); + private readonly List m_serialisers = new List(); private string m_savedir = "exports" + "/"; - private List m_serialisers = new List(); #region IRegionModule Members @@ -105,8 +105,8 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser TextWriter regionInfoWriter = new StreamWriter(saveDir + "README.TXT"); regionInfoWriter.WriteLine("Region Name: " + scene.RegionInfo.RegionName); - regionInfoWriter.WriteLine("Region ID: " + scene.RegionInfo.RegionID.ToString()); - regionInfoWriter.WriteLine("Backup Time: UTC " + DateTime.UtcNow.ToString()); + regionInfoWriter.WriteLine("Region ID: " + scene.RegionInfo.RegionID); + regionInfoWriter.WriteLine("Backup Time: UTC " + DateTime.UtcNow); regionInfoWriter.WriteLine("Serialise Version: 0.1"); regionInfoWriter.Close(); @@ -141,7 +141,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser { if (region.RegionInfo.RegionName == (string) args[0]) { - List results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/"); + List 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) { - List results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/"); + List results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID + "/"); } } diff --git a/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs b/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs index 47ce258b45..05fae2287f 100644 --- a/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs @@ -127,7 +127,7 @@ namespace OpenSim.Region.Environment.Modules.World.Sun { long m_addticks = (DateTime.Now.Ticks - m_start) * m_dilation; 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) diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/Effects/CookieCutter.cs b/OpenSim/Region/Environment/Modules/World/Terrain/Effects/CookieCutter.cs index a2e0c40ce2..331c49d47c 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/Effects/CookieCutter.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/Effects/CookieCutter.cs @@ -78,7 +78,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.Effects { for (y = 0; y < map.Height; y++) { - if (cliffMask[x, y] == true) + if (cliffMask[x, y]) eroder.PaintEffect(map, x, y, 4, 0.1); } } diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/LLRAW.cs b/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/LLRAW.cs index 5d6723f81f..90728da884 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/LLRAW.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/LLRAW.cs @@ -47,7 +47,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders { 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. } } @@ -76,7 +76,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders { for (j = 0; j < 256; j++) { - lookupHeightTable[i + (j * 256)] = ((double) i * ((double) j / 127.0)); + lookupHeightTable[i + (j * 256)] = (i * (j / 127.0)); } } diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/Terragen.cs b/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/Terragen.cs index 7cb4b00434..04c3f1a3e3 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/Terragen.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/Terragen.cs @@ -50,14 +50,14 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders BinaryReader bs = new BinaryReader(s); bool eof = false; - if (ASCIIEncoding.ASCII.GetString(bs.ReadBytes(16)) == "TERRAGENTERRAIN ") + if (Encoding.ASCII.GetString(bs.ReadBytes(16)) == "TERRAGENTERRAIN ") { // Terragen file while (eof == false) { int w = 256; int h = 256; - string tmp = ASCIIEncoding.ASCII.GetString(bs.ReadBytes(4)); + string tmp = Encoding.ASCII.GetString(bs.ReadBytes(4)); switch (tmp) { case "SIZE": @@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders { 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; diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs index dee455ff70..fa52a00e61 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs @@ -31,7 +31,6 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes { public class FlattenSphere : ITerrainPaintableEffect { - #region ITerrainPaintableEffect Members public void PaintEffect(ITerrainChannel map, double rx, double ry, double strength, double duration) diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/NoiseSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/NoiseSphere.cs index 8ae583ea94..5037533488 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/NoiseSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/NoiseSphere.cs @@ -57,7 +57,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes z *= z; 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) map[x, y] += noise * z * duration; diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RevertSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RevertSphere.cs index b47e041acc..acce32e9da 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RevertSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RevertSphere.cs @@ -32,7 +32,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes { public class RevertSphere : ITerrainPaintableEffect { - private ITerrainChannel m_revertmap; + private readonly ITerrainChannel m_revertmap; public RevertSphere(ITerrainChannel revertmap) { diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainException.cs b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainException.cs index f5c0fe4a9f..2411de09fb 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainException.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainException.cs @@ -31,7 +31,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain { public class TerrainException : Exception { - public TerrainException() : base() + public TerrainException() { } diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs index eff61592bb..c105620b5a 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs @@ -83,7 +83,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain private Dictionary m_plugineffects; private ITerrainChannel m_revert; private Scene m_scene; - private bool m_tainted = false; + private bool m_tainted; #region ICommandableModule Members @@ -223,6 +223,8 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain } } + #endregion + #region Plugin Loading Methods private void LoadPlugins() @@ -276,8 +278,6 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain #endregion - #endregion - /// /// Installs into terrain module the standard suite of brushes /// diff --git a/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs b/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs index 4b22700134..d964fe45e5 100644 --- a/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs +++ b/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs @@ -66,10 +66,10 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator m_trees = new List(); 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); - CalculateTrees.Elapsed += new ElapsedEventHandler(CalculateTrees_Elapsed); + CalculateTrees.Elapsed += CalculateTrees_Elapsed; CalculateTrees.Start(); m_log.Debug("[TREES]: Initialised tree module"); } diff --git a/OpenSim/Region/Environment/PermissionManager.cs b/OpenSim/Region/Environment/PermissionManager.cs index fd8387be99..b2829a1e03 100644 --- a/OpenSim/Region/Environment/PermissionManager.cs +++ b/OpenSim/Region/Environment/PermissionManager.cs @@ -33,27 +33,21 @@ namespace OpenSim.Region.Environment { 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) // disable in any production environment // TODO: Change this to false when permissions are a desired default // TODO: Move to configuration option. 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() { @@ -64,6 +58,12 @@ namespace OpenSim.Region.Environment m_scene = scene; } + public bool BypassPermissions + { + get { return m_bypassPermissions; } + set { m_bypassPermissions = value; } + } + public void Initialise(Scene scene) { m_scene = scene; @@ -129,8 +129,8 @@ namespace OpenSim.Region.Environment ILandObject land = m_scene.LandChannel.getLandObject(position.X, position.Y); if (land == null) return false; - if ((land.landData.landFlags & ((int)Parcel.ParcelFlags.CreateObjects)) == - (int)Parcel.ParcelFlags.CreateObjects) + if ((land.landData.landFlags & ((int) Parcel.ParcelFlags.CreateObjects)) == + (int) Parcel.ParcelFlags.CreateObjects) permission = true; //TODO: check for group rights @@ -168,8 +168,6 @@ namespace OpenSim.Region.Environment /// Has permission? public virtual bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos) { - - if ((newPos.X > 257f || newPos.X < -1f || newPos.Y > 257f || newPos.Y < -1f)) { return true; @@ -193,7 +191,7 @@ namespace OpenSim.Region.Environment return true; } - if ((land2.landData.landFlags & ((int)Parcel.ParcelFlags.AllowAllObjectEntry)) != 0) + if ((land2.landData.landFlags & ((int) Parcel.ParcelFlags.AllowAllObjectEntry)) != 0) { return true; } @@ -210,355 +208,6 @@ namespace OpenSim.Region.Environment 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; - } - - /// - /// Permissions check - can user delete an object? - /// - /// User attempting the delete - /// Target object - /// Has permission? - 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) { return IsAdministrator(user); @@ -690,5 +339,351 @@ namespace OpenSim.Region.Environment } #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; + } + + /// + /// Permissions check - can user delete an object? + /// + /// User attempting the delete + /// Target object + /// Has permission? + 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 } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs b/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs index fe9c8e7cbd..2fc2a105bd 100644 --- a/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs +++ b/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs @@ -46,8 +46,8 @@ namespace OpenSim.Region.Environment.Scenes { if (nod.Attributes["name"] != null) { - string name = (string)nod.Attributes["name"].Value; - LLUUID id = (LLUUID)nod.InnerText; + string name = nod.Attributes["name"].Value; + LLUUID id = (LLUUID) nod.InnerText; AnimsLLUUID.Add(name, id); AnimsNames.Add(id, name); @@ -56,4 +56,4 @@ namespace OpenSim.Region.Environment.Scenes } } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/AvatarAppearance.cs b/OpenSim/Region/Environment/Scenes/AvatarAppearance.cs index 8f295079b1..860399c6ea 100644 --- a/OpenSim/Region/Environment/Scenes/AvatarAppearance.cs +++ b/OpenSim/Region/Environment/Scenes/AvatarAppearance.cs @@ -37,52 +37,13 @@ namespace OpenSim.Region.Environment.Scenes [Serializable] public class AvatarAppearance : ISerializable { + protected float m_avatarHeight; protected LLUUID m_scenePresenceID; - - 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 LLObject.TextureEntry m_textureEntry; protected byte[] m_visualParams; - - public byte[] VisualParams - { - get { return m_visualParams; } - set { m_visualParams = value; } - } - protected AvatarWearable[] m_wearables; - public AvatarWearable[] Wearables - { - 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; } - } + protected int m_wearablesSerial = 1; public AvatarAppearance() { @@ -97,6 +58,86 @@ namespace OpenSim.Region.Environment.Scenes 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 + /// /// /// @@ -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. // (float)m_visualParams[25] = Height // (float)m_visualParams[125] = LegLength - m_avatarHeight = (1.50856f + (((float) m_visualParams[25]/255.0f)*(2.525506f - 1.50856f))) - + (((float) m_visualParams[125]/255.0f)/1.5f); + m_avatarHeight = (1.50856f + ((m_visualParams[25] / 255.0f) * (2.525506f - 1.50856f))) + + ((m_visualParams[125] / 255.0f) / 1.5f); } /// @@ -152,45 +193,5 @@ namespace OpenSim.Region.Environment.Scenes textu.CreateFace(6).TextureID = new LLUUID("00000000-0000-1111-9999-000000000011"); 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); - } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/EntityBase.cs b/OpenSim/Region/Environment/Scenes/EntityBase.cs index 11bafb7466..7e43718556 100644 --- a/OpenSim/Region/Environment/Scenes/EntityBase.cs +++ b/OpenSim/Region/Environment/Scenes/EntityBase.cs @@ -36,70 +36,15 @@ namespace OpenSim.Region.Environment.Scenes [Serializable] 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; - - public Scene Scene - { - get { return m_scene; } - } protected LLUUID m_uuid; - - public virtual LLUUID UUID - { - get { return m_uuid; } - set { m_uuid = value; } - } - - protected string m_name; - - /// - /// - /// - public virtual string Name - { - get { return m_name; } - set { m_name = value; } - } - - protected LLVector3 m_pos; - - /// - /// - /// - public virtual LLVector3 AbsolutePosition - { - get { return m_pos; } - set { m_pos = value; } - } - protected LLVector3 m_velocity; - protected LLVector3 m_rotationalvelocity; - - /// - /// - /// - 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; } - } /// /// 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); } - /// - /// - /// - public abstract void UpdateMovement(); - - /// - /// Performs any updates that need to be done at each frame. - /// - public abstract void Update(); - - /// - /// Copies the entity - /// - /// - public virtual EntityBase Copy() - { - return (EntityBase) MemberwiseClone(); - } - - - public abstract void SetText(string text, Vector3 color, double alpha); - protected EntityBase(SerializationInfo info, StreamingContext context) { //System.Console.WriteLine("EntityBase Deserialize BGN"); @@ -146,43 +69,95 @@ namespace OpenSim.Region.Environment.Scenes throw new ArgumentNullException("info"); } - m_uuid = new LLUUID((Guid)info.GetValue("m_uuid", typeof(Guid))); - m_name = (string)info.GetValue("m_name", typeof(string)); + m_uuid = new LLUUID((Guid) info.GetValue("m_uuid", typeof (Guid))); + m_name = (string) info.GetValue("m_name", typeof (string)); m_pos = new LLVector3( - (float)info.GetValue("m_pos.X", typeof(float)), - (float)info.GetValue("m_pos.Y", typeof(float)), - (float)info.GetValue("m_pos.Z", typeof(float))); + (float) info.GetValue("m_pos.X", typeof (float)), + (float) info.GetValue("m_pos.Y", typeof (float)), + (float) info.GetValue("m_pos.Z", typeof (float))); m_velocity = new LLVector3( - (float)info.GetValue("m_velocity.X", typeof(float)), - (float)info.GetValue("m_velocity.Y", typeof(float)), - (float)info.GetValue("m_velocity.Z", typeof(float))); + (float) info.GetValue("m_velocity.X", typeof (float)), + (float) info.GetValue("m_velocity.Y", typeof (float)), + (float) info.GetValue("m_velocity.Z", typeof (float))); m_rotationalvelocity = new LLVector3( - (float)info.GetValue("m_rotationalvelocity.X", typeof(float)), - (float)info.GetValue("m_rotationalvelocity.Y", typeof(float)), - (float)info.GetValue("m_rotationalvelocity.Z", typeof(float))); + (float) info.GetValue("m_rotationalvelocity.X", typeof (float)), + (float) info.GetValue("m_rotationalvelocity.Y", typeof (float)), + (float) info.GetValue("m_rotationalvelocity.Z", typeof (float))); m_rotation = new Quaternion( - (float)info.GetValue("m_rotation.w", typeof(float)), - (float)info.GetValue("m_rotation.x", typeof(float)), - (float)info.GetValue("m_rotation.y", typeof(float)), - (float)info.GetValue("m_rotation.z", typeof(float))); + (float) info.GetValue("m_rotation.w", typeof (float)), + (float) info.GetValue("m_rotation.x", typeof (float)), + (float) info.GetValue("m_rotation.y", 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"); } + public Scene Scene + { + get { return m_scene; } + } + + public virtual LLUUID UUID + { + get { return m_uuid; } + set { m_uuid = value; } + } + + /// + /// + /// + public virtual string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + /// + /// + public virtual LLVector3 AbsolutePosition + { + get { return m_pos; } + set { m_pos = value; } + } + + /// + /// + /// + 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, Flags = SecurityPermissionFlag.SerializationFormatter)] public virtual void GetObjectData( - SerializationInfo info, StreamingContext context) + SerializationInfo info, StreamingContext context) { if (info == null) { @@ -215,18 +190,42 @@ namespace OpenSim.Region.Environment.Scenes info.AddValue("m_localId", m_localId); } + + #endregion + + /// + /// + /// + public abstract void UpdateMovement(); + + /// + /// Performs any updates that need to be done at each frame. + /// + public abstract void Update(); + + /// + /// Copies the entity + /// + /// + public virtual EntityBase Copy() + { + return (EntityBase) MemberwiseClone(); + } + + + public abstract void SetText(string text, Vector3 color, double alpha); } //Nested Classes 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 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 float distance = 0; public EntityIntersection() { @@ -239,4 +238,4 @@ namespace OpenSim.Region.Environment.Scenes HitTF = _HitTF; } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs b/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs index 3a20190e68..508eb67033 100644 --- a/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs +++ b/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs @@ -34,4 +34,4 @@ namespace OpenSim.Region.Environment.Scenes { void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index da286ad102..3889741051 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs @@ -46,36 +46,33 @@ namespace OpenSim.Region.Environment.Scenes #region Events + private PhysicsCrash handlerPhysicsCrash; public event PhysicsCrash UnRecoverableError; - private PhysicsCrash handlerPhysicsCrash = null; #endregion #region Fields - public Dictionary ScenePresences; // SceneObjects is not currently populated or used. //public Dictionary SceneObjects; + public PhysicsScene _PhyScene; public Dictionary Entities; - public Dictionary RestorePresences; - - public BasicQuadTreeNode QuadTree; - - protected RegionInfo m_regInfo; + protected int m_activeScripts; + protected int m_numChildAgents; + protected int m_numPrim; + protected int m_numRootAgents; protected Scene m_parentScene; - protected PermissionManager PermissionsMngr; - protected List m_updateList = new List(); - protected int m_numRootAgents = 0; - protected int m_numPrim = 0; - protected int m_numChildAgents = 0; - protected int m_physicalPrim = 0; + protected int m_physicalPrim; + protected RegionInfo m_regInfo; - protected int m_activeScripts = 0; - protected int m_scriptLPS = 0; + protected int m_scriptLPS; internal object m_syncRoot = new object(); - - public PhysicsScene _PhyScene; + protected List m_updateList = new List(); + protected PermissionManager PermissionsMngr; + public BasicQuadTreeNode QuadTree; + public Dictionary RestorePresences; + public Dictionary ScenePresences; #endregion @@ -84,7 +81,7 @@ namespace OpenSim.Region.Environment.Scenes m_parentScene = parent; m_regInfo = regInfo; 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(); } @@ -162,7 +159,7 @@ namespace OpenSim.Region.Environment.Scenes { 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) { part.LocalId = m_parentScene.PrimIDAllocate(); - } sceneObject.UpdateParentIDs(); AddEntity(sceneObject); @@ -233,7 +229,7 @@ namespace OpenSim.Region.Environment.Scenes for (int i = 0; i < m_updateList.Count; i++) { EntityBase entity = m_updateList[i]; - + // Don't abort the whole update if one entity happens to give us an exception. try { @@ -249,7 +245,7 @@ namespace OpenSim.Region.Environment.Scenes } 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(); @@ -284,15 +280,16 @@ namespace OpenSim.Region.Environment.Scenes { 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--; return; } } } } + public void DetachObject(uint objectLocalID, IClientAPI remoteClient) { List EntityList = GetEntities(); @@ -301,29 +298,25 @@ namespace OpenSim.Region.Environment.Scenes { if (obj is SceneObjectGroup) { - if (((SceneObjectGroup)obj).LocalId == objectLocalID) + if ((obj).LocalId == objectLocalID) { - SceneObjectGroup group = (SceneObjectGroup)obj; + SceneObjectGroup group = (SceneObjectGroup) obj; //group.DetachToGround(); - DetachSingleAttachmentToInv(group.GetFromAssetID(),remoteClient); + DetachSingleAttachmentToInv(group.GetFromAssetID(), remoteClient); } } } - } public void HandleUndo(IClientAPI remoteClient, LLUUID primId) { if (primId != LLUUID.Zero) { - SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId); + SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId); if (part != null) part.Undo(); - } - - } /// @@ -338,27 +331,29 @@ namespace OpenSim.Region.Environment.Scenes // Calls attach with a Zero position 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, - (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); + 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) + (PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer), + (uint) + (PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer), + ItemFlags, false, false, remoteClient.AgentId, true); 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(); } - } // 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?? public void DetachSingleAttachmentToInv(LLUUID itemID, IClientAPI remoteClient) { - if (itemID == LLUUID.Zero) // If this happened, someone made a mistake.... return; @@ -368,17 +363,16 @@ namespace OpenSim.Region.Environment.Scenes { if (obj is SceneObjectGroup) { - if (((SceneObjectGroup)obj).GetFromAssetID() == itemID) + if (((SceneObjectGroup) obj).GetFromAssetID() == itemID) { - SceneObjectGroup group = (SceneObjectGroup)obj; + SceneObjectGroup group = (SceneObjectGroup) obj; group.DetachToInventoryPrep(); - m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint)group.GetAttachmentPoint()).ToString()); - m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(),group.OwnerID); + m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint) group.GetAttachmentPoint())); + m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(), group.OwnerID); m_parentScene.DeleteSceneObjectGroup(group); } } } - } public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, LLVector3 attachPos) @@ -388,39 +382,34 @@ namespace OpenSim.Region.Environment.Scenes { 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 // set it's offset position = 0 so that it appears on the attachment point // and not in a weird location somewhere unknown. - if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint()) + if (AttachmentPt != 0 && AttachmentPt != group.GetAttachmentPoint()) { - attachPos = LLVector3.Zero; } // AttachmentPt 0 means the client chose to 'wear' the attachment. if (AttachmentPt == 0) { - // Check object for stored attachment point - AttachmentPt = (uint)group.GetAttachmentPoint(); - - + AttachmentPt = group.GetAttachmentPoint(); } // if we still didn't find a suitable attachment point....... if (AttachmentPt == 0) { // Stick it on left hand with Zero Offset from the attachment point. - AttachmentPt = (uint)AttachmentPoint.LeftHand; + AttachmentPt = (uint) AttachmentPoint.LeftHand; attachPos = LLVector3.Zero; } - m_log.Debug("[ATTACH]: Using attachpoint: " + AttachmentPt.ToString()); - - + m_log.Debug("[ATTACH]: Using attachpoint: " + AttachmentPt); + // Saves and gets assetID if (group.GetFromAssetID() == LLUUID.Zero) @@ -431,16 +420,14 @@ namespace OpenSim.Region.Environment.Scenes group.SetFromAssetID(newAssetID); } group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos); - } - } } - } + // Use the above method. - public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, - bool deadMethod) + public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, + bool deadMethod) { Console.WriteLine("Attaching object " + objectLocalID + " to " + AttachmentPt); SceneObjectPart p = GetSceneObjectPart(objectLocalID); @@ -489,14 +476,14 @@ namespace OpenSim.Region.Environment.Scenes objupdate.ObjectData[0].ParentID = 0; objupdate.ObjectData[0].OwnerID = LLUUID.Zero; 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].ID = av.LocalId; objupdate.ObjectData[0].FullID = remoteClient.AgentId; objupdate.ObjectData[0].ParentID = 0; objupdate.ObjectData[0].NameValue = - Helpers.StringToField("FirstName STRING RW SV " + av.Firstname + "\nLastName STRING RW SV " + av.Lastname); + Helpers.StringToField("FirstName STRING RW SV " + av.Firstname + "\nLastName STRING RW SV " + av.Lastname); LLVector3 pos2 = av.AbsolutePosition; // new LLVector3((float) Pos.X, (float) Pos.Y, (float) Pos.Z); byte[] pb = pos2.GetBytes(); @@ -529,7 +516,7 @@ namespace OpenSim.Region.Environment.Scenes objupdate.ObjectData[1].TextureEntry = primData.TextureEntry; 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].PathEnd = primData.PathEnd; objupdate.ObjectData[1].PathScaleX = primData.PathScaleX; @@ -566,8 +553,8 @@ namespace OpenSim.Region.Environment.Scenes //objupdate.ObjectData[1].ClickAction = clickAction; objupdate.ObjectData[1].Radius = 20; objupdate.ObjectData[1].NameValue = - Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID); - LLVector3 pos = new LLVector3((float)0.0, (float)0.0, (float)0.0); + Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID); + LLVector3 pos = new LLVector3((float) 0.0, (float) 0.0, (float) 0.0); pb = pos.GetBytes(); Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length); @@ -738,6 +725,7 @@ namespace OpenSim.Region.Environment.Scenes m_scriptLPS = 0; return returnval; } + #endregion #region Get Methods @@ -765,7 +753,7 @@ namespace OpenSim.Region.Environment.Scenes return result; } - + /// /// Get the controlling client for the given avatar, if there is one. /// @@ -779,12 +767,12 @@ namespace OpenSim.Region.Environment.Scenes public IClientAPI GetControllingClient(LLUUID agentId) { ScenePresence presence = GetScenePresence(agentId); - + if (presence != null) { return presence.ControllingClient; } - + return null; } @@ -819,7 +807,7 @@ namespace OpenSim.Region.Environment.Scenes { return ScenePresences[agentID]; } - + return null; } @@ -831,8 +819,8 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup)ent).HasChildPrim(localID)) - return (SceneObjectGroup)ent; + if (((SceneObjectGroup) ent).HasChildPrim(localID)) + return (SceneObjectGroup) ent; } } return null; @@ -846,8 +834,8 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup)ent).HasChildPrim(fullID)) - return (SceneObjectGroup)ent; + if (((SceneObjectGroup) ent).HasChildPrim(fullID)) + return (SceneObjectGroup) ent; } } return null; @@ -862,7 +850,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - SceneObjectGroup reportingG = (SceneObjectGroup)ent; + SceneObjectGroup reportingG = (SceneObjectGroup) ent; EntityIntersection result = reportingG.TestIntersection(hray, frontFacesOnly, faceCenters); if (result.HitTF) { @@ -902,13 +890,13 @@ namespace OpenSim.Region.Environment.Scenes { if (!presence.IsChildAgent) { - avatar = presence; + avatar = presence; return true; } else { m_log.WarnFormat( - "[INNER SCENE]: Requested avatar {0} could not be found in scene {1} since it is only registered as a child agent!", + "[INNER SCENE]: Requested avatar {0} could not be found in scene {1} since it is only registered as a child agent!", avatarId, m_parentScene.RegionInfo.RegionName); } } @@ -987,8 +975,8 @@ namespace OpenSim.Region.Environment.Scenes if (presence.IsChildAgent && m_parentScene.m_seeIntoRegionFromNeighbor) { - LLVector3 oLoc = ((SceneObjectGroup)ent).AbsolutePosition; - float distResult = (float)Util.GetDistanceTo(presence.AbsolutePosition, oLoc); + LLVector3 oLoc = (ent).AbsolutePosition; + float distResult = (float) Util.GetDistanceTo(presence.AbsolutePosition, oLoc); //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. // KnownPrim also makes the prim known when called. - if (!presence.KnownPrim(((SceneObjectGroup)ent).UUID)) - ((SceneObjectGroup)ent).ScheduleFullUpdateToAvatar(presence); + if (!presence.KnownPrim((ent).UUID)) + ((SceneObjectGroup) ent).ScheduleFullUpdateToAvatar(presence); } } 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) { SceneObjectGroup group = GetGroupByPrim(localID); @@ -1151,13 +1140,12 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - LLVector3 oldPos = group.AbsolutePosition; if (group.RootPart.m_IsAttachment) { group.UpdateGroupPosition(pos); } - else + else { if (!PermissionsMngr.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment) { @@ -1203,7 +1191,7 @@ namespace OpenSim.Region.Environment.Scenes { 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); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID))// && PermissionsMngr.) + if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) // && PermissionsMngr.) { group.GrabMovement(offset, pos, remoteClient); } @@ -1304,9 +1292,9 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup)ent).LocalId == parentPrim) + if ((ent).LocalId == parentPrim) { - parenPrim = (SceneObjectGroup)ent; + parenPrim = (SceneObjectGroup) ent; break; } } @@ -1321,9 +1309,9 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup)ent).LocalId == childPrims[i]) + if ((ent).LocalId == childPrims[i]) { - children.Add((SceneObjectGroup)ent); + children.Add((SceneObjectGroup) ent); } } } @@ -1334,7 +1322,7 @@ namespace OpenSim.Region.Environment.Scenes { parenPrim.LinkToGroup(sceneObj); } - + // We need to explicitly resend the newly link prim's object properties since no other actions // occur on link to invoke this elsewhere (such as object selection) parenPrim.GetProperties(client); @@ -1360,19 +1348,16 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - SceneObjectGroup obj = (SceneObjectGroup)ent; + SceneObjectGroup obj = (SceneObjectGroup) ent; sceneObjects.Add(obj.LocalId, obj); - } } // Find the root prim among the prim ids we've been given for (int i = 0; i < primIds.Count; i++) { - if (sceneObjects.ContainsKey(primIds[i])) { - parenPrim = sceneObjects[primIds[i]]; primIds.RemoveAt(i); break; @@ -1402,14 +1387,13 @@ namespace OpenSim.Region.Environment.Scenes grp.DelinkFromGroup(primIds[i]); delinkedSomething = true; } - } } if (!delinkedSomething) { m_log.InfoFormat("[SCENE]: " + - "DelinkObjects(): Could not find a root prim out of {0} as given to a delink request!", - primIds); + "DelinkObjects(): Could not find a root prim out of {0} as given to a delink request!", + primIds); } } } @@ -1425,7 +1409,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - foreach (KeyValuePair subent in ((SceneObjectGroup)ent).Children) + foreach (KeyValuePair subent in ((SceneObjectGroup) ent).Children) { if (subent.Value.LocalId == localID) { @@ -1435,7 +1419,7 @@ namespace OpenSim.Region.Environment.Scenes } } } - + //Protip: In my day, we didn't call them searchable objects, we called them limited point-to-point joints //aka ObjectFlags.JointWheel = IncludeInSearch @@ -1467,7 +1451,7 @@ namespace OpenSim.Region.Environment.Scenes public void DuplicateObject(uint originalPrim, LLVector3 offset, uint flags, LLUUID AgentID, LLUUID GroupID) { m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); - + List EntityList = GetEntities(); SceneObjectGroup originPrim = null; @@ -1475,9 +1459,9 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup)ent).LocalId == originalPrim) + if ((ent).LocalId == originalPrim) { - originPrim = (SceneObjectGroup)ent; + originPrim = (SceneObjectGroup) ent; break; } } @@ -1526,4 +1510,4 @@ namespace OpenSim.Region.Environment.Scenes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index 6bd5d1aeb3..1e6ebf9e27 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -40,7 +40,7 @@ namespace OpenSim.Region.Environment.Scenes { public partial class Scene { - private static readonly ILog m_log + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); /// @@ -49,11 +49,11 @@ namespace OpenSim.Region.Environment.Scenes public void StartScripts() { m_log.Info("[PRIM INVENTORY]: Starting scripts in scene"); - + foreach (SceneObjectGroup group in Entities.Values) { group.StartScripts(); - } + } } /// @@ -64,9 +64,9 @@ namespace OpenSim.Region.Environment.Scenes /// in which the item is to be placed. public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item) { - CachedUserInfo userInfo + CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - + if (userInfo != null) { userInfo.AddItem(remoteClient.AgentId, item); @@ -88,9 +88,9 @@ namespace OpenSim.Region.Environment.Scenes m_log.ErrorFormat( "[AGENT INVENTORY]: Agent {0} {1} was not found for add of item {2} {3}", remoteClient.Name, remoteClient.AgentId, item.Name, item.ID); - + return; - } + } } /// @@ -190,7 +190,7 @@ namespace OpenSim.Region.Environment.Scenes { // Retrieve group SceneObjectPart part = GetSceneObjectPart(primId); - SceneObjectGroup group = part.ParentGroup; + SceneObjectGroup group = part.ParentGroup; if (null == group) { m_log.ErrorFormat( @@ -200,30 +200,30 @@ namespace OpenSim.Region.Environment.Scenes return; } - + // Retrieve item TaskInventoryItem item = group.GetInventoryItem(part.LocalId, itemId); if (null == item) { return; } - + // Create new asset // XXX Hardcoding the numbers is a temporary measure - need an enumeration for this // There may well be one in libsecondlife AssetBase asset = CreateAsset(item.Name, item.Description, 10, 10, data); AssetCache.AddAsset(asset); - + // Update item with new asset item.AssetID = asset.FullID; group.UpdateInventoryItem(item); group.GetProperties(remoteClient); - + // Trigger rerunning of script (use TriggerRezScript event, see RezScript) if (isScriptRunning) { group.StopScript(part.LocalId, item.ItemID); - group.StartScript(part.LocalId, item.ItemID); + group.StartScript(part.LocalId, item.ItemID); } } @@ -272,7 +272,7 @@ namespace OpenSim.Region.Environment.Scenes if (userInfo != null && userInfo.RootFolder != null) { InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); - + if (item != null) { if (LLUUID.Zero == transactionID) @@ -298,11 +298,11 @@ namespace OpenSim.Region.Environment.Scenes } else { - IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); + IAgentAssetTransactions agentTransactions = RequestModuleInterface(); if (agentTransactions != null) { agentTransactions.HandleItemUpdateFromTransaction( - remoteClient, transactionID, item); + remoteClient, transactionID, item); } } } @@ -318,7 +318,7 @@ namespace OpenSim.Region.Environment.Scenes "[AGENT INVENTORY]: Agent ID " + remoteClient.AgentId + " not found for an inventory item update."); } } - + /// /// Give an inventory item from one avatar to another /// @@ -328,13 +328,13 @@ namespace OpenSim.Region.Environment.Scenes public void GiveInventoryItem(IClientAPI recipientClient, LLUUID senderId, LLUUID itemId) { // Retrieve the item from the sender - CachedUserInfo senderUserInfo = CommsManager.UserProfileCacheService.GetUserDetails(senderId); - + CachedUserInfo senderUserInfo = CommsManager.UserProfileCacheService.GetUserDetails(senderId); + if (senderUserInfo == null) { m_log.ErrorFormat( - "[AGENT INVENTORY]: Failed to find sending user {0} for item {1}", senderId, itemId); - + "[AGENT INVENTORY]: Failed to find sending user {0} for item {1}", senderId, itemId); + return; } @@ -342,11 +342,11 @@ namespace OpenSim.Region.Environment.Scenes { InventoryItemBase item = senderUserInfo.RootFolder.HasItem(itemId); if (item != null) - { + { // TODO get recipient's root folder - CachedUserInfo recipientUserInfo - = CommsManager.UserProfileCacheService.GetUserDetails(recipientClient.AgentId); - + CachedUserInfo recipientUserInfo + = CommsManager.UserProfileCacheService.GetUserDetails(recipientClient.AgentId); + if (recipientUserInfo != null) { // Insert a copy of the item into the recipient @@ -373,15 +373,15 @@ namespace OpenSim.Region.Environment.Scenes itemCopy.SaleType = item.SaleType; recipientUserInfo.AddItem(recipientClient.AgentId, itemCopy); - + // Let the recipient client know about this new item - recipientClient.SendBulkUpdateInventory(itemCopy); + recipientClient.SendBulkUpdateInventory(itemCopy); } else { m_log.ErrorFormat( - "[AGENT INVENTORY]: Could not find userinfo for recipient user {0}, {1} of item {2}, {3} from {4}", - recipientClient.Name, recipientClient.AgentId, item.Name, + "[AGENT INVENTORY]: Could not find userinfo for recipient user {0}, {1} of item {2}, {3} from {4}", + recipientClient.Name, recipientClient.AgentId, item.Name, item.ID, senderId); } } @@ -389,15 +389,15 @@ namespace OpenSim.Region.Environment.Scenes { m_log.ErrorFormat( "[AGENT INVENTORY]: Failed to find item {0} to give to {1}", itemId, senderId); - + return; } } 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; - } + } } public void CopyInventoryItem(IClientAPI remoteClient, uint callbackID, LLUUID oldAgentID, LLUUID oldItemID, @@ -406,14 +406,14 @@ namespace OpenSim.Region.Environment.Scenes m_log.DebugFormat( "[AGENT INVENTORY]: CopyInventoryItem received by {0} with oldAgentID {1}, oldItemID {2}, new FolderID {3}, newName {4}", remoteClient.AgentId, oldAgentID, oldItemID, newFolderID, newName); - + InventoryItemBase item = CommsManager.UserProfileCacheService.libraryRoot.HasItem(oldItemID); if (item == null) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(oldAgentID); 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; } @@ -422,20 +422,20 @@ namespace OpenSim.Region.Environment.Scenes item = userInfo.RootFolder.HasItem(oldItemID); 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; } } else { - m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString()); + m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID); return; } } - - AssetBase asset + + AssetBase asset = AssetCache.GetAsset( - item.AssetID, (item.AssetType == (int)AssetType.Texture ? true : false)); + item.AssetID, (item.AssetType == (int) AssetType.Texture ? true : false)); if (asset != null) { @@ -447,7 +447,7 @@ namespace OpenSim.Region.Environment.Scenes { m_log.ErrorFormat( "[AGENT INVENTORY]: Could not copy item {0} since asset {1} could not be found", - item.Name, item.AssetID); + item.Name, item.AssetID); } } @@ -472,7 +472,7 @@ namespace OpenSim.Region.Environment.Scenes CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); 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; } @@ -493,13 +493,13 @@ namespace OpenSim.Region.Environment.Scenes } else { - m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString()); + m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID); return; } } 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; } } @@ -515,9 +515,9 @@ namespace OpenSim.Region.Environment.Scenes private void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID folderID, uint callbackID, AssetBase asset, uint nextOwnerMask) { - CachedUserInfo userInfo + CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - + if (userInfo != null) { InventoryItemBase item = new InventoryItemBase(); @@ -539,8 +539,8 @@ namespace OpenSim.Region.Environment.Scenes else { m_log.WarnFormat( - "No user details associated with client {0} uuid {1} in CreateNewInventoryItem!", - remoteClient.Name, remoteClient.AgentId); + "No user details associated with client {0} uuid {1} in CreateNewInventoryItem!", + remoteClient.Name, remoteClient.AgentId); } } @@ -564,25 +564,25 @@ namespace OpenSim.Region.Environment.Scenes byte wearableType, uint nextOwnerMask) { // m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item {0} in folder {1}", name, folderID); - + if (transactionID == LLUUID.Zero) { - CachedUserInfo userInfo + CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - + if (userInfo != null) { ScenePresence presence; TryGetAvatar(remoteClient.AgentId, out presence); 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; - string strdata=String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n", - presence.Scene.RegionInfo.RegionID, - pos.X, pos.Y, pos.Z, - presence.RegionHandle); - data=Encoding.ASCII.GetBytes(strdata); + LLVector3 pos = presence.AbsolutePosition; + string strdata = String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n", + presence.Scene.RegionInfo.RegionID, + pos.X, pos.Y, pos.Z, + presence.RegionHandle); + data = Encoding.ASCII.GetBytes(strdata); } AssetBase asset = CreateAsset(name, description, invType, assetType, data); @@ -593,21 +593,19 @@ namespace OpenSim.Region.Environment.Scenes else { m_log.ErrorFormat( - "userInfo for agent uuid {0} unexpectedly null in CreateNewInventoryItem", + "userInfo for agent uuid {0} unexpectedly null in CreateNewInventoryItem", remoteClient.AgentId); } } else { - IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); + IAgentAssetTransactions agentTransactions = RequestModuleInterface(); if (agentTransactions != null) { agentTransactions.HandleItemCreationFromTransaction( - remoteClient, transactionID, folderID, callbackID, description, - name, invType, assetType, wearableType, nextOwnerMask); + remoteClient, transactionID, folderID, callbackID, description, + name, invType, assetType, wearableType, nextOwnerMask); } - - } } @@ -617,7 +615,7 @@ namespace OpenSim.Region.Environment.Scenes = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); 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; } @@ -641,7 +639,7 @@ namespace OpenSim.Region.Environment.Scenes = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); 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; } @@ -677,7 +675,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// public void RequestTaskInventory(IClientAPI remoteClient, uint primLocalID) - { + { SceneObjectGroup group = GetGroupByPrim(primLocalID); if (group != null) { @@ -725,7 +723,7 @@ namespace OpenSim.Region.Environment.Scenes localID); } } - + /// /// Move the given item in the given prim to a folder in the client's inventory /// @@ -736,43 +734,43 @@ namespace OpenSim.Region.Environment.Scenes public void MoveTaskInventoryItem(IClientAPI remoteClient, LLUUID folderId, uint primLocalId, LLUUID itemId) { SceneObjectGroup group = GetGroupByPrim(primLocalId); - + if (null == group) { m_log.WarnFormat( "[PRIM INVENTORY]: " + "Move of inventory item {0} from prim with local id {1} failed because the prim could not be found", itemId, primLocalId); - + return; - } - + } + TaskInventoryItem taskItem = group.GetInventoryItem(primLocalId, itemId); - + if (null == taskItem) { // Console already notified of error in GetInventoryItem return; } - + // bool permission; // permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId, // ((SceneObjectGroup) selectedEnt).UUID); - + // Pending resolving upstream problems with permissions, we just won't allow anybody who is not the owner // to copy if (remoteClient.AgentId != taskItem.OwnerID) { m_log.InfoFormat( "[PRIM INVENTORY]: Attempt made by {0} {1} to copy inventory item {2} {3} in prim {4} {5}," - + " but temporarily not allowed pending upstream bugfixes/feature implementation", + + " but temporarily not allowed pending upstream bugfixes/feature implementation", remoteClient.Name, remoteClient.AgentId, taskItem.Name, taskItem.ItemID, group.Name, group.UUID); return; } - + InventoryItemBase agentItem = new InventoryItemBase(); - + agentItem.ID = LLUUID.Random(); agentItem.Creator = taskItem.CreatorID; agentItem.Owner = remoteClient.AgentId; @@ -783,8 +781,9 @@ namespace OpenSim.Region.Environment.Scenes agentItem.InvType = taskItem.InvType; agentItem.Folder = folderId; agentItem.EveryOnePermissions = taskItem.EveryoneMask; - - if (remoteClient.AgentId != taskItem.OwnerID) { + + if (remoteClient.AgentId != taskItem.OwnerID) + { agentItem.BasePermissions = taskItem.NextOwnerMask; agentItem.CurrentPermissions = taskItem.NextOwnerMask; agentItem.NextPermissions = taskItem.NextOwnerMask; @@ -793,9 +792,9 @@ namespace OpenSim.Region.Environment.Scenes { agentItem.BasePermissions = taskItem.BaseMask; agentItem.CurrentPermissions = taskItem.OwnerMask; - agentItem.NextPermissions = taskItem.NextOwnerMask; + agentItem.NextPermissions = taskItem.NextOwnerMask; } - + AddInventoryItem(remoteClient, agentItem); } @@ -834,7 +833,7 @@ namespace OpenSim.Region.Environment.Scenes { group.AddInventoryItem(remoteClient, primLocalID, item, copyID); m_log.InfoFormat( - "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}", + "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}", item.Name, primLocalID, remoteClient.Name); group.GetProperties(remoteClient); } @@ -865,22 +864,22 @@ namespace OpenSim.Region.Environment.Scenes public void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID) { LLUUID copyID = LLUUID.Random(); - + if (itemID != LLUUID.Zero) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - + if (userInfo != null && userInfo.RootFolder != null) { InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); - + // Try library // XXX clumsy, possibly should be one call if (null == item) { item = CommsManager.UserProfileCacheService.libraryRoot.HasItem(itemID); } - + if (item != null) { SceneObjectGroup group = GetGroupByPrim(localID); @@ -889,10 +888,10 @@ namespace OpenSim.Region.Environment.Scenes group.AddInventoryItem(remoteClient, localID, item, copyID); group.StartScript(localID, copyID); group.GetProperties(remoteClient); - - // m_log.InfoFormat("[PRIMINVENTORY]: " + - // "Rezzed script {0} into prim local ID {1} for user {2}", - // item.inventoryName, localID, remoteClient.Name); + + // m_log.InfoFormat("[PRIMINVENTORY]: " + + // "Rezzed script {0} into prim local ID {1} for user {2}", + // item.inventoryName, localID, remoteClient.Name); } else { @@ -911,7 +910,7 @@ namespace OpenSim.Region.Environment.Scenes } } } - else // If the itemID is zero then the script has been rezzed directly in an object's inventory + else // If the itemID is zero then the script has been rezzed directly in an object's inventory { // not yet implemented // TODO Need to get more details from original RezScript packet @@ -927,7 +926,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// public virtual void DeRezObject(Packet packet, IClientAPI remoteClient) - { + { DeRezObjectPacket DeRezPacket = (DeRezObjectPacket) packet; if (DeRezPacket.AgentBlock.DestinationID == LLUUID.Zero) @@ -937,11 +936,11 @@ namespace OpenSim.Region.Environment.Scenes else { foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData) - { + { // m_log.DebugFormat( // "[AGENT INVENTORY]: Received request to derez {0} into folder {1}", // Data.ObjectLocalID, DeRezPacket.AgentBlock.DestinationID); - + EntityBase selectedEnt = null; //m_log.Info("[CLIENT]: LocalID:" + Data.ObjectLocalID.ToString()); @@ -959,14 +958,16 @@ namespace OpenSim.Region.Environment.Scenes { bool permission; if (DeRezPacket.AgentBlock.Destination == 1) - { // Take Copy - permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId, - ((SceneObjectGroup) selectedEnt).UUID); + { + // Take Copy + permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId, + (selectedEnt).UUID); } else - { // Take - permission = PermissionsMngr.CanDeRezObject(remoteClient.AgentId, - ((SceneObjectGroup) selectedEnt).UUID); + { + // Take + permission = PermissionsMngr.CanDeRezObject(remoteClient.AgentId, + (selectedEnt).UUID); } if (permission) @@ -997,7 +998,8 @@ namespace OpenSim.Region.Environment.Scenes item.InvType = asset.InvType; item.Folder = DeRezPacket.AgentBlock.DestinationID; item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask; - if (remoteClient.AgentId != objectGroup.RootPart.OwnerID) { + if (remoteClient.AgentId != objectGroup.RootPart.OwnerID) + { item.BasePermissions = objectGroup.RootPart.NextOwnerMask; item.CurrentPermissions = 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) { SceneObjectGroup objectGroup = grp; @@ -1044,7 +1047,6 @@ namespace OpenSim.Region.Environment.Scenes // search through folders to find the asset. while (searchfolders.Count > 0) { - InventoryFolderImpl fld = searchfolders.Dequeue(); lock (fld) { @@ -1069,8 +1071,8 @@ namespace OpenSim.Region.Environment.Scenes AssetBase asset = CreateAsset( objectGroup.GetPartName(objectGroup.LocalId), objectGroup.GetPartDescription(objectGroup.LocalId), - (sbyte)InventoryType.Object, - (sbyte)AssetType.Object, + (sbyte) InventoryType.Object, + (sbyte) AssetType.Object, Helpers.StringToField(sceneObjectXml)); AssetCache.AddAsset(asset); @@ -1086,7 +1088,7 @@ namespace OpenSim.Region.Environment.Scenes // 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; if (agentID != objectGroup.RootPart.OwnerID) { @@ -1108,10 +1110,10 @@ namespace OpenSim.Region.Environment.Scenes { remoteClient.SendInventoryItemCreateUpdate(item); } - } } } + public LLUUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID AgentId) { SceneObjectGroup objectGroup = grp; @@ -1126,8 +1128,8 @@ namespace OpenSim.Region.Environment.Scenes AssetBase asset = CreateAsset( objectGroup.GetPartName(objectGroup.LocalId), objectGroup.GetPartDescription(objectGroup.LocalId), - (sbyte)InventoryType.Object, - (sbyte)AssetType.Object, + (sbyte) InventoryType.Object, + (sbyte) AssetType.Object, Helpers.StringToField(sceneObjectXml)); AssetCache.AddAsset(asset); @@ -1140,10 +1142,10 @@ namespace OpenSim.Region.Environment.Scenes item.Name = asset.Name; item.AssetType = asset.Type; item.InvType = asset.InvType; - + // 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; if (remoteClient.AgentId != objectGroup.RootPart.OwnerID) { @@ -1165,7 +1167,6 @@ namespace OpenSim.Region.Environment.Scenes return LLUUID.Zero; } return LLUUID.Zero; - } /// @@ -1187,64 +1188,63 @@ namespace OpenSim.Region.Environment.Scenes /// /// public virtual void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart, - LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, - uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, - bool RezSelected, bool RemoveItem, LLUUID fromTaskID) + LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, + uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, + bool RezSelected, bool RemoveItem, LLUUID fromTaskID) { SceneObjectGroup sog = RezObject(remoteClient, itemID, RayEnd, RayStart, - RayTargetID, BypassRayCast, RayEndIsIntersection, - EveryoneMask, GroupMask, NextOwnerMask, ItemFlags, - RezSelected, RemoveItem, fromTaskID, false); + RayTargetID, BypassRayCast, RayEndIsIntersection, + EveryoneMask, GroupMask, NextOwnerMask, ItemFlags, + RezSelected, RemoveItem, fromTaskID, false); } - - /// - /// Returns SceneObjectGroup or null from asset request. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// + /// + /// Returns SceneObjectGroup or null from asset request. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// public virtual SceneObjectGroup RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart, - LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, - uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, - bool RezSelected, bool RemoveItem, LLUUID fromTaskID, bool attachment) + LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, + uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, + bool RezSelected, bool RemoveItem, LLUUID fromTaskID, bool attachment) { // Work out position details - byte bRayEndIsIntersection = (byte)0; + byte bRayEndIsIntersection = 0; if (RayEndIsIntersection) { - bRayEndIsIntersection = (byte)1; + bRayEndIsIntersection = 1; } else { - bRayEndIsIntersection = (byte)0; + bRayEndIsIntersection = 0; } LLVector3 scale = new LLVector3(0.5f, 0.5f, 0.5f); - + LLVector3 pos = GetNewRezLocation( - RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), - BypassRayCast, bRayEndIsIntersection,true,scale, false); - + RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), + BypassRayCast, bRayEndIsIntersection, true, scale, false); + if (!PermissionsMngr.CanRezObject(remoteClient.AgentId, pos) && !attachment) { - return null; + return null; } // Rez object @@ -1260,7 +1260,7 @@ namespace OpenSim.Region.Environment.Scenes if (rezAsset != null) { - string xmlData = Helpers.FieldToUTF8String(rezAsset.Data); + string xmlData = Helpers.FieldToUTF8String(rezAsset.Data); SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData); group.ResetIDs(); AddEntity(group); @@ -1270,8 +1270,8 @@ namespace OpenSim.Region.Environment.Scenes if (!attachment) { pos = GetNewRezLocation( - RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), - BypassRayCast, bRayEndIsIntersection, true, group.GroupScale(), false); + RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), + BypassRayCast, bRayEndIsIntersection, true, group.GroupScale(), false); group.AbsolutePosition = pos; } else @@ -1280,7 +1280,7 @@ namespace OpenSim.Region.Environment.Scenes } SceneObjectPart rootPart = group.GetChildPart(group.UUID); - + // Since renaming the item in the inventory does not affect the name stored // in the serialization, transfer the correct name from the inventory to the // object itself before we rez. @@ -1301,22 +1301,22 @@ namespace OpenSim.Region.Environment.Scenes part.ChangeInventoryOwner(item.Owner); } } - + rootPart.TrimPermissions(); if (!attachment) { - if (group.RootPart.Shape.PCode == (byte)PCode.Prim) + if (group.RootPart.Shape.PCode == (byte) PCode.Prim) { group.ClearPartAttachmentData(); } group.ApplyPhysics(m_physicalPrim); } - + group.StartScripts(); - + if (!attachment) rootPart.ScheduleFullUpdate(); @@ -1327,7 +1327,5 @@ namespace OpenSim.Region.Environment.Scenes } return null; } - - } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index dccc09a79a..b052096aa3 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -78,11 +78,12 @@ namespace OpenSim.Region.Environment.Scenes foreach (EntityBase ent in EntitieList) { 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. - 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).IsSelected = true; @@ -107,9 +108,10 @@ namespace OpenSim.Region.Environment.Scenes { 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; LandChannel.setPrimsTainted(); @@ -129,21 +131,20 @@ namespace OpenSim.Region.Environment.Scenes } public virtual void ProcessParcelBuy(LLUUID agentId, LLUUID groupId, bool final, bool groupOwned, - bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated) + bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated) { EventManager.LandBuyArgs args = new EventManager.LandBuyArgs( - agentId, groupId, final, groupOwned, removeContribution, parcelLocalID, parcelArea, parcelPrice, authenticated); + agentId, groupId, final, groupOwned, removeContribution, parcelLocalID, parcelArea, parcelPrice, authenticated); // First, allow all validators a stab at it - m_eventManager.TriggerValidateLandBuy(this, args); + m_eventManager.TriggerValidateLandBuy(this, args); // Then, check validation and transfer - m_eventManager.TriggerLandBuy(this, args); + m_eventManager.TriggerLandBuy(this, args); } public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) { - List EntitieList = GetEntities(); foreach (EntityBase ent in EntitieList) @@ -178,7 +179,6 @@ namespace OpenSim.Region.Environment.Scenes public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient) { - List EntitieList = GetEntities(); foreach (EntityBase ent in EntitieList) @@ -190,7 +190,7 @@ namespace OpenSim.Region.Environment.Scenes // Is this prim part of the group if (obj.HasChildPrim(localID)) { - SceneObjectPart part=obj.GetChildPart(localID); + SceneObjectPart part = obj.GetChildPart(localID); if (part != null) { // If the touched prim handles touches, deliver it @@ -233,8 +233,8 @@ namespace OpenSim.Region.Environment.Scenes LLUUID translatedIDtem = item.AvatarID; searchData[i] = new AvatarPickerReplyPacket.DataBlock(); searchData[i].AvatarID = translatedIDtem; - searchData[i].FirstName = Helpers.StringToField((string) item.firstName); - searchData[i].LastName = Helpers.StringToField((string) item.lastName); + searchData[i].FirstName = Helpers.StringToField(item.firstName); + searchData[i].LastName = Helpers.StringToField(item.lastName); i++; } if (AvatarResponses.Count == 0) @@ -245,4 +245,4 @@ namespace OpenSim.Region.Environment.Scenes client.SendAvatarPickerReply(replyPacket); } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 311383177c..6617995e34 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -53,107 +53,99 @@ namespace OpenSim.Region.Environment.Scenes public partial class Scene : SceneBase { + #region Delegates + public delegate void SynchronizeSceneHandler(Scene scene); - public SynchronizeSceneHandler SynchronizeScene = null; - public int splitID = 0; + + #endregion + + public int splitID; + public SynchronizeSceneHandler SynchronizeScene; #region Fields - protected Timer m_heartbeatTimer = new Timer(); - protected Timer m_restartWaitTimer = new Timer(); - - protected SimStatsReporter m_statsReporter; - - protected List m_regionRestartNotifyList = new List(); - protected List m_neighbours = new List(); - - public InnerScene m_innerScene; - - private Random Rand = new Random(); - private uint _primCount = 720000; 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 int m_incrementsof15seconds = 0; - - public string m_simulatorVersion = "OpenSimulator 0.5"; - - protected ModuleLoader m_moduleLoader; - protected StorageManager m_storageManager; - protected AgentCircuitManager m_authenticateHandler; + private readonly Mutex updateLock; + private uint _primCount = 720000; public CommunicationsManager CommsManager; + private int frameMS; + protected AgentCircuitManager m_authenticateHandler; // protected XferManager xferManager; - protected SceneCommunicationService m_sceneGridService; - protected SceneXmlLoader m_sceneXmlLoader; + protected IAvatarFactory m_AvatarFactory; /// /// Each agent has its own capabilities handler. /// protected Dictionary m_capsHandlers = new Dictionary(); - - protected BaseHttpServer m_httpListener; - - protected Dictionary Modules = new Dictionary(); - public Dictionary ModuleInterfaces = new Dictionary(); - protected Dictionary ModuleAPIMethods = new Dictionary(); - public Dictionary m_moduleCommanders = new Dictionary(); - - //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 protected int m_fps = 10; - protected int m_frame = 0; - protected float m_timespan = 0.089f; + protected int m_frame; + 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; + public Dictionary m_moduleCommanders = new Dictionary(); + protected ModuleLoader m_moduleLoader; + protected List m_neighbours = new List(); + public bool m_physicalPrim; + private bool m_physics_enabled = true; + protected List m_regionRestartNotifyList = new List(); + 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; + 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_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_backup = 200; - private int m_update_terrain = 50; 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 ModuleAPIMethods = new Dictionary(); + public Dictionary ModuleInterfaces = new Dictionary(); + protected Dictionary Modules = new Dictionary(); - private int frameMS = 0; - private int physicsMS2 = 0; - private int physicsMS = 0; - private int otherMS = 0; - - private bool m_physics_enabled = true; - private bool m_scripts_enabled = true; - - + private int otherMS; + private int physicsMS; + private int physicsMS2; + private Random Rand = new Random(); + public IXfer XferManager; #endregion #region Properties + protected readonly EstateManager m_estateManager; + protected readonly PermissionManager m_permissionManager; + public int objectCapacity = 45000; + public AgentCircuitManager AuthenticateHandler { get { return m_authenticateHandler; } } - protected readonly EstateManager m_estateManager; // an instance to the physics plugin's Scene object. public PhysicsScene PhysicsScene { @@ -177,7 +169,6 @@ namespace OpenSim.Region.Environment.Scenes get { return m_timedilation; } } - protected readonly PermissionManager m_permissionManager; // This is the instance to the permissions manager. // This manages permissions to clients on in world objects @@ -215,14 +206,13 @@ namespace OpenSim.Region.Environment.Scenes get { return m_innerScene.Entities; } set { m_innerScene.Entities = value; } } + public Dictionary m_restorePresences { get { return m_innerScene.RestorePresences; } set { m_innerScene.RestorePresences = value; } } - public int objectCapacity = 45000; - #endregion #region Constructors @@ -252,9 +242,9 @@ namespace OpenSim.Region.Environment.Scenes //Bind Storage Manager functions to some land manager functions for this scene EventManager.OnLandObjectAdded += - new EventManager.LandObjectAdded(m_storageManager.DataStore.StoreLandObject); + m_storageManager.DataStore.StoreLandObject; EventManager.OnLandObjectRemoved += - new EventManager.LandObjectRemoved(m_storageManager.DataStore.RemoveLandObject); + m_storageManager.DataStore.RemoveLandObject; m_estateManager = new EstateManager(this, m_regInfo); @@ -321,7 +311,7 @@ namespace OpenSim.Region.Environment.Scenes 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 @@ -382,23 +372,23 @@ namespace OpenSim.Region.Environment.Scenes } // 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 resultY = Math.Abs((int)otherRegion.RegionLocY - (int)RegionInfo.RegionLocY); + int resultX = Math.Abs((int) otherRegion.RegionLocX - (int) RegionInfo.RegionLocX); + int resultY = Math.Abs((int) otherRegion.RegionLocY - (int) RegionInfo.RegionLocY); if ((resultX <= 1) && (resultY <= 1)) { try { ForEachScenePresence(delegate(ScenePresence agent) - { - // If agent is a root agent. - if (!agent.IsChildAgent) { - //agent.ControllingClient.new - //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); - InformClientOfNeighbor(agent, otherRegion); + // If agent is a root agent. + if (!agent.IsChildAgent) + { + //agent.ControllingClient.new + //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); + InformClientOfNeighbor(agent, otherRegion); + } } - } ); } catch (NullReferenceException) @@ -410,9 +400,9 @@ namespace OpenSim.Region.Environment.Scenes } else { - m_log.Info("[INTERGRID]: Got notice about far away Region: " + otherRegion.RegionName.ToString() + - " at (" + otherRegion.RegionLocX.ToString() + ", " + - otherRegion.RegionLocY.ToString() + ")"); + m_log.Info("[INTERGRID]: Got notice about far away Region: " + otherRegion.RegionName + + " at (" + otherRegion.RegionLocX + ", " + + otherRegion.RegionLocY + ")"); } } 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() m_restartTimer.Interval = 15000; - m_incrementsof15seconds = (int)seconds / 15; + m_incrementsof15seconds = (int) seconds / 15; m_RestartTimerCounter = 0; 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_restartTimer.Start(); SendRegionMessageFromEstateTools(LLUUID.Random(), LLUUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in 2 Minutes"); @@ -458,7 +448,7 @@ namespace OpenSim.Region.Environment.Scenes { if (m_RestartTimerCounter == 4 || m_RestartTimerCounter == 6 || m_RestartTimerCounter == 7) SendRegionMessageFromEstateTools(LLUUID.Random(), LLUUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in " + - ((8 - m_RestartTimerCounter) * 15) + " seconds"); + ((8 - m_RestartTimerCounter) * 15) + " seconds"); // SendGeneralAlert(RegionInfo.RegionName + ": Restarting in " + ((8 - m_RestartTimerCounter)*15) + //" seconds"); @@ -500,15 +490,15 @@ namespace OpenSim.Region.Environment.Scenes try { ForEachScenePresence(delegate(ScenePresence agent) - { - // If agent is a root agent. - if (!agent.IsChildAgent) { - //agent.ControllingClient.new - //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); - InformClientOfNeighbor(agent, region); + // If agent is a root agent. + if (!agent.IsChildAgent) + { + //agent.ControllingClient.new + //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); + InformClientOfNeighbor(agent, region); + } } - } ); } catch (NullReferenceException) @@ -537,7 +527,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - ((SceneObjectGroup)ent).StopScripts(); + ((SceneObjectGroup) ent).StopScripts(); } } } @@ -551,12 +541,10 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - ((SceneObjectGroup)ent).StartScripts(); + ((SceneObjectGroup) ent).StartScripts(); } } } - - } m_scripts_enabled = !ScriptEngine; 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) { m_physics_enabled = !PhysicsEngine; - } - } // This is the method that shuts down the scene. @@ -575,16 +561,16 @@ namespace OpenSim.Region.Environment.Scenes m_log.Warn("[SCENE]: Closing down the single simulator: " + RegionInfo.RegionName); // Kick all ROOT agents with the message, 'The simulator is going down' ForEachScenePresence(delegate(ScenePresence avatar) - { - if (avatar.KnownChildRegions.Contains(RegionInfo.RegionHandle)) - avatar.KnownChildRegions.Remove(RegionInfo.RegionHandle); + { + if (avatar.KnownChildRegions.Contains(RegionInfo.RegionHandle)) + avatar.KnownChildRegions.Remove(RegionInfo.RegionHandle); - if (!avatar.IsChildAgent) - avatar.ControllingClient.Kick("The simulator is going down."); + if (!avatar.IsChildAgent) + avatar.ControllingClient.Kick("The simulator is going down."); - avatar.ControllingClient.OutPacket(PacketPool.Instance.GetPacket(PacketType.DisableSimulator), - ThrottleOutPacketType.Task); - }); + avatar.ControllingClient.OutPacket(PacketPool.Instance.GetPacket(PacketType.DisableSimulator), + ThrottleOutPacketType.Task); + }); // Wait here, or the kick messages won't actually get to the agents before the scene terminates. Thread.Sleep(500); @@ -619,8 +605,8 @@ namespace OpenSim.Region.Environment.Scenes { m_log.Debug("[SCENE]: Starting timer"); m_heartbeatTimer.Enabled = true; - m_heartbeatTimer.Interval = (int)(m_timespan * 1000); - m_heartbeatTimer.Elapsed += new ElapsedEventHandler(Heartbeat); + m_heartbeatTimer.Interval = (int) (m_timespan * 1000); + m_heartbeatTimer.Elapsed += Heartbeat; } public void SetModuleInterfaces() @@ -722,13 +708,13 @@ namespace OpenSim.Region.Environment.Scenes { if (m_frame % m_update_events == 0) UpdateEvents(); - + if (m_frame % m_update_backup == 0) UpdateStorageBackup(); - + if (m_frame % m_update_terrain == 0) UpdateTerrain(); - + if (m_frame % m_update_land == 0) UpdateLand(); otherMS = System.Environment.TickCount - otherMS; @@ -756,28 +742,25 @@ namespace OpenSim.Region.Environment.Scenes } 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) { - 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) { - 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) { - 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 { updateLock.ReleaseMutex(); // 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 // the amount that's greater then 1 from the time dilation @@ -786,7 +769,7 @@ namespace OpenSim.Region.Environment.Scenes tmpval = tmpval - (tmpval - 1.0f); } m_timedilation = tmpval; - + m_lastupdate = DateTime.Now; } } @@ -856,10 +839,10 @@ namespace OpenSim.Region.Environment.Scenes public void ExportWorldMap(string fileName) { List mapBlocks = - m_sceneGridService.RequestNeighbourMapBlocks((int)(RegionInfo.RegionLocX - 9), - (int)(RegionInfo.RegionLocY - 9), - (int)(RegionInfo.RegionLocX + 9), - (int)(RegionInfo.RegionLocY + 9)); + m_sceneGridService.RequestNeighbourMapBlocks((int) (RegionInfo.RegionLocX - 9), + (int) (RegionInfo.RegionLocY - 9), + (int) (RegionInfo.RegionLocX + 9), + (int) (RegionInfo.RegionLocY + 9)); List textures = new List(); List bitImages = new List(); @@ -894,8 +877,8 @@ namespace OpenSim.Region.Environment.Scenes for (int i = 0; i < mapBlocks.Count; i++) { - ushort x = (ushort)((mapBlocks[i].X - RegionInfo.RegionLocX) + 10); - ushort y = (ushort)((mapBlocks[i].Y - RegionInfo.RegionLocY) + 10); + ushort x = (ushort) ((mapBlocks[i].X - RegionInfo.RegionLocX) + 10); + ushort y = (ushort) ((mapBlocks[i].Y - RegionInfo.RegionLocY) + 10); g.DrawImage(bitImages[i], (x * 128), (y * 128), 128, 128); } mapTexture.Save(fileName, ImageFormat.Jpeg); @@ -926,11 +909,10 @@ namespace OpenSim.Region.Environment.Scenes { Heightmap = new TerrainChannel(map); } - } 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++) { - float hmval = (float)hm[x, y]; + float hmval = (float) hm[x, y]; if (hmval < low) low = hmval; if (hmval > high) @@ -1021,10 +1003,10 @@ namespace OpenSim.Region.Environment.Scenes //} //else //{ - float tmpval = (float)hm[x, y]; - heightvalue = (float)hm[x, y]; + float tmpval = (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 heightvalue = low + mid * (heightvalue - low) / mid; @@ -1036,7 +1018,7 @@ namespace OpenSim.Region.Environment.Scenes heightvalue = 0; - Color green = Color.FromArgb((int)heightvalue, 100, (int)heightvalue); + Color green = Color.FromArgb((int) heightvalue, 100, (int) heightvalue); // Y flip the cordinates mapbmp.SetPixel(x, (256 - y) - 1, green); @@ -1058,12 +1040,10 @@ namespace OpenSim.Region.Environment.Scenes if (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); } //} - - } //tc = System.Environment.TickCount - tc; //m_log.Info("[MAPTILE]: Completed One row in " + tc + " ms"); @@ -1087,7 +1067,6 @@ namespace OpenSim.Region.Environment.Scenes asset.Type = 0; asset.Temporary = temporary; AssetCache.AddAsset(asset); - } else { @@ -1105,7 +1084,6 @@ namespace OpenSim.Region.Environment.Scenes AssetCache.AddAsset(asset); } } - } #endregion @@ -1143,14 +1121,14 @@ namespace OpenSim.Region.Environment.Scenes { AddEntityFromStorage(group); SceneObjectPart rootPart = group.GetChildPart(group.UUID); - rootPart.ObjectFlags &= ~(uint)LLObject.ObjectFlags.Scripted; + rootPart.ObjectFlags &= ~(uint) LLObject.ObjectFlags.Scripted; rootPart.TrimPermissions(); group.ApplyPhysics(m_physicalPrim); //rootPart.DoPhysicsPropertyUpdate(UsePhysics, true); } - m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)"); + m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count + " SceneObject(s)"); } /// @@ -1169,10 +1147,11 @@ namespace OpenSim.Region.Environment.Scenes 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; - if (RayEndIsIntersection == (byte)1) + if (RayEndIsIntersection == 1) { pos = RayEnd; return pos; @@ -1180,7 +1159,7 @@ namespace OpenSim.Region.Environment.Scenes if (RayTargetID != LLUUID.Zero) { SceneObjectPart target = GetSceneObjectPart(RayTargetID); - + LLVector3 direction = LLVector3.Norm(RayEnd - RayStart); Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z); Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z); @@ -1189,17 +1168,17 @@ namespace OpenSim.Region.Environment.Scenes { pos = target.AbsolutePosition; //m_log.Info("[OBJECT_REZ]: TargetPos: " + pos.ToString() + ", RayStart: " + RayStart.ToString() + ", RayEnd: " + RayEnd.ToString() + ", Volume: " + Util.GetDistanceTo(RayStart,RayEnd).ToString() + ", mag1: " + Util.GetMagnitude(RayStart).ToString() + ", mag2: " + Util.GetMagnitude(RayEnd).ToString()); - + // TODO: Raytrace better here - + //EntityIntersection ei = m_innerScene.GetClosestIntersectingPrim(new Ray(AXOrigin, AXdirection)); Ray NewRay = new Ray(AXOrigin, AXdirection); // 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. - // 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()); float ScaleOffset = 0.5f; // If we hit something @@ -1215,13 +1194,12 @@ namespace OpenSim.Region.Environment.Scenes // Set the position to the intersection point LLVector3 offset = (normal * (ScaleOffset / 2f)); pos = (intersectionpoint + offset); - + // Un-offset the prim (it gets offset later by the consumer method) pos.Z -= 0.25F; - - } - - + } + + return pos; } else @@ -1236,8 +1214,8 @@ namespace OpenSim.Region.Environment.Scenes if (ei.HitTF) { pos = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z); - } - + } + return pos; } } @@ -1253,8 +1231,8 @@ namespace OpenSim.Region.Environment.Scenes byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID, byte RayEndIsIntersection) { - - LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f,0.5f,0.5f), false); + LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f, 0.5f, 0.5f), + false); if (PermissionsMngr.CanRezObject(ownerID, pos)) { @@ -1274,7 +1252,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID); // if grass or tree, make phantom //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.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom; @@ -1289,13 +1267,13 @@ namespace OpenSim.Region.Environment.Scenes public SceneObjectGroup AddTree(LLVector3 scale, LLQuaternion rotation, LLVector3 position, Tree treeType, bool newTree) { - LLUUID uuid = this.RegionInfo.MasterAvatarAssignedUUID; + LLUUID uuid = RegionInfo.MasterAvatarAssignedUUID; PrimitiveBaseShape treeShape = new PrimitiveBaseShape(); treeShape.PathCurve = 16; 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.State = (byte)treeType; + treeShape.State = (byte) treeType; return AddNewPrim(uuid, position, rotation, treeShape); } @@ -1360,12 +1338,11 @@ namespace OpenSim.Region.Environment.Scenes /// /// current position of Group /// Scene Object Group that we're crossing - public void CrossPrimGroupIntoNewRegion(LLVector3 position, SceneObjectGroup grp) { - m_log.Warn("Prim crossing: " + grp.UUID.ToString()); - int thisx = (int)RegionInfo.RegionLocX; - int thisy = (int)RegionInfo.RegionLocY; + m_log.Warn("Prim crossing: " + grp.UUID); + int thisx = (int) RegionInfo.RegionLocX; + int thisy = (int) RegionInfo.RegionLocY; ulong newRegionHandle = 0; LLVector3 pos = position; @@ -1374,43 +1351,44 @@ namespace OpenSim.Region.Environment.Scenes { 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 } else if (position.X < -0.1f) { 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 } if (position.Y > Constants.RegionSize + 0.1f) { 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 } else if (position.Y < -1f) { 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 } // Offset the positions for the new region across the border grp.OffsetForNewRegion(pos); - - CrossPrimGroupIntoNewRegion(newRegionHandle, grp); + CrossPrimGroupIntoNewRegion(newRegionHandle, grp); } + public void CrossPrimGroupIntoNewRegion(ulong newRegionHandle, SceneObjectGroup grp) { int primcrossingXMLmethod = 0; if (newRegionHandle != 0) { 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) { // We remove the object here @@ -1446,7 +1424,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart RootPrim = GetSceneObjectPart(primID); if (RootPrim != null) { - if (RootPrim.Shape.PCode == (byte)PCode.Prim) + if (RootPrim.Shape.PCode == (byte) PCode.Prim) { SceneObjectGroup grp = RootPrim.ParentGroup; if (grp != null) @@ -1462,12 +1440,10 @@ namespace OpenSim.Region.Environment.Scenes // with the deeded object, it goes back to them 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; @@ -1476,7 +1452,6 @@ namespace OpenSim.Region.Environment.Scenes { return false; } - } #endregion @@ -1491,9 +1466,9 @@ namespace OpenSim.Region.Environment.Scenes public override void AddNewClient(IClientAPI client, bool child) { m_log.DebugFormat( - "[CONNECTION DEBUGGING]: Creating new client for {0} at {1}", + "[CONNECTION DEBUGGING]: Creating new client for {0} at {1}", client.AgentId, RegionInfo.RegionName); - + SubscribeToClientEvents(client); ScenePresence presence = null; @@ -1563,19 +1538,19 @@ namespace OpenSim.Region.Environment.Scenes client.OnObjectDuplicateOnRay += doObjectDuplicateOnRay; client.OnUpdatePrimFlags += m_innerScene.UpdatePrimFlags; client.OnRequestObjectPropertiesFamily += m_innerScene.RequestObjectPropertiesFamily; - client.OnParcelPropertiesRequest += new ParcelPropertiesRequest(LandChannel.handleParcelPropertiesRequest); - client.OnParcelDivideRequest += new ParcelDivideRequest(LandChannel.handleParcelDivideRequest); - client.OnParcelJoinRequest += new ParcelJoinRequest(LandChannel.handleParcelJoinRequest); + client.OnParcelPropertiesRequest += LandChannel.handleParcelPropertiesRequest; + client.OnParcelDivideRequest += LandChannel.handleParcelDivideRequest; + client.OnParcelJoinRequest += LandChannel.handleParcelJoinRequest; client.OnParcelPropertiesUpdateRequest += - new ParcelPropertiesUpdateRequest(LandChannel.handleParcelPropertiesUpdateRequest); - client.OnParcelSelectObjects += new ParcelSelectObjects(LandChannel.handleParcelSelectObjectsRequest); + LandChannel.handleParcelPropertiesUpdateRequest; + client.OnParcelSelectObjects += LandChannel.handleParcelSelectObjectsRequest; client.OnParcelObjectOwnerRequest += - new ParcelObjectOwnerRequest(LandChannel.handleParcelObjectOwnersRequest); - client.OnParcelAccessListRequest += new ParcelAccessListRequest(LandChannel.handleParcelAccessRequest); + LandChannel.handleParcelObjectOwnersRequest; + client.OnParcelAccessListRequest += LandChannel.handleParcelAccessRequest; 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.OnEstateCovenantRequest += m_estateManager.HandleEstateCovenantRequest; client.OnRequestGodlikePowers += handleRequestGodlikePowers; @@ -1616,41 +1591,38 @@ namespace OpenSim.Region.Environment.Scenes client.OnSetStartLocationRequest += SetHomeRezPoint; client.OnUndo += m_innerScene.HandleUndo; - + EventManager.TriggerOnNewClient(client); } + public virtual void TeleportClientHome(LLUUID AgentId, IClientAPI client) { UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(AgentId); if (UserProfile != null) { 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); - RequestTeleportLocation(client, homeRegion, homePostion,homeLookat,(uint)0); - + RequestTeleportLocation(client, homeRegion, homePostion, homeLookat, 0); } - - } + public void doObjectDuplicateOnRay(uint localID, uint dupeFlags, LLUUID AgentID, LLUUID GroupID, - LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart, - bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates) + LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart, + bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates) { - LLVector3 pos = LLVector3.Zero; bool frontFacesOnly = true; - + SceneObjectPart target = GetSceneObjectPart(localID); if (target != null) { - LLVector3 direction = LLVector3.Norm(RayEnd - RayStart); Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z); Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z); - + if (target != null) { if (target.ParentGroup != null) @@ -1680,9 +1652,8 @@ namespace OpenSim.Region.Environment.Scenes if (scaleComponent.Z != 0) ScaleOffset = scale.Z; ScaleOffset = Math.Abs(ScaleOffset); LLVector3 intersectionpoint = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z); - - - + + if (CopyCenters) { // 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) { //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); @@ -1707,18 +1678,14 @@ namespace OpenSim.Region.Environment.Scenes m_innerScene.DuplicateObject(target.ParentGroup.LocalId, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID); } - + return; } return; } - } - - - - } + public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags) { 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 // 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) - UserProfile.HomeLocationX = (int)position.X; - UserProfile.HomeLocationY = (int)position.Y; - UserProfile.HomeLocationZ = (int)position.Z; - UserProfile.HomeLookAtX = (int)lookAt.X; - UserProfile.HomeLookAtY = (int)lookAt.Y; - UserProfile.HomeLookAtZ = (int)lookAt.Z; + UserProfile.HomeLocationX = (int) position.X; + UserProfile.HomeLocationY = (int) position.Y; + UserProfile.HomeLocationZ = (int) position.Z; + UserProfile.HomeLookAtX = (int) lookAt.X; + UserProfile.HomeLookAtY = (int) lookAt.Y; + UserProfile.HomeLookAtZ = (int) lookAt.Z; 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 { - remoteClient.SendAgentAlertMessage("Set Home request Failed",false); + remoteClient.SendAgentAlertMessage("Set Home request Failed", false); } - } + protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client, bool child) { ScenePresence avatar = null; @@ -1812,7 +1779,7 @@ namespace OpenSim.Region.Environment.Scenes m_sceneGridService.SendCloseChildAgentConnections(agentID, childknownRegions); RemoveCapsHandler(agentID); - + CommsManager.UserProfileCacheService.RemoveUser(agentID); } @@ -1825,21 +1792,21 @@ namespace OpenSim.Region.Environment.Scenes } m_eventManager.TriggerOnRemovePresence(agentID); Broadcast(delegate(IClientAPI client) - { - try { - client.SendKillObject(avatar.RegionHandle, avatar.LocalId); - } - catch (NullReferenceException) - { - //We can safely ignore null reference exceptions. It means the avatar are dead and cleaned up anyway. - } - }); + try + { + client.SendKillObject(avatar.RegionHandle, avatar.LocalId); + } + catch (NullReferenceException) + { + //We can safely ignore null reference exceptions. It means the avatar are dead and cleaned up anyway. + } + }); ForEachScenePresence( delegate(ScenePresence presence) { presence.CoarseLocationChange(); }); - - IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); + + IAgentAssetTransactions agentTransactions = RequestModuleInterface(); if (agentTransactions != null) { agentTransactions.RemoveAgentAssetTransactions(agentID); @@ -1879,7 +1846,7 @@ namespace OpenSim.Region.Environment.Scenes } 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 @@ -1899,14 +1866,12 @@ namespace OpenSim.Region.Environment.Scenes { lock (av) { - for (int i = 0; i < regionslst.Count; i++) { av.KnownChildRegions.Remove(regionslst[i]); } } } - } public override void CloseAllAgents(uint circuitcode) @@ -1994,7 +1959,7 @@ namespace OpenSim.Region.Environment.Scenes if (regionHandle == m_regInfo.RegionHandle) { capsPaths[agent.AgentID] = agent.CapsPath; - + if (!agent.child) { AddCapsHandler(agent.AgentID); @@ -2003,26 +1968,26 @@ namespace OpenSim.Region.Environment.Scenes ILandObject land = LandChannel.getLandObject(agent.startpos.X, agent.startpos.Y); 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; } } } - + m_log.DebugFormat( "[CONNECTION DEBUGGING]: Creating new circuit code ({0}) for avatar {1} at {2}", agent.circuitcode, agent.AgentID, RegionInfo.RegionName); - + m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent); } else { m_log.WarnFormat( - "[CONNECTION DEBUGGING]: Skipping this region for welcoming avatar {0} [{1}] at {2}", + "[CONNECTION DEBUGGING]: Skipping this region for welcoming avatar {0} [{1}] at {2}", agent.AgentID, regionHandle, RegionInfo.RegionName); } - } + } /// /// Add a caps handler for the given agent. If the CAPS handler already exists for this agent, @@ -2035,18 +2000,18 @@ namespace OpenSim.Region.Environment.Scenes /// /// public void AddCapsHandler(LLUUID agentId) - { - String capsObjectPath = GetCapsPath(agentId); + { + String capsObjectPath = GetCapsPath(agentId); m_log.DebugFormat( "[CAPS]: Setting up CAPS handler for root agent {0} in {1}", agentId, RegionInfo.RegionName); - + Caps cap = new Caps(AssetCache, m_httpListener, m_regInfo.ExternalHostName, m_httpListener.Port, capsObjectPath, agentId, m_dumpAssetsToFile, RegionInfo.RegionName); cap.RegisterHandlers(); - + EventManager.TriggerOnRegisterCaps(agentId, cap); cap.AddNewInventoryItem = AddInventoryItem; @@ -2055,7 +2020,7 @@ namespace OpenSim.Region.Environment.Scenes cap.CAPSFetchInventoryDescendents = CommsManager.UserProfileCacheService.HandleFetchInventoryDescendentsCAPS; cap.GetClient = m_innerScene.GetControllingClient; m_capsHandlers[agentId] = cap; - } + } /// /// Remove the caps handler for a given agent. @@ -2068,9 +2033,9 @@ namespace OpenSim.Region.Environment.Scenes if (m_capsHandlers.ContainsKey(agentId)) { m_log.DebugFormat( - "[CAPS]: Removing CAPS handler for root agent {0} in {1}", + "[CAPS]: Removing CAPS handler for root agent {0} in {1}", agentId, RegionInfo.RegionName); - + m_capsHandlers[agentId].DeregisterHandlers(); EventManager.TriggerOnDeregisterCaps(agentId, m_capsHandlers[agentId]); @@ -2105,7 +2070,7 @@ namespace OpenSim.Region.Environment.Scenes catch (Exception e) { m_log.Info("[SCENE]: Unable to do Agent Crossing."); - m_log.Debug("[SCENE]: " + e.ToString()); + m_log.Debug("[SCENE]: " + e); } //m_innerScene.SwapRootChildAgent(false); } @@ -2121,15 +2086,14 @@ namespace OpenSim.Region.Environment.Scenes // however to avoid a race condition crossing borders.. if (childAgentUpdate.IsChildAgent) { - uint rRegionX = (uint)(cAgentData.regionHandle >> 40); - uint rRegionY = (((uint)(cAgentData.regionHandle)) >> 8); + uint rRegionX = (uint) (cAgentData.regionHandle >> 40); + uint rRegionY = (((uint) (cAgentData.regionHandle)) >> 8); uint tRegionX = RegionInfo.RegionLocX; uint tRegionY = RegionInfo.RegionLocY; //Send Data to ScenePresence childAgentUpdate.ChildAgentDataUpdate(cAgentData, tRegionX, tRegionY, rRegionX, rRegionY); // Not Implemented: //TODO: Do we need to pass the message on to one of our neighbors? - } return true; } @@ -2157,7 +2121,7 @@ namespace OpenSim.Region.Environment.Scenes m_innerScene.removeUserCount(true); } // 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.Close(true); } @@ -2307,9 +2271,9 @@ namespace OpenSim.Region.Environment.Scenes /// public void RegisterModuleInterface(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 /// public T RequestModuleInterface() { - if (ModuleInterfaces.ContainsKey(typeof(T))) + if (ModuleInterfaces.ContainsKey(typeof (T))) { - return (T)ModuleInterfaces[typeof(T)]; + return (T) ModuleInterfaces[typeof (T)]; } else { @@ -2336,14 +2300,12 @@ namespace OpenSim.Region.Environment.Scenes m_statsReporter.SetObjectCapacity(objects); } objectCapacity = objects; - } public List GetFriendList(LLUUID avatarID) { return CommsManager.GetUserFriendList(avatarID); } - #endregion @@ -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)) { @@ -2401,7 +2364,7 @@ namespace OpenSim.Region.Environment.Scenes } return LLUUID.Zero; } - + /// /// This method is a way for the Friends Module to create an instant @@ -2436,6 +2399,7 @@ namespace OpenSim.Region.Environment.Scenes // TODO: m_sceneGridService.DoStuff; m_sceneGridService.RemoveUserFriend(ownerID, ExfriendID); } + public virtual List StoreGetFriendsForUser(LLUUID ownerID) { // TODO: m_sceneGridService.DoStuff; @@ -2448,11 +2412,13 @@ namespace OpenSim.Region.Environment.Scenes m_statsReporter.AddOutPackets(outPackets); m_statsReporter.AddunAckedBytes(unAckedBytes); } + public void AddAgentTime(int ms) { m_statsReporter.addFrameMS(ms); m_statsReporter.addAgentMS(ms); } + public void AddAgentUpdates(int count) { m_statsReporter.AddAgentUpdates(count); @@ -2546,7 +2512,6 @@ namespace OpenSim.Region.Environment.Scenes /// The Message being sent to the user public void SendRegionMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message) { - List presenceList = GetScenePresences(); foreach (ScenePresence presence in presenceList) @@ -2566,11 +2531,7 @@ namespace OpenSim.Region.Environment.Scenes /// The Message being sent to the user 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); } ); } @@ -2596,27 +2557,24 @@ namespace OpenSim.Region.Environment.Scenes if (agentID == kickUserID) { ClientManager.ForEachClient(delegate(IClientAPI controller) - { - if (controller.AgentId != godID) - controller.Kick(Helpers.FieldToUTF8String(reason)); - - - - } + { + if (controller.AgentId != godID) + controller.Kick(Helpers.FieldToUTF8String(reason)); + } ); // This is a bit crude. It seems the client will be null before it actually stops the thread // The thread will kill itself eventually :/ // Is there another way to make sure *all* clients get this 'inter region' message? ClientManager.ForEachClient(delegate(IClientAPI controller) - { - ScenePresence p = GetScenePresence(controller.AgentId); - bool childagent = !p.Equals(null) && p.IsChildAgent; - if (controller.AgentId != godID && !childagent) - // Do we really want to kick the initiator of this madness? { - controller.Close(true); + ScenePresence p = GetScenePresence(controller.AgentId); + bool childagent = !p.Equals(null) && p.IsChildAgent; + if (controller.AgentId != godID && !childagent) + // Do we really want to kick the initiator of this madness? + { + controller.Close(true); + } } - } ); } else @@ -2647,7 +2605,6 @@ namespace OpenSim.Region.Environment.Scenes // Check for spoofing.. since this is permissions we're talking about here! if ((controller.SessionId == sessionID) && (controller.AgentId == agentID)) { - // Tell the object to do permission update if (localId != 0) { @@ -2657,7 +2614,6 @@ namespace OpenSim.Region.Environment.Scenes chObjectGroup.UpdatePermissions(agentID, field, localId, mask, set); } } - } } @@ -2723,7 +2679,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - ((SceneObjectGroup)ent).ScheduleGroupForFullUpdate(); + ((SceneObjectGroup) ent).ScheduleGroupForFullUpdate(); } } } @@ -2743,7 +2699,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - SceneObjectPart part = ((SceneObjectGroup)ent).GetChildPart(((SceneObjectGroup)ent).UUID); + SceneObjectPart part = ((SceneObjectGroup) ent).GetChildPart((ent).UUID); if (part != null) { if (part.Name == cmdparams[0]) @@ -2867,8 +2823,8 @@ namespace OpenSim.Region.Environment.Scenes #region Script Engine - private List ScriptEngines = new List(); - private bool m_dumpAssetsToFile; + private readonly bool m_dumpAssetsToFile; + private readonly List ScriptEngines = new List(); /// /// @@ -2882,13 +2838,11 @@ namespace OpenSim.Region.Environment.Scenes public void TriggerObjectChanged(uint localID, uint change) { - m_eventManager.TriggerOnScriptChangedEvent(localID, change); } public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos) { - m_eventManager.TriggerAtTargetEvent(localID, handle, targetpos, currentpos); } @@ -2897,20 +2851,21 @@ namespace OpenSim.Region.Environment.Scenes 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); if (part != null) { if (parcel != null) { - if ((parcel.landData.landFlags & (uint)Parcel.ParcelFlags.AllowOtherScripts) != 0) + if ((parcel.landData.landFlags & (uint) Parcel.ParcelFlags.AllowOtherScripts) != 0) { 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; } @@ -2918,7 +2873,7 @@ namespace OpenSim.Region.Environment.Scenes { return false; } - } + } else { if (part.OwnerID == parcel.landData.ownerID) @@ -2933,7 +2888,6 @@ namespace OpenSim.Region.Environment.Scenes } else { - 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 @@ -2952,6 +2906,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } } + public bool scriptDanger(uint localID, LLVector3 pos) { SceneObjectPart part = GetSceneObjectPart(localID); @@ -2967,13 +2922,11 @@ namespace OpenSim.Region.Environment.Scenes public bool pipeEventsForScript(uint localID) { - SceneObjectPart part = GetSceneObjectPart(localID); if (part != null) { LLVector3 pos = part.GetWorldPosition(); return scriptDanger(part, pos); - } else { @@ -3090,17 +3043,17 @@ namespace OpenSim.Region.Environment.Scenes } catch (Exception e) { - m_log.Info("[BUG]: " + e.ToString()); + m_log.Info("[BUG]: " + e); } } } - + /// /// Delete this object from the scene. /// /// public void DeleteSceneObjectGroup(SceneObjectGroup group) - { + { SceneObjectPart rootPart = (group).GetChildPart(group.UUID); if (rootPart.PhysActor != null) { @@ -3117,15 +3070,15 @@ namespace OpenSim.Region.Environment.Scenes m_innerScene.RemoveAPrimCount(); } group.DeleteParts(); - + // In case anybody else retains a reference to this group, signal deletion by changing the name // to null. We can't zero out the UUID because this is taken from the root part, which has already // been removed. // FIXME: This is a really poor temporary solution, since it still leaves plenty of scope for race // conditions where a user deletes an entity while it is being stored. Really, the update // code needs a redesign. - group.Name = null; - } + group.Name = null; + } /// /// @@ -3145,7 +3098,6 @@ namespace OpenSim.Region.Environment.Scenes // action(presence); // } // } - /// /// /// @@ -3235,6 +3187,7 @@ namespace OpenSim.Region.Environment.Scenes } return visualParams; } + #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneBase.cs b/OpenSim/Region/Environment/Scenes/SceneBase.cs index d9dc1dadb6..435dc8b41e 100644 --- a/OpenSim/Region/Environment/Scenes/SceneBase.cs +++ b/OpenSim/Region/Environment/Scenes/SceneBase.cs @@ -40,6 +40,11 @@ namespace OpenSim.Region.Environment.Scenes { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + /// + /// XXX These two methods are very temporary + /// + protected Dictionary capsPaths = new Dictionary(); + #region Events public event restart OnRestart; @@ -50,41 +55,38 @@ namespace OpenSim.Region.Environment.Scenes 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 ITerrainChannel Heightmap; public ILandChannel LandChannel; + private AssetCache m_assetCache; + + protected string m_datastore; 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 { get { return m_eventManager; } } - - protected string m_datastore; - - private uint m_nextLocalId = 8880000; - - private AssetCache m_assetCache; - public AssetCache AssetCache { get { return m_assetCache; } set { m_assetCache = value; } } - - protected RegionStatus m_regStatus; + + public ClientManager ClientManager + { + get { return m_clientManager; } + } public RegionStatus Region_Status { @@ -141,6 +143,8 @@ namespace OpenSim.Region.Environment.Scenes #endregion + #region IScene Members + /// /// /// @@ -155,6 +159,18 @@ namespace OpenSim.Region.Environment.Scenes get { return m_nextLocalId++; } } + public string GetCapsPath(LLUUID agentId) + { + if (capsPaths.ContainsKey(agentId)) + { + return capsPaths[agentId]; + } + + return null; + } + + #endregion + #region admin stuff /// @@ -173,6 +189,7 @@ namespace OpenSim.Region.Environment.Scenes { return false; } + public abstract bool OtherRegionUp(RegionInfo thisRegion); public virtual string GetSimulatorVersion() @@ -195,24 +212,10 @@ namespace OpenSim.Region.Environment.Scenes } 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 - - /// - /// XXX These two methods are very temporary - /// - protected Dictionary capsPaths = new Dictionary(); - public string GetCapsPath(LLUUID agentId) - { - if (capsPaths.ContainsKey(agentId)) - { - return capsPaths[agentId]; - } - - return null; - } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs index 91bbdb7c77..b44847b795 100644 --- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs @@ -43,13 +43,47 @@ namespace OpenSim.Region.Environment.Scenes 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 regionlst); + + #endregion + 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 RegionInfo m_regionInfo; 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 ExpectUserDelegate OnExpectUser; public event ExpectPrimDelegate OnExpectPrim; @@ -59,31 +93,6 @@ namespace OpenSim.Region.Environment.Scenes public event ChildAgentUpdate OnChildAgentUpdate; 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) { m_regionInfo = regionInfos; @@ -99,7 +108,7 @@ namespace OpenSim.Region.Environment.Scenes regionCommsHost.OnAvatarCrossingIntoRegion += AgentCrossing; regionCommsHost.OnCloseAgentConnection += CloseConnection; regionCommsHost.OnRegionUp += newRegionUp; - regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate; + regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate; } else { @@ -122,218 +131,6 @@ namespace OpenSim.Region.Environment.Scenes } } - #region CommsManager Event handlers - - /// - /// - /// - /// - /// - /// - protected void NewUserConnection(ulong regionHandle, AgentCircuitData agent) - { - handlerExpectUser = OnExpectUser; - if (handlerExpectUser != null) - { - //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: OnExpectUser Fired for User:" + agent.firstname + " " + agent.lastname); - handlerExpectUser(regionHandle, agent); - } - } - - protected bool newRegionUp(RegionInfo region) - { - handlerRegionUp = OnRegionUp; - if (handlerRegionUp != null) - { - //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: newRegionUp Fired for User:" + region.RegionName); - handlerRegionUp(region); - } - return true; - } - - protected bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) - { - handlerChildAgentUpdate = OnChildAgentUpdate; - if (handlerChildAgentUpdate != null) - handlerChildAgentUpdate(regionHandle, cAgentData); - - - return true; - } - - protected void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) - { - handlerAvatarCrossingIntoRegion = OnAvatarCrossingIntoRegion; - if (handlerAvatarCrossingIntoRegion != null) - { - handlerAvatarCrossingIntoRegion(regionHandle, agentID, position, isFlying); - } - } - - protected bool IncomingPrimCrossing(ulong regionHandle, LLUUID primID, String objXMLData, int XMLMethod) - { - handlerExpectPrim = OnExpectPrim; - if (handlerExpectPrim != null) - { - return handlerExpectPrim(regionHandle, primID, objXMLData, XMLMethod); - } - else - { - return false; - } - - } - - protected void PrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical) - { - handlerPrimCrossingIntoRegion = OnPrimCrossingIntoRegion; - if (handlerPrimCrossingIntoRegion != null) - { - handlerPrimCrossingIntoRegion(regionHandle, primID, position, isPhysical); - } - } - - protected bool CloseConnection(ulong regionHandle, LLUUID agentID) - { - m_log.Info("[INTERREGION]: Incoming Agent Close Request for agent: " + agentID.ToString()); - handlerCloseAgentConnection = OnCloseAgentConnection; - if (handlerCloseAgentConnection != null) - { - return handlerCloseAgentConnection(regionHandle, agentID); - } - return false; - } - - #endregion - - #region Inform Client of Neighbours - - private delegate void InformClientOfNeighbourDelegate( - ScenePresence avatar, AgentCircuitData a, ulong regionHandle, IPEndPoint endPoint); - - private void InformClientOfNeighbourCompleted(IAsyncResult iar) - { - InformClientOfNeighbourDelegate icon = (InformClientOfNeighbourDelegate) iar.AsyncState; - icon.EndInvoke(iar); - } - - /// - /// Async compnent for informing client of which neighbours exists - /// - /// - /// This needs to run asynchronesously, as a network timeout may block the thread for a long while - /// - /// - /// - /// - /// - private void InformClientOfNeighbourAsync(ScenePresence avatar, AgentCircuitData a, ulong regionHandle, - IPEndPoint endPoint) - { - m_log.Info("[INTERGRID]: Starting to inform client about neighbours"); - bool regionAccepted = m_commsProvider.InterRegion.InformRegionOfChildAgent(regionHandle, a); - - if (regionAccepted) - { - avatar.ControllingClient.InformClientOfNeighbour(regionHandle, endPoint); - avatar.AddNeighbourRegion(regionHandle); - m_log.Info("[INTERGRID]: Completed inform client about neighbours"); - } - } - - public void RequestNeighbors(RegionInfo region) - { - List neighbours = - m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); - //IPEndPoint blah = new IPEndPoint(); - - //blah.Address = region.RemotingAddress; - //blah.Port = region.RemotingPort; - } - - /// - /// This informs all neighboring regions about agent "avatar". - /// Calls an asynchronous method to do so.. so it doesn't lag the sim. - /// - public void EnableNeighbourChildAgents(ScenePresence avatar, List lstneighbours) - { - List neighbours = new List(); - - //m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); - for (int i = 0; i < lstneighbours.Count; i++) - { - // We don't want to keep sending to regions that consistently fail on comms. - if (!(lstneighbours[i].commFailTF)) - { - neighbours.Add(new SimpleRegionInfo(lstneighbours[i])); - } - } - // we're going to be using the above code once neighbour cache is correct. Currently it doesn't appear to be - // So we're temporarily going back to the old method of grabbing it from the Grid Server Every time :/ - neighbours = - m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); - - if (neighbours != null) - { - for (int i = 0; i < neighbours.Count; i++) - { - AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo(); - agent.BaseFolder = LLUUID.Zero; - agent.InventoryFolder = LLUUID.Zero; - agent.startpos = new LLVector3(128, 128, 70); - agent.child = true; - - InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; - - try - { - d.BeginInvoke(avatar, agent, neighbours[i].RegionHandle, neighbours[i].ExternalEndPoint, - InformClientOfNeighbourCompleted, - d); - } - catch (Exception e) - { - m_log.ErrorFormat( - "[REGIONINFO]: Could not resolve external hostname {0} for region {1} ({2}, {3}). {4}", - neighbours[i].ExternalHostName, - neighbours[i].RegionHandle, - neighbours[i].RegionLocX, - neighbours[i].RegionLocY, - e); - - // FIXME: Okay, even though we've failed, we're still going to throw the exception on, - // since I don't know what will happen if we just let the client continue - - // XXX: Well, decided to swallow the exception instead for now. Let us see how that goes. - // throw e; - - } - } - } - } - - /// - /// This informs a single neighboring region about agent "avatar". - /// Calls an asynchronous method to do so.. so it doesn't lag the sim. - /// - public void InformNeighborChildAgent(ScenePresence avatar, RegionInfo region, List neighbours) - { - AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo(); - agent.BaseFolder = LLUUID.Zero; - agent.InventoryFolder = LLUUID.Zero; - agent.startpos = new LLVector3(128, 128, 70); - agent.child = true; - - InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; - d.BeginInvoke(avatar, agent, region.RegionHandle, region.ExternalEndPoint, - InformClientOfNeighbourCompleted, - d); - } - - #endregion - - public delegate void InformNeighbourThatRegionUpDelegate(RegionInfo region, ulong regionhandle); - private void InformNeighborsThatRegionisUpCompleted(IAsyncResult iar) { InformNeighbourThatRegionUpDelegate icon = (InformNeighbourThatRegionUpDelegate) iar.AsyncState; @@ -390,8 +187,6 @@ namespace OpenSim.Region.Environment.Scenes //bool val = m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region)); } - public delegate void SendChildAgentDataUpdateDelegate(ChildAgentDataUpdate cAgentData, ScenePresence presence); - /// /// 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. @@ -422,7 +217,6 @@ namespace OpenSim.Region.Environment.Scenes { // We're ignoring a collection was modified error because this data gets old and outdated fast. } - } private void SendChildAgentDataUpdateCompleted(IAsyncResult iar) @@ -435,20 +229,17 @@ namespace OpenSim.Region.Environment.Scenes { // This assumes that we know what our neighbors are. SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync; - d.BeginInvoke(cAgentData,presence, + d.BeginInvoke(cAgentData, presence, SendChildAgentDataUpdateCompleted, d); } - public delegate void SendCloseChildAgentDelegate( LLUUID agentID, List regionlst); - /// /// This Closes child agents on neighboring regions /// Calls an asynchronous method to do so.. so it doesn't lag the sim. /// private void SendCloseChildAgentAsync(LLUUID agentID, List regionlst) { - foreach (ulong regionHandle in regionlst) { bool regionAccepted = m_commsProvider.InterRegion.TellRegionToCloseChildConnection(regionHandle, agentID); @@ -456,14 +247,11 @@ namespace OpenSim.Region.Environment.Scenes 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 @@ -477,7 +265,7 @@ namespace OpenSim.Region.Environment.Scenes private void SendCloseChildAgentCompleted(IAsyncResult iar) { - SendCloseChildAgentDelegate icon = (SendCloseChildAgentDelegate)iar.AsyncState; + SendCloseChildAgentDelegate icon = (SendCloseChildAgentDelegate) iar.AsyncState; icon.EndInvoke(iar); } @@ -556,28 +344,28 @@ namespace OpenSim.Region.Environment.Scenes // assume local regions are always up destRegionUp = true; } - if(destRegionUp) + 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); + 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/"; - + 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); - + "[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(); @@ -587,13 +375,13 @@ namespace OpenSim.Region.Environment.Scenes { 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) + 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()); + SendCloseChildAgentConnections(avatar.UUID, avatar.GetKnownRegionList()); } } else @@ -628,7 +416,7 @@ namespace OpenSim.Region.Environment.Scenes public void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz) { - m_commsProvider.LogOffUser(userid, regionid, regionhandle, posx, posy, posz); + m_commsProvider.LogOffUser(userid, regionid, regionhandle, posx, posy, posz); } public void ClearUserAgent(LLUUID avatarID) @@ -656,7 +444,7 @@ namespace OpenSim.Region.Environment.Scenes return m_commsProvider.GetUserFriendList(friendlistowner); } - public List RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY) + public List RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY) { return m_commsProvider.GridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY); } @@ -665,5 +453,213 @@ namespace OpenSim.Region.Environment.Scenes { return m_commsProvider.GenerateAgentPickerRequestResponse(queryID, query); } + + #region CommsManager Event handlers + + /// + /// + /// + /// + /// + /// + protected void NewUserConnection(ulong regionHandle, AgentCircuitData agent) + { + handlerExpectUser = OnExpectUser; + if (handlerExpectUser != null) + { + //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: OnExpectUser Fired for User:" + agent.firstname + " " + agent.lastname); + handlerExpectUser(regionHandle, agent); + } + } + + protected bool newRegionUp(RegionInfo region) + { + handlerRegionUp = OnRegionUp; + if (handlerRegionUp != null) + { + //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: newRegionUp Fired for User:" + region.RegionName); + handlerRegionUp(region); + } + return true; + } + + protected bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) + { + handlerChildAgentUpdate = OnChildAgentUpdate; + if (handlerChildAgentUpdate != null) + handlerChildAgentUpdate(regionHandle, cAgentData); + + + return true; + } + + protected void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) + { + handlerAvatarCrossingIntoRegion = OnAvatarCrossingIntoRegion; + if (handlerAvatarCrossingIntoRegion != null) + { + handlerAvatarCrossingIntoRegion(regionHandle, agentID, position, isFlying); + } + } + + protected bool IncomingPrimCrossing(ulong regionHandle, LLUUID primID, String objXMLData, int XMLMethod) + { + handlerExpectPrim = OnExpectPrim; + if (handlerExpectPrim != null) + { + return handlerExpectPrim(regionHandle, primID, objXMLData, XMLMethod); + } + else + { + return false; + } + } + + protected void PrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical) + { + handlerPrimCrossingIntoRegion = OnPrimCrossingIntoRegion; + if (handlerPrimCrossingIntoRegion != null) + { + handlerPrimCrossingIntoRegion(regionHandle, primID, position, isPhysical); + } + } + + protected bool CloseConnection(ulong regionHandle, LLUUID agentID) + { + m_log.Info("[INTERREGION]: Incoming Agent Close Request for agent: " + agentID); + handlerCloseAgentConnection = OnCloseAgentConnection; + if (handlerCloseAgentConnection != null) + { + return handlerCloseAgentConnection(regionHandle, agentID); + } + return false; + } + + #endregion + + #region Inform Client of Neighbours + + private void InformClientOfNeighbourCompleted(IAsyncResult iar) + { + InformClientOfNeighbourDelegate icon = (InformClientOfNeighbourDelegate) iar.AsyncState; + icon.EndInvoke(iar); + } + + /// + /// Async compnent for informing client of which neighbours exists + /// + /// + /// This needs to run asynchronesously, as a network timeout may block the thread for a long while + /// + /// + /// + /// + /// + private void InformClientOfNeighbourAsync(ScenePresence avatar, AgentCircuitData a, ulong regionHandle, + IPEndPoint endPoint) + { + m_log.Info("[INTERGRID]: Starting to inform client about neighbours"); + bool regionAccepted = m_commsProvider.InterRegion.InformRegionOfChildAgent(regionHandle, a); + + if (regionAccepted) + { + avatar.ControllingClient.InformClientOfNeighbour(regionHandle, endPoint); + avatar.AddNeighbourRegion(regionHandle); + m_log.Info("[INTERGRID]: Completed inform client about neighbours"); + } + } + + public void RequestNeighbors(RegionInfo region) + { + List neighbours = + m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); + //IPEndPoint blah = new IPEndPoint(); + + //blah.Address = region.RemotingAddress; + //blah.Port = region.RemotingPort; + } + + /// + /// This informs all neighboring regions about agent "avatar". + /// Calls an asynchronous method to do so.. so it doesn't lag the sim. + /// + public void EnableNeighbourChildAgents(ScenePresence avatar, List lstneighbours) + { + List neighbours = new List(); + + //m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); + for (int i = 0; i < lstneighbours.Count; i++) + { + // We don't want to keep sending to regions that consistently fail on comms. + if (!(lstneighbours[i].commFailTF)) + { + neighbours.Add(new SimpleRegionInfo(lstneighbours[i])); + } + } + // we're going to be using the above code once neighbour cache is correct. Currently it doesn't appear to be + // So we're temporarily going back to the old method of grabbing it from the Grid Server Every time :/ + neighbours = + m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); + + if (neighbours != null) + { + for (int i = 0; i < neighbours.Count; i++) + { + AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo(); + agent.BaseFolder = LLUUID.Zero; + agent.InventoryFolder = LLUUID.Zero; + agent.startpos = new LLVector3(128, 128, 70); + agent.child = true; + + InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; + + try + { + d.BeginInvoke(avatar, agent, neighbours[i].RegionHandle, neighbours[i].ExternalEndPoint, + InformClientOfNeighbourCompleted, + d); + } + catch (Exception e) + { + m_log.ErrorFormat( + "[REGIONINFO]: Could not resolve external hostname {0} for region {1} ({2}, {3}). {4}", + neighbours[i].ExternalHostName, + neighbours[i].RegionHandle, + neighbours[i].RegionLocX, + neighbours[i].RegionLocY, + e); + + // FIXME: Okay, even though we've failed, we're still going to throw the exception on, + // since I don't know what will happen if we just let the client continue + + // XXX: Well, decided to swallow the exception instead for now. Let us see how that goes. + // throw e; + } + } + } + } + + /// + /// This informs a single neighboring region about agent "avatar". + /// Calls an asynchronous method to do so.. so it doesn't lag the sim. + /// + public void InformNeighborChildAgent(ScenePresence avatar, RegionInfo region, List neighbours) + { + AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo(); + agent.BaseFolder = LLUUID.Zero; + agent.InventoryFolder = LLUUID.Zero; + agent.startpos = new LLVector3(128, 128, 70); + agent.child = true; + + InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; + d.BeginInvoke(avatar, agent, region.RegionHandle, region.ExternalEndPoint, + InformClientOfNeighbourCompleted, + d); + } + + private delegate void InformClientOfNeighbourDelegate( + ScenePresence avatar, AgentCircuitData a, ulong regionHandle, IPEndPoint endPoint); + + #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs index 002fc5d293..297d796580 100644 --- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs +++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs @@ -38,118 +38,59 @@ namespace OpenSim.Region.Environment.Scenes /// public class EventManager { - public delegate void OnFrameDelegate(); - - 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; + #region Delegates 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); + + /// + /// DeregisterCapsEvent is called by Scene when the caps + /// handler for an agent are removed. + /// + 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 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 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(); /// /// 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. /// 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; - /// - /// DeregisterCapsEvent is called by Scene when the caps - /// handler for an agent are removed. - /// - public delegate void DeregisterCapsEvent(LLUUID agentID, Caps caps); + 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 LandBuy OnLandBuy; public event LandBuy OnValidateLandBuy; /* 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) { handlerScriptChangedEvent = OnScriptChangedEvent; @@ -343,7 +293,7 @@ namespace OpenSim.Region.Environment.Scenes if (handlerParcelPrimCountUpdate != null) { handlerParcelPrimCountUpdate(); - } + } } public void TriggerMoneyTransfer(Object sender, MoneyTransferArgs e) @@ -492,7 +442,6 @@ namespace OpenSim.Region.Environment.Scenes { handlerGridInstantMessageToFriends(message); } - } } @@ -514,7 +463,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerOnRegisterCaps(LLUUID agentID, Caps caps) + public void TriggerOnRegisterCaps(LLUUID agentID, Caps caps) { handlerRegisterCaps = OnRegisterCaps; if (handlerRegisterCaps != null) @@ -523,7 +472,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerOnDeregisterCaps(LLUUID agentID, Caps caps) + public void TriggerOnDeregisterCaps(LLUUID agentID, Caps caps) { handlerDeregisterCaps = OnDeregisterCaps; if (handlerDeregisterCaps != null) @@ -540,7 +489,8 @@ namespace OpenSim.Region.Environment.Scenes handlerNewInventoryItemUpdateComplete(agentID, AssetID, AssetName, userlevel); } } - public void TriggerLandBuy (Object sender, LandBuyArgs e) + + public void TriggerLandBuy(Object sender, LandBuyArgs e) { handlerLandBuy = OnLandBuy; if (handlerLandBuy != null) @@ -548,6 +498,7 @@ namespace OpenSim.Region.Environment.Scenes handlerLandBuy(sender, e); } } + public void TriggerValidateLandBuy(Object sender, LandBuyArgs e) { handlerValidateLandBuy = OnValidateLandBuy; @@ -556,7 +507,7 @@ namespace OpenSim.Region.Environment.Scenes handlerValidateLandBuy(sender, e); } } - + public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos) { handlerScriptAtTargetEvent = OnScriptAtTargetEvent; @@ -574,5 +525,67 @@ namespace OpenSim.Region.Environment.Scenes 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 } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneManager.cs b/OpenSim/Region/Environment/Scenes/SceneManager.cs index 2dfea2ac0d..2325ed4975 100644 --- a/OpenSim/Region/Environment/Scenes/SceneManager.cs +++ b/OpenSim/Region/Environment/Scenes/SceneManager.cs @@ -41,10 +41,13 @@ namespace OpenSim.Region.Environment.Scenes { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public event RestartSim OnRestartSim; - private readonly List m_localScenes; - private Scene m_currentScene = null; + private Scene m_currentScene; + + public SceneManager() + { + m_localScenes = new List(); + } public List Scenes { @@ -71,10 +74,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public SceneManager() - { - m_localScenes = new List(); - } + public event RestartSim OnRestartSim; public void Close() { @@ -180,7 +180,7 @@ namespace OpenSim.Region.Environment.Scenes [Obsolete("TODO: Remove this warning by 0.7")] public bool RunTerrainCmdOnCurrentScene(string[] cmdparams, ref string result) { - m_log.Warn("DEPRECIATED: The terrain engine has been replaced with a new terrain plugin module. Please type 'plugin terrain help' for new commands."); + m_log.Warn("DEPRECIATED: The terrain engine has been replaced with a new terrain plugin module. Please type 'plugin terrain help' for new commands."); return false; } @@ -252,8 +252,8 @@ namespace OpenSim.Region.Environment.Scenes 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) { if (scene.RegionInfo.RegionID == regionID) @@ -262,7 +262,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } } - + return false; } @@ -313,7 +313,7 @@ namespace OpenSim.Region.Environment.Scenes { 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)) { scene = mscene; @@ -327,22 +327,22 @@ namespace OpenSim.Region.Environment.Scenes public void SetDebugPacketOnCurrentScene(int newDebug) { ForEachCurrentScene(delegate(Scene scene) - { - List scenePresences = scene.GetScenePresences(); - - foreach (ScenePresence scenePresence in scenePresences) { - if (!scenePresence.IsChildAgent) - { - m_log.ErrorFormat("Packet debug for {0} {1} set to {2}", - scenePresence.Firstname, - scenePresence.Lastname, - newDebug); + List scenePresences = scene.GetScenePresences(); - scenePresence.ControllingClient.SetDebug(newDebug); + foreach (ScenePresence scenePresence in scenePresences) + { + if (!scenePresence.IsChildAgent) + { + m_log.ErrorFormat("Packet debug for {0} {1} set to {2}", + scenePresence.Firstname, + scenePresence.Lastname, + newDebug); + + scenePresence.ControllingClient.SetDebug(newDebug); + } } - } - }); + }); } public List GetCurrentSceneAvatars() @@ -350,17 +350,17 @@ namespace OpenSim.Region.Environment.Scenes List avatars = new List(); ForEachCurrentScene(delegate(Scene scene) - { - List scenePresences = scene.GetScenePresences(); + { + List scenePresences = scene.GetScenePresences(); - foreach (ScenePresence scenePresence in scenePresences) - { - if (!scenePresence.IsChildAgent) - { - avatars.Add(scenePresence); - } - } - }); + foreach (ScenePresence scenePresence in scenePresences) + { + if (!scenePresence.IsChildAgent) + { + avatars.Add(scenePresence); + } + } + }); return avatars; } @@ -381,11 +381,11 @@ namespace OpenSim.Region.Environment.Scenes public void SetCurrentSceneTimePhase(int timePhase) { ForEachCurrentScene(delegate(Scene scene) - { - scene.SetTimePhase( - timePhase) - ; - }); + { + scene.SetTimePhase( + timePhase) + ; + }); } public void ForceCurrentSceneClientUpdate() @@ -453,4 +453,4 @@ namespace OpenSim.Region.Environment.Scenes m_localScenes.ForEach(action); } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs index 824a536076..d051ed9b6d 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs @@ -49,7 +49,6 @@ namespace OpenSim.Region.Environment.Scenes if (part != null) { part.StartScript(itemID); - } else { @@ -57,9 +56,9 @@ namespace OpenSim.Region.Environment.Scenes "[PRIMINVENTORY]: " + "Couldn't find part {0} in object group {1}, {2} to start script with ID {3}", localID, Name, UUID, itemID); - } + } } - + // /// Start a given script. // /// // /// @@ -80,7 +79,7 @@ namespace OpenSim.Region.Environment.Scenes // localID, Name, UUID, itemID); // } // } - + /// /// Start the scripts contained in all the prims in this group. /// @@ -106,7 +105,7 @@ namespace OpenSim.Region.Environment.Scenes } } } - + /// Start a given script. /// /// @@ -126,9 +125,9 @@ namespace OpenSim.Region.Environment.Scenes "[PRIMINVENTORY]: " + "Couldn't find part {0} in object group {1}, {2} to stop script with ID {3}", partID, Name, UUID, itemID); - } - } - + } + } + /// /// /// @@ -171,7 +170,7 @@ namespace OpenSim.Region.Environment.Scenes localID, Name, UUID); } } - + /// /// Add an inventory item to a prim in this group. /// @@ -180,7 +179,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// The item UUID that should be used by the new item. /// - public bool AddInventoryItem(IClientAPI remoteClient, uint localID, + public bool AddInventoryItem(IClientAPI remoteClient, uint localID, InventoryItemBase item, LLUUID copyItemID) { LLUUID newItemId = (copyItemID != LLUUID.Zero) ? copyItemID : item.ID; @@ -189,8 +188,8 @@ namespace OpenSim.Region.Environment.Scenes if (part != null) { TaskInventoryItem taskItem = new TaskInventoryItem(); - - taskItem.ItemID = newItemId; + + taskItem.ItemID = newItemId; taskItem.AssetID = item.AssetID; taskItem.Name = item.Name; taskItem.Description = item.Description; @@ -198,15 +197,15 @@ namespace OpenSim.Region.Environment.Scenes taskItem.CreatorID = item.Creator; taskItem.Type = item.AssetType; taskItem.InvType = item.InvType; - + taskItem.BaseMask = item.BasePermissions; taskItem.OwnerMask = item.CurrentPermissions; // FIXME: ignoring group permissions for now as they aren't stored in item taskItem.EveryoneMask = item.EveryOnePermissions; taskItem.NextOwnerMask = item.NextPermissions; - + part.AddInventoryItem(taskItem); - + return true; } else @@ -219,7 +218,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } - + /// /// Returns an existing inventory item. Returns the original, so any changes will be live. /// @@ -239,11 +238,11 @@ namespace OpenSim.Region.Environment.Scenes "[PRIMINVENTORY]: " + "Couldn't find prim local ID {0} in prim {1}, {2} to get inventory item ID {3}", primID, part.Name, part.UUID, itemID); - } - + } + return null; - } - + } + /// /// Update an existing inventory item. /// @@ -255,8 +254,8 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart part = GetChildPart(item.ParentPartID); if (part != null) { - part.UpdateInventoryItem(item); - + part.UpdateInventoryItem(item); + return true; } else @@ -265,22 +264,22 @@ namespace OpenSim.Region.Environment.Scenes "[PRIMINVENTORY]: " + "Couldn't find prim ID {0} to update item {1}, {2}", item.ParentPartID, item.Name, item.ItemID); - } - + } + return false; - } + } public int RemoveInventoryItem(uint localID, LLUUID itemID) { SceneObjectPart part = GetChildPart(localID); if (part != null) - { + { int type = part.RemoveInventoryItem(itemID); - + return type; } - + return -1; - } + } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 5d3979010b..1ea2f245aa 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -72,7 +72,7 @@ namespace OpenSim.Region.Environment.Scenes object_rez = 4194304 } - struct scriptPosTarget + internal struct scriptPosTarget { public LLVector3 targetPos; public float tolerance; @@ -82,14 +82,14 @@ namespace OpenSim.Region.Environment.Scenes public partial class SceneObjectGroup : EntityBase { - private PrimCountTaintedDelegate handlerPrimCountTainted = null; + private readonly Dictionary m_targets = new Dictionary(); + private PrimCountTaintedDelegate handlerPrimCountTainted; /// /// Signal whether the non-inventory attributes of any prims in the group have changed /// since the group's last persistent backup /// - public bool HasGroupChanged = false; - + public bool HasGroupChanged; private LLVector3 lastPhysGroupPos; @@ -104,11 +104,8 @@ namespace OpenSim.Region.Environment.Scenes protected SceneObjectPart m_rootPart; private Dictionary m_scriptEvents = new Dictionary(); - private Dictionary m_targets = new Dictionary(); - - private bool m_scriptListens_atTarget = false; - private bool m_scriptListens_notAtTarget = false; - + private bool m_scriptListens_atTarget; + private bool m_scriptListens_notAtTarget; #region Properties @@ -119,7 +116,7 @@ namespace OpenSim.Region.Environment.Scenes /// think really there should be a list (or whatever) in each scenepresence /// saying what prim(s) that user has selected. /// - protected bool m_isSelected = false; + protected bool m_isSelected; /// /// @@ -186,7 +183,6 @@ namespace OpenSim.Region.Environment.Scenes string.Format("[SCENE OBJECT GROUP]: Object {0} has no root part.", m_uuid)); } - return m_rootPart.GroupPosition; } @@ -206,7 +202,7 @@ namespace OpenSim.Region.Environment.Scenes part.GroupPosition = val; } } - + //if (m_rootPart.PhysActor != null) //{ //m_rootPart.PhysActor.Position = @@ -216,7 +212,7 @@ namespace OpenSim.Region.Environment.Scenes //} } } - + public override uint LocalId { get @@ -515,10 +511,11 @@ namespace OpenSim.Region.Environment.Scenes m_scene.EventManager.OnBackup += ProcessBackup; } } + public LLVector3 GroupScale() { - LLVector3 minScale = new LLVector3(Constants.RegionSize,Constants.RegionSize,Constants.RegionSize); - LLVector3 maxScale = new LLVector3(0f,0f,0f); + LLVector3 minScale = new LLVector3(Constants.RegionSize, Constants.RegionSize, Constants.RegionSize); + LLVector3 maxScale = new LLVector3(0f, 0f, 0f); LLVector3 finalScale = new LLVector3(0.5f, 0.5f, 0.5f); lock (m_parts) @@ -541,8 +538,8 @@ namespace OpenSim.Region.Environment.Scenes finalScale.Y = (minScale.Y > maxScale.Y) ? minScale.Y : maxScale.Y; finalScale.Z = (minScale.Z > maxScale.Z) ? minScale.Z : maxScale.Z; return finalScale; - } + public EntityIntersection TestIntersection(Ray hRay, bool frontFacesOnly, bool faceCenters) { // 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. //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.. // We might (and probably will) be checking for prim creation from other sims @@ -684,12 +681,11 @@ namespace OpenSim.Region.Environment.Scenes DetachFromBackup(this); m_rootPart.m_attachedAvatar = agentID; - + if (m_rootPart.PhysActor != null) { m_scene.PhysicsScene.RemovePrim(m_rootPart.PhysActor); m_rootPart.PhysActor = null; - } AbsolutePosition = AttachOffset; @@ -709,27 +705,28 @@ namespace OpenSim.Region.Environment.Scenes m_rootPart.ScheduleFullUpdate(); } } + public byte GetAttachmentPoint() { if (m_rootPart != null) { return m_rootPart.Shape.State; } - return (byte)0; + return 0; } public void ClearPartAttachmentData() { foreach (SceneObjectPart part in m_parts.Values) { - part.SetAttachmentPoint((Byte)0); + part.SetAttachmentPoint(0); } } public void DetachToGround() { 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) { detachedpos = avatar.AbsolutePosition; @@ -738,14 +735,14 @@ namespace OpenSim.Region.Environment.Scenes AbsolutePosition = detachedpos; m_rootPart.m_attachedAvatar = LLUUID.Zero; m_rootPart.SetParentLocalId(0); - m_rootPart.SetAttachmentPoint((byte)0); + m_rootPart.SetAttachmentPoint(0); m_rootPart.m_IsAttachment = false; m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim); AttachToBackup(); m_rootPart.ScheduleFullUpdate(); m_rootPart.ClearUndoState(); - } + public void DetachToInventoryPrep() { ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar); @@ -755,7 +752,7 @@ namespace OpenSim.Region.Environment.Scenes //detachedpos = avatar.AbsolutePosition; avatar.RemoveAttachment(this); } - + m_rootPart.m_attachedAvatar = LLUUID.Zero; m_rootPart.SetParentLocalId(0); //m_rootPart.SetAttachmentPoint((byte)0); @@ -764,8 +761,8 @@ namespace OpenSim.Region.Environment.Scenes //m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim); //AttachToBackup(); //m_rootPart.ScheduleFullUpdate(); - } + /// /// /// @@ -826,7 +823,6 @@ namespace OpenSim.Region.Environment.Scenes try { m_parts.Add(part.UUID, part); - } catch (Exception e) { @@ -847,7 +843,6 @@ namespace OpenSim.Region.Environment.Scenes if (part.UUID != m_rootPart.UUID) { part.ParentID = m_rootPart.LocalId; - } } } @@ -860,10 +855,10 @@ namespace OpenSim.Region.Environment.Scenes foreach (SceneObjectPart part in m_parts.Values) { part.UUID = LLUUID.Random(); - } } } + // helper provided for parts. public int GetSceneMaxUndo() { @@ -871,6 +866,7 @@ namespace OpenSim.Region.Environment.Scenes return m_scene.MaxUndoCount; return 5; } + public void ResetChildPrimPhysicsPositions() { AbsolutePosition = AbsolutePosition; @@ -897,7 +893,6 @@ namespace OpenSim.Region.Environment.Scenes { SceneObjectPart part = GetChildPart(localId); OnGrabPart(part, offsetPos, remoteClient); - } } @@ -905,7 +900,6 @@ namespace OpenSim.Region.Environment.Scenes { part.StoreUndoState(); part.OnGrab(offsetPos, remoteClient); - } public virtual void OnGrabGroup(LLVector3 offsetPos, IClientAPI remoteClient) @@ -969,19 +963,19 @@ namespace OpenSim.Region.Environment.Scenes public void aggregateScriptEvents() { - uint objectflagupdate=(uint)RootPart.GetEffectiveObjectFlags(); + uint objectflagupdate = RootPart.GetEffectiveObjectFlags(); - scriptEvents aggregateScriptEvents=0; + scriptEvents aggregateScriptEvents = 0; lock (m_parts) { foreach (SceneObjectPart part in m_parts.Values) { - if(part == null) - continue; - if(part != RootPart) - part.ObjectFlags = objectflagupdate; - aggregateScriptEvents |= part.m_aggregateScriptEvents; + if (part == null) + continue; + if (part != RootPart) + part.ObjectFlags = objectflagupdate; + 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 atTargets = new Dictionary(); + 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 /// @@ -1362,9 +1489,8 @@ namespace OpenSim.Region.Environment.Scenes { m_parts.Add(newPart.UUID, newPart); } - + SetPartAsNonRoot(newPart); - } /// @@ -1434,32 +1560,30 @@ namespace OpenSim.Region.Environment.Scenes /// public override void Update() { - lock (m_parts) { //if (m_rootPart.m_IsAttachment) //{ - //foreach (SceneObjectPart part in m_parts.Values) - //{ - //part.SendScheduledUpdates(); - //} - //return; + //foreach (SceneObjectPart part in m_parts.Values) + //{ + //part.SendScheduledUpdates(); //} - + //return; + //} + if (Util.GetDistanceTo(lastPhysGroupPos, AbsolutePosition) > 0.02) { m_rootPart.UpdateFlag = 1; lastPhysGroupPos = AbsolutePosition; } - //foreach (SceneObjectPart part in m_parts.Values) - //{ - //if (part.UpdateFlag == 0) part.UpdateFlag = 1; - //} + //foreach (SceneObjectPart part in m_parts.Values) + //{ + //if (part.UpdateFlag == 0) part.UpdateFlag = 1; + //} + + + checkAtTargets(); - - - checkAtTargets(); - if ((Math.Abs(lastPhysGroupRot.W - GroupRotation.W) > 0.1) || (Math.Abs(lastPhysGroupRot.X - GroupRotation.X) > 0.1) @@ -1763,7 +1887,7 @@ namespace OpenSim.Region.Environment.Scenes public void DelinkFromGroup(uint partID) { SceneObjectPart linkPart = GetChildPart(partID); - + if (null != linkPart) { linkPart.ClearUndoState(); @@ -1948,10 +2072,10 @@ namespace OpenSim.Region.Environment.Scenes proper.ObjectData[0].FromTaskID = LLUUID.Zero; proper.ObjectData[0].GroupID = LLUUID.Zero; proper.ObjectData[0].InventorySerial = (short) m_rootPart.InventorySerial; - + proper.ObjectData[0].LastOwnerID = m_rootPart.LastOwnerID; // proper.ObjectData[0].LastOwnerID = LLUUID.Zero; - + proper.ObjectData[0].ObjectID = UUID; proper.ObjectData[0].OwnerID = m_rootPart.OwnerID; proper.ObjectData[0].TouchName = Helpers.StringToField(m_rootPart.TouchName); @@ -2391,140 +2515,5 @@ namespace OpenSim.Region.Environment.Scenes } #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 atTargets = new Dictionary(); - 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]); - } - } - } - } - } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs index 0215cecd6b..c8a8f95903 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs @@ -41,13 +41,29 @@ namespace OpenSim.Region.Environment.Scenes { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private string m_inventoryFileName = String.Empty; + private readonly string m_inventoryFileName = String.Empty; + + /// + /// Tracks whether inventory has changed since the last persistent backup + /// + private bool HasInventoryChanged; /// /// The inventory folder for this prim /// private LLUUID m_folderID = LLUUID.Zero; + /// + /// Serial count for inventory file , used to tell if inventory has changed + /// no need for this to be part of Database backup + /// + protected uint m_inventorySerial; + + /// + /// Holds in memory prim inventory + /// + protected TaskInventoryDictionary m_taskInventory = new TaskInventoryDictionary(); + /// /// 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. @@ -58,34 +74,18 @@ namespace OpenSim.Region.Environment.Scenes set { m_folderID = value; } } - /// - /// Serial count for inventory file , used to tell if inventory has changed - /// no need for this to be part of Database backup - /// - protected uint m_inventorySerial = 0; - public uint InventorySerial { get { return m_inventorySerial; } set { m_inventorySerial = value; } } - /// - /// Holds in memory prim inventory - /// - protected TaskInventoryDictionary m_taskInventory = new TaskInventoryDictionary(); - public TaskInventoryDictionary TaskInventory { get { return m_taskInventory; } set { m_taskInventory = value; } } - /// - /// Tracks whether inventory has changed since the last persistent backup - /// - private bool HasInventoryChanged; - /// /// 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. @@ -96,14 +96,14 @@ namespace OpenSim.Region.Environment.Scenes public void ResetInventoryIDs() { lock (TaskInventory) - { + { if (0 == TaskInventory.Count) { - return; + return; } - - HasInventoryChanged = true; - + + HasInventoryChanged = true; + IList items = new List(TaskInventory.Values); TaskInventory.Clear(); @@ -132,9 +132,9 @@ namespace OpenSim.Region.Environment.Scenes if (ownerId != item.OwnerID) { item.LastOwnerID = item.OwnerID; - item.OwnerID = ownerId; - item.BaseMask = item.NextOwnerMask & (uint)PermissionMask.All; - item.OwnerMask = item.NextOwnerMask & (uint)PermissionMask.All; + item.OwnerID = ownerId; + item.BaseMask = item.NextOwnerMask & (uint) PermissionMask.All; + item.OwnerMask = item.NextOwnerMask & (uint) PermissionMask.All; } } } @@ -194,22 +194,22 @@ namespace OpenSim.Region.Environment.Scenes AssetCache cache = m_parentGroup.Scene.AssetCache; cache.GetAsset(item.AssetID, delegate(LLUUID assetID, AssetBase asset) - { - if (null == asset) - { - m_log.ErrorFormat( - "[PRIMINVENTORY]: " + - "Couldn't start script {0}, {1} since asset ID {2} could not be found", - item.Name, item.ItemID, item.AssetID); - } - else - { - string script = Helpers.FieldToUTF8String(asset.Data); - m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId,item.ItemID,script); - m_parentGroup.AddActiveScriptCount(1); - ScheduleFullUpdate(); - } - }, false); + { + if (null == asset) + { + m_log.ErrorFormat( + "[PRIMINVENTORY]: " + + "Couldn't start script {0}, {1} since asset ID {2} could not be found", + item.Name, item.ItemID, item.AssetID); + } + else + { + string script = Helpers.FieldToUTF8String(asset.Data); + m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId, item.ItemID, script); + m_parentGroup.AddActiveScriptCount(1); + ScheduleFullUpdate(); + } + }, false); } } @@ -226,7 +226,6 @@ namespace OpenSim.Region.Environment.Scenes if (m_taskInventory.ContainsKey(itemId)) { StartScript(m_taskInventory[itemId]); - } else { @@ -263,7 +262,7 @@ namespace OpenSim.Region.Environment.Scenes { foreach (TaskInventoryItem item in m_taskInventory.Values) { - if(item.Name == name) + if (item.Name == name) return true; } return false; @@ -271,14 +270,14 @@ namespace OpenSim.Region.Environment.Scenes private string FindAvailableInventoryName(string name) { - if(!InventoryContainsName(name)) + if (!InventoryContainsName(name)) return name; - int suffix=1; - while(suffix < 256) + int suffix = 1; + while (suffix < 256) { - string tryName=String.Format("{0} {1}", name, suffix); - if(!InventoryContainsName(tryName)) + string tryName = String.Format("{0} {1}", name, suffix); + if (!InventoryContainsName(tryName)) return tryName; suffix++; } @@ -295,11 +294,11 @@ namespace OpenSim.Region.Environment.Scenes item.CreationDate = 1000; item.ParentPartID = UUID; - string name=FindAvailableInventoryName(item.Name); - if(name == String.Empty) + string name = FindAvailableInventoryName(item.Name); + if (name == String.Empty) return; - item.Name=name; + item.Name = name; lock (m_taskInventory) { @@ -347,7 +346,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[PRIM INVENTORY]: Retrieved task inventory item {0}, {1} from prim {2}, {3}", // m_taskInventory[itemID].Name, itemID, Name, UUID); - + return m_taskInventory[itemID]; } else @@ -428,7 +427,6 @@ namespace OpenSim.Region.Environment.Scenes scriptcount++; } } - } if (scriptcount <= 0) { @@ -457,14 +455,14 @@ namespace OpenSim.Region.Environment.Scenes /// /// public bool GetInventoryFileName(IClientAPI client, uint localID) - { + { // m_log.DebugFormat( // "[PRIM INVENTORY]: Received request from client {0} for inventory file name of {1}, {2}", // client.AgentId, Name, UUID); - + if (m_inventorySerial > 0) { - client.SendTaskInventory(m_uuid, (short)m_inventorySerial, + client.SendTaskInventory(m_uuid, (short) m_inventorySerial, Helpers.StringToField(m_inventoryFileName)); return true; } @@ -480,9 +478,9 @@ namespace OpenSim.Region.Environment.Scenes /// /// public void RequestInventoryFile(IXfer xferManager) - { + { byte[] fileData = new byte[0]; - + // Confusingly, the folder item has to be the object id, while the 'parent id' has to be zero. This matches // what appears to happen in the Second Life protocol. If this isn't the case. then various functionality // isn't available (such as drag from prim inventory to agent inventory) @@ -493,53 +491,53 @@ namespace OpenSim.Region.Environment.Scenes foreach (TaskInventoryItem item in m_taskInventory.Values) { invString.AddItemStart(); - invString.AddNameValueLine("item_id", item.ItemID.ToString()); + invString.AddNameValueLine("item_id", item.ItemID.ToString()); invString.AddNameValueLine("parent_id", m_folderID.ToString()); invString.AddPermissionsStart(); - + // FIXME: Temporary until permissions are properly sorted. invString.AddNameValueLine("base_mask", "7fffffff"); invString.AddNameValueLine("owner_mask", "7fffffff"); invString.AddNameValueLine("group_mask", "7fffffff"); invString.AddNameValueLine("everyone_mask", "7fffffff"); invString.AddNameValueLine("next_owner_mask", "7fffffff"); - + // invString.AddNameValueLine("group_mask", "00000000"); // invString.AddNameValueLine("everyone_mask", "00000000"); // invString.AddNameValueLine("next_owner_mask", "00086000"); - + // invString.AddNameValueLine("base_mask", Helpers.UIntToHexString(item.BaseMask)); // invString.AddNameValueLine("owner_mask", Helpers.UIntToHexString(item.OwnerMask)); // invString.AddNameValueLine("group_mask", Helpers.UIntToHexString(item.GroupMask)); // invString.AddNameValueLine("everyone_mask", Helpers.UIntToHexString(item.EveryoneMask)); // invString.AddNameValueLine("next_owner_mask", Helpers.UIntToHexString(item.NextOwnerMask)); - + invString.AddNameValueLine("creator_id", item.CreatorID.ToString()); invString.AddNameValueLine("owner_id", item.OwnerID.ToString()); - + invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString()); // invString.AddNameValueLine("last_owner_id", item.OwnerID.ToString()); - + invString.AddNameValueLine("group_id", item.GroupID.ToString()); invString.AddSectionEnd(); - + invString.AddNameValueLine("asset_id", item.AssetID.ToString()); invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]); invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]); invString.AddNameValueLine("flags", "00000000"); - + invString.AddSaleStart(); invString.AddNameValueLine("sale_type", "not"); invString.AddNameValueLine("sale_price", "0"); invString.AddSectionEnd(); - + invString.AddNameValueLine("name", item.Name + "|"); invString.AddNameValueLine("desc", item.Description + "|"); - + invString.AddNameValueLine("creation_date", item.CreationDate.ToString()); // invString.AddNameValueLine("creation_date", "1209151453"); - + invString.AddSectionEnd(); } } @@ -571,6 +569,8 @@ namespace OpenSim.Region.Environment.Scenes } } + #region Nested type: InventoryStringBuilder + public class InventoryStringBuilder { public string BuildString = String.Empty; @@ -596,13 +596,13 @@ namespace OpenSim.Region.Environment.Scenes BuildString += "\tpermissions 0\n"; AddSectionStart(); } - + public void AddSaleStart() { BuildString += "\tsale_info\t0\n"; AddSectionStart(); - } - + } + protected void AddSectionStart() { BuildString += "\t{\n"; @@ -629,5 +629,7 @@ namespace OpenSim.Region.Environment.Scenes { } } + + #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 3dbd809a08..3a9e1c2bca 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -56,6 +56,7 @@ namespace OpenSim.Region.Environment.Scenes Something5 = 64, Something6 = 128 } + [Flags] public enum Changed : uint { @@ -68,6 +69,7 @@ namespace OpenSim.Region.Environment.Scenes ALLOWED_DROP = 64, OWNER = 128 } + [Flags] public enum TextureAnimFlags : byte { @@ -81,70 +83,36 @@ namespace OpenSim.Region.Environment.Scenes SCALE = 0x40 } - + [Serializable] public partial class SceneObjectPart : IScriptHost, ISerializable { - - [XmlIgnore] public PhysicsActor PhysActor = null; - - public LLUUID LastOwnerID; - public LLUUID OwnerID; - public LLUUID GroupID; - public int OwnershipCost; - public byte ObjectSaleType; - public int SalePrice; public uint Category; - + public Int32 CreationDate; + [XmlIgnore] public LLUUID fromAssetID = LLUUID.Zero; + public LLUUID GroupID; + public LLUUID LastOwnerID; + // TODO: This needs to be persisted in next XML version update! - [XmlIgnore] public int[] PayPrice = {-2,-2,-2,-2,-2}; - [XmlIgnore] private Dictionary m_scriptEvents = new Dictionary(); - [XmlIgnore] public scriptEvents m_aggregateScriptEvents=0; [XmlIgnore] private LLObject.ObjectFlags LocalFlags = LLObject.ObjectFlags.None; + [XmlIgnore] public scriptEvents m_aggregateScriptEvents = 0; - [XmlIgnore] public bool m_IsAttachment = false; - [XmlIgnore] public uint m_attachmentPoint = (byte)0; [XmlIgnore] public LLUUID m_attachedAvatar = LLUUID.Zero; [XmlIgnore] public LLVector3 m_attachedPos = LLVector3.Zero; - [XmlIgnore] public LLUUID fromAssetID = LLUUID.Zero; - - [XmlIgnore] public bool m_undoing = false; - - public Int32 CreationDate; - public uint ParentID = 0; + [XmlIgnore] public uint m_attachmentPoint = 0; + [XmlIgnore] public bool m_IsAttachment; private PhysicsVector m_lastRotationalVelocity = PhysicsVector.Zero; - private Vector3 m_sitTargetPosition = new Vector3(0, 0, 0); - private Quaternion m_sitTargetOrientation = new Quaternion(0, 0, 0, 1); - public LLUUID m_sitTargetAvatar = LLUUID.Zero; - [XmlIgnore] public PhysicsVector m_rotationAxis = new PhysicsVector(1f,1f,1f); - - #region Permissions - - public uint BaseMask = (uint)PermissionMask.All; - public uint OwnerMask = (uint)PermissionMask.All; - public uint GroupMask = (uint)PermissionMask.None; - public uint EveryoneMask = (uint)PermissionMask.None; - public uint NextOwnerMask = (uint)PermissionMask.All; - - private UndoStack m_undo = new UndoStack(5); - - public LLObject.ObjectFlags Flags = LLObject.ObjectFlags.None; - - public uint ObjectFlags - { - get { return (uint)Flags; } - set { Flags = (LLObject.ObjectFlags)value; } - } - - #endregion + protected SceneObjectGroup m_parentGroup; protected byte[] m_particleSystem = new byte[0]; - - [XmlIgnore] public uint TimeStampFull = 0; - [XmlIgnore] public uint TimeStampTerse = 0; - [XmlIgnore] public uint TimeStampLastActivity = 0; // Will be used for AutoReturn + [XmlIgnore] public PhysicsVector m_rotationAxis = new PhysicsVector(1f, 1f, 1f); + [XmlIgnore] private Dictionary m_scriptEvents = new Dictionary(); + public LLUUID m_sitTargetAvatar = LLUUID.Zero; + private Quaternion m_sitTargetOrientation = new Quaternion(0, 0, 0, 1); + private Vector3 m_sitTargetPosition = new Vector3(0, 0, 0); + [XmlIgnore] public bool m_undoing; /// /// Only used internally to schedule client updates. @@ -156,24 +124,44 @@ namespace OpenSim.Region.Environment.Scenes /// private byte m_updateFlag; + public byte ObjectSaleType; + public LLUUID OwnerID; + public int OwnershipCost; + public uint ParentID; + [XmlIgnore] public int[] PayPrice = {-2, -2, -2, -2, -2}; + [XmlIgnore] public PhysicsActor PhysActor; + public int SalePrice; + + [XmlIgnore] public uint TimeStampFull; + [XmlIgnore] public uint TimeStampLastActivity; // Will be used for AutoReturn + [XmlIgnore] public uint TimeStampTerse; + #region Properties - + public LLUUID CreatorID; - - public LLUUID ObjectCreator - { - get { return CreatorID; } - } - - protected LLUUID m_uuid; - - public LLUUID UUID - { - get { return m_uuid; } - set { m_uuid = value; } - } + protected LLVector3 m_acceleration; + protected LLVector3 m_angularVelocity; + private byte m_clickAction; + private Color m_color = Color.Black; + private string m_description = String.Empty; + protected LLVector3 m_groupPosition; + private int m_linkNum; protected uint m_localId; + protected LLObject.MaterialType m_material = 0; + + protected string m_name; + protected LLVector3 m_offsetPosition; + protected ulong m_regionHandle; + protected LLVector3 m_rotationalvelocity; + protected LLQuaternion m_rotationOffset; + protected PrimitiveBaseShape m_shape; + private string m_sitName = String.Empty; + private string m_text = String.Empty; + private byte[] m_TextureAnimation; + private string m_touchName = String.Empty; + protected LLUUID m_uuid; + protected LLVector3 m_velocity; public uint LocalId { @@ -181,145 +169,23 @@ namespace OpenSim.Region.Environment.Scenes set { m_localId = value; } } - protected string m_name; - - public virtual string Name + public scriptEvents ScriptEvents { - get { return m_name; } - set { m_name = value; } + get { return m_aggregateScriptEvents; } } - public scriptEvents ScriptEvents - { - get { return m_aggregateScriptEvents; } - } - - protected LLObject.MaterialType m_material = 0; - public byte Material { get { return (byte) m_material; } set { m_material = (LLObject.MaterialType) value; } } - protected ulong m_regionHandle; - public ulong RegionHandle { get { return m_regionHandle; } set { m_regionHandle = value; } } - public uint GetEffectiveObjectFlags() - { - LLObject.ObjectFlags f=Flags; - if(m_parentGroup == null || m_parentGroup.RootPart == this) - f &= ~(LLObject.ObjectFlags.Touch | LLObject.ObjectFlags.Money); - - return (uint)Flags | (uint)LocalFlags; - } - - //unkown if this will be kept, added as a way of removing the group position from the group class - protected LLVector3 m_groupPosition; - - /// - /// Method for a prim to get it's world position from the group. - /// Remember, the Group Position simply gives the position of the group itself - /// - /// A Linked Child Prim objects position in world - public LLVector3 GetWorldPosition() - { - - Quaternion parentRot = new Quaternion( - ParentGroup.RootPart.RotationOffset.W, - ParentGroup.RootPart.RotationOffset.X, - ParentGroup.RootPart.RotationOffset.Y, - ParentGroup.RootPart.RotationOffset.Z); - - Vector3 axPos - = new Vector3( - OffsetPosition.X, - OffsetPosition.Y, - OffsetPosition.Z); - - axPos = parentRot * axPos; - LLVector3 translationOffsetPosition = new LLVector3(axPos.x, axPos.y, axPos.z); - return GroupPosition + translationOffsetPosition; - - //return (new LLVector3(axiomPos.x, axiomPos.y, axiomPos.z) + AbsolutePosition); - } - - /// - /// Gets the rotation of this prim offset by the group rotation - /// - /// - public LLQuaternion GetWorldRotation() - { - - Quaternion newRot; - - if (this.LinkNum == 0) - { - newRot = new Quaternion(RotationOffset.W,RotationOffset.X,RotationOffset.Y,RotationOffset.Z); - - } - else - { - Quaternion parentRot = new Quaternion( - ParentGroup.RootPart.RotationOffset.W, - ParentGroup.RootPart.RotationOffset.X, - ParentGroup.RootPart.RotationOffset.Y, - ParentGroup.RootPart.RotationOffset.Z); - - Quaternion oldRot - = new Quaternion( - RotationOffset.W, - RotationOffset.X, - RotationOffset.Y, - RotationOffset.Z); - - newRot = parentRot * oldRot; - } - return new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); - - //return new LLQuaternion(axiomPartRotation.x, axiomPartRotation.y, axiomPartRotation.z, axiomPartRotation.w); - - } - - public void StoreUndoState() - { - if (!m_undoing) - { - if (m_parentGroup != null) - { - if (m_undo.Count > 0) - { - UndoState last = m_undo.Peek(); - if (last != null) - { - if (last.Compare(this)) - return; - } - } - - - if (m_parentGroup.GetSceneMaxUndo() > 0) - { - UndoState nUndo = new UndoState(this); - - m_undo.Push(nUndo); - - } - } - } - } - - public void ClearUndoState() - { - m_undo.Clear(); - StoreUndoState(); - } - public LLVector3 GroupPosition { get @@ -352,16 +218,13 @@ namespace OpenSim.Region.Environment.Scenes { try { - // Root prim actually goes at Position if (ParentID == 0) { PhysActor.Position = new PhysicsVector(value.X, value.Y, value.Z); - } else { - // To move the child prim in respect to the group position and rotation we have to calculate LLVector3 resultingposition = GetWorldPosition(); @@ -369,7 +232,7 @@ namespace OpenSim.Region.Environment.Scenes LLQuaternion resultingrot = GetWorldRotation(); PhysActor.Orientation = new Quaternion(resultingrot.W, resultingrot.X, resultingrot.Y, resultingrot.Z); } - + // Tell the physics engines that this prim changed. m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); } @@ -378,14 +241,9 @@ namespace OpenSim.Region.Environment.Scenes Console.WriteLine(e.Message); } } - } } - private byte[] m_TextureAnimation; - - protected LLVector3 m_offsetPosition; - public LLVector3 OffsetPosition { get { return m_offsetPosition; } @@ -393,31 +251,19 @@ namespace OpenSim.Region.Environment.Scenes { StoreUndoState(); m_offsetPosition = value; - try - { - // Hack to get the child prim to update world positions in the physics engine - ParentGroup.ResetChildPrimPhysicsPositions(); - - } - catch (NullReferenceException) - { - // Ignore, and skip over. - } - //m_log.Info("[PART]: OFFSET:" + m_offsetPosition.ToString()); + try + { + // Hack to get the child prim to update world positions in the physics engine + ParentGroup.ResetChildPrimPhysicsPositions(); + } + catch (NullReferenceException) + { + // Ignore, and skip over. + } + //m_log.Info("[PART]: OFFSET:" + m_offsetPosition.ToString()); } } - public LLVector3 AbsolutePosition - { - get { - if (m_IsAttachment) - return GroupPosition; - - return m_offsetPosition + m_groupPosition; } - } - - protected LLQuaternion m_rotationOffset; - public LLQuaternion RotationOffset { get @@ -466,13 +312,9 @@ namespace OpenSim.Region.Environment.Scenes Console.WriteLine(ex.Message); } } - } } - protected LLVector3 m_velocity; - protected LLVector3 m_rotationalvelocity; - /// public LLVector3 Velocity { @@ -493,8 +335,8 @@ namespace OpenSim.Region.Environment.Scenes return m_velocity; } - set { - + set + { m_velocity = value; if (PhysActor != null) { @@ -504,7 +346,6 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); } } - } } @@ -519,7 +360,7 @@ namespace OpenSim.Region.Environment.Scenes { if (PhysActor.IsPhysical) { - m_rotationalvelocity.FromBytes(PhysActor.RotationalVelocity.GetBytes(),0); + m_rotationalvelocity.FromBytes(PhysActor.RotationalVelocity.GetBytes(), 0); } } @@ -529,8 +370,6 @@ namespace OpenSim.Region.Environment.Scenes } - protected LLVector3 m_angularVelocity; - /// public LLVector3 AngularVelocity { @@ -538,8 +377,6 @@ namespace OpenSim.Region.Environment.Scenes set { m_angularVelocity = value; } } - protected LLVector3 m_acceleration; - /// public LLVector3 Acceleration { @@ -547,16 +384,6 @@ namespace OpenSim.Region.Environment.Scenes set { m_acceleration = value; } } - private string m_description = String.Empty; - - public string Description - { - get { return m_description; } - set { m_description = value; } - } - - private Color m_color = Color.Black; - public Color Color { get { return m_color; } @@ -564,7 +391,7 @@ namespace OpenSim.Region.Environment.Scenes { m_color = value; TriggerScriptChangedEvent(Changed.COLOR); - + /* ScheduleFullUpdate() need not be called b/c after * setting the color, the text will be set, so then * ScheduleFullUpdate() will be called. */ @@ -572,8 +399,6 @@ namespace OpenSim.Region.Environment.Scenes } } - private string m_text = String.Empty; - public Vector3 SitTargetPosition { get { return m_sitTargetPosition; } @@ -587,13 +412,93 @@ namespace OpenSim.Region.Environment.Scenes public string Text { get { return m_text; } + set { m_text = value; } + } + + public int LinkNum + { + get { return m_linkNum; } set { - m_text = value; + m_linkNum = value; + TriggerScriptChangedEvent(Changed.LINK); } } - private string m_sitName = String.Empty; + public byte ClickAction + { + get { return m_clickAction; } + set { m_clickAction = value; } + } + + public PrimitiveBaseShape Shape + { + get { return m_shape; } + set + { + m_shape = value; + TriggerScriptChangedEvent(Changed.SHAPE); + } + } + + public LLVector3 Scale + { + get { return m_shape.Scale; } + set + { + StoreUndoState(); + m_shape.Scale = value; + TriggerScriptChangedEvent(Changed.SCALE); + } + } + + public bool Stopped + { + get + { + double threshold = 0.02; + return (Math.Abs(Velocity.X) < threshold && + Math.Abs(Velocity.Y) < threshold && + Math.Abs(Velocity.Z) < threshold && + Math.Abs(AngularVelocity.X) < threshold && + Math.Abs(AngularVelocity.Y) < threshold && + Math.Abs(AngularVelocity.Z) < threshold); + } + } + + public LLUUID ObjectCreator + { + get { return CreatorID; } + } + + public LLUUID UUID + { + get { return m_uuid; } + set { m_uuid = value; } + } + + public virtual string Name + { + get { return m_name; } + set { m_name = value; } + } + + public LLVector3 AbsolutePosition + { + get + { + if (m_IsAttachment) + return GroupPosition; + + return m_offsetPosition + m_groupPosition; + } + } + + public string Description + { + get { return m_description; } + set { m_description = value; } + } public string SitName { @@ -601,39 +506,113 @@ namespace OpenSim.Region.Environment.Scenes set { m_sitName = value; } } - private string m_touchName = String.Empty; - public string TouchName { get { return m_touchName; } set { m_touchName = value; } } - private int m_linkNum = 0; - - public int LinkNum + public uint GetEffectiveObjectFlags() { - get { return m_linkNum; } - set - { - m_linkNum = value; - TriggerScriptChangedEvent(Changed.LINK); - - } + LLObject.ObjectFlags f = Flags; + if (m_parentGroup == null || m_parentGroup.RootPart == this) + f &= ~(LLObject.ObjectFlags.Touch | LLObject.ObjectFlags.Money); + + return (uint) Flags | (uint) LocalFlags; } - private byte m_clickAction = 0; - - public byte ClickAction + /// + /// Method for a prim to get it's world position from the group. + /// Remember, the Group Position simply gives the position of the group itself + /// + /// A Linked Child Prim objects position in world + public LLVector3 GetWorldPosition() { - get { return m_clickAction; } - set + Quaternion parentRot = new Quaternion( + ParentGroup.RootPart.RotationOffset.W, + ParentGroup.RootPart.RotationOffset.X, + ParentGroup.RootPart.RotationOffset.Y, + ParentGroup.RootPart.RotationOffset.Z); + + Vector3 axPos + = new Vector3( + OffsetPosition.X, + OffsetPosition.Y, + OffsetPosition.Z); + + axPos = parentRot * axPos; + LLVector3 translationOffsetPosition = new LLVector3(axPos.x, axPos.y, axPos.z); + return GroupPosition + translationOffsetPosition; + + //return (new LLVector3(axiomPos.x, axiomPos.y, axiomPos.z) + AbsolutePosition); + } + + /// + /// Gets the rotation of this prim offset by the group rotation + /// + /// + public LLQuaternion GetWorldRotation() + { + Quaternion newRot; + + if (LinkNum == 0) { - m_clickAction = value; + newRot = new Quaternion(RotationOffset.W, RotationOffset.X, RotationOffset.Y, RotationOffset.Z); + } + else + { + Quaternion parentRot = new Quaternion( + ParentGroup.RootPart.RotationOffset.W, + ParentGroup.RootPart.RotationOffset.X, + ParentGroup.RootPart.RotationOffset.Y, + ParentGroup.RootPart.RotationOffset.Z); + + Quaternion oldRot + = new Quaternion( + RotationOffset.W, + RotationOffset.X, + RotationOffset.Y, + RotationOffset.Z); + + newRot = parentRot * oldRot; + } + return new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); + + //return new LLQuaternion(axiomPartRotation.x, axiomPartRotation.y, axiomPartRotation.z, axiomPartRotation.w); + } + + public void StoreUndoState() + { + if (!m_undoing) + { + if (m_parentGroup != null) + { + if (m_undo.Count > 0) + { + UndoState last = m_undo.Peek(); + if (last != null) + { + if (last.Compare(this)) + return; + } + } + + + if (m_parentGroup.GetSceneMaxUndo() > 0) + { + UndoState nUndo = new UndoState(this); + + m_undo.Push(nUndo); + } + } } } - protected PrimitiveBaseShape m_shape; + public void ClearUndoState() + { + m_undo.Clear(); + StoreUndoState(); + } /// /// hook to the physics scene to apply impulse @@ -645,20 +624,17 @@ namespace OpenSim.Region.Environment.Scenes public void ApplyImpulse(LLVector3 impulsei, bool localGlobalTF) { PhysicsVector impulse = new PhysicsVector(impulsei.X, impulsei.Y, impulsei.Z); - + if (localGlobalTF) { - LLQuaternion grot = GetWorldRotation(); - Quaternion AXgrot = new Quaternion(grot.W,grot.X,grot.Y,grot.Z); + Quaternion AXgrot = new Quaternion(grot.W, grot.X, grot.Y, grot.Z); Vector3 AXimpulsei = new Vector3(impulsei.X, impulsei.Y, impulsei.Z); Vector3 newimpulse = AXgrot * AXimpulsei; impulse = new PhysicsVector(newimpulse.x, newimpulse.y, newimpulse.z); - } else { - if (m_parentGroup != null) { m_parentGroup.applyImpulse(impulse); @@ -676,7 +652,6 @@ namespace OpenSim.Region.Environment.Scenes { StopMoveToTarget(); } - } public void StopMoveToTarget() @@ -689,55 +664,47 @@ namespace OpenSim.Region.Environment.Scenes if (m_parentGroup != null) { if (m_parentGroup.Scene != null) - m_parentGroup.Scene.TriggerObjectChanged(LocalId, (uint)val); - } - - } - - public PrimitiveBaseShape Shape - { - get { return m_shape; } - set - { - - m_shape = value; - TriggerScriptChangedEvent(Changed.SHAPE); - } - } - - public LLVector3 Scale - { - get { return m_shape.Scale; } - set - { - StoreUndoState(); - m_shape.Scale = value; - TriggerScriptChangedEvent(Changed.SCALE); - } - } - - public bool Stopped - { - get { - double threshold = 0.02; - return (Math.Abs(Velocity.X) < threshold && - Math.Abs(Velocity.Y) < threshold && - Math.Abs(Velocity.Z) < threshold && - Math.Abs(AngularVelocity.X) < threshold && - Math.Abs(AngularVelocity.Y) < threshold && - Math.Abs(AngularVelocity.Z) < threshold); + m_parentGroup.Scene.TriggerObjectChanged(LocalId, (uint) val); } } #endregion - - public LLUUID ObjectOwner + + #region Permissions + + private readonly UndoStack m_undo = new UndoStack(5); + public uint BaseMask = (uint) PermissionMask.All; + public uint EveryoneMask = (uint) PermissionMask.None; + + public LLObject.ObjectFlags Flags = LLObject.ObjectFlags.None; + public uint GroupMask = (uint) PermissionMask.None; + public uint NextOwnerMask = (uint) PermissionMask.All; + public uint OwnerMask = (uint) PermissionMask.All; + + public uint ObjectFlags { - get { return OwnerID; } + get { return (uint) Flags; } + set { Flags = (LLObject.ObjectFlags) value; } } - // FIXME, TODO, ERROR: 'ParentGroup' can't be in here, move it out. - protected SceneObjectGroup m_parentGroup; + #endregion + + protected SceneObjectPart(SerializationInfo info, StreamingContext context) + { + //System.Console.WriteLine("SceneObjectPart Deserialize BGN"); + + if (info == null) + { + throw new ArgumentNullException("info"); + } + + /* + m_queue = (Queue)info.GetValue("m_queue", typeof(Queue)); + m_ids = (List)info.GetValue("m_ids", typeof(List)); + */ + + //System.Console.WriteLine("SceneObjectPart Deserialize END"); + } public SceneObjectGroup ParentGroup { @@ -758,7 +725,7 @@ namespace OpenSim.Region.Environment.Scenes public SceneObjectPart() { // It's not necessary to persist this - m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp"; + m_inventoryFileName = "inventory_" + LLUUID.Random() + ".tmp"; m_TextureAnimation = new byte[0]; } @@ -790,13 +757,13 @@ namespace OpenSim.Region.Environment.Scenes CreatorID = OwnerID; LastOwnerID = LLUUID.Zero; UUID = LLUUID.Random(); - LocalId = (uint) (localID); + LocalId = (localID); Shape = shape; // Todo: Add More Object Parameter from above! OwnershipCost = 0; - ObjectSaleType = (byte) 0; + ObjectSaleType = 0; SalePrice = 0; - Category = (uint) 0; + Category = 0; LastOwnerID = CreatorID; // End Todo: /// GroupPosition = groupPosition; @@ -807,20 +774,20 @@ namespace OpenSim.Region.Environment.Scenes AngularVelocity = new LLVector3(0, 0, 0); Acceleration = new LLVector3(0, 0, 0); m_TextureAnimation = new byte[0]; - m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp"; - + m_inventoryFileName = "inventory_" + LLUUID.Random() + ".tmp"; + // Prims currently only contain a single folder (Contents). From looking at the Second Life protocol, // this appears to have the same UUID (!) as the prim. If this isn't the case, one can't drag items from // the prim into an agent inventory (Linden client reports that the "Object not found for drop" in its log m_folderID = UUID; Flags = 0; - Flags |= LLObject.ObjectFlags.AllowInventoryDrop | - LLObject.ObjectFlags.CreateSelected; + Flags |= LLObject.ObjectFlags.AllowInventoryDrop | + LLObject.ObjectFlags.CreateSelected; TrimPermissions(); //m_undo = new UndoStack(ParentGroup.GetSceneMaxUndo()); - + ScheduleFullUpdate(); } @@ -846,29 +813,149 @@ namespace OpenSim.Region.Environment.Scenes CreatorID = creatorID; LastOwnerID = lastOwnerID; UUID = LLUUID.Random(); - LocalId = (uint) (localID); + LocalId = (localID); Shape = shape; OwnershipCost = 0; - ObjectSaleType = (byte) 0; + ObjectSaleType = 0; SalePrice = 0; - Category = (uint) 0; + Category = 0; LastOwnerID = CreatorID; OffsetPosition = position; RotationOffset = rotation; ObjectFlags = flags; - + // Since we don't store script state, this is only a 'temporary' objectflag now // If the object is scripted, the script will get loaded and this will be set again - ObjectFlags &= ~(uint)(LLObject.ObjectFlags.Scripted | LLObject.ObjectFlags.Touch); - + ObjectFlags &= ~(uint) (LLObject.ObjectFlags.Scripted | LLObject.ObjectFlags.Touch); + TrimPermissions(); // ApplyPhysics(); - + ScheduleFullUpdate(); } #endregion + #region IScriptHost Members + + public LLUUID ObjectOwner + { + get { return OwnerID; } + } + + public void SetText(string text, Vector3 color, double alpha) + { + Color = Color.FromArgb(0xff - (int) (alpha * 0xff), + (int) (color.x * 0xff), + (int) (color.y * 0xff), + (int) (color.z * 0xff)); + SetText(text); + } + + #endregion + + #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_inventoryFileName", m_inventoryFileName); + info.AddValue("m_folderID", m_folderID.UUID); + info.AddValue("PhysActor", PhysActor); + + Dictionary TaskInventory_work = new Dictionary(); + + foreach (LLUUID id in TaskInventory.Keys) + { + TaskInventory_work.Add(id.UUID, TaskInventory[id]); + } + + info.AddValue("TaskInventory", TaskInventory_work); + + info.AddValue("LastOwnerID", LastOwnerID.UUID); + info.AddValue("OwnerID", OwnerID.UUID); + info.AddValue("GroupID", GroupID.UUID); + + info.AddValue("OwnershipCost", OwnershipCost); + info.AddValue("ObjectSaleType", ObjectSaleType); + info.AddValue("SalePrice", SalePrice); + info.AddValue("Category", Category); + + info.AddValue("CreationDate", CreationDate); + info.AddValue("ParentID", ParentID); + + info.AddValue("OwnerMask", OwnerMask); + info.AddValue("NextOwnerMask", NextOwnerMask); + info.AddValue("GroupMask", GroupMask); + info.AddValue("EveryoneMask", EveryoneMask); + info.AddValue("BaseMask", BaseMask); + + info.AddValue("m_particleSystem", m_particleSystem); + + info.AddValue("TimeStampFull", TimeStampFull); + info.AddValue("TimeStampTerse", TimeStampTerse); + info.AddValue("TimeStampLastActivity", TimeStampLastActivity); + + info.AddValue("m_updateFlag", m_updateFlag); + info.AddValue("CreatorID", CreatorID.UUID); + + info.AddValue("m_inventorySerial", m_inventorySerial); + info.AddValue("m_uuid", m_uuid.UUID); + info.AddValue("m_localID", m_localId); + info.AddValue("m_name", m_name); + info.AddValue("m_flags", Flags); + info.AddValue("m_material", m_material); + info.AddValue("m_regionHandle", m_regionHandle); + + info.AddValue("m_groupPosition.X", m_groupPosition.X); + info.AddValue("m_groupPosition.Y", m_groupPosition.Y); + info.AddValue("m_groupPosition.Z", m_groupPosition.Z); + + info.AddValue("m_offsetPosition.X", m_offsetPosition.X); + info.AddValue("m_offsetPosition.Y", m_offsetPosition.Y); + info.AddValue("m_offsetPosition.Z", m_offsetPosition.Z); + + info.AddValue("m_rotationOffset.W", m_rotationOffset.W); + info.AddValue("m_rotationOffset.X", m_rotationOffset.X); + info.AddValue("m_rotationOffset.Y", m_rotationOffset.Y); + info.AddValue("m_rotationOffset.Z", m_rotationOffset.Z); + + info.AddValue("m_velocity.X", m_velocity.X); + info.AddValue("m_velocity.Y", m_velocity.Y); + info.AddValue("m_velocity.Z", m_velocity.Z); + + info.AddValue("m_rotationalvelocity.X", m_rotationalvelocity.X); + info.AddValue("m_rotationalvelocity.Y", m_rotationalvelocity.Y); + info.AddValue("m_rotationalvelocity.Z", m_rotationalvelocity.Z); + + info.AddValue("m_angularVelocity.X", m_angularVelocity.X); + info.AddValue("m_angularVelocity.Y", m_angularVelocity.Y); + info.AddValue("m_angularVelocity.Z", m_angularVelocity.Z); + + info.AddValue("m_acceleration.X", m_acceleration.X); + info.AddValue("m_acceleration.Y", m_acceleration.Y); + info.AddValue("m_acceleration.Z", m_acceleration.Z); + + info.AddValue("m_description", m_description); + info.AddValue("m_color", m_color); + info.AddValue("m_text", m_text); + info.AddValue("m_sitName", m_sitName); + info.AddValue("m_touchName", m_touchName); + info.AddValue("m_clickAction", m_clickAction); + info.AddValue("m_shape", m_shape); + info.AddValue("m_parentGroup", m_parentGroup); + info.AddValue("PayPrice", PayPrice); + } + + #endregion + /// /// Restore this part from the serialized xml representation. /// @@ -881,10 +968,9 @@ namespace OpenSim.Region.Environment.Scenes return newobject; } - + public void ApplyPhysics(uint rootObjectFlags, bool m_physicalPrim) { - bool isPhysical = (((rootObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0) && m_physicalPrim); bool isPhantom = ((rootObjectFlags & (uint) LLObject.ObjectFlags.Phantom) != 0); @@ -902,7 +988,7 @@ namespace OpenSim.Region.Environment.Scenes new PhysicsVector(Scale.X, Scale.Y, Scale.Z), new Quaternion(RotationOffset.W, RotationOffset.X, RotationOffset.Y, RotationOffset.Z), RigidBody); - + // Basic Physics returns null.. joy joy joy. if (PhysActor != null) { @@ -918,18 +1004,15 @@ namespace OpenSim.Region.Environment.Scenes OwnerMask = NextOwnerMask; TriggerScriptChangedEvent(Changed.OWNER); - } public void TrimPermissions() { - - BaseMask &= (uint)PermissionMask.All; - OwnerMask &= (uint)PermissionMask.All; - GroupMask &= (uint)PermissionMask.All; - EveryoneMask &= (uint)PermissionMask.All; - NextOwnerMask &= (uint)PermissionMask.All; - + BaseMask &= (uint) PermissionMask.All; + OwnerMask &= (uint) PermissionMask.All; + GroupMask &= (uint) PermissionMask.All; + EveryoneMask &= (uint) PermissionMask.All; + NextOwnerMask &= (uint) PermissionMask.All; } /// @@ -963,25 +1046,24 @@ namespace OpenSim.Region.Environment.Scenes Vector3 rOrigin = iray.Origin; Vector3 rDirection = iray.Direction; - //rDirection = rDirection.Normalize(); // Buidling the first part of the Quadratic equation - Vector3 r2ndDirection = rDirection*rDirection; + Vector3 r2ndDirection = rDirection * rDirection; float itestPart1 = r2ndDirection.x + r2ndDirection.y + r2ndDirection.z; // Buidling the second part of the Quadratic equation Vector3 tmVal2 = rOrigin - vAbsolutePosition; - Vector3 r2Direction = rDirection*2.0f; - Vector3 tmVal3 = r2Direction*tmVal2; + Vector3 r2Direction = rDirection * 2.0f; + Vector3 tmVal3 = r2Direction * tmVal2; float itestPart2 = tmVal3.x + tmVal3.y + tmVal3.z; // Buidling the third part of the Quadratic equation - Vector3 tmVal4 = rOrigin*rOrigin; - Vector3 tmVal5 = vAbsolutePosition*vAbsolutePosition; + Vector3 tmVal4 = rOrigin * rOrigin; + Vector3 tmVal5 = vAbsolutePosition * vAbsolutePosition; - Vector3 tmVal6 = vAbsolutePosition*rOrigin; + Vector3 tmVal6 = vAbsolutePosition * rOrigin; // Set Radius to the largest dimention of the prim @@ -1003,21 +1085,21 @@ namespace OpenSim.Region.Environment.Scenes //radius = radius; float itestPart3 = tmVal4.x + tmVal4.y + tmVal4.z + tmVal5.x + tmVal5.y + tmVal5.z - - (2.0f*(tmVal6.x + tmVal6.y + tmVal6.z + (radius*radius))); + (2.0f * (tmVal6.x + tmVal6.y + tmVal6.z + (radius * radius))); // Yuk Quadradrics.. Solve first - float rootsqr = (itestPart2*itestPart2) - (4.0f*itestPart1*itestPart3); + float rootsqr = (itestPart2 * itestPart2) - (4.0f * itestPart1 * itestPart3); if (rootsqr < 0.0f) { // No intersection return returnresult; } - float root = ((-itestPart2) - (float) Math.Sqrt((double) rootsqr))/(itestPart1*2.0f); + float root = ((-itestPart2) - (float) Math.Sqrt(rootsqr)) / (itestPart1 * 2.0f); if (root < 0.0f) { // perform second quadratic root solution - root = ((-itestPart2) + (float) Math.Sqrt((double) rootsqr))/(itestPart1*2.0f); + root = ((-itestPart2) + (float) Math.Sqrt(rootsqr)) / (itestPart1 * 2.0f); // is there any intersection? if (root < 0.0f) @@ -1030,8 +1112,8 @@ namespace OpenSim.Region.Environment.Scenes // We got an intersection. putting together an EntityIntersection object with the // intersection information Vector3 ipoint = - new Vector3(iray.Origin.x + (iray.Direction.x*root), iray.Origin.y + (iray.Direction.y*root), - iray.Origin.z + (iray.Direction.z*root)); + new Vector3(iray.Origin.x + (iray.Direction.x * root), iray.Origin.y + (iray.Direction.y * root), + iray.Origin.z + (iray.Direction.z * root)); returnresult.HitTF = true; returnresult.ipoint = ipoint; @@ -1092,7 +1174,7 @@ namespace OpenSim.Region.Environment.Scenes // Variables prefixed with AX are Axiom.Math copies of the LL variety. - Quaternion AXrot = new Quaternion(rot.W,rot.X,rot.Y,rot.Z); + Quaternion AXrot = new Quaternion(rot.W, rot.X, rot.Y, rot.Z); AXrot.Normalize(); Vector3 AXpos = new Vector3(pos.X, pos.Y, pos.Z); @@ -1101,31 +1183,33 @@ namespace OpenSim.Region.Environment.Scenes // it's different for each vertex because we've got to rotate it // to get the world position of the vertex to produce the Oriented Bounding Box - Vector3 tScale = new Vector3(); + Vector3 tScale = new Vector3(); Vector3 AXscale = new Vector3(m_shape.Scale.X * 0.5f, m_shape.Scale.Y * 0.5f, m_shape.Scale.Z * 0.5f); //Vector3 pScale = (AXscale) - (AXrot.Inverse() * (AXscale)); //Vector3 nScale = (AXscale * -1) - (AXrot.Inverse() * (AXscale * -1)); - + // rScale is the rotated offset to find a vertex based on the scale and the world rotation. Vector3 rScale = new Vector3(); // Get Vertexes for Faces Stick them into ABCD for each Face // Form: Face[face] that corresponds to the below diagram + #region ABCD Face Vertex Map Comment Diagram + // A _________ B // | | // | 4 top | // |_________| // C D - + // A _________ B // | Back | // | 3 | // |_________| // C D - + // A _________ B B _________ A // | Left | | Right | // | 0 | | 2 | @@ -1143,13 +1227,15 @@ namespace OpenSim.Region.Environment.Scenes // | 5 bot | // |_________| // A B + #endregion #region Plane Decomposition of Oriented Bounding Box + tScale = new Vector3(AXscale.x, -AXscale.y, AXscale.z); rScale = ((AXrot * tScale)); vertexes[0] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[0].x = pos.X + vertexes[0].x; + // vertexes[0].x = pos.X + vertexes[0].x; //vertexes[0].y = pos.Y + vertexes[0].y; //vertexes[0].z = pos.Z + vertexes[0].z; @@ -1161,8 +1247,8 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[1] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[1].x = pos.X + vertexes[1].x; - // vertexes[1].y = pos.Y + vertexes[1].y; + // vertexes[1].x = pos.X + vertexes[1].x; + // vertexes[1].y = pos.Y + vertexes[1].y; //vertexes[1].z = pos.Z + vertexes[1].z; FaceB[0] = vertexes[1]; @@ -1187,8 +1273,8 @@ namespace OpenSim.Region.Environment.Scenes vertexes[3] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); //vertexes[3].x = pos.X + vertexes[3].x; - // vertexes[3].y = pos.Y + vertexes[3].y; - // vertexes[3].z = pos.Z + vertexes[3].z; + // vertexes[3].y = pos.Y + vertexes[3].y; + // vertexes[3].z = pos.Z + vertexes[3].z; FaceD[0] = vertexes[3]; FaceC[1] = vertexes[3]; @@ -1198,9 +1284,9 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[4] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[4].x = pos.X + vertexes[4].x; - // vertexes[4].y = pos.Y + vertexes[4].y; - // vertexes[4].z = pos.Z + vertexes[4].z; + // vertexes[4].x = pos.X + vertexes[4].x; + // vertexes[4].y = pos.Y + vertexes[4].y; + // vertexes[4].z = pos.Z + vertexes[4].z; FaceB[1] = vertexes[4]; FaceA[2] = vertexes[4]; @@ -1210,9 +1296,9 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[5] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[5].x = pos.X + vertexes[5].x; - // vertexes[5].y = pos.Y + vertexes[5].y; - // vertexes[5].z = pos.Z + vertexes[5].z; + // vertexes[5].x = pos.X + vertexes[5].x; + // vertexes[5].y = pos.Y + vertexes[5].y; + // vertexes[5].z = pos.Z + vertexes[5].z; FaceD[1] = vertexes[5]; FaceC[2] = vertexes[5]; @@ -1222,9 +1308,9 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[6] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[6].x = pos.X + vertexes[6].x; - // vertexes[6].y = pos.Y + vertexes[6].y; - // vertexes[6].z = pos.Z + vertexes[6].z; + // vertexes[6].x = pos.X + vertexes[6].x; + // vertexes[6].y = pos.Y + vertexes[6].y; + // vertexes[6].z = pos.Z + vertexes[6].z; FaceB[2] = vertexes[6]; FaceA[3] = vertexes[6]; @@ -1234,35 +1320,36 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[7] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[7].x = pos.X + vertexes[7].x; - // vertexes[7].y = pos.Y + vertexes[7].y; - // vertexes[7].z = pos.Z + vertexes[7].z; + // vertexes[7].x = pos.X + vertexes[7].x; + // vertexes[7].y = pos.Y + vertexes[7].y; + // vertexes[7].z = pos.Z + vertexes[7].z; FaceD[2] = vertexes[7]; FaceC[3] = vertexes[7]; FaceD[5] = vertexes[7]; + #endregion // Get our plane normals for (int i = 0; i < 6; i++) { //m_log.Info("[FACECALCULATION]: FaceA[" + i + "]=" + FaceA[i] + " FaceB[" + i + "]=" + FaceB[i] + " FaceC[" + i + "]=" + FaceC[i] + " FaceD[" + i + "]=" + FaceD[i]); - + // Our Plane direction AmBa = FaceA[i] - FaceB[i]; AmBb = FaceB[i] - FaceC[i]; - + cross = AmBb.Cross(AmBa); // normalize the cross product to get the normal. - normals[i] = cross / cross.Length; - + normals[i] = cross / cross.Length; + //m_log.Info("[NORMALS]: normals[ " + i + "]" + normals[i].ToString()); //distance[i] = (normals[i].x * AmBa.x + normals[i].y * AmBa.y + normals[i].z * AmBa.z) * -1; } EntityIntersection returnresult = new EntityIntersection(); - + returnresult.distance = 1024; float c = 0; float a = 0; @@ -1270,57 +1357,59 @@ namespace OpenSim.Region.Environment.Scenes Vector3 q = new Vector3(); #region OBB Version 2 Experiment + //float fmin = 999999; //float fmax = -999999; //float s = 0; //for (int i=0;i<6;i++) //{ - //s = iray.Direction.Dot(normals[i]); - //d = normals[i].Dot(FaceB[i]); + //s = iray.Direction.Dot(normals[i]); + //d = normals[i].Dot(FaceB[i]); - //if (s == 0) - //{ - //if (iray.Origin.Dot(normals[i]) > d) - //{ - //return returnresult; - //} - // else - //{ - //continue; - //} - //} - //a = (d - iray.Origin.Dot(normals[i])) / s; - //if ( iray.Direction.Dot(normals[i]) < 0) - //{ - //if (a > fmax) - //{ - //if (a > fmin) - //{ - //return returnresult; - //} - //fmax = a; - //} + //if (s == 0) + //{ + //if (iray.Origin.Dot(normals[i]) > d) + //{ + //return returnresult; + //} + // else + //{ + //continue; + //} + //} + //a = (d - iray.Origin.Dot(normals[i])) / s; + //if ( iray.Direction.Dot(normals[i]) < 0) + //{ + //if (a > fmax) + //{ + //if (a > fmin) + //{ + //return returnresult; + //} + //fmax = a; + //} - //} - //else - //{ - //if (a < fmin) - //{ - //if (a < 0 || a < fmax) - //{ - //return returnresult; - //} - //fmin = a; - //} - //} + //} + //else + //{ + //if (a < fmin) + //{ + //if (a < 0 || a < fmax) + //{ + //return returnresult; + //} + //fmin = a; + //} + //} //} //if (fmax > 0) // a= fmax; //else - // a=fmin; + // a=fmin; //q = iray.Origin + a * iray.Direction; + #endregion // Loop over faces (6 of them) @@ -1341,7 +1430,6 @@ namespace OpenSim.Region.Environment.Scenes // If the normal is pointing outside the object if (iray.Direction.Dot(normals[i]) < 0 || !frontFacesOnly) { - if (faceCenters) { q = AXpos + a * AAfacenormals[i]; //(FaceA[i] + FaceB[i] + FaceC[1] + FaceD[i]) / 4f; @@ -1351,13 +1439,13 @@ namespace OpenSim.Region.Environment.Scenes q = iray.Origin + a * iray.Direction; } - float distance2 = (float)GetDistanceTo(q, AXpos); + float distance2 = (float) GetDistanceTo(q, AXpos); // Is this the closest hit to the object's origin? if (faceCenters) { - distance2 = (float)GetDistanceTo(q, iray.Origin); + distance2 = (float) GetDistanceTo(q, iray.Origin); } - + if (distance2 < returnresult.distance) { @@ -1368,14 +1456,12 @@ namespace OpenSim.Region.Environment.Scenes //m_log.Info("[POINT]: " + q.ToString()); returnresult.normal = normals[i]; returnresult.AAfaceNormal = AAfacenormals[i]; - } } - } return returnresult; } - + // Use this for attachments! LocalID should be avatar's localid public void SetParentLocalId(uint localID) { @@ -1385,14 +1471,14 @@ namespace OpenSim.Region.Environment.Scenes public void SetAttachmentPoint(uint AttachmentPoint) { m_attachmentPoint = AttachmentPoint; - + // save the attachment point. //if (AttachmentPoint != 0) //{ - m_shape.State = (byte)AttachmentPoint; + m_shape.State = (byte) AttachmentPoint; //} - } + /// /// /// @@ -1414,13 +1500,12 @@ namespace OpenSim.Region.Environment.Scenes PhysActor.Buoyancy = fvalue; } } - + public void SetAxisRotation(int axis, int rotate) { if (m_parentGroup != null) { m_parentGroup.SetAxisRotation(axis, rotate); - } } @@ -1442,10 +1527,9 @@ namespace OpenSim.Region.Environment.Scenes { PhysActor.FloatOnWater = false; } - } } - + public LLVector3 GetSitTargetPositionLL() { @@ -1516,53 +1600,6 @@ namespace OpenSim.Region.Environment.Scenes return part; } - #region Copying - - /// - /// Duplicates this part. - /// - /// - public SceneObjectPart Copy(uint localID, LLUUID AgentID, LLUUID GroupID, int linkNum) - { - SceneObjectPart dupe = (SceneObjectPart) MemberwiseClone(); - dupe.m_shape = m_shape.Copy(); - dupe.m_regionHandle = m_regionHandle; - dupe.UUID = LLUUID.Random(); - dupe.LocalId = localID; - dupe.OwnerID = AgentID; - dupe.GroupID = GroupID; - dupe.GroupPosition = new LLVector3(GroupPosition.X, GroupPosition.Y, GroupPosition.Z); - dupe.OffsetPosition = new LLVector3(OffsetPosition.X, OffsetPosition.Y, OffsetPosition.Z); - dupe.RotationOffset = - new LLQuaternion(RotationOffset.X, RotationOffset.Y, RotationOffset.Z, RotationOffset.W); - dupe.Velocity = new LLVector3(0, 0, 0); - dupe.Acceleration = new LLVector3(0, 0, 0); - dupe.AngularVelocity = new LLVector3(0, 0, 0); - dupe.ObjectFlags = ObjectFlags; - - dupe.OwnershipCost = OwnershipCost; - dupe.ObjectSaleType = ObjectSaleType; - dupe.SalePrice = SalePrice; - dupe.Category = Category; - - dupe.TaskInventory = (TaskInventoryDictionary)dupe.TaskInventory.Clone(); - - dupe.ResetIDs(linkNum); - - // This may be wrong... it might have to be applied in SceneObjectGroup to the object that's being duplicated. - dupe.LastOwnerID = ObjectOwner; - - byte[] extraP = new byte[Shape.ExtraParams.Length]; - Array.Copy(Shape.ExtraParams, extraP, extraP.Length); - dupe.Shape.ExtraParams = extraP; - bool UsePhysics = ((dupe.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0); - dupe.DoPhysicsPropertyUpdate(UsePhysics, true); - - return dupe; - } - - #endregion - /// /// Reset LLUUIDs for this part. This involves generate this part's own LLUUID and /// generating new LLUUIDs for all the items in the inventory. @@ -1571,11 +1608,395 @@ namespace OpenSim.Region.Environment.Scenes public void ResetIDs(int linkNum) { UUID = LLUUID.Random(); - LinkNum = linkNum; - + LinkNum = linkNum; + ResetInventoryIDs(); } + public void UpdatePermissions(LLUUID AgentID, byte field, uint localID, uint mask, byte addRemTF) + { + bool set = addRemTF == 1; + + // Are we the owner? + if (AgentID == OwnerID) + { + switch (field) + { + case 2: + OwnerMask = ApplyMask(OwnerMask, set, mask); + break; + case 4: + GroupMask = ApplyMask(GroupMask, set, mask); + break; + case 8: + EveryoneMask = ApplyMask(EveryoneMask, set, mask); + break; + case 16: + NextOwnerMask = ApplyMask(NextOwnerMask, set, mask); + break; + } + SendFullUpdateToAllClients(); + + SendObjectPropertiesToClient(AgentID); + } + } + + private void SendObjectPropertiesToClient(LLUUID AgentID) + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + // Ugly reference :( + if (avatars[i].UUID == AgentID) + { + m_parentGroup.GetProperties(avatars[i].ControllingClient); + } + } + } + + private uint ApplyMask(uint val, bool set, uint mask) + { + if (set) + { + return val |= mask; + } + else + { + return val &= ~mask; + } + } + + public virtual void UpdateMovement() + { + } + + public void PhysicsOutOfBounds(PhysicsVector pos) + { + m_log.Info("[PHYSICS]: Physical Object went out of bounds."); + RemFlag(LLObject.ObjectFlags.Physics); + DoPhysicsPropertyUpdate(false, true); + //m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); + } + + public virtual void OnGrab(LLVector3 offsetPos, IClientAPI remoteClient) + { + } + + + public void SetText(string text) + { + Text = text; + ScheduleFullUpdate(); + } + + public int registerTargetWaypoint(LLVector3 target, float tolerance) + { + if (m_parentGroup != null) + { + return m_parentGroup.registerTargetWaypoint(target, tolerance); + } + return 0; + } + + public void unregisterTargetWaypoint(int handle) + { + if (m_parentGroup != null) + { + m_parentGroup.unregisterTargetWaypoint(handle); + } + } + + + public void Undo() + { + if (m_undo.Count > 0) + { + UndoState goback = m_undo.Pop(); + if (goback != null) + goback.PlaybackState(this); + } + } + + public void SetScriptEvents(LLUUID scriptid, int events) + { + scriptEvents oldparts; + lock (m_scriptEvents) + { + if (m_scriptEvents.ContainsKey(scriptid)) + { + oldparts = m_scriptEvents[scriptid]; + + // remove values from aggregated script events + m_scriptEvents[scriptid] = (scriptEvents) events; + } + else + { + m_scriptEvents.Add(scriptid, (scriptEvents) events); + } + } + aggregateScriptEvents(); + } + + public void RemoveScriptEvents(LLUUID scriptid) + { + lock (m_scriptEvents) + { + if (m_scriptEvents.ContainsKey(scriptid)) + { + scriptEvents oldparts = scriptEvents.None; + oldparts = m_scriptEvents[scriptid]; + + // remove values from aggregated script events + m_aggregateScriptEvents &= ~oldparts; + m_scriptEvents.Remove(scriptid); + } + } + aggregateScriptEvents(); + } + + public void aggregateScriptEvents() + { + // Aggregate script events + lock (m_scriptEvents) + { + foreach (scriptEvents s in m_scriptEvents.Values) + { + m_aggregateScriptEvents |= s; + } + } + + uint objectflagupdate = 0; + + if ( + ((m_aggregateScriptEvents & scriptEvents.touch) != 0) || + ((m_aggregateScriptEvents & scriptEvents.touch_end) != 0) || + ((m_aggregateScriptEvents & scriptEvents.touch_start) != 0) + ) + { + objectflagupdate |= (uint) LLObject.ObjectFlags.Touch; + } + + if ((m_aggregateScriptEvents & scriptEvents.money) != 0) + { + objectflagupdate |= (uint) LLObject.ObjectFlags.Money; + } + + if ( + ((m_aggregateScriptEvents & scriptEvents.collision) != 0) || + ((m_aggregateScriptEvents & scriptEvents.collision_end) != 0) || + ((m_aggregateScriptEvents & scriptEvents.collision_start) != 0) + ) + { + // subscribe to physics updates. + } + + LocalFlags = (LLObject.ObjectFlags) objectflagupdate; + + if (m_parentGroup != null && m_parentGroup.RootPart == this) + m_parentGroup.aggregateScriptEvents(); + else + ScheduleFullUpdate(); + } + + #region Events + + public void PhysicsRequestingTerseUpdate() + { + if (PhysActor != null) + { + LLVector3 newpos = new LLVector3(PhysActor.Position.GetBytes(), 0); + if (newpos.X > 257f || newpos.X < -1f || newpos.Y > 257f || newpos.Y < -1f) + { + m_parentGroup.AbsolutePosition = newpos; + return; + } + } + ScheduleTerseUpdate(); + + //SendTerseUpdateToAllClients(); + } + + #endregion + + #region Client Update Methods + + /// + /// Tell all scene presences that they should send updates for this part to their clients + /// + public void AddFullUpdateToAllAvatars() + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + avatars[i].QueuePartForUpdate(this); + } + } + + public void SendFullUpdateToAllClientsExcept(LLUUID agentID) + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + // Ugly reference :( + if (avatars[i].UUID != agentID) + { + m_parentGroup.SendPartFullUpdate(avatars[i].ControllingClient, this, + avatars[i].GenerateClientFlags(UUID)); + } + } + } + + + public void AddFullUpdateToAvatar(ScenePresence presence) + { + presence.QueuePartForUpdate(this); + } + + /// + /// + /// + public void SendFullUpdateToAllClients() + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + // Ugly reference :( + m_parentGroup.SendPartFullUpdate(avatars[i].ControllingClient, this, + avatars[i].GenerateClientFlags(UUID)); + } + } + + /// + /// + /// + /// + public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) + { + m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags); + } + + /// + /// Sends a full update to the client + /// + /// + /// + public void SendFullUpdateToClient(IClientAPI remoteClient, uint clientflags) + { + LLVector3 lPos; + lPos = OffsetPosition; + SendFullUpdateToClient(remoteClient, lPos, clientflags); + } + + /// + /// Sends a full update to the client + /// + /// + /// + /// + public void SendFullUpdateToClient(IClientAPI remoteClient, LLVector3 lPos, uint clientFlags) + { + LLQuaternion lRot; + lRot = RotationOffset; + clientFlags &= ~(uint) LLObject.ObjectFlags.CreateSelected; + + if (remoteClient.AgentId == OwnerID) + { + if ((uint) (Flags & LLObject.ObjectFlags.CreateSelected) != 0) + { + clientFlags |= (uint) LLObject.ObjectFlags.CreateSelected; + Flags &= ~LLObject.ObjectFlags.CreateSelected; + } + } + + + byte[] color = new[] {m_color.R, m_color.G, m_color.B, m_color.A}; + remoteClient.SendPrimitiveToClient(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, m_shape, lPos, clientFlags, + m_uuid, + OwnerID, + m_text, color, ParentID, m_particleSystem, lRot, m_clickAction, m_TextureAnimation, m_IsAttachment, + m_attachmentPoint, fromAssetID); + } + + /// Terse updates + public void AddTerseUpdateToAllAvatars() + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + avatars[i].QueuePartForUpdate(this); + } + } + + public void AddTerseUpdateToAvatar(ScenePresence presence) + { + presence.QueuePartForUpdate(this); + } + + /// + /// + /// + public void SendTerseUpdateToAllClients() + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + m_parentGroup.SendPartTerseUpdate(avatars[i].ControllingClient, this); + } + } + + /// + /// Send a terse update to the client. + /// + /// + public void SendTerseUpdate(IClientAPI remoteClient) + { + m_parentGroup.SendPartTerseUpdate(remoteClient, this); + } + + public void SendTerseUpdateToClient(IClientAPI remoteClient) + { + LLVector3 lPos; + lPos = OffsetPosition; + LLQuaternion mRot = RotationOffset; + if ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) == 0) + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, Shape.State, + fromAssetID); + } + else + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, Velocity, + RotationalVelocity); + //System.Console.WriteLine("LID: " + LocalID + " RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString()); + } + } + + public void SendTerseUpdateToClient(IClientAPI remoteClient, LLVector3 lPos) + { + LLQuaternion mRot = RotationOffset; + if (m_IsAttachment) + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, + (byte) ((m_attachmentPoint % 16) * 16 + (m_attachmentPoint / 16)), fromAssetID); + } + else + { + if ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) == 0) + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, + Shape.State, fromAssetID); + } + else + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, Velocity, + RotationalVelocity); + //System.Console.WriteLine("LID: " + LocalID + "RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString()); + } + } + } + + #endregion + #region Update Scheduling /// @@ -1596,9 +2017,9 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.HasGroupChanged = true; m_parentGroup.QueueForUpdateCheck(); } - + int timeNow = Util.UnixTimeSinceEpoch(); - + // If multiple updates are scheduled on the same second, we still need to perform all of them // So we'll force the issue by bumping up the timestamp so that later processing sees these need // to be performed. @@ -1608,11 +2029,11 @@ namespace OpenSim.Region.Environment.Scenes } else { - TimeStampFull = (uint)timeNow; + TimeStampFull = (uint) timeNow; } - + m_updateFlag = 2; - + // m_log.DebugFormat( // "[SCENE OBJECT PART]: Scheduling full update for {0}, {1} at {2}", // UUID, Name, TimeStampFull); @@ -1735,15 +2156,13 @@ namespace OpenSim.Region.Environment.Scenes public void UpdatePrimFlags(ushort type, bool inUse, byte[] data) { - - //m_log.Info("TSomething1:" + ((type & (ushort)ExtraParamType.Something1) == (ushort)ExtraParamType.Something1)); //m_log.Info("TSomething2:" + ((type & (ushort)ExtraParamType.Something2) == (ushort)ExtraParamType.Something2)); //m_log.Info("TSomething3:" + ((type & (ushort)ExtraParamType.Something3) == (ushort)ExtraParamType.Something3)); //m_log.Info("TSomething4:" + ((type & (ushort)ExtraParamType.Something4) == (ushort)ExtraParamType.Something4)); //m_log.Info("TSomething5:" + ((type & (ushort)ExtraParamType.Something5) == (ushort)ExtraParamType.Something5)); //m_log.Info("TSomething6:" + ((type & (ushort)ExtraParamType.Something6) == (ushort)ExtraParamType.Something6)); - + bool usePhysics = false; bool IsTemporary = false; bool IsPhantom = false; @@ -1751,7 +2170,7 @@ namespace OpenSim.Region.Environment.Scenes bool wasUsingPhysics = ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0); //bool IsLocked = false; int i = 0; - + try { @@ -1835,6 +2254,7 @@ namespace OpenSim.Region.Environment.Scenes // System.Console.WriteLine("Update: PHY:" + UsePhysics.ToString() + ", T:" + IsTemporary.ToString() + ", PHA:" + IsPhantom.ToString() + " S:" + CastsShadows.ToString()); ScheduleFullUpdate(); } + public void ScriptSetPhysicsStatus(bool UsePhysics) { if (m_parentGroup != null) @@ -1842,6 +2262,7 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.ScriptSetPhysicsStatus(UsePhysics); } } + public void ScriptSetPhantomStatus(bool Phantom) { if (m_parentGroup != null) @@ -1849,6 +2270,7 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.ScriptSetPhantomStatus(Phantom); } } + public void DoPhysicsPropertyUpdate(bool UsePhysics, bool isNew) { if (PhysActor != null) @@ -1897,7 +2319,6 @@ namespace OpenSim.Region.Environment.Scenes PhysActor.link(ParentGroup.RootPart.PhysActor); } } - } } } @@ -1911,13 +2332,13 @@ namespace OpenSim.Region.Environment.Scenes int i = 0; uint length = (uint) data.Length; m_shape.ExtraParams[i++] = 1; - m_shape.ExtraParams[i++] = (byte) (type%256); - m_shape.ExtraParams[i++] = (byte) ((type >> 8)%256); + m_shape.ExtraParams[i++] = (byte) (type % 256); + m_shape.ExtraParams[i++] = (byte) ((type >> 8) % 256); - m_shape.ExtraParams[i++] = (byte) (length%256); - m_shape.ExtraParams[i++] = (byte) ((length >> 8)%256); - m_shape.ExtraParams[i++] = (byte) ((length >> 16)%256); - m_shape.ExtraParams[i++] = (byte) ((length >> 24)%256); + m_shape.ExtraParams[i++] = (byte) (length % 256); + m_shape.ExtraParams[i++] = (byte) ((length >> 8) % 256); + m_shape.ExtraParams[i++] = (byte) ((length >> 16) % 256); + m_shape.ExtraParams[i++] = (byte) ((length >> 24) % 256); Array.Copy(data, 0, m_shape.ExtraParams, i, data.Length); ScheduleFullUpdate(); @@ -1995,14 +2416,14 @@ namespace OpenSim.Region.Environment.Scenes public byte ConvertScriptUintToByte(uint indata) { - byte outdata = (byte)TextureAnimFlags.NONE; - if ((indata & 1) != 0) outdata |= (byte)TextureAnimFlags.ANIM_ON; - if ((indata & 2) != 0) outdata |= (byte)TextureAnimFlags.LOOP; - if ((indata & 4) != 0) outdata |= (byte)TextureAnimFlags.REVERSE; - if ((indata & 8) != 0) outdata |= (byte)TextureAnimFlags.PING_PONG; - if ((indata & 16) != 0) outdata |= (byte)TextureAnimFlags.SMOOTH; - if ((indata & 32) != 0) outdata |= (byte)TextureAnimFlags.ROTATE; - if ((indata & 64) != 0) outdata |= (byte)TextureAnimFlags.SCALE; + byte outdata = (byte) TextureAnimFlags.NONE; + if ((indata & 1) != 0) outdata |= (byte) TextureAnimFlags.ANIM_ON; + if ((indata & 2) != 0) outdata |= (byte) TextureAnimFlags.LOOP; + if ((indata & 4) != 0) outdata |= (byte) TextureAnimFlags.REVERSE; + if ((indata & 8) != 0) outdata |= (byte) TextureAnimFlags.PING_PONG; + if ((indata & 16) != 0) outdata |= (byte) TextureAnimFlags.SMOOTH; + if ((indata & 32) != 0) outdata |= (byte) TextureAnimFlags.ROTATE; + if ((indata & 64) != 0) outdata |= (byte) TextureAnimFlags.SCALE; return outdata; } @@ -2014,13 +2435,17 @@ namespace OpenSim.Region.Environment.Scenes // The flags don't like conversion from uint to byte, so we have to do // it the crappy way. See the above function :( - data[pos] = ConvertScriptUintToByte(pTexAnim.Flags); pos++; - data[pos] = (byte)pTexAnim.Face; pos++; - data[pos] = (byte)pTexAnim.SizeX; pos++; - data[pos] = (byte)pTexAnim.SizeY; pos++; + data[pos] = ConvertScriptUintToByte(pTexAnim.Flags); + pos++; + data[pos] = (byte) pTexAnim.Face; + pos++; + data[pos] = (byte) pTexAnim.SizeX; + pos++; + data[pos] = (byte) pTexAnim.SizeY; + pos++; Helpers.FloatToBytes(pTexAnim.Start).CopyTo(data, pos); - Helpers.FloatToBytes(pTexAnim.Length ).CopyTo(data, pos + 4); + Helpers.FloatToBytes(pTexAnim.Length).CopyTo(data, pos + 4); Helpers.FloatToBytes(pTexAnim.Rate).CopyTo(data, pos + 8); m_TextureAnimation = data; @@ -2071,6 +2496,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region Sound + public void PreloadSound(string sound) { LLUUID ownerID = OwnerID; @@ -2096,7 +2522,7 @@ namespace OpenSim.Region.Environment.Scenes foreach (ScenePresence p in avatarts) { // TODO: some filtering by distance of avatar - + p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID); } } @@ -2111,7 +2537,7 @@ namespace OpenSim.Region.Environment.Scenes List avatarts = m_parentGroup.Scene.GetAvatars(); foreach (ScenePresence p in avatarts) { - p.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume); + p.ControllingClient.SendAttachedSoundGainChange(UUID, (float) volume); } } @@ -2137,7 +2563,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart op = this; foreach (KeyValuePair item in op.TaskInventory) { - if (item.Value.Name == sound && item.Value.Type == (int)AssetType.Sound) + if (item.Value.Name == sound && item.Value.Type == (int) AssetType.Sound) { soundID = item.Value.ItemID; break; @@ -2145,26 +2571,26 @@ namespace OpenSim.Region.Environment.Scenes } } - if(soundID == LLUUID.Zero) + if (soundID == LLUUID.Zero) return; List avatarts = m_parentGroup.Scene.GetAvatars(); foreach (ScenePresence p in avatarts) { - double dis=Util.GetDistanceTo(p.AbsolutePosition, position); - if(dis > 100.0) // Max audio distance + double dis = Util.GetDistanceTo(p.AbsolutePosition, position); + if (dis > 100.0) // Max audio distance continue; // Scale by distance - volume*=((100.0-dis)/100.0); + volume *= ((100.0 - dis) / 100.0); if (triggered) { - p.ControllingClient.SendTriggeredSound(soundID, ownerID, objectID, parentID, regionHandle, position, (float)volume); + p.ControllingClient.SendTriggeredSound(soundID, ownerID, objectID, parentID, regionHandle, position, (float) volume); } else { - p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)volume, flags); + p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float) volume, flags); } } } @@ -2181,513 +2607,57 @@ namespace OpenSim.Region.Environment.Scenes { StoreUndoState(); m_shape.Scale = scale; - + ScheduleFullUpdate(); } #endregion - public void UpdatePermissions(LLUUID AgentID, byte field, uint localID, uint mask, byte addRemTF) - { - bool set = addRemTF == 1; - - // Are we the owner? - if (AgentID == OwnerID) - { - switch (field) - { - case 2: - OwnerMask = ApplyMask(OwnerMask, set, mask); - break; - case 4: - GroupMask = ApplyMask(GroupMask, set, mask); - break; - case 8: - EveryoneMask = ApplyMask(EveryoneMask, set, mask); - break; - case 16: - NextOwnerMask = ApplyMask(NextOwnerMask, set, mask); - break; - } - SendFullUpdateToAllClients(); - - SendObjectPropertiesToClient(AgentID); - - } - } - - private void SendObjectPropertiesToClient(LLUUID AgentID) - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - // Ugly reference :( - if (avatars[i].UUID == AgentID) - { - m_parentGroup.GetProperties(avatars[i].ControllingClient); - } - } - } - - private uint ApplyMask(uint val, bool set, uint mask) - { - if (set) - { - return val |= mask; - } - else - { - return val &= ~mask; - } - } - - #region Client Update Methods - - /// - /// Tell all scene presences that they should send updates for this part to their clients - /// - public void AddFullUpdateToAllAvatars() - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - avatars[i].QueuePartForUpdate(this); - } - } - - public void SendFullUpdateToAllClientsExcept(LLUUID agentID) - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - // Ugly reference :( - if (avatars[i].UUID != agentID) - { - m_parentGroup.SendPartFullUpdate(avatars[i].ControllingClient, this, - avatars[i].GenerateClientFlags(UUID)); - } - } - } - - - public void AddFullUpdateToAvatar(ScenePresence presence) - { - presence.QueuePartForUpdate(this); - } + #region Copying /// - /// + /// Duplicates this part. /// - public void SendFullUpdateToAllClients() + /// + public SceneObjectPart Copy(uint localID, LLUUID AgentID, LLUUID GroupID, int linkNum) { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - // Ugly reference :( - m_parentGroup.SendPartFullUpdate(avatars[i].ControllingClient, this, - avatars[i].GenerateClientFlags(UUID)); - } - } + SceneObjectPart dupe = (SceneObjectPart) MemberwiseClone(); + dupe.m_shape = m_shape.Copy(); + dupe.m_regionHandle = m_regionHandle; + dupe.UUID = LLUUID.Random(); + dupe.LocalId = localID; + dupe.OwnerID = AgentID; + dupe.GroupID = GroupID; + dupe.GroupPosition = new LLVector3(GroupPosition.X, GroupPosition.Y, GroupPosition.Z); + dupe.OffsetPosition = new LLVector3(OffsetPosition.X, OffsetPosition.Y, OffsetPosition.Z); + dupe.RotationOffset = + new LLQuaternion(RotationOffset.X, RotationOffset.Y, RotationOffset.Z, RotationOffset.W); + dupe.Velocity = new LLVector3(0, 0, 0); + dupe.Acceleration = new LLVector3(0, 0, 0); + dupe.AngularVelocity = new LLVector3(0, 0, 0); + dupe.ObjectFlags = ObjectFlags; - /// - /// - /// - /// - public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) - { - m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags); - } + dupe.OwnershipCost = OwnershipCost; + dupe.ObjectSaleType = ObjectSaleType; + dupe.SalePrice = SalePrice; + dupe.Category = Category; - /// - /// Sends a full update to the client - /// - /// - /// - public void SendFullUpdateToClient(IClientAPI remoteClient, uint clientflags) - { - LLVector3 lPos; - lPos = OffsetPosition; - SendFullUpdateToClient(remoteClient, lPos, clientflags); - } - - /// - /// Sends a full update to the client - /// - /// - /// - /// - public void SendFullUpdateToClient(IClientAPI remoteClient, LLVector3 lPos, uint clientFlags) - { - LLQuaternion lRot; - lRot = RotationOffset; - clientFlags &= ~(uint) LLObject.ObjectFlags.CreateSelected; + dupe.TaskInventory = (TaskInventoryDictionary) dupe.TaskInventory.Clone(); - if (remoteClient.AgentId == OwnerID) - { - if ((uint) (Flags & LLObject.ObjectFlags.CreateSelected) != 0) - { - clientFlags |= (uint) LLObject.ObjectFlags.CreateSelected; - Flags &= ~LLObject.ObjectFlags.CreateSelected; - } - } + dupe.ResetIDs(linkNum); + // This may be wrong... it might have to be applied in SceneObjectGroup to the object that's being duplicated. + dupe.LastOwnerID = ObjectOwner; - byte[] color = new byte[] {m_color.R, m_color.G, m_color.B, m_color.A}; - remoteClient.SendPrimitiveToClient(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, m_shape, lPos, clientFlags, m_uuid, - OwnerID, - m_text, color, ParentID, m_particleSystem, lRot, m_clickAction, m_TextureAnimation, m_IsAttachment, m_attachmentPoint,fromAssetID); - } + byte[] extraP = new byte[Shape.ExtraParams.Length]; + Array.Copy(Shape.ExtraParams, extraP, extraP.Length); + dupe.Shape.ExtraParams = extraP; + bool UsePhysics = ((dupe.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0); + dupe.DoPhysicsPropertyUpdate(UsePhysics, true); - /// Terse updates - public void AddTerseUpdateToAllAvatars() - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - avatars[i].QueuePartForUpdate(this); - } - } - - public void AddTerseUpdateToAvatar(ScenePresence presence) - { - presence.QueuePartForUpdate(this); - } - - /// - /// - /// - public void SendTerseUpdateToAllClients() - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - m_parentGroup.SendPartTerseUpdate(avatars[i].ControllingClient, this); - } - } - - /// - /// Send a terse update to the client. - /// - /// - public void SendTerseUpdate(IClientAPI remoteClient) - { - m_parentGroup.SendPartTerseUpdate(remoteClient, this); - } - - public void SendTerseUpdateToClient(IClientAPI remoteClient) - { - LLVector3 lPos; - lPos = OffsetPosition; - LLQuaternion mRot = RotationOffset; - if ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) == 0) - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Shape.State, fromAssetID); - } - else - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity, - RotationalVelocity); - //System.Console.WriteLine("LID: " + LocalID + " RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString()); - } - } - - public void SendTerseUpdateToClient(IClientAPI remoteClient, LLVector3 lPos) - { - LLQuaternion mRot = RotationOffset; - if (m_IsAttachment) - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, (byte)((m_attachmentPoint % 16) * 16 + (m_attachmentPoint / 16)),fromAssetID); - } - else - { - if ((ObjectFlags & (uint)LLObject.ObjectFlags.Physics) == 0) - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Shape.State, fromAssetID); - } - else - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity, - RotationalVelocity); - //System.Console.WriteLine("LID: " + LocalID + "RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString()); - } - } + return dupe; } #endregion - - public virtual void UpdateMovement() - { - } - - #region Events - - public void PhysicsRequestingTerseUpdate() - { - if (PhysActor != null) - { - LLVector3 newpos = new LLVector3(PhysActor.Position.GetBytes(), 0); - if (newpos.X > 257f || newpos.X < -1f || newpos.Y > 257f || newpos.Y < -1f) - { - m_parentGroup.AbsolutePosition = newpos; - return; - } - - } - ScheduleTerseUpdate(); - - //SendTerseUpdateToAllClients(); - } - - #endregion - - public void PhysicsOutOfBounds(PhysicsVector pos) - { - m_log.Info("[PHYSICS]: Physical Object went out of bounds."); - RemFlag(LLObject.ObjectFlags.Physics); - DoPhysicsPropertyUpdate(false, true); - //m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); - } - - public virtual void OnGrab(LLVector3 offsetPos, IClientAPI remoteClient) - { - } - - - public void SetText(string text) - { - Text = text; - ScheduleFullUpdate(); - } - - public void SetText(string text, Vector3 color, double alpha) - { - Color = Color.FromArgb(0xff - (int) (alpha*0xff), - (int) (color.x*0xff), - (int) (color.y*0xff), - (int) (color.z*0xff)); - SetText( text ); - } - - public int registerTargetWaypoint(LLVector3 target, float tolerance) - { - if (m_parentGroup != null) - { - return m_parentGroup.registerTargetWaypoint(target, tolerance); - } - return 0; - } - public void unregisterTargetWaypoint(int handle) - { - if (m_parentGroup != null) - { - m_parentGroup.unregisterTargetWaypoint(handle); - } - } - protected SceneObjectPart(SerializationInfo info, StreamingContext context) - { - //System.Console.WriteLine("SceneObjectPart Deserialize BGN"); - - if (info == null) - { - throw new ArgumentNullException("info"); - } - - /* - m_queue = (Queue)info.GetValue("m_queue", typeof(Queue)); - m_ids = (List)info.GetValue("m_ids", typeof(List)); - */ - - //System.Console.WriteLine("SceneObjectPart 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_inventoryFileName", m_inventoryFileName); - info.AddValue("m_folderID", m_folderID.UUID); - info.AddValue("PhysActor", PhysActor); - - Dictionary TaskInventory_work = new Dictionary(); - - foreach (LLUUID id in TaskInventory.Keys) - { - TaskInventory_work.Add(id.UUID, TaskInventory[id]); - } - - info.AddValue("TaskInventory", TaskInventory_work); - - info.AddValue("LastOwnerID", LastOwnerID.UUID); - info.AddValue("OwnerID", OwnerID.UUID); - info.AddValue("GroupID", GroupID.UUID); - - info.AddValue("OwnershipCost", OwnershipCost); - info.AddValue("ObjectSaleType", ObjectSaleType); - info.AddValue("SalePrice", SalePrice); - info.AddValue("Category", Category); - - info.AddValue("CreationDate", CreationDate); - info.AddValue("ParentID", ParentID); - - info.AddValue("OwnerMask", OwnerMask); - info.AddValue("NextOwnerMask", NextOwnerMask); - info.AddValue("GroupMask", GroupMask); - info.AddValue("EveryoneMask", EveryoneMask); - info.AddValue("BaseMask", BaseMask); - - info.AddValue("m_particleSystem", m_particleSystem); - - info.AddValue("TimeStampFull", TimeStampFull); - info.AddValue("TimeStampTerse", TimeStampTerse); - info.AddValue("TimeStampLastActivity", TimeStampLastActivity); - - info.AddValue("m_updateFlag", m_updateFlag); - info.AddValue("CreatorID", CreatorID.UUID); - - info.AddValue("m_inventorySerial", m_inventorySerial); - info.AddValue("m_uuid", m_uuid.UUID); - info.AddValue("m_localID", m_localId); - info.AddValue("m_name", m_name); - info.AddValue("m_flags", Flags); - info.AddValue("m_material", m_material); - info.AddValue("m_regionHandle", m_regionHandle); - - info.AddValue("m_groupPosition.X", m_groupPosition.X); - info.AddValue("m_groupPosition.Y", m_groupPosition.Y); - info.AddValue("m_groupPosition.Z", m_groupPosition.Z); - - info.AddValue("m_offsetPosition.X", m_offsetPosition.X); - info.AddValue("m_offsetPosition.Y", m_offsetPosition.Y); - info.AddValue("m_offsetPosition.Z", m_offsetPosition.Z); - - info.AddValue("m_rotationOffset.W", m_rotationOffset.W); - info.AddValue("m_rotationOffset.X", m_rotationOffset.X); - info.AddValue("m_rotationOffset.Y", m_rotationOffset.Y); - info.AddValue("m_rotationOffset.Z", m_rotationOffset.Z); - - info.AddValue("m_velocity.X", m_velocity.X); - info.AddValue("m_velocity.Y", m_velocity.Y); - info.AddValue("m_velocity.Z", m_velocity.Z); - - info.AddValue("m_rotationalvelocity.X", m_rotationalvelocity.X); - info.AddValue("m_rotationalvelocity.Y", m_rotationalvelocity.Y); - info.AddValue("m_rotationalvelocity.Z", m_rotationalvelocity.Z); - - info.AddValue("m_angularVelocity.X", m_angularVelocity.X); - info.AddValue("m_angularVelocity.Y", m_angularVelocity.Y); - info.AddValue("m_angularVelocity.Z", m_angularVelocity.Z); - - info.AddValue("m_acceleration.X", m_acceleration.X); - info.AddValue("m_acceleration.Y", m_acceleration.Y); - info.AddValue("m_acceleration.Z", m_acceleration.Z); - - info.AddValue("m_description", m_description); - info.AddValue("m_color", m_color); - info.AddValue("m_text", m_text); - info.AddValue("m_sitName", m_sitName); - info.AddValue("m_touchName", m_touchName); - info.AddValue("m_clickAction", m_clickAction); - info.AddValue("m_shape", m_shape); - info.AddValue("m_parentGroup", m_parentGroup); - info.AddValue("PayPrice", PayPrice); - } - - - public void Undo() - { - if (m_undo.Count > 0) - { - UndoState goback = m_undo.Pop(); - if (goback != null) - goback.PlaybackState(this); - } - } - - public void SetScriptEvents(LLUUID scriptid, int events) - { - scriptEvents oldparts; - lock (m_scriptEvents) - { - if (m_scriptEvents.ContainsKey(scriptid)) - { - oldparts = m_scriptEvents[scriptid]; - - // remove values from aggregated script events - m_scriptEvents[scriptid] = (scriptEvents) events; - } - else - { - m_scriptEvents.Add(scriptid, (scriptEvents) events); - } - } - aggregateScriptEvents(); - } - - public void RemoveScriptEvents(LLUUID scriptid) - { - lock (m_scriptEvents) - { - if (m_scriptEvents.ContainsKey(scriptid)) - { - scriptEvents oldparts = scriptEvents.None; - oldparts = (scriptEvents) m_scriptEvents[scriptid]; - - // remove values from aggregated script events - m_aggregateScriptEvents &= ~oldparts; - m_scriptEvents.Remove(scriptid); - } - } - aggregateScriptEvents(); - } - - public void aggregateScriptEvents() - { - // Aggregate script events - lock (m_scriptEvents) - { - foreach (scriptEvents s in m_scriptEvents.Values) - { - m_aggregateScriptEvents |= s; - } - } - - uint objectflagupdate = 0; - - if ( - ((m_aggregateScriptEvents & scriptEvents.touch) != 0) || - ((m_aggregateScriptEvents & scriptEvents.touch_end) != 0) || - ((m_aggregateScriptEvents & scriptEvents.touch_start) != 0) - ) - { - objectflagupdate |= (uint) LLObject.ObjectFlags.Touch; - } - - if ((m_aggregateScriptEvents & scriptEvents.money) != 0) - { - objectflagupdate |= (uint) LLObject.ObjectFlags.Money; - } - - if ( - ((m_aggregateScriptEvents & scriptEvents.collision) != 0) || - ((m_aggregateScriptEvents & scriptEvents.collision_end) != 0) || - ((m_aggregateScriptEvents & scriptEvents.collision_start) != 0) - ) - { - // subscribe to physics updates. - } - - LocalFlags=(LLObject.ObjectFlags)objectflagupdate; - - if(m_parentGroup != null && m_parentGroup.RootPart == this) - m_parentGroup.aggregateScriptEvents(); - else - ScheduleFullUpdate(); - } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 74e9cdcfc4..4cdf7f185b 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -40,118 +40,112 @@ using OpenSim.Region.Physics.Manager; namespace OpenSim.Region.Environment.Scenes { - [Serializable] + [Serializable] public class ScenePresence : EntityBase, ISerializable { // ~ScenePresence() // { // System.Console.WriteLine("[ScenePresence] Destructor called"); // } - + + #region Delegates + + public delegate void SignificantClientMovement(IClientAPI remote_client); + + #endregion + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public static AvatarAnimations Animations = new AvatarAnimations(); public static byte[] DefaultTexture; + private readonly Vector3[] Dir_Vectors = new Vector3[6]; + private readonly uint m_AgentControlFlags = 0; - public LLUUID currentParcelUUID = LLUUID.Zero; - private List m_animations = new List(); - private List m_animationSeqs = new List(); - public Vector3 lastKnownAllowedPosition = new Vector3(); - public bool sentMessageAboutRestrictedParcelFlyingDown = false; - - private bool m_updateflag = false; - private byte m_movementflag = 0; + private readonly List m_animations = new List(); + private readonly List m_animationSeqs = new List(); private readonly List m_forcesList = new List(); - private short m_updateCount = 0; - private uint m_requestedSitTargetID = 0; - private LLVector3 m_requestedSitOffset = new LLVector3(); - private float m_sitAvatarHeight = 2.0f; - private float m_godlevel = 0; - private LLVector3 m_LastChildAgentUpdatePosition = new LLVector3(); + private readonly List m_knownChildRegions = new List(); + private readonly List m_knownPrimUUID = new List(); + private readonly UpdateQueue m_partsUpdateQueue = new UpdateQueue(); + private readonly byte m_state = 0; + private readonly Dictionary m_updateTimes = new Dictionary(); + protected ulong crossingFromRegion; + public LLUUID currentParcelUUID = LLUUID.Zero; + private SignificantClientMovement handlerSignificantClientMovement; //OnSignificantClientMovement; - private int m_perfMonMS = 0; - - private bool m_setAlwaysRun = false; - - private Quaternion m_bodyRot; - - public bool IsRestrictedToRegion = false; + public bool IsRestrictedToRegion; public string JID = string.Empty; + public Vector3 lastKnownAllowedPosition; // Agent moves with a PID controller causing a force to be exerted. - private bool m_newForce = false; - private bool m_newCoarseLocations = true; - private bool m_gotAllObjectsInScene = false; + private LLVector3 lastPhysPos; + protected AvatarAppearance m_appearance; - private LLVector3 m_lastVelocity = LLVector3.Zero; - - // Default AV Height + protected List m_attachments = new List(); private float m_avHeight = 127.0f; - - protected RegionInfo m_regionInfo; - protected ulong crossingFromRegion = 0; - - private readonly Vector3[] Dir_Vectors = new Vector3[6]; - private LLVector3 lastPhysPos = new LLVector3(); + private Quaternion m_bodyRot; // Position of agent's camera in world (region cordinates) - protected Vector3 m_CameraCenter = new Vector3(0, 0, 0); // Use these three vectors to figure out what the agent is looking at // Convert it to a Matrix and/or Quaternion protected Vector3 m_CameraAtAxis = new Vector3(0, 0, 0); + protected Vector3 m_CameraCenter = new Vector3(0, 0, 0); protected Vector3 m_CameraLeftAxis = new Vector3(0, 0, 0); protected Vector3 m_CameraUpAxis = new Vector3(0, 0, 0); - private uint m_AgentControlFlags = (uint) 0; - private LLQuaternion m_headrotation = new LLQuaternion(); - private byte m_state = (byte) 0; + protected float m_DrawDistance; + private float m_godlevel; + private bool m_gotAllObjectsInScene; + private LLQuaternion m_headrotation; + private LLVector3 m_LastChildAgentUpdatePosition; + private LLVector3 m_lastVelocity = LLVector3.Zero; + private byte m_movementflag; + private bool m_newCoarseLocations = true; + private bool m_newForce; + private int m_perfMonMS; + protected RegionInfo m_regionInfo; + private LLVector3 m_requestedSitOffset; + private uint m_requestedSitTargetID; + private bool m_setAlwaysRun; + private float m_sitAvatarHeight = 2.0f; + private short m_updateCount; + private bool m_updateflag; //Reuse the LLVector3 instead of creating a new one on the UpdateMovement method - private LLVector3 movementvector = new LLVector3(); - - private List m_knownPrimUUID = new List(); - - // Agent's Draw distance. - protected float m_DrawDistance = 0f; - - protected AvatarAppearance m_appearance; - - protected List m_attachments = new List(); - - //neighbouring regions we have enabled a child agent in - private readonly List m_knownChildRegions = new List(); - - private SignificantClientMovement handlerSignificantClientMovement = null; //OnSignificantClientMovement; - - /// - /// Implemented Control Flags - /// - private enum Dir_ControlFlags - { - DIR_CONTROL_FLAG_FORWARD = AgentManager.ControlFlags.AGENT_CONTROL_AT_POS, - DIR_CONTROL_FLAG_BACK = AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG, - DIR_CONTROL_FLAG_LEFT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS, - DIR_CONTROL_FLAG_RIGHT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG, - DIR_CONTROL_FLAG_UP = AgentManager.ControlFlags.AGENT_CONTROL_UP_POS, - DIR_CONTROL_FLAG_DOWN = AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG, - DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG - } + private LLVector3 movementvector; /// /// Position at which a significant movement was made /// - private LLVector3 posLastSignificantMove = new LLVector3(); + private LLVector3 posLastSignificantMove; - public delegate void SignificantClientMovement(IClientAPI remote_client); - - public event SignificantClientMovement OnSignificantClientMovement; - - private UpdateQueue m_partsUpdateQueue = new UpdateQueue(); - private Dictionary m_updateTimes = new Dictionary(); + public bool sentMessageAboutRestrictedParcelFlyingDown; #region Properties + private readonly string m_firstname; + private readonly string m_lastname; + private readonly ulong m_regionHandle; + protected bool m_allowMovement = true; + + /// + /// This works out to be the ClientView object associated with this avatar, or it's UDP connection manager + /// + private IClientAPI m_controllingClient; + + /// + /// If this is true, agent doesn't have a representation in this scene. + /// this is an agent 'looking into' this scene from a nearby scene(region) + /// + /// if False, this agent has a representation in this scene + /// + private bool m_isChildAgent = true; + + private uint m_parentID; + protected LLVector3 m_parentPosition; + protected PhysicsActor m_physicsActor; + /// /// Physical scene representation of this Avatar. /// @@ -167,16 +161,6 @@ namespace OpenSim.Region.Environment.Scenes get { return m_movementflag; } } - public bool KnownPrim(LLUUID primID) - { - if (m_knownPrimUUID.Contains(primID)) - { - return true; - } - m_knownPrimUUID.Add(primID); - return false; - } - public bool Updated { @@ -184,8 +168,6 @@ namespace OpenSim.Region.Environment.Scenes get { return m_updateflag; } } - private readonly ulong m_regionHandle; - public ulong RegionHandle { get { return m_regionHandle; } @@ -196,15 +178,11 @@ namespace OpenSim.Region.Environment.Scenes get { return m_CameraCenter; } } - private readonly string m_firstname; - public string Firstname { get { return m_firstname; } } - private readonly string m_lastname; - public string Lastname { get { return m_lastname; } @@ -215,29 +193,18 @@ namespace OpenSim.Region.Environment.Scenes get { return m_DrawDistance; } } - protected bool m_allowMovement = true; - public bool AllowMovement { get { return m_allowMovement; } set { m_allowMovement = value; } } - /// - /// This works out to be the ClientView object associated with this avatar, or it's UDP connection manager - /// - private IClientAPI m_controllingClient; - - protected PhysicsActor m_physicsActor; - public IClientAPI ControllingClient { get { return m_controllingClient; } set { m_controllingClient = value; } } - protected LLVector3 m_parentPosition = new LLVector3(); - /// /// Absolute position of this avatar in 'region cordinates' /// @@ -272,7 +239,7 @@ namespace OpenSim.Region.Environment.Scenes } m_pos = value; - m_parentPosition=new LLVector3(0, 0, 0); + m_parentPosition = new LLVector3(0, 0, 0); } } @@ -313,22 +280,12 @@ namespace OpenSim.Region.Environment.Scenes } } - /// - /// If this is true, agent doesn't have a representation in this scene. - /// this is an agent 'looking into' this scene from a nearby scene(region) - /// - /// if False, this agent has a representation in this scene - /// - private bool m_isChildAgent = true; - public bool IsChildAgent { get { return m_isChildAgent; } set { m_isChildAgent = value; } } - private uint m_parentID = 0; - public uint ParentID { get { return m_parentID; } @@ -343,6 +300,16 @@ namespace OpenSim.Region.Environment.Scenes get { return m_knownChildRegions; } } + public bool KnownPrim(LLUUID primID) + { + if (m_knownPrimUUID.Contains(primID)) + { + return true; + } + m_knownPrimUUID.Add(primID); + return false; + } + #endregion #region Constructor(s) @@ -420,6 +387,360 @@ namespace OpenSim.Region.Environment.Scenes #endregion + static ScenePresence() + { + LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); + DefaultTexture = textu.ToBytes(); + } + + public ScenePresence() + { +/* JB + if (Animations == null) + { + Animations = new AvatarAnimations(); + Animations.LoadAnims(); + } +*/ + if (DefaultTexture == null) + { + LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); + DefaultTexture = textu.ToBytes(); + } + } + + protected ScenePresence(SerializationInfo info, StreamingContext context) + : base(info, context) + { + //System.Console.WriteLine("ScenePresence Deserialize BGN"); + + if (info == null) + { + throw new ArgumentNullException("info"); + } +/* JB + if (Animations == null) + { + Animations = new AvatarAnimations(); + Animations.LoadAnims(); + } +*/ + if (DefaultTexture == null) + { + LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); + DefaultTexture = textu.ToBytes(); + } + + List animations_work = (List) info.GetValue("m_animations", typeof (List)); + + foreach (Guid guid in animations_work) + { + m_animations.Add(new LLUUID(guid)); + } + + m_animationSeqs = (List) info.GetValue("m_animationSeqs", typeof (List)); + m_updateflag = (bool) info.GetValue("m_updateflag", typeof (bool)); + m_movementflag = (byte) info.GetValue("m_movementflag", typeof (byte)); + m_forcesList = (List) info.GetValue("m_forcesList", typeof (List)); + m_updateCount = (short) info.GetValue("m_updateCount", typeof (short)); + m_requestedSitTargetID = (uint) info.GetValue("m_requestedSitTargetID", typeof (uint)); + + m_requestedSitOffset + = new LLVector3( + (float) info.GetValue("m_requestedSitOffset.X", typeof (float)), + (float) info.GetValue("m_requestedSitOffset.Y", typeof (float)), + (float) info.GetValue("m_requestedSitOffset.Z", typeof (float))); + + m_sitAvatarHeight = (float) info.GetValue("m_sitAvatarHeight", typeof (float)); + m_godlevel = (float) info.GetValue("m_godlevel", typeof (float)); + m_setAlwaysRun = (bool) info.GetValue("m_setAlwaysRun", typeof (bool)); + + m_bodyRot + = new Quaternion( + (float) info.GetValue("m_bodyRot.w", typeof (float)), + (float) info.GetValue("m_bodyRot.x", typeof (float)), + (float) info.GetValue("m_bodyRot.y", typeof (float)), + (float) info.GetValue("m_bodyRot.z", typeof (float))); + + IsRestrictedToRegion = (bool) info.GetValue("IsRestrictedToRegion", typeof (bool)); + m_newForce = (bool) info.GetValue("m_newForce", typeof (bool)); + //m_newAvatar = (bool)info.GetValue("m_newAvatar", typeof(bool)); + m_newCoarseLocations = (bool) info.GetValue("m_newCoarseLocations", typeof (bool)); + m_gotAllObjectsInScene = (bool) info.GetValue("m_gotAllObjectsInScene", typeof (bool)); + m_avHeight = (float) info.GetValue("m_avHeight", typeof (float)); + crossingFromRegion = (ulong) info.GetValue("crossingFromRegion", typeof (ulong)); + + List Dir_Vectors_work = (List) info.GetValue("Dir_Vectors", typeof (List)); + List Dir_Vectors_work2 = new List(); + + foreach (float[] f3 in Dir_Vectors_work) + { + Dir_Vectors_work2.Add(new Vector3(f3[0], f3[1], f3[2])); + } + + Dir_Vectors = Dir_Vectors_work2.ToArray(); + + lastPhysPos + = new LLVector3( + (float) info.GetValue("lastPhysPos.X", typeof (float)), + (float) info.GetValue("lastPhysPos.Y", typeof (float)), + (float) info.GetValue("lastPhysPos.Z", typeof (float))); + + m_CameraCenter + = new Vector3( + (float) info.GetValue("m_CameraCenter.X", typeof (float)), + (float) info.GetValue("m_CameraCenter.Y", typeof (float)), + (float) info.GetValue("m_CameraCenter.Z", typeof (float))); + + m_CameraAtAxis + = new Vector3( + (float) info.GetValue("m_CameraAtAxis.X", typeof (float)), + (float) info.GetValue("m_CameraAtAxis.Y", typeof (float)), + (float) info.GetValue("m_CameraAtAxis.Z", typeof (float))); + + m_CameraLeftAxis + = new Vector3( + (float) info.GetValue("m_CameraLeftAxis.X", typeof (float)), + (float) info.GetValue("m_CameraLeftAxis.Y", typeof (float)), + (float) info.GetValue("m_CameraLeftAxis.Z", typeof (float))); + + m_CameraUpAxis + = new Vector3( + (float) info.GetValue("m_CameraUpAxis.X", typeof (float)), + (float) info.GetValue("m_CameraUpAxis.Y", typeof (float)), + (float) info.GetValue("m_CameraUpAxis.Z", typeof (float))); + + m_DrawDistance = (float) info.GetValue("m_DrawDistance", typeof (float)); + m_appearance = (AvatarAppearance) info.GetValue("m_appearance", typeof (AvatarAppearance)); + m_knownChildRegions = (List) info.GetValue("m_knownChildRegions", typeof (List)); + + posLastSignificantMove + = new LLVector3( + (float) info.GetValue("posLastSignificantMove.X", typeof (float)), + (float) info.GetValue("posLastSignificantMove.Y", typeof (float)), + (float) info.GetValue("posLastSignificantMove.Z", typeof (float))); + + // m_partsUpdateQueue = (UpdateQueue)info.GetValue("m_partsUpdateQueue", typeof(UpdateQueue)); + + /* + Dictionary updateTimes_work + = (Dictionary)info.GetValue("m_updateTimes", typeof(Dictionary)); + + foreach (Guid id in updateTimes_work.Keys) + { + m_updateTimes.Add(new LLUUID(id), updateTimes_work[id]); + } + */ + m_regionHandle = (ulong) info.GetValue("m_regionHandle", typeof (ulong)); + m_firstname = (string) info.GetValue("m_firstname", typeof (string)); + m_lastname = (string) info.GetValue("m_lastname", typeof (string)); + m_allowMovement = (bool) info.GetValue("m_allowMovement", typeof (bool)); + m_parentPosition = new LLVector3((float) info.GetValue("m_parentPosition.X", typeof (float)), + (float) info.GetValue("m_parentPosition.Y", typeof (float)), + (float) info.GetValue("m_parentPosition.Z", typeof (float))); + + m_isChildAgent = (bool) info.GetValue("m_isChildAgent", typeof (bool)); + m_parentID = (uint) info.GetValue("m_parentID", typeof (uint)); + +// for OpenSim_v0.5 + currentParcelUUID = new LLUUID((Guid) info.GetValue("currentParcelUUID", typeof (Guid))); + + lastKnownAllowedPosition + = new Vector3( + (float) info.GetValue("lastKnownAllowedPosition.X", typeof (float)), + (float) info.GetValue("lastKnownAllowedPosition.Y", typeof (float)), + (float) info.GetValue("lastKnownAllowedPosition.Z", typeof (float))); + + sentMessageAboutRestrictedParcelFlyingDown = (bool) info.GetValue("sentMessageAboutRestrictedParcelFlyingDown", typeof (bool)); + + m_LastChildAgentUpdatePosition + = new LLVector3( + (float) info.GetValue("m_LastChildAgentUpdatePosition.X", typeof (float)), + (float) info.GetValue("m_LastChildAgentUpdatePosition.Y", typeof (float)), + (float) info.GetValue("m_LastChildAgentUpdatePosition.Z", typeof (float))); + + m_perfMonMS = (int) info.GetValue("m_perfMonMS", typeof (int)); + m_AgentControlFlags = (uint) info.GetValue("m_AgentControlFlags", typeof (uint)); + + m_headrotation + = new LLQuaternion( + (float) info.GetValue("m_headrotation.W", typeof (float)), + (float) info.GetValue("m_headrotation.X", typeof (float)), + (float) info.GetValue("m_headrotation.Y", typeof (float)), + (float) info.GetValue("m_headrotation.Z", typeof (float))); + + m_state = (byte) info.GetValue("m_state", typeof (byte)); + + List knownPrimUUID_work = (List) info.GetValue("m_knownPrimUUID", typeof (List)); + + foreach (Guid id in knownPrimUUID_work) + { + m_knownPrimUUID.Add(new LLUUID(id)); + } + + //System.Console.WriteLine("ScenePresence Deserialize END"); + } + + #region ISerializable Members + + [SecurityPermission(SecurityAction.LinkDemand, + Flags = SecurityPermissionFlag.SerializationFormatter)] + public override void GetObjectData( + SerializationInfo info, StreamingContext context) + { + if (info == null) + { + throw new ArgumentNullException("info"); + } + + base.GetObjectData(info, context); + + List animations_work = new List(); + + foreach (LLUUID uuid in m_animations) + { + animations_work.Add(uuid.UUID); + } + + info.AddValue("m_animations", animations_work); + + info.AddValue("m_animationSeqs", m_animationSeqs); + info.AddValue("m_updateflag", m_updateflag); + info.AddValue("m_movementflag", m_movementflag); + info.AddValue("m_forcesList", m_forcesList); + info.AddValue("m_updateCount", m_updateCount); + info.AddValue("m_requestedSitTargetID", m_requestedSitTargetID); + + // LLVector3 + info.AddValue("m_requestedSitOffset.X", m_requestedSitOffset.X); + info.AddValue("m_requestedSitOffset.Y", m_requestedSitOffset.Y); + info.AddValue("m_requestedSitOffset.Z", m_requestedSitOffset.Z); + + info.AddValue("m_sitAvatarHeight", m_sitAvatarHeight); + info.AddValue("m_godlevel", m_godlevel); + info.AddValue("m_setAlwaysRun", m_setAlwaysRun); + + // Quaternion + info.AddValue("m_bodyRot.w", m_bodyRot.w); + info.AddValue("m_bodyRot.x", m_bodyRot.x); + info.AddValue("m_bodyRot.y", m_bodyRot.y); + info.AddValue("m_bodyRot.z", m_bodyRot.z); + + info.AddValue("IsRestrictedToRegion", IsRestrictedToRegion); + info.AddValue("m_newForce", m_newForce); + //info.AddValue("m_newAvatar", m_newAvatar); + info.AddValue("m_newCoarseLocations", m_newCoarseLocations); + info.AddValue("m_gotAllObjectsInScene", m_gotAllObjectsInScene); + info.AddValue("m_avHeight", m_avHeight); + + // info.AddValue("m_regionInfo", m_regionInfo); + + info.AddValue("crossingFromRegion", crossingFromRegion); + + List Dir_Vectors_work = new List(); + + foreach (Vector3 v3 in Dir_Vectors) + { + Dir_Vectors_work.Add(new[] {v3.x, v3.y, v3.z}); + } + + info.AddValue("Dir_Vectors", Dir_Vectors_work); + + // LLVector3 + info.AddValue("lastPhysPos.X", lastPhysPos.X); + info.AddValue("lastPhysPos.Y", lastPhysPos.Y); + info.AddValue("lastPhysPos.Z", lastPhysPos.Z); + + // Vector3 + info.AddValue("m_CameraCenter.X", m_CameraCenter.x); + info.AddValue("m_CameraCenter.Y", m_CameraCenter.y); + info.AddValue("m_CameraCenter.Z", m_CameraCenter.z); + + // Vector3 + info.AddValue("m_CameraAtAxis.X", m_CameraAtAxis.x); + info.AddValue("m_CameraAtAxis.Y", m_CameraAtAxis.y); + info.AddValue("m_CameraAtAxis.Z", m_CameraAtAxis.z); + + // Vector3 + info.AddValue("m_CameraLeftAxis.X", m_CameraLeftAxis.x); + info.AddValue("m_CameraLeftAxis.Y", m_CameraLeftAxis.y); + info.AddValue("m_CameraLeftAxis.Z", m_CameraLeftAxis.z); + + // Vector3 + info.AddValue("m_CameraUpAxis.X", m_CameraUpAxis.x); + info.AddValue("m_CameraUpAxis.Y", m_CameraUpAxis.y); + info.AddValue("m_CameraUpAxis.Z", m_CameraUpAxis.z); + + info.AddValue("m_DrawDistance", m_DrawDistance); + info.AddValue("m_appearance", m_appearance); + info.AddValue("m_knownChildRegions", m_knownChildRegions); + + // LLVector3 + info.AddValue("posLastSignificantMove.X", posLastSignificantMove.X); + info.AddValue("posLastSignificantMove.Y", posLastSignificantMove.Y); + info.AddValue("posLastSignificantMove.Z", posLastSignificantMove.Z); + + //info.AddValue("m_partsUpdateQueue", m_partsUpdateQueue); + + /* + Dictionary updateTimes_work = new Dictionary(); + + foreach ( LLUUID id in m_updateTimes.Keys) + { + updateTimes_work.Add(id.UUID, m_updateTimes[id]); + } + + info.AddValue("m_updateTimes", updateTimes_work); + */ + + info.AddValue("m_regionHandle", m_regionHandle); + info.AddValue("m_firstname", m_firstname); + info.AddValue("m_lastname", m_lastname); + info.AddValue("m_allowMovement", m_allowMovement); + //info.AddValue("m_physicsActor", m_physicsActor); + info.AddValue("m_parentPosition.X", m_parentPosition.X); + info.AddValue("m_parentPosition.Y", m_parentPosition.Y); + info.AddValue("m_parentPosition.Z", m_parentPosition.Z); + info.AddValue("m_isChildAgent", m_isChildAgent); + info.AddValue("m_parentID", m_parentID); + +// for OpenSim_v0.5 + info.AddValue("currentParcelUUID", currentParcelUUID.UUID); + + info.AddValue("lastKnownAllowedPosition.X", lastKnownAllowedPosition.x); + info.AddValue("lastKnownAllowedPosition.Y", lastKnownAllowedPosition.y); + info.AddValue("lastKnownAllowedPosition.Z", lastKnownAllowedPosition.z); + + info.AddValue("sentMessageAboutRestrictedParcelFlyingDown", sentMessageAboutRestrictedParcelFlyingDown); + + info.AddValue("m_LastChildAgentUpdatePosition.X", m_LastChildAgentUpdatePosition.X); + info.AddValue("m_LastChildAgentUpdatePosition.Y", m_LastChildAgentUpdatePosition.Y); + info.AddValue("m_LastChildAgentUpdatePosition.Z", m_LastChildAgentUpdatePosition.Z); + + info.AddValue("m_perfMonMS", m_perfMonMS); + info.AddValue("m_AgentControlFlags", m_AgentControlFlags); + + info.AddValue("m_headrotation.W", m_headrotation.W); + info.AddValue("m_headrotation.X", m_headrotation.X); + info.AddValue("m_headrotation.Y", m_headrotation.Y); + info.AddValue("m_headrotation.Z", m_headrotation.Z); + + info.AddValue("m_state", m_state); + + List knownPrimUUID_work = new List(); + + foreach (LLUUID id in m_knownPrimUUID) + { + knownPrimUUID_work.Add(id.UUID); + } + + info.AddValue("m_knownPrimUUID", knownPrimUUID_work); + } + + #endregion + + public event SignificantClientMovement OnSignificantClientMovement; + /// /// Add the part to the queue of parts for which we need to send an update to the client /// @@ -457,12 +778,12 @@ namespace OpenSim.Region.Environment.Scenes if (!m_gotAllObjectsInScene) { if (!m_isChildAgent || m_scene.m_seeIntoRegionFromNeighbor) - { + { m_scene.SendAllSceneObjectsToClient(this); - m_gotAllObjectsInScene = true; + m_gotAllObjectsInScene = true; } } - + if (m_partsUpdateQueue.Count > 0) { bool runUpdate = true; @@ -481,7 +802,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[SCENE PRESENCE]: Fully updating prim {0}, {1} - part timestamp {2}", // part.Name, part.UUID, part.TimeStampFull); - + part.SendFullUpdate(ControllingClient, GenerateClientFlags(part.UUID)); // We'll update to the part's timestamp rather than the current time to @@ -497,7 +818,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[SCENE PRESENCE]: Tersely updating prim {0}, {1} - part timestamp {2}", // part.Name, part.UUID, part.TimeStampTerse); - + part.SendTerseUpdate(ControllingClient); update.LastTerseUpdateTime = part.TimeStampTerse; @@ -530,6 +851,235 @@ namespace OpenSim.Region.Environment.Scenes AddNewMovement(position, rotation); } + /// + /// This allows the Sim owner the abiility to kick users from their sim currently. + /// It tells the client that the agent has permission to do so. + /// + public void GrantGodlikePowers(LLUUID agentID, LLUUID sessionID, LLUUID token, bool godStatus) + { + GrantGodlikePowersPacket respondPacket = new GrantGodlikePowersPacket(); + GrantGodlikePowersPacket.GrantDataBlock gdb = new GrantGodlikePowersPacket.GrantDataBlock(); + GrantGodlikePowersPacket.AgentDataBlock adb = new GrantGodlikePowersPacket.AgentDataBlock(); + + adb.AgentID = agentID; + adb.SessionID = sessionID; // More security + + if (godStatus) + { + gdb.GodLevel = 250; + m_godlevel = 250; + } + else + { + gdb.GodLevel = 0; + m_godlevel = 0; + } + + gdb.Token = token; + //respondPacket.AgentData = (GrantGodlikePowersPacket.AgentDataBlock)ablock; + respondPacket.GrantData = gdb; + respondPacket.AgentData = adb; + ControllingClient.OutPacket(respondPacket, ThrottleOutPacketType.Task); + } + + /// + /// This updates important decision making data about a child agent + /// The main purpose is to figure out what objects to send to a child agent that's in a neighboring region + /// + public void ChildAgentDataUpdate(ChildAgentDataUpdate cAgentData, uint tRegionX, uint tRegionY, uint rRegionX, uint rRegionY) + { + // + int shiftx = ((int) rRegionX - (int) tRegionX) * (int) Constants.RegionSize; + int shifty = ((int) rRegionY - (int) tRegionY) * (int) Constants.RegionSize; + + m_DrawDistance = cAgentData.drawdistance; + m_pos = new LLVector3(cAgentData.Position.x + shiftx, cAgentData.Position.y + shifty, cAgentData.Position.z); + + // It's hard to say here.. We can't really tell where the camera position is unless it's in world cordinates from the sending region + m_CameraCenter = + new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); + + + m_godlevel = cAgentData.godlevel; + SetHeight(cAgentData.AVHeight); + + ControllingClient.SetChildAgentThrottle(cAgentData.throttles); + + + // Sends out the objects in the user's draw distance if m_sendTasksToChild is true. + if (m_scene.m_seeIntoRegionFromNeighbor) + m_scene.SendAllSceneObjectsToClient(this); + //cAgentData.AVHeight; + //cAgentData.regionHandle; + //m_velocity = cAgentData.Velocity; + } + + /// + /// Handles part of the PID controller function for moving an avatar. + /// + public override void UpdateMovement() + { + m_newForce = false; + lock (m_forcesList) + { + if (m_forcesList.Count > 0) + { + for (int i = 0; i < m_forcesList.Count; i++) + { + NewForce force = m_forcesList[i]; + + m_updateflag = true; + try + { + movementvector.X = force.X; + movementvector.Y = force.Y; + movementvector.Z = force.Z; + Velocity = movementvector; + } + catch (NullReferenceException) + { + // Under extreme load, this returns a NullReference Exception that we can ignore. + // Ignoring this causes no movement to be sent to the physics engine... + // which when the scene is moving at 1 frame every 10 seconds, it doesn't really matter! + } + m_newForce = true; + } + for (int i = 0; i < m_forcesList.Count; i++) + { + m_forcesList.RemoveAt(0); + } + } + } + } + + public override void SetText(string text, Vector3 color, double alpha) + { + throw new Exception("Can't set Text on avatar."); + } + + /// + /// Adds a physical representation of the avatar to the Physics plugin + /// + public void AddToPhysicalScene() + { + PhysicsScene scene = m_scene.PhysicsScene; + + PhysicsVector pVec = + new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y, + AbsolutePosition.Z); + if (m_avHeight == 127.0f) + { + m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, 1.56f)); + } + else + { + m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, m_avHeight)); + } + //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; + m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; + m_physicsActor.LocalID = LocalId; + } + + // Event called by the physics plugin to tell the avatar about a collision. + private void PhysicsCollisionUpdate(EventArgs e) + { + bool isUserMoving = Velocity.X > 0 || Velocity.Y > 0; + UpdateMovementAnimations(isUserMoving); + } + + internal void Close() + { + lock (m_attachments) + { + foreach (SceneObjectGroup grp in m_attachments) + { + // ControllingClient may be null at this point! + m_scene.m_innerScene.DetachSingleAttachmentToInv(grp.GetFromAssetID(), ControllingClient); + } + m_attachments.Clear(); + } + lock (m_knownPrimUUID) + { + m_knownPrimUUID.Clear(); + } + lock (m_knownChildRegions) + { + m_knownChildRegions.Clear(); + } + lock (m_updateTimes) + { + m_updateTimes.Clear(); + } + lock (m_partsUpdateQueue) + { + m_partsUpdateQueue.Clear(); + } + + RemoveFromPhysicalScene(); + GC.Collect(); + } + + public void AddAttachment(SceneObjectGroup gobj) + { + lock (m_attachments) + { + m_attachments.Add(gobj); + } + } + + public void RemoveAttachment(SceneObjectGroup gobj) + { + lock (m_attachments) + { + if (m_attachments.Contains(gobj)) + { + m_attachments.Remove(gobj); + } + } + } + + public void CrossAttachmentsIntoNewRegion(ulong regionHandle) + { + lock (m_attachments) + { + foreach (SceneObjectGroup gobj in m_attachments) + { + // If the prim group is null then something must have happened to it! + if (gobj != null) + { + // Set the parent localID to 0 so it transfers over properly. + gobj.RootPart.SetParentLocalId(0); + gobj.RootPart.m_IsAttachment = false; + gobj.AbsolutePosition = gobj.RootPart.m_attachedPos; + gobj.RootPart.LastOwnerID = gobj.GetFromAssetID(); + m_scene.CrossPrimGroupIntoNewRegion(regionHandle, gobj); + } + } + m_attachments.Clear(); + } + } + + public void initializeScenePresence(IClientAPI client, RegionInfo region, Scene scene) + { + m_controllingClient = client; + m_regionInfo = region; + m_scene = scene; + RegisterToEvents(); + + /* + AbsolutePosition = client.StartPos; + + Animations = new AvatarAnimations(); + Animations.LoadAnims(); + + m_animations = new List(); + m_animations.Add(Animations.AnimsLLUUID["STAND"]); + m_animationSeqs.Add(m_controllingClient.NextAnimationSequenceNumber); + + SetDirectionVectors(); + */ + } + #region Status Methods /// @@ -542,7 +1092,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[SCENEPRESENCE]: Upgrading child agent {0}, {1} to a root agent in {2}", // Name, UUID, m_scene.RegionInfo.RegionName); - + m_isChildAgent = false; AbsolutePosition = pos; @@ -558,7 +1108,7 @@ namespace OpenSim.Region.Environment.Scenes //{ m_scene.SendAllSceneObjectsToClient(this); m_scene.LandChannel.sendLandUpdate(this, true); - + //m_gotAllObjectsInScene = true; //} } @@ -572,9 +1122,9 @@ namespace OpenSim.Region.Environment.Scenes /// public void MakeChildAgent() { - if(m_animations.Count > 0) + if (m_animations.Count > 0) { - LLUUID movement=m_animations[0]; + LLUUID movement = m_animations[0]; m_animations.Clear(); m_animationSeqs.Clear(); @@ -584,7 +1134,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[SCENEPRESENCE]: Downgrading child agent {0}, {1} to a root agent in {2}", // Name, UUID, m_scene.RegionInfo.RegionName); - + Velocity = new LLVector3(0, 0, 0); m_isChildAgent = true; m_scene.SwapRootAgentCount(true); @@ -841,9 +1391,8 @@ namespace OpenSim.Region.Environment.Scenes ((flags & (uint) AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)); // Are the collision requirements fulfilled? - bool colliding = (m_physicsActor.IsColliding == true); + bool colliding = m_physicsActor.IsColliding; - if (m_physicsActor.Flying && colliding && controlland) { @@ -857,9 +1406,9 @@ namespace OpenSim.Region.Environment.Scenes UpdateMovementAnimations(update_movementflag); } } - + m_scene.EventManager.TriggerOnClientMovement(this); - + m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); } @@ -886,9 +1435,9 @@ namespace OpenSim.Region.Environment.Scenes AddToPhysicalScene(); } - m_pos += m_parentPosition + new LLVector3(0.0f, 0.0f, 2.0f*m_sitAvatarHeight); + m_pos += m_parentPosition + new LLVector3(0.0f, 0.0f, 2.0f * m_sitAvatarHeight); m_parentPosition = new LLVector3(); - + m_parentID = 0; SendFullUpdateToAllClients(); @@ -991,7 +1540,7 @@ namespace OpenSim.Region.Environment.Scenes } else { - m_log.Warn("Sit requested on unknown object: " + targetID.ToString()); + m_log.Warn("Sit requested on unknown object: " + targetID); } SendSitResponse(remoteClient, targetID, offset); } @@ -1053,11 +1602,11 @@ namespace OpenSim.Region.Environment.Scenes public void AddAnimation(LLUUID animID) { - if(m_isChildAgent) + if (m_isChildAgent) return; // Don't let this animation become the movement animation - if(m_animations.Count < 1) + if (m_animations.Count < 1) SetMovementAnimation(Animations.AnimsLLUUID["STAND"]); if (!m_animations.Contains(animID)) @@ -1070,7 +1619,7 @@ namespace OpenSim.Region.Environment.Scenes public void RemoveAnimation(LLUUID animID) { - if(m_isChildAgent) + if (m_isChildAgent) return; if (m_animations.Contains(animID)) @@ -1084,11 +1633,11 @@ namespace OpenSim.Region.Environment.Scenes // What a HACK!! Anim list really needs to be an object! int idx; - for(idx=0;idx < m_animations.Count;idx++) + for (idx = 0; idx < m_animations.Count; idx++) { - if(m_animations[idx] == animID) + if (m_animations[idx] == animID) { - int seq=m_animationSeqs[idx]; + int seq = m_animationSeqs[idx]; m_animations.Remove(animID); m_animationSeqs.Remove(seq); @@ -1117,7 +1666,7 @@ namespace OpenSim.Region.Environment.Scenes /// protected void SetMovementAnimation(LLUUID anim) { - if(m_animations.Count < 1) + if (m_animations.Count < 1) { m_animations.Add(Animations.AnimsLLUUID["STAND"]); m_animationSeqs.Add(1); @@ -1150,8 +1699,6 @@ namespace OpenSim.Region.Environment.Scenes /// protected void UpdateMovementAnimations(bool update_movementflag) { - - if (update_movementflag) { // Are we moving? @@ -1184,7 +1731,8 @@ namespace OpenSim.Region.Environment.Scenes SetMovementAnimation(Animations.AnimsLLUUID["JUMP"]); } catch (KeyNotFoundException) - { } + { + } } else if (m_setAlwaysRun) { @@ -1194,7 +1742,8 @@ namespace OpenSim.Region.Environment.Scenes SetMovementAnimation(Animations.AnimsLLUUID["RUN"]); } catch (KeyNotFoundException) - { } + { + } } else { @@ -1204,8 +1753,8 @@ namespace OpenSim.Region.Environment.Scenes SetMovementAnimation(Animations.AnimsLLUUID["WALK"]); } catch (KeyNotFoundException) - { } - + { + } } } else @@ -1239,15 +1788,14 @@ namespace OpenSim.Region.Environment.Scenes // We're not moving.. and we're not doing anything.. so play the stand animation try { - SetMovementAnimation(Animations.AnimsLLUUID["STAND"]); } catch (KeyNotFoundException) - { } + { + } } } } - } /// @@ -1262,13 +1810,13 @@ namespace OpenSim.Region.Environment.Scenes } m_perfMonMS = System.Environment.TickCount; - + m_rotation = rotation; NewForce newVelocity = new NewForce(); - Vector3 direc = rotation*vec; + Vector3 direc = rotation * vec; direc.Normalize(); - direc *= 0.03f*128f; + direc *= 0.03f * 128f; if (m_physicsActor.Flying) { direc *= 4; @@ -1300,7 +1848,8 @@ namespace OpenSim.Region.Environment.Scenes SetMovementAnimation(Animations.AnimsLLUUID["JUMP"]); } catch (KeyNotFoundException) - { } + { + } } } } @@ -1346,23 +1895,18 @@ namespace OpenSim.Region.Environment.Scenes m_updateCount = 0; } } - else if ((Util.GetDistanceTo(lastPhysPos, AbsolutePosition) > 0.02) || (Util.GetDistanceTo(m_lastVelocity, m_velocity) > 0.02)) // physics-related movement + else if ((Util.GetDistanceTo(lastPhysPos, AbsolutePosition) > 0.02) || (Util.GetDistanceTo(m_lastVelocity, m_velocity) > 0.02)) + // physics-related movement { - - // Send Terse Update to all clients updates lastPhysPos and m_lastVelocity // doing the above assures us that we know what we sent the clients last SendTerseUpdateToAllClients(); m_updateCount = 0; - - - } // followed suggestion from mic bowman. reversed the two lines below. CheckForBorderCrossing(); CheckForSignificantMovement(); // sends update to the modules. - } } @@ -1381,7 +1925,7 @@ namespace OpenSim.Region.Environment.Scenes LLVector3 pos = m_pos; LLVector3 vel = Velocity; LLQuaternion rot = new LLQuaternion(m_bodyRot.x, m_bodyRot.y, m_bodyRot.z, m_bodyRot.w); - remoteClient.SendAvatarTerseUpdate(m_regionHandle, (ushort)(m_scene.TimeDilation * (float)ushort.MaxValue), LocalId, new LLVector3(pos.X, pos.Y, pos.Z), + remoteClient.SendAvatarTerseUpdate(m_regionHandle, (ushort) (m_scene.TimeDilation * ushort.MaxValue), LocalId, new LLVector3(pos.X, pos.Y, pos.Z), new LLVector3(vel.X, vel.Y, vel.Z), rot); m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); @@ -1401,7 +1945,6 @@ namespace OpenSim.Region.Environment.Scenes lastPhysPos = AbsolutePosition; m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); - } public void SendCoarseLocations() @@ -1497,15 +2040,15 @@ namespace OpenSim.Region.Environment.Scenes /// public void SendAppearanceToAllOtherAgents() { - m_perfMonMS=System.Environment.TickCount; + m_perfMonMS = System.Environment.TickCount; m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) - { - if (scenePresence.UUID != UUID) { - m_appearance.SendAppearanceToOtherAgent(scenePresence); - } - }); + if (scenePresence.UUID != UUID) + { + m_appearance.SendAppearanceToOtherAgent(scenePresence); + } + }); m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); } @@ -1534,7 +2077,7 @@ namespace OpenSim.Region.Environment.Scenes /// public void SendAnimPack(LLUUID[] animations, int[] seqs) { - if(m_isChildAgent) + if (m_isChildAgent) return; m_scene.Broadcast( @@ -1570,10 +2113,10 @@ namespace OpenSim.Region.Environment.Scenes } // Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m - if (Util.GetDistanceTo(AbsolutePosition,m_LastChildAgentUpdatePosition) > 32) + if (Util.GetDistanceTo(AbsolutePosition, m_LastChildAgentUpdatePosition) > 32) { ChildAgentDataUpdate cadu = new ChildAgentDataUpdate(); - cadu.ActiveGroupID=LLUUID.Zero.UUID; + cadu.ActiveGroupID = LLUUID.Zero.UUID; cadu.AgentID = UUID.UUID; cadu.alwaysrun = m_setAlwaysRun; cadu.AVHeight = m_avHeight; @@ -1585,8 +2128,8 @@ namespace OpenSim.Region.Environment.Scenes cadu.Position = new sLLVector3(AbsolutePosition); cadu.regionHandle = m_scene.RegionInfo.RegionHandle; cadu.throttles = ControllingClient.GetThrottlesPacked(1f); - cadu.Velocity = new sLLVector3(Velocity); - m_scene.SendOutChildAgentUpdates(cadu,this); + cadu.Velocity = new sLLVector3(Velocity); + m_scene.SendOutChildAgentUpdates(cadu, this); m_LastChildAgentUpdatePosition.X = AbsolutePosition.X; m_LastChildAgentUpdatePosition.Y = AbsolutePosition.Y; m_LastChildAgentUpdatePosition.Z = AbsolutePosition.Z; @@ -1606,9 +2149,9 @@ namespace OpenSim.Region.Environment.Scenes LLVector3 vel = Velocity; float timeStep = 0.1f; - pos2.X = pos2.X + (vel.X*timeStep); - pos2.Y = pos2.Y + (vel.Y*timeStep); - pos2.Z = pos2.Z + (vel.Z*timeStep); + pos2.X = pos2.X + (vel.X * timeStep); + pos2.Y = pos2.Y + (vel.Y * timeStep); + pos2.Z = pos2.Z + (vel.Z * timeStep); if ((pos2.X < 0) || (pos2.X > Constants.RegionSize)) { @@ -1663,10 +2206,10 @@ namespace OpenSim.Region.Environment.Scenes } LLVector3 vel = m_velocity; - ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * Constants.RegionSize), (uint)(neighboury * Constants.RegionSize)); + ulong neighbourHandle = Helpers.UIntsToLong((neighbourx * Constants.RegionSize), (neighboury * Constants.RegionSize)); SimpleRegionInfo neighbourRegion = m_scene.RequestNeighbouringRegionInfo(neighbourHandle); if (neighbourRegion != null) - { + { // When the neighbour is informed of the border crossing, it will set up CAPS handlers for the avatar // This means we need to remove the current caps handler here and possibly compensate later, // in case both scenes are being hosted on the same region server. Messy @@ -1676,17 +2219,17 @@ namespace OpenSim.Region.Environment.Scenes m_scene.InformNeighbourOfCrossing(neighbourHandle, m_controllingClient.AgentId, newpos, m_physicsActor.Flying); if (res) - { + { AgentCircuitData circuitdata = m_controllingClient.RequestClientInfo(); // TODO Should construct this behind a method - string capsPath = + string capsPath = "http://" + neighbourRegion.ExternalHostName + ":" + neighbourRegion.HttpPort - + "/CAPS/" + circuitdata.CapsPath + "0000/"; - + + "/CAPS/" + circuitdata.CapsPath + "0000/"; + m_log.DebugFormat( - "[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, m_uuid); - + "[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, m_uuid); + m_controllingClient.CrossRegion(neighbourHandle, newpos, vel, neighbourRegion.ExternalEndPoint, capsPath); MakeChildAgent(); @@ -1703,128 +2246,40 @@ namespace OpenSim.Region.Environment.Scenes #endregion - /// - /// This allows the Sim owner the abiility to kick users from their sim currently. - /// It tells the client that the agent has permission to do so. - /// - public void GrantGodlikePowers(LLUUID agentID, LLUUID sessionID, LLUUID token, bool godStatus) - { - GrantGodlikePowersPacket respondPacket = new GrantGodlikePowersPacket(); - GrantGodlikePowersPacket.GrantDataBlock gdb = new GrantGodlikePowersPacket.GrantDataBlock(); - GrantGodlikePowersPacket.AgentDataBlock adb = new GrantGodlikePowersPacket.AgentDataBlock(); - - adb.AgentID = agentID; - adb.SessionID = sessionID; // More security - - if (godStatus) - { - gdb.GodLevel = (byte)250; - m_godlevel = 250; - } - else - { - gdb.GodLevel = (byte)0; - m_godlevel = 0; - } - - gdb.Token = token; - //respondPacket.AgentData = (GrantGodlikePowersPacket.AgentDataBlock)ablock; - respondPacket.GrantData = gdb; - respondPacket.AgentData = adb; - ControllingClient.OutPacket(respondPacket, ThrottleOutPacketType.Task); - } + #region Nested type: Dir_ControlFlags /// - /// This updates important decision making data about a child agent - /// The main purpose is to figure out what objects to send to a child agent that's in a neighboring region + /// Implemented Control Flags /// - public void ChildAgentDataUpdate(ChildAgentDataUpdate cAgentData, uint tRegionX, uint tRegionY, uint rRegionX, uint rRegionY) + private enum Dir_ControlFlags { - // - int shiftx = ((int)rRegionX - (int)tRegionX) * (int)Constants.RegionSize; - int shifty = ((int)rRegionY - (int)tRegionY) * (int)Constants.RegionSize; - - m_DrawDistance = cAgentData.drawdistance; - m_pos = new LLVector3(cAgentData.Position.x + shiftx, cAgentData.Position.y + shifty, cAgentData.Position.z); - - // It's hard to say here.. We can't really tell where the camera position is unless it's in world cordinates from the sending region - m_CameraCenter = - new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); - - - m_godlevel = cAgentData.godlevel; - SetHeight(cAgentData.AVHeight); - - ControllingClient.SetChildAgentThrottle(cAgentData.throttles); - - - - // Sends out the objects in the user's draw distance if m_sendTasksToChild is true. - if (m_scene.m_seeIntoRegionFromNeighbor) - m_scene.SendAllSceneObjectsToClient(this); - //cAgentData.AVHeight; - //cAgentData.regionHandle; - //m_velocity = cAgentData.Velocity; + DIR_CONTROL_FLAG_FORWARD = AgentManager.ControlFlags.AGENT_CONTROL_AT_POS, + DIR_CONTROL_FLAG_BACK = AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG, + DIR_CONTROL_FLAG_LEFT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS, + DIR_CONTROL_FLAG_RIGHT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG, + DIR_CONTROL_FLAG_UP = AgentManager.ControlFlags.AGENT_CONTROL_UP_POS, + DIR_CONTROL_FLAG_DOWN = AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG, + DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG } - /// - /// Handles part of the PID controller function for moving an avatar. - /// - public override void UpdateMovement() - { - m_newForce = false; - lock (m_forcesList) - { - if (m_forcesList.Count > 0) - { - for (int i = 0; i < m_forcesList.Count; i++) - { - NewForce force = m_forcesList[i]; + #endregion - m_updateflag = true; - try - { - movementvector.X = force.X; - movementvector.Y = force.Y; - movementvector.Z = force.Z; - Velocity = movementvector; - } - catch (NullReferenceException) - { - // Under extreme load, this returns a NullReference Exception that we can ignore. - // Ignoring this causes no movement to be sent to the physics engine... - // which when the scene is moving at 1 frame every 10 seconds, it doesn't really matter! - } - m_newForce = true; - } - for (int i = 0; i < m_forcesList.Count; i++) - { - m_forcesList.RemoveAt(0); - } - } - } - } + #region Nested type: NewForce - static ScenePresence() - { - LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); - DefaultTexture = textu.ToBytes(); - } - - [Serializable] + [Serializable] public class NewForce { public float X; public float Y; public float Z; - - public NewForce() - { - } } - [Serializable] - public class ScenePartUpdate : ISerializable + #endregion + + #region Nested type: ScenePartUpdate + + [Serializable] + public class ScenePartUpdate : ISerializable { public LLUUID FullID; public uint LastFullUpdateTime; @@ -1846,15 +2301,17 @@ namespace OpenSim.Region.Environment.Scenes throw new ArgumentNullException("info"); } - FullID = new LLUUID((Guid)info.GetValue("FullID", typeof(Guid))); - LastFullUpdateTime = (uint)info.GetValue("LastFullUpdateTime", typeof(uint)); - LastTerseUpdateTime = (uint)info.GetValue("LastTerseUpdateTime", typeof(uint)); + FullID = new LLUUID((Guid) info.GetValue("FullID", typeof (Guid))); + LastFullUpdateTime = (uint) info.GetValue("LastFullUpdateTime", typeof (uint)); + LastTerseUpdateTime = (uint) info.GetValue("LastTerseUpdateTime", typeof (uint)); //System.Console.WriteLine("ScenePartUpdate Deserialize END"); } + #region ISerializable Members + [SecurityPermission(SecurityAction.LinkDemand, - Flags = SecurityPermissionFlag.SerializationFormatter)] + Flags = SecurityPermissionFlag.SerializationFormatter)] public virtual void GetObjectData( SerializationInfo info, StreamingContext context) { @@ -1867,473 +2324,10 @@ namespace OpenSim.Region.Environment.Scenes info.AddValue("LastFullUpdateTime", LastFullUpdateTime); info.AddValue("LastTerseUpdateTime", LastTerseUpdateTime); } + + #endregion } - public override void SetText(string text, Vector3 color, double alpha) - { - throw new Exception("Can't set Text on avatar."); - } - - /// - /// Adds a physical representation of the avatar to the Physics plugin - /// - public void AddToPhysicalScene() - { - PhysicsScene scene = m_scene.PhysicsScene; - - PhysicsVector pVec = - new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y, - AbsolutePosition.Z); - if (m_avHeight == 127.0f) - { - m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, 1.56f)); - } - else - { - m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, m_avHeight)); - } - //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; - m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; - m_physicsActor.LocalID = LocalId; - } - - // Event called by the physics plugin to tell the avatar about a collision. - private void PhysicsCollisionUpdate(EventArgs e) - { - bool isUserMoving = Velocity.X > 0 || Velocity.Y > 0; - UpdateMovementAnimations(isUserMoving); - } - - internal void Close() - { - lock (m_attachments) - { - foreach (SceneObjectGroup grp in m_attachments) - { - // ControllingClient may be null at this point! - m_scene.m_innerScene.DetachSingleAttachmentToInv(grp.GetFromAssetID(), ControllingClient); - } - m_attachments.Clear(); - } - lock (m_knownPrimUUID) - { - m_knownPrimUUID.Clear(); - } - lock (m_knownChildRegions) - { - m_knownChildRegions.Clear(); - } - lock (m_updateTimes) - { - m_updateTimes.Clear(); - } - lock (m_partsUpdateQueue) - { - m_partsUpdateQueue.Clear(); - } - - RemoveFromPhysicalScene(); - GC.Collect(); - } - - public ScenePresence() - { -/* JB - if (Animations == null) - { - Animations = new AvatarAnimations(); - Animations.LoadAnims(); - } -*/ - if (DefaultTexture == null) - { - LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); - DefaultTexture = textu.ToBytes(); - } - } - public void AddAttachment(SceneObjectGroup gobj) - { - lock (m_attachments) - { - m_attachments.Add(gobj); - } - } - public void RemoveAttachment(SceneObjectGroup gobj) - { - lock (m_attachments) - { - if (m_attachments.Contains(gobj)) - { - m_attachments.Remove(gobj); - } - } - } - public void CrossAttachmentsIntoNewRegion(ulong regionHandle) - { - lock (m_attachments) - { - foreach (SceneObjectGroup gobj in m_attachments) - { - // If the prim group is null then something must have happened to it! - if (gobj != null) - { - // Set the parent localID to 0 so it transfers over properly. - gobj.RootPart.SetParentLocalId(0); - gobj.RootPart.m_IsAttachment = false; - gobj.AbsolutePosition = gobj.RootPart.m_attachedPos; - gobj.RootPart.LastOwnerID = gobj.GetFromAssetID(); - m_scene.CrossPrimGroupIntoNewRegion(regionHandle, gobj); - } - } - m_attachments.Clear(); - } - - } - public void initializeScenePresence(IClientAPI client, RegionInfo region, Scene scene) - { - m_controllingClient = client; - m_regionInfo = region; - m_scene = scene; - RegisterToEvents(); - - /* - AbsolutePosition = client.StartPos; - - Animations = new AvatarAnimations(); - Animations.LoadAnims(); - - m_animations = new List(); - m_animations.Add(Animations.AnimsLLUUID["STAND"]); - m_animationSeqs.Add(m_controllingClient.NextAnimationSequenceNumber); - - SetDirectionVectors(); - */ - } - - protected ScenePresence(SerializationInfo info, StreamingContext context) - : base (info, context) - { - //System.Console.WriteLine("ScenePresence Deserialize BGN"); - - if (info == null) - { - throw new ArgumentNullException("info"); - } -/* JB - if (Animations == null) - { - Animations = new AvatarAnimations(); - Animations.LoadAnims(); - } -*/ - if (DefaultTexture == null) - { - LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); - DefaultTexture = textu.ToBytes(); - } - - List animations_work = (List)info.GetValue("m_animations", typeof(List)); - - foreach (Guid guid in animations_work) - { - m_animations.Add(new LLUUID(guid)); - } - - m_animationSeqs = (List)info.GetValue("m_animationSeqs", typeof(List)); - m_updateflag = (bool)info.GetValue("m_updateflag", typeof(bool)); - m_movementflag = (byte)info.GetValue("m_movementflag", typeof(byte)); - m_forcesList = (List)info.GetValue("m_forcesList", typeof(List)); - m_updateCount = (short)info.GetValue("m_updateCount", typeof(short)); - m_requestedSitTargetID = (uint)info.GetValue("m_requestedSitTargetID", typeof(uint)); - - m_requestedSitOffset - = new LLVector3( - (float)info.GetValue("m_requestedSitOffset.X", typeof(float)), - (float)info.GetValue("m_requestedSitOffset.Y", typeof(float)), - (float)info.GetValue("m_requestedSitOffset.Z", typeof(float))); - - m_sitAvatarHeight = (float)info.GetValue("m_sitAvatarHeight", typeof(float)); - m_godlevel = (float)info.GetValue("m_godlevel", typeof(float)); - m_setAlwaysRun = (bool)info.GetValue("m_setAlwaysRun", typeof(bool)); - - m_bodyRot - = new Quaternion( - (float)info.GetValue("m_bodyRot.w", typeof(float)), - (float)info.GetValue("m_bodyRot.x", typeof(float)), - (float)info.GetValue("m_bodyRot.y", typeof(float)), - (float)info.GetValue("m_bodyRot.z", typeof(float))); - - IsRestrictedToRegion = (bool)info.GetValue("IsRestrictedToRegion", typeof(bool)); - m_newForce = (bool)info.GetValue("m_newForce", typeof(bool)); - //m_newAvatar = (bool)info.GetValue("m_newAvatar", typeof(bool)); - m_newCoarseLocations = (bool)info.GetValue("m_newCoarseLocations", typeof(bool)); - m_gotAllObjectsInScene = (bool)info.GetValue("m_gotAllObjectsInScene", typeof(bool)); - m_avHeight = (float)info.GetValue("m_avHeight", typeof(float)); - crossingFromRegion = (ulong)info.GetValue("crossingFromRegion", typeof(ulong)); - - List Dir_Vectors_work = (List)info.GetValue("Dir_Vectors", typeof(List)); - List Dir_Vectors_work2 = new List(); - - foreach (float[] f3 in Dir_Vectors_work) - { - Dir_Vectors_work2.Add(new Vector3(f3[0], f3[1], f3[2])); - } - - Dir_Vectors = Dir_Vectors_work2.ToArray(); - - lastPhysPos - = new LLVector3( - (float)info.GetValue("lastPhysPos.X", typeof(float)), - (float)info.GetValue("lastPhysPos.Y", typeof(float)), - (float)info.GetValue("lastPhysPos.Z", typeof(float))); - - m_CameraCenter - = new Vector3( - (float)info.GetValue("m_CameraCenter.X", typeof(float)), - (float)info.GetValue("m_CameraCenter.Y", typeof(float)), - (float)info.GetValue("m_CameraCenter.Z", typeof(float))); - - m_CameraAtAxis - = new Vector3( - (float)info.GetValue("m_CameraAtAxis.X", typeof(float)), - (float)info.GetValue("m_CameraAtAxis.Y", typeof(float)), - (float)info.GetValue("m_CameraAtAxis.Z", typeof(float))); - - m_CameraLeftAxis - = new Vector3( - (float)info.GetValue("m_CameraLeftAxis.X", typeof(float)), - (float)info.GetValue("m_CameraLeftAxis.Y", typeof(float)), - (float)info.GetValue("m_CameraLeftAxis.Z", typeof(float))); - - m_CameraUpAxis - = new Vector3( - (float)info.GetValue("m_CameraUpAxis.X", typeof(float)), - (float)info.GetValue("m_CameraUpAxis.Y", typeof(float)), - (float)info.GetValue("m_CameraUpAxis.Z", typeof(float))); - - m_DrawDistance = (float)info.GetValue("m_DrawDistance", typeof(float)); - m_appearance = (AvatarAppearance)info.GetValue("m_appearance", typeof(AvatarAppearance)); - m_knownChildRegions = (List)info.GetValue("m_knownChildRegions", typeof(List)); - - posLastSignificantMove - = new LLVector3( - (float)info.GetValue("posLastSignificantMove.X", typeof(float)), - (float)info.GetValue("posLastSignificantMove.Y", typeof(float)), - (float)info.GetValue("posLastSignificantMove.Z", typeof(float))); - - // m_partsUpdateQueue = (UpdateQueue)info.GetValue("m_partsUpdateQueue", typeof(UpdateQueue)); - - /* - Dictionary updateTimes_work - = (Dictionary)info.GetValue("m_updateTimes", typeof(Dictionary)); - - foreach (Guid id in updateTimes_work.Keys) - { - m_updateTimes.Add(new LLUUID(id), updateTimes_work[id]); - } - */ - m_regionHandle = (ulong)info.GetValue("m_regionHandle", typeof(ulong)); - m_firstname = (string)info.GetValue("m_firstname", typeof(string)); - m_lastname = (string)info.GetValue("m_lastname", typeof(string)); - m_allowMovement = (bool)info.GetValue("m_allowMovement", typeof(bool)); - m_parentPosition = new LLVector3((float)info.GetValue("m_parentPosition.X", typeof(float)), - (float)info.GetValue("m_parentPosition.Y", typeof(float)), - (float)info.GetValue("m_parentPosition.Z", typeof(float))); - - m_isChildAgent = (bool)info.GetValue("m_isChildAgent", typeof(bool)); - m_parentID = (uint)info.GetValue("m_parentID", typeof(uint)); - -// for OpenSim_v0.5 - currentParcelUUID = new LLUUID((Guid)info.GetValue("currentParcelUUID", typeof(Guid))); - - lastKnownAllowedPosition - = new Vector3( - (float)info.GetValue("lastKnownAllowedPosition.X", typeof(float)), - (float)info.GetValue("lastKnownAllowedPosition.Y", typeof(float)), - (float)info.GetValue("lastKnownAllowedPosition.Z", typeof(float))); - - sentMessageAboutRestrictedParcelFlyingDown = (bool)info.GetValue("sentMessageAboutRestrictedParcelFlyingDown", typeof(bool)); - - m_LastChildAgentUpdatePosition - = new LLVector3( - (float)info.GetValue("m_LastChildAgentUpdatePosition.X", typeof(float)), - (float)info.GetValue("m_LastChildAgentUpdatePosition.Y", typeof(float)), - (float)info.GetValue("m_LastChildAgentUpdatePosition.Z", typeof(float))); - - m_perfMonMS = (int)info.GetValue("m_perfMonMS", typeof(int)); - m_AgentControlFlags = (uint)info.GetValue("m_AgentControlFlags", typeof(uint)); - - m_headrotation - = new LLQuaternion( - (float)info.GetValue("m_headrotation.W", typeof(float)), - (float)info.GetValue("m_headrotation.X", typeof(float)), - (float)info.GetValue("m_headrotation.Y", typeof(float)), - (float)info.GetValue("m_headrotation.Z", typeof(float))); - - m_state = (byte)info.GetValue("m_state", typeof(byte)); - - List knownPrimUUID_work = (List)info.GetValue("m_knownPrimUUID", typeof(List)); - - foreach (Guid id in knownPrimUUID_work) - { - m_knownPrimUUID.Add(new LLUUID(id)); - } - - //System.Console.WriteLine("ScenePresence Deserialize END"); - } - - [SecurityPermission(SecurityAction.LinkDemand, - Flags = SecurityPermissionFlag.SerializationFormatter)] - public override void GetObjectData( - SerializationInfo info, StreamingContext context) - { - if (info == null) - { - throw new ArgumentNullException("info"); - } - - base.GetObjectData(info, context); - - List animations_work = new List(); - - foreach (LLUUID uuid in m_animations) - { - animations_work.Add(uuid.UUID); - } - - info.AddValue("m_animations", animations_work); - - info.AddValue("m_animationSeqs", m_animationSeqs); - info.AddValue("m_updateflag", m_updateflag); - info.AddValue("m_movementflag", m_movementflag); - info.AddValue("m_forcesList", m_forcesList); - info.AddValue("m_updateCount", m_updateCount); - info.AddValue("m_requestedSitTargetID", m_requestedSitTargetID); - - // LLVector3 - info.AddValue("m_requestedSitOffset.X", m_requestedSitOffset.X); - info.AddValue("m_requestedSitOffset.Y", m_requestedSitOffset.Y); - info.AddValue("m_requestedSitOffset.Z", m_requestedSitOffset.Z); - - info.AddValue("m_sitAvatarHeight", m_sitAvatarHeight); - info.AddValue("m_godlevel", m_godlevel); - info.AddValue("m_setAlwaysRun", m_setAlwaysRun); - - // Quaternion - info.AddValue("m_bodyRot.w", m_bodyRot.w); - info.AddValue("m_bodyRot.x", m_bodyRot.x); - info.AddValue("m_bodyRot.y", m_bodyRot.y); - info.AddValue("m_bodyRot.z", m_bodyRot.z); - - info.AddValue("IsRestrictedToRegion", IsRestrictedToRegion); - info.AddValue("m_newForce", m_newForce); - //info.AddValue("m_newAvatar", m_newAvatar); - info.AddValue("m_newCoarseLocations", m_newCoarseLocations); - info.AddValue("m_gotAllObjectsInScene", m_gotAllObjectsInScene); - info.AddValue("m_avHeight", m_avHeight); - - // info.AddValue("m_regionInfo", m_regionInfo); - - info.AddValue("crossingFromRegion", crossingFromRegion); - - List Dir_Vectors_work = new List(); - - foreach (Vector3 v3 in Dir_Vectors) - { - Dir_Vectors_work.Add(new float[] { v3.x, v3.y, v3.z }); - } - - info.AddValue("Dir_Vectors", Dir_Vectors_work); - - // LLVector3 - info.AddValue("lastPhysPos.X", lastPhysPos.X); - info.AddValue("lastPhysPos.Y", lastPhysPos.Y); - info.AddValue("lastPhysPos.Z", lastPhysPos.Z); - - // Vector3 - info.AddValue("m_CameraCenter.X", m_CameraCenter.x); - info.AddValue("m_CameraCenter.Y", m_CameraCenter.y); - info.AddValue("m_CameraCenter.Z", m_CameraCenter.z); - - // Vector3 - info.AddValue("m_CameraAtAxis.X", m_CameraAtAxis.x); - info.AddValue("m_CameraAtAxis.Y", m_CameraAtAxis.y); - info.AddValue("m_CameraAtAxis.Z", m_CameraAtAxis.z); - - // Vector3 - info.AddValue("m_CameraLeftAxis.X", m_CameraLeftAxis.x); - info.AddValue("m_CameraLeftAxis.Y", m_CameraLeftAxis.y); - info.AddValue("m_CameraLeftAxis.Z", m_CameraLeftAxis.z); - - // Vector3 - info.AddValue("m_CameraUpAxis.X", m_CameraUpAxis.x); - info.AddValue("m_CameraUpAxis.Y", m_CameraUpAxis.y); - info.AddValue("m_CameraUpAxis.Z", m_CameraUpAxis.z); - - info.AddValue("m_DrawDistance", m_DrawDistance); - info.AddValue("m_appearance", m_appearance); - info.AddValue("m_knownChildRegions", m_knownChildRegions); - - // LLVector3 - info.AddValue("posLastSignificantMove.X", posLastSignificantMove.X); - info.AddValue("posLastSignificantMove.Y", posLastSignificantMove.Y); - info.AddValue("posLastSignificantMove.Z", posLastSignificantMove.Z); - - //info.AddValue("m_partsUpdateQueue", m_partsUpdateQueue); - - /* - Dictionary updateTimes_work = new Dictionary(); - - foreach ( LLUUID id in m_updateTimes.Keys) - { - updateTimes_work.Add(id.UUID, m_updateTimes[id]); - } - - info.AddValue("m_updateTimes", updateTimes_work); - */ - - info.AddValue("m_regionHandle", m_regionHandle); - info.AddValue("m_firstname", m_firstname); - info.AddValue("m_lastname", m_lastname); - info.AddValue("m_allowMovement", m_allowMovement); - //info.AddValue("m_physicsActor", m_physicsActor); - info.AddValue("m_parentPosition.X", m_parentPosition.X); - info.AddValue("m_parentPosition.Y", m_parentPosition.Y); - info.AddValue("m_parentPosition.Z", m_parentPosition.Z); - info.AddValue("m_isChildAgent", m_isChildAgent); - info.AddValue("m_parentID", m_parentID); - -// for OpenSim_v0.5 - info.AddValue("currentParcelUUID", currentParcelUUID.UUID); - - info.AddValue("lastKnownAllowedPosition.X", lastKnownAllowedPosition.x); - info.AddValue("lastKnownAllowedPosition.Y", lastKnownAllowedPosition.y); - info.AddValue("lastKnownAllowedPosition.Z", lastKnownAllowedPosition.z); - - info.AddValue("sentMessageAboutRestrictedParcelFlyingDown", sentMessageAboutRestrictedParcelFlyingDown); - - info.AddValue("m_LastChildAgentUpdatePosition.X", m_LastChildAgentUpdatePosition.X); - info.AddValue("m_LastChildAgentUpdatePosition.Y", m_LastChildAgentUpdatePosition.Y); - info.AddValue("m_LastChildAgentUpdatePosition.Z", m_LastChildAgentUpdatePosition.Z); - - info.AddValue("m_perfMonMS", m_perfMonMS); - info.AddValue("m_AgentControlFlags", m_AgentControlFlags); - - info.AddValue("m_headrotation.W", m_headrotation.W); - info.AddValue("m_headrotation.X", m_headrotation.X); - info.AddValue("m_headrotation.Y", m_headrotation.Y); - info.AddValue("m_headrotation.Z", m_headrotation.Z); - - info.AddValue("m_state", m_state); - - List knownPrimUUID_work = new List(); - - foreach (LLUUID id in m_knownPrimUUID) - { - knownPrimUUID_work.Add(id.UUID); - } - - info.AddValue("m_knownPrimUUID", knownPrimUUID_work); - } + #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs b/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs index 8390f6463a..386d87bf68 100644 --- a/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs +++ b/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs @@ -39,8 +39,8 @@ namespace OpenSim.Region.Environment.Scenes public class SceneXmlLoader // can move to a module? { protected InnerScene m_innerScene; - protected RegionInfo m_regInfo; protected Scene m_parentScene; + protected RegionInfo m_regInfo; public SceneXmlLoader(Scene parentScene, InnerScene innerScene, RegionInfo regionInfo) { @@ -136,14 +136,13 @@ namespace OpenSim.Region.Environment.Scenes returnstring += grp.ToXmlString2(); returnstring += "\n"; return returnstring; - } public void LoadGroupFromXml2String(string xmlString) { XmlDocument doc = new XmlDocument(); XmlNode rootNode; - + XmlTextReader reader = new XmlTextReader(new StringReader(xmlString)); reader.WhitespaceHandling = WhitespaceHandling.None; doc.Load(reader); @@ -153,7 +152,6 @@ namespace OpenSim.Region.Environment.Scenes { CreatePrimFromXml(aPrimNode.OuterXml); } - } public void LoadPrimsFromXml2(string fileName) @@ -206,7 +204,7 @@ namespace OpenSim.Region.Environment.Scenes rootPart.PhysActor.LocalID = rootPart.LocalId; rootPart.DoPhysicsPropertyUpdate(UsePhysics, true); } - rootPart.Velocity = receivedVelocity; + rootPart.Velocity = receivedVelocity; } obj.ScheduleGroupForFullUpdate(); @@ -234,4 +232,4 @@ namespace OpenSim.Region.Environment.Scenes file.Close(); } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs b/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs index dbe2516438..ccb2aa74ab 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs @@ -44,4 +44,4 @@ namespace OpenSim.Region.Environment.Scenes.Scripting string TouchName { get; set; } void SetText(string text, Vector3 color, double alpha); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs b/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs index 4b1b56ae90..a37ce532f8 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs @@ -33,7 +33,9 @@ namespace OpenSim.Region.Environment.Scenes.Scripting { 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 { @@ -83,5 +85,7 @@ namespace OpenSim.Region.Environment.Scenes.Scripting { Console.WriteLine("Tried to SetText [{0}] on NullScriptHost", text); } + + #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineInterface.cs b/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineInterface.cs index b1ee519f4b..cb0e1e855a 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineInterface.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineInterface.cs @@ -35,4 +35,4 @@ namespace OpenSim.Region.Environment.Scenes.Scripting void Shutdown(); // void StartScript(string ScriptID, IScriptHost ObjectID); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineLoader.cs b/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineLoader.cs index 6216e2c041..0048e6b856 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineLoader.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineLoader.cs @@ -51,7 +51,7 @@ namespace OpenSim.Region.Environment.Scenes.Scripting { m_log.Error("[ScriptEngine]: " + "Error loading assembly \"" + EngineName + "\": " + e.Message + ", " + - e.StackTrace.ToString()); + e.StackTrace); } return ret; } @@ -116,4 +116,4 @@ namespace OpenSim.Region.Environment.Scenes.Scripting return ret; } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs index a53bfcd62e..1f02f23669 100644 --- a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs +++ b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs @@ -34,105 +34,68 @@ namespace OpenSim.Region.Environment.Scenes { public class SimStatsReporter { + #region Delegates + 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 - { - 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, + private SendStatResult handlerSendStatResult; + private int m_activePrim; + private int m_activeScripts; + private int m_agentMS; - // Havok4 related... May or may not be in upcoming LLclients - // (kelly added them sometime late in January 2008) - NumRCCSLODReduced = 25, - NumRCCSFixed = 26 - } + private int m_agentUpdates; + private int m_childAgents; + private int m_fps; - // Sending a stats update every 3 seconds - private int statsUpdatesEveryMS = 3000; - private float statsUpdateFactor = 0; - private float m_timeDilation = 0; - private int m_fps = 0; - private float m_pfps = 0; - private int m_agentUpdates = 0; - - private int m_frameMS = 0; - private int m_netMS = 0; - private int m_agentMS = 0; - private int m_physicsMS = 0; - private int m_imageMS = 0; - private int m_otherMS = 0; - -//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 m_frameMS; + private int m_imageMS; + private int m_inPacketsPerSecond; + private int m_netMS; + private int m_numPrim; + private int m_otherMS; + private int m_outPacketsPerSecond; + private int m_pendingDownloads; + private int m_pendingUploads; + private float m_pfps; + private int m_physicsMS; + private int m_rootAgents; + private int m_scriptLinesPerSecond; + private float m_timeDilation; + private int m_unAckedBytes; private int objectCapacity = 45000; - - - 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(); + private float statsUpdateFactor; + private int statsUpdatesEveryMS = 3000; public SimStatsReporter(RegionInfo regionData) { - - statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000); + statsUpdateFactor = (statsUpdatesEveryMS / 1000); ReportingRegion = regionData; - for (int i = 0; i<21;i++) + for (int i = 0; i < 21; i++) { sb[i] = new SimStatsPacket.StatBlock(); } m_report.AutoReset = true; m_report.Interval = statsUpdatesEveryMS; - m_report.Elapsed += new ElapsedEventHandler(statsHeartBeat); + m_report.Elapsed += statsHeartBeat; m_report.Enabled = true; } + public event SendStatResult OnSendStatsResult; + public void SetUpdateMS(int ms) { statsUpdatesEveryMS = ms; - statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000); + statsUpdateFactor = (statsUpdatesEveryMS / 1000); m_report.Interval = statsUpdatesEveryMS; } @@ -143,8 +106,8 @@ namespace OpenSim.Region.Environment.Scenes lock (m_report) { // Packet is already initialized and ready for data insert - - + + statpack.Region = rb; statpack.Region.RegionX = ReportingRegion.RegionLocX; statpack.Region.RegionY = ReportingRegion.RegionLocY; @@ -154,102 +117,102 @@ namespace OpenSim.Region.Environment.Scenes } catch (Exception) { - statpack.Region.RegionFlags = (uint) 0; + statpack.Region.RegionFlags = 0; } 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 // 0-50 is pretty close to 0-45 - float simfps = (int) ((m_fps * 5)); - + float simfps = ((m_fps * 5)); + //if (simfps > 45) //simfps = simfps - (simfps - 45); //if (simfps < 0) //simfps = 0; - + // float physfps = ((m_pfps / 1000)); - + //if (physfps > 600) //physfps = physfps - (physfps - 600); - + if (physfps < 0) physfps = 0; - -#endregion - + + #endregion + //Our time dilation is 0.91 when we're running a full speed, // therefore to make sure we get an appropriate range, // we have to factor in our error. (0.10f * statsUpdateFactor) // multiplies the fix for the error times the amount of times it'll occur a second // / 10 divides the value by the number of times the sim heartbeat runs (10fps) // Then we divide the whole amount by the amount of seconds pass in between stats updates. - + 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].StatValue = simfps/statsUpdateFactor; - + sb[1].StatValue = simfps / statsUpdateFactor; + sb[2].StatID = (uint) Stats.PhysicsFPS; sb[2].StatValue = physfps / statsUpdateFactor; - + sb[3].StatID = (uint) Stats.AgentUpdates; sb[3].StatValue = (m_agentUpdates / statsUpdateFactor); - + sb[4].StatID = (uint) Stats.Agents; sb[4].StatValue = m_rootAgents; - + sb[5].StatID = (uint) Stats.ChildAgents; sb[5].StatValue = m_childAgents; - + sb[6].StatID = (uint) Stats.TotalPrim; sb[6].StatValue = m_numPrim; - + sb[7].StatID = (uint) Stats.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[9].StatID = (uint)Stats.NetMS; + + sb[9].StatID = (uint) Stats.NetMS; 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[11].StatID = (uint)Stats.ImageMS ; + + sb[11].StatID = (uint) Stats.ImageMS; 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[13].StatID = (uint)Stats.InPacketsPerSecond; + + sb[13].StatID = (uint) Stats.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[15].StatID = (uint)Stats.UnAckedBytes; + + sb[15].StatID = (uint) Stats.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[17].StatID = (uint)Stats.PendingDownloads; + + sb[17].StatID = (uint) Stats.PendingDownloads; sb[17].StatValue = m_pendingDownloads; - - sb[18].StatID = (uint)Stats.PendingUploads; + + sb[18].StatID = (uint) Stats.PendingUploads; sb[18].StatValue = m_pendingUploads; - - sb[19].StatID = (uint)Stats.ActiveScripts; + + sb[19].StatID = (uint) Stats.ActiveScripts; sb[19].StatValue = m_activeScripts; - - sb[20].StatID = (uint)Stats.ScriptLinesPerSecond; + + sb[20].StatID = (uint) Stats.ScriptLinesPerSecond; sb[20].StatValue = m_scriptLinesPerSecond / statsUpdateFactor; - + statpack.Stat = sb; handlerSendStatResult = OnSendStatsResult; @@ -260,7 +223,7 @@ namespace OpenSim.Region.Environment.Scenes resetvalues(); } } - + private void resetvalues() { m_timeDilation = 0; @@ -284,6 +247,7 @@ namespace OpenSim.Region.Environment.Scenes } # region methods called from Scene + // The majority of these functions are additive // so that you can easily change the amount of // seconds in between sim stats updates @@ -292,10 +256,10 @@ namespace OpenSim.Region.Environment.Scenes { //float tdsetting = td; //if (tdsetting > 1.0f) - //tdsetting = (tdsetting - (tdsetting - 0.91f)); + //tdsetting = (tdsetting - (tdsetting - 0.91f)); //if (tdsetting < 0) - //tdsetting = 0.0f; + //tdsetting = 0.0f; m_timeDilation = td; } @@ -353,30 +317,35 @@ namespace OpenSim.Region.Environment.Scenes { m_frameMS += ms; } + public void addNetMS(int ms) { m_netMS += ms; } + public void addAgentMS(int ms) { m_agentMS += ms; } + public void addPhysicsMS(int ms) { m_physicsMS += ms; } + public void addImageMS(int ms) { m_imageMS += ms; } + public void addOtherMS(int ms) { m_otherMS += ms; } - + // private static readonly log4net.ILog m_log // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); - + public void addPendingDownload(int count) { m_pendingDownloads += count; @@ -399,5 +368,40 @@ namespace OpenSim.Region.Environment.Scenes } #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 } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/UndoState.cs b/OpenSim/Region/Environment/Scenes/UndoState.cs index daabd8d829..f16bb34644 100644 --- a/OpenSim/Region/Environment/Scenes/UndoState.cs +++ b/OpenSim/Region/Environment/Scenes/UndoState.cs @@ -32,8 +32,8 @@ namespace OpenSim.Region.Environment.Scenes public class UndoState { public LLVector3 Position = LLVector3.Zero; - public LLVector3 Scale = LLVector3.Zero; public LLQuaternion Rotation = LLQuaternion.Identity; + public LLVector3 Scale = LLVector3.Zero; public UndoState(LLVector3 pos, LLQuaternion rot, LLVector3 scale) { @@ -41,7 +41,7 @@ namespace OpenSim.Region.Environment.Scenes Rotation = rot; Scale = scale; } - + public UndoState(SceneObjectPart part) { if (part != null) @@ -50,18 +50,20 @@ namespace OpenSim.Region.Environment.Scenes { Position = part.AbsolutePosition; Rotation = part.RotationOffset; - } else { Position = part.GroupPosition; Rotation = part.RotationOffset; Scale = part.Shape.Scale; - } } } + public UndoState() + { + } + public bool Compare(SceneObjectPart part) { if (part != null) @@ -79,7 +81,6 @@ namespace OpenSim.Region.Environment.Scenes return true; else return false; - } } return false; @@ -90,7 +91,7 @@ namespace OpenSim.Region.Environment.Scenes if (part != null) { part.m_undoing = true; - + if (part.ParentID == 0) { part.ParentGroup.AbsolutePosition = Position; @@ -105,12 +106,7 @@ namespace OpenSim.Region.Environment.Scenes part.ScheduleTerseUpdate(); } part.m_undoing = false; - } } - - public UndoState() - { - } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/StorageManager.cs b/OpenSim/Region/Environment/StorageManager.cs index b9a42a2f39..2178b5e042 100644 --- a/OpenSim/Region/Environment/StorageManager.cs +++ b/OpenSim/Region/Environment/StorageManager.cs @@ -36,12 +36,7 @@ namespace OpenSim.Region.Environment { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private IRegionDataStore m_dataStore; - - public IRegionDataStore DataStore - { - get { return m_dataStore; } - } + private readonly IRegionDataStore m_dataStore; public StorageManager(IRegionDataStore storage) { @@ -74,5 +69,10 @@ namespace OpenSim.Region.Environment //TODO: Add checking and warning to make sure it initialised. } + + public IRegionDataStore DataStore + { + get { return m_dataStore; } + } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs b/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs index 24ce94b106..41f17e5e00 100644 --- a/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs +++ b/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs @@ -33,16 +33,15 @@ namespace OpenSim.Region.Environment.Types { public class BasicQuadTreeNode { - private List m_objects = new List(); - private BasicQuadTreeNode[] m_childNodes = null; - private BasicQuadTreeNode m_parent = null; - - private short m_leftX; - private short m_leftY; - private short m_width; - private short m_height; + private readonly short m_height; + private readonly short m_leftX; + private readonly short m_leftY; + private readonly List m_objects = new List(); + private readonly BasicQuadTreeNode m_parent; //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, short height) @@ -67,9 +66,9 @@ namespace OpenSim.Region.Environment.Types } 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); } @@ -80,7 +79,7 @@ namespace OpenSim.Region.Environment.Types } else { - if (obj.AbsolutePosition.Y < (m_leftY + (m_height/2))) + if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2))) { m_childNodes[1].AddObject(obj); } @@ -98,17 +97,17 @@ namespace OpenSim.Region.Environment.Types { m_childNodes = new BasicQuadTreeNode[4]; m_childNodes[0] = - new BasicQuadTreeNode(this, m_quadID + "1/", m_leftX, m_leftY, (short) (m_width/2), - (short) (m_height/2)); + new BasicQuadTreeNode(this, m_quadID + "1/", m_leftX, m_leftY, (short) (m_width / 2), + (short) (m_height / 2)); m_childNodes[1] = - new BasicQuadTreeNode(this, m_quadID + "2/", (short) (m_leftX + (m_width/2)), m_leftY, - (short) (m_width/2), (short) (m_height/2)); + new BasicQuadTreeNode(this, m_quadID + "2/", (short) (m_leftX + (m_width / 2)), m_leftY, + (short) (m_width / 2), (short) (m_height / 2)); m_childNodes[2] = - new BasicQuadTreeNode(this, m_quadID + "3/", m_leftX, (short) (m_leftY + (m_height/2)), - (short) (m_width/2), (short) (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)); m_childNodes[3] = - 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)); + 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)); } else { @@ -127,9 +126,9 @@ namespace OpenSim.Region.Environment.Types } 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); } @@ -140,7 +139,7 @@ namespace OpenSim.Region.Environment.Types } else { - if (y < m_leftY + (m_height/2)) + if (y < m_leftY + (m_height / 2)) { return m_childNodes[1].GetObjectsFrom(x, y); } @@ -181,9 +180,9 @@ namespace OpenSim.Region.Environment.Types } 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); } @@ -194,7 +193,7 @@ namespace OpenSim.Region.Environment.Types } else { - if (y < m_leftY + (m_height/2)) + if (y < m_leftY + (m_height / 2)) { return m_childNodes[1].GetNodeID(x, y); } @@ -266,4 +265,4 @@ namespace OpenSim.Region.Environment.Types return retVal; } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Types/UpdateQueue.cs b/OpenSim/Region/Environment/Types/UpdateQueue.cs index ec1ffd250a..24fe116845 100644 --- a/OpenSim/Region/Environment/Types/UpdateQueue.cs +++ b/OpenSim/Region/Environment/Types/UpdateQueue.cs @@ -34,19 +34,13 @@ using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.Environment.Types { - [Serializable] - public class UpdateQueue : ISerializable + [Serializable] + public class UpdateQueue : ISerializable { - private Queue m_queue; + private readonly List m_ids; + private readonly Queue m_queue; - private List m_ids; - - private object m_syncObject = new object(); - - public int Count - { - get { return m_queue.Count; } - } + private readonly object m_syncObject = new object(); public UpdateQueue() { @@ -54,6 +48,56 @@ namespace OpenSim.Region.Environment.Types m_ids = new List(); } + protected UpdateQueue(SerializationInfo info, StreamingContext context) + { + //System.Console.WriteLine("UpdateQueue Deserialize BGN"); + + if (info == null) + { + throw new ArgumentNullException("info"); + } + + m_queue = (Queue) info.GetValue("m_queue", typeof (Queue)); + List ids_work = (List) info.GetValue("m_ids", typeof (List)); + + 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 ids_work = new List(); + + 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() { lock (m_syncObject) @@ -89,46 +133,5 @@ namespace OpenSim.Region.Environment.Types return part; } - - protected UpdateQueue(SerializationInfo info, StreamingContext context) - { - //System.Console.WriteLine("UpdateQueue Deserialize BGN"); - - if (info == null) - { - throw new ArgumentNullException("info"); - } - - m_queue = (Queue)info.GetValue("m_queue", typeof(Queue)); - List ids_work = (List)info.GetValue("m_ids", typeof(List)); - - 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 ids_work = new List(); - - foreach (LLUUID uuid in m_ids) - { - ids_work.Add(uuid.UUID); - } - - info.AddValue("m_queue", m_queue); - info.AddValue("m_ids", ids_work); - } } -} +} \ No newline at end of file