From 7d89e122930be39e84a6d174548fa2d12ac0484a Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Sat, 6 Sep 2008 07:52:41 +0000 Subject: [PATCH] * This is the fabled LibOMV update with all of the libOMV types from JHurliman * This is a HUGE OMG update and will definitely have unknown side effects.. so this is really only for the strong hearted at this point. Regular people should let the dust settle. * This has been tested to work with most basic functions. However.. make sure you back up 'everything' before using this. It's that big! * Essentially we're back at square 1 in the testing phase.. so lets identify things that broke. --- .../RemoteController/RemoteAdminPlugin.cs | 24 +- .../Rest/Inventory/RequestData.cs | 2 +- .../Rest/Inventory/RestAssetServices.cs | 8 +- .../Rest/Inventory/RestInventoryServices.cs | 98 +-- .../Rest/Inventory/RestTestServices.cs | 2 +- .../Rest/Inventory/tests/Remote.cs | 4 +- .../Rest/Regions/GETHandler.cs | 16 +- .../Rest/Regions/POSTHandler.cs | 6 +- .../Rest/Regions/RegionDetails.cs | 6 +- .../Rest/Regions/RestRegionPlugin.cs | 2 +- OpenSim/ApplicationPlugins/Rest/RestPlugin.cs | 4 +- OpenSim/Data/AssetDataBase.cs | 6 +- OpenSim/Data/Base/AppearanceTableMapper.cs | 116 +-- OpenSim/Data/Base/BaseRowMapper.cs | 4 +- OpenSim/Data/GridDataBase.cs | 6 +- OpenSim/Data/IGridData.cs | 6 +- OpenSim/Data/MSSQL/MSSQLAssetData.cs | 8 +- OpenSim/Data/MSSQL/MSSQLEstateData.cs | 26 +- OpenSim/Data/MSSQL/MSSQLGridData.cs | 14 +- OpenSim/Data/MSSQL/MSSQLInventoryData.cs | 48 +- OpenSim/Data/MSSQL/MSSQLManager.cs | 38 +- OpenSim/Data/MSSQL/MSSQLRegionData.cs | 144 ++-- OpenSim/Data/MSSQL/MSSQLUserData.cs | 116 +-- OpenSim/Data/MySQL/MySQLAssetData.cs | 6 +- OpenSim/Data/MySQL/MySQLEstateData.cs | 26 +- OpenSim/Data/MySQL/MySQLGridData.cs | 12 +- OpenSim/Data/MySQL/MySQLInventoryData.cs | 54 +- OpenSim/Data/MySQL/MySQLLogData.cs | 2 +- OpenSim/Data/MySQL/MySQLManager.cs | 134 +-- OpenSim/Data/MySQL/MySQLRegionData.cs | 138 ++-- OpenSim/Data/MySQL/MySQLUserData.cs | 62 +- .../Data/NHibernate/LLQuaternionUserType.cs | 15 +- OpenSim/Data/NHibernate/LLUUIDUserType.cs | 10 +- OpenSim/Data/NHibernate/LLVector3UserType.cs | 12 +- .../Data/NHibernate/NHibernateAssetData.cs | 8 +- .../NHibernate/NHibernateInventoryData.cs | 28 +- .../Data/NHibernate/NHibernateRegionData.cs | 28 +- OpenSim/Data/NHibernate/NHibernateUserData.cs | 36 +- .../NHibernate/Resources/AssetBase.hbm.xml | 4 +- .../Resources/InventoryFolderBase.hbm.xml | 8 +- .../Resources/InventoryItemBase.hbm.xml | 14 +- .../NHibernate/Resources/RegionStore.hbm.xml | 52 +- .../Resources/UserAgentData.hbm.xml | 12 +- .../Resources/UserAppearance.hbm.xml | 56 +- .../Resources/UserProfileData.hbm.xml | 12 +- OpenSim/Data/NHibernate/Terrain.cs | 10 +- OpenSim/Data/NHibernate/TextureUserType.cs | 14 +- OpenSim/Data/Null/NullDataStore.cs | 20 +- OpenSim/Data/OpenSimDataReader.cs | 10 +- OpenSim/Data/OpenSimDatabaseConnector.cs | 6 +- OpenSim/Data/OpenSimObjectFieldMapper.cs | 18 +- OpenSim/Data/PrimitiveBaseShapeTableMapper.cs | 8 +- OpenSim/Data/RegionProfileData.cs | 17 +- OpenSim/Data/ReservationData.cs | 4 +- OpenSim/Data/SQLite/SQLiteAssetData.cs | 10 +- OpenSim/Data/SQLite/SQLiteEstateData.cs | 26 +- OpenSim/Data/SQLite/SQLiteGridData.cs | 12 +- OpenSim/Data/SQLite/SQLiteInventoryStore.cs | 54 +- OpenSim/Data/SQLite/SQLiteManager.cs | 6 +- OpenSim/Data/SQLite/SQLiteRegionData.cs | 128 +-- OpenSim/Data/SQLite/SQLiteUserData.cs | 90 +- OpenSim/Data/UserDataBase.cs | 36 +- OpenSim/Framework/AgentCircuitData.cs | 38 +- OpenSim/Framework/AgentCircuitManager.cs | 8 +- OpenSim/Framework/AgentUpdateArgs.cs | 20 +- OpenSim/Framework/AssetBase.cs | 10 +- OpenSim/Framework/AssetLandmark.cs | 10 +- .../Filesystem/AssetLoaderFileSystem.cs | 10 +- OpenSim/Framework/AssetRequest.cs | 6 +- OpenSim/Framework/AssetRequestToClient.cs | 6 +- OpenSim/Framework/AssetStorage.cs | 8 +- OpenSim/Framework/AvatarAppearance.cs | 210 ++--- OpenSim/Framework/AvatarPickerAvatar.cs | 6 +- .../AvatarPickerReplyAgentDataArgs.cs | 8 +- .../Framework/AvatarPickerReplyDataArgs.cs | 6 +- OpenSim/Framework/AvatarWearable.cs | 34 +- OpenSim/Framework/AvatarWearingArgs.cs | 8 +- OpenSim/Framework/Cache.cs | 48 +- OpenSim/Framework/ChildAgentDataUpdate.cs | 9 +- OpenSim/Framework/ClientManager.cs | 8 +- OpenSim/Framework/ColliderData.cs | 14 +- .../Communications/Cache/AssetCache.cs | 52 +- .../Communications/Cache/AssetServerBase.cs | 4 +- .../Communications/Cache/CachedUserInfo.cs | 54 +- .../Communications/Cache/FileAssetClient.cs | 16 +- .../Cache/InventoryFolderImpl.cs | 14 +- .../Communications/Cache/LibraryRootFolder.cs | 46 +- .../Cache/UserProfileCacheService.cs | 38 +- .../Communications/Capabilities/Caps.cs | 76 +- .../Communications/Capabilities/LLSD.cs | 24 +- .../Capabilities/LLSDAssetUploadComplete.cs | 6 +- .../Capabilities/LLSDAssetUploadRequest.cs | 6 +- .../Capabilities/LLSDHelpers.cs | 14 +- .../Capabilities/LLSDInventoryItem.cs | 26 +- .../Capabilities/LLSDItemUpdate.cs | 6 +- .../Capabilities/LLSDMapLayer.cs | 6 +- .../Capabilities/LLSDRemoteParcelResponse.cs | 4 +- .../Capabilities/LLSDStreamHandler.cs | 6 +- .../LLSDTaskInventoryUploadComplete.cs | 8 +- .../Capabilities/LLSDTaskScriptUpdate.cs | 8 +- .../Communications/CommunicationsManager.cs | 34 +- .../Communications/IAvatarService.cs | 6 +- .../Framework/Communications/IGridServices.cs | 4 +- .../IInterRegionCommunications.cs | 14 +- .../IInterServiceInventoryServices.cs | 6 +- .../Communications/IInventoryServices.cs | 8 +- .../Communications/ISecureInventoryService.cs | 22 +- .../Framework/Communications/IUserService.cs | 40 +- .../Communications/InventoryServiceBase.cs | 58 +- .../Framework/Communications/LoginResponse.cs | 32 +- .../Framework/Communications/LoginService.cs | 28 +- .../Communications/UserManagerBase.cs | 68 +- .../Configuration/HTTP/HTTPConfiguration.cs | 2 +- .../Configuration/XML/XmlConfiguration.cs | 2 +- OpenSim/Framework/ConfigurationMember.cs | 30 +- OpenSim/Framework/ConfigurationOption.cs | 8 +- OpenSim/Framework/EstateBan.cs | 4 +- OpenSim/Framework/EstateSettings.cs | 80 +- OpenSim/Framework/FriendListItem.cs | 8 +- OpenSim/Framework/GridInstantMessage.cs | 5 +- OpenSim/Framework/IAssetProvider.cs | 6 +- OpenSim/Framework/IAssetServer.cs | 6 +- OpenSim/Framework/IClientAPI.cs | 332 ++++---- OpenSim/Framework/IInventoryData.cs | 20 +- OpenSim/Framework/IRegionCommsListener.cs | 16 +- OpenSim/Framework/IScene.cs | 8 +- OpenSim/Framework/IUserData.cs | 32 +- OpenSim/Framework/InventoryCollection.cs | 6 +- OpenSim/Framework/InventoryFolderBase.cs | 16 +- OpenSim/Framework/InventoryItemBase.cs | 26 +- OpenSim/Framework/LLGroup.cs | 16 +- OpenSim/Framework/LandData.cs | 52 +- OpenSim/Framework/LandStatReportItem.cs | 4 +- OpenSim/Framework/LandUpdateArgs.cs | 16 +- OpenSim/Framework/Location.cs | 2 +- OpenSim/Framework/Login.cs | 18 +- OpenSim/Framework/MapBlockData.cs | 6 +- OpenSim/Framework/OSChatMessage.cs | 14 +- OpenSim/Framework/OSUUID.cs | 114 --- OpenSim/Framework/PacketPool.cs | 12 +- OpenSim/Framework/PluginLoader.cs | 2 +- OpenSim/Framework/PrimitiveBaseShape.cs | 48 +- OpenSim/Framework/ProxyCodec.cs | 4 +- OpenSim/Framework/RegionCommsListener.cs | 18 +- OpenSim/Framework/RegionHandshakeArgs.cs | 22 +- OpenSim/Framework/RegionInfo.cs | 48 +- .../Filesystem/RegionLoaderFileSystem.cs | 6 +- OpenSim/Framework/RegionSettings.cs | 68 +- OpenSim/Framework/RequestAssetArgs.cs | 6 +- OpenSim/Framework/SerializableRegionInfo.cs | 14 +- OpenSim/Framework/Servers/BaseHttpServer.cs | 4 +- OpenSim/Framework/Servers/LLSDMethod.cs | 2 +- OpenSim/Framework/Servers/LLSDMethodString.cs | 2 +- .../Statistics/SimExtraStatsCollector.cs | 18 +- OpenSim/Framework/TaskInventoryItem.cs | 50 +- OpenSim/Framework/TextureRequestArgs.cs | 8 +- OpenSim/Framework/UserAgentData.cs | 28 +- OpenSim/Framework/UserProfileData.cs | 38 +- OpenSim/Framework/Util.cs | 28 +- .../Framework/ViewerEffectEventHandlerArg.cs | 8 +- OpenSim/Framework/sLLVector3.cs | 51 -- OpenSim/Grid/AssetServer/Main.cs | 6 +- OpenSim/Grid/AssetServer/RestService.cs | 10 +- .../OGS1/OGS1InterServiceInventoryService.cs | 10 +- OpenSim/Grid/GridServer/GridManager.cs | 46 +- .../InventoryServer/GridInventoryService.cs | 10 +- OpenSim/Grid/InventoryServer/Main.cs | 4 +- OpenSim/Grid/MessagingServer/Main.cs | 8 +- .../Grid/MessagingServer/MessageService.cs | 40 +- .../PresenceBackreferenceEntry.cs | 16 +- OpenSim/Grid/MessagingServer/UserManager.cs | 6 +- .../Grid/MessagingServer/UserPresenceData.cs | 4 +- .../Grid/MessagingServer/XMPPHTTPService.cs | 10 +- OpenSim/Grid/ScriptServer/ScriptServerMain.cs | 4 +- OpenSim/Grid/UserServer/Main.cs | 20 +- .../UserServer/MessageServersConnector.cs | 12 +- OpenSim/Grid/UserServer/UserLoginService.cs | 14 +- OpenSim/Grid/UserServer/UserManager.cs | 84 +- OpenSim/Region/Application/OpenSim.cs | 4 +- OpenSim/Region/Application/OpenSimBase.cs | 28 +- .../ClientStack/LindenUDP/KillPacket.cs | 2 +- .../ClientStack/LindenUDP/LLClientView.cs | 768 +++++++++--------- .../ClientStack/LindenUDP/LLPacketHandler.cs | 10 +- .../ClientStack/LindenUDP/LLPacketQueue.cs | 10 +- .../ClientStack/LindenUDP/LLPacketServer.cs | 8 +- .../Region/ClientStack/LindenUDP/LLQueItem.cs | 2 +- .../ClientStack/LindenUDP/LLUDPServer.cs | 4 +- .../ClientStack/RegionApplicationBase.cs | 6 +- .../Local/LocalBackEndServices.cs | 26 +- .../Local/LocalInventoryService.cs | 8 +- .../Communications/Local/LocalLoginService.cs | 12 +- .../Communications/Local/LocalUserServices.cs | 4 +- .../Communications/OGS1/OGS1GridServices.cs | 74 +- .../Communications/OGS1/OGS1InterSimComms.cs | 34 +- .../OGS1/OGS1InventoryService.cs | 18 +- .../OGS1/OGS1SecureInventoryService.cs | 32 +- .../Communications/OGS1/OGS1UserServices.cs | 82 +- .../Region/DataSnapshot/DataRequestHandler.cs | 4 +- .../DataSnapshot/DataSnapshotManager.cs | 6 +- OpenSim/Region/DataSnapshot/EstateSnapshot.cs | 6 +- OpenSim/Region/DataSnapshot/LandSnapshot.cs | 20 +- OpenSim/Region/DataSnapshot/ObjectSnapshot.cs | 32 +- OpenSim/Region/DataSnapshot/SnapshotStore.cs | 4 +- .../Interfaces/IAgentAssetTransactions.cs | 8 +- .../Environment/Interfaces/IAvatarFactory.cs | 6 +- .../Interfaces/IDynamicTextureManager.cs | 16 +- .../Environment/Interfaces/IEmailModule.cs | 6 +- .../Interfaces/IEstateDataStore.cs | 4 +- .../Environment/Interfaces/IEstateModule.cs | 4 +- .../Environment/Interfaces/IHttpRequests.cs | 10 +- .../Interfaces/IInventoryModule.cs | 6 +- .../Environment/Interfaces/ILandChannel.cs | 6 +- .../Environment/Interfaces/ILandObject.cs | 18 +- .../Interfaces/IRegionDataStore.cs | 20 +- .../Environment/Interfaces/IScriptModule.cs | 4 +- .../Environment/Interfaces/IWorldComm.cs | 16 +- .../Region/Environment/Interfaces/IXMLRPC.cs | 16 +- .../AssetDownload/AssetDownloadModule.cs | 30 +- .../AgentAssetsTransactions.cs | 34 +- .../AssetTransactionModule.cs | 24 +- .../TextureDownload/TextureDownloadModule.cs | 10 +- .../TextureDownload/TextureNotFoundSender.cs | 10 +- .../UserTextureDownloadService.cs | 14 +- .../Agent/TextureSender/TextureSender.cs | 6 +- .../Modules/Agent/Xfer/XferModule.cs | 4 +- .../AvatarFactory/AvatarFactoryModule.cs | 26 +- .../Modules/Avatar/Chat/ChatModule.cs | 26 +- .../Modules/Avatar/Chat/IRCBridgeModule.cs | 10 +- .../Currency/SampleMoney/SampleMoneyModule.cs | 138 ++-- .../Modules/Avatar/Friends/FriendsModule.cs | 106 +-- .../Modules/Avatar/Groups/GroupsModule.cs | 36 +- .../InstantMessage/InstantMessageModule.cs | 104 +-- .../Avatar/Inventory/InventoryModule.cs | 24 +- .../Avatar/Profiles/AvatarProfilesModule.cs | 6 +- .../Voice/AsterixVoice/AsteriskVoiceModule.cs | 10 +- .../Avatar/Voice/SIPVoice/SIPVoiceModule.cs | 10 +- .../ContentManagementSystem/AuraMetaEntity.cs | 20 +- .../ContentManagementSystem/BeamMetaEntity.cs | 22 +- .../ContentManagementSystem/CMController.cs | 36 +- .../CMEntityCollection.cs | 20 +- .../ContentManagementSystem/CMModel.cs | 20 +- .../Modules/ContentManagementSystem/CMView.cs | 12 +- .../ContentManagementEntity.cs | 26 +- .../ContentManagementModule.cs | 6 +- .../FileSystemDatabase.cs | 30 +- .../ContentManagementSystem/GitDatabase.cs | 38 +- .../IContentDatabase.cs | 23 +- .../ContentManagementSystem/MetaEntity.cs | 22 +- .../PointMetaEntity.cs | 36 +- .../SceneObjectGroupDiff.cs | 28 +- .../InterGrid/OpenGridProtocolModule.cs | 86 +- .../DynamicTexture/DynamicTextureModule.cs | 72 +- .../Scripting/EMailModules/EmailModule.cs | 14 +- .../HttpRequest/ScriptsHttpRequests.cs | 24 +- .../LoadImageURL/LoadImageURLModule.cs | 16 +- .../VectorRender/VectorRenderModule.cs | 13 +- .../Scripting/WorldComm/WorldCommModule.cs | 68 +- .../Modules/Scripting/XMLRPC/XMLRPCModule.cs | 100 +-- .../World/Archiver/ArchiveConstants.cs | 16 +- .../World/Archiver/ArchiveReadRequest.cs | 15 +- .../Archiver/ArchiveWriteRequestExecution.cs | 12 +- .../ArchiveWriteRequestPreparation.cs | 32 +- .../Modules/World/Archiver/ArchiverModule.cs | 2 +- .../Modules/World/Archiver/AssetsArchiver.cs | 12 +- .../World/Archiver/AssetsDearchiver.cs | 6 +- .../Modules/World/Archiver/AssetsRequest.cs | 14 +- .../World/Estate/EstateManagementModule.cs | 52 +- .../Modules/World/Land/LandChannel.cs | 12 +- .../World/Land/LandManagementModule.cs | 71 +- .../Modules/World/Land/LandObject.cs | 46 +- .../Modules/World/NPC/NPCAvatar.cs | 204 ++--- .../Modules/World/NPC/NPCModule.cs | 6 +- .../World/Permissions/PermissionsModule.cs | 132 +-- .../World/Serialiser/IRegionSerialiser.cs | 12 +- .../World/Serialiser/SceneXmlLoader.cs | 15 +- .../World/Serialiser/SerialiseObjects.cs | 6 +- .../World/Serialiser/SerialiserModule.cs | 8 +- .../Modules/World/Sun/SunModule.cs | 23 +- .../Modules/World/Terrain/TerrainModule.cs | 6 +- .../TreePopulator/TreePopulatorModule.cs | 37 +- .../Modules/World/WorldMap/MapImageModule.cs | 79 +- .../World/WorldMap/ShadedMapTileRenderer.cs | 5 +- .../World/WorldMap/TexturedMapTileRenderer.cs | 33 +- .../Modules/World/WorldMap/WorldMapModule.cs | 49 +- .../Region/Environment/Scenes/Animation.cs | 8 +- .../Region/Environment/Scenes/AnimationSet.cs | 18 +- .../Environment/Scenes/AvatarAnimations.cs | 12 +- .../Region/Environment/Scenes/EntityBase.cs | 61 +- .../Region/Environment/Scenes/EntityList.cs | 21 +- .../Region/Environment/Scenes/EventManager.cs | 88 +- .../Environment/Scenes/IScenePresenceBody.cs | 4 +- .../Region/Environment/Scenes/InnerScene.cs | 117 ++- .../Environment/Scenes/Scene.Inventory.cs | 202 ++--- .../Scenes/Scene.PacketHandlers.cs | 38 +- OpenSim/Region/Environment/Scenes/Scene.cs | 303 +++---- .../Region/Environment/Scenes/SceneBase.cs | 10 +- .../Scenes/SceneCommunicationService.cs | 70 +- .../Environment/Scenes/SceneExternalChecks.cs | 160 ++-- .../Region/Environment/Scenes/SceneManager.cs | 12 +- .../Scenes/SceneObjectGroup.Inventory.cs | 10 +- .../Environment/Scenes/SceneObjectGroup.cs | 315 ++++--- .../Scenes/SceneObjectPart.Inventory.cs | 48 +- .../Environment/Scenes/SceneObjectPart.cs | 692 +++++++--------- .../Environment/Scenes/ScenePresence.cs | 398 +++++---- .../Scenes/Scripting/IScriptHost.cs | 11 +- .../Scenes/Scripting/NullScriptHost.cs | 19 +- .../Environment/Scenes/SimStatsReporter.cs | 2 +- .../Region/Environment/Scenes/UndoState.cs | 10 +- .../Region/Environment/Types/UpdateQueue.cs | 12 +- .../Examples/SimpleModule/ComplexObject.cs | 54 +- .../Examples/SimpleModule/CpuCounterObject.cs | 6 +- .../Examples/SimpleModule/FileSystemObject.cs | 6 +- .../Examples/SimpleModule/MyNpcCharacter.cs | 198 ++--- .../Examples/SimpleModule/RegionModule.cs | 20 +- OpenSim/Region/Interfaces/IMoneyModule.cs | 8 +- .../AvatarFactory/AvatarFactoryModule.cs | 14 +- .../Modules/SvnSerialiser/SvnBackupModule.cs | 4 +- .../BasicPhysicsPlugin/BasicPhysicsPlugin.cs | 2 +- .../Physics/BulletXPlugin/BulletXPlugin.cs | 58 +- .../Region/Physics/Manager/PhysicsActor.cs | 2 +- .../Physics/Manager/PhysicsPluginManager.cs | 88 +- .../Region/Physics/Manager/PhysicsScene.cs | 2 +- .../Region/Physics/Manager/PhysicsVector.cs | 2 +- OpenSim/Region/Physics/Meshing/Extruder.cs | 13 +- OpenSim/Region/Physics/Meshing/HelperTypes.cs | 110 +-- OpenSim/Region/Physics/Meshing/Meshmerizer.cs | 3 +- OpenSim/Region/Physics/Meshing/PrimMesher.cs | 11 +- OpenSim/Region/Physics/Meshing/SculptMesh.cs | 7 +- .../Region/Physics/OdePlugin/ODECharacter.cs | 3 +- OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 96 +-- .../Region/Physics/OdePlugin/ODETestClass.cs | 4 +- OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | 51 +- .../Region/Physics/POSPlugin/POSCharacter.cs | 2 +- OpenSim/Region/Physics/POSPlugin/POSPlugin.cs | 1 - OpenSim/Region/Physics/POSPlugin/POSPrim.cs | 2 +- OpenSim/Region/Physics/POSPlugin/POSScene.cs | 15 +- .../Region/Physics/PhysXPlugin/PhysXPlugin.cs | 12 +- .../ScriptEngine/Common/BuilIn_Commands.cs | 4 +- .../Common/LSL_BuiltIn_Commands.cs | 586 ++++++------- .../Region/ScriptEngine/Common/LSL_Types.cs | 2 +- .../Common/OSSL_BuilIn_Commands.cs | 29 +- .../ScriptEngineBase/AsyncCommandManager.cs | 4 +- .../AsyncCommandPlugins/Dataserver.cs | 14 +- .../AsyncCommandPlugins/SensorRepeat.cs | 42 +- .../AsyncCommandPlugins/Timer.cs | 8 +- .../Common/ScriptEngineBase/EventManager.cs | 64 +- .../ScriptEngineBase/EventQueueManager.cs | 10 +- .../ScriptEngineBase/EventQueueThreadClass.cs | 4 +- .../Common/ScriptEngineBase/ScriptManager.cs | 48 +- .../Common/ScriptServerInterfaces.cs | 58 +- .../Region/ScriptEngine/Common/TRPC_Remote.cs | 4 +- .../Compiler/LSL/LSL2CSConverter.cs | 2 +- .../DotNetEngine/ScriptManager.cs | 12 +- .../ScriptEngine/Interfaces/IScriptApi.cs | 4 +- .../ScriptEngine/Interfaces/IScriptEngine.cs | 18 +- .../Interfaces/IScriptInstance.cs | 12 +- .../ScriptEngine/RemoteServer/EventManager.cs | 70 +- .../Api/Implementation/AsyncCommandManager.cs | 8 +- .../Shared/Api/Implementation/LSL_Api.cs | 559 +++++++------ .../Shared/Api/Implementation/OSSL_Api.cs | 31 +- .../Api/Implementation/Plugins/Dataserver.cs | 14 +- .../Api/Implementation/Plugins/Listener.cs | 6 +- .../Implementation/Plugins/SensorRepeat.cs | 50 +- .../Api/Implementation/Plugins/Timer.cs | 12 +- .../Shared/CodeTools/LSL2CSConverter.cs | 2 +- OpenSim/Region/ScriptEngine/Shared/Helpers.cs | 28 +- .../Shared/Instance/ScriptInstance.cs | 30 +- .../Shared/Instance/ScriptSerializer.cs | 20 +- .../Region/ScriptEngine/Shared/LSL_Types.cs | 2 +- .../ScriptEngine/XEngine/EventManager.cs | 35 +- .../Region/ScriptEngine/XEngine/XEngine.cs | 86 +- OpenSim/TestSuite/BotManager.cs | 4 +- OpenSim/TestSuite/PhysicsBot.cs | 8 +- .../Tests/Common/VectorToleranceConstraint.cs | 12 +- OpenSim/Tests/Framework/UtilTest.cs | 24 +- OpenSim/Tools/Export/OpenSimExport.cs | 4 +- OpenSim/Tools/pCampBot/BotManager.cs | 4 +- OpenSim/Tools/pCampBot/PhysicsBot.cs | 8 +- .../3Di/LoadBalancer/LoadBalancerPlugin.cs | 38 +- bin/OpenMetaverse.dll | Bin 0 -> 1851392 bytes bin/OpenMetaverse.dll.config | 5 + bin/OpenMetaverseTypes.dll | Bin 0 -> 73728 bytes bin/libopenjpeg-dotnet-2.1.3.0-x86_64.so | Bin 0 -> 129496 bytes bin/libopenjpeg-dotnet-2.1.3.0.dylib | Bin 0 -> 125128 bytes bin/libopenjpeg-dotnet-2.1.3.0.so | Bin 0 -> 116784 bytes bin/libsecondlife.dll.config | 5 - bin/openjpeg-dotnet.dll | Bin 0 -> 196608 bytes prebuild.xml | 174 ++-- 388 files changed, 6811 insertions(+), 7138 deletions(-) create mode 100755 bin/OpenMetaverse.dll create mode 100644 bin/OpenMetaverse.dll.config create mode 100755 bin/OpenMetaverseTypes.dll create mode 100755 bin/libopenjpeg-dotnet-2.1.3.0-x86_64.so create mode 100755 bin/libopenjpeg-dotnet-2.1.3.0.dylib create mode 100755 bin/libopenjpeg-dotnet-2.1.3.0.so create mode 100755 bin/openjpeg-dotnet.dll diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 6691f14551..7803d923aa 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -31,7 +31,7 @@ using System.IO; using System.Net; using System.Reflection; using System.Timers; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using Nwc.XmlRpc; @@ -113,7 +113,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController (!requestData.Contains("password") || (string) requestData["password"] != requiredPassword)) throw new Exception("wrong password"); - LLUUID regionID = new LLUUID((string) requestData["regionID"]); + UUID regionID = new UUID((string) requestData["regionID"]); responseData["accepted"] = "true"; response.Value = responseData; @@ -198,7 +198,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController throw new Exception("wrong password"); string file = (string)requestData["filename"]; - LLUUID regionID = (string) requestData["regionid"]; + UUID regionID = (string) requestData["regionid"]; m_log.InfoFormat("[RADMIN]: Terrain Loading: {0}", file); responseData["accepted"] = "true"; @@ -379,7 +379,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController // extract or generate region ID now Scene scene = null; - LLUUID regionID = LLUUID.Zero; + UUID regionID = UUID.Zero; if (requestData.ContainsKey("region_id") && !String.IsNullOrEmpty((string)requestData["region_id"])) { @@ -391,7 +391,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController } else { - regionID = LLUUID.Random(); + regionID = UUID.Random(); m_log.DebugFormat("[RADMIN] CreateRegion: new region UUID {0}", regionID); } @@ -517,7 +517,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController /// error message if success is false /// avatar_uuid /// UUID of the newly created avatar - /// account; LLUUID.Zero if failed. + /// account; UUID.Zero if failed. /// /// /// @@ -551,9 +551,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController if (null != userProfile) throw new Exception(String.Format("avatar {0} {1} already exists", firstname, lastname)); - LLUUID userID = m_app.CreateUser(firstname, lastname, passwd, regX, regY); + UUID userID = m_app.CreateUser(firstname, lastname, passwd, regX, regY); - if (userID == LLUUID.Zero) throw new Exception(String.Format("failed to create new user {0} {1}", + if (userID == UUID.Zero) throw new Exception(String.Format("failed to create new user {0} {1}", firstname, lastname)); responseData["success"] = "true"; @@ -569,7 +569,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController m_log.DebugFormat("[RADMIN] CreateUser: failed: {0}", e.ToString()); responseData["success"] = "false"; - responseData["avatar_uuid"] = LLUUID.Zero.ToString(); + responseData["avatar_uuid"] = UUID.Zero.ToString(); responseData["error"] = e.Message; response.Value = responseData; @@ -742,7 +742,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController Scene scene = null; if (requestData.Contains("region_uuid")) { - LLUUID region_uuid = (string)requestData["region_uuid"]; + UUID region_uuid = (string)requestData["region_uuid"]; if (!m_app.SceneManager.TryGetScene(region_uuid, out scene)) throw new Exception(String.Format("failed to switch to region {0}", region_uuid.ToString())); } @@ -802,7 +802,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController string filename = (string)requestData["filename"]; if (requestData.Contains("region_uuid")) { - LLUUID region_uuid = (string)requestData["region_uuid"]; + UUID region_uuid = (string)requestData["region_uuid"]; if (!m_app.SceneManager.TrySetCurrentScene(region_uuid)) throw new Exception(String.Format("failed to switch to region {0}", region_uuid.ToString())); m_log.InfoFormat("[RADMIN] Switched to region {0}", region_uuid.ToString()); @@ -827,7 +827,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController switch (xml_version) { case "1": - m_app.SceneManager.LoadCurrentSceneFromXml(filename, true, new LLVector3(0, 0, 0)); + m_app.SceneManager.LoadCurrentSceneFromXml(filename, true, new Vector3(0, 0, 0)); break; case "2": diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RequestData.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RequestData.cs index 24e5adae63..972d840c47 100644 --- a/OpenSim/ApplicationPlugins/Rest/Inventory/RequestData.cs +++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RequestData.cs @@ -35,7 +35,7 @@ using System.Collections.Generic; using System.Collections.Specialized; using OpenSim.Framework; using OpenSim.Framework.Servers; -using libsecondlife; +using OpenMetaverse; using System.Xml; namespace OpenSim.ApplicationPlugins.Rest.Inventory diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestAssetServices.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestAssetServices.cs index 1b94741e5b..9d34b4e4d4 100644 --- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestAssetServices.cs +++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestAssetServices.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using Nini.Config; using System; using System.Collections.Generic; @@ -190,12 +190,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory Rest.Log.DebugFormat("{0} REST Asset handler, Method = <{1}> ENTRY", MsgId, rdata.method); - // The only parameter we accept is an LLUUID for + // The only parameter we accept is an UUID for // the asset if (rdata.Parameters.Length == 1) { - LLUUID uuid = new LLUUID(rdata.Parameters[0]); + UUID uuid = new UUID(rdata.Parameters[0]); AssetBase asset = Rest.AssetServices.GetAsset(uuid, istexture); if (asset != null) @@ -233,7 +233,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory { Rest.Log.DebugFormat("{0} REST Asset handler, Method = <{1}> ENTRY", MsgId, rdata.method); - // The only parameter we accept is an LLUUID for + // The only parameter we accept is an UUID for // the asset if (rdata.Parameters.Length == 1) diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs index 82e9a135fc..d352655bc2 100644 --- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs +++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs @@ -31,12 +31,12 @@ using System.IO; using System.Threading; using System.Xml; using System.Drawing; -using OpenJPEGNet; using OpenSim.Framework; using OpenSim.Framework.Servers; using OpenSim.Framework.Communications; using OpenSim.Framework.Communications.Cache; -using libsecondlife; +using OpenMetaverse; +using OpenMetaverse.Imaging; using Nini.Config; namespace OpenSim.ApplicationPlugins.Rest.Inventory @@ -189,7 +189,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // We can only get here if we are authorized // - // The requestor may have specified an LLUUID or + // The requestor may have specified an UUID or // a conjoined FirstName LastName string. We'll // try both. If we fail with the first, UUID, // attempt, we try the other. As an example, the @@ -202,6 +202,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // required to designate a GET for an entire // inventory. // + + // Do we have at least a user agent name? if (rdata.Parameters.Length < 1) @@ -210,15 +212,15 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory rdata.Fail(Rest.HttpStatusCodeBadRequest, "no user identity specified"); } - // The first parameter MUST be the agent identification, either an LLUUID + // The first parameter MUST be the agent identification, either an UUID // or a space-separated First-name Last-Name specification. We check for - // an LLUUID first, if anyone names their character using a valid LLUUID + // an UUID first, if anyone names their character using a valid UUID // that identifies another existing avatar will cause this a problem... try { - rdata.uuid = new LLUUID(rdata.Parameters[PARM_USERID]); - Rest.Log.DebugFormat("{0} LLUUID supplied", MsgId); + rdata.uuid = new UUID(rdata.Parameters[PARM_USERID]); + Rest.Log.DebugFormat("{0} UUID supplied", MsgId); rdata.userProfile = Rest.UserServices.GetUserProfile(rdata.uuid); } catch @@ -490,7 +492,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // may have already set the parent ID explicitly, in which // case we don't have to do it here. - if (folder.ParentID == LLUUID.Zero || folder.ParentID == context.ID) + if (folder.ParentID == UUID.Zero || folder.ParentID == context.ID) { if (newnode != String.Empty) { @@ -550,7 +552,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // If the parentID is zero, then this is going // directly into the root identified by the URI. - if (item.Folder == LLUUID.Zero) + if (item.Folder == UUID.Zero) { item.Folder = context.ID; } @@ -719,7 +721,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory { if ((rfound = (folder.Name == PRIVATE_ROOT_NAME))) { - if ((rfound = (folder.ParentID == LLUUID.Zero))) + if ((rfound = (folder.ParentID == UUID.Zero))) break; } } @@ -746,7 +748,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory foreach (InventoryFolderBase folder in entity.Folders) { if (folder.ParentID == uri.ParentID || - folder.ParentID == LLUUID.Zero) + folder.ParentID == UUID.Zero) { folder.ParentID = uri.ParentID; xml = folder; @@ -778,9 +780,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // All went well, so we generate a UUID is one is // needed. - if (xml.ID == LLUUID.Zero) + if (xml.ID == UUID.Zero) { - xml.ID = LLUUID.Random(); + xml.ID = UUID.Random(); } uri.ParentID = TrashCan.ID; @@ -834,9 +836,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory xml = entity.Items[0]; - if (xml.ID == LLUUID.Zero) + if (xml.ID == UUID.Zero) { - xml.ID = LLUUID.Random(); + xml.ID = UUID.Random(); } // If the folder reference has changed, then this item is @@ -1336,7 +1338,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory { TrashCan = new InventoryFolderBase(); TrashCan.Name = "tmp"; - TrashCan.ID = LLUUID.Random(); + TrashCan.ID = UUID.Random(); TrashCan.Version = 1; TrashCan.Type = (short) AssetType.TrashFolder; TrashCan.ParentID = f.ID; @@ -1556,9 +1558,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // Default values result.Name = String.Empty; - result.ID = LLUUID.Zero; + result.ID = UUID.Zero; result.Owner = ic.UserID; - result.ParentID = LLUUID.Zero; // Context + result.ParentID = UUID.Zero; // Context result.Type = (short) AssetType.Folder; result.Version = 1; @@ -1573,13 +1575,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory result.Name = ic.xml.Value; break; case "uuid" : - result.ID = new LLUUID(ic.xml.Value); + result.ID = new UUID(ic.xml.Value); break; case "parent" : - result.ParentID = new LLUUID(ic.xml.Value); + result.ParentID = new UUID(ic.xml.Value); break; case "owner" : - result.Owner = new LLUUID(ic.xml.Value); + result.Owner = new UUID(ic.xml.Value); break; case "type" : result.Type = Int16.Parse(ic.xml.Value); @@ -1604,7 +1606,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // is necessary where a new folder may have been // introduced. - if (result.ParentID == LLUUID.Zero) + if (result.ParentID == UUID.Zero) { result.ParentID = ic.Parent(); } @@ -1632,9 +1634,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // This is a new folder, so no existing UUID is available // or appropriate - if (result.ID == LLUUID.Zero) + if (result.ID == UUID.Zero) { - result.ID = LLUUID.Random(); + result.ID = UUID.Random(); } // Treat this as a new context. Any other information is @@ -1664,12 +1666,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory result.Name = String.Empty; result.Description = String.Empty; - result.ID = LLUUID.Zero; - result.Folder = LLUUID.Zero; + result.ID = UUID.Zero; + result.Folder = UUID.Zero; result.Owner = ic.UserID; result.Creator = ic.UserID; - result.AssetID = LLUUID.Zero; - result.GroupID = LLUUID.Zero; + result.AssetID = UUID.Zero; + result.GroupID = UUID.Zero; result.GroupOwned = false; result.InvType = (int) InventoryType.Unknown; result.AssetType = (int) AssetType.Unknown; @@ -1689,19 +1691,19 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory result.Description = ic.xml.Value; break; case "uuid" : - result.ID = new LLUUID(ic.xml.Value); + result.ID = new UUID(ic.xml.Value); break; case "folder" : - result.Folder = new LLUUID(ic.xml.Value); + result.Folder = new UUID(ic.xml.Value); break; case "owner" : - result.Owner = new LLUUID(ic.xml.Value); + result.Owner = new UUID(ic.xml.Value); break; case "invtype" : result.InvType = Int32.Parse(ic.xml.Value); break; case "creator" : - result.Creator = new LLUUID(ic.xml.Value); + result.Creator = new UUID(ic.xml.Value); break; case "assettype" : result.AssetType = Int32.Parse(ic.xml.Value); @@ -1710,7 +1712,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory result.GroupOwned = Boolean.Parse(ic.xml.Value); break; case "groupid" : - result.GroupID = new LLUUID(ic.xml.Value); + result.GroupID = new UUID(ic.xml.Value); break; case "flags" : result.Flags = UInt32.Parse(ic.xml.Value); @@ -1776,7 +1778,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // This is not a persistent attribute bool inline = true; - LLUUID uuid = LLUUID.Zero; + UUID uuid = UUID.Zero; // Attribute is optional if (ic.xml.HasAttributes) @@ -1804,7 +1806,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory break; case "uuid" : - uuid = new LLUUID(ic.xml.Value); + uuid = new UUID(ic.xml.Value); break; case "inline" : @@ -1834,7 +1836,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory { if (ic.Item != null) { - ic.Item.AssetID = new LLUUID(ic.xml.ReadElementContentAsString()); + ic.Item.AssetID = new UUID(ic.xml.ReadElementContentAsString()); Rest.Log.DebugFormat("{0} Asset ID supplied: {1}", MsgId, ic.Item.AssetID); } else @@ -1855,9 +1857,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // Generate a UUID of none were given, and generally none should // be. Ever. - if (uuid == LLUUID.Zero) + if (uuid == UUID.Zero) { - uuid = LLUUID.Random(); + uuid = UUID.Random(); } // Create AssetBase entity to hold the inlined asset @@ -1887,7 +1889,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // If this is in the context of an item, establish // a link with the item in context. - if (ic.Item != null && ic.Item.AssetID == LLUUID.Zero) + if (ic.Item != null && ic.Item.AssetID == UUID.Zero) { ic.Item.AssetID = uuid; } @@ -1970,7 +1972,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // here. It should always get set from the information stored // when the Asset element was processed. - if (ic.Item.AssetID == LLUUID.Zero) + if (ic.Item.AssetID == UUID.Zero) { Rest.Log.ErrorFormat("{0} Unable to complete request", MsgId); Rest.Log.InfoFormat("{0} Asset information is missing", MsgId); @@ -1979,16 +1981,16 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory // If the item is new, then assign it an ID - if (ic.Item.ID == LLUUID.Zero) + if (ic.Item.ID == UUID.Zero) { - ic.Item.ID = LLUUID.Random(); + ic.Item.ID = UUID.Random(); } // If the context is being implied, obtain the current // folder item's ID. If it was specified explicitly, make // sure that theparent folder exists. - if (ic.Item.Folder == LLUUID.Zero) + if (ic.Item.Folder == UUID.Zero) { ic.Item.Folder = ic.Parent(); } @@ -2113,8 +2115,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory Bitmap temp; Stream tgadata = new MemoryStream(ic.Asset.Data); - temp = OpenJPEGNet.LoadTGAClass.LoadTGA(tgadata); - ic.Asset.Data = OpenJPEGNet.OpenJPEG.EncodeFromImage(temp, true); + temp = LoadTGAClass.LoadTGA(tgadata); + ic.Asset.Data = OpenJPEG.EncodeFromImage(temp, true); } ic.reset(); @@ -2129,7 +2131,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory /// extensions. /// - internal LLUUID uuid = LLUUID.Zero; + internal UUID uuid = UUID.Zero; internal bool HaveInventory = false; internal ICollection folders = null; internal ICollection items = null; @@ -2214,7 +2216,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory EveryOnePermissions = DefaultEveryOne; } - internal LLUUID Parent() + internal UUID Parent() { if (stk.Count != 0) { @@ -2222,7 +2224,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory } else { - return LLUUID.Zero; + return UUID.Zero; } } diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestTestServices.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestTestServices.cs index 3ac48c9b03..aba7357147 100644 --- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestTestServices.cs +++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestTestServices.cs @@ -26,7 +26,7 @@ * */ -using libsecondlife; +using OpenMetaverse; using Nini.Config; using System; using System.IO; diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/tests/Remote.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/tests/Remote.cs index 1cbe38f17d..54d847830e 100644 --- a/OpenSim/ApplicationPlugins/Rest/Inventory/tests/Remote.cs +++ b/OpenSim/ApplicationPlugins/Rest/Inventory/tests/Remote.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using Nini.Config; using System; using System.Collections.Generic; @@ -174,7 +174,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests float x = Convert.ToSingle(rdata.Parameters[PARM_MOVE_X]); float y = Convert.ToSingle(rdata.Parameters[PARM_MOVE_Y]); float z = Convert.ToSingle(rdata.Parameters[PARM_MOVE_Z]); - LLVector3 vector = new LLVector3(x,y,z); + Vector3 vector = new Vector3(x,y,z); avatar.DoAutoPilot(0,vector,avatar.ControllingClient); } catch (Exception e) diff --git a/OpenSim/ApplicationPlugins/Rest/Regions/GETHandler.cs b/OpenSim/ApplicationPlugins/Rest/Regions/GETHandler.cs index ce564ddd9a..d812e24f90 100644 --- a/OpenSim/ApplicationPlugins/Rest/Regions/GETHandler.cs +++ b/OpenSim/ApplicationPlugins/Rest/Regions/GETHandler.cs @@ -36,7 +36,7 @@ using System.Text.RegularExpressions; using System.Timers; using System.Xml; using System.Xml.Serialization; -using libsecondlife; +using OpenMetaverse; using Mono.Addins; using Nwc.XmlRpc; using Nini.Config; @@ -109,11 +109,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions // be resilient and don't get confused by a terminating '/' param = param.TrimEnd(new char[]{'/'}); string[] comps = param.Split('/'); - LLUUID regionID = (LLUUID)comps[0]; + UUID regionID = (UUID)comps[0]; m_log.DebugFormat("{0} GET region UUID {1}", MsgID, regionID.ToString()); - if (LLUUID.Zero == regionID) throw new Exception("missing region ID"); + if (UUID.Zero == regionID) throw new Exception("missing region ID"); Scene scene = null; App.SceneManager.TryGetScene(regionID, out scene); @@ -150,7 +150,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions return RegionStats(httpResponse, scene); case "prims": - return RegionPrims(httpResponse, scene, LLVector3.Zero, LLVector3.Zero); + return RegionPrims(httpResponse, scene, Vector3.Zero, Vector3.Zero); } } @@ -162,11 +162,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions string[] subregion = comps[2].Split(','); if (subregion.Length == 6) { - LLVector3 min, max; + Vector3 min, max; try { - min = new LLVector3((float)Double.Parse(subregion[0]), (float)Double.Parse(subregion[1]), (float)Double.Parse(subregion[2])); - max = new LLVector3((float)Double.Parse(subregion[3]), (float)Double.Parse(subregion[4]), (float)Double.Parse(subregion[5])); + min = new Vector3((float)Double.Parse(subregion[0]), (float)Double.Parse(subregion[1]), (float)Double.Parse(subregion[2])); + max = new Vector3((float)Double.Parse(subregion[3]), (float)Double.Parse(subregion[4]), (float)Double.Parse(subregion[5])); } catch (Exception) { @@ -215,7 +215,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions return XmlWriterResult; } - protected string RegionPrims(OSHttpResponse httpResponse, Scene scene, LLVector3 min, LLVector3 max) + protected string RegionPrims(OSHttpResponse httpResponse, Scene scene, Vector3 min, Vector3 max) { httpResponse.SendChunked = true; httpResponse.ContentType = "text/xml"; diff --git a/OpenSim/ApplicationPlugins/Rest/Regions/POSTHandler.cs b/OpenSim/ApplicationPlugins/Rest/Regions/POSTHandler.cs index 6e3d1fff9a..73a1b9b826 100644 --- a/OpenSim/ApplicationPlugins/Rest/Regions/POSTHandler.cs +++ b/OpenSim/ApplicationPlugins/Rest/Regions/POSTHandler.cs @@ -36,7 +36,7 @@ using System.Text.RegularExpressions; using System.Timers; using System.Xml; using System.Xml.Serialization; -using libsecondlife; +using OpenMetaverse; using Mono.Addins; using Nwc.XmlRpc; using Nini.Config; @@ -76,10 +76,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions // Parse region ID and other parameters param = param.TrimEnd(new char[]{'/'}); string[] comps = param.Split('/'); - LLUUID regionID = (LLUUID)comps[0]; + UUID regionID = (UUID)comps[0]; m_log.DebugFormat("{0} POST region UUID {1}", MsgID, regionID.ToString()); - if (LLUUID.Zero == regionID) throw new Exception("missing region ID"); + if (UUID.Zero == regionID) throw new Exception("missing region ID"); Scene scene = null; App.SceneManager.TryGetScene(regionID, out scene); diff --git a/OpenSim/ApplicationPlugins/Rest/Regions/RegionDetails.cs b/OpenSim/ApplicationPlugins/Rest/Regions/RegionDetails.cs index 74cf35475c..d517895ea0 100644 --- a/OpenSim/ApplicationPlugins/Rest/Regions/RegionDetails.cs +++ b/OpenSim/ApplicationPlugins/Rest/Regions/RegionDetails.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using System; using System.Collections; using System.Collections.Generic; @@ -58,7 +58,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions region_id = regInfo.RegionID.ToString(); region_x = regInfo.RegionLocX; region_y = regInfo.RegionLocY; - if (regInfo.EstateSettings.EstateOwner != LLUUID.Zero) + if (regInfo.EstateSettings.EstateOwner != UUID.Zero) region_owner_id = regInfo.EstateSettings.EstateOwner.ToString(); else region_owner_id = regInfo.MasterAvatarAssignedUUID.ToString(); @@ -101,4 +101,4 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions } } } -} \ No newline at end of file +} diff --git a/OpenSim/ApplicationPlugins/Rest/Regions/RestRegionPlugin.cs b/OpenSim/ApplicationPlugins/Rest/Regions/RestRegionPlugin.cs index 1f68d2b895..4c24f3ff54 100644 --- a/OpenSim/ApplicationPlugins/Rest/Regions/RestRegionPlugin.cs +++ b/OpenSim/ApplicationPlugins/Rest/Regions/RestRegionPlugin.cs @@ -36,7 +36,7 @@ using System.Text.RegularExpressions; using System.Timers; using System.Xml; using System.Xml.Serialization; -using libsecondlife; +using OpenMetaverse; using Nwc.XmlRpc; using Nini.Config; using OpenSim.Framework; diff --git a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs index 1f633d5f14..3fb9662e47 100644 --- a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs +++ b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs @@ -34,7 +34,7 @@ using System.Net; using System.Reflection; using System.Timers; using System.Xml; -using libsecondlife; +using OpenMetaverse; using Nwc.XmlRpc; using Nini.Config; using OpenSim.Framework; @@ -339,7 +339,7 @@ namespace OpenSim.ApplicationPlugins.Rest /// HTTP header is indeed the password on file for the avatar /// specified by the UUID /// - protected bool IsVerifiedUser(OSHttpRequest request, LLUUID uuid) + protected bool IsVerifiedUser(OSHttpRequest request, UUID uuid) { // XXX under construction return false; diff --git a/OpenSim/Data/AssetDataBase.cs b/OpenSim/Data/AssetDataBase.cs index 690abd0beb..f38d5785be 100644 --- a/OpenSim/Data/AssetDataBase.cs +++ b/OpenSim/Data/AssetDataBase.cs @@ -25,17 +25,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; namespace OpenSim.Data { public abstract class AssetDataBase : IAssetProviderPlugin { - public abstract AssetBase FetchAsset(LLUUID uuid); + public abstract AssetBase FetchAsset(UUID uuid); public abstract void CreateAsset(AssetBase asset); public abstract void UpdateAsset(AssetBase asset); - public abstract bool ExistsAsset(LLUUID uuid); + public abstract bool ExistsAsset(UUID uuid); public abstract string Version { get; } public abstract string Name { get; } diff --git a/OpenSim/Data/Base/AppearanceTableMapper.cs b/OpenSim/Data/Base/AppearanceTableMapper.cs index 79648802a2..c1bb739b34 100644 --- a/OpenSim/Data/Base/AppearanceTableMapper.cs +++ b/OpenSim/Data/Base/AppearanceTableMapper.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; using OpenSim.Data.Base; using OpenSim.Framework; @@ -55,15 +55,15 @@ namespace OpenSim.Data.Base m_schema = rowMapperSchema; m_keyFieldMapper = rowMapperSchema.AddMapping("UUID", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Owner.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Owner = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Owner.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Owner = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("Serial", delegate(AppearanceRowMapper mapper) { return (uint)mapper.Object.Serial; }, delegate(AppearanceRowMapper mapper, uint value) { mapper.Object.Serial = (int)value; }); rowMapperSchema.AddMapping("WearableItem0", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[0].ItemID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[0].ItemID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) { if (mapper.Object.Wearables == null) @@ -74,121 +74,121 @@ namespace OpenSim.Data.Base mapper.Object.Wearables[i] = new AvatarWearable(); } } - mapper.Object.Wearables[0].ItemID = new LLUUID(value.ToString()); + mapper.Object.Wearables[0].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset0", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[0].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[0].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[0].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[0].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem1", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[1].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[1].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[1].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[1].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset1", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[1].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[1].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[1].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[1].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem2", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[2].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[2].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[2].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[2].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset2", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[2].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[2].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[2].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[2].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem3", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[3].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[3].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[3].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[3].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset3", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[3].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[3].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[3].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[3].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem4", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[4].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[4].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[4].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[4].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset4", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[4].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[4].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[4].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[4].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem5", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[5].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[5].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[5].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[5].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset5", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[5].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[5].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[5].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[5].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem6", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[6].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[6].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[6].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[6].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset6", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[6].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[6].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[6].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[6].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem7", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[7].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[7].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[7].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[7].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset7", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[7].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[7].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[7].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[7].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem8", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[8].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[8].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[8].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[8].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset8", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[8].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[8].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[8].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[8].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem9", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[9].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[9].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[9].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[9].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset9", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[9].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[9].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[9].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[9].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem10", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[10].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[10].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[10].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[10].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset10", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[10].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[10].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[10].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[10].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem11", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[11].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[11].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[11].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[11].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset11", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[11].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[11].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[11].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[11].AssetID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableItem12", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[12].ItemID.UUID; }, - delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[12].ItemID = new LLUUID(value.ToString()); }); + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[12].ItemID.Guid; }, + delegate(AppearanceRowMapper mapper, Guid value) { mapper.Object.Wearables[12].ItemID = new UUID(value.ToString()); }); rowMapperSchema.AddMapping("WearableAsset12", - delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[12].AssetID.UUID; }, + delegate(AppearanceRowMapper mapper) { return mapper.Object.Wearables[12].AssetID.Guid; }, delegate(AppearanceRowMapper mapper, Guid value) - { mapper.Object.Wearables[12].AssetID = new LLUUID(value.ToString()); }); + { mapper.Object.Wearables[12].AssetID = new UUID(value.ToString()); }); } @@ -213,7 +213,7 @@ namespace OpenSim.Data.Base public bool Update(Guid userID, AvatarAppearance appearance) { AppearanceRowMapper mapper = CreateRowMapper(appearance); - return Update(appearance.Owner.UUID, mapper); + return Update(appearance.Owner.Guid, mapper); } /// @@ -244,7 +244,7 @@ namespace OpenSim.Data.Base protected AppearanceRowMapper FromReader(BaseDataReader reader, AvatarAppearance appearance) { AppearanceRowMapper mapper = CreateRowMapper(appearance); - mapper.FillObject(reader); + mapper.FiPrimitive(reader); return mapper; } @@ -256,7 +256,7 @@ namespace OpenSim.Data.Base public override AppearanceRowMapper FromReader(BaseDataReader reader) { AppearanceRowMapper mapper = CreateRowMapper(); - mapper.FillObject(reader); + mapper.FiPrimitive(reader); return mapper; } diff --git a/OpenSim/Data/Base/BaseRowMapper.cs b/OpenSim/Data/Base/BaseRowMapper.cs index d07f9b3791..d0e545b8e5 100644 --- a/OpenSim/Data/Base/BaseRowMapper.cs +++ b/OpenSim/Data/Base/BaseRowMapper.cs @@ -32,7 +32,7 @@ namespace OpenSim.Data.Base /// public abstract class BaseRowMapper { - public abstract void FillObject(BaseDataReader reader); + public abstract void FiPrimitive(BaseDataReader reader); } /// @@ -67,7 +67,7 @@ namespace OpenSim.Data.Base /// /// /// - public override void FillObject(BaseDataReader reader) + public override void FiPrimitive(BaseDataReader reader) { foreach (BaseFieldMapper fieldMapper in m_schema.Fields.Values) { diff --git a/OpenSim/Data/GridDataBase.cs b/OpenSim/Data/GridDataBase.cs index 0b56d072b7..0fd4d86c56 100644 --- a/OpenSim/Data/GridDataBase.cs +++ b/OpenSim/Data/GridDataBase.cs @@ -25,17 +25,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Data { public abstract class GridDataBase : IGridDataPlugin { public abstract RegionProfileData GetProfileByHandle(ulong regionHandle); - public abstract RegionProfileData GetProfileByLLUUID(LLUUID UUID); + public abstract RegionProfileData GetProfileByUUID(UUID UUID); public abstract RegionProfileData GetProfileByString(string regionName); public abstract RegionProfileData[] GetProfilesInRange(uint Xmin, uint Ymin, uint Xmax, uint Ymax); - public abstract bool AuthenticateSim(LLUUID UUID, ulong regionHandle, string simrecvkey); + public abstract bool AuthenticateSim(UUID UUID, ulong regionHandle, string simrecvkey); public abstract DataResponse AddProfile(RegionProfileData profile); public abstract ReservationData GetReservationAtPoint(uint x, uint y); public abstract DataResponse UpdateProfile(RegionProfileData profile); diff --git a/OpenSim/Data/IGridData.cs b/OpenSim/Data/IGridData.cs index c77bbb7e75..c5f4ee1bd1 100644 --- a/OpenSim/Data/IGridData.cs +++ b/OpenSim/Data/IGridData.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; namespace OpenSim.Data @@ -60,7 +60,7 @@ namespace OpenSim.Data /// /// A 128bit UUID /// A sim profile - RegionProfileData GetProfileByLLUUID(LLUUID UUID); + RegionProfileData GetProfileByUUID(UUID UUID); /// /// Returns a sim profile from a string match @@ -87,7 +87,7 @@ namespace OpenSim.Data /// The regionhandle sent by the sim /// The receiving key sent by the sim /// Whether the sim has been authenticated - bool AuthenticateSim(LLUUID UUID, ulong regionHandle, string simrecvkey); + bool AuthenticateSim(UUID UUID, ulong regionHandle, string simrecvkey); /// /// Adds a new profile to the database diff --git a/OpenSim/Data/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/MSSQL/MSSQLAssetData.cs index e10e3aa0d2..ed1c91be2f 100644 --- a/OpenSim/Data/MSSQL/MSSQLAssetData.cs +++ b/OpenSim/Data/MSSQL/MSSQLAssetData.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -84,7 +84,7 @@ namespace OpenSim.Data.MSSQL /// /// the asset UUID /// - override public AssetBase FetchAsset(LLUUID assetID) + override public AssetBase FetchAsset(UUID assetID) { Dictionary param = new Dictionary(); param["id"] = assetID.ToString(); @@ -102,7 +102,7 @@ namespace OpenSim.Data.MSSQL /// the asset override public void CreateAsset(AssetBase asset) { - if (ExistsAsset((LLUUID) asset.FullID)) + if (ExistsAsset((UUID) asset.FullID)) { return; } @@ -181,7 +181,7 @@ namespace OpenSim.Data.MSSQL /// /// /// true if exist. - override public bool ExistsAsset(LLUUID uuid) + override public bool ExistsAsset(UUID uuid) { if (FetchAsset(uuid) != null) { diff --git a/OpenSim/Data/MSSQL/MSSQLEstateData.cs b/OpenSim/Data/MSSQL/MSSQLEstateData.cs index 74eecd8d5c..b42c67f34d 100644 --- a/OpenSim/Data/MSSQL/MSSQLEstateData.cs +++ b/OpenSim/Data/MSSQL/MSSQLEstateData.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -102,7 +102,7 @@ namespace OpenSim.Data.MSSQL /// /// region ID. /// - public EstateSettings LoadEstateSettings(LLUUID regionID) + public EstateSettings LoadEstateSettings(UUID regionID) { EstateSettings es = new EstateSettings(); @@ -128,10 +128,10 @@ namespace OpenSim.Data.MSSQL else _FieldMap[name].SetValue(es, false); } - else if (_FieldMap[name].GetValue(es) is LLUUID) + else if (_FieldMap[name].GetValue(es) is UUID) { - LLUUID uuid; - LLUUID.TryParse(reader[name].ToString(), out uuid); + UUID uuid; + UUID.TryParse(reader[name].ToString(), out uuid); _FieldMap[name].SetValue(es, uuid); } @@ -333,8 +333,8 @@ namespace OpenSim.Data.MSSQL { EstateBan eb = new EstateBan(); - LLUUID uuid; - LLUUID.TryParse(reader["bannedUUID"].ToString(), out uuid); + UUID uuid; + UUID.TryParse(reader["bannedUUID"].ToString(), out uuid); eb.bannedUUID = uuid; eb.bannedIP = "0.0.0.0"; @@ -345,9 +345,9 @@ namespace OpenSim.Data.MSSQL } } - private LLUUID[] LoadUUIDList(uint estateID, string table) + private UUID[] LoadUUIDList(uint estateID, string table) { - List uuids = new List(); + List uuids = new List(); string sql = string.Format("select uuid from {0} where EstateID = @EstateID", table); @@ -361,8 +361,8 @@ namespace OpenSim.Data.MSSQL { // EstateBan eb = new EstateBan(); - LLUUID uuid; - LLUUID.TryParse(reader["uuid"].ToString(), out uuid); + UUID uuid; + UUID.TryParse(reader["uuid"].ToString(), out uuid); uuids.Add(uuid); } @@ -399,7 +399,7 @@ namespace OpenSim.Data.MSSQL } } - private void SaveUUIDList(uint estateID, string table, LLUUID[] data) + private void SaveUUIDList(uint estateID, string table, UUID[] data) { //Delete first string sql = string.Format("delete from {0} where EstateID = @EstateID", table); @@ -416,7 +416,7 @@ namespace OpenSim.Data.MSSQL bool createParamOnce = true; - foreach (LLUUID uuid in data) + foreach (UUID uuid in data) { if (createParamOnce) { diff --git a/OpenSim/Data/MSSQL/MSSQLGridData.cs b/OpenSim/Data/MSSQL/MSSQLGridData.cs index 423d4aa1c0..47edc4b385 100644 --- a/OpenSim/Data/MSSQL/MSSQLGridData.cs +++ b/OpenSim/Data/MSSQL/MSSQLGridData.cs @@ -31,7 +31,7 @@ using System.Data; using System.Reflection; using System.Security.Cryptography; using System.Text; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -176,7 +176,7 @@ namespace OpenSim.Data.MSSQL /// /// The region UUID /// The sim profile - override public RegionProfileData GetProfileByLLUUID(LLUUID uuid) + override public RegionProfileData GetProfileByUUID(UUID uuid) { Dictionary param = new Dictionary(); param["uuid"] = uuid.ToString(); @@ -284,7 +284,7 @@ namespace OpenSim.Data.MSSQL parameters["regionHandle"] = profile.regionHandle.ToString(); parameters["regionName"] = profile.regionName; - parameters["uuid"] = profile.UUID.ToString(); + parameters["uuid"] = profile.ToString(); parameters["regionRecvKey"] = profile.regionRecvKey; parameters["regionSecret"] = profile.regionSecret; parameters["regionSendKey"] = profile.regionSendKey; @@ -352,7 +352,7 @@ namespace OpenSim.Data.MSSQL parameters["regionHandle"] = profile.regionHandle.ToString(); parameters["regionName"] = profile.regionName; - parameters["uuid"] = profile.UUID.ToString(); + parameters["uuid"] = profile.ToString(); parameters["regionRecvKey"] = profile.regionRecvKey; parameters["regionSecret"] = profile.regionSecret; parameters["regionSendKey"] = profile.regionSendKey; @@ -403,14 +403,14 @@ namespace OpenSim.Data.MSSQL /// The attempted regionHandle of the challenger /// The secret /// Whether the secret and regionhandle match the database entry for UUID - override public bool AuthenticateSim(LLUUID uuid, ulong handle, string authkey) + override public bool AuthenticateSim(UUID uuid, ulong handle, string authkey) { bool throwHissyFit = false; // Should be true by 1.0 if (throwHissyFit) throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential."); - RegionProfileData data = GetProfileByLLUUID(uuid); + RegionProfileData data = GetProfileByUUID(uuid); return (handle == data.regionHandle && authkey == data.regionSecret); } @@ -424,7 +424,7 @@ namespace OpenSim.Data.MSSQL /// /// /// - public bool AuthenticateSim(LLUUID uuid, ulong handle, string authhash, string challenge) + public bool AuthenticateSim(UUID uuid, ulong handle, string authhash, string challenge) { // SHA512Managed HashProvider = new SHA512Managed(); // Encoding TextProvider = new UTF8Encoding(); diff --git a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs b/OpenSim/Data/MSSQL/MSSQLInventoryData.cs index 9e60b160a6..e7df7c1c2d 100644 --- a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs +++ b/OpenSim/Data/MSSQL/MSSQLInventoryData.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -167,7 +167,7 @@ namespace OpenSim.Data.MSSQL /// /// The folder to search /// A list containing inventory items - public List getInventoryInFolder(LLUUID folderID) + public List getInventoryInFolder(UUID folderID) { try { @@ -201,13 +201,13 @@ namespace OpenSim.Data.MSSQL /// /// The user whos inventory is to be searched /// A list of folder objects - public List getUserRootFolders(LLUUID user) + public List getUserRootFolders(UUID user) { try { Dictionary param = new Dictionary(); param["uuid"] = user.ToString(); - param["zero"] = LLUUID.Zero.ToString(); + param["zero"] = UUID.Zero.ToString(); using (IDbCommand result = database.Query( @@ -235,13 +235,13 @@ namespace OpenSim.Data.MSSQL /// /// the User UUID /// - public InventoryFolderBase getUserRootFolder(LLUUID user) + public InventoryFolderBase getUserRootFolder(UUID user) { try { Dictionary param = new Dictionary(); param["uuid"] = user.ToString(); - param["zero"] = LLUUID.Zero.ToString(); + param["zero"] = UUID.Zero.ToString(); using (IDbCommand result = database.Query( @@ -281,7 +281,7 @@ namespace OpenSim.Data.MSSQL /// /// The folder to search /// A list of inventory folders - public List getInventoryFolders(LLUUID parentID) + public List getInventoryFolders(UUID parentID) { try { @@ -318,23 +318,23 @@ namespace OpenSim.Data.MSSQL { InventoryItemBase item = new InventoryItemBase(); - item.ID = new LLUUID((string) reader["inventoryID"]); - item.AssetID = new LLUUID((string) reader["assetID"]); + item.ID = new UUID((string) reader["inventoryID"]); + item.AssetID = new UUID((string) reader["assetID"]); item.AssetType = (int) reader["assetType"]; - item.Folder = new LLUUID((string) reader["parentFolderID"]); - item.Owner = new LLUUID((string) reader["avatarID"]); + item.Folder = new UUID((string) reader["parentFolderID"]); + item.Owner = new UUID((string) reader["avatarID"]); item.Name = (string) reader["inventoryName"]; item.Description = (string) reader["inventoryDescription"]; item.NextPermissions = ConvertInt32BitFieldToUint32((int)reader["inventoryNextPermissions"]); item.CurrentPermissions = ConvertInt32BitFieldToUint32((int)reader["inventoryCurrentPermissions"]); item.InvType = (int) reader["invType"]; - item.Creator = new LLUUID((string) reader["creatorID"]); + item.Creator = new UUID((string) reader["creatorID"]); item.BasePermissions = ConvertInt32BitFieldToUint32((int)reader["inventoryBasePermissions"]); item.EveryOnePermissions = ConvertInt32BitFieldToUint32((int)reader["inventoryEveryOnePermissions"]); item.SalePrice = (int) reader["salePrice"]; item.SaleType = Convert.ToByte(reader["saleType"]); item.CreationDate = (int) reader["creationDate"]; - item.GroupID = new LLUUID(reader["groupID"].ToString()); + item.GroupID = new UUID(reader["groupID"].ToString()); item.GroupOwned = Convert.ToBoolean(reader["groupOwned"]); item.Flags = ConvertInt32BitFieldToUint32((int)reader["flags"]); @@ -353,7 +353,7 @@ namespace OpenSim.Data.MSSQL /// /// The item to return /// An inventory item - public InventoryItemBase getInventoryItem(LLUUID itemID) + public InventoryItemBase getInventoryItem(UUID itemID) { try { @@ -389,9 +389,9 @@ namespace OpenSim.Data.MSSQL try { InventoryFolderBase folder = new InventoryFolderBase(); - folder.Owner = new LLUUID((string) reader["agentID"]); - folder.ParentID = new LLUUID((string) reader["parentFolderID"]); - folder.ID = new LLUUID((string) reader["folderID"]); + folder.Owner = new UUID((string) reader["agentID"]); + folder.ParentID = new UUID((string) reader["parentFolderID"]); + folder.ID = new UUID((string) reader["folderID"]); folder.Name = (string) reader["folderName"]; folder.Type = (short) reader["type"]; folder.Version = Convert.ToUInt16(reader["version"]); @@ -410,7 +410,7 @@ namespace OpenSim.Data.MSSQL /// /// The folder to return /// A folder class - public InventoryFolderBase getInventoryFolder(LLUUID folderID) + public InventoryFolderBase getInventoryFolder(UUID folderID) { try { @@ -556,7 +556,7 @@ namespace OpenSim.Data.MSSQL /// Delete an item in inventory database /// /// the item UUID - public void deleteInventoryItem(LLUUID itemID) + public void deleteInventoryItem(UUID itemID) { try { @@ -679,7 +679,7 @@ namespace OpenSim.Data.MSSQL /// /// list where folders will be appended /// ID of parent - protected void getInventoryFolders(ref List folders, LLUUID parentID) + protected void getInventoryFolders(ref List folders, UUID parentID) { List subfolderList = getInventoryFolders(parentID); @@ -688,7 +688,7 @@ namespace OpenSim.Data.MSSQL } // See IInventoryDataPlugin - public List getFolderHierarchy(LLUUID parentID) + public List getFolderHierarchy(UUID parentID) { List folders = new List(); getInventoryFolders(ref folders, parentID); @@ -703,7 +703,7 @@ namespace OpenSim.Data.MSSQL /// Delete a folder in inventory databasae /// /// the folder UUID - protected void deleteOneFolder(LLUUID folderID) + protected void deleteOneFolder(UUID folderID) { try { @@ -725,7 +725,7 @@ namespace OpenSim.Data.MSSQL /// Delete an item in inventory database /// /// the item ID - protected void deleteItemsInFolder(LLUUID folderID) + protected void deleteItemsInFolder(UUID folderID) { try { @@ -749,7 +749,7 @@ namespace OpenSim.Data.MSSQL /// Delete an inventory folder /// /// Id of folder to delete - public void deleteInventoryFolder(LLUUID folderID) + public void deleteInventoryFolder(UUID folderID) { // lock (database) { diff --git a/OpenSim/Data/MSSQL/MSSQLManager.cs b/OpenSim/Data/MSSQL/MSSQLManager.cs index 535cf33c11..abbcddf51a 100644 --- a/OpenSim/Data/MSSQL/MSSQLManager.cs +++ b/OpenSim/Data/MSSQL/MSSQLManager.cs @@ -31,7 +31,7 @@ using System.Data; using System.Data.SqlClient; using System.IO; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -220,7 +220,7 @@ namespace OpenSim.Data.MSSQL { return SqlDbType.Bit; } - if (type == typeof(LLUUID)) + if (type == typeof(UUID)) { return SqlDbType.VarChar; } @@ -244,7 +244,7 @@ namespace OpenSim.Data.MSSQL { Type valueType = value.GetType(); - if (valueType == typeof(LLUUID)) + if (valueType == typeof(UUID)) { return value.ToString(); } @@ -335,7 +335,7 @@ namespace OpenSim.Data.MSSQL // Region Main regionprofile.regionHandle = Convert.ToUInt64(reader["regionHandle"]); regionprofile.regionName = (string)reader["regionName"]; - regionprofile.UUID = new LLUUID((string)reader["uuid"]); + regionprofile.UUID = new UUID((string)reader["uuid"]); // Secrets regionprofile.regionRecvKey = (string)reader["regionRecvKey"]; @@ -372,16 +372,16 @@ namespace OpenSim.Data.MSSQL regionprofile.regionUserURI = (string)reader["regionUserURI"]; regionprofile.regionUserRecvKey = (string)reader["regionUserRecvKey"]; regionprofile.regionUserSendKey = (string)reader["regionUserSendKey"]; - regionprofile.owner_uuid = new LLUUID((string) reader["owner_uuid"]); + regionprofile.owner_uuid = new UUID((string) reader["owner_uuid"]); // World Map Addition string tempRegionMap = reader["regionMapTexture"].ToString(); if (tempRegionMap != String.Empty) { - regionprofile.regionMapTextureID = new LLUUID(tempRegionMap); + regionprofile.regionMapTextureID = new UUID(tempRegionMap); } else { - regionprofile.regionMapTextureID = new LLUUID(); + regionprofile.regionMapTextureID = new UUID(); } } else @@ -403,7 +403,7 @@ namespace OpenSim.Data.MSSQL if (reader.Read()) { - retval.ID = new LLUUID((string)reader["UUID"]); + retval.ID = new UUID((string)reader["UUID"]); retval.FirstName = (string)reader["username"]; retval.SurName = (string)reader["lastname"]; @@ -411,11 +411,11 @@ namespace OpenSim.Data.MSSQL retval.PasswordSalt = (string)reader["passwordSalt"]; retval.HomeRegion = Convert.ToUInt64(reader["homeRegion"].ToString()); - retval.HomeLocation = new LLVector3( + retval.HomeLocation = new Vector3( Convert.ToSingle(reader["homeLocationX"].ToString()), Convert.ToSingle(reader["homeLocationY"].ToString()), Convert.ToSingle(reader["homeLocationZ"].ToString())); - retval.HomeLookAt = new LLVector3( + retval.HomeLookAt = new Vector3( Convert.ToSingle(reader["homeLookAtX"].ToString()), Convert.ToSingle(reader["homeLookAtY"].ToString()), Convert.ToSingle(reader["homeLookAtZ"].ToString())); @@ -432,9 +432,9 @@ namespace OpenSim.Data.MSSQL retval.AboutText = (string)reader["profileAboutText"]; retval.FirstLifeAboutText = (string)reader["profileFirstText"]; - retval.Image = new LLUUID((string)reader["profileImage"]); - retval.FirstLifeImage = new LLUUID((string)reader["profileFirstImage"]); - retval.WebLoginKey = new LLUUID((string)reader["webLoginKey"]); + retval.Image = new UUID((string)reader["profileImage"]); + retval.FirstLifeImage = new UUID((string)reader["profileFirstImage"]); + retval.WebLoginKey = new UUID((string)reader["webLoginKey"]); } else { @@ -455,9 +455,9 @@ namespace OpenSim.Data.MSSQL if (reader.Read()) { // Agent IDs - retval.ProfileID = new LLUUID((string)reader["UUID"]); - retval.SessionID = new LLUUID((string)reader["sessionID"]); - retval.SecureSessionID = new LLUUID((string)reader["secureSessionID"]); + retval.ProfileID = new UUID((string)reader["UUID"]); + retval.SessionID = new UUID((string)reader["sessionID"]); + retval.SecureSessionID = new UUID((string)reader["secureSessionID"]); // Agent Who? retval.AgentIP = (string)reader["agentIP"]; @@ -471,8 +471,8 @@ namespace OpenSim.Data.MSSQL // Current position retval.Region = (string)reader["currentRegion"]; retval.Handle = Convert.ToUInt64(reader["currentHandle"].ToString()); - LLVector3 tmp_v; - LLVector3.TryParse((string)reader["currentPos"], out tmp_v); + Vector3 tmp_v; + Vector3.TryParse((string)reader["currentPos"], out tmp_v); retval.Position = tmp_v; } @@ -497,7 +497,7 @@ namespace OpenSim.Data.MSSQL asset = new AssetBase(); asset.Data = (byte[])reader["data"]; asset.Description = (string)reader["description"]; - asset.FullID = new LLUUID((string)reader["id"]); + asset.FullID = new UUID((string)reader["id"]); asset.Local = Convert.ToBoolean(reader["local"]); // ((sbyte)reader["local"]) != 0 ? true : false; asset.Name = (string)reader["name"]; asset.Type = Convert.ToSByte(reader["assetType"]); diff --git a/OpenSim/Data/MSSQL/MSSQLRegionData.cs b/OpenSim/Data/MSSQL/MSSQLRegionData.cs index 46aa6c9cd2..d267e41b92 100644 --- a/OpenSim/Data/MSSQL/MSSQLRegionData.cs +++ b/OpenSim/Data/MSSQL/MSSQLRegionData.cs @@ -31,7 +31,7 @@ using System.Data; using System.Data.SqlClient; using System.IO; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -174,12 +174,12 @@ namespace OpenSim.Data.MSSQL /// /// The region UUID. /// - public List LoadObjects(LLUUID regionUUID) + public List LoadObjects(UUID regionUUID) { - Dictionary createdObjects = new Dictionary(); + Dictionary createdObjects = new Dictionary(); //Retrieve all values of current region - RetrievePrimsDataForRegion(regionUUID, LLUUID.Zero, ""); + RetrievePrimsDataForRegion(regionUUID, UUID.Zero, ""); List retvals = new List(); @@ -235,7 +235,7 @@ namespace OpenSim.Data.MSSQL "No shape found for prim in storage, so setting default box shape"); prim.Shape = PrimitiveBaseShape.Default; } - createdObjects[new LLUUID(objID)].AddPart(prim); + createdObjects[new UUID(objID)].AddPart(prim); } LoadItems(prim); @@ -292,7 +292,7 @@ namespace OpenSim.Data.MSSQL // } // else // { -// createdObjects[new LLUUID(objID)].AddPart(prim); +// createdObjects[new UUID(objID)].AddPart(prim); // } // } // } @@ -307,7 +307,7 @@ namespace OpenSim.Data.MSSQL // { // while (readerShapes.Read()) // { -// LLUUID UUID = new LLUUID((string) readerShapes["UUID"]); +// UUID UUID = new UUID((string) readerShapes["UUID"]); // // foreach (SceneObjectGroup objectGroup in createdObjects.Values) // { @@ -324,7 +324,7 @@ namespace OpenSim.Data.MSSQL #endregion } - public void StoreObject(SceneObjectGroup obj, LLUUID regionUUID) + public void StoreObject(SceneObjectGroup obj, UUID regionUUID) { //Retrieve all values of current region, and current scene/or prims //Build primID's, we use IN so I can select all prims from objgroup @@ -341,9 +341,9 @@ namespace OpenSim.Data.MSSQL foreach (SceneObjectPart prim in obj.Children.Values) { - if ((prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == 0 - && (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Temporary) == 0 - && (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.TemporaryOnRez) == 0) + if ((prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) == 0 + && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Temporary) == 0 + && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) == 0) { lock (_PrimsDataSet) { @@ -391,7 +391,7 @@ namespace OpenSim.Data.MSSQL /// /// id of scenegroup /// regionUUID (is this used anyway - public void RemoveObject(LLUUID objectID, LLUUID regionUUID) + public void RemoveObject(UUID objectID, UUID regionUUID) { _Log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", objectID, regionUUID); @@ -418,7 +418,7 @@ namespace OpenSim.Data.MSSQL /// /// /// - public void StorePrimInventory(LLUUID primID, ICollection items) + public void StorePrimInventory(UUID primID, ICollection items) { _Log.InfoFormat("[REGION DB]: Persisting Prim Inventory with prim ID {0}", primID); @@ -456,7 +456,7 @@ namespace OpenSim.Data.MSSQL /// /// regionID. /// - public double[,] LoadTerrain(LLUUID regionID) + public double[,] LoadTerrain(UUID regionID) { double[,] terrain = new double[256, 256]; terrain.Initialize(); @@ -501,7 +501,7 @@ namespace OpenSim.Data.MSSQL /// /// terrain map data. /// regionID. - public void StoreTerrain(double[,] terrain, LLUUID regionID) + public void StoreTerrain(double[,] terrain, UUID regionID) { int revision = Util.UnixTimeSinceEpoch(); @@ -532,7 +532,7 @@ namespace OpenSim.Data.MSSQL /// /// The region UUID. /// - public List LoadLandObjects(LLUUID regionUUID) + public List LoadLandObjects(UUID regionUUID) { List landDataForRegion = new List(); @@ -617,7 +617,7 @@ VALUES /// Removes a land object from DB. /// /// UUID of landobject - public void RemoveLandObject(LLUUID globalID) + public void RemoveLandObject(UUID globalID) { using (AutoClosingSqlCommand cmd = _Database.Query("delete from land where UUID=@UUID")) { @@ -637,7 +637,7 @@ VALUES /// /// The region UUID. /// - public RegionSettings LoadRegionSettings(LLUUID regionUUID) + public RegionSettings LoadRegionSettings(UUID regionUUID) { string sql = "select * from regionsettings where regionUUID = @regionUUID"; RegionSettings regionSettings; @@ -801,7 +801,7 @@ VALUES //TODO change this is some more generic code so we doesnt have to change it every time a new field is added? RegionSettings newSettings = new RegionSettings(); - newSettings.RegionUUID = new LLUUID((string)row["regionUUID"]); + newSettings.RegionUUID = new UUID((string)row["regionUUID"]); newSettings.BlockTerraform = Convert.ToBoolean(row["block_terraform"]); newSettings.AllowDamage = Convert.ToBoolean(row["allow_damage"]); newSettings.BlockFly = Convert.ToBoolean(row["block_fly"]); @@ -815,10 +815,10 @@ VALUES newSettings.DisableScripts = Convert.ToBoolean(row["disable_scripts"]); newSettings.DisableCollisions = Convert.ToBoolean(row["disable_collisions"]); newSettings.DisablePhysics = Convert.ToBoolean(row["disable_physics"]); - newSettings.TerrainTexture1 = new LLUUID((String)row["terrain_texture_1"]); - newSettings.TerrainTexture2 = new LLUUID((String)row["terrain_texture_2"]); - newSettings.TerrainTexture3 = new LLUUID((String)row["terrain_texture_3"]); - newSettings.TerrainTexture4 = new LLUUID((String)row["terrain_texture_4"]); + newSettings.TerrainTexture1 = new UUID((String)row["terrain_texture_1"]); + newSettings.TerrainTexture2 = new UUID((String)row["terrain_texture_2"]); + newSettings.TerrainTexture3 = new UUID((String)row["terrain_texture_3"]); + newSettings.TerrainTexture4 = new UUID((String)row["terrain_texture_4"]); newSettings.Elevation1NW = Convert.ToDouble(row["elevation_1_nw"]); newSettings.Elevation2NW = Convert.ToDouble(row["elevation_2_nw"]); newSettings.Elevation1NE = Convert.ToDouble(row["elevation_1_ne"]); @@ -834,7 +834,7 @@ VALUES newSettings.Sandbox = Convert.ToBoolean(row["sandbox"]); newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]); newSettings.SunPosition = Convert.ToDouble(row["sun_position"]); - newSettings.Covenant = new LLUUID((String)row["covenant"]); + newSettings.Covenant = new UUID((String)row["covenant"]); return newSettings; } @@ -848,7 +848,7 @@ VALUES { LandData newData = new LandData(); - newData.GlobalID = new LLUUID((String)row["UUID"]); + newData.GlobalID = new UUID((String)row["UUID"]); newData.LocalID = Convert.ToInt32(row["LocalLandID"]); // Bitmap is a byte[512] @@ -864,41 +864,41 @@ VALUES //Enum libsecondlife.Parcel.ParcelCategory newData.ClaimDate = Convert.ToInt32(row["ClaimDate"]); newData.ClaimPrice = Convert.ToInt32(row["ClaimPrice"]); - newData.GroupID = new LLUUID((String)row["GroupUUID"]); + newData.GroupID = new UUID((String)row["GroupUUID"]); newData.SalePrice = Convert.ToInt32(row["SalePrice"]); newData.Status = (Parcel.ParcelStatus)Convert.ToInt32(row["LandStatus"]); //Enum. libsecondlife.Parcel.ParcelStatus newData.Flags = Convert.ToUInt32(row["LandFlags"]); newData.LandingType = Convert.ToByte(row["LandingType"]); newData.MediaAutoScale = Convert.ToByte(row["MediaAutoScale"]); - newData.MediaID = new LLUUID((String)row["MediaTextureUUID"]); + newData.MediaID = new UUID((String)row["MediaTextureUUID"]); newData.MediaURL = (String)row["MediaURL"]; newData.MusicURL = (String)row["MusicURL"]; newData.PassHours = Convert.ToSingle(row["PassHours"]); newData.PassPrice = Convert.ToInt32(row["PassPrice"]); - LLUUID authedbuyer; - LLUUID snapshotID; + UUID authedbuyer; + UUID snapshotID; - if (LLUUID.TryParse((string)row["AuthBuyerID"], out authedbuyer)) + if (UUID.TryParse((string)row["AuthBuyerID"], out authedbuyer)) newData.AuthBuyerID = authedbuyer; - if (LLUUID.TryParse((string)row["SnapshotUUID"], out snapshotID)) + if (UUID.TryParse((string)row["SnapshotUUID"], out snapshotID)) newData.SnapshotID = snapshotID; try { newData.UserLocation = - new LLVector3(Convert.ToSingle(row["UserLocationX"]), Convert.ToSingle(row["UserLocationY"]), + new Vector3(Convert.ToSingle(row["UserLocationX"]), Convert.ToSingle(row["UserLocationY"]), Convert.ToSingle(row["UserLocationZ"])); newData.UserLookAt = - new LLVector3(Convert.ToSingle(row["UserLookAtX"]), Convert.ToSingle(row["UserLookAtY"]), + new Vector3(Convert.ToSingle(row["UserLookAtX"]), Convert.ToSingle(row["UserLookAtY"]), Convert.ToSingle(row["UserLookAtZ"])); } catch (InvalidCastException) { - newData.UserLocation = LLVector3.Zero; - newData.UserLookAt = LLVector3.Zero; + newData.UserLocation = Vector3.Zero; + newData.UserLookAt = Vector3.Zero; _Log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name); } @@ -915,7 +915,7 @@ VALUES private static ParcelManager.ParcelAccessEntry buildLandAccessData(IDataRecord row) { ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); - entry.AgentID = new LLUUID((string)row["AccessUUID"]); + entry.AgentID = new UUID((string)row["AccessUUID"]); entry.Flags = (ParcelManager.AccessList)Convert.ToInt32(row["Flags"]); entry.Time = new DateTime(); return entry; @@ -930,7 +930,7 @@ VALUES { SceneObjectPart prim = new SceneObjectPart(); - prim.UUID = new LLUUID((String)row["UUID"]); + prim.UUID = new UUID((String)row["UUID"]); // explicit conversion of integers is required, which sort // of sucks. No idea if there is a shortcut here or not. prim.ParentID = Convert.ToUInt32(row["ParentID"]); @@ -943,54 +943,54 @@ VALUES prim.TouchName = (String)row["TouchName"]; // permissions prim.ObjectFlags = Convert.ToUInt32(row["ObjectFlags"]); - prim.CreatorID = new LLUUID((String)row["CreatorID"]); - prim.OwnerID = new LLUUID((String)row["OwnerID"]); - prim.GroupID = new LLUUID((String)row["GroupID"]); - prim.LastOwnerID = new LLUUID((String)row["LastOwnerID"]); + prim.CreatorID = new UUID((String)row["CreatorID"]); + prim.OwnerID = new UUID((String)row["OwnerID"]); + prim.GroupID = new UUID((String)row["GroupID"]); + prim.LastOwnerID = new UUID((String)row["LastOwnerID"]); prim.OwnerMask = Convert.ToUInt32(row["OwnerMask"]); prim.NextOwnerMask = Convert.ToUInt32(row["NextOwnerMask"]); prim.GroupMask = Convert.ToUInt32(row["GroupMask"]); prim.EveryoneMask = Convert.ToUInt32(row["EveryoneMask"]); prim.BaseMask = Convert.ToUInt32(row["BaseMask"]); // vectors - prim.OffsetPosition = new LLVector3( + prim.OffsetPosition = new Vector3( Convert.ToSingle(row["PositionX"]), Convert.ToSingle(row["PositionY"]), Convert.ToSingle(row["PositionZ"]) ); - prim.GroupPosition = new LLVector3( + prim.GroupPosition = new Vector3( Convert.ToSingle(row["GroupPositionX"]), Convert.ToSingle(row["GroupPositionY"]), Convert.ToSingle(row["GroupPositionZ"]) ); - prim.Velocity = new LLVector3( + prim.Velocity = new Vector3( Convert.ToSingle(row["VelocityX"]), Convert.ToSingle(row["VelocityY"]), Convert.ToSingle(row["VelocityZ"]) ); - prim.AngularVelocity = new LLVector3( + prim.AngularVelocity = new Vector3( Convert.ToSingle(row["AngularVelocityX"]), Convert.ToSingle(row["AngularVelocityY"]), Convert.ToSingle(row["AngularVelocityZ"]) ); - prim.Acceleration = new LLVector3( + prim.Acceleration = new Vector3( Convert.ToSingle(row["AccelerationX"]), Convert.ToSingle(row["AccelerationY"]), Convert.ToSingle(row["AccelerationZ"]) ); // quaternions - prim.RotationOffset = new LLQuaternion( + prim.RotationOffset = new Quaternion( Convert.ToSingle(row["RotationX"]), Convert.ToSingle(row["RotationY"]), Convert.ToSingle(row["RotationZ"]), Convert.ToSingle(row["RotationW"]) ); - prim.SitTargetPositionLL = new LLVector3( + prim.SitTargetPositionLL = new Vector3( Convert.ToSingle(row["SitTargetOffsetX"]), Convert.ToSingle(row["SitTargetOffsetY"]), Convert.ToSingle(row["SitTargetOffsetZ"]) ); - prim.SitTargetOrientationLL = new LLQuaternion( + prim.SitTargetOrientationLL = new Quaternion( Convert.ToSingle(row["SitTargetOrientX"]), Convert.ToSingle(row["SitTargetOrientY"]), Convert.ToSingle(row["SitTargetOrientZ"]), @@ -1003,14 +1003,14 @@ VALUES prim.PayPrice[3] = Convert.ToInt32(row["PayButton3"]); prim.PayPrice[4] = Convert.ToInt32(row["PayButton4"]); - prim.Sound = new LLUUID(row["LoopedSound"].ToString()); + prim.Sound = new UUID(row["LoopedSound"].ToString()); prim.SoundGain = Convert.ToSingle(row["LoopedSoundGain"]); prim.SoundFlags = 1; // If it's persisted at all, it's looped if (row["TextureAnimation"] != null && row["TextureAnimation"] != DBNull.Value) prim.TextureAnimation = (Byte[])row["TextureAnimation"]; - prim.RotationalVelocity = new LLVector3( + prim.RotationalVelocity = new Vector3( Convert.ToSingle(row["OmegaX"]), Convert.ToSingle(row["OmegaY"]), Convert.ToSingle(row["OmegaZ"]) @@ -1019,13 +1019,13 @@ VALUES // TODO: Rotation // OmegaX, OmegaY, OmegaZ - prim.SetCameraEyeOffset(new LLVector3( + prim.SetCameraEyeOffset(new Vector3( Convert.ToSingle(row["CameraEyeOffsetX"]), Convert.ToSingle(row["CameraEyeOffsetY"]), Convert.ToSingle(row["CameraEyeOffsetZ"]) )); - prim.SetCameraAtOffset(new LLVector3( + prim.SetCameraAtOffset(new Vector3( Convert.ToSingle(row["CameraAtOffsetX"]), Convert.ToSingle(row["CameraAtOffsetY"]), Convert.ToSingle(row["CameraAtOffsetZ"]) @@ -1056,7 +1056,7 @@ VALUES private static PrimitiveBaseShape buildShape(DataRow row) { PrimitiveBaseShape s = new PrimitiveBaseShape(); - s.Scale = new LLVector3( + s.Scale = new Vector3( Convert.ToSingle(row["ScaleX"]), Convert.ToSingle(row["ScaleY"]), Convert.ToSingle(row["ScaleZ"]) @@ -1108,10 +1108,10 @@ VALUES { TaskInventoryItem taskItem = new TaskInventoryItem(); - taskItem.ItemID = new LLUUID((String)row["itemID"]); - taskItem.ParentPartID = new LLUUID((String)row["primID"]); - taskItem.AssetID = new LLUUID((String)row["assetID"]); - taskItem.ParentID = new LLUUID((String)row["parentFolderID"]); + taskItem.ItemID = new UUID((String)row["itemID"]); + taskItem.ParentPartID = new UUID((String)row["primID"]); + taskItem.AssetID = new UUID((String)row["assetID"]); + taskItem.ParentID = new UUID((String)row["parentFolderID"]); taskItem.InvType = Convert.ToInt32(row["invType"]); taskItem.Type = Convert.ToInt32(row["assetType"]); @@ -1119,10 +1119,10 @@ VALUES taskItem.Name = (String)row["name"]; taskItem.Description = (String)row["description"]; taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]); - taskItem.CreatorID = new LLUUID((String)row["creatorID"]); - taskItem.OwnerID = new LLUUID((String)row["ownerID"]); - taskItem.LastOwnerID = new LLUUID((String)row["lastOwnerID"]); - taskItem.GroupID = new LLUUID((String)row["groupID"]); + taskItem.CreatorID = new UUID((String)row["creatorID"]); + taskItem.OwnerID = new UUID((String)row["ownerID"]); + taskItem.LastOwnerID = new UUID((String)row["lastOwnerID"]); + taskItem.GroupID = new UUID((String)row["groupID"]); taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]); taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]); @@ -1225,7 +1225,7 @@ VALUES /// land parameters. /// region UUID. /// - private SqlParameter[] CreateLandParameters(LandData land, LLUUID regionUUID) + private SqlParameter[] CreateLandParameters(LandData land, UUID regionUUID) { SqlParameter[] parameters = new SqlParameter[32]; @@ -1274,7 +1274,7 @@ VALUES /// parcel access entry. /// parcel ID. /// - private SqlParameter[] CreateLandAccessParameters(ParcelManager.ParcelAccessEntry parcelAccessEntry, LLUUID parcelID) + private SqlParameter[] CreateLandAccessParameters(ParcelManager.ParcelAccessEntry parcelAccessEntry, UUID parcelID) { SqlParameter[] parameters = new SqlParameter[3]; @@ -1292,7 +1292,7 @@ VALUES /// prim data. /// scenegroup ID. /// regionUUID. - private static void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) + private static void fillPrimRow(DataRow row, SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID) { row["UUID"] = prim.UUID.ToString(); row["RegionUUID"] = regionUUID.ToString(); @@ -1340,12 +1340,12 @@ VALUES row["RotationW"] = prim.RotationOffset.W; // Sit target - LLVector3 sitTargetPos = prim.SitTargetPositionLL; + Vector3 sitTargetPos = prim.SitTargetPositionLL; row["SitTargetOffsetX"] = sitTargetPos.X; row["SitTargetOffsetY"] = sitTargetPos.Y; row["SitTargetOffsetZ"] = sitTargetPos.Z; - LLQuaternion sitTargetOrient = prim.SitTargetOrientationLL; + Quaternion sitTargetOrient = prim.SitTargetOrientationLL; row["SitTargetOrientW"] = sitTargetOrient.W; row["SitTargetOrientX"] = sitTargetOrient.X; row["SitTargetOrientY"] = sitTargetOrient.Y; @@ -1364,7 +1364,7 @@ VALUES } else { - row["LoopedSound"] = LLUUID.Zero; + row["LoopedSound"] = UUID.Zero; row["LoopedSoundGain"] = 0.0f; } @@ -1446,13 +1446,13 @@ VALUES #endregion - private void RetrievePrimsDataForRegion(LLUUID regionUUID, LLUUID sceneGroupID, string primID) + private void RetrievePrimsDataForRegion(UUID regionUUID, UUID sceneGroupID, string primID) { using (SqlConnection connection = _Database.DatabaseConnection()) { _PrimDataAdapter.SelectCommand.Connection = connection; _PrimDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString(); - if (sceneGroupID != LLUUID.Zero) + if (sceneGroupID != UUID.Zero) _PrimDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString(); else _PrimDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%"; @@ -1462,7 +1462,7 @@ VALUES _ShapeDataAdapter.SelectCommand.Connection = connection; _ShapeDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString(); - if (sceneGroupID != LLUUID.Zero) + if (sceneGroupID != UUID.Zero) _ShapeDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString(); else _ShapeDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%"; @@ -1472,7 +1472,7 @@ VALUES _ItemsDataAdapter.SelectCommand.Connection = connection; _ItemsDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString(); - if (sceneGroupID != LLUUID.Zero) + if (sceneGroupID != UUID.Zero) _ItemsDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString(); else _ItemsDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%"; diff --git a/OpenSim/Data/MSSQL/MSSQLUserData.cs b/OpenSim/Data/MSSQL/MSSQLUserData.cs index cfe5f5061b..91180126d9 100644 --- a/OpenSim/Data/MSSQL/MSSQLUserData.cs +++ b/OpenSim/Data/MSSQL/MSSQLUserData.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -183,13 +183,13 @@ namespace OpenSim.Data.MSSQL /// UUID of the friendlist owner /// Friend's UUID /// Permission flag - override public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + override public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) { int dtvalue = Util.UnixTimeSinceEpoch(); Dictionary param = new Dictionary(); - param["@ownerID"] = friendlistowner.UUID.ToString(); - param["@friendID"] = friend.UUID.ToString(); + param["@ownerID"] = friendlistowner.ToString(); + param["@friendID"] = friend.ToString(); param["@friendPerms"] = perms.ToString(); param["@datetimestamp"] = dtvalue.ToString(); @@ -229,11 +229,11 @@ namespace OpenSim.Data.MSSQL /// /// UUID of the friendlist owner /// UUID of the not-so-friendly user to remove from the list - override public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + override public void RemoveUserFriend(UUID friendlistowner, UUID friend) { Dictionary param = new Dictionary(); - param["@ownerID"] = friendlistowner.UUID.ToString(); - param["@friendID"] = friend.UUID.ToString(); + param["@ownerID"] = friendlistowner.ToString(); + param["@friendID"] = friend.ToString(); try @@ -267,11 +267,11 @@ namespace OpenSim.Data.MSSQL /// UUID of the friendlist owner /// UUID of the friend /// new permission flag - override public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + override public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) { Dictionary param = new Dictionary(); - param["@ownerID"] = friendlistowner.UUID.ToString(); - param["@friendID"] = friend.UUID.ToString(); + param["@ownerID"] = friendlistowner.ToString(); + param["@friendID"] = friend.ToString(); param["@friendPerms"] = perms.ToString(); @@ -298,12 +298,12 @@ namespace OpenSim.Data.MSSQL /// /// UUID of the friendlist owner /// Friendlist list - override public List GetUserFriendList(LLUUID friendlistowner) + override public List GetUserFriendList(UUID friendlistowner) { List Lfli = new List(); Dictionary param = new Dictionary(); - param["@ownerID"] = friendlistowner.UUID.ToString(); + param["@ownerID"] = friendlistowner.ToString(); try { @@ -318,8 +318,8 @@ namespace OpenSim.Data.MSSQL while (reader.Read()) { FriendListItem fli = new FriendListItem(); - fli.FriendListOwner = new LLUUID((string)reader["ownerID"]); - fli.Friend = new LLUUID((string)reader["friendID"]); + fli.FriendListOwner = new UUID((string)reader["ownerID"]); + fli.Friend = new UUID((string)reader["friendID"]); fli.FriendPerms = (uint)Convert.ToInt32(reader["friendPerms"]); // This is not a real column in the database table, it's a joined column from the opposite record @@ -345,7 +345,7 @@ namespace OpenSim.Data.MSSQL /// avatar uuid /// region uuid /// region handle - override public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle) + override public void UpdateUserCurrentRegion(UUID avatarid, UUID regionuuid, ulong regionhandle) { //m_log.Info("[USER]: Stub UpdateUserCUrrentRegion called"); } @@ -356,7 +356,7 @@ namespace OpenSim.Data.MSSQL /// /// /// - override public List GeneratePickerResults(LLUUID queryID, string query) + override public List GeneratePickerResults(UUID queryID, string query) { List returnlist = new List(); string[] querysplit; @@ -375,7 +375,7 @@ namespace OpenSim.Data.MSSQL while (reader.Read()) { AvatarPickerAvatar user = new AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string)reader["UUID"]); + user.AvatarID = new UUID((string)reader["UUID"]); user.firstName = (string)reader["username"]; user.lastName = (string)reader["lastname"]; returnlist.Add(user); @@ -400,7 +400,7 @@ namespace OpenSim.Data.MSSQL while (reader.Read()) { AvatarPickerAvatar user = new AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string)reader["UUID"]); + user.AvatarID = new UUID((string)reader["UUID"]); user.firstName = (string)reader["username"]; user.lastName = (string)reader["lastname"]; returnlist.Add(user); @@ -420,7 +420,7 @@ namespace OpenSim.Data.MSSQL /// /// /// - override public UserProfileData GetUserByUUID(LLUUID uuid) + override public UserProfileData GetUserByUUID(UUID uuid) { try { @@ -467,7 +467,7 @@ namespace OpenSim.Data.MSSQL /// /// The accounts UUID /// The users session - override public UserAgentData GetAgentByUUID(LLUUID uuid) + override public UserAgentData GetAgentByUUID(UUID uuid) { try { @@ -493,7 +493,7 @@ namespace OpenSim.Data.MSSQL /// The agent UUID /// the WebLogin Key /// unused ? - override public void StoreWebLoginKey(LLUUID AgentID, LLUUID WebLoginKey) + override public void StoreWebLoginKey(UUID AgentID, UUID WebLoginKey) { UserProfileData user = GetUserByUUID(AgentID); user.WebLoginKey = WebLoginKey; @@ -549,12 +549,12 @@ namespace OpenSim.Data.MSSQL /// UUID for profile image /// UUID for firstlife image /// Success? - private bool InsertUserRow(LLUUID uuid, string username, string lastname, string passwordHash, + private bool InsertUserRow(UUID uuid, string username, string lastname, string passwordHash, string passwordSalt, UInt64 homeRegion, float homeLocX, float homeLocY, float homeLocZ, float homeLookAtX, float homeLookAtY, float homeLookAtZ, int created, int lastlogin, string inventoryURI, string assetURI, uint canDoMask, uint wantDoMask, string aboutText, string firstText, - LLUUID profileImage, LLUUID firstImage, LLUUID webLoginKey) + UUID profileImage, UUID firstImage, UUID webLoginKey) { string sql = "INSERT INTO "+m_usersTableName; sql += " ([UUID], [username], [lastname], [passwordHash], [passwordSalt], [homeRegion], "; @@ -594,7 +594,7 @@ namespace OpenSim.Data.MSSQL parameters["profileFirstText"] = firstText; parameters["profileImage"] = profileImage.ToString(); parameters["profileFirstImage"] = firstImage.ToString(); - parameters["webLoginKey"] = LLUUID.Random().ToString(); + parameters["webLoginKey"] = UUID.Random().ToString(); try @@ -683,7 +683,7 @@ namespace OpenSim.Data.MSSQL SqlParameter param21 = new SqlParameter("@profileImage", user.Image.ToString()); SqlParameter param22 = new SqlParameter("@profileFirstImage", user.FirstLifeImage.ToString()); SqlParameter param23 = new SqlParameter("@keyUUUID", user.ID.ToString()); - SqlParameter param24 = new SqlParameter("@webLoginKey", user.WebLoginKey.UUID.ToString()); + SqlParameter param24 = new SqlParameter("@webLoginKey", user.WebLoginKey.ToString()); command.Parameters.Add(param1); command.Parameters.Add(param2); command.Parameters.Add(param3); @@ -728,7 +728,7 @@ namespace OpenSim.Data.MSSQL /// The receivers account ID /// The amount to transfer /// false - override public bool MoneyTransferRequest(LLUUID from, LLUUID to, uint amount) + override public bool MoneyTransferRequest(UUID from, UUID to, uint amount) { return false; } @@ -741,14 +741,14 @@ namespace OpenSim.Data.MSSQL /// The receivers account ID /// The item to transfer /// false - override public bool InventoryTransferRequest(LLUUID from, LLUUID to, LLUUID item) + override public bool InventoryTransferRequest(UUID from, UUID to, UUID item) { return false; } /// Appearance /// TODO: stubs for now to get us to a compiling state gently - override public AvatarAppearance GetUserAppearance(LLUUID user) + override public AvatarAppearance GetUserAppearance(UUID user) { // return new AvatarAppearance(); try @@ -784,37 +784,37 @@ namespace OpenSim.Data.MSSQL { AvatarAppearance appearance = new AvatarAppearance(); - appearance.Owner = new LLUUID((string)reader["owner"]); + appearance.Owner = new UUID((string)reader["owner"]); appearance.Serial = Convert.ToInt32(reader["serial"]); appearance.VisualParams = (byte[])reader["visual_params"]; - appearance.Texture = new LLObject.TextureEntry((byte[])reader["texture"], 0, ((byte[])reader["texture"]).Length); + appearance.Texture = new Primitive.TextureEntry((byte[])reader["texture"], 0, ((byte[])reader["texture"]).Length); appearance.AvatarHeight = (float)Convert.ToDouble(reader["avatar_height"]); - appearance.BodyItem = new LLUUID((string)reader["body_item"]); - appearance.BodyAsset = new LLUUID((string)reader["body_asset"]); - appearance.SkinItem = new LLUUID((string)reader["skin_item"]); - appearance.SkinAsset = new LLUUID((string)reader["skin_asset"]); - appearance.HairItem = new LLUUID((string)reader["hair_item"]); - appearance.HairAsset = new LLUUID((string)reader["hair_asset"]); - appearance.EyesItem = new LLUUID((string)reader["eyes_item"]); - appearance.EyesAsset = new LLUUID((string)reader["eyes_asset"]); - appearance.ShirtItem = new LLUUID((string)reader["shirt_item"]); - appearance.ShirtAsset = new LLUUID((string)reader["shirt_asset"]); - appearance.PantsItem = new LLUUID((string)reader["pants_item"]); - appearance.PantsAsset = new LLUUID((string)reader["pants_asset"]); - appearance.ShoesItem = new LLUUID((string)reader["shoes_item"]); - appearance.ShoesAsset = new LLUUID((string)reader["shoes_asset"]); - appearance.SocksItem = new LLUUID((string)reader["socks_item"]); - appearance.SocksAsset = new LLUUID((string)reader["socks_asset"]); - appearance.JacketItem = new LLUUID((string)reader["jacket_item"]); - appearance.JacketAsset = new LLUUID((string)reader["jacket_asset"]); - appearance.GlovesItem = new LLUUID((string)reader["gloves_item"]); - appearance.GlovesAsset = new LLUUID((string)reader["gloves_asset"]); - appearance.UnderShirtItem = new LLUUID((string)reader["undershirt_item"]); - appearance.UnderShirtAsset = new LLUUID((string)reader["undershirt_asset"]); - appearance.UnderPantsItem = new LLUUID((string)reader["underpants_item"]); - appearance.UnderPantsAsset = new LLUUID((string)reader["underpants_asset"]); - appearance.SkirtItem = new LLUUID((string)reader["skirt_item"]); - appearance.SkirtAsset = new LLUUID((string)reader["skirt_asset"]); + appearance.BodyItem = new UUID((string)reader["body_item"]); + appearance.BodyAsset = new UUID((string)reader["body_asset"]); + appearance.SkinItem = new UUID((string)reader["skin_item"]); + appearance.SkinAsset = new UUID((string)reader["skin_asset"]); + appearance.HairItem = new UUID((string)reader["hair_item"]); + appearance.HairAsset = new UUID((string)reader["hair_asset"]); + appearance.EyesItem = new UUID((string)reader["eyes_item"]); + appearance.EyesAsset = new UUID((string)reader["eyes_asset"]); + appearance.ShirtItem = new UUID((string)reader["shirt_item"]); + appearance.ShirtAsset = new UUID((string)reader["shirt_asset"]); + appearance.PantsItem = new UUID((string)reader["pants_item"]); + appearance.PantsAsset = new UUID((string)reader["pants_asset"]); + appearance.ShoesItem = new UUID((string)reader["shoes_item"]); + appearance.ShoesAsset = new UUID((string)reader["shoes_asset"]); + appearance.SocksItem = new UUID((string)reader["socks_item"]); + appearance.SocksAsset = new UUID((string)reader["socks_asset"]); + appearance.JacketItem = new UUID((string)reader["jacket_item"]); + appearance.JacketAsset = new UUID((string)reader["jacket_asset"]); + appearance.GlovesItem = new UUID((string)reader["gloves_item"]); + appearance.GlovesAsset = new UUID((string)reader["gloves_asset"]); + appearance.UnderShirtItem = new UUID((string)reader["undershirt_item"]); + appearance.UnderShirtAsset = new UUID((string)reader["undershirt_asset"]); + appearance.UnderPantsItem = new UUID((string)reader["underpants_item"]); + appearance.UnderPantsAsset = new UUID((string)reader["underpants_asset"]); + appearance.SkirtItem = new UUID((string)reader["skirt_item"]); + appearance.SkirtAsset = new UUID((string)reader["skirt_asset"]); return appearance; } @@ -831,7 +831,7 @@ namespace OpenSim.Data.MSSQL /// /// the used UUID /// the appearence - override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) + override public void UpdateUserAppearance(UUID user, AvatarAppearance appearance) { string sql = String.Empty; sql += "DELETE FROM avatarappearance WHERE owner=@owner "; @@ -918,7 +918,7 @@ namespace OpenSim.Data.MSSQL { } - override public void ResetAttachments(LLUUID userID) + override public void ResetAttachments(UUID userID) { } } diff --git a/OpenSim/Data/MySQL/MySQLAssetData.cs b/OpenSim/Data/MySQL/MySQLAssetData.cs index 08a8c6e456..5c58a4b948 100644 --- a/OpenSim/Data/MySQL/MySQLAssetData.cs +++ b/OpenSim/Data/MySQL/MySQLAssetData.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Data; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using MySql.Data.MySqlClient; using OpenSim.Framework; @@ -116,7 +116,7 @@ namespace OpenSim.Data.MySQL /// Asset UUID to fetch /// Return the asset /// On failure : throw an exception and attempt to reconnect to database - override public AssetBase FetchAsset(LLUUID assetID) + override public AssetBase FetchAsset(UUID assetID) { AssetBase asset = null; lock (_dbConnection) @@ -223,7 +223,7 @@ namespace OpenSim.Data.MySQL /// /// The asset UUID /// true if exist. - override public bool ExistsAsset(LLUUID uuid) + override public bool ExistsAsset(UUID uuid) { bool assetExists = false; diff --git a/OpenSim/Data/MySQL/MySQLEstateData.cs b/OpenSim/Data/MySQL/MySQLEstateData.cs index 2ab7d4095c..8eddec6ce4 100644 --- a/OpenSim/Data/MySQL/MySQLEstateData.cs +++ b/OpenSim/Data/MySQL/MySQLEstateData.cs @@ -31,7 +31,7 @@ using System.Data; using System.IO; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using MySql.Data.MySqlClient; using OpenSim.Framework; @@ -157,7 +157,7 @@ namespace OpenSim.Data.MySQL m_lastConnectionUse = timeNow; } - public EstateSettings LoadEstateSettings(LLUUID regionID) + public EstateSettings LoadEstateSettings(UUID regionID) { EstateSettings es = new EstateSettings(); es.OnSave += StoreEstateSettings; @@ -185,11 +185,11 @@ namespace OpenSim.Data.MySQL else m_FieldMap[name].SetValue(es, false); } - else if (m_FieldMap[name].GetValue(es) is libsecondlife.LLUUID) + else if(m_FieldMap[name].GetValue(es) is OpenMetaverse.UUID) { - LLUUID uuid = LLUUID.Zero; + UUID uuid = UUID.Zero; - LLUUID.TryParse(r[name].ToString(), out uuid); + UUID.TryParse(r[name].ToString(), out uuid); m_FieldMap[name].SetValue(es, uuid); } else @@ -330,8 +330,8 @@ namespace OpenSim.Data.MySQL { EstateBan eb = new EstateBan(); - LLUUID uuid = new LLUUID(); - LLUUID.TryParse(r["bannedUUID"].ToString(), out uuid); + UUID uuid = new UUID(); + UUID.TryParse(r["bannedUUID"].ToString(), out uuid); eb.bannedUUID = uuid; eb.bannedIP = "0.0.0.0"; @@ -366,7 +366,7 @@ namespace OpenSim.Data.MySQL } } - void SaveUUIDList(uint EstateID, string table, LLUUID[] data) + void SaveUUIDList(uint EstateID, string table, UUID[] data) { CheckConnection(); @@ -381,7 +381,7 @@ namespace OpenSim.Data.MySQL cmd.CommandText = "insert into "+table+" (EstateID, uuid) values ( ?EstateID, ?uuid )"; - foreach (LLUUID uuid in data) + foreach (UUID uuid in data) { cmd.Parameters.AddWithValue("?EstateID", EstateID.ToString()); cmd.Parameters.AddWithValue("?uuid", uuid.ToString()); @@ -391,9 +391,9 @@ namespace OpenSim.Data.MySQL } } - LLUUID[] LoadUUIDList(uint EstateID, string table) + UUID[] LoadUUIDList(uint EstateID, string table) { - List uuids = new List(); + List uuids = new List(); CheckConnection(); @@ -408,8 +408,8 @@ namespace OpenSim.Data.MySQL { // EstateBan eb = new EstateBan(); - LLUUID uuid = new LLUUID(); - LLUUID.TryParse(r["uuid"].ToString(), out uuid); + UUID uuid = new UUID(); + UUID.TryParse(r["uuid"].ToString(), out uuid); uuids.Add(uuid); } diff --git a/OpenSim/Data/MySQL/MySQLGridData.cs b/OpenSim/Data/MySQL/MySQLGridData.cs index 9dc3d1867a..fa5b33c37e 100644 --- a/OpenSim/Data/MySQL/MySQLGridData.cs +++ b/OpenSim/Data/MySQL/MySQLGridData.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Data; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -121,7 +121,7 @@ namespace OpenSim.Data.MySQL } else { - m_log.Warn("Using deprecated mysql_connection.ini. Please update database_connect in GridServer_Config.xml and we'll use that instead"); + m_log.Warn("Using deprecated mysql_connection.ini. Please update database_connect in GridServer_Config.Xml and we'll use that instead"); IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname"); string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database"); @@ -322,7 +322,7 @@ namespace OpenSim.Data.MySQL /// /// The region UUID /// The sim profile - override public RegionProfileData GetProfileByLLUUID(LLUUID uuid) + override public RegionProfileData GetProfileByUUID(UUID uuid) { MySQLSuperManager dbm = GetLockedConnection(); @@ -458,14 +458,14 @@ namespace OpenSim.Data.MySQL /// The attempted regionHandle of the challenger /// The secret /// Whether the secret and regionhandle match the database entry for UUID - override public bool AuthenticateSim(LLUUID uuid, ulong handle, string authkey) + override public bool AuthenticateSim(UUID uuid, ulong handle, string authkey) { bool throwHissyFit = false; // Should be true by 1.0 if (throwHissyFit) throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential."); - RegionProfileData data = GetProfileByLLUUID(uuid); + RegionProfileData data = GetProfileByUUID(uuid); return (handle == data.regionHandle && authkey == data.regionSecret); } @@ -479,7 +479,7 @@ namespace OpenSim.Data.MySQL /// /// /// - public bool AuthenticateSim(LLUUID uuid, ulong handle, string authhash, string challenge) + public bool AuthenticateSim(UUID uuid, ulong handle, string authhash, string challenge) { // SHA512Managed HashProvider = new SHA512Managed(); // Encoding TextProvider = new UTF8Encoding(); diff --git a/OpenSim/Data/MySQL/MySQLInventoryData.cs b/OpenSim/Data/MySQL/MySQLInventoryData.cs index fe2d39391e..50d3cc74b8 100644 --- a/OpenSim/Data/MySQL/MySQLInventoryData.cs +++ b/OpenSim/Data/MySQL/MySQLInventoryData.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using MySql.Data.MySqlClient; using OpenSim.Framework; @@ -125,7 +125,7 @@ namespace OpenSim.Data.MySQL /// /// The folder to search /// A list containing inventory items - public List getInventoryInFolder(LLUUID folderID) + public List getInventoryInFolder(UUID folderID) { try { @@ -163,7 +163,7 @@ namespace OpenSim.Data.MySQL /// /// The user whos inventory is to be searched /// A list of folder objects - public List getUserRootFolders(LLUUID user) + public List getUserRootFolders(UUID user) { try { @@ -176,7 +176,7 @@ namespace OpenSim.Data.MySQL "SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", database.Connection); result.Parameters.AddWithValue("?uuid", user.ToString()); - result.Parameters.AddWithValue("?zero", LLUUID.Zero.ToString()); + result.Parameters.AddWithValue("?zero", UUID.Zero.ToString()); MySqlDataReader reader = result.ExecuteReader(); List items = new List(); @@ -204,7 +204,7 @@ namespace OpenSim.Data.MySQL /// /// The user UUID /// - public InventoryFolderBase getUserRootFolder(LLUUID user) + public InventoryFolderBase getUserRootFolder(UUID user) { try { @@ -217,7 +217,7 @@ namespace OpenSim.Data.MySQL "SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", database.Connection); result.Parameters.AddWithValue("?uuid", user.ToString()); - result.Parameters.AddWithValue("?zero", LLUUID.Zero.ToString()); + result.Parameters.AddWithValue("?zero", UUID.Zero.ToString()); MySqlDataReader reader = result.ExecuteReader(); @@ -258,7 +258,7 @@ namespace OpenSim.Data.MySQL /// /// The folder to search /// A list of inventory folders - public List getInventoryFolders(LLUUID parentID) + public List getInventoryFolders(UUID parentID) { try { @@ -302,23 +302,23 @@ namespace OpenSim.Data.MySQL { InventoryItemBase item = new InventoryItemBase(); - item.ID = new LLUUID((string) reader["inventoryID"]); - item.AssetID = new LLUUID((string) reader["assetID"]); + item.ID = new UUID((string) reader["inventoryID"]); + item.AssetID = new UUID((string) reader["assetID"]); item.AssetType = (int) reader["assetType"]; - item.Folder = new LLUUID((string) reader["parentFolderID"]); - item.Owner = new LLUUID((string) reader["avatarID"]); + item.Folder = new UUID((string) reader["parentFolderID"]); + item.Owner = new UUID((string) reader["avatarID"]); item.Name = (string) reader["inventoryName"]; item.Description = (string) reader["inventoryDescription"]; item.NextPermissions = (uint) reader["inventoryNextPermissions"]; item.CurrentPermissions = (uint) reader["inventoryCurrentPermissions"]; item.InvType = (int) reader["invType"]; - item.Creator = new LLUUID((string) reader["creatorID"]); + item.Creator = new UUID((string) reader["creatorID"]); item.BasePermissions = (uint) reader["inventoryBasePermissions"]; item.EveryOnePermissions = (uint) reader["inventoryEveryOnePermissions"]; item.SalePrice = (int) reader["salePrice"]; item.SaleType = Convert.ToByte(reader["saleType"]); item.CreationDate = (int) reader["creationDate"]; - item.GroupID = new LLUUID(reader["groupID"].ToString()); + item.GroupID = new UUID(reader["groupID"].ToString()); item.GroupOwned = Convert.ToBoolean(reader["groupOwned"]); item.Flags = (uint) reader["flags"]; @@ -337,7 +337,7 @@ namespace OpenSim.Data.MySQL /// /// The item to return /// An inventory item - public InventoryItemBase getInventoryItem(LLUUID itemID) + public InventoryItemBase getInventoryItem(UUID itemID) { try { @@ -378,9 +378,9 @@ namespace OpenSim.Data.MySQL try { InventoryFolderBase folder = new InventoryFolderBase(); - folder.Owner = new LLUUID((string) reader["agentID"]); - folder.ParentID = new LLUUID((string) reader["parentFolderID"]); - folder.ID = new LLUUID((string) reader["folderID"]); + folder.Owner = new UUID((string) reader["agentID"]); + folder.ParentID = new UUID((string) reader["parentFolderID"]); + folder.ID = new UUID((string) reader["folderID"]); folder.Name = (string) reader["folderName"]; folder.Type = (short) reader["type"]; folder.Version = (ushort) ((int) reader["version"]); @@ -400,7 +400,7 @@ namespace OpenSim.Data.MySQL /// /// The folder to return /// A folder class - public InventoryFolderBase getInventoryFolder(LLUUID folderID) + public InventoryFolderBase getInventoryFolder(UUID folderID) { try { @@ -498,7 +498,7 @@ namespace OpenSim.Data.MySQL /// Detele the specified inventory item /// /// The inventory item UUID to delete - public void deleteInventoryItem(LLUUID itemID) + public void deleteInventoryItem(UUID itemID) { try { @@ -596,7 +596,7 @@ namespace OpenSim.Data.MySQL /// /// list where folders will be appended /// ID of parent - protected void getInventoryFolders(ref List folders, LLUUID parentID) + protected void getInventoryFolders(ref List folders, UUID parentID) { List subfolderList = getInventoryFolders(parentID); @@ -610,7 +610,7 @@ namespace OpenSim.Data.MySQL /// /// /// - public List getFolderHierarchy(LLUUID parentID) + public List getFolderHierarchy(UUID parentID) { /* Note: There are subtle changes between this implementation of getFolderHierarchy and the previous one * - We will only need to hit the database twice instead of n times. @@ -631,8 +631,8 @@ namespace OpenSim.Data.MySQL try { List folders = new List(); - Dictionary> hashtable - = new Dictionary>(); ; + Dictionary> hashtable + = new Dictionary>(); ; List parentFolder = new List(); lock (database) { @@ -655,7 +655,7 @@ namespace OpenSim.Data.MySQL if (parentFolder.Count >= 1) // No result means parent folder does not exist { - if (parentFolder[0].ParentID == LLUUID.Zero) // We are querying the root folder + if (parentFolder[0].ParentID == UUID.Zero) // We are querying the root folder { /* Get all of the agent's folders from the database, put them in a list and return it */ result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE agentID = ?uuid", @@ -728,7 +728,7 @@ namespace OpenSim.Data.MySQL /// Delete a folder from database /// /// the folder UUID - protected void deleteOneFolder(LLUUID folderID) + protected void deleteOneFolder(UUID folderID) { try { @@ -754,7 +754,7 @@ namespace OpenSim.Data.MySQL /// Delete all item in a folder /// /// the folder UUID - protected void deleteItemsInFolder(LLUUID folderID) + protected void deleteItemsInFolder(UUID folderID) { try { @@ -780,7 +780,7 @@ namespace OpenSim.Data.MySQL /// Deletes an inventory folder /// /// Id of folder to delete - public void deleteInventoryFolder(LLUUID folderID) + public void deleteInventoryFolder(UUID folderID) { List subFolders = getFolderHierarchy(folderID); diff --git a/OpenSim/Data/MySQL/MySQLLogData.cs b/OpenSim/Data/MySQL/MySQLLogData.cs index c02016c2d0..07ef916bb9 100644 --- a/OpenSim/Data/MySQL/MySQLLogData.cs +++ b/OpenSim/Data/MySQL/MySQLLogData.cs @@ -63,7 +63,7 @@ namespace OpenSim.Data.MySQL } else { - m_log.Warn("Using deprecated mysql_connection.ini. Please update database_connect in GridServer_Config.xml and we'll use that instead"); + m_log.Warn("Using deprecated mysql_connection.ini. Please update database_connect in GridServer_Config.Xml and we'll use that instead"); IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname"); diff --git a/OpenSim/Data/MySQL/MySQLManager.cs b/OpenSim/Data/MySQL/MySQLManager.cs index e863216c99..6048f93ce0 100644 --- a/OpenSim/Data/MySQL/MySQLManager.cs +++ b/OpenSim/Data/MySQL/MySQLManager.cs @@ -31,7 +31,7 @@ using System.Collections; using System.Data; using System.IO; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using MySql.Data.MySqlClient; using OpenSim.Framework; @@ -384,8 +384,8 @@ namespace OpenSim.Data.MySQL { retval.regionHandle = tmp64; } - LLUUID tmp_uuid; - if (!LLUUID.TryParse((string)reader["uuid"], out tmp_uuid)) + UUID tmp_uuid; + if (!UUID.TryParse((string)reader["uuid"], out tmp_uuid)) { return null; } @@ -396,7 +396,7 @@ namespace OpenSim.Data.MySQL // non-critical parts retval.regionName = (string)reader["regionName"]; - retval.originUUID = new LLUUID((string) reader["originUUID"]); + retval.originUUID = new UUID((string) reader["originUUID"]); // Secrets retval.regionRecvKey = (string) reader["regionRecvKey"]; @@ -434,8 +434,8 @@ namespace OpenSim.Data.MySQL retval.regionUserSendKey = (string) reader["regionUserSendKey"]; // World Map Addition - LLUUID.TryParse((string)reader["regionMapTexture"], out retval.regionMapTextureID); - LLUUID.TryParse((string)reader["owner_uuid"], out retval.owner_uuid); + UUID.TryParse((string)reader["regionMapTexture"], out retval.regionMapTextureID); + UUID.TryParse((string)reader["owner_uuid"], out retval.owner_uuid); } else { @@ -463,8 +463,8 @@ namespace OpenSim.Data.MySQL retval.reservationMinY = Convert.ToInt32(reader["resYMin"].ToString()); retval.reservationName = (string) reader["resName"]; retval.status = Convert.ToInt32(reader["status"].ToString()) == 1; - LLUUID tmp; - LLUUID.TryParse((string) reader["userUUID"], out tmp); + UUID tmp; + UUID.TryParse((string) reader["userUUID"], out tmp); retval.userUUID = tmp; } else @@ -486,15 +486,15 @@ namespace OpenSim.Data.MySQL if (reader.Read()) { // Agent IDs - LLUUID tmp; - if (!LLUUID.TryParse((string)reader["UUID"], out tmp)) + UUID tmp; + if (!UUID.TryParse((string)reader["UUID"], out tmp)) return null; retval.ProfileID = tmp; - LLUUID.TryParse((string) reader["sessionID"], out tmp); + UUID.TryParse((string) reader["sessionID"], out tmp); retval.SessionID = tmp; - LLUUID.TryParse((string)reader["secureSessionID"], out tmp); + UUID.TryParse((string)reader["secureSessionID"], out tmp); retval.SecureSessionID = tmp; // Agent Who? @@ -507,10 +507,10 @@ namespace OpenSim.Data.MySQL retval.LogoutTime = Convert.ToInt32(reader["logoutTime"].ToString()); // Current position - retval.Region = new LLUUID((string)reader["currentRegion"]); + retval.Region = new UUID((string)reader["currentRegion"]); retval.Handle = Convert.ToUInt64(reader["currentHandle"].ToString()); - LLVector3 tmp_v; - LLVector3.TryParse((string) reader["currentPos"], out tmp_v); + Vector3 tmp_v; + Vector3.TryParse((string) reader["currentPos"], out tmp_v); retval.Position = tmp_v; } else @@ -531,8 +531,8 @@ namespace OpenSim.Data.MySQL if (reader.Read()) { - LLUUID id; - if (!LLUUID.TryParse((string)reader["UUID"], out id)) + UUID id; + if (!UUID.TryParse((string)reader["UUID"], out id)) return null; retval.ID = id; @@ -543,17 +543,17 @@ namespace OpenSim.Data.MySQL retval.PasswordSalt = (string) reader["passwordSalt"]; retval.HomeRegion = Convert.ToUInt64(reader["homeRegion"].ToString()); - retval.HomeLocation = new LLVector3( + retval.HomeLocation = new Vector3( Convert.ToSingle(reader["homeLocationX"].ToString()), Convert.ToSingle(reader["homeLocationY"].ToString()), Convert.ToSingle(reader["homeLocationZ"].ToString())); - retval.HomeLookAt = new LLVector3( + retval.HomeLookAt = new Vector3( Convert.ToSingle(reader["homeLookAtX"].ToString()), Convert.ToSingle(reader["homeLookAtY"].ToString()), Convert.ToSingle(reader["homeLookAtZ"].ToString())); - LLUUID regionID = LLUUID.Zero; - LLUUID.TryParse(reader["homeRegionID"].ToString(), out regionID); // it's ok if it doesn't work; just use LLUUID.Zero + UUID regionID = UUID.Zero; + UUID.TryParse(reader["homeRegionID"].ToString(), out regionID); // it's ok if it doesn't work; just use UUID.Zero retval.HomeRegionID = regionID; retval.Created = Convert.ToInt32(reader["created"].ToString()); @@ -576,29 +576,29 @@ namespace OpenSim.Data.MySQL retval.FirstLifeAboutText = (string)reader["profileFirstText"]; if (reader.IsDBNull(reader.GetOrdinal("profileImage"))) - retval.Image = LLUUID.Zero; + retval.Image = UUID.Zero; else { - LLUUID tmp; - LLUUID.TryParse((string)reader["profileImage"], out tmp); + UUID tmp; + UUID.TryParse((string)reader["profileImage"], out tmp); retval.Image = tmp; } if (reader.IsDBNull(reader.GetOrdinal("profileFirstImage"))) - retval.FirstLifeImage = LLUUID.Zero; + retval.FirstLifeImage = UUID.Zero; else { - LLUUID tmp; - LLUUID.TryParse((string)reader["profileFirstImage"], out tmp); + UUID tmp; + UUID.TryParse((string)reader["profileFirstImage"], out tmp); retval.FirstLifeImage = tmp; } if (reader.IsDBNull(reader.GetOrdinal("webLoginKey"))) { - retval.WebLoginKey = LLUUID.Zero; + retval.WebLoginKey = UUID.Zero; } else { - LLUUID tmp; - LLUUID.TryParse((string)reader["webLoginKey"], out tmp); + UUID tmp; + UUID.TryParse((string)reader["webLoginKey"], out tmp); retval.WebLoginKey = tmp; } @@ -611,12 +611,12 @@ namespace OpenSim.Data.MySQL if (reader.IsDBNull(reader.GetOrdinal("partner"))) { - retval.Partner = LLUUID.Zero; + retval.Partner = UUID.Zero; } else { - LLUUID tmp; - LLUUID.TryParse((string)reader["partner"], out tmp); + UUID tmp; + UUID.TryParse((string)reader["partner"], out tmp); retval.Partner = tmp; } } @@ -638,37 +638,37 @@ namespace OpenSim.Data.MySQL if (reader.Read()) { appearance = new AvatarAppearance(); - appearance.Owner = new LLUUID((string)reader["owner"]); + appearance.Owner = new UUID((string)reader["owner"]); appearance.Serial = Convert.ToInt32(reader["serial"]); appearance.VisualParams = (byte[])reader["visual_params"]; - appearance.Texture = new LLObject.TextureEntry((byte[])reader["texture"], 0, ((byte[])reader["texture"]).Length); + appearance.Texture = new Primitive.TextureEntry((byte[])reader["texture"], 0, ((byte[])reader["texture"]).Length); appearance.AvatarHeight = (float)Convert.ToDouble(reader["avatar_height"]); - appearance.BodyItem = new LLUUID((string)reader["body_item"]); - appearance.BodyAsset = new LLUUID((string)reader["body_asset"]); - appearance.SkinItem = new LLUUID((string)reader["skin_item"]); - appearance.SkinAsset = new LLUUID((string)reader["skin_asset"]); - appearance.HairItem = new LLUUID((string)reader["hair_item"]); - appearance.HairAsset = new LLUUID((string)reader["hair_asset"]); - appearance.EyesItem = new LLUUID((string)reader["eyes_item"]); - appearance.EyesAsset = new LLUUID((string)reader["eyes_asset"]); - appearance.ShirtItem = new LLUUID((string)reader["shirt_item"]); - appearance.ShirtAsset = new LLUUID((string)reader["shirt_asset"]); - appearance.PantsItem = new LLUUID((string)reader["pants_item"]); - appearance.PantsAsset = new LLUUID((string)reader["pants_asset"]); - appearance.ShoesItem = new LLUUID((string)reader["shoes_item"]); - appearance.ShoesAsset = new LLUUID((string)reader["shoes_asset"]); - appearance.SocksItem = new LLUUID((string)reader["socks_item"]); - appearance.SocksAsset = new LLUUID((string)reader["socks_asset"]); - appearance.JacketItem = new LLUUID((string)reader["jacket_item"]); - appearance.JacketAsset = new LLUUID((string)reader["jacket_asset"]); - appearance.GlovesItem = new LLUUID((string)reader["gloves_item"]); - appearance.GlovesAsset = new LLUUID((string)reader["gloves_asset"]); - appearance.UnderShirtItem = new LLUUID((string)reader["undershirt_item"]); - appearance.UnderShirtAsset = new LLUUID((string)reader["undershirt_asset"]); - appearance.UnderPantsItem = new LLUUID((string)reader["underpants_item"]); - appearance.UnderPantsAsset = new LLUUID((string)reader["underpants_asset"]); - appearance.SkirtItem = new LLUUID((string)reader["skirt_item"]); - appearance.SkirtAsset = new LLUUID((string)reader["skirt_asset"]); + appearance.BodyItem = new UUID((string)reader["body_item"]); + appearance.BodyAsset = new UUID((string)reader["body_asset"]); + appearance.SkinItem = new UUID((string)reader["skin_item"]); + appearance.SkinAsset = new UUID((string)reader["skin_asset"]); + appearance.HairItem = new UUID((string)reader["hair_item"]); + appearance.HairAsset = new UUID((string)reader["hair_asset"]); + appearance.EyesItem = new UUID((string)reader["eyes_item"]); + appearance.EyesAsset = new UUID((string)reader["eyes_asset"]); + appearance.ShirtItem = new UUID((string)reader["shirt_item"]); + appearance.ShirtAsset = new UUID((string)reader["shirt_asset"]); + appearance.PantsItem = new UUID((string)reader["pants_item"]); + appearance.PantsAsset = new UUID((string)reader["pants_asset"]); + appearance.ShoesItem = new UUID((string)reader["shoes_item"]); + appearance.ShoesAsset = new UUID((string)reader["shoes_asset"]); + appearance.SocksItem = new UUID((string)reader["socks_item"]); + appearance.SocksAsset = new UUID((string)reader["socks_asset"]); + appearance.JacketItem = new UUID((string)reader["jacket_item"]); + appearance.JacketAsset = new UUID((string)reader["jacket_asset"]); + appearance.GlovesItem = new UUID((string)reader["gloves_item"]); + appearance.GlovesAsset = new UUID((string)reader["gloves_asset"]); + appearance.UnderShirtItem = new UUID((string)reader["undershirt_item"]); + appearance.UnderShirtAsset = new UUID((string)reader["undershirt_asset"]); + appearance.UnderPantsItem = new UUID((string)reader["underpants_item"]); + appearance.UnderPantsAsset = new UUID((string)reader["underpants_asset"]); + appearance.SkirtItem = new UUID((string)reader["skirt_item"]); + appearance.SkirtAsset = new UUID((string)reader["skirt_asset"]); } return appearance; } @@ -766,12 +766,12 @@ namespace OpenSim.Data.MySQL /// UUID for firstlife image /// Ignored /// Success? - public bool insertUserRow(LLUUID uuid, string username, string lastname, string passwordHash, + public bool insertUserRow(UUID uuid, string username, string lastname, string passwordHash, string passwordSalt, UInt64 homeRegion, float homeLocX, float homeLocY, float homeLocZ, float homeLookAtX, float homeLookAtY, float homeLookAtZ, int created, int lastlogin, string inventoryURI, string assetURI, uint canDoMask, uint wantDoMask, string aboutText, string firstText, - LLUUID profileImage, LLUUID firstImage, LLUUID webLoginKey) + UUID profileImage, UUID firstImage, UUID webLoginKey) { m_log.Debug("[MySQLManager]: Fetching profile for " + uuid.ToString()); string sql = @@ -867,12 +867,12 @@ namespace OpenSim.Data.MySQL /// UUID for firstlife image /// UUID for weblogin Key /// Success? - public bool updateUserRow(LLUUID uuid, string username, string lastname, string passwordHash, - string passwordSalt, UInt64 homeRegion, LLUUID homeRegionID, float homeLocX, float homeLocY, float homeLocZ, + public bool updateUserRow(UUID uuid, string username, string lastname, string passwordHash, + string passwordSalt, UInt64 homeRegion, UUID homeRegionID, float homeLocX, float homeLocY, float homeLocZ, float homeLookAtX, float homeLookAtY, float homeLookAtZ, int created, int lastlogin, string inventoryURI, string assetURI, uint canDoMask, uint wantDoMask, string aboutText, string firstText, - LLUUID profileImage, LLUUID firstImage, LLUUID webLoginKey, int userFlags, int godLevel, string customType, LLUUID partner) + UUID profileImage, UUID firstImage, UUID webLoginKey, int userFlags, int godLevel, string customType, UUID partner) { string sql = "UPDATE users SET `username` = ?username , `lastname` = ?lastname "; sql += ", `passwordHash` = ?passwordHash , `passwordSalt` = ?passwordSalt , "; @@ -1211,7 +1211,7 @@ namespace OpenSim.Data.MySQL } - public void writeAttachments(LLUUID agentID, Hashtable data) + public void writeAttachments(UUID agentID, Hashtable data) { string sql = "delete from avatarattachments where UUID = ?uuid"; diff --git a/OpenSim/Data/MySQL/MySQLRegionData.cs b/OpenSim/Data/MySQL/MySQLRegionData.cs index 903f022754..9552ba16a1 100644 --- a/OpenSim/Data/MySQL/MySQLRegionData.cs +++ b/OpenSim/Data/MySQL/MySQLRegionData.cs @@ -31,7 +31,7 @@ using System.Data; using System.IO; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using MySql.Data.MySqlClient; using OpenSim.Framework; @@ -296,15 +296,15 @@ namespace OpenSim.Data.MySQL /// /// The object /// The region UUID - public void StoreObject(SceneObjectGroup obj, LLUUID regionUUID) + public void StoreObject(SceneObjectGroup obj, UUID regionUUID) { lock (m_dataSet) { foreach (SceneObjectPart prim in obj.Children.Values) { - if ((prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == 0 - && (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Temporary) == 0 - && (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.TemporaryOnRez) == 0) + if ((prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) == 0 + && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Temporary) == 0 + && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) == 0) { //m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID); addPrim(prim, obj.UUID, regionUUID); @@ -323,9 +323,9 @@ namespace OpenSim.Data.MySQL /// /// The object /// The Region UUID - public void RemoveObject(LLUUID obj, LLUUID regionUUID) + public void RemoveObject(UUID obj, UUID regionUUID) { - m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID); + m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj, regionUUID); DataTable prims = m_primTable; DataTable shapes = m_shapeTable; @@ -337,7 +337,7 @@ namespace OpenSim.Data.MySQL foreach (DataRow row in primRows) { // Remove shapes row - LLUUID uuid = new LLUUID((string) row["UUID"]); + UUID uuid = new UUID((string) row["UUID"]); DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(uuid)); if (shapeRow != null) { @@ -358,7 +358,7 @@ namespace OpenSim.Data.MySQL /// The caller must acquire the necessrary synchronization locks and commit or rollback changes. /// /// the Item UUID - private void RemoveItems(LLUUID uuid) + private void RemoveItems(UUID uuid) { String sql = String.Format("primID = '{0}'", uuid); DataRow[] itemRows = m_itemsTable.Select(sql); @@ -374,9 +374,9 @@ namespace OpenSim.Data.MySQL /// /// the Region UUID /// List of loaded groups - public List LoadObjects(LLUUID regionUUID) + public List LoadObjects(UUID regionUUID) { - Dictionary createdObjects = new Dictionary(); + Dictionary createdObjects = new Dictionary(); List retvals = new List(); @@ -436,7 +436,7 @@ namespace OpenSim.Data.MySQL "No shape found for prim in storage, so setting default box shape"); prim.Shape = PrimitiveBaseShape.Default; } - createdObjects[new LLUUID(objID)].AddPart(prim); + createdObjects[new UUID(objID)].AddPart(prim); } LoadItems(prim); @@ -497,7 +497,7 @@ namespace OpenSim.Data.MySQL /// /// HeightField data /// region UUID - public void StoreTerrain(double[,] ter, LLUUID regionID) + public void StoreTerrain(double[,] ter, UUID regionID) { int revision = 1; m_log.Info("[REGION DB]: Storing terrain revision r" + revision.ToString()); @@ -527,7 +527,7 @@ namespace OpenSim.Data.MySQL /// /// the region UUID /// Heightfield data - public double[,] LoadTerrain(LLUUID regionID) + public double[,] LoadTerrain(UUID regionID) { double[,] terret = new double[256,256]; terret.Initialize(); @@ -583,7 +583,7 @@ namespace OpenSim.Data.MySQL /// /// /// - public void RemoveLandObject(LLUUID globalID) + public void RemoveLandObject(UUID globalID) { lock (m_dataSet) { @@ -646,7 +646,7 @@ namespace OpenSim.Data.MySQL } } - public RegionSettings LoadRegionSettings(LLUUID regionUUID) + public RegionSettings LoadRegionSettings(UUID regionUUID) { lock (m_dataSet) { @@ -701,7 +701,7 @@ namespace OpenSim.Data.MySQL /// /// /// - public List LoadLandObjects(LLUUID regionUUID) + public List LoadLandObjects(UUID regionUUID) { List landDataForRegion = new List(); lock (m_dataSet) @@ -1101,7 +1101,7 @@ namespace OpenSim.Data.MySQL private SceneObjectPart buildPrim(DataRow row) { SceneObjectPart prim = new SceneObjectPart(); - prim.UUID = new LLUUID((String) row["UUID"]); + prim.UUID = new UUID((String) row["UUID"]); // explicit conversion of integers is required, which sort // of sucks. No idea if there is a shortcut here or not. prim.ParentID = Convert.ToUInt32(row["ParentID"]); @@ -1114,54 +1114,54 @@ namespace OpenSim.Data.MySQL prim.TouchName = (String) row["TouchName"]; // permissions prim.ObjectFlags = Convert.ToUInt32(row["ObjectFlags"]); - prim.CreatorID = new LLUUID((String) row["CreatorID"]); - prim.OwnerID = new LLUUID((String) row["OwnerID"]); - prim.GroupID = new LLUUID((String) row["GroupID"]); - prim.LastOwnerID = new LLUUID((String) row["LastOwnerID"]); + prim.CreatorID = new UUID((String) row["CreatorID"]); + prim.OwnerID = new UUID((String) row["OwnerID"]); + prim.GroupID = new UUID((String) row["GroupID"]); + prim.LastOwnerID = new UUID((String) row["LastOwnerID"]); prim.OwnerMask = Convert.ToUInt32(row["OwnerMask"]); prim.NextOwnerMask = Convert.ToUInt32(row["NextOwnerMask"]); prim.GroupMask = Convert.ToUInt32(row["GroupMask"]); prim.EveryoneMask = Convert.ToUInt32(row["EveryoneMask"]); prim.BaseMask = Convert.ToUInt32(row["BaseMask"]); // vectors - prim.OffsetPosition = new LLVector3( + prim.OffsetPosition = new Vector3( Convert.ToSingle(row["PositionX"]), Convert.ToSingle(row["PositionY"]), Convert.ToSingle(row["PositionZ"]) ); - prim.GroupPosition = new LLVector3( + prim.GroupPosition = new Vector3( Convert.ToSingle(row["GroupPositionX"]), Convert.ToSingle(row["GroupPositionY"]), Convert.ToSingle(row["GroupPositionZ"]) ); - prim.Velocity = new LLVector3( + prim.Velocity = new Vector3( Convert.ToSingle(row["VelocityX"]), Convert.ToSingle(row["VelocityY"]), Convert.ToSingle(row["VelocityZ"]) ); - prim.AngularVelocity = new LLVector3( + prim.AngularVelocity = new Vector3( Convert.ToSingle(row["AngularVelocityX"]), Convert.ToSingle(row["AngularVelocityY"]), Convert.ToSingle(row["AngularVelocityZ"]) ); - prim.Acceleration = new LLVector3( + prim.Acceleration = new Vector3( Convert.ToSingle(row["AccelerationX"]), Convert.ToSingle(row["AccelerationY"]), Convert.ToSingle(row["AccelerationZ"]) ); // quaternions - prim.RotationOffset = new LLQuaternion( + prim.RotationOffset = new Quaternion( Convert.ToSingle(row["RotationX"]), Convert.ToSingle(row["RotationY"]), Convert.ToSingle(row["RotationZ"]), Convert.ToSingle(row["RotationW"]) ); - prim.SitTargetPositionLL = new LLVector3( + prim.SitTargetPositionLL = new Vector3( Convert.ToSingle(row["SitTargetOffsetX"]), Convert.ToSingle(row["SitTargetOffsetY"]), Convert.ToSingle(row["SitTargetOffsetZ"]) ); - prim.SitTargetOrientationLL = new LLQuaternion( + prim.SitTargetOrientationLL = new Quaternion( Convert.ToSingle(row["SitTargetOrientX"]), Convert.ToSingle(row["SitTargetOrientY"]), Convert.ToSingle(row["SitTargetOrientZ"]), @@ -1174,14 +1174,14 @@ namespace OpenSim.Data.MySQL prim.PayPrice[3] = Convert.ToInt32(row["PayButton3"]); prim.PayPrice[4] = Convert.ToInt32(row["PayButton4"]); - prim.Sound = new LLUUID(row["LoopedSound"].ToString()); + prim.Sound = new UUID(row["LoopedSound"].ToString()); prim.SoundGain = Convert.ToSingle(row["LoopedSoundGain"]); prim.SoundFlags = 1; // If it's persisted at all, it's looped if (!row.IsNull("TextureAnimation")) prim.TextureAnimation = (Byte[])row["TextureAnimation"]; - prim.RotationalVelocity = new LLVector3( + prim.RotationalVelocity = new Vector3( Convert.ToSingle(row["OmegaX"]), Convert.ToSingle(row["OmegaY"]), Convert.ToSingle(row["OmegaZ"]) @@ -1190,13 +1190,13 @@ namespace OpenSim.Data.MySQL // TODO: Rotation // OmegaX, OmegaY, OmegaZ - prim.SetCameraEyeOffset(new LLVector3( + prim.SetCameraEyeOffset(new Vector3( Convert.ToSingle(row["CameraEyeOffsetX"]), Convert.ToSingle(row["CameraEyeOffsetY"]), Convert.ToSingle(row["CameraEyeOffsetZ"]) )); - prim.SetCameraAtOffset(new LLVector3( + prim.SetCameraAtOffset(new Vector3( Convert.ToSingle(row["CameraAtOffsetX"]), Convert.ToSingle(row["CameraAtOffsetY"]), Convert.ToSingle(row["CameraAtOffsetZ"]) @@ -1229,10 +1229,10 @@ namespace OpenSim.Data.MySQL { TaskInventoryItem taskItem = new TaskInventoryItem(); - taskItem.ItemID = new LLUUID((String)row["itemID"]); - taskItem.ParentPartID = new LLUUID((String)row["primID"]); - taskItem.AssetID = new LLUUID((String)row["assetID"]); - taskItem.ParentID = new LLUUID((String)row["parentFolderID"]); + taskItem.ItemID = new UUID((String)row["itemID"]); + taskItem.ParentPartID = new UUID((String)row["primID"]); + taskItem.AssetID = new UUID((String)row["assetID"]); + taskItem.ParentID = new UUID((String)row["parentFolderID"]); taskItem.InvType = Convert.ToInt32(row["invType"]); taskItem.Type = Convert.ToInt32(row["assetType"]); @@ -1240,10 +1240,10 @@ namespace OpenSim.Data.MySQL taskItem.Name = (String)row["name"]; taskItem.Description = (String)row["description"]; taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]); - taskItem.CreatorID = new LLUUID((String)row["creatorID"]); - taskItem.OwnerID = new LLUUID((String)row["ownerID"]); - taskItem.LastOwnerID = new LLUUID((String)row["lastOwnerID"]); - taskItem.GroupID = new LLUUID((String)row["groupID"]); + taskItem.CreatorID = new UUID((String)row["creatorID"]); + taskItem.OwnerID = new UUID((String)row["ownerID"]); + taskItem.LastOwnerID = new UUID((String)row["lastOwnerID"]); + taskItem.GroupID = new UUID((String)row["groupID"]); taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]); taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]); @@ -1259,7 +1259,7 @@ namespace OpenSim.Data.MySQL { RegionSettings newSettings = new RegionSettings(); - newSettings.RegionUUID = new LLUUID((string) row["regionUUID"]); + newSettings.RegionUUID = new UUID((string) row["regionUUID"]); newSettings.BlockTerraform = Convert.ToBoolean(row["block_terraform"]); newSettings.AllowDamage = Convert.ToBoolean(row["allow_damage"]); newSettings.BlockFly = Convert.ToBoolean(row["block_fly"]); @@ -1273,10 +1273,10 @@ namespace OpenSim.Data.MySQL newSettings.DisableScripts = Convert.ToBoolean(row["disable_scripts"]); newSettings.DisableCollisions = Convert.ToBoolean(row["disable_collisions"]); newSettings.DisablePhysics = Convert.ToBoolean(row["disable_physics"]); - newSettings.TerrainTexture1 = new LLUUID((String) row["terrain_texture_1"]); - newSettings.TerrainTexture2 = new LLUUID((String) row["terrain_texture_2"]); - newSettings.TerrainTexture3 = new LLUUID((String) row["terrain_texture_3"]); - newSettings.TerrainTexture4 = new LLUUID((String) row["terrain_texture_4"]); + newSettings.TerrainTexture1 = new UUID((String) row["terrain_texture_1"]); + newSettings.TerrainTexture2 = new UUID((String) row["terrain_texture_2"]); + newSettings.TerrainTexture3 = new UUID((String) row["terrain_texture_3"]); + newSettings.TerrainTexture4 = new UUID((String) row["terrain_texture_4"]); newSettings.Elevation1NW = Convert.ToDouble(row["elevation_1_nw"]); newSettings.Elevation2NW = Convert.ToDouble(row["elevation_2_nw"]); newSettings.Elevation1NE = Convert.ToDouble(row["elevation_1_ne"]); @@ -1292,7 +1292,7 @@ namespace OpenSim.Data.MySQL newSettings.Sandbox = Convert.ToBoolean(row["sandbox"]); newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]); newSettings.SunPosition = Convert.ToDouble(row["sun_position"]); - newSettings.Covenant = new LLUUID((String) row["covenant"]); + newSettings.Covenant = new UUID((String) row["covenant"]); return newSettings; } @@ -1306,7 +1306,7 @@ namespace OpenSim.Data.MySQL { LandData newData = new LandData(); - newData.GlobalID = new LLUUID((String) row["UUID"]); + newData.GlobalID = new UUID((String) row["UUID"]); newData.LocalID = Convert.ToInt32(row["LocalLandID"]); // Bitmap is a byte[512] @@ -1322,39 +1322,39 @@ namespace OpenSim.Data.MySQL //Enum libsecondlife.Parcel.ParcelCategory newData.ClaimDate = Convert.ToInt32(row["ClaimDate"]); newData.ClaimPrice = Convert.ToInt32(row["ClaimPrice"]); - newData.GroupID = new LLUUID((String) row["GroupUUID"]); + newData.GroupID = new UUID((String) row["GroupUUID"]); newData.SalePrice = Convert.ToInt32(row["SalePrice"]); newData.Status = (Parcel.ParcelStatus) Convert.ToInt32(row["LandStatus"]); //Enum. libsecondlife.Parcel.ParcelStatus newData.Flags = Convert.ToUInt32(row["LandFlags"]); newData.LandingType = Convert.ToByte(row["LandingType"]); newData.MediaAutoScale = Convert.ToByte(row["MediaAutoScale"]); - newData.MediaID = new LLUUID((String) row["MediaTextureUUID"]); + newData.MediaID = new UUID((String) row["MediaTextureUUID"]); newData.MediaURL = (String) row["MediaURL"]; newData.MusicURL = (String) row["MusicURL"]; newData.PassHours = Convert.ToSingle(row["PassHours"]); newData.PassPrice = Convert.ToInt32(row["PassPrice"]); - LLUUID authedbuyer = LLUUID.Zero; - LLUUID snapshotID = LLUUID.Zero; + UUID authedbuyer = UUID.Zero; + UUID snapshotID = UUID.Zero; - Helpers.TryParse((string)row["AuthBuyerID"], out authedbuyer); - Helpers.TryParse((string)row["SnapshotUUID"], out snapshotID); + UUID.TryParse((string)row["AuthBuyerID"], out authedbuyer); + UUID.TryParse((string)row["SnapshotUUID"], out snapshotID); newData.AuthBuyerID = authedbuyer; newData.SnapshotID = snapshotID; try { newData.UserLocation = - new LLVector3(Convert.ToSingle(row["UserLocationX"]), Convert.ToSingle(row["UserLocationY"]), + new Vector3(Convert.ToSingle(row["UserLocationX"]), Convert.ToSingle(row["UserLocationY"]), Convert.ToSingle(row["UserLocationZ"])); newData.UserLookAt = - new LLVector3(Convert.ToSingle(row["UserLookAtX"]), Convert.ToSingle(row["UserLookAtY"]), + new Vector3(Convert.ToSingle(row["UserLookAtX"]), Convert.ToSingle(row["UserLookAtY"]), Convert.ToSingle(row["UserLookAtZ"])); } catch (InvalidCastException) { - newData.UserLocation = LLVector3.Zero; - newData.UserLookAt = LLVector3.Zero; + newData.UserLocation = Vector3.Zero; + newData.UserLookAt = Vector3.Zero; m_log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name); } @@ -1371,7 +1371,7 @@ namespace OpenSim.Data.MySQL private static ParcelManager.ParcelAccessEntry buildLandAccessData(DataRow row) { ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); - entry.AgentID = new LLUUID((string) row["AccessUUID"]); + entry.AgentID = new UUID((string) row["AccessUUID"]); entry.Flags = (ParcelManager.AccessList) Convert.ToInt32(row["Flags"]); entry.Time = new DateTime(); return entry; @@ -1408,7 +1408,7 @@ namespace OpenSim.Data.MySQL /// /// /// - private void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) + private void fillPrimRow(DataRow row, SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID) { row["UUID"] = Util.ToRawUuidString(prim.UUID); row["RegionUUID"] = Util.ToRawUuidString(regionUUID); @@ -1456,12 +1456,12 @@ namespace OpenSim.Data.MySQL row["RotationW"] = prim.RotationOffset.W; // Sit target - LLVector3 sitTargetPos = prim.SitTargetPositionLL; + Vector3 sitTargetPos = prim.SitTargetPositionLL; row["SitTargetOffsetX"] = sitTargetPos.X; row["SitTargetOffsetY"] = sitTargetPos.Y; row["SitTargetOffsetZ"] = sitTargetPos.Z; - LLQuaternion sitTargetOrient = prim.SitTargetOrientationLL; + Quaternion sitTargetOrient = prim.SitTargetOrientationLL; row["SitTargetOrientW"] = sitTargetOrient.W; row["SitTargetOrientX"] = sitTargetOrient.X; row["SitTargetOrientY"] = sitTargetOrient.Y; @@ -1480,7 +1480,7 @@ namespace OpenSim.Data.MySQL } else { - row["LoopedSound"] = LLUUID.Zero; + row["LoopedSound"] = UUID.Zero; row["LoopedSoundGain"] = 0.0f; } @@ -1597,7 +1597,7 @@ namespace OpenSim.Data.MySQL /// /// /// - private static void fillLandRow(DataRow row, LandData land, LLUUID regionUUID) + private static void fillLandRow(DataRow row, LandData land, UUID regionUUID) { row["UUID"] = Util.ToRawUuidString(land.GlobalID); row["RegionUUID"] = Util.ToRawUuidString(regionUUID); @@ -1642,7 +1642,7 @@ namespace OpenSim.Data.MySQL /// /// /// - private static void fillLandAccessRow(DataRow row, ParcelManager.ParcelAccessEntry entry, LLUUID parcelID) + private static void fillLandAccessRow(DataRow row, ParcelManager.ParcelAccessEntry entry, UUID parcelID) { row["LandUUID"] = Util.ToRawUuidString(parcelID); row["AccessUUID"] = Util.ToRawUuidString(entry.AgentID); @@ -1657,7 +1657,7 @@ namespace OpenSim.Data.MySQL private PrimitiveBaseShape buildShape(DataRow row) { PrimitiveBaseShape s = new PrimitiveBaseShape(); - s.Scale = new LLVector3( + s.Scale = new Vector3( Convert.ToSingle(row["ScaleX"]), Convert.ToSingle(row["ScaleY"]), Convert.ToSingle(row["ScaleZ"]) @@ -1778,7 +1778,7 @@ namespace OpenSim.Data.MySQL /// /// /// - private void addPrim(SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) + private void addPrim(SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID) { lock (m_dataSet) { @@ -1816,7 +1816,7 @@ namespace OpenSim.Data.MySQL /// /// /// - public void StorePrimInventory(LLUUID primID, ICollection items) + public void StorePrimInventory(UUID primID, ICollection items) { m_log.InfoFormat("[REGION DB]: Persisting Prim Inventory with prim ID {0}", primID); diff --git a/OpenSim/Data/MySQL/MySQLUserData.cs b/OpenSim/Data/MySQL/MySQLUserData.cs index 8d0b177157..42983b148e 100644 --- a/OpenSim/Data/MySQL/MySQLUserData.cs +++ b/OpenSim/Data/MySQL/MySQLUserData.cs @@ -31,7 +31,7 @@ using System.Collections.Generic; using System.Data; using System.Reflection; using System.Text.RegularExpressions; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using MySql.Data.MySqlClient; @@ -221,15 +221,15 @@ namespace OpenSim.Data.MySQL #region User Friends List Data - public override void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + public override void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) { MySQLSuperManager dbm = GetLockedConnection(); int dtvalue = Util.UnixTimeSinceEpoch(); Dictionary param = new Dictionary(); - param["?ownerID"] = friendlistowner.UUID.ToString(); - param["?friendID"] = friend.UUID.ToString(); + param["?ownerID"] = friendlistowner.ToString(); + param["?friendID"] = friend.ToString(); param["?friendPerms"] = perms.ToString(); param["?datetimestamp"] = dtvalue.ToString(); @@ -265,13 +265,13 @@ namespace OpenSim.Data.MySQL } } - public override void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + public override void RemoveUserFriend(UUID friendlistowner, UUID friend) { MySQLSuperManager dbm = GetLockedConnection(); Dictionary param = new Dictionary(); - param["?ownerID"] = friendlistowner.UUID.ToString(); - param["?friendID"] = friend.UUID.ToString(); + param["?ownerID"] = friendlistowner.ToString(); + param["?friendID"] = friend.ToString(); try { @@ -299,13 +299,13 @@ namespace OpenSim.Data.MySQL } } - public override void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + public override void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) { MySQLSuperManager dbm = GetLockedConnection(); Dictionary param = new Dictionary(); - param["?ownerID"] = friendlistowner.UUID.ToString(); - param["?friendID"] = friend.UUID.ToString(); + param["?ownerID"] = friendlistowner.ToString(); + param["?friendID"] = friend.ToString(); param["?friendPerms"] = perms.ToString(); try @@ -330,13 +330,13 @@ namespace OpenSim.Data.MySQL } } - public override List GetUserFriendList(LLUUID friendlistowner) + public override List GetUserFriendList(UUID friendlistowner) { MySQLSuperManager dbm = GetLockedConnection(); List Lfli = new List(); Dictionary param = new Dictionary(); - param["?ownerID"] = friendlistowner.UUID.ToString(); + param["?ownerID"] = friendlistowner.ToString(); try { @@ -352,8 +352,8 @@ namespace OpenSim.Data.MySQL while (reader.Read()) { FriendListItem fli = new FriendListItem(); - fli.FriendListOwner = new LLUUID((string) reader["ownerID"]); - fli.Friend = new LLUUID((string) reader["friendID"]); + fli.FriendListOwner = new UUID((string) reader["ownerID"]); + fli.Friend = new UUID((string) reader["friendID"]); fli.FriendPerms = (uint) Convert.ToInt32(reader["friendPerms"]); // This is not a real column in the database table, it's a joined column from the opposite record @@ -381,12 +381,12 @@ namespace OpenSim.Data.MySQL #endregion - public override void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle) + public override void UpdateUserCurrentRegion(UUID avatarid, UUID regionuuid, ulong regionhandle) { //m_log.Info("[USER DB]: Stub UpdateUserCUrrentRegion called"); } - public override List GeneratePickerResults(LLUUID queryID, string query) + public override List GeneratePickerResults(UUID queryID, string query) { MySQLSuperManager dbm = GetLockedConnection(); @@ -413,7 +413,7 @@ namespace OpenSim.Data.MySQL while (reader.Read()) { AvatarPickerAvatar user = new AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string) reader["UUID"]); + user.AvatarID = new UUID((string) reader["UUID"]); user.firstName = (string) reader["username"]; user.lastName = (string) reader["lastname"]; returnlist.Add(user); @@ -449,7 +449,7 @@ namespace OpenSim.Data.MySQL while (reader.Read()) { AvatarPickerAvatar user = new AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string) reader["UUID"]); + user.AvatarID = new UUID((string) reader["UUID"]); user.firstName = (string) reader["username"]; user.lastName = (string) reader["lastname"]; returnlist.Add(user); @@ -476,7 +476,7 @@ namespace OpenSim.Data.MySQL /// /// User UUID /// User profile data - public override UserProfileData GetUserByUUID(LLUUID uuid) + public override UserProfileData GetUserByUUID(UUID uuid) { MySQLSuperManager dbm = GetLockedConnection(); try @@ -533,13 +533,13 @@ namespace OpenSim.Data.MySQL /// /// /// is it still used ? - public override void StoreWebLoginKey(LLUUID AgentID, LLUUID WebLoginKey) + public override void StoreWebLoginKey(UUID AgentID, UUID WebLoginKey) { MySQLSuperManager dbm = GetLockedConnection(); Dictionary param = new Dictionary(); - param["?UUID"] = AgentID.UUID.ToString(); - param["?webLoginKey"] = WebLoginKey.UUID.ToString(); + param["?UUID"] = AgentID.ToString(); + param["?webLoginKey"] = WebLoginKey.ToString(); try { @@ -565,7 +565,7 @@ namespace OpenSim.Data.MySQL /// /// The accounts UUID /// The users session - public override UserAgentData GetAgentByUUID(LLUUID uuid) + public override UserAgentData GetAgentByUUID(UUID uuid) { MySQLSuperManager dbm = GetLockedConnection(); @@ -682,7 +682,7 @@ namespace OpenSim.Data.MySQL /// The receivers account ID /// The amount to transfer /// Success? - public override bool MoneyTransferRequest(LLUUID from, LLUUID to, uint amount) + public override bool MoneyTransferRequest(UUID from, UUID to, uint amount) { return false; } @@ -695,7 +695,7 @@ namespace OpenSim.Data.MySQL /// The receivers account ID /// The item to transfer /// Success? - public override bool InventoryTransferRequest(LLUUID from, LLUUID to, LLUUID item) + public override bool InventoryTransferRequest(UUID from, UUID to, UUID item) { return false; } @@ -705,7 +705,7 @@ namespace OpenSim.Data.MySQL /// TODO: stubs for now to get us to a compiling state gently /// override /// - public override AvatarAppearance GetUserAppearance(LLUUID user) + public override AvatarAppearance GetUserAppearance(UUID user) { MySQLSuperManager dbm = GetLockedConnection(); try @@ -744,7 +744,7 @@ namespace OpenSim.Data.MySQL /// The user UUID /// The avatar appearance // override - public override void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) + public override void UpdateUserAppearance(UUID user, AvatarAppearance appearance) { MySQLSuperManager dbm = GetLockedConnection(); try @@ -783,7 +783,7 @@ namespace OpenSim.Data.MySQL get { return "0.1"; } } - public Hashtable GetUserAttachments(LLUUID agentID) + public Hashtable GetUserAttachments(UUID agentID) { MySQLSuperManager dbm = GetLockedConnection(); @@ -814,7 +814,7 @@ namespace OpenSim.Data.MySQL } } - public void UpdateUserAttachments(LLUUID agentID, Hashtable data) + public void UpdateUserAttachments(UUID agentID, Hashtable data) { MySQLSuperManager dbm = GetLockedConnection(); try @@ -827,7 +827,7 @@ namespace OpenSim.Data.MySQL } } - public override void ResetAttachments(LLUUID userID) + public override void ResetAttachments(UUID userID) { MySQLSuperManager dbm = GetLockedConnection(); @@ -847,4 +847,4 @@ namespace OpenSim.Data.MySQL } } } -} \ No newline at end of file +} diff --git a/OpenSim/Data/NHibernate/LLQuaternionUserType.cs b/OpenSim/Data/NHibernate/LLQuaternionUserType.cs index 80fb9ff646..7431433135 100644 --- a/OpenSim/Data/NHibernate/LLQuaternionUserType.cs +++ b/OpenSim/Data/NHibernate/LLQuaternionUserType.cs @@ -27,7 +27,7 @@ using System; using System.Data; -using libsecondlife; +using OpenMetaverse; using NHibernate; using NHibernate.SqlTypes; using NHibernate.UserTypes; @@ -35,7 +35,7 @@ using NHibernate.UserTypes; namespace OpenSim.Data.NHibernate { [Serializable] - public class LLQuaternionUserType: IUserType + public class QuaternionUserType: IUserType { public object Assemble(object cached, object owner) { @@ -49,9 +49,8 @@ namespace OpenSim.Data.NHibernate public object DeepCopy(object quat) { - // silly libsecondlife having no copy constructor - LLQuaternion q = (LLQuaternion) quat; - return new LLQuaternion(q.X, q.Y, q.Z, q.W); + Quaternion q = (Quaternion)quat; + return new Quaternion(q); } public object Disassemble(object quat) @@ -79,14 +78,14 @@ namespace OpenSim.Data.NHibernate int w = rs.GetOrdinal(names[3]); if (!rs.IsDBNull(x)) { - quat = new LLQuaternion((Single)rs[x], (Single)rs[y], (Single)rs[z], (Single)rs[w]); + quat = new Quaternion((Single)rs[x], (Single)rs[y], (Single)rs[z], (Single)rs[w]); } return quat; } public void NullSafeSet(IDbCommand cmd, object obj, int index) { - LLQuaternion quat = (LLQuaternion)obj; + Quaternion quat = (Quaternion)obj; ((IDataParameter)cmd.Parameters[index]).Value = quat.X; ((IDataParameter)cmd.Parameters[index + 1]).Value = quat.Y; ((IDataParameter)cmd.Parameters[index + 2]).Value = quat.Z; @@ -100,7 +99,7 @@ namespace OpenSim.Data.NHibernate public Type ReturnedType { - get { return typeof(LLQuaternion); } + get { return typeof(Quaternion); } } public SqlType[] SqlTypes diff --git a/OpenSim/Data/NHibernate/LLUUIDUserType.cs b/OpenSim/Data/NHibernate/LLUUIDUserType.cs index 0f103444ef..a7781a316d 100644 --- a/OpenSim/Data/NHibernate/LLUUIDUserType.cs +++ b/OpenSim/Data/NHibernate/LLUUIDUserType.cs @@ -27,7 +27,7 @@ using System; using System.Data; -using libsecondlife; +using OpenMetaverse; using NHibernate; using NHibernate.SqlTypes; using NHibernate.UserTypes; @@ -35,7 +35,7 @@ using NHibernate.UserTypes; namespace OpenSim.Data.NHibernate { [Serializable] - public class LLUUIDUserType: IUserType + public class UUIDUserType: IUserType { public object Assemble(object cached, object owner) { @@ -75,7 +75,7 @@ namespace OpenSim.Data.NHibernate if (!rs.IsDBNull(ord)) { string first = (string)rs.GetString(ord); - uuid = new LLUUID(first); + uuid = new UUID(first); } return uuid; @@ -83,7 +83,7 @@ namespace OpenSim.Data.NHibernate public void NullSafeSet(IDbCommand cmd, object obj, int index) { - LLUUID uuid = (LLUUID)obj; + UUID uuid = (UUID)obj; ((IDataParameter)cmd.Parameters[index]).Value = uuid.ToString(); } @@ -94,7 +94,7 @@ namespace OpenSim.Data.NHibernate public Type ReturnedType { - get { return typeof(LLUUID); } + get { return typeof(UUID); } } public SqlType[] SqlTypes diff --git a/OpenSim/Data/NHibernate/LLVector3UserType.cs b/OpenSim/Data/NHibernate/LLVector3UserType.cs index d2df2c42c0..cdd15eca37 100644 --- a/OpenSim/Data/NHibernate/LLVector3UserType.cs +++ b/OpenSim/Data/NHibernate/LLVector3UserType.cs @@ -27,7 +27,7 @@ using System; using System.Data; -using libsecondlife; +using OpenMetaverse; using NHibernate; using NHibernate.SqlTypes; using NHibernate.UserTypes; @@ -35,7 +35,7 @@ using NHibernate.UserTypes; namespace OpenSim.Data.NHibernate { [Serializable] - public class LLVector3UserType: IUserType + public class Vector3UserType: IUserType { public object Assemble(object cached, object owner) { @@ -49,7 +49,7 @@ namespace OpenSim.Data.NHibernate public object DeepCopy(object vector) { - return new LLVector3((LLVector3) vector); + return new Vector3((Vector3) vector); } public object Disassemble(object vector) @@ -76,14 +76,14 @@ namespace OpenSim.Data.NHibernate int z = rs.GetOrdinal(names[2]); if (!rs.IsDBNull(x)) { - vector = new LLVector3((Single)rs[x], (Single)rs[y], (Single)rs[z]); + vector = new Vector3((Single)rs[x], (Single)rs[y], (Single)rs[z]); } return vector; } public void NullSafeSet(IDbCommand cmd, object obj, int index) { - LLVector3 vector = (LLVector3)obj; + Vector3 vector = (Vector3)obj; ((IDataParameter)cmd.Parameters[index]).Value = vector.X; ((IDataParameter)cmd.Parameters[index + 1]).Value = vector.Y; ((IDataParameter)cmd.Parameters[index + 2]).Value = vector.Z; @@ -96,7 +96,7 @@ namespace OpenSim.Data.NHibernate public Type ReturnedType { - get { return typeof(LLVector3); } + get { return typeof(Vector3); } } public SqlType[] SqlTypes diff --git a/OpenSim/Data/NHibernate/NHibernateAssetData.cs b/OpenSim/Data/NHibernate/NHibernateAssetData.cs index 400451fda4..6ee527e1a9 100644 --- a/OpenSim/Data/NHibernate/NHibernateAssetData.cs +++ b/OpenSim/Data/NHibernate/NHibernateAssetData.cs @@ -30,7 +30,7 @@ using System.Collections; using System.IO; using System.Reflection; using System.Text.RegularExpressions; -using libsecondlife; +using OpenMetaverse; using log4net; using NHibernate; using NHibernate.Cfg; @@ -101,7 +101,7 @@ namespace OpenSim.Data.NHibernate } - override public AssetBase FetchAsset(LLUUID uuid) + override public AssetBase FetchAsset(UUID uuid) { try { @@ -163,13 +163,13 @@ namespace OpenSim.Data.NHibernate // asset.InvType, temporary, local, assetLength)); // } - override public bool ExistsAsset(LLUUID uuid) + override public bool ExistsAsset(UUID uuid) { m_log.InfoFormat("[NHIBERNATE] ExistsAsset: {0}", uuid); return (FetchAsset(uuid) != null); } - public void DeleteAsset(LLUUID uuid) + public void DeleteAsset(UUID uuid) { } diff --git a/OpenSim/Data/NHibernate/NHibernateInventoryData.cs b/OpenSim/Data/NHibernate/NHibernateInventoryData.cs index 657a7b2855..20dad1aae4 100644 --- a/OpenSim/Data/NHibernate/NHibernateInventoryData.cs +++ b/OpenSim/Data/NHibernate/NHibernateInventoryData.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text.RegularExpressions; -using libsecondlife; +using OpenMetaverse; using log4net; using NHibernate; using NHibernate.Cfg; @@ -105,7 +105,7 @@ namespace OpenSim.Data.NHibernate /// /// The UUID of the item to be returned /// A class containing item information - public InventoryItemBase getInventoryItem(LLUUID item) + public InventoryItemBase getInventoryItem(UUID item) { try { @@ -163,7 +163,7 @@ namespace OpenSim.Data.NHibernate /// /// /// - public void deleteInventoryItem(LLUUID itemID) + public void deleteInventoryItem(UUID itemID) { using (ITransaction transaction = session.BeginTransaction()) { @@ -177,7 +177,7 @@ namespace OpenSim.Data.NHibernate /// /// The UUID of the folder to be returned /// A class containing folder information - public InventoryFolderBase getInventoryFolder(LLUUID folder) + public InventoryFolderBase getInventoryFolder(UUID folder) { try { @@ -235,7 +235,7 @@ namespace OpenSim.Data.NHibernate /// /// /// - public void deleteInventoryFolder(LLUUID folderID) + public void deleteInventoryFolder(UUID folderID) { using (ITransaction transaction = session.BeginTransaction()) { @@ -245,12 +245,12 @@ namespace OpenSim.Data.NHibernate } // useful private methods - private bool ExistsItem(LLUUID uuid) + private bool ExistsItem(UUID uuid) { return (getInventoryItem(uuid) != null) ? true : false; } - private bool ExistsFolder(LLUUID uuid) + private bool ExistsFolder(UUID uuid) { return (getInventoryFolder(uuid) != null) ? true : false; } @@ -314,7 +314,7 @@ namespace OpenSim.Data.NHibernate /// /// The UUID of the target folder /// A List of InventoryItemBase items - public List getInventoryInFolder(LLUUID folderID) + public List getInventoryInFolder(UUID folderID) { // try { ICriteria criteria = session.CreateCriteria(typeof(InventoryItemBase)); @@ -332,16 +332,16 @@ namespace OpenSim.Data.NHibernate // } } - public List getUserRootFolders(LLUUID user) + public List getUserRootFolders(UUID user) { return new List(); } // see InventoryItemBase.getUserRootFolder - public InventoryFolderBase getUserRootFolder(LLUUID user) + public InventoryFolderBase getUserRootFolder(UUID user) { ICriteria criteria = session.CreateCriteria(typeof(InventoryFolderBase)); - criteria.Add(Expression.Eq("ParentID", LLUUID.Zero)); + criteria.Add(Expression.Eq("ParentID", UUID.Zero)); criteria.Add(Expression.Eq("Owner", user)); foreach (InventoryFolderBase folder in criteria.List()) { @@ -356,7 +356,7 @@ namespace OpenSim.Data.NHibernate /// /// list where folders will be appended /// ID of parent - private void getInventoryFolders(ref List folders, LLUUID parentID) + private void getInventoryFolders(ref List folders, UUID parentID) { ICriteria criteria = session.CreateCriteria(typeof(InventoryFolderBase)); criteria.Add(Expression.Eq("ParentID", parentID)); @@ -371,7 +371,7 @@ namespace OpenSim.Data.NHibernate /// /// The folder to get subfolders for /// A list of inventory folders - public List getInventoryFolders(LLUUID parentID) + public List getInventoryFolders(UUID parentID) { List folders = new List(); getInventoryFolders(ref folders, parentID); @@ -379,7 +379,7 @@ namespace OpenSim.Data.NHibernate } // See IInventoryDataPlugin - public List getFolderHierarchy(LLUUID parentID) + public List getFolderHierarchy(UUID parentID) { List folders = new List(); getInventoryFolders(ref folders, parentID); diff --git a/OpenSim/Data/NHibernate/NHibernateRegionData.cs b/OpenSim/Data/NHibernate/NHibernateRegionData.cs index 9682d871d0..07bf05ce4a 100644 --- a/OpenSim/Data/NHibernate/NHibernateRegionData.cs +++ b/OpenSim/Data/NHibernate/NHibernateRegionData.cs @@ -31,7 +31,7 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text.RegularExpressions; -using libsecondlife; +using OpenMetaverse; using log4net; using NHibernate; using NHibernate.Cfg; @@ -109,7 +109,7 @@ namespace OpenSim.Data.NHibernate { } - public RegionSettings LoadRegionSettings(LLUUID regionUUID) + public RegionSettings LoadRegionSettings(UUID regionUUID) { return null; } @@ -162,7 +162,7 @@ namespace OpenSim.Data.NHibernate /// /// the object /// the region UUID - public void StoreObject(SceneObjectGroup obj, LLUUID regionUUID) + public void StoreObject(SceneObjectGroup obj, UUID regionUUID) { try { @@ -179,7 +179,7 @@ namespace OpenSim.Data.NHibernate } } - private SceneObjectGroup LoadObject(LLUUID uuid, LLUUID region) + private SceneObjectGroup LoadObject(UUID uuid, UUID region) { SceneObjectGroup group = new SceneObjectGroup(); @@ -210,7 +210,7 @@ namespace OpenSim.Data.NHibernate /// /// the object /// the region UUID - public void RemoveObject(LLUUID obj, LLUUID regionUUID) + public void RemoveObject(UUID obj, UUID regionUUID) { SceneObjectGroup g = LoadObject(obj, regionUUID); foreach (SceneObjectPart p in g.Children.Values) @@ -219,7 +219,7 @@ namespace OpenSim.Data.NHibernate } session.Flush(); - m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID); + m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID); } @@ -228,9 +228,9 @@ namespace OpenSim.Data.NHibernate /// /// The region UUID /// List of loaded groups - public List LoadObjects(LLUUID regionUUID) + public List LoadObjects(UUID regionUUID) { - Dictionary SOG = new Dictionary(); + Dictionary SOG = new Dictionary(); List ret = new List(); ICriteria criteria = session.CreateCriteria(typeof(SceneObjectPart)); @@ -276,7 +276,7 @@ namespace OpenSim.Data.NHibernate /// /// terrain heightfield /// region UUID - public void StoreTerrain(double[,] ter, LLUUID regionID) + public void StoreTerrain(double[,] ter, UUID regionID) { lock (this) { Terrain t = new Terrain(regionID, ter); @@ -289,7 +289,7 @@ namespace OpenSim.Data.NHibernate /// /// the region UUID /// Heightfield data - public double[,] LoadTerrain(LLUUID regionID) + public double[,] LoadTerrain(UUID regionID) { try { @@ -307,7 +307,7 @@ namespace OpenSim.Data.NHibernate /// /// /// - public void RemoveLandObject(LLUUID globalID) + public void RemoveLandObject(UUID globalID) { } @@ -326,7 +326,7 @@ namespace OpenSim.Data.NHibernate /// /// /// - public List LoadLandObjects(LLUUID regionUUID) + public List LoadLandObjects(UUID regionUUID) { List landDataForRegion = new List(); @@ -347,7 +347,7 @@ namespace OpenSim.Data.NHibernate /// /// the region UUID /// The banlist - public List LoadRegionBanList(LLUUID regionUUID) + public List LoadRegionBanList(UUID regionUUID) { List regionbanlist = new List(); @@ -395,7 +395,7 @@ namespace OpenSim.Data.NHibernate /// /// /// - public void StorePrimInventory(LLUUID primID, ICollection items) + public void StorePrimInventory(UUID primID, ICollection items) { ICriteria criteria = session.CreateCriteria(typeof(TaskInventoryItem)); criteria.Add(Expression.Eq("ParentPartID", primID)); diff --git a/OpenSim/Data/NHibernate/NHibernateUserData.cs b/OpenSim/Data/NHibernate/NHibernateUserData.cs index 8435762678..459b8e704e 100644 --- a/OpenSim/Data/NHibernate/NHibernateUserData.cs +++ b/OpenSim/Data/NHibernate/NHibernateUserData.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text.RegularExpressions; -using libsecondlife; +using OpenMetaverse; using log4net; using NHibernate; using NHibernate.Cfg; @@ -90,7 +90,7 @@ namespace OpenSim.Data.NHibernate m.Update(); } - private bool ExistsUser(LLUUID uuid) + private bool ExistsUser(UUID uuid) { UserProfileData user = null; try @@ -105,7 +105,7 @@ namespace OpenSim.Data.NHibernate return (user != null); } - override public UserProfileData GetUserByUUID(LLUUID uuid) + override public UserProfileData GetUserByUUID(UUID uuid) { UserProfileData user; // TODO: I'm sure I'll have to do something silly here @@ -136,7 +136,7 @@ namespace OpenSim.Data.NHibernate } } - private void SetAgentData(LLUUID uuid, UserAgentData agent) + private void SetAgentData(UUID uuid, UserAgentData agent) { if (agent == null) { @@ -190,7 +190,7 @@ namespace OpenSim.Data.NHibernate session.Update(agent); } - override public UserAgentData GetAgentByUUID(LLUUID uuid) + override public UserAgentData GetAgentByUUID(UUID uuid) { try { @@ -225,7 +225,7 @@ namespace OpenSim.Data.NHibernate return GetAgentByName(name.Split(' ')[0], name.Split(' ')[1]); } - override public List GeneratePickerResults(LLUUID queryID, string query) + override public List GeneratePickerResults(UUID queryID, string query) { List results = new List(); string[] querysplit; @@ -249,18 +249,18 @@ namespace OpenSim.Data.NHibernate } // TODO: actually implement these - public override void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle) { return; } - public override void StoreWebLoginKey(LLUUID agentID, LLUUID webLoginKey) { return; } - public override void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) { return; } - public override void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) { return; } - public override void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) { return; } - public override List GetUserFriendList(LLUUID friendlistowner) { return new List(); } - public override bool MoneyTransferRequest(LLUUID from, LLUUID to, uint amount) { return true; } - public override bool InventoryTransferRequest(LLUUID from, LLUUID to, LLUUID inventory) { return true; } + public override void UpdateUserCurrentRegion(UUID avatarid, UUID regionuuid, ulong regionhandle) { return; } + public override void StoreWebLoginKey(UUID agentID, UUID webLoginKey) { return; } + public override void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) { return; } + public override void RemoveUserFriend(UUID friendlistowner, UUID friend) { return; } + public override void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) { return; } + public override List GetUserFriendList(UUID friendlistowner) { return new List(); } + public override bool MoneyTransferRequest(UUID from, UUID to, uint amount) { return true; } + public override bool InventoryTransferRequest(UUID from, UUID to, UUID inventory) { return true; } /// Appearance /// TODO: stubs for now to get us to a compiling state gently - public override AvatarAppearance GetUserAppearance(LLUUID user) + public override AvatarAppearance GetUserAppearance(UUID user) { AvatarAppearance appearance; // TODO: I'm sure I'll have to do something silly here @@ -272,7 +272,7 @@ namespace OpenSim.Data.NHibernate return appearance; } - private bool ExistsAppearance(LLUUID uuid) + private bool ExistsAppearance(UUID uuid) { AvatarAppearance appearance; try { @@ -285,7 +285,7 @@ namespace OpenSim.Data.NHibernate } - public override void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) + public override void UpdateUserAppearance(UUID user, AvatarAppearance appearance) { if (appearance == null) return; @@ -303,7 +303,7 @@ namespace OpenSim.Data.NHibernate } } - public override void ResetAttachments(LLUUID userID) + public override void ResetAttachments(UUID userID) { } diff --git a/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml b/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml index f6b648a60e..7c3d8cfefa 100644 --- a/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml @@ -1,7 +1,7 @@ - + @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/OpenSim/Data/NHibernate/Resources/InventoryFolderBase.hbm.xml b/OpenSim/Data/NHibernate/Resources/InventoryFolderBase.hbm.xml index 6d918fedb4..6afe9fa576 100644 --- a/OpenSim/Data/NHibernate/Resources/InventoryFolderBase.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/InventoryFolderBase.hbm.xml @@ -1,13 +1,13 @@ - + - - + + - \ No newline at end of file + diff --git a/OpenSim/Data/NHibernate/Resources/InventoryItemBase.hbm.xml b/OpenSim/Data/NHibernate/Resources/InventoryItemBase.hbm.xml index f1b40077c8..9a4d7cafdb 100644 --- a/OpenSim/Data/NHibernate/Resources/InventoryItemBase.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/InventoryItemBase.hbm.xml @@ -1,26 +1,26 @@ - + - - - - + + + + - + - \ No newline at end of file + diff --git a/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml b/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml index ef3ab9b4b5..fe055bbcac 100644 --- a/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml @@ -1,12 +1,12 @@ - + - - + + @@ -15,10 +15,10 @@ - - - - + + + + @@ -26,50 +26,50 @@ - + - + - + - + - + - + - + - + @@ -77,7 +77,7 @@ - + @@ -105,22 +105,22 @@ - + - + - - - - - - - + + + + + + + @@ -132,4 +132,4 @@ - \ No newline at end of file + diff --git a/OpenSim/Data/NHibernate/Resources/UserAgentData.hbm.xml b/OpenSim/Data/NHibernate/Resources/UserAgentData.hbm.xml index 718cb982ee..0beddafcb2 100644 --- a/OpenSim/Data/NHibernate/Resources/UserAgentData.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/UserAgentData.hbm.xml @@ -1,16 +1,16 @@ - + - - - - + + + + @@ -18,4 +18,4 @@ - \ No newline at end of file + diff --git a/OpenSim/Data/NHibernate/Resources/UserAppearance.hbm.xml b/OpenSim/Data/NHibernate/Resources/UserAppearance.hbm.xml index 06e9c1a9b6..b633c3404b 100644 --- a/OpenSim/Data/NHibernate/Resources/UserAppearance.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/UserAppearance.hbm.xml @@ -1,37 +1,37 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/OpenSim/Data/NHibernate/Resources/UserProfileData.hbm.xml b/OpenSim/Data/NHibernate/Resources/UserProfileData.hbm.xml index 4003628187..873930bc3a 100644 --- a/OpenSim/Data/NHibernate/Resources/UserProfileData.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/UserProfileData.hbm.xml @@ -1,14 +1,14 @@ - + - + @@ -19,12 +19,12 @@ - + - - + + - \ No newline at end of file + diff --git a/OpenSim/Data/NHibernate/Terrain.cs b/OpenSim/Data/NHibernate/Terrain.cs index 608f03e6e9..dd0da44631 100644 --- a/OpenSim/Data/NHibernate/Terrain.cs +++ b/OpenSim/Data/NHibernate/Terrain.cs @@ -30,7 +30,7 @@ using System.IO; using System.Reflection; using OpenSim.Framework; using log4net; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Data.NHibernate { @@ -39,9 +39,9 @@ namespace OpenSim.Data.NHibernate private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private double[,] map; - private LLUUID regionID; + private UUID regionID; - public Terrain(LLUUID Region, double[,] array) + public Terrain(UUID Region, double[,] array) { map = array; regionID = Region; @@ -51,10 +51,10 @@ namespace OpenSim.Data.NHibernate { map = new double[Constants.RegionSize, Constants.RegionSize]; map.Initialize(); - regionID = LLUUID.Zero; + regionID = UUID.Zero; } - public LLUUID RegionID + public UUID RegionID { get { return regionID; } set { regionID = value; } diff --git a/OpenSim/Data/NHibernate/TextureUserType.cs b/OpenSim/Data/NHibernate/TextureUserType.cs index f8aa704029..ff949d43af 100644 --- a/OpenSim/Data/NHibernate/TextureUserType.cs +++ b/OpenSim/Data/NHibernate/TextureUserType.cs @@ -27,7 +27,7 @@ using System; using System.Data; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using NHibernate; using NHibernate.SqlTypes; @@ -53,12 +53,12 @@ namespace OpenSim.Data.NHibernate if (texture == null) { // TODO: should parametrize this texture out - return new LLObject.TextureEntry(new LLUUID(Constants.DefaultTexture)); + return new Primitive.TextureEntry(new UUID(Constants.DefaultTexture)); } else { - byte[] bytes = ((LLObject.TextureEntry)texture).ToBytes(); - return new LLObject.TextureEntry(bytes, 0, bytes.Length); + byte[] bytes = ((Primitive.TextureEntry)texture).ToBytes(); + return new Primitive.TextureEntry(bytes, 0, bytes.Length); } } @@ -85,7 +85,7 @@ namespace OpenSim.Data.NHibernate if (!rs.IsDBNull(ord)) { byte[] bytes = (byte[])rs[ord]; - texture = new LLObject.TextureEntry(bytes, 0, bytes.Length); + texture = new Primitive.TextureEntry(bytes, 0, bytes.Length); } return texture; @@ -93,7 +93,7 @@ namespace OpenSim.Data.NHibernate public void NullSafeSet(IDbCommand cmd, object obj, int index) { - LLObject.TextureEntry texture = (LLObject.TextureEntry)obj; + Primitive.TextureEntry texture = (Primitive.TextureEntry)obj; ((IDataParameter)cmd.Parameters[index]).Value = texture.ToBytes(); } @@ -104,7 +104,7 @@ namespace OpenSim.Data.NHibernate public Type ReturnedType { - get { return typeof(LLObject.TextureEntry); } + get { return typeof(Primitive.TextureEntry); } } public SqlType[] SqlTypes diff --git a/OpenSim/Data/Null/NullDataStore.cs b/OpenSim/Data/Null/NullDataStore.cs index 76369bdc30..aea03d64de 100644 --- a/OpenSim/Data/Null/NullDataStore.cs +++ b/OpenSim/Data/Null/NullDataStore.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; @@ -47,39 +47,39 @@ namespace OpenSim.Data.Null { } - public RegionSettings LoadRegionSettings(LLUUID regionUUID) + public RegionSettings LoadRegionSettings(UUID regionUUID) { return null; } - public void StoreObject(SceneObjectGroup obj, LLUUID regionUUID) + public void StoreObject(SceneObjectGroup obj, UUID regionUUID) { } - public void RemoveObject(LLUUID obj, LLUUID regionUUID) + public void RemoveObject(UUID obj, UUID regionUUID) { } // see IRegionDatastore - public void StorePrimInventory(LLUUID primID, ICollection items) + public void StorePrimInventory(UUID primID, ICollection items) { } - public List LoadObjects(LLUUID regionUUID) + public List LoadObjects(UUID regionUUID) { return new List(); } - public void StoreTerrain(double[,] ter, LLUUID regionID) + public void StoreTerrain(double[,] ter, UUID regionID) { } - public double[,] LoadTerrain(LLUUID regionID) + public double[,] LoadTerrain(UUID regionID) { return null; } - public void RemoveLandObject(LLUUID globalID) + public void RemoveLandObject(UUID globalID) { } @@ -87,7 +87,7 @@ namespace OpenSim.Data.Null { } - public List LoadLandObjects(LLUUID regionUUID) + public List LoadLandObjects(UUID regionUUID) { return new List(); } diff --git a/OpenSim/Data/OpenSimDataReader.cs b/OpenSim/Data/OpenSimDataReader.cs index cb613c17e6..f584855dd4 100644 --- a/OpenSim/Data/OpenSimDataReader.cs +++ b/OpenSim/Data/OpenSimDataReader.cs @@ -26,7 +26,7 @@ */ using System.Data; -using libsecondlife; +using OpenMetaverse; using OpenSim.Data.Base; namespace OpenSim.Data @@ -37,25 +37,25 @@ namespace OpenSim.Data { } - public LLVector3 GetVector(string s) + public Vector3 GetVector(string s) { float x = GetFloat(s + "X"); float y = GetFloat(s + "Y"); float z = GetFloat(s + "Z"); - LLVector3 vector = new LLVector3(x, y, z); + Vector3 vector = new Vector3(x, y, z); return vector; } - public LLQuaternion GetQuaternion(string s) + public Quaternion GetQuaternion(string s) { float x = GetFloat(s + "X"); float y = GetFloat(s + "Y"); float z = GetFloat(s + "Z"); float w = GetFloat(s + "W"); - LLQuaternion quaternion = new LLQuaternion(x, y, z, w); + Quaternion quaternion = new Quaternion(x, y, z, w); return quaternion; } diff --git a/OpenSim/Data/OpenSimDatabaseConnector.cs b/OpenSim/Data/OpenSimDatabaseConnector.cs index ee54f4ff42..68a4ee4082 100644 --- a/OpenSim/Data/OpenSimDatabaseConnector.cs +++ b/OpenSim/Data/OpenSimDatabaseConnector.cs @@ -26,7 +26,7 @@ */ using System.Data; -using libsecondlife; +using OpenMetaverse; using OpenSim.Data.Base; namespace OpenSim.Data @@ -39,9 +39,9 @@ namespace OpenSim.Data public override object ConvertToDbType(object value) { - if (value is LLUUID) + if (value is UUID) { - return ((LLUUID) value).UUID.ToString(); + return ((UUID)value).ToString(); } return base.ConvertToDbType(value); diff --git a/OpenSim/Data/OpenSimObjectFieldMapper.cs b/OpenSim/Data/OpenSimObjectFieldMapper.cs index ff375fbed5..a3424949f8 100644 --- a/OpenSim/Data/OpenSimObjectFieldMapper.cs +++ b/OpenSim/Data/OpenSimObjectFieldMapper.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Data.Common; -using libsecondlife; +using OpenMetaverse; using OpenSim.Data.Base; namespace OpenSim.Data @@ -47,17 +47,17 @@ namespace OpenSim.Data string fieldName = FieldName; object value = GetParamValue(obj); - if (ValueType == typeof(LLVector3)) + if (ValueType == typeof(Vector3)) { - LLVector3 vector = (LLVector3)value; + Vector3 vector = (Vector3)value; RawAddParam(command, fieldNames, fieldName + "X", vector.X); RawAddParam(command, fieldNames, fieldName + "Y", vector.Y); RawAddParam(command, fieldNames, fieldName + "Z", vector.Z); } - else if (ValueType == typeof(LLQuaternion)) + else if (ValueType == typeof(Quaternion)) { - LLQuaternion quaternion = (LLQuaternion)value; + Quaternion quaternion = (Quaternion)value; RawAddParam(command, fieldNames, fieldName + "X", quaternion.X); RawAddParam(command, fieldNames, fieldName + "Y", quaternion.Y); @@ -76,18 +76,18 @@ namespace OpenSim.Data OpenSimDataReader osreader = (OpenSimDataReader) reader; - if (ValueType == typeof(LLVector3)) + if (ValueType == typeof(Vector3)) { value = osreader.GetVector(FieldName); } - else if (ValueType == typeof(LLQuaternion)) + else if (ValueType == typeof(Quaternion)) { value = osreader.GetQuaternion(FieldName); } - else if (ValueType == typeof(LLUUID)) + else if (ValueType == typeof(UUID)) { Guid guid = reader.GetGuid(FieldName); - value = new LLUUID(guid); + value = new UUID(guid); } else { diff --git a/OpenSim/Data/PrimitiveBaseShapeTableMapper.cs b/OpenSim/Data/PrimitiveBaseShapeTableMapper.cs index a4e39a1a0e..5a6b3db926 100644 --- a/OpenSim/Data/PrimitiveBaseShapeTableMapper.cs +++ b/OpenSim/Data/PrimitiveBaseShapeTableMapper.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; using OpenSim.Data.Base; using OpenSim.Framework; @@ -89,9 +89,9 @@ namespace OpenSim.Data delegate(PrimitiveBaseShapeRowMapper shape) { return shape.Object.ProfileEnd; }, delegate(PrimitiveBaseShapeRowMapper shape, ushort value) { shape.Object.ProfileEnd = value; }); - rowMapperSchema.AddMapping("Scale", + rowMapperSchema.AddMapping("Scale", delegate(PrimitiveBaseShapeRowMapper shape) { return shape.Object.Scale; }, - delegate(PrimitiveBaseShapeRowMapper shape, LLVector3 value) { shape.Object.Scale = value; }); + delegate(PrimitiveBaseShapeRowMapper shape, Vector3 value) { shape.Object.Scale = value; }); rowMapperSchema.AddMapping("PathTaperX", delegate(PrimitiveBaseShapeRowMapper shape) { return shape.Object.PathTaperX; }, @@ -143,7 +143,7 @@ namespace OpenSim.Data PrimitiveBaseShape shape = new PrimitiveBaseShape(); PrimitiveBaseShapeRowMapper mapper = new PrimitiveBaseShapeRowMapper(m_schema, shape); - mapper.FillObject(reader); + mapper.FiPrimitive(reader); return mapper; } diff --git a/OpenSim/Data/RegionProfileData.cs b/OpenSim/Data/RegionProfileData.cs index 9549b80ecc..b4c7b3cca8 100644 --- a/OpenSim/Data/RegionProfileData.cs +++ b/OpenSim/Data/RegionProfileData.cs @@ -27,9 +27,10 @@ using System; using System.Collections; -using libsecondlife; +using OpenMetaverse; using Nwc.XmlRpc; using OpenSim.Framework; +using OpenMetaverse; namespace OpenSim.Data { @@ -51,7 +52,7 @@ namespace OpenSim.Data /// /// OGS/OpenSim Specific ID for a region /// - public LLUUID UUID; + public UUID UUID; /// /// Coordinates of the region @@ -117,18 +118,18 @@ namespace OpenSim.Data /// /// Region Map Texture Asset /// - public LLUUID regionMapTextureID = new LLUUID("00000000-0000-1111-9999-000000000006"); + public UUID regionMapTextureID = new UUID("00000000-0000-1111-9999-000000000006"); /// /// this particular mod to the file provides support within the spec for RegionProfileData for the /// owner_uuid for the region /// - public LLUUID owner_uuid = LLUUID.Zero; + public UUID owner_uuid = UUID.Zero; /// /// OGS/OpenSim Specific original ID for a region after move/split /// - public LLUUID originUUID; + public UUID originUUID; /// /// Request sim data based on arbitrary key/value @@ -161,7 +162,7 @@ namespace OpenSim.Data simData.remotingPort = Convert.ToUInt32((string) responseData["remoting_port"]); simData.serverURI = (string) responseData["server_uri"]; simData.httpServerURI = "http://" + simData.serverIP + ":" + simData.httpPort.ToString() + "/"; - simData.UUID = new LLUUID((string) responseData["region_UUID"]); + simData.UUID = new UUID((string) responseData["region_UUID"]); simData.regionName = (string) responseData["region_name"]; } @@ -177,10 +178,10 @@ namespace OpenSim.Data /// /// The sim profile. Null if there was a request failure /// This method should be statics - public static RegionProfileData RequestSimProfileData(LLUUID region_uuid, Uri gridserver_url, + public static RegionProfileData RequestSimProfileData(UUID region_uuid, Uri gridserver_url, string gridserver_sendkey, string gridserver_recvkey) { - return RequestSimData(gridserver_url, gridserver_sendkey, "region_UUID", region_uuid.UUID.ToString()); + return RequestSimData(gridserver_url, gridserver_sendkey, "region_UUID", region_uuid.Guid.ToString()); } /// diff --git a/OpenSim/Data/ReservationData.cs b/OpenSim/Data/ReservationData.cs index 43fb299918..dac1b7bf33 100644 --- a/OpenSim/Data/ReservationData.cs +++ b/OpenSim/Data/ReservationData.cs @@ -26,13 +26,13 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Data { public class ReservationData { - public LLUUID userUUID = LLUUID.Zero; + public UUID userUUID = UUID.Zero; public int reservationMinX = 0; public int reservationMinY = 0; public int reservationMaxX = 65536; diff --git a/OpenSim/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs index 220cebf71f..8b14f09106 100644 --- a/OpenSim/Data/SQLite/SQLiteAssetData.cs +++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs @@ -28,7 +28,7 @@ using System; using System.Data; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Mono.Data.SqliteClient; using OpenSim.Framework; @@ -87,7 +87,7 @@ namespace OpenSim.Data.SQLite /// /// UUID of ... ? /// Asset base - override public AssetBase FetchAsset(LLUUID uuid) + override public AssetBase FetchAsset(UUID uuid) { lock (this) { @@ -190,7 +190,7 @@ namespace OpenSim.Data.SQLite /// /// The asset UUID /// True if exist, or false. - override public bool ExistsAsset(LLUUID uuid) + override public bool ExistsAsset(UUID uuid) { lock (this) { using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn)) @@ -217,7 +217,7 @@ namespace OpenSim.Data.SQLite /// Delete an asset from database /// /// - public void DeleteAsset(LLUUID uuid) + public void DeleteAsset(UUID uuid) { using (SqliteCommand cmd = new SqliteCommand(DeleteAssetSQL, m_conn)) { @@ -239,7 +239,7 @@ namespace OpenSim.Data.SQLite // back out. Not enough time to figure it out yet. AssetBase asset = new AssetBase(); - asset.FullID = new LLUUID((String) row["UUID"]); + asset.FullID = new UUID((String) row["UUID"]); asset.Name = (String) row["Name"]; asset.Description = (String) row["Description"]; asset.Type = Convert.ToSByte(row["Type"]); diff --git a/OpenSim/Data/SQLite/SQLiteEstateData.cs b/OpenSim/Data/SQLite/SQLiteEstateData.cs index ffe7644a38..1245caad37 100644 --- a/OpenSim/Data/SQLite/SQLiteEstateData.cs +++ b/OpenSim/Data/SQLite/SQLiteEstateData.cs @@ -31,7 +31,7 @@ using System.Data; using System.IO; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using Mono.Data.SqliteClient; using log4net; using OpenSim.Framework; @@ -83,7 +83,7 @@ namespace OpenSim.Data.SQLite get { return new List(m_FieldMap.Keys).ToArray(); } } - public EstateSettings LoadEstateSettings(LLUUID regionID) + public EstateSettings LoadEstateSettings(UUID regionID) { EstateSettings es = new EstateSettings(); es.OnSave += StoreEstateSettings; @@ -109,11 +109,11 @@ namespace OpenSim.Data.SQLite else m_FieldMap[name].SetValue(es, false); } - else if (m_FieldMap[name].GetValue(es) is libsecondlife.LLUUID) + else if(m_FieldMap[name].GetValue(es) is OpenMetaverse.UUID) { - LLUUID uuid = LLUUID.Zero; + UUID uuid = UUID.Zero; - LLUUID.TryParse(r[name].ToString(), out uuid); + UUID.TryParse(r[name].ToString(), out uuid); m_FieldMap[name].SetValue(es, uuid); } else @@ -258,8 +258,8 @@ namespace OpenSim.Data.SQLite { EstateBan eb = new EstateBan(); - LLUUID uuid = new LLUUID(); - LLUUID.TryParse(r["bannedUUID"].ToString(), out uuid); + UUID uuid = new UUID(); + UUID.TryParse(r["bannedUUID"].ToString(), out uuid); eb.bannedUUID = uuid; eb.bannedIP = "0.0.0.0"; @@ -292,7 +292,7 @@ namespace OpenSim.Data.SQLite } } - void SaveUUIDList(uint EstateID, string table, LLUUID[] data) + void SaveUUIDList(uint EstateID, string table, UUID[] data) { SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); @@ -305,7 +305,7 @@ namespace OpenSim.Data.SQLite cmd.CommandText = "insert into "+table+" (EstateID, uuid) values ( :EstateID, :uuid )"; - foreach (LLUUID uuid in data) + foreach (UUID uuid in data) { cmd.Parameters.Add(":EstateID", EstateID.ToString()); cmd.Parameters.Add(":uuid", uuid.ToString()); @@ -315,9 +315,9 @@ namespace OpenSim.Data.SQLite } } - LLUUID[] LoadUUIDList(uint EstateID, string table) + UUID[] LoadUUIDList(uint EstateID, string table) { - List uuids = new List(); + List uuids = new List(); SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); @@ -330,8 +330,8 @@ namespace OpenSim.Data.SQLite { // EstateBan eb = new EstateBan(); - LLUUID uuid = new LLUUID(); - LLUUID.TryParse(r["uuid"].ToString(), out uuid); + UUID uuid = new UUID(); + UUID.TryParse(r["uuid"].ToString(), out uuid); uuids.Add(uuid); } diff --git a/OpenSim/Data/SQLite/SQLiteGridData.cs b/OpenSim/Data/SQLite/SQLiteGridData.cs index 8c4574e4ee..f715c0e72f 100644 --- a/OpenSim/Data/SQLite/SQLiteGridData.cs +++ b/OpenSim/Data/SQLite/SQLiteGridData.cs @@ -31,7 +31,7 @@ using System.Data; using System.Reflection; using System.Security.Cryptography; using System.Text; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -162,7 +162,7 @@ namespace OpenSim.Data.SQLite /// /// The region UUID /// The sim profile - override public RegionProfileData GetProfileByLLUUID(LLUUID uuid) + override public RegionProfileData GetProfileByUUID(UUID uuid) { Dictionary param = new Dictionary(); param["uuid"] = uuid.ToString(); @@ -181,7 +181,7 @@ namespace OpenSim.Data.SQLite /// Returns a list of avatar and UUIDs that match the query /// /// do nothing yet - public List GeneratePickerResults(LLUUID queryID, string query) + public List GeneratePickerResults(UUID queryID, string query) { //Do nothing yet List returnlist = new List(); @@ -217,14 +217,14 @@ namespace OpenSim.Data.SQLite /// The attempted regionHandle of the challenger /// The secret /// Whether the secret and regionhandle match the database entry for UUID - override public bool AuthenticateSim(LLUUID uuid, ulong handle, string authkey) + override public bool AuthenticateSim(UUID uuid, ulong handle, string authkey) { bool throwHissyFit = false; // Should be true by 1.0 if (throwHissyFit) throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential."); - RegionProfileData data = GetProfileByLLUUID(uuid); + RegionProfileData data = GetProfileByUUID(uuid); return (handle == data.regionHandle && authkey == data.regionSecret); } @@ -238,7 +238,7 @@ namespace OpenSim.Data.SQLite /// /// /// - public bool AuthenticateSim(LLUUID uuid, ulong handle, string authhash, string challenge) + public bool AuthenticateSim(UUID uuid, ulong handle, string authhash, string challenge) { // SHA512Managed HashProvider = new SHA512Managed(); // Encoding TextProvider = new UTF8Encoding(); diff --git a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs index 4c35ac2aa0..ca7e612513 100644 --- a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs +++ b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Data; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Mono.Data.SqliteClient; using OpenSim.Framework; @@ -109,13 +109,13 @@ namespace OpenSim.Data.SQLite public InventoryItemBase buildItem(DataRow row) { InventoryItemBase item = new InventoryItemBase(); - item.ID = new LLUUID((string) row["UUID"]); - item.AssetID = new LLUUID((string) row["assetID"]); + item.ID = new UUID((string) row["UUID"]); + item.AssetID = new UUID((string) row["assetID"]); item.AssetType = Convert.ToInt32(row["assetType"]); item.InvType = Convert.ToInt32(row["invType"]); - item.Folder = new LLUUID((string) row["parentFolderID"]); - item.Owner = new LLUUID((string) row["avatarID"]); - item.Creator = new LLUUID((string) row["creatorsID"]); + item.Folder = new UUID((string) row["parentFolderID"]); + item.Owner = new UUID((string) row["avatarID"]); + item.Creator = new UUID((string) row["creatorsID"]); item.Name = (string) row["inventoryName"]; item.Description = (string) row["inventoryDescription"]; @@ -135,7 +135,7 @@ namespace OpenSim.Data.SQLite item.CreationDate = Convert.ToInt32(row["creationDate"]); if (!Convert.IsDBNull(row["groupID"])) - item.GroupID = new LLUUID((string)row["groupID"]); + item.GroupID = new UUID((string)row["groupID"]); if (!Convert.IsDBNull(row["groupOwned"])) item.GroupOwned = Convert.ToBoolean(row["groupOwned"]); @@ -317,7 +317,7 @@ namespace OpenSim.Data.SQLite /// /// The UUID of the target folder /// A List of InventoryItemBase items - public List getInventoryInFolder(LLUUID folderID) + public List getInventoryInFolder(UUID folderID) { lock (ds) { @@ -339,20 +339,20 @@ namespace OpenSim.Data.SQLite /// /// The user whos inventory is to be searched /// A list of folder objects - public List getUserRootFolders(LLUUID user) + public List getUserRootFolders(UUID user) { return new List(); } // see InventoryItemBase.getUserRootFolder - public InventoryFolderBase getUserRootFolder(LLUUID user) + public InventoryFolderBase getUserRootFolder(UUID user) { lock (ds) { List folders = new List(); DataTable inventoryFolderTable = ds.Tables["inventoryfolders"]; string selectExp = "agentID = '" + Util.ToRawUuidString(user) + "' AND parentID = '" + - Util.ToRawUuidString(LLUUID.Zero) + "'"; + Util.ToRawUuidString(UUID.Zero) + "'"; DataRow[] rows = inventoryFolderTable.Select(selectExp); foreach (DataRow row in rows) { @@ -378,7 +378,7 @@ namespace OpenSim.Data.SQLite /// /// list where folders will be appended /// ID of parent - protected void getInventoryFolders(ref List folders, LLUUID parentID) + protected void getInventoryFolders(ref List folders, UUID parentID) { lock (ds) { @@ -398,7 +398,7 @@ namespace OpenSim.Data.SQLite /// /// The folder to get subfolders for /// A list of inventory folders - public List getInventoryFolders(LLUUID parentID) + public List getInventoryFolders(UUID parentID) { List folders = new List(); getInventoryFolders(ref folders, Util.ToRawUuidString(parentID)); @@ -410,7 +410,7 @@ namespace OpenSim.Data.SQLite /// /// /// - public List getFolderHierarchy(LLUUID parentID) + public List getFolderHierarchy(UUID parentID) { /* Note: There are subtle changes between this implementation of getFolderHierarchy and the previous one * - We will only need to hit the database twice instead of n times. @@ -441,7 +441,7 @@ namespace OpenSim.Data.SQLite if (parentRow.GetLength(0) >= 1) // No result means parent folder does not exist { parentFolder = buildFolder(parentRow[0]); - LLUUID agentID = parentFolder.Owner; + UUID agentID = parentFolder.Owner; selectExp = "agentID = '" + Util.ToRawUuidString(agentID) + "'"; folderRows = inventoryFolderTable.Select(selectExp); } @@ -451,7 +451,7 @@ namespace OpenSim.Data.SQLite /* if we're querying the root folder, just return an unordered list of all folders in the user's * inventory */ - if (parentFolder.ParentID == LLUUID.Zero) + if (parentFolder.ParentID == UUID.Zero) { foreach (DataRow row in folderRows) { @@ -470,13 +470,13 @@ namespace OpenSim.Data.SQLite { // Querying a non-root folder // Build a hash table of all user's inventory folders, indexed by each folder's parent ID - Dictionary> hashtable = - new Dictionary>(folderRows.GetLength(0)); + Dictionary> hashtable = + new Dictionary>(folderRows.GetLength(0)); foreach (DataRow row in folderRows) { InventoryFolderBase curFolder = buildFolder(row); - if (curFolder.ParentID != LLUUID.Zero) // Discard root of tree - not needed + if (curFolder.ParentID != UUID.Zero) // Discard root of tree - not needed { if (hashtable.ContainsKey(curFolder.ParentID)) { @@ -514,7 +514,7 @@ namespace OpenSim.Data.SQLite /// /// The UUID of the item to be returned /// A class containing item information - public InventoryItemBase getInventoryItem(LLUUID item) + public InventoryItemBase getInventoryItem(UUID item) { lock (ds) { @@ -535,7 +535,7 @@ namespace OpenSim.Data.SQLite /// /// The UUID of the folder to be returned /// A class containing folder information - public InventoryFolderBase getInventoryFolder(LLUUID folder) + public InventoryFolderBase getInventoryFolder(UUID folder) { // TODO: Deep voodoo here. If you enable this code then // multi region breaks. No idea why, but I figured it was @@ -578,7 +578,7 @@ namespace OpenSim.Data.SQLite /// Delete an inventory item /// /// The item UUID - public void deleteInventoryItem(LLUUID itemID) + public void deleteInventoryItem(UUID itemID) { lock (ds) { @@ -599,7 +599,7 @@ namespace OpenSim.Data.SQLite /// /// id of the folder, whose item content should be deleted /// this is horribly inefficient, but I don't want to ruin the overall structure of this implementation - private void deleteItemsInFolder(LLUUID folderId) + private void deleteItemsInFolder(UUID folderId) { List items = getInventoryInFolder(Util.ToRawUuidString(folderId)); @@ -641,7 +641,7 @@ namespace OpenSim.Data.SQLite /// This will clean-up any child folders and child items as well /// /// the folder UUID - public void deleteInventoryFolder(LLUUID folderID) + public void deleteInventoryFolder(UUID folderID) { lock (ds) { @@ -791,10 +791,10 @@ namespace OpenSim.Data.SQLite private static InventoryFolderBase buildFolder(DataRow row) { InventoryFolderBase folder = new InventoryFolderBase(); - folder.ID = new LLUUID((string) row["UUID"]); + folder.ID = new UUID((string) row["UUID"]); folder.Name = (string) row["name"]; - folder.Owner = new LLUUID((string) row["agentID"]); - folder.ParentID = new LLUUID((string) row["parentID"]); + folder.Owner = new UUID((string) row["agentID"]); + folder.ParentID = new UUID((string) row["parentID"]); folder.Type = Convert.ToInt16(row["type"]); folder.Version = Convert.ToUInt16(row["version"]); return folder; diff --git a/OpenSim/Data/SQLite/SQLiteManager.cs b/OpenSim/Data/SQLite/SQLiteManager.cs index 46c40e5db6..4a7e910728 100644 --- a/OpenSim/Data/SQLite/SQLiteManager.cs +++ b/OpenSim/Data/SQLite/SQLiteManager.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Data; using System.Data.SQLite; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; namespace OpenSim.Data.SQLite @@ -118,7 +118,7 @@ namespace OpenSim.Data.SQLite // Region Main retval.regionHandle = (ulong) reader["regionHandle"]; retval.regionName = (string) reader["regionName"]; - retval.UUID = new LLUUID((string) reader["uuid"]); + retval.UUID = new UUID((string) reader["uuid"]); // Secrets retval.regionRecvKey = (string) reader["regionRecvKey"]; @@ -182,7 +182,7 @@ namespace OpenSim.Data.SQLite parameters["regionHandle"] = profile.regionHandle.ToString(); parameters["regionName"] = profile.regionName; - parameters["uuid"] = profile.UUID.ToString(); + parameters["uuid"] = profile.ToString(); parameters["regionRecvKey"] = profile.regionRecvKey; parameters["regionSendKey"] = profile.regionSendKey; parameters["regionDataURI"] = profile.regionDataURI; diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs index dd88751b61..bb441f656f 100644 --- a/OpenSim/Data/SQLite/SQLiteRegionData.cs +++ b/OpenSim/Data/SQLite/SQLiteRegionData.cs @@ -31,7 +31,7 @@ using System.Data; using System.IO; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Mono.Data.SqliteClient; using OpenSim.Framework; @@ -190,7 +190,7 @@ namespace OpenSim.Data.SQLite { } - public RegionSettings LoadRegionSettings(LLUUID regionUUID) + public RegionSettings LoadRegionSettings(UUID regionUUID) { return null; } @@ -200,15 +200,15 @@ namespace OpenSim.Data.SQLite /// /// the object /// the region UUID - public void StoreObject(SceneObjectGroup obj, LLUUID regionUUID) + public void StoreObject(SceneObjectGroup obj, UUID regionUUID) { lock (ds) { foreach (SceneObjectPart prim in obj.Children.Values) { - if ((prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == 0 - && (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Temporary) == 0 - && (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.TemporaryOnRez) == 0) + if ((prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) == 0 + && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Temporary) == 0 + && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) == 0) { //m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID); addPrim(prim, Util.ToRawUuidString(obj.UUID), Util.ToRawUuidString(regionUUID)); @@ -235,9 +235,9 @@ namespace OpenSim.Data.SQLite /// /// the object /// the region UUID - public void RemoveObject(LLUUID obj, LLUUID regionUUID) + public void RemoveObject(UUID obj, UUID regionUUID) { - m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID); + m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID); DataTable prims = ds.Tables["prims"]; DataTable shapes = ds.Tables["primshapes"]; @@ -249,7 +249,7 @@ namespace OpenSim.Data.SQLite foreach (DataRow row in primRows) { // Remove shape rows - LLUUID uuid = new LLUUID((string) row["UUID"]); + UUID uuid = new UUID((string) row["UUID"]); DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(uuid)); if (shapeRow != null) { @@ -271,7 +271,7 @@ namespace OpenSim.Data.SQLite /// The caller must acquire the necessrary synchronization locks and commit or rollback changes. /// /// The item UUID - private void RemoveItems(LLUUID uuid) + private void RemoveItems(UUID uuid) { DataTable items = ds.Tables["primitems"]; @@ -289,9 +289,9 @@ namespace OpenSim.Data.SQLite /// /// The region UUID /// List of loaded groups - public List LoadObjects(LLUUID regionUUID) + public List LoadObjects(UUID regionUUID) { - Dictionary createdObjects = new Dictionary(); + Dictionary createdObjects = new Dictionary(); List retvals = new List(); @@ -350,7 +350,7 @@ namespace OpenSim.Data.SQLite "[REGION DB]: No shape found for prim in storage, so setting default box shape"); prim.Shape = PrimitiveBaseShape.Default; } - createdObjects[new LLUUID(objID)].AddPart(prim); + createdObjects[new UUID(objID)].AddPart(prim); } LoadItems(prim); @@ -379,7 +379,7 @@ namespace OpenSim.Data.SQLite DataTable dbItems = ds.Tables["primitems"]; - String sql = String.Format("primID = '{0}'", prim.UUID.ToString()); + String sql = String.Format("primID = '{0}'", prim.ToString()); DataRow[] dbItemRows = dbItems.Select(sql); IList inventory = new List(); @@ -407,7 +407,7 @@ namespace OpenSim.Data.SQLite /// /// terrain heightfield /// region UUID - public void StoreTerrain(double[,] ter, LLUUID regionID) + public void StoreTerrain(double[,] ter, UUID regionID) { lock (ds) { @@ -451,7 +451,7 @@ namespace OpenSim.Data.SQLite /// /// the region UUID /// Heightfield data - public double[,] LoadTerrain(LLUUID regionID) + public double[,] LoadTerrain(UUID regionID) { lock (ds) { @@ -499,7 +499,7 @@ namespace OpenSim.Data.SQLite /// /// /// - public void RemoveLandObject(LLUUID globalID) + public void RemoveLandObject(UUID globalID) { lock (ds) { @@ -563,7 +563,7 @@ namespace OpenSim.Data.SQLite /// /// /// - public List LoadLandObjects(LLUUID regionUUID) + public List LoadLandObjects(UUID regionUUID) { List landDataForRegion = new List(); lock (ds) @@ -821,12 +821,12 @@ namespace OpenSim.Data.SQLite createCol(land, "IsGroupOwned", typeof (Boolean)); createCol(land, "Area", typeof (Int32)); createCol(land, "AuctionID", typeof (Int32)); //Unemplemented - createCol(land, "Category", typeof (Int32)); //Enum libsecondlife.Parcel.ParcelCategory + createCol(land, "Category", typeof (Int32)); //Enum OpenMetaverse.Parcel.ParcelCategory createCol(land, "ClaimDate", typeof (Int32)); createCol(land, "ClaimPrice", typeof (Int32)); createCol(land, "GroupUUID", typeof (string)); createCol(land, "SalePrice", typeof (Int32)); - createCol(land, "LandStatus", typeof (Int32)); //Enum. libsecondlife.Parcel.ParcelStatus + createCol(land, "LandStatus", typeof (Int32)); //Enum. OpenMetaverse.Parcel.ParcelStatus createCol(land, "LandFlags", typeof (UInt32)); createCol(land, "LandingType", typeof (Byte)); createCol(land, "MediaAutoScale", typeof (Byte)); @@ -882,7 +882,7 @@ namespace OpenSim.Data.SQLite // interesting has to be done to actually get these values // back out. Not enough time to figure it out yet. SceneObjectPart prim = new SceneObjectPart(); - prim.UUID = new LLUUID((String) row["UUID"]); + prim.UUID = new UUID((String) row["UUID"]); // explicit conversion of integers is required, which sort // of sucks. No idea if there is a shortcut here or not. prim.ParentID = Convert.ToUInt32(row["ParentID"]); @@ -895,43 +895,43 @@ namespace OpenSim.Data.SQLite prim.TouchName = (String) row["TouchName"]; // permissions prim.ObjectFlags = Convert.ToUInt32(row["ObjectFlags"]); - prim.CreatorID = new LLUUID((String) row["CreatorID"]); - prim.OwnerID = new LLUUID((String) row["OwnerID"]); - prim.GroupID = new LLUUID((String) row["GroupID"]); - prim.LastOwnerID = new LLUUID((String) row["LastOwnerID"]); + prim.CreatorID = new UUID((String) row["CreatorID"]); + prim.OwnerID = new UUID((String) row["OwnerID"]); + prim.GroupID = new UUID((String) row["GroupID"]); + prim.LastOwnerID = new UUID((String) row["LastOwnerID"]); prim.OwnerMask = Convert.ToUInt32(row["OwnerMask"]); prim.NextOwnerMask = Convert.ToUInt32(row["NextOwnerMask"]); prim.GroupMask = Convert.ToUInt32(row["GroupMask"]); prim.EveryoneMask = Convert.ToUInt32(row["EveryoneMask"]); prim.BaseMask = Convert.ToUInt32(row["BaseMask"]); // vectors - prim.OffsetPosition = new LLVector3( + prim.OffsetPosition = new Vector3( Convert.ToSingle(row["PositionX"]), Convert.ToSingle(row["PositionY"]), Convert.ToSingle(row["PositionZ"]) ); - prim.GroupPosition = new LLVector3( + prim.GroupPosition = new Vector3( Convert.ToSingle(row["GroupPositionX"]), Convert.ToSingle(row["GroupPositionY"]), Convert.ToSingle(row["GroupPositionZ"]) ); - prim.Velocity = new LLVector3( + prim.Velocity = new Vector3( Convert.ToSingle(row["VelocityX"]), Convert.ToSingle(row["VelocityY"]), Convert.ToSingle(row["VelocityZ"]) ); - prim.AngularVelocity = new LLVector3( + prim.AngularVelocity = new Vector3( Convert.ToSingle(row["AngularVelocityX"]), Convert.ToSingle(row["AngularVelocityY"]), Convert.ToSingle(row["AngularVelocityZ"]) ); - prim.Acceleration = new LLVector3( + prim.Acceleration = new Vector3( Convert.ToSingle(row["AccelerationX"]), Convert.ToSingle(row["AccelerationY"]), Convert.ToSingle(row["AccelerationZ"]) ); // quaternions - prim.RotationOffset = new LLQuaternion( + prim.RotationOffset = new Quaternion( Convert.ToSingle(row["RotationX"]), Convert.ToSingle(row["RotationY"]), Convert.ToSingle(row["RotationZ"]), @@ -940,11 +940,11 @@ namespace OpenSim.Data.SQLite try { - prim.SitTargetPositionLL = new LLVector3( + prim.SitTargetPositionLL = new Vector3( Convert.ToSingle(row["SitTargetOffsetX"]), Convert.ToSingle(row["SitTargetOffsetY"]), Convert.ToSingle(row["SitTargetOffsetZ"])); - prim.SitTargetOrientationLL = new LLQuaternion( + prim.SitTargetOrientationLL = new Quaternion( Convert.ToSingle( row["SitTargetOrientX"]), Convert.ToSingle( @@ -993,10 +993,10 @@ namespace OpenSim.Data.SQLite { TaskInventoryItem taskItem = new TaskInventoryItem(); - taskItem.ItemID = new LLUUID((String)row["itemID"]); - taskItem.ParentPartID = new LLUUID((String)row["primID"]); - taskItem.AssetID = new LLUUID((String)row["assetID"]); - taskItem.ParentID = new LLUUID((String)row["parentFolderID"]); + taskItem.ItemID = new UUID((String)row["itemID"]); + taskItem.ParentPartID = new UUID((String)row["primID"]); + taskItem.AssetID = new UUID((String)row["assetID"]); + taskItem.ParentID = new UUID((String)row["parentFolderID"]); taskItem.InvType = Convert.ToInt32(row["invType"]); taskItem.Type = Convert.ToInt32(row["assetType"]); @@ -1004,10 +1004,10 @@ namespace OpenSim.Data.SQLite taskItem.Name = (String)row["name"]; taskItem.Description = (String)row["description"]; taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]); - taskItem.CreatorID = new LLUUID((String)row["creatorID"]); - taskItem.OwnerID = new LLUUID((String)row["ownerID"]); - taskItem.LastOwnerID = new LLUUID((String)row["lastOwnerID"]); - taskItem.GroupID = new LLUUID((String)row["groupID"]); + taskItem.CreatorID = new UUID((String)row["creatorID"]); + taskItem.OwnerID = new UUID((String)row["ownerID"]); + taskItem.LastOwnerID = new UUID((String)row["lastOwnerID"]); + taskItem.GroupID = new UUID((String)row["groupID"]); taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]); taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]); @@ -1028,7 +1028,7 @@ namespace OpenSim.Data.SQLite { LandData newData = new LandData(); - newData.GlobalID = new LLUUID((String) row["UUID"]); + newData.GlobalID = new UUID((String) row["UUID"]); newData.LocalID = Convert.ToInt32(row["LocalLandID"]); // Bitmap is a byte[512] @@ -1041,17 +1041,17 @@ namespace OpenSim.Data.SQLite newData.Area = Convert.ToInt32(row["Area"]); newData.AuctionID = Convert.ToUInt32(row["AuctionID"]); //Unemplemented newData.Category = (Parcel.ParcelCategory) Convert.ToInt32(row["Category"]); - //Enum libsecondlife.Parcel.ParcelCategory + //Enum OpenMetaverse.Parcel.ParcelCategory newData.ClaimDate = Convert.ToInt32(row["ClaimDate"]); newData.ClaimPrice = Convert.ToInt32(row["ClaimPrice"]); - newData.GroupID = new LLUUID((String) row["GroupUUID"]); + newData.GroupID = new UUID((String) row["GroupUUID"]); newData.SalePrice = Convert.ToInt32(row["SalePrice"]); newData.Status = (Parcel.ParcelStatus) Convert.ToInt32(row["LandStatus"]); - //Enum. libsecondlife.Parcel.ParcelStatus + //Enum. OpenMetaverse.Parcel.ParcelStatus newData.Flags = Convert.ToUInt32(row["LandFlags"]); newData.LandingType = (Byte) row["LandingType"]; newData.MediaAutoScale = (Byte) row["MediaAutoScale"]; - newData.MediaID = new LLUUID((String) row["MediaTextureUUID"]); + newData.MediaID = new UUID((String) row["MediaTextureUUID"]); newData.MediaURL = (String) row["MediaURL"]; newData.MusicURL = (String) row["MusicURL"]; newData.PassHours = Convert.ToSingle(row["PassHours"]); @@ -1061,25 +1061,25 @@ namespace OpenSim.Data.SQLite { newData.UserLocation = - new LLVector3(Convert.ToSingle(row["UserLocationX"]), Convert.ToSingle(row["UserLocationY"]), + new Vector3(Convert.ToSingle(row["UserLocationX"]), Convert.ToSingle(row["UserLocationY"]), Convert.ToSingle(row["UserLocationZ"])); newData.UserLookAt = - new LLVector3(Convert.ToSingle(row["UserLookAtX"]), Convert.ToSingle(row["UserLookAtY"]), + new Vector3(Convert.ToSingle(row["UserLookAtX"]), Convert.ToSingle(row["UserLookAtY"]), Convert.ToSingle(row["UserLookAtZ"])); } catch (InvalidCastException) { m_log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name); - newData.UserLocation = LLVector3.Zero; - newData.UserLookAt = LLVector3.Zero; + newData.UserLocation = Vector3.Zero; + newData.UserLookAt = Vector3.Zero; } newData.ParcelAccessList = new List(); - LLUUID authBuyerID = LLUUID.Zero; + UUID authBuyerID = UUID.Zero; try { - Helpers.TryParse((string)row["AuthbuyerID"], out authBuyerID); + UUID.TryParse((string)row["AuthbuyerID"], out authBuyerID); } catch (InvalidCastException) { @@ -1120,7 +1120,7 @@ namespace OpenSim.Data.SQLite private static ParcelManager.ParcelAccessEntry buildLandAccessData(DataRow row) { ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); - entry.AgentID = new LLUUID((string) row["AccessUUID"]); + entry.AgentID = new UUID((string) row["AccessUUID"]); entry.Flags = (ParcelManager.AccessList) row["Flags"]; entry.Time = new DateTime(); return entry; @@ -1144,7 +1144,7 @@ namespace OpenSim.Data.SQLite return str.ToArray(); } -// private void fillTerrainRow(DataRow row, LLUUID regionUUID, int rev, double[,] val) +// private void fillTerrainRow(DataRow row, UUID regionUUID, int rev, double[,] val) // { // row["RegionUUID"] = regionUUID; // row["Revision"] = rev; @@ -1167,7 +1167,7 @@ namespace OpenSim.Data.SQLite /// /// /// - private static void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) + private static void fillPrimRow(DataRow row, SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID) { row["UUID"] = Util.ToRawUuidString(prim.UUID); row["RegionUUID"] = Util.ToRawUuidString(regionUUID); @@ -1215,12 +1215,12 @@ namespace OpenSim.Data.SQLite row["RotationW"] = prim.RotationOffset.W; // Sit target - LLVector3 sitTargetPos = prim.SitTargetPositionLL; + Vector3 sitTargetPos = prim.SitTargetPositionLL; row["SitTargetOffsetX"] = sitTargetPos.X; row["SitTargetOffsetY"] = sitTargetPos.Y; row["SitTargetOffsetZ"] = sitTargetPos.Z; - LLQuaternion sitTargetOrient = prim.SitTargetOrientationLL; + Quaternion sitTargetOrient = prim.SitTargetOrientationLL; row["SitTargetOrientW"] = sitTargetOrient.W; row["SitTargetOrientX"] = sitTargetOrient.X; row["SitTargetOrientY"] = sitTargetOrient.Y; @@ -1263,7 +1263,7 @@ namespace OpenSim.Data.SQLite /// /// /// - private static void fillLandRow(DataRow row, LandData land, LLUUID regionUUID) + private static void fillLandRow(DataRow row, LandData land, UUID regionUUID) { row["UUID"] = Util.ToRawUuidString(land.GlobalID); row["RegionUUID"] = Util.ToRawUuidString(regionUUID); @@ -1278,12 +1278,12 @@ namespace OpenSim.Data.SQLite row["IsGroupOwned"] = land.IsGroupOwned; row["Area"] = land.Area; row["AuctionID"] = land.AuctionID; //Unemplemented - row["Category"] = land.Category; //Enum libsecondlife.Parcel.ParcelCategory + row["Category"] = land.Category; //Enum OpenMetaverse.Parcel.ParcelCategory row["ClaimDate"] = land.ClaimDate; row["ClaimPrice"] = land.ClaimPrice; row["GroupUUID"] = Util.ToRawUuidString(land.GroupID); row["SalePrice"] = land.SalePrice; - row["LandStatus"] = land.Status; //Enum. libsecondlife.Parcel.ParcelStatus + row["LandStatus"] = land.Status; //Enum. OpenMetaverse.Parcel.ParcelStatus row["LandFlags"] = land.Flags; row["LandingType"] = land.LandingType; row["MediaAutoScale"] = land.MediaAutoScale; @@ -1308,7 +1308,7 @@ namespace OpenSim.Data.SQLite /// /// /// - private static void fillLandAccessRow(DataRow row, ParcelManager.ParcelAccessEntry entry, LLUUID parcelID) + private static void fillLandAccessRow(DataRow row, ParcelManager.ParcelAccessEntry entry, UUID parcelID) { row["LandUUID"] = Util.ToRawUuidString(parcelID); row["AccessUUID"] = Util.ToRawUuidString(entry.AgentID); @@ -1323,7 +1323,7 @@ namespace OpenSim.Data.SQLite private PrimitiveBaseShape buildShape(DataRow row) { PrimitiveBaseShape s = new PrimitiveBaseShape(); - s.Scale = new LLVector3( + s.Scale = new Vector3( Convert.ToSingle(row["ScaleX"]), Convert.ToSingle(row["ScaleY"]), Convert.ToSingle(row["ScaleZ"]) @@ -1418,7 +1418,7 @@ namespace OpenSim.Data.SQLite /// /// /// - private void addPrim(SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) + private void addPrim(SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID) { DataTable prims = ds.Tables["prims"]; DataTable shapes = ds.Tables["primshapes"]; @@ -1453,7 +1453,7 @@ namespace OpenSim.Data.SQLite /// /// /// - public void StorePrimInventory(LLUUID primID, ICollection items) + public void StorePrimInventory(UUID primID, ICollection items) { m_log.InfoFormat("[REGION DB]: Entered StorePrimInventory with prim ID {0}", primID); diff --git a/OpenSim/Data/SQLite/SQLiteUserData.cs b/OpenSim/Data/SQLite/SQLiteUserData.cs index ae3cb7285c..7f1fd62cd4 100644 --- a/OpenSim/Data/SQLite/SQLiteUserData.cs +++ b/OpenSim/Data/SQLite/SQLiteUserData.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Data; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Mono.Data.SqliteClient; using OpenSim.Framework; @@ -59,7 +59,7 @@ namespace OpenSim.Data.SQLite private const string AvatarPickerAndSQL = "select * from users where username like :username and surname like :surname"; private const string AvatarPickerOrSQL = "select * from users where username like :username or surname like :surname"; - private Dictionary aplist = new Dictionary(); + private Dictionary aplist = new Dictionary(); private DataSet ds; private SqliteDataAdapter da; private SqliteDataAdapter daf; @@ -124,7 +124,7 @@ namespace OpenSim.Data.SQLite /// /// User UUID /// user profile data - override public UserProfileData GetUserByUUID(LLUUID uuid) + override public UserProfileData GetUserByUUID(UUID uuid) { lock (ds) { @@ -184,21 +184,21 @@ namespace OpenSim.Data.SQLite /// UUID of the friendlist owner /// UUID of the friend to add /// permission flag - override public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + override public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) { string InsertFriends = "insert into userfriends(ownerID, friendID, friendPerms) values(:ownerID, :friendID, :perms)"; using (SqliteCommand cmd = new SqliteCommand(InsertFriends, g_conn)) { - cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.UUID.ToString())); - cmd.Parameters.Add(new SqliteParameter(":friendID", friend.UUID.ToString())); + cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString())); + cmd.Parameters.Add(new SqliteParameter(":friendID", friend.ToString())); cmd.Parameters.Add(new SqliteParameter(":perms", perms)); cmd.ExecuteNonQuery(); } using (SqliteCommand cmd = new SqliteCommand(InsertFriends, g_conn)) { - cmd.Parameters.Add(new SqliteParameter(":ownerID", friend.UUID.ToString())); - cmd.Parameters.Add(new SqliteParameter(":friendID", friendlistowner.UUID.ToString())); + cmd.Parameters.Add(new SqliteParameter(":ownerID", friend.ToString())); + cmd.Parameters.Add(new SqliteParameter(":friendID", friendlistowner.ToString())); cmd.Parameters.Add(new SqliteParameter(":perms", perms)); cmd.ExecuteNonQuery(); } @@ -209,13 +209,13 @@ namespace OpenSim.Data.SQLite /// /// UUID of the friendlist owner /// UUID of the friend to remove - override public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + override public void RemoveUserFriend(UUID friendlistowner, UUID friend) { string DeletePerms = "delete from friendlist where (ownerID=:ownerID and friendID=:friendID) or (ownerID=:friendID and friendID=:ownerID)"; using (SqliteCommand cmd = new SqliteCommand(DeletePerms, g_conn)) { - cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.UUID.ToString())); - cmd.Parameters.Add(new SqliteParameter(":friendID", friend.UUID.ToString())); + cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString())); + cmd.Parameters.Add(new SqliteParameter(":friendID", friend.ToString())); cmd.ExecuteNonQuery(); } } @@ -226,14 +226,14 @@ namespace OpenSim.Data.SQLite /// UUID of the friendlist owner /// UUID of the friend to modify /// updated permission flag - override public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + override public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) { string UpdatePerms = "update friendlist set perms=:perms where ownerID=:ownerID and friendID=:friendID"; using (SqliteCommand cmd = new SqliteCommand(UpdatePerms, g_conn)) { cmd.Parameters.Add(new SqliteParameter(":perms", perms)); - cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.UUID.ToString())); - cmd.Parameters.Add(new SqliteParameter(":friendID", friend.UUID.ToString())); + cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString())); + cmd.Parameters.Add(new SqliteParameter(":friendID", friend.ToString())); cmd.ExecuteNonQuery(); } } @@ -243,13 +243,13 @@ namespace OpenSim.Data.SQLite /// /// UUID of the friendlist owner /// The friendlist list - override public List GetUserFriendList(LLUUID friendlistowner) + override public List GetUserFriendList(UUID friendlistowner) { List returnlist = new List(); using (SqliteCommand cmd = new SqliteCommand(SelectFriendsByUUID, g_conn)) { - cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.UUID.ToString())); + cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString())); try { @@ -259,7 +259,7 @@ namespace OpenSim.Data.SQLite { FriendListItem user = new FriendListItem(); user.FriendListOwner = friendlistowner; - user.Friend = new LLUUID((string)reader[0]); + user.Friend = new UUID((string)reader[0]); user.FriendPerms = Convert.ToUInt32(reader[1]); user.FriendListOwnerPerms = Convert.ToUInt32(reader[2]); returnlist.Add(user); @@ -288,7 +288,7 @@ namespace OpenSim.Data.SQLite /// UUID of the region /// region handle /// DO NOTHING - override public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle) + override public void UpdateUserCurrentRegion(UUID avatarid, UUID regionuuid, ulong regionhandle) { //m_log.Info("[USER DB]: Stub UpdateUserCUrrentRegion called"); } @@ -299,7 +299,7 @@ namespace OpenSim.Data.SQLite /// /// /// - override public List GeneratePickerResults(LLUUID queryID, string query) + override public List GeneratePickerResults(UUID queryID, string query) { List returnlist = new List(); string[] querysplit; @@ -316,7 +316,7 @@ namespace OpenSim.Data.SQLite while (reader.Read()) { AvatarPickerAvatar user = new AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string) reader["UUID"]); + user.AvatarID = new UUID((string) reader["UUID"]); user.firstName = (string) reader["username"]; user.lastName = (string) reader["surname"]; returnlist.Add(user); @@ -337,7 +337,7 @@ namespace OpenSim.Data.SQLite while (reader.Read()) { AvatarPickerAvatar user = new AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string) reader["UUID"]); + user.AvatarID = new UUID((string) reader["UUID"]); user.firstName = (string) reader["username"]; user.lastName = (string) reader["surname"]; returnlist.Add(user); @@ -354,7 +354,7 @@ namespace OpenSim.Data.SQLite /// /// The user's account ID /// A matching user profile - override public UserAgentData GetAgentByUUID(LLUUID uuid) + override public UserAgentData GetAgentByUUID(UUID uuid) { try { @@ -399,7 +399,7 @@ namespace OpenSim.Data.SQLite /// /// UUID of the user /// UUID of the weblogin - override public void StoreWebLoginKey(LLUUID AgentID, LLUUID WebLoginKey) + override public void StoreWebLoginKey(UUID AgentID, UUID WebLoginKey) { DataTable users = ds.Tables["users"]; lock (ds) @@ -520,7 +520,7 @@ namespace OpenSim.Data.SQLite /// End account /// The amount to move /// Success? - override public bool MoneyTransferRequest(LLUUID from, LLUUID to, uint amount) + override public bool MoneyTransferRequest(UUID from, UUID to, uint amount) { return true; } @@ -533,7 +533,7 @@ namespace OpenSim.Data.SQLite /// Receivers account /// Inventory item /// Success? - override public bool InventoryTransferRequest(LLUUID from, LLUUID to, LLUUID item) + override public bool InventoryTransferRequest(UUID from, UUID to, UUID item) { return true; } @@ -545,7 +545,7 @@ namespace OpenSim.Data.SQLite /// /// The user UUID /// Avatar Appearence - override public AvatarAppearance GetUserAppearance(LLUUID user) + override public AvatarAppearance GetUserAppearance(UUID user) { AvatarAppearance aa = null; try { @@ -562,7 +562,7 @@ namespace OpenSim.Data.SQLite /// /// the user UUID /// appearence - override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) + override public void UpdateUserAppearance(UUID user, AvatarAppearance appearance) { appearance.Owner = user; aplist[user] = appearance; @@ -707,8 +707,8 @@ namespace OpenSim.Data.SQLite private static UserProfileData buildUserProfile(DataRow row) { UserProfileData user = new UserProfileData(); - LLUUID tmp; - LLUUID.TryParse((String)row["UUID"], out tmp); + UUID tmp; + UUID.TryParse((String)row["UUID"], out tmp); user.ID = tmp; user.FirstName = (String) row["username"]; user.SurName = (String) row["surname"]; @@ -717,39 +717,39 @@ namespace OpenSim.Data.SQLite user.HomeRegionX = Convert.ToUInt32(row["homeRegionX"]); user.HomeRegionY = Convert.ToUInt32(row["homeRegionY"]); - user.HomeLocation = new LLVector3( + user.HomeLocation = new Vector3( Convert.ToSingle(row["homeLocationX"]), Convert.ToSingle(row["homeLocationY"]), Convert.ToSingle(row["homeLocationZ"]) ); - user.HomeLookAt = new LLVector3( + user.HomeLookAt = new Vector3( Convert.ToSingle(row["homeLookAtX"]), Convert.ToSingle(row["homeLookAtY"]), Convert.ToSingle(row["homeLookAtZ"]) ); - LLUUID regionID = LLUUID.Zero; - LLUUID.TryParse(row["homeRegionID"].ToString(), out regionID); // it's ok if it doesn't work; just use LLUUID.Zero + UUID regionID = UUID.Zero; + UUID.TryParse(row["homeRegionID"].ToString(), out regionID); // it's ok if it doesn't work; just use UUID.Zero user.HomeRegionID = regionID; user.Created = Convert.ToInt32(row["created"]); user.LastLogin = Convert.ToInt32(row["lastLogin"]); - user.RootInventoryFolderID = new LLUUID((String) row["rootInventoryFolderID"]); + user.RootInventoryFolderID = new UUID((String) row["rootInventoryFolderID"]); user.UserInventoryURI = (String) row["userInventoryURI"]; user.UserAssetURI = (String) row["userAssetURI"]; user.CanDoMask = Convert.ToUInt32(row["profileCanDoMask"]); user.WantDoMask = Convert.ToUInt32(row["profileWantDoMask"]); user.AboutText = (String) row["profileAboutText"]; user.FirstLifeAboutText = (String) row["profileFirstText"]; - LLUUID.TryParse((String)row["profileImage"], out tmp); + UUID.TryParse((String)row["profileImage"], out tmp); user.Image = tmp; - LLUUID.TryParse((String)row["profileFirstImage"], out tmp); + UUID.TryParse((String)row["profileFirstImage"], out tmp); user.FirstLifeImage = tmp; - user.WebLoginKey = new LLUUID((String) row["webLoginKey"]); + user.WebLoginKey = new UUID((String) row["webLoginKey"]); user.UserFlags = Convert.ToInt32(row["userFlags"]); user.GodLevel = Convert.ToInt32(row["godLevel"]); user.CustomType = row["customType"].ToString(); - user.Partner = new LLUUID((String) row["partner"]); + user.Partner = new UUID((String) row["partner"]); return user; } @@ -814,18 +814,18 @@ namespace OpenSim.Data.SQLite { UserAgentData ua = new UserAgentData(); - ua.ProfileID = new LLUUID((String) row["UUID"]); + ua.ProfileID = new UUID((String) row["UUID"]); ua.AgentIP = (String) row["agentIP"]; ua.AgentPort = Convert.ToUInt32(row["agentPort"]); ua.AgentOnline = Convert.ToBoolean(row["agentOnline"]); - ua.SessionID = new LLUUID((String) row["sessionID"]); - ua.SecureSessionID = new LLUUID((String) row["secureSessionID"]); - ua.InitialRegion = new LLUUID((String) row["regionID"]); + ua.SessionID = new UUID((String) row["sessionID"]); + ua.SecureSessionID = new UUID((String) row["secureSessionID"]); + ua.InitialRegion = new UUID((String) row["regionID"]); ua.LoginTime = Convert.ToInt32(row["loginTime"]); ua.LogoutTime = Convert.ToInt32(row["logoutTime"]); - ua.Region = new LLUUID((String) row["currentRegion"]); + ua.Region = new UUID((String) row["currentRegion"]); ua.Handle = Convert.ToUInt64(row["currentHandle"]); - ua.Position = new LLVector3( + ua.Position = new Vector3( Convert.ToSingle(row["currentPosX"]), Convert.ToSingle(row["currentPosY"]), Convert.ToSingle(row["currentPosZ"]) @@ -906,7 +906,7 @@ namespace OpenSim.Data.SQLite } - override public void ResetAttachments(LLUUID userID) + override public void ResetAttachments(UUID userID) { } } diff --git a/OpenSim/Data/UserDataBase.cs b/OpenSim/Data/UserDataBase.cs index e57c8f8da2..33b8a94ed3 100644 --- a/OpenSim/Data/UserDataBase.cs +++ b/OpenSim/Data/UserDataBase.cs @@ -27,7 +27,7 @@ using System.Reflection; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -37,28 +37,28 @@ namespace OpenSim.Data { // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - // private Dictionary aplist = new Dictionary(); + // private Dictionary aplist = new Dictionary(); - public abstract UserProfileData GetUserByUUID(LLUUID user); + public abstract UserProfileData GetUserByUUID(UUID user); public abstract UserProfileData GetUserByName(string fname, string lname); - public abstract UserAgentData GetAgentByUUID(LLUUID user); + public abstract UserAgentData GetAgentByUUID(UUID user); public abstract UserAgentData GetAgentByName(string name); public abstract UserAgentData GetAgentByName(string fname, string lname); - public abstract void StoreWebLoginKey(LLUUID agentID, LLUUID webLoginKey); + public abstract void StoreWebLoginKey(UUID agentID, UUID webLoginKey); public abstract void AddNewUserProfile(UserProfileData user); public abstract bool UpdateUserProfile(UserProfileData user); - public abstract void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle); + public abstract void UpdateUserCurrentRegion(UUID avatarid, UUID regionuuid, ulong regionhandle); public abstract void AddNewUserAgent(UserAgentData agent); - public abstract void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms); - public abstract void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend); - public abstract void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms); - public abstract List GetUserFriendList(LLUUID friendlistowner); - public abstract bool MoneyTransferRequest(LLUUID from, LLUUID to, uint amount); - public abstract bool InventoryTransferRequest(LLUUID from, LLUUID to, LLUUID inventory); - public abstract List GeneratePickerResults(LLUUID queryID, string query); - public abstract AvatarAppearance GetUserAppearance(LLUUID user); - public abstract void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance); - // public virtual AvatarAppearance GetUserAppearance(LLUUID user) { + public abstract void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms); + public abstract void RemoveUserFriend(UUID friendlistowner, UUID friend); + public abstract void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms); + public abstract List GetUserFriendList(UUID friendlistowner); + public abstract bool MoneyTransferRequest(UUID from, UUID to, uint amount); + public abstract bool InventoryTransferRequest(UUID from, UUID to, UUID inventory); + public abstract List GeneratePickerResults(UUID queryID, string query); + public abstract AvatarAppearance GetUserAppearance(UUID user); + public abstract void UpdateUserAppearance(UUID user, AvatarAppearance appearance); + // public virtual AvatarAppearance GetUserAppearance(UUID user) { // AvatarAppearance aa = null; // try { // aa = aplist[user]; @@ -68,11 +68,11 @@ namespace OpenSim.Data // } // return aa; // } - // public virtual void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) { + // public virtual void UpdateUserAppearance(UUID user, AvatarAppearance appearance) { // aplist[user] = appearance; // m_log.Info("[APPEARANCE] Setting appearance for " + user.ToString() + appearance.ToString()); // } - public abstract void ResetAttachments(LLUUID userID); + public abstract void ResetAttachments(UUID userID); public abstract string Version {get;} public abstract string Name {get;} diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs index 8c184c4ab9..045bd00161 100644 --- a/OpenSim/Framework/AgentCircuitData.cs +++ b/OpenSim/Framework/AgentCircuitData.cs @@ -26,23 +26,23 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class AgentCircuitData { - public LLUUID AgentID; - public LLUUID BaseFolder; + public UUID AgentID; + public UUID BaseFolder; public string CapsPath = String.Empty; public bool child; public uint circuitcode; public string firstname; - public LLUUID InventoryFolder; + public UUID InventoryFolder; public string lastname; - public LLUUID SecureSessionID; - public LLUUID SessionID; - public LLVector3 startpos; + public UUID SecureSessionID; + public UUID SessionID; + public Vector3 startpos; public AgentCircuitData() { @@ -50,16 +50,16 @@ namespace OpenSim.Framework public AgentCircuitData(sAgentCircuitData cAgent) { - AgentID = new LLUUID(cAgent.AgentID); - SessionID = new LLUUID(cAgent.SessionID); - SecureSessionID = new LLUUID(cAgent.SecureSessionID); - startpos = new LLVector3(cAgent.startposx, cAgent.startposy, cAgent.startposz); + AgentID = new UUID(cAgent.AgentID); + SessionID = new UUID(cAgent.SessionID); + SecureSessionID = new UUID(cAgent.SecureSessionID); + startpos = new Vector3(cAgent.startposx, cAgent.startposy, cAgent.startposz); firstname = cAgent.firstname; lastname = cAgent.lastname; circuitcode = cAgent.circuitcode; child = cAgent.child; - InventoryFolder = new LLUUID(cAgent.InventoryFolder); - BaseFolder = new LLUUID(cAgent.BaseFolder); + InventoryFolder = new UUID(cAgent.InventoryFolder); + BaseFolder = new UUID(cAgent.BaseFolder); CapsPath = cAgent.CapsPath; } } @@ -87,9 +87,9 @@ namespace OpenSim.Framework public sAgentCircuitData(AgentCircuitData cAgent) { - AgentID = cAgent.AgentID.UUID; - SessionID = cAgent.SessionID.UUID; - SecureSessionID = cAgent.SecureSessionID.UUID; + AgentID = cAgent.AgentID.Guid; + SessionID = cAgent.SessionID.Guid; + SecureSessionID = cAgent.SecureSessionID.Guid; startposx = cAgent.startpos.X; startposy = cAgent.startpos.Y; startposz = cAgent.startpos.Z; @@ -97,9 +97,9 @@ namespace OpenSim.Framework lastname = cAgent.lastname; circuitcode = cAgent.circuitcode; child = cAgent.child; - InventoryFolder = cAgent.InventoryFolder.UUID; - BaseFolder = cAgent.BaseFolder.UUID; + InventoryFolder = cAgent.InventoryFolder.Guid; + BaseFolder = cAgent.BaseFolder.Guid; CapsPath = cAgent.CapsPath; } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/AgentCircuitManager.cs b/OpenSim/Framework/AgentCircuitManager.cs index a2356881cb..96a781687f 100644 --- a/OpenSim/Framework/AgentCircuitManager.cs +++ b/OpenSim/Framework/AgentCircuitManager.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -38,7 +38,7 @@ namespace OpenSim.Framework { } - public virtual AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitcode) + public virtual AuthenticateResponse AuthenticateSession(UUID sessionID, UUID agentID, uint circuitcode) { AgentCircuitData validcircuit = null; if (AgentCircuits.ContainsKey(circuitcode)) @@ -86,9 +86,9 @@ namespace OpenSim.Framework } } - public LLVector3 GetPosition(uint circuitCode) + public Vector3 GetPosition(uint circuitCode) { - LLVector3 vec = new LLVector3(); + Vector3 vec = new Vector3(); if (AgentCircuits.ContainsKey(circuitCode)) { vec = AgentCircuits[circuitCode].startpos; diff --git a/OpenSim/Framework/AgentUpdateArgs.cs b/OpenSim/Framework/AgentUpdateArgs.cs index 9e83ae1044..d9dee133c0 100644 --- a/OpenSim/Framework/AgentUpdateArgs.cs +++ b/OpenSim/Framework/AgentUpdateArgs.cs @@ -1,21 +1,21 @@ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class AgentUpdateArgs : EventArgs { - public LLUUID AgentID; - public LLQuaternion BodyRotation; - public LLVector3 CameraAtAxis; - public LLVector3 CameraCenter; - public LLVector3 CameraLeftAxis; - public LLVector3 CameraUpAxis; + public UUID AgentID; + public Quaternion BodyRotation; + public Vector3 CameraAtAxis; + public Vector3 CameraCenter; + public Vector3 CameraLeftAxis; + public Vector3 CameraUpAxis; public uint ControlFlags; public float Far; public byte Flags; - public LLQuaternion HeadRotation; - public LLUUID SessionID; + public Quaternion HeadRotation; + public UUID SessionID; public byte State; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/AssetBase.cs b/OpenSim/Framework/AssetBase.cs index 629606773e..48ef2ffdab 100644 --- a/OpenSim/Framework/AssetBase.cs +++ b/OpenSim/Framework/AssetBase.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -35,7 +35,7 @@ namespace OpenSim.Framework { private byte[] _data; private string _description = String.Empty; - private LLUUID _fullid; + private UUID _fullid; private bool _local = false; private string _name = String.Empty; private bool _temporary = false; @@ -45,13 +45,13 @@ namespace OpenSim.Framework { } - public AssetBase(LLUUID assetId, string name) + public AssetBase(UUID assetId, string name) { FullID = assetId; Name = name; } - public virtual LLUUID FullID + public virtual UUID FullID { get { return _fullid; } set { _fullid = value; } @@ -60,7 +60,7 @@ namespace OpenSim.Framework public virtual string ID { get { return _fullid.ToString(); } - set { _fullid = new LLUUID(value); } + set { _fullid = new UUID(value); } } public virtual byte[] Data diff --git a/OpenSim/Framework/AssetLandmark.cs b/OpenSim/Framework/AssetLandmark.cs index 004e472e0c..cf663ee938 100644 --- a/OpenSim/Framework/AssetLandmark.cs +++ b/OpenSim/Framework/AssetLandmark.cs @@ -26,15 +26,15 @@ */ using System.Text; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class AssetLandmark : AssetBase { - public LLVector3 Position; + public Vector3 Position; public ulong RegionHandle; - public LLUUID RegionID; + public UUID RegionID; public int Version; public AssetLandmark(AssetBase a) @@ -52,8 +52,8 @@ namespace OpenSim.Framework string temp = Encoding.UTF8.GetString(Data).Trim(); string[] parts = temp.Split('\n'); int.TryParse(parts[0].Substring(17, 1), out Version); - LLUUID.TryParse(parts[1].Substring(10, 36), out RegionID); - LLVector3.TryParse(parts[2].Substring(10, parts[2].Length - 10), out Position); + UUID.TryParse(parts[1].Substring(10, 36), out RegionID); + Vector3.TryParse(parts[2].Substring(10, parts[2].Length - 10), out Position); ulong.TryParse(parts[3].Substring(14, parts[3].Length - 14), out RegionHandle); } } diff --git a/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs index 7f0e2d67cb..73489ecf97 100644 --- a/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs +++ b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; @@ -46,7 +46,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem protected static AssetBase CreateAsset(string assetIdStr, string name, string path, bool isImage) { AssetBase asset = new AssetBase( - new LLUUID(assetIdStr), + new UUID(assetIdStr), name ); @@ -88,7 +88,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem public void ForEachDefaultXmlAsset(Action action) { - string assetSetFilename = Path.Combine(Util.assetsDir(), "AssetSets.xml"); + string assetSetFilename = Path.Combine(Util.assetsDir(), "AssetSets.Xml"); ForEachDefaultXmlAsset(assetSetFilename, action); } @@ -118,7 +118,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem } else { - m_log.Error("[ASSETS]: Asset set control file assets/AssetSets.xml does not exist! No assets loaded."); + m_log.Error("[ASSETS]: Asset set control file assets/AssetSets.Xml does not exist! No assets loaded."); } assets.ForEach(action); @@ -142,7 +142,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem for (int i = 0; i < source.Configs.Count; i++) { - string assetIdStr = source.Configs[i].GetString("assetID", LLUUID.Random().ToString()); + string assetIdStr = source.Configs[i].GetString("assetID", UUID.Random().ToString()); string name = source.Configs[i].GetString("name", String.Empty); sbyte type = (sbyte) source.Configs[i].GetInt("assetType", 0); string assetPath = Path.Combine(dir, source.Configs[i].GetString("fileName", String.Empty)); diff --git a/OpenSim/Framework/AssetRequest.cs b/OpenSim/Framework/AssetRequest.cs index 71d5298ea8..f6c184acd5 100644 --- a/OpenSim/Framework/AssetRequest.cs +++ b/OpenSim/Framework/AssetRequest.cs @@ -25,13 +25,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public struct AssetRequest { - public LLUUID AssetID; + public UUID AssetID; public bool IsTexture; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/AssetRequestToClient.cs b/OpenSim/Framework/AssetRequestToClient.cs index 916b9f5366..2bf3d3e9fa 100644 --- a/OpenSim/Framework/AssetRequestToClient.cs +++ b/OpenSim/Framework/AssetRequestToClient.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Text; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -42,10 +42,10 @@ namespace OpenSim.Framework /// public class AssetRequestToClient { - public LLUUID RequestAssetID; + public UUID RequestAssetID; public AssetBase AssetInf; public AssetBase ImageInfo; - public LLUUID TransferRequestID; + public UUID TransferRequestID; public long DataPointer = 0; public int NumPackets = 0; public int PacketCounter = 0; diff --git a/OpenSim/Framework/AssetStorage.cs b/OpenSim/Framework/AssetStorage.cs index d58d8664c2..df02a97620 100644 --- a/OpenSim/Framework/AssetStorage.cs +++ b/OpenSim/Framework/AssetStorage.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -34,15 +34,15 @@ namespace OpenSim.Framework public byte[] Data; public string Name; public sbyte Type; - public LLUUID UUID; + public UUID UUID; public AssetStorage() { } - public AssetStorage(LLUUID assetUUID) + public AssetStorage(UUID assetUUID) { UUID = assetUUID; } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index a287201b9c..0c0cfd54cf 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs @@ -30,8 +30,8 @@ using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization; using System.Security.Permissions; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; namespace OpenSim.Framework @@ -58,20 +58,20 @@ namespace OpenSim.Framework private readonly static int MAX_WEARABLES = 13; - private static LLUUID BODY_ASSET = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); - private static LLUUID BODY_ITEM = new LLUUID("66c41e39-38f9-f75a-024e-585989bfaba9"); - private static LLUUID SKIN_ASSET = new LLUUID("77c41e39-38f9-f75a-024e-585989bbabbb"); - private static LLUUID SKIN_ITEM = new LLUUID("77c41e39-38f9-f75a-024e-585989bfabc9"); - private static LLUUID SHIRT_ASSET = new LLUUID("00000000-38f9-1111-024e-222222111110"); - private static LLUUID SHIRT_ITEM = new LLUUID("77c41e39-38f9-f75a-0000-585989bf0000"); - private static LLUUID PANTS_ASSET = new LLUUID("00000000-38f9-1111-024e-222222111120"); - private static LLUUID PANTS_ITEM = new LLUUID("77c41e39-38f9-f75a-0000-5859892f1111"); + private static UUID BODY_ASSET = new UUID("66c41e39-38f9-f75a-024e-585989bfab73"); + private static UUID BODY_ITEM = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9"); + private static UUID SKIN_ASSET = new UUID("77c41e39-38f9-f75a-024e-585989bbabbb"); + private static UUID SKIN_ITEM = new UUID("77c41e39-38f9-f75a-024e-585989bfabc9"); + private static UUID SHIRT_ASSET = new UUID("00000000-38f9-1111-024e-222222111110"); + private static UUID SHIRT_ITEM = new UUID("77c41e39-38f9-f75a-0000-585989bf0000"); + private static UUID PANTS_ASSET = new UUID("00000000-38f9-1111-024e-222222111120"); + private static UUID PANTS_ITEM = new UUID("77c41e39-38f9-f75a-0000-5859892f1111"); public readonly static int VISUALPARAM_COUNT = 218; - protected LLUUID m_owner; + protected UUID m_owner; - public virtual LLUUID Owner + public virtual UUID Owner { get { return m_owner; } set { m_owner = value; } @@ -100,107 +100,107 @@ namespace OpenSim.Framework set { m_wearables = value; } } - public virtual LLUUID BodyItem { + public virtual UUID BodyItem { get { return m_wearables[BODY].ItemID; } set { m_wearables[BODY].ItemID = value; } } - public virtual LLUUID BodyAsset { + public virtual UUID BodyAsset { get { return m_wearables[BODY].AssetID; } set { m_wearables[BODY].AssetID = value; } } - public virtual LLUUID SkinItem { + public virtual UUID SkinItem { get { return m_wearables[SKIN].ItemID; } set { m_wearables[SKIN].ItemID = value; } } - public virtual LLUUID SkinAsset { + public virtual UUID SkinAsset { get { return m_wearables[SKIN].AssetID; } set { m_wearables[SKIN].AssetID = value; } } - public virtual LLUUID HairItem { + public virtual UUID HairItem { get { return m_wearables[HAIR].ItemID; } set { m_wearables[HAIR].ItemID = value; } } - public virtual LLUUID HairAsset { + public virtual UUID HairAsset { get { return m_wearables[HAIR].AssetID; } set { m_wearables[HAIR].AssetID = value; } } - public virtual LLUUID EyesItem { + public virtual UUID EyesItem { get { return m_wearables[EYES].ItemID; } set { m_wearables[EYES].ItemID = value; } } - public virtual LLUUID EyesAsset { + public virtual UUID EyesAsset { get { return m_wearables[EYES].AssetID; } set { m_wearables[EYES].AssetID = value; } } - public virtual LLUUID ShirtItem { + public virtual UUID ShirtItem { get { return m_wearables[SHIRT].ItemID; } set { m_wearables[SHIRT].ItemID = value; } } - public virtual LLUUID ShirtAsset { + public virtual UUID ShirtAsset { get { return m_wearables[SHIRT].AssetID; } set { m_wearables[SHIRT].AssetID = value; } } - public virtual LLUUID PantsItem { + public virtual UUID PantsItem { get { return m_wearables[PANTS].ItemID; } set { m_wearables[PANTS].ItemID = value; } } - public virtual LLUUID PantsAsset { + public virtual UUID PantsAsset { get { return m_wearables[PANTS].AssetID; } set { m_wearables[PANTS].AssetID = value; } } - public virtual LLUUID ShoesItem { + public virtual UUID ShoesItem { get { return m_wearables[SHOES].ItemID; } set { m_wearables[SHOES].ItemID = value; } } - public virtual LLUUID ShoesAsset { + public virtual UUID ShoesAsset { get { return m_wearables[SHOES].AssetID; } set { m_wearables[SHOES].AssetID = value; } } - public virtual LLUUID SocksItem { + public virtual UUID SocksItem { get { return m_wearables[SOCKS].ItemID; } set { m_wearables[SOCKS].ItemID = value; } } - public virtual LLUUID SocksAsset { + public virtual UUID SocksAsset { get { return m_wearables[SOCKS].AssetID; } set { m_wearables[SOCKS].AssetID = value; } } - public virtual LLUUID JacketItem { + public virtual UUID JacketItem { get { return m_wearables[JACKET].ItemID; } set { m_wearables[JACKET].ItemID = value; } } - public virtual LLUUID JacketAsset { + public virtual UUID JacketAsset { get { return m_wearables[JACKET].AssetID; } set { m_wearables[JACKET].AssetID = value; } } - public virtual LLUUID GlovesItem { + public virtual UUID GlovesItem { get { return m_wearables[GLOVES].ItemID; } set { m_wearables[GLOVES].ItemID = value; } } - public virtual LLUUID GlovesAsset { + public virtual UUID GlovesAsset { get { return m_wearables[GLOVES].AssetID; } set { m_wearables[GLOVES].AssetID = value; } } - public virtual LLUUID UnderShirtItem { + public virtual UUID UnderShirtItem { get { return m_wearables[UNDERSHIRT].ItemID; } set { m_wearables[UNDERSHIRT].ItemID = value; } } - public virtual LLUUID UnderShirtAsset { + public virtual UUID UnderShirtAsset { get { return m_wearables[UNDERSHIRT].AssetID; } set { m_wearables[UNDERSHIRT].AssetID = value; } } - public virtual LLUUID UnderPantsItem { + public virtual UUID UnderPantsItem { get { return m_wearables[UNDERPANTS].ItemID; } set { m_wearables[UNDERPANTS].ItemID = value; } } - public virtual LLUUID UnderPantsAsset { + public virtual UUID UnderPantsAsset { get { return m_wearables[UNDERPANTS].AssetID; } set { m_wearables[UNDERPANTS].AssetID = value; } } - public virtual LLUUID SkirtItem { + public virtual UUID SkirtItem { get { return m_wearables[SKIRT].ItemID; } set { m_wearables[SKIRT].ItemID = value; } } - public virtual LLUUID SkirtAsset { + public virtual UUID SkirtAsset { get { return m_wearables[SKIRT].AssetID; } set { m_wearables[SKIRT].AssetID = value; } } @@ -217,9 +217,9 @@ namespace OpenSim.Framework m_wearables[PANTS].ItemID = PANTS_ITEM; } - protected LLObject.TextureEntry m_texture; + protected Primitive.TextureEntry m_texture; - public virtual LLObject.TextureEntry Texture + public virtual Primitive.TextureEntry Texture { get { return m_texture; } set { m_texture = value; } @@ -242,13 +242,13 @@ namespace OpenSim.Framework m_wearables[i] = new AvatarWearable(); } m_serial = 0; - m_owner = LLUUID.Zero; + m_owner = UUID.Zero; m_visualparams = new byte[VISUALPARAM_COUNT]; SetDefaultWearables(); m_texture = GetDefaultTexture(); } - public AvatarAppearance(LLUUID avatarID, AvatarWearable[] wearables, byte[] visualParams) + public AvatarAppearance(UUID avatarID, AvatarWearable[] wearables, byte[] visualParams) { m_owner = avatarID; m_serial = 1; @@ -264,7 +264,7 @@ namespace OpenSim.Framework /// public virtual void SetAppearance(byte[] texture, List visualParam) { - LLObject.TextureEntry textureEnt = new LLObject.TextureEntry(texture, 0, texture.Length); + Primitive.TextureEntry textureEnt = new Primitive.TextureEntry(texture, 0, texture.Length); m_texture = textureEnt; m_visualparams = visualParam.ToArray(); @@ -281,16 +281,16 @@ namespace OpenSim.Framework m_wearables[wearableId] = wearable; } - public static LLObject.TextureEntry GetDefaultTexture() + public static Primitive.TextureEntry GetDefaultTexture() { - LLObject.TextureEntry textu = new LLObject.TextureEntry(new LLUUID("C228D1CF-4B5D-4BA8-84F4-899A0796AA97")); - textu.CreateFace(0).TextureID = new LLUUID("00000000-0000-1111-9999-000000000012"); - textu.CreateFace(1).TextureID = new LLUUID("5748decc-f629-461c-9a36-a35a221fe21f"); - textu.CreateFace(2).TextureID = new LLUUID("5748decc-f629-461c-9a36-a35a221fe21f"); - textu.CreateFace(3).TextureID = new LLUUID("6522E74D-1660-4E7F-B601-6F48C1659A77"); - textu.CreateFace(4).TextureID = new LLUUID("7CA39B4C-BD19-4699-AFF7-F93FD03D3E7B"); - textu.CreateFace(5).TextureID = new LLUUID("00000000-0000-1111-9999-000000000010"); - textu.CreateFace(6).TextureID = new LLUUID("00000000-0000-1111-9999-000000000011"); + Primitive.TextureEntry textu = new Primitive.TextureEntry(new UUID("C228D1CF-4B5D-4BA8-84F4-899A0796AA97")); + textu.CreateFace(0).TextureID = new UUID("00000000-0000-1111-9999-000000000012"); + textu.CreateFace(1).TextureID = new UUID("5748decc-f629-461c-9a36-a35a221fe21f"); + textu.CreateFace(2).TextureID = new UUID("5748decc-f629-461c-9a36-a35a221fe21f"); + textu.CreateFace(3).TextureID = new UUID("6522E74D-1660-4E7F-B601-6F48C1659A77"); + textu.CreateFace(4).TextureID = new UUID("7CA39B4C-BD19-4699-AFF7-F93FD03D3E7B"); + textu.CreateFace(5).TextureID = new UUID("00000000-0000-1111-9999-000000000010"); + textu.CreateFace(6).TextureID = new UUID("00000000-0000-1111-9999-000000000011"); return textu; } @@ -313,13 +313,13 @@ namespace OpenSim.Framework throw new ArgumentNullException("info"); } - m_owner = new LLUUID((Guid)info.GetValue("m_scenePresenceID", typeof(Guid))); + m_owner = new UUID((Guid)info.GetValue("m_scenePresenceID", typeof(Guid))); m_serial = (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_texture = new LLObject.TextureEntry(m_textureEntry_work, 0, m_textureEntry_work.Length); + m_texture = new Primitive.TextureEntry(m_textureEntry_work, 0, m_textureEntry_work.Length); m_avatarHeight = (float)info.GetValue("m_avatarHeight", typeof(float)); @@ -371,10 +371,10 @@ namespace OpenSim.Framework public AvatarAppearance(Hashtable h) { - Owner = new LLUUID((string)h["owner"]); + Owner = new UUID((string)h["owner"]); Serial = Convert.ToInt32((string)h["serial"]); VisualParams = (byte[])h["visual_params"]; - Texture = new LLObject.TextureEntry((byte[])h["texture"], 0, ((byte[])h["texture"]).Length); + Texture = new Primitive.TextureEntry((byte[])h["texture"], 0, ((byte[])h["texture"]).Length); AvatarHeight = (float)Convert.ToDouble((string)h["avatar_height"]); m_wearables = new AvatarWearable[MAX_WEARABLES]; @@ -384,32 +384,32 @@ namespace OpenSim.Framework m_wearables[i] = new AvatarWearable(); } - BodyItem = new LLUUID((string)h["body_item"]); - BodyAsset = new LLUUID((string)h["body_asset"]); - SkinItem = new LLUUID((string)h["skin_item"]); - SkinAsset = new LLUUID((string)h["skin_asset"]); - HairItem = new LLUUID((string)h["hair_item"]); - HairAsset = new LLUUID((string)h["hair_asset"]); - EyesItem = new LLUUID((string)h["eyes_item"]); - EyesAsset = new LLUUID((string)h["eyes_asset"]); - ShirtItem = new LLUUID((string)h["shirt_item"]); - ShirtAsset = new LLUUID((string)h["shirt_asset"]); - PantsItem = new LLUUID((string)h["pants_item"]); - PantsAsset = new LLUUID((string)h["pants_asset"]); - ShoesItem = new LLUUID((string)h["shoes_item"]); - ShoesAsset = new LLUUID((string)h["shoes_asset"]); - SocksItem = new LLUUID((string)h["socks_item"]); - SocksAsset = new LLUUID((string)h["socks_asset"]); - JacketItem = new LLUUID((string)h["jacket_item"]); - JacketAsset = new LLUUID((string)h["jacket_asset"]); - GlovesItem = new LLUUID((string)h["gloves_item"]); - GlovesAsset = new LLUUID((string)h["gloves_asset"]); - UnderShirtItem = new LLUUID((string)h["undershirt_item"]); - UnderShirtAsset = new LLUUID((string)h["undershirt_asset"]); - UnderPantsItem = new LLUUID((string)h["underpants_item"]); - UnderPantsAsset = new LLUUID((string)h["underpants_asset"]); - SkirtItem = new LLUUID((string)h["skirt_item"]); - SkirtAsset = new LLUUID((string)h["skirt_asset"]); + BodyItem = new UUID((string)h["body_item"]); + BodyAsset = new UUID((string)h["body_asset"]); + SkinItem = new UUID((string)h["skin_item"]); + SkinAsset = new UUID((string)h["skin_asset"]); + HairItem = new UUID((string)h["hair_item"]); + HairAsset = new UUID((string)h["hair_asset"]); + EyesItem = new UUID((string)h["eyes_item"]); + EyesAsset = new UUID((string)h["eyes_asset"]); + ShirtItem = new UUID((string)h["shirt_item"]); + ShirtAsset = new UUID((string)h["shirt_asset"]); + PantsItem = new UUID((string)h["pants_item"]); + PantsAsset = new UUID((string)h["pants_asset"]); + ShoesItem = new UUID((string)h["shoes_item"]); + ShoesAsset = new UUID((string)h["shoes_asset"]); + SocksItem = new UUID((string)h["socks_item"]); + SocksAsset = new UUID((string)h["socks_asset"]); + JacketItem = new UUID((string)h["jacket_item"]); + JacketAsset = new UUID((string)h["jacket_asset"]); + GlovesItem = new UUID((string)h["gloves_item"]); + GlovesAsset = new UUID((string)h["gloves_asset"]); + UnderShirtItem = new UUID((string)h["undershirt_item"]); + UnderShirtAsset = new UUID((string)h["undershirt_asset"]); + UnderPantsItem = new UUID((string)h["underpants_item"]); + UnderPantsAsset = new UUID((string)h["underpants_asset"]); + SkirtItem = new UUID((string)h["skirt_item"]); + SkirtAsset = new UUID((string)h["skirt_asset"]); if (h.ContainsKey("attachments")) { @@ -427,7 +427,7 @@ namespace OpenSim.Framework throw new ArgumentNullException("info"); } - info.AddValue("m_scenePresenceID", m_owner.UUID); + info.AddValue("m_scenePresenceID", m_owner.Guid); info.AddValue("m_wearablesSerial", m_serial); info.AddValue("m_visualParams", m_visualparams); info.AddValue("m_wearables", m_wearables); @@ -435,7 +435,7 @@ namespace OpenSim.Framework info.AddValue("m_avatarHeight", m_avatarHeight); } - private Dictionary m_attachments = new Dictionary(); + private Dictionary m_attachments = new Dictionary(); public void SetAttachments(Hashtable data) { @@ -451,14 +451,14 @@ namespace OpenSim.Framework if (m_attachments.ContainsKey(attachpoint)) continue; - LLUUID item; - LLUUID asset; + UUID item; + UUID asset; Hashtable uuids = (Hashtable) e.Value; - LLUUID.TryParse(uuids["item"].ToString(), out item); - LLUUID.TryParse(uuids["asset"].ToString(), out asset); + UUID.TryParse(uuids["item"].ToString(), out item); + UUID.TryParse(uuids["asset"].ToString(), out asset); - LLUUID[] attachment = new LLUUID[2]; + UUID[] attachment = new UUID[2]; attachment[0] = item; attachment[1] = asset; @@ -473,10 +473,10 @@ namespace OpenSim.Framework Hashtable ret = new Hashtable(); - foreach (KeyValuePair kvp in m_attachments) + foreach (KeyValuePair kvp in m_attachments) { int attachpoint = kvp.Key; - LLUUID[] uuids = kvp.Value; + UUID[] uuids = kvp.Value; Hashtable data = new Hashtable(); data["item"] = uuids[0].ToString(); @@ -493,28 +493,28 @@ namespace OpenSim.Framework return new List(m_attachments.Keys); } - public LLUUID GetAttachedItem(int attachpoint) + public UUID GetAttachedItem(int attachpoint) { if (!m_attachments.ContainsKey(attachpoint)) - return LLUUID.Zero; + return UUID.Zero; return m_attachments[attachpoint][0]; } - public LLUUID GetAttachedAsset(int attachpoint) + public UUID GetAttachedAsset(int attachpoint) { if (!m_attachments.ContainsKey(attachpoint)) - return LLUUID.Zero; + return UUID.Zero; return m_attachments[attachpoint][1]; } - public void SetAttachment(int attachpoint, LLUUID item, LLUUID asset) + public void SetAttachment(int attachpoint, UUID item, UUID asset) { if (attachpoint == 0) return; - if (item == LLUUID.Zero) + if (item == UUID.Zero) { if (m_attachments.ContainsKey(attachpoint)) m_attachments.Remove(attachpoint); @@ -522,15 +522,15 @@ namespace OpenSim.Framework } if (!m_attachments.ContainsKey(attachpoint)) - m_attachments[attachpoint] = new LLUUID[2]; + m_attachments[attachpoint] = new UUID[2]; m_attachments[attachpoint][0] = item; m_attachments[attachpoint][1] = asset; } - public int GetAttachpoint(LLUUID itemID) + public int GetAttachpoint(UUID itemID) { - foreach (KeyValuePair kvp in m_attachments) + foreach (KeyValuePair kvp in m_attachments) { if (kvp.Value[0] == itemID) { @@ -540,7 +540,7 @@ namespace OpenSim.Framework return 0; } - public void DetachAttachment(LLUUID itemID) + public void DetachAttachment(UUID itemID) { int attachpoint = GetAttachpoint(itemID); @@ -552,7 +552,7 @@ namespace OpenSim.Framework { List strings = new List(); - foreach (KeyValuePair e in m_attachments) + foreach (KeyValuePair e in m_attachments) { strings.Add(e.Key.ToString()); strings.Add(e.Value[0].ToString()); @@ -572,13 +572,13 @@ namespace OpenSim.Framework while (strings.Length - i > 2) { int attachpoint = Int32.Parse(strings[i]); - LLUUID item = new LLUUID(strings[i+1]); - LLUUID asset = new LLUUID(strings[i+2]); + UUID item = new UUID(strings[i+1]); + UUID asset = new UUID(strings[i+2]); i += 3; if (!m_attachments.ContainsKey(attachpoint)) { - m_attachments[attachpoint] = new LLUUID[2]; + m_attachments[attachpoint] = new UUID[2]; m_attachments[attachpoint][0] = item; m_attachments[attachpoint][1] = asset; } diff --git a/OpenSim/Framework/AvatarPickerAvatar.cs b/OpenSim/Framework/AvatarPickerAvatar.cs index a7e986fa62..8aa4aa673b 100644 --- a/OpenSim/Framework/AvatarPickerAvatar.cs +++ b/OpenSim/Framework/AvatarPickerAvatar.cs @@ -25,14 +25,14 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class AvatarPickerAvatar { - public LLUUID AvatarID; + public UUID AvatarID; public string firstName; public string lastName; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/AvatarPickerReplyAgentDataArgs.cs b/OpenSim/Framework/AvatarPickerReplyAgentDataArgs.cs index 5fb06ebc7c..04ed570208 100644 --- a/OpenSim/Framework/AvatarPickerReplyAgentDataArgs.cs +++ b/OpenSim/Framework/AvatarPickerReplyAgentDataArgs.cs @@ -1,11 +1,11 @@ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class AvatarPickerReplyAgentDataArgs : EventArgs { - public LLUUID AgentID; - public LLUUID QueryID; + public UUID AgentID; + public UUID QueryID; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/AvatarPickerReplyDataArgs.cs b/OpenSim/Framework/AvatarPickerReplyDataArgs.cs index b15e4a5e02..723732bbf0 100644 --- a/OpenSim/Framework/AvatarPickerReplyDataArgs.cs +++ b/OpenSim/Framework/AvatarPickerReplyDataArgs.cs @@ -1,12 +1,12 @@ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class AvatarPickerReplyDataArgs : EventArgs { - public LLUUID AvatarID; + public UUID AvatarID; public byte[] FirstName; public byte[] LastName; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/AvatarWearable.cs b/OpenSim/Framework/AvatarWearable.cs index fdcc77605e..59e6a1b395 100644 --- a/OpenSim/Framework/AvatarWearable.cs +++ b/OpenSim/Framework/AvatarWearable.cs @@ -28,21 +28,21 @@ using System; using System.Runtime.Serialization; using System.Security.Permissions; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { [Serializable] public class AvatarWearable : ISerializable { - public LLUUID AssetID = new LLUUID("00000000-0000-0000-0000-000000000000"); - public LLUUID ItemID = new LLUUID("00000000-0000-0000-0000-000000000000"); + public UUID AssetID = new UUID("00000000-0000-0000-0000-000000000000"); + public UUID ItemID = new UUID("00000000-0000-0000-0000-000000000000"); public AvatarWearable() { } - public AvatarWearable(LLUUID itemId, LLUUID assetId) + public AvatarWearable(UUID itemId, UUID assetId) { AssetID = assetId; ItemID = itemId; @@ -56,8 +56,8 @@ namespace OpenSim.Framework throw new ArgumentNullException("info"); } - AssetID = new LLUUID((Guid) info.GetValue("AssetID", typeof (Guid))); - ItemID = new LLUUID((Guid) info.GetValue("ItemID", typeof (Guid))); + AssetID = new UUID((Guid) info.GetValue("AssetID", typeof (Guid))); + ItemID = new UUID((Guid) info.GetValue("ItemID", typeof (Guid))); //System.Console.WriteLine("AvatarWearable Deserialize END"); } @@ -71,17 +71,17 @@ namespace OpenSim.Framework { defaultWearables[i] = new AvatarWearable(); } - defaultWearables[0].AssetID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); - defaultWearables[0].ItemID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfaba9"); + defaultWearables[0].AssetID = new UUID("66c41e39-38f9-f75a-024e-585989bfab73"); + defaultWearables[0].ItemID = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9"); - defaultWearables[1].ItemID = new LLUUID("77c41e39-38f9-f75a-024e-585989bfabc9"); - defaultWearables[1].AssetID = new LLUUID("77c41e39-38f9-f75a-024e-585989bbabbb"); + defaultWearables[1].ItemID = new UUID("77c41e39-38f9-f75a-024e-585989bfabc9"); + defaultWearables[1].AssetID = new UUID("77c41e39-38f9-f75a-024e-585989bbabbb"); - defaultWearables[4].ItemID = new LLUUID("77c41e39-38f9-f75a-0000-585989bf0000"); - defaultWearables[4].AssetID = new LLUUID("00000000-38f9-1111-024e-222222111110"); + defaultWearables[4].ItemID = new UUID("77c41e39-38f9-f75a-0000-585989bf0000"); + defaultWearables[4].AssetID = new UUID("00000000-38f9-1111-024e-222222111110"); - defaultWearables[5].ItemID = new LLUUID("77c41e39-38f9-f75a-0000-5859892f1111"); - defaultWearables[5].AssetID = new LLUUID("00000000-38f9-1111-024e-222222111120"); + defaultWearables[5].ItemID = new UUID("77c41e39-38f9-f75a-0000-5859892f1111"); + defaultWearables[5].AssetID = new UUID("00000000-38f9-1111-024e-222222111120"); return defaultWearables; } } @@ -98,10 +98,10 @@ namespace OpenSim.Framework throw new ArgumentNullException("info"); } - info.AddValue("AssetID", AssetID.UUID); - info.AddValue("ItemID", ItemID.UUID); + info.AddValue("AssetID", AssetID.Guid); + info.AddValue("ItemID", ItemID.Guid); } #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/AvatarWearingArgs.cs b/OpenSim/Framework/AvatarWearingArgs.cs index e85df1c384..dde74f99ac 100644 --- a/OpenSim/Framework/AvatarWearingArgs.cs +++ b/OpenSim/Framework/AvatarWearingArgs.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -21,10 +21,10 @@ namespace OpenSim.Framework public class Wearable { - public LLUUID ItemID = new LLUUID("00000000-0000-0000-0000-000000000000"); + public UUID ItemID = new UUID("00000000-0000-0000-0000-000000000000"); public byte Type = 0; - public Wearable(LLUUID itemId, byte type) + public Wearable(UUID itemId, byte type) { ItemID = itemId; Type = type; @@ -33,4 +33,4 @@ namespace OpenSim.Framework #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Cache.cs b/OpenSim/Framework/Cache.cs index 427072df79..261e0f91d2 100644 --- a/OpenSim/Framework/Cache.cs +++ b/OpenSim/Framework/Cache.cs @@ -1,13 +1,13 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace Opensim.Framework { // The delegate we will use for performing fetch from backing store // - public delegate Object FetchDelegate(LLUUID index); - public delegate bool ExpireDelegate(LLUUID index); + public delegate Object FetchDelegate(UUID index); + public delegate bool ExpireDelegate(UUID index); // Strategy // @@ -37,14 +37,14 @@ namespace Opensim.Framework } // The base class of all cache objects. Implements comparison and sorting - // by the LLUUID member. + // by the UUID member. // // This is not abstract because we need to instantiate it briefly as a // method parameter // public class CacheItemBase : IEquatable, IComparable { - public LLUUID uuid; + public UUID uuid; public DateTime entered; public DateTime lastUsed; public DateTime expires = new DateTime(0); @@ -59,14 +59,14 @@ namespace Opensim.Framework { } - public CacheItemBase(LLUUID index) + public CacheItemBase(UUID index) { uuid = index; entered = DateTime.Now; lastUsed = entered; } - public CacheItemBase(LLUUID index, DateTime ttl) + public CacheItemBase(UUID index, DateTime ttl) { uuid = index; entered = DateTime.Now; @@ -96,23 +96,23 @@ namespace Opensim.Framework { private Object m_Data; - public MemoryCacheItem(LLUUID index) : + public MemoryCacheItem(UUID index) : base(index) { } - public MemoryCacheItem(LLUUID index, DateTime ttl) : + public MemoryCacheItem(UUID index, DateTime ttl) : base(index, ttl) { } - public MemoryCacheItem(LLUUID index, Object data) : + public MemoryCacheItem(UUID index, Object data) : base(index) { Store(data); } - public MemoryCacheItem(LLUUID index, DateTime ttl, Object data) : + public MemoryCacheItem(UUID index, DateTime ttl, Object data) : base(index, ttl) { Store(data); @@ -133,23 +133,23 @@ namespace Opensim.Framework // public class FileCacheItem : CacheItemBase { - public FileCacheItem(LLUUID index) : + public FileCacheItem(UUID index) : base(index) { } - public FileCacheItem(LLUUID index, DateTime ttl) : + public FileCacheItem(UUID index, DateTime ttl) : base(index, ttl) { } - public FileCacheItem(LLUUID index, Object data) : + public FileCacheItem(UUID index, Object data) : base(index) { Store(data); } - public FileCacheItem(LLUUID index, DateTime ttl, Object data) : + public FileCacheItem(UUID index, DateTime ttl, Object data) : base(index, ttl) { Store(data); @@ -173,8 +173,8 @@ namespace Opensim.Framework public class Cache { private List m_Index = new List(); - private Dictionary m_Lookup = - new Dictionary(); + private Dictionary m_Lookup = + new Dictionary(); private CacheStrategy m_Strategy; private CacheMedium m_Medium; @@ -285,7 +285,7 @@ namespace Opensim.Framework // Get an item from cache. Return the raw item, not it's data // - protected virtual CacheItemBase GetItem(LLUUID index) + protected virtual CacheItemBase GetItem(UUID index) { CacheItemBase item = null; @@ -312,7 +312,7 @@ namespace Opensim.Framework // Get an item from cache. Do not try to fetch from source if not // present. Just return null // - public virtual Object Get(LLUUID index) + public virtual Object Get(UUID index) { CacheItemBase item = GetItem(index); @@ -325,7 +325,7 @@ namespace Opensim.Framework // Fetch an object from backing store if not cached, serve from // cache if it is. // - public virtual Object Get(LLUUID index, FetchDelegate fetch) + public virtual Object Get(UUID index, FetchDelegate fetch) { Object item = Get(index); if (item != null) @@ -366,7 +366,7 @@ namespace Opensim.Framework return item.Retrieve(); } - public virtual void Store(LLUUID index, Object data) + public virtual void Store(UUID index, Object data) { Type container; @@ -384,12 +384,12 @@ namespace Opensim.Framework Store(index, data, container); } - public virtual void Store(LLUUID index, Object data, Type container) + public virtual void Store(UUID index, Object data, Type container) { Store(index, data, container, new Object[] { index }); } - public virtual void Store(LLUUID index, Object data, Type container, + public virtual void Store(UUID index, Object data, Type container, Object[] parameters) { Expire(false); @@ -493,7 +493,7 @@ namespace Opensim.Framework } } - public void Invalidate(LLUUID uuid) + public void Invalidate(UUID uuid) { if (!m_Lookup.ContainsKey(uuid)) return; diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs index 423a2087ac..ef40d94e25 100644 --- a/OpenSim/Framework/ChildAgentDataUpdate.cs +++ b/OpenSim/Framework/ChildAgentDataUpdate.cs @@ -26,6 +26,7 @@ */ using System; +using OpenMetaverse; namespace OpenSim.Framework { @@ -36,17 +37,17 @@ namespace OpenSim.Framework public Guid AgentID; public bool alwaysrun; public float AVHeight; - public sLLVector3 cameraPosition; + public Vector3 cameraPosition; public float drawdistance; public float godlevel; public uint GroupAccess; - public sLLVector3 Position; + public Vector3 Position; public ulong regionHandle; public byte[] throttles; - public sLLVector3 Velocity; + public Vector3 Velocity; public ChildAgentDataUpdate() { } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/ClientManager.cs b/OpenSim/Framework/ClientManager.cs index 091f308918..e99001b1d6 100644 --- a/OpenSim/Framework/ClientManager.cs +++ b/OpenSim/Framework/ClientManager.cs @@ -28,8 +28,8 @@ using System; using System.Collections.Generic; using System.Reflection; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using log4net; namespace OpenSim.Framework @@ -117,7 +117,7 @@ namespace OpenSim.Framework } } - public void CloseAllCircuits(LLUUID agentId) + public void CloseAllCircuits(UUID agentId) { uint[] circuits = GetAllCircuits(agentId); // We're using a for loop here so changes to the circuits don't cause it to completely fail. @@ -144,7 +144,7 @@ namespace OpenSim.Framework } // [Obsolete("Using Obsolete to drive development is invalid. Obsolete presumes that something new has already been created to replace this.")] - public uint[] GetAllCircuits(LLUUID agentId) + public uint[] GetAllCircuits(UUID agentId) { List circuits = new List(); // Wasteful, I know diff --git a/OpenSim/Framework/ColliderData.cs b/OpenSim/Framework/ColliderData.cs index 075a4e0c63..4e94d6da69 100644 --- a/OpenSim/Framework/ColliderData.cs +++ b/OpenSim/Framework/ColliderData.cs @@ -27,7 +27,7 @@ using System; using System.Collections; -using libsecondlife; +using OpenMetaverse; using System.Collections.Generic; namespace OpenSim.Framework @@ -35,12 +35,12 @@ namespace OpenSim.Framework public class DetectedObject { public DetectedObject() { } - public LLUUID groupUUID = LLUUID.Zero; - public LLUUID ownerUUID = LLUUID.Zero; - public LLUUID keyUUID = LLUUID.Zero; - public LLVector3 posVector = LLVector3.Zero; - public LLQuaternion rotQuat = LLQuaternion.Identity; - public LLVector3 velVector = LLVector3.Zero; + public UUID groupUUID = UUID.Zero; + public UUID ownerUUID = UUID.Zero; + public UUID keyUUID = UUID.Zero; + public Vector3 posVector = Vector3.Zero; + public Quaternion rotQuat = Quaternion.Identity; + public Vector3 velVector = Vector3.Zero; public string nameStr = String.Empty; public int colliderType = 0; } diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index e924b3f2c8..3e88eba699 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs @@ -29,14 +29,14 @@ using System; using System.Collections.Generic; using System.Reflection; using System.Threading; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using log4net; using OpenSim.Framework.Statistics; namespace OpenSim.Framework.Communications.Cache { - public delegate void AssetRequestCallback(LLUUID assetID, AssetBase asset); + public delegate void AssetRequestCallback(UUID assetID, AssetBase asset); /// /// Manages local cache of assets and their sending to viewers. @@ -58,17 +58,17 @@ namespace OpenSim.Framework.Communications.Cache /// /// The cache of assets. This does not include textures. /// - private Dictionary Assets; + private Dictionary Assets; /// /// The cache of textures. /// - private Dictionary Textures; + private Dictionary Textures; /// /// Assets requests which are waiting for asset server data. This includes texture requests /// - private Dictionary RequestedAssets; + private Dictionary RequestedAssets; /// /// Asset requests with data which are ready to be sent back to requesters. This includes textures. @@ -78,7 +78,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// Until the asset request is fulfilled, each asset request is associated with a list of requesters /// - private Dictionary RequestLists; + private Dictionary RequestLists; private readonly IAssetServer m_assetServer; @@ -155,12 +155,12 @@ namespace OpenSim.Framework.Communications.Cache /// private void Initialize() { - Assets = new Dictionary(); - Textures = new Dictionary(); + Assets = new Dictionary(); + Textures = new Dictionary(); AssetRequests = new List(); - RequestedAssets = new Dictionary(); - RequestLists = new Dictionary(); + RequestedAssets = new Dictionary(); + RequestLists = new Dictionary(); } /// @@ -207,7 +207,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - //private AssetBase GetCachedAsset(LLUUID assetId) + //private AssetBase GetCachedAsset(UUID assetId) //{ // AssetBase asset = null; @@ -223,7 +223,7 @@ namespace OpenSim.Framework.Communications.Cache // return asset; //} - private bool TryGetCachedAsset(LLUUID assetId, out AssetBase asset) + private bool TryGetCachedAsset(UUID assetId, out AssetBase asset) { if (Textures.ContainsKey(assetId)) { @@ -248,7 +248,7 @@ namespace OpenSim.Framework.Communications.Cache /// A callback invoked when the asset has either been found or not found. /// If the asset was found this is called with the asset UUID and the asset data /// If the asset was not found this is still called with the asset UUID but with a null asset data reference - public void GetAsset(LLUUID assetId, AssetRequestCallback callback, bool isTexture) + public void GetAsset(UUID assetId, AssetRequestCallback callback, bool isTexture) { //m_log.DebugFormat("[ASSET CACHE]: Requesting {0} {1}", isTexture ? "texture" : "asset", assetId); @@ -308,7 +308,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// null if the asset could not be retrieved - public AssetBase GetAsset(LLUUID assetID, bool isTexture) + public AssetBase GetAsset(UUID assetID, bool isTexture) { // I'm not going over 3 seconds since this will be blocking processing of all the other inbound // packets from the client. @@ -390,7 +390,7 @@ namespace OpenSim.Framework.Communications.Cache /// this is a stop gap measure until we have such a thing. /// - public void ExpireAsset(LLUUID uuid) + public void ExpireAsset(UUID uuid) { // uuid is unique, so no need to worry about it showing up // in the 2 caches differently. Also, locks are probably @@ -495,7 +495,7 @@ namespace OpenSim.Framework.Communications.Cache } // See IAssetReceiver - public void AssetNotFound(LLUUID assetID, bool IsTexture) + public void AssetNotFound(UUID assetID, bool IsTexture) { //m_log.WarnFormat("[ASSET CACHE]: AssetNotFound for {0}", assetID); @@ -567,17 +567,17 @@ namespace OpenSim.Framework.Communications.Cache /// public void AddAssetRequest(IClientAPI userInfo, TransferRequestPacket transferRequest) { - LLUUID requestID = null; + UUID requestID = null; byte source = 2; if (transferRequest.TransferInfo.SourceType == 2) { //direct asset request - requestID = new LLUUID(transferRequest.TransferInfo.Params, 0); + requestID = new UUID(transferRequest.TransferInfo.Params, 0); } else if (transferRequest.TransferInfo.SourceType == 3) { //inventory asset request - requestID = new LLUUID(transferRequest.TransferInfo.Params, 80); + requestID = new UUID(transferRequest.TransferInfo.Params, 80); source = 3; //Console.WriteLine("asset request " + requestID); } @@ -678,10 +678,10 @@ namespace OpenSim.Framework.Communications.Cache public class AssetRequest { public IClientAPI RequestUser; - public LLUUID RequestAssetID; + public UUID RequestAssetID; public AssetInfo AssetInf; public TextureImage ImageInfo; - public LLUUID TransferRequestID; + public UUID TransferRequestID; public long DataPointer = 0; public int NumPackets = 0; public int PacketCounter = 0; @@ -731,10 +731,10 @@ namespace OpenSim.Framework.Communications.Cache public class AssetRequestsList { - public LLUUID AssetID; + public UUID AssetID; public List Requests = new List(); - public AssetRequestsList(LLUUID assetID) + public AssetRequestsList(UUID assetID) { AssetID = assetID; } @@ -742,10 +742,10 @@ namespace OpenSim.Framework.Communications.Cache public class NewAssetRequest { - public LLUUID AssetID; + public UUID AssetID; public AssetRequestCallback Callback; - public NewAssetRequest(LLUUID assetID, AssetRequestCallback callback) + public NewAssetRequest(UUID assetID, AssetRequestCallback callback) { AssetID = assetID; Callback = callback; diff --git a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs index 2c8e685894..9f4f4807d5 100644 --- a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs +++ b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs @@ -28,7 +28,7 @@ using System; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework.AssetLoader.Filesystem; using OpenSim.Framework.Statistics; @@ -146,7 +146,7 @@ namespace OpenSim.Framework.Communications.Cache m_receiver = receiver; } - public void RequestAsset(LLUUID assetID, bool isTexture) + public void RequestAsset(UUID assetID, bool isTexture) { AssetRequest req = new AssetRequest(); req.AssetID = assetID; diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 8e3be81426..339bb313f0 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -30,24 +30,24 @@ using System.Collections.Generic; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; namespace OpenSim.Framework.Communications.Cache { internal delegate void AddItemDelegate(InventoryItemBase itemInfo); internal delegate void UpdateItemDelegate(InventoryItemBase itemInfo); - internal delegate void DeleteItemDelegate(LLUUID itemID); + internal delegate void DeleteItemDelegate(UUID itemID); - internal delegate void CreateFolderDelegate(string folderName, LLUUID folderID, ushort folderType, LLUUID parentID); - internal delegate void MoveFolderDelegate(LLUUID folderID, LLUUID parentID); - internal delegate void PurgeFolderDelegate(LLUUID folderID); - internal delegate void UpdateFolderDelegate(string name, LLUUID folderID, ushort type, LLUUID parentID); + internal delegate void CreateFolderDelegate(string folderName, UUID folderID, ushort folderType, UUID parentID); + internal delegate void MoveFolderDelegate(UUID folderID, UUID parentID); + internal delegate void PurgeFolderDelegate(UUID folderID); + internal delegate void UpdateFolderDelegate(string name, UUID folderID, ushort type, UUID parentID); internal delegate void SendInventoryDescendentsDelegate( - IClientAPI client, LLUUID folderID, bool fetchFolders, bool fetchItems); + IClientAPI client, UUID folderID, bool fetchFolders, bool fetchItems); - public delegate void OnItemReceivedDelegate(LLUUID itemID); + public delegate void OnItemReceivedDelegate(UUID itemID); /// /// Stores user profile and inventory data received from backend services for a particular user. @@ -84,12 +84,12 @@ namespace OpenSim.Framework.Communications.Cache public InventoryFolderImpl RootFolder { get { return m_rootFolder; } } private InventoryFolderImpl m_rootFolder; - public LLUUID SessionID + public UUID SessionID { get { return m_session_id; } set { m_session_id = value; } } - private LLUUID m_session_id = LLUUID.Zero; + private UUID m_session_id = UUID.Zero; /// /// Constructor @@ -127,9 +127,9 @@ namespace OpenSim.Framework.Communications.Cache /// Helper function for InventoryReceive() - Store a folder temporarily until we've received entire folder list /// /// - private void AddFolderToDictionary(InventoryFolderImpl folder, IDictionary> dictionary) + private void AddFolderToDictionary(InventoryFolderImpl folder, IDictionary> dictionary) { - LLUUID parentFolderId = folder.ParentID; + UUID parentFolderId = folder.ParentID; if (dictionary.ContainsKey(parentFolderId)) dictionary[parentFolderId].Add(folder); @@ -148,9 +148,9 @@ namespace OpenSim.Framework.Communications.Cache /// heirarchy /// /// - /// A + /// A /// - private void ResolveReceivedFolders(InventoryFolderImpl parentFolder, IDictionary> folderDictionary) + private void ResolveReceivedFolders(InventoryFolderImpl parentFolder, IDictionary> folderDictionary) { if (folderDictionary.ContainsKey(parentFolder.ID)) { @@ -208,19 +208,19 @@ namespace OpenSim.Framework.Communications.Cache try { // collection of all received folders, indexed by their parent ID - IDictionary> receivedFolders = - new Dictionary>(); + IDictionary> receivedFolders = + new Dictionary>(); // Take all received folders, find the root folder, and put ther rest into // the pendingCategorizationFolders collection foreach (InventoryFolderImpl folder in folders) AddFolderToDictionary(folder, receivedFolders); - if (!receivedFolders.ContainsKey(LLUUID.Zero)) + if (!receivedFolders.ContainsKey(UUID.Zero)) throw new Exception("Database did not return a root inventory folder"); else { - IList rootFolderList = receivedFolders[LLUUID.Zero]; + IList rootFolderList = receivedFolders[UUID.Zero]; m_rootFolder = rootFolderList[0]; if (rootFolderList.Count > 1) { @@ -231,7 +231,7 @@ namespace OpenSim.Framework.Communications.Cache rootFolderList[i].ID, RootFolder.ID); } } - receivedFolders.Remove(LLUUID.Zero); + receivedFolders.Remove(UUID.Zero); } // Now take the pendingCategorizationFolders collection, and turn that into a tree, @@ -240,7 +240,7 @@ namespace OpenSim.Framework.Communications.Cache ResolveReceivedFolders(RootFolder, receivedFolders); // Generate a warning for folders that are not part of the heirarchy - foreach (KeyValuePair> folderList in receivedFolders) + foreach (KeyValuePair> folderList in receivedFolders) { foreach (InventoryFolderImpl folder in folderList.Value) m_log.WarnFormat("[INVENTORY CACHE]: Malformed Database: Unresolved Pending Folder {0}", folder.Name); @@ -314,7 +314,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public bool CreateFolder(string folderName, LLUUID folderID, ushort folderType, LLUUID parentID) + public bool CreateFolder(string folderName, UUID folderID, ushort folderType, UUID parentID) { // m_log.DebugFormat( // "[AGENT INVENTORY]: Creating inventory folder {0} {1} for {2} {3}", folderID, folderName, remoteClient.Name, remoteClient.AgentId); @@ -389,7 +389,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public bool UpdateFolder(string name, LLUUID folderID, ushort type, LLUUID parentID) + public bool UpdateFolder(string name, UUID folderID, ushort type, UUID parentID) { // m_log.DebugFormat( // "[AGENT INVENTORY]: Updating inventory folder {0} {1} for {2} {3}", folderID, name, remoteClient.Name, remoteClient.AgentId); @@ -440,7 +440,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public bool MoveFolder(LLUUID folderID, LLUUID parentID) + public bool MoveFolder(UUID folderID, UUID parentID) { // m_log.DebugFormat( // "[AGENT INVENTORY]: Moving inventory folder {0} into folder {1} for {2} {3}", @@ -487,7 +487,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public bool PurgeFolder(LLUUID folderID) + public bool PurgeFolder(UUID folderID) { // m_log.InfoFormat("[AGENT INVENTORY]: Purging folder {0} for {1} uuid {2}", // folderID, remoteClient.Name, remoteClient.AgentId); @@ -542,7 +542,7 @@ namespace OpenSim.Framework.Communications.Cache { if (m_hasReceivedInventory) { - if (item.Folder == LLUUID.Zero) + if (item.Folder == UUID.Zero) { InventoryFolderImpl f = FindFolderForType(item.AssetType); if (f != null) @@ -607,7 +607,7 @@ namespace OpenSim.Framework.Communications.Cache /// true on a successful delete or a if the request is queued. /// Returns false on an immediate failure /// - public bool DeleteItem(LLUUID itemID) + public bool DeleteItem(UUID itemID) { if (m_hasReceivedInventory) { @@ -655,7 +655,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// true if the request was queued or successfully processed, false otherwise - public bool SendInventoryDecendents(IClientAPI client, LLUUID folderID, bool fetchFolders, bool fetchItems) + public bool SendInventoryDecendents(IClientAPI client, UUID folderID, bool fetchFolders, bool fetchItems) { if (m_hasReceivedInventory) { diff --git a/OpenSim/Framework/Communications/Cache/FileAssetClient.cs b/OpenSim/Framework/Communications/Cache/FileAssetClient.cs index 3c74d4dd6b..e793febfb5 100644 --- a/OpenSim/Framework/Communications/Cache/FileAssetClient.cs +++ b/OpenSim/Framework/Communications/Cache/FileAssetClient.cs @@ -18,11 +18,13 @@ namespace OpenSim.Framework.Communications.Cache } public override void StoreAsset(AssetBase asset) { - string cdir = m_dir + Path.DirectorySeparatorChar + asset.FullID.Data[0] - + Path.DirectorySeparatorChar + asset.FullID.Data[1]; + byte[] idBytes = asset.FullID.Guid.ToByteArray(); - if (!Directory.Exists(m_dir + Path.DirectorySeparatorChar + asset.FullID.Data[0])) - Directory.CreateDirectory(m_dir + Path.DirectorySeparatorChar + asset.FullID.Data[0]); + string cdir = m_dir + Path.DirectorySeparatorChar + idBytes[0] + + Path.DirectorySeparatorChar + idBytes[1]; + + if (!Directory.Exists(m_dir + Path.DirectorySeparatorChar + idBytes[0])) + Directory.CreateDirectory(m_dir + Path.DirectorySeparatorChar + idBytes[0]); if (!Directory.Exists(cdir)) Directory.CreateDirectory(cdir); @@ -41,8 +43,10 @@ namespace OpenSim.Framework.Communications.Cache protected override AssetBase GetAsset(AssetRequest req) { - string cdir = m_dir + Path.DirectorySeparatorChar + req.AssetID.Data[0] - + Path.DirectorySeparatorChar + req.AssetID.Data[1]; + byte[] idBytes = req.AssetID.Guid.ToByteArray(); + + string cdir = m_dir + Path.DirectorySeparatorChar + idBytes[0] + + Path.DirectorySeparatorChar + idBytes[1]; if (File.Exists(cdir + Path.DirectorySeparatorChar + req.AssetID + ".xml")) { FileStream x = File.OpenRead(cdir + Path.DirectorySeparatorChar + req.AssetID + ".xml"); diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs index 61cfc1a783..debcbfb10b 100644 --- a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs +++ b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; //using System.Reflection; //using log4net; @@ -43,12 +43,12 @@ namespace OpenSim.Framework.Communications.Cache /// /// Items that are contained in this folder /// - public Dictionary Items = new Dictionary(); + public Dictionary Items = new Dictionary(); /// /// Child folders that are contained in this folder /// - public Dictionary SubFolders = new Dictionary(); + public Dictionary SubFolders = new Dictionary(); // Constructors public InventoryFolderImpl(InventoryFolderBase folderbase) @@ -72,7 +72,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// The newly created subfolder. Returns null if the folder already exists - public InventoryFolderImpl CreateChildFolder(LLUUID folderID, string folderName, ushort type) + public InventoryFolderImpl CreateChildFolder(UUID folderID, string folderName, ushort type) { lock (SubFolders) { @@ -112,7 +112,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// null if the item is not found - public InventoryItemBase FindItem(LLUUID itemID) + public InventoryItemBase FindItem(UUID itemID) { lock (Items) { @@ -143,7 +143,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public bool DeleteItem(LLUUID itemID) + public bool DeleteItem(UUID itemID) { bool found = false; @@ -177,7 +177,7 @@ namespace OpenSim.Framework.Communications.Cache /// first. /// /// The requested folder if it exists, null if it does not. - public InventoryFolderImpl FindFolder(LLUUID folderID) + public InventoryFolderImpl FindFolder(UUID folderID) { if (folderID == ID) return this; diff --git a/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs b/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs index 1ff63504c0..7e561b5776 100644 --- a/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs +++ b/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; @@ -44,29 +44,29 @@ namespace OpenSim.Framework.Communications.Cache { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private LLUUID libOwner = new LLUUID("11111111-1111-0000-0000-000100bba000"); + private UUID libOwner = new UUID("11111111-1111-0000-0000-000100bba000"); /// /// Holds the root library folder and all its descendents. This is really only used during inventory /// setup so that we don't have to repeatedly search the tree of library folders. /// - protected Dictionary libraryFolders - = new Dictionary(); + protected Dictionary libraryFolders + = new Dictionary(); public LibraryRootFolder() { m_log.Info("[LIBRARY INVENTORY]: Loading library inventory"); Owner = libOwner; - ID = new LLUUID("00000112-000f-0000-0000-000100bba000"); + ID = new UUID("00000112-000f-0000-0000-000100bba000"); Name = "OpenSim Library"; - ParentID = LLUUID.Zero; + ParentID = UUID.Zero; Type = (short) 8; Version = (ushort) 1; libraryFolders.Add(ID, this); - LoadLibraries(Path.Combine(Util.inventoryDir(), "Libraries.xml")); + LoadLibraries(Path.Combine(Util.inventoryDir(), "Libraries.Xml")); // CreateLibraryItems(); } @@ -81,40 +81,40 @@ namespace OpenSim.Framework.Communications.Cache //private void CreateLibraryItems() //{ // InventoryItemBase item = - // CreateItem(new LLUUID("66c41e39-38f9-f75a-024e-585989bfaba9"), - // new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"), "Default Shape", "Default Shape", + // CreateItem(new UUID("66c41e39-38f9-f75a-024e-585989bfaba9"), + // new UUID("66c41e39-38f9-f75a-024e-585989bfab73"), "Default Shape", "Default Shape", // (int) AssetType.Bodypart, (int) InventoryType.Wearable, folderID); // item.inventoryCurrentPermissions = 0; // item.inventoryNextPermissions = 0; // Items.Add(item.inventoryID, item); // item = - // CreateItem(new LLUUID("77c41e39-38f9-f75a-024e-585989bfabc9"), - // new LLUUID("77c41e39-38f9-f75a-024e-585989bbabbb"), "Default Skin", "Default Skin", + // CreateItem(new UUID("77c41e39-38f9-f75a-024e-585989bfabc9"), + // new UUID("77c41e39-38f9-f75a-024e-585989bbabbb"), "Default Skin", "Default Skin", // (int) AssetType.Bodypart, (int) InventoryType.Wearable, folderID); // item.inventoryCurrentPermissions = 0; // item.inventoryNextPermissions = 0; // Items.Add(item.inventoryID, item); // item = - // CreateItem(new LLUUID("77c41e39-38f9-f75a-0000-585989bf0000"), - // new LLUUID("00000000-38f9-1111-024e-222222111110"), "Default Shirt", "Default Shirt", + // CreateItem(new UUID("77c41e39-38f9-f75a-0000-585989bf0000"), + // new UUID("00000000-38f9-1111-024e-222222111110"), "Default Shirt", "Default Shirt", // (int) AssetType.Clothing, (int) InventoryType.Wearable, folderID); // item.inventoryCurrentPermissions = 0; // item.inventoryNextPermissions = 0; // Items.Add(item.inventoryID, item); // item = - // CreateItem(new LLUUID("77c41e39-38f9-f75a-0000-5859892f1111"), - // new LLUUID("00000000-38f9-1111-024e-222222111120"), "Default Pants", "Default Pants", + // CreateItem(new UUID("77c41e39-38f9-f75a-0000-5859892f1111"), + // new UUID("00000000-38f9-1111-024e-222222111120"), "Default Pants", "Default Pants", // (int) AssetType.Clothing, (int) InventoryType.Wearable, folderID); // item.inventoryCurrentPermissions = 0; // item.inventoryNextPermissions = 0; // Items.Add(item.inventoryID, item); //} - public InventoryItemBase CreateItem(LLUUID inventoryID, LLUUID assetID, string name, string description, - int assetType, int invType, LLUUID parentFolderID) + public InventoryItemBase CreateItem(UUID inventoryID, UUID assetID, string name, string description, + int assetType, int invType, UUID parentFolderID) { InventoryItemBase item = new InventoryItemBase(); item.Owner = libOwner; @@ -173,9 +173,9 @@ namespace OpenSim.Framework.Communications.Cache { InventoryFolderImpl folderInfo = new InventoryFolderImpl(); - folderInfo.ID = new LLUUID(config.GetString("folderID", ID.ToString())); + folderInfo.ID = new UUID(config.GetString("folderID", ID.ToString())); folderInfo.Name = config.GetString("name", "unknown"); - folderInfo.ParentID = new LLUUID(config.GetString("parentFolderID", ID.ToString())); + folderInfo.ParentID = new UUID(config.GetString("parentFolderID", ID.ToString())); folderInfo.Type = (short)config.GetInt("type", 8); folderInfo.Owner = libOwner; @@ -207,9 +207,9 @@ namespace OpenSim.Framework.Communications.Cache InventoryItemBase item = new InventoryItemBase(); item.Owner = libOwner; item.Creator = libOwner; - item.ID = new LLUUID(config.GetString("inventoryID", ID.ToString())); - item.AssetID = new LLUUID(config.GetString("assetID", item.ID.ToString())); - item.Folder = new LLUUID(config.GetString("folderID", ID.ToString())); + item.ID = new UUID(config.GetString("inventoryID", ID.ToString())); + item.AssetID = new UUID(config.GetString("assetID", item.ID.ToString())); + item.Folder = new UUID(config.GetString("folderID", ID.ToString())); item.Name = config.GetString("name", String.Empty); item.Description = config.GetString("description", item.Name); item.InvType = config.GetInt("inventoryType", 0); @@ -270,7 +270,7 @@ namespace OpenSim.Framework.Communications.Cache /// methods in the superclass /// /// - public Dictionary RequestSelfAndDescendentFolders() + public Dictionary RequestSelfAndDescendentFolders() { return libraryFolders; } diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs index 45f6c7e3b2..3675053b87 100644 --- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs +++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; namespace OpenSim.Framework.Communications.Cache @@ -49,7 +49,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// Each user has a cached profile. /// - private readonly Dictionary m_userProfiles = new Dictionary(); + private readonly Dictionary m_userProfiles = new Dictionary(); public readonly LibraryRootFolder libraryRoot = new LibraryRootFolder(); @@ -63,9 +63,9 @@ namespace OpenSim.Framework.Communications.Cache /// A new user has moved into a region in this instance so retrieve their profile from the user service. /// /// - public void AddNewUser(LLUUID userID) + public void AddNewUser(UUID userID) { - if (userID == LLUUID.Zero) + if (userID == UUID.Zero) return; m_log.DebugFormat("[USER CACHE]: Adding user profile for {0}", userID); GetUserDetails(userID); @@ -76,7 +76,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// true if the user was successfully removed, false otherwise - public bool RemoveUser(LLUUID userId) + public bool RemoveUser(UUID userId) { lock (m_userProfiles) { @@ -99,7 +99,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public void RequestInventoryForUser(LLUUID userID) + public void RequestInventoryForUser(UUID userID) { CachedUserInfo userInfo = GetUserDetails(userID); if (userInfo != null) @@ -130,9 +130,9 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// null if no user details are found - public CachedUserInfo GetUserDetails(LLUUID userID) + public CachedUserInfo GetUserDetails(UUID userID) { - if (userID == LLUUID.Zero) + if (userID == UUID.Zero) return null; lock (m_userProfiles) @@ -164,9 +164,9 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public void PreloadUserCache(LLUUID userID, UserProfileData userData) + public void PreloadUserCache(UUID userID, UserProfileData userData) { - if (userID == LLUUID.Zero) + if (userID == UUID.Zero) return; lock (m_userProfiles) @@ -192,8 +192,8 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public void HandleCreateInventoryFolder(IClientAPI remoteClient, LLUUID folderID, ushort folderType, - string folderName, LLUUID parentID) + public void HandleCreateInventoryFolder(IClientAPI remoteClient, UUID folderID, ushort folderType, + string folderName, UUID parentID) { CachedUserInfo userProfile; @@ -226,8 +226,8 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public void HandleUpdateInventoryFolder(IClientAPI remoteClient, LLUUID folderID, ushort type, string name, - LLUUID parentID) + public void HandleUpdateInventoryFolder(IClientAPI remoteClient, UUID folderID, ushort type, string name, + UUID parentID) { // m_log.DebugFormat( // "[AGENT INVENTORY]: Updating inventory folder {0} {1} for {2} {3}", folderID, name, remoteClient.Name, remoteClient.AgentId); @@ -257,7 +257,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public void HandleMoveInventoryFolder(IClientAPI remoteClient, LLUUID folderID, LLUUID parentID) + public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID) { CachedUserInfo userProfile; @@ -287,7 +287,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public void HandleFetchInventoryDescendents(IClientAPI remoteClient, LLUUID folderID, LLUUID ownerID, + public void HandleFetchInventoryDescendents(IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder) { // FIXME MAYBE: We're not handling sortOrder! @@ -327,7 +327,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// null if the inventory look up failed - public List HandleFetchInventoryDescendentsCAPS(LLUUID agentID, LLUUID folderID, LLUUID ownerID, + public List HandleFetchInventoryDescendentsCAPS(UUID agentID, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder) { // m_log.DebugFormat( @@ -405,7 +405,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public void HandlePurgeInventoryDescendents(IClientAPI remoteClient, LLUUID folderID) + public void HandlePurgeInventoryDescendents(IClientAPI remoteClient, UUID folderID) { CachedUserInfo userProfile; @@ -426,7 +426,7 @@ namespace OpenSim.Framework.Communications.Cache } } - public void HandleFetchInventory(IClientAPI remoteClient, LLUUID itemID, LLUUID ownerID) + public void HandleFetchInventory(IClientAPI remoteClient, UUID itemID, UUID ownerID) { if (ownerID == libraryRoot.Owner) { diff --git a/OpenSim/Framework/Communications/Capabilities/Caps.cs b/OpenSim/Framework/Communications/Capabilities/Caps.cs index a7486d6d6a..e82a5e9e5d 100644 --- a/OpenSim/Framework/Communications/Capabilities/Caps.cs +++ b/OpenSim/Framework/Communications/Capabilities/Caps.cs @@ -30,7 +30,7 @@ using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework.Communications.Cache; using OpenSim.Framework.Servers; @@ -40,21 +40,21 @@ using OpenSim.Region.Interfaces; namespace OpenSim.Framework.Communications.Capabilities { public delegate void UpLoadedAsset( - string assetName, string description, LLUUID assetID, LLUUID inventoryItem, LLUUID parentFolder, + string assetName, string description, UUID assetID, UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType, string assetType); - public delegate LLUUID UpdateItem(LLUUID itemID, byte[] data); + public delegate UUID UpdateItem(UUID itemID, byte[] data); - public delegate void UpdateTaskScript(LLUUID itemID, LLUUID primID, bool isScriptRunning, byte[] data); + public delegate void UpdateTaskScript(UUID itemID, UUID primID, bool isScriptRunning, byte[] data); - public delegate void NewInventoryItem(LLUUID userID, InventoryItemBase item); + public delegate void NewInventoryItem(UUID userID, InventoryItemBase item); - public delegate LLUUID ItemUpdatedCallback(LLUUID userID, LLUUID itemID, byte[] data); + public delegate UUID ItemUpdatedCallback(UUID userID, UUID itemID, byte[] data); - public delegate void TaskScriptUpdatedCallback(LLUUID userID, LLUUID itemID, LLUUID primID, + public delegate void TaskScriptUpdatedCallback(UUID userID, UUID itemID, UUID primID, bool isScriptRunning, byte[] data); - public delegate List FetchInventoryDescendentsCAPS(LLUUID agentID, LLUUID folderID, LLUUID ownerID, + public delegate List FetchInventoryDescendentsCAPS(UUID agentID, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder); /// @@ -62,7 +62,7 @@ namespace OpenSim.Framework.Communications.Capabilities /// we can popup a message on the user's client if the inventory service has permanently failed). But I didn't want /// to just pass the whole Scene into CAPS. /// - public delegate IClientAPI GetClientDelegate(LLUUID agentID); + public delegate IClientAPI GetClientDelegate(UUID agentID); public class Caps { @@ -97,7 +97,7 @@ namespace OpenSim.Framework.Communications.Capabilities //private string eventQueue = "0100/"; private BaseHttpServer m_httpListener; - private LLUUID m_agentID; + private UUID m_agentID; private AssetCache m_assetCache; private int m_eventQueueCount = 1; private Queue m_capsEventQueue = new Queue(); @@ -113,7 +113,7 @@ namespace OpenSim.Framework.Communications.Capabilities public GetClientDelegate GetClient = null; public Caps(AssetCache assetCache, BaseHttpServer httpServer, string httpListen, uint httpPort, string capsPath, - LLUUID agent, bool dumpAssetsToFile, string regionName) + UUID agent, bool dumpAssetsToFile, string regionName) { m_assetCache = assetCache; m_capsObjectPath = capsPath; @@ -258,7 +258,7 @@ namespace OpenSim.Framework.Communications.Capabilities Hashtable hash = new Hashtable(); try { - hash = (Hashtable)LLSD.LLSDDeserialize(Helpers.StringToField(request)); + hash = (Hashtable)LLSD.LLSDDeserialize(Utils.StringToBytes(request)); } catch (LLSD.LLSDParseException pe) { @@ -388,7 +388,7 @@ namespace OpenSim.Framework.Communications.Capabilities llsdItem.permissions.creator_id = invItem.Creator; llsdItem.permissions.base_mask = (int)invItem.CurrentPermissions; llsdItem.permissions.everyone_mask = (int)invItem.EveryOnePermissions; - llsdItem.permissions.group_id = LLUUID.Zero; + llsdItem.permissions.group_id = UUID.Zero; llsdItem.permissions.group_mask = 0; llsdItem.permissions.is_owner_group = false; llsdItem.permissions.next_owner_mask = (int)invItem.NextPermissions; @@ -423,7 +423,7 @@ namespace OpenSim.Framework.Communications.Capabilities LLSDMapLayer mapLayer = new LLSDMapLayer(); mapLayer.Right = 5000; mapLayer.Top = 5000; - mapLayer.ImageID = new LLUUID("00000000-0000-1111-9999-000000000006"); + mapLayer.ImageID = new UUID("00000000-0000-1111-9999-000000000006"); return mapLayer; } @@ -522,7 +522,7 @@ namespace OpenSim.Framework.Communications.Capabilities m_log.Debug("[CAPS]: ScriptTaskInventory Request in region: " + m_regionName); //m_log.DebugFormat("[CAPS]: request: {0}, path: {1}, param: {2}", request, path, param); - Hashtable hash = (Hashtable) LLSD.LLSDDeserialize(Helpers.StringToField(request)); + Hashtable hash = (Hashtable) LLSD.LLSDDeserialize(Utils.StringToBytes(request)); LLSDTaskScriptUpdate llsdUpdateRequest = new LLSDTaskScriptUpdate(); LLSDHelpers.DeserialiseLLSDMap(hash, llsdUpdateRequest); @@ -573,8 +573,8 @@ namespace OpenSim.Framework.Communications.Capabilities OSHttpRequest httpRequest, OSHttpResponse httpResponse) { m_log.Debug("[CAPS]: NoteCardAgentInventory Request in region: " + m_regionName); - //libsecondlife.StructuredData.LLSDMap hash = (libsecondlife.StructuredData.LLSDMap)libsecondlife.StructuredData.LLSDParser.DeserializeBinary(Helpers.StringToField(request)); - Hashtable hash = (Hashtable) LLSD.LLSDDeserialize(Helpers.StringToField(request)); + //OpenMetaverse.StructuredData.LLSDMap hash = (OpenMetaverse.StructuredData.LLSDMap)OpenMetaverse.StructuredData.LLSDParser.DeserializeBinary(Utils.StringToBytes(request)); + Hashtable hash = (Hashtable) LLSD.LLSDDeserialize(Utils.StringToBytes(request)); LLSDItemUpdate llsdRequest = new LLSDItemUpdate(); LLSDHelpers.DeserialiseLLSDMap(hash, llsdRequest); @@ -636,9 +636,9 @@ namespace OpenSim.Framework.Communications.Capabilities string assetName = llsdRequest.name; string assetDes = llsdRequest.description; string capsBase = "/CAPS/" + m_capsObjectPath; - LLUUID newAsset = LLUUID.Random(); - LLUUID newInvItem = LLUUID.Random(); - LLUUID parentFolder = llsdRequest.folder_id; + UUID newAsset = UUID.Random(); + UUID newInvItem = UUID.Random(); + UUID parentFolder = llsdRequest.folder_id; string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); AssetUploader uploader = @@ -662,8 +662,8 @@ namespace OpenSim.Framework.Communications.Capabilities /// /// /// - public void UploadCompleteHandler(string assetName, string assetDescription, LLUUID assetID, - LLUUID inventoryItem, LLUUID parentFolder, byte[] data, string inventoryType, + public void UploadCompleteHandler(string assetName, string assetDescription, UUID assetID, + UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType, string assetType) { sbyte assType = 0; @@ -728,14 +728,14 @@ namespace OpenSim.Framework.Communications.Capabilities /// Item to update /// New asset data /// - public LLUUID ItemUpdated(LLUUID itemID, byte[] data) + public UUID ItemUpdated(UUID itemID, byte[] data) { if (ItemUpdatedCall != null) { return ItemUpdatedCall(m_agentID, itemID, data); } - return LLUUID.Zero; + return UUID.Zero; } /// @@ -745,7 +745,7 @@ namespace OpenSim.Framework.Communications.Capabilities /// Prim containing item to update /// Signals whether the script to update is currently running /// New asset data - public void TaskScriptUpdated(LLUUID itemID, LLUUID primID, bool isScriptRunning, byte[] data) + public void TaskScriptUpdated(UUID itemID, UUID primID, bool isScriptRunning, byte[] data) { if (TaskScriptUpdatedCall != null) { @@ -759,9 +759,9 @@ namespace OpenSim.Framework.Communications.Capabilities private UpLoadedAsset handlerUpLoad = null; private string uploaderPath = String.Empty; - private LLUUID newAssetID; - private LLUUID inventoryItemID; - private LLUUID parentFolder; + private UUID newAssetID; + private UUID inventoryItemID; + private UUID parentFolder; private BaseHttpServer httpListener; private bool m_dumpAssetsToFile; private string m_assetName = String.Empty; @@ -770,8 +770,8 @@ namespace OpenSim.Framework.Communications.Capabilities private string m_invType = String.Empty; private string m_assetType = String.Empty; - public AssetUploader(string assetName, string description, LLUUID assetID, LLUUID inventoryItem, - LLUUID parentFolderID, string invType, string assetType, string path, + public AssetUploader(string assetName, string description, UUID assetID, UUID inventoryItem, + UUID parentFolderID, string invType, string assetType, string path, BaseHttpServer httpServer, bool dumpAssetsToFile) { m_assetName = assetName; @@ -795,7 +795,7 @@ namespace OpenSim.Framework.Communications.Capabilities /// public string uploaderCaps(byte[] data, string path, string param) { - LLUUID inv = inventoryItemID; + UUID inv = inventoryItemID; string res = String.Empty; LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete(); uploadComplete.new_asset = newAssetID.ToString(); @@ -860,11 +860,11 @@ namespace OpenSim.Framework.Communications.Capabilities private UpdateItem handlerUpdateItem = null; private string uploaderPath = String.Empty; - private LLUUID inventoryItemID; + private UUID inventoryItemID; private BaseHttpServer httpListener; private bool m_dumpAssetToFile; - public ItemUpdater(LLUUID inventoryItem, string path, BaseHttpServer httpServer, bool dumpAssetToFile) + public ItemUpdater(UUID inventoryItem, string path, BaseHttpServer httpServer, bool dumpAssetToFile) { m_dumpAssetToFile = dumpAssetToFile; @@ -882,10 +882,10 @@ namespace OpenSim.Framework.Communications.Capabilities /// public string uploaderCaps(byte[] data, string path, string param) { - LLUUID inv = inventoryItemID; + UUID inv = inventoryItemID; string res = String.Empty; LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete(); - LLUUID assetID = LLUUID.Zero; + UUID assetID = UUID.Zero; handlerUpdateItem = OnUpLoad; if (handlerUpdateItem != null) { @@ -942,13 +942,13 @@ namespace OpenSim.Framework.Communications.Capabilities private UpdateTaskScript handlerUpdateTaskScript = null; private string uploaderPath = String.Empty; - private LLUUID inventoryItemID; - private LLUUID primID; + private UUID inventoryItemID; + private UUID primID; private bool isScriptRunning; private BaseHttpServer httpListener; private bool m_dumpAssetToFile; - public TaskInventoryScriptUpdater(LLUUID inventoryItemID, LLUUID primID, int isScriptRunning, + public TaskInventoryScriptUpdater(UUID inventoryItemID, UUID primID, int isScriptRunning, string path, BaseHttpServer httpServer, bool dumpAssetToFile) { m_dumpAssetToFile = dumpAssetToFile; diff --git a/OpenSim/Framework/Communications/Capabilities/LLSD.cs b/OpenSim/Framework/Communications/Capabilities/LLSD.cs index aa9951c1dd..44c4a05bee 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSD.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSD.cs @@ -32,7 +32,7 @@ using System.IO; using System.Security.Cryptography; using System.Text; using System.Xml; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications.Capabilities { @@ -158,9 +158,9 @@ namespace OpenSim.Framework.Communications.Capabilities { throw new Exception("ulong in LLSD is currently not implemented, fix me!"); } - else if (obj is LLUUID) + else if (obj is UUID) { - LLUUID u = (LLUUID) obj; + UUID u = (UUID) obj; writer.WriteStartElement(String.Empty, "uuid", String.Empty); writer.WriteString(u.ToString()); writer.WriteEndElement(); @@ -294,11 +294,11 @@ namespace OpenSim.Framework.Communications.Capabilities if (reader.IsEmptyElement) { reader.Read(); - return LLUUID.Zero; + return UUID.Zero; } reader.Read(); - ret = new LLUUID(reader.ReadString().Trim()); + ret = new UUID(reader.ReadString().Trim()); break; } case "string": @@ -476,9 +476,9 @@ namespace OpenSim.Framework.Communications.Capabilities { return GetSpaces(indent) + "- float " + obj.ToString() + "\n"; } - else if (obj is LLUUID) + else if (obj is UUID) { - return GetSpaces(indent) + "- uuid " + ((LLUUID) obj).ToString() + Environment.NewLine; + return GetSpaces(indent) + "- uuid " + ((UUID) obj).ToString() + Environment.NewLine; } else if (obj is Hashtable) { @@ -509,7 +509,7 @@ namespace OpenSim.Framework.Communications.Capabilities } else if (obj is byte[]) { - return GetSpaces(indent) + "- binary\n" + Helpers.FieldToHexString((byte[]) obj, GetSpaces(indent)) + + return GetSpaces(indent) + "- binary\n" + Utils.BytesToHexString((byte[]) obj, GetSpaces(indent)) + Environment.NewLine; } else @@ -568,14 +568,14 @@ namespace OpenSim.Framework.Communications.Capabilities } case 'u': { - if (llsd.Length < 17) throw new LLSDParseException("LLUUID value type with no value"); - LLUUID value; + if (llsd.Length < 17) throw new LLSDParseException("UUID value type with no value"); + UUID value; endPos = FindEnd(llsd, 1); - if (LLUUID.TryParse(llsd.Substring(1, endPos - 1), out value)) + if (UUID.TryParse(llsd.Substring(1, endPos - 1), out value)) return value; else - throw new LLSDParseException("Failed to parse LLUUID value type"); + throw new LLSDParseException("Failed to parse UUID value type"); } case 'b': //byte[] value = new byte[llsd.Length - 1]; diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDAssetUploadComplete.cs b/OpenSim/Framework/Communications/Capabilities/LLSDAssetUploadComplete.cs index 6c4db4b3b5..680dcc82bd 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDAssetUploadComplete.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDAssetUploadComplete.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications.Capabilities { @@ -34,7 +34,7 @@ namespace OpenSim.Framework.Communications.Capabilities public class LLSDAssetUploadComplete { public string new_asset = String.Empty; - public LLUUID new_inventory_item = LLUUID.Zero; + public UUID new_inventory_item = UUID.Zero; public string state = String.Empty; //public bool success = false; @@ -42,4 +42,4 @@ namespace OpenSim.Framework.Communications.Capabilities { } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDAssetUploadRequest.cs b/OpenSim/Framework/Communications/Capabilities/LLSDAssetUploadRequest.cs index 289cc93dab..5833b6552b 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDAssetUploadRequest.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDAssetUploadRequest.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications.Capabilities { @@ -35,7 +35,7 @@ namespace OpenSim.Framework.Communications.Capabilities { public string asset_type = String.Empty; public string description = String.Empty; - public LLUUID folder_id = LLUUID.Zero; + public UUID folder_id = UUID.Zero; public string inventory_type = String.Empty; public string name = String.Empty; @@ -43,4 +43,4 @@ namespace OpenSim.Framework.Communications.Capabilities { } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDHelpers.cs b/OpenSim/Framework/Communications/Capabilities/LLSDHelpers.cs index 507f12b049..b14bfddafb 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDHelpers.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDHelpers.cs @@ -86,8 +86,8 @@ namespace OpenSim.Framework.Communications.Capabilities writer.WriteString(fieldName); writer.WriteEndElement(); LLSD.LLSDWriteOne(writer, fieldValue); - // libsecondlife.StructuredData.LLSDParser.SerializeXmlElement( - // writer, libsecondlife.StructuredData.LLSD.FromObject(fieldValue)); + // OpenMetaverse.StructuredData.LLSDParser.SerializeXmlElement( + // writer, OpenMetaverse.StructuredData.LLSD.FromObject(fieldValue)); } } writer.WriteEndElement(); @@ -111,8 +111,8 @@ namespace OpenSim.Framework.Communications.Capabilities else { LLSD.LLSDWriteOne(writer, obj); - //libsecondlife.StructuredData.LLSDParser.SerializeXmlElement( - // writer, libsecondlife.StructuredData.LLSD.FromObject(obj)); + //OpenMetaverse.StructuredData.LLSDParser.SerializeXmlElement( + // writer, OpenMetaverse.StructuredData.LLSD.FromObject(obj)); } } @@ -133,12 +133,12 @@ namespace OpenSim.Framework.Communications.Capabilities FieldInfo field = myType.GetField(keyName); if (field != null) { - // if (enumerator.Value is libsecondlife.StructuredData.LLSDMap) + // if (enumerator.Value is OpenMetaverse.StructuredData.LLSDMap) if (enumerator.Value is Hashtable) { object fieldValue = field.GetValue(obj); DeserialiseLLSDMap((Hashtable) enumerator.Value, fieldValue); - // DeserialiseLLSDMap((libsecondlife.StructuredData.LLSDMap) enumerator.Value, fieldValue); + // DeserialiseLLSDMap((OpenMetaverse.StructuredData.LLSDMap) enumerator.Value, fieldValue); } else if (enumerator.Value is ArrayList) { @@ -160,4 +160,4 @@ namespace OpenSim.Framework.Communications.Capabilities return obj; } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDInventoryItem.cs b/OpenSim/Framework/Communications/Capabilities/LLSDInventoryItem.cs index 1a75abaf25..ff3682135d 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDInventoryItem.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDInventoryItem.cs @@ -25,17 +25,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications.Capabilities { [LLSDMap] public class LLSDInventoryItem { - public LLUUID parent_id; + public UUID parent_id; - public LLUUID asset_id; - public LLUUID item_id; + public UUID asset_id; + public UUID item_id; public LLSDPermissions permissions; public string type; public string inv_type; @@ -50,9 +50,9 @@ namespace OpenSim.Framework.Communications.Capabilities [LLSDMap] public class LLSDPermissions { - public LLUUID creator_id; - public LLUUID owner_id; - public LLUUID group_id; + public UUID creator_id; + public UUID owner_id; + public UUID group_id; public int base_mask; public int owner_mask; public int group_mask; @@ -77,8 +77,8 @@ namespace OpenSim.Framework.Communications.Capabilities [LLSDMap] public class LLSDFetchInventoryDescendents { - public LLUUID folder_id; - public LLUUID owner_id; + public UUID folder_id; + public UUID owner_id; public int sort_order; public bool fetch_folders; public bool fetch_items; @@ -87,11 +87,11 @@ namespace OpenSim.Framework.Communications.Capabilities [LLSDMap] public class LLSDInventoryFolderContents { - public LLUUID agent___id; // the (three "_") "___" so the serialising knows to change this to a "-" + public UUID agent___id; // the (three "_") "___" so the serialising knows to change this to a "-" public int descendents; - public LLUUID folder___id; //as LL can't decide if they are going to use "_" or "-" to separate words in the field names + public UUID folder___id; //as LL can't decide if they are going to use "_" or "-" to separate words in the field names public LLSDArray items = new LLSDArray(); - public LLUUID owner___id; // and of course we can't have field names with "-" in + public UUID owner___id; // and of course we can't have field names with "-" in public int version; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs b/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs index 2c4b68f258..c147bd34b1 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs @@ -25,17 +25,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications.Capabilities { [LLSDMap] public class LLSDItemUpdate { - public LLUUID item_id; + public UUID item_id; public LLSDItemUpdate() { } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDMapLayer.cs b/OpenSim/Framework/Communications/Capabilities/LLSDMapLayer.cs index 50f5241a2a..fc381e48e3 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDMapLayer.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDMapLayer.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications.Capabilities { @@ -36,10 +36,10 @@ namespace OpenSim.Framework.Communications.Capabilities public int Right = 0; public int Top = 0; public int Bottom = 0; - public LLUUID ImageID = LLUUID.Zero; + public UUID ImageID = UUID.Zero; public LLSDMapLayer() { } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDRemoteParcelResponse.cs b/OpenSim/Framework/Communications/Capabilities/LLSDRemoteParcelResponse.cs index b0e2b8f49c..12200898ee 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDRemoteParcelResponse.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDRemoteParcelResponse.cs @@ -26,14 +26,14 @@ * */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications.Capabilities { [LLSDType("MAP")] public class LLSDRemoteParcelResponse { - public LLUUID parcel_id; + public UUID parcel_id; public LLSDRemoteParcelResponse() { diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDStreamHandler.cs b/OpenSim/Framework/Communications/Capabilities/LLSDStreamHandler.cs index 36090e1f15..7fcbb816a4 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDStreamHandler.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDStreamHandler.cs @@ -53,8 +53,8 @@ namespace OpenSim.Framework.Communications.Capabilities //string requestBody = streamReader.ReadToEnd(); //streamReader.Close(); - // libsecondlife.StructuredData.LLSDMap hash = (libsecondlife.StructuredData.LLSDMap) - // libsecondlife.StructuredData.LLSDParser.DeserializeXml(new XmlTextReader(request)); + // OpenMetaverse.StructuredData.LLSDMap hash = (OpenMetaverse.StructuredData.LLSDMap) + // OpenMetaverse.StructuredData.LLSDParser.DeserializeXml(new XmlTextReader(request)); Hashtable hash = (Hashtable) LLSD.LLSDDeserialize(request); TRequest llsdRequest = new TRequest(); @@ -67,4 +67,4 @@ namespace OpenSim.Framework.Communications.Capabilities return encoding.GetBytes(LLSDHelpers.SerialiseLLSDReply(response)); } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDTaskInventoryUploadComplete.cs b/OpenSim/Framework/Communications/Capabilities/LLSDTaskInventoryUploadComplete.cs index 8bfd20c4a2..b34cbf9c9e 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDTaskInventoryUploadComplete.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDTaskInventoryUploadComplete.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications.Capabilities { @@ -35,16 +35,16 @@ namespace OpenSim.Framework.Communications.Capabilities /// /// The task inventory item that was updated /// - public LLUUID item_id; + public UUID item_id; /// /// The task that was updated /// - public LLUUID task_id; + public UUID task_id; /// /// State of the upload. So far have only even seen this set to "complete" /// public string state; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDTaskScriptUpdate.cs b/OpenSim/Framework/Communications/Capabilities/LLSDTaskScriptUpdate.cs index e45d9dee46..730e95b8c5 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDTaskScriptUpdate.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDTaskScriptUpdate.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications.Capabilities { @@ -35,16 +35,16 @@ namespace OpenSim.Framework.Communications.Capabilities /// /// The item containing the script to update /// - public LLUUID item_id; + public UUID item_id; /// /// The task containing the script /// - public LLUUID task_id; + public UUID task_id; /// /// Signals whether the script is currently active /// public int is_script_running; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/CommunicationsManager.cs b/OpenSim/Framework/Communications/CommunicationsManager.cs index 08dbc809b6..e6413e8b75 100644 --- a/OpenSim/Framework/Communications/CommunicationsManager.cs +++ b/OpenSim/Framework/Communications/CommunicationsManager.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework.Communications.Cache; using OpenSim.Framework.Servers; @@ -42,7 +42,7 @@ namespace OpenSim.Framework.Communications { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - protected Dictionary m_nameRequestCache = new Dictionary(); + protected Dictionary m_nameRequestCache = new Dictionary(); public IUserService UserService { @@ -238,8 +238,8 @@ namespace OpenSim.Framework.Communications /// /// /// - /// The UUID of the added user. Returns LLUUID.Zero if the add was unsuccessful - public LLUUID AddUser(string firstName, string lastName, string password, uint regX, uint regY) + /// The UUID of the added user. Returns UUID.Zero if the add was unsuccessful + public UUID AddUser(string firstName, string lastName, string password, uint regX, uint regY) { string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(password) + ":" + String.Empty); @@ -247,7 +247,7 @@ namespace OpenSim.Framework.Communications UserProfileData userProf = UserService.GetUserProfile(firstName, lastName); if (userProf == null) { - return LLUUID.Zero; + return UUID.Zero; } else { @@ -265,7 +265,7 @@ namespace OpenSim.Framework.Communications /// The agent that who's friends list is being added to /// The agent that being added to the friends list of the friends list owner /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects - public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) { m_userService.AddNewUserFriend(friendlistowner, friend, perms); } @@ -279,7 +279,7 @@ namespace OpenSim.Framework.Communications /// /// /// - public void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz) + public void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, float posx, float posy, float posz) { m_userService.LogOffUser(userid, regionid, regionhandle, posx, posy, posz); @@ -290,7 +290,7 @@ namespace OpenSim.Framework.Communications /// /// The agent that who's friends list is being updated /// The Ex-friend agent - public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + public void RemoveUserFriend(UUID friendlistowner, UUID friend) { m_userService.RemoveUserFriend(friendlistowner, friend); } @@ -301,16 +301,16 @@ namespace OpenSim.Framework.Communications /// The agent that who's friends list is being updated /// The agent that is getting or loosing permissions /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects - public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) { m_userService.UpdateUserFriendPerms(friendlistowner, friend, perms); } /// - /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for LLUUID friendslistowner + /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for UUID friendslistowner /// /// The agent that we're retreiving the friends Data. - public List GetUserFriendList(LLUUID friendlistowner) + public List GetUserFriendList(UUID friendlistowner) { return m_userService.GetUserFriendList(friendlistowner); } @@ -325,7 +325,7 @@ namespace OpenSim.Framework.Communications return; } - public void HandleUUIDNameRequest(LLUUID uuid, IClientAPI remote_client) + public void HandleUUIDNameRequest(UUID uuid, IClientAPI remote_client) { if (uuid == m_userProfileCacheService.libraryRoot.Owner) { @@ -342,7 +342,7 @@ namespace OpenSim.Framework.Communications } } - private string[] doUUIDNameRequest(LLUUID uuid) + private string[] doUUIDNameRequest(UUID uuid) { string[] returnstring = new string[0]; bool doLookup = false; @@ -366,7 +366,7 @@ namespace OpenSim.Framework.Communications if (profileData != null) { returnstring = new string[2]; - // LLUUID profileId = profileData.ID; + // UUID profileId = profileData.ID; returnstring[0] = profileData.FirstName; returnstring[1] = profileData.SurName; lock (m_nameRequestCache) @@ -380,13 +380,13 @@ namespace OpenSim.Framework.Communications } - public bool UUIDNameCachedTest(LLUUID uuid) + public bool UUIDNameCachedTest(UUID uuid) { lock (m_nameRequestCache) return m_nameRequestCache.ContainsKey(uuid); } - public string UUIDNameRequestString(LLUUID uuid) + public string UUIDNameRequestString(UUID uuid) { string[] names = doUUIDNameRequest(uuid); if (names.Length == 2) @@ -400,7 +400,7 @@ namespace OpenSim.Framework.Communications return "(hippos)"; } - public List GenerateAgentPickerRequestResponse(LLUUID queryID, string query) + public List GenerateAgentPickerRequestResponse(UUID queryID, string query) { List pickerlist = m_userService.GenerateAgentPickerRequestResponse(queryID, query); return pickerlist; diff --git a/OpenSim/Framework/Communications/IAvatarService.cs b/OpenSim/Framework/Communications/IAvatarService.cs index 6c033e1288..25b26dd4b7 100644 --- a/OpenSim/Framework/Communications/IAvatarService.cs +++ b/OpenSim/Framework/Communications/IAvatarService.cs @@ -28,16 +28,16 @@ using System; using System.Collections.Generic; using System.Text; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications { public interface IAvatarService { /// Get's the User Appearance - AvatarAppearance GetUserAppearance(LLUUID user); + AvatarAppearance GetUserAppearance(UUID user); - void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance); + void UpdateUserAppearance(UUID user, AvatarAppearance appearance); } } diff --git a/OpenSim/Framework/Communications/IGridServices.cs b/OpenSim/Framework/Communications/IGridServices.cs index fcc0db5d0d..6c5d2e2948 100644 --- a/OpenSim/Framework/Communications/IGridServices.cs +++ b/OpenSim/Framework/Communications/IGridServices.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications { @@ -53,7 +53,7 @@ namespace OpenSim.Framework.Communications List RequestNeighbours(uint x, uint y); RegionInfo RequestNeighbourInfo(ulong regionHandle); - RegionInfo RequestNeighbourInfo(LLUUID regionID); + RegionInfo RequestNeighbourInfo(UUID regionID); RegionInfo RequestClosestRegion(string regionName); Dictionary GetGridSettings(); List RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY); diff --git a/OpenSim/Framework/Communications/IInterRegionCommunications.cs b/OpenSim/Framework/Communications/IInterRegionCommunications.cs index 57fb82d8c4..3dd556118b 100644 --- a/OpenSim/Framework/Communications/IInterRegionCommunications.cs +++ b/OpenSim/Framework/Communications/IInterRegionCommunications.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications { @@ -35,16 +35,16 @@ namespace OpenSim.Framework.Communications bool CheckRegion(string address, uint port); bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData); - bool InformRegionOfPrimCrossing(ulong regionHandle, LLUUID primID, string objData, int XMLMethod); + bool InformRegionOfPrimCrossing(ulong regionHandle, UUID primID, string objData, int XMLMethod); bool RegionUp(SerializableRegionInfo region, ulong regionhandle); bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData); - bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying); - bool ExpectPrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isFlying); + bool ExpectAvatarCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying); + bool ExpectPrimCrossing(ulong regionHandle, UUID primID, Vector3 position, bool isFlying); - bool AcknowledgeAgentCrossed(ulong regionHandle, LLUUID agentId); - bool AcknowledgePrimCrossed(ulong regionHandle, LLUUID primID); + bool AcknowledgeAgentCrossed(ulong regionHandle, UUID agentId); + bool AcknowledgePrimCrossed(ulong regionHandle, UUID primID); - bool TellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID); + bool TellRegionToCloseChildConnection(ulong regionHandle, UUID agentID); } } diff --git a/OpenSim/Framework/Communications/IInterServiceInventoryServices.cs b/OpenSim/Framework/Communications/IInterServiceInventoryServices.cs index a1f4c2e61b..5900f4ed0a 100644 --- a/OpenSim/Framework/Communications/IInterServiceInventoryServices.cs +++ b/OpenSim/Framework/Communications/IInterServiceInventoryServices.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications { @@ -40,7 +40,7 @@ namespace OpenSim.Framework.Communications /// /// /// true if the inventory was successfully created, false otherwise - bool CreateNewUserInventory(LLUUID user); + bool CreateNewUserInventory(UUID user); /// /// Returns a list of all the folders in a given user's inventory. @@ -48,6 +48,6 @@ namespace OpenSim.Framework.Communications /// /// A flat list of the user's inventory folder tree, /// null if there is no inventory for this user - List GetInventorySkeleton(LLUUID userId); + List GetInventorySkeleton(UUID userId); } } diff --git a/OpenSim/Framework/Communications/IInventoryServices.cs b/OpenSim/Framework/Communications/IInventoryServices.cs index b00b1bf47e..aead3be76b 100644 --- a/OpenSim/Framework/Communications/IInventoryServices.cs +++ b/OpenSim/Framework/Communications/IInventoryServices.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework.Communications.Cache; namespace OpenSim.Framework.Communications @@ -53,7 +53,7 @@ namespace OpenSim.Framework.Communications /// /// /// - void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback); + void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback); /// /// Add a new folder to the user's inventory @@ -109,13 +109,13 @@ namespace OpenSim.Framework.Communications /// /// /// - bool HasInventoryForUser(LLUUID userID); + bool HasInventoryForUser(UUID userID); /// /// Retrieve the root inventory folder for the given user. /// /// /// null if no root folder was found - InventoryFolderBase RequestRootFolder(LLUUID userID); + InventoryFolderBase RequestRootFolder(UUID userID); } } diff --git a/OpenSim/Framework/Communications/ISecureInventoryService.cs b/OpenSim/Framework/Communications/ISecureInventoryService.cs index bd962d1987..6d4ce46826 100644 --- a/OpenSim/Framework/Communications/ISecureInventoryService.cs +++ b/OpenSim/Framework/Communications/ISecureInventoryService.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework.Communications.Cache; namespace OpenSim.Framework.Communications @@ -47,69 +47,69 @@ namespace OpenSim.Framework.Communications /// /// /// - void RequestInventoryForUser(LLUUID userID, LLUUID session_id, InventoryReceiptCallback callback); + void RequestInventoryForUser(UUID userID, UUID session_id, InventoryReceiptCallback callback); /// /// Add a new folder to the user's inventory /// /// /// true if the folder was successfully added - bool AddFolder(InventoryFolderBase folder, LLUUID session_id); + bool AddFolder(InventoryFolderBase folder, UUID session_id); /// /// Update a folder in the user's inventory /// /// /// true if the folder was successfully updated - bool UpdateFolder(InventoryFolderBase folder, LLUUID session_id); + bool UpdateFolder(InventoryFolderBase folder, UUID session_id); /// /// Move an inventory folder to a new location /// /// A folder containing the details of the new location /// true if the folder was successfully moved - bool MoveFolder(InventoryFolderBase folder, LLUUID session_id); + bool MoveFolder(InventoryFolderBase folder, UUID session_id); /// /// Purge an inventory folder of all its items and subfolders. /// /// /// true if the folder was successfully purged - bool PurgeFolder(InventoryFolderBase folder, LLUUID session_id); + bool PurgeFolder(InventoryFolderBase folder, UUID session_id); /// /// Add a new item to the user's inventory /// /// /// true if the item was successfully added - bool AddItem(InventoryItemBase item, LLUUID session_id); + bool AddItem(InventoryItemBase item, UUID session_id); /// /// Update an item in the user's inventory /// /// /// true if the item was successfully updated - bool UpdateItem(InventoryItemBase item, LLUUID session_id); + bool UpdateItem(InventoryItemBase item, UUID session_id); /// /// Delete an item from the user's inventory /// /// /// true if the item was successfully deleted - bool DeleteItem(InventoryItemBase item, LLUUID session_id); + bool DeleteItem(InventoryItemBase item, UUID session_id); /// /// Does the given user have an inventory structure? /// /// /// - bool HasInventoryForUser(LLUUID userID); + bool HasInventoryForUser(UUID userID); /// /// Retrieve the root inventory folder for the given user. /// /// /// null if no root folder was found - InventoryFolderBase RequestRootFolder(LLUUID userID); + InventoryFolderBase RequestRootFolder(UUID userID); } } diff --git a/OpenSim/Framework/Communications/IUserService.cs b/OpenSim/Framework/Communications/IUserService.cs index c1ae0e208a..07ea437c2c 100644 --- a/OpenSim/Framework/Communications/IUserService.cs +++ b/OpenSim/Framework/Communications/IUserService.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework.Communications { @@ -47,22 +47,22 @@ namespace OpenSim.Framework.Communications /// /// The target UUID /// A user profile. Returns null if no user profile is found. - UserProfileData GetUserProfile(LLUUID userId); + UserProfileData GetUserProfile(UUID userId); - UserAgentData GetAgentByUUID(LLUUID userId); + UserAgentData GetAgentByUUID(UUID userId); - void ClearUserAgent(LLUUID avatarID); - List GenerateAgentPickerRequestResponse(LLUUID QueryID, string Query); + void ClearUserAgent(UUID avatarID); + List GenerateAgentPickerRequestResponse(UUID QueryID, string Query); UserProfileData SetupMasterUser(string firstName, string lastName); UserProfileData SetupMasterUser(string firstName, string lastName, string password); - UserProfileData SetupMasterUser(LLUUID userId); + UserProfileData SetupMasterUser(UUID userId); /// /// /// /// - LLUUID AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY); + UUID AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY); /// /// Update the user's profile. @@ -78,14 +78,14 @@ namespace OpenSim.Framework.Communications /// The agent that who's friends list is being added to /// The agent that being added to the friends list of the friends list owner /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects - void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms); + void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms); /// /// Delete friend on friendlistowner's friendlist. /// /// The agent that who's friends list is being updated /// The Ex-friend agent - void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend); + void RemoveUserFriend(UUID friendlistowner, UUID friend); /// /// Update permissions for friend on friendlistowner's friendlist. @@ -93,7 +93,7 @@ namespace OpenSim.Framework.Communications /// The agent that who's friends list is being updated /// The agent that is getting or loosing permissions /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects - void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms); + void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms); /// /// Updates a user profile @@ -110,31 +110,31 @@ namespace OpenSim.Framework.Communications /// final position x /// final position y /// final position z - void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz); + void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, float posx, float posy, float posz); /// - /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for LLUUID friendslistowner + /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for UUID friendslistowner /// /// The agent that we're retreiving the friends Data. - List GetUserFriendList(LLUUID friendlistowner); + List GetUserFriendList(UUID friendlistowner); /// /// Updates the current region the User is in /// /// User Region the Avatar is IN /// User Region the Avatar is IN - void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle); + void UpdateUserCurrentRegion(UUID avatarid, UUID regionuuid, ulong regionhandle); /// /// Get's the User Appearance - // AvatarAppearance GetUserAppearance(LLUUID user); + // AvatarAppearance GetUserAppearance(UUID user); - // void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance); + // void UpdateUserAppearance(UUID user, AvatarAppearance appearance); - // void AddAttachment(LLUUID user, LLUUID attach); + // void AddAttachment(UUID user, UUID attach); - // void RemoveAttachment(LLUUID user, LLUUID attach); + // void RemoveAttachment(UUID user, UUID attach); - // List GetAttachments(LLUUID user); + // List GetAttachments(UUID user); } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Framework/Communications/InventoryServiceBase.cs index c76c078125..32392688b9 100644 --- a/OpenSim/Framework/Communications/InventoryServiceBase.cs +++ b/OpenSim/Framework/Communications/InventoryServiceBase.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; namespace OpenSim.Framework.Communications @@ -57,7 +57,7 @@ namespace OpenSim.Framework.Communications new PluginLoader (new InventoryDataInitialiser (connect)); // loader will try to load all providers (MySQL, MSSQL, etc) - // unless it is constrainted to the correct "Provider" entry in the addin.xml + // unless it is constrainted to the correct "Provider" entry in the addin.Xml loader.Add ("/OpenSim/InventoryData", new PluginProviderFilter (provider)); loader.Load(); @@ -74,7 +74,7 @@ namespace OpenSim.Framework.Communications } // See IInventoryServices - public List GetInventorySkeleton(LLUUID userId) + public List GetInventorySkeleton(UUID userId) { // m_log.DebugFormat("[AGENT INVENTORY]: Getting inventory skeleton for {0}", userId); @@ -105,13 +105,13 @@ namespace OpenSim.Framework.Communications } // See IInventoryServices - public virtual bool HasInventoryForUser(LLUUID userID) + public virtual bool HasInventoryForUser(UUID userID) { return false; } // See IInventoryServices - public InventoryFolderBase RequestRootFolder(LLUUID userID) + public InventoryFolderBase RequestRootFolder(UUID userID) { // FIXME: Probably doesn't do what was originally intended - only ever queries the first plugin foreach (IInventoryDataPlugin plugin in m_plugins) @@ -122,7 +122,7 @@ namespace OpenSim.Framework.Communications } // See IInventoryServices - public bool CreateNewUserInventory(LLUUID user) + public bool CreateNewUserInventory(UUID user) { InventoryFolderBase existingRootFolder = RequestRootFolder(user); @@ -146,13 +146,13 @@ namespace OpenSim.Framework.Communications } // See IInventoryServices - public abstract void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback); + public abstract void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback); #endregion #region Methods used by GridInventoryService - public List RequestSubFolders(LLUUID parentFolderID) + public List RequestSubFolders(UUID parentFolderID) { List inventoryList = new List(); foreach (IInventoryDataPlugin plugin in m_plugins) @@ -162,7 +162,7 @@ namespace OpenSim.Framework.Communications return inventoryList; } - public List RequestFolderItems(LLUUID folderID) + public List RequestFolderItems(UUID folderID) { List itemsList = new List(); foreach (IInventoryDataPlugin plugin in m_plugins) @@ -313,27 +313,27 @@ namespace OpenSim.Framework.Communications /// private class UsersInventory { - public Dictionary Folders = new Dictionary(); - public Dictionary Items = new Dictionary(); + public Dictionary Folders = new Dictionary(); + public Dictionary Items = new Dictionary(); - public virtual void CreateNewInventorySet(LLUUID user) + public virtual void CreateNewInventorySet(UUID user) { InventoryFolderBase folder = new InventoryFolderBase(); - folder.ParentID = LLUUID.Zero; + folder.ParentID = UUID.Zero; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "My Inventory"; folder.Type = (short)AssetType.Folder; folder.Version = 1; Folders.Add(folder.ID, folder); - LLUUID rootFolder = folder.ID; + UUID rootFolder = folder.ID; folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Animations"; folder.Type = (short)AssetType.Animation; folder.Version = 1; @@ -342,7 +342,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Body Parts"; folder.Type = (short)AssetType.Bodypart; folder.Version = 1; @@ -351,7 +351,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Calling Cards"; folder.Type = (short)AssetType.CallingCard; folder.Version = 1; @@ -360,7 +360,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Clothing"; folder.Type = (short)AssetType.Clothing; folder.Version = 1; @@ -369,7 +369,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Gestures"; folder.Type = (short)AssetType.Gesture; folder.Version = 1; @@ -378,7 +378,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Landmarks"; folder.Type = (short)AssetType.Landmark; folder.Version = 1; @@ -387,7 +387,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Lost And Found"; folder.Type = (short)AssetType.LostAndFoundFolder; folder.Version = 1; @@ -396,7 +396,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Notecards"; folder.Type = (short)AssetType.Notecard; folder.Version = 1; @@ -405,7 +405,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Objects"; folder.Type = (short)AssetType.Object; folder.Version = 1; @@ -414,7 +414,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Photo Album"; folder.Type = (short)AssetType.SnapshotFolder; folder.Version = 1; @@ -423,7 +423,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Scripts"; folder.Type = (short)AssetType.LSLText; folder.Version = 1; @@ -432,7 +432,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Sounds"; folder.Type = (short)AssetType.Sound; folder.Version = 1; @@ -441,7 +441,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Textures"; folder.Type = (short)AssetType.Texture; folder.Version = 1; @@ -450,7 +450,7 @@ namespace OpenSim.Framework.Communications folder = new InventoryFolderBase(); folder.ParentID = rootFolder; folder.Owner = user; - folder.ID = LLUUID.Random(); + folder.ID = UUID.Random(); folder.Name = "Trash"; folder.Type = (short)AssetType.TrashFolder; folder.Version = 1; diff --git a/OpenSim/Framework/Communications/LoginResponse.cs b/OpenSim/Framework/Communications/LoginResponse.cs index 686d1bba85..16be2b763a 100644 --- a/OpenSim/Framework/Communications/LoginResponse.cs +++ b/OpenSim/Framework/Communications/LoginResponse.cs @@ -29,8 +29,8 @@ using System; using System.Collections; using System.Collections.Generic; using System.Reflection; -using libsecondlife; -using libsecondlife.StructuredData; +using OpenMetaverse; +using OpenMetaverse.StructuredData; using log4net; using Nwc.XmlRpc; @@ -63,9 +63,9 @@ namespace OpenSim.Framework.Communications private UserInfo userProfile; - private LLUUID agentID; - private LLUUID sessionID; - private LLUUID secureSessionID; + private UUID agentID; + private UUID sessionID; + private UUID secureSessionID; // Login Flags private string dst; @@ -171,9 +171,9 @@ namespace OpenSim.Framework.Communications AddClassifiedCategory((Int32) 8, "Service"); AddClassifiedCategory((Int32) 9, "Personal"); - SessionID = LLUUID.Random(); - SecureSessionID = LLUUID.Random(); - AgentID = LLUUID.Random(); + SessionID = UUID.Random(); + SecureSessionID = UUID.Random(); + AgentID = UUID.Random(); Hashtable InitialOutfitHash = new Hashtable(); InitialOutfitHash["folder_name"] = "Nightclub Female"; @@ -567,19 +567,19 @@ namespace OpenSim.Framework.Communications set { simAddress = value; } } - public LLUUID AgentID + public UUID AgentID { get { return agentID; } set { agentID = value; } } - public LLUUID SessionID + public UUID SessionID { get { return sessionID; } set { sessionID = value; } } - public LLUUID SecureSessionID + public UUID SecureSessionID { get { return secureSessionID; } set { secureSessionID = value; } @@ -724,8 +724,8 @@ namespace OpenSim.Framework.Communications public string firstname; public string lastname; public ulong homeregionhandle; - public LLVector3 homepos; - public LLVector3 homelookat; + public Vector3 homepos; + public Vector3 homelookat; } public class BuddyList @@ -754,14 +754,14 @@ namespace OpenSim.Framework.Communications { public int BuddyRightsHave = 1; public int BuddyRightsGiven = 1; - public LLUUID BuddyID; + public UUID BuddyID; public BuddyInfo(string buddyID) { - BuddyID = new LLUUID(buddyID); + BuddyID = new UUID(buddyID); } - public BuddyInfo(LLUUID buddyID) + public BuddyInfo(UUID buddyID) { BuddyID = buddyID; } diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs index 73fba1eb40..d8d0fa2e09 100644 --- a/OpenSim/Framework/Communications/LoginService.cs +++ b/OpenSim/Framework/Communications/LoginService.cs @@ -33,8 +33,8 @@ using System.Reflection; using System.Text.RegularExpressions; using System.Threading; using System.Web; -using libsecondlife; -using libsecondlife.StructuredData; +using OpenMetaverse; +using OpenMetaverse.StructuredData; using log4net; using Nwc.XmlRpc; using OpenSim.Framework.Communications.Cache; @@ -94,7 +94,7 @@ namespace OpenSim.Framework.Communications /// /// /// This will be thrown if there is a problem with the inventory service - protected abstract InventoryData GetInventorySkeleton(LLUUID userID); + protected abstract InventoryData GetInventorySkeleton(UUID userID); /// /// Called when we receive the client's initial XMLRPC login_to_simulator request message @@ -163,10 +163,10 @@ namespace OpenSim.Framework.Communications } else if (requestData.Contains("web_login_key")) { - LLUUID webloginkey = null; + UUID webloginkey = null; try { - webloginkey = new LLUUID((string)requestData["web_login_key"]); + webloginkey = new UUID((string)requestData["web_login_key"]); } catch (Exception e) { @@ -227,7 +227,7 @@ namespace OpenSim.Framework.Communications try { - LLUUID agentID = userProfile.ID; + UUID agentID = userProfile.ID; InventoryData inventData = null; try @@ -400,7 +400,7 @@ namespace OpenSim.Framework.Communications try { - LLUUID agentID = userProfile.ID; + UUID agentID = userProfile.ID; //InventoryData inventData = GetInventorySkeleton(agentID); InventoryData inventData = null; @@ -566,7 +566,7 @@ namespace OpenSim.Framework.Communications if (goodweblogin) { - LLUUID webloginkey = LLUUID.Random(); + UUID webloginkey = UUID.Random(); m_userManager.StoreWebLoginKey(user.ID, webloginkey); statuscode = 301; @@ -737,13 +737,13 @@ namespace OpenSim.Framework.Communications return passwordSuccess; } - public virtual bool AuthenticateUser(UserProfileData profile, LLUUID webloginkey) + public virtual bool AuthenticateUser(UserProfileData profile, UUID webloginkey) { bool passwordSuccess = false; m_log.InfoFormat("[LOGIN]: Authenticating {0} {1} ({2})", profile.FirstName, profile.SurName, profile.ID); - // Match web login key unless it's the default weblogin key LLUUID.Zero - passwordSuccess = ((profile.WebLoginKey==webloginkey) && profile.WebLoginKey != LLUUID.Zero); + // Match web login key unless it's the default weblogin key UUID.Zero + passwordSuccess = ((profile.WebLoginKey==webloginkey) && profile.WebLoginKey != UUID.Zero); return passwordSuccess; } @@ -803,7 +803,7 @@ namespace OpenSim.Framework.Communications /// protected virtual ArrayList GetInventoryLibrary() { - Dictionary rootFolders + Dictionary rootFolders = m_libraryRootFolder.RequestSelfAndDescendentFolders(); ArrayList folderHashes = new ArrayList(); @@ -838,9 +838,9 @@ namespace OpenSim.Framework.Communications public class InventoryData { public ArrayList InventoryArray = null; - public LLUUID RootFolderID = LLUUID.Zero; + public UUID RootFolderID = UUID.Zero; - public InventoryData(ArrayList invList, LLUUID rootID) + public InventoryData(ArrayList invList, UUID rootID) { InventoryArray = invList; RootFolderID = rootID; diff --git a/OpenSim/Framework/Communications/UserManagerBase.cs b/OpenSim/Framework/Communications/UserManagerBase.cs index a35ed725a2..5a63e709ec 100644 --- a/OpenSim/Framework/Communications/UserManagerBase.cs +++ b/OpenSim/Framework/Communications/UserManagerBase.cs @@ -31,8 +31,8 @@ using System.Collections.Generic; using System.Net; using System.Reflection; using System.Security.Cryptography; -using libsecondlife; -using libsecondlife.StructuredData; +using OpenMetaverse; +using OpenMetaverse.StructuredData; using log4net; using Nwc.XmlRpc; using OpenSim.Framework.Statistics; @@ -59,7 +59,7 @@ namespace OpenSim.Framework.Communications new PluginLoader (new UserDataInitialiser (connect)); // loader will try to load all providers (MySQL, MSSQL, etc) - // unless it is constrainted to the correct "Provider" entry in the addin.xml + // unless it is constrainted to the correct "Provider" entry in the addin.Xml loader.Add ("/OpenSim/UserData", new PluginProviderFilter (provider)); loader.Load(); @@ -84,14 +84,14 @@ namespace OpenSim.Framework.Communications return null; } - public void ResetAttachments(LLUUID userID) + public void ResetAttachments(UUID userID) { foreach (IUserDataPlugin plugin in _plugins) { plugin.ResetAttachments(userID); } } - public UserAgentData GetAgentByUUID(LLUUID userId) + public UserAgentData GetAgentByUUID(UUID userId) { foreach (IUserDataPlugin plugin in _plugins) { @@ -106,7 +106,7 @@ namespace OpenSim.Framework.Communications return null; } // see IUserService - public UserProfileData GetUserProfile(LLUUID uuid) + public UserProfileData GetUserProfile(UUID uuid) { foreach (IUserDataPlugin plugin in _plugins) { @@ -122,7 +122,7 @@ namespace OpenSim.Framework.Communications return null; } - public List GenerateAgentPickerRequestResponse(LLUUID queryID, string query) + public List GenerateAgentPickerRequestResponse(UUID queryID, string query) { List pickerlist = new List(); foreach (IUserDataPlugin plugin in _plugins) @@ -172,7 +172,7 @@ namespace OpenSim.Framework.Communications /// /// The agent's UUID /// Agent profiles - public UserAgentData GetUserAgent(LLUUID uuid) + public UserAgentData GetUserAgent(UUID uuid) { foreach (IUserDataPlugin plugin in _plugins) { @@ -234,7 +234,7 @@ namespace OpenSim.Framework.Communications return null; } - public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle) + public void UpdateUserCurrentRegion(UUID avatarid, UUID regionuuid, ulong regionhandle) { foreach (IUserDataPlugin plugin in _plugins) { @@ -254,7 +254,7 @@ namespace OpenSim.Framework.Communications /// /// the UUID of the friend list owner /// A List of FriendListItems that contains info about the user's friends - public List GetUserFriendList(LLUUID ownerID) + public List GetUserFriendList(UUID ownerID) { foreach (IUserDataPlugin plugin in _plugins) { @@ -271,7 +271,7 @@ namespace OpenSim.Framework.Communications return null; } - public void StoreWebLoginKey(LLUUID agentID, LLUUID webLoginKey) + public void StoreWebLoginKey(UUID agentID, UUID webLoginKey) { foreach (IUserDataPlugin plugin in _plugins) { @@ -286,7 +286,7 @@ namespace OpenSim.Framework.Communications } } - public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) { foreach (IUserDataPlugin plugin in _plugins) { @@ -301,7 +301,7 @@ namespace OpenSim.Framework.Communications } } - public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + public void RemoveUserFriend(UUID friendlistowner, UUID friend) { foreach (IUserDataPlugin plugin in _plugins) { @@ -316,7 +316,7 @@ namespace OpenSim.Framework.Communications } } - public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) { foreach (IUserDataPlugin plugin in _plugins) { @@ -336,7 +336,7 @@ namespace OpenSim.Framework.Communications /// Resets the currentAgent in the user profile /// /// The agent's ID - public void ClearUserAgent(LLUUID agentID) + public void ClearUserAgent(UUID agentID) { UserProfileData profile = GetUserProfile(agentID); @@ -382,8 +382,8 @@ namespace OpenSim.Framework.Communications rand.GetBytes(randDataS); rand.GetBytes(randDataSS); - agent.SecureSessionID = new LLUUID(randDataSS, 0); - agent.SessionID = new LLUUID(randDataS, 0); + agent.SecureSessionID = new UUID(randDataSS, 0); + agent.SessionID = new UUID(randDataS, 0); // Profile UUID agent.ProfileID = profile.ID; @@ -434,8 +434,8 @@ namespace OpenSim.Framework.Communications agent.LogoutTime = 0; // Current location - agent.InitialRegion = LLUUID.Zero; // Fill in later - agent.Region = LLUUID.Zero; // Fill in later + agent.InitialRegion = UUID.Zero; // Fill in later + agent.Region = UUID.Zero; // Fill in later profile.CurrentAgent = agent; } @@ -449,14 +449,14 @@ namespace OpenSim.Framework.Communications /// /// /// - public void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz) + public void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, float posx, float posy, float posz) { if (StatsManager.UserStats != null) StatsManager.UserStats.AddLogout(); UserProfileData userProfile; UserAgentData userAgent; - LLVector3 currentPos = new LLVector3(posx, posy, posz); + Vector3 currentPos = new Vector3(posx, posy, posz); userProfile = GetUserProfile(userid); @@ -470,8 +470,8 @@ namespace OpenSim.Framework.Communications { userAgent.AgentOnline = false; userAgent.LogoutTime = Util.UnixTimeSinceEpoch(); - //userAgent.sessionID = LLUUID.Zero; - if (regionid != LLUUID.Zero) + //userAgent.sessionID = UUID.Zero; + if (regionid != UUID.Zero) { userAgent.Region = regionid; } @@ -508,8 +508,8 @@ namespace OpenSim.Framework.Communications rand.GetBytes(randDataS); rand.GetBytes(randDataSS); - agent.SecureSessionID = new LLUUID(randDataSS, 0); - agent.SessionID = new LLUUID(randDataS, 0); + agent.SecureSessionID = new UUID(randDataSS, 0); + agent.SessionID = new UUID(randDataS, 0); // Profile UUID agent.ProfileID = profile.ID; @@ -523,8 +523,8 @@ namespace OpenSim.Framework.Communications agent.LogoutTime = 0; // Current location - agent.InitialRegion = LLUUID.Zero; // Fill in later - agent.Region = LLUUID.Zero; // Fill in later + agent.InitialRegion = UUID.Zero; // Fill in later + agent.Region = UUID.Zero; // Fill in later profile.CurrentAgent = agent; } @@ -550,17 +550,17 @@ namespace OpenSim.Framework.Communications /// /// /// - public LLUUID AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY) + public UUID AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY) { UserProfileData user = new UserProfileData(); - user.HomeLocation = new LLVector3(128, 128, 100); - user.ID = LLUUID.Random(); + user.HomeLocation = new Vector3(128, 128, 100); + user.ID = UUID.Random(); user.FirstName = firstName; user.SurName = lastName; user.PasswordHash = pass; user.PasswordSalt = String.Empty; user.Created = Util.UnixTimeSinceEpoch(); - user.HomeLookAt = new LLVector3(100, 100, 100); + user.HomeLookAt = new Vector3(100, 100, 100); user.HomeRegionX = regX; user.HomeRegionY = regY; @@ -604,7 +604,7 @@ namespace OpenSim.Framework.Communications public abstract UserProfileData SetupMasterUser(string firstName, string lastName); public abstract UserProfileData SetupMasterUser(string firstName, string lastName, string password); - public abstract UserProfileData SetupMasterUser(LLUUID uuid); + public abstract UserProfileData SetupMasterUser(UUID uuid); /// /// Add agent to DB @@ -629,7 +629,7 @@ namespace OpenSim.Framework.Communications /// Appearance /// TODO: stubs for now to get us to a compiling state gently - public AvatarAppearance GetUserAppearance(LLUUID user) + public AvatarAppearance GetUserAppearance(UUID user) { foreach (IUserDataPlugin plugin in _plugins) { @@ -645,7 +645,7 @@ namespace OpenSim.Framework.Communications return null; } - public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) + public void UpdateUserAppearance(UUID user, AvatarAppearance appearance) { foreach (IUserDataPlugin plugin in _plugins) { diff --git a/OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs b/OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs index 47700175b7..0929172480 100644 --- a/OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs +++ b/OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs @@ -47,7 +47,7 @@ namespace OpenSim.Framework.Configuration.HTTP public HTTPConfiguration() { - remoteConfigSettings = new RemoteConfigSettings("remoteconfig.xml"); + remoteConfigSettings = new RemoteConfigSettings("remoteconfig.Xml"); xmlConfig = new XmlConfiguration(); } diff --git a/OpenSim/Framework/Configuration/XML/XmlConfiguration.cs b/OpenSim/Framework/Configuration/XML/XmlConfiguration.cs index 89f52cf100..e3da962015 100644 --- a/OpenSim/Framework/Configuration/XML/XmlConfiguration.cs +++ b/OpenSim/Framework/Configuration/XML/XmlConfiguration.cs @@ -48,7 +48,7 @@ namespace OpenSim.Framework.Configuration.XML { rootNode = doc.SelectSingleNode("Root"); if (null == rootNode) - throw new Exception("Error: Invalid .xml File. Missing "); + throw new Exception("Error: Invalid .Xml File. Missing "); configNode = rootNode.SelectSingleNode("Config"); if (null == configNode) diff --git a/OpenSim/Framework/ConfigurationMember.cs b/OpenSim/Framework/ConfigurationMember.cs index c363ec0cab..9fdb0468f2 100644 --- a/OpenSim/Framework/ConfigurationMember.cs +++ b/OpenSim/Framework/ConfigurationMember.cs @@ -31,7 +31,7 @@ using System.Globalization; using System.Net; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework.Console; @@ -359,36 +359,36 @@ namespace OpenSim.Framework } errorMessage = "an IP Address (IPAddress)"; break; - case ConfigurationOption.ConfigurationTypes.TYPE_LLUUID: - LLUUID uuidResult; - if (LLUUID.TryParse(console_result, out uuidResult)) + case ConfigurationOption.ConfigurationTypes.TYPE_UUID: + UUID uuidResult; + if (UUID.TryParse(console_result, out uuidResult)) { convertSuccess = true; return_result = uuidResult; } - errorMessage = "a UUID (LLUUID)"; + errorMessage = "a UUID (UUID)"; break; - case ConfigurationOption.ConfigurationTypes.TYPE_LLUUID_NULL_FREE: - LLUUID uuidResult2; - if (LLUUID.TryParse(console_result, out uuidResult2)) + case ConfigurationOption.ConfigurationTypes.TYPE_UUID_NULL_FREE: + UUID uuidResult2; + if (UUID.TryParse(console_result, out uuidResult2)) { convertSuccess = true; - if (uuidResult2 == LLUUID.Zero) - uuidResult2 = LLUUID.Random(); + if (uuidResult2 == UUID.Zero) + uuidResult2 = UUID.Random(); return_result = uuidResult2; } - errorMessage = "a non-null UUID (LLUUID)"; + errorMessage = "a non-null UUID (UUID)"; break; - case ConfigurationOption.ConfigurationTypes.TYPE_LLVECTOR3: - LLVector3 vectorResult; - if (LLVector3.TryParse(console_result, out vectorResult)) + case ConfigurationOption.ConfigurationTypes.TYPE_Vector3: + Vector3 vectorResult; + if (Vector3.TryParse(console_result, out vectorResult)) { convertSuccess = true; return_result = vectorResult; } - errorMessage = "a vector (LLVector3)"; + errorMessage = "a vector (Vector3)"; break; case ConfigurationOption.ConfigurationTypes.TYPE_UINT16: ushort ushortResult; diff --git a/OpenSim/Framework/ConfigurationOption.cs b/OpenSim/Framework/ConfigurationOption.cs index 341d5e8bbd..538ab6241a 100644 --- a/OpenSim/Framework/ConfigurationOption.cs +++ b/OpenSim/Framework/ConfigurationOption.cs @@ -53,9 +53,9 @@ namespace OpenSim.Framework TYPE_CHARACTER, TYPE_BOOLEAN, TYPE_BYTE, - TYPE_LLUUID, - TYPE_LLUUID_NULL_FREE, - TYPE_LLVECTOR3, + TYPE_UUID, + TYPE_UUID_NULL_FREE, + TYPE_Vector3, TYPE_FLOAT, TYPE_DOUBLE } ; @@ -71,4 +71,4 @@ namespace OpenSim.Framework public bool configurationUseDefaultNoPrompt = false; public ConfigurationOptionShouldBeAsked shouldIBeAsked; //Should I be asked now? Based on previous answers } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/EstateBan.cs b/OpenSim/Framework/EstateBan.cs index c213344440..4d3151414a 100644 --- a/OpenSim/Framework/EstateBan.cs +++ b/OpenSim/Framework/EstateBan.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using System; using System.Collections.Generic; using System.Text; @@ -35,7 +35,7 @@ namespace OpenSim.Framework public class EstateBan { public uint estateID = 1; - public LLUUID bannedUUID = LLUUID.Zero; + public UUID bannedUUID = UUID.Zero; public string bannedIP = string.Empty; public string bannedIPHostMask = string.Empty; public string bannedNameMask = string.Empty; diff --git a/OpenSim/Framework/EstateSettings.cs b/OpenSim/Framework/EstateSettings.cs index 8b076fe6a0..83f911d062 100644 --- a/OpenSim/Framework/EstateSettings.cs +++ b/OpenSim/Framework/EstateSettings.cs @@ -29,7 +29,7 @@ using System; using System.IO; using System.Reflection; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using log4net; namespace OpenSim.Framework @@ -223,9 +223,9 @@ namespace OpenSim.Framework set { m_AbuseEmail= value; } } - private LLUUID m_EstateOwner = LLUUID.Zero; + private UUID m_EstateOwner = UUID.Zero; - public LLUUID EstateOwner + public UUID EstateOwner { get { return m_EstateOwner; } set { m_EstateOwner = value; } @@ -241,12 +241,12 @@ namespace OpenSim.Framework // All those lists... // - private List l_EstateManagers = new List(); + private List l_EstateManagers = new List(); - public LLUUID[] EstateManagers + public UUID[] EstateManagers { get { return l_EstateManagers.ToArray(); } - set { l_EstateManagers = new List(value); } + set { l_EstateManagers = new List(value); } } private List l_EstateBans = new List(); @@ -257,20 +257,20 @@ namespace OpenSim.Framework set { l_EstateBans = new List(value); } } - private List l_EstateAccess = new List(); + private List l_EstateAccess = new List(); - public LLUUID[] EstateAccess + public UUID[] EstateAccess { get { return l_EstateAccess.ToArray(); } - set { l_EstateAccess = new List(value); } + set { l_EstateAccess = new List(value); } } - private List l_EstateGroups = new List(); + private List l_EstateGroups = new List(); - public LLUUID[] EstateGroups + public UUID[] EstateGroups { get { return l_EstateGroups.ToArray(); } - set { l_EstateGroups = new List(value); } + set { l_EstateGroups = new List(value); } } public EstateSettings() @@ -281,7 +281,7 @@ namespace OpenSim.Framework // configMember = new ConfigurationMember(Path.Combine(Util.configDir(), - "estate_settings.xml"), "ESTATE SETTINGS", + "estate_settings.Xml"), "ESTATE SETTINGS", loadConfigurationOptions, handleIncomingConfiguration, true); @@ -296,21 +296,21 @@ namespace OpenSim.Framework OnSave(this); } - public void AddEstateManager(LLUUID avatarID) + public void AddEstateManager(UUID avatarID) { - if (avatarID == LLUUID.Zero) + if (avatarID == UUID.Zero) return; if (!l_EstateManagers.Contains(avatarID)) l_EstateManagers.Add(avatarID); } - public void RemoveEstateManager(LLUUID avatarID) + public void RemoveEstateManager(UUID avatarID) { if (l_EstateManagers.Contains(avatarID)) l_EstateManagers.Remove(avatarID); } - public bool IsEstateManager(LLUUID avatarID) + public bool IsEstateManager(UUID avatarID) { if (IsEstateOwner(avatarID)) return true; @@ -318,7 +318,7 @@ namespace OpenSim.Framework return l_EstateManagers.Contains(avatarID); } - public bool IsEstateOwner(LLUUID avatarID) + public bool IsEstateOwner(UUID avatarID) { if (avatarID == m_EstateOwner) return true; @@ -326,7 +326,7 @@ namespace OpenSim.Framework return false; } - public bool IsBanned(LLUUID avatarID) + public bool IsBanned(UUID avatarID) { foreach (EstateBan ban in l_EstateBans) if (ban.bannedUUID == avatarID) @@ -347,7 +347,7 @@ namespace OpenSim.Framework l_EstateBans.Clear(); } - public void RemoveBan(LLUUID avatarID) + public void RemoveBan(UUID avatarID) { foreach (EstateBan ban in new List(l_EstateBans)) if (ban.bannedUUID == avatarID) @@ -385,43 +385,43 @@ namespace OpenSim.Framework String.Empty, "My Estate", true); configMember.addConfigurationOption("estate_manager_0", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("estate_manager_1", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("estate_manager_2", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("estate_manager_3", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("estate_manager_4", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("estate_manager_5", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("estate_manager_6", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("estate_manager_7", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("estate_manager_8", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("estate_manager_9", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "00000000-0000-0000-0000-000000000000", true); configMember.addConfigurationOption("region_flags", @@ -480,34 +480,34 @@ namespace OpenSim.Framework m_EstateName = (string) configuration_result; break; case "estate_manager_0": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; case "estate_manager_1": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; case "estate_manager_2": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; case "estate_manager_3": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; case "estate_manager_4": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; case "estate_manager_5": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; case "estate_manager_6": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; case "estate_manager_7": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; case "estate_manager_8": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; case "estate_manager_9": - AddEstateManager((LLUUID)configuration_result); + AddEstateManager((UUID)configuration_result); break; } diff --git a/OpenSim/Framework/FriendListItem.cs b/OpenSim/Framework/FriendListItem.cs index d3ca759b34..2861ce2437 100644 --- a/OpenSim/Framework/FriendListItem.cs +++ b/OpenSim/Framework/FriendListItem.cs @@ -25,14 +25,14 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class FriendListItem { - public LLUUID Friend; - public LLUUID FriendListOwner; + public UUID Friend; + public UUID FriendListOwner; // These are what the list owner gives the friend permission to do @@ -42,4 +42,4 @@ namespace OpenSim.Framework public bool onlinestatus = false; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/GridInstantMessage.cs b/OpenSim/Framework/GridInstantMessage.cs index 08c5f281b7..037f110dca 100644 --- a/OpenSim/Framework/GridInstantMessage.cs +++ b/OpenSim/Framework/GridInstantMessage.cs @@ -26,6 +26,7 @@ */ using System; +using OpenMetaverse; namespace OpenSim.Framework { @@ -45,7 +46,7 @@ namespace OpenSim.Framework public uint ParentEstateID; - public sLLVector3 Position; + public Vector3 Position; public Guid RegionID; public uint timestamp; @@ -55,4 +56,4 @@ namespace OpenSim.Framework { } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/IAssetProvider.cs b/OpenSim/Framework/IAssetProvider.cs index ec705547ee..4c8627922a 100644 --- a/OpenSim/Framework/IAssetProvider.cs +++ b/OpenSim/Framework/IAssetProvider.cs @@ -25,16 +25,16 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public interface IAssetProviderPlugin : IPlugin { - AssetBase FetchAsset(LLUUID uuid); + AssetBase FetchAsset(UUID uuid); void CreateAsset(AssetBase asset); void UpdateAsset(AssetBase asset); - bool ExistsAsset(LLUUID uuid); + bool ExistsAsset(UUID uuid); void Initialise(string connect); } diff --git a/OpenSim/Framework/IAssetServer.cs b/OpenSim/Framework/IAssetServer.cs index f96bdc694d..d2f5ce7d76 100644 --- a/OpenSim/Framework/IAssetServer.cs +++ b/OpenSim/Framework/IAssetServer.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -35,7 +35,7 @@ namespace OpenSim.Framework public interface IAssetServer { void SetReceiver(IAssetReceiver receiver); - void RequestAsset(LLUUID assetID, bool isTexture); + void RequestAsset(UUID assetID, bool isTexture); void StoreAsset(AssetBase asset); void UpdateAsset(AssetBase asset); void Close(); @@ -59,7 +59,7 @@ namespace OpenSim.Framework /// /// /// - void AssetNotFound(LLUUID assetID, bool IsTexture); + void AssetNotFound(UUID assetID, bool IsTexture); } public interface IAssetPlugin diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index 224b51b226..a7baf0e9d8 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs @@ -28,8 +28,8 @@ using System; using System.Collections.Generic; using System.Net; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; namespace OpenSim.Framework { @@ -44,20 +44,20 @@ namespace OpenSim.Framework public delegate void AvatarNowWearing(Object sender, AvatarWearingArgs e); public delegate void ImprovedInstantMessage(IClientAPI remoteclient, - LLUUID fromAgentID, LLUUID fromAgentSession, LLUUID toAgentID, LLUUID imSessionID, uint timestamp, + UUID fromAgentID, UUID fromAgentSession, UUID toAgentID, UUID imSessionID, uint timestamp, string fromAgentName, string message, byte dialog, bool fromGroup, byte offline, uint ParentEstateID, - LLVector3 Position, LLUUID RegionID, byte[] binaryBucket); // This shouldn't be cut down... + Vector3 Position, UUID RegionID, byte[] binaryBucket); // This shouldn't be cut down... // especially if we're ever going to implement groups, presence, estate message dialogs... - public delegate void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart, - LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, + public delegate void RezObject(IClientAPI remoteClient, UUID itemID, Vector3 RayEnd, Vector3 RayStart, + UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, - bool RezSelected, bool RemoveItem, LLUUID fromTaskID); + bool RezSelected, bool RemoveItem, UUID fromTaskID); - public delegate void RezSingleAttachmentFromInv(IClientAPI remoteClient, LLUUID itemID, uint AttachmentPt, + public delegate void RezSingleAttachmentFromInv(IClientAPI remoteClient, UUID itemID, uint AttachmentPt, uint ItemFlags, uint NextOwnerMask); - public delegate void ObjectAttach(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot); + public delegate void ObjectAttach(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot); public delegate void ModifyTerrain( float height, float seconds, byte size, byte action, float north, float west, float south, float east, @@ -65,9 +65,9 @@ namespace OpenSim.Framework public delegate void SetAppearance(byte[] texture, List visualParamList); - public delegate void StartAnim(IClientAPI remoteClient, LLUUID animID); + public delegate void StartAnim(IClientAPI remoteClient, UUID animID); - public delegate void StopAnim(IClientAPI remoteClient, LLUUID animID); + public delegate void StopAnim(IClientAPI remoteClient, UUID animID); public delegate void LinkObjects(IClientAPI remoteClient, uint parent, List children); @@ -78,14 +78,14 @@ namespace OpenSim.Framework public delegate void RequestMapName(IClientAPI remoteClient, string mapName); public delegate void TeleportLocationRequest( - IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags); + IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags); public delegate void TeleportLandmarkRequest( - IClientAPI remoteClient, LLUUID regionID, LLVector3 position); + IClientAPI remoteClient, UUID regionID, Vector3 position); public delegate void DisconnectUser(); - public delegate void RequestAvatarProperties(IClientAPI remoteClient, LLUUID avatarID); + public delegate void RequestAvatarProperties(IClientAPI remoteClient, UUID avatarID); public delegate void UpdateAvatarProperties(IClientAPI remoteClient, UserProfileData ProfileData); @@ -100,14 +100,14 @@ namespace OpenSim.Framework public delegate void GenericCall7(IClientAPI remoteClient, uint localID, string message); - public delegate void UpdateShape(LLUUID agentID, uint localID, UpdateShapeArgs shapeBlock); + public delegate void UpdateShape(UUID agentID, uint localID, UpdateShapeArgs shapeBlock); - public delegate void ObjectExtraParams(LLUUID agentID, uint localID, ushort type, bool inUse, byte[] data); + public delegate void ObjectExtraParams(UUID agentID, uint localID, ushort type, bool inUse, byte[] data); public delegate void ObjectSelect(uint localID, IClientAPI remoteClient); public delegate void RequestObjectPropertiesFamily( - IClientAPI remoteClient, LLUUID AgentID, uint RequestFlags, LLUUID TaskID); + IClientAPI remoteClient, UUID AgentID, uint RequestFlags, UUID TaskID); public delegate void ObjectDeselect(uint localID, IClientAPI remoteClient); @@ -115,41 +115,41 @@ namespace OpenSim.Framework public delegate void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient); - public delegate void UpdateVector(uint localID, LLVector3 pos, IClientAPI remoteClient); + public delegate void UpdateVector(uint localID, Vector3 pos, IClientAPI remoteClient); - public delegate void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient); + public delegate void UpdatePrimRotation(uint localID, Quaternion rot, IClientAPI remoteClient); - public delegate void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient); + public delegate void UpdatePrimSingleRotation(uint localID, Quaternion rot, IClientAPI remoteClient); - public delegate void UpdatePrimGroupRotation(uint localID, LLVector3 pos, LLQuaternion rot, IClientAPI remoteClient); + public delegate void UpdatePrimGroupRotation(uint localID, Vector3 pos, Quaternion rot, IClientAPI remoteClient); - public delegate void ObjectDuplicate(uint localID, LLVector3 offset, uint dupeFlags, LLUUID AgentID, LLUUID GroupID); + public delegate void ObjectDuplicate(uint localID, Vector3 offset, uint dupeFlags, UUID AgentID, UUID GroupID); - public delegate void ObjectDuplicateOnRay(uint localID, uint dupeFlags, LLUUID AgentID, LLUUID GroupID, - LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart, + public delegate void ObjectDuplicateOnRay(uint localID, uint dupeFlags, UUID AgentID, UUID GroupID, + UUID RayTargetObj, Vector3 RayEnd, Vector3 RayStart, bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates); public delegate void StatusChange(bool status); - public delegate void NewAvatar(IClientAPI remoteClient, LLUUID agentID, bool status); + public delegate void NewAvatar(IClientAPI remoteClient, UUID agentID, bool status); public delegate void UpdateAgent(IClientAPI remoteClient, AgentUpdateArgs agentData); - public delegate void AgentRequestSit(IClientAPI remoteClient, LLUUID agentID, LLUUID targetID, LLVector3 offset); + public delegate void AgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset); - public delegate void AgentSit(IClientAPI remoteClient, LLUUID agentID); + public delegate void AgentSit(IClientAPI remoteClient, UUID agentID); - public delegate void AvatarPickerRequest(IClientAPI remoteClient, LLUUID agentdata, LLUUID queryID, string UserQuery + public delegate void AvatarPickerRequest(IClientAPI remoteClient, UUID agentdata, UUID queryID, string UserQuery ); - public delegate void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 grapPos, IClientAPI remoteClient); + public delegate void MoveObject(UUID objectID, Vector3 offset, Vector3 grapPos, IClientAPI remoteClient); public delegate void ParcelAccessListRequest( - LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client); + UUID agentID, UUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client); public delegate void ParcelAccessListUpdateRequest( - LLUUID agentID, LLUUID sessionID, uint flags, int landLocalID, List entries, + UUID agentID, UUID sessionID, uint flags, int landLocalID, List entries, IClientAPI remote_client); public delegate void ParcelPropertiesRequest( @@ -168,80 +168,80 @@ namespace OpenSim.Framework public delegate void ParcelAbandonRequest(int local_id, IClientAPI remote_client); public delegate void ParcelReclaim(int local_id, IClientAPI remote_client); - public delegate void ParcelReturnObjectsRequest(int local_id, uint return_type, LLUUID[] agent_ids, LLUUID[] selected_ids, IClientAPI remote_client); + public delegate void ParcelReturnObjectsRequest(int local_id, uint return_type, UUID[] agent_ids, UUID[] selected_ids, IClientAPI remote_client); - public delegate void EstateOwnerMessageRequest(LLUUID AgentID, LLUUID SessionID, LLUUID TransactionID, LLUUID Invoice, byte[] Method, byte[][] Parameters, IClientAPI remote_client); + public delegate void EstateOwnerMessageRequest(UUID AgentID, UUID SessionID, UUID TransactionID, UUID Invoice, byte[] Method, byte[][] Parameters, IClientAPI remote_client); public delegate void RegionInfoRequest(IClientAPI remote_client); public delegate void EstateCovenantRequest(IClientAPI remote_client); - public delegate void UUIDNameRequest(LLUUID id, IClientAPI remote_client); + public delegate void UUIDNameRequest(UUID id, IClientAPI remote_client); public delegate void AddNewPrim( - LLUUID ownerID, LLVector3 RayEnd, LLQuaternion rot, PrimitiveBaseShape shape, byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID, + UUID ownerID, Vector3 RayEnd, Quaternion rot, PrimitiveBaseShape shape, byte bypassRaycast, Vector3 RayStart, UUID RayTargetID, byte RayEndIsIntersection); - public delegate void RequestGodlikePowers(LLUUID AgentID, LLUUID SessionID, LLUUID token, bool GodLike, IClientAPI remote_client); + public delegate void RequestGodlikePowers(UUID AgentID, UUID SessionID, UUID token, bool GodLike, IClientAPI remote_client); public delegate void GodKickUser( - LLUUID GodAgentID, LLUUID GodSessionID, LLUUID AgentID, uint kickflags, byte[] reason); + UUID GodAgentID, UUID GodSessionID, UUID AgentID, uint kickflags, byte[] reason); public delegate void CreateInventoryFolder( - IClientAPI remoteClient, LLUUID folderID, ushort folderType, string folderName, LLUUID parentID); + IClientAPI remoteClient, UUID folderID, ushort folderType, string folderName, UUID parentID); public delegate void UpdateInventoryFolder( - IClientAPI remoteClient, LLUUID folderID, ushort type, string name, LLUUID parentID); + IClientAPI remoteClient, UUID folderID, ushort type, string name, UUID parentID); public delegate void MoveInventoryFolder( - IClientAPI remoteClient, LLUUID folderID, LLUUID parentID); + IClientAPI remoteClient, UUID folderID, UUID parentID); public delegate void CreateNewInventoryItem( - IClientAPI remoteClient, LLUUID transActionID, LLUUID folderID, uint callbackID, string description, string name, + IClientAPI remoteClient, UUID transActionID, UUID folderID, uint callbackID, string description, string name, sbyte invType, sbyte type, byte wearableType, uint nextOwnerMask, int creationDate); public delegate void FetchInventoryDescendents( - IClientAPI remoteClient, LLUUID folderID, LLUUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder); + IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder); public delegate void PurgeInventoryDescendents( - IClientAPI remoteClient, LLUUID folderID); + IClientAPI remoteClient, UUID folderID); - public delegate void FetchInventory(IClientAPI remoteClient, LLUUID itemID, LLUUID ownerID); + public delegate void FetchInventory(IClientAPI remoteClient, UUID itemID, UUID ownerID); public delegate void RequestTaskInventory(IClientAPI remoteClient, uint localID); /* public delegate void UpdateInventoryItem( - IClientAPI remoteClient, LLUUID transactionID, LLUUID itemID, string name, string description, + IClientAPI remoteClient, UUID transactionID, UUID itemID, string name, string description, uint nextOwnerMask);*/ public delegate void UpdateInventoryItem( - IClientAPI remoteClient, LLUUID transactionID, LLUUID itemID, InventoryItemBase itemUpd); + IClientAPI remoteClient, UUID transactionID, UUID itemID, InventoryItemBase itemUpd); public delegate void CopyInventoryItem( - IClientAPI remoteClient, uint callbackID, LLUUID oldAgentID, LLUUID oldItemID, LLUUID newFolderID, + IClientAPI remoteClient, uint callbackID, UUID oldAgentID, UUID oldItemID, UUID newFolderID, string newName); public delegate void MoveInventoryItem( - IClientAPI remoteClient, LLUUID folderID, LLUUID itemID, int length, string newName); + IClientAPI remoteClient, UUID folderID, UUID itemID, int length, string newName); public delegate void RemoveInventoryItem( - IClientAPI remoteClient, LLUUID itemID); + IClientAPI remoteClient, UUID itemID); public delegate void RemoveInventoryFolder( - IClientAPI remoteClient, LLUUID folderID); + IClientAPI remoteClient, UUID folderID); public delegate void RequestAsset(IClientAPI remoteClient, RequestAssetArgs transferRequest); - public delegate void RezScript(IClientAPI remoteClient, InventoryItemBase item, LLUUID transactionID, uint localID); + public delegate void RezScript(IClientAPI remoteClient, InventoryItemBase item, UUID transactionID, uint localID); - public delegate void UpdateTaskInventory(IClientAPI remoteClient, LLUUID transactionID, TaskInventoryItem item, uint localID); + public delegate void UpdateTaskInventory(IClientAPI remoteClient, UUID transactionID, TaskInventoryItem item, uint localID); - public delegate void MoveTaskInventory(IClientAPI remoteClient, LLUUID folderID, uint localID, LLUUID itemID); + public delegate void MoveTaskInventory(IClientAPI remoteClient, UUID folderID, uint localID, UUID itemID); - public delegate void RemoveTaskInventory(IClientAPI remoteClient, LLUUID itemID, uint localID); + public delegate void RemoveTaskInventory(IClientAPI remoteClient, UUID itemID, uint localID); public delegate void UDPAssetUploadRequest( - IClientAPI remoteClient, LLUUID assetID, LLUUID transaction, sbyte type, byte[] data, bool storeLocal, + IClientAPI remoteClient, UUID assetID, UUID transaction, sbyte type, byte[] data, bool storeLocal, bool tempFile); public delegate void XferReceive(IClientAPI remoteClient, ulong xferID, uint packetID, byte[] data); @@ -250,60 +250,60 @@ namespace OpenSim.Framework public delegate void ConfirmXfer(IClientAPI remoteClient, ulong xferID, uint packetID); - public delegate void FriendActionDelegate(IClientAPI remoteClient, LLUUID agentID, LLUUID transactionID, List callingCardFolders); + public delegate void FriendActionDelegate(IClientAPI remoteClient, UUID agentID, UUID transactionID, List callingCardFolders); - public delegate void FriendshipTermination(IClientAPI remoteClient, LLUUID agentID, LLUUID ExID); + public delegate void FriendshipTermination(IClientAPI remoteClient, UUID agentID, UUID ExID); - public delegate void MoneyTransferRequest(LLUUID sourceID, LLUUID destID, int amount, int transactionType, string description); + public delegate void MoneyTransferRequest(UUID sourceID, UUID destID, int amount, int transactionType, string description); - public delegate void ParcelBuy(LLUUID agentId, LLUUID groupId, bool final, bool groupOwned, + public delegate void ParcelBuy(UUID agentId, UUID groupId, bool final, bool groupOwned, bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated); // We keep all this information for fraud purposes in the future. - public delegate void MoneyBalanceRequest(IClientAPI remoteClient, LLUUID agentID, LLUUID sessionID, LLUUID TransactionID); + public delegate void MoneyBalanceRequest(IClientAPI remoteClient, UUID agentID, UUID sessionID, UUID TransactionID); - public delegate void ObjectPermissions(IClientAPI controller, LLUUID agentID, LLUUID sessionID, byte field, uint localId, uint mask, byte set); + public delegate void ObjectPermissions(IClientAPI controller, UUID agentID, UUID sessionID, byte field, uint localId, uint mask, byte set); - public delegate void EconomyDataRequest(LLUUID agentID); + public delegate void EconomyDataRequest(UUID agentID); public delegate void ObjectIncludeInSearch(IClientAPI remoteClient, bool IncludeInSearch, uint localID); - public delegate void ScriptAnswer(IClientAPI remoteClient, LLUUID objectID, LLUUID itemID, int answer); + public delegate void ScriptAnswer(IClientAPI remoteClient, UUID objectID, UUID itemID, int answer); - public delegate void RequestPayPrice(IClientAPI remoteClient, LLUUID objectID); - public delegate void ObjectSaleInfo(IClientAPI remoteClient, LLUUID agentID, LLUUID sessionID, uint localID, byte saleType, int salePrice); - public delegate void ObjectBuy(IClientAPI remoteClient, LLUUID agentID, LLUUID sessionID, LLUUID groupID, LLUUID categoryID, uint localID, byte saleType, int salePrice); - public delegate void BuyObjectInventory(IClientAPI remoteClient, LLUUID agentID, LLUUID sessionID, LLUUID objectID, LLUUID itemID, LLUUID folderID); + public delegate void RequestPayPrice(IClientAPI remoteClient, UUID objectID); + public delegate void ObjectSaleInfo(IClientAPI remoteClient, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice); + public delegate void ObjectBuy(IClientAPI remoteClient, UUID agentID, UUID sessionID, UUID groupID, UUID categoryID, uint localID, byte saleType, int salePrice); + public delegate void BuyObjectInventory(IClientAPI remoteClient, UUID agentID, UUID sessionID, UUID objectID, UUID itemID, UUID folderID); - public delegate void ForceReleaseControls(IClientAPI remoteClient, LLUUID agentID); + public delegate void ForceReleaseControls(IClientAPI remoteClient, UUID agentID); public delegate void GodLandStatRequest(int parcelID, uint reportType, uint requestflags, string filter, IClientAPI remoteClient); //Estate Requests - public delegate void DetailedEstateDataRequest(IClientAPI remoteClient, LLUUID invoice); + public delegate void DetailedEstateDataRequest(IClientAPI remoteClient, UUID invoice); public delegate void SetEstateFlagsRequest(bool blockTerraform, bool noFly, bool allowDamage, bool blockLandResell, int maxAgents, float objectBonusFactor, int matureLevel, bool restrictPushObject, bool allowParcelChanges); - public delegate void SetEstateTerrainBaseTexture(IClientAPI remoteClient, int corner, LLUUID side); - public delegate void SetEstateTerrainDetailTexture(IClientAPI remoteClient, int corner, LLUUID side); + public delegate void SetEstateTerrainBaseTexture(IClientAPI remoteClient, int corner, UUID side); + public delegate void SetEstateTerrainDetailTexture(IClientAPI remoteClient, int corner, UUID side); public delegate void SetEstateTerrainTextureHeights(IClientAPI remoteClient, int corner, float lowVal, float highVal); public delegate void CommitEstateTerrainTextureRequest(IClientAPI remoteClient); public delegate void SetRegionTerrainSettings(float waterHeight, float terrainRaiseLimit, float terrainLowerLimit, bool estateSun, bool fixedSun, float sunHour, bool globalSun, bool estateFixed, float estateSunHour); - public delegate void EstateChangeInfo(IClientAPI client, LLUUID invoice, LLUUID senderID, UInt32 param1, UInt32 param2); + public delegate void EstateChangeInfo(IClientAPI client, UUID invoice, UUID senderID, UInt32 param1, UInt32 param2); public delegate void BakeTerrain(IClientAPI remoteClient ); public delegate void EstateRestartSimRequest(IClientAPI remoteClient, int secondsTilReboot); - public delegate void EstateChangeCovenantRequest(IClientAPI remoteClient, LLUUID newCovenantID); - public delegate void UpdateEstateAccessDeltaRequest(IClientAPI remote_client, LLUUID invoice, int estateAccessType, LLUUID user); - public delegate void SimulatorBlueBoxMessageRequest(IClientAPI remoteClient, LLUUID invoice, LLUUID senderID, LLUUID sessionID, string senderName, string message); - public delegate void EstateBlueBoxMessageRequest(IClientAPI remoteClient, LLUUID invoice, LLUUID senderID, LLUUID sessionID, string senderName, string message); - public delegate void EstateDebugRegionRequest(IClientAPI remoteClient, LLUUID invoice, LLUUID senderID, bool scripted, bool collisionEvents, bool physics); - public delegate void EstateTeleportOneUserHomeRequest(IClientAPI remoteClient, LLUUID invoice, LLUUID senderID, LLUUID prey); - public delegate void RegionHandleRequest(IClientAPI remoteClient, LLUUID regionID); - public delegate void ParcelInfoRequest(IClientAPI remoteClient, LLUUID parcelID); + public delegate void EstateChangeCovenantRequest(IClientAPI remoteClient, UUID newCovenantID); + public delegate void UpdateEstateAccessDeltaRequest(IClientAPI remote_client, UUID invoice, int estateAccessType, UUID user); + public delegate void SimulatorBlueBoxMessageRequest(IClientAPI remoteClient, UUID invoice, UUID senderID, UUID sessionID, string senderName, string message); + public delegate void EstateBlueBoxMessageRequest(IClientAPI remoteClient, UUID invoice, UUID senderID, UUID sessionID, string senderName, string message); + public delegate void EstateDebugRegionRequest(IClientAPI remoteClient, UUID invoice, UUID senderID, bool scripted, bool collisionEvents, bool physics); + public delegate void EstateTeleportOneUserHomeRequest(IClientAPI remoteClient, UUID invoice, UUID senderID, UUID prey); + public delegate void RegionHandleRequest(IClientAPI remoteClient, UUID regionID); + public delegate void ParcelInfoRequest(IClientAPI remoteClient, UUID parcelID); - public delegate void ScriptReset(IClientAPI remoteClient, LLUUID objectID, LLUUID itemID); - public delegate void GetScriptRunning(IClientAPI remoteClient, LLUUID objectID, LLUUID itemID); - public delegate void SetScriptRunning(IClientAPI remoteClient, LLUUID objectID, LLUUID itemID, bool running); - public delegate void ActivateGesture(IClientAPI client, LLUUID gestureid, LLUUID assetId); - public delegate void DeactivateGesture(IClientAPI client, LLUUID gestureid); + public delegate void ScriptReset(IClientAPI remoteClient, UUID objectID, UUID itemID); + public delegate void GetScriptRunning(IClientAPI remoteClient, UUID objectID, UUID itemID); + public delegate void SetScriptRunning(IClientAPI remoteClient, UUID objectID, UUID itemID, bool running); + public delegate void ActivateGesture(IClientAPI client, UUID gestureid, UUID assetId); + public delegate void DeactivateGesture(IClientAPI client, UUID gestureid); public delegate void TerrainUnacked(IClientAPI remoteClient, int patchX, int patchY); @@ -311,21 +311,21 @@ namespace OpenSim.Framework public interface IClientAPI { - LLVector3 StartPos { get; set; } + Vector3 StartPos { get; set; } - LLUUID AgentId { get; } + UUID AgentId { get; } - LLUUID SessionId { get; } + UUID SessionId { get; } - LLUUID SecureSessionId { get; } + UUID SecureSessionId { get; } - LLUUID ActiveGroupId { get; } + UUID ActiveGroupId { get; } string ActiveGroupName { get; } ulong ActiveGroupPowers { get; } - ulong GetGroupPowers(LLUUID groupID); + ulong GetGroupPowers(UUID groupID); string FirstName { get; } @@ -429,7 +429,7 @@ namespace OpenSim.Framework event UpdateVector OnUpdatePrimGroupScale; event StatusChange OnChildAgentStatus; event GenericCall2 OnStopMovement; - event Action OnRemoveAvatar; + event Action OnRemoveAvatar; event ObjectPermissions OnObjectPermissions; event CreateNewInventoryItem OnCreateNewInventoryItem; @@ -527,82 +527,82 @@ namespace OpenSim.Framework event ActivateGesture OnActivateGesture; event DeactivateGesture OnDeactivateGesture; - // void ActivateGesture(LLUUID assetId, LLUUID gestureId); + // void ActivateGesture(UUID assetId, UUID gestureId); // [Obsolete("IClientAPI.OutPacket SHOULD NOT EXIST outside of LLClientView please refactor appropriately.")] void OutPacket(Packet newPack, ThrottleOutPacketType packType); void SendWearables(AvatarWearable[] wearables, int serial); - void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry); + void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry); void SendStartPingCheck(byte seq); - void SendKillObject(ulong regionHandle, uint localID); - void SendAnimations(LLUUID[] animID, int[] seqs, LLUUID sourceAgentId); + void SendKiPrimitive(ulong regionHandle, uint localID); + void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId); void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); - void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID, byte source, byte audible); - void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID, byte source, byte audible); + void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, byte source, byte audible); + void SendChatMessage(byte[] message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, byte source, byte audible); - void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, - LLUUID imSessionID, string fromName, byte dialog, uint timeStamp); + void SendInstantMessage(UUID fromAgent, UUID fromAgentSession, string message, UUID toAgent, + UUID imSessionID, string fromName, byte dialog, uint timeStamp); - void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, - LLUUID imSessionID, string fromName, byte dialog, uint timeStamp, + void SendInstantMessage(UUID fromAgent, UUID fromAgentSession, string message, UUID toAgent, + UUID imSessionID, string fromName, byte dialog, uint timeStamp, byte[] binaryBucket); void SendLayerData(float[] map); void SendLayerData(int px, int py, float[] map); - void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look); + void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look); void InformClientOfNeighbour(ulong neighbourHandle, IPEndPoint neighbourExternalEndPoint); AgentCircuitData RequestClientInfo(); - void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, IPEndPoint newRegionExternalEndPoint, + void CrossRegion(ulong newRegionHandle, Vector3 pos, Vector3 lookAt, IPEndPoint newRegionExternalEndPoint, string capsURL); void SendMapBlock(List mapBlocks, uint flag); - void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags); + void SendLocalTeleport(Vector3 position, Vector3 lookAt, uint flags); void SendRegionTeleport(ulong regionHandle, byte simAccess, IPEndPoint regionExternalEndPoint, uint locationID, uint flags, string capsURL); void SendTeleportFailed(string reason); void SendTeleportLocationStart(); - void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance); - void SendPayPrice(LLUUID objectID, int[] payPrice); + void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance); + void SendPayPrice(UUID objectID, int[] payPrice); - void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID, - LLVector3 Pos, byte[] textureEntry, uint parentID, LLQuaternion rotation); + void SendAvatarData(ulong regionHandle, string firstName, string lastName, UUID avatarID, uint avatarLocalID, + Vector3 Pos, byte[] textureEntry, uint parentID, Quaternion rotation); - void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, - LLVector3 velocity, LLQuaternion rotation); + void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, Vector3 position, + Vector3 velocity, Quaternion rotation); - void SendCoarseLocationUpdate(List CoarseLocations); + void SendCoarseLocationUpdate(List CoarseLocations); - void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint); + void AttachObject(uint localID, Quaternion rotation, byte attachPoint); void SetChildAgentThrottle(byte[] throttle); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, - LLVector3 pos, LLVector3 vel, LLVector3 acc, LLQuaternion rotation, LLVector3 rvel, + Vector3 pos, Vector3 vel, Vector3 acc, Quaternion rotation, Vector3 rvel, uint flags, - LLUUID objectID, LLUUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, - byte clickAction, byte[] textureanim, bool attachment, uint AttachPoint, LLUUID AssetId, LLUUID SoundId, double SoundVolume, byte SoundFlags, double SoundRadius); + UUID objectID, UUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, + byte clickAction, byte[] textureanim, bool attachment, uint AttachPoint, UUID AssetId, UUID SoundId, double SoundVolume, byte SoundFlags, double SoundRadius); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, - LLVector3 pos, LLVector3 vel, LLVector3 acc, LLQuaternion rotation, LLVector3 rvel, - uint flags, LLUUID objectID, LLUUID ownerID, string text, byte[] color, + Vector3 pos, Vector3 vel, Vector3 acc, Quaternion rotation, Vector3 rvel, + uint flags, UUID objectID, UUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, byte clickAction); - void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, - LLQuaternion rotation, LLVector3 velocity, LLVector3 rotationalvelocity, byte state, LLUUID AssetId); + void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, Vector3 position, + Quaternion rotation, Vector3 velocity, Vector3 rotationalvelocity, byte state, UUID AssetId); - void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, - LLQuaternion rotation, LLVector3 velocity, LLVector3 rotationalvelocity); + void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, Vector3 position, + Quaternion rotation, Vector3 velocity, Vector3 rotationalvelocity); - void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List items, + void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List items, List folders, bool fetchFolders, bool fetchItems); - void SendInventoryItemDetails(LLUUID ownerID, InventoryItemBase item); + void SendInventoryItemDetails(UUID ownerID, InventoryItemBase item); /// /// Tell the client that we have created the item it requested. @@ -610,11 +610,11 @@ namespace OpenSim.Framework /// void SendInventoryItemCreateUpdate(InventoryItemBase Item); - void SendRemoveInventoryItem(LLUUID itemID); + void SendRemoveInventoryItem(UUID itemID); void SendTakeControls(int controls, bool passToAgent, bool TakeControls); - void SendTaskInventory(LLUUID taskID, short serial, byte[] fileName); + void SendTaskInventory(UUID taskID, short serial, byte[] fileName); /// /// Used by the server to inform the client of a new inventory item. Used when transferring items @@ -632,90 +632,90 @@ namespace OpenSim.Framework void SendAvatarPickerReply(AvatarPickerReplyAgentDataArgs AgentData, List Data); - void SendAgentDataUpdate(LLUUID agentid, LLUUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle); + void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle); - void SendPreLoadSound(LLUUID objectID, LLUUID ownerID, LLUUID soundID); - void SendPlayAttachedSound(LLUUID soundID, LLUUID objectID, LLUUID ownerID, float gain, byte flags); - void SendTriggeredSound(LLUUID soundID, LLUUID ownerID, LLUUID objectID, LLUUID parentID, ulong handle, LLVector3 position, float gain); - void SendAttachedSoundGainChange(LLUUID objectID, float gain); + void SendPreLoadSound(UUID objectID, UUID ownerID, UUID soundID); + void SendPlayAttachedSound(UUID soundID, UUID objectID, UUID ownerID, float gain, byte flags); + void SendTriggeredSound(UUID soundID, UUID ownerID, UUID objectID, UUID parentID, ulong handle, Vector3 position, float gain); + void SendAttachedSoundGainChange(UUID objectID, float gain); - void SendNameReply(LLUUID profileId, string firstname, string lastname); + void SendNameReply(UUID profileId, string firstname, string lastname); void SendAlertMessage(string message); void SendAgentAlertMessage(string message, bool modal); - void SendLoadURL(string objectname, LLUUID objectID, LLUUID ownerID, bool groupOwned, string message, string url); - void SendDialog(string objectname, LLUUID objectID, LLUUID ownerID, string msg, LLUUID textureID, int ch, string[] buttonlabels); + void SendLoadURL(string objectname, UUID objectID, UUID ownerID, bool groupOwned, string message, string url); + void SendDialog(string objectname, UUID objectID, UUID ownerID, string msg, UUID textureID, int ch, string[] buttonlabels); bool AddMoney(int debit); - void SendSunPos(LLVector3 sunPos, LLVector3 sunVel, ulong CurrentTime, uint SecondsPerSunCycle, uint SecondsPerYear, float OrbitalPosition); + void SendSunPos(Vector3 sunPos, Vector3 sunVel, ulong CurrentTime, uint SecondsPerSunCycle, uint SecondsPerYear, float OrbitalPosition); void SendViewerTime(int phase); - LLUUID GetDefaultAnimation(string name); + UUID GetDefaultAnimation(string name); - void SendAvatarProperties(LLUUID avatarID, string aboutText, string bornOn, Byte[] charterMember, string flAbout, - uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, LLUUID partnerID); + void SendAvatarProperties(UUID avatarID, string aboutText, string bornOn, Byte[] charterMember, string flAbout, + uint flags, UUID flImageID, UUID imageID, string profileURL, UUID partnerID); - void SendScriptQuestion(LLUUID taskID, string taskName, string ownerName, LLUUID itemID, int question); + void SendScriptQuestion(UUID taskID, string taskName, string ownerName, UUID itemID, int question); void SendHealth(float health); - void SendEstateManagersList(LLUUID invoice, LLUUID[] EstateManagers, uint estateID); + void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID); - void SendBannedUserList(LLUUID invoice, EstateBan[] banlist, uint estateID); + void SendBannedUserList(UUID invoice, EstateBan[] banlist, uint estateID); void SendRegionInfoToEstateMenu(RegionInfoForEstateMenuArgs args); - void SendEstateCovenantInformation(LLUUID covenant); - void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, LLUUID covenant, string abuseEmail); + void SendEstateCovenantInformation(UUID covenant); + void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail); void SendLandProperties(IClientAPI remote_client, int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags); - void SendLandAccessListData(List avatars, uint accessFlag, int localLandID); + void SendLandAccessListData(List avatars, uint accessFlag, int localLandID); void SendForceClientSelectObjects(List objectIDs); - void SendLandObjectOwners(Dictionary ownersAndCount); + void SendLandObjectOwners(Dictionary ownersAndCount); void SendLandParcelOverlay(byte[] data, int sequence_id); #region Parcel Methods void SendParcelMediaCommand(uint flags, ParcelMediaCommandEnum command, float time); - void SendParcelMediaUpdate(string mediaUrl, LLUUID mediaTextureID, + void SendParcelMediaUpdate(string mediaUrl, UUID mediaTextureID, byte autoScale, string mediaType, string mediaDesc, int mediaWidth, int mediaHeight, byte mediaLoop); #endregion - void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, LLUUID AssetFullID); + void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, UUID AssetFullID); void SendConfirmXfer(ulong xferID, uint PacketID); - void SendXferRequest(ulong XferID, short AssetType, LLUUID vFileID, byte FilePath, byte[] FileName); + void SendXferRequest(ulong XferID, short AssetType, UUID vFileID, byte FilePath, byte[] FileName); - void SendImagePart(ushort numParts, LLUUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec); + void SendImagePart(ushort numParts, UUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec); void SendShutdownConnectionNotice(); void SendSimStats(Packet pack); - void SendObjectPropertiesFamilyData(uint RequestFlags, LLUUID ObjectUUID, LLUUID OwnerID, LLUUID GroupID, + void SendObjectPropertiesFamilyData(uint RequestFlags, UUID ObjectUUID, UUID OwnerID, UUID GroupID, uint BaseMask, uint OwnerMask, uint GroupMask, uint EveryoneMask, uint NextOwnerMask, int OwnershipCost, byte SaleType, int SalePrice, uint Category, - LLUUID LastOwnerID, string ObjectName, string Description); + UUID LastOwnerID, string ObjectName, string Description); - void SendObjectPropertiesReply(LLUUID ItemID, ulong CreationDate, LLUUID CreatorUUID, LLUUID FolderUUID, LLUUID FromTaskUUID, - LLUUID GroupUUID, short InventorySerial, LLUUID LastOwnerUUID, LLUUID ObjectUUID, - LLUUID OwnerUUID, string TouchTitle, byte[] TextureID, string SitTitle, string ItemName, + void SendObjectPropertiesReply(UUID ItemID, ulong CreationDate, UUID CreatorUUID, UUID FolderUUID, UUID FromTaskUUID, + UUID GroupUUID, short InventorySerial, UUID LastOwnerUUID, UUID ObjectUUID, + UUID OwnerUUID, string TouchTitle, byte[] TextureID, string SitTitle, string ItemName, string ItemDescription, uint OwnerMask, uint NextOwnerMask, uint GroupMask, uint EveryoneMask, uint BaseMask, byte saleType, int salePrice); - void SendAgentOffline(LLUUID[] agentIDs); + void SendAgentOffline(UUID[] agentIDs); - void SendAgentOnline(LLUUID[] agentIDs); + void SendAgentOnline(UUID[] agentIDs); - void SendSitResponse(LLUUID TargetID, LLVector3 OffsetPos, LLQuaternion SitOrientation, bool autopilot, - LLVector3 CameraAtOffset, LLVector3 CameraEyeOffset, bool ForceMouseLook); + void SendSitResponse(UUID TargetID, Vector3 OffsetPos, Quaternion SitOrientation, bool autopilot, + Vector3 CameraAtOffset, Vector3 CameraEyeOffset, bool ForceMouseLook); - void SendAdminResponse(LLUUID Token, uint AdminLevel); + void SendAdminResponse(UUID Token, uint AdminLevel); void SendGroupMembership(GroupData[] GroupMembership); - void SendGroupNameReply(LLUUID groupLLUID, string GroupName); + void SendGroupNameReply(UUID groupLLUID, string GroupName); void SendLandStatReply(uint reportType, uint requestFlags, uint resultCount, LandStatReportItem[] lsrpia); - void SendScriptRunningReply(LLUUID objectID, LLUUID itemID, bool running); + void SendScriptRunningReply(UUID objectID, UUID itemID, bool running); void SendAsset(AssetRequestToClient req); @@ -734,18 +734,18 @@ namespace OpenSim.Framework event Action OnLogout; event Action OnConnectionClosed; - void SendBlueBoxMessage(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message); + void SendBlueBoxMessage(UUID FromAvatarID, UUID fromSessionID, String FromAvatarName, String Message); void SendLogoutPacket(); ClientInfo GetClientInfo(); void SetClientInfo(ClientInfo info); void Terminate(); - void SendSetFollowCamProperties(LLUUID objectID, SortedDictionary parameters); - void SendClearFollowCamProperties(LLUUID objectID); + void SendSetFollowCamProperties(UUID objectID, SortedDictionary parameters); + void SendClearFollowCamProperties(UUID objectID); - void SendRegionHandle(LLUUID regoinID, ulong handle); - void SendParcelInfo(RegionInfo info, LandData land, LLUUID parcelID, uint x, uint y); + void SendRegionHandle(UUID regoinID, ulong handle); + void SendParcelInfo(RegionInfo info, LandData land, UUID parcelID, uint x, uint y); void KillEndDone(); } } diff --git a/OpenSim/Framework/IInventoryData.cs b/OpenSim/Framework/IInventoryData.cs index 1c62b0b12f..d5fa25d564 100644 --- a/OpenSim/Framework/IInventoryData.cs +++ b/OpenSim/Framework/IInventoryData.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -46,49 +46,49 @@ namespace OpenSim.Framework /// /// The folder to get subfolders for /// A list of inventory folders - List getFolderHierarchy(LLUUID parentID); + List getFolderHierarchy(UUID parentID); /// /// Returns a list of inventory items contained within the specified folder /// /// The UUID of the target folder /// A List of InventoryItemBase items - List getInventoryInFolder(LLUUID folderID); + List getInventoryInFolder(UUID folderID); /// /// Returns a list of the root folders within a users inventory /// /// The user whos inventory is to be searched /// A list of folder objects - List getUserRootFolders(LLUUID user); + List getUserRootFolders(UUID user); /// /// Returns the users inventory root folder. /// /// The UUID of the user who is having inventory being returned /// Root inventory folder, null if no root inventory folder was found - InventoryFolderBase getUserRootFolder(LLUUID user); + InventoryFolderBase getUserRootFolder(UUID user); /// /// Returns a list of inventory folders contained in the folder 'parentID' /// /// The folder to get subfolders for /// A list of inventory folders - List getInventoryFolders(LLUUID parentID); + List getInventoryFolders(UUID parentID); /// /// Returns an inventory item by its UUID /// /// The UUID of the item to be returned /// A class containing item information - InventoryItemBase getInventoryItem(LLUUID item); + InventoryItemBase getInventoryItem(UUID item); /// /// Returns a specified inventory folder by its UUID /// /// The UUID of the folder to be returned /// A class containing folder information - InventoryFolderBase getInventoryFolder(LLUUID folder); + InventoryFolderBase getInventoryFolder(UUID folder); /// /// Creates a new inventory item based on item @@ -106,7 +106,7 @@ namespace OpenSim.Framework /// /// /// - void deleteInventoryItem(LLUUID item); + void deleteInventoryItem(UUID item); /// /// Adds a new folder specified by folder @@ -130,7 +130,7 @@ namespace OpenSim.Framework /// Deletes a folder. Thie will delete both the folder itself and its contents (items and descendent folders) /// /// The id of the folder - void deleteInventoryFolder(LLUUID folder); + void deleteInventoryFolder(UUID folder); } public class InventoryDataInitialiser : PluginInitialiserBase diff --git a/OpenSim/Framework/IRegionCommsListener.cs b/OpenSim/Framework/IRegionCommsListener.cs index 175850836a..2f0c113dac 100644 --- a/OpenSim/Framework/IRegionCommsListener.cs +++ b/OpenSim/Framework/IRegionCommsListener.cs @@ -26,31 +26,31 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public delegate void ExpectUserDelegate(ulong regionHandle, AgentCircuitData agent); - public delegate bool ExpectPrimDelegate(ulong regionHandle, LLUUID primID, string objData, int XMLMethod); + public delegate bool ExpectPrimDelegate(ulong regionHandle, UUID primID, string objData, int XMLMethod); public delegate void UpdateNeighbours(List neighbours); - public delegate void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying); + public delegate void AgentCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying); - public delegate void PrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical); + public delegate void PrimCrossing(ulong regionHandle, UUID primID, Vector3 position, bool isPhysical); - public delegate void AcknowledgeAgentCross(ulong regionHandle, LLUUID agentID); + public delegate void AcknowledgeAgentCross(ulong regionHandle, UUID agentID); - public delegate void AcknowledgePrimCross(ulong regionHandle, LLUUID PrimID); + public delegate void AcknowledgePrimCross(ulong regionHandle, UUID PrimID); - public delegate bool CloseAgentConnection(ulong regionHandle, LLUUID agentID); + public delegate bool CloseAgentConnection(ulong regionHandle, UUID agentID); public delegate bool RegionUp(RegionInfo region); public delegate bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData); - public delegate void LogOffUser(ulong regionHandle, LLUUID agentID, LLUUID regionSecret, string message); + public delegate void LogOffUser(ulong regionHandle, UUID agentID, UUID regionSecret, string message); public delegate LandData GetLandData(uint x, uint y); diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs index 2cce12f002..d3e79d014a 100644 --- a/OpenSim/Framework/IScene.cs +++ b/OpenSim/Framework/IScene.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -52,7 +52,7 @@ namespace OpenSim.Framework event restart OnRestart; void AddNewClient(IClientAPI client, bool child); - void RemoveClient(LLUUID agentID); + void RemoveClient(UUID agentID); void CloseAllAgents(uint circuitcode); void Restart(int seconds); @@ -60,9 +60,9 @@ namespace OpenSim.Framework string GetSimulatorVersion(); - bool PresenceChildStatus(LLUUID avatarID); + bool PresenceChildStatus(UUID avatarID); - string GetCapsPath(LLUUID agentId); + string GetCapsPath(UUID agentId); T RequestModuleInterface(); } diff --git a/OpenSim/Framework/IUserData.cs b/OpenSim/Framework/IUserData.cs index ffde0026df..40892531f1 100644 --- a/OpenSim/Framework/IUserData.cs +++ b/OpenSim/Framework/IUserData.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -40,7 +40,7 @@ namespace OpenSim.Framework /// /// The user's UUID /// The user data profile. Returns null if no user is found - UserProfileData GetUserByUUID(LLUUID user); + UserProfileData GetUserByUUID(UUID user); /// /// Returns a users profile by searching their username parts @@ -56,14 +56,14 @@ namespace OpenSim.Framework /// ID associated with the user's query. This must match what the client sent /// The filtered contents of the search box when the user hit search. /// The user data profile - List GeneratePickerResults(LLUUID queryID, string query); + List GeneratePickerResults(UUID queryID, string query); /// /// Returns the current agent for a user searching by it's UUID /// /// The users UUID /// The current agent session - UserAgentData GetAgentByUUID(LLUUID user); + UserAgentData GetAgentByUUID(UUID user); /// /// Returns the current session agent for a user searching by username @@ -84,7 +84,7 @@ namespace OpenSim.Framework /// Stores new web-login key for user during web page login /// /// - void StoreWebLoginKey(LLUUID agentID, LLUUID webLoginKey); + void StoreWebLoginKey(UUID agentID, UUID webLoginKey); /// /// Adds a new User profile to the database @@ -99,7 +99,7 @@ namespace OpenSim.Framework bool UpdateUserProfile(UserProfileData user); - void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle); + void UpdateUserCurrentRegion(UUID avatarid, UUID regionuuid, ulong regionhandle); /// /// Adds a new agent to the database /// @@ -112,14 +112,14 @@ namespace OpenSim.Framework /// The agent that who's friends list is being added to /// The agent that being added to the friends list of the friends list owner /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects - void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms); + void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms); /// /// Delete friend on friendlistowner's friendlist. /// /// The agent that who's friends list is being updated /// The Ex-friend agent - void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend); + void RemoveUserFriend(UUID friendlistowner, UUID friend); /// /// Update permissions for friend on friendlistowner's friendlist. @@ -127,13 +127,13 @@ namespace OpenSim.Framework /// The agent that who's friends list is being updated /// The agent that is getting or loosing permissions /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects - void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms); + void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms); /// - /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for LLUUID friendslistowner + /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for UUID friendslistowner /// /// The agent that we're retreiving the friends Data. - List GetUserFriendList(LLUUID friendlistowner); + List GetUserFriendList(UUID friendlistowner); /// /// Attempts to move currency units between accounts (NOT RELIABLE / TRUSTWORTHY. DONT TRY RUN YOUR OWN CURRENCY EXCHANGE WITH REAL VALUES) @@ -142,7 +142,7 @@ namespace OpenSim.Framework /// The account to transfer to /// The amount to transfer /// Successful? - bool MoneyTransferRequest(LLUUID from, LLUUID to, uint amount); + bool MoneyTransferRequest(UUID from, UUID to, uint amount); /// /// Attempts to move inventory between accounts, if inventory is copyable it will be copied into the target account. @@ -151,7 +151,7 @@ namespace OpenSim.Framework /// User to transfer to /// Specified inventory item /// Successful? - bool InventoryTransferRequest(LLUUID from, LLUUID to, LLUUID inventory); + bool InventoryTransferRequest(UUID from, UUID to, UUID inventory); /// /// Initialises the plugin (artificial constructor) @@ -161,11 +161,11 @@ namespace OpenSim.Framework /// /// Gets the user appearance /// - AvatarAppearance GetUserAppearance(LLUUID user); + AvatarAppearance GetUserAppearance(UUID user); - void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance); + void UpdateUserAppearance(UUID user, AvatarAppearance appearance); - void ResetAttachments(LLUUID userID); + void ResetAttachments(UUID userID); } public class UserDataInitialiser : PluginInitialiserBase diff --git a/OpenSim/Framework/InventoryCollection.cs b/OpenSim/Framework/InventoryCollection.cs index df18efbed2..84b7d581ab 100644 --- a/OpenSim/Framework/InventoryCollection.cs +++ b/OpenSim/Framework/InventoryCollection.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -37,6 +37,6 @@ namespace OpenSim.Framework { public List Folders; public List Items; - public LLUUID UserID; + public UUID UserID; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/InventoryFolderBase.cs b/OpenSim/Framework/InventoryFolderBase.cs index 9c3c116cc9..e55f8340a1 100644 --- a/OpenSim/Framework/InventoryFolderBase.cs +++ b/OpenSim/Framework/InventoryFolderBase.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -37,7 +37,7 @@ namespace OpenSim.Framework /// /// The UUID for this folder /// - private LLUUID _id; + private UUID _id; /// /// The name of the folder (64 characters or less) @@ -47,12 +47,12 @@ namespace OpenSim.Framework /// /// The agent who's inventory this is contained by /// - private LLUUID _owner; + private UUID _owner; /// /// The folder this folder is contained in /// - private LLUUID _parentID; + private UUID _parentID; /// /// Type of items normally stored in this folder @@ -72,19 +72,19 @@ namespace OpenSim.Framework set { _name = value; } } - public virtual LLUUID Owner + public virtual UUID Owner { get { return _owner; } set { _owner = value; } } - public virtual LLUUID ParentID + public virtual UUID ParentID { get { return _parentID; } set { _parentID = value; } } - public virtual LLUUID ID + public virtual UUID ID { get { return _id; } set { _id = value; } @@ -102,4 +102,4 @@ namespace OpenSim.Framework set { _version = value; } } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/InventoryItemBase.cs b/OpenSim/Framework/InventoryItemBase.cs index 85b08cb422..4441e731fd 100644 --- a/OpenSim/Framework/InventoryItemBase.cs +++ b/OpenSim/Framework/InventoryItemBase.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -37,7 +37,7 @@ namespace OpenSim.Framework /// /// The UUID of the associated asset on the asset server /// - private LLUUID _assetID; + private UUID _assetID; /// /// This is an enumerated value determining the type of asset (eg Notecard, Sound, Object, etc) @@ -52,9 +52,9 @@ namespace OpenSim.Framework /// /// The creator of this item /// - private LLUUID _creator; + private UUID _creator; - private LLUUID _owner; + private UUID _owner; private uint _nextPermissions; @@ -76,12 +76,12 @@ namespace OpenSim.Framework /// /// The folder this item is contained in /// - private LLUUID _folder; + private UUID _folder; /// /// A UUID containing the ID for the inventory item itself /// - private LLUUID _id; + private UUID _id; /// /// The type of inventory item. (Can be slightly different to the asset type @@ -97,7 +97,7 @@ namespace OpenSim.Framework /// /// /// - private LLUUID _groupID; + private UUID _groupID; /// /// @@ -124,7 +124,7 @@ namespace OpenSim.Framework /// private int _creationDate; - public virtual LLUUID ID { + public virtual UUID ID { get { return _id; } @@ -139,19 +139,19 @@ namespace OpenSim.Framework set { _invType = value; } } - public virtual LLUUID Folder + public virtual UUID Folder { get { return _folder; } set { _folder = value; } } - public virtual LLUUID Owner + public virtual UUID Owner { get { return _owner; } set { _owner = value; } } - public virtual LLUUID Creator + public virtual UUID Creator { get { return _creator; } set { _creator = value; } @@ -199,13 +199,13 @@ namespace OpenSim.Framework set { _assetType = value; } } - public virtual LLUUID AssetID + public virtual UUID AssetID { get { return _assetID; } set { _assetID = value; } } - public virtual LLUUID GroupID + public virtual UUID GroupID { get { diff --git a/OpenSim/Framework/LLGroup.cs b/OpenSim/Framework/LLGroup.cs index 9958780b47..53d42a47ce 100644 --- a/OpenSim/Framework/LLGroup.cs +++ b/OpenSim/Framework/LLGroup.cs @@ -28,7 +28,7 @@ using System; using System.Collections; -using libsecondlife; +using OpenMetaverse; using System.Collections.Generic; using System.Text; @@ -37,8 +37,8 @@ namespace OpenSim.Framework public class GroupData { public string ActiveGroupTitle; - public LLUUID GroupID; - public List GroupMembers; + public UUID GroupID; + public List GroupMembers; public string groupName; public uint groupPowers = (uint)(GroupPowers.LandAllowLandmark | GroupPowers.LandAllowSetHome); public List GroupTitles; @@ -46,10 +46,10 @@ namespace OpenSim.Framework public bool AllowPublish = true; public string Charter = "Cool Group Yeah!"; public int contribution = 0; - public LLUUID FounderID = LLUUID.Zero; + public UUID FounderID = UUID.Zero; public int groupMembershipCost = 0; public int groupRollsCount = 1; - public LLUUID GroupPicture = LLUUID.Zero; + public UUID GroupPicture = UUID.Zero; public bool MaturePublish = true; public int MembershipFee = 0; public bool OpenEnrollment = true; @@ -58,7 +58,7 @@ namespace OpenSim.Framework public GroupData() { GroupTitles = new List(); - GroupMembers = new List(); + GroupMembers = new List(); } public GroupPowers ActiveGroupPowers @@ -70,11 +70,11 @@ namespace OpenSim.Framework public class GroupList { - public List m_GroupList; + public List m_GroupList; public GroupList() { - m_GroupList = new List(); + m_GroupList = new List(); } } } diff --git a/OpenSim/Framework/LandData.cs b/OpenSim/Framework/LandData.cs index a875a50e05..4e66721941 100644 --- a/OpenSim/Framework/LandData.cs +++ b/OpenSim/Framework/LandData.cs @@ -27,22 +27,22 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class LandData { - private LLVector3 _AABBMax = new LLVector3(); - private LLVector3 _AABBMin = new LLVector3(); + private Vector3 _AABBMax = new Vector3(); + private Vector3 _AABBMin = new Vector3(); private int _area = 0; private uint _auctionID = 0; //Unemplemented. If set to 0, not being auctioned - private LLUUID _authBuyerID = LLUUID.Zero; //Unemplemented. Authorized Buyer's UUID + private UUID _authBuyerID = UUID.Zero; //Unemplemented. Authorized Buyer's UUID private Parcel.ParcelCategory _category = new Parcel.ParcelCategory(); //Unemplemented. Parcel's chosen category private int _claimDate = 0; private int _claimPrice = 0; //Unemplemented - private LLUUID _globalID = LLUUID.Zero; - private LLUUID _groupID = LLUUID.Zero; //Unemplemented + private UUID _globalID = UUID.Zero; + private UUID _groupID = UUID.Zero; //Unemplemented private int _groupPrims = 0; private bool _isGroupOwned = false; private byte[] _bitmap = new byte[512]; @@ -50,7 +50,7 @@ namespace OpenSim.Framework private uint _flags = (uint) Parcel.ParcelFlags.AllowFly | (uint) Parcel.ParcelFlags.AllowLandmark | - (uint) Parcel.ParcelFlags.AllowAllObjectEntry | + (uint) Parcel.ParcelFlags.AllowAPrimitiveEntry | (uint) Parcel.ParcelFlags.AllowDeedToGroup | (uint) Parcel.ParcelFlags.AllowTerraform | (uint) Parcel.ParcelFlags.CreateObjects | (uint) Parcel.ParcelFlags.AllowOtherScripts | (uint) Parcel.ParcelFlags.SoundLocal; @@ -60,12 +60,12 @@ namespace OpenSim.Framework private Parcel.ParcelStatus _status = Parcel.ParcelStatus.Leased; private int _localID = 0; private byte _mediaAutoScale = 0; - private LLUUID _mediaID = LLUUID.Zero; + private UUID _mediaID = UUID.Zero; private string _mediaURL = String.Empty; private string _musicURL = String.Empty; private int _otherPrims = 0; - private LLUUID _ownerID = LLUUID.Zero; + private UUID _ownerID = UUID.Zero; private int _ownerPrims = 0; private List _parcelAccessList = new List(); private float _passHours = 0; @@ -74,11 +74,11 @@ namespace OpenSim.Framework private int _selectedPrims = 0; private int _simwideArea = 0; private int _simwidePrims = 0; - private LLUUID _snapshotID = LLUUID.Zero; - private LLVector3 _userLocation = new LLVector3(); - private LLVector3 _userLookAt = new LLVector3(); + private UUID _snapshotID = UUID.Zero; + private Vector3 _userLocation = new Vector3(); + private Vector3 _userLookAt = new Vector3(); - public LLVector3 AABBMax { + public Vector3 AABBMax { get { return _AABBMax; } @@ -87,7 +87,7 @@ namespace OpenSim.Framework } } - public LLVector3 AABBMin { + public Vector3 AABBMin { get { return _AABBMin; } @@ -114,7 +114,7 @@ namespace OpenSim.Framework } } - public LLUUID AuthBuyerID { + public UUID AuthBuyerID { get { return _authBuyerID; } @@ -123,7 +123,7 @@ namespace OpenSim.Framework } } - public libsecondlife.Parcel.ParcelCategory Category { + public OpenMetaverse.Parcel.ParcelCategory Category { get { return _category; } @@ -150,7 +150,7 @@ namespace OpenSim.Framework } } - public LLUUID GlobalID { + public UUID GlobalID { get { return _globalID; } @@ -159,7 +159,7 @@ namespace OpenSim.Framework } } - public LLUUID GroupID { + public UUID GroupID { get { return _groupID; } @@ -231,7 +231,7 @@ namespace OpenSim.Framework } } - public libsecondlife.Parcel.ParcelStatus Status { + public OpenMetaverse.Parcel.ParcelStatus Status { get { return _status; } @@ -258,7 +258,7 @@ namespace OpenSim.Framework } } - public LLUUID MediaID { + public UUID MediaID { get { return _mediaID; } @@ -294,7 +294,7 @@ namespace OpenSim.Framework } } - public LLUUID OwnerID { + public UUID OwnerID { get { return _ownerID; } @@ -312,7 +312,7 @@ namespace OpenSim.Framework } } - public List ParcelAccessList { + public List ParcelAccessList { get { return _parcelAccessList; } @@ -375,7 +375,7 @@ namespace OpenSim.Framework } } - public LLUUID SnapshotID { + public UUID SnapshotID { get { return _snapshotID; } @@ -384,7 +384,7 @@ namespace OpenSim.Framework } } - public LLVector3 UserLocation { + public Vector3 UserLocation { get { return _userLocation; } @@ -393,7 +393,7 @@ namespace OpenSim.Framework } } - public LLVector3 UserLookAt { + public Vector3 UserLookAt { get { return _userLookAt; } @@ -404,7 +404,7 @@ namespace OpenSim.Framework public LandData() { - _globalID = LLUUID.Random(); + _globalID = UUID.Random(); } public LandData Copy() diff --git a/OpenSim/Framework/LandStatReportItem.cs b/OpenSim/Framework/LandStatReportItem.cs index 8c7ee7b4ae..b3ad02a5ba 100644 --- a/OpenSim/Framework/LandStatReportItem.cs +++ b/OpenSim/Framework/LandStatReportItem.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Text; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework @@ -41,7 +41,7 @@ namespace OpenSim.Framework public float LocationZ; public string OwnerName; public float Score; - public LLUUID TaskID; + public UUID TaskID; public uint TaskLocalID; public string TaskName; diff --git a/OpenSim/Framework/LandUpdateArgs.cs b/OpenSim/Framework/LandUpdateArgs.cs index 000ae5343a..0fed711d3f 100644 --- a/OpenSim/Framework/LandUpdateArgs.cs +++ b/OpenSim/Framework/LandUpdateArgs.cs @@ -1,17 +1,17 @@ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class LandUpdateArgs : EventArgs { - public LLUUID AuthBuyerID; + public UUID AuthBuyerID; public Parcel.ParcelCategory Category; public string Desc; - public LLUUID GroupID; + public UUID GroupID; public byte LandingType; public byte MediaAutoScale; - public LLUUID MediaID; + public UUID MediaID; public string MediaURL; public string MusicURL; public string Name; @@ -19,8 +19,8 @@ namespace OpenSim.Framework public float PassHours; public int PassPrice; public int SalePrice; - public LLUUID SnapshotID; - public LLVector3 UserLocation; - public LLVector3 UserLookAt; + public UUID SnapshotID; + public Vector3 UserLocation; + public Vector3 UserLookAt; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Location.cs b/OpenSim/Framework/Location.cs index 77b2c85457..f67543a02f 100644 --- a/OpenSim/Framework/Location.cs +++ b/OpenSim/Framework/Location.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { diff --git a/OpenSim/Framework/Login.cs b/OpenSim/Framework/Login.cs index e754e9f02e..61fffd2bd3 100644 --- a/OpenSim/Framework/Login.cs +++ b/OpenSim/Framework/Login.cs @@ -26,26 +26,26 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class Login { - public LLUUID Agent; - public LLUUID BaseFolder; + public UUID Agent; + public UUID BaseFolder; public string CapsPath = String.Empty; public uint CircuitCode; public string First = "Test"; - public LLUUID InventoryFolder; + public UUID InventoryFolder; public string Last = "User"; - public LLUUID SecureSession = LLUUID.Zero; - public LLUUID Session; - public LLVector3 StartPos; + public UUID SecureSession = UUID.Zero; + public UUID Session; + public Vector3 StartPos; public Login() { - StartPos = new LLVector3(128, 128, 70); + StartPos = new Vector3(128, 128, 70); } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/MapBlockData.cs b/OpenSim/Framework/MapBlockData.cs index 60f5be3b54..7b5bfaafdc 100644 --- a/OpenSim/Framework/MapBlockData.cs +++ b/OpenSim/Framework/MapBlockData.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -35,7 +35,7 @@ namespace OpenSim.Framework public byte Access; public byte Agents; public uint Flags; - public LLUUID MapImageId; + public UUID MapImageId; public String Name; public uint RegionFlags; public byte WaterHeight; @@ -46,4 +46,4 @@ namespace OpenSim.Framework { } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/OSChatMessage.cs b/OpenSim/Framework/OSChatMessage.cs index 7f99cd76da..fbeb7badf0 100644 --- a/OpenSim/Framework/OSChatMessage.cs +++ b/OpenSim/Framework/OSChatMessage.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -44,17 +44,17 @@ namespace OpenSim.Framework protected int m_channel; protected string m_from; protected string m_message; - protected LLVector3 m_position; + protected Vector3 m_position; protected IScene m_scene; protected IClientAPI m_sender; protected object m_senderObject; protected ChatTypeEnum m_type; - protected LLUUID m_fromID; + protected UUID m_fromID; public OSChatMessage() { - m_position = new LLVector3(); + m_position = new Vector3(); } /// @@ -87,7 +87,7 @@ namespace OpenSim.Framework /// /// The position of the sender at the time of the message broadcast. /// - public LLVector3 Position + public Vector3 Position { get { return m_position; } set { m_position = value; } @@ -125,7 +125,7 @@ namespace OpenSim.Framework set { m_senderObject = value; } } - public LLUUID SenderUUID + public UUID SenderUUID { get { return m_fromID; } set { m_fromID = value; } @@ -142,4 +142,4 @@ namespace OpenSim.Framework #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/OSUUID.cs b/OpenSim/Framework/OSUUID.cs index cb83ff2fb9..e69de29bb2 100644 --- a/OpenSim/Framework/OSUUID.cs +++ b/OpenSim/Framework/OSUUID.cs @@ -1,114 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using libsecondlife; - -namespace OpenSim.Framework -{ - [Serializable] - public class OSUUID : IComparable - { - public static readonly OSUUID Zero = new OSUUID(); - public Guid UUID; - - public OSUUID() - { - } - - /* Constructors */ - - public OSUUID(string s) - { - if (s == null) - UUID = new Guid(); - else - UUID = new Guid(s); - } - - public OSUUID(Guid g) - { - UUID = g; - } - - public OSUUID(LLUUID l) - { - UUID = l.UUID; - } - - public OSUUID(ulong u) - { - UUID = new Guid(0, 0, 0, BitConverter.GetBytes(u)); - } - - #region IComparable Members - - public int CompareTo(object obj) - { - if (obj is OSUUID) - { - OSUUID ID = (OSUUID) obj; - return UUID.CompareTo(ID.UUID); - } - - throw new ArgumentException("object is not a OSUUID"); - } - - #endregion - - // out conversion - public override string ToString() - { - return UUID.ToString(); - } - - public LLUUID ToLLUUID() - { - return new LLUUID(UUID); - } - - // for comparison bits - public override int GetHashCode() - { - return UUID.GetHashCode(); - } - - public override bool Equals(object o) - { - if (!(o is LLUUID)) return false; - - OSUUID uuid = (OSUUID) o; - return UUID == uuid.UUID; - } - - // Static methods - public static OSUUID Random() - { - return new OSUUID(Guid.NewGuid()); - } - } -} \ No newline at end of file diff --git a/OpenSim/Framework/PacketPool.cs b/OpenSim/Framework/PacketPool.cs index acd14258cc..27e74cadfa 100644 --- a/OpenSim/Framework/PacketPool.cs +++ b/OpenSim/Framework/PacketPool.cs @@ -28,8 +28,8 @@ using System; using System.Collections; using System.Net; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; namespace OpenSim.Framework { @@ -76,11 +76,13 @@ namespace OpenSim.Framework ushort id; PacketFrequency freq; - Buffer.BlockCopy(bytes, 0, decoded_header, 0, 10); - if ((bytes[0] & Helpers.MSG_ZEROCODED) != 0) { - Helpers.ZeroDecodeCommand(bytes, decoded_header); + Helpers.ZeroDecode(bytes, 16, decoded_header); + } + else + { + Buffer.BlockCopy(bytes, 0, decoded_header, 0, 10); } if (decoded_header[6] == 0xFF) diff --git a/OpenSim/Framework/PluginLoader.cs b/OpenSim/Framework/PluginLoader.cs index cabce1ba8a..366552fc29 100644 --- a/OpenSim/Framework/PluginLoader.cs +++ b/OpenSim/Framework/PluginLoader.cs @@ -342,7 +342,7 @@ namespace OpenSim.Framework } /// - /// Filters out which plugin to load based on its "Provider", which is name given by in the addin.xml + /// Filters out which plugin to load based on its "Provider", which is name given by in the addin.Xml /// public class PluginProviderFilter : IPluginFilter { diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs index f244b51573..56e566b690 100644 --- a/OpenSim/Framework/PrimitiveBaseShape.cs +++ b/OpenSim/Framework/PrimitiveBaseShape.cs @@ -28,7 +28,7 @@ using System; using System.Reflection; using System.Xml.Serialization; -using libsecondlife; +using OpenMetaverse; using log4net; namespace OpenSim.Framework @@ -74,7 +74,7 @@ namespace OpenSim.Framework { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private static readonly LLObject.TextureEntry m_defaultTexture; + private static readonly Primitive.TextureEntry m_defaultTexture; private byte[] m_textureEntry; @@ -96,13 +96,13 @@ namespace OpenSim.Framework private ushort _profileBegin; private ushort _profileEnd; private ushort _profileHollow; - private LLVector3 _scale; + private Vector3 _scale; private byte _state; private ProfileShape _profileShape; private HollowShape _hollowShape; // Sculpted - [XmlIgnore] private LLUUID _sculptTexture = LLUUID.Zero; + [XmlIgnore] private UUID _sculptTexture = UUID.Zero; [XmlIgnore] private byte _sculptType = (byte)0; [XmlIgnore] private byte[] _sculptData = new byte[0]; @@ -172,7 +172,7 @@ namespace OpenSim.Framework static PrimitiveBaseShape() { m_defaultTexture = - new LLObject.TextureEntry(new LLUUID("89556747-24cb-43ed-920b-47caed15465f")); + new Primitive.TextureEntry(new UUID("89556747-24cb-43ed-920b-47caed15465f")); } public PrimitiveBaseShape() @@ -183,12 +183,12 @@ namespace OpenSim.Framework } [XmlIgnore] - public LLObject.TextureEntry Textures + public Primitive.TextureEntry Textures { get { //m_log.DebugFormat("[PRIMITIVE BASE SHAPE]: get m_textureEntry length {0}", m_textureEntry.Length); - return new LLObject.TextureEntry(m_textureEntry, 0, m_textureEntry.Length); + return new Primitive.TextureEntry(m_textureEntry, 0, m_textureEntry.Length); } set { m_textureEntry = value.ToBytes(); } @@ -252,7 +252,7 @@ namespace OpenSim.Framework public void SetScale(float side) { - _scale = new LLVector3(side, side, side); + _scale = new Vector3(side, side, side); } public void SetHeigth(float heigth) @@ -285,22 +285,22 @@ namespace OpenSim.Framework return shape; } - public void SetPathRange(LLVector3 pathRange) + public void SetPathRange(Vector3 pathRange) { - _pathBegin = LLObject.PackBeginCut(pathRange.X); - _pathEnd = LLObject.PackEndCut(pathRange.Y); + _pathBegin = Primitive.PackBeginCut(pathRange.X); + _pathEnd = Primitive.PackEndCut(pathRange.Y); } - public void SetSculptData(byte sculptType, LLUUID SculptTextureUUID) + public void SetSculptData(byte sculptType, UUID SculptTextureUUID) { _sculptType = sculptType; _sculptTexture = SculptTextureUUID; } - public void SetProfileRange(LLVector3 profileRange) + public void SetProfileRange(Vector3 profileRange) { - _profileBegin = LLObject.PackBeginCut(profileRange.X); - _profileEnd = LLObject.PackEndCut(profileRange.Y); + _profileBegin = Primitive.PackBeginCut(profileRange.X); + _profileEnd = Primitive.PackEndCut(profileRange.Y); } public byte[] ExtraParams @@ -477,7 +477,7 @@ namespace OpenSim.Framework } } - public LLVector3 Scale { + public Vector3 Scale { get { return _scale; } @@ -513,7 +513,7 @@ namespace OpenSim.Framework } } - public LLUUID SculptTexture { + public UUID SculptTexture { get { return _sculptTexture; } @@ -904,7 +904,7 @@ namespace OpenSim.Framework public void ReadSculptData(byte[] data, int pos) { byte[] SculptTextureUUID = new byte[16]; - LLUUID SculptUUID = LLUUID.Zero; + UUID SculptUUID = UUID.Zero; byte SculptTypel = data[16+pos]; if (data.Length+pos >= 17) @@ -913,12 +913,12 @@ namespace OpenSim.Framework SculptTextureUUID = new byte[16]; SculptTypel = data[16 + pos]; Array.Copy(data, pos, SculptTextureUUID,0, 16); - SculptUUID = new LLUUID(SculptTextureUUID, 0); + SculptUUID = new UUID(SculptTextureUUID, 0); } else { _sculptEntry = false; - SculptUUID = LLUUID.Zero; + SculptUUID = UUID.Zero; SculptTypel = 0x00; } @@ -953,7 +953,7 @@ namespace OpenSim.Framework _flexiDrag = (float)(data[pos++] & 0x7F) / 10.0f; _flexiGravity = (float)(data[pos++] / 10.0f) - 10.0f; _flexiWind = (float)data[pos++] / 10.0f; - LLVector3 lForce = new LLVector3(data, pos); + Vector3 lForce = new Vector3(data, pos); _flexiForceX = lForce.X; _flexiForceY = lForce.Y; _flexiForceZ = lForce.Z; @@ -986,7 +986,7 @@ namespace OpenSim.Framework data[i++] |= (byte)((byte)(_flexiDrag * 10.01f) & 0x7F); data[i++] = (byte)((_flexiGravity + 10.0f) * 10.01f); data[i++] = (byte)(_flexiWind * 10.01f); - LLVector3 lForce = new LLVector3(_flexiForceX, _flexiForceY, _flexiForceZ); + Vector3 lForce = new Vector3(_flexiForceX, _flexiForceY, _flexiForceZ); lForce.GetBytes().CopyTo(data, i); return data; @@ -997,7 +997,7 @@ namespace OpenSim.Framework if (data.Length - pos >= 16) { _lightEntry = true; - LLColor lColor = new LLColor(data, pos, false); + Color4 lColor = new Color4(data, pos, false); _lightIntensity = lColor.A; _lightColorA = 1f; _lightColorR = lColor.R; @@ -1027,7 +1027,7 @@ namespace OpenSim.Framework byte[] data = new byte[16]; // Alpha channel in color is intensity - LLColor tmpColor = new LLColor(_lightColorR,_lightColorG,_lightColorB,_lightIntensity); + Color4 tmpColor = new Color4(_lightColorR,_lightColorG,_lightColorB,_lightIntensity); tmpColor.GetBytes().CopyTo(data, 0); Helpers.FloatToBytes(_lightRadius).CopyTo(data, 4); diff --git a/OpenSim/Framework/ProxyCodec.cs b/OpenSim/Framework/ProxyCodec.cs index cdba93d2c7..9121bed8bf 100644 --- a/OpenSim/Framework/ProxyCodec.cs +++ b/OpenSim/Framework/ProxyCodec.cs @@ -28,8 +28,8 @@ using System; using System.Collections; using System.Net; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; namespace OpenSim.Framework { diff --git a/OpenSim/Framework/RegionCommsListener.cs b/OpenSim/Framework/RegionCommsListener.cs index 2d0be15be9..5d3c2fe329 100644 --- a/OpenSim/Framework/RegionCommsListener.cs +++ b/OpenSim/Framework/RegionCommsListener.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -84,7 +84,7 @@ namespace OpenSim.Framework } // From User Server - public virtual void TriggerLogOffUser(ulong regionHandle, LLUUID agentID, LLUUID RegionSecret, string message) + public virtual void TriggerLogOffUser(ulong regionHandle, UUID agentID, UUID RegionSecret, string message) { handlerLogOffUser = OnLogOffUser; if (handlerLogOffUser != null) @@ -95,7 +95,7 @@ namespace OpenSim.Framework } - public virtual bool TriggerExpectPrim(ulong regionHandle, LLUUID primID, string objData, int XMLMethod) + public virtual bool TriggerExpectPrim(ulong regionHandle, UUID primID, string objData, int XMLMethod) { handlerExpectPrim = OnExpectPrim; if (handlerExpectPrim != null) @@ -128,7 +128,7 @@ namespace OpenSim.Framework return false; } - public virtual bool TriggerExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, + public virtual bool TriggerExpectAvatarCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying) { handlerAvatarCrossingIntoRegion = OnAvatarCrossingIntoRegion; @@ -140,7 +140,7 @@ namespace OpenSim.Framework return false; } - public virtual bool TriggerExpectPrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, + public virtual bool TriggerExpectPrimCrossing(ulong regionHandle, UUID primID, Vector3 position, bool isPhysical) { handlerPrimCrossingIntoRegion = OnPrimCrossingIntoRegion; @@ -152,7 +152,7 @@ namespace OpenSim.Framework return false; } - public virtual bool TriggerAcknowledgeAgentCrossed(ulong regionHandle, LLUUID agentID) + public virtual bool TriggerAcknowledgeAgentCrossed(ulong regionHandle, UUID agentID) { handlerAcknowledgeAgentCrossed = OnAcknowledgeAgentCrossed; if (handlerAcknowledgeAgentCrossed != null) @@ -163,7 +163,7 @@ namespace OpenSim.Framework return false; } - public virtual bool TriggerAcknowledgePrimCrossed(ulong regionHandle, LLUUID primID) + public virtual bool TriggerAcknowledgePrimCrossed(ulong regionHandle, UUID primID) { handlerAcknowledgePrimCrossed = OnAcknowledgePrimCrossed; if (handlerAcknowledgePrimCrossed != null) @@ -174,7 +174,7 @@ namespace OpenSim.Framework return false; } - public virtual bool TriggerCloseAgentConnection(ulong regionHandle, LLUUID agentID) + public virtual bool TriggerCloseAgentConnection(ulong regionHandle, UUID agentID) { handlerCloseAgentConnection = OnCloseAgentConnection; if (handlerCloseAgentConnection != null) @@ -220,7 +220,7 @@ namespace OpenSim.Framework return false; } - public bool TriggerTellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID) + public bool TriggerTellRegionToCloseChildConnection(ulong regionHandle, UUID agentID) { handlerCloseAgentConnection = OnCloseAgentConnection; if (handlerCloseAgentConnection != null) diff --git a/OpenSim/Framework/RegionHandshakeArgs.cs b/OpenSim/Framework/RegionHandshakeArgs.cs index 5e483f3189..695c726da8 100644 --- a/OpenSim/Framework/RegionHandshakeArgs.cs +++ b/OpenSim/Framework/RegionHandshakeArgs.cs @@ -1,5 +1,5 @@ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -19,14 +19,14 @@ namespace OpenSim.Framework public float waterHeight; public uint regionFlags; public string regionName; - public LLUUID SimOwner; - public LLUUID terrainBase0; - public LLUUID terrainBase1; - public LLUUID terrainBase2; - public LLUUID terrainBase3; - public LLUUID terrainDetail0; - public LLUUID terrainDetail1; - public LLUUID terrainDetail2; - public LLUUID terrainDetail3; + public UUID SimOwner; + public UUID terrainBase0; + public UUID terrainBase1; + public UUID terrainBase2; + public UUID terrainBase3; + public UUID terrainDetail0; + public UUID terrainDetail1; + public UUID terrainDetail2; + public UUID terrainDetail3; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs index 9b12662631..925c5beda2 100644 --- a/OpenSim/Framework/RegionInfo.cs +++ b/OpenSim/Framework/RegionInfo.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Xml; -using libsecondlife; +using OpenMetaverse; using Nini.Config; namespace OpenSim.Framework @@ -69,7 +69,7 @@ namespace OpenSim.Framework protected uint? m_regionLocX; protected uint? m_regionLocY; protected uint m_remotingPort; - public LLUUID RegionID = LLUUID.Zero; + public UUID RegionID = UUID.Zero; public string RemotingAddress; public SimpleRegionInfo() @@ -105,7 +105,7 @@ namespace OpenSim.Framework m_httpPort = ConvertFrom.HttpPort; m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports; RemotingAddress = ConvertFrom.RemotingAddress; - RegionID = LLUUID.Zero; + RegionID = UUID.Zero; ServerURI = ConvertFrom.ServerURI; } @@ -202,16 +202,16 @@ namespace OpenSim.Framework // public bool m_allow_alternate_ports; - public LLUUID MasterAvatarAssignedUUID = LLUUID.Zero; + public UUID MasterAvatarAssignedUUID = UUID.Zero; public string MasterAvatarFirstName = String.Empty; public string MasterAvatarLastName = String.Empty; public string MasterAvatarSandboxPassword = String.Empty; - public LLUUID originRegionID = LLUUID.Zero; + public UUID originRegionID = UUID.Zero; public string proxyUrl = ""; public string RegionName = String.Empty; - public string regionSecret = LLUUID.Random().ToString(); + public string regionSecret = UUID.Random().ToString(); - public LLUUID lastMapUUID = LLUUID.Zero; + public UUID lastMapUUID = UUID.Zero; public string lastMapRefresh = "0"; // Apparently, we're applying the same estatesettings regardless of whether it's local or remote. @@ -248,7 +248,7 @@ namespace OpenSim.Framework m_remotingPort = ConvertFrom.RemotingPort; m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports; RemotingAddress = ConvertFrom.RemotingAddress; - RegionID = LLUUID.Zero; + RegionID = UUID.Zero; proxyUrl = ConvertFrom.ProxyUrl; originRegionID = ConvertFrom.OriginRegionID; RegionName = ConvertFrom.RegionName; @@ -264,7 +264,7 @@ namespace OpenSim.Framework m_remotingPort = ConvertFrom.RemotingPort; m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports; RemotingAddress = ConvertFrom.RemotingAddress; - RegionID = LLUUID.Zero; + RegionID = UUID.Zero; ServerURI = ConvertFrom.ServerURI; } @@ -315,7 +315,7 @@ namespace OpenSim.Framework public void LoadFromNiniSource(IConfigSource source, string sectionName) { string errorMessage = String.Empty; - RegionID = new LLUUID(source.Configs[sectionName].GetString("Region_ID", LLUUID.Random().ToString())); + RegionID = new UUID(source.Configs[sectionName].GetString("Region_ID", UUID.Random().ToString())); RegionName = source.Configs[sectionName].GetString("sim_name", "OpenSim Test"); m_regionLocX = Convert.ToUInt32(source.Configs[sectionName].GetString("sim_location_x", "1000")); m_regionLocY = Convert.ToUInt32(source.Configs[sectionName].GetString("sim_location_y", "1000")); @@ -368,7 +368,7 @@ namespace OpenSim.Framework public void loadConfigurationOptionsFromMe() { - configMember.addConfigurationOption("sim_UUID", ConfigurationOption.ConfigurationTypes.TYPE_LLUUID_NULL_FREE, + configMember.addConfigurationOption("sim_UUID", ConfigurationOption.ConfigurationTypes.TYPE_UUID_NULL_FREE, "UUID of Region (Default is recommended, random UUID)", RegionID.ToString(), true); configMember.addConfigurationOption("sim_name", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, @@ -393,7 +393,7 @@ namespace OpenSim.Framework configMember.addConfigurationOption("external_host_name", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "External Host Name", m_externalHostName, true); - configMember.addConfigurationOption("master_avatar_uuid", ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + configMember.addConfigurationOption("master_avatar_uuid", ConfigurationOption.ConfigurationTypes.TYPE_UUID, "Master Avatar UUID", MasterAvatarAssignedUUID.ToString(), true); configMember.addConfigurationOption("master_avatar_first", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, @@ -404,7 +404,7 @@ namespace OpenSim.Framework configMember.addConfigurationOption("master_avatar_pass", ConfigurationOption.ConfigurationTypes.TYPE_STRING, "(Sandbox Mode Only)Password for Master Avatar account", MasterAvatarSandboxPassword, true); - configMember.addConfigurationOption("lastmap_uuid", ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + configMember.addConfigurationOption("lastmap_uuid", ConfigurationOption.ConfigurationTypes.TYPE_UUID, "Last Map UUID", lastMapUUID.ToString(), true); configMember.addConfigurationOption("lastmap_refresh", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Last Map Refresh", Util.UnixTimeSinceEpoch().ToString(), true); @@ -413,9 +413,9 @@ namespace OpenSim.Framework public void loadConfigurationOptions() { - configMember.addConfigurationOption("sim_UUID", ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + configMember.addConfigurationOption("sim_UUID", ConfigurationOption.ConfigurationTypes.TYPE_UUID, "UUID of Region (Default is recommended, random UUID)", - LLUUID.Random().ToString(), true); + UUID.Random().ToString(), true); configMember.addConfigurationOption("sim_name", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Region Name", "OpenSim Test", false); configMember.addConfigurationOption("sim_location_x", ConfigurationOption.ConfigurationTypes.TYPE_UINT32, @@ -436,8 +436,8 @@ namespace OpenSim.Framework configMember.addConfigurationOption("external_host_name", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "External Host Name", "127.0.0.1", false); - configMember.addConfigurationOption("master_avatar_uuid", ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, - "Master Avatar UUID", LLUUID.Zero.ToString(), true); + configMember.addConfigurationOption("master_avatar_uuid", ConfigurationOption.ConfigurationTypes.TYPE_UUID, + "Master Avatar UUID", UUID.Zero.ToString(), true); configMember.addConfigurationOption("master_avatar_first", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "First Name of Master Avatar", "Test", false, @@ -452,7 +452,7 @@ namespace OpenSim.Framework "(Sandbox Mode Only)Password for Master Avatar account", "test", false, (ConfigurationOption.ConfigurationOptionShouldBeAsked) shouldMasterAvatarDetailsBeAsked); - configMember.addConfigurationOption("lastmap_uuid", ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + configMember.addConfigurationOption("lastmap_uuid", ConfigurationOption.ConfigurationTypes.TYPE_UUID, "Last Map UUID", lastMapUUID.ToString(), true); configMember.addConfigurationOption("lastmap_refresh", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, @@ -461,7 +461,7 @@ namespace OpenSim.Framework public bool shouldMasterAvatarDetailsBeAsked(string configuration_key) { - return MasterAvatarAssignedUUID == LLUUID.Zero; + return MasterAvatarAssignedUUID == UUID.Zero; } public bool handleIncomingConfiguration(string configuration_key, object configuration_result) @@ -469,8 +469,8 @@ namespace OpenSim.Framework switch (configuration_key) { case "sim_UUID": - RegionID = (LLUUID) configuration_result; - originRegionID = (LLUUID) configuration_result; + RegionID = (UUID) configuration_result; + originRegionID = (UUID) configuration_result; break; case "sim_name": RegionName = (string) configuration_result; @@ -505,7 +505,7 @@ namespace OpenSim.Framework } break; case "master_avatar_uuid": - MasterAvatarAssignedUUID = (LLUUID) configuration_result; + MasterAvatarAssignedUUID = (UUID) configuration_result; break; case "master_avatar_first": MasterAvatarFirstName = (string) configuration_result; @@ -518,7 +518,7 @@ namespace OpenSim.Framework MasterAvatarSandboxPassword = Util.Md5Hash(Util.Md5Hash(tempMD5Passwd) + ":" + String.Empty); break; case "lastmap_uuid": - lastMapUUID = (LLUUID)configuration_result; + lastMapUUID = (UUID)configuration_result; break; case "lastmap_refresh": lastMapRefresh = (string)configuration_result; @@ -528,7 +528,7 @@ namespace OpenSim.Framework return true; } - public void SaveLastMapUUID(LLUUID mapUUID) + public void SaveLastMapUUID(UUID mapUUID) { if (null == configMember) return; diff --git a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs index a371851e3d..c7d317fde6 100644 --- a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs +++ b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs @@ -59,12 +59,12 @@ namespace OpenSim.Framework.RegionLoader.Filesystem Directory.CreateDirectory(regionConfigPath); } - string[] configFiles = Directory.GetFiles(regionConfigPath, "*.xml"); + string[] configFiles = Directory.GetFiles(regionConfigPath, "*.Xml"); if (configFiles.Length == 0) { - new RegionInfo("DEFAULT REGION CONFIG", Path.Combine(regionConfigPath, "default.xml"), false); - configFiles = Directory.GetFiles(regionConfigPath, "*.xml"); + new RegionInfo("DEFAULT REGION CONFIG", Path.Combine(regionConfigPath, "default.Xml"), false); + configFiles = Directory.GetFiles(regionConfigPath, "*.Xml"); } RegionInfo[] regionInfos = new RegionInfo[configFiles.Length]; diff --git a/OpenSim/Framework/RegionSettings.cs b/OpenSim/Framework/RegionSettings.cs index e0a60e69fd..525a3f0c59 100644 --- a/OpenSim/Framework/RegionSettings.cs +++ b/OpenSim/Framework/RegionSettings.cs @@ -28,7 +28,7 @@ using System; using System.IO; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; namespace OpenSim.Framework @@ -45,7 +45,7 @@ namespace OpenSim.Framework { if (configMember == null) { - configMember = new ConfigurationMember(Path.Combine(Util.configDir(), "estate_settings.xml"), "ESTATE SETTINGS", LoadConfigurationOptions, HandleIncomingConfiguration, true); + configMember = new ConfigurationMember(Path.Combine(Util.configDir(), "estate_settings.Xml"), "ESTATE SETTINGS", LoadConfigurationOptions, HandleIncomingConfiguration, true); configMember.performConfigurationRetrieve(); } } @@ -69,19 +69,19 @@ namespace OpenSim.Framework String.Empty, "21", true); configMember.addConfigurationOption("terrain_base_0", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "b8d3965a-ad78-bf43-699b-bff8eca6c975",true); configMember.addConfigurationOption("terrain_base_1", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "abb783e6-3e93-26c0-248a-247666855da3",true); configMember.addConfigurationOption("terrain_base_2", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "179cdabd-398a-9b6b-1391-4dc333ba321f",true); configMember.addConfigurationOption("terrain_base_3", - ConfigurationOption.ConfigurationTypes.TYPE_LLUUID, + ConfigurationOption.ConfigurationTypes.TYPE_UUID, String.Empty, "beb169c7-11ea-fff2-efe5-0f24dc881df2",true); configMember.addConfigurationOption("terrain_start_height_0", @@ -179,16 +179,16 @@ namespace OpenSim.Framework m_Maturity = 1; break; case "terrain_base_0": - m_TerrainTexture1 = (LLUUID)value; + m_TerrainTexture1 = (UUID)value; break; case "terrain_base_1": - m_TerrainTexture2 = (LLUUID)value; + m_TerrainTexture2 = (UUID)value; break; case "terrain_base_2": - m_TerrainTexture3 = (LLUUID)value; + m_TerrainTexture3 = (UUID)value; break; case "terrain_base_3": - m_TerrainTexture4 = (LLUUID)value; + m_TerrainTexture4 = (UUID)value; break; case "terrain_start_height_0": m_Elevation1SW = (double)value; @@ -237,9 +237,9 @@ namespace OpenSim.Framework OnSave(this); } - private LLUUID m_RegionUUID = LLUUID.Zero; + private UUID m_RegionUUID = UUID.Zero; - public LLUUID RegionUUID + public UUID RegionUUID { get { return m_RegionUUID; } set { m_RegionUUID = value; } @@ -349,57 +349,57 @@ namespace OpenSim.Framework set { m_DisablePhysics = value; } } - private LLUUID m_TerrainTexture1 = LLUUID.Zero; + private UUID m_TerrainTexture1 = UUID.Zero; - public LLUUID TerrainTexture1 + public UUID TerrainTexture1 { get { return m_TerrainTexture1; } set { - if (value == LLUUID.Zero) - m_TerrainTexture1 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975"); + if (value == UUID.Zero) + m_TerrainTexture1 = new UUID("b8d3965a-ad78-bf43-699b-bff8eca6c975"); else m_TerrainTexture1 = value; } } - private LLUUID m_TerrainTexture2 = LLUUID.Zero; + private UUID m_TerrainTexture2 = UUID.Zero; - public LLUUID TerrainTexture2 + public UUID TerrainTexture2 { get { return m_TerrainTexture2; } set { - if (value == LLUUID.Zero) - m_TerrainTexture2 = new LLUUID("abb783e6-3e93-26c0-248a-247666855da3"); + if (value == UUID.Zero) + m_TerrainTexture2 = new UUID("abb783e6-3e93-26c0-248a-247666855da3"); else m_TerrainTexture2 = value; } } - private LLUUID m_TerrainTexture3 = LLUUID.Zero; + private UUID m_TerrainTexture3 = UUID.Zero; - public LLUUID TerrainTexture3 + public UUID TerrainTexture3 { get { return m_TerrainTexture3; } set { - if (value == LLUUID.Zero) - m_TerrainTexture3 = new LLUUID("179cdabd-398a-9b6b-1391-4dc333ba321f"); + if (value == UUID.Zero) + m_TerrainTexture3 = new UUID("179cdabd-398a-9b6b-1391-4dc333ba321f"); else m_TerrainTexture3 = value; } } - private LLUUID m_TerrainTexture4 = LLUUID.Zero; + private UUID m_TerrainTexture4 = UUID.Zero; - public LLUUID TerrainTexture4 + public UUID TerrainTexture4 { get { return m_TerrainTexture4; } set { - if (value == LLUUID.Zero) - m_TerrainTexture4 = new LLUUID("beb169c7-11ea-fff2-efe5-0f24dc881df2"); + if (value == UUID.Zero) + m_TerrainTexture4 = new UUID("beb169c7-11ea-fff2-efe5-0f24dc881df2"); else m_TerrainTexture4 = value; } @@ -509,17 +509,17 @@ namespace OpenSim.Framework set { m_Sandbox = value; } } - private LLVector3 m_SunVector; + private Vector3 m_SunVector; - public LLVector3 SunVector + public Vector3 SunVector { get { return m_SunVector; } set { m_SunVector = value; } } - private LLUUID m_TerrainImageID; + private UUID m_TerrainImageID; - public LLUUID TerrainImageID + public UUID TerrainImageID { get { return m_TerrainImageID; } set { m_TerrainImageID = value; } @@ -541,9 +541,9 @@ namespace OpenSim.Framework set { m_SunPosition = value; } } - private LLUUID m_Covenant = LLUUID.Zero; + private UUID m_Covenant = UUID.Zero; - public LLUUID Covenant + public UUID Covenant { get { return m_Covenant; } set { m_Covenant = value; } diff --git a/OpenSim/Framework/RequestAssetArgs.cs b/OpenSim/Framework/RequestAssetArgs.cs index 9f64a5ac14..0595ffa8a6 100644 --- a/OpenSim/Framework/RequestAssetArgs.cs +++ b/OpenSim/Framework/RequestAssetArgs.cs @@ -1,5 +1,5 @@ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -8,6 +8,6 @@ namespace OpenSim.Framework public int ChannelType; public float Priority; public int SourceType; - public LLUUID TransferID; + public UUID TransferID; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/SerializableRegionInfo.cs b/OpenSim/Framework/SerializableRegionInfo.cs index 4965a43e5c..2052470347 100644 --- a/OpenSim/Framework/SerializableRegionInfo.cs +++ b/OpenSim/Framework/SerializableRegionInfo.cs @@ -28,7 +28,7 @@ using System; using System.Net; using System.Net.Sockets; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -47,14 +47,14 @@ namespace OpenSim.Framework protected uint m_httpPort = 9000; protected IPEndPoint m_internalEndPoint; - protected Guid m_originRegionID = LLUUID.Zero.UUID; + protected Guid m_originRegionID = UUID.Zero.Guid; protected string m_proxyUrl; protected uint? m_regionLocX; protected uint? m_regionLocY; protected string m_regionName; public uint m_remotingPort; protected string m_serverURI; - public Guid RegionID = LLUUID.Zero.UUID; + public Guid RegionID = UUID.Zero.Guid; public string RemotingAddress; /// @@ -181,10 +181,10 @@ namespace OpenSim.Framework set { m_proxyUrl = value; } } - public LLUUID OriginRegionID + public UUID OriginRegionID { - get { return new LLUUID(m_originRegionID); } - set { m_originRegionID = value.UUID; } + get { return new UUID(m_originRegionID); } + set { m_originRegionID = value.Guid; } } public string RegionName @@ -199,4 +199,4 @@ namespace OpenSim.Framework set { m_serverURI = value; } } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs index d326b66fe4..3787c3872a 100644 --- a/OpenSim/Framework/Servers/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/BaseHttpServer.cs @@ -35,7 +35,7 @@ using System.Reflection; using System.Text; using System.Threading; using System.Xml; -using libsecondlife.StructuredData; +using OpenMetaverse.StructuredData; using log4net; using Nwc.XmlRpc; @@ -709,7 +709,7 @@ namespace OpenSim.Framework.Servers // We'd like to put this into a text file parhaps that's easily editable. // // For this test to work, I used the following secondlife.exe parameters - // "C:\Program Files\SecondLifeWindLight\SecondLifeWindLight.exe" -settings settings_windlight.xml -channel "Second Life WindLight" -set SystemLanguage en-us -loginpage http://10.1.1.2:8002/?show_login_form=TRUE -loginuri http://10.1.1.2:8002 -user 10.1.1.2 + // "C:\Program Files\SecondLifeWindLight\SecondLifeWindLight.exe" -settings settings_windlight.Xml -channel "Second Life WindLight" -set SystemLanguage en-us -loginpage http://10.1.1.2:8002/?show_login_form=TRUE -loginuri http://10.1.1.2:8002 -user 10.1.1.2 // // Even after all that, there's still an error, but it's a start. // diff --git a/OpenSim/Framework/Servers/LLSDMethod.cs b/OpenSim/Framework/Servers/LLSDMethod.cs index 7bb946efd4..6a39544c41 100644 --- a/OpenSim/Framework/Servers/LLSDMethod.cs +++ b/OpenSim/Framework/Servers/LLSDMethod.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife.StructuredData; +using OpenMetaverse.StructuredData; namespace OpenSim.Framework.Servers { diff --git a/OpenSim/Framework/Servers/LLSDMethodString.cs b/OpenSim/Framework/Servers/LLSDMethodString.cs index 09736ba656..e15b621891 100644 --- a/OpenSim/Framework/Servers/LLSDMethodString.cs +++ b/OpenSim/Framework/Servers/LLSDMethodString.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife.StructuredData; +using OpenMetaverse.StructuredData; namespace OpenSim.Framework.Servers { diff --git a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs index 58d5621568..cc64ed663e 100644 --- a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs +++ b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs @@ -28,8 +28,8 @@ using System; using System.Collections.Generic; using System.Text; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework.Statistics.Interfaces; namespace OpenSim.Framework.Statistics @@ -122,8 +122,8 @@ namespace OpenSim.Framework.Statistics /// /// Retain a dictionary of all packet queues stats reporters /// - private IDictionary packetQueueStatsCollectors - = new Dictionary(); + private IDictionary packetQueueStatsCollectors + = new Dictionary(); public void AddAbnormalClientThreadTermination() { @@ -176,9 +176,9 @@ namespace OpenSim.Framework.Statistics /// /// Register as a packet queue stats provider /// - /// An agent LLUUID + /// An agent UUID /// - public void RegisterPacketQueueStatsProvider(LLUUID uuid, IPullStatsProvider provider) + public void RegisterPacketQueueStatsProvider(UUID uuid, IPullStatsProvider provider) { lock (packetQueueStatsCollectors) { @@ -191,8 +191,8 @@ namespace OpenSim.Framework.Statistics /// /// Deregister a packet queue stats provider /// - /// An agent LLUUID - public void DeregisterPacketQueueStatsProvider(LLUUID uuid) + /// An agent UUID + public void DeregisterPacketQueueStatsProvider(UUID uuid) { lock (packetQueueStatsCollectors) { @@ -302,7 +302,7 @@ Asset service request failures: {5}"+ Environment.NewLine, "Send", "In", "Out", "Resend", "Land", "Wind", "Cloud", "Task", "Texture", "Asset")); sb.Append(Environment.NewLine); - foreach (LLUUID key in packetQueueStatsCollectors.Keys) + foreach (UUID key in packetQueueStatsCollectors.Keys) { sb.Append(string.Format("{0}: ", key)); sb.Append(packetQueueStatsCollectors[key].Report()); diff --git a/OpenSim/Framework/TaskInventoryItem.cs b/OpenSim/Framework/TaskInventoryItem.cs index fc84041db2..60b22dbf0a 100644 --- a/OpenSim/Framework/TaskInventoryItem.cs +++ b/OpenSim/Framework/TaskInventoryItem.cs @@ -31,7 +31,7 @@ using System.Reflection; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; -using libsecondlife; +using OpenMetaverse; using log4net; namespace OpenSim.Framework @@ -41,7 +41,7 @@ namespace OpenSim.Framework /// /// This class is not thread safe. Callers must synchronize on Dictionary methods. /// - public class TaskInventoryDictionary : Dictionary, + public class TaskInventoryDictionary : Dictionary, ICloneable, IXmlSerializable { // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -56,7 +56,7 @@ namespace OpenSim.Framework lock (this) { - foreach (LLUUID uuid in Keys) + foreach (UUID uuid in Keys) { clone.Add(uuid, (TaskInventoryItem) this[uuid].Clone()); } @@ -76,7 +76,7 @@ namespace OpenSim.Framework // at System.Xml.Serialization.TypeTranslator.GetTypeData (System.Type runtimeType, System.String xmlDataType) [0x001f6] in /build/buildd/mono-1.2.4/mcs/class/System.XML/System.Xml.Serialization/TypeTranslator.cs:217 // ... // private static XmlSerializer tiiSerializer -// = new XmlSerializer(typeof(Dictionary.ValueCollection)); +// = new XmlSerializer(typeof(Dictionary.ValueCollection)); // see IXmlSerializable @@ -203,31 +203,31 @@ namespace OpenSim.Framework "gesture" }; - private LLUUID _assetID = LLUUID.Zero; + private UUID _assetID = UUID.Zero; private uint _baseMask = FULL_MASK_PERMISSIONS_GENERAL; private uint _creationDate = 0; - private LLUUID _creatorID = LLUUID.Zero; + private UUID _creatorID = UUID.Zero; private string _description = String.Empty; private uint _everyoneMask = FULL_MASK_PERMISSIONS_GENERAL; private uint _flags = 0; - private LLUUID _groupID = LLUUID.Zero; + private UUID _groupID = UUID.Zero; private uint _groupMask = FULL_MASK_PERMISSIONS_GENERAL; private int _invType = 0; - private LLUUID _itemID = LLUUID.Zero; - private LLUUID _lastOwnerID = LLUUID.Zero; + private UUID _itemID = UUID.Zero; + private UUID _lastOwnerID = UUID.Zero; private string _name = String.Empty; private uint _nextOwnerMask = FULL_MASK_PERMISSIONS_GENERAL; - private LLUUID _ownerID = LLUUID.Zero; + private UUID _ownerID = UUID.Zero; private uint _ownerMask = FULL_MASK_PERMISSIONS_GENERAL; - private LLUUID _parentID = LLUUID.Zero; //parent folder id - private LLUUID _parentPartID = LLUUID.Zero; // SceneObjectPart this is inside - private LLUUID _permsGranter; + private UUID _parentID = UUID.Zero; //parent folder id + private UUID _parentPartID = UUID.Zero; // SceneObjectPart this is inside + private UUID _permsGranter; private int _permsMask; private int _type = 0; - public LLUUID AssetID { + public UUID AssetID { get { return _assetID; } @@ -254,7 +254,7 @@ namespace OpenSim.Framework } } - public LLUUID CreatorID { + public UUID CreatorID { get { return _creatorID; } @@ -290,7 +290,7 @@ namespace OpenSim.Framework } } - public LLUUID GroupID { + public UUID GroupID { get { return _groupID; } @@ -317,7 +317,7 @@ namespace OpenSim.Framework } } - public LLUUID ItemID { + public UUID ItemID { get { return _itemID; } @@ -326,7 +326,7 @@ namespace OpenSim.Framework } } - public LLUUID LastOwnerID { + public UUID LastOwnerID { get { return _lastOwnerID; } @@ -353,7 +353,7 @@ namespace OpenSim.Framework } } - public LLUUID OwnerID { + public UUID OwnerID { get { return _ownerID; } @@ -371,7 +371,7 @@ namespace OpenSim.Framework } } - public LLUUID ParentID { + public UUID ParentID { get { return _parentID; } @@ -380,7 +380,7 @@ namespace OpenSim.Framework } } - public LLUUID ParentPartID { + public UUID ParentPartID { get { return _parentPartID; } @@ -389,7 +389,7 @@ namespace OpenSim.Framework } } - public LLUUID PermsGranter { + public UUID PermsGranter { get { return _permsGranter; } @@ -428,12 +428,12 @@ namespace OpenSim.Framework #endregion /// - /// Reset the LLUUIDs for this item. + /// Reset the UUIDs for this item. /// /// The new part ID to which this item belongs - public void ResetIDs(LLUUID partID) + public void ResetIDs(UUID partID) { - _itemID = LLUUID.Random(); + _itemID = UUID.Random(); _parentPartID = partID; } } diff --git a/OpenSim/Framework/TextureRequestArgs.cs b/OpenSim/Framework/TextureRequestArgs.cs index fff1023919..33971d6bc9 100644 --- a/OpenSim/Framework/TextureRequestArgs.cs +++ b/OpenSim/Framework/TextureRequestArgs.cs @@ -1,5 +1,5 @@ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -8,7 +8,7 @@ namespace OpenSim.Framework private sbyte m_discardLevel; private uint m_packetNumber; private float m_priority; - protected LLUUID m_requestedAssetID; + protected UUID m_requestedAssetID; public float Priority { @@ -37,10 +37,10 @@ namespace OpenSim.Framework /// /// /// - public LLUUID RequestedAssetID + public UUID RequestedAssetID { get { return m_requestedAssetID; } set { m_requestedAssetID = value; } } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/UserAgentData.cs b/OpenSim/Framework/UserAgentData.cs index 68f47ba9bf..03a65c5667 100644 --- a/OpenSim/Framework/UserAgentData.cs +++ b/OpenSim/Framework/UserAgentData.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -58,12 +58,12 @@ namespace OpenSim.Framework /// /// The position of the user within the region /// - private LLVector3 currentPos; + private Vector3 currentPos; /// /// Current region the user is logged into /// - private LLUUID currentRegion; + private UUID currentRegion; /// /// A unix timestamp from when the user logged in @@ -78,25 +78,25 @@ namespace OpenSim.Framework /// /// The region the user logged into initially /// - private LLUUID regionID; + private UUID regionID; /// /// The "secure" session ID for the user /// /// Not very secure. Dont rely on it for anything more than Linden Lab does. - private LLUUID secureSessionID; + private UUID secureSessionID; /// /// The session ID for the user (also the agent ID) /// - private LLUUID sessionID; + private UUID sessionID; /// /// The UUID of the users avatar (not the agent!) /// - private LLUUID UUID; + private UUID UUID; - public virtual LLUUID ProfileID + public virtual UUID ProfileID { get { return UUID; } set { UUID = value; } @@ -120,19 +120,19 @@ namespace OpenSim.Framework set { agentOnline = value; } } - public virtual LLUUID SessionID + public virtual UUID SessionID { get { return sessionID; } set { sessionID = value; } } - public virtual LLUUID SecureSessionID + public virtual UUID SecureSessionID { get { return secureSessionID; } set { secureSessionID = value; } } - public virtual LLUUID InitialRegion + public virtual UUID InitialRegion { get { return regionID; } set { regionID = value; } @@ -150,7 +150,7 @@ namespace OpenSim.Framework set { logoutTime = value; } } - public virtual LLUUID Region + public virtual UUID Region { get { return currentRegion; } set { currentRegion = value; } @@ -162,7 +162,7 @@ namespace OpenSim.Framework set { currentHandle = value; } } - public virtual LLVector3 Position + public virtual Vector3 Position { get { return currentPos; } set { currentPos = value; } @@ -186,4 +186,4 @@ namespace OpenSim.Framework set { currentPos.Z = value; } } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/UserProfileData.cs b/OpenSim/Framework/UserProfileData.cs index 2d06148504..bc93766b34 100644 --- a/OpenSim/Framework/UserProfileData.cs +++ b/OpenSim/Framework/UserProfileData.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { @@ -53,12 +53,12 @@ namespace OpenSim.Framework /// /// The coordinates inside the region of the home location /// - private LLVector3 _homeLocation; + private Vector3 _homeLocation; /// /// Where the user will be looking when they rez. /// - private LLVector3 _homeLookAt; + private Vector3 _homeLookAt; private uint _homeRegionX; private uint _homeRegionY; @@ -66,7 +66,7 @@ namespace OpenSim.Framework /// /// The ID value for this user /// - private LLUUID _id; + private UUID _id; /// /// A UNIX Timestamp for the users last login date / time @@ -97,7 +97,7 @@ namespace OpenSim.Framework /// /// The profile image for the users first life tab /// - private LLUUID _profileFirstImage; + private UUID _profileFirstImage; /// /// The first life about text listed in a users profile @@ -107,14 +107,14 @@ namespace OpenSim.Framework /// /// The profile image for an avatar stored on the asset server /// - private LLUUID _profileImage; + private UUID _profileImage; /// /// A uint mask containing the "I want to do" part of the users profile /// private uint _profileWantDoMask; // Profile window "I want to" mask - private LLUUID _rootInventoryFolderID; + private UUID _rootInventoryFolderID; /// /// The second component of a users account name @@ -134,7 +134,7 @@ namespace OpenSim.Framework /// /// The last used Web_login_key /// - private LLUUID _webLoginKey; + private UUID _webLoginKey; // Data for estates and other goodies // to get away from per-machine configs a little @@ -142,7 +142,7 @@ namespace OpenSim.Framework private int _userFlags; private int _godLevel; private string _customType; - private LLUUID _partner; + private UUID _partner; /// /// The regionhandle of the users preferred home region. If @@ -159,26 +159,26 @@ namespace OpenSim.Framework } } - private LLUUID _homeRegionID; + private UUID _homeRegionID; /// /// The regionID of the users home region. This is unique; /// even if the position of the region changes within the /// grid, this will refer to the same region. /// - public LLUUID HomeRegionID + public UUID HomeRegionID { get { return _homeRegionID; } set { _homeRegionID = value; } } // Property wrappers - public virtual LLUUID ID + public virtual UUID ID { get { return _id; } set { _id = value; } } - public virtual LLUUID WebLoginKey + public virtual UUID WebLoginKey { get { return _webLoginKey; } set { _webLoginKey = value; } @@ -220,7 +220,7 @@ namespace OpenSim.Framework set { _homeRegionY = value; } } - public virtual LLVector3 HomeLocation + public virtual Vector3 HomeLocation { get { return _homeLocation; } set { _homeLocation = value; } @@ -246,7 +246,7 @@ namespace OpenSim.Framework } - public virtual LLVector3 HomeLookAt + public virtual Vector3 HomeLookAt { get { return _homeLookAt; } set { _homeLookAt = value; } @@ -283,7 +283,7 @@ namespace OpenSim.Framework set { _lastLogin = value; } } - public virtual LLUUID RootInventoryFolderID + public virtual UUID RootInventoryFolderID { get { return _rootInventoryFolderID; } set { _rootInventoryFolderID = value; } @@ -325,13 +325,13 @@ namespace OpenSim.Framework set { _profileFirstText = value; } } - public virtual LLUUID Image + public virtual UUID Image { get { return _profileImage; } set { _profileImage = value; } } - public virtual LLUUID FirstLifeImage + public virtual UUID FirstLifeImage { get { return _profileFirstImage; } set { _profileFirstImage = value; } @@ -361,7 +361,7 @@ namespace OpenSim.Framework set { _customType = value; } } - public virtual LLUUID Partner + public virtual UUID Partner { get { return _partner; } set { _partner = value; } diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 09bf02962c..d7dcf196a2 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -38,7 +38,7 @@ using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using Nwc.XmlRpc; @@ -67,7 +67,7 @@ namespace OpenSim.Framework /// A 3d vector /// A 3d vector /// The distance between the two vectors - public static double GetDistanceTo(LLVector3 a, LLVector3 b) + public static double GetDistanceTo(Vector3 a, Vector3 b) { float dx = a.X - b.X; float dy = a.Y - b.Y; @@ -80,7 +80,7 @@ namespace OpenSim.Framework /// /// A 3d vector /// The magnitude of the vector - public static double GetMagnitude(LLVector3 a) + public static double GetMagnitude(Vector3 a) { return Math.Sqrt((a.X * a.X) + (a.Y * a.Y) + (a.Z * a.Z)); } @@ -91,20 +91,20 @@ namespace OpenSim.Framework /// A 3d vector /// A new vector which is normalized form of the vector /// The vector paramater cannot be <0,0,0> - public static LLVector3 GetNormalizedVector(LLVector3 a) + public static Vector3 GetNormalizedVector(Vector3 a) { if (IsZeroVector(a)) throw new ArgumentException("Vector paramater cannot be a zero vector."); float Mag = (float) GetMagnitude(a); - return new LLVector3(a.X / Mag, a.Y / Mag, a.Z / Mag); + return new Vector3(a.X / Mag, a.Y / Mag, a.Z / Mag); } /// /// Returns if a vector is a zero vector (has all zero components) /// /// - public static bool IsZeroVector(LLVector3 v) + public static bool IsZeroVector(Vector3 v) { if (v.X == 0 && v.Y == 0 && v.Z == 0) { @@ -268,7 +268,7 @@ namespace OpenSim.Framework public static string GetRandomCapsPath() { - LLUUID caps = LLUUID.Random(); + UUID caps = UUID.Random(); string capsPath = caps.ToString(); capsPath = capsPath.Remove(capsPath.Length - 4, 4); return capsPath; @@ -525,13 +525,13 @@ namespace OpenSim.Framework } /// - /// Convert an LLUUID to a raw uuid string. Right now this is a string without hyphens. + /// Convert an UUID to a raw uuid string. Right now this is a string without hyphens. /// - /// + /// /// - public static String ToRawUuidString(LLUUID lluuid) + public static String ToRawUuidString(UUID UUID) { - return lluuid.UUID.ToString("n"); + return UUID.Guid.ToString("n"); } public static string CleanString(string input) @@ -728,16 +728,16 @@ namespace OpenSim.Framework } // used for RemoteParcelRequest (for "About Landmark") - public static LLUUID BuildFakeParcelID(ulong regionHandle, uint x, uint y) { + public static UUID BuildFakeParcelID(ulong regionHandle, uint x, uint y) { byte[] bytes = { (byte)(regionHandle >> 56), (byte)(regionHandle >> 48), (byte)(regionHandle >> 40), (byte)(regionHandle >> 32), (byte)(regionHandle >> 24), (byte)(regionHandle >> 16), (byte)(regionHandle >> 8), (byte)regionHandle, (byte)(x >> 24), (byte)(x >> 16), (byte)(x >> 8), (byte)x, (byte)(y >> 24), (byte)(y >> 16), (byte)(y >> 8), (byte)y }; - return new LLUUID(bytes, 0); + return new UUID(bytes, 0); } - public static void ParseFakeParcelID(LLUUID parcelID, out ulong regionHandle, out uint x, out uint y) { + public static void ParseFakeParcelID(UUID parcelID, out ulong regionHandle, out uint x, out uint y) { byte[] bytes = parcelID.GetBytes(); regionHandle = Helpers.BytesToUInt64(bytes); x = Helpers.BytesToUInt(bytes, 8); diff --git a/OpenSim/Framework/ViewerEffectEventHandlerArg.cs b/OpenSim/Framework/ViewerEffectEventHandlerArg.cs index 6d7e2aba40..3c7f36d56e 100644 --- a/OpenSim/Framework/ViewerEffectEventHandlerArg.cs +++ b/OpenSim/Framework/ViewerEffectEventHandlerArg.cs @@ -1,15 +1,15 @@ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Framework { public class ViewerEffectEventHandlerArg : EventArgs { - public LLUUID AgentID; + public UUID AgentID; public byte[] Color; public float Duration; - public LLUUID ID; + public UUID ID; public byte Type; public byte[] TypeData; } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/sLLVector3.cs b/OpenSim/Framework/sLLVector3.cs index c0bafb2f1f..e69de29bb2 100644 --- a/OpenSim/Framework/sLLVector3.cs +++ b/OpenSim/Framework/sLLVector3.cs @@ -1,51 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using libsecondlife; - -namespace OpenSim.Framework -{ - [Serializable] - public class sLLVector3 - { - public float x = 0; - public float y = 0; - public float z = 0; - - public sLLVector3() - { - } - - public sLLVector3(LLVector3 v) - { - x = v.X; - y = v.Y; - z = v.Z; - } - } -} \ No newline at end of file diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs index 6d460486b4..bded87574f 100644 --- a/OpenSim/Grid/AssetServer/Main.cs +++ b/OpenSim/Grid/AssetServer/Main.cs @@ -28,7 +28,7 @@ using System; using System.IO; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using log4net.Config; using OpenSim.Framework; @@ -108,7 +108,7 @@ namespace OpenSim.Grid.AssetServer m_httpServer.AddStreamHandler(new PostAssetStreamHandler(this, m_assetProvider)); } - public byte[] GetAssetData(LLUUID assetID, bool isTexture) + public byte[] GetAssetData(UUID assetID, bool isTexture) { return null; } @@ -119,7 +119,7 @@ namespace OpenSim.Grid.AssetServer new PluginLoader (new AssetDataInitialiser (connect)); // loader will try to load all providers (MySQL, MSSQL, etc) - // unless it is constrainted to the correct "Provider" entry in the addin.xml + // unless it is constrainted to the correct "Provider" entry in the addin.Xml loader.Add ("/OpenSim/AssetData", new PluginProviderFilter (provider)); loader.Load(); diff --git a/OpenSim/Grid/AssetServer/RestService.cs b/OpenSim/Grid/AssetServer/RestService.cs index f63b78bda3..457142f4b2 100644 --- a/OpenSim/Grid/AssetServer/RestService.cs +++ b/OpenSim/Grid/AssetServer/RestService.cs @@ -32,7 +32,7 @@ using System.Reflection; using System.Text; using System.Xml; using System.Xml.Serialization; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Servers; @@ -70,9 +70,9 @@ namespace OpenSim.Grid.AssetServer if (p.Length > 0) { - LLUUID assetID = null; + UUID assetID = null; - if (!LLUUID.TryParse(p[0], out assetID)) + if (!UUID.TryParse(p[0], out assetID)) { m_log.InfoFormat( "[REST]: GET:/asset ignoring request with malformed UUID {0}", p[0]); @@ -128,9 +128,9 @@ namespace OpenSim.Grid.AssetServer { string param = GetParam(path); - LLUUID assetId; + UUID assetId; if (param.Length > 0) - LLUUID.TryParse(param, out assetId); + UUID.TryParse(param, out assetId); // byte[] txBuffer = new byte[4096]; XmlSerializer xs = new XmlSerializer(typeof (AssetBase)); diff --git a/OpenSim/Grid/Communications/OGS1/OGS1InterServiceInventoryService.cs b/OpenSim/Grid/Communications/OGS1/OGS1InterServiceInventoryService.cs index a36d396b2e..5de5bb3d4b 100644 --- a/OpenSim/Grid/Communications/OGS1/OGS1InterServiceInventoryService.cs +++ b/OpenSim/Grid/Communications/OGS1/OGS1InterServiceInventoryService.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Communications; using OpenSim.Framework.Servers; @@ -51,10 +51,10 @@ namespace OpenSim.Grid.Communications.OGS1 /// /// /// - public bool CreateNewUserInventory(LLUUID userId) + public bool CreateNewUserInventory(UUID userId) { return SynchronousRestObjectPoster.BeginPostObject( - "POST", m_inventoryServerUrl + "CreateInventory/", userId.UUID); + "POST", m_inventoryServerUrl + "CreateInventory/", userId.Guid); } /// @@ -62,10 +62,10 @@ namespace OpenSim.Grid.Communications.OGS1 /// /// /// - public List GetInventorySkeleton(LLUUID userId) + public List GetInventorySkeleton(UUID userId) { return SynchronousRestObjectPoster.BeginPostObject>( - "POST", m_inventoryServerUrl + "RootFolders/", userId.UUID); + "POST", m_inventoryServerUrl + "RootFolders/", userId.Guid); } } } diff --git a/OpenSim/Grid/GridServer/GridManager.cs b/OpenSim/Grid/GridServer/GridManager.cs index eb4aea6a35..6fbfc7165d 100644 --- a/OpenSim/Grid/GridServer/GridManager.cs +++ b/OpenSim/Grid/GridServer/GridManager.cs @@ -32,7 +32,7 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using Nwc.XmlRpc; using OpenSim.Data; @@ -68,7 +68,7 @@ namespace OpenSim.Grid.GridServer new PluginLoader (new LogDataInitialiser (connect)); // loader will try to load all providers (MySQL, MSSQL, etc) - // unless it is constrainted to the correct "Provider" entry in the addin.xml + // unless it is constrainted to the correct "Provider" entry in the addin.Xml gridloader.Add ("/OpenSim/GridData", new PluginProviderFilter (provider)); logloader.Add ("/OpenSim/LogData", new PluginProviderFilter (provider)); @@ -107,13 +107,13 @@ namespace OpenSim.Grid.GridServer /// /// A UUID key of the region to return /// A SimProfileData for the region - public RegionProfileData GetRegion(LLUUID uuid) + public RegionProfileData GetRegion(UUID uuid) { foreach (IGridDataPlugin plugin in _plugins) { try { - return plugin.GetProfileByLLUUID(uuid); + return plugin.GetProfileByUUID(uuid); } catch (Exception e) { @@ -340,9 +340,9 @@ namespace OpenSim.Grid.GridServer RegionProfileData existingSim; Hashtable requestData = (Hashtable)request.Params[0]; - LLUUID uuid; + UUID uuid; - if (!requestData.ContainsKey("UUID") || !LLUUID.TryParse((string)requestData["UUID"], out uuid)) + if (!requestData.ContainsKey("UUID") || !UUID.TryParse((string)requestData["UUID"], out uuid)) { m_log.Warn("[LOGIN PRELUDE]: Region connected without a UUID, sending back error response."); return ErrorResponse("No UUID passed to grid server - unable to connect you"); @@ -425,7 +425,7 @@ namespace OpenSim.Grid.GridServer catch (Exception e) { m_log.Warn("[LOGIN END]: " + - "Unable to login region " + sim.UUID.ToString() + " via " + plugin.Name); + "Unable to login region " + sim.ToString() + " via " + plugin.Name); m_log.Warn("[LOGIN END]: " + e.ToString()); } } @@ -471,7 +471,7 @@ namespace OpenSim.Grid.GridServer responseData["user_recvkey"] = sim.regionUserRecvKey; responseData["authkey"] = sim.regionSecret; - // New! If set, use as URL to local sim storage (ie http://remotehost/region.yap) + // New! If set, use as URL to local sim storage (ie http://remotehost/region.Yap) responseData["data_uri"] = sim.regionDataURI; responseData["allow_forceful_banlines"] = Config.AllowForcefulBanlines; @@ -515,7 +515,7 @@ namespace OpenSim.Grid.GridServer NeighbourBlock["sim_port"] = aSim.Value.serverPort.ToString(); NeighbourBlock["region_locx"] = aSim.Value.regionLocX.ToString(); NeighbourBlock["region_locy"] = aSim.Value.regionLocY.ToString(); - NeighbourBlock["UUID"] = aSim.Value.UUID.ToString(); + NeighbourBlock["UUID"] = aSim.Value.ToString(); NeighbourBlock["regionHandle"] = aSim.Value.regionHandle.ToString(); if (aSim.Value.UUID != sim.UUID) @@ -566,8 +566,8 @@ namespace OpenSim.Grid.GridServer RegionProfileData sim; sim = new RegionProfileData(); - sim.UUID = new LLUUID((string)requestData["UUID"]); - sim.originUUID = new LLUUID((string)requestData["originUUID"]); + sim.UUID = new UUID((string)requestData["UUID"]); + sim.originUUID = new UUID((string)requestData["originUUID"]); sim.regionRecvKey = String.Empty; sim.regionSendKey = String.Empty; @@ -602,8 +602,8 @@ namespace OpenSim.Grid.GridServer sim.regionLocY = Convert.ToUInt32((string)requestData["region_locy"]); sim.regionLocZ = 0; - LLUUID textureID; - if (LLUUID.TryParse((string)requestData["map-image-id"], out textureID)) + UUID textureID; + if (UUID.TryParse((string)requestData["map-image-id"], out textureID)) { sim.regionMapTextureID = textureID; } @@ -654,11 +654,11 @@ namespace OpenSim.Grid.GridServer if (requestData.ContainsKey("UUID")) { - //TheSim = GetRegion(new LLUUID((string) requestData["UUID"])); + //TheSim = GetRegion(new UUID((string) requestData["UUID"])); uuid = requestData["UUID"].ToString(); m_log.InfoFormat("[LOGOUT]: Logging out region: {0}", uuid); - // logToDB((new LLUUID((string)requestData["UUID"])).ToString(),"XmlRpcDeleteRegionMethod","", 5,"Attempting delete with UUID."); + // logToDB((new UUID((string)requestData["UUID"])).ToString(),"XmlRpcDeleteRegionMethod","", 5,"Attempting delete with UUID."); } else { @@ -716,7 +716,7 @@ namespace OpenSim.Grid.GridServer RegionProfileData simData = null; if (requestData.ContainsKey("region_UUID")) { - LLUUID regionID = new LLUUID((string)requestData["region_UUID"]); + UUID regionID = new UUID((string)requestData["region_UUID"]); simData = GetRegion(regionID); if (simData == null) { @@ -764,7 +764,7 @@ namespace OpenSim.Grid.GridServer responseData["remoting_port"] = simData.remotingPort.ToString(); responseData["region_locx"] = simData.regionLocX.ToString(); responseData["region_locy"] = simData.regionLocY.ToString(); - responseData["region_UUID"] = simData.UUID.UUID.ToString(); + responseData["region_UUID"] = simData.UUID.Guid.ToString(); responseData["region_name"] = simData.regionName; responseData["regionHandle"] = simData.regionHandle.ToString(); } @@ -923,8 +923,8 @@ namespace OpenSim.Grid.GridServer RegionProfileData TheSim; - LLUUID UUID; - if (LLUUID.TryParse(param, out UUID)) + UUID UUID; + if (UUID.TryParse(param, out UUID)) { TheSim = GetRegion(UUID); @@ -933,7 +933,7 @@ namespace OpenSim.Grid.GridServer respstring = ""; respstring += "" + TheSim.regionSendKey + ""; respstring += ""; - respstring += "" + TheSim.UUID.ToString() + ""; + respstring += "" + TheSim.ToString() + ""; respstring += "" + TheSim.regionName + ""; respstring += "" + Util.GetHostFromDNS(TheSim.serverIP).ToString() + ""; respstring += "" + TheSim.serverPort.ToString() + ""; @@ -969,11 +969,11 @@ namespace OpenSim.Grid.GridServer { Console.WriteLine("Processing region update via REST method"); RegionProfileData theSim; - theSim = GetRegion(new LLUUID(param)); + theSim = GetRegion(new UUID(param)); if (theSim == null) { theSim = new RegionProfileData(); - LLUUID UUID = new LLUUID(param); + UUID UUID = new UUID(param); theSim.UUID = UUID; theSim.regionRecvKey = Config.SimRecvKey; } @@ -1067,7 +1067,7 @@ namespace OpenSim.Grid.GridServer { plugin.AddProfile(theSim); m_log.Info("[grid]: New sim added to grid (" + theSim.regionName + ")"); - logToDB(theSim.UUID.ToString(), "RestSetSimMethod", String.Empty, 5, + logToDB(theSim.ToString(), "RestSetSimMethod", String.Empty, 5, "Region successfully updated and connected to grid."); } else diff --git a/OpenSim/Grid/InventoryServer/GridInventoryService.cs b/OpenSim/Grid/InventoryServer/GridInventoryService.cs index e4d43d410c..4d58775dc5 100644 --- a/OpenSim/Grid/InventoryServer/GridInventoryService.cs +++ b/OpenSim/Grid/InventoryServer/GridInventoryService.cs @@ -32,7 +32,7 @@ using System.Reflection; using System.Threading; using System.Net; -using libsecondlife; +using OpenMetaverse; using log4net; using Nwc.XmlRpc; @@ -147,7 +147,7 @@ namespace OpenSim.Grid.InventoryServer } } - public override void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback) + public override void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback) { } @@ -158,7 +158,7 @@ namespace OpenSim.Grid.InventoryServer /// The user's inventory. If an inventory cannot be found then an empty collection is returned. public InventoryCollection GetUserInventory(Guid rawUserID) { - LLUUID userID = new LLUUID(rawUserID); + UUID userID = new UUID(rawUserID); m_log.InfoFormat("[GRID AGENT INVENTORY]: Processing request for inventory of {0}", userID); @@ -216,7 +216,7 @@ namespace OpenSim.Grid.InventoryServer /// public List GetInventorySkeleton(Guid rawUserID) { - LLUUID userID = new LLUUID(rawUserID); + UUID userID = new UUID(rawUserID); return GetInventorySkeleton(userID); } @@ -227,7 +227,7 @@ namespace OpenSim.Grid.InventoryServer /// public bool CreateUsersInventory(Guid rawUserID) { - LLUUID userID = new LLUUID(rawUserID); + UUID userID = new UUID(rawUserID); m_log.InfoFormat("[GRID AGENT INVENTORY]: Creating new set of inventory folders for user {0}", userID); diff --git a/OpenSim/Grid/InventoryServer/Main.cs b/OpenSim/Grid/InventoryServer/Main.cs index a77c570875..9f40d16e3d 100644 --- a/OpenSim/Grid/InventoryServer/Main.cs +++ b/OpenSim/Grid/InventoryServer/Main.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using log4net.Config; using OpenSim.Framework; @@ -142,7 +142,7 @@ namespace OpenSim.Grid.InventoryServer switch (cmd) { case "add-user": - m_inventoryService.CreateUsersInventory(LLUUID.Random().UUID); + m_inventoryService.CreateUsersInventory(UUID.Random().Guid); break; } } diff --git a/OpenSim/Grid/MessagingServer/Main.cs b/OpenSim/Grid/MessagingServer/Main.cs index c80d48c625..f9be780575 100644 --- a/OpenSim/Grid/MessagingServer/Main.cs +++ b/OpenSim/Grid/MessagingServer/Main.cs @@ -28,7 +28,7 @@ using System; using System.IO; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using log4net.Config; @@ -48,7 +48,7 @@ namespace OpenSim.Grid.MessagingServer private MessageServerConfig Cfg; private MessageService msgsvc; - // private LLUUID m_lastCreatedUser = LLUUID.Random(); + // private UUID m_lastCreatedUser = UUID.Random(); public static void Main(string[] args) { @@ -84,7 +84,7 @@ namespace OpenSim.Grid.MessagingServer { base.Startup(); - Cfg = new MessageServerConfig("MESSAGING SERVER", (Path.Combine(Util.configDir(), "MessagingServer_Config.xml"))); + Cfg = new MessageServerConfig("MESSAGING SERVER", (Path.Combine(Util.configDir(), "MessagingServer_Config.Xml"))); m_log.Info("[REGION]: Starting HTTP process"); m_httpServer = new BaseHttpServer(Cfg.HttpPort); @@ -133,7 +133,7 @@ namespace OpenSim.Grid.MessagingServer try { //RestObjectPoster.BeginPostObject(m_userManager._config.InventoryUrl + "CreateInventory/", - //userID.UUID); + //userID.Guid); } catch (Exception ex) { diff --git a/OpenSim/Grid/MessagingServer/MessageService.cs b/OpenSim/Grid/MessagingServer/MessageService.cs index dd6e445755..1c5d3348fc 100644 --- a/OpenSim/Grid/MessagingServer/MessageService.cs +++ b/OpenSim/Grid/MessagingServer/MessageService.cs @@ -31,7 +31,7 @@ using System.Collections.Generic; using System.Net; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nwc.XmlRpc; using OpenSim.Data; @@ -206,11 +206,11 @@ namespace OpenSim.Grid.MessagingServer /// /// /// - public void addBackReference(LLUUID agentID, LLUUID friendID) + public void addBackReference(UUID agentID, UUID friendID) { if (m_presence_BackReferences.Contains(friendID)) { - List presenseBackReferences = (List)m_presence_BackReferences[friendID]; + List presenseBackReferences = (List)m_presence_BackReferences[friendID]; if (!presenseBackReferences.Contains(agentID)) { presenseBackReferences.Add(agentID); @@ -219,7 +219,7 @@ namespace OpenSim.Grid.MessagingServer } else { - List presenceBackReferences = new List(); + List presenceBackReferences = new List(); presenceBackReferences.Add(agentID); m_presence_BackReferences[friendID] = presenceBackReferences; } @@ -230,11 +230,11 @@ namespace OpenSim.Grid.MessagingServer /// /// /// - public void removeBackReference(LLUUID agentID, LLUUID friendID) + public void removeBackReference(UUID agentID, UUID friendID) { if (m_presence_BackReferences.Contains(friendID)) { - List presenseBackReferences = (List)m_presence_BackReferences[friendID]; + List presenseBackReferences = (List)m_presence_BackReferences[friendID]; if (presenseBackReferences.Contains(agentID)) { presenseBackReferences.Remove(agentID); @@ -253,11 +253,11 @@ namespace OpenSim.Grid.MessagingServer /// Logoff Processor. Call this to clean up agent presence data and send logoff presence notifications /// /// - private void ProcessLogOff(LLUUID AgentID) + private void ProcessLogOff(UUID AgentID) { m_log.Info("[LOGOFF]: Processing Logoff"); UserPresenceData AgentData = null; - List AgentsNeedingNotification = new List(); + List AgentsNeedingNotification = new List(); UserPresenceData friendd = null; lock (m_presences) { @@ -275,7 +275,7 @@ namespace OpenSim.Grid.MessagingServer //{ //if (m_presence_BackReferences.Contains(AgentID)) //{ - //AgentsNeedingNotification = (List)m_presence_BackReferences[AgentID]; + //AgentsNeedingNotification = (List)m_presence_BackReferences[AgentID]; //} //} @@ -356,17 +356,17 @@ namespace OpenSim.Grid.MessagingServer #region UserServer Comms /// - /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for LLUUID friendslistowner + /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for UUID friendslistowner /// /// The agent that we're retreiving the friends Data. - public List GetUserFriendList(LLUUID friendlistowner) + public List GetUserFriendList(UUID friendlistowner) { List buddylist = new List(); try { Hashtable param = new Hashtable(); - param["ownerID"] = friendlistowner.UUID.ToString(); + param["ownerID"] = friendlistowner.ToString(); IList parameters = new ArrayList(); parameters.Add(param); @@ -403,8 +403,8 @@ namespace OpenSim.Grid.MessagingServer { FriendListItem buddylistitem = new FriendListItem(); - buddylistitem.FriendListOwner = new LLUUID((string)data["ownerID" + i.ToString()]); - buddylistitem.Friend = new LLUUID((string)data["friendID" + i.ToString()]); + buddylistitem.FriendListOwner = new UUID((string)data["ownerID" + i.ToString()]); + buddylistitem.Friend = new UUID((string)data["friendID" + i.ToString()]); buddylistitem.FriendListOwnerPerms = (uint)Convert.ToInt32((string)data["ownerPerms" + i.ToString()]); buddylistitem.FriendPerms = (uint)Convert.ToInt32((string)data["friendPerms" + i.ToString()]); @@ -438,11 +438,11 @@ namespace OpenSim.Grid.MessagingServer //requestData["lastname"] = lastname; AgentCircuitData agentData = new AgentCircuitData(); - agentData.SessionID = new LLUUID((string)requestData["sessionid"]); - agentData.SecureSessionID = new LLUUID((string)requestData["secure_session_id"]); + agentData.SessionID = new UUID((string)requestData["sessionid"]); + agentData.SecureSessionID = new UUID((string)requestData["secure_session_id"]); agentData.firstname = (string)requestData["firstname"]; agentData.lastname = (string)requestData["lastname"]; - agentData.AgentID = new LLUUID((string)requestData["agentid"]); + agentData.AgentID = new UUID((string)requestData["agentid"]); agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); agentData.CapsPath = (string)requestData["caps_path"]; @@ -453,7 +453,7 @@ namespace OpenSim.Grid.MessagingServer else { agentData.startpos = - new LLVector3(Convert.ToUInt32(requestData["positionx"]), + new Vector3(Convert.ToUInt32(requestData["positionx"]), Convert.ToUInt32(requestData["positiony"]), Convert.ToUInt32(requestData["positionz"])); agentData.child = false; @@ -485,7 +485,7 @@ namespace OpenSim.Grid.MessagingServer m_log.Info("[USERLOGOFF]: User logged off called"); Hashtable requestData = (Hashtable)request.Params[0]; - LLUUID AgentID = new LLUUID((string)requestData["agentid"]); + UUID AgentID = new UUID((string)requestData["agentid"]); ProcessLogOff(AgentID); @@ -598,7 +598,7 @@ namespace OpenSim.Grid.MessagingServer regionProfile.regionLocY = regY; regionProfile.remotingPort = Convert.ToUInt32((string)responseData["remoting_port"]); - regionProfile.UUID = new LLUUID((string)responseData["region_UUID"]); + regionProfile.UUID = new UUID((string)responseData["region_UUID"]); regionProfile.regionName = (string)responseData["region_name"]; lock (m_regionInfoCache) { diff --git a/OpenSim/Grid/MessagingServer/PresenceBackreferenceEntry.cs b/OpenSim/Grid/MessagingServer/PresenceBackreferenceEntry.cs index 281beb923e..4d6f3defa2 100644 --- a/OpenSim/Grid/MessagingServer/PresenceBackreferenceEntry.cs +++ b/OpenSim/Grid/MessagingServer/PresenceBackreferenceEntry.cs @@ -28,21 +28,21 @@ using System; using System.Collections.Generic; using System.Text; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Grid.MessagingServer { - // This is a wrapper for a List so it can be happily stored in a hashtable. + // This is a wrapper for a List so it can be happily stored in a hashtable. public class PresenceBackreferenceEntry { - List AgentList = new List(); + List AgentList = new List(); public PresenceBackreferenceEntry() { } - public void Add(LLUUID item) + public void Add(UUID item) { lock (AgentList) { @@ -50,9 +50,9 @@ namespace OpenSim.Grid.MessagingServer } } - public LLUUID getitem(int index) + public UUID getitem(int index) { - LLUUID result = null; + UUID result = null; lock (AgentList) { if (index > 0 && index < AgentList.Count) @@ -76,7 +76,7 @@ namespace OpenSim.Grid.MessagingServer } } - public void Remove(LLUUID item) + public void Remove(UUID item) { lock (AgentList) { @@ -85,7 +85,7 @@ namespace OpenSim.Grid.MessagingServer } } - public bool contains(LLUUID item) + public bool contains(UUID item) { bool result = false; lock (AgentList) diff --git a/OpenSim/Grid/MessagingServer/UserManager.cs b/OpenSim/Grid/MessagingServer/UserManager.cs index de41756ae4..6fa5113ede 100644 --- a/OpenSim/Grid/MessagingServer/UserManager.cs +++ b/OpenSim/Grid/MessagingServer/UserManager.cs @@ -30,7 +30,7 @@ using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Text.RegularExpressions; -using libsecondlife; +using OpenMetaverse; using log4net; using Nwc.XmlRpc; using OpenSim.Framework; @@ -41,7 +41,7 @@ namespace OpenSim.Grid.MessagingServer { class UserManager : UserManagerBase { - public UserAgentData GetUserAgentData(LLUUID AgentID) + public UserAgentData GetUserAgentData(UUID AgentID) { UserProfileData userProfile = GetUserProfile(AgentID); @@ -67,7 +67,7 @@ namespace OpenSim.Grid.MessagingServer return null; } - public override UserProfileData SetupMasterUser(LLUUID uuid) + public override UserProfileData SetupMasterUser(UUID uuid) { //throw new Exception("The method or operation is not implemented."); return null; diff --git a/OpenSim/Grid/MessagingServer/UserPresenceData.cs b/OpenSim/Grid/MessagingServer/UserPresenceData.cs index 3c5002c850..2119c13bf0 100644 --- a/OpenSim/Grid/MessagingServer/UserPresenceData.cs +++ b/OpenSim/Grid/MessagingServer/UserPresenceData.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Data; using OpenSim.Framework; @@ -39,7 +39,7 @@ namespace OpenSim.Grid.MessagingServer public RegionProfileData regionData = new RegionProfileData(); public string httpURI = String.Empty; public List friendData = new List (); - public List subscriptionData = new List(); + public List subscriptionData = new List(); public bool OnlineYN = true; public bool lookupUserRegionYN = true; diff --git a/OpenSim/Grid/MessagingServer/XMPPHTTPService.cs b/OpenSim/Grid/MessagingServer/XMPPHTTPService.cs index 13bf29047e..3b433bafdb 100644 --- a/OpenSim/Grid/MessagingServer/XMPPHTTPService.cs +++ b/OpenSim/Grid/MessagingServer/XMPPHTTPService.cs @@ -29,7 +29,7 @@ using System; using System.IO; using System.Net; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework.Servers; @@ -63,9 +63,9 @@ namespace OpenSim.Grid.MessagingServer if (p.Length > 0) { - LLUUID assetID = null; + UUID assetID = null; - if (!LLUUID.TryParse(p[0], out assetID)) + if (!UUID.TryParse(p[0], out assetID)) { m_log.InfoFormat( "[REST]: GET:/presence ignoring request with malformed UUID {0}", p[0]); @@ -91,9 +91,9 @@ namespace OpenSim.Grid.MessagingServer { string param = GetParam(path); - LLUUID assetId; + UUID assetId; if (param.Length > 0) - LLUUID.TryParse(param, out assetId); + UUID.TryParse(param, out assetId); // byte[] txBuffer = new byte[4096]; // TODO: Read POST serialize XMPP stanzas diff --git a/OpenSim/Grid/ScriptServer/ScriptServerMain.cs b/OpenSim/Grid/ScriptServer/ScriptServerMain.cs index 63bdea8ff0..4b226ae639 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServerMain.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServerMain.cs @@ -27,7 +27,7 @@ using System; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework.Console; using OpenSim.Framework.Servers; @@ -92,7 +92,7 @@ namespace OpenSim.Grid.ScriptServer if (Command == "OnRezScript") { - Engine.EventManager().OnRezScript((uint)p[0], new LLUUID((string)p[1]), (string)p[2], 0, false); + Engine.EventManager().OnRezScript((uint)p[0], new UUID((string)p[1]), (string)p[2], 0, false); } } diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs index e4876485bd..6441b7ae65 100644 --- a/OpenSim/Grid/UserServer/Main.cs +++ b/OpenSim/Grid/UserServer/Main.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.IO; using System.Net; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using log4net.Config; using OpenSim.Framework; @@ -58,7 +58,7 @@ namespace OpenSim.Grid.UserServer public MessageServersConnector m_messagesService; protected IInterServiceInventoryServices m_interServiceInventoryService; - private LLUUID m_lastCreatedUser = LLUUID.Random(); + private UUID m_lastCreatedUser = UUID.Random(); public static void Main(string[] args) { @@ -92,7 +92,7 @@ namespace OpenSim.Grid.UserServer { base.Startup(); - Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml"))); + Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.Xml"))); m_stats = StatsManager.StartCollectingUserStats(); @@ -183,7 +183,7 @@ namespace OpenSim.Grid.UserServer tempMD5Passwd = Util.Md5Hash(Util.Md5Hash(tempMD5Passwd) + ":" + String.Empty); - LLUUID userID = new LLUUID(); + UUID userID = new UUID(); try { @@ -209,7 +209,7 @@ namespace OpenSim.Grid.UserServer { m_log.ErrorFormat( "[USERS]: Could not contact the inventory service at {0} to create an inventory for {1}", - Cfg.InventoryUrl + "CreateInventory/", userID.UUID); + Cfg.InventoryUrl + "CreateInventory/", userID); } catch (Exception e) { @@ -240,8 +240,8 @@ namespace OpenSim.Grid.UserServer case "test-inventory": // RestObjectPosterResponse> requester = new RestObjectPosterResponse>(); // requester.ReturnResponseVal = TestResponse; - // requester.BeginPostObject(m_userManager._config.InventoryUrl + "RootFolders/", m_lastCreatedUser); - SynchronousRestObjectPoster.BeginPostObject>( + // requester.BeginPostObject(m_userManager._config.InventoryUrl + "RootFolders/", m_lastCreatedUser); + SynchronousRestObjectPoster.BeginPostObject>( "POST", Cfg.InventoryUrl + "RootFolders/", m_lastCreatedUser); break; @@ -322,12 +322,12 @@ namespace OpenSim.Grid.UserServer m_console.Notice("response got"); } - public void NotifyMessageServersUserLoggOff(LLUUID agentID) + public void NotifyMessageServersUserLoggOff(UUID agentID) { m_messagesService.TellMessageServersAboutUserLogoff(agentID); } - public void NotifyMessageServersUserLoggedInToLocation(LLUUID agentID, LLUUID sessionID, LLUUID RegionID, + public void NotifyMessageServersUserLoggedInToLocation(UUID agentID, UUID sessionID, UUID RegionID, ulong regionhandle, float positionX, float positionY, float positionZ, string firstname, string lastname) { @@ -335,4 +335,4 @@ namespace OpenSim.Grid.UserServer positionY, positionZ, firstname, lastname); } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/UserServer/MessageServersConnector.cs b/OpenSim/Grid/UserServer/MessageServersConnector.cs index b3f8b19c63..8fecd5b3aa 100644 --- a/OpenSim/Grid/UserServer/MessageServersConnector.cs +++ b/OpenSim/Grid/UserServer/MessageServersConnector.cs @@ -29,7 +29,7 @@ using System.Collections; using System.Collections.Generic; using System.Net; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nwc.XmlRpc; using OpenSim.Framework.Servers; @@ -146,7 +146,7 @@ namespace OpenSim.Grid.UserServer // string scurrentRegionID = (string)requestData["regionid"]; // string sregionhandle = (string)requestData["regionhandle"]; // string scurrentpos = (string)requestData["currentpos"]; - //LLVector3.TryParse((string)reader["currentPos"], out retval.currentPos); + //Vector3.TryParse((string)reader["currentPos"], out retval.currentPos); // TODO: Okay now raise event so the user server can pass this data to the Usermanager responseData["responsestring"] = "TRUE"; @@ -155,7 +155,7 @@ namespace OpenSim.Grid.UserServer return response; } - public void TellMessageServersAboutUser(LLUUID agentID, LLUUID sessionID, LLUUID RegionID, + public void TellMessageServersAboutUser(UUID agentID, UUID sessionID, UUID RegionID, ulong regionhandle, float positionX, float positionY, float positionZ, string firstname, string lastname) { @@ -179,7 +179,7 @@ namespace OpenSim.Grid.UserServer } } - public void TellMessageServersAboutUserLogoff(LLUUID agentID) + public void TellMessageServersAboutUserLogoff(UUID agentID) { lock (MessageServers) { @@ -198,7 +198,7 @@ namespace OpenSim.Grid.UserServer } } - private void NotifyMessageServerAboutUserLogoff(MessageServerInfo serv, LLUUID agentID) + private void NotifyMessageServerAboutUserLogoff(MessageServerInfo serv, UUID agentID) { Hashtable reqparams = new Hashtable(); reqparams["sendkey"] = serv.sendkey; @@ -219,7 +219,7 @@ namespace OpenSim.Grid.UserServer } private void NotifyMessageServerAboutUser(MessageServerInfo serv, - LLUUID agentID, LLUUID sessionID, LLUUID RegionID, + UUID agentID, UUID sessionID, UUID RegionID, ulong regionhandle, float positionX, float positionY, float positionZ, string firstname, string lastname) { diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs index 1f8434633d..10490a6ef9 100644 --- a/OpenSim/Grid/UserServer/UserLoginService.cs +++ b/OpenSim/Grid/UserServer/UserLoginService.cs @@ -29,7 +29,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nwc.XmlRpc; using OpenSim.Data; @@ -39,7 +39,7 @@ using OpenSim.Framework.Communications.Cache; namespace OpenSim.Grid.UserServer { - public delegate void UserLoggedInAtLocation(LLUUID agentID, LLUUID sessionID, LLUUID RegionID, + public delegate void UserLoggedInAtLocation(UUID agentID, UUID sessionID, UUID RegionID, ulong regionhandle, float positionX, float positionY, float positionZ, string firstname, string lastname); @@ -151,7 +151,7 @@ namespace OpenSim.Grid.UserServer int start_z = -1; // use the homeRegionID if it is stored already. If not, use the regionHandle as before - if (theUser.HomeRegionID != LLUUID.Zero) + if (theUser.HomeRegionID != UUID.Zero) { HomeInfo = RegionProfileData.RequestSimProfileData( @@ -271,7 +271,7 @@ namespace OpenSim.Grid.UserServer theUser.CurrentAgent.Handle = SimInfo.regionHandle; if (start_x >= 0 && start_y >= 0 && start_z >= 0) { - LLVector3 tmp_v = new LLVector3(start_x, start_y, start_z); + Vector3 tmp_v = new Vector3(start_x, start_y, start_z); theUser.CurrentAgent.Position = tmp_v; } // Prepare notification @@ -466,7 +466,7 @@ namespace OpenSim.Grid.UserServer } // See LoginService - protected override InventoryData GetInventorySkeleton(LLUUID userID) + protected override InventoryData GetInventorySkeleton(UUID userID) { m_log.DebugFormat( "[LOGIN]: Contacting inventory service at {0} for inventory skeleton of user {1}", @@ -498,7 +498,7 @@ namespace OpenSim.Grid.UserServer if (folders != null && folders.Count > 0) { - LLUUID rootID = LLUUID.Zero; + UUID rootID = UUID.Zero; ArrayList AgentInventoryArray = new ArrayList(); Hashtable TempHash; @@ -506,7 +506,7 @@ namespace OpenSim.Grid.UserServer { // m_log.DebugFormat("[LOGIN]: Received agent inventory folder {0}", InvFolder.name); - if (InvFolder.ParentID == LLUUID.Zero) + if (InvFolder.ParentID == UUID.Zero) { rootID = InvFolder.ID; } diff --git a/OpenSim/Grid/UserServer/UserManager.cs b/OpenSim/Grid/UserServer/UserManager.cs index 69c550a434..4b5f5a06ca 100644 --- a/OpenSim/Grid/UserServer/UserManager.cs +++ b/OpenSim/Grid/UserServer/UserManager.cs @@ -29,7 +29,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nwc.XmlRpc; using OpenSim.Framework; @@ -38,7 +38,7 @@ using OpenSim.Framework.Servers; namespace OpenSim.Grid.UserServer { - public delegate void logOffUser(LLUUID AgentID); + public delegate void logOffUser(UUID AgentID); public class UserManager : UserManagerBase { @@ -79,7 +79,7 @@ namespace OpenSim.Grid.UserServer return response; } - public XmlRpcResponse AvatarPickerListtoXmlRPCResponse(LLUUID queryID, List returnUsers) + public XmlRpcResponse AvatarPickerListtoXmlRPCResponse(UUID queryID, List returnUsers) { XmlRpcResponse response = new XmlRpcResponse(); Hashtable responseData = new Hashtable(); @@ -108,8 +108,8 @@ namespace OpenSim.Grid.UserServer for (int i = 0; i < returnUsers.Count; i++) { - responseData["ownerID" + i] = returnUsers[i].FriendListOwner.UUID.ToString(); - responseData["friendID" + i] = returnUsers[i].Friend.UUID.ToString(); + responseData["ownerID" + i] = returnUsers[i].FriendListOwner.ToString(); + responseData["friendID" + i] = returnUsers[i].Friend.ToString(); responseData["ownerPerms" + i] = returnUsers[i].FriendListOwnerPerms.ToString(); responseData["friendPerms" + i] = returnUsers[i].FriendPerms.ToString(); } @@ -172,11 +172,11 @@ namespace OpenSim.Grid.UserServer // XmlRpcResponse response = new XmlRpcResponse(); Hashtable requestData = (Hashtable) request.Params[0]; List returnAvatar = new List(); - LLUUID queryID = new LLUUID(LLUUID.Zero.ToString()); + UUID queryID = new UUID(UUID.Zero.ToString()); if (requestData.Contains("avquery") && requestData.Contains("queryid")) { - queryID = new LLUUID((string) requestData["queryid"]); + queryID = new UUID((string) requestData["queryid"]); returnAvatar = GenerateAgentPickerRequestResponse(queryID, (string) requestData["avquery"]); } @@ -195,13 +195,13 @@ namespace OpenSim.Grid.UserServer requestData.Contains("region_uuid")) { // ulong cregionhandle = 0; - LLUUID regionUUID; - LLUUID avatarUUID; + UUID regionUUID; + UUID avatarUUID; - Helpers.TryParse((string) requestData["avatar_id"], out avatarUUID); - Helpers.TryParse((string) requestData["region_uuid"], out regionUUID); + UUID.TryParse((string) requestData["avatar_id"], out avatarUUID); + UUID.TryParse((string) requestData["region_uuid"], out regionUUID); - if (avatarUUID != LLUUID.Zero) + if (avatarUUID != UUID.Zero) { UserProfileData userProfile = GetUserProfile(avatarUUID); userProfile.CurrentAgent.Region = regionUUID; @@ -231,8 +231,8 @@ namespace OpenSim.Grid.UserServer requestData.Contains("friendPerms")) { // UserManagerBase.AddNewuserFriend - AddNewUserFriend(new LLUUID((string) requestData["ownerID"]), - new LLUUID((string) requestData["friendID"]), + AddNewUserFriend(new UUID((string) requestData["ownerID"]), + new UUID((string) requestData["friendID"]), (uint) Convert.ToInt32((string) requestData["friendPerms"])); returnString = "TRUE"; } @@ -252,8 +252,8 @@ namespace OpenSim.Grid.UserServer if (requestData.Contains("ownerID") && requestData.Contains("friendID")) { // UserManagerBase.AddNewuserFriend - RemoveUserFriend(new LLUUID((string) requestData["ownerID"]), - new LLUUID((string) requestData["friendID"])); + RemoveUserFriend(new UUID((string) requestData["ownerID"]), + new UUID((string) requestData["friendID"])); returnString = "TRUE"; } responseData["returnString"] = returnString; @@ -271,8 +271,8 @@ namespace OpenSim.Grid.UserServer if (requestData.Contains("ownerID") && requestData.Contains("friendID") && requestData.Contains("friendPerms")) { - UpdateUserFriendPerms(new LLUUID((string) requestData["ownerID"]), - new LLUUID((string) requestData["friendID"]), + UpdateUserFriendPerms(new UUID((string) requestData["ownerID"]), + new UUID((string) requestData["friendID"]), (uint) Convert.ToInt32((string) requestData["friendPerms"])); // UserManagerBase. returnString = "TRUE"; @@ -292,7 +292,7 @@ namespace OpenSim.Grid.UserServer if (requestData.Contains("ownerID")) { - returndata = GetUserFriendList(new LLUUID((string) requestData["ownerID"])); + returndata = GetUserFriendList(new UUID((string) requestData["ownerID"])); } return FriendListItemListtoXmlRPCResponse(returndata); @@ -306,7 +306,7 @@ namespace OpenSim.Grid.UserServer Hashtable responseData; if (requestData.Contains("owner")) { - appearance = GetUserAppearance(new LLUUID((string) requestData["owner"])); + appearance = GetUserAppearance(new UUID((string) requestData["owner"])); if (appearance == null) { responseData = new Hashtable(); @@ -337,7 +337,7 @@ namespace OpenSim.Grid.UserServer if (requestData.Contains("owner")) { AvatarAppearance appearance = new AvatarAppearance(requestData); - UpdateUserAppearance(new LLUUID((string) requestData["owner"]), appearance); + UpdateUserAppearance(new UUID((string) requestData["owner"]), appearance); responseData = new Hashtable(); responseData["returnString"] = "TRUE"; } @@ -396,7 +396,7 @@ namespace OpenSim.Grid.UserServer { try { - LLUUID guess = new LLUUID((string) requestData["avatar_uuid"]); + UUID guess = new UUID((string) requestData["avatar_uuid"]); userProfile = GetUserProfile(guess); } @@ -427,11 +427,11 @@ namespace OpenSim.Grid.UserServer //CFK: Console.WriteLine("METHOD BY UUID CALLED"); if (requestData.Contains("avatar_uuid")) { - LLUUID guess; + UUID guess; - Helpers.TryParse((string) requestData["avatar_uuid"], out guess); + UUID.TryParse((string) requestData["avatar_uuid"], out guess); - if (guess == LLUUID.Zero) + if (guess == UUID.Zero) { return CreateUnknownUserErrorResponse(); } @@ -476,16 +476,16 @@ namespace OpenSim.Grid.UserServer string authed = "FALSE"; if (requestData.Contains("avatar_uuid") && requestData.Contains("session_id")) { - LLUUID guess_aid; - LLUUID guess_sid; + UUID guess_aid; + UUID guess_sid; - Helpers.TryParse((string) requestData["avatar_uuid"], out guess_aid); - if (guess_aid == LLUUID.Zero) + UUID.TryParse((string) requestData["avatar_uuid"], out guess_aid); + if (guess_aid == UUID.Zero) { return CreateUnknownUserErrorResponse(); } - Helpers.TryParse((string) requestData["session_id"], out guess_sid); - if (guess_sid == LLUUID.Zero) + UUID.TryParse((string) requestData["session_id"], out guess_sid); + if (guess_sid == UUID.Zero) { return CreateUnknownUserErrorResponse(); } @@ -520,7 +520,7 @@ namespace OpenSim.Grid.UserServer return CreateUnknownUserErrorResponse(); } - LLUUID UserUUID = new LLUUID((string) requestData["avatar_uuid"]); + UUID UserUUID = new UUID((string) requestData["avatar_uuid"]); UserProfileData userProfile = GetUserProfile(UserUUID); if (null == userProfile) { @@ -532,11 +532,11 @@ namespace OpenSim.Grid.UserServer } if (requestData.Contains("FLImageID")) { - userProfile.FirstLifeImage = new LLUUID((string) requestData["FLImageID"]); + userProfile.FirstLifeImage = new UUID((string) requestData["FLImageID"]); } if (requestData.Contains("ImageID")) { - userProfile.Image = new LLUUID((string) requestData["ImageID"]); + userProfile.Image = new UUID((string) requestData["ImageID"]); } // dont' know how yet if (requestData.Contains("MaturePublish")) @@ -575,8 +575,8 @@ namespace OpenSim.Grid.UserServer } if (requestData.Contains("home_region_id")) { - LLUUID regionID; - LLUUID.TryParse((string) requestData["home_region_id"], out regionID); + UUID regionID; + UUID.TryParse((string) requestData["home_region_id"], out regionID); userProfile.HomeRegionID = regionID; } if (requestData.Contains("home_pos_x")) @@ -682,7 +682,7 @@ namespace OpenSim.Grid.UserServer { try { - userProfile.Partner = new LLUUID((string) requestData["partner"]); + userProfile.Partner = new UUID((string) requestData["partner"]); } catch (InvalidCastException) { @@ -691,7 +691,7 @@ namespace OpenSim.Grid.UserServer } else { - userProfile.Partner = LLUUID.Zero; + userProfile.Partner = UUID.Zero; } // call plugin! @@ -710,8 +710,8 @@ namespace OpenSim.Grid.UserServer { try { - LLUUID userUUID = new LLUUID((string) requestData["avatar_uuid"]); - LLUUID RegionID = new LLUUID((string) requestData["region_uuid"]); + UUID userUUID = new UUID((string) requestData["avatar_uuid"]); + UUID RegionID = new UUID((string) requestData["region_uuid"]); ulong regionhandle = (ulong) Convert.ToInt64((string) requestData["region_handle"]); float posx = (float) Convert.ToDecimal((string) requestData["region_pos_x"]); float posy = (float) Convert.ToDecimal((string) requestData["region_pos_y"]); @@ -749,9 +749,9 @@ namespace OpenSim.Grid.UserServer throw new Exception("The method or operation is not implemented."); } - public override UserProfileData SetupMasterUser(LLUUID uuid) + public override UserProfileData SetupMasterUser(UUID uuid) { throw new Exception("The method or operation is not implemented."); } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 6829befe61..edb29db3fb 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -32,7 +32,7 @@ using System.IO; using System.Net; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -776,7 +776,7 @@ namespace OpenSim { m_log.Error("[CONSOLE]: PLEASE NOTE, load-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use load-xml2, please file a mantis detailing the reason."); - LLVector3 loadOffset = new LLVector3(0, 0, 0); + Vector3 loadOffset = new Vector3(0, 0, 0); if (cmdparams.Length > 0) { bool generateNewIDS = false; diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 4003001998..86db86554f 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -32,7 +32,7 @@ using System.Net; using System.Reflection; using System.Text; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -64,7 +64,7 @@ namespace OpenSim /// /// The file used to load and save prim backup xml if no filename has been specified /// - protected const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.xml"; + protected const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.Xml"; /// /// The file used to load and save an opensim archive if no filename has been specified @@ -178,17 +178,17 @@ namespace OpenSim } else { - if (File.Exists("OpenSim.xml")) + if (File.Exists("OpenSim.Xml")) { //check for a xml config file - Application.iniFilePath = "OpenSim.xml"; + Application.iniFilePath = "OpenSim.Xml"; m_config.Source = new XmlConfigSource(); m_config.Source.Merge(new XmlConfigSource(Application.iniFilePath)); m_config.Source.Merge(configSource); } else { - //Application.iniFilePath = "OpenSim.xml"; + //Application.iniFilePath = "OpenSim.Xml"; // m_config.ConfigSource = new XmlConfigSource(); // no default config files, so set default values, and save it m_config.Source.Merge(DefaultConfig()); @@ -437,7 +437,7 @@ namespace OpenSim m_sceneManager.OnRestartSim += handleRestartRegion; } - public LLUUID CreateUser(string tempfirstname, string templastname, string tempPasswd, uint regX, uint regY) + public UUID CreateUser(string tempfirstname, string templastname, string tempPasswd, uint regX, uint regY) { return m_commsManager.AddUser(tempfirstname, templastname, tempPasswd, regX, regY); } @@ -532,18 +532,18 @@ namespace OpenSim // and has to happen before the region is registered with the grid. scene.CreateTerrainTexture(false); - try - { + //try + //{ scene.RegisterRegionWithGrid(); - } - catch (Exception e) - { - m_log.ErrorFormat("[STARTUP]: Registration of region with grid failed, aborting startup - {0}", e); + //} + //catch (Exception e) + //{ + // m_log.ErrorFormat("[STARTUP]: Registration of region with grid failed, aborting startup - {0}", e); // Carrying on now causes a lot of confusion down the // line - we need to get the user's attention - System.Environment.Exit(1); - } + // System.Environment.Exit(1); + //} // We need to do this after we've initialized the // scripting engines. diff --git a/OpenSim/Region/ClientStack/LindenUDP/KillPacket.cs b/OpenSim/Region/ClientStack/LindenUDP/KillPacket.cs index d7d91285f8..8197ec73f6 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/KillPacket.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/KillPacket.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Text; -using libsecondlife.Packets; +using OpenMetaverse.Packets; namespace OpenSim.Region.ClientStack.LindenUDP { diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 2a0190bceb..5e22e2d4a6 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -33,9 +33,8 @@ using System.Reflection; using System.Text; using System.Threading; using System.Timers; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -62,12 +61,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP // } /* static variables */ - public static TerrainManager TerrainManager = new TerrainManager(new SecondLife()); - public static SynchronizeClientHandler SynchronizeClient = null; /* private variables */ - private readonly LLUUID m_sessionId; - private LLUUID m_secureSessionId = LLUUID.Zero; + private readonly UUID m_sessionId; + private UUID m_secureSessionId = UUID.Zero; //private AgentAssetUpload UploadAssets; private int m_debug = 0; private readonly AssetCache m_assetCache; @@ -81,16 +78,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP //private int m_lastPacketsReceived = 0; //private byte[] ZeroOutBuffer = new byte[4096]; - private readonly LLUUID m_agentId; + private readonly UUID m_agentId; private readonly uint m_circuitCode; private int m_moneyBalance; private IPacketHandler m_PacketHandler; private int m_animationSequenceNumber = 1; - private byte[] m_channelVersion = Helpers.StringToField("OpenSimulator 0.5"); // Dummy value needed by libSL + private byte[] m_channelVersion = Utils.StringToBytes("OpenSimulator 0.5"); // Dummy value needed by libSL - private Dictionary m_defaultAnimations = new Dictionary(); + private Dictionary m_defaultAnimations = new Dictionary(); private bool m_SendLogoutPacketWhenClosing = true; @@ -112,13 +109,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP protected string m_firstName; protected string m_lastName; protected Thread m_clientThread; - protected LLVector3 m_startpos; + protected Vector3 m_startpos; protected EndPoint m_userEndPoint; protected EndPoint m_proxyEndPoint; - protected LLUUID m_activeGroupID = LLUUID.Zero; + protected UUID m_activeGroupID = UUID.Zero; protected string m_activeGroupName = String.Empty; protected ulong m_activeGroupPowers = 0; - protected Dictionary m_groupPowers = new Dictionary(); + protected Dictionary m_groupPowers = new Dictionary(); /* Instantiated Designated Event Delegates */ //- used so we don't create new objects for each incoming packet and then toss it out later */ @@ -264,7 +261,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /* Properties */ - public LLUUID SecureSessionId + public UUID SecureSessionId { get { return m_secureSessionId; } } @@ -274,23 +271,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP get { return m_scene; } } - public LLUUID SessionId + public UUID SessionId { get { return m_sessionId; } } - public LLVector3 StartPos + public Vector3 StartPos { get { return m_startpos; } set { m_startpos = value; } } - public LLUUID AgentId + public UUID AgentId { get { return m_agentId; } } - public LLUUID ActiveGroupId + public UUID ActiveGroupId { get { return m_activeGroupID; } } @@ -305,7 +302,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP get { return m_activeGroupPowers; } } - public ulong GetGroupPowers(LLUUID groupID) + public ulong GetGroupPowers(UUID groupID) { if (m_groupPowers.ContainsKey(groupID)) return m_groupPowers[groupID]; @@ -380,11 +377,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP /* METHODS */ public LLClientView(EndPoint remoteEP, IScene scene, AssetCache assetCache, LLPacketServer packServer, - AgentCircuitManager authenSessions, LLUUID agentId, LLUUID sessionId, uint circuitCode, EndPoint proxyEP) + AgentCircuitManager authenSessions, UUID agentId, UUID sessionId, uint circuitCode, EndPoint proxyEP) { m_moneyBalance = 1000; - m_channelVersion = Helpers.StringToField(scene.GetSimulatorVersion()); + m_channelVersion = Utils.StringToBytes(scene.GetSimulatorVersion()); InitDefaultAnimations(); @@ -509,7 +506,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP kupack.UserInfo.SessionID = SessionId; kupack.TargetBlock.TargetIP = (uint)0; kupack.TargetBlock.TargetPort = (ushort)0; - kupack.UserInfo.Reason = Helpers.StringToField(message); + kupack.UserInfo.Reason = Utils.StringToBytes(message); OutPacket(kupack, ThrottleOutPacketType.Task); // You must sleep here or users get no message! Thread.Sleep(500); @@ -760,7 +757,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP m_firstName = sessionInfo.LoginInfo.First; m_lastName = sessionInfo.LoginInfo.Last; - if (sessionInfo.LoginInfo.SecureSession != LLUUID.Zero) + if (sessionInfo.LoginInfo.SecureSession != UUID.Zero) { m_secureSessionId = sessionInfo.LoginInfo.SecureSession; } @@ -868,7 +865,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP public event UpdateVector OnUpdatePrimGroupScale; public event StatusChange OnChildAgentStatus; public event GenericCall2 OnStopMovement; - public event Action OnRemoveAvatar; + public event Action OnRemoveAvatar; public event RequestMapBlocks OnRequestMapBlocks; public event RequestMapName OnMapNameRequest; public event TeleportLocationRequest OnTeleportLocationRequest; @@ -964,10 +961,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP // voire si c'est necessaire - public void ActivateGesture(LLUUID assetId, LLUUID gestureId) + public void ActivateGesture(UUID assetId, UUID gestureId) { } - public void DeactivateGesture(LLUUID assetId, LLUUID gestureId) + public void DeactivateGesture(UUID assetId, UUID gestureId) { } #region Scene/Avatar to Client @@ -994,7 +991,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP handshake.RegionInfo.WaterHeight = args.waterHeight; handshake.RegionInfo.RegionFlags = args.regionFlags; - handshake.RegionInfo.SimName = Helpers.StringToField(args.regionName); + handshake.RegionInfo.SimName = Utils.StringToBytes(args.regionName); handshake.RegionInfo.SimOwner = args.SimOwner; handshake.RegionInfo.TerrainBase0 = args.terrainBase0; handshake.RegionInfo.TerrainBase1 = args.terrainBase1; @@ -1004,7 +1001,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP handshake.RegionInfo.TerrainDetail1 = args.terrainDetail1; handshake.RegionInfo.TerrainDetail2 = args.terrainDetail2; handshake.RegionInfo.TerrainDetail3 = args.terrainDetail3; - handshake.RegionInfo.CacheID = LLUUID.Random(); //I guess this is for the client to remember an old setting? + handshake.RegionInfo.CacheID = UUID.Random(); //I guess this is for the client to remember an old setting? OutPacket(handshake, ThrottleOutPacketType.Task); } @@ -1013,7 +1010,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look) + public void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look) { AgentMovementCompletePacket mov = (AgentMovementCompletePacket)PacketPool.Instance.GetPacket(PacketType.AgentMovementComplete); mov.SimData.ChannelVersion = m_channelVersion; @@ -1044,14 +1041,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, - LLUUID fromAgentID, byte source, byte audible) + public void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, + UUID fromAgentID, byte source, byte audible) { - SendChatMessage(Helpers.StringToField(message), type, fromPos, fromName, fromAgentID, source, audible); + SendChatMessage(Utils.StringToBytes(message), type, fromPos, fromName, fromAgentID, source, audible); } - public void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, - LLUUID fromAgentID, byte source, byte audible) + public void SendChatMessage(byte[] message, byte type, Vector3 fromPos, string fromName, + UUID fromAgentID, byte source, byte audible) { ChatFromSimulatorPacket reply = (ChatFromSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.ChatFromSimulator); reply.ChatData.Audible = audible; @@ -1059,7 +1056,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP reply.ChatData.ChatType = type; reply.ChatData.SourceType = source; reply.ChatData.Position = fromPos; - reply.ChatData.FromName = Helpers.StringToField(fromName); + reply.ChatData.FromName = Utils.StringToBytes(fromName); reply.ChatData.OwnerID = fromAgentID; reply.ChatData.SourceID = fromAgentID; @@ -1071,8 +1068,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, - LLUUID imSessionID, string fromName, byte dialog, uint timeStamp) + public void SendInstantMessage(UUID fromAgent, UUID fromAgentSession, string message, UUID toAgent, + UUID imSessionID, string fromName, byte dialog, uint timeStamp) { SendInstantMessage( fromAgent, fromAgentSession, message, toAgent, @@ -1084,8 +1081,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, - LLUUID imSessionID, string fromName, byte dialog, uint timeStamp, + public void SendInstantMessage(UUID fromAgent, UUID fromAgentSession, string message, UUID toAgent, + UUID imSessionID, string fromName, byte dialog, uint timeStamp, byte[] binaryBucket) { if (((Scene)(this.m_scene)).ExternalChecks.ExternalChecksCanInstantMessage(fromAgent, toAgent)) @@ -1095,17 +1092,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP msg.AgentData.AgentID = fromAgent; msg.AgentData.SessionID = fromAgentSession; - msg.MessageBlock.FromAgentName = Helpers.StringToField(fromName); + msg.MessageBlock.FromAgentName = Utils.StringToBytes(fromName); msg.MessageBlock.Dialog = dialog; msg.MessageBlock.FromGroup = false; msg.MessageBlock.ID = imSessionID; msg.MessageBlock.Offline = 0; msg.MessageBlock.ParentEstateID = 0; - msg.MessageBlock.Position = new LLVector3(); - msg.MessageBlock.RegionID = LLUUID.Random(); + msg.MessageBlock.Position = new Vector3(); + msg.MessageBlock.RegionID = UUID.Random(); msg.MessageBlock.Timestamp = timeStamp; msg.MessageBlock.ToAgentID = toAgent; - msg.MessageBlock.Message = Helpers.StringToField(message); + msg.MessageBlock.Message = Utils.StringToBytes(message); msg.MessageBlock.BinaryBucket = binaryBucket; OutPacket(msg, ThrottleOutPacketType.Task); @@ -1188,7 +1185,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP patches[0] = patchx + 0 + patchy * 16; - LayerDataPacket layerpack = LLClientView.TerrainManager.CreateLandPacket(map, patches); + LayerDataPacket layerpack = TerrainCompressor.CreateLandPacket(map, patches); layerpack.Header.Zerocoded = true; OutPacket(layerpack, ThrottleOutPacketType.Land); @@ -1242,10 +1239,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP return agentData; } - public void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, IPEndPoint externalIPEndPoint, + public void CrossRegion(ulong newRegionHandle, Vector3 pos, Vector3 lookAt, IPEndPoint externalIPEndPoint, string capsURL) { - LLVector3 look = new LLVector3(lookAt.X * 10, lookAt.Y * 10, lookAt.Z * 10); + Vector3 look = new Vector3(lookAt.X * 10, lookAt.Y * 10, lookAt.Z * 10); //CrossedRegionPacket newSimPack = (CrossedRegionPacket)PacketPool.Instance.GetPacket(PacketType.CrossedRegion); CrossedRegionPacket newSimPack = new CrossedRegionPacket(); @@ -1264,7 +1261,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP newSimPack.RegionData.SimIP += (uint)byteIP[1] << 8; newSimPack.RegionData.SimIP += (uint)byteIP[0]; newSimPack.RegionData.SimPort = (ushort)externalIPEndPoint.Port; - newSimPack.RegionData.SeedCapability = Helpers.StringToField(capsURL); + newSimPack.RegionData.SeedCapability = Utils.StringToBytes(capsURL); // Hack to get this out immediately and skip throttles OutPacket(newSimPack, ThrottleOutPacketType.Unknown); @@ -1289,7 +1286,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP mapReply.Data[i].X = mapBlocks2[i].X; mapReply.Data[i].Y = mapBlocks2[i].Y; mapReply.Data[i].WaterHeight = mapBlocks2[i].WaterHeight; - mapReply.Data[i].Name = Helpers.StringToField(mapBlocks2[i].Name); + mapReply.Data[i].Name = Utils.StringToBytes(mapBlocks2[i].Name); mapReply.Data[i].RegionFlags = mapBlocks2[i].RegionFlags; mapReply.Data[i].Access = mapBlocks2[i].Access; mapReply.Data[i].Agents = mapBlocks2[i].Agents; @@ -1319,7 +1316,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - public void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags) + public void SendLocalTeleport(Vector3 position, Vector3 lookAt, uint flags) { TeleportLocalPacket tpLocal = (TeleportLocalPacket)PacketPool.Instance.GetPacket(PacketType.TeleportLocal); tpLocal.Info.AgentID = AgentId; @@ -1342,7 +1339,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP teleport.Info.RegionHandle = regionHandle; teleport.Info.SimAccess = simAccess; - teleport.Info.SeedCapability = Helpers.StringToField(capsURL); + teleport.Info.SeedCapability = Utils.StringToBytes(capsURL); IPAddress oIP = newRegionEndPoint.Address; byte[] byteIP = oIP.GetAddressBytes(); @@ -1367,7 +1364,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { TeleportFailedPacket tpFailed = (TeleportFailedPacket)PacketPool.Instance.GetPacket(PacketType.TeleportFailed); tpFailed.Info.AgentID = AgentId; - tpFailed.Info.Reason = Helpers.StringToField(reason); + tpFailed.Info.Reason = Utils.StringToBytes(reason); // Hack to get this out immediately and skip throttles OutPacket(tpFailed, ThrottleOutPacketType.Unknown); @@ -1386,7 +1383,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(tpStart, ThrottleOutPacketType.Unknown); } - public void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance) + public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance) { MoneyBalanceReplyPacket money = (MoneyBalanceReplyPacket)PacketPool.Instance.GetPacket(PacketType.MoneyBalanceReply); money.MoneyData.AgentID = AgentId; @@ -1397,7 +1394,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(money, ThrottleOutPacketType.Task); } - public void SendPayPrice(LLUUID objectID, int[] payPrice) + public void SendPayPrice(UUID objectID, int[] payPrice) { if (payPrice[0] == 0 && payPrice[1] == 0 && @@ -1431,7 +1428,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(pc, ThrottleOutPacketType.Unknown); } - public void SendKillObject(ulong regionHandle, uint localID) + public void SendKiPrimitive(ulong regionHandle, uint localID) { KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject); // TODO: don't create new blocks if recycling an old packet @@ -1453,7 +1450,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// The items contained in the folder identified by folderID /// Do we need to send folder information? /// Do we need to send item information? - public void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List items, + public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List items, List folders, bool fetchFolders, bool fetchItems) { @@ -1501,17 +1498,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP descend.ItemData[i].AssetID = item.AssetID; descend.ItemData[i].CreatorID = item.Creator; descend.ItemData[i].BaseMask = item.BasePermissions; - descend.ItemData[i].Description = Helpers.StringToField(item.Description); + descend.ItemData[i].Description = Utils.StringToBytes(item.Description); descend.ItemData[i].EveryoneMask = item.EveryOnePermissions; descend.ItemData[i].OwnerMask = item.CurrentPermissions; descend.ItemData[i].FolderID = item.Folder; descend.ItemData[i].InvType = (sbyte)item.InvType; - descend.ItemData[i].Name = Helpers.StringToField(item.Name); + descend.ItemData[i].Name = Utils.StringToBytes(item.Name); descend.ItemData[i].NextOwnerMask = item.NextPermissions; descend.ItemData[i].OwnerID = item.Owner; descend.ItemData[i].Type = (sbyte)item.AssetType; - //descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); + //descend.ItemData[i].GroupID = new UUID("00000000-0000-0000-0000-000000000000"); descend.ItemData[i].GroupID = item.GroupID; descend.ItemData[i].GroupOwned = item.GroupOwned; descend.ItemData[i].GroupMask = 0; @@ -1585,7 +1582,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { descend.FolderData[i] = new InventoryDescendentsPacket.FolderDataBlock(); descend.FolderData[i].FolderID = folder.ID; - descend.FolderData[i].Name = Helpers.StringToField(folder.Name); + descend.FolderData[i].Name = Utils.StringToBytes(folder.Name); descend.FolderData[i].ParentID = folder.ParentID; descend.FolderData[i].Type = (sbyte)folder.Type; @@ -1621,7 +1618,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - private InventoryDescendentsPacket CreateInventoryDescendentsPacket(LLUUID ownerID, LLUUID folderID) + private InventoryDescendentsPacket CreateInventoryDescendentsPacket(UUID ownerID, UUID folderID) { InventoryDescendentsPacket descend = (InventoryDescendentsPacket)PacketPool.Instance.GetPacket(PacketType.InventoryDescendents); descend.Header.Zerocoded = true; @@ -1633,7 +1630,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP return descend; } - public void SendInventoryItemDetails(LLUUID ownerID, InventoryItemBase item) + public void SendInventoryItemDetails(UUID ownerID, InventoryItemBase item) { uint FULL_MASK_PERMISSIONS = (uint)PermissionMask.All; FetchInventoryReplyPacket inventoryReply = (FetchInventoryReplyPacket)PacketPool.Instance.GetPacket(PacketType.FetchInventoryReply); @@ -1647,17 +1644,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP inventoryReply.InventoryData[0].BaseMask = item.BasePermissions; inventoryReply.InventoryData[0].CreationDate = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; - inventoryReply.InventoryData[0].Description = Helpers.StringToField(item.Description); + inventoryReply.InventoryData[0].Description = Utils.StringToBytes(item.Description); inventoryReply.InventoryData[0].EveryoneMask = item.EveryOnePermissions; inventoryReply.InventoryData[0].FolderID = item.Folder; inventoryReply.InventoryData[0].InvType = (sbyte)item.InvType; - inventoryReply.InventoryData[0].Name = Helpers.StringToField(item.Name); + inventoryReply.InventoryData[0].Name = Utils.StringToBytes(item.Name); inventoryReply.InventoryData[0].NextOwnerMask = item.NextPermissions; inventoryReply.InventoryData[0].OwnerID = item.Owner; inventoryReply.InventoryData[0].OwnerMask = item.CurrentPermissions; inventoryReply.InventoryData[0].Type = (sbyte)item.AssetType; - //inventoryReply.InventoryData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); + //inventoryReply.InventoryData[0].GroupID = new UUID("00000000-0000-0000-0000-000000000000"); inventoryReply.InventoryData[0].GroupID = item.GroupID; inventoryReply.InventoryData[0].GroupOwned = item.GroupOwned; inventoryReply.InventoryData[0].GroupMask = 0; @@ -1686,12 +1683,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP = (BulkUpdateInventoryPacket)PacketPool.Instance.GetPacket(PacketType.BulkUpdateInventory); bulkUpdate.AgentData.AgentID = AgentId; - bulkUpdate.AgentData.TransactionID = LLUUID.Random(); + bulkUpdate.AgentData.TransactionID = UUID.Random(); bulkUpdate.FolderData = new BulkUpdateInventoryPacket.FolderDataBlock[1]; bulkUpdate.FolderData[0] = new BulkUpdateInventoryPacket.FolderDataBlock(); - bulkUpdate.FolderData[0].FolderID = LLUUID.Zero; - bulkUpdate.FolderData[0].ParentID = LLUUID.Zero; + bulkUpdate.FolderData[0].FolderID = UUID.Zero; + bulkUpdate.FolderData[0].ParentID = UUID.Zero; bulkUpdate.FolderData[0].Type = -1; bulkUpdate.FolderData[0].Name = new byte[0]; @@ -1702,17 +1699,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP bulkUpdate.ItemData[0].CreatorID = item.Creator; bulkUpdate.ItemData[0].BaseMask = item.BasePermissions; bulkUpdate.ItemData[0].CreationDate = 1000; - bulkUpdate.ItemData[0].Description = Helpers.StringToField(item.Description); + bulkUpdate.ItemData[0].Description = Utils.StringToBytes(item.Description); bulkUpdate.ItemData[0].EveryoneMask = item.EveryOnePermissions; bulkUpdate.ItemData[0].FolderID = item.Folder; bulkUpdate.ItemData[0].InvType = (sbyte)item.InvType; - bulkUpdate.ItemData[0].Name = Helpers.StringToField(item.Name); + bulkUpdate.ItemData[0].Name = Utils.StringToBytes(item.Name); bulkUpdate.ItemData[0].NextOwnerMask = item.NextPermissions; bulkUpdate.ItemData[0].OwnerID = item.Owner; bulkUpdate.ItemData[0].OwnerMask = item.CurrentPermissions; bulkUpdate.ItemData[0].Type = (sbyte)item.AssetType; - //bulkUpdate.ItemData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); + //bulkUpdate.ItemData[0].GroupID = new UUID("00000000-0000-0000-0000-000000000000"); bulkUpdate.ItemData[0].GroupID = item.GroupID; bulkUpdate.ItemData[0].GroupOwned = item.GroupOwned; bulkUpdate.ItemData[0].GroupMask = 0; @@ -1750,17 +1747,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP InventoryReply.InventoryData[0].AssetID = Item.AssetID; InventoryReply.InventoryData[0].CreatorID = Item.Creator; InventoryReply.InventoryData[0].BaseMask = Item.BasePermissions; - InventoryReply.InventoryData[0].Description = Helpers.StringToField(Item.Description); + InventoryReply.InventoryData[0].Description = Utils.StringToBytes(Item.Description); InventoryReply.InventoryData[0].EveryoneMask = Item.EveryOnePermissions; InventoryReply.InventoryData[0].FolderID = Item.Folder; InventoryReply.InventoryData[0].InvType = (sbyte)Item.InvType; - InventoryReply.InventoryData[0].Name = Helpers.StringToField(Item.Name); + InventoryReply.InventoryData[0].Name = Utils.StringToBytes(Item.Name); InventoryReply.InventoryData[0].NextOwnerMask = Item.NextPermissions; InventoryReply.InventoryData[0].OwnerID = Item.Owner; InventoryReply.InventoryData[0].OwnerMask = Item.CurrentPermissions; InventoryReply.InventoryData[0].Type = (sbyte)Item.AssetType; - //InventoryReply.InventoryData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); + //InventoryReply.InventoryData[0].GroupID = new UUID("00000000-0000-0000-0000-000000000000"); InventoryReply.InventoryData[0].GroupID = Item.GroupID; InventoryReply.InventoryData[0].GroupOwned = Item.GroupOwned; InventoryReply.InventoryData[0].GroupMask = 0; @@ -1781,7 +1778,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(InventoryReply, ThrottleOutPacketType.Asset); } - public void SendRemoveInventoryItem(LLUUID itemID) + public void SendRemoveInventoryItem(UUID itemID) { RemoveInventoryItemPacket remove = (RemoveInventoryItemPacket)PacketPool.Instance.GetPacket(PacketType.RemoveInventoryItem); // TODO: don't create new blocks if recycling an old packet @@ -1807,7 +1804,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(scriptcontrol, ThrottleOutPacketType.Task); } - public void SendTaskInventory(LLUUID taskID, short serial, byte[] fileName) + public void SendTaskInventory(UUID taskID, short serial, byte[] fileName) { ReplyTaskInventoryPacket replytask = (ReplyTaskInventoryPacket)PacketPool.Instance.GetPacket(PacketType.ReplyTaskInventory); replytask.InventoryData.TaskID = taskID; @@ -1872,7 +1869,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(replyPacket, ThrottleOutPacketType.Task); } - public void SendAgentDataUpdate(LLUUID agentid, LLUUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) + public void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) { m_activeGroupID = activegroupid; @@ -1882,11 +1879,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP AgentDataUpdatePacket sendAgentDataUpdate = (AgentDataUpdatePacket)PacketPool.Instance.GetPacket(PacketType.AgentDataUpdate); sendAgentDataUpdate.AgentData.ActiveGroupID = activegroupid; sendAgentDataUpdate.AgentData.AgentID = agentid; - sendAgentDataUpdate.AgentData.FirstName = Helpers.StringToField(firstname); - sendAgentDataUpdate.AgentData.GroupName = Helpers.StringToField(groupname); + sendAgentDataUpdate.AgentData.FirstName = Utils.StringToBytes(firstname); + sendAgentDataUpdate.AgentData.GroupName = Utils.StringToBytes(groupname); sendAgentDataUpdate.AgentData.GroupPowers = grouppowers; - sendAgentDataUpdate.AgentData.GroupTitle = Helpers.StringToField(grouptitle); - sendAgentDataUpdate.AgentData.LastName = Helpers.StringToField(lastname); + sendAgentDataUpdate.AgentData.GroupTitle = Utils.StringToBytes(grouptitle); + sendAgentDataUpdate.AgentData.LastName = Utils.StringToBytes(lastname); OutPacket(sendAgentDataUpdate, ThrottleOutPacketType.Task); } @@ -1898,7 +1895,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP public void SendAlertMessage(string message) { AlertMessagePacket alertPack = (AlertMessagePacket)PacketPool.Instance.GetPacket(PacketType.AlertMessage); - alertPack.AlertData.Message = Helpers.StringToField(message); + alertPack.AlertData.Message = Utils.StringToBytes(message); OutPacket(alertPack, ThrottleOutPacketType.Task); } @@ -1924,46 +1921,46 @@ namespace OpenSim.Region.ClientStack.LindenUDP { AgentAlertMessagePacket alertPack = (AgentAlertMessagePacket)PacketPool.Instance.GetPacket(PacketType.AgentAlertMessage); alertPack.AgentData.AgentID = AgentId; - alertPack.AlertData.Message = Helpers.StringToField(message); + alertPack.AlertData.Message = Utils.StringToBytes(message); alertPack.AlertData.Modal = modal; return alertPack; } - public void SendLoadURL(string objectname, LLUUID objectID, LLUUID ownerID, bool groupOwned, string message, + public void SendLoadURL(string objectname, UUID objectID, UUID ownerID, bool groupOwned, string message, string url) { LoadURLPacket loadURL = (LoadURLPacket)PacketPool.Instance.GetPacket(PacketType.LoadURL); - loadURL.Data.ObjectName = Helpers.StringToField(objectname); + loadURL.Data.ObjectName = Utils.StringToBytes(objectname); loadURL.Data.ObjectID = objectID; loadURL.Data.OwnerID = ownerID; loadURL.Data.OwnerIsGroup = groupOwned; - loadURL.Data.Message = Helpers.StringToField(message); - loadURL.Data.URL = Helpers.StringToField(url); + loadURL.Data.Message = Utils.StringToBytes(message); + loadURL.Data.URL = Utils.StringToBytes(url); OutPacket(loadURL, ThrottleOutPacketType.Task); } - public void SendDialog(string objectname, LLUUID objectID, LLUUID ownerID, string msg, LLUUID textureID, int ch, string[] buttonlabels) + public void SendDialog(string objectname, UUID objectID, UUID ownerID, string msg, UUID textureID, int ch, string[] buttonlabels) { ScriptDialogPacket dialog = (ScriptDialogPacket)PacketPool.Instance.GetPacket(PacketType.ScriptDialog); dialog.Data.ObjectID = objectID; - dialog.Data.ObjectName = Helpers.StringToField(objectname); - dialog.Data.FirstName = Helpers.StringToField(this.FirstName); - dialog.Data.LastName = Helpers.StringToField(this.LastName); - dialog.Data.Message = Helpers.StringToField(msg); + dialog.Data.ObjectName = Utils.StringToBytes(objectname); + dialog.Data.FirstName = Utils.StringToBytes(this.FirstName); + dialog.Data.LastName = Utils.StringToBytes(this.LastName); + dialog.Data.Message = Utils.StringToBytes(msg); dialog.Data.ImageID = textureID; dialog.Data.ChatChannel = ch; ScriptDialogPacket.ButtonsBlock[] buttons = new ScriptDialogPacket.ButtonsBlock[buttonlabels.Length]; for (int i = 0; i < buttonlabels.Length; i++) { buttons[i] = new ScriptDialogPacket.ButtonsBlock(); - buttons[i].ButtonLabel = Helpers.StringToField(buttonlabels[i]); + buttons[i].ButtonLabel = Utils.StringToBytes(buttonlabels[i]); } dialog.Buttons = buttons; OutPacket(dialog, ThrottleOutPacketType.Task); } - public void SendPreLoadSound(LLUUID objectID, LLUUID ownerID, LLUUID soundID) + public void SendPreLoadSound(UUID objectID, UUID ownerID, UUID soundID) { PreloadSoundPacket preSound = (PreloadSoundPacket)PacketPool.Instance.GetPacket(PacketType.PreloadSound); // TODO: don't create new blocks if recycling an old packet @@ -1976,7 +1973,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(preSound, ThrottleOutPacketType.Task); } - public void SendPlayAttachedSound(LLUUID soundID, LLUUID objectID, LLUUID ownerID, float gain, byte flags) + public void SendPlayAttachedSound(UUID soundID, UUID objectID, UUID ownerID, float gain, byte flags) { AttachedSoundPacket sound = (AttachedSoundPacket)PacketPool.Instance.GetPacket(PacketType.AttachedSound); sound.DataBlock.SoundID = soundID; @@ -1988,7 +1985,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(sound, ThrottleOutPacketType.Task); } - public void SendTriggeredSound(LLUUID soundID, LLUUID ownerID, LLUUID objectID, LLUUID parentID, ulong handle, LLVector3 position, float gain) + public void SendTriggeredSound(UUID soundID, UUID ownerID, UUID objectID, UUID parentID, ulong handle, Vector3 position, float gain) { SoundTriggerPacket sound = (SoundTriggerPacket)PacketPool.Instance.GetPacket(PacketType.SoundTrigger); sound.SoundData.SoundID = soundID; @@ -2002,7 +1999,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(sound, ThrottleOutPacketType.Task); } - public void SendAttachedSoundGainChange(LLUUID objectID, float gain) + public void SendAttachedSoundGainChange(UUID objectID, float gain) { AttachedSoundGainChangePacket sound = (AttachedSoundGainChangePacket)PacketPool.Instance.GetPacket(PacketType.AttachedSoundGainChange); sound.DataBlock.ObjectID = objectID; @@ -2011,7 +2008,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(sound, ThrottleOutPacketType.Task); } - public void SendSunPos(LLVector3 Position, LLVector3 Velocity, ulong CurrentTime, uint SecondsPerSunCycle, uint SecondsPerYear, float OrbitalPosition) + public void SendSunPos(Vector3 Position, Vector3 Velocity, ulong CurrentTime, uint SecondsPerSunCycle, uint SecondsPerYear, float OrbitalPosition) { SimulatorViewerTimeMessagePacket viewertime = (SimulatorViewerTimeMessagePacket)PacketPool.Instance.GetPacket(PacketType.SimulatorViewerTimeMessage); viewertime.TimeInfo.SunDirection = Position; @@ -2039,7 +2036,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP int sunPhase = (phase + 2) / 2; if ((sunPhase < 6) || (sunPhase > 36)) { - viewertime.TimeInfo.SunDirection = new LLVector3(0f, 0.8f, -0.8f); + viewertime.TimeInfo.SunDirection = new Vector3(0f, 0.8f, -0.8f); Console.WriteLine("sending night"); } else @@ -2067,37 +2064,37 @@ namespace OpenSim.Region.ClientStack.LindenUDP { yValue *= -1; } - viewertime.TimeInfo.SunDirection = new LLVector3(0f, yValue, 0.3f); + viewertime.TimeInfo.SunDirection = new Vector3(0f, yValue, 0.3f); Console.WriteLine("sending sun update " + yValue); } - viewertime.TimeInfo.SunAngVelocity = new LLVector3(0, 0.0f, 10.0f); + viewertime.TimeInfo.SunAngVelocity = new Vector3(0, 0.0f, 10.0f); viewertime.TimeInfo.UsecSinceStart = (ulong)Util.UnixTimeSinceEpoch(); viewertime.Header.Reliable = false; OutPacket(viewertime, ThrottleOutPacketType.Task); */ } - public void SendAvatarProperties(LLUUID avatarID, string aboutText, string bornOn, Byte[] charterMember, - string flAbout, uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, - LLUUID partnerID) + public void SendAvatarProperties(UUID avatarID, string aboutText, string bornOn, Byte[] charterMember, + string flAbout, uint flags, UUID flImageID, UUID imageID, string profileURL, + UUID partnerID) { AvatarPropertiesReplyPacket avatarReply = (AvatarPropertiesReplyPacket)PacketPool.Instance.GetPacket(PacketType.AvatarPropertiesReply); avatarReply.AgentData.AgentID = AgentId; avatarReply.AgentData.AvatarID = avatarID; if (aboutText != null) - avatarReply.PropertiesData.AboutText = Helpers.StringToField(aboutText); + avatarReply.PropertiesData.AboutText = Utils.StringToBytes(aboutText); else - avatarReply.PropertiesData.AboutText = Helpers.StringToField(""); - avatarReply.PropertiesData.BornOn = Helpers.StringToField(bornOn); + avatarReply.PropertiesData.AboutText = Utils.StringToBytes(""); + avatarReply.PropertiesData.BornOn = Utils.StringToBytes(bornOn); avatarReply.PropertiesData.CharterMember = charterMember; if (flAbout != null) - avatarReply.PropertiesData.FLAboutText = Helpers.StringToField(flAbout); + avatarReply.PropertiesData.FLAboutText = Utils.StringToBytes(flAbout); else - avatarReply.PropertiesData.FLAboutText = Helpers.StringToField(""); + avatarReply.PropertiesData.FLAboutText = Utils.StringToBytes(""); avatarReply.PropertiesData.Flags = flags; avatarReply.PropertiesData.FLImageID = flImageID; avatarReply.PropertiesData.ImageID = imageID; - avatarReply.PropertiesData.ProfileURL = Helpers.StringToField(profileURL); + avatarReply.PropertiesData.ProfileURL = Utils.StringToBytes(profileURL); avatarReply.PropertiesData.PartnerID = partnerID; OutPacket(avatarReply, ThrottleOutPacketType.Task); } @@ -2140,7 +2137,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry) + public void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry) { AvatarAppearancePacket avp = (AvatarAppearancePacket)PacketPool.Instance.GetPacket(PacketType.AvatarAppearance); // TODO: don't create new blocks if recycling an old packet @@ -2160,7 +2157,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(avp, ThrottleOutPacketType.Task); } - public void SendAnimations(LLUUID[] animations, int[] seqs, LLUUID sourceAgentId) + public void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId) { AvatarAnimationPacket ani = (AvatarAnimationPacket)PacketPool.Instance.GetPacket(PacketType.AvatarAnimation); // TODO: don't create new blocks if recycling an old packet @@ -2194,8 +2191,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, - uint avatarLocalID, LLVector3 Pos, byte[] textureEntry, uint parentID, LLQuaternion rotation) + public void SendAvatarData(ulong regionHandle, string firstName, string lastName, UUID avatarID, + uint avatarLocalID, Vector3 Pos, byte[] textureEntry, uint parentID, Quaternion rotation) { ObjectUpdatePacket objupdate = (ObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ObjectUpdate); // TODO: don't create new blocks if recycling an old packet @@ -2209,9 +2206,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP objupdate.ObjectData[0].FullID = avatarID; objupdate.ObjectData[0].ParentID = parentID; objupdate.ObjectData[0].NameValue = - Helpers.StringToField("FirstName STRING RW SV " + firstName + "\nLastName STRING RW SV " + lastName); + Utils.StringToBytes("FirstName STRING RW SV " + firstName + "\nLastName STRING RW SV " + lastName); - LLVector3 pos2 = new LLVector3((float)Pos.X, (float)Pos.Y, (float)Pos.Z); + Vector3 pos2 = new Vector3((float)Pos.X, (float)Pos.Y, (float)Pos.Z); byte[] pb = pos2.GetBytes(); Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length); @@ -2230,11 +2227,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, - LLVector3 velocity, LLQuaternion rotation) + public void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, Vector3 position, + Vector3 velocity, Quaternion rotation) { if (rotation.X == rotation.Y && rotation.Y == rotation.Z && rotation.Z == rotation.W && rotation.W == 0) - rotation = LLQuaternion.Identity; + rotation = Quaternion.Identity; ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateAvatarImprovedBlock(localID, position, velocity, rotation); @@ -2251,7 +2248,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(terse, ThrottleOutPacketType.Task); } - public void SendCoarseLocationUpdate(List CoarseLocations) + public void SendCoarseLocationUpdate(List CoarseLocations) { CoarseLocationUpdatePacket loc = (CoarseLocationUpdatePacket)PacketPool.Instance.GetPacket(PacketType.CoarseLocationUpdate); // TODO: don't create new blocks if recycling an old packet @@ -2286,7 +2283,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint) + public void AttachObject(uint localID, Quaternion rotation, byte attachPoint) { ObjectAttachPacket attach = (ObjectAttachPacket)PacketPool.Instance.GetPacket(PacketType.ObjectAttach); @@ -2305,8 +2302,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP public void SendPrimitiveToClient( ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, - LLVector3 pos, LLVector3 vel, LLVector3 acc, LLQuaternion rotation, LLVector3 rvel, - uint flags, LLUUID objectID, LLUUID ownerID, string text, byte[] color, + Vector3 pos, Vector3 vel, Vector3 acc, Quaternion rotation, Vector3 rvel, + uint flags, UUID objectID, UUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, byte clickAction) { byte[] textureanim = new byte[0]; @@ -2314,19 +2311,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP SendPrimitiveToClient(regionHandle, timeDilation, localID, primShape, pos, vel, acc, rotation, rvel, flags, objectID, ownerID, text, color, parentID, particleSystem, - clickAction, textureanim, false, (uint)0, LLUUID.Zero, LLUUID.Zero, 0, 0, 0); + clickAction, textureanim, false, (uint)0, UUID.Zero, UUID.Zero, 0, 0, 0); } public void SendPrimitiveToClient( ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, - LLVector3 pos, LLVector3 velocity, LLVector3 acceleration, LLQuaternion rotation, LLVector3 rotational_velocity, + Vector3 pos, Vector3 velocity, Vector3 acceleration, Quaternion rotation, Vector3 rotational_velocity, uint flags, - LLUUID objectID, LLUUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, - byte clickAction, byte[] textureanim, bool attachment, uint AttachPoint, LLUUID AssetId, LLUUID SoundId, double SoundGain, byte SoundFlags, double SoundRadius) + UUID objectID, UUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, + byte clickAction, byte[] textureanim, bool attachment, uint AttachPoint, UUID AssetId, UUID SoundId, double SoundGain, byte SoundFlags, double SoundRadius) { if (rotation.X == rotation.Y && rotation.Y == rotation.Z && rotation.Z == rotation.W && rotation.W == 0) - rotation = LLQuaternion.Identity; + rotation = Quaternion.Identity; ObjectUpdatePacket outPacket = (ObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ObjectUpdate); @@ -2344,13 +2341,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP outPacket.ObjectData[0].OwnerID = ownerID; // Anything more than 254 will cause libsecondlife to barf - // (libsl 1550) adds an \0 on the Helpers.StringToField conversion if it isn't present + // (libsl 1550) adds an \0 on the Utils.StringToBytes conversion if it isn't present if (text.Length > 254) { text = text.Remove(254); } - outPacket.ObjectData[0].Text = Helpers.StringToField(text); + outPacket.ObjectData[0].Text = Utils.StringToBytes(text); outPacket.ObjectData[0].TextColor[0] = color[0]; outPacket.ObjectData[0].TextColor[1] = color[1]; @@ -2364,21 +2361,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (attachment) { // Necessary??? - outPacket.ObjectData[0].JointAxisOrAnchor = new LLVector3(0, 0, 2); - outPacket.ObjectData[0].JointPivot = new LLVector3(0, 0, 0); + outPacket.ObjectData[0].JointAxisOrAnchor = new Vector3(0, 0, 2); + outPacket.ObjectData[0].JointPivot = new Vector3(0, 0, 0); // Item from inventory??? outPacket.ObjectData[0].NameValue = - Helpers.StringToField("AttachItemID STRING RW SV " + AssetId.UUID); + Utils.StringToBytes("AttachItemID STRING RW SV " + AssetId.Guid); outPacket.ObjectData[0].State = (byte)((AttachPoint % 16) * 16 + (AttachPoint / 16)); } // Xantor 20080528: Send sound info as well // Xantor 20080530: Zero out everything if there's no SoundId, so zerocompression will work again outPacket.ObjectData[0].Sound = SoundId; - if (SoundId == LLUUID.Zero) + if (SoundId == UUID.Zero) { - outPacket.ObjectData[0].OwnerID = LLUUID.Zero; + outPacket.ObjectData[0].OwnerID = UUID.Zero; outPacket.ObjectData[0].Gain = 0.0f; outPacket.ObjectData[0].Radius = 0.0f; outPacket.ObjectData[0].Flags = 0; @@ -2420,11 +2417,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, - LLQuaternion rotation, LLVector3 velocity, LLVector3 rotationalvelocity, byte state, LLUUID AssetId) + public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, Vector3 position, + Quaternion rotation, Vector3 velocity, Vector3 rotationalvelocity, byte state, UUID AssetId) { if (rotation.X == rotation.Y && rotation.Y == rotation.Z && rotation.Z == rotation.W && rotation.W == 0) - rotation = LLQuaternion.Identity; + rotation = Quaternion.Identity; ImprovedTerseObjectUpdatePacket terse = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate); // TODO: don't create new blocks if recycling an old packet terse.RegionData.RegionHandle = regionHandle; @@ -2436,11 +2433,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(terse, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority); } - public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, - LLQuaternion rotation, LLVector3 velocity, LLVector3 rotationalvelocity) + public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, Vector3 position, + Quaternion rotation, Vector3 velocity, Vector3 rotationalvelocity) { if (rotation.X == rotation.Y && rotation.Y == rotation.Z && rotation.Z == rotation.W && rotation.W == 0) - rotation = LLQuaternion.Identity; + rotation = Quaternion.Identity; ImprovedTerseObjectUpdatePacket terse = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate); // TODO: don't create new blocks if recycling an old packet terse.RegionData.RegionHandle = regionHandle; @@ -2452,7 +2449,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(terse, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority); } - public void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, LLUUID AssetFullID) + public void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, UUID AssetFullID) { AssetUploadCompletePacket newPack = new AssetUploadCompletePacket(); newPack.AssetBlock.Type = AssetType; @@ -2462,7 +2459,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(newPack, ThrottleOutPacketType.Asset); } - public void SendXferRequest(ulong XferID, short AssetType, LLUUID vFileID, byte FilePath, byte[] FileName) + public void SendXferRequest(ulong XferID, short AssetType, UUID vFileID, byte FilePath, byte[] FileName) { RequestXferPacket newPack = new RequestXferPacket(); newPack.XferID.ID = XferID; @@ -2483,7 +2480,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(newPack, ThrottleOutPacketType.Asset); } - public void SendImagePart(ushort numParts, LLUUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec) + public void SendImagePart(ushort numParts, UUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec) { ImageDataPacket im = new ImageDataPacket(); im.Header.Reliable = false; @@ -2510,10 +2507,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(pack, ThrottleOutPacketType.Task); } - public void SendObjectPropertiesFamilyData(uint RequestFlags, LLUUID ObjectUUID, LLUUID OwnerID, LLUUID GroupID, + public void SendObjectPropertiesFamilyData(uint RequestFlags, UUID ObjectUUID, UUID OwnerID, UUID GroupID, uint BaseMask, uint OwnerMask, uint GroupMask, uint EveryoneMask, uint NextOwnerMask, int OwnershipCost, byte SaleType, int SalePrice, uint Category, - LLUUID LastOwnerID, string ObjectName, string Description) + UUID LastOwnerID, string ObjectName, string Description) { ObjectPropertiesFamilyPacket objPropFamilyPack = (ObjectPropertiesFamilyPacket)PacketPool.Instance.GetPacket(PacketType.ObjectPropertiesFamily); // TODO: don't create new blocks if recycling an old packet @@ -2535,16 +2532,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP objPropDB.SalePrice = SalePrice; objPropDB.Category = Category; objPropDB.LastOwnerID = LastOwnerID; - objPropDB.Name = Helpers.StringToField(ObjectName); - objPropDB.Description = Helpers.StringToField(Description); + objPropDB.Name = Utils.StringToBytes(ObjectName); + objPropDB.Description = Utils.StringToBytes(Description); objPropFamilyPack.ObjectData = objPropDB; objPropFamilyPack.Header.Zerocoded = true; OutPacket(objPropFamilyPack, ThrottleOutPacketType.Task); } - public void SendObjectPropertiesReply(LLUUID ItemID, ulong CreationDate, LLUUID CreatorUUID, LLUUID FolderUUID, LLUUID FromTaskUUID, - LLUUID GroupUUID, short InventorySerial, LLUUID LastOwnerUUID, LLUUID ObjectUUID, - LLUUID OwnerUUID, string TouchTitle, byte[] TextureID, string SitTitle, string ItemName, + public void SendObjectPropertiesReply(UUID ItemID, ulong CreationDate, UUID CreatorUUID, UUID FolderUUID, UUID FromTaskUUID, + UUID GroupUUID, short InventorySerial, UUID LastOwnerUUID, UUID ObjectUUID, + UUID OwnerUUID, string TouchTitle, byte[] TextureID, string SitTitle, string ItemName, string ItemDescription, uint OwnerMask, uint NextOwnerMask, uint GroupMask, uint EveryoneMask, uint BaseMask, byte saleType, int salePrice) { @@ -2562,15 +2559,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP proper.ObjectData[0].InventorySerial = InventorySerial; proper.ObjectData[0].LastOwnerID = LastOwnerUUID; - // proper.ObjectData[0].LastOwnerID = LLUUID.Zero; + // proper.ObjectData[0].LastOwnerID = UUID.Zero; proper.ObjectData[0].ObjectID = ObjectUUID; proper.ObjectData[0].OwnerID = OwnerUUID; - proper.ObjectData[0].TouchName = Helpers.StringToField(TouchTitle); + proper.ObjectData[0].TouchName = Utils.StringToBytes(TouchTitle); proper.ObjectData[0].TextureID = TextureID; - proper.ObjectData[0].SitName = Helpers.StringToField(SitTitle); - proper.ObjectData[0].Name = Helpers.StringToField(ItemName); - proper.ObjectData[0].Description = Helpers.StringToField(ItemDescription); + proper.ObjectData[0].SitName = Utils.StringToBytes(SitTitle); + proper.ObjectData[0].Name = Utils.StringToBytes(ItemName); + proper.ObjectData[0].Description = Utils.StringToBytes(ItemDescription); proper.ObjectData[0].OwnerMask = OwnerMask; proper.ObjectData[0].NextOwnerMask = NextOwnerMask; proper.ObjectData[0].GroupMask = GroupMask; @@ -2591,7 +2588,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP private bool convertParamStringToBool(byte[] field) { - string s = Helpers.FieldToUTF8String(field); + string s = Utils.BytesToString(field); if (s == "1" || s.ToLower() == "y" || s.ToLower() == "yes" || s.ToLower() == "t" || s.ToLower() == "true") { return true; @@ -2599,14 +2596,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP return false; } - public void SendEstateManagersList(LLUUID invoice, LLUUID[] EstateManagers, uint estateID) + public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID) { EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket(); - packet.AgentData.TransactionID = LLUUID.Random(); + packet.AgentData.TransactionID = UUID.Random(); packet.AgentData.AgentID = this.AgentId; packet.AgentData.SessionID = this.SessionId; packet.MethodData.Invoice = invoice; - packet.MethodData.Method = Helpers.StringToField("setaccess"); + packet.MethodData.Method = Utils.StringToBytes("setaccess"); EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[6 + EstateManagers.Length]; @@ -2616,12 +2613,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP } int j = 0; - returnblock[j].Parameter = Helpers.StringToField(estateID.ToString()); j++; - returnblock[j].Parameter = Helpers.StringToField(((int)Constants.EstateAccessCodex.EstateManagers).ToString()); j++; - returnblock[j].Parameter = Helpers.StringToField("0"); j++; - returnblock[j].Parameter = Helpers.StringToField("0"); j++; - returnblock[j].Parameter = Helpers.StringToField("0"); j++; - returnblock[j].Parameter = Helpers.StringToField(EstateManagers.Length.ToString()); j++; + returnblock[j].Parameter = Utils.StringToBytes(estateID.ToString()); j++; + returnblock[j].Parameter = Utils.StringToBytes(((int)Constants.EstateAccessCodex.EstateManagers).ToString()); j++; + returnblock[j].Parameter = Utils.StringToBytes("0"); j++; + returnblock[j].Parameter = Utils.StringToBytes("0"); j++; + returnblock[j].Parameter = Utils.StringToBytes("0"); j++; + returnblock[j].Parameter = Utils.StringToBytes(EstateManagers.Length.ToString()); j++; for (int i = 0; i < EstateManagers.Length; i++) { returnblock[j].Parameter = EstateManagers[i].GetBytes(); j++; @@ -2631,25 +2628,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP this.OutPacket(packet, ThrottleOutPacketType.Task); } - public void SendBannedUserList(LLUUID invoice, EstateBan[] bl, uint estateID) + public void SendBannedUserList(UUID invoice, EstateBan[] bl, uint estateID) { - ListBannedUsers = new List(); + ListBannedUsers = new List(); for (int i = 0; i < bl.Length; i++) { if (bl[i] == null) continue; - if (bl[i].bannedUUID == LLUUID.Zero) + if (bl[i].bannedUUID == UUID.Zero) continue; BannedUsers.Add(bl[i].bannedUUID); } EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket(); - packet.AgentData.TransactionID = LLUUID.Random(); + packet.AgentData.TransactionID = UUID.Random(); packet.AgentData.AgentID = this.AgentId; packet.AgentData.SessionID = this.SessionId; packet.MethodData.Invoice = invoice; - packet.MethodData.Method = Helpers.StringToField("setaccess"); + packet.MethodData.Method = Utils.StringToBytes("setaccess"); EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[6 + BannedUsers.Count]; @@ -2659,14 +2656,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP } int j = 0; - returnblock[j].Parameter = Helpers.StringToField(estateID.ToString()); j++; - returnblock[j].Parameter = Helpers.StringToField(((int)Constants.EstateAccessCodex.EstateBans).ToString()); j++; - returnblock[j].Parameter = Helpers.StringToField("0"); j++; - returnblock[j].Parameter = Helpers.StringToField("0"); j++; - returnblock[j].Parameter = Helpers.StringToField(BannedUsers.Count.ToString()); j++; - returnblock[j].Parameter = Helpers.StringToField("0"); j++; + returnblock[j].Parameter = Utils.StringToBytes(estateID.ToString()); j++; + returnblock[j].Parameter = Utils.StringToBytes(((int)Constants.EstateAccessCodex.EstateBans).ToString()); j++; + returnblock[j].Parameter = Utils.StringToBytes("0"); j++; + returnblock[j].Parameter = Utils.StringToBytes("0"); j++; + returnblock[j].Parameter = Utils.StringToBytes(BannedUsers.Count.ToString()); j++; + returnblock[j].Parameter = Utils.StringToBytes("0"); j++; - foreach (LLUUID banned in BannedUsers) + foreach (UUID banned in BannedUsers) { returnblock[j].Parameter = banned.GetBytes(); j++; } @@ -2696,34 +2693,34 @@ namespace OpenSim.Region.ClientStack.LindenUDP rinfoblk.TerrainRaiseLimit = args.terrainRaiseLimit; rinfoblk.UseEstateSun = args.useEstateSun; rinfoblk.WaterHeight = args.waterHeight; - rinfoblk.SimName = Helpers.StringToField(args.simName); + rinfoblk.SimName = Utils.StringToBytes(args.simName); rinfopack.RegionInfo = rinfoblk; this.OutPacket(rinfopack, ThrottleOutPacketType.Task); } - public void SendEstateCovenantInformation(LLUUID covenant) + public void SendEstateCovenantInformation(UUID covenant) { EstateCovenantReplyPacket einfopack = new EstateCovenantReplyPacket(); EstateCovenantReplyPacket.DataBlock edata = new EstateCovenantReplyPacket.DataBlock(); edata.CovenantID = covenant; edata.CovenantTimestamp = 0; - if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) edata.EstateOwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; else edata.EstateOwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; - edata.EstateName = Helpers.StringToField(m_scene.RegionInfo.EstateSettings.EstateName); + edata.EstateName = Utils.StringToBytes(m_scene.RegionInfo.EstateSettings.EstateName); einfopack.Data = edata; this.OutPacket(einfopack, ThrottleOutPacketType.Task); } - public void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, LLUUID covenant, string abuseEmail) + public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail) { EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket(); packet.MethodData.Invoice = invoice; - packet.AgentData.TransactionID = LLUUID.Random(); - packet.MethodData.Method = Helpers.StringToField("estateupdateinfo"); + packet.AgentData.TransactionID = UUID.Random(); + packet.MethodData.Method = Utils.StringToBytes("estateupdateinfo"); EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[10]; for (int i = 0; i < 10; i++) @@ -2732,22 +2729,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP } //Sending Estate Settings - returnblock[0].Parameter = Helpers.StringToField(estateName); + returnblock[0].Parameter = Utils.StringToBytes(estateName); // TODO: remove this cruft once MasterAvatar is fully deprecated // - if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) - returnblock[1].Parameter = Helpers.StringToField(m_scene.RegionInfo.EstateSettings.EstateOwner.ToString()); + if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) + returnblock[1].Parameter = Utils.StringToBytes(m_scene.RegionInfo.EstateSettings.EstateOwner.ToString()); else - returnblock[1].Parameter = Helpers.StringToField(m_scene.RegionInfo.MasterAvatarAssignedUUID.ToString()); - returnblock[2].Parameter = Helpers.StringToField(estateID.ToString()); + returnblock[1].Parameter = Utils.StringToBytes(m_scene.RegionInfo.MasterAvatarAssignedUUID.ToString()); + returnblock[2].Parameter = Utils.StringToBytes(estateID.ToString()); - returnblock[3].Parameter = Helpers.StringToField(estateFlags.ToString()); - returnblock[4].Parameter = Helpers.StringToField(sunPosition.ToString()); - returnblock[5].Parameter = Helpers.StringToField(parentEstate.ToString()); - returnblock[6].Parameter = Helpers.StringToField(covenant.ToString()); - returnblock[7].Parameter = Helpers.StringToField("1160895077"); // what is this? - returnblock[8].Parameter = Helpers.StringToField("1"); // what is this? - returnblock[9].Parameter = Helpers.StringToField(abuseEmail); + returnblock[3].Parameter = Utils.StringToBytes(estateFlags.ToString()); + returnblock[4].Parameter = Utils.StringToBytes(sunPosition.ToString()); + returnblock[5].Parameter = Utils.StringToBytes(parentEstate.ToString()); + returnblock[6].Parameter = Utils.StringToBytes(covenant.ToString()); + returnblock[7].Parameter = Utils.StringToBytes("1160895077"); // what is this? + returnblock[8].Parameter = Utils.StringToBytes("1"); // what is this? + returnblock[9].Parameter = Utils.StringToBytes(abuseEmail); packet.ParamList = returnblock; packet.Header.Reliable = false; @@ -2783,7 +2780,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP updatePacket.ParcelData.Bitmap = landData.Bitmap; - updatePacket.ParcelData.Desc = Helpers.StringToField(landData.Description); + updatePacket.ParcelData.Desc = Utils.StringToBytes(landData.Description); updatePacket.ParcelData.Category = (byte)landData.Category; updatePacket.ParcelData.ClaimDate = landData.ClaimDate; updatePacket.ParcelData.ClaimPrice = landData.ClaimPrice; @@ -2802,9 +2799,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP } updatePacket.ParcelData.MediaAutoScale = landData.MediaAutoScale; updatePacket.ParcelData.MediaID = landData.MediaID; - updatePacket.ParcelData.MediaURL = Helpers.StringToField(landData.MediaURL); - updatePacket.ParcelData.MusicURL = Helpers.StringToField(landData.MusicURL); - updatePacket.ParcelData.Name = Helpers.StringToField(landData.Name); + updatePacket.ParcelData.MediaURL = Utils.StringToBytes(landData.MediaURL); + updatePacket.ParcelData.MusicURL = Utils.StringToBytes(landData.MusicURL); + updatePacket.ParcelData.Name = Utils.StringToBytes(landData.Name); updatePacket.ParcelData.OtherCleanTime = 0; //unemplemented updatePacket.ParcelData.OtherCount = 0; //unemplemented updatePacket.ParcelData.OtherPrims = landData.OtherPrims; @@ -2851,7 +2848,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP remote_client.OutPacket((Packet)updatePacket, ThrottleOutPacketType.Task); } - public void SendLandAccessListData(List avatars, uint accessFlag, int localLandID) + public void SendLandAccessListData(List avatars, uint accessFlag, int localLandID) { ParcelAccessListReplyPacket replyPacket = (ParcelAccessListReplyPacket)PacketPool.Instance.GetPacket(PacketType.ParcelAccessListReply); replyPacket.Data.AgentID = this.AgentId; @@ -2860,7 +2857,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP replyPacket.Data.SequenceID = 0; List list = new List(); - foreach (LLUUID avatar in avatars) + foreach (UUID avatar in avatars) { ParcelAccessListReplyPacket.ListBlock block = new ParcelAccessListReplyPacket.ListBlock(); block.Flags = accessFlag; @@ -2913,7 +2910,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - public void SendLandObjectOwners(Dictionary ownersAndCount) + public void SendLandObjectOwners(Dictionary ownersAndCount) { int notifyCount = ownersAndCount.Count; ParcelObjectOwnersReplyPacket pack = (ParcelObjectOwnersReplyPacket)PacketPool.Instance.GetPacket(PacketType.ParcelObjectOwnersReply); @@ -2933,7 +2930,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP = new ParcelObjectOwnersReplyPacket.DataBlock[notifyCount]; int num = 0; - foreach (LLUUID owner in ownersAndCount.Keys) + foreach (UUID owner in ownersAndCount.Keys) { dataBlock[num] = new ParcelObjectOwnersReplyPacket.DataBlock(); dataBlock[num].Count = ownersAndCount[owner]; @@ -2959,9 +2956,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP #region Helper Methods - protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateAvatarImprovedBlock(uint localID, LLVector3 pos, - LLVector3 velocity, - LLQuaternion rotation) + protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateAvatarImprovedBlock(uint localID, Vector3 pos, + Vector3 velocity, + Quaternion rotation) { byte[] bytes = new byte[60]; int i = 0; @@ -2992,13 +2989,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP internDirec = new Vector3(velocity.X, velocity.Y, velocity.Z); internDirec = internDirec / 128.0f; - internDirec.x += 1; - internDirec.y += 1; - internDirec.z += 1; + internDirec.X += 1; + internDirec.Y += 1; + internDirec.Z += 1; - InternVelocityX = (ushort)(32768 * internDirec.x); - InternVelocityY = (ushort)(32768 * internDirec.y); - InternVelocityZ = (ushort)(32768 * internDirec.z); + InternVelocityX = (ushort)(32768 * internDirec.X); + InternVelocityY = (ushort)(32768 * internDirec.Y); + InternVelocityZ = (ushort)(32768 * internDirec.Z); ushort ac = 32767; bytes[i++] = (byte)(InternVelocityX % 256); @@ -3054,10 +3051,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreatePrimImprovedBlock(uint localID, - LLVector3 position, - LLQuaternion rotation, - LLVector3 velocity, - LLVector3 rotationalvelocity, + Vector3 position, + Quaternion rotation, + Vector3 velocity, + Vector3 rotationalvelocity, byte state) { uint ID = localID; @@ -3082,13 +3079,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP Vector3 vel = new Vector3(velocity.X, velocity.Y, velocity.Z); vel = vel / 128.0f; - vel.x += 1; - vel.y += 1; - vel.z += 1; + vel.X += 1; + vel.Y += 1; + vel.Z += 1; //vel - velx = (ushort)(32768 * (vel.x)); - vely = (ushort)(32768 * (vel.y)); - velz = (ushort)(32768 * (vel.z)); + velx = (ushort)(32768 * (vel.X)); + vely = (ushort)(32768 * (vel.Y)); + velz = (ushort)(32768 * (vel.Z)); bytes[i++] = (byte)(velx % 256); bytes[i++] = (byte)((velx >> 8) % 256); @@ -3126,13 +3123,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP Vector3 rvel = new Vector3(rotationalvelocity.X, rotationalvelocity.Y, rotationalvelocity.Z); rvel = rvel / 128.0f; - rvel.x += 1; - rvel.y += 1; - rvel.z += 1; + rvel.X += 1; + rvel.Y += 1; + rvel.Z += 1; //vel - rvelx = (ushort)(32768 * (rvel.x)); - rvely = (ushort)(32768 * (rvel.y)); - rvelz = (ushort)(32768 * (rvel.z)); + rvelx = (ushort)(32768 * (rvel.X)); + rvely = (ushort)(32768 * (rvel.Y)); + rvelz = (ushort)(32768 * (rvel.Z)); bytes[i++] = (byte)(rvelx % 256); bytes[i++] = (byte)((rvelx >> 8) % 256); @@ -3204,11 +3201,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP objdata.NameValue = new byte[0]; objdata.Text = new byte[0]; objdata.TextColor = new byte[4]; - objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); - objdata.JointPivot = new LLVector3(0, 0, 0); + objdata.JointAxisOrAnchor = new Vector3(0, 0, 0); + objdata.JointPivot = new Vector3(0, 0, 0); objdata.Material = 3; objdata.TextureAnim = new byte[0]; - objdata.Sound = LLUUID.Zero; + objdata.Sound = UUID.Zero; objdata.State = 0; objdata.Data = new byte[0]; @@ -3224,7 +3221,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP public ObjectUpdatePacket.ObjectDataBlock CreateDefaultAvatarPacket(byte[] textureEntry) { ObjectUpdatePacket.ObjectDataBlock objdata = new ObjectUpdatePacket.ObjectDataBlock(); - // new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i); + // new OpenMetaverse.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i); SetDefaultAvatarPacketValues(ref objdata); objdata.UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24); @@ -3233,18 +3230,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP objdata.PathScaleX = 100; objdata.PathScaleY = 100; objdata.ParentID = 0; - objdata.OwnerID = LLUUID.Zero; - objdata.Scale = new LLVector3(1, 1, 1); + objdata.OwnerID = UUID.Zero; + objdata.Scale = new Vector3(1, 1, 1); objdata.PCode = (byte)PCode.Avatar; if (textureEntry != null) { objdata.TextureEntry = textureEntry; } - LLVector3 pos = new LLVector3(objdata.ObjectData, 16); + Vector3 pos = new Vector3(objdata.ObjectData, 16); pos.X = 100f; objdata.ID = 8880000; - objdata.NameValue = Helpers.StringToField("FirstName STRING RW SV Test \nLastName STRING RW SV User "); - //LLVector3 pos2 = new LLVector3(100f, 100f, 23f); + objdata.NameValue = Utils.StringToBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User "); + //Vector3 pos2 = new Vector3(100f, 100f, 23f); //objdata.FullID=user.AgentId; byte[] pb = pos.GetBytes(); Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length); @@ -3264,12 +3261,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP objdata.NameValue = new byte[0]; objdata.Text = new byte[0]; objdata.TextColor = new byte[4]; - objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); - objdata.JointPivot = new LLVector3(0, 0, 0); + objdata.JointAxisOrAnchor = new Vector3(0, 0, 0); + objdata.JointPivot = new Vector3(0, 0, 0); objdata.Material = 4; objdata.TextureAnim = new byte[0]; - objdata.Sound = LLUUID.Zero; - LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); + objdata.Sound = UUID.Zero; + Primitive.TextureEntry ntex = new Primitive.TextureEntry(new UUID("00000000-0000-0000-5005-000000000005")); objdata.TextureEntry = ntex.ToBytes(); objdata.State = 0; @@ -3285,15 +3282,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP objdata.ObjectData[64] = 189; } - public void SendNameReply(LLUUID profileId, string firstname, string lastname) + public void SendNameReply(UUID profileId, string firstname, string lastname) { UUIDNameReplyPacket packet = (UUIDNameReplyPacket)PacketPool.Instance.GetPacket(PacketType.UUIDNameReply); // TODO: don't create new blocks if recycling an old packet packet.UUIDNameBlock = new UUIDNameReplyPacket.UUIDNameBlockBlock[1]; packet.UUIDNameBlock[0] = new UUIDNameReplyPacket.UUIDNameBlockBlock(); packet.UUIDNameBlock[0].ID = profileId; - packet.UUIDNameBlock[0].FirstName = Helpers.StringToField(firstname); - packet.UUIDNameBlock[0].LastName = Helpers.StringToField(lastname); + packet.UUIDNameBlock[0].FirstName = Utils.StringToBytes(firstname); + packet.UUIDNameBlock[0].LastName = Utils.StringToBytes(lastname); OutPacket(packet, ThrottleOutPacketType.Task); } @@ -3382,7 +3379,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { for (int i = 0; i < ogpack.ObjectData.Length; i++) { - handlerObjectGroupRequest(this, ogpack.AgentData.GroupID, ogpack.ObjectData[i].ObjectLocalID, LLUUID.Zero); + handlerObjectGroupRequest(this, ogpack.AgentData.GroupID, ogpack.ObjectData[i].ObjectLocalID, UUID.Zero); } } return true; @@ -3415,7 +3412,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP return true; } - public void SendScriptQuestion(LLUUID taskID, string taskName, string ownerName, LLUUID itemID, int question) + public void SendScriptQuestion(UUID taskID, string taskName, string ownerName, UUID itemID, int question) { ScriptQuestionPacket scriptQuestion = (ScriptQuestionPacket)PacketPool.Instance.GetPacket(PacketType.ScriptQuestion); scriptQuestion.Data = new ScriptQuestionPacket.DataBlock(); @@ -3423,8 +3420,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP scriptQuestion.Data.TaskID = taskID; scriptQuestion.Data.ItemID = itemID; scriptQuestion.Data.Questions = question; - scriptQuestion.Data.ObjectName = Helpers.StringToField(taskName); - scriptQuestion.Data.ObjectOwner = Helpers.StringToField(ownerName); + scriptQuestion.Data.ObjectName = Utils.StringToBytes(taskName); + scriptQuestion.Data.ObjectOwner = Utils.StringToBytes(ownerName); OutPacket(scriptQuestion, ThrottleOutPacketType.Task); } @@ -3433,11 +3430,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP { } - public LLUUID GetDefaultAnimation(string name) + public UUID GetDefaultAnimation(string name) { if (m_defaultAnimations.ContainsKey(name)) return m_defaultAnimations[name]; - return LLUUID.Zero; + return UUID.Zero; } /// @@ -3496,7 +3493,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; - cachedresp.WearableData[i].TextureID = LLUUID.Zero; + cachedresp.WearableData[i].TextureID = UUID.Zero; cachedresp.WearableData[i].HostName = new byte[0]; } @@ -3526,19 +3523,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (part == null) { // It's a ghost! tell the client to delete it from view. - simClient.SendKillObject(Scene.RegionInfo.RegionHandle, + simClient.SendKiPrimitive(Scene.RegionInfo.RegionHandle, localId); } else { - // LLUUID partId = part.UUID; + // UUID partId = part.UUID; UpdatePrimRotation handlerUpdatePrimRotation = OnUpdatePrimGroupRotation; UpdatePrimGroupRotation handlerUpdatePrimGroupRotation = OnUpdatePrimGroupMouseRotation; switch (block.Type) { case 1: - LLVector3 pos1 = new LLVector3(block.Data, 0); + Vector3 pos1 = new Vector3(block.Data, 0); handlerUpdatePrimSinglePosition = OnUpdatePrimSinglePosition; if (handlerUpdatePrimSinglePosition != null) @@ -3548,7 +3545,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case 2: - LLQuaternion rot1 = new LLQuaternion(block.Data, 0, true); + Quaternion rot1 = new Quaternion(block.Data, 0, true); handlerUpdatePrimSingleRotation = OnUpdatePrimSingleRotation; if (handlerUpdatePrimSingleRotation != null) @@ -3559,7 +3556,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP break; case 3: - LLQuaternion rot2 = new LLQuaternion(block.Data, 12, true); + Quaternion rot2 = new Quaternion(block.Data, 12, true); handlerUpdatePrimSingleRotation = OnUpdatePrimSingleRotation; if (handlerUpdatePrimSingleRotation != null) { @@ -3569,8 +3566,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP break; case 5: - LLVector3 scale1 = new LLVector3(block.Data, 12); - LLVector3 pos11 = new LLVector3(block.Data, 0); + Vector3 scale1 = new Vector3(block.Data, 12); + Vector3 pos11 = new Vector3(block.Data, 0); handlerUpdatePrimScale = OnUpdatePrimScale; if (handlerUpdatePrimScale != null) @@ -3586,7 +3583,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case 9: - LLVector3 pos2 = new LLVector3(block.Data, 0); + Vector3 pos2 = new Vector3(block.Data, 0); handlerUpdateVector = OnUpdatePrimGroupPosition; @@ -3597,7 +3594,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case 10: - LLQuaternion rot3 = new LLQuaternion(block.Data, 0, true); + Quaternion rot3 = new Quaternion(block.Data, 0, true); handlerUpdatePrimRotation = OnUpdatePrimGroupRotation; if (handlerUpdatePrimRotation != null) @@ -3607,8 +3604,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case 11: - LLVector3 pos3 = new LLVector3(block.Data, 0); - LLQuaternion rot4 = new LLQuaternion(block.Data, 12, true); + Vector3 pos3 = new Vector3(block.Data, 0); + Quaternion rot4 = new Quaternion(block.Data, 12, true); handlerUpdatePrimGroupRotation = OnUpdatePrimGroupMouseRotation; if (handlerUpdatePrimGroupRotation != null) @@ -3619,8 +3616,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case 13: - LLVector3 scale2 = new LLVector3(block.Data, 12); - LLVector3 pos4 = new LLVector3(block.Data, 0); + Vector3 scale2 = new Vector3(block.Data, 12); + Vector3 pos4 = new Vector3(block.Data, 0); handlerUpdatePrimScale = OnUpdatePrimScale; if (handlerUpdatePrimScale != null) @@ -3638,8 +3635,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case 29: - LLVector3 scale5 = new LLVector3(block.Data, 12); - LLVector3 pos5 = new LLVector3(block.Data, 0); + Vector3 scale5 = new Vector3(block.Data, 12); + Vector3 pos5 = new Vector3(block.Data, 0); handlerUpdatePrimGroupScale = OnUpdatePrimGroupScale; if (handlerUpdatePrimGroupScale != null) @@ -3655,8 +3652,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case 21: - LLVector3 scale6 = new LLVector3(block.Data, 12); - LLVector3 pos6 = new LLVector3(block.Data, 0); + Vector3 scale6 = new Vector3(block.Data, 12); + Vector3 pos6 = new Vector3(block.Data, 0); handlerUpdatePrimScale = OnUpdatePrimScale; if (handlerUpdatePrimScale != null) @@ -3691,7 +3688,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP mapReply.LayerData[0].Left = 0; mapReply.LayerData[0].Top = 30000; mapReply.LayerData[0].Right = 30000; - mapReply.LayerData[0].ImageID = new LLUUID("00000000-0000-1111-9999-000000000006"); + mapReply.LayerData[0].ImageID = new UUID("00000000-0000-1111-9999-000000000006"); mapReply.Header.Zerocoded = true; OutPacket(mapReply, ThrottleOutPacketType.Land); } @@ -3717,7 +3714,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP mbReply.Data[iii].Name = System.Text.Encoding.UTF8.GetBytes((string)mp["name"]); mbReply.Data[iii].Access = System.Convert.ToByte(mp["access"]); mbReply.Data[iii].Agents = System.Convert.ToByte(mp["agents"]); - mbReply.Data[iii].MapImageID = new LLUUID((string)mp["map-image-id"]); + mbReply.Data[iii].MapImageID = new UUID((string)mp["map-image-id"]); mbReply.Data[iii].RegionFlags = System.Convert.ToUInt32(mp["region-flags"]); mbReply.Data[iii].WaterHeight = System.Convert.ToByte(mp["water-height"]); mbReply.Data[iii].X = System.Convert.ToUInt16(mp["x"]); @@ -3776,7 +3773,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (m_moneyBalance + debit >= 0) { m_moneyBalance += debit; - SendMoneyBalance(LLUUID.Zero, true, Helpers.StringToField("Poof Poof!"), m_moneyBalance); + SendMoneyBalance(UUID.Zero, true, Utils.StringToBytes("Poof Poof!"), m_moneyBalance); return true; } else @@ -3791,7 +3788,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void DecipherGenericMessage(string gmMethod, LLUUID gmInvoice, GenericMessagePacket.ParamListBlock[] gmParams) + public void DecipherGenericMessage(string gmMethod, UUID gmInvoice, GenericMessagePacket.ParamListBlock[] gmParams) { switch (gmMethod) { @@ -3804,9 +3801,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP try { Helpers.LongToUInts(Scene.RegionInfo.RegionHandle, out regionX, out regionY); - locx = Convert.ToSingle(Helpers.FieldToUTF8String(gmParams[0].Parameter)) - (float)regionX; - locy = Convert.ToSingle(Helpers.FieldToUTF8String(gmParams[1].Parameter)) - (float)regionY; - locz = Convert.ToSingle(Helpers.FieldToUTF8String(gmParams[2].Parameter)); + locx = Convert.ToSingle(Utils.BytesToString(gmParams[0].Parameter)) - (float)regionX; + locy = Convert.ToSingle(Utils.BytesToString(gmParams[1].Parameter)) - (float)regionY; + locz = Convert.ToSingle(Utils.BytesToString(gmParams[2].Parameter)); } catch (InvalidCastException) { @@ -3817,7 +3814,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP handlerAutoPilotGo = OnAutoPilotGo; if (handlerAutoPilotGo != null) { - handlerAutoPilotGo(0, new LLVector3(locx, locy, locz), this); + handlerAutoPilotGo(0, new Vector3(locx, locy, locz), this); } m_log.InfoFormat("[CLIENT]: Client Requests autopilot to position <{0},{1},{2}>", locx, locy, locz); @@ -3839,7 +3836,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// Entryway from the client to the simulator /// all UDP packets from the client will end up here /// - /// libsecondlife.packet + /// OpenMetaverse.packet public void ProcessInPacket(Packet Pack) { // check if we've got a local packet handler for this packet.type. See RegisterLocalPacketHandlers() @@ -3858,7 +3855,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP case PacketType.GenericMessage: GenericMessagePacket gmpack = (GenericMessagePacket)Pack; - DecipherGenericMessage(Helpers.FieldToUTF8String(gmpack.MethodData.Method), gmpack.MethodData.Invoice, gmpack.ParamList); + DecipherGenericMessage(Utils.BytesToString(gmpack.MethodData.Method), gmpack.MethodData.Invoice, gmpack.ParamList); break; case PacketType.AvatarPropertiesRequest: @@ -3877,8 +3874,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP string fromName = String.Empty; //ClientAvatar.firstname + " " + ClientAvatar.lastname; byte[] message = inchatpack.ChatData.Message; byte type = inchatpack.ChatData.Type; - LLVector3 fromPos = new LLVector3(); // ClientAvatar.Pos; - // LLUUID fromAgentID = AgentId; + Vector3 fromPos = new Vector3(); // ClientAvatar.Pos; + // UUID fromAgentID = AgentId; int channel = inchatpack.ChatData.Channel; @@ -3887,7 +3884,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OSChatMessage args = new OSChatMessage(); args.Channel = channel; args.From = fromName; - args.Message = Helpers.FieldToUTF8String(message); + args.Message = Utils.BytesToString(message); args.Type = (ChatTypeEnum)type; args.Position = fromPos; @@ -3908,8 +3905,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP AvatarPropertiesUpdatePacket.PropertiesDataBlock Properties = Packet.PropertiesData; UserProfileData UserProfile = new UserProfileData(); UserProfile.ID = AgentId; - UserProfile.AboutText = Helpers.FieldToUTF8String(Properties.AboutText); - UserProfile.FirstLifeAboutText = Helpers.FieldToUTF8String(Properties.FLAboutText); + UserProfile.AboutText = Utils.BytesToString(Properties.AboutText); + UserProfile.FirstLifeAboutText = Utils.BytesToString(Properties.FLAboutText); UserProfile.FirstLifeImage = Properties.FLImageID; UserProfile.Image = Properties.ImageID; @@ -3926,9 +3923,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP OSChatMessage args = new OSChatMessage(); args.Channel = ch; args.From = String.Empty; - args.Message = Helpers.FieldToUTF8String(msg); + args.Message = Utils.BytesToString(msg); args.Type = ChatTypeEnum.Shout; - args.Position = new LLVector3(); + args.Position = new Vector3(); args.Scene = Scene; args.Sender = this; handlerChatFromViewer2 = OnChatFromViewer; @@ -3940,7 +3937,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP case PacketType.ImprovedInstantMessage: ImprovedInstantMessagePacket msgpack = (ImprovedInstantMessagePacket)Pack; string IMfromName = Util.FieldToString(msgpack.MessageBlock.FromAgentName); - string IMmessage = Helpers.FieldToUTF8String(msgpack.MessageBlock.Message); + string IMmessage = Utils.BytesToString(msgpack.MessageBlock.Message); handlerInstantMessage = OnInstantMessage; if (handlerInstantMessage != null) @@ -3959,10 +3956,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP AcceptFriendshipPacket afriendpack = (AcceptFriendshipPacket)Pack; // My guess is this is the folder to stick the calling card into - List callingCardFolders = new List(); + List callingCardFolders = new List(); - LLUUID agentID = afriendpack.AgentData.AgentID; - LLUUID transactionID = afriendpack.TransactionBlock.TransactionID; + UUID agentID = afriendpack.AgentData.AgentID; + UUID transactionID = afriendpack.TransactionBlock.TransactionID; for (int fi = 0; fi < afriendpack.FolderData.Length; fi++) { @@ -3977,8 +3974,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP break; case PacketType.TerminateFriendship: TerminateFriendshipPacket tfriendpack = (TerminateFriendshipPacket)Pack; - LLUUID listOwnerAgentID = tfriendpack.AgentData.AgentID; - LLUUID exFriendID = tfriendpack.ExBlock.OtherID; + UUID listOwnerAgentID = tfriendpack.AgentData.AgentID; + UUID exFriendID = tfriendpack.ExBlock.OtherID; handlerTerminateFriendship = OnTerminateFriendship; if (handlerTerminateFriendship != null) @@ -4130,8 +4127,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP { DetachAttachmentIntoInvPacket detachtoInv = (DetachAttachmentIntoInvPacket)Pack; - LLUUID itemID = detachtoInv.ObjectData.ItemID; - // LLUUID ATTACH_agentID = detachtoInv.ObjectData.AgentID; + UUID itemID = detachtoInv.ObjectData.ItemID; + // UUID ATTACH_agentID = detachtoInv.ObjectData.AgentID; handlerDetachAttachmentIntoInv(itemID, this); } @@ -4266,13 +4263,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP AvatarPickerRequestPacket avRequestQuery = (AvatarPickerRequestPacket)Pack; AvatarPickerRequestPacket.AgentDataBlock Requestdata = avRequestQuery.AgentData; AvatarPickerRequestPacket.DataBlock querydata = avRequestQuery.Data; - //Console.WriteLine("Agent Sends:" + Helpers.FieldToUTF8String(querydata.Name)); + //Console.WriteLine("Agent Sends:" + Utils.BytesToString(querydata.Name)); handlerAvatarPickerRequest = OnAvatarPickerRequest; if (handlerAvatarPickerRequest != null) { handlerAvatarPickerRequest(this, Requestdata.AgentID, Requestdata.QueryID, - Helpers.FieldToUTF8String(querydata.Name)); + Utils.BytesToString(querydata.Name)); } break; case PacketType.AgentDataUpdateRequest: @@ -4613,8 +4610,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP { ObjectPermissionsPacket newobjPerms = (ObjectPermissionsPacket)Pack; - LLUUID AgentID = newobjPerms.AgentData.AgentID; - LLUUID SessionID = newobjPerms.AgentData.SessionID; + UUID AgentID = newobjPerms.AgentData.AgentID; + UUID SessionID = newobjPerms.AgentData.SessionID; handlerObjectPermissions = null; @@ -4654,7 +4651,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { for (int i = 0; i < undoitem.ObjectData.Length; i++) { - LLUUID objiD = undoitem.ObjectData[i].ObjectID; + UUID objiD = undoitem.ObjectData[i].ObjectID; handlerOnUndo = OnUndo; if (handlerOnUndo != null) { @@ -4762,15 +4759,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP // if (transfer.TransferInfo.SourceType == 3) { - LLUUID taskID = null; - LLUUID itemID = null; - LLUUID requestID = null; - taskID = new LLUUID(transfer.TransferInfo.Params, 48); - itemID = new LLUUID(transfer.TransferInfo.Params, 64); - requestID = new LLUUID(transfer.TransferInfo.Params, 80); + UUID taskID = null; + UUID itemID = null; + UUID requestID = null; + taskID = new UUID(transfer.TransferInfo.Params, 48); + itemID = new UUID(transfer.TransferInfo.Params, 64); + requestID = new UUID(transfer.TransferInfo.Params, 80); if (!(((Scene)m_scene).ExternalChecks.ExternalChecksBypassPermissions())) { - if (taskID != LLUUID.Zero) // Prim + if (taskID != UUID.Zero) // Prim { SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID); if (part == null) @@ -4831,7 +4828,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack; // Console.WriteLine("upload request " + Pack.ToString()); // Console.WriteLine("upload request was for assetid: " + request.AssetBlock.TransactionID.Combine(this.SecureSessionId).ToString()); - LLUUID temp = LLUUID.Combine(request.AssetBlock.TransactionID, SecureSessionId); + UUID temp = UUID.Combine(request.AssetBlock.TransactionID, SecureSessionId); handlerAssetUploadRequest = OnAssetUploadRequest; @@ -5019,7 +5016,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP //Console.WriteLine(Pack.ToString()); /*for (int i = 0; i < update.InventoryData.Length; i++) { - if (update.InventoryData[i].TransactionID != LLUUID.Zero) + if (update.InventoryData[i].TransactionID != UUID.Zero) { AssetBase asset = m_assetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionId)); if (asset != null) @@ -5244,9 +5241,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP break; case PacketType.TeleportLandmarkRequest: TeleportLandmarkRequestPacket tpReq = (TeleportLandmarkRequestPacket)Pack; - LLUUID lmid = tpReq.Info.LandmarkID; + UUID lmid = tpReq.Info.LandmarkID; AssetLandmark lm; - if (lmid != LLUUID.Zero) + if (lmid != UUID.Zero) { AssetBase lma = m_assetCache.GetAsset(lmid, false); @@ -5441,14 +5438,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP args.AuthBuyerID = parcelPropertiesPacket.ParcelData.AuthBuyerID; args.Category = (Parcel.ParcelCategory)parcelPropertiesPacket.ParcelData.Category; - args.Desc = Helpers.FieldToUTF8String(parcelPropertiesPacket.ParcelData.Desc); + args.Desc = Utils.BytesToString(parcelPropertiesPacket.ParcelData.Desc); args.GroupID = parcelPropertiesPacket.ParcelData.GroupID; args.LandingType = parcelPropertiesPacket.ParcelData.LandingType; args.MediaAutoScale = parcelPropertiesPacket.ParcelData.MediaAutoScale; args.MediaID = parcelPropertiesPacket.ParcelData.MediaID; - args.MediaURL = Helpers.FieldToUTF8String(parcelPropertiesPacket.ParcelData.MediaURL); - args.MusicURL = Helpers.FieldToUTF8String(parcelPropertiesPacket.ParcelData.MusicURL); - args.Name = Helpers.FieldToUTF8String(parcelPropertiesPacket.ParcelData.Name); + args.MediaURL = Utils.BytesToString(parcelPropertiesPacket.ParcelData.MediaURL); + args.MusicURL = Utils.BytesToString(parcelPropertiesPacket.ParcelData.MusicURL); + args.Name = Utils.BytesToString(parcelPropertiesPacket.ParcelData.Name); args.ParcelFlags = parcelPropertiesPacket.ParcelData.ParcelFlags; args.PassHours = parcelPropertiesPacket.ParcelData.PassHours; args.PassPrice = parcelPropertiesPacket.ParcelData.PassPrice; @@ -5504,11 +5501,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP ParcelReturnObjectsPacket parcelReturnObjects = (ParcelReturnObjectsPacket)Pack; - LLUUID[] puserselectedOwnerIDs = new LLUUID[parcelReturnObjects.OwnerIDs.Length]; + UUID[] puserselectedOwnerIDs = new UUID[parcelReturnObjects.OwnerIDs.Length]; for (int parceliterator = 0; parceliterator < parcelReturnObjects.OwnerIDs.Length; parceliterator++) puserselectedOwnerIDs[parceliterator] = parcelReturnObjects.OwnerIDs[parceliterator].OwnerID; - LLUUID[] puserselectedTaskIDs = new LLUUID[parcelReturnObjects.TaskIDs.Length]; + UUID[] puserselectedTaskIDs = new UUID[parcelReturnObjects.TaskIDs.Length]; for (int parceliterator = 0; parceliterator < parcelReturnObjects.TaskIDs.Length; parceliterator++) puserselectedTaskIDs[parceliterator] = parcelReturnObjects.TaskIDs[parceliterator].TaskID; @@ -5528,7 +5525,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP case PacketType.EstateOwnerMessage: EstateOwnerMessagePacket messagePacket = (EstateOwnerMessagePacket)Pack; - switch (Helpers.FieldToUTF8String(messagePacket.MethodData.Method)) + switch (Utils.BytesToString(messagePacket.MethodData.Method)) { case "getinfo": if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) @@ -5541,9 +5538,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP { OnSetEstateFlagsRequest(convertParamStringToBool(messagePacket.ParamList[0].Parameter), convertParamStringToBool(messagePacket.ParamList[1].Parameter), convertParamStringToBool(messagePacket.ParamList[2].Parameter), !convertParamStringToBool(messagePacket.ParamList[3].Parameter), - Convert.ToInt16(Convert.ToDecimal(Helpers.FieldToUTF8String(messagePacket.ParamList[4].Parameter))), - (float)Convert.ToDecimal(Helpers.FieldToUTF8String(messagePacket.ParamList[5].Parameter)), - Convert.ToInt16(Helpers.FieldToUTF8String(messagePacket.ParamList[6].Parameter)), + Convert.ToInt16(Convert.ToDecimal(Utils.BytesToString(messagePacket.ParamList[4].Parameter))), + (float)Convert.ToDecimal(Utils.BytesToString(messagePacket.ParamList[5].Parameter)), + Convert.ToInt16(Utils.BytesToString(messagePacket.ParamList[6].Parameter)), convertParamStringToBool(messagePacket.ParamList[7].Parameter), convertParamStringToBool(messagePacket.ParamList[8].Parameter)); } @@ -5554,11 +5551,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP // { // foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) // { -// string s = Helpers.FieldToUTF8String(block.Parameter); +// string s = Utils.BytesToString(block.Parameter); // string[] splitField = s.Split(' '); // if (splitField.Length == 2) // { -// LLUUID tempUUID = new LLUUID(splitField[1]); +// UUID tempUUID = new UUID(splitField[1]); // OnSetEstateTerrainBaseTexture(this, Convert.ToInt16(splitField[0]), tempUUID); // } // } @@ -5569,12 +5566,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP { foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { - string s = Helpers.FieldToUTF8String(block.Parameter); + string s = Utils.BytesToString(block.Parameter); string[] splitField = s.Split(' '); if (splitField.Length == 2) { Int16 corner = Convert.ToInt16(splitField[0]); - LLUUID textureUUID = new LLUUID(splitField[1]); + UUID textureUUID = new UUID(splitField[1]); OnSetEstateTerrainDetailTexture(this, corner, textureUUID); } @@ -5587,7 +5584,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { - string s = Helpers.FieldToUTF8String(block.Parameter); + string s = Utils.BytesToString(block.Parameter); string[] splitField = s.Split(' '); if (splitField.Length == 3) { @@ -5615,21 +5612,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP try { string tmp; - tmp = Helpers.FieldToUTF8String(messagePacket.ParamList[0].Parameter); + tmp = Utils.BytesToString(messagePacket.ParamList[0].Parameter); if (!tmp.Contains(".")) tmp += ".00"; float WaterHeight = (float)Convert.ToDecimal(tmp); - tmp = Helpers.FieldToUTF8String(messagePacket.ParamList[1].Parameter); + tmp = Utils.BytesToString(messagePacket.ParamList[1].Parameter); if (!tmp.Contains(".")) tmp += ".00"; float TerrainRaiseLimit = (float)Convert.ToDecimal(tmp); - tmp = Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter); + tmp = Utils.BytesToString(messagePacket.ParamList[2].Parameter); if (!tmp.Contains(".")) tmp += ".00"; float TerrainLowerLimit = (float)Convert.ToDecimal(tmp); bool UseEstateSun = convertParamStringToBool(messagePacket.ParamList[3].Parameter); bool UseFixedSun = convertParamStringToBool(messagePacket.ParamList[4].Parameter); - float SunHour = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(messagePacket.ParamList[5].Parameter)); + float SunHour = (float)Convert.ToDecimal(Utils.BytesToString(messagePacket.ParamList[5].Parameter)); bool UseGlobal = convertParamStringToBool(messagePacket.ParamList[6].Parameter); bool EstateFixedSun = convertParamStringToBool(messagePacket.ParamList[7].Parameter); - float EstateSunHour = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(messagePacket.ParamList[8].Parameter)); + float EstateSunHour = (float)Convert.ToDecimal(Utils.BytesToString(messagePacket.ParamList[8].Parameter)); OnSetRegionTerrainSettings(WaterHeight, TerrainRaiseLimit, TerrainLowerLimit, UseEstateSun, UseFixedSun, SunHour, UseGlobal, EstateFixedSun, EstateSunHour); @@ -5649,7 +5646,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { float timeSeconds = 0; - Helpers.TryParse(Helpers.FieldToUTF8String(block.Parameter), out timeSeconds); + Utils.TryParseSingle(Utils.BytesToString(block.Parameter), out timeSeconds); timeSeconds = (int)timeSeconds; OnEstateRestartSimRequest(this, (int)timeSeconds); @@ -5661,7 +5658,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { - LLUUID newCovenantID = new LLUUID(Helpers.FieldToUTF8String(block.Parameter)); + UUID newCovenantID = new UUID(Utils.BytesToString(block.Parameter)); OnEstateChangeCovenantRequest(this, newCovenantID); } } @@ -5669,19 +5666,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP case "estateaccessdelta": // Estate access delta manages the banlist and allow list too. if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { - int estateAccessType = Convert.ToInt16(Helpers.FieldToUTF8String(messagePacket.ParamList[1].Parameter)); - OnUpdateEstateAccessDeltaRequest(this, messagePacket.MethodData.Invoice, estateAccessType, new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter))); + int estateAccessType = Convert.ToInt16(Utils.BytesToString(messagePacket.ParamList[1].Parameter)); + OnUpdateEstateAccessDeltaRequest(this, messagePacket.MethodData.Invoice, estateAccessType, new UUID(Utils.BytesToString(messagePacket.ParamList[2].Parameter))); } break; case "simulatormessage": if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { - LLUUID invoice = messagePacket.MethodData.Invoice; - LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter)); - string SenderName = Helpers.FieldToUTF8String(messagePacket.ParamList[3].Parameter); - string Message = Helpers.FieldToUTF8String(messagePacket.ParamList[4].Parameter); - LLUUID sessionID = messagePacket.AgentData.SessionID; + UUID invoice = messagePacket.MethodData.Invoice; + UUID SenderID = new UUID(Utils.BytesToString(messagePacket.ParamList[2].Parameter)); + string SenderName = Utils.BytesToString(messagePacket.ParamList[3].Parameter); + string Message = Utils.BytesToString(messagePacket.ParamList[4].Parameter); + UUID sessionID = messagePacket.AgentData.SessionID; OnSimulatorBlueBoxMessageRequest(this, invoice, SenderID, sessionID, SenderName, Message); } break; @@ -5690,19 +5687,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP { if (messagePacket.ParamList.Length < 5) break; - LLUUID invoice = messagePacket.MethodData.Invoice; - LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter)); - string SenderName = Helpers.FieldToUTF8String(messagePacket.ParamList[3].Parameter); - string Message = Helpers.FieldToUTF8String(messagePacket.ParamList[4].Parameter); - LLUUID sessionID = messagePacket.AgentData.SessionID; + UUID invoice = messagePacket.MethodData.Invoice; + UUID SenderID = new UUID(Utils.BytesToString(messagePacket.ParamList[2].Parameter)); + string SenderName = Utils.BytesToString(messagePacket.ParamList[3].Parameter); + string Message = Utils.BytesToString(messagePacket.ParamList[4].Parameter); + UUID sessionID = messagePacket.AgentData.SessionID; OnEstateBlueBoxMessageRequest(this, invoice, SenderID, sessionID, SenderName, Message); } break; case "setregiondebug": if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { - LLUUID invoice = messagePacket.MethodData.Invoice; - LLUUID SenderID = messagePacket.AgentData.AgentID; + UUID invoice = messagePacket.MethodData.Invoice; + UUID SenderID = messagePacket.AgentData.AgentID; bool scripted = convertParamStringToBool(messagePacket.ParamList[0].Parameter); bool collisionEvents = convertParamStringToBool(messagePacket.ParamList[1].Parameter); bool physics = convertParamStringToBool(messagePacket.ParamList[2].Parameter); @@ -5713,11 +5710,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP case "teleporthomeuser": if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { - LLUUID invoice = messagePacket.MethodData.Invoice; - LLUUID SenderID = messagePacket.AgentData.AgentID; - LLUUID Prey = LLUUID.Zero; + UUID invoice = messagePacket.MethodData.Invoice; + UUID SenderID = messagePacket.AgentData.AgentID; + UUID Prey = UUID.Zero; - Helpers.TryParse(Helpers.FieldToUTF8String(messagePacket.ParamList[1].Parameter), out Prey); + UUID.TryParse(Utils.BytesToString(messagePacket.ParamList[1].Parameter), out Prey); OnEstateTeleportOneUserHomeRequest(this, invoice, SenderID, Prey); } @@ -5750,10 +5747,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP case "estatechangeinfo": if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { - LLUUID invoice = messagePacket.MethodData.Invoice; - LLUUID SenderID = messagePacket.AgentData.AgentID; - UInt32 param1 = Convert.ToUInt32(Helpers.FieldToUTF8String(messagePacket.ParamList[1].Parameter)); - UInt32 param2 = Convert.ToUInt32(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter)); + UUID invoice = messagePacket.MethodData.Invoice; + UUID SenderID = messagePacket.AgentData.AgentID; + UInt32 param1 = Convert.ToUInt32(Utils.BytesToString(messagePacket.ParamList[1].Parameter)); + UInt32 param2 = Convert.ToUInt32(Utils.BytesToString(messagePacket.ParamList[2].Parameter)); handlerEstateChangeInfo = OnEstateChangeInfo; if (handlerEstateChangeInfo != null) @@ -5774,7 +5771,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP handlerLandStatRequest = OnLandStatRequest; if (handlerLandStatRequest != null) { - handlerLandStatRequest(lsrp.RequestData.ParcelLocalID, lsrp.RequestData.ReportType, lsrp.RequestData.RequestFlags, Helpers.FieldToUTF8String(lsrp.RequestData.Filter), this); + handlerLandStatRequest(lsrp.RequestData.ParcelLocalID, lsrp.RequestData.ReportType, lsrp.RequestData.RequestFlags, Utils.BytesToString(lsrp.RequestData.Filter), this); } //int parcelID, uint reportType, uint requestflags, string filter @@ -5813,7 +5810,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP case PacketType.RequestGodlikePowers: RequestGodlikePowersPacket rglpPack = (RequestGodlikePowersPacket)Pack; RequestGodlikePowersPacket.RequestBlockBlock rblock = rglpPack.RequestBlock; - LLUUID token = rblock.Token; + UUID token = rblock.Token; RequestGodlikePowersPacket.AgentDataBlock ablock = rglpPack.AgentData; @@ -6086,7 +6083,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP shape.PathTaperY = addPacket.ObjectData.PathTaperY; shape.PathTwist = addPacket.ObjectData.PathTwist; shape.PathTwistBegin = addPacket.ObjectData.PathTwistBegin; - LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("89556747-24cb-43ed-920b-47caed15465f")); + Primitive.TextureEntry ntex = new Primitive.TextureEntry(new UUID("89556747-24cb-43ed-920b-47caed15465f")); shape.TextureEntry = ntex.ToBytes(); //shape.Textures = ntex; return shape; @@ -6099,7 +6096,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// /// - public void SendBlueBoxMessage(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message) + public void SendBlueBoxMessage(UUID FromAvatarID, UUID fromSessionID, String FromAvatarName, String Message) { if (!ChildAgentStatus()) SendInstantMessage(FromAvatarID, fromSessionID, Message, AgentId, SessionId, FromAvatarName, (byte)1, (uint)Util.UnixTimeSinceEpoch()); @@ -6122,7 +6119,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP logReply.AgentData.SessionID = SessionId; logReply.InventoryData = new LogoutReplyPacket.InventoryDataBlock[1]; logReply.InventoryData[0] = new LogoutReplyPacket.InventoryDataBlock(); - logReply.InventoryData[0].ItemID = LLUUID.Zero; + logReply.InventoryData[0].ItemID = UUID.Zero; OutPacket(logReply, ThrottleOutPacketType.Task); } @@ -6135,7 +6132,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(healthpacket, ThrottleOutPacketType.Task); } - public void SendAgentOnline(LLUUID[] agentIDs) + public void SendAgentOnline(UUID[] agentIDs) { OnlineNotificationPacket onp = new OnlineNotificationPacket(); OnlineNotificationPacket.AgentBlockBlock[] onpb = new OnlineNotificationPacket.AgentBlockBlock[agentIDs.Length]; @@ -6150,7 +6147,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(onp, ThrottleOutPacketType.Task); } - public void SendAgentOffline(LLUUID[] agentIDs) + public void SendAgentOffline(UUID[] agentIDs) { OfflineNotificationPacket offp = new OfflineNotificationPacket(); OfflineNotificationPacket.AgentBlockBlock[] offpb = new OfflineNotificationPacket.AgentBlockBlock[agentIDs.Length]; @@ -6165,12 +6162,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(offp, ThrottleOutPacketType.Task); } - public void SendSitResponse(LLUUID TargetID, LLVector3 OffsetPos, LLQuaternion SitOrientation, bool autopilot, - LLVector3 CameraAtOffset, LLVector3 CameraEyeOffset, bool ForceMouseLook) + public void SendSitResponse(UUID TargetID, Vector3 OffsetPos, Quaternion SitOrientation, bool autopilot, + Vector3 CameraAtOffset, Vector3 CameraEyeOffset, bool ForceMouseLook) { AvatarSitResponsePacket avatarSitResponse = new AvatarSitResponsePacket(); avatarSitResponse.SitObject.ID = TargetID; - if (CameraAtOffset != LLVector3.Zero) + if (CameraAtOffset != Vector3.Zero) { avatarSitResponse.SitTransform.CameraAtOffset = CameraAtOffset; avatarSitResponse.SitTransform.CameraEyeOffset = CameraEyeOffset; @@ -6183,7 +6180,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(avatarSitResponse, ThrottleOutPacketType.Task); } - public void SendAdminResponse(LLUUID Token, uint AdminLevel) + public void SendAdminResponse(UUID Token, uint AdminLevel) { GrantGodlikePowersPacket respondPacket = new GrantGodlikePowersPacket(); GrantGodlikePowersPacket.GrantDataBlock gdb = new GrantGodlikePowersPacket.GrantDataBlock(); @@ -6210,7 +6207,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP Group.Contribution = GroupMembership[i].contribution; Group.GroupID = GroupMembership[i].GroupID; Group.GroupInsigniaID = GroupMembership[i].GroupPicture; - Group.GroupName = Helpers.StringToField(GroupMembership[i].groupName); + Group.GroupName = Utils.StringToBytes(GroupMembership[i].groupName); Group.GroupPowers = GroupMembership[i].groupPowers; Groups[i] = Group; Groupupdate.GroupData = Groups; @@ -6220,13 +6217,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(Groupupdate, ThrottleOutPacketType.Task); } - public void SendGroupNameReply(LLUUID groupLLUID, string GroupName) + public void SendGroupNameReply(UUID groupLLUID, string GroupName) { UUIDGroupNameReplyPacket pack = new UUIDGroupNameReplyPacket(); UUIDGroupNameReplyPacket.UUIDNameBlockBlock[] uidnameblock = new UUIDGroupNameReplyPacket.UUIDNameBlockBlock[1]; UUIDGroupNameReplyPacket.UUIDNameBlockBlock uidnamebloc = new UUIDGroupNameReplyPacket.UUIDNameBlockBlock(); uidnamebloc.ID = groupLLUID; - uidnamebloc.GroupName = Helpers.StringToField(GroupName); + uidnamebloc.GroupName = Utils.StringToBytes(GroupName); uidnameblock[0] = uidnamebloc; pack.UUIDNameBlock = uidnameblock; OutPacket(pack, ThrottleOutPacketType.Task); @@ -6251,15 +6248,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP lsrepdb.Score = lsrpia[i].Score; lsrepdb.TaskID = lsrpia[i].TaskID; lsrepdb.TaskLocalID = lsrpia[i].TaskLocalID; - lsrepdb.TaskName = Helpers.StringToField(lsrpia[i].TaskName); - lsrepdb.OwnerName = Helpers.StringToField(lsrpia[i].OwnerName); + lsrepdb.TaskName = Utils.StringToBytes(lsrpia[i].TaskName); + lsrepdb.OwnerName = Utils.StringToBytes(lsrpia[i].OwnerName); lsrepdba[i] = lsrepdb; } lsrp.ReportData = lsrepdba; OutPacket(lsrp, ThrottleOutPacketType.Task); } - public void SendScriptRunningReply(LLUUID objectID, LLUUID itemID, bool running) + public void SendScriptRunningReply(UUID objectID, UUID itemID, bool running) { ScriptRunningReplyPacket scriptRunningReply = new ScriptRunningReplyPacket(); scriptRunningReply.Script.ObjectID = objectID; @@ -6310,8 +6307,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP else { int processedLength = 0; - // libsecondlife hardcodes 1500 as the maximum data chunk size - int maxChunkSize = 1250; + int maxChunkSize = Settings.MAX_PACKET_SIZE - 100; int packetNumber = 0; while (processedLength < req.AssetInf.Data.Length) @@ -6378,17 +6374,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(commandMessagePacket, ThrottleOutPacketType.Unknown); } - public void SendParcelMediaUpdate(string mediaUrl, LLUUID mediaTextureID, + public void SendParcelMediaUpdate(string mediaUrl, UUID mediaTextureID, byte autoScale, string mediaType, string mediaDesc, int mediaWidth, int mediaHeight, byte mediaLoop) { ParcelMediaUpdatePacket updatePacket = new ParcelMediaUpdatePacket(); - updatePacket.DataBlock.MediaURL = Helpers.StringToField(mediaUrl); + updatePacket.DataBlock.MediaURL = Utils.StringToBytes(mediaUrl); updatePacket.DataBlock.MediaID = mediaTextureID; updatePacket.DataBlock.MediaAutoScale = autoScale; - updatePacket.DataBlockExtended.MediaType = Helpers.StringToField(mediaType); - updatePacket.DataBlockExtended.MediaDesc = Helpers.StringToField(mediaDesc); + updatePacket.DataBlockExtended.MediaType = Utils.StringToBytes(mediaType); + updatePacket.DataBlockExtended.MediaDesc = Utils.StringToBytes(mediaDesc); updatePacket.DataBlockExtended.MediaWidth = mediaWidth; updatePacket.DataBlockExtended.MediaWidth = mediaHeight; updatePacket.DataBlockExtended.MediaLoop = mediaLoop; @@ -6401,7 +6397,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP #region Camera - public void SendSetFollowCamProperties (LLUUID objectID, SortedDictionary parameters) + public void SendSetFollowCamProperties (UUID objectID, SortedDictionary parameters) { SetFollowCamPropertiesPacket packet = (SetFollowCamPropertiesPacket)PacketPool.Instance.GetPacket(PacketType.SetFollowCamProperties); packet.ObjectData.ObjectID = objectID; @@ -6419,7 +6415,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(packet, ThrottleOutPacketType.Task); } - public void SendClearFollowCamProperties (LLUUID objectID) + public void SendClearFollowCamProperties (UUID objectID) { ClearFollowCamPropertiesPacket packet = (ClearFollowCamPropertiesPacket)PacketPool.Instance.GetPacket(PacketType.ClearFollowCamProperties); packet.ObjectData.ObjectID = objectID; @@ -6428,21 +6424,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP #endregion - public void SendRegionHandle(LLUUID regionID, ulong handle) { + public void SendRegionHandle(UUID regionID, ulong handle) { RegionIDAndHandleReplyPacket reply = (RegionIDAndHandleReplyPacket)PacketPool.Instance.GetPacket(PacketType.RegionIDAndHandleReply); reply.ReplyBlock.RegionID = regionID; reply.ReplyBlock.RegionHandle = handle; OutPacket(reply, ThrottleOutPacketType.Land); } - public void SendParcelInfo(RegionInfo info, LandData land, LLUUID parcelID, uint x, uint y) + public void SendParcelInfo(RegionInfo info, LandData land, UUID parcelID, uint x, uint y) { ParcelInfoReplyPacket reply = (ParcelInfoReplyPacket)PacketPool.Instance.GetPacket(PacketType.ParcelInfoReply); reply.AgentData.AgentID = m_agentId; reply.Data.ParcelID = parcelID; reply.Data.OwnerID = land.OwnerID; - reply.Data.Name = Helpers.StringToField(land.Name != null ? land.Name : ""); - reply.Data.Desc = Helpers.StringToField(land.Description != null ? land.Description : ""); + reply.Data.Name = Utils.StringToBytes(land.Name); + reply.Data.Desc = Utils.StringToBytes(land.Description); reply.Data.ActualArea = land.Area; reply.Data.BillableArea = land.Area; // TODO: what is this? @@ -6451,15 +6447,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP ((land.Flags & (uint)Parcel.ParcelFlags.MaturePublish) != 0 ? (1 << 0) : 0) + ((land.Flags & (uint)Parcel.ParcelFlags.ForSale) != 0 ? (1 << 7) : 0)); - LLVector3 pos = land.UserLocation; - if (pos.Equals(LLVector3.Zero)) + Vector3 pos = land.UserLocation; + if (pos.Equals(Vector3.Zero)) { pos = (land.AABBMax + land.AABBMin) * 0.5f; } reply.Data.GlobalX = info.RegionLocX * Constants.RegionSize + x; reply.Data.GlobalY = info.RegionLocY * Constants.RegionSize + y; reply.Data.GlobalZ = pos.Z; - reply.Data.SimName = Helpers.StringToField(info.RegionName != null ? info.RegionName : ""); + reply.Data.SimName = Utils.StringToBytes(info.RegionName); reply.Data.SnapshotID = land.SnapshotID; reply.Data.Dwell = 0; // TODO: not implemented yet reply.Data.SalePrice = land.SalePrice; diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs index 551e7ab884..eddee10f21 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs @@ -33,8 +33,8 @@ using System.Net.Sockets; using System.Threading; using System.Timers; using System.Reflection; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using Timer = System.Timers.Timer; using OpenSim.Framework; using OpenSim.Region.ClientStack.LindenUDP; @@ -44,7 +44,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { public delegate void PacketStats(int inPackets, int outPackets, int unAckedBytes); public delegate void PacketDrop(Packet pack, Object id); - public delegate bool SynchronizeClientHandler(IScene scene, Packet packet, LLUUID agentID, ThrottleOutPacketType throttlePacketType); + public delegate bool SynchronizeClientHandler(IScene scene, Packet packet, UUID agentID, ThrottleOutPacketType throttlePacketType); public interface IPacketHandler { @@ -259,9 +259,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP // acks being appended to the payload, just don't send // any with them until libsl is fixed. // - if (packet is libsecondlife.Packets.ViewerEffectPacket) + if (packet is OpenMetaverse.Packets.ViewerEffectPacket) return; - if (packet is libsecondlife.Packets.SimStatsPacket) + if (packet is OpenMetaverse.Packets.SimStatsPacket) return; // Add acks to outgoing packets diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs index 94f7214589..1e369ec288 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs @@ -29,8 +29,8 @@ using System; using System.Collections.Generic; using System.Threading; using System.Timers; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Framework.Statistics; using OpenSim.Framework.Statistics.Interfaces; @@ -82,9 +82,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP // private long ThrottleInterval; private Timer throttleTimer; - private LLUUID m_agentId; + private UUID m_agentId; - public LLPacketQueue(LLUUID agentId) + public LLPacketQueue(UUID agentId) { // While working on this, the BlockingQueue had me fooled for a bit. // The Blocking queue causes the thread to stop until there's something @@ -479,7 +479,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP for (int i = 0; i < 7; i++) Array.Reverse(throttle, j + i*singlefloat, singlefloat); - // values gotten from libsecondlife.org/wiki/Throttle. Thanks MW_ + // values gotten from OpenMetaverse.org/wiki/Throttle. Thanks MW_ // bytes // Convert to integer, since.. the full fp space isn't used. tResend = (int) BitConverter.ToSingle(throttle, j); diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketServer.cs index 2a3f2e10f0..07d3c458a5 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketServer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketServer.cs @@ -27,8 +27,8 @@ using System.Net; using System.Net.Sockets; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; using OpenSim.Region.ClientStack.LindenUDP; @@ -73,7 +73,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP protected virtual IClientAPI CreateNewClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, ClientManager clientManager, IScene scene, AssetCache assetCache, LLPacketServer packServer, AgentCircuitManager authenSessions, - LLUUID agentId, LLUUID sessionId, uint circuitCode, EndPoint proxyEP) + UUID agentId, UUID sessionId, uint circuitCode, EndPoint proxyEP) { return new LLClientView(remoteEP, scene, assetCache, packServer, authenSessions, agentId, sessionId, circuitCode, proxyEP); @@ -147,4 +147,4 @@ namespace OpenSim.Region.ClientStack.LindenUDP client.Close(false); } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLQueItem.cs b/OpenSim/Region/ClientStack/LindenUDP/LLQueItem.cs index e836dd7d9f..3bb0b7ac08 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLQueItem.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLQueItem.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife.Packets; +using OpenMetaverse.Packets; using OpenSim.Framework; namespace OpenSim.Region.ClientStack.LindenUDP diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs index 8dec185a5e..2d57d7f6cc 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs @@ -31,7 +31,7 @@ using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Reflection; -using libsecondlife.Packets; +using OpenMetaverse.Packets; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -136,7 +136,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP // Return new port // This because in Grid mode it is not really important what port the region listens to as long as it is correctly registered. - // So the option allow_alternate_ports="true" was added to default.xml + // So the option allow_alternate_ports="true" was added to default.Xml port = (uint)(listenPort - proxyPortOffset); } diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs index 91f74729dc..d1572fdd4a 100644 --- a/OpenSim/Region/ClientStack/RegionApplicationBase.cs +++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs @@ -28,7 +28,7 @@ using System.Collections.Generic; using System.Net; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -138,7 +138,7 @@ namespace OpenSim.Region.ClientStack // TODO: Remove this cruft once MasterAvatar is fully deprecated //Master Avatar Setup UserProfileData masterAvatar; - if (scene.RegionInfo.MasterAvatarAssignedUUID != LLUUID.Zero) + if (scene.RegionInfo.MasterAvatarAssignedUUID != UUID.Zero) { masterAvatar = m_commsManager.UserService.SetupMasterUser(scene.RegionInfo.MasterAvatarAssignedUUID); scene.RegionInfo.MasterAvatarFirstName = masterAvatar.FirstName; @@ -160,7 +160,7 @@ namespace OpenSim.Region.ClientStack else { m_log.Info("[PARCEL]: No master avatar found, using null."); - scene.RegionInfo.MasterAvatarAssignedUUID = LLUUID.Zero; + scene.RegionInfo.MasterAvatarAssignedUUID = UUID.Zero; } scene.LoadPrimsFromStorage(regionInfo.originRegionID); diff --git a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs index a2c3c2cc3e..aabddc6ae2 100644 --- a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs +++ b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs @@ -29,7 +29,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications; @@ -177,7 +177,7 @@ namespace OpenSim.Region.Communications.Local return null; } - public RegionInfo RequestNeighbourInfo(LLUUID regionID) + public RegionInfo RequestNeighbourInfo(UUID regionID) { // TODO add a dictionary for faster lookup foreach (RegionInfo info in m_regions.Values) @@ -229,7 +229,7 @@ namespace OpenSim.Region.Communications.Local return mapBlocks; } - public bool TellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID) + public bool TellRegionToCloseChildConnection(ulong regionHandle, UUID agentID) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -306,7 +306,7 @@ namespace OpenSim.Region.Communications.Local return false; } - public bool TriggerTellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID) + public bool TriggerTellRegionToCloseChildConnection(ulong regionHandle, UUID agentID) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -338,7 +338,7 @@ namespace OpenSim.Region.Communications.Local return false; } - public bool InformRegionOfPrimCrossing(ulong regionHandle, LLUUID primID, string objData, int XMLMethod) + public bool InformRegionOfPrimCrossing(ulong regionHandle, UUID primID, string objData, int XMLMethod) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -355,7 +355,7 @@ namespace OpenSim.Region.Communications.Local /// /// /// - public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) + public bool ExpectAvatarCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -366,7 +366,7 @@ namespace OpenSim.Region.Communications.Local return false; } - public bool ExpectPrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical) + public bool ExpectPrimCrossing(ulong regionHandle, UUID primID, Vector3 position, bool isPhysical) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -376,7 +376,7 @@ namespace OpenSim.Region.Communications.Local return false; } - public bool AcknowledgeAgentCrossed(ulong regionHandle, LLUUID agentId) + public bool AcknowledgeAgentCrossed(ulong regionHandle, UUID agentId) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -385,7 +385,7 @@ namespace OpenSim.Region.Communications.Local return false; } - public bool AcknowledgePrimCrossed(ulong regionHandle, LLUUID primID) + public bool AcknowledgePrimCrossed(ulong regionHandle, UUID primID) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -430,7 +430,7 @@ namespace OpenSim.Region.Communications.Local } } - public void TriggerLogOffUser(ulong regionHandle, LLUUID agentID, LLUUID RegionSecret, string message) + public void TriggerLogOffUser(ulong regionHandle, UUID agentID, UUID RegionSecret, string message) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -440,7 +440,7 @@ namespace OpenSim.Region.Communications.Local } } - public void TriggerExpectPrim(ulong regionHandle, LLUUID primID, string objData, int XMLMethod) + public void TriggerExpectPrim(ulong regionHandle, UUID primID, string objData, int XMLMethod) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -461,7 +461,7 @@ namespace OpenSim.Region.Communications.Local } } - public bool TriggerExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) + public bool TriggerExpectAvatarCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying) { if (m_regionListeners.ContainsKey(regionHandle)) { @@ -472,7 +472,7 @@ namespace OpenSim.Region.Communications.Local return false; } - public bool TriggerExpectPrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical) + public bool TriggerExpectPrimCrossing(ulong regionHandle, UUID primID, Vector3 position, bool isPhysical) { if (m_regionListeners.ContainsKey(regionHandle)) { diff --git a/OpenSim/Region/Communications/Local/LocalInventoryService.cs b/OpenSim/Region/Communications/Local/LocalInventoryService.cs index 1d8ea53c4d..5cb33cc57e 100644 --- a/OpenSim/Region/Communications/Local/LocalInventoryService.cs +++ b/OpenSim/Region/Communications/Local/LocalInventoryService.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications; @@ -44,7 +44,7 @@ namespace OpenSim.Region.Communications.Local private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public override void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback) + public override void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback) { m_log.InfoFormat("[LOCAL INVENTORY SERVICE]: Requesting inventory for user {0}", userID); @@ -60,7 +60,7 @@ namespace OpenSim.Region.Communications.Local // Need to retrieve the root folder on the first pass foreach (InventoryFolderBase folder in skeletonFolders) { - if (folder.ParentID == LLUUID.Zero) + if (folder.ParentID == UUID.Zero) { rootFolder = new InventoryFolderImpl(folder); folders.Add(rootFolder); @@ -88,7 +88,7 @@ namespace OpenSim.Region.Communications.Local callback(folders, items); } - public override bool HasInventoryForUser(LLUUID userID) + public override bool HasInventoryForUser(UUID userID) { InventoryFolderBase root = RequestRootFolder(userID); if (root == null) diff --git a/OpenSim/Region/Communications/Local/LocalLoginService.cs b/OpenSim/Region/Communications/Local/LocalLoginService.cs index aeb9ae07aa..518ba09db7 100644 --- a/OpenSim/Region/Communications/Local/LocalLoginService.cs +++ b/OpenSim/Region/Communications/Local/LocalLoginService.cs @@ -30,7 +30,7 @@ using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Text.RegularExpressions; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications; @@ -246,9 +246,9 @@ namespace OpenSim.Region.Communications.Local _login.SecureSession = response.SecureSessionID; _login.CircuitCode = (uint) response.CircuitCode; if (specificStartLocation) - _login.StartPos = new LLVector3(locX, locY, locZ); + _login.StartPos = new Vector3(locX, locY, locZ); else - _login.StartPos = new LLVector3(128, 128, 128); + _login.StartPos = new Vector3(128, 128, 128); _login.CapsPath = capsPath; m_log.InfoFormat( @@ -282,7 +282,7 @@ namespace OpenSim.Region.Communications.Local } // See LoginService - protected override InventoryData GetInventorySkeleton(LLUUID userID) + protected override InventoryData GetInventorySkeleton(UUID userID) { List folders = m_Parent.InterServiceInventoryService.GetInventorySkeleton(userID); @@ -293,12 +293,12 @@ namespace OpenSim.Region.Communications.Local folders = m_Parent.InterServiceInventoryService.GetInventorySkeleton(userID); } - LLUUID rootID = LLUUID.Zero; + UUID rootID = UUID.Zero; ArrayList AgentInventoryArray = new ArrayList(); Hashtable TempHash; foreach (InventoryFolderBase InvFolder in folders) { - if (InvFolder.ParentID == LLUUID.Zero) + if (InvFolder.ParentID == UUID.Zero) { rootID = InvFolder.ID; } diff --git a/OpenSim/Region/Communications/Local/LocalUserServices.cs b/OpenSim/Region/Communications/Local/LocalUserServices.cs index 2ee79812b8..c0887dfad7 100644 --- a/OpenSim/Region/Communications/Local/LocalUserServices.cs +++ b/OpenSim/Region/Communications/Local/LocalUserServices.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Communications; @@ -88,7 +88,7 @@ namespace OpenSim.Region.Communications.Local return profile; } - public override UserProfileData SetupMasterUser(LLUUID uuid) + public override UserProfileData SetupMasterUser(UUID uuid) { UserProfileData data = GetUserProfile(uuid); if (data == null) diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs index da2e4a2c76..1dd421978a 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs @@ -37,7 +37,7 @@ using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using System.Security.Authentication; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nwc.XmlRpc; using OpenSim.Framework; @@ -125,7 +125,7 @@ namespace OpenSim.Region.Communications.OGS1 GridParams["server_uri"] = regionInfo.ServerURI; GridParams["region_secret"] = regionInfo.regionSecret; - if (regionInfo.MasterAvatarAssignedUUID != LLUUID.Zero) + if (regionInfo.MasterAvatarAssignedUUID != UUID.Zero) GridParams["master_avatar_uuid"] = regionInfo.MasterAvatarAssignedUUID.ToString(); else GridParams["master_avatar_uuid"] = regionInfo.EstateSettings.EstateOwner.ToString(); @@ -275,7 +275,7 @@ namespace OpenSim.Region.Communications.OGS1 sri.HttpPort = Convert.ToUInt32(neighbourData["http_port"]); } - sri.RegionID = new LLUUID((string) neighbourData["uuid"]); + sri.RegionID = new UUID((string) neighbourData["uuid"]); neighbours.Add(sri); } @@ -294,7 +294,7 @@ namespace OpenSim.Region.Communications.OGS1 /// FIXME: Might be nicer to return a proper exception here since we could inform the client more about the /// nature of the faiulre. /// - public RegionInfo RequestNeighbourInfo(LLUUID Region_UUID) + public RegionInfo RequestNeighbourInfo(UUID Region_UUID) { RegionInfo regionInfo; Hashtable requestData = new Hashtable(); @@ -344,7 +344,7 @@ namespace OpenSim.Region.Communications.OGS1 regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]); } - regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]); + regionInfo.RegionID = new UUID((string) responseData["region_UUID"]); regionInfo.RegionName = (string) responseData["region_name"]; if (requestData.ContainsKey("regionHandle")) @@ -407,7 +407,7 @@ namespace OpenSim.Region.Communications.OGS1 regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]); } - regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]); + regionInfo.RegionID = new UUID((string) responseData["region_UUID"]); regionInfo.RegionName = (string) responseData["region_name"]; lock (m_remoteRegionInfoCache) @@ -475,7 +475,7 @@ namespace OpenSim.Region.Communications.OGS1 regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]); } - regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]); + regionInfo.RegionID = new UUID((string) responseData["region_UUID"]); regionInfo.RegionName = (string) responseData["region_name"]; if (!m_remoteRegionInfoCache.ContainsKey(regionInfo.RegionHandle)) @@ -533,7 +533,7 @@ namespace OpenSim.Region.Communications.OGS1 neighbour.Access = Convert.ToByte(n["access"]); neighbour.RegionFlags = Convert.ToUInt32(n["region-flags"]); neighbour.WaterHeight = Convert.ToByte(n["water-height"]); - neighbour.MapImageId = new LLUUID((string) n["map-image-id"]); + neighbour.MapImageId = new UUID((string) n["map-image-id"]); neighbours.Add(neighbour); } @@ -606,11 +606,11 @@ namespace OpenSim.Region.Communications.OGS1 m_log.Debug("[CONNECTION DEBUGGING]: Expect User called, starting agent setup ... "); Hashtable requestData = (Hashtable) request.Params[0]; AgentCircuitData agentData = new AgentCircuitData(); - agentData.SessionID = new LLUUID((string) requestData["session_id"]); - agentData.SecureSessionID = new LLUUID((string) requestData["secure_session_id"]); + agentData.SessionID = new UUID((string) requestData["session_id"]); + agentData.SecureSessionID = new UUID((string) requestData["secure_session_id"]); agentData.firstname = (string) requestData["firstname"]; agentData.lastname = (string) requestData["lastname"]; - agentData.AgentID = new LLUUID((string) requestData["agent_id"]); + agentData.AgentID = new UUID((string) requestData["agent_id"]); agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); agentData.CapsPath = (string) requestData["caps_path"]; @@ -623,7 +623,7 @@ namespace OpenSim.Region.Communications.OGS1 { m_log.Debug("[CONNECTION DEBUGGING]: Main agent detected"); agentData.startpos = - new LLVector3((float)Convert.ToDecimal((string)requestData["startpos_x"]), + new Vector3((float)Convert.ToDecimal((string)requestData["startpos_x"]), (float)Convert.ToDecimal((string)requestData["startpos_y"]), (float)Convert.ToDecimal((string)requestData["startpos_z"])); agentData.child = false; @@ -684,10 +684,10 @@ namespace OpenSim.Region.Communications.OGS1 m_log.Debug("[CONNECTION DEBUGGING]: LogOff User Called "); Hashtable requestData = (Hashtable)request.Params[0]; string message = (string)requestData["message"]; - LLUUID agentID = LLUUID.Zero; - LLUUID RegionSecret = LLUUID.Zero; - Helpers.TryParse((string)requestData["agent_id"], out agentID); - Helpers.TryParse((string)requestData["region_secret"], out RegionSecret); + UUID agentID = UUID.Zero; + UUID RegionSecret = UUID.Zero; + UUID.TryParse((string)requestData["agent_id"], out agentID); + UUID.TryParse((string)requestData["region_secret"], out RegionSecret); ulong regionHandle = Convert.ToUInt64((string)requestData["regionhandle"]); @@ -1072,7 +1072,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool InformRegionOfPrimCrossing(ulong regionHandle, LLUUID primID, string objData, int XMLMethod) + public bool InformRegionOfPrimCrossing(ulong regionHandle, UUID primID, string objData, int XMLMethod) { int failures = 0; lock (m_deadRegionCache) @@ -1106,7 +1106,7 @@ namespace OpenSim.Region.Communications.OGS1 if (remObject != null) { - retValue = remObject.InformRegionOfPrimCrossing(regionHandle, primID.UUID, objData, XMLMethod); + retValue = remObject.InformRegionOfPrimCrossing(regionHandle, primID.Guid, objData, XMLMethod); } else { @@ -1168,7 +1168,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) + public bool ExpectAvatarCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying) { RegionInfo[] regions = m_regionsOnInstance.ToArray(); bool banned = false; @@ -1212,7 +1212,7 @@ namespace OpenSim.Region.Communications.OGS1 if (remObject != null) { retValue = - remObject.ExpectAvatarCrossing(regionHandle, agentID.UUID, new sLLVector3(position), + remObject.ExpectAvatarCrossing(regionHandle, agentID.Guid, position, isFlying); } else @@ -1246,7 +1246,7 @@ namespace OpenSim.Region.Communications.OGS1 } } - public bool ExpectPrimCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isPhysical) + public bool ExpectPrimCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isPhysical) { RegionInfo regInfo = null; try @@ -1269,7 +1269,7 @@ namespace OpenSim.Region.Communications.OGS1 if (remObject != null) { retValue = - remObject.ExpectAvatarCrossing(regionHandle, agentID.UUID, new sLLVector3(position), + remObject.ExpectAvatarCrossing(regionHandle, agentID.Guid, position, isPhysical); } else @@ -1322,7 +1322,7 @@ namespace OpenSim.Region.Communications.OGS1 } } - public bool TellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID) + public bool TellRegionToCloseChildConnection(ulong regionHandle, UUID agentID) { RegionInfo regInfo = null; try @@ -1345,7 +1345,7 @@ namespace OpenSim.Region.Communications.OGS1 if (remObject != null) { // retValue = - remObject.TellRegionToCloseChildConnection(regionHandle, agentID.UUID); + remObject.TellRegionToCloseChildConnection(regionHandle, agentID.Guid); } else { @@ -1421,12 +1421,12 @@ namespace OpenSim.Region.Communications.OGS1 } } - public bool AcknowledgeAgentCrossed(ulong regionHandle, LLUUID agentId) + public bool AcknowledgeAgentCrossed(ulong regionHandle, UUID agentId) { return m_localBackend.AcknowledgeAgentCrossed(regionHandle, agentId); } - public bool AcknowledgePrimCrossed(ulong regionHandle, LLUUID primId) + public bool AcknowledgePrimCrossed(ulong regionHandle, UUID primId) { return m_localBackend.AcknowledgePrimCrossed(regionHandle, primId); } @@ -1509,7 +1509,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool IncomingPrim(ulong regionHandle, LLUUID primID, string objData, int XMLMethod) + public bool IncomingPrim(ulong regionHandle, UUID primID, string objData, int XMLMethod) { // Is this necessary? try @@ -1532,7 +1532,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool TriggerExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) + public bool TriggerExpectAvatarCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying) { try { @@ -1545,7 +1545,7 @@ namespace OpenSim.Region.Communications.OGS1 } } - public bool TriggerExpectPrimCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isPhysical) + public bool TriggerExpectPrimCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isPhysical) { try { @@ -1558,7 +1558,7 @@ namespace OpenSim.Region.Communications.OGS1 } } - public bool TriggerTellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID) + public bool TriggerTellRegionToCloseChildConnection(ulong regionHandle, UUID agentID) { try { @@ -1692,18 +1692,18 @@ namespace OpenSim.Region.Communications.OGS1 hash = (Hashtable)response.Value; try { landData = new LandData(); - landData.AABBMax = LLVector3.Parse((string)hash["AABBMax"]); - landData.AABBMin = LLVector3.Parse((string)hash["AABBMin"]); + landData.AABBMax = Vector3.Parse((string)hash["AABBMax"]); + landData.AABBMin = Vector3.Parse((string)hash["AABBMin"]); landData.Area = Convert.ToInt32(hash["Area"]); landData.AuctionID = Convert.ToUInt32(hash["AuctionID"]); landData.Description = (string)hash["Description"]; landData.Flags = Convert.ToUInt32(hash["Flags"]); - landData.GlobalID = new LLUUID((string)hash["GlobalID"]); + landData.GlobalID = new UUID((string)hash["GlobalID"]); landData.Name = (string)hash["Name"]; - landData.OwnerID = new LLUUID((string)hash["OwnerID"]); + landData.OwnerID = new UUID((string)hash["OwnerID"]); landData.SalePrice = Convert.ToInt32(hash["SalePrice"]); - landData.SnapshotID = new LLUUID((string)hash["SnapshotID"]); - landData.UserLocation = LLVector3.Parse((string)hash["UserLocation"]); + landData.SnapshotID = new UUID((string)hash["SnapshotID"]); + landData.UserLocation = Vector3.Parse((string)hash["UserLocation"]); m_log.DebugFormat("[OGS1 GRID SERVICES] Got land data for parcel {0}", landData.Name); } catch (Exception e) @@ -1739,7 +1739,7 @@ namespace OpenSim.Region.Communications.OGS1 if (landData != null) { // for now, only push out the data we need for answering a ParcelInfoReqeust - // FIXME: these Replace calls are necessary as LLVector3.Parse can't parse vectors with spaces in them. Can be removed as soon as we switch to a newer version + // FIXME: these Replace calls are necessary as Vector3.Parse can't parse vectors with spaces in them. Can be removed as soon as we switch to a newer version hash["AABBMax"] = landData.AABBMax.ToString().Replace(" ", ""); hash["AABBMin"] = landData.AABBMin.ToString().Replace(" ", ""); hash["Area"] = landData.Area.ToString(); diff --git a/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs index 8285fb1e74..1f0c0675ce 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs @@ -28,7 +28,7 @@ using System; using System.Reflection; using System.Runtime.Remoting; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -36,17 +36,17 @@ namespace OpenSim.Region.Communications.OGS1 { public delegate bool InformRegionChild(ulong regionHandle, AgentCircuitData agentData); - public delegate bool ExpectArrival(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying); + public delegate bool ExpectArrival(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying); - public delegate bool InformRegionPrimGroup(ulong regionHandle, LLUUID primID, LLVector3 Positon, bool isPhysical); + public delegate bool InformRegionPrimGroup(ulong regionHandle, UUID primID, Vector3 Positon, bool isPhysical); - public delegate bool PrimGroupArrival(ulong regionHandle, LLUUID primID, string objData, int XMLMethod); + public delegate bool PrimGroupArrival(ulong regionHandle, UUID primID, string objData, int XMLMethod); public delegate bool RegionUp(RegionUpData region, ulong regionhandle); public delegate bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate childUpdate); - public delegate bool TellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID); + public delegate bool TellRegionToCloseChildConnection(ulong regionHandle, UUID agentID); public sealed class InterRegionSingleton { @@ -112,7 +112,7 @@ namespace OpenSim.Region.Communications.OGS1 return false; } - public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) + public bool ExpectAvatarCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying) { handlerArrival = OnArrival; if (handlerArrival != null) @@ -122,7 +122,7 @@ namespace OpenSim.Region.Communications.OGS1 return false; } - public bool InformRegionPrim(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical) + public bool InformRegionPrim(ulong regionHandle, UUID primID, Vector3 position, bool isPhysical) { handlerPrimGroupNear = OnPrimGroupNear; if (handlerPrimGroupNear != null) @@ -132,7 +132,7 @@ namespace OpenSim.Region.Communications.OGS1 return false; } - public bool ExpectPrimCrossing(ulong regionHandle, LLUUID primID, string objData, int XMLMethod) + public bool ExpectPrimCrossing(ulong regionHandle, UUID primID, string objData, int XMLMethod) { handlerPrimGroupArrival = OnPrimGroupArrival; if (handlerPrimGroupArrival != null) @@ -142,7 +142,7 @@ namespace OpenSim.Region.Communications.OGS1 return false; } - public bool TellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID) + public bool TellRegionToCloseChildConnection(ulong regionHandle, UUID agentID) { handlerTellRegionToCloseChildConnection = OnTellRegionToCloseChildConnection; if (handlerTellRegionToCloseChildConnection != null) @@ -202,13 +202,13 @@ namespace OpenSim.Region.Communications.OGS1 } - public bool ExpectAvatarCrossing(ulong regionHandle, Guid agentID, sLLVector3 position, bool isFlying) + public bool ExpectAvatarCrossing(ulong regionHandle, Guid agentID, Vector3 position, bool isFlying) { try { return - InterRegionSingleton.Instance.ExpectAvatarCrossing(regionHandle, new LLUUID(agentID), - new LLVector3(position.x, position.y, position.z), + InterRegionSingleton.Instance.ExpectAvatarCrossing(regionHandle, new UUID(agentID), + position, isFlying); } catch (RemotingException e) @@ -218,13 +218,13 @@ namespace OpenSim.Region.Communications.OGS1 } } - public bool InformRegionPrim(ulong regionHandle, Guid SceneObjectGroupID, sLLVector3 position, bool isPhysical) + public bool InformRegionPrim(ulong regionHandle, Guid SceneObjectGroupID, Vector3 position, bool isPhysical) { try { return - InterRegionSingleton.Instance.InformRegionPrim(regionHandle, new LLUUID(SceneObjectGroupID), - new LLVector3(position.x, position.y, position.z), + InterRegionSingleton.Instance.InformRegionPrim(regionHandle, new UUID(SceneObjectGroupID), + position, isPhysical); } catch (RemotingException e) @@ -238,7 +238,7 @@ namespace OpenSim.Region.Communications.OGS1 { try { - return InterRegionSingleton.Instance.ExpectPrimCrossing(regionHandle, new LLUUID(primID), objData, XMLMethod); + return InterRegionSingleton.Instance.ExpectPrimCrossing(regionHandle, new UUID(primID), objData, XMLMethod); } catch (RemotingException e) { @@ -251,7 +251,7 @@ namespace OpenSim.Region.Communications.OGS1 { try { - return InterRegionSingleton.Instance.TellRegionToCloseChildConnection(regionHandle, new LLUUID(agentID)); + return InterRegionSingleton.Instance.TellRegionToCloseChildConnection(regionHandle, new UUID(agentID)); } catch (RemotingException) { diff --git a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs index 2828928655..b9e8394db8 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Net; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications; @@ -46,8 +46,8 @@ namespace OpenSim.Region.Communications.OGS1 private string _inventoryServerUrl; private Uri m_Uri; - private Dictionary m_RequestingInventory - = new Dictionary(); + private Dictionary m_RequestingInventory + = new Dictionary(); public OGS1InventoryService(string inventoryServerUrl) { @@ -67,7 +67,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback) + public void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback) { if (!m_RequestingInventory.ContainsKey(userID)) { @@ -83,7 +83,7 @@ namespace OpenSim.Region.Communications.OGS1 = new RestObjectPosterResponse(); requester.ResponseCallback = InventoryResponse; - requester.BeginPostObject(_inventoryServerUrl + "/GetInventory/", userID.UUID); + requester.BeginPostObject(_inventoryServerUrl + "/GetInventory/", userID.Guid); } catch (WebException e) { @@ -106,7 +106,7 @@ namespace OpenSim.Region.Communications.OGS1 /// private void InventoryResponse(InventoryCollection response) { - LLUUID userID = response.UserID; + UUID userID = response.UserID; if (m_RequestingInventory.ContainsKey(userID)) { m_log.InfoFormat("[OGS1 INVENTORY SERVICE]: " + @@ -121,7 +121,7 @@ namespace OpenSim.Region.Communications.OGS1 foreach (InventoryFolderBase folder in response.Folders) { - if (folder.ParentID == LLUUID.Zero) + if (folder.ParentID == UUID.Zero) { rootFolder = new InventoryFolderImpl(folder); folders.Add(rootFolder); @@ -296,12 +296,12 @@ namespace OpenSim.Region.Communications.OGS1 return false; } - public bool HasInventoryForUser(LLUUID userID) + public bool HasInventoryForUser(UUID userID) { return false; } - public InventoryFolderBase RequestRootFolder(LLUUID userID) + public InventoryFolderBase RequestRootFolder(UUID userID) { return null; } diff --git a/OpenSim/Region/Communications/OGS1/OGS1SecureInventoryService.cs b/OpenSim/Region/Communications/OGS1/OGS1SecureInventoryService.cs index 26521ab53d..c690def0c5 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1SecureInventoryService.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1SecureInventoryService.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Net; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications; @@ -46,8 +46,8 @@ namespace OpenSim.Region.Communications.OGS1 private string _inventoryServerUrl; private Uri m_Uri; - private Dictionary m_RequestingInventory - = new Dictionary(); + private Dictionary m_RequestingInventory + = new Dictionary(); public OGS1SecureInventoryService(string inventoryServerUrl) { @@ -67,7 +67,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public void RequestInventoryForUser(LLUUID userID, LLUUID session_id, InventoryReceiptCallback callback) + public void RequestInventoryForUser(UUID userID, UUID session_id, InventoryReceiptCallback callback) { if (!m_RequestingInventory.ContainsKey(userID)) { @@ -83,7 +83,7 @@ namespace OpenSim.Region.Communications.OGS1 = new RestSessionObjectPosterResponse(); requester.ResponseCallback = InventoryResponse; - requester.BeginPostObject(_inventoryServerUrl + "/GetInventory/", userID.UUID, session_id.ToString(), userID.ToString()); + requester.BeginPostObject(_inventoryServerUrl + "/GetInventory/", userID.Guid, session_id.ToString(), userID.ToString()); } catch (WebException e) { @@ -106,7 +106,7 @@ namespace OpenSim.Region.Communications.OGS1 /// private void InventoryResponse(InventoryCollection response) { - LLUUID userID = response.UserID; + UUID userID = response.UserID; if (m_RequestingInventory.ContainsKey(userID)) { m_log.InfoFormat("[OGS1 INVENTORY SERVICE]: " + @@ -121,7 +121,7 @@ namespace OpenSim.Region.Communications.OGS1 foreach (InventoryFolderBase folder in response.Folders) { - if (folder.ParentID == LLUUID.Zero) + if (folder.ParentID == UUID.Zero) { rootFolder = new InventoryFolderImpl(folder); folders.Add(rootFolder); @@ -166,7 +166,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool AddFolder(InventoryFolderBase folder, LLUUID session_id) + public bool AddFolder(InventoryFolderBase folder, UUID session_id) { try { @@ -186,7 +186,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool UpdateFolder(InventoryFolderBase folder, LLUUID session_id) + public bool UpdateFolder(InventoryFolderBase folder, UUID session_id) { try { @@ -206,7 +206,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool MoveFolder(InventoryFolderBase folder, LLUUID session_id) + public bool MoveFolder(InventoryFolderBase folder, UUID session_id) { try { @@ -225,7 +225,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool PurgeFolder(InventoryFolderBase folder, LLUUID session_id) + public bool PurgeFolder(InventoryFolderBase folder, UUID session_id) { try { @@ -244,7 +244,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool AddItem(InventoryItemBase item, LLUUID session_id) + public bool AddItem(InventoryItemBase item, UUID session_id) { try { @@ -261,7 +261,7 @@ namespace OpenSim.Region.Communications.OGS1 } // TODO: this is a temporary workaround, the UpdateInventoryItem method need to be implemented - public bool UpdateItem(InventoryItemBase item, LLUUID session_id) + public bool UpdateItem(InventoryItemBase item, UUID session_id) { try { @@ -280,7 +280,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public bool DeleteItem(InventoryItemBase item, LLUUID session_id) + public bool DeleteItem(InventoryItemBase item, UUID session_id) { try { @@ -296,12 +296,12 @@ namespace OpenSim.Region.Communications.OGS1 return false; } - public bool HasInventoryForUser(LLUUID userID) + public bool HasInventoryForUser(UUID userID) { return false; } - public InventoryFolderBase RequestRootFolder(LLUUID userID) + public InventoryFolderBase RequestRootFolder(UUID userID) { return null; } diff --git a/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs index 2223aeb98a..317be1381b 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs @@ -31,7 +31,7 @@ using System.Collections.Generic; using System.Net; using System.Reflection; using System.Text.RegularExpressions; -using libsecondlife; +using OpenMetaverse; using log4net; using Nwc.XmlRpc; using OpenSim.Framework; @@ -64,27 +64,27 @@ namespace OpenSim.Region.Communications.OGS1 UserProfileData userData = new UserProfileData(); userData.FirstName = (string) data["firstname"]; userData.SurName = (string) data["lastname"]; - userData.ID = new LLUUID((string) data["uuid"]); + userData.ID = new UUID((string) data["uuid"]); userData.UserInventoryURI = (string) data["server_inventory"]; userData.UserAssetURI = (string) data["server_asset"]; userData.FirstLifeAboutText = (string) data["profile_firstlife_about"]; - userData.FirstLifeImage = new LLUUID((string) data["profile_firstlife_image"]); + userData.FirstLifeImage = new UUID((string) data["profile_firstlife_image"]); userData.CanDoMask = Convert.ToUInt32((string) data["profile_can_do"]); userData.WantDoMask = Convert.ToUInt32(data["profile_want_do"]); userData.AboutText = (string)data["profile_about"]; - userData.Image = new LLUUID((string) data["profile_image"]); + userData.Image = new UUID((string) data["profile_image"]); userData.LastLogin = Convert.ToInt32((string) data["profile_lastlogin"]); userData.HomeRegion = Convert.ToUInt64((string) data["home_region"]); if (data.Contains("home_region_id")) - userData.HomeRegionID = new LLUUID((string)data["home_region_id"]); + userData.HomeRegionID = new UUID((string)data["home_region_id"]); else - userData.HomeRegionID = LLUUID.Zero; + userData.HomeRegionID = UUID.Zero; userData.HomeLocation = - new LLVector3((float) Convert.ToDecimal((string) data["home_coordinates_x"]), + new Vector3((float) Convert.ToDecimal((string) data["home_coordinates_x"]), (float) Convert.ToDecimal((string) data["home_coordinates_y"]), (float) Convert.ToDecimal((string) data["home_coordinates_z"])); userData.HomeLookAt = - new LLVector3((float) Convert.ToDecimal((string) data["home_look_x"]), + new Vector3((float) Convert.ToDecimal((string) data["home_look_x"]), (float) Convert.ToDecimal((string) data["home_look_y"]), (float) Convert.ToDecimal((string) data["home_look_z"])); if (data.Contains("user_flags")) @@ -100,9 +100,9 @@ namespace OpenSim.Region.Communications.OGS1 userData.CustomType = ""; if (data.Contains("partner")) - userData.Partner = new LLUUID((string) data["partner"]); + userData.Partner = new UUID((string) data["partner"]); else - userData.Partner = LLUUID.Zero; + userData.Partner = UUID.Zero; return userData; } @@ -112,7 +112,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// null if the request fails - public UserAgentData GetAgentByUUID(LLUUID userId) + public UserAgentData GetAgentByUUID(UUID userId) { try { @@ -131,11 +131,11 @@ namespace OpenSim.Region.Communications.OGS1 "): " + (string)respData["error_desc"]); return null; } - LLUUID sessionid = LLUUID.Zero; + UUID sessionid = UUID.Zero; UserAgentData userAgent = new UserAgentData(); userAgent.Handle = Convert.ToUInt64((string)respData["handle"]); - Helpers.TryParse((string)respData["sessionid"], out sessionid); + UUID.TryParse((string)respData["sessionid"], out sessionid); userAgent.SessionID = sessionid; if ((string)respData["agent_online"] == "TRUE") @@ -183,17 +183,17 @@ namespace OpenSim.Region.Communications.OGS1 } } - public List ConvertXMLRPCDataToAvatarPickerList(LLUUID queryID, Hashtable data) + public List ConvertXMLRPCDataToAvatarPickerList(UUID queryID, Hashtable data) { List pickerlist = new List(); int pickercount = Convert.ToInt32((string) data["avcount"]); - LLUUID respqueryID = new LLUUID((string) data["queryid"]); + UUID respqueryID = new UUID((string) data["queryid"]); if (queryID == respqueryID) { for (int i = 0; i < pickercount; i++) { AvatarPickerAvatar apicker = new AvatarPickerAvatar(); - LLUUID avatarID = new LLUUID((string) data["avatarid" + i.ToString()]); + UUID avatarID = new UUID((string) data["avatarid" + i.ToString()]); string firstname = (string) data["firstname" + i.ToString()]; string lastname = (string) data["lastname" + i.ToString()]; apicker.AvatarID = avatarID; @@ -219,8 +219,8 @@ namespace OpenSim.Region.Communications.OGS1 { FriendListItem buddylistitem = new FriendListItem(); - buddylistitem.FriendListOwner = new LLUUID((string)data["ownerID" + i.ToString()]); - buddylistitem.Friend = new LLUUID((string)data["friendID" + i.ToString()]); + buddylistitem.FriendListOwner = new UUID((string)data["ownerID" + i.ToString()]); + buddylistitem.Friend = new UUID((string)data["friendID" + i.ToString()]); buddylistitem.FriendListOwnerPerms = (uint)Convert.ToInt32((string)data["ownerPerms" + i.ToString()]); buddylistitem.FriendPerms = (uint)Convert.ToInt32((string)data["friendPerms" + i.ToString()]); @@ -239,11 +239,11 @@ namespace OpenSim.Region.Communications.OGS1 /// final position x /// final position y /// final position z - public void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz) + public void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, float posx, float posy, float posz) { Hashtable param = new Hashtable(); - param["avatar_uuid"] = userid.UUID.ToString(); - param["region_uuid"] = regionid.UUID.ToString(); + param["avatar_uuid"] = userid.ToString(); + param["region_uuid"] = regionid.ToString(); param["region_handle"] = regionhandle.ToString(); param["region_pos_x"] = posx.ToString(); param["region_pos_y"] = posy.ToString(); @@ -268,7 +268,7 @@ namespace OpenSim.Region.Communications.OGS1 return GetUserProfile(firstName + " " + lastName); } - public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle) + public void UpdateUserCurrentRegion(UUID avatarid, UUID regionuuid, ulong regionhandle) { Hashtable param = new Hashtable(); param.Add("avatar_id", avatarid.ToString()); @@ -320,7 +320,7 @@ namespace OpenSim.Region.Communications.OGS1 } } - public List GenerateAgentPickerRequestResponse(LLUUID queryID, string query) + public List GenerateAgentPickerRequestResponse(UUID queryID, string query) { List pickerlist = new List(); Regex objAlphaNumericPattern = new Regex("[^a-zA-Z0-9 ]"); @@ -379,7 +379,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// null if the request fails - public UserProfileData GetUserProfile(LLUUID avatarID) + public UserProfileData GetUserProfile(UUID avatarID) { try { @@ -404,7 +404,7 @@ namespace OpenSim.Region.Communications.OGS1 } - public void ClearUserAgent(LLUUID avatarID) + public void ClearUserAgent(UUID avatarID) { // TODO: implement } @@ -435,7 +435,7 @@ namespace OpenSim.Region.Communications.OGS1 /// /// /// - public UserProfileData SetupMasterUser(LLUUID uuid) + public UserProfileData SetupMasterUser(UUID uuid) { UserProfileData data = GetUserProfile(uuid); @@ -448,7 +448,7 @@ namespace OpenSim.Region.Communications.OGS1 return data; } - public LLUUID AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY) + public UUID AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY) { throw new Exception("The method or operation is not implemented."); } @@ -523,13 +523,13 @@ namespace OpenSim.Region.Communications.OGS1 /// The agent that who's friends list is being added to /// The agent that being added to the friends list of the friends list owner /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects - public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) { try { Hashtable param = new Hashtable(); - param["ownerID"] = friendlistowner.UUID.ToString(); - param["friendID"] = friend.UUID.ToString(); + param["ownerID"] = friendlistowner.ToString(); + param["friendID"] = friend.ToString(); param["friendPerms"] = perms.ToString(); IList parameters = new ArrayList(); parameters.Add(param); @@ -575,13 +575,13 @@ namespace OpenSim.Region.Communications.OGS1 /// /// The agent that who's friends list is being updated /// The Ex-friend agent - public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + public void RemoveUserFriend(UUID friendlistowner, UUID friend) { try { Hashtable param = new Hashtable(); - param["ownerID"] = friendlistowner.UUID.ToString(); - param["friendID"] = friend.UUID.ToString(); + param["ownerID"] = friendlistowner.ToString(); + param["friendID"] = friend.ToString(); IList parameters = new ArrayList(); parameters.Add(param); @@ -627,13 +627,13 @@ namespace OpenSim.Region.Communications.OGS1 /// The agent that who's friends list is being updated /// The agent that is getting or loosing permissions /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects - public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) { try { Hashtable param = new Hashtable(); - param["ownerID"] = friendlistowner.UUID.ToString(); - param["friendID"] = friend.UUID.ToString(); + param["ownerID"] = friendlistowner.ToString(); + param["friendID"] = friend.ToString(); param["friendPerms"] = perms.ToString(); IList parameters = new ArrayList(); parameters.Add(param); @@ -672,17 +672,17 @@ namespace OpenSim.Region.Communications.OGS1 } } /// - /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for LLUUID friendslistowner + /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for UUID friendslistowner /// /// The agent that we're retreiving the friends Data. - public List GetUserFriendList(LLUUID friendlistowner) + public List GetUserFriendList(UUID friendlistowner) { List buddylist = new List(); try { Hashtable param = new Hashtable(); - param["ownerID"] = friendlistowner.UUID.ToString(); + param["ownerID"] = friendlistowner.ToString(); IList parameters = new ArrayList(); parameters.Add(param); @@ -708,7 +708,7 @@ namespace OpenSim.Region.Communications.OGS1 #endregion /// Appearance - public AvatarAppearance GetUserAppearance(LLUUID user) + public AvatarAppearance GetUserAppearance(UUID user) { AvatarAppearance appearance = null; @@ -733,7 +733,7 @@ namespace OpenSim.Region.Communications.OGS1 return appearance; } - public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) + public void UpdateUserAppearance(UUID user, AvatarAppearance appearance) { try { diff --git a/OpenSim/Region/DataSnapshot/DataRequestHandler.cs b/OpenSim/Region/DataSnapshot/DataRequestHandler.cs index 7ddd0729bf..8030b59036 100644 --- a/OpenSim/Region/DataSnapshot/DataRequestHandler.cs +++ b/OpenSim/Region/DataSnapshot/DataRequestHandler.cs @@ -34,7 +34,7 @@ using log4net; using OpenSim.Region.Environment.Scenes; using OpenSim.Framework.Communications.Capabilities; using Caps = OpenSim.Framework.Communications.Capabilities.Caps; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework.Servers; namespace OpenSim.Region.DataSnapshot @@ -64,7 +64,7 @@ namespace OpenSim.Region.DataSnapshot //harbl } - public void OnRegisterCaps(LLUUID agentID, Caps caps) + public void OnRegisterCaps(UUID agentID, Caps caps) { m_log.Info("[DATASNAPSHOT]: Registering service discovery capability for " + agentID); string capsBase = "/CAPS/" + caps.CapsObjectPath; diff --git a/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs b/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs index da72b618dd..46c9b3cc86 100644 --- a/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs +++ b/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs @@ -34,7 +34,7 @@ using System.Reflection; using System.Text; using System.Timers; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -42,7 +42,7 @@ using OpenSim.Framework.Communications; using OpenSim.Region.DataSnapshot.Interfaces; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; -using libsecondlife.Packets; +using OpenMetaverse.Packets; namespace OpenSim.Region.DataSnapshot { @@ -219,7 +219,7 @@ namespace OpenSim.Region.DataSnapshot return null; } - public Scene SceneForUUID(LLUUID id) + public Scene SceneForUUID(UUID id) { foreach (Scene scene in m_scenes) if (scene.RegionInfo.RegionID == id) diff --git a/OpenSim/Region/DataSnapshot/EstateSnapshot.cs b/OpenSim/Region/DataSnapshot/EstateSnapshot.cs index eccdcf167e..f25aad4356 100644 --- a/OpenSim/Region/DataSnapshot/EstateSnapshot.cs +++ b/OpenSim/Region/DataSnapshot/EstateSnapshot.cs @@ -27,7 +27,7 @@ using System; using System.Xml; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.DataSnapshot.Interfaces; using OpenSim.Region.Environment.Scenes; @@ -54,8 +54,8 @@ namespace OpenSim.Region.DataSnapshot.Providers //Now in DataSnapshotProvider module form! XmlNode estatedata = factory.CreateNode(XmlNodeType.Element, "estate", ""); - LLUUID ownerid = m_scene.RegionInfo.MasterAvatarAssignedUUID; - if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + UUID ownerid = m_scene.RegionInfo.MasterAvatarAssignedUUID; + if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) ownerid = m_scene.RegionInfo.EstateSettings.EstateOwner; // Can't fail because if it weren't in cache, we wouldn't be here diff --git a/OpenSim/Region/DataSnapshot/LandSnapshot.cs b/OpenSim/Region/DataSnapshot/LandSnapshot.cs index 930ea8f31d..b0ba29d482 100644 --- a/OpenSim/Region/DataSnapshot/LandSnapshot.cs +++ b/OpenSim/Region/DataSnapshot/LandSnapshot.cs @@ -29,14 +29,14 @@ using System; using System.Collections.Generic; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Region.DataSnapshot.Interfaces; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Modules.World.Land; using OpenSim.Region.Environment.Scenes; -using libsecondlife.Packets; +using OpenMetaverse.Packets; namespace OpenSim.Region.DataSnapshot.Providers { @@ -179,16 +179,16 @@ namespace OpenSim.Region.DataSnapshot.Providers //default location XmlNode tpLocation = nodeFactory.CreateNode(XmlNodeType.Element, "location", ""); - LLVector3 loc = parcel.UserLocation; - if (loc.Equals(LLVector3.Zero)) // This test is mute at this point: the location is wrong by default - loc = new LLVector3((parcel.AABBMax.X - parcel.AABBMin.X) / 2, (parcel.AABBMax.Y - parcel.AABBMin.Y) / 2, (parcel.AABBMax.Y - parcel.AABBMin.Y) / 2); + Vector3 loc = parcel.UserLocation; + if (loc.Equals(Vector3.Zero)) // This test is mute at this point: the location is wrong by default + loc = new Vector3((parcel.AABBMax.X - parcel.AABBMin.X) / 2, (parcel.AABBMax.Y - parcel.AABBMin.Y) / 2, (parcel.AABBMax.Y - parcel.AABBMin.Y) / 2); tpLocation.InnerText = loc.X.ToString() + "/" + loc.Y.ToString() + "/" + loc.Z.ToString(); xmlparcel.AppendChild(tpLocation); //TODO: figure how to figure out teleport system landData.landingType //land texture snapshot uuid - if (parcel.SnapshotID != LLUUID.Zero) + if (parcel.SnapshotID != UUID.Zero) { XmlNode textureuuid = nodeFactory.CreateNode(XmlNodeType.Element, "image", ""); textureuuid.InnerText = parcel.SnapshotID.ToString(); @@ -196,7 +196,7 @@ namespace OpenSim.Region.DataSnapshot.Providers } //attached user and group - if (parcel.GroupID != LLUUID.Zero) + if (parcel.GroupID != UUID.Zero) { XmlNode groupblock = nodeFactory.CreateNode(XmlNodeType.Element, "group", ""); XmlNode groupuuid = nodeFactory.CreateNode(XmlNodeType.Element, "uuid", ""); @@ -213,7 +213,7 @@ namespace OpenSim.Region.DataSnapshot.Providers { XmlNode userblock = nodeFactory.CreateNode(XmlNodeType.Element, "owner", ""); - LLUUID userOwnerUUID = parcel.OwnerID; + UUID userOwnerUUID = parcel.OwnerID; XmlNode useruuid = nodeFactory.CreateNode(XmlNodeType.Element, "uuid", ""); useruuid.InnerText = userOwnerUUID.ToString(); @@ -298,7 +298,7 @@ namespace OpenSim.Region.DataSnapshot.Providers IClientAPI remote_client) { this.Stale = true; }; client.OnParcelPropertiesUpdateRequest += delegate(LandUpdateArgs args, int local_id, IClientAPI remote_client) { this.Stale = true; }; - client.OnParcelBuy += delegate (LLUUID agentId, LLUUID groupId, bool final, bool groupOwned, + client.OnParcelBuy += delegate (UUID agentId, UUID groupId, bool final, bool groupOwned, bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated) { this.Stale = true; }; } @@ -315,4 +315,4 @@ namespace OpenSim.Region.DataSnapshot.Providers #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs b/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs index d2a505182f..c23c697c31 100644 --- a/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs +++ b/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs @@ -33,7 +33,7 @@ using log4net; using OpenSim.Region.DataSnapshot.Interfaces; using OpenSim.Region.Environment.Scenes; using OpenSim.Framework; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.DataSnapshot.Providers { @@ -59,29 +59,29 @@ namespace OpenSim.Region.DataSnapshot.Providers //Detect object data changes by hooking into the IClientAPI. //Very dirty, and breaks whenever someone changes the client API. - client.OnAddPrim += delegate (LLUUID ownerID, LLVector3 RayEnd, LLQuaternion rot, - PrimitiveBaseShape shape, byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID, + client.OnAddPrim += delegate (UUID ownerID, Vector3 RayEnd, Quaternion rot, + PrimitiveBaseShape shape, byte bypassRaycast, Vector3 RayStart, UUID RayTargetID, byte RayEndIsIntersection) { this.Stale = true; }; client.OnLinkObjects += delegate (IClientAPI remoteClient, uint parent, List children) { this.Stale = true; }; client.OnDelinkObjects += delegate(List primIds) { this.Stale = true; }; - client.OnGrabUpdate += delegate(LLUUID objectID, LLVector3 offset, LLVector3 grapPos, + client.OnGrabUpdate += delegate(UUID objectID, Vector3 offset, Vector3 grapPos, IClientAPI remoteClient) { this.Stale = true; }; client.OnObjectAttach += delegate(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, - LLQuaternion rot) { this.Stale = true; }; - client.OnObjectDuplicate += delegate(uint localID, LLVector3 offset, uint dupeFlags, LLUUID AgentID, - LLUUID GroupID) { this.Stale = true; }; - client.OnObjectDuplicateOnRay += delegate(uint localID, uint dupeFlags, LLUUID AgentID, LLUUID GroupID, - LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart, bool BypassRaycast, + Quaternion rot) { this.Stale = true; }; + client.OnObjectDuplicate += delegate(uint localID, Vector3 offset, uint dupeFlags, UUID AgentID, + UUID GroupID) { this.Stale = true; }; + client.OnObjectDuplicateOnRay += delegate(uint localID, uint dupeFlags, UUID AgentID, UUID GroupID, + UUID RayTargetObj, Vector3 RayEnd, Vector3 RayStart, bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates) { this.Stale = true; }; client.OnObjectIncludeInSearch += delegate(IClientAPI remoteClient, bool IncludeInSearch, uint localID) { this.Stale = true; }; - client.OnObjectPermissions += delegate(IClientAPI controller, LLUUID agentID, LLUUID sessionID, + client.OnObjectPermissions += delegate(IClientAPI controller, UUID agentID, UUID sessionID, byte field, uint localId, uint mask, byte set) { this.Stale = true; }; - client.OnRezObject += delegate(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, - LLVector3 RayStart, LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, + client.OnRezObject += delegate(IClientAPI remoteClient, UUID itemID, Vector3 RayEnd, + Vector3 RayStart, UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, bool RezSelected, - bool RemoveItem, LLUUID fromTaskID) { this.Stale = true; }; + bool RemoveItem, UUID fromTaskID) { this.Stale = true; }; } public Scene GetParentScene @@ -105,11 +105,11 @@ namespace OpenSim.Region.DataSnapshot.Providers m_log.Debug("[DATASNAPSHOT]: Found object " + obj.Name + " in scene"); - if ((obj.RootPart.Flags & LLObject.ObjectFlags.JointWheel) == LLObject.ObjectFlags.JointWheel) { + if ((obj.RootPart.Flags & PrimFlags.JointWheel) == PrimFlags.JointWheel) { XmlNode xmlobject = nodeFactory.CreateNode(XmlNodeType.Element, "object", ""); node = nodeFactory.CreateNode(XmlNodeType.Element, "uuid", ""); - node.InnerText = obj.UUID.ToString(); + node.InnerText = obj.ToString(); xmlobject.AppendChild(node); SceneObjectPart m_rootPart = null; @@ -170,4 +170,4 @@ namespace OpenSim.Region.DataSnapshot.Providers public event ProviderStale OnStale; } -} \ No newline at end of file +} diff --git a/OpenSim/Region/DataSnapshot/SnapshotStore.cs b/OpenSim/Region/DataSnapshot/SnapshotStore.cs index e1a665155e..d913cc501a 100644 --- a/OpenSim/Region/DataSnapshot/SnapshotStore.cs +++ b/OpenSim/Region/DataSnapshot/SnapshotStore.cs @@ -32,7 +32,7 @@ using System.Xml; using System.IO; using OpenSim.Region.Environment.Scenes; using OpenSim.Region.DataSnapshot.Interfaces; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.DataSnapshot { @@ -211,7 +211,7 @@ namespace OpenSim.Region.DataSnapshot private string DataFileNameScene(Scene scene) { return Path.Combine(m_directory, Path.ChangeExtension(scene.RegionInfo.RegionName, "xml")); - //return (m_snapsDir + Path.DirectorySeparatorChar + scene.RegionInfo.RegionName + ".xml"); + //return (m_snapsDir + Path.DirectorySeparatorChar + scene.RegionInfo.RegionName + ".Xml"); } private XmlNode MakeRegionNode(Scene scene, XmlDocument basedoc) diff --git a/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs b/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs index c099fa1139..90d1c12929 100644 --- a/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs +++ b/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs @@ -25,20 +25,20 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; namespace OpenSim.Region.Environment.Interfaces { public interface IAgentAssetTransactions { - void HandleItemUpdateFromTransaction(IClientAPI remoteClient, LLUUID transactionID, + void HandleItemUpdateFromTransaction(IClientAPI remoteClient, UUID transactionID, InventoryItemBase item); - void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + void HandleItemCreationFromTransaction(IClientAPI remoteClient, UUID transactionID, UUID folderID, uint callbackID, string description, string name, sbyte invType, sbyte type, byte wearableType, uint nextOwnerMask); - void RemoveAgentAssetTransactions(LLUUID userID); + void RemoveAgentAssetTransactions(UUID userID); } } diff --git a/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs b/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs index d03e16721f..a722833e16 100644 --- a/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs +++ b/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -33,7 +33,7 @@ namespace OpenSim.Region.Environment.Interfaces { public interface IAvatarFactory { - bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance); - void UpdateDatabase(LLUUID userID, AvatarAppearance avatAppearance); + bool TryGetAvatarAppearance(UUID avatarId, out AvatarAppearance appearance); + void UpdateDatabase(UUID userID, AvatarAppearance avatAppearance); } } diff --git a/OpenSim/Region/Environment/Interfaces/IDynamicTextureManager.cs b/OpenSim/Region/Environment/Interfaces/IDynamicTextureManager.cs index aeb47e16f9..c54c6977dd 100644 --- a/OpenSim/Region/Environment/Interfaces/IDynamicTextureManager.cs +++ b/OpenSim/Region/Environment/Interfaces/IDynamicTextureManager.cs @@ -26,22 +26,22 @@ */ using System.IO; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Interfaces { public interface IDynamicTextureManager { void RegisterRender(string handleType, IDynamicTextureRender render); - void ReturnData(LLUUID id, byte[] data); + void ReturnData(UUID id, byte[] data); - LLUUID AddDynamicTextureURL(LLUUID simID, LLUUID primID, string contentType, string url, string extraParams, + UUID AddDynamicTextureURL(UUID simID, UUID primID, string contentType, string url, string extraParams, int updateTimer); - LLUUID AddDynamicTextureURL(LLUUID simID, LLUUID primID, string contentType, string url, string extraParams, + UUID AddDynamicTextureURL(UUID simID, UUID primID, string contentType, string url, string extraParams, int updateTimer, bool SetBlending, byte AlphaValue); - LLUUID AddDynamicTextureData(LLUUID simID, LLUUID primID, string contentType, string data, string extraParams, + UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams, int updateTimer); - LLUUID AddDynamicTextureData(LLUUID simID, LLUUID primID, string contentType, string data, string extraParams, + UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams, int updateTimer, bool SetBlending, byte AlphaValue); } @@ -52,7 +52,7 @@ namespace OpenSim.Region.Environment.Interfaces bool SupportsAsynchronous(); byte[] ConvertUrl(string url, string extraParams); byte[] ConvertStream(Stream data, string extraParams); - bool AsyncConvertUrl(LLUUID id, string url, string extraParams); - bool AsyncConvertData(LLUUID id, string bodyData, string extraParams); + bool AsyncConvertUrl(UUID id, string url, string extraParams); + bool AsyncConvertData(UUID id, string bodyData, string extraParams); } } diff --git a/OpenSim/Region/Environment/Interfaces/IEmailModule.cs b/OpenSim/Region/Environment/Interfaces/IEmailModule.cs index 3726ba5b11..5f1bcf3dfa 100644 --- a/OpenSim/Region/Environment/Interfaces/IEmailModule.cs +++ b/OpenSim/Region/Environment/Interfaces/IEmailModule.cs @@ -27,7 +27,7 @@ using System; using OpenSim.Framework; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Interfaces { @@ -42,7 +42,7 @@ namespace OpenSim.Region.Environment.Interfaces public interface IEmailModule : IRegionModule { - void SendEmail(LLUUID objectID, string address, string subject, string body); - Email GetNextEmail(LLUUID objectID, string sender, string subject); + void SendEmail(UUID objectID, string address, string subject, string body); + Email GetNextEmail(UUID objectID, string sender, string subject); } } diff --git a/OpenSim/Region/Environment/Interfaces/IEstateDataStore.cs b/OpenSim/Region/Environment/Interfaces/IEstateDataStore.cs index ecac2ca4a8..f2d14a6897 100644 --- a/OpenSim/Region/Environment/Interfaces/IEstateDataStore.cs +++ b/OpenSim/Region/Environment/Interfaces/IEstateDataStore.cs @@ -27,7 +27,7 @@ using System; using OpenSim.Framework; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Interfaces { @@ -35,7 +35,7 @@ namespace OpenSim.Region.Environment.Interfaces { void Initialise(string connectstring); - EstateSettings LoadEstateSettings(LLUUID regionID); + EstateSettings LoadEstateSettings(UUID regionID); void StoreEstateSettings(EstateSettings es); } } diff --git a/OpenSim/Region/Environment/Interfaces/IEstateModule.cs b/OpenSim/Region/Environment/Interfaces/IEstateModule.cs index bfe3591b08..70c5800335 100644 --- a/OpenSim/Region/Environment/Interfaces/IEstateModule.cs +++ b/OpenSim/Region/Environment/Interfaces/IEstateModule.cs @@ -27,13 +27,13 @@ using System; using OpenSim.Framework; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Interfaces { public interface IEstateModule : IRegionModule { uint GetRegionFlags(); - bool IsManager(LLUUID avatarID); + bool IsManager(UUID avatarID); } } diff --git a/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs b/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs index 3a635dec02..216782b9a9 100644 --- a/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs +++ b/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs @@ -26,17 +26,17 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.Environment.Modules.Scripting.HttpRequest; namespace OpenSim.Region.Environment.Interfaces { public interface IHttpRequests { - LLUUID MakeHttpRequest(string url, string parameters, string body); - LLUUID StartHttpRequest(uint localID, LLUUID itemID, string url, List parameters, Dictionary headers, string body); - void StopHttpRequest(uint m_localID, LLUUID m_itemID); + UUID MakeHttpRequest(string url, string parameters, string body); + UUID StartHttpRequest(uint localID, UUID itemID, string url, List parameters, Dictionary headers, string body); + void StopHttpRequest(uint m_localID, UUID m_itemID); HttpRequestClass GetNextCompletedRequest(); - void RemoveCompletedRequest(LLUUID id); + void RemoveCompletedRequest(UUID id); } } diff --git a/OpenSim/Region/Environment/Interfaces/IInventoryModule.cs b/OpenSim/Region/Environment/Interfaces/IInventoryModule.cs index c93694a9bb..50f4af384e 100644 --- a/OpenSim/Region/Environment/Interfaces/IInventoryModule.cs +++ b/OpenSim/Region/Environment/Interfaces/IInventoryModule.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.Environment; using OpenSim.Region.Environment.Scenes; @@ -37,7 +37,7 @@ namespace OpenSim.Framework /// public interface IInventoryModule { - void SetRootAgentScene(LLUUID agentID, Scene scene); - bool NeedSceneCacheClear(LLUUID agentID, Scene scene); + void SetRootAgentScene(UUID agentID, Scene scene); + bool NeedSceneCacheClear(UUID agentID, Scene scene); } } diff --git a/OpenSim/Region/Environment/Interfaces/ILandChannel.cs b/OpenSim/Region/Environment/Interfaces/ILandChannel.cs index c1f6f45ef6..4a74949cab 100644 --- a/OpenSim/Region/Environment/Interfaces/ILandChannel.cs +++ b/OpenSim/Region/Environment/Interfaces/ILandChannel.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -35,13 +35,13 @@ namespace OpenSim.Region.Environment.Interfaces public interface ILandChannel { - List ParcelsNearPoint(LLVector3 position); + List ParcelsNearPoint(Vector3 position); ILandObject GetLandObject(int x, int y); ILandObject GetLandObject(float x, float y); bool IsLandPrimCountTainted(); bool IsForcefulBansAllowed(); void UpdateLandObject(int localID, LandData data); - void ReturnObjectsInParcel(int localID, uint returnType, LLUUID[] agentIDs, LLUUID[] taskIDs, IClientAPI remoteClient); + void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient); void setParcelObjectMaxOverride(overrideParcelMaxPrimCountDelegate overrideDel); void setSimulatorObjectMaxOverride(overrideSimulatorMaxPrimCountDelegate overrideDel); } diff --git a/OpenSim/Region/Environment/Interfaces/ILandObject.cs b/OpenSim/Region/Environment/Interfaces/ILandObject.cs index 750b387c23..96fa378a16 100644 --- a/OpenSim/Region/Environment/Interfaces/ILandObject.cs +++ b/OpenSim/Region/Environment/Interfaces/ILandObject.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -42,7 +42,7 @@ namespace OpenSim.Region.Environment.Interfaces LandData landData { get; set; } bool[,] landBitmap { get; set; } - LLUUID regionUUID { get; } + UUID regionUUID { get; } bool containsPoint(int x, int y); ILandObject Copy(); @@ -50,12 +50,12 @@ namespace OpenSim.Region.Environment.Interfaces void sendLandProperties(int sequence_id, bool snap_selection, int request_result, IClientAPI remote_client); void updateLandProperties(LandUpdateArgs args, IClientAPI remote_client); - bool isEitherBannedOrRestricted(LLUUID avatar); - bool isBannedFromLand(LLUUID avatar); - bool isRestrictedFromLand(LLUUID avatar); + bool isEitherBannedOrRestricted(UUID avatar); + bool isBannedFromLand(UUID avatar); + bool isRestrictedFromLand(UUID avatar); void sendLandUpdateToClient(IClientAPI remote_client); - List createAccessListArrayByFlag(ParcelManager.AccessList flag); - void sendAccessList(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, IClientAPI remote_client); + List createAccessListArrayByFlag(ParcelManager.AccessList flag); + void sendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, IClientAPI remote_client); void updateAccessList(uint flags, List entries, IClientAPI remote_client); void updateLandBitmapByteArray(); void setLandBitmapFromByteArray(); @@ -71,11 +71,11 @@ namespace OpenSim.Region.Environment.Interfaces void sendForceObjectSelect(int local_id, int request_type, IClientAPI remote_client); void sendLandObjectOwners(IClientAPI remote_client); void returnObject(SceneObjectGroup obj); - void returnLandObjects(uint type, LLUUID[] owners, IClientAPI remote_client); + void returnLandObjects(uint type, UUID[] owners, IClientAPI remote_client); void resetLandPrimCounts(); void addPrimToCount(SceneObjectGroup obj); void removePrimFromCount(SceneObjectGroup obj); - void updateLandSold(LLUUID avatarID, LLUUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area); + void updateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area); void setParcelObjectMaxOverride(overrideParcelMaxPrimCountDelegate overrideDel); void setSimulatorObjectMaxOverride(overrideSimulatorMaxPrimCountDelegate overrideDel); diff --git a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs index 4e716a20a0..5f10ec533d 100644 --- a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs +++ b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -46,7 +46,7 @@ namespace OpenSim.Region.Environment.Interfaces /// /// /// - void StoreObject(SceneObjectGroup obj, LLUUID regionUUID); + void StoreObject(SceneObjectGroup obj, UUID regionUUID); /// /// Entirely removes the object, including inventory @@ -54,25 +54,25 @@ namespace OpenSim.Region.Environment.Interfaces /// /// /// - void RemoveObject(LLUUID uuid, LLUUID regionUUID); + void RemoveObject(UUID uuid, UUID regionUUID); /// /// Store a prim's inventory /// /// - void StorePrimInventory(LLUUID primID, ICollection items); + void StorePrimInventory(UUID primID, ICollection items); - List LoadObjects(LLUUID regionUUID); + List LoadObjects(UUID regionUUID); - void StoreTerrain(double[,] terrain, LLUUID regionID); - double[,] LoadTerrain(LLUUID regionID); + void StoreTerrain(double[,] terrain, UUID regionID); + double[,] LoadTerrain(UUID regionID); void StoreLandObject(ILandObject Parcel); - void RemoveLandObject(LLUUID globalID); - List LoadLandObjects(LLUUID regionUUID); + void RemoveLandObject(UUID globalID); + List LoadLandObjects(UUID regionUUID); void StoreRegionSettings(RegionSettings rs); - RegionSettings LoadRegionSettings(LLUUID regionUUID); + RegionSettings LoadRegionSettings(UUID regionUUID); void Shutdown(); } diff --git a/OpenSim/Region/Environment/Interfaces/IScriptModule.cs b/OpenSim/Region/Environment/Interfaces/IScriptModule.cs index 8d3868e997..efe7944a7a 100644 --- a/OpenSim/Region/Environment/Interfaces/IScriptModule.cs +++ b/OpenSim/Region/Environment/Interfaces/IScriptModule.cs @@ -27,12 +27,12 @@ using System; using OpenSim.Framework; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Interfaces { public interface IScriptModule : IRegionModule { - bool GetScriptRunning(LLUUID objectID, LLUUID itemID); + bool GetScriptRunning(UUID objectID, UUID itemID); } } diff --git a/OpenSim/Region/Environment/Interfaces/IWorldComm.cs b/OpenSim/Region/Environment/Interfaces/IWorldComm.cs index c2a55ebd74..1a33450d73 100644 --- a/OpenSim/Region/Environment/Interfaces/IWorldComm.cs +++ b/OpenSim/Region/Environment/Interfaces/IWorldComm.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Modules.Scripting.WorldComm; @@ -34,15 +34,15 @@ namespace OpenSim.Region.Environment.Interfaces { public interface IWorldComm { - int Listen(uint LocalID, LLUUID itemID, LLUUID hostID, int channel, string name, LLUUID id, string msg); - void DeliverMessage(ChatTypeEnum type, int channel, string name, LLUUID id, string msg); + int Listen(uint LocalID, UUID itemID, UUID hostID, int channel, string name, UUID id, string msg); + void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg); bool HasMessages(); ListenerInfo GetNextMessage(); - void ListenControl(LLUUID itemID, int handle, int active); - void ListenRemove(LLUUID itemID, int handle); - void DeleteListener(LLUUID itemID); - Object[] GetSerializationData(LLUUID itemID); - void CreateFromData(uint localID, LLUUID itemID, LLUUID hostID, + void ListenControl(UUID itemID, int handle, int active); + void ListenRemove(UUID itemID, int handle); + void DeleteListener(UUID itemID); + Object[] GetSerializationData(UUID itemID); + void CreateFromData(uint localID, UUID itemID, UUID hostID, Object[] data); } } diff --git a/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs b/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs index a2c164ff74..88e9ab5cc5 100644 --- a/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs +++ b/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs @@ -25,24 +25,24 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.Environment.Modules.Scripting.XMLRPC; namespace OpenSim.Region.Environment.Interfaces { public interface IXMLRPC { - LLUUID OpenXMLRPCChannel(uint localID, LLUUID itemID, LLUUID channelID); - void CloseXMLRPCChannel(LLUUID channelKey); + UUID OpenXMLRPCChannel(uint localID, UUID itemID, UUID channelID); + void CloseXMLRPCChannel(UUID channelKey); bool hasRequests(); void RemoteDataReply(string channel, string message_id, string sdata, int idata); bool IsEnabled(); RPCRequestInfo GetNextCompletedRequest(); - void RemoveCompletedRequest(LLUUID id); - void DeleteChannels(LLUUID itemID); - LLUUID SendRemoteData(uint localID, LLUUID itemID, string channel, string dest, int idata, string sdata); + void RemoveCompletedRequest(UUID id); + void DeleteChannels(UUID itemID); + UUID SendRemoteData(uint localID, UUID itemID, string channel, string dest, int idata, string sdata); SendRemoteDataRequest GetNextCompletedSRDRequest(); - void RemoveCompletedSRDRequest(LLUUID id); - void CancelSRDRequests(LLUUID itemID); + void RemoveCompletedSRDRequest(UUID id); + void CancelSRDRequests(UUID itemID); } } diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs b/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs index d3cf41ed33..3b521c3a3b 100644 --- a/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs @@ -26,8 +26,8 @@ */ using System.Collections.Generic; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -43,16 +43,16 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload private List AssetRequests; private Scene m_scene; - private Dictionary RegisteredScenes = new Dictionary(); + private Dictionary RegisteredScenes = new Dictionary(); /// /// Assets requests (for each user) which are waiting for asset server data. This includes texture requests /// - private Dictionary> RequestedAssets; + private Dictionary> RequestedAssets; public AssetDownloadModule() { - RequestedAssets = new Dictionary>(); + RequestedAssets = new Dictionary>(); AssetRequests = new List(); } @@ -109,24 +109,24 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload /// public void AddAssetRequest(IClientAPI userInfo, TransferRequestPacket transferRequest) { - LLUUID requestID = null; + UUID requestID = null; byte source = 2; if (transferRequest.TransferInfo.SourceType == 2) { //direct asset request - requestID = new LLUUID(transferRequest.TransferInfo.Params, 0); + requestID = new UUID(transferRequest.TransferInfo.Params, 0); } else if (transferRequest.TransferInfo.SourceType == 3) { //inventory asset request - requestID = new LLUUID(transferRequest.TransferInfo.Params, 80); + requestID = new UUID(transferRequest.TransferInfo.Params, 80); source = 3; //Console.WriteLine("asset request " + requestID); } //not found asset // so request from asset server - Dictionary userRequests = null; + Dictionary userRequests = null; if (RequestedAssets.TryGetValue(userInfo.AgentId, out userRequests)) { if (!userRequests.ContainsKey(requestID)) @@ -143,7 +143,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload } else { - userRequests = new Dictionary(); + userRequests = new Dictionary(); AssetRequest request = new AssetRequest(); request.RequestUser = userInfo; request.RequestAssetID = requestID; @@ -156,11 +156,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload } } - public void AssetCallback(LLUUID assetID, AssetBase asset) + public void AssetCallback(UUID assetID, AssetBase asset) { if (asset != null) { - foreach (Dictionary userRequests in RequestedAssets.Values) + foreach (Dictionary userRequests in RequestedAssets.Values) { if (userRequests.ContainsKey(assetID)) { @@ -212,9 +212,9 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload public int NumPackets = 0; public int PacketCounter = 0; public byte[] Params = null; - public LLUUID RequestAssetID; + public UUID RequestAssetID; public IClientAPI RequestUser; - public LLUUID TransferRequestID; + public UUID TransferRequestID; //public bool AssetInCache; //public int TimeRequested; @@ -225,4 +225,4 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs index bc1d710df1..c46c4a49e5 100644 --- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs +++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs @@ -28,8 +28,8 @@ using System; using System.Collections.Generic; using System.IO; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -46,18 +46,18 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction // Fields private bool m_dumpAssetsToFile; public AgentAssetTransactionsManager Manager; - public LLUUID UserID; - public Dictionary XferUploaders = new Dictionary(); + public UUID UserID; + public Dictionary XferUploaders = new Dictionary(); // Methods - public AgentAssetTransactions(LLUUID agentID, AgentAssetTransactionsManager manager, bool dumpAssetsToFile) + public AgentAssetTransactions(UUID agentID, AgentAssetTransactionsManager manager, bool dumpAssetsToFile) { UserID = agentID; Manager = manager; m_dumpAssetsToFile = dumpAssetsToFile; } - public AssetXferUploader RequestXferUploader(LLUUID transactionID) + public AssetXferUploader RequestXferUploader(UUID transactionID) { if (!XferUploaders.ContainsKey(transactionID)) { @@ -90,7 +90,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction } } - public void RequestCreateInventoryItem(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + public void RequestCreateInventoryItem(IClientAPI remoteClient, UUID transactionID, UUID folderID, uint callbackID, string description, string name, sbyte invType, sbyte type, byte wearableType, uint nextOwnerMask) { @@ -102,7 +102,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction } } - public void RequestUpdateInventoryItem(IClientAPI remoteClient, LLUUID transactionID, + public void RequestUpdateInventoryItem(IClientAPI remoteClient, UUID transactionID, InventoryItemBase item) { if (XferUploaders.ContainsKey(transactionID)) @@ -116,7 +116,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// /// /// The asset if the upload has completed, null if it has not. - public AssetBase GetTransactionAsset(LLUUID transactionID) + public AssetBase GetTransactionAsset(UUID transactionID) { if (XferUploaders.ContainsKey(transactionID)) { @@ -143,7 +143,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction // Fields public bool AddToInventory; public AssetBase Asset; - public LLUUID InventFolder = LLUUID.Zero; + public UUID InventFolder = UUID.Zero; private sbyte invType = 0; private bool m_createItem = false; private string m_description = String.Empty; @@ -154,7 +154,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction private AgentAssetTransactions m_userTransactions; private uint nextPerm = 0; private IClientAPI ourClient; - public LLUUID TransactionID = LLUUID.Zero; + public UUID TransactionID = UUID.Zero; private sbyte type = 0; public bool UploadComplete; private byte wearableType = 0; @@ -210,7 +210,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// /// /// True if the transfer is complete, false otherwise - public bool Initialise(IClientAPI remoteClient, LLUUID assetID, LLUUID transaction, sbyte type, byte[] data, + public bool Initialise(IClientAPI remoteClient, UUID assetID, UUID transaction, sbyte type, byte[] data, bool storeLocal, bool tempFile) { ourClient = remoteClient; @@ -297,7 +297,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction fs.Close(); } - public void RequestCreateInventoryItem(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + public void RequestCreateInventoryItem(IClientAPI remoteClient, UUID transactionID, UUID folderID, uint callbackID, string description, string name, sbyte invType, sbyte type, byte wearableType, uint nextOwnerMask) { @@ -321,7 +321,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction } } - public void RequestUpdateInventoryItem(IClientAPI remoteClient, LLUUID transactionID, + public void RequestUpdateInventoryItem(IClientAPI remoteClient, UUID transactionID, InventoryItemBase item) { if (TransactionID == transactionID) @@ -332,7 +332,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction if (userInfo != null) { - LLUUID assetID = LLUUID.Combine(transactionID, remoteClient.SecureSessionId); + UUID assetID = UUID.Combine(transactionID, remoteClient.SecureSessionId); AssetBase asset = m_userTransactions.Manager.MyScene.CommsManager.AssetCache.GetAsset( @@ -346,7 +346,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction if (asset != null && asset.FullID == assetID) { // Assets never get updated, new ones get created - asset.FullID = LLUUID.Random(); + asset.FullID = UUID.Random(); asset.Name = item.Name; asset.Description = item.Description; asset.Type = (sbyte) item.AssetType; @@ -371,7 +371,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction InventoryItemBase item = new InventoryItemBase(); item.Owner = ourClient.AgentId; item.Creator = ourClient.AgentId; - item.ID = LLUUID.Random(); + item.ID = UUID.Random(); item.AssetID = Asset.FullID; item.Description = m_description; item.Name = m_name; diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs index b1cbdcca14..e6e27beba4 100644 --- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -40,7 +40,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction { public class AssetTransactionModule : IRegionModule, IAgentAssetTransactions { - private readonly Dictionary RegisteredScenes = new Dictionary(); + private readonly Dictionary RegisteredScenes = new Dictionary(); private bool m_dumpAssetsToFile = false; private Scene m_scene = null; @@ -53,7 +53,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction #region IAgentAssetTransactions Members - public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + public void HandleItemCreationFromTransaction(IClientAPI remoteClient, UUID transactionID, UUID folderID, uint callbackID, string description, string name, sbyte invType, sbyte type, byte wearableType, uint nextOwnerMask) { @@ -61,13 +61,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction wearableType, nextOwnerMask); } - public void HandleItemUpdateFromTransaction(IClientAPI remoteClient, LLUUID transactionID, + public void HandleItemUpdateFromTransaction(IClientAPI remoteClient, UUID transactionID, InventoryItemBase item) { m_transactionManager.HandleItemUpdateFromTransaction(remoteClient, transactionID, item); } - public void RemoveAgentAssetTransactions(LLUUID userID) + public void RemoveAgentAssetTransactions(UUID userID) { m_transactionManager.RemoveAgentAssetTransactions(userID); } @@ -146,8 +146,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// /// Each agent has its own singleton collection of transactions /// - private Dictionary AgentTransactions = - new Dictionary(); + private Dictionary AgentTransactions = + new Dictionary(); /// /// Should we dump uploaded assets to the filesystem? @@ -168,7 +168,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// /// /// - private AgentAssetTransactions GetUserTransactions(LLUUID userID) + private AgentAssetTransactions GetUserTransactions(UUID userID) { lock (AgentTransactions) { @@ -188,7 +188,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// from a scene (and hence won't be making any more transactions here). /// /// - public void RemoveAgentAssetTransactions(LLUUID userID) + public void RemoveAgentAssetTransactions(UUID userID) { // m_log.DebugFormat("Removing agent asset transactions structure for agent {0}", userID); @@ -214,7 +214,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// /// /// - public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + public void HandleItemCreationFromTransaction(IClientAPI remoteClient, UUID transactionID, UUID folderID, uint callbackID, string description, string name, sbyte invType, sbyte type, byte wearableType, uint nextOwnerMask) { @@ -237,7 +237,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// /// /// - public void HandleItemUpdateFromTransaction(IClientAPI remoteClient, LLUUID transactionID, + public void HandleItemUpdateFromTransaction(IClientAPI remoteClient, UUID transactionID, InventoryItemBase item) { m_log.DebugFormat( @@ -259,7 +259,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// /// /// - public void HandleUDPUploadRequest(IClientAPI remoteClient, LLUUID assetID, LLUUID transaction, sbyte type, + public void HandleUDPUploadRequest(IClientAPI remoteClient, UUID assetID, UUID transaction, sbyte type, byte[] data, bool storeLocal, bool tempFile) { if (((AssetType)type == AssetType.Texture || diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs index 8f81f3d866..813d271a1e 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Threading; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -50,8 +50,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload /// /// Each user has their own texture download service. /// - private readonly Dictionary m_userTextureServices = - new Dictionary(); + private readonly Dictionary m_userTextureServices = + new Dictionary(); private Scene m_scene; private List m_scenes = new List(); @@ -109,7 +109,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload /// Cleanup the texture service related objects for the removed presence. /// /// - private void EventManager_OnRemovePresence(LLUUID agentId) + private void EventManager_OnRemovePresence(UUID agentId) { UserTextureDownloadService textureService; @@ -216,4 +216,4 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload m_scene.AddPendingDownloads(-1); } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs index c5af174d03..f6d854306f 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs @@ -25,8 +25,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -46,11 +46,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload // See ITextureSender // private bool m_sending = false; - private LLUUID m_textureId; + private UUID m_textureId; // See ITextureSender - public TextureNotFoundSender(IClientAPI client, LLUUID textureID) + public TextureNotFoundSender(IClientAPI client, UUID textureID) { // // m_client = client; m_textureId = textureID; @@ -101,4 +101,4 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs index e6ee75f55f..c38bc6210d 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications.Limit; @@ -65,8 +65,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload /// /// XXX Also going to limit requests for found textures. /// - private readonly IRequestLimitStrategy foundTextureLimitStrategy - = new RepeatLimitStrategy(MAX_ALLOWED_TEXTURE_REQUESTS); + private readonly IRequestLimitStrategy foundTextureLimitStrategy + = new RepeatLimitStrategy(MAX_ALLOWED_TEXTURE_REQUESTS); private readonly IClientAPI m_client; private readonly Scene m_scene; @@ -80,15 +80,15 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload /// /// Holds texture senders before they have received the appropriate texture from the asset cache. /// - private readonly Dictionary m_textureSenders = new Dictionary(); + private readonly Dictionary m_textureSenders = new Dictionary(); /// /// We're going to limit requests for the same missing texture. /// XXX This is really a temporary solution to deal with the situation where a client continually requests /// the same missing textures /// - private readonly IRequestLimitStrategy missingTextureLimitStrategy - = new RepeatLimitStrategy(MAX_ALLOWED_TEXTURE_REQUESTS); + private readonly IRequestLimitStrategy missingTextureLimitStrategy + = new RepeatLimitStrategy(MAX_ALLOWED_TEXTURE_REQUESTS); public UserTextureDownloadService( IClientAPI client, Scene scene, BlockingQueue sharedQueue) @@ -172,7 +172,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload /// /// /// - public void TextureCallback(LLUUID textureID, AssetBase texture) + public void TextureCallback(UUID textureID, AssetBase texture) { //m_log.DebugFormat("[USER TEXTURE DOWNLOAD SERVICE]: Calling TextureCallback with {0}, texture == null is {1}", textureID, (texture == null ? true : false)); diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs index 7554d1a827..dbfd4d2e74 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs @@ -27,7 +27,7 @@ using System; using System.Reflection; -using libsecondlife.Packets; +using OpenMetaverse.Packets; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -55,7 +55,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender /// private AssetBase m_asset; - //public LLUUID assetID { get { return m_asset.FullID; } } + //public UUID assetID { get { return m_asset.FullID; } } // private bool m_cancel = false; @@ -220,4 +220,4 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender return numPackets; } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs index 16874d72d2..3c69621ab6 100644 --- a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -228,4 +228,4 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/Environment/Modules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 5df3f521ab..9433cf6090 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/AvatarFactory/AvatarFactoryModule.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Threading; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -43,7 +43,7 @@ namespace OpenSim.Region.Environment.Modules public class AvatarFactoryModule : IAvatarFactory { private Scene m_scene = null; - private readonly Dictionary m_avatarsAppearance = new Dictionary(); + private readonly Dictionary m_avatarsAppearance = new Dictionary(); private bool m_enablePersist = false; private string m_connectionString; @@ -51,10 +51,10 @@ namespace OpenSim.Region.Environment.Modules private BaseDatabaseConnector m_databaseMapper; private AppearanceTableMapper m_appearanceMapper; - private Dictionary m_fetchesInProgress = new Dictionary(); + private Dictionary m_fetchesInProgress = new Dictionary(); private object m_syncLock = new object(); - public bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance) + public bool TryGetAvatarAppearance(UUID avatarId, out AvatarAppearance appearance) { //should only let one thread at a time do this part @@ -163,7 +163,7 @@ namespace OpenSim.Region.Environment.Modules } } - private AvatarAppearance CreateDefault(LLUUID avatarId) + private AvatarAppearance CreateDefault(UUID avatarId) { AvatarAppearance appearance = null; AvatarWearable[] wearables; @@ -174,7 +174,7 @@ namespace OpenSim.Region.Environment.Modules return appearance; } - private AvatarAppearance CheckDatabase(LLUUID avatarId) + private AvatarAppearance CheckDatabase(UUID avatarId) { AvatarAppearance appearance = null; if (m_enablePersist) @@ -192,7 +192,7 @@ namespace OpenSim.Region.Environment.Modules return appearance; } - private AvatarAppearance CheckCache(LLUUID avatarId) + private AvatarAppearance CheckCache(UUID avatarId) { AvatarAppearance appearance = null; lock (m_avatarsAppearance) @@ -282,16 +282,16 @@ namespace OpenSim.Region.Environment.Modules { if (wear.Type < 13) { - if (wear.ItemID == LLUUID.Zero) + if (wear.ItemID == UUID.Zero) { - avatAppearance.Wearables[wear.Type].ItemID = LLUUID.Zero; - avatAppearance.Wearables[wear.Type].AssetID = LLUUID.Zero; + avatAppearance.Wearables[wear.Type].ItemID = UUID.Zero; + avatAppearance.Wearables[wear.Type].AssetID = UUID.Zero; UpdateDatabase(clientView.AgentId, avatAppearance); } else { - LLUUID assetId; + UUID assetId; InventoryItemBase baseItem = profile.RootFolder.FindItem(wear.ItemID); if (baseItem != null) @@ -310,11 +310,11 @@ namespace OpenSim.Region.Environment.Modules } } - public void UpdateDatabase(LLUUID userID, AvatarAppearance avatAppearance) + public void UpdateDatabase(UUID userID, AvatarAppearance avatAppearance) { if (m_enablePersist) { - m_appearanceMapper.Update(userID.UUID, avatAppearance); + m_appearanceMapper.Update(userID.Guid, avatAppearance); } } diff --git a/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs index 1493e32835..e1599a89bc 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs @@ -32,7 +32,7 @@ using System.Net.Sockets; using System.Reflection; using System.Text.RegularExpressions; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -115,7 +115,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat // chat works by redistributing every incoming chat // message to each avatar in the scene - LLVector3 pos = new LLVector3(128, 128, 30); + Vector3 pos = new Vector3(128, 128, 30); ((Scene)c.Scene).ForEachScenePresence(delegate(ScenePresence presence) { if (presence.IsChildAgent) return; @@ -129,12 +129,12 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat if (null == c.SenderObject) client.SendChatMessage(c.Message, (byte)c.Type, - pos, c.From, LLUUID.Zero, + pos, c.From, UUID.Zero, (byte)ChatSourceType.Agent, (byte)ChatAudibleLevel.Fully); else client.SendChatMessage(c.Message, (byte)c.Type, - pos, c.From, LLUUID.Zero, + pos, c.From, UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully); }); @@ -153,13 +153,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat scene = m_scenes[0]; // Filled in since it's easier than rewriting right now. - LLVector3 fromPos = e.Position; - LLVector3 regionPos = new LLVector3(scene.RegionInfo.RegionLocX * Constants.RegionSize, + Vector3 fromPos = e.Position; + Vector3 regionPos = new Vector3(scene.RegionInfo.RegionLocX * Constants.RegionSize, scene.RegionInfo.RegionLocY * Constants.RegionSize, 0); string fromName = e.From; string message = e.Message; - LLUUID fromID = e.SenderUUID; + UUID fromID = e.SenderUUID; if(message.Length >= 1000) // libomv limit message = message.Substring(0, 1000); @@ -172,7 +172,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat if (avatar != null) { fromPos = avatar.AbsolutePosition; - regionPos = new LLVector3(scene.RegionInfo.RegionLocX * Constants.RegionSize, + regionPos = new Vector3(scene.RegionInfo.RegionLocX * Constants.RegionSize, scene.RegionInfo.RegionLocY * Constants.RegionSize, 0); fromName = avatar.Firstname + " " + avatar.Lastname; fromID = e.Sender.AgentId; @@ -217,16 +217,16 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat } } - private void TrySendChatMessage(ScenePresence presence, LLVector3 fromPos, LLVector3 regionPos, - LLUUID fromAgentID, string fromName, ChatTypeEnum type, + private void TrySendChatMessage(ScenePresence presence, Vector3 fromPos, Vector3 regionPos, + UUID fromAgentID, string fromName, ChatTypeEnum type, string message, ChatSourceType src) { // don't send stuff to child agents if (presence.IsChildAgent) return; - LLVector3 fromRegionPos = fromPos + regionPos; - LLVector3 toRegionPos = presence.AbsolutePosition + - new LLVector3(presence.Scene.RegionInfo.RegionLocX * Constants.RegionSize, + Vector3 fromRegionPos = fromPos + regionPos; + Vector3 toRegionPos = presence.AbsolutePosition + + new Vector3(presence.Scene.RegionInfo.RegionLocX * Constants.RegionSize, presence.Scene.RegionInfo.RegionLocY * Constants.RegionSize, 0); int dis = Math.Abs((int) Util.GetDistanceTo(toRegionPos, fromRegionPos)); diff --git a/OpenSim/Region/Environment/Modules/Avatar/Chat/IRCBridgeModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Chat/IRCBridgeModule.cs index 9df05e0a33..8fe5080810 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Chat/IRCBridgeModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Chat/IRCBridgeModule.cs @@ -32,7 +32,7 @@ using System.Net.Sockets; using System.Reflection; using System.Text.RegularExpressions; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -617,7 +617,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat public void ListenerRun() { string inputLine; - LLVector3 pos = new LLVector3(128, 128, 20); + Vector3 pos = new Vector3(128, 128, 20); while (m_enabled) { try @@ -638,7 +638,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat c.Position = pos; c.From = data["nick"]; c.Sender = null; - c.SenderUUID = LLUUID.Zero; + c.SenderUUID = UUID.Zero; // is message "\001ACTION foo // bar\001"? -> "/me foo bar" @@ -684,9 +684,9 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat c.Message = String.Format(format, args); c.Type = ChatTypeEnum.Say; c.Channel = 0; - c.Position = new LLVector3(128, 128, 20); + c.Position = new Vector3(128, 128, 20); c.Sender = null; - c.SenderUUID = LLUUID.Zero; + c.SenderUUID = UUID.Zero; foreach (Scene m_scene in m_scenes) { diff --git a/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs index 2a0bba4220..19c193f178 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs @@ -32,7 +32,7 @@ using System.Net; using System.Net.Sockets; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using Nwc.XmlRpc; @@ -62,7 +62,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// Where Stipends come from and Fees go to. /// - // private LLUUID EconomyBaseAccount = LLUUID.Zero; + // private UUID EconomyBaseAccount = UUID.Zero; private float EnergyEfficiency = 0f; private bool gridmode = false; @@ -72,7 +72,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney private IConfigSource m_gConfig; private bool m_keepMoneyAcrossLogins = true; - private Dictionary m_KnownClientFunds = new Dictionary(); + private Dictionary m_KnownClientFunds = new Dictionary(); // private string m_LandAddress = String.Empty; private int m_minFundsBeforeRefresh = 100; @@ -81,7 +81,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// Region UUIDS indexed by AgentID /// - private Dictionary m_rootAgents = new Dictionary(); + private Dictionary m_rootAgents = new Dictionary(); /// /// Scenes by Region Handle @@ -184,11 +184,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney } } - public void ApplyUploadCharge(LLUUID agentID) + public void ApplyUploadCharge(UUID agentID) { } - public bool ObjectGiveMoney(LLUUID objectID, LLUUID fromID, LLUUID toID, int amount) + public bool ObjectGiveMoney(UUID objectID, UUID fromID, UUID toID, int amount) { string description = String.Format("Object {0} pays {1}", resolveObjectName(objectID), resolveAgentName(toID)); @@ -252,7 +252,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney PriceObjectScaleFactor = startupConfig.GetFloat("PriceObjectScaleFactor", 10); PriceParcelRent = startupConfig.GetInt("PriceParcelRent", 1); PriceGroupCreate = startupConfig.GetInt("PriceGroupCreate", -1); - // string EBA = startupConfig.GetString("EconomyBaseAccount", LLUUID.Zero.ToString()); + // string EBA = startupConfig.GetString("EconomyBaseAccount", UUID.Zero.ToString()); // Helpers.TryParse(EBA, out EconomyBaseAccount); // UserLevelPaysFees = startupConfig.GetInt("UserLevelPaysFees", -1); @@ -294,7 +294,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney if (s != null && agent != null && childYN == false) { //s.RegionInfo.RegionHandle; - LLUUID agentID = LLUUID.Zero; + UUID agentID = UUID.Zero; int funds = 0; Hashtable hbinfo = @@ -302,7 +302,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney s.RegionInfo.regionSecret); if ((bool) hbinfo["success"] == true) { - Helpers.TryParse((string) hbinfo["agentId"], out agentID); + UUID.TryParse((string)hbinfo["agentId"], out agentID); try { funds = (Int32) hbinfo["funds"]; @@ -331,7 +331,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney (string) hbinfo["errorMessage"]); client.SendAlertMessage((string) hbinfo["errorMessage"]); } - SendMoneyBalance(client, agentID, client.SessionId, LLUUID.Zero); + SendMoneyBalance(client, agentID, client.SessionId, UUID.Zero); } } } @@ -365,7 +365,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// /// - private bool doMoneyTransfer(LLUUID Sender, LLUUID Receiver, int amount, int transactiontype, string description) + private bool doMoneyTransfer(UUID Sender, UUID Receiver, int amount, int transactiontype, string description) { bool result = false; if (amount >= 0) @@ -425,7 +425,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// /// - public void SendMoneyBalance(IClientAPI client, LLUUID agentID, LLUUID SessionID, LLUUID TransactionID) + public void SendMoneyBalance(IClientAPI client, UUID agentID, UUID SessionID, UUID TransactionID) { if (client.AgentId == agentID && client.SessionId == SessionID) { @@ -456,7 +456,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// /// - public Hashtable GetBalanceForUserFromMoneyServer(LLUUID agentId, LLUUID secureSessionID, LLUUID regionId, string regionSecret) + public Hashtable GetBalanceForUserFromMoneyServer(UUID agentId, UUID secureSessionID, UUID regionId, string regionSecret) { Hashtable MoneyBalanceRequestParams = new Hashtable(); MoneyBalanceRequestParams["agentId"] = agentId.ToString(); @@ -551,7 +551,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// /// - public Hashtable claim_user(LLUUID agentId, LLUUID secureSessionID, LLUUID regionId, string regionSecret) + public Hashtable claim_user(UUID agentId, UUID secureSessionID, UUID regionId, string regionSecret) { Hashtable MoneyBalanceRequestParams = new Hashtable(); MoneyBalanceRequestParams["agentId"] = agentId.ToString(); @@ -563,12 +563,12 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney IClientAPI sendMoneyBal = LocateClientObject(agentId); if (sendMoneyBal != null) { - SendMoneyBalance(sendMoneyBal, agentId, sendMoneyBal.SessionId, LLUUID.Zero); + SendMoneyBalance(sendMoneyBal, agentId, sendMoneyBal.SessionId, UUID.Zero); } return MoneyRespData; } - private SceneObjectPart findPrim(LLUUID objectID) + private SceneObjectPart findPrim(UUID objectID) { lock (m_scenel) { @@ -584,7 +584,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney return null; } - private string resolveObjectName(LLUUID objectID) + private string resolveObjectName(UUID objectID) { SceneObjectPart part = findPrim(objectID); if (part != null) @@ -594,7 +594,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney return String.Empty; } - private string resolveAgentName(LLUUID agentID) + private string resolveAgentName(UUID agentID) { // try avatar username surname Scene scene = GetRandomScene(); @@ -607,7 +607,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney return String.Empty; } - private void BalanceUpdate(LLUUID senderID, LLUUID receiverID, bool transactionresult, string description) + private void BalanceUpdate(UUID senderID, UUID receiverID, bool transactionresult, string description) { IClientAPI sender = LocateClientObject(senderID); IClientAPI receiver = LocateClientObject(receiverID); @@ -616,12 +616,12 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney { if (sender != null) { - sender.SendMoneyBalance(LLUUID.Random(), transactionresult, Helpers.StringToField(description), GetFundsForAgentID(senderID)); + sender.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(description), GetFundsForAgentID(senderID)); } if (receiver != null) { - receiver.SendMoneyBalance(LLUUID.Random(), transactionresult, Helpers.StringToField(description), GetFundsForAgentID(receiverID)); + receiver.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(description), GetFundsForAgentID(receiverID)); } } } @@ -633,7 +633,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// /// - public bool TransferMoneyonMoneyServer(LLUUID sourceId, LLUUID destId, int amount, int transactiontype, string description) + public bool TransferMoneyonMoneyServer(UUID sourceId, UUID destId, int amount, int transactiontype, string description) { int aggregatePermInventory = 0; int aggregatePermNextOwner = 0; @@ -709,7 +709,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney return rvalue; } - public int GetRemoteBalance(LLUUID agentId) + public int GetRemoteBalance(UUID agentId) { int funds = 0; @@ -755,7 +755,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney } SetLocalFundsForAgentID(agentId, funds); - SendMoneyBalance(aClient, agentId, aClient.SessionId, LLUUID.Zero); + SendMoneyBalance(aClient, agentId, aClient.SessionId, UUID.Zero); } else { @@ -776,10 +776,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney if (requestData.ContainsKey("agentId")) { - LLUUID agentId = LLUUID.Zero; + UUID agentId = UUID.Zero; - Helpers.TryParse((string) requestData["agentId"], out agentId); - if (agentId != LLUUID.Zero) + UUID.TryParse((string) requestData["agentId"], out agentId); + if (agentId != UUID.Zero) { GetRemoteBalance(agentId); } @@ -809,13 +809,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney Hashtable retparam = new Hashtable(); Hashtable requestData = (Hashtable) request.Params[0]; - LLUUID agentId = LLUUID.Zero; - LLUUID soundId = LLUUID.Zero; - LLUUID regionId = LLUUID.Zero; + UUID agentId = UUID.Zero; + UUID soundId = UUID.Zero; + UUID regionId = UUID.Zero; - Helpers.TryParse((string) requestData["agentId"], out agentId); - Helpers.TryParse((string) requestData["soundId"], out soundId); - Helpers.TryParse((string) requestData["regionId"], out regionId); + UUID.TryParse((string) requestData["agentId"], out agentId); + UUID.TryParse((string) requestData["soundId"], out soundId); + UUID.TryParse((string) requestData["regionId"], out regionId); string text = (string) requestData["text"]; string secret = (string) requestData["secret"]; @@ -828,9 +828,12 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney IClientAPI client = LocateClientObject(agentId); if (client != null) { - if (soundId != LLUUID.Zero) - client.SendPlayAttachedSound(soundId, LLUUID.Zero, LLUUID.Zero, 1.0f, 0); - client.SendBlueBoxMessage(LLUUID.Zero, LLUUID.Zero, "", text); + + if (soundId != UUID.Zero) + client.SendPlayAttachedSound(soundId, UUID.Zero, UUID.Zero, 1.0f, 0); + + client.SendBlueBoxMessage(UUID.Zero, UUID.Zero, "", text); + retparam.Add("success", true); } else @@ -843,10 +846,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney retparam.Add("success", false); } } - else - { - retparam.Add("success", false); - } + ret.Value = retparam; return ret; } @@ -856,14 +856,14 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney public XmlRpcResponse quote_func(XmlRpcRequest request) { Hashtable requestData = (Hashtable) request.Params[0]; - LLUUID agentId = LLUUID.Zero; + UUID agentId = UUID.Zero; int amount = 0; Hashtable quoteResponse = new Hashtable(); XmlRpcResponse returnval = new XmlRpcResponse(); if (requestData.ContainsKey("agentId") && requestData.ContainsKey("currencyBuy")) { - Helpers.TryParse((string) requestData["agentId"], out agentId); + UUID.TryParse((string) requestData["agentId"], out agentId); try { amount = (Int32) requestData["currencyBuy"]; @@ -894,11 +894,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney public XmlRpcResponse buy_func(XmlRpcRequest request) { Hashtable requestData = (Hashtable) request.Params[0]; - LLUUID agentId = LLUUID.Zero; + UUID agentId = UUID.Zero; int amount = 0; if (requestData.ContainsKey("agentId") && requestData.ContainsKey("currencyBuy")) { - Helpers.TryParse((string) requestData["agentId"], out agentId); + UUID.TryParse((string) requestData["agentId"], out agentId); try { amount = (Int32) requestData["currencyBuy"]; @@ -906,7 +906,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney catch (InvalidCastException) { } - if (agentId != LLUUID.Zero) + if (agentId != UUID.Zero) { lock (m_KnownClientFunds) { @@ -922,7 +922,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney IClientAPI client = LocateClientObject(agentId); if (client != null) { - SendMoneyBalance(client, agentId, client.SessionId, LLUUID.Zero); + SendMoneyBalance(client, agentId, client.SessionId, UUID.Zero); } } } @@ -974,11 +974,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney Hashtable retparam = new Hashtable(); Hashtable requestData = (Hashtable) request.Params[0]; - LLUUID agentId = LLUUID.Zero; + UUID agentId = UUID.Zero; int amount = 0; if (requestData.ContainsKey("agentId") && requestData.ContainsKey("currencyBuy")) { - Helpers.TryParse((string) requestData["agentId"], out agentId); + UUID.TryParse((string) requestData["agentId"], out agentId); try { amount = (Int32) requestData["currencyBuy"]; @@ -986,7 +986,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney catch (InvalidCastException) { } - if (agentId != LLUUID.Zero) + if (agentId != UUID.Zero) { lock (m_KnownClientFunds) { @@ -1002,7 +1002,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney IClientAPI client = LocateClientObject(agentId); if (client != null) { - SendMoneyBalance(client, agentId, client.SessionId, LLUUID.Zero); + SendMoneyBalance(client, agentId, client.SessionId, UUID.Zero); } } } @@ -1020,7 +1020,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// Ensures that the agent accounting data is set up in this instance. /// /// - private void CheckExistAndRefreshFunds(LLUUID agentID) + private void CheckExistAndRefreshFunds(UUID agentID) { lock (m_KnownClientFunds) { @@ -1043,7 +1043,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// /// - private int GetFundsForAgentID(LLUUID AgentID) + private int GetFundsForAgentID(UUID AgentID) { int returnfunds = 0; lock (m_KnownClientFunds) @@ -1060,7 +1060,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney return returnfunds; } - private void SetLocalFundsForAgentID(LLUUID AgentID, int amount) + private void SetLocalFundsForAgentID(UUID AgentID, int amount) { lock (m_KnownClientFunds) { @@ -1084,7 +1084,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// /// - private IClientAPI LocateClientObject(LLUUID AgentID) + private IClientAPI LocateClientObject(UUID AgentID) { ScenePresence tPresence = null; IClientAPI rclient = null; @@ -1110,7 +1110,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney return null; } - private Scene LocateSceneClientIn(LLUUID AgentId) + private Scene LocateSceneClientIn(UUID AgentId) { lock (m_scenel) { @@ -1148,7 +1148,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// /// - public Scene GetSceneByUUID(LLUUID RegionID) + public Scene GetSceneByUUID(UUID RegionID) { lock (m_scenel) { @@ -1167,7 +1167,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney #region event Handlers - public void requestPayPrice(IClientAPI client, LLUUID objectID) + public void requestPayPrice(IClientAPI client, UUID objectID) { Scene scene = LocateSceneClientIn(client.AgentId); if (scene == null) @@ -1186,7 +1186,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// When the client closes the connection we remove their accounting info from memory to free up resources. /// /// - public void ClientClosed(LLUUID AgentID) + public void ClientClosed(UUID AgentID) { lock (m_KnownClientFunds) { @@ -1204,7 +1204,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// Event called Economy Data Request handler. /// /// - public void EconomyDataRequestHandler(LLUUID agentId) + public void EconomyDataRequestHandler(UUID agentId) { IClientAPI user = LocateClientObject(agentId); @@ -1309,11 +1309,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney if (e.sender != e.receiver) { - sender.SendMoneyBalance(LLUUID.Random(), transactionresult, Helpers.StringToField(e.description), GetFundsForAgentID(e.sender)); + sender.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(e.description), GetFundsForAgentID(e.sender)); } if (receiver != null) { - receiver.SendMoneyBalance(LLUUID.Random(), transactionresult, Helpers.StringToField(e.description), GetFundsForAgentID(part.OwnerID)); + receiver.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(e.description), GetFundsForAgentID(part.OwnerID)); } } return; @@ -1330,13 +1330,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney { if (sender != null) { - sender.SendMoneyBalance(LLUUID.Random(), transactionresult, Helpers.StringToField(e.description), GetFundsForAgentID(e.sender)); + sender.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(e.description), GetFundsForAgentID(e.sender)); } } if (receiver != null) { - receiver.SendMoneyBalance(LLUUID.Random(), transactionresult, Helpers.StringToField(e.description), GetFundsForAgentID(e.receiver)); + receiver.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(e.description), GetFundsForAgentID(e.receiver)); } } else @@ -1369,7 +1369,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// Event Handler for when the client logs out. /// /// - private void ClientLoggedOut(LLUUID AgentId) + private void ClientLoggedOut(UUID AgentId) { lock (m_rootAgents) { @@ -1396,7 +1396,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney /// /// /// - private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, LLUUID regionID) + private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) { lock (m_rootAgents) { @@ -1404,8 +1404,6 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney { if (avatar.Scene.RegionInfo.originRegionID != m_rootAgents[avatar.UUID]) { - - m_rootAgents[avatar.UUID] = avatar.Scene.RegionInfo.originRegionID; @@ -1527,7 +1525,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney else { string killer = DeadAvatar.Scene.CommsManager.UUIDNameRequestString(part.OwnerID); - DeadAvatar.ControllingClient.SendAgentAlertMessage("You impailed yourself on " + part.Name + " owned by " + killer +"!", true); + DeadAvatar.ControllingClient.SendAgentAlertMessage("You impaled yourself on " + part.Name + " owned by " + killer +"!", true); } //DeadAvatar.Scene. part.ObjectOwner } @@ -1564,8 +1562,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney #endregion - public void ObjectBuy(IClientAPI remoteClient, LLUUID agentID, - LLUUID sessionID, LLUUID groupID, LLUUID categoryID, + public void ObjectBuy(IClientAPI remoteClient, UUID agentID, + UUID sessionID, UUID groupID, UUID categoryID, uint localID, byte saleType, int salePrice) { GetClientFunds(remoteClient); diff --git a/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs index 4a98622f3a..0be540d599 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs @@ -28,8 +28,8 @@ using System; using System.Collections; using System.Collections.Generic; using System.Reflection; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using log4net; using Nini.Config; using Nwc.XmlRpc; @@ -43,10 +43,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 Dictionary> StoredFriendListUpdates = new Dictionary>(); + private Dictionary> FriendLists = new Dictionary>(); + private Dictionary m_pendingFriendRequests = new Dictionary(); + private Dictionary m_rootAgents = new Dictionary(); + private Dictionary> StoredFriendListUpdates = new Dictionary>(); private List m_scene = new List(); @@ -98,16 +98,16 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends if (requestData.ContainsKey("agent_id") && requestData.ContainsKey("notify_id") && requestData.ContainsKey("status")) { - LLUUID notifyAgentId = LLUUID.Zero; - LLUUID notifyAboutAgentId = LLUUID.Zero; + UUID notifyAgentId = UUID.Zero; + UUID notifyAboutAgentId = UUID.Zero; bool notifyOnlineStatus = false; if ((string)requestData["status"] == "TRUE") notifyOnlineStatus = true; - Helpers.TryParse((string)requestData["notify_id"], out notifyAgentId); + UUID.TryParse((string)requestData["notify_id"], out notifyAgentId); - Helpers.TryParse((string)requestData["agent_id"], out notifyAboutAgentId); + UUID.TryParse((string)requestData["agent_id"], out notifyAboutAgentId); m_log.InfoFormat("[PRESENCE]: Got presence update for {0}, and we're telling {1}, with a status {2}", notifyAboutAgentId.ToString(), notifyAgentId.ToString(), notifyOnlineStatus.ToString()); ScenePresence avatar = GetPresenceFromAgentID(notifyAgentId); if (avatar != null) @@ -189,7 +189,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } - private void doFriendListUpdateOnline(LLUUID AgentId) + private void doFriendListUpdateOnline(UUID AgentId) { List fl = new List(); @@ -213,7 +213,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } } - List UpdateUsers = new List(); + List UpdateUsers = new List(); foreach (FriendListItem f in fl) { @@ -226,7 +226,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } } } - foreach (LLUUID user in UpdateUsers) + foreach (UUID user in UpdateUsers) { ScenePresence av = GetPresenceFromAgentID(user); if (av != null) @@ -245,7 +245,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends if (fli.Friend == AgentId) { fli.onlinestatus = true; - LLUUID[] Agents = new LLUUID[1]; + UUID[] Agents = new UUID[1]; Agents[0] = AgentId; av.ControllingClient.SendAgentOnline(Agents); @@ -266,7 +266,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } } - private void ClientLoggedOut(LLUUID AgentId) + private void ClientLoggedOut(UUID AgentId) { lock (m_rootAgents) { @@ -284,7 +284,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends lfli = FriendLists[AgentId]; } } - List updateUsers = new List(); + List updateUsers = new List(); foreach (FriendListItem fli in lfli) { if (fli.onlinestatus == true) @@ -352,7 +352,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends ScenePresence av = GetPresenceFromAgentID(updateUsers[i]); if (av != null) { - LLUUID[] agents = new LLUUID[1]; + UUID[] agents = new UUID[1]; agents[0] = AgentId; av.ControllingClient.SendAgentOffline(agents); } @@ -364,7 +364,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } } - private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, LLUUID regionID) + private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) { lock (m_rootAgents) { @@ -427,7 +427,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } } - private ScenePresence GetPresenceFromAgentID(LLUUID AgentID) + private ScenePresence GetPresenceFromAgentID(UUID AgentID) { ScenePresence returnAgent = null; lock (m_scene) @@ -451,11 +451,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends #region FriendRequestHandling - private void OnInstantMessage(IClientAPI client, LLUUID fromAgentID, - LLUUID fromAgentSession, LLUUID toAgentID, - LLUUID imSessionID, uint timestamp, string fromAgentName, + private void OnInstantMessage(IClientAPI client, UUID fromAgentID, + UUID fromAgentSession, UUID toAgentID, + UUID imSessionID, uint timestamp, string fromAgentName, string message, byte dialog, bool fromGroup, byte offline, - uint ParentEstateID, LLVector3 Position, LLUUID RegionID, + uint ParentEstateID, Vector3 Position, UUID RegionID, byte[] binaryBucket) { // Friend Requests go by Instant Message.. using the dialog param @@ -464,17 +464,17 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends // 38 == Offer friendship if (dialog == (byte) 38) { - LLUUID friendTransactionID = LLUUID.Random(); + UUID friendTransactionID = UUID.Random(); m_pendingFriendRequests.Add(friendTransactionID, fromAgentID); m_log.Info("[FRIEND]: 38 - From:" + fromAgentID.ToString() + " To: " + toAgentID.ToString() + " Session:" + imSessionID.ToString() + " 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 + msg.fromAgentID = fromAgentID.Guid; + msg.fromAgentSession = fromAgentSession.Guid; + msg.toAgentID = toAgentID.Guid; + msg.imSessionID = friendTransactionID.Guid; // This is the item we're mucking with here m_log.Info("[FRIEND]: Filling Session: " + msg.imSessionID.ToString()); msg.timestamp = timestamp; if (client != null) @@ -490,8 +490,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends msg.fromGroup = fromGroup; msg.offline = offline; msg.ParentEstateID = ParentEstateID; - msg.Position = new sLLVector3(Position); - msg.RegionID = RegionID.UUID; + msg.Position = Position; + msg.RegionID = RegionID.Guid; msg.binaryBucket = binaryBucket; // We don't really care which scene we pipe it through. m_scene[0].TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule); @@ -512,7 +512,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } } - private void OnApprovedFriendRequest(IClientAPI client, LLUUID agentID, LLUUID transactionID, List callingCardFolders) + private void OnApprovedFriendRequest(IClientAPI client, UUID agentID, UUID transactionID, List callingCardFolders) { if (m_pendingFriendRequests.ContainsKey(transactionID)) { @@ -528,18 +528,18 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends // Compose response to other agent. GridInstantMessage msg = new GridInstantMessage(); - msg.toAgentID = m_pendingFriendRequests[transactionID].UUID; - msg.fromAgentID = agentID.UUID; + msg.toAgentID = m_pendingFriendRequests[transactionID].Guid; + msg.fromAgentID = agentID.Guid; msg.fromAgentName = client.Name; - msg.fromAgentSession = client.SessionId.UUID; + msg.fromAgentSession = client.SessionId.Guid; msg.fromGroup = false; - msg.imSessionID = transactionID.UUID; - msg.message = agentID.UUID.ToString(); + msg.imSessionID = transactionID.Guid; + msg.message = agentID.Guid.ToString(); msg.ParentEstateID = 0; msg.timestamp = (uint) Util.UnixTimeSinceEpoch(); - msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID; + msg.RegionID = SceneAgentIn.RegionInfo.RegionID.Guid; msg.dialog = (byte) 39; // Approved friend request - msg.Position = new sLLVector3(); + msg.Position = Vector3.Zero; msg.offline = (byte) 0; msg.binaryBucket = new byte[0]; // We don't really care which scene we pipe it through, it goes to the shared IM Module and/or the database @@ -548,7 +548,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends SceneAgentIn.StoreAddFriendship(m_pendingFriendRequests[transactionID], agentID, (uint) 1); - //LLUUID[] Agents = new LLUUID[1]; + //UUID[] Agents = new UUID[1]; //Agents[0] = msg.toAgentID; //av.ControllingClient.SendAgentOnline(Agents); @@ -557,7 +557,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } } - private void OnDenyFriendRequest(IClientAPI client, LLUUID agentID, LLUUID transactionID, List callingCardFolders) + private void OnDenyFriendRequest(IClientAPI client, UUID agentID, UUID transactionID, List callingCardFolders) { if (m_pendingFriendRequests.ContainsKey(transactionID)) { @@ -571,18 +571,18 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } // Compose response to other agent. GridInstantMessage msg = new GridInstantMessage(); - msg.toAgentID = m_pendingFriendRequests[transactionID].UUID; - msg.fromAgentID = agentID.UUID; + msg.toAgentID = m_pendingFriendRequests[transactionID].Guid; + msg.fromAgentID = agentID.Guid; msg.fromAgentName = client.Name; - msg.fromAgentSession = client.SessionId.UUID; + msg.fromAgentSession = client.SessionId.Guid; msg.fromGroup = false; - msg.imSessionID = transactionID.UUID; - msg.message = agentID.UUID.ToString(); + msg.imSessionID = transactionID.Guid; + msg.message = agentID.Guid.ToString(); msg.ParentEstateID = 0; msg.timestamp = (uint) Util.UnixTimeSinceEpoch(); - msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID; + msg.RegionID = SceneAgentIn.RegionInfo.RegionID.Guid; msg.dialog = (byte) 40; // Deny friend request - msg.Position = new sLLVector3(); + msg.Position = Vector3.Zero; msg.offline = (byte) 0; msg.binaryBucket = new byte[0]; SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule); @@ -590,7 +590,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } } - private void OnTerminateFriendship(IClientAPI client, LLUUID agent, LLUUID exfriendID) + private void OnTerminateFriendship(IClientAPI client, UUID agent, UUID exfriendID) { m_scene[0].StoreRemoveFriendship(agent, exfriendID); // TODO: Inform the client that the ExFriend is offline @@ -599,10 +599,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends private void OnGridInstantMessage(GridInstantMessage msg) { // Trigger the above event handler - OnInstantMessage(null, new LLUUID(msg.fromAgentID), new LLUUID(msg.fromAgentSession), - new LLUUID(msg.toAgentID), new LLUUID(msg.imSessionID), msg.timestamp, msg.fromAgentName, + OnInstantMessage(null, new UUID(msg.fromAgentID), new UUID(msg.fromAgentSession), + new UUID(msg.toAgentID), new UUID(msg.imSessionID), msg.timestamp, msg.fromAgentName, msg.message, msg.dialog, msg.fromGroup, msg.offline, msg.ParentEstateID, - new LLVector3(msg.Position.x, msg.Position.y, msg.Position.z), new LLUUID(msg.RegionID), + new Vector3(msg.Position.X, msg.Position.Y, msg.Position.Z), new UUID(msg.RegionID), msg.binaryBucket); } @@ -611,8 +611,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends public struct StoredFriendListUpdate { - public LLUUID storedFor; - public LLUUID storedAbout; + public UUID storedFor; + public UUID storedAbout; public bool OnlineYN; } } diff --git a/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs index eaa5013cf1..ad0cac0e77 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -41,11 +41,11 @@ 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 Dictionary m_groupUUIDGroup = new Dictionary(); - private LLUUID opensimulatorGroupID = new LLUUID("00000000-68f9-1111-024e-222222111123"); + private Dictionary m_grouplistmap = new Dictionary(); + private Dictionary m_groupmap = new Dictionary(); + private Dictionary m_iclientmap = new Dictionary(); + private Dictionary m_groupUUIDGroup = new Dictionary(); + private UUID opensimulatorGroupID = new UUID("00000000-68f9-1111-024e-222222111123"); private List m_scene = new List(); @@ -161,13 +161,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups client.SendGroupMembership(updateGroups); } - private void OnAgentDataUpdateRequest(IClientAPI remoteClient, LLUUID AgentID, LLUUID SessionID) + private void OnAgentDataUpdateRequest(IClientAPI remoteClient, UUID AgentID, UUID SessionID) { // Adam, this is one of those impossible to refactor items without resorting to .Split hackery string firstname = remoteClient.FirstName; string lastname = remoteClient.LastName; - LLUUID ActiveGroupID = LLUUID.Zero; + UUID ActiveGroupID = UUID.Zero; uint ActiveGroupPowers = 0; string ActiveGroupName = "OpenSimulator Tester"; string ActiveGroupTitle = "I IZ N0T"; @@ -202,11 +202,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups } } - private void OnInstantMessage(IClientAPI client, LLUUID fromAgentID, - LLUUID fromAgentSession, LLUUID toAgentID, - LLUUID imSessionID, uint timestamp, string fromAgentName, + private void OnInstantMessage(IClientAPI client, UUID fromAgentID, + UUID fromAgentSession, UUID toAgentID, + UUID imSessionID, uint timestamp, string fromAgentName, string message, byte dialog, bool fromGroup, byte offline, - uint ParentEstateID, LLVector3 Position, LLUUID RegionID, + uint ParentEstateID, Vector3 Position, UUID RegionID, byte[] binaryBucket) { } @@ -214,16 +214,16 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups private void OnGridInstantMessage(GridInstantMessage msg) { // Trigger the above event handler - OnInstantMessage(null, new LLUUID(msg.fromAgentID), new LLUUID(msg.fromAgentSession), - new LLUUID(msg.toAgentID), new LLUUID(msg.imSessionID), msg.timestamp, msg.fromAgentName, + OnInstantMessage(null, new UUID(msg.fromAgentID), new UUID(msg.fromAgentSession), + new UUID(msg.toAgentID), new UUID(msg.imSessionID), msg.timestamp, msg.fromAgentName, msg.message, msg.dialog, msg.fromGroup, msg.offline, msg.ParentEstateID, - new LLVector3(msg.Position.x, msg.Position.y, msg.Position.z), new LLUUID(msg.RegionID), + new Vector3(msg.Position.X, msg.Position.Y, msg.Position.Z), new UUID(msg.RegionID), msg.binaryBucket); } - private void HandleUUIDGroupNameRequest(LLUUID id,IClientAPI remote_client) + private void HandleUUIDGroupNameRequest(UUID id,IClientAPI remote_client) { string groupnamereply = "Unknown"; - LLUUID groupUUID = LLUUID.Zero; + UUID groupUUID = UUID.Zero; lock (m_groupUUIDGroup) { @@ -236,7 +236,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups } remote_client.SendGroupNameReply(groupUUID, groupnamereply); } - private void OnClientClosed(LLUUID agentID) + private void OnClientClosed(UUID agentID) { lock (m_iclientmap) { diff --git a/OpenSim/Region/Environment/Modules/Avatar/InstantMessage/InstantMessageModule.cs b/OpenSim/Region/Environment/Modules/Avatar/InstantMessage/InstantMessageModule.cs index bb3303ffb8..6b2de80a03 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/InstantMessage/InstantMessageModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/InstantMessage/InstantMessageModule.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Reflection; using System.Net; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using Nwc.XmlRpc; @@ -45,7 +45,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private readonly List m_scenes = new List(); - private Dictionary m_userRegionMap = new Dictionary(); + private Dictionary m_userRegionMap = new Dictionary(); #region IRegionModule Members @@ -106,11 +106,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage client.OnInstantMessage += OnInstantMessage; } - private void OnInstantMessage(IClientAPI client, LLUUID fromAgentID, - LLUUID fromAgentSession, LLUUID toAgentID, - LLUUID imSessionID, uint timestamp, string fromAgentName, + private void OnInstantMessage(IClientAPI client, UUID fromAgentID, + UUID fromAgentSession, UUID toAgentID, + UUID imSessionID, uint timestamp, string fromAgentName, string message, byte dialog, bool fromGroup, byte offline, - uint ParentEstateID, LLVector3 Position, LLUUID RegionID, + uint ParentEstateID, Vector3 Position, UUID RegionID, byte[] binaryBucket) { bool dialogHandledElsewhere @@ -122,8 +122,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage // IM dialogs need to be pre-processed and have their sessionID filled by the server // so the sim can match the transaction on the return packet. - // Don't send a Friend Dialog IM with a LLUUID.Zero session. - if (!(dialogHandledElsewhere && imSessionID == LLUUID.Zero)) + // Don't send a Friend Dialog IM with a UUID.Zero session. + if (!(dialogHandledElsewhere && imSessionID == UUID.Zero)) { // Try root avatar only first foreach (Scene scene in m_scenes) @@ -195,10 +195,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage private void OnGridInstantMessage(GridInstantMessage msg) { // Trigger the above event handler - OnInstantMessage(null, new LLUUID(msg.fromAgentID), new LLUUID(msg.fromAgentSession), - new LLUUID(msg.toAgentID), new LLUUID(msg.imSessionID), msg.timestamp, msg.fromAgentName, + OnInstantMessage(null, new UUID(msg.fromAgentID), new UUID(msg.fromAgentSession), + new UUID(msg.toAgentID), new UUID(msg.imSessionID), msg.timestamp, msg.fromAgentName, msg.message, msg.dialog, msg.fromGroup, msg.offline, msg.ParentEstateID, - new LLVector3(msg.Position.x, msg.Position.y, msg.Position.z), new LLUUID(msg.RegionID), + new Vector3(msg.Position.X, msg.Position.Y, msg.Position.Z), new UUID(msg.RegionID), msg.binaryBucket); } @@ -214,10 +214,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage { bool successful = false; // various rational defaults - LLUUID fromAgentID = LLUUID.Zero; - LLUUID fromAgentSession = LLUUID.Zero; - LLUUID toAgentID = LLUUID.Zero; - LLUUID imSessionID = LLUUID.Zero; + UUID fromAgentID = UUID.Zero; + UUID fromAgentSession = UUID.Zero; + UUID toAgentID = UUID.Zero; + UUID imSessionID = UUID.Zero; uint timestamp = 0; string fromAgentName = ""; string message = ""; @@ -225,8 +225,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage bool fromGroup = false; byte offline = (byte)0; uint ParentEstateID=0; - LLVector3 Position = LLVector3.Zero; - LLUUID RegionID = LLUUID.Zero ; + Vector3 Position = Vector3.Zero; + UUID RegionID = UUID.Zero ; byte[] binaryBucket = new byte[0]; float pos_x = 0; @@ -248,11 +248,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage && requestData.ContainsKey("binary_bucket") && requestData.ContainsKey("region_handle")) { // Do the easy way of validating the UUIDs - Helpers.TryParse((string)requestData["from_agent_id"], out fromAgentID); - Helpers.TryParse((string)requestData["from_agent_session"], out fromAgentSession); - Helpers.TryParse((string)requestData["to_agent_id"], out toAgentID); - Helpers.TryParse((string)requestData["im_session_id"], out imSessionID); - Helpers.TryParse((string)requestData["region_id"], out RegionID); + UUID.TryParse((string)requestData["from_agent_id"], out fromAgentID); + UUID.TryParse((string)requestData["from_agent_session"], out fromAgentSession); + UUID.TryParse((string)requestData["to_agent_id"], out toAgentID); + UUID.TryParse((string)requestData["im_session_id"], out imSessionID); + UUID.TryParse((string)requestData["region_id"], out RegionID); # region timestamp try @@ -345,24 +345,24 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage } # endregion - Position = new LLVector3(pos_x, pos_y, pos_z); + Position = new Vector3(pos_x, pos_y, pos_z); binaryBucket = Convert.FromBase64String((string)requestData["binary_bucket"]); // Create a New GridInstantMessageObject the the data GridInstantMessage gim = new GridInstantMessage(); - gim.fromAgentID = fromAgentID.UUID; + gim.fromAgentID = fromAgentID.Guid; gim.fromAgentName = fromAgentName; - gim.fromAgentSession = fromAgentSession.UUID; + gim.fromAgentSession = fromAgentSession.Guid; gim.fromGroup = fromGroup; - gim.imSessionID = imSessionID.UUID; - gim.RegionID = RegionID.UUID; + gim.imSessionID = imSessionID.Guid; + gim.RegionID = RegionID.Guid; gim.timestamp = timestamp; - gim.toAgentID = toAgentID.UUID; + gim.toAgentID = toAgentID.Guid; gim.message = message; gim.dialog = dialog; gim.offline = offline; gim.ParentEstateID = ParentEstateID; - gim.Position = new sLLVector3(Position); + gim.Position = Position; gim.binaryBucket = binaryBucket; @@ -418,11 +418,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage /// /// /// - public delegate void GridInstantMessageDelegate(IClientAPI client, LLUUID fromAgentID, - LLUUID fromAgentSession, LLUUID toAgentID, - LLUUID imSessionID, uint timestamp, string fromAgentName, + public delegate void GridInstantMessageDelegate(IClientAPI client, UUID fromAgentID, + UUID fromAgentSession, UUID toAgentID, + UUID imSessionID, uint timestamp, string fromAgentName, string message, byte dialog, bool fromGroup, byte offline, - uint ParentEstateID, LLVector3 Position, LLUUID RegionID, + uint ParentEstateID, Vector3 Position, UUID RegionID, byte[] binaryBucket, ulong regionhandle, ulong prevRegionHandle); private void GridInstantMessageCompleted(IAsyncResult iar) @@ -432,11 +432,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage } - protected virtual void SendGridInstantMessageViaXMLRPC(IClientAPI client, LLUUID fromAgentID, - LLUUID fromAgentSession, LLUUID toAgentID, - LLUUID imSessionID, uint timestamp, string fromAgentName, + protected virtual void SendGridInstantMessageViaXMLRPC(IClientAPI client, UUID fromAgentID, + UUID fromAgentSession, UUID toAgentID, + UUID imSessionID, uint timestamp, string fromAgentName, string message, byte dialog, bool fromGroup, byte offline, - uint ParentEstateID, LLVector3 Position, LLUUID RegionID, + uint ParentEstateID, Vector3 Position, UUID RegionID, byte[] binaryBucket, ulong regionhandle, ulong prevRegionHandle) { GridInstantMessageDelegate d = SendGridInstantMessageViaXMLRPCAsync; @@ -459,11 +459,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage /// if it's the same as the user's looked up region handle, then we end the recursive loop /// /// - protected virtual void SendGridInstantMessageViaXMLRPCAsync(IClientAPI client, LLUUID fromAgentID, - LLUUID fromAgentSession, LLUUID toAgentID, - LLUUID imSessionID, uint timestamp, string fromAgentName, + protected virtual void SendGridInstantMessageViaXMLRPCAsync(IClientAPI client, UUID fromAgentID, + UUID fromAgentSession, UUID toAgentID, + UUID imSessionID, uint timestamp, string fromAgentName, string message, byte dialog, bool fromGroup, byte offline, - uint ParentEstateID, LLVector3 Position, LLUUID RegionID, + uint ParentEstateID, Vector3 Position, UUID RegionID, byte[] binaryBucket, ulong regionhandle, ulong prevRegionHandle) { UserAgentData upd = null; @@ -527,10 +527,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage if (reginfo != null) { GridInstantMessage msg = new GridInstantMessage(); - msg.fromAgentID = fromAgentID.UUID; - msg.fromAgentSession = fromAgentSession.UUID; - msg.toAgentID = toAgentID.UUID; - msg.imSessionID = imSessionID.UUID; + msg.fromAgentID = fromAgentID.Guid; + msg.fromAgentSession = fromAgentSession.Guid; + msg.toAgentID = toAgentID.Guid; + msg.imSessionID = imSessionID.Guid; msg.timestamp = timestamp; msg.fromAgentName = fromAgentName; msg.message = message; @@ -538,8 +538,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage msg.fromGroup = fromGroup; msg.offline = offline; msg.ParentEstateID = ParentEstateID; - msg.Position = new sLLVector3(Position); - msg.RegionID = RegionID.UUID; + msg.Position = Position; + msg.RegionID = RegionID.Guid; msg.binaryBucket = binaryBucket; Hashtable msgdata = ConvertGridInstantMessageToXMLRPC(msg); @@ -649,7 +649,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage /// /// UUID of region to get the region handle for /// - private ulong getLocalRegionHandleFromUUID(LLUUID regionID) + private ulong getLocalRegionHandleFromUUID(UUID regionID) { ulong returnhandle = 0; @@ -692,13 +692,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage byte[] offlinedata = new byte[1]; offlinedata[0] = msg.offline; gim["offline"] = Convert.ToBase64String(offlinedata, Base64FormattingOptions.None); gim["parent_estate_id"] = msg.ParentEstateID.ToString(); - gim["position_x"] = msg.Position.x.ToString(); - gim["position_y"] = msg.Position.y.ToString(); - gim["position_z"] = msg.Position.z.ToString(); + gim["position_x"] = msg.Position.X.ToString(); + gim["position_y"] = msg.Position.Y.ToString(); + gim["position_z"] = msg.Position.Z.ToString(); gim["region_id"] = msg.RegionID.ToString(); gim["binary_bucket"] = Convert.ToBase64String(msg.binaryBucket,Base64FormattingOptions.None); return gim; } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs index d036dbb20f..344cb5e6cf 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -46,10 +46,10 @@ 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 IDictionary m_pendingOffers = new Dictionary(); private List m_Scenelist = new List(); - private Dictionary m_AgentRegions = new Dictionary(); + private Dictionary m_AgentRegions = new Dictionary(); #region IRegionModule Members @@ -92,11 +92,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory client.OnInstantMessage += OnInstantMessage; } - private void OnInstantMessage(IClientAPI client, LLUUID fromAgentID, - LLUUID fromAgentSession, LLUUID toAgentID, - LLUUID imSessionID, uint timestamp, string fromAgentName, + private void OnInstantMessage(IClientAPI client, UUID fromAgentID, + UUID fromAgentSession, UUID toAgentID, + UUID imSessionID, uint timestamp, string fromAgentName, string message, byte dialog, bool fromGroup, byte offline, - uint ParentEstateID, LLVector3 Position, LLUUID RegionID, + uint ParentEstateID, Vector3 Position, UUID RegionID, byte[] binaryBucket) { if (dialog == (byte) InstantMessageDialog.InventoryOffered) @@ -117,8 +117,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory // Next 16 bytes are the UUID //Array.Copy(binaryBucket, 1, rawId, 0, 16); - //LLUUID itemId = new LLUUID(new Guid(rawId)); - LLUUID itemId = new LLUUID(binaryBucket, 1); + //UUID itemId = new UUID(new Guid(rawId)); + UUID itemId = new UUID(binaryBucket, 1); m_log.DebugFormat( "[AGENT INVENTORY]: ItemId for giving is {0}", itemId); @@ -225,12 +225,12 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory } } - public void SetRootAgentScene(LLUUID agentID, Scene scene) + public void SetRootAgentScene(UUID agentID, Scene scene) { m_AgentRegions[agentID] = scene; } - public bool NeedSceneCacheClear(LLUUID agentID, Scene scene) + public bool NeedSceneCacheClear(UUID agentID, Scene scene) { if (!m_AgentRegions.ContainsKey(agentID)) { @@ -279,7 +279,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory return false; } - public void ClientLoggedOut(LLUUID agentID) + public void ClientLoggedOut(UUID agentID) { if (m_AgentRegions.ContainsKey(agentID)) m_AgentRegions.Remove(agentID); diff --git a/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs index 20b1c1c44b..f9c0dcf218 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs @@ -27,7 +27,7 @@ using System; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -90,7 +90,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles /// /// /// - public void RequestAvatarProperty(IClientAPI remoteClient, LLUUID avatarID) + public void RequestAvatarProperty(IClientAPI remoteClient, UUID avatarID) { // FIXME: finish adding fields such as url, masking, etc. UserProfileData profile = m_scene.CommsManager.UserService.GetUserProfile(avatarID); @@ -104,7 +104,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles } else { - charterMember = Helpers.StringToField(profile.CustomType); + charterMember = Utils.StringToBytes(profile.CustomType); } remoteClient.SendAvatarProperties(profile.ID, profile.AboutText, diff --git a/OpenSim/Region/Environment/Modules/Avatar/Voice/AsterixVoice/AsteriskVoiceModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Voice/AsterixVoice/AsteriskVoiceModule.cs index 1f41a92deb..e3a9a45dfc 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Voice/AsterixVoice/AsteriskVoiceModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Voice/AsterixVoice/AsteriskVoiceModule.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using Nwc.XmlRpc; @@ -125,7 +125,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Voice.AsterixVoice #endregion - public void OnRegisterCaps(LLUUID agentID, Caps caps) + public void OnRegisterCaps(UUID agentID, Caps caps) { m_log.DebugFormat("[ASTERISKVOICE] OnRegisterCaps: agentID {0} caps {1}", agentID, caps); string capsBase = "/CAPS/" + caps.CapsObjectPath; @@ -157,7 +157,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Voice.AsterixVoice /// /// public string ParcelVoiceInfoRequest(string request, string path, string param, - LLUUID agentID, Caps caps) + UUID agentID, Caps caps) { // we need to do: // - send channel_uri: as "sip:regionID@m_sipDomain" @@ -226,7 +226,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Voice.AsterixVoice /// /// public string ProvisionVoiceAccountRequest(string request, string path, string param, - LLUUID agentID, Caps caps) + UUID agentID, Caps caps) { // we need to // - get user data from UserProfileCacheService @@ -289,4 +289,4 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Voice.AsterixVoice } } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Avatar/Voice/SIPVoice/SIPVoiceModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Voice/SIPVoice/SIPVoiceModule.cs index c6852f7a3c..bd89175721 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Voice/SIPVoice/SIPVoiceModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Voice/SIPVoice/SIPVoiceModule.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -98,7 +98,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Voice.SIPVoice #endregion - public void OnRegisterCaps(LLUUID agentID, Caps caps) + public void OnRegisterCaps(UUID agentID, Caps caps) { m_log.DebugFormat("[VOICE] OnRegisterCaps: agentID {0} caps {1}", agentID, caps); string capsBase = "/CAPS/" + caps.CapsObjectPath; @@ -130,7 +130,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Voice.SIPVoice /// /// public string ParcelVoiceInfoRequest(string request, string path, string param, - LLUUID agentID, Caps caps) + UUID agentID, Caps caps) { try { @@ -172,7 +172,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Voice.SIPVoice /// /// public string ProvisionVoiceAccountRequest(string request, string path, string param, - LLUUID agentID, Caps caps) + UUID agentID, Caps caps) { try { @@ -199,4 +199,4 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Voice.SIPVoice return null; } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/AuraMetaEntity.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/AuraMetaEntity.cs index f99bfc570f..dd592ddc4f 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/AuraMetaEntity.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/AuraMetaEntity.cs @@ -39,7 +39,7 @@ using System; using System.Collections.Generic; using System.Drawing; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -50,8 +50,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class AuraMetaEntity : PointMetaEntity @@ -59,13 +57,13 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Constructors //transparency of root part, NOT particle system. Should probably add support for changing particle system transparency. - public AuraMetaEntity(Scene scene, uint LocalId, LLVector3 groupPos, float transparency, LLVector3 color, LLVector3 scale) + public AuraMetaEntity(Scene scene, uint LocalId, Vector3 groupPos, float transparency, Vector3 color, Vector3 scale) : base(scene, LocalId, groupPos, transparency) { SetAura(color, scale); } - public AuraMetaEntity(Scene scene, LLUUID uuid, uint LocalId, LLVector3 groupPos, float transparency, LLVector3 color, LLVector3 scale) + public AuraMetaEntity(Scene scene, UUID uuid, uint LocalId, Vector3 groupPos, float transparency, Vector3 color, Vector3 scale) : base(scene, uuid, LocalId, groupPos, transparency) { SetAura(color, scale); @@ -75,7 +73,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Private Methods - private float Average(LLVector3 values) + private float Average(Vector3 values) { return (values.X + values.Y + values.Z)/3f; } @@ -84,12 +82,12 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Public Methods - public void SetAura(LLVector3 color, LLVector3 scale) + public void SetAura(Vector3 color, Vector3 scale) { SetAura(color, Average(scale) * 2.0f); } - public void SetAura(LLVector3 color, float radius) + public void SetAura(Vector3 color, float radius) { SceneObjectPart From = m_Entity.RootPart; @@ -110,7 +108,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement SetAura(From, color, radius, burstRadius, age, burstRate, patternFlags); } - public void SetAura(SceneObjectPart From, LLVector3 color, float radius, float burstRadius, float age, float burstRate, libsecondlife.Primitive.ParticleSystem.SourcePattern patternFlags) + public void SetAura(SceneObjectPart From, Vector3 color, float radius, float burstRadius, float age, float burstRate, Primitive.ParticleSystem.SourcePattern patternFlags) { Primitive.ParticleSystem prules = new Primitive.ParticleSystem(); //prules.PartDataFlags = Primitive.ParticleSystem.ParticleDataFlags.Emissive | @@ -139,7 +137,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement prules.PartAcceleration.Y = 0.0f; prules.PartAcceleration.Z = 0.0f; prules.Pattern = patternFlags; //PSYS_SRC_PATTERN - //prules.Texture = LLUUID.Zero;//= LLUUID //PSYS_SRC_TEXTURE, default used if blank + //prules.Texture = UUID.Zero;//= UUID //PSYS_SRC_TEXTURE, default used if blank prules.BurstRate = burstRate; //PSYS_SRC_BURST_RATE prules.BurstPartCount = 2; //PSYS_SRC_BURST_PART_COUNT //prules.BurstRadius = radius; //PSYS_SRC_BURST_RADIUS @@ -160,4 +158,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/BeamMetaEntity.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/BeamMetaEntity.cs index 9e39088593..b27bbc0222 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/BeamMetaEntity.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/BeamMetaEntity.cs @@ -39,7 +39,7 @@ using System; using System.Collections.Generic; using System.Drawing; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -50,21 +50,19 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class BeamMetaEntity : PointMetaEntity { #region Constructors - public BeamMetaEntity(Scene scene, uint LocalId, LLVector3 groupPos, float transparency, SceneObjectPart To, LLVector3 color) + public BeamMetaEntity(Scene scene, uint LocalId, Vector3 groupPos, float transparency, SceneObjectPart To, Vector3 color) : base(scene, LocalId, groupPos, transparency) { SetBeamToUUID(To, color); } - public BeamMetaEntity(Scene scene, LLUUID uuid, uint LocalId, LLVector3 groupPos, float transparency, SceneObjectPart To, LLVector3 color) + public BeamMetaEntity(Scene scene, UUID uuid, uint LocalId, Vector3 groupPos, float transparency, SceneObjectPart To, Vector3 color) : base(scene, uuid, LocalId, groupPos, transparency) { SetBeamToUUID(To, color); @@ -74,13 +72,13 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Public Methods - public void SetBeamToUUID(SceneObjectPart To, LLVector3 color) + public void SetBeamToUUID(SceneObjectPart To, Vector3 color) { SceneObjectPart From = m_Entity.RootPart; //Scale size of particles to distance objects are apart (for better visibility) - LLVector3 FromPos = From.GetWorldPosition(); - LLVector3 ToPos = From.GetWorldPosition(); -// LLUUID toUUID = To.UUID; + Vector3 FromPos = From.GetWorldPosition(); + Vector3 ToPos = From.GetWorldPosition(); + UUID toUUID = To.UUID; float distance = (float) (Math.Sqrt(Math.Pow(FromPos.X-ToPos.X, 2) + Math.Pow(FromPos.X-ToPos.Y, 2) + Math.Pow(FromPos.X-ToPos.Z, 2) @@ -94,7 +92,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement SetBeamToUUID(From, To, color, rate, scale, speed); } - public void SetBeamToUUID(SceneObjectPart From, SceneObjectPart To, LLVector3 color, float rate, float scale, float speed) + public void SetBeamToUUID(SceneObjectPart From, SceneObjectPart To, Vector3 color, float rate, float scale, float speed) { Primitive.ParticleSystem prules = new Primitive.ParticleSystem(); //prules.PartDataFlags = Primitive.ParticleSystem.ParticleDataFlags.Emissive | @@ -118,7 +116,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement prules.PartAcceleration.Y = 0.0f; prules.PartAcceleration.Z = 0.0f; //prules.Pattern = Primitive.ParticleSystem.SourcePattern.Explode; //PSYS_SRC_PATTERN - //prules.Texture = LLUUID.Zero;//= LLUUID //PSYS_SRC_TEXTURE, default used if blank + //prules.Texture = UUID.Zero;//= UUID //PSYS_SRC_TEXTURE, default used if blank prules.BurstRate = rate; //PSYS_SRC_BURST_RATE prules.BurstPartCount = 1; //PSYS_SRC_BURST_PART_COUNT prules.BurstRadius = 0.5f; //PSYS_SRC_BURST_RADIUS @@ -138,4 +136,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs index 6ccb646a56..072de5e11a 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs @@ -39,7 +39,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Threading; -using libsecondlife; +using OpenMetaverse; using OpenSim; using OpenSim.Framework; @@ -49,8 +49,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { /// @@ -266,7 +264,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement /// /// Only called by the MainLoop. /// - private void UndoDid(CMModel model, CMView view, LLUUID uuid) + private void UndoDid(CMModel model, CMView view, UUID uuid) { if ((m_state & State.SHOWING_CHANGES) > 0) { @@ -289,7 +287,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_WorkQueue.Enqueue(moreWork); } - protected void ObjectDuplicated(uint localID, LLVector3 offset, uint dupeFlags, LLUUID AgentID, LLUUID GroupID) + protected void ObjectDuplicated(uint localID, Vector3 offset, uint dupeFlags, UUID AgentID, UUID GroupID) { Work moreWork = new Work(); moreWork.Type = WorkType.OBJECTDUPLICATED; @@ -298,8 +296,8 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_log.Debug("[CONTENT MANAGEMENT] dup queue"); } - protected void ObjectDuplicatedOnRay(uint localID, uint dupeFlags, LLUUID AgentID, LLUUID GroupID, - LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart, + protected void ObjectDuplicatedOnRay(uint localID, uint dupeFlags, UUID AgentID, UUID GroupID, + UUID RayTargetObj, Vector3 RayEnd, Vector3 RayStart, bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates) { Work moreWork = new Work(); @@ -318,7 +316,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_log.Debug("[CONTENT MANAGEMENT] new client"); } - protected void OnUnDid(IClientAPI remoteClient, LLUUID primId) + protected void OnUnDid(IClientAPI remoteClient, UUID primId) { Work moreWork = new Work(); moreWork.Type = WorkType.UNDODID; @@ -405,7 +403,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement /// /// /// - protected void StopManaging(LLUUID clientUUID) + protected void StopManaging(UUID clientUUID) { foreach(Object sceneobj in m_sceneList.Values) { @@ -433,7 +431,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement } } - protected void UpdateMultiplePosition(uint localID, LLVector3 pos, IClientAPI remoteClient) + protected void UpdateMultiplePosition(uint localID, Vector3 pos, IClientAPI remoteClient) { Work moreWork = new Work(); moreWork.Type = WorkType.OBJECTATTRIBUTECHANGE; @@ -442,7 +440,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_log.Debug("[CONTENT MANAGEMENT] pos"); } - protected void UpdateMultipleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) + protected void UpdateMultipleRotation(uint localID, Quaternion rot, IClientAPI remoteClient) { Work moreWork = new Work(); moreWork.Type = WorkType.OBJECTATTRIBUTECHANGE; @@ -451,7 +449,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_log.Debug("[CONTENT MANAGEMENT] rot"); } - protected void UpdateMultipleScale(uint localID, LLVector3 scale, IClientAPI remoteClient) + protected void UpdateMultipleScale(uint localID, Vector3 scale, IClientAPI remoteClient) { Work moreWork = new Work(); moreWork.Type = WorkType.OBJECTATTRIBUTECHANGE; @@ -460,8 +458,8 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_log.Debug("[CONTENT MANAGEMENT]scale"); } - protected void UpdateNewParts(LLUUID ownerID, LLVector3 RayEnd, LLQuaternion rot, PrimitiveBaseShape shape, - byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID, + protected void UpdateNewParts(UUID ownerID, Vector3 RayEnd, Quaternion rot, PrimitiveBaseShape shape, + byte bypassRaycast, Vector3 RayStart, UUID RayTargetID, byte RayEndIsIntersection) { Work moreWork = new Work(); @@ -471,7 +469,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_log.Debug("[CONTENT MANAGEMENT] new parts"); } - protected void UpdateSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient) + protected void UpdateSinglePosition(uint localID, Vector3 pos, IClientAPI remoteClient) { Work moreWork = new Work(); moreWork.Type = WorkType.OBJECTATTRIBUTECHANGE; @@ -483,7 +481,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement /// /// /// - protected void UpdateSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) + protected void UpdateSingleRotation(uint localID, Quaternion rot, IClientAPI remoteClient) { Work moreWork = new Work(); moreWork.Type = WorkType.OBJECTATTRIBUTECHANGE; @@ -492,7 +490,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_log.Debug("[CONTENT MANAGEMENT] rot"); } - protected void UpdateSingleScale(uint localID, LLVector3 scale, IClientAPI remoteClient) + protected void UpdateSingleScale(uint localID, Vector3 scale, IClientAPI remoteClient) { Work moreWork = new Work(); moreWork.Type = WorkType.OBJECTATTRIBUTECHANGE; @@ -723,7 +721,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement public Object Data2; //Just more space for holding data. public uint LocalId; //Convenient public WorkType Type; - public LLUUID UUID; //Convenient + public UUID UUID; //Convenient #endregion Fields } @@ -745,4 +743,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Other } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMEntityCollection.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMEntityCollection.cs index 454429ce70..996badf183 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMEntityCollection.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMEntityCollection.cs @@ -40,7 +40,7 @@ using System.Collections; using System.Collections.Generic; using System.Threading; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -52,8 +52,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class CMEntityCollection @@ -63,12 +61,12 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement // private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); // Any ContentManagementEntities that represent old versions of current SceneObjectGroups or // old versions of deleted SceneObjectGroups will be stored in this hash table. - // The LLUUID keys are from the SceneObjectGroup RootPart UUIDs - protected Hashtable m_CMEntityHash = Hashtable.Synchronized(new Hashtable()); //LLUUID to ContentManagementEntity + // The UUID keys are from the SceneObjectGroup RootPart UUIDs + protected Hashtable m_CMEntityHash = Hashtable.Synchronized(new Hashtable()); //UUID to ContentManagementEntity // SceneObjectParts that have not been revisioned will be given green auras stored in this hashtable - // The LLUUID keys are from the SceneObjectPart that they are supposed to be on. - protected Hashtable m_NewlyCreatedEntityAura = Hashtable.Synchronized(new Hashtable()); //LLUUID to AuraMetaEntity + // The UUID keys are from the SceneObjectPart that they are supposed to be on. + protected Hashtable m_NewlyCreatedEntityAura = Hashtable.Synchronized(new Hashtable()); //UUID to AuraMetaEntity #endregion Fields @@ -151,7 +149,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement part.ParentGroup.Scene.PrimIDAllocate(), part.GetWorldPosition(), MetaEntity.TRANSLUCENT, - new LLVector3(0,254,0), + new Vector3(0,254,0), part.Scale ); m_NewlyCreatedEntityAura.Add(part.UUID, ent); @@ -175,7 +173,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement return ent; } - public bool RemoveEntity(LLUUID uuid) + public bool RemoveEntity(UUID uuid) { if (!m_CMEntityHash.ContainsKey(uuid)) return false; @@ -183,7 +181,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement return true; } - public bool RemoveNewlyCreatedEntityAura(LLUUID uuid) + public bool RemoveNewlyCreatedEntityAura(UUID uuid) { if (!m_NewlyCreatedEntityAura.ContainsKey(uuid)) return false; @@ -193,4 +191,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMModel.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMModel.cs index 92ae0d72fe..e1b4129c6f 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMModel.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMModel.cs @@ -39,7 +39,7 @@ using System.Collections; using System.Collections.Generic; using System.Diagnostics; -using libsecondlife; +using OpenMetaverse; using OpenSim; using OpenSim.Framework; @@ -49,8 +49,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class CMModel @@ -133,14 +131,14 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_MetaEntityCollection.ClearAll(); } - public ContentManagementEntity FindMetaEntityAffectedByUndo(LLUUID uuid) + public ContentManagementEntity FindMetaEntityAffectedByUndo(UUID uuid) { ContentManagementEntity ent = GetMetaGroupByPrim(uuid); return ent; } //-------------------------------- HELPERS --------------------------------------------------------------------// - public ContentManagementEntity GetMetaGroupByPrim(LLUUID uuid) + public ContentManagementEntity GetMetaGroupByPrim(UUID uuid) { foreach (Object ent in m_MetaEntityCollection.Entities.Values) { @@ -194,7 +192,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement SceneObjectGroup temp = null; System.Collections.Hashtable deleteListUUIDs = new Hashtable(); // Dictionary SearchList = new Dictionary(); - Dictionary ReplacementList = new Dictionary(); + Dictionary ReplacementList = new Dictionary(); int revision = m_database.GetMostRecentRevision(scene.RegionInfo.RegionID); // EntityBase[] searchArray; @@ -255,14 +253,14 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement break; } - foreach(LLUUID uuid in deleteListUUIDs.Keys) + foreach(UUID uuid in deleteListUUIDs.Keys) { try { // I thought that the DeleteGroup() function would handle all of this, but it doesn't. I'm not sure WHAT it handles. ((SceneObjectGroup)scene.Entities[uuid]).DetachFromBackup((SceneObjectGroup)scene.Entities[uuid]); scene.PhysicsScene.RemovePrim(((SceneObjectGroup)scene.Entities[uuid]).RootPart.PhysActor); - scene.SendKillObject(scene.Entities[uuid].LocalId); + scene.SendKiPrimitive(scene.Entities[uuid].LocalId); scene.m_innerScene.DeleteSceneObject(uuid, false); ((SceneObjectGroup)scene.Entities[uuid]).DeleteGroup(); } @@ -284,7 +282,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement if (!(ent is SceneObjectGroup)) continue; - if ((((SceneObjectGroup)ent).RootPart.GetEffectiveObjectFlags() & (uint) LLObject.ObjectFlags.Phantom) == 0) + if ((((SceneObjectGroup)ent).RootPart.GetEffectiveObjectFlags() & (uint) PrimFlags.Phantom) == 0) ((SceneObjectGroup)ent).ApplyPhysics(true); ((SceneObjectGroup)ent).AttachToBackup(); ((SceneObjectGroup)ent).HasGroupChanged = true; // If not true, then attaching to backup does nothing because no change is detected. @@ -346,7 +344,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement { if (m_MetaEntityCollection.Auras.ContainsKey(part.UUID)) { - ((AuraMetaEntity)m_MetaEntityCollection.Auras[part.UUID]).SetAura(new LLVector3(0,254,0), part.Scale); + ((AuraMetaEntity)m_MetaEntityCollection.Auras[part.UUID]).SetAura(new Vector3(0,254,0), part.Scale); ((AuraMetaEntity)m_MetaEntityCollection.Auras[part.UUID]).RootPart.GroupPosition = part.GetWorldPosition(); auraList.Add((AuraMetaEntity)m_MetaEntityCollection.Auras[part.UUID]); } @@ -356,4 +354,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMView.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMView.cs index fca283075a..90ef6ef4b4 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMView.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMView.cs @@ -39,7 +39,7 @@ using System; using System.Collections; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim; using OpenSim.Framework; @@ -49,8 +49,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class CMView @@ -136,7 +134,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement SendSimChatMessage(scene, menu); } - public void DisplayMetaEntity(LLUUID uuid) + public void DisplayMetaEntity(UUID uuid) { ContentManagementEntity group = m_model.GetMetaGroupByPrim(uuid); if (group != null) @@ -199,10 +197,10 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement public void SendSimChatMessage(Scene scene, string message) { - scene.SimChat(Helpers.StringToField(message), - ChatTypeEnum.Broadcast, 0, new LLVector3(0,0,0), "Content Manager", LLUUID.Zero, false); + scene.SimChat(Utils.StringToBytes(message), + ChatTypeEnum.Broadcast, 0, new Vector3(0,0,0), "Content Manager", UUID.Zero, false); } #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/ContentManagementEntity.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/ContentManagementEntity.cs index 8e0dd3336a..819ff87342 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/ContentManagementEntity.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/ContentManagementEntity.cs @@ -38,7 +38,7 @@ using System; using System.Collections.Generic; using System.Drawing; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -49,8 +49,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class ContentManagementEntity : MetaEntity @@ -64,8 +62,8 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Fields - protected Dictionary m_AuraEntities = new Dictionary(); - protected Dictionary m_BeamEntities = new Dictionary(); + protected Dictionary m_AuraEntities = new Dictionary(); + protected Dictionary m_BeamEntities = new Dictionary(); // The LinkNum of parts in m_Entity and m_UnchangedEntity are the same though UUID and LocalId are different. // This can come in handy. @@ -108,7 +106,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement /// /// Check if an entitybase list (like that returned by scene.GetEntities() ) contains a group with the rootpart uuid that matches the current uuid. /// - private bool ContainsKey(List list, LLUUID uuid) + private bool ContainsKey(List list, UUID uuid) { foreach( EntityBase part in list) if (part.UUID == uuid) @@ -116,7 +114,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement return false; } - private SceneObjectGroup GetGroupByUUID(System.Collections.Generic.List list, LLUUID uuid) + private SceneObjectGroup GetGroupByUUID(System.Collections.Generic.List list, UUID uuid) { foreach (EntityBase ent in list) { @@ -150,7 +148,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement // if already displaying a red aura over part, make sure its red if (m_AuraEntities.ContainsKey(part.UUID)) { - m_AuraEntities[part.UUID].SetAura(new LLVector3(254,0,0), part.Scale); + m_AuraEntities[part.UUID].SetAura(new Vector3(254,0,0), part.Scale); } else { @@ -158,7 +156,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_Entity.Scene.PrimIDAllocate(), part.GetWorldPosition(), MetaEntity.TRANSLUCENT, - new LLVector3(254,0,0), + new Vector3(254,0,0), part.Scale ); m_AuraEntities.Add(part.UUID, auraGroup); @@ -189,7 +187,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement /// /// Check if the revisioned scene object group that this CMEntity is based off of contains a child with the given UUID. /// - public bool HasChildPrim(LLUUID uuid) + public bool HasChildPrim(UUID uuid) { if (m_UnchangedEntity.Children.ContainsKey(uuid)) return true; @@ -266,7 +264,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_UnchangedEntity.RootPart.GetWorldPosition(), MetaEntity.TRANSLUCENT, sceneEntityPart, - new LLVector3(0,0,254) + new Vector3(0,0,254) ); m_BeamEntities.Add(m_UnchangedEntity.RootPart.UUID, beamGroup); } @@ -280,7 +278,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_Entity.Scene.PrimIDAllocate(), UnchangedPart.GetWorldPosition(), MetaEntity.TRANSLUCENT, - new LLVector3(0,0,254), + new Vector3(0,0,254), UnchangedPart.Scale ); m_AuraEntities.Add(UnchangedPart.UUID, auraGroup); @@ -314,7 +312,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_Entity.Scene.PrimIDAllocate(), UnchangedPart.GetWorldPosition(), MetaEntity.TRANSLUCENT, - new LLVector3(254,0,0), + new Vector3(254,0,0), UnchangedPart.Scale ); m_AuraEntities.Add(UnchangedPart.UUID, auraGroup); @@ -386,4 +384,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/ContentManagementModule.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/ContentManagementModule.cs index d5423e09c0..85eb927cb6 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/ContentManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/ContentManagementModule.cs @@ -36,7 +36,7 @@ using System; using System.Collections.Generic; using System.Threading; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -48,8 +48,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class ContentManagementModule : IRegionModule @@ -162,4 +160,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/FileSystemDatabase.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/FileSystemDatabase.cs index c6753650e3..66d279aff3 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/FileSystemDatabase.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/FileSystemDatabase.cs @@ -40,7 +40,7 @@ using Slash = System.IO.Path; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -53,8 +53,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class FileSystemDatabase : IContentDatabase @@ -70,8 +68,8 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Fields private string m_repodir = null; - private Dictionary m_scenes = new Dictionary(); - private Dictionary m_serialiser = new Dictionary(); + private Dictionary m_scenes = new Dictionary(); + private Dictionary m_serialiser = new Dictionary(); #endregion Fields @@ -92,7 +90,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement if (!Directory.Exists(m_repodir)) Directory.CreateDirectory(m_repodir); - foreach (LLUUID region in m_scenes.Keys) + foreach (UUID region in m_scenes.Keys) { scenedir = m_repodir + Slash.DirectorySeparatorChar + region + Slash.DirectorySeparatorChar; if (!Directory.Exists(scenedir)) @@ -104,7 +102,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement private void SetupSerialiser() { if (m_serialiser.Count == 0) - foreach(LLUUID region in m_scenes.Keys) + foreach(UUID region in m_scenes.Keys) m_serialiser.Add(region, m_scenes[region].RequestModuleInterface() ); @@ -114,12 +112,12 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Public Methods - public int GetMostRecentRevision(LLUUID regionid) + public int GetMostRecentRevision(UUID regionid) { return NumOfRegionRev(regionid); } - public string GetRegionObjectHeightMap(LLUUID regionid) + public string GetRegionObjectHeightMap(UUID regionid) { String filename = m_repodir + Slash.DirectorySeparatorChar + regionid + Slash.DirectorySeparatorChar + "heightmap.r32"; @@ -131,7 +129,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement return result; } - public string GetRegionObjectHeightMap(LLUUID regionid, int revision) + public string GetRegionObjectHeightMap(UUID regionid, int revision) { String filename = m_repodir + Slash.DirectorySeparatorChar + regionid + Slash.DirectorySeparatorChar + "heightmap.r32"; @@ -143,7 +141,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement return result; } - public System.Collections.ArrayList GetRegionObjectXMLList(LLUUID regionid, int revision) + public System.Collections.ArrayList GetRegionObjectXMLList(UUID regionid, int revision) { System.Collections.ArrayList objectList = new System.Collections.ArrayList(); string filename = m_repodir + Slash.DirectorySeparatorChar + regionid + Slash.DirectorySeparatorChar + @@ -169,7 +167,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement return null; } - public System.Collections.ArrayList GetRegionObjectXMLList(LLUUID regionid) + public System.Collections.ArrayList GetRegionObjectXMLList(UUID regionid) { int revision = NumOfRegionRev(regionid); m_log.Info("[FSDB]: found revisions:" + revision); @@ -215,7 +213,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement m_scenes.Add(scene.RegionInfo.RegionID, scene); } - public System.Collections.Generic.SortedDictionary ListOfRegionRevisions(LLUUID regionid) + public System.Collections.Generic.SortedDictionary ListOfRegionRevisions(UUID regionid) { SortedDictionary revisionDict = new SortedDictionary(); @@ -244,7 +242,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement return revisionDict; } - public int NumOfRegionRev(LLUUID regionid) + public int NumOfRegionRev(UUID regionid) { string scenedir = m_repodir + Slash.DirectorySeparatorChar + regionid + Slash.DirectorySeparatorChar; m_log.Info("[FSDB]: Reading scene dir: " + scenedir); @@ -261,7 +259,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement CreateDirectory(); } - public void SaveRegion(LLUUID regionid, string regionName, string logMessage) + public void SaveRegion(UUID regionid, string regionName, string logMessage) { m_log.Info("[FSDB]: ..............................."); string scenedir = m_repodir + Slash.DirectorySeparatorChar + regionid + Slash.DirectorySeparatorChar; @@ -311,4 +309,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/GitDatabase.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/GitDatabase.cs index 6417a0f651..9fd542c4d7 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/GitDatabase.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/GitDatabase.cs @@ -41,7 +41,7 @@ using Slash = System.IO.Path; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -54,8 +54,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { /// @@ -73,57 +71,57 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Public Methods - public SceneObjectGroup GetMostRecentObjectRevision(LLUUID id) + public SceneObjectGroup GetMostRecentObjectRevision(UUID id) { return null; } - public int GetMostRecentRevision(LLUUID regionid) + public int GetMostRecentRevision(UUID regionid) { return 0; } - public SceneObjectGroup GetObjectRevision(LLUUID id, int revision) + public SceneObjectGroup GetObjectRevision(UUID id, int revision) { return null; } - public System.Collections.ArrayList GetObjectsFromRegion(LLUUID regionid, int revision) + public System.Collections.ArrayList GetObjectsFromRegion(UUID regionid, int revision) { return null; } - public string GetRegionObjectHeightMap(LLUUID regionid) + public string GetRegionObjectHeightMap(UUID regionid) { return null; } - public string GetRegionObjectHeightMap(LLUUID regionid, int revision) + public string GetRegionObjectHeightMap(UUID regionid, int revision) { return null; } - public string GetRegionObjectXML(LLUUID regionid) + public string GetRegionObjectXML(UUID regionid) { return null; } - public string GetRegionObjectXML(LLUUID regionid, int revision) + public string GetRegionObjectXML(UUID regionid, int revision) { return null; } - public System.Collections.ArrayList GetRegionObjectXMLList(LLUUID regionid) + public System.Collections.ArrayList GetRegionObjectXMLList(UUID regionid) { return null; } - public System.Collections.ArrayList GetRegionObjectXMLList(LLUUID regionid, int revision) + public System.Collections.ArrayList GetRegionObjectXMLList(UUID regionid, int revision) { return null; } - public bool InRepository(LLUUID id) + public bool InRepository(UUID id) { return false; } @@ -132,22 +130,22 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement { } - public System.Collections.Generic.SortedDictionary ListOfObjectRevisions(LLUUID id) + public System.Collections.Generic.SortedDictionary ListOfObjectRevisions(UUID id) { return null; } - public System.Collections.Generic.SortedDictionary ListOfRegionRevisions(LLUUID id) + public System.Collections.Generic.SortedDictionary ListOfRegionRevisions(UUID id) { return null; } - public int NumOfObjectRev(LLUUID id) + public int NumOfObjectRev(UUID id) { return 0; } - public int NumOfRegionRev(LLUUID regionid) + public int NumOfRegionRev(UUID regionid) { return 0; } @@ -160,10 +158,10 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement { } - public void SaveRegion(LLUUID regionid, string regionName, string logMessage) + public void SaveRegion(UUID regionid, string regionName, string logMessage) { } #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/IContentDatabase.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/IContentDatabase.cs index 6a940d38d4..638172b37b 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/IContentDatabase.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/IContentDatabase.cs @@ -36,11 +36,8 @@ #endregion Header using System; - -using libsecondlife; - +using OpenMetaverse; using OpenSim.Region.Environment.Scenes; - using Nini.Config; namespace OpenSim.Region.Environment.Modules.ContentManagement @@ -52,18 +49,18 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement /// /// Returns the most recent revision number of a region. /// - int GetMostRecentRevision(LLUUID regionid); + int GetMostRecentRevision(UUID regionid); - string GetRegionObjectHeightMap(LLUUID regionid); + string GetRegionObjectHeightMap(UUID regionid); - string GetRegionObjectHeightMap(LLUUID regionid, int revision); + string GetRegionObjectHeightMap(UUID regionid, int revision); /// /// Retrieves the xml that describes each individual object from the last revision or specific revision of the given region. /// - System.Collections.ArrayList GetRegionObjectXMLList(LLUUID regionid); + System.Collections.ArrayList GetRegionObjectXMLList(UUID regionid); - System.Collections.ArrayList GetRegionObjectXMLList(LLUUID regionid, int revision); + System.Collections.ArrayList GetRegionObjectXMLList(UUID regionid, int revision); /// /// Similar to the IRegionModule function. This is the function to be called before attempting to interface with the database. @@ -75,12 +72,12 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement /// /// Returns a list of the revision numbers and corresponding log messages for a given region. /// - System.Collections.Generic.SortedDictionary ListOfRegionRevisions(LLUUID id); + System.Collections.Generic.SortedDictionary ListOfRegionRevisions(UUID id); /// /// Returns the total number of revisions saved for a specific region. /// - int NumOfRegionRev(LLUUID regionid); + int NumOfRegionRev(UUID regionid); /// /// Should be called once after Initialise has been called. @@ -90,8 +87,8 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement /// /// Saves the Region terrain map and objects within the region as xml to the database. /// - void SaveRegion(LLUUID regionid, string regionName, string logMessage); + void SaveRegion(UUID regionid, string regionName, string logMessage); #endregion Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/MetaEntity.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/MetaEntity.cs index 4823bfddcb..5a6dbc8093 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/MetaEntity.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/MetaEntity.cs @@ -39,7 +39,7 @@ using System; using System.Collections.Generic; using System.Drawing; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -50,8 +50,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class MetaEntity @@ -109,7 +107,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Public Properties - public Dictionary Children + public Dictionary Children { get { return m_Entity.Children; } set { m_Entity.Children = value; } @@ -142,7 +140,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement get { return m_Entity.Scene; } } - public LLUUID UUID + public UUID UUID { get { return m_Entity.UUID; } set { m_Entity.UUID = value; } @@ -161,7 +159,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement protected void Initialize(bool physics) { //make new uuids - Dictionary parts = new Dictionary(); + Dictionary parts = new Dictionary(); foreach(SceneObjectPart part in m_Entity.Children.Values) { part.ResetIDs(part.LinkNum); @@ -191,7 +189,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement //This is important because we are not IN any database. //m_Entity.FakeDeleteGroup(); foreach( SceneObjectPart part in m_Entity.Children.Values) - client.SendKillObject(m_Entity.RegionHandle, part.LocalId); + client.SendKiPrimitive(m_Entity.RegionHandle, part.LocalId); } /// @@ -201,7 +199,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement { foreach( SceneObjectPart part in m_Entity.Children.Values) m_Entity.Scene.ClientManager.ForEachClient(delegate(IClientAPI controller) - { controller.SendKillObject(m_Entity.RegionHandle, part.LocalId); } + { controller.SendKiPrimitive(m_Entity.RegionHandle, part.LocalId); } ); } @@ -237,12 +235,12 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement /// public static void SetPartTransparency(SceneObjectPart part, float transparencyAmount) { - LLObject.TextureEntry tex = null; - LLColor texcolor; + Primitive.TextureEntry tex = null; + Color4 texcolor; try { tex = part.Shape.Textures; - texcolor = new LLColor(); + texcolor = new Color4(); } catch(Exception) { @@ -280,4 +278,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/PointMetaEntity.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/PointMetaEntity.cs index cafc2bf9ea..b0c69558cc 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/PointMetaEntity.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/PointMetaEntity.cs @@ -39,7 +39,7 @@ using System; using System.Collections.Generic; using System.Drawing; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -50,22 +50,20 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { public class PointMetaEntity : MetaEntity { #region Constructors - public PointMetaEntity(Scene scene, uint LocalId, LLVector3 groupPos, float transparency) + public PointMetaEntity(Scene scene, uint LocalId, Vector3 groupPos, float transparency) : base() { - CreatePointEntity(scene, LLUUID.Random(), LocalId, groupPos); + CreatePointEntity(scene, UUID.Random(), LocalId, groupPos); SetPartTransparency(m_Entity.RootPart, transparency); } - public PointMetaEntity(Scene scene, LLUUID uuid, uint LocalId, LLVector3 groupPos, float transparency) + public PointMetaEntity(Scene scene, UUID uuid, uint LocalId, Vector3 groupPos, float transparency) : base() { CreatePointEntity(scene, uuid, LocalId, groupPos); @@ -76,7 +74,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Private Methods - private void CreatePointEntity(Scene scene, LLUUID uuid, uint LocalId, LLVector3 groupPos) + private void CreatePointEntity(Scene scene, UUID uuid, uint LocalId, Vector3 groupPos) { SceneObjectGroup x = new SceneObjectGroup(); SceneObjectPart y = new SceneObjectPart(); @@ -85,23 +83,23 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement y.Name = "Very Small Point"; y.RegionHandle = scene.RegionInfo.RegionHandle; y.CreationDate = (Int32) (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; - y.OwnerID = LLUUID.Zero; - y.CreatorID = LLUUID.Zero; - y.LastOwnerID = LLUUID.Zero; + y.OwnerID = UUID.Zero; + y.CreatorID = UUID.Zero; + y.LastOwnerID = UUID.Zero; y.UUID = uuid; y.LocalId = LocalId; y.Shape = PrimitiveBaseShape.CreateBox(); - y.Scale = new LLVector3(0.01f,0.01f,0.01f); - y.LastOwnerID = LLUUID.Zero; + y.Scale = new Vector3(0.01f,0.01f,0.01f); + y.LastOwnerID = UUID.Zero; y.GroupPosition = groupPos; - y.OffsetPosition = new LLVector3(0, 0, 0); - y.RotationOffset = new LLQuaternion(0,0,0,0); - y.Velocity = new LLVector3(0, 0, 0); - y.RotationalVelocity = new LLVector3(0, 0, 0); - y.AngularVelocity = new LLVector3(0, 0, 0); - y.Acceleration = new LLVector3(0, 0, 0); + y.OffsetPosition = new Vector3(0, 0, 0); + y.RotationOffset = new Quaternion(0,0,0,0); + y.Velocity = new Vector3(0, 0, 0); + y.RotationalVelocity = new Vector3(0, 0, 0); + y.AngularVelocity = new Vector3(0, 0, 0); + y.Acceleration = new Vector3(0, 0, 0); y.Flags = 0; y.TrimPermissions(); @@ -121,4 +119,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Private Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/SceneObjectGroupDiff.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/SceneObjectGroupDiff.cs index 38938c66cb..ba937f59d5 100644 --- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/SceneObjectGroupDiff.cs +++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/SceneObjectGroupDiff.cs @@ -37,7 +37,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; -using libsecondlife; +using OpenMetaverse; using Nini.Config; @@ -48,8 +48,6 @@ using OpenSim.Region.Physics.Manager; using log4net; -using Axiom.Math; - namespace OpenSim.Region.Environment.Modules.ContentManagement { #region Enumerations @@ -99,14 +97,14 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #region Private Methods - private static bool AreQuaternionsEquivalent(LLQuaternion first, LLQuaternion second) + private static bool AreQuaternionsEquivalent(Quaternion first, Quaternion second) { - LLVector3 firstVector = llRot2Euler(first); - LLVector3 secondVector = llRot2Euler(second); + Vector3 firstVector = llRot2Euler(first); + Vector3 secondVector = llRot2Euler(second); return AreVectorsEquivalent(firstVector, secondVector); } - private static bool AreVectorsEquivalent(LLVector3 first, LLVector3 second) + private static bool AreVectorsEquivalent(Vector3 first, Vector3 second) { if(TruncateSignificant(first.X, 2) == TruncateSignificant(second.X, 2) && TruncateSignificant(first.Y, 2) == TruncateSignificant(second.Y, 2) @@ -133,21 +131,21 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement // Taken from Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs // Also changed the original function from LSL_Types to LL types - private static LLVector3 llRot2Euler(LLQuaternion r) + private static Vector3 llRot2Euler(Quaternion r) { - LLQuaternion t = new LLQuaternion(r.X * r.X, r.Y * r.Y, r.Z * r.Z, r.W * r.W); + Quaternion t = new Quaternion(r.X * r.X, r.Y * r.Y, r.Z * r.Z, r.W * r.W); double m = (t.X + t.Y + t.Z + t.W); - if (m == 0) return new LLVector3(); + if (m == 0) return new Vector3(); double n = 2 * (r.Y * r.W + r.X * r.Z); double p = m * m - n * n; if (p > 0) - return new LLVector3((float)NormalizeAngle(Math.Atan2(2.0 * (r.X * r.W - r.Y * r.Z), (-t.X - t.Y + t.Z + t.W))), + return new Vector3((float)NormalizeAngle(Math.Atan2(2.0 * (r.X * r.W - r.Y * r.Z), (-t.X - t.Y + t.Z + t.W))), (float)NormalizeAngle(Math.Atan2(n, Math.Sqrt(p))), (float)NormalizeAngle(Math.Atan2(2.0 * (r.Z * r.W - r.X * r.Y), (t.X - t.Y - t.Z + t.W)))); else if (n > 0) - return new LLVector3(0.0f, (float)(Math.PI / 2), (float)NormalizeAngle(Math.Atan2((r.Z * r.W + r.X * r.Y), 0.5 - t.X - t.Z))); + return new Vector3(0.0f, (float)(Math.PI / 2), (float)NormalizeAngle(Math.Atan2((r.Z * r.W + r.X * r.Y), 0.5 - t.X - t.Z))); else - return new LLVector3(0.0f, (float)(-Math.PI / 2), (float)NormalizeAngle(Math.Atan2((r.Z * r.W + r.X * r.Y), 0.5 - t.X - t.Z))); + return new Vector3(0.0f, (float)(-Math.PI / 2), (float)NormalizeAngle(Math.Atan2((r.Z * r.W + r.X * r.Y), 0.5 - t.X - t.Z))); } #endregion Private Methods @@ -187,7 +185,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement result |= Diff.ROTATIONOFFSET; - // MISC COMPARISONS (LLUUID, Byte) + // MISC COMPARISONS (UUID, Byte) if(first.ClickAction != second.ClickAction) result |= Diff.CLICKACTION; if(first.ObjectOwner != second.ObjectOwner) @@ -217,4 +215,4 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement #endregion Public Methods } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs index 8fad62f8e2..8fd41048ba 100644 --- a/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs +++ b/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs @@ -37,8 +37,8 @@ using System.Reflection; using System.Text.RegularExpressions; using System.Threading; -using libsecondlife; -using libsecondlife.StructuredData; +using OpenMetaverse; +using OpenMetaverse.StructuredData; using log4net; using Nini.Config; @@ -50,9 +50,9 @@ using OpenSim.Region.Environment.Scenes; using OpenSim.Framework.Communications.Cache; using OpenSim.Framework.Communications.Capabilities; using OpenSim.Framework.Statistics; -using LLSD = libsecondlife.StructuredData.LLSD; -using LLSDMap = libsecondlife.StructuredData.LLSDMap; -using LLSDArray = libsecondlife.StructuredData.LLSDArray; +using LLSD = OpenMetaverse.StructuredData.LLSD; +using LLSDMap = OpenMetaverse.StructuredData.LLSDMap; +using LLSDArray = OpenMetaverse.StructuredData.LLSDArray; namespace OpenSim.Region.Environment.Modules.InterGrid { @@ -60,12 +60,12 @@ namespace OpenSim.Region.Environment.Modules.InterGrid { public string first_name; public string last_name; - public LLUUID agent_id; - public LLUUID local_agent_id; - public LLUUID region_id; + public UUID agent_id; + public UUID local_agent_id; + public UUID region_id; public uint circuit_code; - public LLUUID secure_session_id; - public LLUUID session_id; + public UUID secure_session_id; + public UUID session_id; public bool agent_access; public string sim_access; public uint god_level; @@ -89,7 +89,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid private List m_scene = new List(); private Dictionary CapsLoginID = new Dictionary(); - private Dictionary m_OGPState = new Dictionary(); + private Dictionary m_OGPState = new Dictionary(); private string LastNameSuffix = "_EXTERNAL"; private string FirstNamePrefix = ""; @@ -231,10 +231,10 @@ namespace OpenSim.Region.Environment.Modules.InterGrid //string RegionURI = reg.ServerURI; //int RegionPort = (int)reg.HttpPort; - LLUUID RemoteAgentID = requestMap["agent_id"].AsUUID(); + UUID RemoteAgentID = requestMap["agent_id"].AsUUID(); // will be used in the future. The client always connects with the aditi agentid currently - LLUUID LocalAgentID = RemoteAgentID; + UUID LocalAgentID = RemoteAgentID; string FirstName = requestMap["first_name"].AsString(); string LastName = requestMap["last_name"].AsString(); @@ -274,15 +274,15 @@ namespace OpenSim.Region.Environment.Modules.InterGrid // Generate a dummy agent for the user so we can get back a CAPS path AgentCircuitData agentData = new AgentCircuitData(); agentData.AgentID = LocalAgentID; - agentData.BaseFolder=LLUUID.Zero; + agentData.BaseFolder=UUID.Zero; agentData.CapsPath=Util.GetRandomCapsPath(); agentData.child = false; agentData.circuitcode = (uint)(Util.RandomClass.Next()); agentData.firstname = FirstName; agentData.lastname = LastName; - agentData.SecureSessionID=LLUUID.Random(); - agentData.SessionID=LLUUID.Random(); - agentData.startpos = new LLVector3(128f, 128f, 100f); + agentData.SecureSessionID=UUID.Random(); + agentData.SessionID=UUID.Random(); + agentData.startpos = new Vector3(128f, 128f, 100f); // Pre-Fill our region cache with information on the agent. UserAgentData useragent = new UserAgentData(); @@ -308,14 +308,14 @@ namespace OpenSim.Region.Environment.Modules.InterGrid userProfile.CurrentAgent = useragent; userProfile.CustomType = "OGP"; userProfile.FirstLifeAboutText = "I'm testing OpenGrid Protocol"; - userProfile.FirstLifeImage = LLUUID.Zero; + userProfile.FirstLifeImage = UUID.Zero; userProfile.FirstName = agentData.firstname; userProfile.GodLevel = 0; userProfile.HomeLocation = agentData.startpos; userProfile.HomeLocationX = agentData.startpos.X; userProfile.HomeLocationY = agentData.startpos.Y; userProfile.HomeLocationZ = agentData.startpos.Z; - userProfile.HomeLookAt = LLVector3.Zero; + userProfile.HomeLookAt = Vector3.Zero; userProfile.HomeLookAtX = userProfile.HomeLookAt.X; userProfile.HomeLookAtY = userProfile.HomeLookAt.Y; userProfile.HomeLookAtZ = userProfile.HomeLookAt.Z; @@ -324,18 +324,18 @@ namespace OpenSim.Region.Environment.Modules.InterGrid userProfile.HomeRegionX = reg.RegionLocX; userProfile.HomeRegionY = reg.RegionLocY; userProfile.ID = agentData.AgentID; - userProfile.Image = LLUUID.Zero; + userProfile.Image = UUID.Zero; userProfile.LastLogin = Util.UnixTimeSinceEpoch(); - userProfile.Partner = LLUUID.Zero; + userProfile.Partner = UUID.Zero; userProfile.PasswordHash = "$1$"; userProfile.PasswordSalt = ""; - userProfile.RootInventoryFolderID = LLUUID.Zero; + userProfile.RootInventoryFolderID = UUID.Zero; userProfile.SurName = agentData.lastname; userProfile.UserAssetURI = homeScene.CommsManager.NetworkServersInfo.AssetURL; userProfile.UserFlags = 0; userProfile.UserInventoryURI = homeScene.CommsManager.NetworkServersInfo.InventoryURL; userProfile.WantDoMask = 0; - userProfile.WebLoginKey = LLUUID.Random(); + userProfile.WebLoginKey = UUID.Random(); // Do caps registration // get seed cap @@ -348,7 +348,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid //string raCap = string.Empty; - LLUUID AvatarRezCapUUID = LLUUID.Random(); + UUID AvatarRezCapUUID = UUID.Random(); string rezAvatarPath = "/agent/" + AvatarRezCapUUID + "/rez_avatar"; // Get a reference to the user's cap so we can pull out the Caps Object Path @@ -389,8 +389,8 @@ namespace OpenSim.Region.Environment.Modules.InterGrid LLSDMap requestMap = (LLSDMap)request; // take these values to start. There's a few more - LLUUID SecureSessionID=requestMap["secure_session_id"].AsUUID(); - LLUUID SessionID = requestMap["session_id"].AsUUID(); + UUID SecureSessionID=requestMap["secure_session_id"].AsUUID(); + UUID SessionID = requestMap["session_id"].AsUUID(); int circuitcode = requestMap["circuit_code"].AsInteger(); LLSDArray Parameter = new LLSDArray(); if (requestMap.ContainsKey("parameter")) @@ -401,7 +401,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid //int version = 1; int estateID = 1; int parentEstateID = 1; - LLUUID regionID = LLUUID.Zero; + UUID regionID = UUID.Zero; bool visibleToParent = true; for (int i = 0; i < Parameter.Count; i++) @@ -537,17 +537,17 @@ namespace OpenSim.Region.Environment.Modules.InterGrid m_log.InfoFormat("[OGP]: prefix {0}, uuid {1}, suffix {2}", PathArray[1], PathArray[2], PathArray[3]); string uuidString = PathArray[2]; m_log.InfoFormat("[OGP]: Request to Derez avatar with UUID {0}", uuidString); - LLUUID userUUID = LLUUID.Zero; - if (Helpers.TryParse(uuidString, out userUUID)) + UUID userUUID = UUID.Zero; + if (UUID.TryParse(uuidString, out userUUID)) { - LLUUID RemoteID = uuidString; - LLUUID LocalID = RemoteID; + UUID RemoteID = uuidString; + UUID LocalID = RemoteID; // FIXME: TODO: Routine to map RemoteUUIDs to LocalUUIds // would be done already.. but the client connects with the Aditi UUID // regardless over the UDP stack OGPState userState = GetOGPState(LocalID); - if (userState.agent_id != LLUUID.Zero) + if (userState.agent_id != UUID.Zero) { //LLSDMap outboundRequestMap = new LLSDMap(); LLSDMap inboundRequestMap = (LLSDMap)request; @@ -592,7 +592,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid int rrX = rezResponseMap["region_x"].AsInteger(); int rrY = rezResponseMap["region_y"].AsInteger(); m_log.ErrorFormat("X:{0}, Y:{1}", rrX, rrY); - LLUUID rrRID = rezResponseMap["region_id"].AsUUID(); + UUID rrRID = rezResponseMap["region_id"].AsUUID(); string rrAccess = rezResponseMap["sim_access"].AsString(); @@ -802,12 +802,12 @@ namespace OpenSim.Region.Environment.Modules.InterGrid OGPState returnState = new OGPState(); returnState.first_name = ""; returnState.last_name = ""; - returnState.agent_id = LLUUID.Zero; - returnState.local_agent_id = LLUUID.Zero; - returnState.region_id = LLUUID.Zero; + returnState.agent_id = UUID.Zero; + returnState.local_agent_id = UUID.Zero; + returnState.region_id = UUID.Zero; returnState.circuit_code = 0; - returnState.secure_session_id = LLUUID.Zero; - returnState.session_id = LLUUID.Zero; + returnState.secure_session_id = UUID.Zero; + returnState.session_id = UUID.Zero; returnState.agent_access = true; returnState.god_level = 0; returnState.god_overide = false; @@ -827,7 +827,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid return returnState; } - private OGPState GetOGPState(LLUUID agentId) + private OGPState GetOGPState(UUID agentId) { lock (m_OGPState) { @@ -842,7 +842,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid } } - public void DeleteOGPState(LLUUID agentId) + public void DeleteOGPState(UUID agentId) { lock (m_OGPState) { @@ -851,7 +851,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid } } - private void UpdateOGPState(LLUUID agentId, OGPState state) + private void UpdateOGPState(UUID agentId, OGPState state) { lock (m_OGPState) { @@ -866,7 +866,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid } } - public void ShutdownConnection(LLUUID avatarId, OpenGridProtocolModule mod) + public void ShutdownConnection(UUID avatarId, OpenGridProtocolModule mod) { Scene homeScene = GetRootScene(); ScenePresence avatar = null; @@ -905,7 +905,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid public void ShutdownNoLogout() { - LLUUID avUUID = LLUUID.Zero; + UUID avUUID = UUID.Zero; if (avToBeKilled != null) { diff --git a/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs b/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs index 15ce584075..59d29d65c6 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs @@ -29,9 +29,9 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; -using libsecondlife; +using OpenMetaverse; +using OpenMetaverse.Imaging; using Nini.Config; -using OpenJPEGNet; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; @@ -40,12 +40,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture { public class DynamicTextureModule : IRegionModule, IDynamicTextureManager { - private Dictionary RegisteredScenes = new Dictionary(); + private Dictionary RegisteredScenes = new Dictionary(); private Dictionary RenderPlugins = new Dictionary(); - private Dictionary Updaters = new Dictionary(); + private Dictionary Updaters = new Dictionary(); #region IDynamicTextureManager Members @@ -62,7 +62,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture /// /// /// - public void ReturnData(LLUUID id, byte[] data) + public void ReturnData(UUID id, byte[] data) { if (Updaters.ContainsKey(id)) { @@ -75,13 +75,13 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture } } - public LLUUID AddDynamicTextureURL(LLUUID simID, LLUUID primID, string contentType, string url, + public UUID AddDynamicTextureURL(UUID simID, UUID primID, string contentType, string url, string extraParams, int updateTimer) { return AddDynamicTextureURL(simID, primID, contentType, url, extraParams, updateTimer, false, 255); } - public LLUUID AddDynamicTextureURL(LLUUID simID, LLUUID primID, string contentType, string url, + public UUID AddDynamicTextureURL(UUID simID, UUID primID, string contentType, string url, string extraParams, int updateTimer, bool SetBlending, byte AlphaValue) { if (RenderPlugins.ContainsKey(contentType)) @@ -94,7 +94,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture updater.ContentType = contentType; updater.Url = url; updater.UpdateTimer = updateTimer; - updater.UpdaterID = LLUUID.Random(); + updater.UpdaterID = UUID.Random(); updater.Params = extraParams; updater.BlendWithOldTexture = SetBlending; updater.FrontAlpha = AlphaValue; @@ -107,16 +107,16 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture RenderPlugins[contentType].AsyncConvertUrl(updater.UpdaterID, url, extraParams); return updater.UpdaterID; } - return LLUUID.Zero; + return UUID.Zero; } - public LLUUID AddDynamicTextureData(LLUUID simID, LLUUID primID, string contentType, string data, + public UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams, int updateTimer) { return AddDynamicTextureData(simID, primID, contentType, data, extraParams, updateTimer, false, 255); } - public LLUUID AddDynamicTextureData(LLUUID simID, LLUUID primID, string contentType, string data, + public UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams, int updateTimer, bool SetBlending, byte AlphaValue) { if (RenderPlugins.ContainsKey(contentType)) @@ -127,7 +127,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture updater.ContentType = contentType; updater.BodyData = data; updater.UpdateTimer = updateTimer; - updater.UpdaterID = LLUUID.Random(); + updater.UpdaterID = UUID.Random(); updater.Params = extraParams; updater.BlendWithOldTexture = SetBlending; updater.FrontAlpha = AlphaValue; @@ -140,7 +140,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture RenderPlugins[contentType].AsyncConvertData(updater.UpdaterID, data, extraParams); return updater.UpdaterID; } - return LLUUID.Zero; + return UUID.Zero; } #endregion @@ -184,18 +184,18 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture public string BodyData; public string ContentType; public byte FrontAlpha = 255; - public LLUUID LastAssetID; + public UUID LastAssetID; public string Params; - public LLUUID PrimID; + public UUID PrimID; public bool SetNewFrontAlpha = false; - public LLUUID SimUUID; - public LLUUID UpdaterID; + public UUID SimUUID; + public UUID UpdaterID; public int UpdateTimer; public string Url; public DynamicTextureUpdater() { - LastAssetID = LLUUID.Zero; + LastAssetID = UUID.Zero; UpdateTimer = 0; BodyData = null; } @@ -211,7 +211,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture if (BlendWithOldTexture) { - LLUUID lastTextureID = part.Shape.Textures.DefaultTexture.TextureID; + UUID lastTextureID = part.Shape.Textures.DefaultTexture.TextureID; oldAsset = scene.AssetCache.GetAsset(lastTextureID, true); if (oldAsset != null) { @@ -231,7 +231,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture // Create a new asset for user AssetBase asset = new AssetBase(); - asset.FullID = LLUUID.Random(); + asset.FullID = UUID.Random(); asset.Data = assetData; asset.Name = "DynamicImage" + Util.RandomClass.Next(1, 10000); asset.Type = 0; @@ -243,10 +243,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture LastAssetID = asset.FullID; // mostly keep the values from before - LLObject.TextureEntry tmptex = part.Shape.Textures; + Primitive.TextureEntry tmptex = part.Shape.Textures; // remove the old asset from the cache - LLUUID oldID = tmptex.DefaultTexture.TextureID; + UUID oldID = tmptex.DefaultTexture.TextureID; scene.AssetCache.ExpireAsset(oldID); tmptex.DefaultTexture.TextureID = asset.FullID; @@ -259,15 +259,27 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture private byte[] BlendTextures(byte[] frontImage, byte[] backImage, bool setNewAlpha, byte newAlpha) { - Bitmap image1 = new Bitmap(OpenJPEG.DecodeToImage(frontImage)); - Bitmap image2 = new Bitmap(OpenJPEG.DecodeToImage(backImage)); - if (setNewAlpha) - { - SetAlpha(ref image1, newAlpha); - } - Bitmap joint = MergeBitMaps(image1, image2); + ManagedImage managedImage; + Image image; - return OpenJPEG.EncodeFromImage(joint, true); + if (OpenJPEG.DecodeToImage(frontImage, out managedImage, out image)) + { + Bitmap image1 = new Bitmap(image); + + if (OpenJPEG.DecodeToImage(backImage, out managedImage, out image)) + { + Bitmap image2 = new Bitmap(image); + + if (setNewAlpha) + SetAlpha(ref image1, newAlpha); + + Bitmap joint = MergeBitMaps(image1, image2); + + return OpenJPEG.EncodeFromImage(joint, true); + } + } + + return null; } public Bitmap MergeBitMaps(Bitmap front, Bitmap back) diff --git a/OpenSim/Region/Environment/Modules/Scripting/EMailModules/EmailModule.cs b/OpenSim/Region/Environment/Modules/Scripting/EMailModules/EmailModule.cs index bcf3e76dcf..5a715f5f8f 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/EMailModules/EmailModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/EMailModules/EmailModule.cs @@ -29,7 +29,7 @@ using System; using System.Reflection; using System.Collections.Generic; using System.Text.RegularExpressions; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; @@ -161,7 +161,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.EmailModules } } - private SceneObjectPart findPrim(LLUUID objectID, out string ObjectRegionName) + private SceneObjectPart findPrim(UUID objectID, out string ObjectRegionName) { lock (m_Scenes) { @@ -179,7 +179,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.EmailModules return null; } - private void resolveNamePositionRegionName(LLUUID objectID, out string ObjectName, out string ObjectAbsolutePosition, out string ObjectRegionName) + private void resolveNamePositionRegionName(UUID objectID, out string ObjectName, out string ObjectAbsolutePosition, out string ObjectRegionName) { string m_ObjectRegionName; SceneObjectPart part = findPrim(objectID, out m_ObjectRegionName); @@ -203,7 +203,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.EmailModules /// /// /// - public void SendEmail(LLUUID objectID, string address, string subject, string body) + public void SendEmail(UUID objectID, string address, string subject, string body) { //Check if address is empty if (address == string.Empty) @@ -240,7 +240,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.EmailModules //Creation EmailMessage EmailMessage emailMessage = new EmailMessage(); //From - emailMessage.FromAddress = new EmailAddress(objectID.UUID.ToString()+"@"+m_HostName); + emailMessage.FromAddress = new EmailAddress(objectID.ToString()+"@"+m_HostName); //To - Only One emailMessage.AddToAddress(new EmailAddress(address)); //Subject @@ -264,7 +264,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.EmailModules //Send Email Message emailMessage.Send(smtpServer); //Log - m_log.Info("[EMAIL] EMail sent to: " + address + " from object: " + objectID.UUID.ToString()); + m_log.Info("[EMAIL] EMail sent to: " + address + " from object: " + objectID.ToString()); } catch (Exception e) { @@ -280,7 +280,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.EmailModules /// /// /// - public Email GetNextEmail(LLUUID objectID, string sender, string subject) + public Email GetNextEmail(UUID objectID, string sender, string subject) { return null; } diff --git a/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs b/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs index 1eb038761f..9595588e7c 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs @@ -31,7 +31,7 @@ using System.IO; using System.Net; using System.Text; using System.Threading; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Framework.Servers; @@ -91,7 +91,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest private string m_name = "HttpScriptRequests"; // - private Dictionary m_pendingRequests; + private Dictionary m_pendingRequests; private Scene m_scene; // private Queue rpcQueue = new Queue(); @@ -101,14 +101,14 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest #region IHttpRequests Members - public LLUUID MakeHttpRequest(string url, string parameters, string body) + public UUID MakeHttpRequest(string url, string parameters, string body) { - return LLUUID.Zero; + return UUID.Zero; } - public LLUUID StartHttpRequest(uint localID, LLUUID itemID, string url, List parameters, Dictionary headers, string body) + public UUID StartHttpRequest(uint localID, UUID itemID, string url, List parameters, Dictionary headers, string body) { - LLUUID reqID = LLUUID.Random(); + UUID reqID = UUID.Random(); HttpRequestClass htc = new HttpRequestClass(); // Partial implementation: support for parameter flags needed @@ -163,7 +163,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest return reqID; } - public void StopHttpRequest(uint m_localID, LLUUID m_itemID) + public void StopHttpRequest(uint m_localID, UUID m_itemID) { if (m_pendingRequests != null) { @@ -192,7 +192,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest { lock (HttpListLock) { - foreach (LLUUID luid in m_pendingRequests.Keys) + foreach (UUID luid in m_pendingRequests.Keys) { HttpRequestClass tmpReq; @@ -208,7 +208,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest return null; } - public void RemoveCompletedRequest(LLUUID id) + public void RemoveCompletedRequest(UUID id) { lock (HttpListLock) { @@ -232,7 +232,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest m_scene.RegisterModuleInterface(this); - m_pendingRequests = new Dictionary(); + m_pendingRequests = new Dictionary(); } public void PostInitialise() @@ -274,11 +274,11 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest public bool httpVerifyCert = true; // not implemented // Request info - public LLUUID itemID; + public UUID itemID; public uint localID; public DateTime next; public string outbound_body; - public LLUUID reqID; + public UUID reqID; public HttpWebRequest request; public string response_body; public List response_metadata; diff --git a/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs b/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs index 725322b8df..339ad426a2 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs @@ -29,9 +29,9 @@ using System; using System.Drawing; using System.IO; using System.Net; -using libsecondlife; +using OpenMetaverse; +using OpenMetaverse.Imaging; using Nini.Config; -using OpenJPEGNet; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; @@ -70,13 +70,13 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL return null; } - public bool AsyncConvertUrl(LLUUID id, string url, string extraParams) + public bool AsyncConvertUrl(UUID id, string url, string extraParams) { MakeHttpRequest(url, id); return true; } - public bool AsyncConvertData(LLUUID id, string bodyData, string extraParams) + public bool AsyncConvertData(UUID id, string bodyData, string extraParams) { return false; } @@ -118,7 +118,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL #endregion - private void MakeHttpRequest(string url, LLUUID requestID) + private void MakeHttpRequest(string url, UUID requestID) { WebRequest request = HttpWebRequest.Create(url); RequestState state = new RequestState((HttpWebRequest) request, requestID); @@ -177,10 +177,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL public class RequestState { public HttpWebRequest Request = null; - public LLUUID RequestID = LLUUID.Zero; + public UUID RequestID = UUID.Zero; public int TimeOfRequest = 0; - public RequestState(HttpWebRequest request, LLUUID requestID) + public RequestState(HttpWebRequest request, UUID requestID) { Request = request; RequestID = requestID; @@ -189,4 +189,4 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs b/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs index 27f1182099..256bf27acf 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs @@ -31,12 +31,11 @@ using System.Drawing.Imaging; using System.Globalization; using System.IO; using System.Net; -using libsecondlife; +using OpenMetaverse; +using OpenMetaverse.Imaging; using Nini.Config; -using OpenJPEGNet; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; -using Image=System.Drawing.Image; //using Cairo; @@ -79,12 +78,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender return null; } - public bool AsyncConvertUrl(LLUUID id, string url, string extraParams) + public bool AsyncConvertUrl(UUID id, string url, string extraParams) { return false; } - public bool AsyncConvertData(LLUUID id, string bodyData, string extraParams) + public bool AsyncConvertData(UUID id, string bodyData, string extraParams) { Draw(bodyData, id, extraParams); return true; @@ -127,7 +126,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender #endregion - private void Draw(string data, LLUUID id, string extraParams) + private void Draw(string data, UUID id, string extraParams) { // TODO: this is a brutal hack. extraParams should actually be parsed reasonably. int size = 256; @@ -374,4 +373,4 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender return null; } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs index 2f67deeca5..ae5eefcda3 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -66,7 +66,7 @@ using OpenSim.Region.Environment.Scenes; * * For LSL compliance, note the following: * (Tested again 1.21.1 on May 2, 2008) - * 1. 'id' has to be parsed into a LLUUID. None-UUID keys are + * 1. 'id' has to be parsed into a UUID. None-UUID keys are * to be replaced by the ZeroID key. (Well, TryParse does * that for us. * 2. Setting up an listen event from the same script, with the @@ -157,7 +157,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm /// key to filter on (user given, could be totally faked) /// msg to filter on /// number of the scripts handle - public int Listen(uint localID, LLUUID itemID, LLUUID hostID, int channel, string name, LLUUID id, string msg) + public int Listen(uint localID, UUID itemID, UUID hostID, int channel, string name, UUID id, string msg) { return m_listenerManager.AddListener(localID, itemID, hostID, channel, name, id, msg); } @@ -169,7 +169,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm /// UUID of the script engine /// handle returned by Listen() /// temp. activate or deactivate the Listen() - public void ListenControl(LLUUID itemID, int handle, int active) + public void ListenControl(UUID itemID, int handle, int active) { if (active == 1) m_listenerManager.Activate(itemID, handle); @@ -182,7 +182,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm /// /// UUID of the script engine /// handle returned by Listen() - public void ListenRemove(LLUUID itemID, int handle) + public void ListenRemove(UUID itemID, int handle) { m_listenerManager.Remove(itemID, handle); } @@ -192,7 +192,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm /// (script engine) /// /// UUID of the script engine - public void DeleteListener(LLUUID itemID) + public void DeleteListener(UUID itemID) { m_listenerManager.DeleteListener(itemID); } @@ -210,11 +210,11 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm /// name of sender (object or avatar) /// key of sender (object or avatar) /// msg to sent - public void DeliverMessage(ChatTypeEnum type, int channel, string name, LLUUID id, string msg) + public void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg) { SceneObjectPart source = null; ScenePresence avatar = null; - LLVector3 position; + Vector3 position; source = m_scene.GetSceneObjectPart(id); if (source != null) @@ -231,7 +231,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm // Determine which listen event filters match the given set of arguments, this results // in a limited set of listeners, each belonging a host. If the host is in range, add them // to the pending queue. - foreach (ListenerInfo li in m_listenerManager.GetListeners(LLUUID.Zero, channel, name, id, msg)) + foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg)) { // Dont process if this message is from yourself! if (li.GetHostID().Equals(id)) @@ -331,12 +331,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm e.Message); } - public Object[] GetSerializationData(LLUUID itemID) + public Object[] GetSerializationData(UUID itemID) { return m_listenerManager.GetSerializationData(itemID); } - public void CreateFromData(uint localID, LLUUID itemID, LLUUID hostID, + public void CreateFromData(uint localID, UUID itemID, UUID hostID, Object[] data) { m_listenerManager.AddFromData(localID, itemID, hostID, data); @@ -357,7 +357,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm m_curlisteners = 0; } - public int AddListener(uint localID, LLUUID itemID, LLUUID hostID, int channel, string name, LLUUID id, string msg) + public int AddListener(uint localID, UUID itemID, UUID hostID, int channel, string name, UUID id, string msg) { // do we already have a match on this particular filter event? List coll = GetListeners(itemID, channel, name, id, msg); @@ -395,7 +395,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm return -1; } - public void Remove(LLUUID itemID, int handle) + public void Remove(UUID itemID, int handle) { lock (m_listeners) { @@ -419,7 +419,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm } } - public void DeleteListener(LLUUID itemID) + public void DeleteListener(UUID itemID) { List emptyChannels = new List(); List removedListeners = new List(); @@ -455,7 +455,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm } } - public void Activate(LLUUID itemID, int handle) + public void Activate(UUID itemID, int handle) { lock (m_listeners) { @@ -474,7 +474,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm } } - public void Dectivate(LLUUID itemID, int handle) + public void Dectivate(UUID itemID, int handle) { lock (m_listeners) { @@ -494,7 +494,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm } // non-locked access, since its always called in the context of the lock - private int GetNewHandle(LLUUID itemID) + private int GetNewHandle(UUID itemID) { List handles = new List(); @@ -521,7 +521,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm // Theres probably a more clever and efficient way to // do this, maybe with regex. // PM2008: Ha, one could even be smart and define a specialized Enumerator. - public List GetListeners(LLUUID itemID, int channel, string name, LLUUID id, string msg) + public List GetListeners(UUID itemID, int channel, string name, UUID id, string msg) { List collection = new List(); @@ -539,7 +539,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm { continue; } - if (!itemID.Equals(LLUUID.Zero) && !li.GetItemID().Equals(itemID)) + if (!itemID.Equals(UUID.Zero) && !li.GetItemID().Equals(itemID)) { continue; } @@ -547,7 +547,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm { continue; } - if (!li.GetID().Equals(LLUUID.Zero) && !li.GetID().Equals(id)) + if (!li.GetID().Equals(UUID.Zero) && !li.GetID().Equals(id)) { continue; } @@ -561,7 +561,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm return collection; } - public Object[] GetSerializationData(LLUUID itemID) + public Object[] GetSerializationData(UUID itemID) { List data = new List(); @@ -576,7 +576,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm return (Object[])data.ToArray(); } - public void AddFromData(uint localID, LLUUID itemID, LLUUID hostID, + public void AddFromData(uint localID, UUID itemID, UUID hostID, Object[] data) { int idx = 0; @@ -603,25 +603,25 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm private bool m_active; // Listener is active or not private int m_handle; // Assigned handle of this listener private uint m_localID; // Local ID from script engine - private LLUUID m_itemID; // ID of the host script engine - private LLUUID m_hostID; // ID of the host/scene part + private UUID m_itemID; // ID of the host script engine + private UUID m_hostID; // ID of the host/scene part private int m_channel; // Channel - private LLUUID m_id; // ID to filter messages from + private UUID m_id; // ID to filter messages from private string m_name; // Object name to filter messages from private string m_message; // The message - public ListenerInfo(int handle, uint localID, LLUUID ItemID, LLUUID hostID, int channel, string name, LLUUID id, string message) + public ListenerInfo(int handle, uint localID, UUID ItemID, UUID hostID, int channel, string name, UUID id, string message) { Initialise(handle, localID, ItemID, hostID, channel, name, id, message); } - public ListenerInfo(ListenerInfo li, string name, LLUUID id, string message) + public ListenerInfo(ListenerInfo li, string name, UUID id, string message) { Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID, li.m_channel, name, id, message); } - private void Initialise(int handle, uint localID, LLUUID ItemID, LLUUID hostID, int channel, string name, - LLUUID id, string message) + private void Initialise(int handle, uint localID, UUID ItemID, UUID hostID, int channel, string name, + UUID id, string message) { m_active = true; m_handle = handle; @@ -648,22 +648,22 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm return data; } - public static ListenerInfo FromData(uint localID, LLUUID ItemID, LLUUID hostID, Object[] data) + public static ListenerInfo FromData(uint localID, UUID ItemID, UUID hostID, Object[] data) { ListenerInfo linfo = new ListenerInfo((int)data[1], localID, ItemID, hostID, (int)data[2], (string)data[3], - (LLUUID)data[4], (string)data[5]); + (UUID)data[4], (string)data[5]); linfo.m_active=(bool)data[0]; return linfo; } - public LLUUID GetItemID() + public UUID GetItemID() { return m_itemID; } - public LLUUID GetHostID() + public UUID GetHostID() { return m_hostID; } @@ -708,7 +708,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm m_active = true; } - public LLUUID GetID() + public UUID GetID() { return m_id; } diff --git a/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs b/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs index bde90bc067..85aa344db3 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs @@ -31,7 +31,7 @@ using System.Collections.Generic; using System.Net; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using Nwc.XmlRpc; @@ -82,12 +82,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC private string m_name = "XMLRPCModule"; // - private Dictionary m_openChannels; - private Dictionary m_pendingSRDResponses; + private Dictionary m_openChannels; + private Dictionary m_pendingSRDResponses; private int m_remoteDataPort = 0; - private Dictionary m_rpcPending; - private Dictionary m_rpcPendingResponses; + private Dictionary m_rpcPending; + private Dictionary m_rpcPendingResponses; private List m_scenes = new List(); private int RemoteReplyScriptTimeout = 9000; private int RemoteReplyScriptWait = 300; @@ -102,10 +102,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC // get called only one time (or we lose any open channels) if (null == m_openChannels) { - m_openChannels = new Dictionary(); - m_rpcPending = new Dictionary(); - m_rpcPendingResponses = new Dictionary(); - m_pendingSRDResponses = new Dictionary(); + m_openChannels = new Dictionary(); + m_rpcPending = new Dictionary(); + m_rpcPendingResponses = new Dictionary(); + m_pendingSRDResponses = new Dictionary(); try { @@ -164,11 +164,11 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC /********************************************** * OpenXMLRPCChannel * - * Generate a LLUUID channel key and add it and + * Generate a UUID channel key and add it and * the prim id to dictionary * * A custom channel key can be proposed. - * Otherwise, passing LLUUID.Zero will generate + * Otherwise, passing UUID.Zero will generate * and return a random channel * * First check if there is a channel assigned for @@ -179,9 +179,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC * * ********************************************/ - public LLUUID OpenXMLRPCChannel(uint localID, LLUUID itemID, LLUUID channelID) + public UUID OpenXMLRPCChannel(uint localID, UUID itemID, UUID channelID) { - LLUUID newChannel = LLUUID.Zero; + UUID newChannel = UUID.Zero; // This should no longer happen, but the check is reasonable anyway if (null == m_openChannels) @@ -201,9 +201,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC } } - if (newChannel == LLUUID.Zero) + if (newChannel == UUID.Zero) { - newChannel = (channelID == LLUUID.Zero) ? LLUUID.Random() : channelID; + newChannel = (channelID == UUID.Zero) ? UUID.Random() : channelID; RPCChannelInfo rpcChanInfo = new RPCChannelInfo(localID, itemID, newChannel); lock (XMLRPCListLock) { @@ -216,7 +216,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC // Delete channels based on itemID // for when a script is deleted - public void DeleteChannels(LLUUID itemID) + public void DeleteChannels(UUID itemID) { if (m_openChannels != null) { @@ -234,7 +234,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC IEnumerator tmpEnumerator = tmp.GetEnumerator(); while (tmpEnumerator.MoveNext()) - m_openChannels.Remove((LLUUID) tmpEnumerator.Current); + m_openChannels.Remove((UUID) tmpEnumerator.Current); } } } @@ -248,12 +248,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC public void RemoteDataReply(string channel, string message_id, string sdata, int idata) { - LLUUID message_key = new LLUUID(message_id); - LLUUID channel_key = new LLUUID(channel); + UUID message_key = new UUID(message_id); + UUID channel_key = new UUID(channel); RPCRequestInfo rpcInfo = null; - if (message_key == LLUUID.Zero) + if (message_key == UUID.Zero) { foreach (RPCRequestInfo oneRpcInfo in m_rpcPendingResponses.Values) if (oneRpcInfo.GetChannelKey() == channel_key) @@ -284,7 +284,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC * *********************************************/ - public void CloseXMLRPCChannel(LLUUID channelKey) + public void CloseXMLRPCChannel(UUID channelKey) { if (m_openChannels.ContainsKey(channelKey)) m_openChannels.Remove(channelKey); @@ -308,7 +308,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC { lock (XMLRPCListLock) { - foreach (LLUUID luid in m_rpcPending.Keys) + foreach (UUID luid in m_rpcPending.Keys) { RPCRequestInfo tmpReq; @@ -322,7 +322,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC return null; } - public void RemoveCompletedRequest(LLUUID id) + public void RemoveCompletedRequest(UUID id) { lock (XMLRPCListLock) { @@ -339,7 +339,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC } } - public LLUUID SendRemoteData(uint localID, LLUUID itemID, string channel, string dest, int idata, string sdata) + public UUID SendRemoteData(uint localID, UUID itemID, string channel, string dest, int idata, string sdata) { SendRemoteDataRequest req = new SendRemoteDataRequest( localID, itemID, channel, dest, idata, sdata @@ -354,7 +354,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC { lock (XMLRPCListLock) { - foreach (LLUUID luid in m_pendingSRDResponses.Keys) + foreach (UUID luid in m_pendingSRDResponses.Keys) { SendRemoteDataRequest tmpReq; @@ -369,7 +369,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC return null; } - public void RemoveCompletedSRDRequest(LLUUID id) + public void RemoveCompletedSRDRequest(UUID id) { lock (XMLRPCListLock) { @@ -381,7 +381,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC } } - public void CancelSRDRequests(LLUUID itemID) + public void CancelSRDRequests(UUID itemID) { if (m_pendingSRDResponses != null) { @@ -408,7 +408,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC if (GoodXML) { - LLUUID channel = new LLUUID((string) requestData["Channel"]); + UUID channel = new UUID((string) requestData["Channel"]); RPCChannelInfo rpcChanInfo; if (m_openChannels.TryGetValue(channel, out rpcChanInfo)) { @@ -462,24 +462,24 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC public class RPCRequestInfo { - private LLUUID m_ChannelKey; + private UUID m_ChannelKey; private string m_IntVal; - private LLUUID m_ItemID; + private UUID m_ItemID; private uint m_localID; - private LLUUID m_MessageID; + private UUID m_MessageID; 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) + public RPCRequestInfo(uint localID, UUID itemID, UUID channelKey, string strVal, string intVal) { m_localID = localID; m_StrVal = strVal; m_IntVal = intVal; m_ItemID = itemID; m_ChannelKey = channelKey; - m_MessageID = LLUUID.Random(); + m_MessageID = UUID.Random(); m_processed = false; m_respStr = String.Empty; m_respInt = 0; @@ -490,7 +490,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC return m_processed; } - public LLUUID GetChannelKey() + public UUID GetChannelKey() { return m_ChannelKey; } @@ -525,7 +525,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC return m_localID; } - public LLUUID GetItemID() + public UUID GetItemID() { return m_ItemID; } @@ -540,7 +540,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC return int.Parse(m_IntVal); } - public LLUUID GetMessageID() + public UUID GetMessageID() { return m_MessageID; } @@ -548,23 +548,23 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC public class RPCChannelInfo { - private LLUUID m_ChannelKey; - private LLUUID m_itemID; + private UUID m_ChannelKey; + private UUID m_itemID; private uint m_localID; - public RPCChannelInfo(uint localID, LLUUID itemID, LLUUID channelID) + public RPCChannelInfo(uint localID, UUID itemID, UUID channelID) { m_ChannelKey = channelID; m_localID = localID; m_itemID = itemID; } - public LLUUID GetItemID() + public UUID GetItemID() { return m_itemID; } - public LLUUID GetChannelID() + public UUID GetChannelID() { return m_ChannelKey; } @@ -583,15 +583,15 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC public bool finished; private Thread httpThread; public int idata; - public LLUUID m_itemID; + public UUID m_itemID; public uint m_localID; - public LLUUID reqID; + public UUID reqID; public XmlRpcRequest request; public int response_idata; public string response_sdata; public string sdata; - public SendRemoteDataRequest(uint localID, LLUUID itemID, string channel, string dest, int idata, string sdata) + public SendRemoteDataRequest(uint localID, UUID itemID, string channel, string dest, int idata, string sdata) { this.channel = channel; destURL = dest; @@ -600,10 +600,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC m_itemID = itemID; m_localID = localID; - reqID = LLUUID.Random(); + reqID = UUID.Random(); } - public LLUUID process() + public UUID process() { httpThread = new Thread(SendRequest); httpThread.Name = "HttpRequestThread"; @@ -625,12 +625,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC { Hashtable param = new Hashtable(); - // Check if channel is an LLUUID + // Check if channel is an UUID // if not, use as method name - LLUUID parseUID; + UUID parseUID; string mName = "llRemoteData"; if ((channel != null) && (channel != "")) - if (!LLUUID.TryParse(channel, out parseUID)) + if (!UUID.TryParse(channel, out parseUID)) mName = channel; else param["Channel"] = channel; @@ -698,7 +698,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC } } - public LLUUID GetReqID() + public UUID GetReqID() { return reqID; } diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs index 012f8d4512..8d7416031b 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Modules.World.Archiver { @@ -38,7 +38,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// The location of the archive control file /// - public static readonly string CONTROL_FILE_PATH = "archive.xml"; + public static readonly string CONTROL_FILE_PATH = "archive.Xml"; /// /// Path for the assets held in an archive @@ -48,7 +48,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// Path for the assets metadata file /// - //public static readonly string ASSETS_METADATA_PATH = "assets.xml"; + //public static readonly string ASSETS_METADATA_PATH = "assets.Xml"; /// /// Path for the prims file @@ -88,11 +88,6 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Notecard] = ASSET_EXTENSION_SEPARATOR + "notecard.txt"; ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Object] = ASSET_EXTENSION_SEPARATOR + "object.xml"; ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.RootFolder] = ASSET_EXTENSION_SEPARATOR + "rootfolder.txt"; // Not sure if we'll ever see this -// disable warning: we know Script is obsolete, but need to support it -// anyhow -#pragma warning disable 0612 - ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Script] = ASSET_EXTENSION_SEPARATOR + "script.txt"; // Not sure if we'll ever see this -#pragma warning restore 0612 ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Simstate] = ASSET_EXTENSION_SEPARATOR + "simstate.bin"; // Not sure if we'll ever see this ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.SnapshotFolder] = ASSET_EXTENSION_SEPARATOR + "snapshotfolder.txt"; // Not sure if we'll ever see this ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Sound] = ASSET_EXTENSION_SEPARATOR + "sound.ogg"; @@ -116,11 +111,6 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "notecard.txt"] = (sbyte)AssetType.Notecard; EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "object.xml"] = (sbyte)AssetType.Object; EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "rootfolder.txt"] = (sbyte)AssetType.RootFolder; -// disable warning: we know Script is obsolete, but need to support it -// anyhow -#pragma warning disable 0612 - EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "script.txt"] = (sbyte)AssetType.Script; -#pragma warning restore 0612 EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "simstate.bin"] = (sbyte)AssetType.Simstate; EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "snapshotfolder.txt"] = (sbyte)AssetType.SnapshotFolder; EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "sound.ogg"] = (sbyte)AssetType.Sound; diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs index 89f5fd7650..776ea78340 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs @@ -31,13 +31,12 @@ using OpenSim.Region.Environment.Modules.World.Serialiser; using OpenSim.Region.Environment.Modules.World.Terrain; using OpenSim.Framework.Communications.Cache; using System; -using Axiom.Math; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; namespace OpenSim.Region.Environment.Modules.World.Archiver @@ -57,7 +56,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// Used to cache lookups for valid uuids. /// - private IDictionary m_validUserUuids = new Dictionary(); + private IDictionary m_validUserUuids = new Dictionary(); public ArchiveReadRequest(Scene scene, string loadPath) { @@ -137,8 +136,8 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver // Try to retain the original creator/owner/lastowner if their uuid is present on this grid // otherwise, use the master avatar uuid instead - LLUUID masterAvatarId = m_scene.RegionInfo.MasterAvatarAssignedUUID; - if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + UUID masterAvatarId = m_scene.RegionInfo.MasterAvatarAssignedUUID; + if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) masterAvatarId = m_scene.RegionInfo.EstateSettings.EstateOwner; foreach (SceneObjectPart part in sceneObject.Children.Values) { @@ -184,7 +183,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// /// - private bool resolveUserUuid(LLUUID uuid) + private bool resolveUserUuid(UUID uuid) { if (!m_validUserUuids.ContainsKey(uuid)) { @@ -209,7 +208,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// true if asset was successfully loaded, false otherwise private bool LoadAsset(string assetPath, byte[] data) { - // Right now we're nastily obtaining the lluuid from the filename + // Right now we're nastily obtaining the UUID from the filename string filename = assetPath.Remove(0, ArchiveConstants.ASSETS_PATH.Length); int i = filename.LastIndexOf(ArchiveConstants.ASSET_EXTENSION_SEPARATOR); @@ -231,7 +230,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver //m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType); - AssetBase asset = new AssetBase(new LLUUID(uuid), String.Empty); + AssetBase asset = new AssetBase(new UUID(uuid), String.Empty); asset.Type = assetType; asset.Data = data; diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs index 26d4797f48..6276d34c2e 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs @@ -31,7 +31,7 @@ using System.IO; using System.IO.Compression; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -44,7 +44,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// Method called when all the necessary assets for an archive request have been received. /// - public delegate void AssetsRequestCallback(IDictionary assetsFound, ICollection assetsNotFoundUuids); + public delegate void AssetsRequestCallback(IDictionary assetsFound, ICollection assetsNotFoundUuids); /// /// Execute the write of an archive once we have received all the necessary data @@ -73,9 +73,9 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver m_savePath = savePath; } - protected internal void ReceivedAllAssets(IDictionary assetsFound, ICollection assetsNotFoundUuids) + protected internal void ReceivedAllAssets(IDictionary assetsFound, ICollection assetsNotFoundUuids) { - foreach (LLUUID uuid in assetsNotFoundUuids) + foreach (UUID uuid in assetsNotFoundUuids) { m_log.DebugFormat("[ARCHIVER]: Could not find asset {0}", uuid); } @@ -100,12 +100,12 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver { //m_log.DebugFormat("[ARCHIVER]: Saving {0} {1}, {2}", entity.Name, entity.UUID, entity.GetType()); - LLVector3 position = sceneObject.AbsolutePosition; + Vector3 position = sceneObject.AbsolutePosition; string serializedObject = m_serialiser.SaveGroupToXml2(sceneObject); string filename = string.Format( - "{0}{1}_{2:000}-{3:000}-{4:000}__{5}.xml", + "{0}{1}_{2:000}-{3:000}-{4:000}__{5}.Xml", ArchiveConstants.OBJECTS_PATH, sceneObject.Name, Math.Round(position.X), Math.Round(position.Y), Math.Round(position.Z), sceneObject.UUID); diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestPreparation.cs index 20e15ab4cf..a59148b390 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestPreparation.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestPreparation.cs @@ -37,7 +37,7 @@ using System.Reflection; //using System.Text; using System.Text.RegularExpressions; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; @@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// The callback made when we request the asset for an object from the asset service. /// - public void AssetRequestCallback(LLUUID assetID, AssetBase asset) + public void AssetRequestCallback(UUID assetID, AssetBase asset) { lock (this) { @@ -100,7 +100,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// /// - protected AssetBase GetAsset(LLUUID uuid) + protected AssetBase GetAsset(UUID uuid) { m_waitingForObjectAsset = true; m_scene.AssetCache.GetAsset(uuid, AssetRequestCallback, true); @@ -128,20 +128,20 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// /// Dictionary in which to record the references - protected void GetScriptAssetUuids(LLUUID scriptUuid, IDictionary assetUuids) + protected void GetScriptAssetUuids(UUID scriptUuid, IDictionary assetUuids) { AssetBase scriptAsset = GetAsset(scriptUuid); if (null != scriptAsset) { - string script = Helpers.FieldToUTF8String(scriptAsset.Data); + string script = Utils.BytesToString(scriptAsset.Data); //m_log.DebugFormat("[ARCHIVER]: Script {0}", script); MatchCollection uuidMatches = m_uuidRegex.Matches(script); //m_log.DebugFormat("[ARCHIVER]: Found {0} matches in script", uuidMatches.Count); foreach (Match uuidMatch in uuidMatches) { - LLUUID uuid = new LLUUID(uuidMatch.Value); + UUID uuid = new UUID(uuidMatch.Value); //m_log.DebugFormat("[ARCHIVER]: Recording {0} in script", uuid); assetUuids[uuid] = 1; } @@ -153,17 +153,17 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// /// Dictionary in which to record the references - protected void GetWearableAssetUuids(LLUUID wearableAssetUuid, IDictionary assetUuids) + protected void GetWearableAssetUuids(UUID wearableAssetUuid, IDictionary assetUuids) { AssetBase assetBase = GetAsset(wearableAssetUuid); //m_log.Debug(new System.Text.ASCIIEncoding().GetString(bodypartAsset.Data)); - AssetWearable wearableAsset = new AssetBodypart(assetBase.Data); + AssetWearable wearableAsset = new AssetBodypart(wearableAssetUuid, assetBase.Data); wearableAsset.Decode(); //m_log.DebugFormat( // "[ARCHIVER]: Wearable asset {0} references {1} assets", wearableAssetUuid, wearableAsset.Textures.Count); - foreach (LLUUID uuid in wearableAsset.Textures.Values) + foreach (UUID uuid in wearableAsset.Textures.Values) { //m_log.DebugFormat("[ARCHIVER]: Got bodypart uuid {0}", uuid); assetUuids[uuid] = 1; @@ -176,14 +176,14 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// within this object). /// /// - /// - protected void GetSceneObjectAssetUuids(LLUUID sceneObjectUuid, IDictionary assetUuids) + /// + protected void GetSceneObjectAssetUuids(UUID sceneObjectUuid, IDictionary assetUuids) { AssetBase objectAsset = GetAsset(sceneObjectUuid); if (null != objectAsset) { - string xml = Helpers.FieldToUTF8String(objectAsset.Data); + string xml = Utils.BytesToString(objectAsset.Data); SceneObjectGroup sog = new SceneObjectGroup(m_scene, m_scene.RegionInfo.RegionHandle, xml); GetSceneObjectAssetUuids(sog, assetUuids); } @@ -196,7 +196,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// /// - protected void GetSceneObjectAssetUuids(SceneObjectGroup sceneObject, IDictionary assetUuids) + protected void GetSceneObjectAssetUuids(SceneObjectGroup sceneObject, IDictionary assetUuids) { m_log.DebugFormat( "[ARCHIVER]: Getting assets for object {0}, {1}", sceneObject.Name, sceneObject.UUID); @@ -208,7 +208,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver try { - LLObject.TextureEntry textureEntry = part.Shape.Textures; + Primitive.TextureEntry textureEntry = part.Shape.Textures; // Get the prim's default texture. This will be used for faces which don't have their own texture assetUuids[textureEntry.DefaultTexture.TextureID] = 1; @@ -216,7 +216,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver // XXX: Not a great way to iterate through face textures, but there's no // other method available to tell how many faces there actually are //int i = 0; - foreach (LLObject.TextureEntryFace texture in textureEntry.FaceTextures) + foreach (Primitive.TextureEntryFace texture in textureEntry.FaceTextures) { if (texture != null) { @@ -262,7 +262,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver public void ArchiveRegion() { - Dictionary assetUuids = new Dictionary(); + Dictionary assetUuids = new Dictionary(); List entities = m_scene.GetEntities(); List sceneObjects = new List(); diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiverModule.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiverModule.cs index 69f712c991..df17ad2bec 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiverModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiverModule.cs @@ -31,7 +31,7 @@ using OpenSim.Region.Environment.Modules.World.Serialiser; using OpenSim.Region.Environment.Scenes; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs index 73212ff671..b49b2a469a 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs @@ -29,7 +29,7 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; @@ -45,9 +45,9 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// Archive assets /// - protected IDictionary m_assets; + protected IDictionary m_assets; - public AssetsArchiver(IDictionary assets) + public AssetsArchiver(IDictionary assets) { m_assets = assets; } @@ -76,7 +76,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver xtw.WriteStartElement("assets"); - foreach (LLUUID uuid in m_assets.Keys) + foreach (UUID uuid in m_assets.Keys) { AssetBase asset = m_assets[uuid]; @@ -105,7 +105,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver xtw.WriteEndDocument(); - archive.AddFile("assets.xml", sw.ToString()); + archive.AddFile("assets.Xml", sw.ToString()); } /// @@ -117,7 +117,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver // It appears that gtar, at least, doesn't need the intermediate directory entries in the tar //archive.AddDir("assets"); - foreach (LLUUID uuid in m_assets.Keys) + foreach (UUID uuid in m_assets.Keys) { AssetBase asset = m_assets[uuid]; diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsDearchiver.cs b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsDearchiver.cs index 17abb24e99..b26fe4c6c2 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsDearchiver.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsDearchiver.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -141,7 +141,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// protected void ResolveAssetData(string assetPath, byte[] data) { - // Right now we're nastily obtaining the lluuid from the filename + // Right now we're nastily obtaining the UUID from the filename string filename = assetPath.Remove(0, ArchiveConstants.ASSETS_PATH.Length); if (m_metadata.ContainsKey(filename)) @@ -156,7 +156,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver m_log.DebugFormat("[ARCHIVER]: Importing asset {0}", filename); - AssetBase asset = new AssetBase(new LLUUID(filename), metadata.Name); + AssetBase asset = new AssetBase(new UUID(filename), metadata.Name); asset.Description = metadata.Description; asset.Type = metadata.AssetType; asset.Data = data; diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs index 2164f7e77f..41fbc1657e 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs @@ -32,7 +32,7 @@ using OpenSim.Region.Environment.Scenes; using System.Collections.Generic; //using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; //using log4net; namespace OpenSim.Region.Environment.Modules.World.Archiver @@ -47,7 +47,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// uuids to request /// - protected ICollection m_uuids; + protected ICollection m_uuids; /// /// Callback used when all the assets requested have been received. @@ -57,12 +57,12 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// Assets retrieved in this request /// - protected Dictionary m_assets = new Dictionary(); + protected Dictionary m_assets = new Dictionary(); /// /// Maintain a list of assets that could not be found. This will be passed back to the requester. /// - protected List m_notFoundAssetUuids = new List(); + protected List m_notFoundAssetUuids = new List(); /// /// Record the number of asset replies required so we know when we've finished @@ -74,7 +74,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// protected AssetCache m_assetCache; - protected internal AssetsRequest(ICollection uuids, AssetCache assetCache, AssetsRequestCallback assetsRequestCallback) + protected internal AssetsRequest(ICollection uuids, AssetCache assetCache, AssetsRequestCallback assetsRequestCallback) { m_uuids = uuids; m_assetsRequestCallback = assetsRequestCallback; @@ -88,7 +88,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver if (m_repliesRequired == 0) m_assetsRequestCallback(m_assets, m_notFoundAssetUuids); - foreach (LLUUID uuid in m_uuids) + foreach (UUID uuid in m_uuids) { m_assetCache.GetAsset(uuid, AssetRequestCallback, true); } @@ -99,7 +99,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver /// /// /// - public void AssetRequestCallback(LLUUID assetID, AssetBase asset) + public void AssetRequestCallback(UUID assetID, AssetBase asset) { if (asset != null) m_assets[assetID] = asset; diff --git a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs index 28347d06d3..976a634597 100644 --- a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs @@ -28,7 +28,7 @@ using System; using System.Threading; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -41,15 +41,15 @@ namespace OpenSim.Region.Environment.Modules.World.Estate { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private delegate void LookupUUIDS(List uuidLst); + private delegate void LookupUUIDS(List uuidLst); private Scene m_scene; #region Packet Data Responders - private void sendDetailedEstateData(IClientAPI remote_client, LLUUID invoice) + private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) { - //SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, LLUUID covenant) + //SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant) uint sun = 0; if (!m_scene.RegionInfo.EstateSettings.UseGlobalTime) @@ -119,9 +119,9 @@ namespace OpenSim.Region.Environment.Modules.World.Estate sendRegionInfoPacketToAll(); } - public void setEstateTerrainBaseTexture(IClientAPI remoteClient, int corner, LLUUID texture) + public void setEstateTerrainBaseTexture(IClientAPI remoteClient, int corner, UUID texture) { - if (texture == LLUUID.Zero) + if(texture == UUID.Zero) return; switch (corner) @@ -202,13 +202,13 @@ namespace OpenSim.Region.Environment.Modules.World.Estate m_scene.Restart(timeInSeconds); } - private void handleChangeEstateCovenantRequest(IClientAPI remoteClient, LLUUID estateCovenantID) + private void handleChangeEstateCovenantRequest(IClientAPI remoteClient, UUID estateCovenantID) { m_scene.RegionInfo.RegionSettings.Covenant = estateCovenantID; m_scene.RegionInfo.RegionSettings.Save(); } - private void handleEstateAccessDeltaRequest(IClientAPI remote_client, LLUUID invoice, int estateAccessType, LLUUID user) + private void handleEstateAccessDeltaRequest(IClientAPI remote_client, UUID invoice, int estateAccessType, UUID user) { // EstateAccessDelta handles Estate Managers, Sim Access, Sim Banlist, allowed Groups.. etc. @@ -338,17 +338,17 @@ namespace OpenSim.Region.Environment.Modules.World.Estate } } - private void SendSimulatorBlueBoxMessage(IClientAPI remote_client, LLUUID invoice, LLUUID senderID, LLUUID sessionID, string senderName, string message) + private void SendSimulatorBlueBoxMessage(IClientAPI remote_client, UUID invoice, UUID senderID, UUID sessionID, string senderName, string message) { m_scene.SendRegionMessageFromEstateTools(senderID, sessionID, senderName, message); } - private void SendEstateBlueBoxMessage(IClientAPI remote_client, LLUUID invoice, LLUUID senderID, LLUUID sessionID, string senderName, string message) + private void SendEstateBlueBoxMessage(IClientAPI remote_client, UUID invoice, UUID senderID, UUID sessionID, string senderName, string message) { m_scene.SendEstateMessageFromEstateTools(senderID, sessionID, senderName, message); } - private void handleEstateDebugRegionRequest(IClientAPI remote_client, LLUUID invoice, LLUUID senderID, bool scripted, bool collisionEvents, bool physics) + private void handleEstateDebugRegionRequest(IClientAPI remote_client, UUID invoice, UUID senderID, bool scripted, bool collisionEvents, bool physics) { if (physics) m_scene.RegionInfo.RegionSettings.DisablePhysics = true; @@ -371,9 +371,9 @@ namespace OpenSim.Region.Environment.Modules.World.Estate m_scene.SetSceneCoreDebug(scripted, collisionEvents, physics); } - private void handleEstateTeleportOneUserHomeRequest(IClientAPI remover_client, LLUUID invoice, LLUUID senderID, LLUUID prey) + private void handleEstateTeleportOneUserHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID, UUID prey) { - if (prey != LLUUID.Zero) + if (prey != UUID.Zero) { ScenePresence s = m_scene.GetScenePresence(prey); if (s != null) @@ -419,7 +419,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate private void HandleLandStatRequest(int parcelID, uint reportType, uint requestFlags, string filter, IClientAPI remoteClient) { Dictionary SceneData = new Dictionary(); - List uuidNameLookupList = new List(); + List uuidNameLookupList = new List(); if (reportType == 1) { @@ -491,7 +491,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate LookupUUIDS icon = (LookupUUIDS)iar.AsyncState; icon.EndInvoke(iar); } - private void LookupUUID(List uuidLst) + private void LookupUUID(List uuidLst) { LookupUUIDS d = LookupUUIDsAsync; @@ -499,9 +499,9 @@ namespace OpenSim.Region.Environment.Modules.World.Estate LookupUUIDSCompleted, d); } - private void LookupUUIDsAsync(List uuidLst) + private void LookupUUIDsAsync(List uuidLst) { - LLUUID[] uuidarr = new LLUUID[0]; + UUID[] uuidarr = new UUID[0]; lock (uuidLst) { @@ -533,7 +533,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate { RegionHandshakeArgs args = new RegionHandshakeArgs(); bool estatemanager = false; - LLUUID[] EstateManagers = m_scene.RegionInfo.EstateSettings.EstateManagers; + UUID[] EstateManagers = m_scene.RegionInfo.EstateSettings.EstateManagers; for (int i = 0; i < EstateManagers.Length; i++) { if (EstateManagers[i] == remoteClient.AgentId) @@ -559,14 +559,14 @@ namespace OpenSim.Region.Environment.Modules.World.Estate args.regionFlags = GetRegionFlags(); args.regionName = m_scene.RegionInfo.RegionName; - if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) args.SimOwner = m_scene.RegionInfo.EstateSettings.EstateOwner; else args.SimOwner = m_scene.RegionInfo.MasterAvatarAssignedUUID; - args.terrainBase0 = LLUUID.Zero; - args.terrainBase1 = LLUUID.Zero; - args.terrainBase2 = LLUUID.Zero; - args.terrainBase3 = LLUUID.Zero; + args.terrainBase0 = UUID.Zero; + args.terrainBase1 = UUID.Zero; + args.terrainBase2 = UUID.Zero; + args.terrainBase3 = UUID.Zero; args.terrainDetail0 = m_scene.RegionInfo.RegionSettings.TerrainTexture1; args.terrainDetail1 = m_scene.RegionInfo.RegionSettings.TerrainTexture2; args.terrainDetail2 = m_scene.RegionInfo.RegionSettings.TerrainTexture3; @@ -582,7 +582,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate ); } - public void handleEstateChangeInfo(IClientAPI remoteClient, LLUUID invoice, LLUUID senderID, UInt32 parms1, UInt32 parms2) + public void handleEstateChangeInfo(IClientAPI remoteClient, UUID invoice, UUID senderID, UInt32 parms1, UInt32 parms2) { if (parms2 == 0) { @@ -812,14 +812,14 @@ namespace OpenSim.Region.Environment.Modules.World.Estate return (uint)flags; } - public bool IsManager(LLUUID avatarID) + public bool IsManager(UUID avatarID) { if (avatarID == m_scene.RegionInfo.MasterAvatarAssignedUUID) return true; if (avatarID == m_scene.RegionInfo.EstateSettings.EstateOwner) return true; - List ems = new List(m_scene.RegionInfo.EstateSettings.EstateManagers); + List ems = new List(m_scene.RegionInfo.EstateSettings.EstateManagers); if (ems.Contains(avatarID)) return true; diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs b/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs index d519d4d641..1e1291abab 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; @@ -88,7 +88,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { return m_landManagementModule.GetLandObject(x_float, y_float); } - ILandObject obj = new LandObject(LLUUID.Zero, false, m_scene); + ILandObject obj = new LandObject(UUID.Zero, false, m_scene); obj.landData.Name = "NO LAND"; return obj; } @@ -100,12 +100,12 @@ namespace OpenSim.Region.Environment.Modules.World.Land { return m_landManagementModule.GetLandObject(x, y); } - ILandObject obj = new LandObject(LLUUID.Zero, false, m_scene); + ILandObject obj = new LandObject(UUID.Zero, false, m_scene); obj.landData.Name = "NO LAND"; return obj; } - public List ParcelsNearPoint(LLVector3 position) + public List ParcelsNearPoint(Vector3 position) { if (m_landManagementModule != null) { @@ -142,7 +142,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land m_landManagementModule.UpdateLandObject(localID, data); } } - public void ReturnObjectsInParcel(int localID, uint returnType, LLUUID[] agentIDs, LLUUID[] taskIDs, IClientAPI remoteClient) + public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient) { if (m_landManagementModule != null) { @@ -168,4 +168,4 @@ namespace OpenSim.Region.Environment.Modules.World.Land #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs index 00994fb9d5..e5bdafc776 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -29,7 +29,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Region.Environment.Interfaces; @@ -38,7 +38,6 @@ using OpenSim.Framework; using OpenSim.Framework.Servers; using OpenSim.Framework.Communications.Capabilities; using OpenSim.Region.Physics.Manager; -using Axiom.Math; using Caps = OpenSim.Framework.Communications.Capabilities.Caps; namespace OpenSim.Region.Environment.Modules.World.Land @@ -165,10 +164,10 @@ namespace OpenSim.Region.Environment.Modules.World.Land lastLandLocalID = LandChannel.START_LAND_LOCAL_ID - 1; landIDList.Initialize(); - ILandObject fullSimParcel = new LandObject(LLUUID.Zero, false, m_scene); + ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); fullSimParcel.setLandBitmap(fullSimParcel.getSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); - if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) fullSimParcel.landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; else fullSimParcel.landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; @@ -176,7 +175,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land AddLandObject(fullSimParcel); } - public List ParcelsNearPoint(LLVector3 position) + public List ParcelsNearPoint(Vector3 position) { List parcelsNear = new List(); for (int x = -4; x <= 4; x += 4) @@ -205,8 +204,8 @@ namespace OpenSim.Region.Environment.Modules.World.Land "You are not allowed on this parcel because you are banned. Please go away. <3 OpenSim Developers"); avatar.PhysicsActor.Position = - new PhysicsVector(avatar.lastKnownAllowedPosition.x, avatar.lastKnownAllowedPosition.y, - avatar.lastKnownAllowedPosition.z); + new PhysicsVector(avatar.lastKnownAllowedPosition.X, avatar.lastKnownAllowedPosition.Y, + avatar.lastKnownAllowedPosition.Z); avatar.PhysicsActor.Velocity = new PhysicsVector(0, 0, 0); } else @@ -216,7 +215,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land } } - public void handleAvatarChangingParcel(ScenePresence avatar, int localLandID, LLUUID regionID) + public void handleAvatarChangingParcel(ScenePresence avatar, int localLandID, UUID regionID) { if (m_scene.RegionInfo.RegionID == regionID) { @@ -353,7 +352,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land } - public void handleParcelAccessRequest(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, + public void handleParcelAccessRequest(UUID agentID, UUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client) { if (landList.ContainsKey(landLocalID)) @@ -362,7 +361,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land } } - public void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID, uint flags, int landLocalID, + public void handleParcelAccessUpdateRequest(UUID agentID, UUID sessionID, uint flags, int landLocalID, List entries, IClientAPI remote_client) { @@ -385,7 +384,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land /// public ILandObject CreateBaseLand() { - return new LandObject(LLUUID.Zero, false, m_scene); + return new LandObject(UUID.Zero, false, m_scene); } /// @@ -529,7 +528,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land public void AddPrimToLandPrimCounts(SceneObjectGroup obj) { - LLVector3 position = obj.AbsolutePosition; + Vector3 position = obj.AbsolutePosition; ILandObject landUnderPrim = GetLandObject(position.X, position.Y); if (landUnderPrim != null) { @@ -548,7 +547,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land public void FinalizeLandPrimCountUpdate() { //Get Simwide prim count for owner - Dictionary> landOwnersAndParcels = new Dictionary>(); + Dictionary> landOwnersAndParcels = new Dictionary>(); foreach (LandObject p in landList.Values) { if (!landOwnersAndParcels.ContainsKey(p.landData.OwnerID)) @@ -563,7 +562,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land } } - foreach (LLUUID owner in landOwnersAndParcels.Keys) + foreach (UUID owner in landOwnersAndParcels.Keys) { int simArea = 0; int simPrims = 0; @@ -617,9 +616,9 @@ namespace OpenSim.Region.Environment.Modules.World.Land /// South Point /// East Point /// North Point - /// LLUUID of user who is trying to subdivide + /// UUID of user who is trying to subdivide /// Returns true if successful - private void subdivide(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id) + private void subdivide(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) { //First, lets loop through the points and make sure they are all in the same peice of land //Get the land object at start @@ -658,7 +657,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land //Lets create a new land object with bitmap activated at that point (keeping the old land objects info) ILandObject newLand = startLandObject.Copy(); newLand.landData.Name = "Subdivision of " + newLand.landData.Name; - newLand.landData.GlobalID = LLUUID.Random(); + newLand.landData.GlobalID = UUID.Random(); newLand.setLandBitmap(newLand.getSquareLandBitmap(start_x, start_y, end_x, end_y)); @@ -683,9 +682,9 @@ namespace OpenSim.Region.Environment.Modules.World.Land /// y value in first piece of land /// x value in second peice of land /// y value in second peice of land - /// LLUUID of the avatar trying to join the land objects + /// UUID of the avatar trying to join the land objects /// Returns true if successful - private void join(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id) + private void join(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) { end_x -= 4; end_y -= 4; @@ -770,13 +769,13 @@ namespace OpenSim.Region.Environment.Modules.World.Land tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_OWNED_BY_REQUESTER); } else if (currentParcelBlock.landData.SalePrice > 0 && - (currentParcelBlock.landData.AuthBuyerID == LLUUID.Zero || + (currentParcelBlock.landData.AuthBuyerID == UUID.Zero || currentParcelBlock.landData.AuthBuyerID == remote_client.AgentId)) { //Sale Flag tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_IS_FOR_SALE); } - else if (currentParcelBlock.landData.OwnerID == LLUUID.Zero) + else if (currentParcelBlock.landData.OwnerID == UUID.Zero) { //Public Flag tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_PUBLIC); @@ -914,7 +913,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { if (m_scene.ExternalChecks.ExternalChecksCanAbandonParcel(remote_client.AgentId, landList[local_id])) { - if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) landList[local_id].landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; else landList[local_id].landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; @@ -930,7 +929,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { if (m_scene.ExternalChecks.ExternalChecksCanReclaimParcel(remote_client.AgentId, landList[local_id])) { - if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) landList[local_id].landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; else landList[local_id].landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; @@ -979,13 +978,13 @@ namespace OpenSim.Region.Environment.Modules.World.Land } if (lob != null) { - LLUUID AuthorizedID = lob.landData.AuthBuyerID; + UUID AuthorizedID = lob.landData.AuthBuyerID; int saleprice = lob.landData.SalePrice; - LLUUID pOwnerID = lob.landData.OwnerID; + UUID pOwnerID = lob.landData.OwnerID; bool landforsale = ((lob.landData.Flags & (uint)(Parcel.ParcelFlags.ForSale | Parcel.ParcelFlags.ForSaleObjects | Parcel.ParcelFlags.SellParcelObjects)) != 0); - if ((AuthorizedID == LLUUID.Zero || AuthorizedID == e.agentId) && e.parcelPrice >= saleprice && landforsale) + if ((AuthorizedID == UUID.Zero || AuthorizedID == e.agentId) && e.parcelPrice >= saleprice && landforsale) { lock (e) { @@ -1027,7 +1026,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land AddLandObject(new_land); } - public void ReturnObjectsInParcel(int localID, uint returnType, LLUUID[] agentIDs, LLUUID[] taskIDs, IClientAPI remoteClient) + public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient) { ILandObject selectedParcel = null; lock (landList) @@ -1065,7 +1064,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land #region CAPS handler - private void OnRegisterCaps(LLUUID agentID, Caps caps) + private void OnRegisterCaps(UUID agentID, Caps caps) { string capsBase = "/CAPS/" + caps.CapsObjectPath; caps.RegisterHandler("RemoteParcelRequest", @@ -1080,7 +1079,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land // we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the // "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to. // So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x - // and y coordinate (each 8 bit), encoded in a LLUUID (128 bit). + // and y coordinate (each 8 bit), encoded in a UUID (128 bit). // // Request format: // @@ -1095,16 +1094,16 @@ namespace OpenSim.Region.Environment.Modules.World.Land // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx // // - private string RemoteParcelRequest(string request, string path, string param, LLUUID agentID, Caps caps) + private string RemoteParcelRequest(string request, string path, string param, UUID agentID, Caps caps) { - LLUUID parcelID = LLUUID.Zero; + UUID parcelID = UUID.Zero; try { Hashtable hash = new Hashtable(); - hash = (Hashtable)LLSD.LLSDDeserialize(Helpers.StringToField(request)); + hash = (Hashtable)LLSD.LLSDDeserialize(Utils.StringToBytes(request)); if (hash.ContainsKey("region_id") && hash.ContainsKey("location")) { - LLUUID regionID = (LLUUID)hash["region_id"]; + UUID regionID = (UUID)hash["region_id"]; ArrayList list = (ArrayList)hash["location"]; uint x = (uint)(double)list[0]; uint y = (uint)(double)list[1]; @@ -1148,9 +1147,9 @@ namespace OpenSim.Region.Environment.Modules.World.Land #endregion - private void handleParcelInfo(IClientAPI remoteClient, LLUUID parcelID) + private void handleParcelInfo(IClientAPI remoteClient, UUID parcelID) { - if (parcelID == LLUUID.Zero) + if (parcelID == UUID.Zero) return; // assume we've got the parcelID we just computed in RemoteParcelRequest diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs index 6388a1c5f2..640b665508 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -67,14 +67,14 @@ namespace OpenSim.Region.Environment.Modules.World.Land set { m_landData = value; } } - public LLUUID regionUUID + public UUID regionUUID { get { return m_scene.RegionInfo.RegionID; } } #region Constructors - public LandObject(LLUUID owner_id, bool is_group_owned, Scene scene) + public LandObject(UUID owner_id, bool is_group_owned, Scene scene) { m_scene = scene; landData.OwnerID = owner_id; @@ -216,7 +216,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land } } - public void updateLandSold(LLUUID avatarID, LLUUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area) + public void updateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area) { LandData newData = landData.Copy(); newData.OwnerID = avatarID; @@ -226,14 +226,14 @@ namespace OpenSim.Region.Environment.Modules.World.Land newData.ClaimDate = Util.UnixTimeSinceEpoch(); newData.ClaimPrice = claimprice; newData.SalePrice = 0; - newData.AuthBuyerID = LLUUID.Zero; + newData.AuthBuyerID = UUID.Zero; newData.Flags &= ~(uint) (Parcel.ParcelFlags.ForSale | Parcel.ParcelFlags.ForSaleObjects | Parcel.ParcelFlags.SellParcelObjects); m_scene.LandChannel.UpdateLandObject(landData.LocalID, newData); sendLandUpdateToAvatarsOverMe(); } - public bool isEitherBannedOrRestricted(LLUUID avatar) + public bool isEitherBannedOrRestricted(UUID avatar) { if (isBannedFromLand(avatar)) { @@ -246,7 +246,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land return false; } - public bool isBannedFromLand(LLUUID avatar) + public bool isBannedFromLand(UUID avatar) { if ((landData.Flags & (uint) Parcel.ParcelFlags.UseBanList) > 0) { @@ -263,7 +263,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land return false; } - public bool isRestrictedFromLand(LLUUID avatar) + public bool isRestrictedFromLand(UUID avatar) { if ((landData.Flags & (uint) Parcel.ParcelFlags.UseAccessList) > 0) { @@ -322,9 +322,9 @@ namespace OpenSim.Region.Environment.Modules.World.Land #region AccessList Functions - public List createAccessListArrayByFlag(ParcelManager.AccessList flag) + public List createAccessListArrayByFlag(ParcelManager.AccessList flag) { - List list = new List(); + List list = new List(); foreach (ParcelManager.ParcelAccessEntry entry in landData.ParcelAccessList) { if (entry.Flags == flag) @@ -334,25 +334,25 @@ namespace OpenSim.Region.Environment.Modules.World.Land } if (list.Count == 0) { - list.Add(LLUUID.Zero); + list.Add(UUID.Zero); } return list; } - public void sendAccessList(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, + public void sendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, IClientAPI remote_client) { if (flags == (uint) ParcelManager.AccessList.Access || flags == (uint) ParcelManager.AccessList.Both) { - List avatars = createAccessListArrayByFlag(ParcelManager.AccessList.Access); + List avatars = createAccessListArrayByFlag(ParcelManager.AccessList.Access); remote_client.SendLandAccessListData(avatars,(uint) ParcelManager.AccessList.Access,landData.LocalID); } if (flags == (uint) ParcelManager.AccessList.Ban || flags == (uint) ParcelManager.AccessList.Both) { - List avatars = createAccessListArrayByFlag(ParcelManager.AccessList.Ban); + List avatars = createAccessListArrayByFlag(ParcelManager.AccessList.Ban); remote_client.SendLandAccessListData(avatars, (uint)ParcelManager.AccessList.Ban, landData.LocalID); } } @@ -361,7 +361,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { LandData newData = landData.Copy(); - if (entries.Count == 1 && entries[0].AgentID == LLUUID.Zero) + if (entries.Count == 1 && entries[0].AgentID == UUID.Zero) { entries.Clear(); } @@ -450,7 +450,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 Vector3((float) (min_x * 4), (float) (min_y * 4), (float) m_scene.Heightmap[tx, ty]); tx = max_x * 4; @@ -460,7 +460,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 Vector3((float) (max_x * 4), (float) (max_y * 4), (float) m_scene.Heightmap[tx, ty]); landData.Area = tempArea; } @@ -694,7 +694,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { if (m_scene.ExternalChecks.ExternalChecksCanEditParcel(remote_client.AgentId, this)) { - Dictionary primCount = new Dictionary(); + Dictionary primCount = new Dictionary(); lock (primsOverMe) { @@ -734,9 +734,9 @@ namespace OpenSim.Region.Environment.Modules.World.Land } } - public Dictionary getLandObjectOwners() + public Dictionary getLandObjectOwners() { - Dictionary ownersAndCount = new Dictionary(); + Dictionary ownersAndCount = new Dictionary(); lock (primsOverMe) { try @@ -771,7 +771,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land m_scene.returnObjects(objs, obj.OwnerID); } - public void returnLandObjects(uint type, LLUUID[] owners, IClientAPI remote_client) + public void returnLandObjects(uint type, UUID[] owners, IClientAPI remote_client) { List objlist = new List(); for (int i = 0; i < owners.Length; i++) @@ -814,7 +814,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land public void addPrimToCount(SceneObjectGroup obj) { - LLUUID prim_owner = obj.OwnerID; + UUID prim_owner = obj.OwnerID; int prim_count = obj.PrimCount; if (obj.IsSelected) @@ -843,7 +843,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { if (primsOverMe.Contains(obj)) { - LLUUID prim_owner = obj.OwnerID; + UUID prim_owner = obj.OwnerID; int prim_count = obj.PrimCount; if (prim_owner == landData.OwnerID) diff --git a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs index c1f5566ac0..541ca18268 100644 --- a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs @@ -28,8 +28,8 @@ using System; using System.Collections.Generic; using System.Net; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -39,12 +39,12 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { private readonly string m_firstname; private readonly string m_lastname; - private readonly LLVector3 m_startPos; - private readonly LLUUID m_uuid = LLUUID.Random(); + private readonly Vector3 m_startPos; + private readonly UUID m_uuid = UUID.Random(); private readonly Scene m_scene; - public NPCAvatar(string firstname, string lastname, LLVector3 position, Scene scene) + public NPCAvatar(string firstname, string lastname, Vector3 position, Scene scene) { m_firstname = firstname; m_lastname = lastname; @@ -77,34 +77,34 @@ namespace OpenSim.Region.Environment.Modules.World.NPC SendOnChatFromViewer(message, ChatTypeEnum.Broadcast); } - public void GiveMoney(LLUUID target, int amount) + public void GiveMoney(UUID target, int amount) { OnMoneyTransferRequest(m_uuid, target, amount, 1, "Payment"); } - public void InstantMessage(LLUUID target, string message) + public void InstantMessage(UUID target, string message) { - OnInstantMessage(this, m_uuid, SessionId, target, LLUUID.Combine(m_uuid, target), + OnInstantMessage(this, m_uuid, SessionId, target, UUID.Combine(m_uuid, target), (uint) Util.UnixTimeSinceEpoch(), Name, message, 0, false, 0, 0, Position, m_scene.RegionInfo.RegionID, new byte[0]); } - public void SendAgentOffline(LLUUID[] agentIDs) + public void SendAgentOffline(UUID[] agentIDs) { } - public void SendAgentOnline(LLUUID[] agentIDs) + public void SendAgentOnline(UUID[] agentIDs) { } - public void SendSitResponse(LLUUID TargetID, LLVector3 OffsetPos, LLQuaternion SitOrientation, bool autopilot, - LLVector3 CameraAtOffset, LLVector3 CameraEyeOffset, bool ForceMouseLook) + public void SendSitResponse(UUID TargetID, Vector3 OffsetPos, Quaternion SitOrientation, bool autopilot, + Vector3 CameraAtOffset, Vector3 CameraEyeOffset, bool ForceMouseLook) { } - public void SendAdminResponse(LLUUID Token, uint AdminLevel) + public void SendAdminResponse(UUID Token, uint AdminLevel) { } @@ -114,12 +114,12 @@ namespace OpenSim.Region.Environment.Modules.World.NPC } - public LLUUID GetDefaultAnimation(string name) + public UUID GetDefaultAnimation(string name) { - return LLUUID.Zero; + return UUID.Zero; } - public LLVector3 Position + public Vector3 Position { get { return m_scene.Entities[m_uuid].AbsolutePosition; } set { m_scene.Entities[m_uuid].AbsolutePosition = value; } @@ -222,7 +222,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC public event UpdateVector OnUpdatePrimGroupScale; public event StatusChange OnChildAgentStatus; public event GenericCall2 OnStopMovement; - public event Action OnRemoveAvatar; + public event Action OnRemoveAvatar; public event CreateNewInventoryItem OnCreateNewInventoryItem; public event CreateInventoryFolder OnCreateNewInventoryFolder; @@ -322,34 +322,34 @@ namespace OpenSim.Region.Environment.Modules.World.NPC #endregion - public void ActivateGesture(LLUUID assetId, LLUUID gestureId) + public void ActivateGesture(UUID assetId, UUID gestureId) { } - public void DeactivateGesture(LLUUID assetId, LLUUID gestureId) + public void DeactivateGesture(UUID assetId, UUID gestureId) { } #region Overrriden Methods IGNORE - public virtual LLVector3 StartPos + public virtual Vector3 StartPos { get { return m_startPos; } set { } } - public virtual LLUUID AgentId + public virtual UUID AgentId { get { return m_uuid; } } - public LLUUID SessionId + public UUID SessionId { - get { return LLUUID.Zero; } + get { return UUID.Zero; } } - public LLUUID SecureSessionId + public UUID SecureSessionId { - get { return LLUUID.Zero; } + get { return UUID.Zero; } } public virtual string FirstName @@ -373,9 +373,9 @@ namespace OpenSim.Region.Environment.Modules.World.NPC set { } } - public LLUUID ActiveGroupId + public UUID ActiveGroupId { - get { return LLUUID.Zero; } + get { return UUID.Zero; } } public string ActiveGroupName @@ -388,10 +388,10 @@ namespace OpenSim.Region.Environment.Modules.World.NPC get { return 0; } } - public ulong GetGroupPowers(LLUUID groupID) - { - return 0; - } + public ulong GetGroupPowers(UUID groupID) + { + return 0; + } public virtual int NextAnimationSequenceNumber { @@ -406,7 +406,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public virtual void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry) + public virtual void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry) { } @@ -422,12 +422,12 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public virtual void SendAgentDataUpdate(LLUUID agentid, LLUUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) + public virtual void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) { } - public virtual void SendKillObject(ulong regionHandle, uint localID) + public virtual void SendKiPrimitive(ulong regionHandle, uint localID) { } @@ -440,27 +440,27 @@ namespace OpenSim.Region.Environment.Modules.World.NPC } - public virtual void SendAnimations(LLUUID[] animations, int[] seqs, LLUUID sourceAgentId) + public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId) { } - public virtual void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, - LLUUID fromAgentID, byte source, byte audible) + public virtual void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, + UUID fromAgentID, byte source, byte audible) { } - public virtual void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, - LLUUID fromAgentID, byte source, byte audible) + public virtual void SendChatMessage(byte[] message, byte type, Vector3 fromPos, string fromName, + UUID fromAgentID, byte source, byte audible) { } - public virtual void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, - LLUUID imSessionID, string fromName, byte dialog, uint timeStamp) + public virtual void SendInstantMessage(UUID fromAgent, UUID fromAgentSession, string message, UUID toAgent, + UUID imSessionID, string fromName, byte dialog, uint timeStamp) { } - public virtual void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, - LLUUID imSessionID, string fromName, byte dialog, uint timeStamp, + public virtual void SendInstantMessage(UUID fromAgent, UUID fromAgentSession, string message, UUID toAgent, + UUID imSessionID, string fromName, byte dialog, uint timeStamp, byte[] binaryBucket) { } @@ -476,7 +476,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public virtual void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look) + public virtual void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look) { } @@ -489,7 +489,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC return new AgentCircuitData(); } - public virtual void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, + public virtual void CrossRegion(ulong newRegionHandle, Vector3 pos, Vector3 lookAt, IPEndPoint newRegionExternalEndPoint, string capsURL) { } @@ -498,7 +498,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public virtual void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags) + public virtual void SendLocalTeleport(Vector3 position, Vector3 lookAt, uint flags) { } @@ -515,66 +515,66 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public virtual void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance) + public virtual void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance) { } - public virtual void SendPayPrice(LLUUID objectID, int[] payPrice) + public virtual void SendPayPrice(UUID objectID, int[] payPrice) { } - public virtual void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, - uint avatarLocalID, LLVector3 Pos, byte[] textureEntry, uint parentID, LLQuaternion rotation) + public virtual void SendAvatarData(ulong regionHandle, string firstName, string lastName, UUID avatarID, + uint avatarLocalID, Vector3 Pos, byte[] textureEntry, uint parentID, Quaternion rotation) { } public virtual void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, - LLVector3 position, LLVector3 velocity, LLQuaternion rotation) + Vector3 position, Vector3 velocity, Quaternion rotation) { } - public virtual void SendCoarseLocationUpdate(List CoarseLocations) + public virtual void SendCoarseLocationUpdate(List CoarseLocations) { } - public virtual void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint) + public virtual void AttachObject(uint localID, Quaternion rotation, byte attachPoint) { } - public virtual void SendDialog(string objectname, LLUUID objectID, LLUUID ownerID, string msg, LLUUID textureID, int ch, string[] buttonlabels) + public virtual void SendDialog(string objectname, UUID objectID, UUID ownerID, string msg, UUID textureID, int ch, string[] buttonlabels) { } public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, - PrimitiveBaseShape primShape, LLVector3 pos, LLVector3 vel, - LLVector3 acc, LLQuaternion rotation, LLVector3 rvel, uint flags, - LLUUID objectID, LLUUID ownerID, string text, byte[] color, + PrimitiveBaseShape primShape, Vector3 pos, Vector3 vel, + Vector3 acc, Quaternion rotation, Vector3 rvel, uint flags, + UUID objectID, UUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, byte clickAction) { } public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, - PrimitiveBaseShape primShape, LLVector3 pos, LLVector3 vel, - LLVector3 acc, LLQuaternion rotation, LLVector3 rvel, uint flags, - LLUUID objectID, LLUUID ownerID, string text, byte[] color, + PrimitiveBaseShape primShape, Vector3 pos, Vector3 vel, + Vector3 acc, Quaternion rotation, Vector3 rvel, uint flags, + UUID objectID, UUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, byte clickAction, byte[] textureanimation, - bool attachment, uint AttachmentPoint, LLUUID AssetId, LLUUID SoundId, double SoundVolume, byte SoundFlags, double SoundRadius) + bool attachment, uint AttachmentPoint, UUID AssetId, UUID SoundId, double SoundVolume, byte SoundFlags, double SoundRadius) { } public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, - LLVector3 position, LLQuaternion rotation, LLVector3 velocity, - LLVector3 rotationalvelocity, byte state, LLUUID AssetId) + Vector3 position, Quaternion rotation, Vector3 velocity, + Vector3 rotationalvelocity, byte state, UUID AssetId) { } public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, - LLVector3 position, LLQuaternion rotation, LLVector3 velocity, - LLVector3 rotationalvelocity) + Vector3 position, Quaternion rotation, Vector3 velocity, + Vector3 rotationalvelocity) { } - public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, + public virtual void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List items, List folders, bool fetchFolders, @@ -582,7 +582,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public virtual void SendInventoryItemDetails(LLUUID ownerID, InventoryItemBase item) + public virtual void SendInventoryItemDetails(UUID ownerID, InventoryItemBase item) { } @@ -590,7 +590,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public virtual void SendRemoveInventoryItem(LLUUID itemID) + public virtual void SendRemoveInventoryItem(UUID itemID) { } @@ -603,7 +603,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public virtual void SendTaskInventory(LLUUID taskID, short serial, byte[] fileName) + public virtual void SendTaskInventory(UUID taskID, short serial, byte[] fileName) { } @@ -618,24 +618,24 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public virtual void SendNameReply(LLUUID profileId, string firstname, string lastname) + public virtual void SendNameReply(UUID profileId, string firstname, string lastname) { } - public virtual void SendPreLoadSound(LLUUID objectID, LLUUID ownerID, LLUUID soundID) + public virtual void SendPreLoadSound(UUID objectID, UUID ownerID, UUID soundID) { } - public virtual void SendPlayAttachedSound(LLUUID soundID, LLUUID objectID, LLUUID ownerID, float gain, + public virtual void SendPlayAttachedSound(UUID soundID, UUID objectID, UUID ownerID, float gain, byte flags) { } - public void SendTriggeredSound(LLUUID soundID, LLUUID ownerID, LLUUID objectID, LLUUID parentID, ulong handle, LLVector3 position, float gain) + public void SendTriggeredSound(UUID soundID, UUID ownerID, UUID objectID, UUID parentID, ulong handle, Vector3 position, float gain) { } - public void SendAttachedSoundGainChange(LLUUID objectID, float gain) + public void SendAttachedSoundGainChange(UUID objectID, float gain) { } @@ -652,7 +652,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public void SendLoadURL(string objectname, LLUUID objectID, LLUUID ownerID, bool groupOwned, string message, + public void SendLoadURL(string objectname, UUID objectID, UUID ownerID, bool groupOwned, string message, string url) { } @@ -669,7 +669,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC OnCompleteMovementToRegion(); } } - public void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, LLUUID AssetFullID) + public void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, UUID AssetFullID) { } @@ -677,11 +677,11 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public void SendXferRequest(ulong XferID, short AssetType, LLUUID vFileID, byte FilePath, byte[] FileName) + public void SendXferRequest(ulong XferID, short AssetType, UUID vFileID, byte FilePath, byte[] FileName) { } - public void SendImagePart(ushort numParts, LLUUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec) + public void SendImagePart(ushort numParts, UUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec) { } @@ -693,16 +693,16 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public void SendObjectPropertiesFamilyData(uint RequestFlags, LLUUID ObjectUUID, LLUUID OwnerID, LLUUID GroupID, + public void SendObjectPropertiesFamilyData(uint RequestFlags, UUID ObjectUUID, UUID OwnerID, UUID GroupID, uint BaseMask, uint OwnerMask, uint GroupMask, uint EveryoneMask, uint NextOwnerMask, int OwnershipCost, byte SaleType, int SalePrice, uint Category, - LLUUID LastOwnerID, string ObjectName, string Description) + UUID LastOwnerID, string ObjectName, string Description) { } - public void SendObjectPropertiesReply(LLUUID ItemID, ulong CreationDate, LLUUID CreatorUUID, LLUUID FolderUUID, LLUUID FromTaskUUID, - LLUUID GroupUUID, short InventorySerial, LLUUID LastOwnerUUID, LLUUID ObjectUUID, - LLUUID OwnerUUID, string TouchTitle, byte[] TextureID, string SitTitle, string ItemName, + public void SendObjectPropertiesReply(UUID ItemID, ulong CreationDate, UUID CreatorUUID, UUID FolderUUID, UUID FromTaskUUID, + UUID GroupUUID, short InventorySerial, UUID LastOwnerUUID, UUID ObjectUUID, + UUID OwnerUUID, string TouchTitle, byte[] TextureID, string SitTitle, string ItemName, string ItemDescription, uint OwnerMask, uint NextOwnerMask, uint GroupMask, uint EveryoneMask, uint BaseMask, byte saleType, int salePrice) { @@ -713,7 +713,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC return false; } - public void SendSunPos(LLVector3 sunPos, LLVector3 sunVel, ulong time, uint dlen, uint ylen, float phase) + public void SendSunPos(Vector3 sunPos, Vector3 sunVel, ulong time, uint dlen, uint ylen, float phase) { } @@ -721,9 +721,9 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public void SendAvatarProperties(LLUUID avatarID, string aboutText, string bornOn, Byte[] charterMember, - string flAbout, uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, - LLUUID partnerID) + public void SendAvatarProperties(UUID avatarID, string aboutText, string bornOn, Byte[] charterMember, + string flAbout, uint flags, UUID flImageID, UUID imageID, string profileURL, + UUID partnerID) { } @@ -762,7 +762,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC get { return m_circuitCode; } set { m_circuitCode = value; } } - public void SendBlueBoxMessage(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message) + public void SendBlueBoxMessage(UUID FromAvatarID, UUID fromSessionID, String FromAvatarName, String Message) { } @@ -783,52 +783,52 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public void SendScriptQuestion(LLUUID objectID, string taskName, string ownerName, LLUUID itemID, int question) + public void SendScriptQuestion(UUID objectID, string taskName, string ownerName, UUID itemID, int question) { } public void SendHealth(float health) { } - public void SendEstateManagersList(LLUUID invoice, LLUUID[] EstateManagers, uint estateID) + public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID) { } - public void SendBannedUserList(LLUUID invoice, EstateBan[] banlist, uint estateID) + public void SendBannedUserList(UUID invoice, EstateBan[] banlist, uint estateID) { } public void SendRegionInfoToEstateMenu(RegionInfoForEstateMenuArgs args) { } - public void SendEstateCovenantInformation(LLUUID covenant) + public void SendEstateCovenantInformation(UUID covenant) { } - public void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, LLUUID covenant, string abuseEmail) + public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail) { } public void SendLandProperties(IClientAPI remote_client, int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor,int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) { } - public void SendLandAccessListData(List avatars, uint accessFlag, int localLandID) + public void SendLandAccessListData(List avatars, uint accessFlag, int localLandID) { } public void SendForceClientSelectObjects(List objectIDs) { } - public void SendLandObjectOwners(Dictionary ownersAndCount) + public void SendLandObjectOwners(Dictionary ownersAndCount) { } public void SendLandParcelOverlay(byte[] data, int sequence_id) { } - public void SendGroupNameReply(LLUUID groupLLUID, string GroupName) + public void SendGroupNameReply(UUID groupLLUID, string GroupName) { } - public void SendScriptRunningReply(LLUUID objectID, LLUUID itemID, bool running) + public void SendScriptRunningReply(UUID objectID, UUID itemID, bool running) { } @@ -842,25 +842,25 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public void SendParcelMediaUpdate(string mediaUrl, LLUUID mediaTextureID, + public void SendParcelMediaUpdate(string mediaUrl, UUID mediaTextureID, byte autoScale, string mediaType, string mediaDesc, int mediaWidth, int mediaHeight, byte mediaLoop) { } - public void SendSetFollowCamProperties (LLUUID objectID, SortedDictionary parameters) + public void SendSetFollowCamProperties (UUID objectID, SortedDictionary parameters) { } - public void SendClearFollowCamProperties (LLUUID objectID) + public void SendClearFollowCamProperties (UUID objectID) { } - public void SendRegionHandle (LLUUID regoinID, ulong handle) + public void SendRegionHandle (UUID regoinID, ulong handle) { } - public void SendParcelInfo (RegionInfo info, LandData land, LLUUID parcelID, uint x, uint y) + public void SendParcelInfo (RegionInfo info, LandData land, UUID parcelID, uint x, uint y) { } diff --git a/OpenSim/Region/Environment/Modules/World/NPC/NPCModule.cs b/OpenSim/Region/Environment/Modules/World/NPC/NPCModule.cs index 86472f66ea..7227cf09c1 100644 --- a/OpenSim/Region/Environment/Modules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/Environment/Modules/World/NPC/NPCModule.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; @@ -40,8 +40,8 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { // if (m_enabled) // { - // NPCAvatar testAvatar = new NPCAvatar("Jack", "NPC", new LLVector3(128, 128, 40), scene); - // NPCAvatar testAvatar2 = new NPCAvatar("Jill", "NPC", new LLVector3(136, 128, 40), scene); + // NPCAvatar testAvatar = new NPCAvatar("Jack", "NPC", new Vector3(128, 128, 40), scene); + // NPCAvatar testAvatar2 = new NPCAvatar("Jill", "NPC", new Vector3(136, 128, 40), scene); // scene.AddNewClient(testAvatar, false); // scene.AddNewClient(testAvatar2, false); // } diff --git a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs index b9615ec9b6..d92f33a7ea 100644 --- a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using Nini.Config; using System; using System.Collections; @@ -228,7 +228,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions #endregion #region Helper Functions - protected void SendPermissionError(LLUUID user, string reason) + protected void SendPermissionError(UUID user, string reason) { m_scene.EventManager.TriggerPermissionError(user, reason); } @@ -238,14 +238,14 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions m_log.Info("[PERMISSIONS]: " + permissionCalled + " was called from " + m_scene.RegionInfo.RegionName); } - protected bool IsAdministrator(LLUUID user) + protected bool IsAdministrator(UUID user) { - if (m_scene.RegionInfo.MasterAvatarAssignedUUID != LLUUID.Zero) + if (m_scene.RegionInfo.MasterAvatarAssignedUUID != UUID.Zero) { if (m_RegionOwnerIsGod && (m_scene.RegionInfo.MasterAvatarAssignedUUID == user)) return true; } - if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) { if (m_scene.RegionInfo.EstateSettings.EstateOwner == user) return true; @@ -263,7 +263,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return false; } - protected bool IsEstateManager(LLUUID user) + protected bool IsEstateManager(UUID user) { return m_scene.RegionInfo.EstateSettings.IsEstateManager(user); } @@ -286,7 +286,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions #region Object Permissions - public uint GenerateClientFlags(LLUUID user, LLUUID objID) + public uint GenerateClientFlags(UUID user, UUID objID) { // Here's the way this works, // ObjectFlags and Permission flags are two different enumerations @@ -306,27 +306,27 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return (uint)0; uint objflags = task.GetEffectiveObjectFlags(); - LLUUID objectOwner = task.OwnerID; + UUID 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.ObjectAnyOwner | // Tells client that someone owns the object - LLObject.ObjectFlags.ObjectOwnerModify | // 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 + ~(PrimFlags.ObjectCopy | // Tells client you can copy the object + PrimFlags.ObjectModify | // tells client you can modify the object + PrimFlags.ObjectMove | // tells client that you can move the object (only, no mod) + PrimFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it + PrimFlags.ObjectYouOwner | // Tells client that you're the owner of the object + PrimFlags.ObjectAnyOwner | // Tells client that someone owns the object + PrimFlags.ObjectOwnerModify | // Tells client that you're the owner of the object + PrimFlags.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 | (uint)LLObject.ObjectFlags.ObjectAnyOwner | (uint)LLObject.ObjectFlags.ObjectOwnerModify; + objectOwnerMask |= (uint)PrimFlags.ObjectYouOwner | (uint)PrimFlags.ObjectAnyOwner | (uint)PrimFlags.ObjectOwnerModify; // Customize the GroupMask // uint objectGroupMask = ApplyObjectModifyMasks(task.GroupMask, objflags); @@ -336,8 +336,8 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions // Hack to allow collaboration until Groups and Group Permissions are implemented - if ((objectEveryoneMask & (uint)LLObject.ObjectFlags.ObjectMove) != 0) - objectEveryoneMask |= (uint)LLObject.ObjectFlags.ObjectModify; + if ((objectEveryoneMask & (uint)PrimFlags.ObjectMove) != 0) + objectEveryoneMask |= (uint)PrimFlags.ObjectModify; if (m_bypassPermissions) return objectOwnerMask; @@ -378,28 +378,28 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions if ((setPermissionMask & (uint)PermissionMask.Copy) != 0) { - objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectCopy; + objectFlagsMask |= (uint)PrimFlags.ObjectCopy; } if ((setPermissionMask & (uint)PermissionMask.Move) != 0) { - objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectMove; + objectFlagsMask |= (uint)PrimFlags.ObjectMove; } if ((setPermissionMask & (uint)PermissionMask.Modify) != 0) { - objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectModify; + objectFlagsMask |= (uint)PrimFlags.ObjectModify; } if ((setPermissionMask & (uint)PermissionMask.Transfer) != 0) { - objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectTransfer; + objectFlagsMask |= (uint)PrimFlags.ObjectTransfer; } return objectFlagsMask; } - protected bool GenericObjectPermission(LLUUID currentUser, LLUUID objId, bool denyOnLocked) + protected bool GenericObjectPermission(UUID currentUser, UUID objId, bool denyOnLocked) { // Default: deny bool permission = false; @@ -419,7 +419,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[objId]; - LLUUID objectOwner = group.OwnerID; + UUID objectOwner = group.OwnerID; locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0); // People shouldn't be able to do anything with locked objects, except the Administrator @@ -472,7 +472,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions #endregion #region Generic Permissions - protected bool GenericCommunicationPermission(LLUUID user, LLUUID target) + protected bool GenericCommunicationPermission(UUID user, UUID target) { // Setting this to true so that cool stuff can happen until we define what determines Generic Communication Permission bool permission = true; @@ -491,7 +491,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return permission; } - public bool GenericEstatePermission(LLUUID user) + public bool GenericEstatePermission(UUID user) { // Default: deny bool permission = false; @@ -507,7 +507,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return permission; } - protected bool GenericParcelPermission(LLUUID user, ILandObject parcel) + protected bool GenericParcelPermission(UUID user, ILandObject parcel) { bool permission = false; @@ -534,7 +534,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return permission; } - protected bool GenericParcelPermission(LLUUID user, LLVector3 pos) + protected bool GenericParcelPermission(UUID user, Vector3 pos) { ILandObject parcel = m_scene.LandChannel.GetLandObject(pos.X, pos.Y); if (parcel == null) return false; @@ -543,7 +543,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions #endregion #region Permission Checks - private bool CanAbandonParcel(LLUUID user, ILandObject parcel, Scene scene) + private bool CanAbandonParcel(UUID user, ILandObject parcel, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -551,7 +551,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericParcelPermission(user, parcel); } - private bool CanReclaimParcel(LLUUID user, ILandObject parcel, Scene scene) + private bool CanReclaimParcel(UUID user, ILandObject parcel, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -559,7 +559,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericParcelPermission(user, parcel); } - private bool CanBeGodLike(LLUUID user, Scene scene) + private bool CanBeGodLike(UUID user, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -567,7 +567,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return IsAdministrator(user); } - private bool CanDuplicateObject(int objectCount, LLUUID objectID, LLUUID owner, Scene scene, LLVector3 objectPosition) + private bool CanDuplicateObject(int objectCount, UUID objectID, UUID owner, Scene scene, Vector3 objectPosition) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -581,7 +581,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return CanRezObject(objectCount, owner, objectPosition, scene); } - private bool CanDeleteObject(LLUUID objectID, LLUUID deleter, Scene scene) + private bool CanDeleteObject(UUID objectID, UUID deleter, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -589,7 +589,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericObjectPermission(deleter, objectID, false); } - private bool CanEditObject(LLUUID objectID, LLUUID editorID, Scene scene) + private bool CanEditObject(UUID objectID, UUID editorID, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -598,7 +598,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericObjectPermission(editorID, objectID, false); } - private bool CanEditParcel(LLUUID user, ILandObject parcel, Scene scene) + private bool CanEditParcel(UUID user, ILandObject parcel, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -606,7 +606,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericParcelPermission(user, parcel); } - private bool CanEditScript(LLUUID script, LLUUID objectID, LLUUID user, Scene scene) + private bool CanEditScript(UUID script, UUID objectID, UUID user, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -614,7 +614,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return false; } - private bool CanEditNotecard(LLUUID notecard, LLUUID objectID, LLUUID user, Scene scene) + private bool CanEditNotecard(UUID notecard, UUID objectID, UUID user, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -622,7 +622,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return true; } - private bool CanInstantMessage(LLUUID user, LLUUID target, Scene startScene) + private bool CanInstantMessage(UUID user, UUID target, Scene startScene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -631,7 +631,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericCommunicationPermission(user, target); } - private bool CanInventoryTransfer(LLUUID user, LLUUID target, Scene startScene) + private bool CanInventoryTransfer(UUID user, UUID target, Scene startScene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -639,7 +639,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericCommunicationPermission(user, target); } - private bool CanIssueEstateCommand(LLUUID user, Scene requestFromScene, bool ownerCommand) + private bool CanIssueEstateCommand(UUID user, Scene requestFromScene, bool ownerCommand) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -656,7 +656,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericEstatePermission(user); } - private bool CanMoveObject(LLUUID objectID, LLUUID moverID, Scene scene) + private bool CanMoveObject(UUID objectID, UUID moverID, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) @@ -696,10 +696,10 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objectID]; - // LLUUID taskOwner = null; + // UUID 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; + // UUID objectOwner = task.OwnerID; // Anyone can move if ((task.RootPart.EveryoneMask & PERM_MOVE) != 0) @@ -727,7 +727,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[objectID]; - LLUUID objectOwner = group.OwnerID; + UUID objectOwner = group.OwnerID; locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0); @@ -747,7 +747,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return permission; } - private bool CanObjectEntry(LLUUID objectID, LLVector3 newPoint, Scene scene) + private bool CanObjectEntry(UUID objectID, Vector3 newPoint, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -764,7 +764,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return false; } - if ((land.landData.Flags & ((int)Parcel.ParcelFlags.AllowAllObjectEntry)) != 0) + if ((land.landData.Flags & ((int)Parcel.ParcelFlags.AllowAPrimitiveEntry)) != 0) { return true; } @@ -793,7 +793,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return false; } - private bool CanReturnObject(LLUUID objectID, LLUUID returnerID, Scene scene) + private bool CanReturnObject(UUID objectID, UUID returnerID, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -801,7 +801,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericObjectPermission(returnerID, objectID, false); } - private bool CanRezObject(int objectCount, LLUUID owner, LLVector3 objectPosition, Scene scene) + private bool CanRezObject(int objectCount, UUID owner, Vector3 objectPosition, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -830,7 +830,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return permission; } - private bool CanRunConsoleCommand(LLUUID user, Scene requestFromScene) + private bool CanRunConsoleCommand(UUID user, Scene requestFromScene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -839,7 +839,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return IsAdministrator(user); } - private bool CanRunScript(LLUUID script, LLUUID objectID, LLUUID user, Scene scene) + private bool CanRunScript(UUID script, UUID objectID, UUID user, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -847,7 +847,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return true; } - private bool CanSellParcel(LLUUID user, ILandObject parcel, Scene scene) + private bool CanSellParcel(UUID user, ILandObject parcel, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -855,7 +855,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericParcelPermission(user, parcel); } - private bool CanTakeObject(LLUUID objectID, LLUUID stealer, Scene scene) + private bool CanTakeObject(UUID objectID, UUID stealer, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -863,7 +863,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericObjectPermission(stealer,objectID, false); } - private bool CanTakeCopyObject(LLUUID objectID, LLUUID userID, Scene inScene) + private bool CanTakeCopyObject(UUID objectID, UUID userID, Scene inScene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -883,10 +883,10 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions } SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objectID]; - // LLUUID taskOwner = null; + // UUID 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; + // UUID objectOwner = task.OwnerID; if ((task.RootPart.EveryoneMask & PERM_COPY) != 0) @@ -895,7 +895,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return permission; } - private bool CanTerraformLand(LLUUID user, LLVector3 position, Scene requestFromScene) + private bool CanTerraformLand(UUID user, Vector3 position, Scene requestFromScene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -927,7 +927,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return permission; } - private bool CanViewScript(LLUUID script, LLUUID objectID, LLUUID user, Scene scene) + private bool CanViewScript(UUID script, UUID objectID, UUID user, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -935,7 +935,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return false; } - private bool CanViewNotecard(LLUUID notecard, LLUUID objectID, LLUUID user, Scene scene) + private bool CanViewNotecard(UUID notecard, UUID objectID, UUID user, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -945,7 +945,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions #endregion - public bool CanLinkObject(LLUUID userID, LLUUID objectID) + public bool CanLinkObject(UUID userID, UUID objectID) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -953,7 +953,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return true; } - public bool CanDelinkObject(LLUUID userID, LLUUID objectID) + public bool CanDelinkObject(UUID userID, UUID objectID) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -961,7 +961,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return true; } - public bool CanBuyLand(LLUUID userID, ILandObject parcel, Scene scene) + public bool CanBuyLand(UUID userID, ILandObject parcel, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -969,7 +969,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return true; } - public bool CanCopyInventory(LLUUID itemID, LLUUID objectID, LLUUID userID) + public bool CanCopyInventory(UUID itemID, UUID objectID, UUID userID) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -977,7 +977,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return true; } - public bool CanDeleteInventory(LLUUID itemID, LLUUID objectID, LLUUID userID) + public bool CanDeleteInventory(UUID itemID, UUID objectID, UUID userID) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -985,7 +985,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return true; } - public bool CanCreateInventory(uint invType, LLUUID objectID, LLUUID userID) + public bool CanCreateInventory(uint invType, UUID objectID, UUID userID) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; @@ -993,7 +993,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return true; } - public bool CanTeleport(LLUUID userID) + public bool CanTeleport(UUID userID) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs index e76d40d1f8..bbc4acf4de 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using System.Collections.Generic; using System.IO; using OpenSim.Region.Environment.Scenes; @@ -43,7 +43,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser /// /// /// - void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, LLVector3 loadOffset); + void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, Vector3 loadOffset); /// /// Save prims in the xml format @@ -76,14 +76,14 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser /// /// Save prims in the xml2 format, optionally specifying a bounding box for which - /// prims should be saved. If both min and max vectors are LLVector3.Zero, then all prims + /// prims should be saved. If both min and max vectors are Vector3.Zero, then all prims /// are exported. /// /// /// /// /// - void SavePrimsToXml2(Scene scene, TextWriter stream, LLVector3 min, LLVector3 max); + void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max); /// /// Save a set of prims in the xml2 format @@ -94,14 +94,14 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser /// /// Save a set of prims in the xml2 format, optionally specifying a bounding box for which - /// prims should be saved. If both min and max vectors are LLVector3.Zero, then all prims + /// prims should be saved. If both min and max vectors are Vector3.Zero, then all prims /// are exported. /// /// /// /// /// - void SavePrimListToXml2(List entityList, TextWriter stream, LLVector3 min, LLVector3 max); + void SavePrimListToXml2(List entityList, TextWriter stream, Vector3 min, Vector3 max); /// /// Deserializes a scene object from its xml2 representation. This does not load the object into the scene. diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs index 22c9b29545..d1cc0824fe 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs @@ -30,8 +30,7 @@ using System.Collections.Generic; using System.IO; //using System.Reflection; using System.Xml; -using Axiom.Math; -using libsecondlife; +using OpenMetaverse; //using log4net; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; @@ -45,7 +44,7 @@ namespace OpenSim.Region.Environment.Scenes { //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public static void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, LLVector3 loadOffset) + public static void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, Vector3 loadOffset) { XmlDocument doc = new XmlDocument(); XmlNode rootNode; @@ -208,7 +207,7 @@ namespace OpenSim.Region.Environment.Scenes SavePrimListToXml2(EntityList, fileName); } - public static void SavePrimsToXml2(Scene scene, TextWriter stream, LLVector3 min, LLVector3 max) + public static void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max) { List EntityList = scene.GetEntities(); @@ -223,7 +222,7 @@ namespace OpenSim.Region.Environment.Scenes StreamWriter stream = new StreamWriter(file); try { - SavePrimListToXml2(entityList, stream, LLVector3.Zero, LLVector3.Zero); + SavePrimListToXml2(entityList, stream, Vector3.Zero, Vector3.Zero); } finally { @@ -236,7 +235,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public static void SavePrimListToXml2(List entityList, TextWriter stream, LLVector3 min, LLVector3 max) + public static void SavePrimListToXml2(List entityList, TextWriter stream, Vector3 min, Vector3 max) { int primCount = 0; stream.WriteLine("\n"); @@ -246,9 +245,9 @@ namespace OpenSim.Region.Environment.Scenes if (ent is SceneObjectGroup) { SceneObjectGroup g = (SceneObjectGroup)ent; - if (!min.Equals(LLVector3.Zero) || !max.Equals(LLVector3.Zero)) + if (!min.Equals(Vector3.Zero) || !max.Equals(Vector3.Zero)) { - LLVector3 pos = g.RootPart.GetWorldPosition(); + Vector3 pos = g.RootPart.GetWorldPosition(); if (min.X > pos.X || min.Y > pos.Y || min.Z > pos.Z) continue; if (max.X < pos.X || max.Y < pos.Y || max.Z < pos.Z) diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiseObjects.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiseObjects.cs index 0d69553751..ffd90bf2cf 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiseObjects.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiseObjects.cs @@ -40,11 +40,11 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser public string WriteToFile(Scene scene, string dir) { - string targetFileName = dir + "objects.xml"; + string targetFileName = dir + "objects.Xml"; SaveSerialisedToFile(targetFileName, scene); - return "objects.xml"; + return "objects.Xml"; } #endregion @@ -122,4 +122,4 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser #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 d722d6863f..e3eb37748d 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.IO; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Modules.Framework.InterfaceCommander; @@ -87,7 +87,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser #region IRegionSerialiser Members - public void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, LLVector3 loadOffset) + public void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, Vector3 loadOffset) { SceneXmlLoader.LoadPrimsFromXml(scene, fileName, newIDS, loadOffset); } @@ -112,7 +112,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser SceneXmlLoader.SavePrimsToXml2(scene, fileName); } - public void SavePrimsToXml2(Scene scene, TextWriter stream, LLVector3 min, LLVector3 max) + public void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max) { SceneXmlLoader.SavePrimsToXml2(scene, stream, min, max); } @@ -132,7 +132,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser SceneXmlLoader.SavePrimListToXml2(entityList, fileName); } - public void SavePrimListToXml2(List entityList, TextWriter stream, LLVector3 min, LLVector3 max) + public void SavePrimListToXml2(List entityList, TextWriter stream, Vector3 min, Vector3 max) { SceneXmlLoader.SavePrimListToXml2(entityList, stream, min, max); } diff --git a/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs b/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs index 96904332b4..826fe93dc8 100644 --- a/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -91,14 +91,14 @@ namespace OpenSim.Region.Environment.Modules // private double VWTimeRatio; // VW time as a ratio of real time // Working values - private LLVector3 Position = new LLVector3(0,0,0); - private LLVector3 Velocity = new LLVector3(0,0,0); - private LLQuaternion Tilt = new LLQuaternion(1,0,0,0); + private Vector3 Position = Vector3.Zero; + private Vector3 Velocity = Vector3.Zero; + private Quaternion Tilt = Quaternion.Identity; private long LindenHourOffset = 0; private bool sunFixed = false; - private Dictionary m_rootAgents = new Dictionary(); + private Dictionary m_rootAgents = new Dictionary(); // Current time in elpased seconds since Jan 1st 1970 private ulong CurrentTime @@ -348,14 +348,14 @@ namespace OpenSim.Region.Environment.Modules // For interest we rotate it slightly about the X access. // Celestial tilt is a value that ranges .025 - Position = LLVector3.Rot(Position,Tilt); + Position *= Tilt; // Finally we shift the axis so that more of the // circle is above the horizon than below. This // makes the nights shorter than the days. Position.Z = Position.Z + (float) HorizonShift; - Position = LLVector3.Norm(Position); + Position = Vector3.Normalize(Position); // m_log.Debug("[SUN] Position("+Position.X+","+Position.Y+","+Position.Z+")"); @@ -365,7 +365,7 @@ namespace OpenSim.Region.Environment.Modules // Correct angular velocity to reflect the seasonal rotation - Magnitude = LLVector3.Mag(Position); + Magnitude = Position.Length(); if (sunFixed) { Velocity.X = 0; @@ -374,13 +374,12 @@ namespace OpenSim.Region.Environment.Modules return; } - Velocity = LLVector3.Rot(Velocity, Tilt)*((float)(1.0/Magnitude)); + Velocity = (Velocity * Tilt) * (1.0f / Magnitude); // m_log.Debug("[SUN] Velocity("+Velocity.X+","+Velocity.Y+","+Velocity.Z+")"); - } - private void ClientLoggedOut(LLUUID AgentId) + private void ClientLoggedOut(UUID AgentId) { lock (m_rootAgents) { @@ -392,7 +391,7 @@ namespace OpenSim.Region.Environment.Modules } } - private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, LLUUID regionID) + private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) { lock (m_rootAgents) { diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs index 4a62446869..ed4075c075 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -591,7 +591,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain float south, float east, IClientAPI remoteClient) { // Not a good permissions check, if in area mode, need to check the entire area. - if (m_scene.ExternalChecks.ExternalChecksCanTerraformLand(remoteClient.AgentId, new LLVector3(north, west, 0))) + if (m_scene.ExternalChecks.ExternalChecksCanTerraformLand(remoteClient.AgentId, new Vector3(north, west, 0))) { if (north == south && east == west) { @@ -648,7 +648,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain // Not a good permissions check (see client_OnModifyTerrain above), need to check the entire area. // for now check a point in the centre of the region - if (m_scene.ExternalChecks.ExternalChecksCanTerraformLand(remoteClient.AgentId, new LLVector3(127, 127, 0))) + if (m_scene.ExternalChecks.ExternalChecksCanTerraformLand(remoteClient.AgentId, new Vector3(127, 127, 0))) { InterfaceBakeTerrain(null); //bake terrain does not use the passed in parameter } diff --git a/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs b/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs index 98b3bf8fc0..bbd7b7077b 100644 --- a/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs +++ b/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs @@ -29,8 +29,7 @@ using System; using System.Collections.Generic; using System.Reflection; using System.Timers; -using Axiom.Math; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -49,7 +48,7 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator public double m_tree_density = 50.0; // Aim for this many per region public double m_tree_updates = 1000.0; // MS between updates - private List m_trees; + private List m_trees; #region IRegionModule Members @@ -63,7 +62,7 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator { } - m_trees = new List(); + m_trees = new List(); m_scene = scene; m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; @@ -98,24 +97,24 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator { if (args[0] == "tree") { - LLUUID uuid = m_scene.RegionInfo.EstateSettings.EstateOwner; - if (uuid == LLUUID.Zero) + UUID uuid = m_scene.RegionInfo.EstateSettings.EstateOwner; + if (uuid == UUID.Zero) uuid = m_scene.RegionInfo.MasterAvatarAssignedUUID; m_log.Debug("[TREES]: New tree planting"); - CreateTree(uuid, new LLVector3(128.0f, 128.0f, 0.0f)); + CreateTree(uuid, new Vector3(128.0f, 128.0f, 0.0f)); } } private void growTrees() { - foreach (LLUUID tree in m_trees) + foreach (UUID tree in m_trees) { if (m_scene.Entities.ContainsKey(tree)) { SceneObjectPart s_tree = ((SceneObjectGroup) m_scene.Entities[tree]).RootPart; // 100 seconds to grow 1m - s_tree.Scale += new LLVector3(0.1f, 0.1f, 0.1f); + s_tree.Scale += new Vector3(0.1f, 0.1f, 0.1f); s_tree.SendFullUpdateToAllClients(); //s_tree.ScheduleTerseUpdate(); } @@ -128,7 +127,7 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator private void seedTrees() { - foreach (LLUUID tree in m_trees) + foreach (UUID tree in m_trees) { if (m_scene.Entities.ContainsKey(tree)) { @@ -151,7 +150,7 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator private void killTrees() { - foreach (LLUUID tree in m_trees) + foreach (UUID tree in m_trees) { double killLikelyhood = 0.0; @@ -162,7 +161,7 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator Math.Pow(selectedTree.Scale.Y, 2) + Math.Pow(selectedTree.Scale.Z, 2)); - foreach (LLUUID picktree in m_trees) + foreach (UUID picktree in m_trees) { if (picktree != tree) { @@ -187,7 +186,7 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator m_scene.ForEachClient(delegate(IClientAPI controller) { - controller.SendKillObject(m_scene.RegionInfo.RegionHandle, + controller.SendKiPrimitive(m_scene.RegionInfo.RegionHandle, selectedTree.LocalId); }); @@ -204,7 +203,7 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator private void SpawnChild(SceneObjectPart s_tree) { - LLVector3 position = new LLVector3(); + Vector3 position = new Vector3(); position.X = s_tree.AbsolutePosition.X + (1 * (-1 * Util.RandomClass.Next(1))); if (position.X > 255) @@ -223,20 +222,20 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator position.X += (float) randX; position.Y += (float) randY; - LLUUID uuid = m_scene.RegionInfo.EstateSettings.EstateOwner; - if (uuid == LLUUID.Zero) + UUID uuid = m_scene.RegionInfo.EstateSettings.EstateOwner; + if (uuid == UUID.Zero) uuid = m_scene.RegionInfo.MasterAvatarAssignedUUID; CreateTree(uuid, position); } - private void CreateTree(LLUUID uuid, LLVector3 position) + private void CreateTree(UUID uuid, Vector3 position) { position.Z = (float) m_scene.Heightmap[(int) position.X, (int) position.Y]; SceneObjectGroup tree = - m_scene.AddTree(uuid, new LLVector3(0.1f, 0.1f, 0.1f), - LLQuaternion.Identity, + m_scene.AddTree(uuid, new Vector3(0.1f, 0.1f, 0.1f), + Quaternion.Identity, position, Tree.Cypress1, false); diff --git a/OpenSim/Region/Environment/Modules/World/WorldMap/MapImageModule.cs b/OpenSim/Region/Environment/Modules/World/WorldMap/MapImageModule.cs index bfb5016825..cfbe5ae63f 100644 --- a/OpenSim/Region/Environment/Modules/World/WorldMap/MapImageModule.cs +++ b/OpenSim/Region/Environment/Modules/World/WorldMap/MapImageModule.cs @@ -32,13 +32,12 @@ using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Reflection; -using Axiom.Math; using Nini.Config; +using OpenMetaverse.Imaging; using log4net; -using OpenJPEGNet; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Modules.World.WorldMap { @@ -252,7 +251,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap if (part.Shape.Textures.DefaultTexture == null) continue; - LLColor texcolor = part.Shape.Textures.DefaultTexture.RGBA; + Color4 texcolor = part.Shape.Textures.DefaultTexture.RGBA; // Not sure why some of these are null, oh well. @@ -265,7 +264,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap //Try to set the map spot color try { - // If the color gets goofy somehow, skip it *shakes fist at LLColor + // If the color gets goofy somehow, skip it *shakes fist at Color4 mapdotspot = Color.FromArgb(colorr, colorg, colorb); } catch (ArgumentException) @@ -282,7 +281,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap // Mono Array } - LLVector3 pos = part.GetWorldPosition(); + Vector3 pos = part.GetWorldPosition(); // skip prim outside of retion if (pos.X < 0f || pos.X > 256f || pos.Y < 0f || pos.Y > 256f) @@ -312,20 +311,20 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap Vector3 tScale = new Vector3(); Vector3 axPos = new Vector3(pos.X,pos.Y,pos.Z); - LLQuaternion llrot = part.GetWorldRotation(); + Quaternion llrot = part.GetWorldRotation(); Quaternion rot = new Quaternion(llrot.W, llrot.X, llrot.Y, llrot.Z); - scale = rot * lscale; + scale = lscale * rot; // negative scales don't work in this situation - scale.x = Math.Abs(scale.x); - scale.y = Math.Abs(scale.y); - scale.z = Math.Abs(scale.z); + scale.X = Math.Abs(scale.X); + scale.Y = Math.Abs(scale.Y); + scale.Z = Math.Abs(scale.Z); // This scaling isn't very accurate and doesn't take into account the face rotation :P - int mapdrawstartX = (int)(pos.X - scale.x); - int mapdrawstartY = (int)(pos.Y - scale.y); - int mapdrawendX = (int)(pos.X + scale.x); - int mapdrawendY = (int)(pos.Y + scale.y); + int mapdrawstartX = (int)(pos.X - scale.X); + int mapdrawstartY = (int)(pos.Y - scale.Y); + int mapdrawendX = (int)(pos.X + scale.X); + int mapdrawendY = (int)(pos.Y + scale.Y); // If object is beyond the edge of the map, don't draw it to avoid errors if (mapdrawstartX < 0 || mapdrawstartX > 255 || mapdrawendX < 0 || mapdrawendX > 255 @@ -342,9 +341,9 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap Vector3[] FaceC = new Vector3[6]; // vertex C for Facei Vector3[] FaceD = new Vector3[6]; // vertex D for Facei - tScale = new Vector3(lscale.x, -lscale.y, lscale.z); - scale = ((rot * tScale)); - vertexes[0] = (new Vector3((pos.X + scale.x), (pos.Y + scale.y), (pos.Z + scale.z))); + tScale = new Vector3(lscale.X, -lscale.Y, lscale.Z); + scale = ((tScale * rot)); + vertexes[0] = (new Vector3((pos.X + scale.X), (pos.Y + scale.Y), (pos.Z + scale.Z))); // vertexes[0].x = pos.X + vertexes[0].x; //vertexes[0].y = pos.Y + vertexes[0].y; //vertexes[0].z = pos.Z + vertexes[0].z; @@ -354,8 +353,8 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap FaceA[4] = vertexes[0]; tScale = lscale; - scale = ((rot * tScale)); - vertexes[1] = (new Vector3((pos.X + scale.x), (pos.Y + scale.y), (pos.Z + scale.z))); + scale = ((tScale * rot)); + vertexes[1] = (new Vector3((pos.X + scale.X), (pos.Y + scale.Y), (pos.Z + scale.Z))); // vertexes[1].x = pos.X + vertexes[1].x; // vertexes[1].y = pos.Y + vertexes[1].y; @@ -365,10 +364,10 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap FaceA[1] = vertexes[1]; FaceC[4] = vertexes[1]; - tScale = new Vector3(lscale.x, -lscale.y, -lscale.z); - scale = ((rot * tScale)); + tScale = new Vector3(lscale.X, -lscale.Y, -lscale.Z); + scale = ((tScale * rot)); - vertexes[2] = (new Vector3((pos.X + scale.x), (pos.Y + scale.y), (pos.Z + scale.z))); + vertexes[2] = (new Vector3((pos.X + scale.X), (pos.Y + scale.Y), (pos.Z + scale.Z))); //vertexes[2].x = pos.X + vertexes[2].x; //vertexes[2].y = pos.Y + vertexes[2].y; @@ -378,9 +377,9 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap FaceD[3] = vertexes[2]; FaceC[5] = vertexes[2]; - tScale = new Vector3(lscale.x, lscale.y, -lscale.z); - scale = ((rot * tScale)); - vertexes[3] = (new Vector3((pos.X + scale.x), (pos.Y + scale.y), (pos.Z + scale.z))); + tScale = new Vector3(lscale.X, lscale.Y, -lscale.Z); + scale = ((tScale * rot)); + vertexes[3] = (new Vector3((pos.X + scale.X), (pos.Y + scale.Y), (pos.Z + scale.Z))); //vertexes[3].x = pos.X + vertexes[3].x; // vertexes[3].y = pos.Y + vertexes[3].y; @@ -390,9 +389,9 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap FaceC[1] = vertexes[3]; FaceA[5] = vertexes[3]; - tScale = new Vector3(-lscale.x, lscale.y, lscale.z); - scale = ((rot * tScale)); - vertexes[4] = (new Vector3((pos.X + scale.x), (pos.Y + scale.y), (pos.Z + scale.z))); + tScale = new Vector3(-lscale.X, lscale.Y, lscale.Z); + scale = ((tScale * rot)); + vertexes[4] = (new Vector3((pos.X + scale.X), (pos.Y + scale.Y), (pos.Z + scale.Z))); // vertexes[4].x = pos.X + vertexes[4].x; // vertexes[4].y = pos.Y + vertexes[4].y; @@ -402,9 +401,9 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap FaceA[2] = vertexes[4]; FaceD[4] = vertexes[4]; - tScale = new Vector3(-lscale.x, lscale.y, -lscale.z); - scale = ((rot * tScale)); - vertexes[5] = (new Vector3((pos.X + scale.x), (pos.Y + scale.y), (pos.Z + scale.z))); + tScale = new Vector3(-lscale.X, lscale.Y, -lscale.Z); + scale = ((tScale * rot)); + vertexes[5] = (new Vector3((pos.X + scale.X), (pos.Y + scale.Y), (pos.Z + scale.Z))); // vertexes[5].x = pos.X + vertexes[5].x; // vertexes[5].y = pos.Y + vertexes[5].y; @@ -414,9 +413,9 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap FaceC[2] = vertexes[5]; FaceB[5] = vertexes[5]; - tScale = new Vector3(-lscale.x, -lscale.y, lscale.z); - scale = ((rot * tScale)); - vertexes[6] = (new Vector3((pos.X + scale.x), (pos.Y + scale.y), (pos.Z + scale.z))); + tScale = new Vector3(-lscale.X, -lscale.Y, lscale.Z); + scale = ((tScale * rot)); + vertexes[6] = (new Vector3((pos.X + scale.X), (pos.Y + scale.Y), (pos.Z + scale.Z))); // vertexes[6].x = pos.X + vertexes[6].x; // vertexes[6].y = pos.Y + vertexes[6].y; @@ -426,9 +425,9 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap FaceA[3] = vertexes[6]; FaceB[4] = vertexes[6]; - tScale = new Vector3(-lscale.x, -lscale.y, -lscale.z); - scale = ((rot * tScale)); - vertexes[7] = (new Vector3((pos.X + scale.x), (pos.Y + scale.y), (pos.Z + scale.z))); + tScale = new Vector3(-lscale.X, -lscale.Y, -lscale.Z); + scale = ((tScale * rot)); + vertexes[7] = (new Vector3((pos.X + scale.X), (pos.Y + scale.Y), (pos.Z + scale.Z))); // vertexes[7].x = pos.X + vertexes[7].x; // vertexes[7].y = pos.Y + vertexes[7].y; @@ -533,8 +532,8 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap //Vector3 topos = new Vector3(0, 0, 0); // float z = -point3d.z - topos.z; - returnpt.X = (int)point3d.x;//(int)((topos.x - point3d.x) / z * d); - returnpt.Y = (int)(255 - point3d.y);//(int)(255 - (((topos.y - point3d.y) / z * d))); + returnpt.X = (int)point3d.X;//(int)((topos.x - point3d.x) / z * d); + returnpt.Y = (int)(255 - point3d.Y);//(int)(255 - (((topos.y - point3d.y) / z * d))); return returnpt; } diff --git a/OpenSim/Region/Environment/Modules/World/WorldMap/ShadedMapTileRenderer.cs b/OpenSim/Region/Environment/Modules/World/WorldMap/ShadedMapTileRenderer.cs index 1ee86ba09b..dffa72a519 100644 --- a/OpenSim/Region/Environment/Modules/World/WorldMap/ShadedMapTileRenderer.cs +++ b/OpenSim/Region/Environment/Modules/World/WorldMap/ShadedMapTileRenderer.cs @@ -32,13 +32,12 @@ using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Reflection; -using Axiom.Math; +using OpenMetaverse; +using OpenMetaverse.Imaging; using Nini.Config; using log4net; -using OpenJPEGNet; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; -using libsecondlife; namespace OpenSim.Region.Environment.Modules.World.WorldMap { diff --git a/OpenSim/Region/Environment/Modules/World/WorldMap/TexturedMapTileRenderer.cs b/OpenSim/Region/Environment/Modules/World/WorldMap/TexturedMapTileRenderer.cs index 615befc195..ff8d0b9187 100644 --- a/OpenSim/Region/Environment/Modules/World/WorldMap/TexturedMapTileRenderer.cs +++ b/OpenSim/Region/Environment/Modules/World/WorldMap/TexturedMapTileRenderer.cs @@ -32,15 +32,14 @@ using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Reflection; -using Axiom.Math; +using OpenMetaverse; using Nini.Config; using log4net; -using OpenJPEGNet; +using OpenMetaverse.Imaging; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Modules.World.Terrain; -using libsecondlife; namespace OpenSim.Region.Environment.Modules.World.WorldMap { @@ -122,15 +121,15 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap // some hardcoded terrain UUIDs that work with SL 1.20 (the four default textures and "Blank"). // The color-values were choosen because they "look right" (at least to me) ;-) - private static readonly LLUUID defaultTerrainTexture1 = new LLUUID("0bc58228-74a0-7e83-89bc-5c23464bcec5"); + private static readonly UUID defaultTerrainTexture1 = new UUID("0bc58228-74a0-7e83-89bc-5c23464bcec5"); private static readonly Color defaultColor1 = Color.FromArgb(165, 137, 118); - private static readonly LLUUID defaultTerrainTexture2 = new LLUUID("63338ede-0037-c4fd-855b-015d77112fc8"); + private static readonly UUID defaultTerrainTexture2 = new UUID("63338ede-0037-c4fd-855b-015d77112fc8"); private static readonly Color defaultColor2 = Color.FromArgb(69, 89, 49); - private static readonly LLUUID defaultTerrainTexture3 = new LLUUID("303cd381-8560-7579-23f1-f0a880799740"); + private static readonly UUID defaultTerrainTexture3 = new UUID("303cd381-8560-7579-23f1-f0a880799740"); private static readonly Color defaultColor3 = Color.FromArgb(162, 154, 141); - private static readonly LLUUID defaultTerrainTexture4 = new LLUUID("53a2f406-4895-1d13-d541-d2e3b86bc19c"); + private static readonly UUID defaultTerrainTexture4 = new UUID("53a2f406-4895-1d13-d541-d2e3b86bc19c"); private static readonly Color defaultColor4 = Color.FromArgb(200, 200, 200); - private static readonly LLUUID blankTerrainTexture = new LLUUID("5748decc-f629-461c-9a36-a35a221fe21f"); + private static readonly UUID blankTerrainTexture = new UUID("5748decc-f629-461c-9a36-a35a221fe21f"); #endregion @@ -142,14 +141,14 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap // added when the terrain textures are changed in the estate dialog and a new map is generated (and will stay in // that map until the region-server restarts. This could be considered a memory-leak, but it's a *very* small one. // TODO does it make sense to use a "real" cache and regenerate missing entries on fetch? - private Dictionary m_mapping; + private Dictionary m_mapping; public void Initialise(Scene scene, IConfigSource source) { m_scene = scene; // m_config = source; // not used currently - m_mapping = new Dictionary(); + m_mapping = new Dictionary(); m_mapping.Add(defaultTerrainTexture1, defaultColor1); m_mapping.Add(defaultTerrainTexture2, defaultColor2); m_mapping.Add(defaultTerrainTexture3, defaultColor3); @@ -164,12 +163,18 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap // TODO (- on "map" command: We are in the command-line thread, we will wait for completion anyway) // TODO (- on "automatic" update after some change: We are called from the mapUpdateTimer here and // will wait anyway) - private Bitmap fetchTexture(LLUUID id) + private Bitmap fetchTexture(UUID id) { AssetBase asset = m_scene.AssetCache.GetAsset(id, true); m_log.DebugFormat("Fetched texture {0}, found: {1}", id, asset != null); if (asset == null) return null; - return new Bitmap(OpenJPEG.DecodeToImage(asset.Data)); + + ManagedImage managedImage; + Image image; + if (OpenJPEG.DecodeToImage(asset.Data, out managedImage, out image)) + return new Bitmap(image); + else + return null; } // Compute the average color of a texture. @@ -196,8 +201,8 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap // return either the average color of the texture, or the defaultColor if the texturID is invalid // or the texture couldn't be found - private Color computeAverageColor(LLUUID textureID, Color defaultColor) { - if (textureID == LLUUID.Zero) return defaultColor; // not set + private Color computeAverageColor(UUID textureID, Color defaultColor) { + if (textureID == UUID.Zero) return defaultColor; // not set if (m_mapping.ContainsKey(textureID)) return m_mapping[textureID]; // one of the predefined textures Bitmap bmp = fetchTexture(textureID); diff --git a/OpenSim/Region/Environment/Modules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/Environment/Modules/World/WorldMap/WorldMapModule.cs index 2430822488..ec9b79c2ea 100644 --- a/OpenSim/Region/Environment/Modules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/Environment/Modules/World/WorldMap/WorldMapModule.cs @@ -32,8 +32,8 @@ using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Reflection; -using libsecondlife; -using OpenJPEGNet; +using OpenMetaverse; +using OpenMetaverse.Imaging; using log4net; using Nini.Config; using OpenSim.Framework; @@ -103,7 +103,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap #endregion - public void OnRegisterCaps(LLUUID agentID, Caps caps) + public void OnRegisterCaps(UUID agentID, Caps caps) { m_log.DebugFormat("[VOICE] OnRegisterCaps: agentID {0} caps {1}", agentID, caps); string capsBase = "/CAPS/" + caps.CapsObjectPath; @@ -127,7 +127,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap /// /// public string MapLayerRequest(string request, string path, string param, - LLUUID agentID, Caps caps) + UUID agentID, Caps caps) { //try //{ @@ -197,7 +197,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap LLSDMapLayer mapLayer = new LLSDMapLayer(); mapLayer.Right = 5000; mapLayer.Top = 5000; - mapLayer.ImageID = new LLUUID("00000000-0000-1111-9999-000000000006"); + mapLayer.ImageID = new UUID("00000000-0000-1111-9999-000000000006"); return mapLayer; } @@ -223,7 +223,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap //doFriendListUpdateOnline(client.AgentId); client.OnRequestMapBlocks += RequestMapBlocks; } - private void ClientLoggedOut(LLUUID AgentId) + private void ClientLoggedOut(UUID AgentId) { } @@ -248,15 +248,14 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap m_log.Info("[WEBMAP]: Sending map image jpeg"); Hashtable reply = new Hashtable(); int statuscode = 200; - - byte[] jpeg; - + byte[] jpeg = new byte[0]; if (myMapImageJPEG.Length == 0) { MemoryStream imgstream = new MemoryStream(); Bitmap mapTexture = new Bitmap(1,1); - System.Drawing.Image image = (System.Drawing.Image)mapTexture; + ManagedImage managedImage; + Image image = (Image)mapTexture; try { @@ -268,21 +267,24 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap AssetBase mapasset = m_scene.AssetCache.GetAsset(m_scene.RegionInfo.lastMapUUID, true); // Decode image to System.Drawing.Image - image = OpenJPEG.DecodeToImage(mapasset.Data); + if (OpenJPEG.DecodeToImage(mapasset.Data, out managedImage, out image)) + { + // Save to bitmap + mapTexture = new Bitmap(image); - // Save to bitmap - mapTexture = new Bitmap(image); + ImageCodecInfo myImageCodecInfo; - ImageCodecInfo myImageCodecInfo; + Encoder myEncoder; - Encoder myEncoder; + EncoderParameter myEncoderParameter; + EncoderParameters myEncoderParameters = new EncoderParameters(); - EncoderParameter myEncoderParameter; - EncoderParameters myEncoderParameters = new EncoderParameters(); + myImageCodecInfo = GetEncoderInfo("image/jpeg"); - myImageCodecInfo = GetEncoderInfo("image/jpeg"); + myEncoder = Encoder.Quality; - myEncoder = Encoder.Quality; + myEncoderParameter = new EncoderParameter(myEncoder, 95L); + myEncoderParameters.Param[0] = myEncoderParameter; myEncoderParameter = new EncoderParameter(myEncoder, 95L); myEncoderParameters.Param[0] = myEncoderParameter; @@ -290,14 +292,14 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap // Save bitmap to stream mapTexture.Save(imgstream, myImageCodecInfo, myEncoderParameters); - // Write the stream to a byte array for output - jpeg = imgstream.ToArray(); - myMapImageJPEG = jpeg; + // Write the stream to a byte array for output + jpeg = imgstream.ToArray(); + myMapImageJPEG = jpeg; + } } catch (Exception) { // Dummy! - jpeg = new byte[0]; m_log.Warn("[WEBMAP]: Unable to generate Map image"); } finally @@ -314,7 +316,6 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap // Use cached version so we don't have to loose our mind jpeg = myMapImageJPEG; } - //jpeg = new byte[0]; reply["str_response_string"] = Convert.ToBase64String(jpeg); reply["int_response_code"] = statuscode; diff --git a/OpenSim/Region/Environment/Scenes/Animation.cs b/OpenSim/Region/Environment/Scenes/Animation.cs index b2fca90f0a..2854e06f26 100644 --- a/OpenSim/Region/Environment/Scenes/Animation.cs +++ b/OpenSim/Region/Environment/Scenes/Animation.cs @@ -26,14 +26,14 @@ */ using System; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Scenes { public class Animation { - private LLUUID animID; - public LLUUID AnimID + private UUID animID; + public UUID AnimID { get { return animID; } set { animID = value; } @@ -50,7 +50,7 @@ namespace OpenSim.Region.Environment.Scenes { } - public Animation(LLUUID animID, int sequenceNum) + public Animation(UUID animID, int sequenceNum) { this.animID = animID; this.sequenceNum = sequenceNum; diff --git a/OpenSim/Region/Environment/Scenes/AnimationSet.cs b/OpenSim/Region/Environment/Scenes/AnimationSet.cs index c485d302f0..0b7188a14c 100644 --- a/OpenSim/Region/Environment/Scenes/AnimationSet.cs +++ b/OpenSim/Region/Environment/Scenes/AnimationSet.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Scenes { @@ -43,7 +43,7 @@ namespace OpenSim.Region.Environment.Scenes ResetDefaultAnimation(); } - public bool HasAnimation(LLUUID animID) + public bool HasAnimation(UUID animID) { if (m_defaultAnimation.AnimID == animID) return true; @@ -57,7 +57,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } - public bool Add(LLUUID animID, int sequenceNum) + public bool Add(UUID animID, int sequenceNum) { lock (m_animations) { @@ -70,7 +70,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } - public bool Remove(LLUUID animID) + public bool Remove(UUID animID) { lock (m_animations) { @@ -103,7 +103,7 @@ namespace OpenSim.Region.Environment.Scenes /// The default animation is reserved for "main" animations /// that are mutually exclusive, e.g. flying and sitting. /// - public bool SetDefaultAnimation(LLUUID animID, int sequenceNum) + public bool SetDefaultAnimation(UUID animID, int sequenceNum) { if (m_defaultAnimation.AnimID != animID) { @@ -123,18 +123,18 @@ namespace OpenSim.Region.Environment.Scenes /// public bool TrySetDefaultAnimation(string anim, int sequenceNum) { - if (Animations.AnimsLLUUID.ContainsKey(anim)) + if (Animations.AnimsUUID.ContainsKey(anim)) { - return SetDefaultAnimation(Animations.AnimsLLUUID[anim], sequenceNum); + return SetDefaultAnimation(Animations.AnimsUUID[anim], sequenceNum); } return false; } - public void GetArrays(out LLUUID[] animIDs, out int[] sequenceNums) + public void GetArrays(out UUID[] animIDs, out int[] sequenceNums) { lock (m_animations) { - animIDs = new LLUUID[m_animations.Count + 1]; + animIDs = new UUID[m_animations.Count + 1]; sequenceNums = new int[m_animations.Count + 1]; animIDs[0] = m_defaultAnimation.AnimID; diff --git a/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs b/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs index fe9c8e7cbd..6bb55250a6 100644 --- a/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs +++ b/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs @@ -27,18 +27,18 @@ using System.Collections.Generic; using System.Xml; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Scenes { public class AvatarAnimations { - public Dictionary AnimsLLUUID = new Dictionary(); - public Dictionary AnimsNames = new Dictionary(); + public Dictionary AnimsUUID = new Dictionary(); + public Dictionary AnimsNames = new Dictionary(); public AvatarAnimations() { - using (XmlTextReader reader = new XmlTextReader("data/avataranimations.xml")) + using (XmlTextReader reader = new XmlTextReader("data/avataranimations.Xml")) { XmlDocument doc = new XmlDocument(); doc.Load(reader); @@ -47,9 +47,9 @@ namespace OpenSim.Region.Environment.Scenes if (nod.Attributes["name"] != null) { string name = (string)nod.Attributes["name"].Value; - LLUUID id = (LLUUID)nod.InnerText; + UUID id = (UUID)nod.InnerText; - AnimsLLUUID.Add(name, id); + AnimsUUID.Add(name, id); AnimsNames.Add(id, name); } } diff --git a/OpenSim/Region/Environment/Scenes/EntityBase.cs b/OpenSim/Region/Environment/Scenes/EntityBase.cs index 40caabcb24..884ff32573 100644 --- a/OpenSim/Region/Environment/Scenes/EntityBase.cs +++ b/OpenSim/Region/Environment/Scenes/EntityBase.cs @@ -28,8 +28,7 @@ using System; using System.Runtime.Serialization; using System.Security.Permissions; -using Axiom.Math; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Scenes { @@ -45,9 +44,9 @@ namespace OpenSim.Region.Environment.Scenes } protected Scene m_scene; - protected LLUUID m_uuid; + protected UUID m_uuid; - public virtual LLUUID UUID + public virtual UUID UUID { get { return m_uuid; } set { m_uuid = value; } @@ -73,30 +72,30 @@ namespace OpenSim.Region.Environment.Scenes } protected bool m_isDeleted; - protected LLVector3 m_pos; + protected Vector3 m_pos; /// /// /// - public virtual LLVector3 AbsolutePosition + public virtual Vector3 AbsolutePosition { get { return m_pos; } set { m_pos = value; } } - protected LLVector3 m_velocity; - protected LLVector3 m_rotationalvelocity; + protected Vector3 m_velocity; + protected Vector3 m_rotationalvelocity; /// /// /// - public virtual LLVector3 Velocity + public virtual Vector3 Velocity { get { return m_velocity; } set { m_velocity = value; } } - protected Quaternion m_rotation = new Quaternion(0, 0, 1, 0); + protected Quaternion m_rotation = new Quaternion(0f, 0f, 1f, 0f); public virtual Quaternion Rotation { @@ -117,13 +116,13 @@ namespace OpenSim.Region.Environment.Scenes /// public EntityBase() { - m_uuid = LLUUID.Zero; + m_uuid = UUID.Zero; - m_pos = new LLVector3(); - m_velocity = new LLVector3(); - Rotation = new Quaternion(); + m_pos = Vector3.Zero; + m_velocity = Vector3.Zero; + Rotation = Quaternion.Identity; m_name = "(basic entity)"; - m_rotationalvelocity = new LLVector3(0, 0, 0); + m_rotationalvelocity = Vector3.Zero; } /// @@ -157,33 +156,33 @@ namespace OpenSim.Region.Environment.Scenes throw new ArgumentNullException("info"); } - m_uuid = new LLUUID((Guid)info.GetValue("m_uuid", typeof(Guid))); + m_uuid = new UUID((Guid)info.GetValue("m_uuid", typeof(Guid))); m_name = (string)info.GetValue("m_name", typeof(string)); m_pos - = new LLVector3( + = new Vector3( (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( + = new Vector3( (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( + = new Vector3( (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.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))); m_localId = (uint)info.GetValue("m_localId", typeof(uint)); @@ -200,29 +199,29 @@ namespace OpenSim.Region.Environment.Scenes throw new ArgumentNullException("info"); } - info.AddValue("m_uuid", m_uuid.UUID); + info.AddValue("m_uuid", m_uuid.Guid); info.AddValue("m_name", m_name); - // LLVector3 + // Vector3 info.AddValue("m_pos.X", m_pos.X); info.AddValue("m_pos.Y", m_pos.Y); info.AddValue("m_pos.Z", m_pos.Z); - // LLVector3 + // Vector3 info.AddValue("m_velocity.X", m_velocity.X); info.AddValue("m_velocity.Y", m_velocity.Y); info.AddValue("m_velocity.Z", m_velocity.Z); - // LLVector3 + // Vector3 info.AddValue("m_rotationalvelocity.X", m_rotationalvelocity.X); info.AddValue("m_rotationalvelocity.Y", m_rotationalvelocity.Y); info.AddValue("m_rotationalvelocity.Z", m_rotationalvelocity.Z); // Quaternion - info.AddValue("m_rotation.w", m_rotation.w); - info.AddValue("m_rotation.x", m_rotation.x); - info.AddValue("m_rotation.y", m_rotation.y); - info.AddValue("m_rotation.z", m_rotation.z); + info.AddValue("m_rotation.X", m_rotation.X); + info.AddValue("m_rotation.Y", m_rotation.Y); + info.AddValue("m_rotation.Z", m_rotation.Z); + info.AddValue("m_rotation.W", m_rotation.W); info.AddValue("m_localId", m_localId); } diff --git a/OpenSim/Region/Environment/Scenes/EntityList.cs b/OpenSim/Region/Environment/Scenes/EntityList.cs index ff8def21df..09eb84f394 100644 --- a/OpenSim/Region/Environment/Scenes/EntityList.cs +++ b/OpenSim/Region/Environment/Scenes/EntityList.cs @@ -29,9 +29,8 @@ using System; using System.Collections; using System.Collections.Generic; using System.Reflection; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Types; @@ -69,9 +68,9 @@ namespace OpenSim.Region.Environment.Scenes // ListObjects() // ListPresenes() // RemoveAll() - // FindObject(LLUUID) + // FindObject(UUID) // FindObject(int) - // FindPresence(LLUUID) + // FindPresence(UUID) public void Add(SceneObjectGroup obj) { @@ -84,7 +83,7 @@ namespace OpenSim.Region.Environment.Scenes m_pres_by_uuid[pres.UUID] = pres; } - public SceneObjectGroup RemoveObject(LLUUID uuid) + public SceneObjectGroup RemoveObject(UUID uuid) { SceneObjectGroup sog = null; try @@ -101,7 +100,7 @@ namespace OpenSim.Region.Environment.Scenes return sog; } - public ScenePresence RemovePresence(LLUUID uuid) + public ScenePresence RemovePresence(UUID uuid) { ScenePresence sp = null; try @@ -117,7 +116,7 @@ namespace OpenSim.Region.Environment.Scenes return sp; } - public SceneObjectGroup FindObject(LLUUID uuid) + public SceneObjectGroup FindObject(UUID uuid) { try { @@ -135,7 +134,7 @@ namespace OpenSim.Region.Environment.Scenes { try { - LLUUID uuid = (LLUUID)m_obj_by_local[local]; + UUID uuid = (UUID)m_obj_by_local[local]; SceneObjectGroup sog = (SceneObjectGroup)m_obj_by_uuid[uuid]; return sog; } @@ -146,7 +145,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public ScenePresence FindPresense(LLUUID uuid) + public ScenePresence FindPresense(UUID uuid) { try { @@ -159,4 +158,4 @@ namespace OpenSim.Region.Environment.Scenes } } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/EventManager.cs b/OpenSim/Region/Environment/Scenes/EventManager.cs index d48ef0cc87..58f5efecac 100644 --- a/OpenSim/Region/Environment/Scenes/EventManager.cs +++ b/OpenSim/Region/Environment/Scenes/EventManager.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using Caps=OpenSim.Framework.Communications.Capabilities.Caps; @@ -63,7 +63,7 @@ namespace OpenSim.Region.Environment.Scenes public event OnNewPresenceDelegate OnNewPresence; - public delegate void OnRemovePresenceDelegate(LLUUID agentId); + public delegate void OnRemovePresenceDelegate(UUID agentId); public event OnRemovePresenceDelegate OnRemovePresence; @@ -83,11 +83,11 @@ namespace OpenSim.Region.Environment.Scenes public event OnShutdownDelegate OnShutdown; - public delegate void ObjectGrabDelegate(uint localID, uint originalID, LLVector3 offsetPos, IClientAPI remoteClient); + public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient); public delegate void ObjectDeGrabDelegate(uint localID, uint originalID, IClientAPI remoteClient); - public delegate void ScriptResetDelegate(uint localID, LLUUID itemID); + public delegate void ScriptResetDelegate(uint localID, UUID itemID); - public delegate void OnPermissionErrorDelegate(LLUUID user, string reason); + public delegate void OnPermissionErrorDelegate(UUID user, string reason); public event ObjectGrabDelegate OnObjectGrab; public event ObjectDeGrabDelegate OnObjectDeGrab; @@ -95,27 +95,27 @@ namespace OpenSim.Region.Environment.Scenes public event OnPermissionErrorDelegate OnPermissionError; - public delegate void NewRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez); + public delegate void NewRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez); public event NewRezScript OnRezScript; - public delegate void RemoveScript(uint localID, LLUUID itemID); + public delegate void RemoveScript(uint localID, UUID itemID); public event RemoveScript OnRemoveScript; - public delegate void StartScript(uint localID, LLUUID itemID); + public delegate void StartScript(uint localID, UUID itemID); public event StartScript OnStartScript; - public delegate void StopScript(uint localID, LLUUID itemID); + public delegate void StopScript(uint localID, UUID itemID); public event StopScript OnStopScript; - public delegate bool SceneGroupMoved(LLUUID groupID, LLVector3 delta); + public delegate bool SceneGroupMoved(UUID groupID, Vector3 delta); public event SceneGroupMoved OnSceneGroupMove; - public delegate void SceneGroupGrabed(LLUUID groupID, LLVector3 offset, LLUUID userID); + public delegate void SceneGroupGrabed(UUID groupID, Vector3 offset, UUID userID); public event SceneGroupGrabed OnSceneGroupGrab; @@ -123,11 +123,11 @@ namespace OpenSim.Region.Environment.Scenes public event LandObjectAdded OnLandObjectAdded; - public delegate void LandObjectRemoved(LLUUID globalID); + public delegate void LandObjectRemoved(UUID globalID); public event LandObjectRemoved OnLandObjectRemoved; - public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, LLUUID regionID); + public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID); public event AvatarEnteringNewParcel OnAvatarEnteringNewParcel; @@ -143,7 +143,7 @@ namespace OpenSim.Region.Environment.Scenes public event NewGridInstantMessage OnGridInstantMessageToGroupsModule; - public delegate void ClientClosed(LLUUID clientID); + public delegate void ClientClosed(UUID clientID); public event ClientClosed OnClientClosed; @@ -151,11 +151,11 @@ namespace OpenSim.Region.Environment.Scenes public event ScriptChangedEvent OnScriptChangedEvent; - public delegate void ScriptControlEvent(uint localID, LLUUID item, LLUUID avatarID, uint held, uint changed); + public delegate void ScriptControlEvent(uint localID, UUID item, UUID avatarID, uint held, uint changed); public event ScriptControlEvent OnScriptControlEvent; - public delegate void ScriptAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 atpos); + public delegate void ScriptAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 atpos); public event ScriptAtTargetEvent OnScriptAtTargetEvent; @@ -175,7 +175,7 @@ namespace OpenSim.Region.Environment.Scenes public delegate void OnMakeRootAgentDelegate(ScenePresence presence); public event OnMakeRootAgentDelegate OnMakeRootAgent; - public delegate void NewInventoryItemUploadComplete(LLUUID avatarID, LLUUID assetID, string name, int userlevel); + public delegate void NewInventoryItemUploadComplete(UUID avatarID, UUID assetID, string name, int userlevel); public event NewInventoryItemUploadComplete OnNewInventoryItemUploadComplete; @@ -217,13 +217,13 @@ namespace OpenSim.Region.Environment.Scenes /// has been instantiated and before it is return to the /// client and provides region modules to add their caps. /// - public delegate void RegisterCapsEvent(LLUUID agentID, Caps caps); + public delegate void RegisterCapsEvent(UUID agentID, Caps caps); 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 delegate void DeregisterCapsEvent(UUID agentID, Caps caps); public event DeregisterCapsEvent OnDeregisterCaps; /// /// ChatFromWorldEvent is called via Scene when a chat message @@ -244,8 +244,8 @@ namespace OpenSim.Region.Environment.Scenes public class MoneyTransferArgs : EventArgs { - public LLUUID sender; - public LLUUID receiver; + public UUID sender; + public UUID receiver; // Always false. The SL protocol sucks. public bool authenticated = false; @@ -254,7 +254,7 @@ namespace OpenSim.Region.Environment.Scenes public int transactiontype; public string description; - public MoneyTransferArgs(LLUUID asender, LLUUID areceiver, int aamount, int atransactiontype, string adescription) + public MoneyTransferArgs(UUID asender, UUID areceiver, int aamount, int atransactiontype, string adescription) { sender = asender; receiver = areceiver; @@ -266,11 +266,11 @@ namespace OpenSim.Region.Environment.Scenes public class LandBuyArgs : EventArgs { - public LLUUID agentId = LLUUID.Zero; + public UUID agentId = UUID.Zero; - public LLUUID groupId = LLUUID.Zero; + public UUID groupId = UUID.Zero; - public LLUUID parcelOwnerID = LLUUID.Zero; + public UUID parcelOwnerID = UUID.Zero; public bool final = false; public bool groupOwned = false; @@ -284,7 +284,7 @@ namespace OpenSim.Region.Environment.Scenes public int transactionID = 0; public int amountDebited = 0; - public LandBuyArgs(LLUUID pagentId, LLUUID pgroupId, bool pfinal, bool pgroupOwned, + public LandBuyArgs(UUID pagentId, UUID pgroupId, bool pfinal, bool pgroupOwned, bool premoveContribution, int pparcelLocalID, int pparcelArea, int pparcelPrice, bool pauthenticated) { @@ -385,7 +385,7 @@ namespace OpenSim.Region.Environment.Scenes handlerClientMovement(avatar); } - public void TriggerPermissionError(LLUUID user, string reason) + public void TriggerPermissionError(UUID user, string reason) { handlerPermissionError = OnPermissionError; if (handlerPermissionError != null) @@ -422,7 +422,7 @@ namespace OpenSim.Region.Environment.Scenes handlerNewPresence(presence); } - public void TriggerOnRemovePresence(LLUUID agentId) + public void TriggerOnRemovePresence(UUID agentId) { handlerRemovePresence = OnRemovePresence; if (handlerRemovePresence != null) @@ -492,7 +492,7 @@ namespace OpenSim.Region.Environment.Scenes handlerShutdown(); } - public void TriggerObjectGrab(uint localID, uint originalID, LLVector3 offsetPos, IClientAPI remoteClient) + public void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient) { handlerObjectGrab = OnObjectGrab; if (handlerObjectGrab != null) @@ -510,7 +510,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerScriptReset(uint localID, LLUUID itemID) + public void TriggerScriptReset(uint localID, UUID itemID) { handlerScriptReset = OnScriptReset; if (handlerScriptReset != null) @@ -519,7 +519,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez) + public void TriggerRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez) { handlerRezScript = OnRezScript; if (handlerRezScript != null) @@ -528,7 +528,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerStartScript(uint localID, LLUUID itemID) + public void TriggerStartScript(uint localID, UUID itemID) { handlerStartScript = OnStartScript; if (handlerStartScript != null) @@ -537,7 +537,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerStopScript(uint localID, LLUUID itemID) + public void TriggerStopScript(uint localID, UUID itemID) { handlerStopScript = OnStopScript; if (handlerStopScript != null) @@ -546,7 +546,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerRemoveScript(uint localID, LLUUID itemID) + public void TriggerRemoveScript(uint localID, UUID itemID) { handlerRemoveScript = OnRemoveScript; if (handlerRemoveScript != null) @@ -555,7 +555,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public bool TriggerGroupMove(LLUUID groupID, LLVector3 delta) + public bool TriggerGroupMove(UUID groupID, Vector3 delta) { handlerSceneGroupMove = OnSceneGroupMove; @@ -566,7 +566,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } - public void TriggerGroupGrab(LLUUID groupID, LLVector3 offset, LLUUID userID) + public void TriggerGroupGrab(UUID groupID, Vector3 offset, UUID userID) { handlerSceneGroupGrab = OnSceneGroupGrab; if (handlerSceneGroupGrab != null) @@ -585,7 +585,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerLandObjectRemoved(LLUUID globalID) + public void TriggerLandObjectRemoved(UUID globalID) { handlerLandObjectRemoved = OnLandObjectRemoved; if (handlerLandObjectRemoved != null) @@ -601,7 +601,7 @@ namespace OpenSim.Region.Environment.Scenes TriggerLandObjectAdded(newParcel); } - public void TriggerAvatarEnteringNewParcel(ScenePresence avatar, int localLandID, LLUUID regionID) + public void TriggerAvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID) { handlerAvatarEnteringNewParcel = OnAvatarEnteringNewParcel; @@ -634,7 +634,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerClientClosed(LLUUID ClientID) + public void TriggerClientClosed(UUID ClientID) { handlerClientClosed = OnClientClosed; if (handlerClientClosed != null) @@ -661,7 +661,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerOnRegisterCaps(LLUUID agentID, Caps caps) + public void TriggerOnRegisterCaps(UUID agentID, Caps caps) { handlerRegisterCaps = OnRegisterCaps; if (handlerRegisterCaps != null) @@ -670,7 +670,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerOnDeregisterCaps(LLUUID agentID, Caps caps) + public void TriggerOnDeregisterCaps(UUID agentID, Caps caps) { handlerDeregisterCaps = OnDeregisterCaps; if (handlerDeregisterCaps != null) @@ -679,7 +679,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerOnNewInventoryItemUploadComplete(LLUUID agentID, LLUUID AssetID, String AssetName, int userlevel) + public void TriggerOnNewInventoryItemUploadComplete(UUID agentID, UUID AssetID, String AssetName, int userlevel) { handlerNewInventoryItemUpdateComplete = OnNewInventoryItemUploadComplete; if (handlerNewInventoryItemUpdateComplete != null) @@ -706,7 +706,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos) + public void TriggerAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 currentpos) { handlerScriptAtTargetEvent = OnScriptAtTargetEvent; if (handlerScriptAtTargetEvent != null) @@ -769,7 +769,7 @@ namespace OpenSim.Region.Environment.Scenes } } - internal void TriggerControlEvent(uint p, LLUUID scriptUUID, LLUUID avatarID, uint held, uint _changed) + internal void TriggerControlEvent(uint p, UUID scriptUUID, UUID avatarID, uint held, uint _changed) { handlerScriptControlEvent = OnScriptControlEvent; if (handlerScriptControlEvent != null) diff --git a/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs b/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs index 3a20190e68..9a4c72f9e1 100644 --- a/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs +++ b/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs @@ -25,13 +25,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; namespace OpenSim.Region.Environment.Scenes { public interface IScenePresenceBody { - void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation); + void processMovement(IClientAPI remoteClient, uint flags, Quaternion bodyRotation); } } diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index 658478d023..e61fb19c9e 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs @@ -28,9 +28,8 @@ using System; using System.Collections.Generic; using System.Reflection; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Types; @@ -53,11 +52,11 @@ namespace OpenSim.Region.Environment.Scenes #region Fields - protected internal Dictionary ScenePresences = new Dictionary(); + protected internal Dictionary ScenePresences = new Dictionary(); // SceneObjects is not currently populated or used. - //public Dictionary SceneObjects; - protected internal Dictionary Entities = new Dictionary(); - protected internal Dictionary RestorePresences = new Dictionary(); + //public Dictionary SceneObjects; + protected internal Dictionary Entities = new Dictionary(); + protected internal Dictionary RestorePresences = new Dictionary(); protected internal BasicQuadTreeNode QuadTree; @@ -276,7 +275,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// true if the object was deleted, false if there was no object to delete - protected internal bool DeleteSceneObject(LLUUID uuid, bool resultOfObjectLinked) + protected internal bool DeleteSceneObject(UUID uuid, bool resultOfObjectLinked) { lock (Entities) { @@ -378,9 +377,9 @@ namespace OpenSim.Region.Environment.Scenes } } - protected internal void HandleUndo(IClientAPI remoteClient, LLUUID primId) + protected internal void HandleUndo(IClientAPI remoteClient, UUID primId) { - if (primId != LLUUID.Zero) + if (primId != UUID.Zero) { SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId); if (part != null) @@ -389,7 +388,7 @@ namespace OpenSim.Region.Environment.Scenes } protected internal void HandleObjectGroupUpdate( - IClientAPI remoteClient, LLUUID GroupID, uint objectLocalID, LLUUID Garbage) + IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage) { List EntityList = GetEntities(); @@ -417,17 +416,17 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot) + protected internal void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot) { // Calls attach with a Zero position - AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, LLVector3.Zero); + AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero); } public SceneObjectGroup RezSingleAttachment( - IClientAPI remoteClient, LLUUID itemID, uint AttachmentPt,uint ItemFlags, uint NextOwnerMask) + IClientAPI remoteClient, UUID itemID, uint AttachmentPt,uint ItemFlags, uint NextOwnerMask) { - SceneObjectGroup objatt = m_parentScene.RezObject(remoteClient, itemID, LLVector3.Zero, LLVector3.Zero, LLUUID.Zero, (byte)1, true, + SceneObjectGroup objatt = m_parentScene.RezObject(remoteClient, itemID, Vector3.Zero, Vector3.Zero, UUID.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), @@ -435,17 +434,17 @@ namespace OpenSim.Region.Environment.Scenes if (objatt != null) { - AttachObject(remoteClient,objatt.LocalId,AttachmentPt,new LLQuaternion(0,0,0,1),objatt.AbsolutePosition); + AttachObject(remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition); objatt.ScheduleGroupForFullUpdate(); } return objatt; } - // 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) + // What makes this method odd and unique is it tries to detach using an UUID.... Yay for standards. + // To LocalId or UUID, *THAT* is the question. How now Brown UUID?? + public void DetachSingleAttachmentToInv(UUID itemID, IClientAPI remoteClient) { - if (itemID == LLUUID.Zero) // If this happened, someone made a mistake.... + if (itemID == UUID.Zero) // If this happened, someone made a mistake.... return; List EntityList = GetEntities(); @@ -467,7 +466,7 @@ namespace OpenSim.Region.Environment.Scenes } protected internal void AttachObject( - IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, LLVector3 attachPos) + IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos) { List EntityList = GetEntities(); foreach (EntityBase obj in EntityList) @@ -485,7 +484,7 @@ namespace OpenSim.Region.Environment.Scenes if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint()) { - attachPos = LLVector3.Zero; + attachPos = Vector3.Zero; } // AttachmentPt 0 means the client chose to 'wear' the attachment. @@ -503,16 +502,16 @@ namespace OpenSim.Region.Environment.Scenes { // Stick it on left hand with Zero Offset from the attachment point. AttachmentPt = (uint)AttachmentPoint.LeftHand; - attachPos = LLVector3.Zero; + attachPos = Vector3.Zero; } m_log.Debug("[ATTACH]: Using attachpoint: " + AttachmentPt.ToString()); // Saves and gets assetID - if (group.GetFromAssetID() == LLUUID.Zero) + if (group.GetFromAssetID() == UUID.Zero) { - LLUUID newAssetID = m_parentScene.attachObjectAssetStore(remoteClient, group, remoteClient.AgentId); + UUID newAssetID = m_parentScene.attachObjectAssetStore(remoteClient, group, remoteClient.AgentId); // sets assetID so client can show asset as 'attached' in inventory group.SetFromAssetID(newAssetID); @@ -573,7 +572,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// Remove a presence from the scene /// - protected internal void RemoveScenePresence(LLUUID agentID) + protected internal void RemoveScenePresence(UUID agentID) { lock (Entities) { @@ -696,7 +695,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// null if either the avatar wasn't in the scene, or they do not have a controlling client - protected internal IClientAPI GetControllingClient(LLUUID agentId) + protected internal IClientAPI GetControllingClient(UUID agentId) { ScenePresence presence = GetScenePresence(agentId); @@ -735,7 +734,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// null if the agent was not found - protected internal ScenePresence GetScenePresence(LLUUID agentID) + protected internal ScenePresence GetScenePresence(UUID agentID) { ScenePresence sp; ScenePresences.TryGetValue(agentID, out sp); @@ -768,7 +767,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// null if no scene object group containing that prim is found - private SceneObjectGroup GetGroupByPrim(LLUUID fullID) + private SceneObjectGroup GetGroupByPrim(UUID fullID) { List EntityList = GetEntities(); @@ -828,7 +827,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// null if the part was not found - protected internal SceneObjectPart GetSceneObjectPart(LLUUID fullID) + protected internal SceneObjectPart GetSceneObjectPart(UUID fullID) { SceneObjectGroup group = GetGroupByPrim(fullID); if (group != null) @@ -837,7 +836,7 @@ namespace OpenSim.Region.Environment.Scenes return null; } - protected internal bool TryGetAvatar(LLUUID avatarId, out ScenePresence avatar) + protected internal bool TryGetAvatar(UUID avatarId, out ScenePresence avatar) { ScenePresence presence; if (ScenePresences.TryGetValue(avatarId, out presence)) @@ -906,7 +905,7 @@ namespace OpenSim.Region.Environment.Scenes if (ent is SceneObjectGroup) { SceneObjectGroup grp = (SceneObjectGroup)ent; - if ((grp.RootPart.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Scripted) != 0) + if ((grp.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.Scripted) != 0) { if (grp.scriptScore >= 0.01) { @@ -938,13 +937,13 @@ namespace OpenSim.Region.Environment.Scenes } } - protected internal LLUUID ConvertLocalIDToFullID(uint localID) + protected internal UUID ConvertLocalIDToFullID(uint localID) { SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) return group.GetPartsFullID(localID); else - return LLUUID.Zero; + return UUID.Zero; } protected internal void ForEachClient(Action action) @@ -968,7 +967,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void UpdatePrimScale(uint localID, LLVector3 scale, IClientAPI remoteClient) + protected internal void UpdatePrimScale(uint localID, Vector3 scale, IClientAPI remoteClient) { SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) @@ -980,7 +979,7 @@ namespace OpenSim.Region.Environment.Scenes } } - protected internal void UpdatePrimGroupScale(uint localID, LLVector3 scale, IClientAPI remoteClient) + protected internal void UpdatePrimGroupScale(uint localID, Vector3 scale, IClientAPI remoteClient) { SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) @@ -1001,7 +1000,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// protected internal void RequestObjectPropertiesFamily( - IClientAPI remoteClient, LLUUID AgentID, uint RequestFlags, LLUUID ObjectID) + IClientAPI remoteClient, UUID AgentID, uint RequestFlags, UUID ObjectID) { SceneObjectGroup group = GetGroupByPrim(ObjectID); if (group != null) @@ -1016,7 +1015,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) + protected internal void UpdatePrimSingleRotation(uint localID, Quaternion rot, IClientAPI remoteClient) { SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) @@ -1034,7 +1033,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) + protected internal void UpdatePrimRotation(uint localID, Quaternion rot, IClientAPI remoteClient) { SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) @@ -1053,7 +1052,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void UpdatePrimRotation(uint localID, LLVector3 pos, LLQuaternion rot, IClientAPI remoteClient) + protected internal void UpdatePrimRotation(uint localID, Vector3 pos, Quaternion rot, IClientAPI remoteClient) { SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) @@ -1071,12 +1070,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient) + protected internal void UpdatePrimSinglePosition(uint localID, Vector3 pos, IClientAPI remoteClient) { SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - // LLVector3 oldPos = group.AbsolutePosition; + // Vector3 oldPos = group.AbsolutePosition; if (!m_parentScene.ExternalChecks.ExternalChecksCanObjectEntry(group.UUID,pos) && !group.RootPart.IsAttachment) { group.SendGroupTerseUpdate(); @@ -1096,13 +1095,13 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void UpdatePrimPosition(uint localID, LLVector3 pos, IClientAPI remoteClient) + protected internal void UpdatePrimPosition(uint localID, Vector3 pos, IClientAPI remoteClient) { SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - // LLVector3 oldPos = group.AbsolutePosition; + // Vector3 oldPos = group.AbsolutePosition; if (group.RootPart.IsAttachment) { group.UpdateGroupPosition(pos); @@ -1166,7 +1165,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) + protected internal void MoveObject(UUID objectID, Vector3 offset, Vector3 pos, IClientAPI remoteClient) { SceneObjectGroup group = GetGroupByPrim(objectID); if (group != null) @@ -1219,7 +1218,7 @@ namespace OpenSim.Region.Environment.Scenes } } - protected internal void UpdateExtraParam(LLUUID agentID, uint primLocalID, ushort type, bool inUse, byte[] data) + protected internal void UpdateExtraParam(UUID agentID, uint primLocalID, ushort type, bool inUse, byte[] data) { SceneObjectGroup group = GetGroupByPrim(primLocalID); @@ -1237,7 +1236,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void UpdatePrimShape(LLUUID agentID, uint primLocalID, UpdateShapeArgs shapeBlock) + protected internal void UpdatePrimShape(UUID agentID, uint primLocalID, UpdateShapeArgs shapeBlock) { SceneObjectGroup group = GetGroupByPrim(primLocalID); if (group != null) @@ -1323,7 +1322,7 @@ namespace OpenSim.Region.Environment.Scenes // 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.RootPart.AddFlag(LLObject.ObjectFlags.CreateSelected); + parenPrim.RootPart.AddFlag(PrimFlags.CreateSelected); parenPrim.TriggerScriptChangedEvent(Changed.LINK); if (client != null) parenPrim.GetProperties(client); @@ -1478,8 +1477,8 @@ namespace OpenSim.Region.Environment.Scenes protected internal void MakeObjectSearchable(IClientAPI remoteClient, bool IncludeInSearch, uint localID) { - LLUUID user = remoteClient.AgentId; - LLUUID objid = null; + UUID user = remoteClient.AgentId; + UUID objid = null; SceneObjectPart obj = null; List EntityList = GetEntities(); @@ -1487,7 +1486,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) { @@ -1512,11 +1511,11 @@ namespace OpenSim.Region.Environment.Scenes if (IncludeInSearch && m_parentScene.ExternalChecks.ExternalChecksCanEditObject(objid, user)) { - obj.ParentGroup.RootPart.AddFlag(LLObject.ObjectFlags.JointWheel); + obj.ParentGroup.RootPart.AddFlag(PrimFlags.JointWheel); } else if (!IncludeInSearch && m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(objid,user)) { - obj.ParentGroup.RootPart.RemFlag(LLObject.ObjectFlags.JointWheel); + obj.ParentGroup.RootPart.RemFlag(PrimFlags.JointWheel); } } @@ -1526,12 +1525,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal void DuplicateObject(uint originalPrim, LLVector3 offset, uint flags, LLUUID AgentID, LLUUID GroupID) + protected internal void DuplicateObject(uint originalPrim, Vector3 offset, uint flags, UUID AgentID, UUID GroupID) { //m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); // SceneObjectGroup dupe = DuplicateObject(originalPrim, offset, flags, AgentID, GroupID, Quaternion.Zero); - DuplicateObject(originalPrim, offset, flags, AgentID, GroupID, Quaternion.Zero); + DuplicateObject(originalPrim, offset, flags, AgentID, GroupID, Quaternion.Identity); } /// /// Duplicate the given object. @@ -1539,7 +1538,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - protected internal SceneObjectGroup DuplicateObject(uint originalPrim, LLVector3 offset, uint flags, LLUUID AgentID, LLUUID GroupID, Quaternion rot) + protected internal SceneObjectGroup DuplicateObject(uint originalPrim, Vector3 offset, uint flags, UUID AgentID, UUID GroupID, Quaternion rot) { //m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); @@ -1580,9 +1579,9 @@ namespace OpenSim.Region.Environment.Scenes m_numPrim += copy.Children.Count; - if (rot != Quaternion.Zero) + if (rot != Quaternion.Identity) { - copy.UpdateGroupRotation(new LLQuaternion(rot.x, rot.y, rot.z, rot.w)); + copy.UpdateGroupRotation(rot); } copy.CreateScriptInstances(0, false); @@ -1610,7 +1609,7 @@ namespace OpenSim.Region.Environment.Scenes return (float) - Math.Sqrt((v1.x - v2.x) * (v1.x - v2.x) + (v1.y - v2.y) * (v1.y - v2.y) + (v1.z - v2.z) * (v1.z - v2.z)); + Math.Sqrt((v1.X - v2.X) * (v1.X - v2.X) + (v1.Y - v2.Y) * (v1.Y - v2.Y) + (v1.Z - v2.Z) * (v1.Z - v2.Z)); } #endregion diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index ab580aee1b..cdd69430cd 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -30,8 +30,8 @@ using System.Collections.Generic; using System.Reflection; using System.Text; using System.Timers; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -46,7 +46,7 @@ namespace OpenSim.Region.Environment.Scenes public EntityBase selectedEnt; public IClientAPI remoteClient; public SceneObjectGroup objectGroup; - public LLUUID folderID; + public UUID folderID; public bool permissionToDelete; } @@ -74,7 +74,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void AddUploadedInventoryItem(LLUUID agentID, InventoryItemBase item) + public void AddUploadedInventoryItem(UUID agentID, InventoryItemBase item) { IMoneyModule money=RequestModuleInterface(); if (money != null) @@ -85,7 +85,7 @@ namespace OpenSim.Region.Environment.Scenes AddInventoryItem(agentID, item); } - public bool AddInventoryItemReturned(LLUUID AgentId, InventoryItemBase item) + public bool AddInventoryItemReturned(UUID AgentId, InventoryItemBase item) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(AgentId); @@ -103,7 +103,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void AddInventoryItem(LLUUID AgentID, InventoryItemBase item) + public void AddInventoryItem(UUID AgentID, InventoryItemBase item) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(AgentID); @@ -160,7 +160,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public LLUUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID itemID, byte[] data) + public UUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); if (userInfo != null) @@ -192,13 +192,13 @@ namespace OpenSim.Region.Environment.Scenes } } } - return LLUUID.Zero; + return UUID.Zero; } /// - /// CapsUpdatedInventoryItemAsset(IClientAPI, LLUUID, byte[]) + /// CapsUpdatedInventoryItemAsset(IClientAPI, UUID, byte[]) /// - private LLUUID CapsUpdateInventoryItemAsset(LLUUID avatarId, LLUUID itemID, byte[] data) + private UUID CapsUpdateInventoryItemAsset(UUID avatarId, UUID itemID, byte[] data) { ScenePresence avatar; @@ -214,7 +214,7 @@ namespace OpenSim.Region.Environment.Scenes avatarId); } - return LLUUID.Zero; + return UUID.Zero; } /// @@ -225,8 +225,8 @@ namespace OpenSim.Region.Environment.Scenes /// The prim which contains the item to update /// Indicates whether the script to update is currently running /// - public void CapsUpdateTaskInventoryScriptAsset(IClientAPI remoteClient, LLUUID itemId, - LLUUID primId, bool isScriptRunning, byte[] data) + public void CapsUpdateTaskInventoryScriptAsset(IClientAPI remoteClient, UUID itemId, + UUID primId, bool isScriptRunning, byte[] data) { // Retrieve group SceneObjectPart part = GetSceneObjectPart(primId); @@ -274,10 +274,10 @@ namespace OpenSim.Region.Environment.Scenes } /// - /// CapsUpdateTaskInventoryScriptAsset(IClientAPI, LLUUID, LLUUID, bool, byte[]) + /// CapsUpdateTaskInventoryScriptAsset(IClientAPI, UUID, UUID, bool, byte[]) /// - private void CapsUpdateTaskInventoryScriptAsset(LLUUID avatarId, LLUUID itemId, - LLUUID primId, bool isScriptRunning, byte[] data) + private void CapsUpdateTaskInventoryScriptAsset(UUID avatarId, UUID itemId, + UUID primId, bool isScriptRunning, byte[] data) { ScenePresence avatar; @@ -300,17 +300,17 @@ namespace OpenSim.Region.Environment.Scenes /// a transaction /// /// - /// The transaction ID. If this is LLUUID.Zero we will + /// The transaction ID. If this is UUID.Zero we will /// assume that we are not in a transaction /// The ID of the updated item /// The name of the updated item /// The description of the updated item /// The permissions of the updated item -/* public void UpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID transactionID, - LLUUID itemID, string name, string description, +/* public void UpdateInventoryItemAsset(IClientAPI remoteClient, UUID transactionID, + UUID itemID, string name, string description, uint nextOwnerMask)*/ - public void UpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID transactionID, - LLUUID itemID, InventoryItemBase itemUpd) + public void UpdateInventoryItemAsset(IClientAPI remoteClient, UUID transactionID, + UUID itemID, InventoryItemBase itemUpd) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); @@ -321,7 +321,7 @@ namespace OpenSim.Region.Environment.Scenes if (item != null) { - if (LLUUID.Zero == transactionID) + if (UUID.Zero == transactionID) { item.Name = itemUpd.Name; item.Description = itemUpd.Description; @@ -378,7 +378,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// ID of the sender of the item /// - public void GiveInventoryItem(IClientAPI recipientClient, LLUUID senderId, LLUUID itemId) + public void GiveInventoryItem(IClientAPI recipientClient, UUID senderId, UUID itemId) { // Retrieve the item from the sender CachedUserInfo senderUserInfo = CommsManager.UserProfileCacheService.GetUserDetails(senderId); @@ -413,13 +413,13 @@ namespace OpenSim.Region.Environment.Scenes InventoryItemBase itemCopy = new InventoryItemBase(); itemCopy.Owner = recipientClient.AgentId; itemCopy.Creator = senderId; - itemCopy.ID = LLUUID.Random(); + itemCopy.ID = UUID.Random(); itemCopy.AssetID = item.AssetID; itemCopy.Description = item.Description; itemCopy.Name = item.Name; itemCopy.AssetType = item.AssetType; itemCopy.InvType = item.InvType; - itemCopy.Folder = LLUUID.Zero; + itemCopy.Folder = UUID.Zero; if (ExternalChecks.ExternalChecksPropagatePermissions()) { if (item.InvType == 6) @@ -493,8 +493,8 @@ namespace OpenSim.Region.Environment.Scenes } } - public void CopyInventoryItem(IClientAPI remoteClient, uint callbackID, LLUUID oldAgentID, LLUUID oldItemID, - LLUUID newFolderID, string newName) + public void CopyInventoryItem(IClientAPI remoteClient, uint callbackID, UUID oldAgentID, UUID oldItemID, + UUID newFolderID, string newName) { m_log.DebugFormat( "[AGENT INVENTORY]: CopyInventoryItem received by {0} with oldAgentID {1}, oldItemID {2}, new FolderID {3}, newName {4}", @@ -579,7 +579,7 @@ namespace OpenSim.Region.Environment.Scenes asset.Name = name; asset.Description = description; asset.Type = assetType; - asset.FullID = LLUUID.Random(); + asset.FullID = UUID.Random(); asset.Data = (data == null) ? new byte[1] : data; return asset; @@ -593,7 +593,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void MoveInventoryItem(IClientAPI remoteClient, LLUUID folderID, LLUUID itemID, int length, + public void MoveInventoryItem(IClientAPI remoteClient, UUID folderID, UUID itemID, int length, string newName) { m_log.DebugFormat( @@ -648,7 +648,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - private void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID folderID, string name, uint flags, uint callbackID, + private void CreateNewInventoryItem(IClientAPI remoteClient, UUID folderID, string name, uint flags, uint callbackID, AssetBase asset, sbyte invType, uint nextOwnerMask, int creationDate) { CreateNewInventoryItem( @@ -667,7 +667,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// private void CreateNewInventoryItem( - IClientAPI remoteClient, LLUUID folderID, string name, uint flags, uint callbackID, AssetBase asset, sbyte invType, + IClientAPI remoteClient, UUID folderID, string name, uint flags, uint callbackID, AssetBase asset, sbyte invType, uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, int creationDate) { CachedUserInfo userInfo @@ -678,7 +678,7 @@ namespace OpenSim.Region.Environment.Scenes InventoryItemBase item = new InventoryItemBase(); item.Owner = remoteClient.AgentId; item.Creator = remoteClient.AgentId; - item.ID = LLUUID.Random(); + item.ID = UUID.Random(); item.AssetID = asset.FullID; item.Description = asset.Description; item.Name = name; @@ -717,14 +717,14 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + public void CreateNewInventoryItem(IClientAPI remoteClient, UUID transactionID, UUID folderID, uint callbackID, string description, string name, sbyte invType, sbyte assetType, byte wearableType, uint nextOwnerMask, int creationDate) { // m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item {0} in folder {1}", name, folderID); - if (transactionID == LLUUID.Zero) + if (transactionID == UUID.Zero) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); @@ -734,9 +734,9 @@ namespace OpenSim.Region.Environment.Scenes 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) // OpenMetaverse.asset.assettype.landmark = 3 - needs to be turned into an enum { - LLVector3 pos=presence.AbsolutePosition; + Vector3 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, @@ -775,7 +775,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - private void RemoveInventoryItem(IClientAPI remoteClient, LLUUID itemID) + private void RemoveInventoryItem(IClientAPI remoteClient, UUID itemID) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); @@ -798,7 +798,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - private void RemoveInventoryFolder(IClientAPI remoteClient, LLUUID folderID) + private void RemoveInventoryFolder(IClientAPI remoteClient, UUID folderID) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); @@ -873,7 +873,7 @@ namespace OpenSim.Region.Environment.Scenes /// be necessary for a permissions check at some stage. /// /// - public void RemoveTaskInventory(IClientAPI remoteClient, LLUUID itemID, uint localID) + public void RemoveTaskInventory(IClientAPI remoteClient, UUID itemID, uint localID) { SceneObjectPart part = GetSceneObjectPart(localID); SceneObjectGroup group = part.ParentGroup; @@ -896,7 +896,7 @@ namespace OpenSim.Region.Environment.Scenes } } - private InventoryItemBase CreateAgentInventoryItemFromTask(LLUUID destAgent, SceneObjectPart part, LLUUID itemId) + private InventoryItemBase CreateAgentInventoryItemFromTask(UUID destAgent, SceneObjectPart part, UUID itemId) { TaskInventoryItem taskItem = part.GetInventoryItem(itemId); @@ -913,7 +913,7 @@ namespace OpenSim.Region.Environment.Scenes InventoryItemBase agentItem = new InventoryItemBase(); - agentItem.ID = LLUUID.Random(); + agentItem.ID = UUID.Random(); agentItem.Creator = taskItem.CreatorID; agentItem.Owner = destAgent; agentItem.AssetID = taskItem.AssetID; @@ -954,7 +954,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void MoveTaskInventoryItem(IClientAPI remoteClient, LLUUID folderId, SceneObjectPart part, LLUUID itemId) + public void MoveTaskInventoryItem(IClientAPI remoteClient, UUID folderId, SceneObjectPart part, UUID itemId) { InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(remoteClient.AgentId, part, itemId); @@ -970,7 +970,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void ClientMoveTaskInventoryItem(IClientAPI remoteClient, LLUUID folderId, uint primLocalId, LLUUID itemId) + public void ClientMoveTaskInventoryItem(IClientAPI remoteClient, UUID folderId, uint primLocalId, UUID itemId) { SceneObjectPart part = GetSceneObjectPart(primLocalId); @@ -1009,7 +1009,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void MoveTaskInventoryItem(LLUUID avatarId, LLUUID folderId, SceneObjectPart part, LLUUID itemId) + public void MoveTaskInventoryItem(UUID avatarId, UUID folderId, SceneObjectPart part, UUID itemId) { ScenePresence avatar; @@ -1040,7 +1040,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void MoveTaskInventoryItem(LLUUID destId, SceneObjectPart part, LLUUID itemId) + public void MoveTaskInventoryItem(UUID destId, SceneObjectPart part, UUID itemId) { TaskInventoryItem srcTaskItem = part.GetInventoryItem(itemId); @@ -1065,7 +1065,7 @@ namespace OpenSim.Region.Environment.Scenes return; } - if (part.OwnerID != destPart.OwnerID && (part.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.AllowInventoryDrop) == 0) + if (part.OwnerID != destPart.OwnerID && (part.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) == 0) { // object cannot copy items to an object owned by a different owner // unless llAllowInventoryDrop has been called @@ -1081,7 +1081,7 @@ namespace OpenSim.Region.Environment.Scenes TaskInventoryItem destTaskItem = new TaskInventoryItem(); - destTaskItem.ItemID = LLUUID.Random(); + destTaskItem.ItemID = UUID.Random(); destTaskItem.CreatorID = srcTaskItem.CreatorID; destTaskItem.AssetID = srcTaskItem.AssetID; destTaskItem.GroupID = destPart.GroupID; @@ -1130,7 +1130,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void MoveTaskInventoryItems(LLUUID destID, string category, SceneObjectPart host, List items) + public void MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List items) { CachedUserInfo profile = CommsManager.UserProfileCacheService.GetUserDetails(destID); if (profile == null || profile.RootFolder == null) @@ -1142,11 +1142,11 @@ namespace OpenSim.Region.Environment.Scenes return; } - LLUUID newFolderID = LLUUID.Random(); + UUID newFolderID = UUID.Random(); profile.CreateFolder(category, newFolderID, 0xffff, profile.RootFolder.ID); - foreach (LLUUID itemID in items) + foreach (UUID itemID in items) { InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(destID, host, itemID); agentItem.Folder = newFolderID; @@ -1167,16 +1167,16 @@ namespace OpenSim.Region.Environment.Scenes /// /// Update an item in a prim (task) inventory. - /// This method does not handle scripts, RezScript(IClientAPI, LLUUID, unit) + /// This method does not handle scripts, RezScript(IClientAPI, UUID, unit) /// /// /// /// /// - public void UpdateTaskInventory(IClientAPI remoteClient, LLUUID transactionID, TaskInventoryItem itemInfo, + public void UpdateTaskInventory(IClientAPI remoteClient, UUID transactionID, TaskInventoryItem itemInfo, uint primLocalID) { - LLUUID itemID = itemInfo.ItemID; + UUID itemID = itemInfo.ItemID; // Find the prim we're dealing with SceneObjectPart part = GetSceneObjectPart(primLocalID); @@ -1193,8 +1193,8 @@ namespace OpenSim.Region.Environment.Scenes if (currentItem == null) { - LLUUID copyID = LLUUID.Random(); - if (itemID != LLUUID.Zero) + UUID copyID = UUID.Random(); + if (itemID != UUID.Zero) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); @@ -1254,12 +1254,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void RezScript(IClientAPI remoteClient, InventoryItemBase itemBase, LLUUID transactionID, uint localID) + public void RezScript(IClientAPI remoteClient, InventoryItemBase itemBase, UUID transactionID, uint localID) { - LLUUID itemID=itemBase.ID; - LLUUID copyID = LLUUID.Random(); + UUID itemID=itemBase.ID; + UUID copyID = UUID.Random(); - if (itemID != LLUUID.Zero) + if (itemID != UUID.Zero) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); @@ -1344,7 +1344,7 @@ namespace OpenSim.Region.Environment.Scenes taskItem.GroupID = itemBase.GroupID; taskItem.GroupPermissions = 0; taskItem.Flags = itemBase.Flags; - taskItem.PermsGranter = LLUUID.Zero; + taskItem.PermsGranter = UUID.Zero; taskItem.PermsMask = 0; taskItem.AssetID = asset.ID; @@ -1361,7 +1361,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void RezScript(LLUUID srcId, SceneObjectPart srcPart, LLUUID destId, int pin, int running, int start_param) + public void RezScript(UUID srcId, SceneObjectPart srcPart, UUID destId, int pin, int running, int start_param) { TaskInventoryItem srcTaskItem = srcPart.GetInventoryItem(srcId); @@ -1407,7 +1407,7 @@ namespace OpenSim.Region.Environment.Scenes TaskInventoryItem destTaskItem = new TaskInventoryItem(); - destTaskItem.ItemID = LLUUID.Random(); + destTaskItem.ItemID = UUID.Random(); destTaskItem.CreatorID = srcTaskItem.CreatorID; destTaskItem.AssetID = srcTaskItem.AssetID; destTaskItem.GroupID = destPart.GroupID; @@ -1467,7 +1467,7 @@ namespace OpenSim.Region.Environment.Scenes { DeRezObjectPacket DeRezPacket = (DeRezObjectPacket) packet; - LLUUID folderID = LLUUID.Zero; + UUID folderID = UUID.Zero; foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData) { @@ -1598,7 +1598,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } - private void DeleteToInventory(DeRezObjectPacket DeRezPacket, EntityBase selectedEnt, IClientAPI remoteClient, SceneObjectGroup objectGroup, LLUUID folderID, bool permissionToDelete) + private void DeleteToInventory(DeRezObjectPacket DeRezPacket, EntityBase selectedEnt, IClientAPI remoteClient, SceneObjectGroup objectGroup, UUID folderID, bool permissionToDelete) { string sceneObjectXml = objectGroup.ToXmlString(); @@ -1616,7 +1616,7 @@ namespace OpenSim.Region.Environment.Scenes // If we're deleting someone else's item, it goes back to their deleted items folder // If we're returning someone's item, it goes back to the owner's Lost And Found folder. - if (DeRezPacket.AgentBlock.DestinationID == LLUUID.Zero || (DeRezPacket.AgentBlock.Destination == 6 && objectGroup.OwnerID != remoteClient.AgentId)) + if (DeRezPacket.AgentBlock.DestinationID == UUID.Zero || (DeRezPacket.AgentBlock.Destination == 6 && objectGroup.OwnerID != remoteClient.AgentId)) { List subrootfolders = userInfo.RootFolder.RequestListOfFolders(); foreach (InventoryFolderBase flder in subrootfolders) @@ -1628,7 +1628,7 @@ namespace OpenSim.Region.Environment.Scenes } } - if (folderID == LLUUID.Zero) + if (folderID == UUID.Zero) { folderID = userInfo.RootFolder.ID; } @@ -1643,7 +1643,7 @@ namespace OpenSim.Region.Environment.Scenes ((SceneObjectGroup) selectedEnt).GetPartName(selectedEnt.LocalId), ((SceneObjectGroup) selectedEnt).GetPartDescription(selectedEnt.LocalId), (sbyte)AssetType.Object, - Helpers.StringToField(sceneObjectXml)); + Utils.StringToBytes(sceneObjectXml)); AssetCache.AddAsset(asset); InventoryItemBase item = new InventoryItemBase(); @@ -1654,7 +1654,7 @@ namespace OpenSim.Region.Environment.Scenes else // Delete / Return item.Owner = objectGroup.OwnerID; - item.ID = LLUUID.Random(); + item.ID = UUID.Random(); item.AssetID = asset.FullID; item.Description = asset.Description; item.Name = asset.Name; @@ -1709,7 +1709,7 @@ namespace OpenSim.Region.Environment.Scenes DeleteSceneObject(objectGroup); } - public void updateKnownAsset(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID assetID, LLUUID agentID) + public void updateKnownAsset(IClientAPI remoteClient, SceneObjectGroup grp, UUID assetID, UUID agentID) { SceneObjectGroup objectGroup = grp; if (objectGroup != null) @@ -1723,7 +1723,7 @@ namespace OpenSim.Region.Environment.Scenes Queue searchfolders = new Queue(); searchfolders.Enqueue(userInfo.RootFolder); - LLUUID foundFolder = userInfo.RootFolder.ID; + UUID foundFolder = userInfo.RootFolder.ID; // search through folders to find the asset. while (searchfolders.Count > 0) @@ -1754,7 +1754,7 @@ namespace OpenSim.Region.Environment.Scenes objectGroup.GetPartName(objectGroup.LocalId), objectGroup.GetPartDescription(objectGroup.LocalId), (sbyte)AssetType.Object, - Helpers.StringToField(sceneObjectXml)); + Utils.StringToBytes(sceneObjectXml)); AssetCache.AddAsset(asset); InventoryItemBase item = new InventoryItemBase(); @@ -1797,7 +1797,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public LLUUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID AgentId) + public UUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, UUID AgentId) { SceneObjectGroup objectGroup = grp; if (objectGroup != null) @@ -1812,13 +1812,13 @@ namespace OpenSim.Region.Environment.Scenes objectGroup.GetPartName(objectGroup.LocalId), objectGroup.GetPartDescription(objectGroup.LocalId), (sbyte)AssetType.Object, - Helpers.StringToField(sceneObjectXml)); + Utils.StringToBytes(sceneObjectXml)); AssetCache.AddAsset(asset); InventoryItemBase item = new InventoryItemBase(); item.Creator = objectGroup.RootPart.CreatorID; item.Owner = remoteClient.AgentId; - item.ID = LLUUID.Random(); + item.ID = UUID.Random(); item.AssetID = asset.FullID; item.Description = asset.Description; item.Name = asset.Name; @@ -1848,9 +1848,9 @@ namespace OpenSim.Region.Environment.Scenes remoteClient.SendInventoryItemCreateUpdate(item); return item.AssetID; } - return LLUUID.Zero; + return UUID.Zero; } - return LLUUID.Zero; + return UUID.Zero; } @@ -1872,10 +1872,10 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public virtual void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart, - LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, + public virtual void RezObject(IClientAPI remoteClient, UUID itemID, Vector3 RayEnd, Vector3 RayStart, + UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, - bool RezSelected, bool RemoveItem, LLUUID fromTaskID) + bool RezSelected, bool RemoveItem, UUID fromTaskID) { RezObject( remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection, @@ -1901,10 +1901,10 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public virtual SceneObjectGroup RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart, - LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, + public virtual SceneObjectGroup RezObject(IClientAPI remoteClient, UUID itemID, Vector3 RayEnd, Vector3 RayStart, + UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, - bool RezSelected, bool RemoveItem, LLUUID fromTaskID, bool attachment) + bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment) { // Work out position details byte bRayEndIsIntersection = (byte)0; @@ -1918,11 +1918,11 @@ namespace OpenSim.Region.Environment.Scenes bRayEndIsIntersection = (byte)0; } - LLVector3 scale = new LLVector3(0.5f, 0.5f, 0.5f); + Vector3 scale = new Vector3(0.5f, 0.5f, 0.5f); - LLVector3 pos = GetNewRezLocation( - RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), + Vector3 pos = GetNewRezLocation( + RayStart, RayEnd, RayTargetID, Quaternion.Identity, BypassRayCast, bRayEndIsIntersection,true,scale, false); // Rez object @@ -1939,7 +1939,7 @@ namespace OpenSim.Region.Environment.Scenes if (rezAsset != null) { - string xmlData = Helpers.FieldToUTF8String(rezAsset.Data); + string xmlData = Utils.BytesToString(rezAsset.Data); SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData); if (!ExternalChecks.ExternalChecksCanRezObject(group.Children.Count, remoteClient.AgentId, pos) && !attachment) { @@ -1955,7 +1955,7 @@ namespace OpenSim.Region.Environment.Scenes if (!attachment) { pos = GetNewRezLocation( - RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), + RayStart, RayEnd, RayTargetID, Quaternion.Identity, BypassRayCast, bRayEndIsIntersection, true, group.GroupScale(), false); group.AbsolutePosition = pos; } @@ -2066,18 +2066,18 @@ namespace OpenSim.Region.Environment.Scenes /// public virtual SceneObjectGroup RezObject( SceneObjectPart sourcePart, TaskInventoryItem item, - LLVector3 pos, LLQuaternion rot, LLVector3 vel, int param) + Vector3 pos, Quaternion rot, Vector3 vel, int param) { // Rez object if (item != null) { - LLUUID ownerID = item.OwnerID; + UUID ownerID = item.OwnerID; AssetBase rezAsset = AssetCache.GetAsset(item.AssetID, false); if (rezAsset != null) { - string xmlData = Helpers.FieldToUTF8String(rezAsset.Data); + string xmlData = Utils.BytesToString(rezAsset.Data); SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData); if (!ExternalChecks.ExternalChecksCanRezObject(group.Children.Count, ownerID, pos)) @@ -2154,7 +2154,7 @@ namespace OpenSim.Region.Environment.Scenes return null; } - public virtual bool returnObjects(SceneObjectGroup[] returnobjects, LLUUID AgentId) + public virtual bool returnObjects(SceneObjectGroup[] returnobjects, UUID AgentId) { string message = ""; if (returnobjects.Length <= 0) @@ -2186,7 +2186,7 @@ namespace OpenSim.Region.Environment.Scenes { if (userInfo.HasReceivedInventory) { - LLUUID folderID = LLUUID.Zero; + UUID folderID = UUID.Zero; List subrootfolders = userInfo.RootFolder.RequestListOfFolders(); foreach (InventoryFolderBase flder in subrootfolders) @@ -2198,7 +2198,7 @@ namespace OpenSim.Region.Environment.Scenes } } - if (folderID == LLUUID.Zero) + if (folderID == UUID.Zero) { folderID = userInfo.RootFolder.ID; } @@ -2213,13 +2213,13 @@ namespace OpenSim.Region.Environment.Scenes returnobjects[i].GetPartName(returnobjects[i].LocalId), returnobjects[i].GetPartDescription(returnobjects[i].LocalId), (sbyte)AssetType.Object, - Helpers.StringToField(sceneObjectXml)); + Utils.StringToBytes(sceneObjectXml)); AssetCache.AddAsset(asset); InventoryItemBase item = new InventoryItemBase(); item.Creator = returnobjects[i].RootPart.CreatorID; item.Owner = returnobjects[i].OwnerID; - item.ID = LLUUID.Random(); + item.ID = UUID.Random(); item.AssetID = asset.FullID; item.Description = asset.Description; item.Name = asset.Name; @@ -2295,7 +2295,7 @@ namespace OpenSim.Region.Environment.Scenes } - public void GetScriptRunning(IClientAPI controllingClient, LLUUID objectID, LLUUID itemID) + public void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) { IScriptModule scriptModule = RequestModuleInterface(); if (scriptModule == null) @@ -2305,7 +2305,7 @@ namespace OpenSim.Region.Environment.Scenes scriptModule.GetScriptRunning(objectID, itemID)); } - public void SetScriptRunning(IClientAPI controllingClient, LLUUID objectID, LLUUID itemID, bool running) + public void SetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID, bool running) { SceneObjectPart part = GetSceneObjectPart(objectID); if (part == null) @@ -2317,7 +2317,7 @@ namespace OpenSim.Region.Environment.Scenes EventManager.TriggerStopScript(part.LocalId, itemID); } - public void RezSingleAttachment(IClientAPI remoteClient, LLUUID itemID, + public void RezSingleAttachment(IClientAPI remoteClient, UUID itemID, uint AttachmentPt, uint ItemFlags, uint NextOwnerMask) { SceneObjectGroup att = m_innerScene.RezSingleAttachment(remoteClient, itemID, AttachmentPt, ItemFlags, NextOwnerMask); @@ -2333,7 +2333,7 @@ namespace OpenSim.Region.Environment.Scenes } public void RezSingleAttachment(SceneObjectGroup att, - IClientAPI remoteClient, LLUUID itemID, uint AttachmentPt, + IClientAPI remoteClient, UUID itemID, uint AttachmentPt, uint ItemFlags, uint NextOwnerMask) { if (att.RootPart != null) @@ -2352,12 +2352,12 @@ namespace OpenSim.Region.Environment.Scenes } } - public void AttachObject(IClientAPI controllingClient, uint localID, uint attachPoint, LLQuaternion rot, LLVector3 pos) + public void AttachObject(IClientAPI controllingClient, uint localID, uint attachPoint, Quaternion rot, Vector3 pos) { m_innerScene.AttachObject(controllingClient, localID, attachPoint, rot, pos); } - public void DetachSingleAttachmentToInv(LLUUID itemID, IClientAPI remoteClient) + public void DetachSingleAttachmentToInv(UUID itemID, IClientAPI remoteClient) { ScenePresence presence; if (TryGetAvatar(remoteClient.AgentId, out presence)) diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index 14d6826fe8..38f40290e7 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -26,20 +26,20 @@ */ using System.Collections.Generic; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; namespace OpenSim.Region.Environment.Scenes { public partial class Scene { - protected void SimChat(byte[] message, ChatTypeEnum type, int channel, LLVector3 fromPos, string fromName, - LLUUID fromID, bool fromAgent, bool broadcast) + protected void SimChat(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName, + UUID fromID, bool fromAgent, bool broadcast) { OSChatMessage args = new OSChatMessage(); - args.Message = Helpers.FieldToUTF8String(message); + args.Message = Utils.BytesToString(message); args.Channel = channel; args.Type = type; args.Position = fromPos; @@ -75,8 +75,8 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void SimChat(byte[] message, ChatTypeEnum type, int channel, LLVector3 fromPos, string fromName, - LLUUID fromID, bool fromAgent) + public void SimChat(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName, + UUID fromID, bool fromAgent) { SimChat(message, type, channel, fromPos, fromName, fromID, fromAgent, false); } @@ -89,8 +89,8 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void SimChatBroadcast(byte[] message, ChatTypeEnum type, int channel, LLVector3 fromPos, string fromName, - LLUUID fromID, bool fromAgent) + public void SimChatBroadcast(byte[] message, ChatTypeEnum type, int channel, Vector3 fromPos, string fromName, + UUID fromID, bool fromAgent) { SimChat(message, type, channel, fromPos, fromName, fromID, fromAgent, true); } @@ -125,7 +125,7 @@ namespace OpenSim.Region.Environment.Scenes // We also need to check the children of this prim as they // can be selected as well and send property information bool foundPrim = false; - foreach (KeyValuePair child in ((SceneObjectGroup) ent).Children) + foreach (KeyValuePair child in ((SceneObjectGroup) ent).Children) { if (child.Value.LocalId == primLocalID) { @@ -196,7 +196,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public virtual void ProcessMoneyTransferRequest(LLUUID source, LLUUID destination, int amount, + public virtual void ProcessMoneyTransferRequest(UUID source, UUID destination, int amount, int transactiontype, string description) { EventManager.MoneyTransferArgs args = new EventManager.MoneyTransferArgs(source, destination, amount, @@ -205,7 +205,7 @@ namespace OpenSim.Region.Environment.Scenes EventManager.TriggerMoneyTransfer(this, args); } - public virtual void ProcessParcelBuy(LLUUID agentId, LLUUID groupId, bool final, bool groupOwned, + public virtual void ProcessParcelBuy(UUID agentId, UUID groupId, bool final, bool groupOwned, bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated) { EventManager.LandBuyArgs args = new EventManager.LandBuyArgs(agentId, groupId, final, groupOwned, @@ -219,7 +219,7 @@ namespace OpenSim.Region.Environment.Scenes m_eventManager.TriggerLandBuy(this, args); } - public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) + public virtual void ProcessObjectGrab(uint localID, Vector3 offsetPos, IClientAPI remoteClient) { List EntityList = GetEntities(); @@ -286,7 +286,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void ProcessAvatarPickerRequest(IClientAPI client, LLUUID avatarID, LLUUID RequestID, string query) + public void ProcessAvatarPickerRequest(IClientAPI client, UUID avatarID, UUID RequestID, string query) { //EventManager.TriggerAvatarPickerRequest(); @@ -308,11 +308,11 @@ namespace OpenSim.Region.Environment.Scenes int i = 0; foreach (AvatarPickerAvatar item in AvatarResponses) { - LLUUID translatedIDtem = item.AvatarID; + UUID 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 = Utils.StringToBytes((string) item.firstName); + searchData[i].LastName = Utils.StringToBytes((string) item.lastName); i++; } if (AvatarResponses.Count == 0) @@ -337,8 +337,8 @@ namespace OpenSim.Region.Environment.Scenes client.SendAvatarPickerReply(agent_data, data_args); } - public void ProcessScriptReset(IClientAPI remoteClient, LLUUID objectID, - LLUUID itemID) + public void ProcessScriptReset(IClientAPI remoteClient, UUID objectID, + UUID itemID) { SceneObjectPart part=GetSceneObjectPart(objectID); if (part == null) diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index becd7dc6f0..9e784d6ea6 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -32,10 +32,9 @@ using System.Drawing.Imaging; using System.IO; using System.Threading; using System.Timers; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; -using OpenJPEGNet; +using OpenMetaverse; +using OpenMetaverse.Imaging; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Framework.Communications; using OpenSim.Framework.Communications.Cache; @@ -116,7 +115,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// Each agent has its own capabilities handler. /// - protected Dictionary m_capsHandlers = new Dictionary(); + protected Dictionary m_capsHandlers = new Dictionary(); protected BaseHttpServer m_httpListener; @@ -201,19 +200,19 @@ namespace OpenSim.Region.Environment.Scenes } // Local reference to the objects in the scene (which are held in innerScene) - // public Dictionary Objects + // public Dictionary Objects // { // get { return m_innerScene.SceneObjects; } // } // Reference to all of the agents in the scene (root and child) - protected Dictionary m_scenePresences + protected Dictionary m_scenePresences { get { return m_innerScene.ScenePresences; } set { m_innerScene.ScenePresences = value; } } - // protected Dictionary m_sceneObjects + // protected Dictionary m_sceneObjects // { // get { return m_innerScene.SceneObjects; } // set { m_innerScene.SceneObjects = value; } @@ -227,13 +226,13 @@ namespace OpenSim.Region.Environment.Scenes /// If you want a list of entities where the list itself is guaranteed not to change, please use /// GetEntities() /// - public Dictionary Entities + public Dictionary Entities { get { return m_innerScene.Entities; } set { m_innerScene.Entities = value; } } - public Dictionary m_restorePresences + public Dictionary m_restorePresences { get { return m_innerScene.RestorePresences; } set { m_innerScene.RestorePresences = value; } @@ -466,7 +465,7 @@ namespace OpenSim.Region.Environment.Scenes m_restartTimer.Elapsed += new ElapsedEventHandler(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"); + SendRegionMessageFromEstateTools(UUID.Random(), UUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in 2 Minutes"); //SendGeneralAlert(RegionInfo.RegionName + ": Restarting in 2 Minutes"); } } @@ -481,7 +480,7 @@ namespace OpenSim.Region.Environment.Scenes if (m_RestartTimerCounter <= m_incrementsof15seconds) { if (m_RestartTimerCounter == 4 || m_RestartTimerCounter == 6 || m_RestartTimerCounter == 7) - SendRegionMessageFromEstateTools(LLUUID.Random(), LLUUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in " + + SendRegionMessageFromEstateTools(UUID.Random(), UUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in " + ((8 - m_RestartTimerCounter) * 15) + " seconds"); // SendGeneralAlert(RegionInfo.RegionName + ": Restarting in " + ((8 - m_RestartTimerCounter)*15) + @@ -923,8 +922,11 @@ namespace OpenSim.Region.Environment.Scenes foreach (AssetBase asset in textures) { - Image image = OpenJPEG.DecodeToImage(asset.Data); - bitImages.Add(image); + ManagedImage managedImage; + Image image; + + if (OpenJPEG.DecodeToImage(asset.Data, out managedImage, out image)) + bitImages.Add(image); } Bitmap mapTexture = new Bitmap(2560, 2560); @@ -1025,9 +1027,9 @@ namespace OpenSim.Region.Environment.Scenes double[,] hm = Heightmap.GetDoubles(); bool ShadowDebugContinue = true; //Color prim = Color.FromArgb(120, 120, 120); - //LLVector3 RayEnd = new LLVector3(0, 0, 0); - //LLVector3 RayStart = new LLVector3(0, 0, 0); - //LLVector3 direction = new LLVector3(0, 0, -1); + //Vector3 RayEnd = new Vector3(0, 0, 0); + //Vector3 RayStart = new Vector3(0, 0, 0); + //Vector3 direction = new Vector3(0, 0, -1); //Vector3 AXOrigin = new Vector3(); //Vector3 AXdirection = new Vector3(); //Ray testRay = new Ray(); @@ -1061,10 +1063,10 @@ namespace OpenSim.Region.Environment.Scenes //int tc = System.Environment.TickCount; for (int y = 0; y < 256; y++) { - //RayEnd = new LLVector3(x, y, 0); - //RayStart = new LLVector3(x, y, 255); + //RayEnd = new Vector3(x, y, 0); + //RayStart = new Vector3(x, y, 255); - //direction = LLVector3.Norm(RayEnd - RayStart); + //direction = Vector3.Norm(RayEnd - RayStart); //AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z); //AXdirection = new Vector3(direction.X, direction.Y, direction.Z); @@ -1272,7 +1274,7 @@ namespace OpenSim.Region.Environment.Scenes if (part.Shape.Textures.DefaultTexture == null) continue; - LLColor texcolor = part.Shape.Textures.DefaultTexture.RGBA; + Color4 texcolor = part.Shape.Textures.DefaultTexture.RGBA; // Not sure why some of these are null, oh well. @@ -1285,7 +1287,7 @@ namespace OpenSim.Region.Environment.Scenes //Try to set the map spot color try { - // If the color gets goofy somehow, skip it *shakes fist at LLColor + // If the color gets goofy somehow, skip it *shakes fist at Color4 mapdotspot = Color.FromArgb(colorr, colorg, colorb); } catch (ArgumentException) @@ -1302,7 +1304,7 @@ namespace OpenSim.Region.Environment.Scenes // Mono Array } - LLVector3 pos = part.GetWorldPosition(); + Vector3 pos = part.GetWorldPosition(); // skip prim outside of retion if (pos.X < 0f || pos.X > 256f || pos.Y < 0f || pos.Y > 256f) @@ -1327,21 +1329,20 @@ namespace OpenSim.Region.Environment.Scenes if (isBelow256AboveTerrain) { // Translate scale by rotation so scale is represented properly when object is rotated - Vector3 scale = new Vector3(part.Shape.Scale.X, part.Shape.Scale.Y, part.Shape.Scale.Z); - LLQuaternion llrot = part.GetWorldRotation(); - Quaternion rot = new Quaternion(llrot.W, llrot.X, llrot.Y, llrot.Z); - scale = rot * scale; + Vector3 scale = part.Shape.Scale; + Quaternion rot = part.GetWorldRotation(); + scale *= rot; // negative scales don't work in this situation - scale.x = Math.Abs(scale.x); - scale.y = Math.Abs(scale.y); - scale.z = Math.Abs(scale.z); + scale.X = Math.Abs(scale.X); + scale.Y = Math.Abs(scale.Y); + scale.Z = Math.Abs(scale.Z); // This scaling isn't very accurate and doesn't take into account the face rotation :P - int mapdrawstartX = (int)(pos.X - scale.x); - int mapdrawstartY = (int)(pos.Y - scale.y); - int mapdrawendX = (int)(pos.X + scale.x); - int mapdrawendY = (int)(pos.Y + scale.y); + int mapdrawstartX = (int)(pos.X - scale.X); + int mapdrawstartY = (int)(pos.Y - scale.Y); + int mapdrawendX = (int)(pos.X + scale.X); + int mapdrawendY = (int)(pos.Y + scale.Y); // If object is beyond the edge of the map, don't draw it to avoid errors if (mapdrawstartX < 0 || mapdrawstartX > 255 || mapdrawendX < 0 || mapdrawendX > 255 @@ -1420,7 +1421,7 @@ namespace OpenSim.Region.Environment.Scenes // map tile while protecting the (grid) asset database from bloat caused by a new asset each // time a mapimage is generated! - LLUUID lastMapRegionUUID = m_regInfo.lastMapUUID; + UUID lastMapRegionUUID = m_regInfo.lastMapUUID; int lastMapRefresh = 0; int twoDays = 172800; @@ -1440,21 +1441,21 @@ namespace OpenSim.Region.Environment.Scenes { } - LLUUID TerrainImageLLUUID = LLUUID.Random(); + UUID TerrainImageUUID = UUID.Random(); - if (lastMapRegionUUID == LLUUID.Zero || (lastMapRefresh + RefreshSeconds) < Util.UnixTimeSinceEpoch()) + if (lastMapRegionUUID == UUID.Zero || (lastMapRefresh + RefreshSeconds) < Util.UnixTimeSinceEpoch()) { - m_regInfo.SaveLastMapUUID(TerrainImageLLUUID); + m_regInfo.SaveLastMapUUID(TerrainImageUUID); m_log.Warn("[MAPTILE]: STORING MAPTILE IMAGE"); } else { - TerrainImageLLUUID = lastMapRegionUUID; + TerrainImageUUID = lastMapRegionUUID; m_log.Warn("[MAPTILE]: REUSING OLD MAPTILE IMAGE ID"); } - m_regInfo.RegionSettings.TerrainImageID = TerrainImageLLUUID; + m_regInfo.RegionSettings.TerrainImageID = TerrainImageUUID; AssetBase asset = new AssetBase(); asset.FullID = m_regInfo.RegionSettings.TerrainImageID; @@ -1471,7 +1472,7 @@ namespace OpenSim.Region.Environment.Scenes #region Load Land - public void loadAllLandObjectsFromStorage(LLUUID regionID) + public void loadAllLandObjectsFromStorage(UUID regionID) { m_log.Info("[SCENE]: Loading land objects from storage"); List landData = m_storageManager.DataStore.LoadLandObjects(regionID); @@ -1500,7 +1501,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// Loads the World's objects /// - public virtual void LoadPrimsFromStorage(LLUUID regionID) + public virtual void LoadPrimsFromStorage(UUID regionID) { m_log.Info("[SCENE]: Loading objects from datastore"); @@ -1509,7 +1510,7 @@ namespace OpenSim.Region.Environment.Scenes { AddRestoredSceneObject(group, true, true); SceneObjectPart rootPart = group.GetChildPart(group.UUID); - rootPart.ObjectFlags &= ~(uint)LLObject.ObjectFlags.Scripted; + rootPart.ObjectFlags &= ~(uint)PrimFlags.Scripted; rootPart.TrimPermissions(); group.CheckSculptAndLoad(); //rootPart.DoPhysicsPropertyUpdate(UsePhysics, true); @@ -1533,20 +1534,20 @@ 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 Vector3 GetNewRezLocation(Vector3 RayStart, Vector3 RayEnd, UUID RayTargetID, Quaternion rot, byte bypassRayCast, byte RayEndIsIntersection, bool frontFacesOnly, Vector3 scale, bool FaceCenter) { - LLVector3 pos = LLVector3.Zero; + Vector3 pos = Vector3.Zero; if (RayEndIsIntersection == (byte)1) { pos = RayEnd; return pos; } - if (RayTargetID != LLUUID.Zero) + if (RayTargetID != UUID.Zero) { SceneObjectPart target = GetSceneObjectPart(RayTargetID); - LLVector3 direction = LLVector3.Norm(RayEnd - RayStart); + Vector3 direction = Vector3.Normalize(RayEnd - RayStart); Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z); Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z); @@ -1561,7 +1562,7 @@ namespace OpenSim.Region.Environment.Scenes 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, Quaternion.Identity, 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()); @@ -1570,15 +1571,15 @@ namespace OpenSim.Region.Environment.Scenes // If we hit something if (ei.HitTF) { - LLVector3 scaleComponent = new LLVector3(ei.AAfaceNormal.x, ei.AAfaceNormal.y, ei.AAfaceNormal.z); + Vector3 scaleComponent = new Vector3(ei.AAfaceNormal.X, ei.AAfaceNormal.Y, ei.AAfaceNormal.Z); if (scaleComponent.X != 0) ScaleOffset = scale.X; if (scaleComponent.Y != 0) ScaleOffset = scale.Y; if (scaleComponent.Z != 0) ScaleOffset = scale.Z; ScaleOffset = Math.Abs(ScaleOffset); - LLVector3 intersectionpoint = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z); - LLVector3 normal = new LLVector3(ei.normal.x, ei.normal.y, ei.normal.z); + Vector3 intersectionpoint = new Vector3(ei.ipoint.X, ei.ipoint.Y, ei.ipoint.Z); + Vector3 normal = new Vector3(ei.normal.X, ei.normal.Y, ei.normal.Z); // Set the position to the intersection point - LLVector3 offset = (normal * (ScaleOffset / 2f)); + Vector3 offset = (normal * (ScaleOffset / 2f)); pos = (intersectionpoint + offset); // Un-offset the prim (it gets offset later by the consumer method) @@ -1598,7 +1599,7 @@ namespace OpenSim.Region.Environment.Scenes if (ei.HitTF) { - pos = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z); + pos = new Vector3(ei.ipoint.X, ei.ipoint.Y, ei.ipoint.Z); } return pos; @@ -1612,11 +1613,11 @@ namespace OpenSim.Region.Environment.Scenes } } - public virtual void AddNewPrim(LLUUID ownerID, LLVector3 RayEnd, LLQuaternion rot, PrimitiveBaseShape shape, - byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID, + public virtual void AddNewPrim(UUID ownerID, Vector3 RayEnd, Quaternion rot, PrimitiveBaseShape shape, + byte bypassRaycast, Vector3 RayStart, UUID RayTargetID, byte RayEndIsIntersection) { - LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f, 0.5f, 0.5f), false); + Vector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new Vector3(0.5f, 0.5f, 0.5f), false); if (ExternalChecks.ExternalChecksCanRezObject(1, ownerID, pos)) { @@ -1627,7 +1628,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public virtual SceneObjectGroup AddNewPrim(LLUUID ownerID, LLVector3 pos, LLQuaternion rot, PrimitiveBaseShape shape) + public virtual SceneObjectGroup AddNewPrim(UUID ownerID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape) { //m_log.DebugFormat( // "[SCENE]: Scene.AddNewPrim() called for agent {0} in {1}", ownerID, RegionInfo.RegionName); @@ -1640,8 +1641,8 @@ namespace OpenSim.Region.Environment.Scenes //rootPart.TrimPermissions(); 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; + rootPart.AddFlag(PrimFlags.Phantom); + //rootPart.ObjectFlags += (uint)PrimFlags.Phantom; if (rootPart.Shape.PCode != (byte)PCode.Grass) AdaptTree(ref shape); } @@ -1658,20 +1659,20 @@ namespace OpenSim.Region.Environment.Scenes { case Tree.Cypress1: case Tree.Cypress2: - tree.Scale = new LLVector3(4, 4, 10); + tree.Scale = new Vector3(4, 4, 10); break; // case... other tree types - // tree.Scale = new LLVector3(?, ?, ?); + // tree.Scale = new Vector3(?, ?, ?); // break; default: - tree.Scale = new LLVector3(4, 4, 4); + tree.Scale = new Vector3(4, 4, 4); break; } } - public SceneObjectGroup AddTree(LLUUID uuid, LLVector3 scale, LLQuaternion rotation, LLVector3 position, + public SceneObjectGroup AddTree(UUID uuid, Vector3 scale, Quaternion rotation, Vector3 position, Tree treeType, bool newTree) { PrimitiveBaseShape treeShape = new PrimitiveBaseShape(); @@ -1771,7 +1772,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// true if the object was in the scene, false if it was not - public bool UnlinkSceneObject(LLUUID uuid, bool resultOfLinkingObjects) + public bool UnlinkSceneObject(UUID uuid, bool resultOfLinkingObjects) { if (m_innerScene.DeleteSceneObject(uuid,resultOfLinkingObjects)) { @@ -1783,7 +1784,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } - public void LoadPrimsFromXml(string fileName, bool newIdsFlag, LLVector3 loadOffset) + public void LoadPrimsFromXml(string fileName, bool newIdsFlag, Vector3 loadOffset) { m_log.InfoFormat("[SCENE]: Loading prims in xml format to region {0} from {1}", RegionInfo.RegionName); @@ -1818,7 +1819,7 @@ namespace OpenSim.Region.Environment.Scenes m_serialiser.SavePrimsToXml2(this, fileName); } - public void SavePrimsToXml2(TextWriter stream, LLVector3 min, LLVector3 max) + public void SavePrimsToXml2(TextWriter stream, Vector3 min, Vector3 max) { m_log.InfoFormat("[SCENE]: Saving prims in xml2 format for region {0} to stream", RegionInfo.RegionName); @@ -1876,7 +1877,7 @@ namespace OpenSim.Region.Environment.Scenes /// current position of Group /// Scene Object Group that we're crossing - public void CrossPrimGroupIntoNewRegion(LLVector3 position, SceneObjectGroup grp) + public void CrossPrimGroupIntoNewRegion(Vector3 position, SceneObjectGroup grp) { if (grp == null) return; @@ -1897,12 +1898,12 @@ namespace OpenSim.Region.Environment.Scenes return; } - m_log.Warn("Prim crossing: " + grp.UUID.ToString()); + m_log.Warn("Prim crossing: " + grp.ToString()); int thisx = (int)RegionInfo.RegionLocX; int thisy = (int)RegionInfo.RegionLocY; ulong newRegionHandle = 0; - LLVector3 pos = position; + Vector3 pos = position; if (position.X > Constants.RegionSize + 0.1f) { @@ -1973,7 +1974,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public bool IncomingInterRegionPrimGroup(ulong regionHandle, LLUUID primID, string objXMLData, int XMLMethod) + public bool IncomingInterRegionPrimGroup(ulong regionHandle, UUID primID, string objXMLData, int XMLMethod) { m_log.Warn("{[INTERREGION]: A new prim arrived from a neighbor"); if (XMLMethod == 0) @@ -2160,7 +2161,7 @@ namespace OpenSim.Region.Environment.Scenes } // Gesture - public virtual void ActivateGesture(IClientAPI client, LLUUID assetId, LLUUID gestureId) + public virtual void ActivateGesture(IClientAPI client, UUID assetId, UUID gestureId) { // UserProfileCacheService User = CommsManager.SecureInventoryService.UpdateItem(gestureid, agentID); CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(client.AgentId); @@ -2180,7 +2181,7 @@ namespace OpenSim.Region.Environment.Scenes m_log.DebugFormat("Asset : {0} gesture :{1}", gestureId.ToString(), assetId.ToString()); } - public virtual void DeactivateGesture(IClientAPI client, LLUUID gestureId) + public virtual void DeactivateGesture(IClientAPI client, UUID gestureId) { // UserProfileCacheService User = CommsManager.SecureInventoryService.UpdateItem(gestureid, agentID); CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(client.AgentId); @@ -2200,14 +2201,14 @@ namespace OpenSim.Region.Environment.Scenes m_log.DebugFormat("gesture : {0} ", gestureId.ToString()); } - public virtual void TeleportClientHome(LLUUID agentId, IClientAPI client) + public virtual void TeleportClientHome(UUID agentId, IClientAPI client) { UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(agentId); if (UserProfile != null) { - LLUUID homeRegionID = UserProfile.HomeRegionID; + UUID homeRegionID = UserProfile.HomeRegionID; ulong homeRegionHandle = UserProfile.HomeRegion; - if (homeRegionID == LLUUID.Zero) + if (homeRegionID == UUID.Zero) { RegionInfo info = CommsManager.GridService.RequestNeighbourInfo(UserProfile.HomeRegion); if (info == null) @@ -2234,11 +2235,11 @@ namespace OpenSim.Region.Environment.Scenes } } - public void doObjectDuplicateOnRay(uint localID, uint dupeFlags, LLUUID AgentID, LLUUID GroupID, - LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart, + public void doObjectDuplicateOnRay(uint localID, uint dupeFlags, UUID AgentID, UUID GroupID, + UUID RayTargetObj, Vector3 RayEnd, Vector3 RayStart, bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates) { - LLVector3 pos; + Vector3 pos; const bool frontFacesOnly = true; //m_log.Info("HITTARGET: " + RayTargetObj.ToString() + ", COPYTARGET: " + localID.ToString()); SceneObjectPart target = GetSceneObjectPart(localID); @@ -2246,7 +2247,7 @@ namespace OpenSim.Region.Environment.Scenes if (target != null && target2 != null) { - LLVector3 direction = LLVector3.Norm(RayEnd - RayStart); + Vector3 direction = Vector3.Normalize(RayEnd - RayStart); Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z); Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z); @@ -2261,7 +2262,7 @@ namespace OpenSim.Region.Environment.Scenes Ray NewRay = new Ray(AXOrigin, AXdirection); // Ray Trace against target here - EntityIntersection ei = target2.TestIntersectionOBB(NewRay, new Quaternion(1, 0, 0, 0), frontFacesOnly, CopyCenters); + EntityIntersection ei = target2.TestIntersectionOBB(NewRay, Quaternion.Identity, frontFacesOnly, CopyCenters); // 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()); @@ -2270,26 +2271,26 @@ namespace OpenSim.Region.Environment.Scenes // If we hit something if (ei.HitTF) { - LLVector3 scale = target.Scale; - LLVector3 scaleComponent = new LLVector3(ei.AAfaceNormal.x, ei.AAfaceNormal.y, ei.AAfaceNormal.z); + Vector3 scale = target.Scale; + Vector3 scaleComponent = new Vector3(ei.AAfaceNormal.X, ei.AAfaceNormal.Y, ei.AAfaceNormal.Z); if (scaleComponent.X != 0) ScaleOffset = scale.X; if (scaleComponent.Y != 0) ScaleOffset = scale.Y; if (scaleComponent.Z != 0) ScaleOffset = scale.Z; ScaleOffset = Math.Abs(ScaleOffset); - LLVector3 intersectionpoint = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z); - LLVector3 normal = new LLVector3(ei.normal.x, ei.normal.y, ei.normal.z); - LLVector3 offset = normal * (ScaleOffset / 2f); + Vector3 intersectionpoint = new Vector3(ei.ipoint.X, ei.ipoint.Y, ei.ipoint.Z); + Vector3 normal = new Vector3(ei.normal.X, ei.normal.Y, ei.normal.Z); + Vector3 offset = normal * (ScaleOffset / 2f); pos = intersectionpoint + offset; // stick in offset format from the original prim pos = pos - target.ParentGroup.AbsolutePosition; if (CopyRotates) { - LLQuaternion worldRot = target2.GetWorldRotation(); + Quaternion worldRot = target2.GetWorldRotation(); - // SceneObjectGroup obj = m_innerScene.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, new Quaternion(worldRot.W,worldRot.X,worldRot.Y,worldRot.Z)); - m_innerScene.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, new Quaternion(worldRot.W,worldRot.X,worldRot.Y,worldRot.Z)); - //obj.Rotation = new Quaternion(worldRot.W, worldRot.X, worldRot.Y, worldRot.Z); + // SceneObjectGroup obj = m_innerScene.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, worldRot); + m_innerScene.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, worldRot); + //obj.Rotation = worldRot; //obj.UpdateGroupRotation(worldRot); } else @@ -2305,7 +2306,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags) + public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags) { UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(remoteClient.AgentId); if (UserProfile != null) @@ -2369,7 +2370,7 @@ namespace OpenSim.Region.Environment.Scenes /// Remove the given client from the scene. /// /// - public override void RemoveClient(LLUUID agentID) + public override void RemoveClient(UUID agentID) { bool childagentYN = false; ScenePresence avatar = GetScenePresence(agentID); @@ -2420,7 +2421,7 @@ namespace OpenSim.Region.Environment.Scenes { try { - client.SendKillObject(avatar.RegionHandle, avatar.LocalId); + client.SendKiPrimitive(avatar.RegionHandle, avatar.LocalId); } catch (NullReferenceException) { @@ -2462,7 +2463,7 @@ namespace OpenSim.Region.Environment.Scenes //m_log.InfoFormat("[SCENE] Memory post GC {0}", System.GC.GetTotalMemory(true)); } - public void HandleRemoveKnownRegionsFromAvatar(LLUUID avatarID, List regionslst) + public void HandleRemoveKnownRegionsFromAvatar(UUID avatarID, List regionslst) { ScenePresence av = GetScenePresence(avatarID); if (av != null) @@ -2493,7 +2494,7 @@ namespace OpenSim.Region.Environment.Scenes #region Entities - public void SendKillObject(uint localID) + public void SendKiPrimitive(uint localID) { SceneObjectPart part = GetSceneObjectPart(localID); if (part != null) // It is a prim @@ -2504,7 +2505,7 @@ namespace OpenSim.Region.Environment.Scenes return; } } - Broadcast(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, localID); }); + Broadcast(delegate(IClientAPI client) { client.SendKiPrimitive(m_regionHandle, localID); }); } #endregion @@ -2524,7 +2525,7 @@ namespace OpenSim.Region.Environment.Scenes m_sceneGridService.OnExpectPrim += IncomingInterRegionPrimGroup; m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar; m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid; - m_sceneGridService.KillObject += SendKillObject; + m_sceneGridService.KiPrimitive += SendKiPrimitive; m_sceneGridService.OnGetLandData += GetLandData; } @@ -2533,7 +2534,7 @@ namespace OpenSim.Region.Environment.Scenes /// public void UnRegisterReginWithComms() { - m_sceneGridService.KillObject -= SendKillObject; + m_sceneGridService.KiPrimitive -= SendKiPrimitive; m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid; m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar; m_sceneGridService.OnExpectPrim -= IncomingInterRegionPrimGroup; @@ -2574,7 +2575,7 @@ 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 == (byte)1 && land.landData.UserLocation != Vector3.Zero) { agent.startpos = land.landData.UserLocation; } @@ -2608,7 +2609,7 @@ namespace OpenSim.Region.Environment.Scenes return m_authenticateHandler.TryChangeCiruitCode(oldcc, newcc); } - protected void HandleLogOffUserFromGrid(ulong regionHandle, LLUUID AvatarID, LLUUID RegionSecret, string message) + protected void HandleLogOffUserFromGrid(ulong regionHandle, UUID AvatarID, UUID RegionSecret, string message) { if (RegionInfo.RegionHandle == regionHandle) { @@ -2645,7 +2646,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void AddCapsHandler(LLUUID agentId) + public void AddCapsHandler(UUID agentId) { if (RegionInfo.EstateSettings.IsBanned(agentId)) return; @@ -2670,7 +2671,7 @@ namespace OpenSim.Region.Environment.Scenes m_capsHandlers[agentId] = cap; } - public Caps GetCapsHandlerForUser(LLUUID agentId) + public Caps GetCapsHandlerForUser(UUID agentId) { lock (m_capsHandlers) { @@ -2686,7 +2687,7 @@ namespace OpenSim.Region.Environment.Scenes /// Remove the caps handler for a given agent. /// /// - public void RemoveCapsHandler(LLUUID agentId) + public void RemoveCapsHandler(UUID agentId) { lock (m_capsHandlers) { @@ -2717,7 +2718,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public virtual void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) + public virtual void AgentCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying) { if (regionHandle == m_regInfo.RegionHandle) { @@ -2742,7 +2743,7 @@ namespace OpenSim.Region.Environment.Scenes public virtual bool IncomingChildAgentDataUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) { - ScenePresence childAgentUpdate = GetScenePresence(new LLUUID(cAgentData.AgentID)); + ScenePresence childAgentUpdate = GetScenePresence(new UUID(cAgentData.AgentID)); if (childAgentUpdate != null) { // I can't imagine *yet* why we would get an update if the agent is a root agent.. @@ -2768,7 +2769,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public bool CloseConnection(ulong regionHandle, LLUUID agentID) + public bool CloseConnection(ulong regionHandle, UUID agentID) { if (regionHandle == m_regionHandle) { @@ -2850,8 +2851,8 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void RequestTeleportLocation(IClientAPI remoteClient, string regionName, LLVector3 position, - LLVector3 lookat, uint flags) + public void RequestTeleportLocation(IClientAPI remoteClient, string regionName, Vector3 position, + Vector3 lookat, uint flags) { RegionInfo regionInfo = m_sceneGridService.RequestClosestRegion(regionName); if (regionInfo == null) @@ -2871,8 +2872,8 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void RequestTeleportLocation(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, - LLVector3 lookAt, uint flags) + public void RequestTeleportLocation(IClientAPI remoteClient, ulong regionHandle, Vector3 position, + Vector3 lookAt, uint flags) { lock (m_scenePresences) { @@ -2890,7 +2891,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void RequestTeleportLandmark(IClientAPI remoteClient, LLUUID regionID, LLVector3 position) + public void RequestTeleportLandmark(IClientAPI remoteClient, UUID regionID, Vector3 position) { RegionInfo info = CommsManager.GridService.RequestNeighbourInfo(regionID); @@ -2906,7 +2907,7 @@ namespace OpenSim.Region.Environment.Scenes if (m_scenePresences.ContainsKey(remoteClient.AgentId)) { m_sceneGridService.RequestTeleportToLocation(m_scenePresences[remoteClient.AgentId], info.RegionHandle, - position, LLVector3.Zero, 0); + position, Vector3.Zero, 0); } } } @@ -2919,7 +2920,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public bool InformNeighbourOfCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) + public bool InformNeighbourOfCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying) { return m_sceneGridService.CrossToNeighbouringRegion(regionHandle, agentID, position, isFlying); } @@ -3006,7 +3007,7 @@ namespace OpenSim.Region.Environment.Scenes objectCapacity = objects; } - public List GetFriendList(LLUUID avatarID) + public List GetFriendList(UUID avatarID) { return CommsManager.GetUserFriendList(avatarID); } @@ -3035,7 +3036,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void SendUrlToUser(LLUUID avatarID, string objectName, LLUUID objectID, LLUUID ownerID, bool groupOwned, + public void SendUrlToUser(UUID avatarID, string objectName, UUID objectID, UUID ownerID, bool groupOwned, string message, string url) { lock (m_scenePresences) @@ -3048,7 +3049,7 @@ 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(UUID avatarID, string objectName, UUID objectID, UUID ownerID, string message, UUID TextureID, int ch, string[] buttonlabels) { lock (m_scenePresences) { @@ -3067,13 +3068,13 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public LLUUID MakeHttpRequest(string url, string type, string body) + public UUID MakeHttpRequest(string url, string type, string body) { if (m_httpRequestModule != null) { return m_httpRequestModule.MakeHttpRequest(url, type, body); } - return LLUUID.Zero; + return UUID.Zero; } /// @@ -3091,25 +3092,25 @@ namespace OpenSim.Region.Environment.Scenes m_eventManager.TriggerGridInstantMessage(message, options); } - public virtual void StoreAddFriendship(LLUUID ownerID, LLUUID friendID, uint perms) + public virtual void StoreAddFriendship(UUID ownerID, UUID friendID, uint perms) { // TODO: m_sceneGridService.DoStuff; m_sceneGridService.AddNewUserFriend(ownerID, friendID, perms); } - public virtual void StoreUpdateFriendship(LLUUID ownerID, LLUUID friendID, uint perms) + public virtual void StoreUpdateFriendship(UUID ownerID, UUID friendID, uint perms) { // TODO: m_sceneGridService.DoStuff; m_sceneGridService.UpdateUserFriendPerms(ownerID, friendID, perms); } - public virtual void StoreRemoveFriendship(LLUUID ownerID, LLUUID ExfriendID) + public virtual void StoreRemoveFriendship(UUID ownerID, UUID ExfriendID) { // TODO: m_sceneGridService.DoStuff; m_sceneGridService.RemoveUserFriend(ownerID, ExfriendID); } - public virtual List StoreGetFriendsForUser(LLUUID ownerID) + public virtual List StoreGetFriendsForUser(UUID ownerID) { // TODO: m_sceneGridService.DoStuff; return m_sceneGridService.GetUserFriendList(ownerID); @@ -3144,7 +3145,7 @@ namespace OpenSim.Region.Environment.Scenes #region Alert Methods - private void SendPermissionAlert(LLUUID user, string reason) + private void SendPermissionAlert(UUID user, string reason) { SendAlertToUser(user, reason, false); } @@ -3170,7 +3171,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void SendAlertToUser(LLUUID agentID, string message, bool modal) + public void SendAlertToUser(UUID agentID, string message, bool modal) { lock (m_scenePresences) { @@ -3188,7 +3189,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void handleRequestGodlikePowers(LLUUID agentID, LLUUID sessionID, LLUUID token, bool godLike, + public void handleRequestGodlikePowers(UUID agentID, UUID sessionID, UUID token, bool godLike, IClientAPI controllingClient) { lock (m_scenePresences) @@ -3200,7 +3201,7 @@ namespace OpenSim.Region.Environment.Scenes if (ExternalChecks.ExternalChecksCanBeGodLike(agentID)) { // Next we check for spoofing..... - LLUUID testSessionID = m_scenePresences[agentID].ControllingClient.SessionId; + UUID testSessionID = m_scenePresences[agentID].ControllingClient.SessionId; if (sessionID == testSessionID) { if (sessionID == controllingClient.SessionId) @@ -3226,7 +3227,7 @@ namespace OpenSim.Region.Environment.Scenes /// The session of the person sending the message /// The name of the person doing the sending /// The Message being sent to the user - public void SendRegionMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message) + public void SendRegionMessageFromEstateTools(UUID FromAvatarID, UUID fromSessionID, String FromAvatarName, String Message) { List presenceList = GetScenePresences(); @@ -3245,7 +3246,7 @@ namespace OpenSim.Region.Environment.Scenes /// The session of the person sending the message /// The name of the person doing the sending /// The Message being sent to the user - public void SendEstateMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message) + public void SendEstateMessageFromEstateTools(UUID FromAvatarID, UUID fromSessionID, String FromAvatarName, String Message) { ClientManager.ForEachClient(delegate(IClientAPI controller) @@ -3266,10 +3267,10 @@ namespace OpenSim.Region.Environment.Scenes /// the person that is being kicked /// This isn't used apparently /// The message to send to the user after it's been turned into a field - public void HandleGodlikeKickUser(LLUUID godID, LLUUID sessionID, LLUUID agentID, uint kickflags, byte[] reason) + public void HandleGodlikeKickUser(UUID godID, UUID sessionID, UUID agentID, uint kickflags, byte[] reason) { // For some reason the client sends this seemingly hard coded UUID for kicking everyone. Dun-know. - LLUUID kickUserID = new LLUUID("44e87126e7944ded05b37c42da3d5cdb"); + UUID kickUserID = new UUID("44e87126e7944ded05b37c42da3d5cdb"); lock (m_scenePresences) { if (m_scenePresences.ContainsKey(agentID) || agentID == kickUserID) @@ -3281,7 +3282,7 @@ namespace OpenSim.Region.Environment.Scenes ClientManager.ForEachClient(delegate(IClientAPI controller) { if (controller.AgentId != godID) - controller.Kick(Helpers.FieldToUTF8String(reason)); + controller.Kick(Utils.BytesToString(reason)); } ); @@ -3304,7 +3305,7 @@ namespace OpenSim.Region.Environment.Scenes { m_innerScene.removeUserCount(!m_scenePresences[agentID].IsChildAgent); - m_scenePresences[agentID].ControllingClient.Kick(Helpers.FieldToUTF8String(reason)); + m_scenePresences[agentID].ControllingClient.Kick(Utils.BytesToString(reason)); m_scenePresences[agentID].ControllingClient.Close(true); } } @@ -3317,7 +3318,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void HandleObjectPermissionsUpdate(IClientAPI controller, LLUUID agentID, LLUUID sessionID, byte field, uint localId, uint mask, byte set) + public void HandleObjectPermissionsUpdate(IClientAPI controller, UUID agentID, UUID sessionID, byte field, uint localId, uint mask, byte set) { // Check for spoofing.. since this is permissions we're talking about here! if ((controller.SessionId == sessionID) && (controller.AgentId == agentID)) @@ -3423,7 +3424,7 @@ namespace OpenSim.Region.Environment.Scenes if (part.Name == cmdparams[0]) { part.Resize( - new LLVector3(Convert.ToSingle(cmdparams[1]), Convert.ToSingle(cmdparams[2]), + new Vector3(Convert.ToSingle(cmdparams[1]), Convert.ToSingle(cmdparams[2]), Convert.ToSingle(cmdparams[3]))); Console.WriteLine("Edited scale of Primitive: " + part.Name); @@ -3489,12 +3490,12 @@ namespace OpenSim.Region.Environment.Scenes return Heightmap[x, y]; } - public LLUUID GetLandOwner(float x, float y) + public UUID GetLandOwner(float x, float y) { ILandObject land = LandChannel.GetLandObject(x, y); if (land == null) { - return LLUUID.Zero; + return UUID.Zero; } else { @@ -3570,7 +3571,7 @@ namespace OpenSim.Region.Environment.Scenes m_eventManager.TriggerOnScriptChangedEvent(localID, change); } - public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos) + public void TriggerAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 currentpos) { m_eventManager.TriggerAtTargetEvent(localID, handle, targetpos, currentpos); } @@ -3580,7 +3581,7 @@ namespace OpenSim.Region.Environment.Scenes m_eventManager.TriggerNotAtTargetEvent(localID); } - private bool scriptDanger(SceneObjectPart part,LLVector3 pos) + private bool scriptDanger(SceneObjectPart part,Vector3 pos) { ILandObject parcel = LandChannel.GetLandObject(pos.X, pos.Y); if (part != null) @@ -3636,7 +3637,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public bool scriptDanger(uint localID, LLVector3 pos) + public bool scriptDanger(uint localID, Vector3 pos) { SceneObjectPart part = GetSceneObjectPart(localID); if (part != null) @@ -3678,7 +3679,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public LLUUID ConvertLocalIDToFullID(uint localID) + public UUID ConvertLocalIDToFullID(uint localID) { return m_innerScene.ConvertLocalIDToFullID(localID); } @@ -3737,7 +3738,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public ScenePresence GetScenePresence(LLUUID avatarID) + public ScenePresence GetScenePresence(UUID avatarID) { return m_innerScene.GetScenePresence(avatarID); } @@ -3747,7 +3748,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// AvatarID to lookup /// - public override bool PresenceChildStatus(LLUUID avatarID) + public override bool PresenceChildStatus(UUID avatarID) { ScenePresence cp = GetScenePresence(avatarID); return cp.IsChildAgent; @@ -3811,12 +3812,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public SceneObjectPart GetSceneObjectPart(LLUUID fullID) + public SceneObjectPart GetSceneObjectPart(UUID fullID) { return m_innerScene.GetSceneObjectPart(fullID); } - internal bool TryGetAvatar(LLUUID avatarId, out ScenePresence avatar) + internal bool TryGetAvatar(UUID avatarId, out ScenePresence avatar) { return m_innerScene.TryGetAvatar(avatarId, out avatar); } @@ -3921,7 +3922,7 @@ namespace OpenSim.Region.Environment.Scenes // }); } - public void RegionHandleRequest(IClientAPI client, LLUUID regionID) + public void RegionHandleRequest(IClientAPI client, UUID regionID) { RegionInfo info; if (regionID == RegionInfo.RegionID) @@ -3939,7 +3940,7 @@ namespace OpenSim.Region.Environment.Scenes client.SendLayerData(patchX, patchY, Heightmap.GetFloatsSerialised()); } - public void SetRootAgentScene(LLUUID agentID) + public void SetRootAgentScene(UUID agentID) { IInventoryModule inv = RequestModuleInterface(); if (inv == null) @@ -3948,7 +3949,7 @@ namespace OpenSim.Region.Environment.Scenes inv.SetRootAgentScene(agentID, this); } - public bool NeedSceneCacheClear(LLUUID agentID) + public bool NeedSceneCacheClear(UUID agentID) { IInventoryModule inv = RequestModuleInterface(); if (inv == null) @@ -3957,7 +3958,7 @@ namespace OpenSim.Region.Environment.Scenes return inv.NeedSceneCacheClear(agentID, this); } - public void ObjectSaleInfo(IClientAPI client, LLUUID agentID, LLUUID sessionID, uint localID, byte saleType, int salePrice) + public void ObjectSaleInfo(IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice) { SceneObjectPart part = GetSceneObjectPart(localID); if (part == null || part.ParentGroup == null) @@ -3976,7 +3977,7 @@ namespace OpenSim.Region.Environment.Scenes part.GetProperties(client); } - public void PerformObjectBuy(IClientAPI remoteClient, LLUUID categoryID, + public void PerformObjectBuy(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType) { SceneObjectPart part = GetSceneObjectPart(localID); @@ -4031,13 +4032,13 @@ namespace OpenSim.Region.Environment.Scenes group.GetPartName(localID), group.GetPartDescription(localID), (sbyte)AssetType.Object, - Helpers.StringToField(sceneObjectXml)); + Utils.StringToBytes(sceneObjectXml)); AssetCache.AddAsset(asset); InventoryItemBase item = new InventoryItemBase(); item.Creator = part.CreatorID; - item.ID = LLUUID.Random(); + item.ID = UUID.Random(); item.Owner = remoteClient.AgentId; item.AssetID = asset.FullID; item.Description = asset.Description; @@ -4069,7 +4070,7 @@ namespace OpenSim.Region.Environment.Scenes break; case 3: // Sell contents - List invList = part.GetInventoryList(); + List invList = part.GetInventoryList(); if (invList.Count > 0) MoveTaskInventoryItems(remoteClient.AgentId, part.Name, diff --git a/OpenSim/Region/Environment/Scenes/SceneBase.cs b/OpenSim/Region/Environment/Scenes/SceneBase.cs index c624a418a6..51909adebc 100644 --- a/OpenSim/Region/Environment/Scenes/SceneBase.cs +++ b/OpenSim/Region/Environment/Scenes/SceneBase.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -141,7 +141,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public abstract void RemoveClient(LLUUID agentID); + public abstract void RemoveClient(UUID agentID); public abstract void CloseAllAgents(uint circuitcode); @@ -175,7 +175,7 @@ namespace OpenSim.Region.Environment.Scenes handlerPhysicsCrash(RegionInfo); } - public virtual bool PresenceChildStatus(LLUUID avatarID) + public virtual bool PresenceChildStatus(UUID avatarID) { return false; } @@ -210,8 +210,8 @@ namespace OpenSim.Region.Environment.Scenes /// /// XXX These two methods are very temporary /// - protected Dictionary capsPaths = new Dictionary(); - public string GetCapsPath(LLUUID agentId) + protected Dictionary capsPaths = new Dictionary(); + public string GetCapsPath(UUID agentId) { if (capsPaths.ContainsKey(agentId)) { diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs index f8c58146c0..9ff35c0604 100644 --- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs @@ -30,16 +30,16 @@ using System.Collections.Generic; using System.Net; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications; namespace OpenSim.Region.Environment.Scenes { - public delegate void KillObjectDelegate(uint localID); + public delegate void KiPrimitiveDelegate(uint localID); - public delegate void RemoveKnownRegionsFromAvatarList(LLUUID avatarID, List regionlst); + public delegate void RemoveKnownRegionsFromAvatarList(UUID avatarID, List regionlst); public class SceneCommunicationService //one instance per region { @@ -72,7 +72,7 @@ namespace OpenSim.Region.Environment.Scenes private LogOffUser handlerLogOffUser = null; private GetLandData handlerGetLandData = null; // OnGetLandData - public KillObjectDelegate KillObject; + public KiPrimitiveDelegate KiPrimitive; public string _debugRegionName = String.Empty; public string debugRegionName @@ -158,7 +158,7 @@ namespace OpenSim.Region.Environment.Scenes } } - protected void GridLogOffUser(ulong regionHandle, LLUUID AgentID, LLUUID RegionSecret, string message) + protected void GridLogOffUser(ulong regionHandle, UUID AgentID, UUID RegionSecret, string message) { handlerLogOffUser = OnLogOffUser; if (handlerLogOffUser != null) @@ -188,7 +188,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } - protected void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) + protected void AgentCrossing(ulong regionHandle, UUID agentID, Vector3 position, bool isFlying) { handlerAvatarCrossingIntoRegion = OnAvatarCrossingIntoRegion; if (handlerAvatarCrossingIntoRegion != null) @@ -197,7 +197,7 @@ namespace OpenSim.Region.Environment.Scenes } } - protected bool IncomingPrimCrossing(ulong regionHandle, LLUUID primID, String objXMLData, int XMLMethod) + protected bool IncomingPrimCrossing(ulong regionHandle, UUID primID, String objXMLData, int XMLMethod) { handlerExpectPrim = OnExpectPrim; if (handlerExpectPrim != null) @@ -211,7 +211,7 @@ namespace OpenSim.Region.Environment.Scenes } - protected void PrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical) + protected void PrimCrossing(ulong regionHandle, UUID primID, Vector3 position, bool isPhysical) { handlerPrimCrossingIntoRegion = OnPrimCrossingIntoRegion; if (handlerPrimCrossingIntoRegion != null) @@ -220,7 +220,7 @@ namespace OpenSim.Region.Environment.Scenes } } - protected bool CloseConnection(ulong regionHandle, LLUUID agentID) + protected bool CloseConnection(ulong regionHandle, UUID agentID) { m_log.Info("[INTERREGION]: Incoming Agent Close Request for agent: " + agentID.ToString()); handlerCloseAgentConnection = OnCloseAgentConnection; @@ -315,9 +315,9 @@ namespace OpenSim.Region.Environment.Scenes 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.BaseFolder = UUID.Zero; + agent.InventoryFolder = UUID.Zero; + agent.startpos = new Vector3(128, 128, 70); agent.child = true; InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; @@ -356,9 +356,9 @@ namespace OpenSim.Region.Environment.Scenes 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.BaseFolder = UUID.Zero; + agent.InventoryFolder = UUID.Zero; + agent.startpos = new Vector3(128, 128, 70); agent.child = true; InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; @@ -484,13 +484,13 @@ namespace OpenSim.Region.Environment.Scenes d); } - public delegate void SendCloseChildAgentDelegate(LLUUID agentID, List regionlst); + public delegate void SendCloseChildAgentDelegate(UUID 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) + private void SendCloseChildAgentAsync(UUID agentID, List regionlst) { foreach (ulong regionHandle in regionlst) @@ -525,7 +525,7 @@ namespace OpenSim.Region.Environment.Scenes icon.EndInvoke(iar); } - public void SendCloseChildAgentConnections(LLUUID agentID, List regionslst) + public void SendCloseChildAgentConnections(UUID agentID, List regionslst) { // This assumes that we know what our neighbors are. SendCloseChildAgentDelegate d = SendCloseChildAgentAsync; @@ -550,7 +550,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public virtual RegionInfo RequestNeighbouringRegionInfo(LLUUID regionID) + public virtual RegionInfo RequestNeighbouringRegionInfo(UUID regionID) { //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending Grid Services Request about neighbor " + regionID); return m_commsProvider.GridService.RequestNeighbourInfo(regionID); @@ -578,8 +578,8 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public virtual void RequestTeleportToLocation(ScenePresence avatar, ulong regionHandle, LLVector3 position, - LLVector3 lookAt, uint flags) + public virtual void RequestTeleportToLocation(ScenePresence avatar, ulong regionHandle, Vector3 position, + Vector3 lookAt, uint flags) { bool destRegionUp = false; @@ -588,7 +588,7 @@ namespace OpenSim.Region.Environment.Scenes // Teleport within the same region if (position.X < 0 || position.X > Constants.RegionSize || position.Y < 0 || position.Y > Constants.RegionSize || position.Z < 0) { - LLVector3 emergencyPos = new LLVector3(128, 128, 128); + Vector3 emergencyPos = new Vector3(128, 128, 128); m_log.WarnFormat( "[SCENE COMMUNICATION SERVICE]: RequestTeleportToLocation() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", @@ -614,8 +614,8 @@ namespace OpenSim.Region.Environment.Scenes { avatar.ControllingClient.SendTeleportLocationStart(); AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo(); - agent.BaseFolder = LLUUID.Zero; - agent.InventoryFolder = LLUUID.Zero; + agent.BaseFolder = UUID.Zero; + agent.InventoryFolder = UUID.Zero; agent.startpos = position; agent.child = true; @@ -667,9 +667,9 @@ namespace OpenSim.Region.Environment.Scenes avatar.MakeChildAgent(); Thread.Sleep(5000); avatar.CrossAttachmentsIntoNewRegion(reg.RegionHandle); - if (KillObject != null) + if (KiPrimitive != null) { - KillObject(avatar.LocalId); + KiPrimitive(avatar.LocalId); } uint newRegionX = (uint)(reg.RegionHandle >> 40); uint newRegionY = (((uint)(reg.RegionHandle)) >> 8); @@ -700,12 +700,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public bool CrossToNeighbouringRegion(ulong regionhandle, LLUUID agentID, LLVector3 position, bool isFlying) + public bool CrossToNeighbouringRegion(ulong regionhandle, UUID agentID, Vector3 position, bool isFlying) { return m_commsProvider.InterRegion.ExpectAvatarCrossing(regionhandle, agentID, position, isFlying); } - public bool PrimCrossToNeighboringRegion(ulong regionhandle, LLUUID primID, string objData, int XMLMethod) + public bool PrimCrossToNeighboringRegion(ulong regionhandle, UUID primID, string objData, int XMLMethod) { return m_commsProvider.InterRegion.InformRegionOfPrimCrossing(regionhandle, primID, objData, XMLMethod); } @@ -716,32 +716,32 @@ namespace OpenSim.Region.Environment.Scenes return m_commsProvider.GridService.GetGridSettings(); } - public void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz) + public void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, float posx, float posy, float posz) { m_commsProvider.LogOffUser(userid, regionid, regionhandle, posx, posy, posz); } - public void ClearUserAgent(LLUUID avatarID) + public void ClearUserAgent(UUID avatarID) { m_commsProvider.UserService.ClearUserAgent(avatarID); } - public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) { m_commsProvider.AddNewUserFriend(friendlistowner, friend, perms); } - public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) { m_commsProvider.UpdateUserFriendPerms(friendlistowner, friend, perms); } - public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + public void RemoveUserFriend(UUID friendlistowner, UUID friend) { m_commsProvider.RemoveUserFriend(friendlistowner, friend); } - public List GetUserFriendList(LLUUID friendlistowner) + public List GetUserFriendList(UUID friendlistowner) { return m_commsProvider.GetUserFriendList(friendlistowner); } @@ -751,7 +751,7 @@ namespace OpenSim.Region.Environment.Scenes return m_commsProvider.GridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY); } - public List GenerateAgentPickerRequestResponse(LLUUID queryID, string query) + public List GenerateAgentPickerRequestResponse(UUID queryID, string query) { return m_commsProvider.GenerateAgentPickerRequestResponse(queryID, query); } diff --git a/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs b/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs index a0e0a3741e..a2a4b2d4fc 100644 --- a/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs +++ b/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Text; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -45,7 +45,7 @@ namespace OpenSim.Region.Environment.Scenes #region Object Permission Checks - public delegate uint GenerateClientFlags(LLUUID userID, LLUUID objectIDID); + public delegate uint GenerateClientFlags(UUID userID, UUID objectIDID); private List GenerateClientFlagsCheckFunctions = new List(); public void addGenerateClientFlags(GenerateClientFlags delegateFunc) @@ -60,7 +60,7 @@ namespace OpenSim.Region.Environment.Scenes GenerateClientFlagsCheckFunctions.Remove(delegateFunc); } - public uint ExternalChecksGenerateClientFlags(LLUUID userID, LLUUID objectID) + public uint ExternalChecksGenerateClientFlags(UUID userID, UUID objectID) { SceneObjectPart part=m_scene.GetSceneObjectPart(objectID); @@ -68,14 +68,14 @@ namespace OpenSim.Region.Environment.Scenes return 0; uint perms=part.GetEffectiveObjectFlags() | - (uint)LLObject.ObjectFlags.ObjectModify | - (uint)LLObject.ObjectFlags.ObjectCopy | - (uint)LLObject.ObjectFlags.ObjectMove | - (uint)LLObject.ObjectFlags.ObjectTransfer | - (uint)LLObject.ObjectFlags.ObjectYouOwner | - (uint)LLObject.ObjectFlags.ObjectAnyOwner | - (uint)LLObject.ObjectFlags.ObjectOwnerModify | - (uint)LLObject.ObjectFlags.ObjectYouOfficer; + (uint)PrimFlags.ObjectModify | + (uint)PrimFlags.ObjectCopy | + (uint)PrimFlags.ObjectMove | + (uint)PrimFlags.ObjectTransfer | + (uint)PrimFlags.ObjectYouOwner | + (uint)PrimFlags.ObjectAnyOwner | + (uint)PrimFlags.ObjectOwnerModify | + (uint)PrimFlags.ObjectYouOfficer; foreach (GenerateClientFlags check in GenerateClientFlagsCheckFunctions) { @@ -162,7 +162,7 @@ namespace OpenSim.Region.Environment.Scenes } #region REZ OBJECT - public delegate bool CanRezObject(int objectCount, LLUUID owner, LLVector3 objectPosition, Scene scene); + public delegate bool CanRezObject(int objectCount, UUID owner, Vector3 objectPosition, Scene scene); private List CanRezObjectCheckFunctions = new List(); public void addCheckRezObject(CanRezObject delegateFunc) @@ -177,7 +177,7 @@ namespace OpenSim.Region.Environment.Scenes CanRezObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanRezObject(int objectCount, LLUUID owner, LLVector3 objectPosition) + public bool ExternalChecksCanRezObject(int objectCount, UUID owner, Vector3 objectPosition) { foreach (CanRezObject check in CanRezObjectCheckFunctions) { @@ -192,7 +192,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region DELETE OBJECT - public delegate bool CanDeleteObject(LLUUID objectID, LLUUID deleter, Scene scene); + public delegate bool CanDeleteObject(UUID objectID, UUID deleter, Scene scene); private List CanDeleteObjectCheckFunctions = new List(); public void addCheckDeleteObject(CanDeleteObject delegateFunc) @@ -207,7 +207,7 @@ namespace OpenSim.Region.Environment.Scenes CanDeleteObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanDeleteObject(LLUUID objectID, LLUUID deleter) + public bool ExternalChecksCanDeleteObject(UUID objectID, UUID deleter) { foreach (CanDeleteObject check in CanDeleteObjectCheckFunctions) { @@ -222,7 +222,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region TAKE OBJECT - public delegate bool CanTakeObject(LLUUID objectID, LLUUID stealer, Scene scene); + public delegate bool CanTakeObject(UUID objectID, UUID stealer, Scene scene); private List CanTakeObjectCheckFunctions = new List(); public void addCheckTakeObject(CanTakeObject delegateFunc) @@ -237,7 +237,7 @@ namespace OpenSim.Region.Environment.Scenes CanTakeObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanTakeObject(LLUUID objectID, LLUUID AvatarTakingUUID) + public bool ExternalChecksCanTakeObject(UUID objectID, UUID AvatarTakingUUID) { foreach (CanTakeObject check in CanTakeObjectCheckFunctions) { @@ -252,7 +252,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region TAKE COPY OBJECT - public delegate bool CanTakeCopyObject(LLUUID objectID, LLUUID userID, Scene inScene); + public delegate bool CanTakeCopyObject(UUID objectID, UUID userID, Scene inScene); private List CanTakeCopyObjectCheckFunctions = new List(); public void addCheckTakeCopyObject(CanTakeCopyObject delegateFunc) @@ -267,7 +267,7 @@ namespace OpenSim.Region.Environment.Scenes CanTakeCopyObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanTakeCopyObject(LLUUID objectID, LLUUID userID) + public bool ExternalChecksCanTakeCopyObject(UUID objectID, UUID userID) { foreach (CanTakeCopyObject check in CanTakeCopyObjectCheckFunctions) { @@ -282,7 +282,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region DUPLICATE OBJECT - public delegate bool CanDuplicateObject(int objectCount, LLUUID objectID, LLUUID owner, Scene scene, LLVector3 objectPosition); + public delegate bool CanDuplicateObject(int objectCount, UUID objectID, UUID owner, Scene scene, Vector3 objectPosition); private List CanDuplicateObjectCheckFunctions = new List(); public void addCheckDuplicateObject(CanDuplicateObject delegateFunc) @@ -297,7 +297,7 @@ namespace OpenSim.Region.Environment.Scenes CanDuplicateObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanDuplicateObject(int objectCount, LLUUID objectID, LLUUID owner, LLVector3 objectPosition) + public bool ExternalChecksCanDuplicateObject(int objectCount, UUID objectID, UUID owner, Vector3 objectPosition) { foreach (CanDuplicateObject check in CanDuplicateObjectCheckFunctions) { @@ -312,7 +312,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region EDIT OBJECT - public delegate bool CanEditObject(LLUUID objectID, LLUUID editorID, Scene scene); + public delegate bool CanEditObject(UUID objectID, UUID editorID, Scene scene); private List CanEditObjectCheckFunctions = new List(); public void addCheckEditObject(CanEditObject delegateFunc) @@ -327,7 +327,7 @@ namespace OpenSim.Region.Environment.Scenes CanEditObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanEditObject(LLUUID objectID, LLUUID editorID) + public bool ExternalChecksCanEditObject(UUID objectID, UUID editorID) { foreach (CanEditObject check in CanEditObjectCheckFunctions) { @@ -342,7 +342,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region MOVE OBJECT - public delegate bool CanMoveObject(LLUUID objectID, LLUUID moverID, Scene scene); + public delegate bool CanMoveObject(UUID objectID, UUID moverID, Scene scene); private List CanMoveObjectCheckFunctions = new List(); public void addCheckMoveObject(CanMoveObject delegateFunc) @@ -357,7 +357,7 @@ namespace OpenSim.Region.Environment.Scenes CanMoveObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanMoveObject(LLUUID objectID, LLUUID moverID) + public bool ExternalChecksCanMoveObject(UUID objectID, UUID moverID) { foreach (CanMoveObject check in CanMoveObjectCheckFunctions) { @@ -372,7 +372,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region OBJECT ENTRY - public delegate bool CanObjectEntry(LLUUID objectID, LLVector3 newPoint, Scene scene); + public delegate bool CanObjectEntry(UUID objectID, Vector3 newPoint, Scene scene); private List CanObjectEntryCheckFunctions = new List(); public void addCheckObjectEntry(CanObjectEntry delegateFunc) @@ -387,7 +387,7 @@ namespace OpenSim.Region.Environment.Scenes CanObjectEntryCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanObjectEntry(LLUUID objectID, LLVector3 newPoint) + public bool ExternalChecksCanObjectEntry(UUID objectID, Vector3 newPoint) { foreach (CanObjectEntry check in CanObjectEntryCheckFunctions) { @@ -402,7 +402,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region RETURN OBJECT - public delegate bool CanReturnObject(LLUUID objectID, LLUUID returnerID, Scene scene); + public delegate bool CanReturnObject(UUID objectID, UUID returnerID, Scene scene); private List CanReturnObjectCheckFunctions = new List(); public void addCheckReturnObject(CanReturnObject delegateFunc) @@ -417,7 +417,7 @@ namespace OpenSim.Region.Environment.Scenes CanReturnObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanReturnObject(LLUUID objectID, LLUUID returnerID) + public bool ExternalChecksCanReturnObject(UUID objectID, UUID returnerID) { foreach (CanReturnObject check in CanReturnObjectCheckFunctions) { @@ -432,7 +432,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region INSTANT MESSAGE - public delegate bool CanInstantMessage(LLUUID user, LLUUID target, Scene startScene); + public delegate bool CanInstantMessage(UUID user, UUID target, Scene startScene); private List CanInstantMessageCheckFunctions = new List(); public void addCheckInstantMessage(CanInstantMessage delegateFunc) @@ -447,7 +447,7 @@ namespace OpenSim.Region.Environment.Scenes CanInstantMessageCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanInstantMessage(LLUUID user, LLUUID target) + public bool ExternalChecksCanInstantMessage(UUID user, UUID target) { foreach (CanInstantMessage check in CanInstantMessageCheckFunctions) { @@ -462,7 +462,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region INVENTORY TRANSFER - public delegate bool CanInventoryTransfer(LLUUID user, LLUUID target, Scene startScene); + public delegate bool CanInventoryTransfer(UUID user, UUID target, Scene startScene); private List CanInventoryTransferCheckFunctions = new List(); public void addCheckInventoryTransfer(CanInventoryTransfer delegateFunc) @@ -477,7 +477,7 @@ namespace OpenSim.Region.Environment.Scenes CanInventoryTransferCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanInventoryTransfer(LLUUID user, LLUUID target) + public bool ExternalChecksCanInventoryTransfer(UUID user, UUID target) { foreach (CanInventoryTransfer check in CanInventoryTransferCheckFunctions) { @@ -492,7 +492,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region VIEW SCRIPT - public delegate bool CanViewScript(LLUUID script, LLUUID objectID, LLUUID user, Scene scene); + public delegate bool CanViewScript(UUID script, UUID objectID, UUID user, Scene scene); private List CanViewScriptCheckFunctions = new List(); public void addCheckViewScript(CanViewScript delegateFunc) @@ -507,7 +507,7 @@ namespace OpenSim.Region.Environment.Scenes CanViewScriptCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanViewScript(LLUUID script, LLUUID objectID, LLUUID user) + public bool ExternalChecksCanViewScript(UUID script, UUID objectID, UUID user) { foreach (CanViewScript check in CanViewScriptCheckFunctions) { @@ -519,7 +519,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } - public delegate bool CanViewNotecard(LLUUID script, LLUUID objectID, LLUUID user, Scene scene); + public delegate bool CanViewNotecard(UUID script, UUID objectID, UUID user, Scene scene); private List CanViewNotecardCheckFunctions = new List(); public void addCheckViewNotecard(CanViewNotecard delegateFunc) @@ -534,7 +534,7 @@ namespace OpenSim.Region.Environment.Scenes CanViewNotecardCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanViewNotecard(LLUUID script, LLUUID objectID, LLUUID user) + public bool ExternalChecksCanViewNotecard(UUID script, UUID objectID, UUID user) { foreach (CanViewNotecard check in CanViewNotecardCheckFunctions) { @@ -549,7 +549,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region EDIT SCRIPT - public delegate bool CanEditScript(LLUUID script, LLUUID objectID, LLUUID user, Scene scene); + public delegate bool CanEditScript(UUID script, UUID objectID, UUID user, Scene scene); private List CanEditScriptCheckFunctions = new List(); public void addCheckEditScript(CanEditScript delegateFunc) @@ -564,7 +564,7 @@ namespace OpenSim.Region.Environment.Scenes CanEditScriptCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanEditScript(LLUUID script, LLUUID objectID, LLUUID user) + public bool ExternalChecksCanEditScript(UUID script, UUID objectID, UUID user) { foreach (CanEditScript check in CanEditScriptCheckFunctions) { @@ -576,7 +576,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } - public delegate bool CanEditNotecard(LLUUID notecard, LLUUID objectID, LLUUID user, Scene scene); + public delegate bool CanEditNotecard(UUID notecard, UUID objectID, UUID user, Scene scene); private List CanEditNotecardCheckFunctions = new List(); public void addCheckEditNotecard(CanEditNotecard delegateFunc) @@ -591,7 +591,7 @@ namespace OpenSim.Region.Environment.Scenes CanEditNotecardCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanEditNotecard(LLUUID script, LLUUID objectID, LLUUID user) + public bool ExternalChecksCanEditNotecard(UUID script, UUID objectID, UUID user) { foreach (CanEditNotecard check in CanEditNotecardCheckFunctions) { @@ -606,7 +606,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region RUN SCRIPT (When Script Placed in Object) - public delegate bool CanRunScript(LLUUID script, LLUUID objectID, LLUUID user, Scene scene); + public delegate bool CanRunScript(UUID script, UUID objectID, UUID user, Scene scene); private List CanRunScriptCheckFunctions = new List(); public void addCheckRunScript(CanRunScript delegateFunc) @@ -621,7 +621,7 @@ namespace OpenSim.Region.Environment.Scenes CanRunScriptCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanRunScript(LLUUID script, LLUUID objectID, LLUUID user) + public bool ExternalChecksCanRunScript(UUID script, UUID objectID, UUID user) { foreach (CanRunScript check in CanRunScriptCheckFunctions) { @@ -636,7 +636,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region START SCRIPT (When Script run box is Checked after placed in object) - public delegate bool CanStartScript(LLUUID script, LLUUID user, Scene scene); + public delegate bool CanStartScript(UUID script, UUID user, Scene scene); private List CanStartScriptCheckFunctions = new List(); public void addCheckStartScript(CanStartScript delegateFunc) @@ -651,7 +651,7 @@ namespace OpenSim.Region.Environment.Scenes CanStartScriptCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanStartScript(LLUUID script, LLUUID user) + public bool ExternalChecksCanStartScript(UUID script, UUID user) { foreach (CanStartScript check in CanStartScriptCheckFunctions) { @@ -666,7 +666,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region STOP SCRIPT (When Script run box is unchecked after placed in object) - public delegate bool CanStopScript(LLUUID script, LLUUID user, Scene scene); + public delegate bool CanStopScript(UUID script, UUID user, Scene scene); private List CanStopScriptCheckFunctions = new List(); public void addCheckStopScript(CanStopScript delegateFunc) @@ -681,7 +681,7 @@ namespace OpenSim.Region.Environment.Scenes CanStopScriptCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanStopScript(LLUUID script, LLUUID user) + public bool ExternalChecksCanStopScript(UUID script, UUID user) { foreach (CanStopScript check in CanStopScriptCheckFunctions) { @@ -696,7 +696,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region RESET SCRIPT - public delegate bool CanResetScript(LLUUID script, LLUUID user, Scene scene); + public delegate bool CanResetScript(UUID script, UUID user, Scene scene); private List CanResetScriptCheckFunctions = new List(); public void addCheckResetScript(CanResetScript delegateFunc) @@ -711,7 +711,7 @@ namespace OpenSim.Region.Environment.Scenes CanResetScriptCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanResetScript(LLUUID script, LLUUID user) + public bool ExternalChecksCanResetScript(UUID script, UUID user) { foreach (CanResetScript check in CanResetScriptCheckFunctions) { @@ -726,7 +726,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region TERRAFORM LAND - public delegate bool CanTerraformLand(LLUUID user, LLVector3 position, Scene requestFromScene); + public delegate bool CanTerraformLand(UUID user, Vector3 position, Scene requestFromScene); private List CanTerraformLandCheckFunctions = new List(); public void addCheckTerraformLand(CanTerraformLand delegateFunc) @@ -741,7 +741,7 @@ namespace OpenSim.Region.Environment.Scenes CanTerraformLandCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanTerraformLand(LLUUID user, LLVector3 pos) + public bool ExternalChecksCanTerraformLand(UUID user, Vector3 pos) { foreach (CanTerraformLand check in CanTerraformLandCheckFunctions) { @@ -756,7 +756,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region RUN CONSOLE COMMAND - public delegate bool CanRunConsoleCommand(LLUUID user, Scene requestFromScene); + public delegate bool CanRunConsoleCommand(UUID user, Scene requestFromScene); private List CanRunConsoleCommandCheckFunctions = new List(); public void addCheckRunConsoleCommand(CanRunConsoleCommand delegateFunc) @@ -771,7 +771,7 @@ namespace OpenSim.Region.Environment.Scenes CanRunConsoleCommandCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanRunConsoleCommand(LLUUID user) + public bool ExternalChecksCanRunConsoleCommand(UUID user) { foreach (CanRunConsoleCommand check in CanRunConsoleCommandCheckFunctions) { @@ -786,7 +786,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region CAN ISSUE ESTATE COMMAND - public delegate bool CanIssueEstateCommand(LLUUID user, Scene requestFromScene, bool ownerCommand); + public delegate bool CanIssueEstateCommand(UUID user, Scene requestFromScene, bool ownerCommand); private List CanIssueEstateCommandCheckFunctions = new List(); public void addCheckIssueEstateCommand(CanIssueEstateCommand delegateFunc) @@ -801,7 +801,7 @@ namespace OpenSim.Region.Environment.Scenes CanIssueEstateCommandCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanIssueEstateCommand(LLUUID user, bool ownerCommand) + public bool ExternalChecksCanIssueEstateCommand(UUID user, bool ownerCommand) { foreach (CanIssueEstateCommand check in CanIssueEstateCommandCheckFunctions) { @@ -815,7 +815,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region CAN BE GODLIKE - public delegate bool CanBeGodLike(LLUUID user, Scene requestFromScene); + public delegate bool CanBeGodLike(UUID user, Scene requestFromScene); private List CanBeGodLikeCheckFunctions = new List(); public void addCheckBeGodLike(CanBeGodLike delegateFunc) @@ -830,7 +830,7 @@ namespace OpenSim.Region.Environment.Scenes CanBeGodLikeCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanBeGodLike(LLUUID user) + public bool ExternalChecksCanBeGodLike(UUID user) { foreach (CanBeGodLike check in CanBeGodLikeCheckFunctions) { @@ -844,7 +844,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region EDIT PARCEL - public delegate bool CanEditParcel(LLUUID user, ILandObject parcel, Scene scene); + public delegate bool CanEditParcel(UUID user, ILandObject parcel, Scene scene); private List CanEditParcelCheckFunctions = new List(); public void addCheckEditParcel(CanEditParcel delegateFunc) @@ -859,7 +859,7 @@ namespace OpenSim.Region.Environment.Scenes CanEditParcelCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanEditParcel(LLUUID user, ILandObject parcel) + public bool ExternalChecksCanEditParcel(UUID user, ILandObject parcel) { foreach (CanEditParcel check in CanEditParcelCheckFunctions) { @@ -873,7 +873,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region SELL PARCEL - public delegate bool CanSellParcel(LLUUID user, ILandObject parcel, Scene scene); + public delegate bool CanSellParcel(UUID user, ILandObject parcel, Scene scene); private List CanSellParcelCheckFunctions = new List(); public void addCheckSellParcel(CanSellParcel delegateFunc) @@ -888,7 +888,7 @@ namespace OpenSim.Region.Environment.Scenes CanSellParcelCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanSellParcel(LLUUID user, ILandObject parcel) + public bool ExternalChecksCanSellParcel(UUID user, ILandObject parcel) { foreach (CanSellParcel check in CanSellParcelCheckFunctions) { @@ -902,7 +902,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region ABANDON PARCEL - public delegate bool CanAbandonParcel(LLUUID user, ILandObject parcel, Scene scene); + public delegate bool CanAbandonParcel(UUID user, ILandObject parcel, Scene scene); private List CanAbandonParcelCheckFunctions = new List(); public void addCheckAbandonParcel(CanAbandonParcel delegateFunc) @@ -917,7 +917,7 @@ namespace OpenSim.Region.Environment.Scenes CanAbandonParcelCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanAbandonParcel(LLUUID user, ILandObject parcel) + public bool ExternalChecksCanAbandonParcel(UUID user, ILandObject parcel) { foreach (CanAbandonParcel check in CanAbandonParcelCheckFunctions) { @@ -930,7 +930,7 @@ namespace OpenSim.Region.Environment.Scenes } #endregion - public delegate bool CanReclaimParcel(LLUUID user, ILandObject parcel, Scene scene); + public delegate bool CanReclaimParcel(UUID user, ILandObject parcel, Scene scene); private List CanReclaimParcelCheckFunctions = new List(); public void addCheckReclaimParcel(CanReclaimParcel delegateFunc) @@ -945,7 +945,7 @@ namespace OpenSim.Region.Environment.Scenes CanReclaimParcelCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanReclaimParcel(LLUUID user, ILandObject parcel) + public bool ExternalChecksCanReclaimParcel(UUID user, ILandObject parcel) { foreach (CanReclaimParcel check in CanReclaimParcelCheckFunctions) { @@ -956,7 +956,7 @@ namespace OpenSim.Region.Environment.Scenes } return true; } - public delegate bool CanBuyLand(LLUUID user, ILandObject parcel, Scene scene); + public delegate bool CanBuyLand(UUID user, ILandObject parcel, Scene scene); private List CanBuyLandCheckFunctions = new List(); public void addCheckCanBuyLand(CanBuyLand delegateFunc) @@ -971,7 +971,7 @@ namespace OpenSim.Region.Environment.Scenes CanBuyLandCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanBuyLand(LLUUID user, ILandObject parcel) + public bool ExternalChecksCanBuyLand(UUID user, ILandObject parcel) { foreach (CanBuyLand check in CanBuyLandCheckFunctions) { @@ -983,7 +983,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } - public delegate bool CanLinkObject(LLUUID user, LLUUID objectID); + public delegate bool CanLinkObject(UUID user, UUID objectID); private List CanLinkObjectCheckFunctions = new List(); public void addCheckCanLinkObject(CanLinkObject delegateFunc) @@ -998,7 +998,7 @@ namespace OpenSim.Region.Environment.Scenes CanLinkObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanLinkObject(LLUUID user, LLUUID objectID) + public bool ExternalChecksCanLinkObject(UUID user, UUID objectID) { foreach (CanLinkObject check in CanLinkObjectCheckFunctions) { @@ -1010,7 +1010,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } - public delegate bool CanDelinkObject(LLUUID user, LLUUID objectID); + public delegate bool CanDelinkObject(UUID user, UUID objectID); private List CanDelinkObjectCheckFunctions = new List(); public void addCheckCanDelinkObject(CanDelinkObject delegateFunc) @@ -1025,7 +1025,7 @@ namespace OpenSim.Region.Environment.Scenes CanDelinkObjectCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanDelinkObject(LLUUID user, LLUUID objectID) + public bool ExternalChecksCanDelinkObject(UUID user, UUID objectID) { foreach (CanDelinkObject check in CanDelinkObjectCheckFunctions) { @@ -1039,7 +1039,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion - public delegate bool CanCreateInventory(uint invType, LLUUID objectID, LLUUID userID); + public delegate bool CanCreateInventory(uint invType, UUID objectID, UUID userID); private List CanCreateInventoryCheckFunctions = new List(); public void addCheckCanCreateInventory(CanCreateInventory delegateFunc) @@ -1054,7 +1054,7 @@ namespace OpenSim.Region.Environment.Scenes CanCreateInventoryCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanCreateInventory(uint invType, LLUUID objectID, LLUUID userID) + public bool ExternalChecksCanCreateInventory(uint invType, UUID objectID, UUID userID) { foreach (CanCreateInventory check in CanCreateInventoryCheckFunctions) { @@ -1066,7 +1066,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } - public delegate bool CanCopyInventory(LLUUID itemID, LLUUID objectID, LLUUID userID); + public delegate bool CanCopyInventory(UUID itemID, UUID objectID, UUID userID); private List CanCopyInventoryCheckFunctions = new List(); public void addCheckCanCopyInventory(CanCopyInventory delegateFunc) @@ -1081,7 +1081,7 @@ namespace OpenSim.Region.Environment.Scenes CanCopyInventoryCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanCopyInventory(LLUUID itemID, LLUUID objectID, LLUUID userID) + public bool ExternalChecksCanCopyInventory(UUID itemID, UUID objectID, UUID userID) { foreach (CanCopyInventory check in CanCopyInventoryCheckFunctions) { @@ -1093,7 +1093,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } - public delegate bool CanDeleteInventory(LLUUID itemID, LLUUID objectID, LLUUID userID); + public delegate bool CanDeleteInventory(UUID itemID, UUID objectID, UUID userID); private List CanDeleteInventoryCheckFunctions = new List(); public void addCheckCanDeleteInventory(CanDeleteInventory delegateFunc) @@ -1108,7 +1108,7 @@ namespace OpenSim.Region.Environment.Scenes CanDeleteInventoryCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanDeleteInventory(LLUUID itemID, LLUUID objectID, LLUUID userID) + public bool ExternalChecksCanDeleteInventory(UUID itemID, UUID objectID, UUID userID) { foreach (CanDeleteInventory check in CanDeleteInventoryCheckFunctions) { @@ -1120,7 +1120,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } - public delegate bool CanTeleport(LLUUID userID); + public delegate bool CanTeleport(UUID userID); private List CanTeleportCheckFunctions = new List(); public void addCheckCanTeleport(CanTeleport delegateFunc) @@ -1135,7 +1135,7 @@ namespace OpenSim.Region.Environment.Scenes CanTeleportCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanTeleport(LLUUID userID) + public bool ExternalChecksCanTeleport(UUID userID) { foreach (CanTeleport check in CanTeleportCheckFunctions) { diff --git a/OpenSim/Region/Environment/Scenes/SceneManager.cs b/OpenSim/Region/Environment/Scenes/SceneManager.cs index 5546618ee8..472f44652d 100644 --- a/OpenSim/Region/Environment/Scenes/SceneManager.cs +++ b/OpenSim/Region/Environment/Scenes/SceneManager.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Net; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -190,7 +190,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void LoadCurrentSceneFromXml(string filename, bool generateNewIDs, LLVector3 loadOffset) + public void LoadCurrentSceneFromXml(string filename, bool generateNewIDs, Vector3 loadOffset) { CurrentOrFirstScene.LoadPrimsFromXml(filename, generateNewIDs, loadOffset); } @@ -320,7 +320,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public bool TrySetCurrentScene(LLUUID regionID) + public bool TrySetCurrentScene(UUID regionID) { Console.WriteLine("Searching for Region: '{0}'", regionID.ToString()); @@ -350,7 +350,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } - public bool TryGetScene(LLUUID regionID, out Scene scene) + public bool TryGetScene(UUID regionID, out Scene scene) { foreach (Scene mscene in m_localScenes) { @@ -481,7 +481,7 @@ namespace OpenSim.Region.Environment.Scenes ForEachCurrentScene(delegate(Scene scene) { scene.HandleEditCommand(cmdparams); }); } - public bool TryGetAvatar(LLUUID avatarId, out ScenePresence avatar) + public bool TryGetAvatar(UUID avatarId, out ScenePresence avatar) { foreach (Scene scene in m_localScenes) { @@ -495,7 +495,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } - public bool TryGetAvatarsScene(LLUUID avatarId, out Scene scene) + public bool TryGetAvatarsScene(UUID avatarId, out Scene scene) { ScenePresence avatar = null; foreach (Scene mScene in m_localScenes) diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs index 032d67399f..c6452f983e 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs @@ -27,7 +27,7 @@ using System; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -133,9 +133,9 @@ namespace OpenSim.Region.Environment.Scenes /// The item UUID that should be used by the new item. /// public bool AddInventoryItem(IClientAPI remoteClient, uint localID, - InventoryItemBase item, LLUUID copyItemID) + InventoryItemBase item, UUID copyItemID) { - LLUUID newItemId = (copyItemID != LLUUID.Zero) ? copyItemID : item.ID; + UUID newItemId = (copyItemID != UUID.Zero) ? copyItemID : item.ID; SceneObjectPart part = GetChildPart(localID); if (part != null) @@ -183,7 +183,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// null if the item does not exist - public TaskInventoryItem GetInventoryItem(uint primID, LLUUID itemID) + public TaskInventoryItem GetInventoryItem(uint primID, UUID itemID) { SceneObjectPart part = GetChildPart(primID); if (part != null) @@ -227,7 +227,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } - public int RemoveInventoryItem(uint localID, LLUUID itemID) + public int RemoveInventoryItem(uint localID, UUID itemID) { SceneObjectPart part = GetChildPart(localID); if (part != null) diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index b04e882f78..d465eaa931 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -31,9 +31,8 @@ using System.Drawing; using System.IO; using System.Xml; using System.Xml.Serialization; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Physics.Manager; @@ -75,7 +74,7 @@ namespace OpenSim.Region.Environment.Scenes struct scriptPosTarget { - public LLVector3 targetPos; + public Vector3 targetPos; public float tolerance; } @@ -97,17 +96,17 @@ namespace OpenSim.Region.Environment.Scenes public float scriptScore = 0f; - private LLVector3 lastPhysGroupPos; - private LLQuaternion lastPhysGroupRot; + private Vector3 lastPhysGroupPos; + private Quaternion lastPhysGroupRot; /// /// The constituent parts of this group /// - protected Dictionary m_parts = new Dictionary(); + protected Dictionary m_parts = new Dictionary(); protected ulong m_regionHandle; protected SceneObjectPart m_rootPart; - // private Dictionary m_scriptEvents = new Dictionary(); + // private Dictionary m_scriptEvents = new Dictionary(); private Dictionary m_targets = new Dictionary(); @@ -142,18 +141,18 @@ namespace OpenSim.Region.Environment.Scenes get { return m_parts.Count; } } - public LLQuaternion GroupRotation + public Quaternion GroupRotation { get { return m_rootPart.RotationOffset; } } - public LLUUID GroupID + public UUID GroupID { get { return m_rootPart.GroupID; } set { m_rootPart.GroupID = value; } } - public Dictionary Children + public Dictionary Children { get { return m_parts; } set { m_parts = value; } @@ -181,7 +180,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public override LLVector3 AbsolutePosition + public override Vector3 AbsolutePosition { get { @@ -195,7 +194,7 @@ namespace OpenSim.Region.Environment.Scenes } set { - LLVector3 val = value; + Vector3 val = value; if ((val.X > 257f || val.X < -1f || val.Y > 257f || val.Y < -1f) && !m_rootPart.IsAttachment) { m_scene.CrossPrimGroupIntoNewRegion(val, this); @@ -234,18 +233,18 @@ namespace OpenSim.Region.Environment.Scenes set { m_rootPart.LocalId = value; } } - public override LLUUID UUID + public override UUID UUID { get { return m_rootPart.UUID; } set { m_rootPart.UUID = value; } } - public LLUUID OwnerID + public UUID OwnerID { get { if (m_rootPart == null) - return LLUUID.Zero; + return UUID.Zero; return m_rootPart.OwnerID; } @@ -299,7 +298,7 @@ namespace OpenSim.Region.Environment.Scenes } // The UUID for the Region this Object is in. - public LLUUID RegionUUID + public UUID RegionUUID { get { @@ -307,7 +306,7 @@ namespace OpenSim.Region.Environment.Scenes { return m_scene.RegionInfo.RegionID; } - return LLUUID.Zero; + return UUID.Zero; } } @@ -455,14 +454,14 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public SceneObjectGroup(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos, - LLQuaternion rot, PrimitiveBaseShape shape) + public SceneObjectGroup(Scene scene, ulong regionHandle, UUID ownerID, uint localID, Vector3 pos, + Quaternion rot, PrimitiveBaseShape shape) { m_regionHandle = regionHandle; m_scene = scene; // this.Pos = pos; - LLVector3 rootOffset = new LLVector3(0, 0, 0); + Vector3 rootOffset = new Vector3(0, 0, 0); SceneObjectPart newPart = new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rot, rootOffset); newPart.LinkNum = 0; @@ -479,13 +478,13 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public SceneObjectGroup(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos, + public SceneObjectGroup(Scene scene, ulong regionHandle, UUID ownerID, uint localID, Vector3 pos, PrimitiveBaseShape shape) - : this(scene, regionHandle, ownerID, localID, pos, LLQuaternion.Identity, shape) + : this(scene, regionHandle, ownerID, localID, pos, Quaternion.Identity, shape) { } - public void SetFromAssetID(LLUUID AssetId) + public void SetFromAssetID(UUID AssetId) { lock (m_parts) { @@ -496,13 +495,13 @@ namespace OpenSim.Region.Environment.Scenes } } - public LLUUID GetFromAssetID() + public UUID GetFromAssetID() { if (m_rootPart != null) { return m_rootPart.FromAssetID; } - return LLUUID.Zero; + return UUID.Zero; } /// @@ -519,18 +518,18 @@ namespace OpenSim.Region.Environment.Scenes } } - public LLVector3 GroupScale() + public Vector3 GroupScale() { - 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); + Vector3 minScale = new Vector3(Constants.RegionSize,Constants.RegionSize,Constants.RegionSize); + Vector3 maxScale = new Vector3(0f,0f,0f); + Vector3 finalScale = new Vector3(0.5f, 0.5f, 0.5f); lock (m_parts) { foreach (SceneObjectPart part in m_parts.Values) { - LLVector3 partscale = part.Scale; - LLVector3 partoffset = part.OffsetPosition; + Vector3 partscale = part.Scale; + Vector3 partoffset = part.OffsetPosition; minScale.X = (partscale.X + partoffset.X < minScale.X) ? partscale.X + partoffset.X : minScale.X; minScale.Y = (partscale.Y + partoffset.Y < minScale.Y) ? partscale.X + partoffset.Y : minScale.Y; @@ -563,8 +562,7 @@ namespace OpenSim.Region.Environment.Scenes // Temporary commented to stop compiler warning //Vector3 partPosition = // new Vector3(part.AbsolutePosition.X, part.AbsolutePosition.Y, part.AbsolutePosition.Z); - Quaternion parentrotation = - new Quaternion(GroupRotation.W, GroupRotation.X, GroupRotation.Y, GroupRotation.Z); + Quaternion parentrotation = GroupRotation; // Telling the prim to raytrace. //EntityIntersection inter = part.TestIntersection(hRay, parentrotation); @@ -684,7 +682,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void AttachToAgent(LLUUID agentID, uint attachmentpoint, LLVector3 AttachOffset) + public void AttachToAgent(UUID agentID, uint attachmentpoint, Vector3 AttachOffset) { ScenePresence avatar = m_scene.GetScenePresence(agentID); if (avatar != null) @@ -737,14 +735,14 @@ namespace OpenSim.Region.Environment.Scenes public void DetachToGround() { ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.AttachedAvatar); - LLVector3 detachedpos = new LLVector3(127f,127f,127f); + Vector3 detachedpos = new Vector3(127f,127f,127f); if (avatar != null) { detachedpos = avatar.AbsolutePosition; avatar.RemoveAttachment(this); } AbsolutePosition = detachedpos; - m_rootPart.AttachedAvatar = LLUUID.Zero; + m_rootPart.AttachedAvatar = UUID.Zero; m_rootPart.SetParentLocalId(0); m_rootPart.SetAttachmentPoint((byte)0); m_rootPart.IsAttachment = false; @@ -758,14 +756,14 @@ namespace OpenSim.Region.Environment.Scenes public void DetachToInventoryPrep() { ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.AttachedAvatar); - //LLVector3 detachedpos = new LLVector3(127f, 127f, 127f); + //Vector3 detachedpos = new Vector3(127f, 127f, 127f); if (avatar != null) { //detachedpos = avatar.AbsolutePosition; avatar.RemoveAttachment(this); } - m_rootPart.AttachedAvatar = LLUUID.Zero; + m_rootPart.AttachedAvatar = UUID.Zero; m_rootPart.SetParentLocalId(0); //m_rootPart.SetAttachmentPoint((byte)0); m_rootPart.IsAttachment = false; @@ -861,7 +859,7 @@ namespace OpenSim.Region.Environment.Scenes { foreach (SceneObjectPart part in m_parts.Values) { - part.UUID = LLUUID.Random(); + part.UUID = UUID.Random(); } } @@ -885,7 +883,7 @@ namespace OpenSim.Region.Environment.Scenes //HasGroupChanged = false; } - public LLUUID GetPartsFullID(uint localID) + public UUID GetPartsFullID(uint localID) { SceneObjectPart part = GetChildPart(localID); if (part != null) @@ -895,7 +893,7 @@ namespace OpenSim.Region.Environment.Scenes return null; } - public void ObjectGrabHandler(uint localId, LLVector3 offsetPos, IClientAPI remoteClient) + public void ObjectGrabHandler(uint localId, Vector3 offsetPos, IClientAPI remoteClient) { if (m_rootPart.LocalId == localId) { @@ -909,14 +907,14 @@ namespace OpenSim.Region.Environment.Scenes } } - public virtual void OnGrabPart(SceneObjectPart part, LLVector3 offsetPos, IClientAPI remoteClient) + public virtual void OnGrabPart(SceneObjectPart part, Vector3 offsetPos, IClientAPI remoteClient) { part.StoreUndoState(); part.OnGrab(offsetPos, remoteClient); } - public virtual void OnGrabGroup(LLVector3 offsetPos, IClientAPI remoteClient) + public virtual void OnGrabGroup(Vector3 offsetPos, IClientAPI remoteClient) { m_scene.EventManager.TriggerGroupGrab(UUID, offsetPos, remoteClient.AgentId); } @@ -949,7 +947,7 @@ namespace OpenSim.Region.Environment.Scenes } if (m_rootPart != null && part == m_rootPart) - avatars[i].ControllingClient.SendKillObject(m_regionHandle, part.LocalId); + avatars[i].ControllingClient.SendKiPrimitive(m_regionHandle, part.LocalId); } } @@ -975,7 +973,7 @@ namespace OpenSim.Region.Environment.Scenes } if (m_rootPart != null && part == m_rootPart) - avatars[i].ControllingClient.SendKillObject(m_regionHandle, part.LocalId); + avatars[i].ControllingClient.SendKiPrimitive(m_regionHandle, part.LocalId); } } } @@ -1047,9 +1045,9 @@ namespace OpenSim.Region.Environment.Scenes public override 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)); + (int) (color.X * 0xff), + (int) (color.Y * 0xff), + (int) (color.Z * 0xff)); Text = text; HasGroupChanged = true; @@ -1085,7 +1083,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void SetOwnerId(LLUUID userId) + public void SetOwnerId(UUID userId) { ForEachPart(delegate(SceneObjectPart part) { part.OwnerID = userId; }); } @@ -1207,14 +1205,14 @@ namespace OpenSim.Region.Environment.Scenes /// Duplicates this object, including operations such as physics set up and attaching to the backup event. /// /// - public SceneObjectGroup Copy(LLUUID cAgentID, LLUUID cGroupID, bool userExposed) + public SceneObjectGroup Copy(UUID cAgentID, UUID cGroupID, bool userExposed) { SceneObjectGroup dupe = (SceneObjectGroup) MemberwiseClone(); - dupe.m_parts = new Dictionary(); + dupe.m_parts = new Dictionary(); dupe.m_parts.Clear(); //dupe.OwnerID = AgentID; //dupe.GroupID = GroupID; - dupe.AbsolutePosition = new LLVector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z); + dupe.AbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z); dupe.m_scene = m_scene; dupe.m_regionHandle = m_regionHandle; @@ -1231,11 +1229,9 @@ namespace OpenSim.Region.Environment.Scenes dupe.RootPart.PhysActor = m_scene.PhysicsScene.AddPrimShape( dupe.RootPart.Name, pbs, - new PhysicsVector(dupe.RootPart.AbsolutePosition.X, dupe.RootPart.AbsolutePosition.Y, - dupe.RootPart.AbsolutePosition.Z), + new PhysicsVector(dupe.RootPart.AbsolutePosition.X, dupe.RootPart.AbsolutePosition.Y, dupe.RootPart.AbsolutePosition.Z), new PhysicsVector(dupe.RootPart.Scale.X, dupe.RootPart.Scale.Y, dupe.RootPart.Scale.Z), - new Quaternion(dupe.RootPart.RotationOffset.W, dupe.RootPart.RotationOffset.X, - dupe.RootPart.RotationOffset.Y, dupe.RootPart.RotationOffset.Z), + dupe.RootPart.RotationOffset, dupe.RootPart.PhysActor.IsPhysical); dupe.RootPart.PhysActor.LocalID = dupe.RootPart.LocalId; @@ -1286,7 +1282,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void CopyRootPart(SceneObjectPart part, LLUUID cAgentID, LLUUID cGroupID, bool userExposed) + public void CopyRootPart(SceneObjectPart part, UUID cAgentID, UUID cGroupID, bool userExposed) { SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID, m_parts.Count, userExposed); newPart.SetParent(this); @@ -1308,9 +1304,9 @@ namespace OpenSim.Region.Environment.Scenes foreach (SceneObjectPart part in m_parts.Values) { if (UsePhysics) - part.AddFlag(LLObject.ObjectFlags.Physics); + part.AddFlag(PrimFlags.Physics); else - part.RemFlag(LLObject.ObjectFlags.Physics); + part.RemFlag(PrimFlags.Physics); part.DoPhysicsPropertyUpdate(UsePhysics, false); IsSelected = false; @@ -1327,7 +1323,7 @@ namespace OpenSim.Region.Environment.Scenes { if (PhantomStatus) { - part.AddFlag(LLObject.ObjectFlags.Phantom); + part.AddFlag(PrimFlags.Phantom); if (part.PhysActor != null) { m_scene.PhysicsScene.RemovePrim(part.PhysActor); @@ -1335,8 +1331,8 @@ namespace OpenSim.Region.Environment.Scenes } else { - part.RemFlag(LLObject.ObjectFlags.Phantom); - if ((part.GetEffectiveObjectFlags() & (int) LLObject.ObjectFlags.Physics) != 0) + part.RemFlag(PrimFlags.Phantom); + if ((part.GetEffectiveObjectFlags() & (int) PrimFlags.Physics) != 0) { part.DoPhysicsPropertyUpdate(true, false); } @@ -1372,7 +1368,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void moveToTarget(LLVector3 target, float tau) + public void moveToTarget(Vector3 target, float tau) { SceneObjectPart rootpart = m_rootPart; if (rootpart != null) @@ -1395,7 +1391,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void SetRootPartOwner(SceneObjectPart part, LLUUID cAgentID, LLUUID cGroupID) + public void SetRootPartOwner(SceneObjectPart part, UUID cAgentID, UUID cGroupID) { part.LastOwnerID = part.OwnerID; part.OwnerID = cAgentID; @@ -1417,7 +1413,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void CopyPart(SceneObjectPart part, LLUUID cAgentID, LLUUID cGroupID, bool userExposed) + public void CopyPart(SceneObjectPart part, UUID cAgentID, UUID cGroupID, bool userExposed) { SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID, m_parts.Count, userExposed); newPart.SetParent(this); @@ -1432,7 +1428,7 @@ namespace OpenSim.Region.Environment.Scenes } /// - /// Reset the LLUUIDs for all the prims that make up this group. + /// Reset the UUIDs for all the prims that make up this group. /// /// This is called by methods which want to add a new group to an existing scene, in order /// to ensure that there are no clashes with groups already present. @@ -1454,7 +1450,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void ServiceObjectPropertiesFamilyRequest(IClientAPI remoteClient, LLUUID AgentID, uint RequestFlags) + public void ServiceObjectPropertiesFamilyRequest(IClientAPI remoteClient, UUID AgentID, uint RequestFlags) { remoteClient.SendObjectPropertiesFamilyData(RequestFlags, RootPart.UUID, RootPart.ObjectOwner, RootPart.GroupID, RootPart.BaseMask, @@ -1463,7 +1459,7 @@ namespace OpenSim.Region.Environment.Scenes RootPart.CreatorID, RootPart.Name, RootPart.Description); } - public void SetPartOwner(SceneObjectPart part, LLUUID cAgentID, LLUUID cGroupID) + public void SetPartOwner(SceneObjectPart part, UUID cAgentID, UUID cGroupID) { part.OwnerID = cAgentID; part.GroupID = cGroupID; @@ -1640,7 +1636,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// null if a child part with the primID was not found - public SceneObjectPart GetChildPart(LLUUID primID) + public SceneObjectPart GetChildPart(UUID primID) { SceneObjectPart childPart = null; if (m_parts.ContainsKey(primID)) @@ -1677,7 +1673,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public bool HasChildPrim(LLUUID primID) + public bool HasChildPrim(UUID primID) { if (m_parts.ContainsKey(primID)) { @@ -1735,27 +1731,20 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart linkPart = objectGroup.m_rootPart; - Vector3 oldGroupPosition = - new Vector3(linkPart.GroupPosition.X, linkPart.GroupPosition.Y, linkPart.GroupPosition.Z); - Quaternion oldRootRotation = - new Quaternion(linkPart.RotationOffset.W, linkPart.RotationOffset.X, linkPart.RotationOffset.Y, - linkPart.RotationOffset.Z); + Vector3 oldGroupPosition = linkPart.GroupPosition; + Quaternion oldRootRotation = linkPart.RotationOffset; linkPart.OffsetPosition = linkPart.GroupPosition - AbsolutePosition; linkPart.GroupPosition = AbsolutePosition; - Vector3 axPos = new Vector3(linkPart.OffsetPosition.X, linkPart.OffsetPosition.Y, linkPart.OffsetPosition.Z); + Vector3 axPos = linkPart.OffsetPosition; - Quaternion parentRot = - new Quaternion(m_rootPart.RotationOffset.W, m_rootPart.RotationOffset.X, m_rootPart.RotationOffset.Y, - m_rootPart.RotationOffset.Z); - axPos = parentRot.Inverse() * axPos; + Quaternion parentRot = m_rootPart.RotationOffset; + axPos *= Quaternion.Inverse(parentRot); - linkPart.OffsetPosition = new LLVector3(axPos.x, axPos.y, axPos.z); - Quaternion oldRot = - new Quaternion(linkPart.RotationOffset.W, linkPart.RotationOffset.X, linkPart.RotationOffset.Y, - linkPart.RotationOffset.Z); - Quaternion newRot = parentRot.Inverse() * oldRot; - linkPart.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); + linkPart.OffsetPosition = axPos; + Quaternion oldRot = linkPart.RotationOffset; + Quaternion newRot = oldRot * Quaternion.Inverse(parentRot); + linkPart.RotationOffset = newRot; linkPart.ParentID = m_rootPart.LocalId; if (m_rootPart.LinkNum == 0) @@ -1769,7 +1758,7 @@ namespace OpenSim.Region.Environment.Scenes linkPart.LinkNum = m_parts.Count; linkPart.SetParent(this); - linkPart.AddFlag(LLObject.ObjectFlags.CreateSelected); + linkPart.AddFlag(PrimFlags.CreateSelected); //if (linkPart.PhysActor != null) //{ @@ -1821,7 +1810,7 @@ namespace OpenSim.Region.Environment.Scenes // "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}", // linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID); - LLQuaternion worldRot = linkPart.GetWorldRotation(); + Quaternion worldRot = linkPart.GetWorldRotation(); // Remove the part from this object lock (m_parts) @@ -1850,23 +1839,14 @@ namespace OpenSim.Region.Environment.Scenes // We need to reset the child part's position // ready for life as a separate object after being a part of another object - Quaternion parentRot - = new Quaternion( - m_rootPart.RotationOffset.W, - m_rootPart.RotationOffset.X, - m_rootPart.RotationOffset.Y, - m_rootPart.RotationOffset.Z); + Quaternion parentRot = m_rootPart.RotationOffset; - Vector3 axPos - = new Vector3( - linkPart.OffsetPosition.X, - linkPart.OffsetPosition.Y, - linkPart.OffsetPosition.Z); + Vector3 axPos = linkPart.OffsetPosition; - axPos = parentRot * axPos; - linkPart.OffsetPosition = new LLVector3(axPos.x, axPos.y, axPos.z); + axPos *= parentRot; + linkPart.OffsetPosition = new Vector3(axPos.X, axPos.Y, axPos.Z); linkPart.GroupPosition = AbsolutePosition + linkPart.OffsetPosition; - linkPart.OffsetPosition = new LLVector3(0, 0, 0); + linkPart.OffsetPosition = new Vector3(0, 0, 0); linkPart.RotationOffset = worldRot; @@ -1909,28 +1889,23 @@ namespace OpenSim.Region.Environment.Scenes part.LinkNum = m_parts.Count; - Vector3 axiomOldPos = new Vector3(part.OffsetPosition.X, part.OffsetPosition.Y, part.OffsetPosition.Z); - axiomOldPos = oldGroupRotation * axiomOldPos; - axiomOldPos += oldGroupPosition; - LLVector3 oldAbsolutePosition = new LLVector3(axiomOldPos.x, axiomOldPos.y, axiomOldPos.z); + Vector3 oldPos = part.OffsetPosition; + oldPos *= oldGroupRotation; + oldPos += oldGroupPosition; + Vector3 oldAbsolutePosition = oldPos; part.OffsetPosition = oldAbsolutePosition - AbsolutePosition; - Quaternion axiomRootRotation = - new Quaternion(m_rootPart.RotationOffset.W, m_rootPart.RotationOffset.X, m_rootPart.RotationOffset.Y, - m_rootPart.RotationOffset.Z); + Quaternion rootRotation = m_rootPart.RotationOffset; - Vector3 axiomPos = new Vector3(part.OffsetPosition.X, part.OffsetPosition.Y, part.OffsetPosition.Z); - axiomPos = axiomRootRotation.Inverse() * axiomPos; - part.OffsetPosition = new LLVector3(axiomPos.x, axiomPos.y, axiomPos.z); + Vector3 pos = part.OffsetPosition; + pos *= Quaternion.Inverse(rootRotation); + part.OffsetPosition = pos; - Quaternion axiomPartRotation = - new Quaternion(part.RotationOffset.W, part.RotationOffset.X, part.RotationOffset.Y, - part.RotationOffset.Z); + Quaternion partRotation = part.RotationOffset; - axiomPartRotation = oldGroupRotation * axiomPartRotation; - axiomPartRotation = axiomRootRotation.Inverse() * axiomPartRotation; - part.RotationOffset = - new LLQuaternion(axiomPartRotation.x, axiomPartRotation.y, axiomPartRotation.z, axiomPartRotation.w); + partRotation *= oldGroupRotation; + partRotation *= Quaternion.Inverse(rootRotation); + part.RotationOffset = partRotation; } /// @@ -1940,7 +1915,7 @@ namespace OpenSim.Region.Environment.Scenes /// Always seems to be 0,0,0, so ignoring /// New position. We do the math here to turn it into a force /// - public void GrabMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) + public void GrabMovement(Vector3 offset, Vector3 pos, IClientAPI remoteClient) { if (m_scene.EventManager.TriggerGroupMove(UUID, pos)) { @@ -1948,7 +1923,7 @@ namespace OpenSim.Region.Environment.Scenes { if (m_rootPart.PhysActor.IsPhysical) { - LLVector3 llmoveforce = pos - AbsolutePosition; + Vector3 llmoveforce = pos - AbsolutePosition; PhysicsVector grabforce = new PhysicsVector(llmoveforce.X, llmoveforce.Y, llmoveforce.Z); grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass; m_rootPart.PhysActor.AddForce(grabforce,true); @@ -1966,7 +1941,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void NonPhysicalGrabMovement(LLVector3 pos) + public void NonPhysicalGrabMovement(Vector3 pos) { AbsolutePosition = pos; m_rootPart.SendTerseUpdateToAllClients(); @@ -2013,7 +1988,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void SetPartText(string text, LLUUID partID) + public void SetPartText(string text, UUID partID) { SceneObjectPart part = GetChildPart(partID); if (part != null) @@ -2109,7 +2084,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void UpdatePermissions(LLUUID AgentID, byte field, uint localID, uint mask, byte addRemTF) + public void UpdatePermissions(UUID AgentID, byte field, uint localID, uint mask, byte addRemTF) { SceneObjectPart updatePart = GetChildPart(localID); updatePart.UpdatePermissions(AgentID, field, localID, mask, addRemTF); @@ -2145,7 +2120,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void Resize(LLVector3 scale, uint localID) + public void Resize(Vector3 scale, uint localID) { if (scale.X > m_scene.m_maxNonphys) scale.X = m_scene.m_maxNonphys; @@ -2190,7 +2165,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void GroupResize(LLVector3 scale, uint localID) + public void GroupResize(Vector3 scale, uint localID) { SceneObjectPart part = GetChildPart(localID); if (part != null) @@ -2222,7 +2197,7 @@ namespace OpenSim.Region.Environment.Scenes { if (obPart.UUID != m_rootPart.UUID) { - LLVector3 oldSize = new LLVector3(obPart.Scale); + Vector3 oldSize = new Vector3(obPart.Scale); float f = 1.0f; float a = 1.0f; @@ -2286,7 +2261,7 @@ namespace OpenSim.Region.Environment.Scenes } } - LLVector3 prevScale = part.Scale; + Vector3 prevScale = part.Scale; prevScale.X *= x; prevScale.Y *= y; prevScale.Z *= z; @@ -2298,11 +2273,11 @@ namespace OpenSim.Region.Environment.Scenes { if (obPart.UUID != m_rootPart.UUID) { - LLVector3 currentpos = new LLVector3(obPart.OffsetPosition); + Vector3 currentpos = new Vector3(obPart.OffsetPosition); currentpos.X *= x; currentpos.Y *= y; currentpos.Z *= z; - LLVector3 newSize = new LLVector3(obPart.Scale); + Vector3 newSize = new Vector3(obPart.Scale); newSize.X *= x; newSize.Y *= y; newSize.Z *= z; @@ -2332,7 +2307,7 @@ namespace OpenSim.Region.Environment.Scenes /// Move this scene object /// /// - public void UpdateGroupPosition(LLVector3 pos) + public void UpdateGroupPosition(Vector3 pos) { if (m_scene.EventManager.TriggerGroupMove(UUID, pos)) { @@ -2356,7 +2331,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void UpdateSinglePosition(LLVector3 pos, uint localID) + public void UpdateSinglePosition(Vector3 pos, uint localID) { SceneObjectPart part = GetChildPart(localID); @@ -2379,22 +2354,18 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - private void UpdateRootPosition(LLVector3 pos) + private void UpdateRootPosition(Vector3 pos) { - LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z); - LLVector3 oldPos = - new LLVector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X, + Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); + Vector3 oldPos = + new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X, AbsolutePosition.Y + m_rootPart.OffsetPosition.Y, AbsolutePosition.Z + m_rootPart.OffsetPosition.Z); - LLVector3 diff = oldPos - newPos; + Vector3 diff = oldPos - newPos; Vector3 axDiff = new Vector3(diff.X, diff.Y, diff.Z); - Quaternion partRotation = - new Quaternion(m_rootPart.RotationOffset.W, m_rootPart.RotationOffset.X, m_rootPart.RotationOffset.Y, - m_rootPart.RotationOffset.Z); - axDiff = partRotation.Inverse() * axDiff; - diff.X = axDiff.x; - diff.Y = axDiff.y; - diff.Z = axDiff.z; + Quaternion partRotation = m_rootPart.RotationOffset; + axDiff *= Quaternion.Inverse(partRotation); + diff = axDiff; lock (m_parts) { @@ -2413,7 +2384,7 @@ namespace OpenSim.Region.Environment.Scenes ScheduleGroupForTerseUpdate(); } - public void OffsetForNewRegion(LLVector3 offset) + public void OffsetForNewRegion(Vector3 offset) { m_rootPart.GroupPosition = offset; } @@ -2426,14 +2397,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void UpdateGroupRotation(LLQuaternion rot) + public void UpdateGroupRotation(Quaternion rot) { m_rootPart.UpdateRotation(rot); if (m_rootPart.PhysActor != null) { - m_rootPart.PhysActor.Orientation = - new Quaternion(m_rootPart.RotationOffset.W, m_rootPart.RotationOffset.X, m_rootPart.RotationOffset.Y, - m_rootPart.RotationOffset.Z); + m_rootPart.PhysActor.Orientation = m_rootPart.RotationOffset; m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); } @@ -2446,14 +2415,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void UpdateGroupRotation(LLVector3 pos, LLQuaternion rot) + public void UpdateGroupRotation(Vector3 pos, Quaternion rot) { m_rootPart.UpdateRotation(rot); if (m_rootPart.PhysActor != null) { - m_rootPart.PhysActor.Orientation = - new Quaternion(m_rootPart.RotationOffset.W, m_rootPart.RotationOffset.X, m_rootPart.RotationOffset.Y, - m_rootPart.RotationOffset.Z); + m_rootPart.PhysActor.Orientation = m_rootPart.RotationOffset; m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); } AbsolutePosition = pos; @@ -2467,7 +2434,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void UpdateSingleRotation(LLQuaternion rot, uint localID) + public void UpdateSingleRotation(Quaternion rot, uint localID) { SceneObjectPart part = GetChildPart(localID); if (part != null) @@ -2487,19 +2454,15 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - private void UpdateRootRotation(LLQuaternion rot) + private void UpdateRootRotation(Quaternion rot) { - Quaternion axRot = new Quaternion(rot.W, rot.X, rot.Y, rot.Z); - Quaternion oldParentRot = - new Quaternion(m_rootPart.RotationOffset.W, m_rootPart.RotationOffset.X, m_rootPart.RotationOffset.Y, - m_rootPart.RotationOffset.Z); + Quaternion axRot = rot; + Quaternion oldParentRot = m_rootPart.RotationOffset; m_rootPart.UpdateRotation(rot); if (m_rootPart.PhysActor != null) { - m_rootPart.PhysActor.Orientation = - new Quaternion(m_rootPart.RotationOffset.W, m_rootPart.RotationOffset.X, m_rootPart.RotationOffset.Y, - m_rootPart.RotationOffset.Z); + m_rootPart.PhysActor.Orientation = m_rootPart.RotationOffset; m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); } @@ -2509,16 +2472,14 @@ namespace OpenSim.Region.Environment.Scenes { if (prim.UUID != m_rootPart.UUID) { - Vector3 axPos = new Vector3(prim.OffsetPosition.X, prim.OffsetPosition.Y, prim.OffsetPosition.Z); - axPos = oldParentRot * axPos; - axPos = axRot.Inverse() * axPos; - prim.OffsetPosition = new LLVector3(axPos.x, axPos.y, axPos.z); - Quaternion primsRot = - new Quaternion(prim.RotationOffset.W, prim.RotationOffset.X, prim.RotationOffset.Y, - prim.RotationOffset.Z); + Vector3 axPos = prim.OffsetPosition; + axPos *= oldParentRot; + axPos *= Quaternion.Inverse(axRot); + prim.OffsetPosition = axPos; + Quaternion primsRot = prim.RotationOffset; Quaternion newRot = oldParentRot * primsRot; - newRot = axRot.Inverse() * newRot; - prim.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); + newRot *= Quaternion.Inverse(axRot); + prim.RotationOffset = newRot; prim.ScheduleTerseUpdate(); } } @@ -2562,7 +2523,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public int registerTargetWaypoint(LLVector3 target, float tolerance) + public int registerTargetWaypoint(Vector3 target, float tolerance) { scriptPosTarget waypoint = new scriptPosTarget(); waypoint.targetPos = target; @@ -2590,7 +2551,7 @@ namespace OpenSim.Region.Environment.Scenes if (m_targets.Count > 0) { bool at_target = false; - //LLVector3 targetPos; + //Vector3 targetPos; //uint targetHandle; Dictionary atTargets = new Dictionary(); lock (m_targets) @@ -2681,11 +2642,11 @@ namespace OpenSim.Region.Environment.Scenes { if (RootPart != null) { - if ((RootPart.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == 0) + if ((RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) == 0) { foreach (SceneObjectPart part in m_parts.Values) { - if (part.Shape.SculptEntry && part.Shape.SculptTexture != LLUUID.Zero) + if (part.Shape.SculptEntry && part.Shape.SculptTexture != UUID.Zero) { m_scene.AssetCache.GetAsset(part.Shape.SculptTexture, part.SculptTextureCallback, true); } @@ -2700,7 +2661,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void SetGroup(LLUUID GroupID, IClientAPI client) + public void SetGroup(UUID GroupID, IClientAPI client) { lock (m_parts) { diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs index 3bfe7e9d04..2beb9bb761 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.Reflection; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -69,7 +69,7 @@ namespace OpenSim.Region.Environment.Scenes } /// - /// Reset LLUUIDs for all the items in the prim's inventory. This involves either generating + /// Reset UUIDs for all the items in the prim's inventory. This involves either generating /// new ones or setting existing UUIDs to the correct parent UUIDs. /// /// If this method is called and there are inventory items, then we regard the inventory as having changed. @@ -99,7 +99,7 @@ namespace OpenSim.Region.Environment.Scenes /// Change every item in this prim's inventory to a new owner. /// /// - public void ChangeInventoryOwner(LLUUID ownerId) + public void ChangeInventoryOwner(UUID ownerId) { lock (TaskInventory) { @@ -172,13 +172,13 @@ namespace OpenSim.Region.Environment.Scenes if (!m_parentGroup.Scene.ExternalChecks.ExternalChecksCanRunScript(item.ItemID, UUID, item.OwnerID)) return; - AddFlag(LLObject.ObjectFlags.Scripted); + AddFlag(PrimFlags.Scripted); if (!m_parentGroup.Scene.RegionInfo.RegionSettings.DisableScripts) { AssetCache cache = m_parentGroup.Scene.AssetCache; - cache.GetAsset(item.AssetID, delegate(LLUUID assetID, AssetBase asset) + cache.GetAsset(item.AssetID, delegate(UUID assetID, AssetBase asset) { if (null == asset) { @@ -190,8 +190,8 @@ namespace OpenSim.Region.Environment.Scenes else { m_taskInventory[item.ItemID].PermsMask = 0; - m_taskInventory[item.ItemID].PermsGranter = LLUUID.Zero; - string script = Helpers.FieldToUTF8String(asset.Data); + m_taskInventory[item.ItemID].PermsGranter = UUID.Zero; + string script = Utils.BytesToString(asset.Data); m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId, item.ItemID, script, startParam, postOnRez); m_parentGroup.AddActiveScriptCount(1); @@ -205,9 +205,9 @@ namespace OpenSim.Region.Environment.Scenes /// Start a script which is in this prim's inventory. /// /// - /// A + /// A /// - public void CreateScriptInstance(LLUUID itemId, int startParam, bool postOnRez) + public void CreateScriptInstance(UUID itemId, int startParam, bool postOnRez) { lock (m_taskInventory) { @@ -229,7 +229,7 @@ namespace OpenSim.Region.Environment.Scenes /// Stop a script which is in this prim's inventory. /// /// - public void RemoveScriptInstance(LLUUID itemId) + public void RemoveScriptInstance(UUID itemId) { if (m_taskInventory.ContainsKey(itemId)) { @@ -370,7 +370,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// null if the item does not exist - public TaskInventoryItem GetInventoryItem(LLUUID itemId) + public TaskInventoryItem GetInventoryItem(UUID itemId) { TaskInventoryItem item; m_taskInventory.TryGetValue(itemId, out item); @@ -426,7 +426,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// Numeric asset type of the item removed. Returns -1 if the item did not exist /// in this prim's inventory. - public int RemoveInventoryItem(LLUUID itemID) + public int RemoveInventoryItem(UUID itemID) { lock (m_taskInventory) { @@ -455,7 +455,7 @@ namespace OpenSim.Region.Environment.Scenes if (scriptcount <= 0) { - RemFlag(LLObject.ObjectFlags.Scripted); + RemFlag(PrimFlags.Scripted); } ScheduleFullUpdate(); @@ -477,10 +477,10 @@ namespace OpenSim.Region.Environment.Scenes public string GetInventoryFileName() { if (m_inventoryFileName == String.Empty) - m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp"; + m_inventoryFileName = "inventory_" + UUID.Random().ToString() + ".tmp"; if (m_inventoryFileNameSerial < m_inventorySerial) { - m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp"; + m_inventoryFileName = "inventory_" + UUID.Random().ToString() + ".tmp"; } return m_inventoryFileName; } @@ -499,7 +499,7 @@ namespace OpenSim.Region.Environment.Scenes if (m_inventorySerial > 0) { client.SendTaskInventory(m_uuid, (short)m_inventorySerial, - Helpers.StringToField(GetInventoryFileName())); + Utils.StringToBytes(GetInventoryFileName())); return true; } else @@ -520,13 +520,13 @@ namespace OpenSim.Region.Environment.Scenes // 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) - InventoryStringBuilder invString = new InventoryStringBuilder(UUID, LLUUID.Zero); + InventoryStringBuilder invString = new InventoryStringBuilder(UUID, UUID.Zero); lock (m_taskInventory) { foreach (TaskInventoryItem item in m_taskInventory.Values) { - LLUUID ownerID = item.OwnerID; + UUID ownerID = item.OwnerID; uint everyoneMask = 0; uint baseMask = item.BasePermissions; uint ownerMask = item.CurrentPermissions; @@ -587,10 +587,10 @@ namespace OpenSim.Region.Environment.Scenes } } - fileData = Helpers.StringToField(invString.BuildString); + fileData = Utils.StringToBytes(invString.BuildString); - //Console.WriteLine(Helpers.FieldToUTF8String(fileData)); - //m_log.Debug("[PRIM INVENTORY]: RequestInventoryFile fileData: " + Helpers.FieldToUTF8String(fileData)); + //Console.WriteLine(Utils.BytesToString(fileData)); + //m_log.Debug("[PRIM INVENTORY]: RequestInventoryFile fileData: " + Utils.BytesToString(fileData)); if (fileData.Length > 2) { @@ -619,7 +619,7 @@ namespace OpenSim.Region.Environment.Scenes { public string BuildString = String.Empty; - public InventoryStringBuilder(LLUUID folderID, LLUUID parentID) + public InventoryStringBuilder(UUID folderID, UUID parentID) { BuildString += "\tinv_object\t0\n\t{\n"; AddNameValueLine("obj_id", folderID.ToString()); @@ -746,9 +746,9 @@ namespace OpenSim.Region.Environment.Scenes return false; } - public List GetInventoryList() + public List GetInventoryList() { - List ret = new List(); + List ret = new List(); foreach (TaskInventoryItem item in m_taskInventory.Values) ret.Add(item.ItemID); diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 5861298c3c..ea10fe655b 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -33,10 +33,8 @@ using System.Security.Permissions; using System.Xml; using System.Xml.Serialization; -using Axiom.Math; - -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes.Scripting; @@ -114,7 +112,7 @@ namespace OpenSim.Region.Environment.Scenes // Not a big problem as long as the script that sets it remains in the prim on startup. // for SL compatibility it should be persisted though (set sound / displaytext / particlesystem, kill script) [XmlIgnore] - public LLUUID Sound; + public UUID Sound; [XmlIgnore] public byte SoundFlags; [XmlIgnore] @@ -128,15 +126,15 @@ namespace OpenSim.Region.Environment.Scenes [XmlIgnore] public uint TimeStampTerse = 0; [XmlIgnore] - public LLUUID FromAssetID = LLUUID.Zero; + public UUID FromAssetID = UUID.Zero; [XmlIgnore] public bool IsAttachment = false; [XmlIgnore] public scriptEvents AggregateScriptEvents = 0; [XmlIgnore] - public LLUUID AttachedAvatar = LLUUID.Zero; + public UUID AttachedAvatar = UUID.Zero; [XmlIgnore] - public LLVector3 AttachedPos = LLVector3.Zero; + public Vector3 AttachedPos = Vector3.Zero; [XmlIgnore] public uint AttachmentPoint = (byte)0; [XmlIgnore] @@ -146,7 +144,7 @@ namespace OpenSim.Region.Environment.Scenes public bool Undoing = false; [XmlIgnore] - private LLObject.ObjectFlags LocalFlags = LLObject.ObjectFlags.None; + private PrimFlags LocalFlags = 0; private byte[] m_TextureAnimation; private byte m_clickAction = 0; private Color m_color = Color.Black; @@ -157,14 +155,14 @@ namespace OpenSim.Region.Environment.Scenes [XmlIgnore] private int m_scriptAccessPin = 0; [XmlIgnore] - private readonly Dictionary m_scriptEvents = new Dictionary(); + private readonly Dictionary m_scriptEvents = new Dictionary(); private string m_sitName = String.Empty; - private Quaternion m_sitTargetOrientation = new Quaternion(0, 0, 0, 1); - private Vector3 m_sitTargetPosition = new Vector3(0, 0, 0); + private Quaternion m_sitTargetOrientation = Quaternion.Identity; + private Vector3 m_sitTargetPosition = Vector3.Zero; private string m_text = String.Empty; private string m_touchName = String.Empty; private readonly UndoStack m_undo = new UndoStack(5); - private LLUUID _creatorID; + private UUID _creatorID; /// /// Only used internally to schedule client updates. @@ -176,29 +174,29 @@ namespace OpenSim.Region.Environment.Scenes /// private byte m_updateFlag; - protected LLVector3 m_acceleration; - protected LLVector3 m_angularVelocity; + protected Vector3 m_acceleration; + protected Vector3 m_angularVelocity; //unkown if this will be kept, added as a way of removing the group position from the group class - protected LLVector3 m_groupPosition; + protected Vector3 m_groupPosition; protected uint m_localId; - protected LLObject.MaterialType m_material = 0; + protected Material m_material = 0; protected string m_name; - protected LLVector3 m_offsetPosition; + protected Vector3 m_offsetPosition; // FIXME, TODO, ERROR: 'ParentGroup' can't be in here, move it out. protected SceneObjectGroup m_parentGroup; protected byte[] m_particleSystem = new byte[0]; protected ulong m_regionHandle; - protected LLQuaternion m_rotationOffset; + protected Quaternion m_rotationOffset; protected PrimitiveBaseShape m_shape = null; - protected LLUUID m_uuid; - protected LLVector3 m_velocity; + protected UUID m_uuid; + protected Vector3 m_velocity; // TODO: Those have to be changed into persistent properties at some later point, // or sit-camera on vehicles will break on sim-crossing. - private LLVector3 m_cameraEyeOffset = new LLVector3(0.0f, 0.0f, 0.0f); - private LLVector3 m_cameraAtOffset = new LLVector3(0.0f, 0.0f, 0.0f); + private Vector3 m_cameraEyeOffset = new Vector3(0.0f, 0.0f, 0.0f); + private Vector3 m_cameraAtOffset = new Vector3(0.0f, 0.0f, 0.0f); private bool m_forceMouselook = false; #endregion Fields @@ -214,9 +212,9 @@ namespace OpenSim.Region.Environment.Scenes m_TextureAnimation = new byte[0]; } - public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID, - PrimitiveBaseShape shape, LLVector3 groupPosition, LLVector3 offsetPosition) - : this(regionHandle, parent, ownerID, localID, shape, groupPosition, LLQuaternion.Identity, offsetPosition) + public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, UUID ownerID, uint localID, + PrimitiveBaseShape shape, Vector3 groupPosition, Vector3 offsetPosition) + : this(regionHandle, parent, ownerID, localID, shape, groupPosition, Quaternion.Identity, offsetPosition) { } @@ -229,9 +227,9 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID, - PrimitiveBaseShape shape, LLVector3 groupPosition, LLQuaternion rotationOffset, - LLVector3 offsetPosition) + public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, UUID ownerID, uint localID, + PrimitiveBaseShape shape, Vector3 groupPosition, Quaternion rotationOffset, + Vector3 offsetPosition) { m_name = "Primitive"; m_regionHandle = regionHandle; @@ -240,8 +238,8 @@ namespace OpenSim.Region.Environment.Scenes _creationDate = (Int32) (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; _ownerID = ownerID; _creatorID = _ownerID; - _lastOwnerID = LLUUID.Zero; - UUID = LLUUID.Random(); + _lastOwnerID = UUID.Zero; + UUID = UUID.Random(); LocalId = (uint) (localID); Shape = shape; // Todo: Add More Object Parameter from above! @@ -254,9 +252,9 @@ namespace OpenSim.Region.Environment.Scenes GroupPosition = groupPosition; OffsetPosition = offsetPosition; RotationOffset = rotationOffset; - Velocity = new LLVector3(0, 0, 0); - AngularVelocity = new LLVector3(0, 0, 0); - Acceleration = new LLVector3(0, 0, 0); + Velocity = new Vector3(0, 0, 0); + AngularVelocity = new Vector3(0, 0, 0); + Acceleration = new Vector3(0, 0, 0); m_TextureAnimation = new byte[0]; // Prims currently only contain a single folder (Contents). From looking at the Second Life protocol, @@ -264,7 +262,7 @@ namespace OpenSim.Region.Environment.Scenes // the prim into an agent inventory (Linden client reports that the "Object not found for drop" in its log _flags = 0; - _flags |= LLObject.ObjectFlags.CreateSelected; + _flags |= PrimFlags.CreateSelected; TrimPermissions(); //m_undo = new UndoStack(ParentGroup.GetSceneMaxUndo()); @@ -282,9 +280,9 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, int creationDate, LLUUID ownerID, - LLUUID creatorID, LLUUID lastOwnerID, uint localID, PrimitiveBaseShape shape, - LLVector3 position, LLQuaternion rotation, uint flags) + public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, int creationDate, UUID ownerID, + UUID creatorID, UUID lastOwnerID, uint localID, PrimitiveBaseShape shape, + Vector3 position, Quaternion rotation, uint flags) { m_regionHandle = regionHandle; m_parentGroup = parent; @@ -293,7 +291,7 @@ namespace OpenSim.Region.Environment.Scenes _ownerID = ownerID; _creatorID = creatorID; _lastOwnerID = lastOwnerID; - UUID = LLUUID.Random(); + UUID = UUID.Random(); LocalId = (uint) (localID); Shape = shape; _ownershipCost = 0; @@ -307,7 +305,7 @@ namespace OpenSim.Region.Environment.Scenes // 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)(PrimFlags.Scripted | PrimFlags.Touch); TrimPermissions(); // ApplyPhysics(); @@ -326,7 +324,7 @@ namespace OpenSim.Region.Environment.Scenes /* m_queue = (Queue)info.GetValue("m_queue", typeof(Queue)); - m_ids = (List)info.GetValue("m_ids", typeof(List)); + m_ids = (List)info.GetValue("m_ids", typeof(List)); */ //System.Console.WriteLine("SceneObjectPart Deserialize END"); @@ -336,24 +334,24 @@ namespace OpenSim.Region.Environment.Scenes #region XML Schema - private LLUUID _lastOwnerID; - private LLUUID _ownerID; - private LLUUID _groupID; + private UUID _lastOwnerID; + private UUID _ownerID; + private UUID _groupID; private int _ownershipCost; private byte _objectSaleType; private int _salePrice; private uint _category; private Int32 _creationDate; private uint _parentID = 0; - private LLUUID m_sitTargetAvatar = LLUUID.Zero; + private UUID m_sitTargetAvatar = UUID.Zero; private uint _baseMask = (uint)PermissionMask.All; private uint _ownerMask = (uint)PermissionMask.All; private uint _groupMask = (uint)PermissionMask.None; private uint _everyoneMask = (uint)PermissionMask.None; private uint _nextOwnerMask = (uint)PermissionMask.All; - private LLObject.ObjectFlags _flags = LLObject.ObjectFlags.None; + private PrimFlags _flags = 0; - public LLUUID CreatorID { + public UUID CreatorID { get { return _creatorID; @@ -368,7 +366,7 @@ namespace OpenSim.Region.Environment.Scenes /// 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. /// - public LLUUID FolderID + public UUID FolderID { get { return UUID; } set { } // Don't allow assignment, or legacy prims wil b0rk @@ -389,10 +387,10 @@ namespace OpenSim.Region.Environment.Scenes public uint ObjectFlags { get { return (uint)_flags; } - set { _flags = (LLObject.ObjectFlags)value; } + set { _flags = (PrimFlags)value; } } - public LLUUID UUID + public UUID UUID { get { return m_uuid; } set { m_uuid = value; } @@ -413,7 +411,7 @@ namespace OpenSim.Region.Environment.Scenes public byte Material { get { return (byte) m_material; } - set { m_material = (LLObject.MaterialType) value; } + set { m_material = (Material)value; } } public ulong RegionHandle @@ -435,7 +433,7 @@ namespace OpenSim.Region.Environment.Scenes set { m_TextureAnimation = value; } } - public LLVector3 GroupPosition + public Vector3 GroupPosition { get { @@ -479,10 +477,10 @@ namespace OpenSim.Region.Environment.Scenes // To move the child prim in respect to the group position and rotation we have to calculate - LLVector3 resultingposition = GetWorldPosition(); + Vector3 resultingposition = GetWorldPosition(); PhysActor.Position = new PhysicsVector(resultingposition.X, resultingposition.Y, resultingposition.Z); - LLQuaternion resultingrot = GetWorldRotation(); - PhysActor.Orientation = new Quaternion(resultingrot.W, resultingrot.X, resultingrot.Y, resultingrot.Z); + Quaternion resultingrot = GetWorldRotation(); + PhysActor.Orientation = resultingrot; } // Tell the physics engines that this prim changed. @@ -497,7 +495,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public LLVector3 OffsetPosition + public Vector3 OffsetPosition { get { return m_offsetPosition; } set @@ -518,20 +516,17 @@ namespace OpenSim.Region.Environment.Scenes } } - public LLQuaternion RotationOffset + public Quaternion RotationOffset { get { // We don't want the physics engine mucking up the rotations in a linkset if (PhysActor != null && _parentID == 0) { - if (PhysActor.Orientation.x != 0 || PhysActor.Orientation.y != 0 - || PhysActor.Orientation.z != 0 || PhysActor.Orientation.w != 0) + if (PhysActor.Orientation.X != 0 || PhysActor.Orientation.Y != 0 + || PhysActor.Orientation.Z != 0 || PhysActor.Orientation.W != 0) { - m_rotationOffset.X = PhysActor.Orientation.x; - m_rotationOffset.Y = PhysActor.Orientation.y; - m_rotationOffset.Z = PhysActor.Orientation.z; - m_rotationOffset.W = PhysActor.Orientation.w; + m_rotationOffset = PhysActor.Orientation; } } return m_rotationOffset; @@ -548,14 +543,14 @@ namespace OpenSim.Region.Environment.Scenes // Root prim gets value directly if (_parentID == 0) { - PhysActor.Orientation = new Quaternion(value.W, value.X, value.Y, value.Z); + PhysActor.Orientation = value; //m_log.Info("[PART]: RO1:" + PhysActor.Orientation.ToString()); } else { // Child prim we have to calculate it's world rotationwel - LLQuaternion resultingrotation = GetWorldRotation(); - PhysActor.Orientation = new Quaternion(resultingrotation.W, resultingrotation.X, resultingrotation.Y, resultingrotation.Z); + Quaternion resultingrotation = GetWorldRotation(); + PhysActor.Orientation = resultingrotation; //m_log.Info("[PART]: RO2:" + PhysActor.Orientation.ToString()); } m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); @@ -571,12 +566,12 @@ namespace OpenSim.Region.Environment.Scenes } /// - public LLVector3 Velocity + public Vector3 Velocity { get { - //if (PhysActor.Velocity.x != 0 || PhysActor.Velocity.y != 0 - //|| PhysActor.Velocity.z != 0) + //if (PhysActor.Velocity.X != 0 || PhysActor.Velocity.Y != 0 + //|| PhysActor.Velocity.Z != 0) //{ if (PhysActor != null) { @@ -605,14 +600,14 @@ namespace OpenSim.Region.Environment.Scenes } } - public LLVector3 RotationalVelocity + public Vector3 RotationalVelocity { get { return AngularVelocity; } set { AngularVelocity = value; } } /// - public LLVector3 AngularVelocity + public Vector3 AngularVelocity { get { @@ -626,7 +621,7 @@ namespace OpenSim.Region.Environment.Scenes } /// - public LLVector3 Acceleration + public Vector3 Acceleration { get { return m_acceleration; } set { m_acceleration = value; } @@ -718,7 +713,7 @@ namespace OpenSim.Region.Environment.Scenes TriggerScriptChangedEvent(Changed.SHAPE); } } - public LLVector3 Scale + public Vector3 Scale { get { return m_shape.Scale; } set @@ -754,7 +749,7 @@ namespace OpenSim.Region.Environment.Scenes #region Public Properties with only Get - public LLVector3 AbsolutePosition + public Vector3 AbsolutePosition { get { if (IsAttachment) @@ -763,12 +758,12 @@ namespace OpenSim.Region.Environment.Scenes return m_offsetPosition + m_groupPosition; } } - public LLUUID ObjectCreator + public UUID ObjectCreator { get { return _creatorID; } } - public LLUUID ObjectOwner + public UUID ObjectOwner { get { return _ownerID; } } @@ -801,29 +796,27 @@ namespace OpenSim.Region.Environment.Scenes // This sort of sucks, but I'm adding these in to make some of // the mappings more consistant. - public LLVector3 SitTargetPositionLL + public Vector3 SitTargetPositionLL { - get { return new LLVector3(m_sitTargetPosition.x, m_sitTargetPosition.y,m_sitTargetPosition.z); } - set { m_sitTargetPosition = new Vector3(value.X, value.Y, value.Z); } + get { return new Vector3(m_sitTargetPosition.X, m_sitTargetPosition.Y,m_sitTargetPosition.Z); } + set { m_sitTargetPosition = value; } } - public LLQuaternion SitTargetOrientationLL + public Quaternion SitTargetOrientationLL { get { - return new LLQuaternion( - m_sitTargetOrientation.x, - m_sitTargetOrientation.y, - m_sitTargetOrientation.z, - m_sitTargetOrientation.w + return new Quaternion( + m_sitTargetOrientation.X, + m_sitTargetOrientation.Y, + m_sitTargetOrientation.Z, + m_sitTargetOrientation.W ); } set { m_sitTargetOrientation = new Quaternion(value.W, value.X, value.Y, value.Z); } } - - public bool Stopped { get { @@ -873,19 +866,19 @@ namespace OpenSim.Region.Environment.Scenes set { _ownershipCost = value; } } - public LLUUID GroupID + public UUID GroupID { get { return _groupID; } set { _groupID = value; } } - public LLUUID OwnerID + public UUID OwnerID { get { return _ownerID; } set { _ownerID = value; } } - public LLUUID LastOwnerID + public UUID LastOwnerID { get { return _lastOwnerID; } set { _lastOwnerID = value; } @@ -921,34 +914,34 @@ namespace OpenSim.Region.Environment.Scenes set { _nextOwnerMask = value; } } - public libsecondlife.LLObject.ObjectFlags Flags + public PrimFlags Flags { get { return _flags; } set { _flags = value; } } - public LLUUID SitTargetAvatar + public UUID SitTargetAvatar { get { return m_sitTargetAvatar; } set { m_sitTargetAvatar = value; } } [XmlIgnore] - public virtual LLUUID RegionID + public virtual UUID RegionID { get { if (ParentGroup != null && ParentGroup.Scene != null) return ParentGroup.Scene.RegionInfo.RegionID; else - return LLUUID.Zero; + return UUID.Zero; } set {} // read only } - private LLUUID _parentUUID = LLUUID.Zero; + private UUID _parentUUID = UUID.Zero; [XmlIgnore] - public LLUUID ParentUUID + public UUID ParentUUID { get { @@ -985,7 +978,7 @@ namespace OpenSim.Region.Environment.Scenes m_updateFlag = 0; } - private void SendObjectPropertiesToClient(LLUUID AgentID) + private void SendObjectPropertiesToClient(UUID AgentID) { List avatars = m_parentGroup.Scene.GetScenePresences(); for (int i = 0; i < avatars.Count; i++) @@ -1027,13 +1020,13 @@ namespace OpenSim.Region.Environment.Scenes #region Public Methods - public void AddFlag(LLObject.ObjectFlags flag) + public void AddFlag(PrimFlags flag) { - // LLObject.ObjectFlags prevflag = Flags; + // PrimFlags prevflag = Flags; //uint objflags = Flags; if ((ObjectFlags & (uint) flag) == 0) { - //Console.WriteLine("Adding flag: " + ((LLObject.ObjectFlags) flag).ToString()); + //Console.WriteLine("Adding flag: " + ((PrimFlags) flag).ToString()); _flags |= flag; } //uint currflag = (uint)Flags; @@ -1091,7 +1084,7 @@ 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] = ConvertScriptUintToByte((uint)pTexAnim.Flags); pos++; data[pos] = (byte)pTexAnim.Face; pos++; data[pos] = (byte)pTexAnim.SizeX; pos++; data[pos] = (byte)pTexAnim.SizeY; pos++; @@ -1124,19 +1117,17 @@ namespace OpenSim.Region.Environment.Scenes /// /// Vector force /// true for the local frame, false for the global frame - public void ApplyImpulse(LLVector3 impulsei, bool localGlobalTF) + public void ApplyImpulse(Vector3 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); - Vector3 AXimpulsei = new Vector3(impulsei.X, impulsei.Y, impulsei.Z); - Vector3 newimpulse = AXgrot * AXimpulsei; - impulse = new PhysicsVector(newimpulse.x, newimpulse.y, newimpulse.z); - + Quaternion grot = GetWorldRotation(); + Quaternion AXgrot = grot; + Vector3 AXimpulsei = impulsei; + Vector3 newimpulse = AXimpulsei * AXgrot; + impulse = new PhysicsVector(newimpulse.X, newimpulse.Y, newimpulse.Z); } else { @@ -1155,8 +1146,8 @@ namespace OpenSim.Region.Environment.Scenes /// 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); + bool isPhysical = (((rootObjectFlags & (uint) PrimFlags.Physics) != 0) && m_physicalPrim); + bool isPhantom = ((rootObjectFlags & (uint) PrimFlags.Phantom) != 0); // Added clarification.. since A rigid body is an object that you can kick around, etc. bool RigidBody = isPhysical && !isPhantom; @@ -1167,11 +1158,10 @@ namespace OpenSim.Region.Environment.Scenes PhysActor = m_parentGroup.Scene.PhysicsScene.AddPrimShape( Name, Shape, - new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y, - AbsolutePosition.Z), + new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z), new PhysicsVector(Scale.X, Scale.Y, Scale.Z), - new Quaternion(RotationOffset.W, RotationOffset.X, - RotationOffset.Y, RotationOffset.Z), RigidBody); + RotationOffset, + RigidBody); // Basic Physics returns null.. joy joy joy. if (PhysActor != null) @@ -1208,24 +1198,23 @@ namespace OpenSim.Region.Environment.Scenes /// Duplicates this part. /// /// - public SceneObjectPart Copy(uint localID, LLUUID AgentID, LLUUID GroupID, int linkNum, bool userExposed) + public SceneObjectPart Copy(uint localID, UUID AgentID, UUID GroupID, int linkNum, bool userExposed) { SceneObjectPart dupe = (SceneObjectPart) MemberwiseClone(); dupe.m_shape = m_shape.Copy(); dupe.m_regionHandle = m_regionHandle; if (userExposed) - dupe.UUID = LLUUID.Random(); + dupe.UUID = UUID.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.GroupPosition = GroupPosition; + dupe.OffsetPosition = OffsetPosition; + dupe.RotationOffset = RotationOffset; + dupe.Velocity = Vector3.Zero; + dupe.Acceleration = Vector3.Zero; + dupe.AngularVelocity = Vector3.Zero; dupe.ObjectFlags = ObjectFlags; dupe._ownershipCost = _ownershipCost; @@ -1247,11 +1236,11 @@ namespace OpenSim.Region.Environment.Scenes if (userExposed) { - if (dupe.m_shape.SculptEntry && dupe.m_shape.SculptTexture != LLUUID.Zero) + if (dupe.m_shape.SculptEntry && dupe.m_shape.SculptTexture != UUID.Zero) { m_parentGroup.Scene.AssetCache.GetAsset(dupe.m_shape.SculptTexture, dupe.SculptTextureCallback, true); } - bool UsePhysics = ((dupe.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) != 0); + bool UsePhysics = ((dupe.ObjectFlags & (uint)PrimFlags.Physics) != 0); dupe.DoPhysicsPropertyUpdate(UsePhysics, true); } return dupe; @@ -1260,13 +1249,13 @@ namespace OpenSim.Region.Environment.Scenes public static SceneObjectPart Create() { SceneObjectPart part = new SceneObjectPart(); - part.UUID = LLUUID.Random(); + part.UUID = UUID.Random(); PrimitiveBaseShape shape = PrimitiveBaseShape.Create(); part.Shape = shape; part.Name = "Primitive"; - part._ownerID = LLUUID.Random(); + part._ownerID = UUID.Random(); return part; } @@ -1295,16 +1284,8 @@ namespace OpenSim.Region.Environment.Scenes /// that's not wholesome. Had to make Scene public //PhysActor = null; - if ((ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) + if ((ObjectFlags & (uint) PrimFlags.Phantom) == 0) { - //PhysActor = m_parentGroup.Scene.PhysicsScene.AddPrimShape( - //Name, - //Shape, - //new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y, - //AbsolutePosition.Z), - //new PhysicsVector(Scale.X, Scale.Y, Scale.Z), - //new Quaternion(RotationOffset.W, RotationOffset.X, - //RotationOffset.Y, RotationOffset.Z), UsePhysics); if (UsePhysics) { ParentGroup.Scene.AddPhysicalPrim(1); @@ -1339,7 +1320,7 @@ namespace OpenSim.Region.Environment.Scenes return newobject; } - public LLUUID GetAvatarOnSitTarget() + public UUID GetAvatarOnSitTarget() { return m_sitTargetAvatar; } @@ -1356,30 +1337,30 @@ namespace OpenSim.Region.Environment.Scenes public double GetDistanceTo(Vector3 a, Vector3 b) { - float dx = a.x - b.x; - float dy = a.y - b.y; - float dz = a.z - b.z; + float dx = a.X - b.X; + float dy = a.Y - b.Y; + float dz = a.Z - b.Z; return Math.Sqrt(dx * dx + dy * dy + dz * dz); } public uint GetEffectiveObjectFlags() { - LLObject.ObjectFlags f = _flags; + PrimFlags f = _flags; if (m_parentGroup == null || m_parentGroup.RootPart == this) - f &= ~(LLObject.ObjectFlags.Touch | LLObject.ObjectFlags.Money); + f &= ~(PrimFlags.Touch | PrimFlags.Money); return (uint)_flags | (uint)LocalFlags; } - public LLVector3 GetGeometricCenter() + public Vector3 GetGeometricCenter() { if (PhysActor != null) { - return new LLVector3(PhysActor.CenterOfMass.X, PhysActor.CenterOfMass.Y, PhysActor.CenterOfMass.Z); + return new Vector3(PhysActor.CenterOfMass.X, PhysActor.CenterOfMass.Y, PhysActor.CenterOfMass.Z); } else { - return new LLVector3(0, 0, 0); + return new Vector3(0, 0, 0); } } @@ -1419,16 +1400,16 @@ namespace OpenSim.Region.Environment.Scenes Dictionary TaskInventory_work = new Dictionary(); - foreach (LLUUID id in TaskInventory.Keys) + foreach (UUID id in TaskInventory.Keys) { - TaskInventory_work.Add(id.UUID, TaskInventory[id]); + TaskInventory_work.Add(id.Guid, TaskInventory[id]); } info.AddValue("TaskInventory", TaskInventory_work); - info.AddValue("LastOwnerID", _lastOwnerID.UUID); - info.AddValue("OwnerID", _ownerID.UUID); - info.AddValue("GroupID", _groupID.UUID); + info.AddValue("LastOwnerID", _lastOwnerID.Guid); + info.AddValue("OwnerID", _ownerID.Guid); + info.AddValue("GroupID", _groupID.Guid); info.AddValue("OwnershipCost", _ownershipCost); info.AddValue("ObjectSaleType", _objectSaleType); @@ -1451,10 +1432,10 @@ namespace OpenSim.Region.Environment.Scenes info.AddValue("TimeStampLastActivity", TimeStampLastActivity); info.AddValue("m_updateFlag", m_updateFlag); - info.AddValue("CreatorID", _creatorID.UUID); + info.AddValue("CreatorID", _creatorID.Guid); info.AddValue("m_inventorySerial", m_inventorySerial); - info.AddValue("m_uuid", m_uuid.UUID); + info.AddValue("m_uuid", m_uuid.Guid); info.AddValue("m_localID", m_localId); info.AddValue("m_name", m_name); info.AddValue("m_flags", _flags); @@ -1503,7 +1484,7 @@ namespace OpenSim.Region.Environment.Scenes public void GetProperties(IClientAPI client) { - client.SendObjectPropertiesReply(LLUUID.Zero, (ulong)_creationDate, _creatorID, LLUUID.Zero, LLUUID.Zero, + client.SendObjectPropertiesReply(UUID.Zero, (ulong)_creationDate, _creatorID, UUID.Zero, UUID.Zero, _groupID, (short)InventorySerial, _lastOwnerID, UUID, _ownerID, ParentGroup.RootPart.TouchName, new byte[0], ParentGroup.RootPart.SitName, Name, Description, ParentGroup.RootPart._ownerMask, ParentGroup.RootPart._nextOwnerMask, ParentGroup.RootPart._groupMask, ParentGroup.RootPart._everyoneMask, @@ -1512,13 +1493,13 @@ namespace OpenSim.Region.Environment.Scenes ParentGroup.RootPart.SalePrice); } - public LLUUID GetRootPartUUID() + public UUID GetRootPartUUID() { if (m_parentGroup != null) { return m_parentGroup.UUID; } - return LLUUID.Zero; + return UUID.Zero; } /// @@ -1526,63 +1507,40 @@ namespace OpenSim.Region.Environment.Scenes /// Remember, the Group Position simply gives the position of the group itself /// /// A Linked Child Prim objects position in world - public LLVector3 GetWorldPosition() + public Vector3 GetWorldPosition() { - Quaternion parentRot = new Quaternion( - ParentGroup.RootPart.RotationOffset.W, - ParentGroup.RootPart.RotationOffset.X, - ParentGroup.RootPart.RotationOffset.Y, - ParentGroup.RootPart.RotationOffset.Z); + Quaternion parentRot = ParentGroup.RootPart.RotationOffset; - Vector3 axPos - = new Vector3( - OffsetPosition.X, - OffsetPosition.Y, - OffsetPosition.Z); + Vector3 axPos = OffsetPosition; - axPos = parentRot * axPos; - LLVector3 translationOffsetPosition = new LLVector3(axPos.x, axPos.y, axPos.z); + axPos *= parentRot; + Vector3 translationOffsetPosition = axPos; 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() + public Quaternion GetWorldRotation() { Quaternion newRot; if (this.LinkNum == 0) { - newRot = new Quaternion(RotationOffset.W,RotationOffset.X,RotationOffset.Y,RotationOffset.Z); - + newRot = RotationOffset; } 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); - + Quaternion parentRot = ParentGroup.RootPart.RotationOffset; + Quaternion oldRot = RotationOffset; 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); + return newRot; } - public void MoveToTarget(LLVector3 target, float tau) + public void MoveToTarget(Vector3 target, float tau) { if (tau > 0) { @@ -1594,7 +1552,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public virtual void OnGrab(LLVector3 offsetPos, IClientAPI remoteClient) + public virtual void OnGrab(Vector3 offsetPos, IClientAPI remoteClient) { } @@ -1694,7 +1652,7 @@ namespace OpenSim.Region.Environment.Scenes detobj.nameStr = av.ControllingClient.Name; detobj.ownerUUID = av.UUID; detobj.posVector = av.AbsolutePosition; - detobj.rotQuat = new LLQuaternion(av.Rotation.x, av.Rotation.y, av.Rotation.z, av.Rotation.w); + detobj.rotQuat = av.Rotation; detobj.velVector = av.Velocity; detobj.colliderType = 0; detobj.groupUUID = av.ControllingClient.ActiveGroupId; @@ -1760,7 +1718,7 @@ namespace OpenSim.Region.Environment.Scenes detobj.nameStr = av.Name; detobj.ownerUUID = av.UUID; detobj.posVector = av.AbsolutePosition; - detobj.rotQuat = new LLQuaternion(av.Rotation.x, av.Rotation.y, av.Rotation.z, av.Rotation.w); + detobj.rotQuat = av.Rotation; detobj.velVector = av.Velocity; detobj.colliderType = 0; detobj.groupUUID = av.ControllingClient.ActiveGroupId; @@ -1828,7 +1786,7 @@ namespace OpenSim.Region.Environment.Scenes detobj.nameStr = av.Name; detobj.ownerUUID = av.UUID; detobj.posVector = av.AbsolutePosition; - detobj.rotQuat = new LLQuaternion(av.Rotation.x, av.Rotation.y, av.Rotation.z, av.Rotation.w); + detobj.rotQuat = av.Rotation; detobj.velVector = av.Velocity; detobj.colliderType = 0; detobj.groupUUID = av.ControllingClient.ActiveGroupId; @@ -1857,7 +1815,7 @@ namespace OpenSim.Region.Environment.Scenes public void PhysicsOutOfBounds(PhysicsVector pos) { m_log.Info("[PHYSICS]: Physical Object went out of bounds."); - RemFlag(LLObject.ObjectFlags.Physics); + RemFlag(PrimFlags.Physics); DoPhysicsPropertyUpdate(false, true); //m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); } @@ -1866,7 +1824,7 @@ namespace OpenSim.Region.Environment.Scenes { if (PhysActor != null) { - LLVector3 newpos = new LLVector3(PhysActor.Position.GetBytes(), 0); + Vector3 newpos = new Vector3(PhysActor.Position.GetBytes(), 0); if (newpos.X > 257f || newpos.X < -1f || newpos.Y > 257f || newpos.Y < -1f) { m_parentGroup.AbsolutePosition = newpos; @@ -1880,16 +1838,16 @@ namespace OpenSim.Region.Environment.Scenes public void PreloadSound(string sound) { - // LLUUID ownerID = OwnerID; - LLUUID objectID = UUID; - LLUUID soundID = LLUUID.Zero; + // UUID ownerID = OwnerID; + UUID objectID = UUID; + UUID soundID = UUID.Zero; - if (!LLUUID.TryParse(sound, out soundID)) + if (!UUID.TryParse(sound, out soundID)) { //Trys to fetch sound id from prim's inventory. //Prim's inventory doesn't support non script items yet SceneObjectPart op = this; - foreach (KeyValuePair item in op.TaskInventory) + foreach (KeyValuePair item in op.TaskInventory) { if (item.Value.Name == sound) { @@ -1908,19 +1866,19 @@ namespace OpenSim.Region.Environment.Scenes } } - public void RemFlag(LLObject.ObjectFlags flag) + public void RemFlag(PrimFlags flag) { - // LLObject.ObjectFlags prevflag = Flags; + // PrimFlags prevflag = Flags; if ((ObjectFlags & (uint) flag) != 0) { - //Console.WriteLine("Removing flag: " + ((LLObject.ObjectFlags)flag).ToString()); + //Console.WriteLine("Removing flag: " + ((PrimFlags)flag).ToString()); _flags &= ~flag; } //System.Console.WriteLine("prev: " + prevflag.ToString() + " curr: " + Flags.ToString()); //ScheduleFullUpdate(); } - public void RemoveScriptEvents(LLUUID scriptid) + public void RemoveScriptEvents(UUID scriptid) { lock (m_scriptEvents) { @@ -1938,13 +1896,13 @@ namespace OpenSim.Region.Environment.Scenes } /// - /// Reset LLUUIDs for this part. This involves generate this part's own LLUUID and - /// generating new LLUUIDs for all the items in the inventory. + /// Reset UUIDs for this part. This involves generate this part's own UUID and + /// generating new UUIDs for all the items in the inventory. /// /// Link number for the part public void ResetIDs(int linkNum) { - UUID = LLUUID.Random(); + UUID = UUID.Random(); LinkNum = linkNum; ResetInventoryIDs(); @@ -1954,7 +1912,7 @@ namespace OpenSim.Region.Environment.Scenes /// Resize this part. /// /// - public void Resize(LLVector3 scale) + public void Resize(Vector3 scale) { StoreUndoState(); m_shape.Scale = scale; @@ -2032,7 +1990,7 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.ScriptSetPhysicsStatus(UsePhysics); } - public void SculptTextureCallback(LLUUID textureID, AssetBase texture) + public void SculptTextureCallback(UUID textureID, AssetBase texture) { if (m_shape.SculptEntry) { @@ -2073,7 +2031,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void SendFullUpdateToAllClientsExcept(LLUUID agentID) + public void SendFullUpdateToAllClientsExcept(UUID agentID) { List avatars = m_parentGroup.Scene.GetScenePresences(); for (int i = 0; i < avatars.Count; i++) @@ -2094,7 +2052,7 @@ namespace OpenSim.Region.Environment.Scenes /// public void SendFullUpdateToClient(IClientAPI remoteClient, uint clientflags) { - LLVector3 lPos; + Vector3 lPos; lPos = OffsetPosition; SendFullUpdateToClient(remoteClient, lPos, clientflags); } @@ -2105,16 +2063,16 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void SendFullUpdateToClient(IClientAPI remoteClient, LLVector3 lPos, uint clientFlags) + public void SendFullUpdateToClient(IClientAPI remoteClient, Vector3 lPos, uint clientFlags) { - clientFlags &= ~(uint) LLObject.ObjectFlags.CreateSelected; + clientFlags &= ~(uint) PrimFlags.CreateSelected; if (remoteClient.AgentId == _ownerID) { - if ((uint) (_flags & LLObject.ObjectFlags.CreateSelected) != 0) + if ((uint) (_flags & PrimFlags.CreateSelected) != 0) { - clientFlags |= (uint) LLObject.ObjectFlags.CreateSelected; - _flags &= ~LLObject.ObjectFlags.CreateSelected; + clientFlags |= (uint) PrimFlags.CreateSelected; + _flags &= ~PrimFlags.CreateSelected; } } //bool isattachment = IsAttachment; @@ -2140,7 +2098,7 @@ namespace OpenSim.Region.Environment.Scenes // This causes the Scene to 'poll' physical objects every couple of frames // bad, so it's been replaced by an event driven method. - //if ((ObjectFlags & (uint)LLObject.ObjectFlags.Physics) != 0) + //if ((ObjectFlags & (uint)PrimFlags.Physics) != 0) //{ // Only send the constant terse updates on physical objects! //ScheduleTerseUpdate(); @@ -2163,20 +2121,20 @@ namespace OpenSim.Region.Environment.Scenes if (volume < 0) volume = 0; - LLUUID ownerID = _ownerID; - LLUUID objectID = UUID; - LLUUID parentID = GetRootPartUUID(); - LLUUID soundID = LLUUID.Zero; - LLVector3 position = AbsolutePosition; // region local + UUID ownerID = _ownerID; + UUID objectID = UUID; + UUID parentID = GetRootPartUUID(); + UUID soundID = UUID.Zero; + Vector3 position = AbsolutePosition; // region local ulong regionHandle = m_parentGroup.Scene.RegionInfo.RegionHandle; //byte flags = 0; - if (!LLUUID.TryParse(sound, out soundID)) + if (!UUID.TryParse(sound, out soundID)) { // search sound file from inventory SceneObjectPart op = this; - foreach (KeyValuePair item in op.TaskInventory) + foreach (KeyValuePair item in op.TaskInventory) { if (item.Value.Name == sound && item.Value.Type == (int)AssetType.Sound) { @@ -2186,7 +2144,7 @@ namespace OpenSim.Region.Environment.Scenes } } - if (soundID == LLUUID.Zero) + if (soundID == UUID.Zero) return; List avatarts = m_parentGroup.Scene.GetAvatars(); @@ -2233,11 +2191,11 @@ namespace OpenSim.Region.Environment.Scenes public void SendTerseUpdateToClient(IClientAPI remoteClient) { - LLVector3 lPos; + Vector3 lPos; lPos = OffsetPosition; - LLQuaternion mRot = RotationOffset; + Quaternion mRot = RotationOffset; // TODO: I have no idea why we are making this check. This should be sorted out - if ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) == 0) + if ((ObjectFlags & (uint) PrimFlags.Physics) == 0) { remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity, RotationalVelocity, Shape.State, FromAssetID); } @@ -2249,9 +2207,9 @@ namespace OpenSim.Region.Environment.Scenes } } - public void SendTerseUpdateToClient(IClientAPI remoteClient, LLVector3 lPos) + public void SendTerseUpdateToClient(IClientAPI remoteClient, Vector3 lPos) { - LLQuaternion mRot = RotationOffset; + Quaternion mRot = RotationOffset; //bool isattachment = IsAttachment; //if (LocalId != ParentGroup.RootPart.LocalId) //isattachment = ParentGroup.RootPart.IsAttachment; @@ -2263,7 +2221,7 @@ namespace OpenSim.Region.Environment.Scenes } else { - if ((ObjectFlags & (uint)LLObject.ObjectFlags.Physics) == 0) + if ((ObjectFlags & (uint)PrimFlags.Physics) == 0) { remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity, RotationalVelocity, Shape.State, FromAssetID); } @@ -2296,7 +2254,7 @@ namespace OpenSim.Region.Environment.Scenes //} } - public void SetAvatarOnSitTarget(LLUUID avatarID) + public void SetAvatarOnSitTarget(UUID avatarID) { m_sitTargetAvatar = avatarID; if (ParentGroup != null) @@ -2352,7 +2310,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void SetGroup(LLUUID groupID, IClientAPI client) + public void SetGroup(UUID groupID, IClientAPI client) { _groupID = groupID; GetProperties(client); @@ -2379,7 +2337,7 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); } - public void SetScriptEvents(LLUUID scriptid, int events) + public void SetScriptEvents(UUID scriptid, int events) { // scriptEvents oldparts; lock (m_scriptEvents) @@ -2399,24 +2357,6 @@ namespace OpenSim.Region.Environment.Scenes aggregateScriptEvents(); } - // public void SetSitTarget(Vector3 offset, Quaternion orientation) - // { - // m_sitTargetPosition = offset; - // m_sitTargetOrientation = orientation; - // } - - // // Utility function so the databases don't have to reference axiom.math - // public void SetSitTargetLL(LLVector3 offset, LLQuaternion orientation) - // { - // if ( - // !(offset.X == 0 && offset.Y == 0 && offset.Z == 0 && (orientation.W == 0 || orientation.W == 1) && - // orientation.X == 0 && orientation.Y == 0 && orientation.Z == 0)) - // { - // m_sitTargetPosition = new Vector3(offset.X, offset.Y, offset.Z); - // m_sitTargetOrientation = new Quaternion(orientation.W, orientation.X, orientation.Y, orientation.Z); - // } - // } - /// /// Set the text displayed for this part. /// @@ -2438,9 +2378,9 @@ namespace OpenSim.Region.Environment.Scenes 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)); + (int) (color.X*0xff), + (int) (color.Y*0xff), + (int) (color.Z*0xff)); SetText(text); } @@ -2491,33 +2431,22 @@ namespace OpenSim.Region.Environment.Scenes EntityIntersection returnresult = new EntityIntersection(); - Vector3 vAbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z); - - Vector3 vScale = new Vector3(Scale.X, Scale.Y, Scale.Z); - // Quaternion qRotation = - // new Quaternion(RotationOffset.W, RotationOffset.X, RotationOffset.Y, RotationOffset.Z); - - - //Quaternion worldRotation = (qRotation*parentrot); - //Matrix3 worldRotM = worldRotation.ToRotationMatrix(); - - + Vector3 vAbsolutePosition = AbsolutePosition; + Vector3 vScale = Scale; Vector3 rOrigin = iray.Origin; Vector3 rDirection = iray.Direction; - - //rDirection = rDirection.Normalize(); // Buidling the first part of the Quadratic equation Vector3 r2ndDirection = rDirection*rDirection; - float itestPart1 = r2ndDirection.x + r2ndDirection.y + r2ndDirection.z; + 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; - float itestPart2 = tmVal3.x + tmVal3.y + tmVal3.z; + float itestPart2 = tmVal3.X + tmVal3.Y + tmVal3.Z; // Buidling the third part of the Quadratic equation Vector3 tmVal4 = rOrigin*rOrigin; @@ -2528,12 +2457,12 @@ namespace OpenSim.Region.Environment.Scenes // Set Radius to the largest dimention of the prim float radius = 0f; - if (vScale.x > radius) - radius = vScale.x; - if (vScale.y > radius) - radius = vScale.y; - if (vScale.z > radius) - radius = vScale.z; + if (vScale.X > radius) + radius = vScale.X; + if (vScale.Y > radius) + radius = vScale.Y; + if (vScale.Z > radius) + radius = vScale.Z; // the second part of this is the default prim size // once we factor in the aabb of the prim we're adding we can @@ -2544,8 +2473,8 @@ 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))); + float itestPart3 = tmVal4.X + tmVal4.Y + tmVal4.Z + tmVal5.X + tmVal5.Y + tmVal5.Z - + (2.0f*(tmVal6.X + tmVal6.Y + tmVal6.Z + (radius*radius))); // Yuk Quadradrics.. Solve first float rootsqr = (itestPart2*itestPart2) - (4.0f*itestPart1*itestPart3); @@ -2572,21 +2501,21 @@ 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; // Normal is calculated by the difference and then normalizing the result Vector3 normalpart = ipoint - vAbsolutePosition; - returnresult.normal = normalpart / normalpart.Length; + returnresult.normal = normalpart / normalpart.Length(); - // It's funny how the LLVector3 object has a Distance function, but the Axiom.Math object doesn't. + // It's funny how the Vector3 object has a Distance function, but the Axiom.Math object doesn't. // I can write a function to do it.. but I like the fact that this one is Static. - LLVector3 distanceConvert1 = new LLVector3(iray.Origin.x, iray.Origin.y, iray.Origin.z); - LLVector3 distanceConvert2 = new LLVector3(ipoint.x, ipoint.y, ipoint.z); + Vector3 distanceConvert1 = new Vector3(iray.Origin.X, iray.Origin.Y, iray.Origin.Z); + Vector3 distanceConvert2 = new Vector3(ipoint.X, ipoint.Y, ipoint.Z); float distance = (float) Util.GetDistanceTo(distanceConvert1, distanceConvert2); returnresult.distance = distance; @@ -2621,21 +2550,21 @@ namespace OpenSim.Region.Environment.Scenes Vector3 AmBb = new Vector3(0, 0, 0); // Vertex B - Vertex C Vector3 cross = new Vector3(); - LLVector3 pos = GetWorldPosition(); - LLQuaternion rot = GetWorldRotation(); + Vector3 pos = GetWorldPosition(); + Quaternion rot = GetWorldRotation(); // 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 = rot; AXrot.Normalize(); - Vector3 AXpos = new Vector3(pos.X, pos.Y, pos.Z); + Vector3 AXpos = pos; // tScale is the offset to derive the vertex based on the scale. // 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 = Vector3.Zero; Vector3 AXscale = new Vector3(m_shape.Scale.X * 0.5f, m_shape.Scale.Y * 0.5f, m_shape.Scale.Z * 0.5f); @@ -2680,97 +2609,97 @@ namespace OpenSim.Region.Environment.Scenes #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].y = pos.Y + vertexes[0].y; - //vertexes[0].z = pos.Z + vertexes[0].z; + tScale = new Vector3(AXscale.X, -AXscale.Y, AXscale.Z); + rScale = tScale * AXrot; + 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].Y = pos.Y + vertexes[0].Y; + //vertexes[0].Z = pos.Z + vertexes[0].Z; FaceA[0] = vertexes[0]; FaceB[3] = vertexes[0]; FaceA[4] = vertexes[0]; tScale = AXscale; - rScale = ((AXrot * tScale)); - vertexes[1] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); + rScale = tScale * AXrot; + 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].z = pos.Z + vertexes[1].z; + // 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]; FaceA[1] = vertexes[1]; FaceC[4] = vertexes[1]; - tScale = new Vector3(AXscale.x, -AXscale.y, -AXscale.z); - rScale = ((AXrot * tScale)); + tScale = new Vector3(AXscale.X, -AXscale.Y, -AXscale.Z); + rScale = tScale * AXrot; - vertexes[2] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); + vertexes[2] = (new Vector3((pos.X + rScale.X), (pos.Y + rScale.Y), (pos.Z + rScale.Z))); - //vertexes[2].x = pos.X + vertexes[2].x; - //vertexes[2].y = pos.Y + vertexes[2].y; - //vertexes[2].z = pos.Z + vertexes[2].z; + //vertexes[2].X = pos.X + vertexes[2].X; + //vertexes[2].Y = pos.Y + vertexes[2].Y; + //vertexes[2].Z = pos.Z + vertexes[2].Z; FaceC[0] = vertexes[2]; FaceD[3] = vertexes[2]; FaceC[5] = vertexes[2]; - tScale = new Vector3(AXscale.x, AXscale.y, -AXscale.z); - rScale = ((AXrot * tScale)); - vertexes[3] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); + tScale = new Vector3(AXscale.X, AXscale.Y, -AXscale.Z); + rScale = tScale * AXrot; + 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].X = pos.X + vertexes[3].X; + // vertexes[3].Y = pos.Y + vertexes[3].Y; + // vertexes[3].Z = pos.Z + vertexes[3].Z; FaceD[0] = vertexes[3]; FaceC[1] = vertexes[3]; FaceA[5] = vertexes[3]; - tScale = new Vector3(-AXscale.x, AXscale.y, AXscale.z); - rScale = ((AXrot * tScale)); - vertexes[4] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); + tScale = new Vector3(-AXscale.X, AXscale.Y, AXscale.Z); + rScale = tScale * AXrot; + 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]; FaceD[4] = vertexes[4]; - tScale = new Vector3(-AXscale.x, AXscale.y, -AXscale.z); - rScale = ((AXrot * tScale)); - vertexes[5] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); + tScale = new Vector3(-AXscale.X, AXscale.Y, -AXscale.Z); + rScale = tScale * AXrot; + 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]; FaceB[5] = vertexes[5]; - tScale = new Vector3(-AXscale.x, -AXscale.y, AXscale.z); - rScale = ((AXrot * tScale)); - vertexes[6] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); + tScale = new Vector3(-AXscale.X, -AXscale.Y, AXscale.Z); + rScale = tScale * AXrot; + 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]; FaceB[4] = vertexes[6]; - tScale = new Vector3(-AXscale.x, -AXscale.y, -AXscale.z); - rScale = ((AXrot * tScale)); - vertexes[7] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); + tScale = new Vector3(-AXscale.X, -AXscale.Y, -AXscale.Z); + rScale = tScale * AXrot; + 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]; @@ -2786,13 +2715,13 @@ namespace OpenSim.Region.Environment.Scenes AmBa = FaceA[i] - FaceB[i]; AmBb = FaceB[i] - FaceC[i]; - cross = AmBb.Cross(AmBa); + cross = Vector3.Cross(AmBb, 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; + //distance[i] = (normals[i].X * AmBa.X + normals[i].Y * AmBa.Y + normals[i].Z * AmBa.Z) * -1; } EntityIntersection returnresult = new EntityIntersection(); @@ -2862,7 +2791,7 @@ namespace OpenSim.Region.Environment.Scenes { AmBa = FaceA[i] - FaceB[i]; AmBb = FaceB[i] - FaceC[i]; - d = normals[i].Dot(FaceB[i]); + d = Vector3.Dot(normals[i], FaceB[i]); //if (faceCenters) //{ @@ -2870,30 +2799,26 @@ namespace OpenSim.Region.Environment.Scenes //} //else //{ - c = iray.Direction.Dot(normals[i]); + c = Vector3.Dot(iray.Direction, normals[i]); //} if (c == 0) continue; - a = (d - iray.Origin.Dot(normals[i])) / c; + a = (d - Vector3.Dot(iray.Origin, normals[i])) / c; if (a < 0) continue; // If the normal is pointing outside the object - - - - if (iray.Direction.Dot(normals[i]) < 0 || !frontFacesOnly) + if (Vector3.Dot(iray.Direction, normals[i]) < 0 || !frontFacesOnly) { - //if (faceCenters) //{ //(FaceA[i] + FaceB[i] + FaceC[1] + FaceD[i]) / 4f; // q = iray.Origin + a * normals[i]; //} //else //{ - q = iray.Origin + a * iray.Direction; + q = iray.Origin + iray.Direction * a; //} float distance2 = (float)GetDistanceTo(q, AXpos); @@ -2913,13 +2838,13 @@ namespace OpenSim.Region.Environment.Scenes //m_log.Info("[DIST]: " + distance2.ToString()); if (faceCenters) { - returnresult.normal = (AXrot * AAfacenormals[i]); + returnresult.normal = AAfacenormals[i] * AXrot; Vector3 scaleComponent = AAfacenormals[i]; float ScaleOffset = 0.5f; - if (scaleComponent.x != 0) ScaleOffset = AXscale.x; - if (scaleComponent.y != 0) ScaleOffset = AXscale.y; - if (scaleComponent.z != 0) ScaleOffset = AXscale.z; + if (scaleComponent.X != 0) ScaleOffset = AXscale.X; + if (scaleComponent.Y != 0) ScaleOffset = AXscale.Y; + if (scaleComponent.Z != 0) ScaleOffset = AXscale.Z; ScaleOffset = Math.Abs(ScaleOffset); Vector3 offset = returnresult.normal * ScaleOffset; returnresult.ipoint = AXpos + offset; @@ -2984,7 +2909,7 @@ namespace OpenSim.Region.Environment.Scenes if (type == 0x30) { - if (m_shape.SculptEntry && m_shape.SculptTexture != LLUUID.Zero) + if (m_shape.SculptEntry && m_shape.SculptTexture != UUID.Zero) { //AssetBase tx = m_parentGroup.Scene.getase m_parentGroup.Scene.AssetCache.GetAsset(m_shape.SculptTexture, SculptTextureCallback, true); @@ -2995,13 +2920,13 @@ namespace OpenSim.Region.Environment.Scenes ScheduleFullUpdate(); } - public void UpdateGroupPosition(LLVector3 pos) + public void UpdateGroupPosition(Vector3 pos) { if ((pos.X != GroupPosition.X) || (pos.Y != GroupPosition.Y) || (pos.Z != GroupPosition.Z)) { - LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z); + Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); GroupPosition = newPos; ScheduleTerseUpdate(); } @@ -3015,19 +2940,19 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void UpdateOffSet(LLVector3 pos) + public void UpdateOffSet(Vector3 pos) { if ((pos.X != OffsetPosition.X) || (pos.Y != OffsetPosition.Y) || (pos.Z != OffsetPosition.Z)) { - LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z); + Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); OffsetPosition = newPos; ScheduleTerseUpdate(); } } - public void UpdatePermissions(LLUUID AgentID, byte field, uint localID, uint mask, byte addRemTF) + public void UpdatePermissions(UUID AgentID, byte field, uint localID, uint mask, byte addRemTF) { bool set = addRemTF == 1; @@ -3069,7 +2994,7 @@ namespace OpenSim.Region.Environment.Scenes bool IsTemporary = false; bool IsPhantom = false; // bool castsShadows = false; - bool wasUsingPhysics = ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0); + bool wasUsingPhysics = ((ObjectFlags & (uint) PrimFlags.Physics) != 0); //bool IsLocked = false; int i = 0; @@ -3091,7 +3016,7 @@ namespace OpenSim.Region.Environment.Scenes if (usePhysics) { - AddFlag(LLObject.ObjectFlags.Physics); + AddFlag(PrimFlags.Physics); if (!wasUsingPhysics) { DoPhysicsPropertyUpdate(usePhysics, false); @@ -3109,7 +3034,7 @@ namespace OpenSim.Region.Environment.Scenes } else { - RemFlag(LLObject.ObjectFlags.Physics); + RemFlag(PrimFlags.Physics); if (wasUsingPhysics) { DoPhysicsPropertyUpdate(usePhysics, false); @@ -3118,7 +3043,7 @@ namespace OpenSim.Region.Environment.Scenes if (IsPhantom) { - AddFlag(LLObject.ObjectFlags.Phantom); + AddFlag(PrimFlags.Phantom); if (PhysActor != null) { m_parentGroup.Scene.PhysicsScene.RemovePrim(PhysActor); @@ -3128,17 +3053,16 @@ namespace OpenSim.Region.Environment.Scenes } else { - RemFlag(LLObject.ObjectFlags.Phantom); + RemFlag(PrimFlags.Phantom); if (PhysActor == null) { PhysActor = m_parentGroup.Scene.PhysicsScene.AddPrimShape( Name, Shape, - new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y, - AbsolutePosition.Z), + new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z), new PhysicsVector(Scale.X, Scale.Y, Scale.Z), - new Quaternion(RotationOffset.W, RotationOffset.X, - RotationOffset.Y, RotationOffset.Z), usePhysics); + RotationOffset, + usePhysics); if (PhysActor != null) { @@ -3175,17 +3099,17 @@ namespace OpenSim.Region.Environment.Scenes if (IsTemporary) { - AddFlag(LLObject.ObjectFlags.TemporaryOnRez); + AddFlag(PrimFlags.TemporaryOnRez); } else { - RemFlag(LLObject.ObjectFlags.TemporaryOnRez); + RemFlag(PrimFlags.TemporaryOnRez); } // System.Console.WriteLine("Update: PHY:" + UsePhysics.ToString() + ", T:" + IsTemporary.ToString() + ", PHA:" + IsPhantom.ToString() + " S:" + CastsShadows.ToString()); ScheduleFullUpdate(); } - public void UpdateRotation(LLQuaternion rot) + public void UpdateRotation(Quaternion rot) { if ((rot.X != RotationOffset.X) || (rot.Y != RotationOffset.Y) || @@ -3193,7 +3117,7 @@ namespace OpenSim.Region.Environment.Scenes (rot.W != RotationOffset.W)) { //StoreUndoState(); - RotationOffset = new LLQuaternion(rot.X, rot.Y, rot.Z, rot.W); + RotationOffset = rot; ParentGroup.HasGroupChanged = true; ScheduleTerseUpdate(); } @@ -3235,9 +3159,9 @@ namespace OpenSim.Region.Environment.Scenes // Added to handle bug in libsecondlife's TextureEntry.ToBytes() // not handling RGBA properly. Cycles through, and "fixes" the color // info - public void UpdateTexture(LLObject.TextureEntry tex) + public void UpdateTexture(Primitive.TextureEntry tex) { - //LLColor tmpcolor; + //Color4 tmpcolor; //for (uint i = 0; i < 32; i++) //{ // if (tex.FaceTextures[i] != null) @@ -3291,17 +3215,17 @@ namespace OpenSim.Region.Environment.Scenes ((AggregateScriptEvents & scriptEvents.touch_start) != 0) ) { - objectflagupdate |= (uint) LLObject.ObjectFlags.Touch; + objectflagupdate |= (uint) PrimFlags.Touch; } if ((AggregateScriptEvents & scriptEvents.money) != 0) { - objectflagupdate |= (uint) LLObject.ObjectFlags.Money; + objectflagupdate |= (uint) PrimFlags.Money; } if (AllowedDrop) { - objectflagupdate |= (uint) LLObject.ObjectFlags.AllowInventoryDrop; + objectflagupdate |= (uint) PrimFlags.AllowInventoryDrop; } if ( @@ -3326,7 +3250,7 @@ namespace OpenSim.Region.Environment.Scenes PhysActor.OnCollisionUpdate -= PhysicsCollision; } } - if ((GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Scripted) != 0) + if ((GetEffectiveObjectFlags() & (uint)PrimFlags.Scripted) != 0) { m_parentGroup.Scene.EventManager.OnScriptTimerEvent += handleTimerAccounting; } @@ -3335,7 +3259,7 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.Scene.EventManager.OnScriptTimerEvent -= handleTimerAccounting; } - LocalFlags=(LLObject.ObjectFlags)objectflagupdate; + LocalFlags=(PrimFlags)objectflagupdate; if (m_parentGroup != null && m_parentGroup.RootPart == this) m_parentGroup.aggregateScriptEvents(); @@ -3343,7 +3267,7 @@ namespace OpenSim.Region.Environment.Scenes ScheduleFullUpdate(); } - public int registerTargetWaypoint(LLVector3 target, float tolerance) + public int registerTargetWaypoint(Vector3 target, float tolerance) { if (m_parentGroup != null) { @@ -3360,11 +3284,11 @@ namespace OpenSim.Region.Environment.Scenes } } - public void SetCameraAtOffset(LLVector3 v) { + public void SetCameraAtOffset(Vector3 v) { m_cameraAtOffset = v; } - public void SetCameraEyeOffset(LLVector3 v) { + public void SetCameraEyeOffset(Vector3 v) { m_cameraEyeOffset = v; } @@ -3372,11 +3296,11 @@ namespace OpenSim.Region.Environment.Scenes m_forceMouselook = force; } - public LLVector3 GetCameraAtOffset() { + public Vector3 GetCameraAtOffset() { return m_cameraAtOffset; } - public LLVector3 GetCameraEyeOffset() { + public Vector3 GetCameraEyeOffset() { return m_cameraEyeOffset; } diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 16946137bb..e51f1be318 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -30,9 +30,8 @@ using System.Collections.Generic; using System.Reflection; using System.Runtime.Serialization; using System.Security.Permissions; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -60,7 +59,7 @@ namespace OpenSim.Region.Environment.Scenes struct ScriptControllers { - public LLUUID itemID; + public UUID itemID; public uint objID; public ScriptControlled ignoreControls; public ScriptControlled eventControls; @@ -78,9 +77,9 @@ namespace OpenSim.Region.Environment.Scenes public static byte[] DefaultTexture; - public LLUUID currentParcelUUID = LLUUID.Zero; + public UUID currentParcelUUID = UUID.Zero; private AnimationSet m_animations = new AnimationSet(); - private Dictionary scriptedcontrols = new Dictionary(); + private Dictionary scriptedcontrols = new Dictionary(); private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO; private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO; private SceneObjectGroup proxyObjectGroup = null; @@ -94,11 +93,11 @@ namespace OpenSim.Region.Environment.Scenes private readonly List m_forcesList = new List(); private short m_updateCount = 0; private uint m_requestedSitTargetID = 0; - private LLUUID m_requestedSitTargetUUID = LLUUID.Zero; + private UUID m_requestedSitTargetUUID = UUID.Zero; - private LLVector3 m_requestedSitOffset = new LLVector3(); + private Vector3 m_requestedSitOffset = new Vector3(); - private LLVector3 m_LastFinitePos = new LLVector3(); + private Vector3 m_LastFinitePos = new Vector3(); private float m_sitAvatarHeight = 2.0f; @@ -108,14 +107,14 @@ namespace OpenSim.Region.Environment.Scenes // with varying parameters for sit target location, prim size, prim // rotation, prim cut, prim twist, prim taper, and prim shear. See mantis // issue #1716 - private static readonly LLVector3 m_sitTargetCorrectionOffset = new LLVector3(0.1f, 0.0f, 0.3f); + private static readonly Vector3 m_sitTargetCorrectionOffset = new Vector3(0.1f, 0.0f, 0.3f); private float m_godlevel = 0; private bool m_attachmentsTransported = false; private bool m_invulnerable = true; - private LLVector3 m_LastChildAgentUpdatePosition = new LLVector3(); + private Vector3 m_LastChildAgentUpdatePosition = new Vector3(); private int m_perfMonMS = 0; @@ -132,7 +131,7 @@ namespace OpenSim.Region.Environment.Scenes private bool m_newCoarseLocations = true; private float m_health = 100f; - private LLVector3 m_lastVelocity = LLVector3.Zero; + private Vector3 m_lastVelocity = Vector3.Zero; // Default AV Height private float m_avHeight = 127.0f; @@ -141,25 +140,25 @@ namespace OpenSim.Region.Environment.Scenes protected ulong crossingFromRegion = 0; private readonly Vector3[] Dir_Vectors = new Vector3[6]; - private LLVector3 lastPhysPos = new LLVector3(); + private Vector3 lastPhysPos = Vector3.Zero; // Position of agent's camera in world (region cordinates) - protected Vector3 m_CameraCenter = new Vector3(0, 0, 0); + protected Vector3 m_CameraCenter = Vector3.Zero; // 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_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 Vector3 m_CameraAtAxis = Vector3.Zero; + protected Vector3 m_CameraLeftAxis = Vector3.Zero; + protected Vector3 m_CameraUpAxis = Vector3.Zero; + private uint m_AgentControlFlags = 0; + private Quaternion m_headrotation = Quaternion.Identity; + private byte m_state = 0; - //Reuse the LLVector3 instead of creating a new one on the UpdateMovement method - private LLVector3 movementvector = new LLVector3(); + //Reuse the Vector3 instead of creating a new one on the UpdateMovement method + private Vector3 movementvector = Vector3.Zero; private bool m_autopilotMoving = false; - private LLVector3 m_autoPilotTarget = LLVector3.Zero; + private Vector3 m_autoPilotTarget = Vector3.Zero; private bool m_sitAtAutoTarget = false; // Agent's Draw distance. @@ -189,12 +188,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// Position at which a significant movement was made /// - private LLVector3 posLastSignificantMove = new LLVector3(); + private Vector3 posLastSignificantMove = new Vector3(); private UpdateQueue m_partsUpdateQueue = new UpdateQueue(); private Queue m_pendingObjects = null; - private Dictionary m_updateTimes = new Dictionary(); + private Dictionary m_updateTimes = new Dictionary(); #region Properties @@ -282,12 +281,12 @@ namespace OpenSim.Region.Environment.Scenes set { m_controllingClient = value; } } - protected LLVector3 m_parentPosition = new LLVector3(); + protected Vector3 m_parentPosition = new Vector3(); /// /// Absolute position of this avatar in 'region cordinates' /// - public override LLVector3 AbsolutePosition + public override Vector3 AbsolutePosition { get { @@ -318,14 +317,14 @@ namespace OpenSim.Region.Environment.Scenes } m_pos = value; - m_parentPosition=new LLVector3(0, 0, 0); + m_parentPosition=new Vector3(0, 0, 0); } } /// /// Current Velocity of the avatar. /// - public override LLVector3 Velocity + public override Vector3 Velocity { get { @@ -486,7 +485,7 @@ namespace OpenSim.Region.Environment.Scenes // } } - public uint GenerateClientFlags(LLUUID ObjectID) + public uint GenerateClientFlags(UUID ObjectID) { return m_scene.ExternalChecks.ExternalChecksGenerateClientFlags(m_uuid, ObjectID); } @@ -609,7 +608,7 @@ namespace OpenSim.Region.Environment.Scenes /// This is called when an agent teleports into a region, or if an /// agent crosses into this region from a neighbor over the border /// - public void MakeRootAgent(LLVector3 pos, bool isFlying) + public void MakeRootAgent(Vector3 pos, bool isFlying) { m_scene.SetRootAgentScene(m_uuid); @@ -625,7 +624,7 @@ namespace OpenSim.Region.Environment.Scenes if (pos.X < 0 || pos.X > Constants.RegionSize || pos.Y < 0 || pos.Y > Constants.RegionSize || pos.Z < 0) { - LLVector3 emergencyPos = new LLVector3(128, 128, 128); + Vector3 emergencyPos = new Vector3(128, 128, 128); m_log.WarnFormat( "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", @@ -681,12 +680,12 @@ namespace OpenSim.Region.Environment.Scenes // "[SCENEPRESENCE]: Downgrading root agent {0}, {1} to a child agent in {2}", // Name, UUID, m_scene.RegionInfo.RegionName); - Velocity = new LLVector3(0, 0, 0); + Velocity = new Vector3(0, 0, 0); m_isChildAgent = true; m_scene.SwapRootAgentCount(true); RemoveFromPhysicalScene(); m_scene.EventManager.TriggerOnMakeChildAgent(this); - //this.Pos = new LLVector3(128, 128, 70); + //this.Pos = new Vector3(128, 128, 70); } /// @@ -708,10 +707,10 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void Teleport(LLVector3 pos) + public void Teleport(Vector3 pos) { RemoveFromPhysicalScene(); - Velocity = new LLVector3(0, 0, 0); + Velocity = new Vector3(0, 0, 0); AbsolutePosition = pos; AddToPhysicalScene(); SendTerseUpdateToAllClients(); @@ -735,11 +734,11 @@ namespace OpenSim.Region.Environment.Scenes if (m_avHeight != 127.0f) { - AbsolutePosition = AbsolutePosition + new LLVector3(0, 0, (m_avHeight / 6)); + AbsolutePosition = AbsolutePosition + new Vector3(0, 0, (m_avHeight / 6f)); } else { - AbsolutePosition = AbsolutePosition + new LLVector3(0, 0, (1.56f / 6)); + AbsolutePosition = AbsolutePosition + new Vector3(0, 0, (1.56f / 6f)); } TrySetMovementAnimation("LAND"); SendFullUpdateToAllClients(); @@ -788,10 +787,10 @@ namespace OpenSim.Region.Environment.Scenes /// public void CompleteMovement() { - LLVector3 look = Velocity; + Vector3 look = Velocity; if ((look.X == 0) && (look.Y == 0) && (look.Z == 0)) { - look = new LLVector3(0.99f, 0.042f, 0); + look = new Vector3(0.99f, 0.042f, 0); } m_controllingClient.MoveAgentIntoRegion(m_regionInfo, AbsolutePosition, look); @@ -846,7 +845,7 @@ 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 == (byte)1 && land.landData.userLocation != Vector3.Zero) //{ // agent.startpos = land.landData.userLocation; //} @@ -855,27 +854,17 @@ namespace OpenSim.Region.Environment.Scenes m_perfMonMS = System.Environment.TickCount; uint flags = agentData.ControlFlags; - LLQuaternion bodyRotation = agentData.BodyRotation; + Quaternion bodyRotation = agentData.BodyRotation; // Camera location in world. We'll need to raytrace // from this location from time to time. - m_CameraCenter.x = agentData.CameraCenter.X; - m_CameraCenter.y = agentData.CameraCenter.Y; - m_CameraCenter.z = agentData.CameraCenter.Z; + m_CameraCenter = agentData.CameraCenter; // Use these three vectors to figure out what the agent is looking at // Convert it to a Matrix and/or Quaternion - m_CameraAtAxis.x = agentData.CameraAtAxis.X; - m_CameraAtAxis.y = agentData.CameraAtAxis.Y; - m_CameraAtAxis.z = agentData.CameraAtAxis.Z; - - m_CameraLeftAxis.x = agentData.CameraLeftAxis.X; - m_CameraLeftAxis.y = agentData.CameraLeftAxis.Y; - m_CameraLeftAxis.z = agentData.CameraLeftAxis.Z; - - m_CameraUpAxis.x = agentData.CameraUpAxis.X; - m_CameraUpAxis.y = agentData.CameraUpAxis.Y; - m_CameraUpAxis.z = agentData.CameraUpAxis.Z; + m_CameraAtAxis = agentData.CameraAtAxis; + m_CameraLeftAxis = agentData.CameraLeftAxis; + m_CameraUpAxis = agentData.CameraUpAxis; // The Agent's Draw distance setting m_DrawDistance = agentData.Far; @@ -923,7 +912,7 @@ namespace OpenSim.Region.Environment.Scenes bool update_rotation = false; bool DCFlagKeyPressed = false; Vector3 agent_control_v3 = new Vector3(0, 0, 0); - Quaternion q = new Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); + Quaternion q = bodyRotation; if (PhysicsActor != null) { bool oldflying = PhysicsActor.Flying; @@ -1005,7 +994,7 @@ namespace OpenSim.Region.Environment.Scenes m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); } - public void DoAutoPilot(uint not_used, LLVector3 Pos, IClientAPI remote_client) + public void DoAutoPilot(uint not_used, Vector3 Pos, IClientAPI remote_client) { m_autopilotMoving = true; m_autoPilotTarget = Pos; @@ -1014,17 +1003,17 @@ namespace OpenSim.Region.Environment.Scenes //proxy.PCode = (byte)PCode.ParticleSystem; uint nextUUID = m_scene.NextLocalId; - proxyObjectGroup = new SceneObjectGroup(m_scene, m_scene.RegionInfo.RegionHandle, UUID, nextUUID, Pos, new LLQuaternion(Rotation.x, Rotation.y, Rotation.z, Rotation.w), proxy); + proxyObjectGroup = new SceneObjectGroup(m_scene, m_scene.RegionInfo.RegionHandle, UUID, nextUUID, Pos, Rotation, proxy); if (proxyObjectGroup != null) { proxyObjectGroup.SendGroupFullUpdate(); - remote_client.SendSitResponse(proxyObjectGroup.UUID, LLVector3.Zero, LLQuaternion.Identity, true, LLVector3.Zero, LLVector3.Zero, false); + remote_client.SendSitResponse(proxyObjectGroup.UUID, Vector3.Zero, Quaternion.Identity, true, Vector3.Zero, Vector3.Zero, false); m_scene.DeleteSceneObject(proxyObjectGroup); } else { m_autopilotMoving = false; - m_autoPilotTarget = LLVector3.Zero; + m_autoPilotTarget = Vector3.Zero; ControllingClient.SendAlertMessage("Autopilot cancelled"); } @@ -1041,13 +1030,13 @@ namespace OpenSim.Region.Environment.Scenes if (part != null) { AbsolutePosition = part.AbsolutePosition; - Velocity = new LLVector3(0, 0, 0); + Velocity = new Vector3(0, 0, 0); SendFullUpdateToAllClients(); //HandleAgentSit(ControllingClient, m_requestedSitTargetUUID); } - //ControllingClient.SendSitResponse(m_requestedSitTargetID, m_requestedSitOffset, LLQuaternion.Identity, false, LLVector3.Zero, LLVector3.Zero, false); - m_requestedSitTargetUUID = LLUUID.Zero; + //ControllingClient.SendSitResponse(m_requestedSitTargetID, m_requestedSitOffset, Quaternion.Identity, false, Vector3.Zero, Vector3.Zero, false); + m_requestedSitTargetUUID = UUID.Zero; } else { @@ -1057,15 +1046,15 @@ namespace OpenSim.Region.Environment.Scenes //proxy.PCode = (byte)PCode.ParticleSystem; ////uint nextUUID = m_scene.NextLocalId; - //proxyObjectGroup = new SceneObjectGroup(m_scene, m_scene.RegionInfo.RegionHandle, UUID, nextUUID, m_autoPilotTarget, LLQuaternion.Identity, proxy); + //proxyObjectGroup = new SceneObjectGroup(m_scene, m_scene.RegionInfo.RegionHandle, UUID, nextUUID, m_autoPilotTarget, Quaternion.Identity, proxy); //if (proxyObjectGroup != null) //{ //proxyObjectGroup.SendGroupFullUpdate(); - //ControllingClient.SendSitResponse(LLUUID.Zero, m_autoPilotTarget, LLQuaternion.Identity, true, LLVector3.Zero, LLVector3.Zero, false); + //ControllingClient.SendSitResponse(UUID.Zero, m_autoPilotTarget, Quaternion.Identity, true, Vector3.Zero, Vector3.Zero, false); //m_scene.DeleteSceneObject(proxyObjectGroup); //} } - m_autoPilotTarget = LLVector3.Zero; + m_autoPilotTarget = Vector3.Zero; m_autopilotMoving = false; } } @@ -1082,7 +1071,7 @@ namespace OpenSim.Region.Environment.Scenes { // Reset sit target. if (part.GetAvatarOnSitTarget() == UUID) - part.SetAvatarOnSitTarget(LLUUID.Zero); + part.SetAvatarOnSitTarget(UUID.Zero); m_parentPosition = part.GetWorldPosition(); } @@ -1092,8 +1081,8 @@ namespace OpenSim.Region.Environment.Scenes AddToPhysicalScene(); } - m_pos += m_parentPosition + new LLVector3(0.0f, 0.0f, 2.0f*m_sitAvatarHeight); - m_parentPosition = new LLVector3(); + m_pos += m_parentPosition + new Vector3(0.0f, 0.0f, 2.0f*m_sitAvatarHeight); + m_parentPosition = new Vector3(); m_parentID = 0; SendFullUpdateToAllClients(); @@ -1107,7 +1096,7 @@ namespace OpenSim.Region.Environment.Scenes TrySetMovementAnimation("STAND"); } - private SceneObjectPart FindNextAvailableSitTarget(LLUUID targetID) + private SceneObjectPart FindNextAvailableSitTarget(UUID targetID) { SceneObjectPart targetPart = m_scene.GetSceneObjectPart(targetID); if (targetPart == null) @@ -1133,12 +1122,12 @@ namespace OpenSim.Region.Environment.Scenes // Is a sit target available? Vector3 avSitOffSet = part.SitTargetPosition; Quaternion avSitOrientation = part.SitTargetOrientation; - LLUUID avOnTargetAlready = part.GetAvatarOnSitTarget(); + UUID avOnTargetAlready = part.GetAvatarOnSitTarget(); - bool SitTargetUnOccupied = (!(avOnTargetAlready != LLUUID.Zero)); + bool SitTargetUnOccupied = (!(avOnTargetAlready != UUID.Zero)); bool SitTargetisSet = - (!(avSitOffSet.x == 0 && avSitOffSet.y == 0 && avSitOffSet.z == 0 && avSitOrientation.w == 0 && - avSitOrientation.x == 0 && avSitOrientation.y == 0 && avSitOrientation.z == 1)); + (!(avSitOffSet.X == 0f && avSitOffSet.Y == 0f && avSitOffSet.Z == 0f && avSitOrientation.W == 0f && + avSitOrientation.X == 0f && avSitOrientation.Y == 0f && avSitOrientation.Z == 1f)); if (SitTargetisSet && SitTargetUnOccupied) { @@ -1151,13 +1140,13 @@ namespace OpenSim.Region.Environment.Scenes return targetPart; } - private void SendSitResponse(IClientAPI remoteClient, LLUUID targetID, LLVector3 offset) + private void SendSitResponse(IClientAPI remoteClient, UUID targetID, Vector3 offset) { bool autopilot = true; - LLVector3 pos = new LLVector3(); - LLQuaternion sitOrientation = new LLQuaternion(0, 0, 0, 1); - LLVector3 cameraEyeOffset = LLVector3.Zero; - LLVector3 cameraAtOffset = LLVector3.Zero; + Vector3 pos = new Vector3(); + Quaternion sitOrientation = Quaternion.Identity; + Vector3 cameraEyeOffset = Vector3.Zero; + Vector3 cameraAtOffset = Vector3.Zero; bool forceMouselook = false; //SceneObjectPart part = m_scene.GetSceneObjectPart(targetID); @@ -1170,19 +1159,18 @@ namespace OpenSim.Region.Environment.Scenes // Is a sit target available? Vector3 avSitOffSet = part.SitTargetPosition; Quaternion avSitOrientation = part.SitTargetOrientation; - LLUUID avOnTargetAlready = part.GetAvatarOnSitTarget(); + UUID avOnTargetAlready = part.GetAvatarOnSitTarget(); - bool SitTargetUnOccupied = (!(avOnTargetAlready != LLUUID.Zero)); + bool SitTargetUnOccupied = (!(avOnTargetAlready != UUID.Zero)); bool SitTargetisSet = - (!(avSitOffSet.x == 0 && avSitOffSet.y == 0 && avSitOffSet.z == 0 && avSitOrientation.w == 0 && - avSitOrientation.x == 0 && avSitOrientation.y == 0 && avSitOrientation.z == 1)); + (!(avSitOffSet.X == 0f && avSitOffSet.Y == 0f && avSitOffSet.Z == 0f && avSitOrientation.W == 0f && + avSitOrientation.X == 0f && avSitOrientation.Y == 0f && avSitOrientation.Z == 1f)); if (SitTargetisSet && SitTargetUnOccupied) { part.SetAvatarOnSitTarget(UUID); - offset = new LLVector3(avSitOffSet.x, avSitOffSet.y, avSitOffSet.z); - sitOrientation = - new LLQuaternion(avSitOrientation.x, avSitOrientation.y, avSitOrientation.z, avSitOrientation.w); + offset = new Vector3(avSitOffSet.X, avSitOffSet.Y, avSitOffSet.Z); + sitOrientation = avSitOrientation; autopilot = false; } @@ -1205,7 +1193,7 @@ namespace OpenSim.Region.Environment.Scenes autopilot = false; RemoveFromPhysicalScene(); - AbsolutePosition = pos + new LLVector3(0.0f, 0.0f, m_sitAvatarHeight); + AbsolutePosition = pos + new Vector3(0.0f, 0.0f, m_sitAvatarHeight); } } else @@ -1232,7 +1220,7 @@ namespace OpenSim.Region.Environment.Scenes HandleAgentSit(remoteClient, UUID); } - public void HandleAgentRequestSit(IClientAPI remoteClient, LLUUID agentID, LLUUID targetID, LLVector3 offset) + public void HandleAgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset) { if (m_parentID != 0) { @@ -1254,7 +1242,7 @@ namespace OpenSim.Region.Environment.Scenes SendSitResponse(remoteClient, targetID, offset); } - public void HandleAgentSit(IClientAPI remoteClient, LLUUID agentID) + public void HandleAgentSit(IClientAPI remoteClient, UUID agentID) { SceneObjectPart part = m_scene.GetSceneObjectPart(m_requestedSitTargetID); @@ -1267,12 +1255,12 @@ namespace OpenSim.Region.Environment.Scenes Vector3 sitTargetPos = part.SitTargetPosition; Quaternion sitTargetOrient = part.SitTargetOrientation; - //Quaternion vq = new Quaternion(sitTargetPos.x, sitTargetPos.y+0.2f, sitTargetPos.z+0.2f, 0); - //Quaternion nq = new Quaternion(sitTargetOrient.w, -sitTargetOrient.x, -sitTargetOrient.y, -sitTargetOrient.z); + //Quaternion vq = new Quaternion(sitTargetPos.X, sitTargetPos.Y+0.2f, sitTargetPos.Z+0.2f, 0); + //Quaternion nq = new Quaternion(-sitTargetOrient.X, -sitTargetOrient.Y, -sitTargetOrient.Z, sitTargetOrient.w); //Quaternion result = (sitTargetOrient * vq) * nq; - m_pos = new LLVector3(sitTargetPos.x, sitTargetPos.y, sitTargetPos.z); + m_pos = new Vector3(sitTargetPos.X, sitTargetPos.Y, sitTargetPos.Z); m_pos += m_sitTargetCorrectionOffset; m_bodyRot = sitTargetOrient; //Rotation = sitTargetOrient; @@ -1293,7 +1281,7 @@ namespace OpenSim.Region.Environment.Scenes } m_parentID = m_requestedSitTargetID; - Velocity = new LLVector3(0, 0, 0); + Velocity = new Vector3(0, 0, 0); RemoveFromPhysicalScene(); TrySetMovementAnimation("SIT"); @@ -1317,7 +1305,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void AddAnimation(LLUUID animID) + public void AddAnimation(UUID animID) { if (m_isChildAgent) return; @@ -1333,14 +1321,14 @@ namespace OpenSim.Region.Environment.Scenes if (m_isChildAgent) return; - LLUUID animID = m_controllingClient.GetDefaultAnimation(name); - if (animID == LLUUID.Zero) + UUID animID = m_controllingClient.GetDefaultAnimation(name); + if (animID == UUID.Zero) return; AddAnimation(animID); } - public void RemoveAnimation(LLUUID animID) + public void RemoveAnimation(UUID animID) { if (m_isChildAgent) return; @@ -1356,27 +1344,27 @@ namespace OpenSim.Region.Environment.Scenes if (m_isChildAgent) return; - LLUUID animID = m_controllingClient.GetDefaultAnimation(name); - if (animID == LLUUID.Zero) + UUID animID = m_controllingClient.GetDefaultAnimation(name); + if (animID == UUID.Zero) return; RemoveAnimation(animID); } - public LLUUID[] GetAnimationArray() + public UUID[] GetAnimationArray() { - LLUUID[] animIDs; + UUID[] animIDs; int[] sequenceNums; m_animations.GetArrays( out animIDs, out sequenceNums ); return animIDs; } - public void HandleStartAnim(IClientAPI remoteClient, LLUUID animID) + public void HandleStartAnim(IClientAPI remoteClient, UUID animID) { AddAnimation(animID); } - public void HandleStopAnim(IClientAPI remoteClient, LLUUID animID) + public void HandleStopAnim(IClientAPI remoteClient, UUID animID) { RemoveAnimation(animID); } @@ -1385,7 +1373,7 @@ namespace OpenSim.Region.Environment.Scenes /// The movement animation is reserved for "main" animations /// that are mutually exclusive, e.g. flying and sitting. /// - protected void SetMovementAnimation(LLUUID animID) + protected void SetMovementAnimation(UUID animID) { if (m_animations.SetDefaultAnimation(animID, m_controllingClient.NextAnimationSequenceNumber)) { @@ -1494,10 +1482,10 @@ namespace OpenSim.Region.Environment.Scenes m_rotation = rotation; NewForce newVelocity = new NewForce(); - Vector3 direc = rotation*vec; + Vector3 direc = vec * rotation; direc.Normalize(); - direc *= 0.03f*128f; + direc *= 0.03f * 128f; if (m_physicsActor.Flying) { direc *= 4; @@ -1517,9 +1505,9 @@ namespace OpenSim.Region.Environment.Scenes { if (!m_physicsActor.Flying && m_physicsActor.IsColliding) { - if (direc.z > 2.0f) + if (direc.Z > 2.0f) { - direc.z *= 3; + direc.Z *= 3; // TODO: PreJump and jump happen too quickly. Many times prejump gets ignored. TrySetMovementAnimation("PREJUMP"); @@ -1528,9 +1516,9 @@ namespace OpenSim.Region.Environment.Scenes } } - newVelocity.X = direc.x; - newVelocity.Y = direc.y; - newVelocity.Z = direc.z; + newVelocity.X = direc.X; + newVelocity.Y = direc.Y; + newVelocity.Z = direc.Z; m_forcesList.Add(newVelocity); m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); @@ -1595,11 +1583,11 @@ namespace OpenSim.Region.Environment.Scenes { m_perfMonMS = System.Environment.TickCount; - 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), - new LLVector3(vel.X, vel.Y, vel.Z), rot); + Vector3 pos = m_pos; + Vector3 vel = Velocity; + Quaternion rot = m_bodyRot; + remoteClient.SendAvatarTerseUpdate(m_regionHandle, (ushort)(m_scene.TimeDilation * (float)ushort.MaxValue), LocalId, new Vector3(pos.X, pos.Y, pos.Z), + new Vector3(vel.X, vel.Y, vel.Z), rot); m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); m_scene.AddAgentUpdates(1); @@ -1625,7 +1613,7 @@ namespace OpenSim.Region.Environment.Scenes { m_perfMonMS = System.Environment.TickCount; - List CoarseLocations = new List(); + List CoarseLocations = new List(); List avatars = m_scene.GetAvatars(); for (int i = 0; i < avatars.Count; i++) { @@ -1660,8 +1648,8 @@ namespace OpenSim.Region.Environment.Scenes if (m_appearance.Texture == null) return; - // Note: because LLQuaternion is a struct, it can't be null - LLQuaternion rot = new LLQuaternion(m_bodyRot.x, m_bodyRot.y, m_bodyRot.z, m_bodyRot.w); + // Note: because Quaternion is a struct, it can't be null + Quaternion rot = m_bodyRot; remoteAvatar.m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_uuid, LocalId, m_pos, m_appearance.Texture.ToBytes(), @@ -1723,8 +1711,8 @@ namespace OpenSim.Region.Environment.Scenes // Needed for standalone m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance); - // Note: because LLQuaternion is a struct, it can't be null - LLQuaternion rot = new LLQuaternion(m_bodyRot.x, m_bodyRot.y, m_bodyRot.z, m_bodyRot.w); + // Note: because Quaternion is a struct, it can't be null + Quaternion rot = m_bodyRot; m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_uuid, LocalId, m_pos, m_appearance.Texture.ToBytes(), m_parentID, rot); @@ -1813,7 +1801,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void SendAnimPack(LLUUID[] animations, int[] seqs) + public void SendAnimPack(UUID[] animations, int[] seqs) { if (m_isChildAgent) return; @@ -1826,7 +1814,7 @@ namespace OpenSim.Region.Environment.Scenes { if (m_isChildAgent) return; - LLUUID[] animIDs; + UUID[] animIDs; int[] sequenceNums; m_animations.GetArrays(out animIDs, out sequenceNums); @@ -1842,7 +1830,7 @@ namespace OpenSim.Region.Environment.Scenes if (m_isChildAgent) return; - LLUUID[] animIDs; + UUID[] animIDs; int[] sequenceNums; m_animations.GetArrays(out animIDs, out sequenceNums); @@ -1870,16 +1858,16 @@ namespace OpenSim.Region.Environment.Scenes if (Util.GetDistanceTo(AbsolutePosition,m_LastChildAgentUpdatePosition) > 32) { ChildAgentDataUpdate cadu = new ChildAgentDataUpdate(); - cadu.ActiveGroupID=LLUUID.Zero.UUID; - cadu.AgentID = UUID.UUID; + cadu.ActiveGroupID = UUID.Zero.Guid; + cadu.AgentID = UUID.Guid; cadu.alwaysrun = m_setAlwaysRun; cadu.AVHeight = m_avHeight; - LLVector3 tempCameraCenter = new LLVector3(m_CameraCenter.x, m_CameraCenter.y, m_CameraCenter.z); - cadu.cameraPosition = new sLLVector3(tempCameraCenter); + Vector3 tempCameraCenter = new Vector3(m_CameraCenter.X, m_CameraCenter.Y, m_CameraCenter.Z); + cadu.cameraPosition = tempCameraCenter; cadu.drawdistance = m_DrawDistance; cadu.godlevel = m_godlevel; cadu.GroupAccess = 0; - cadu.Position = new sLLVector3(AbsolutePosition); + cadu.Position = AbsolutePosition; cadu.regionHandle = m_scene.RegionInfo.RegionHandle; float multiplier = 1; int innacurateNeighbors = m_scene.GetInaccurateNeighborCount(); @@ -1899,7 +1887,7 @@ namespace OpenSim.Region.Environment.Scenes - cadu.Velocity = new sLLVector3(Velocity); + cadu.Velocity = Velocity; m_scene.SendOutChildAgentUpdates(cadu,this); m_LastChildAgentUpdatePosition.X = AbsolutePosition.X; m_LastChildAgentUpdatePosition.Y = AbsolutePosition.Y; @@ -1919,8 +1907,8 @@ namespace OpenSim.Region.Environment.Scenes if (IsChildAgent) return; - LLVector3 pos2 = AbsolutePosition; - LLVector3 vel = Velocity; + Vector3 pos2 = AbsolutePosition; + Vector3 vel = Velocity; float timeStep = 0.1f; pos2.X = pos2.X + (vel.X*timeStep); @@ -1946,8 +1934,8 @@ namespace OpenSim.Region.Environment.Scenes /// protected void CrossToNewRegion() { - LLVector3 pos = AbsolutePosition; - LLVector3 newpos = new LLVector3(pos.X, pos.Y, pos.Z); + Vector3 pos = AbsolutePosition; + Vector3 newpos = new Vector3(pos.X, pos.Y, pos.Z); uint neighbourx = m_regionInfo.RegionLocX; uint neighboury = m_regionInfo.RegionLocY; @@ -1979,7 +1967,7 @@ namespace OpenSim.Region.Environment.Scenes newpos.Y = enterDistance; } - LLVector3 vel = m_velocity; + Vector3 vel = m_velocity; ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * Constants.RegionSize), (uint)(neighboury * Constants.RegionSize)); SimpleRegionInfo neighbourRegion = m_scene.RequestNeighbouringRegionInfo(neighbourHandle); if (neighbourRegion != null && ValidateAttachments()) @@ -2023,7 +2011,7 @@ namespace OpenSim.Region.Environment.Scenes CrossAttachmentsIntoNewRegion(neighbourHandle); - m_scene.SendKillObject(m_localId); + m_scene.SendKiPrimitive(m_localId); m_scene.NotifyMyCoarseLocationChange(); // the user may change their profile information in other region, @@ -2047,7 +2035,7 @@ namespace OpenSim.Region.Environment.Scenes /// 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) + public void GrantGodlikePowers(UUID agentID, UUID sessionID, UUID token, bool godStatus) { if (godStatus) { @@ -2082,11 +2070,11 @@ namespace OpenSim.Region.Environment.Scenes 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); + m_pos = new Vector3(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); + new Vector3(cAgentData.cameraPosition.X, cAgentData.cameraPosition.Y, cAgentData.cameraPosition.Z); m_godlevel = cAgentData.godlevel; @@ -2147,7 +2135,7 @@ namespace OpenSim.Region.Environment.Scenes static ScenePresence() { - LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTexture(); + Primitive.TextureEntry textu = AvatarAppearance.GetDefaultTexture(); DefaultTexture = textu.ToBytes(); } @@ -2166,13 +2154,13 @@ namespace OpenSim.Region.Environment.Scenes [Serializable] public class ScenePartUpdate : ISerializable { - public LLUUID FullID; + public UUID FullID; public uint LastFullUpdateTime; public uint LastTerseUpdateTime; public ScenePartUpdate() { - FullID = LLUUID.Zero; + FullID = UUID.Zero; LastFullUpdateTime = 0; LastTerseUpdateTime = 0; } @@ -2186,7 +2174,7 @@ namespace OpenSim.Region.Environment.Scenes throw new ArgumentNullException("info"); } - FullID = new LLUUID((Guid)info.GetValue("FullID", typeof(Guid))); + FullID = new UUID((Guid)info.GetValue("FullID", typeof(Guid))); LastFullUpdateTime = (uint)info.GetValue("LastFullUpdateTime", typeof(uint)); LastTerseUpdateTime = (uint)info.GetValue("LastTerseUpdateTime", typeof(uint)); @@ -2203,7 +2191,7 @@ namespace OpenSim.Region.Environment.Scenes throw new ArgumentNullException("info"); } - info.AddValue("FullID", FullID.UUID); + info.AddValue("FullID", FullID.Guid); info.AddValue("LastFullUpdateTime", LastFullUpdateTime); info.AddValue("LastTerseUpdateTime", LastTerseUpdateTime); } @@ -2333,7 +2321,7 @@ namespace OpenSim.Region.Environment.Scenes */ if (DefaultTexture == null) { - LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTexture(); + Primitive.TextureEntry textu = AvatarAppearance.GetDefaultTexture(); DefaultTexture = textu.ToBytes(); } } @@ -2421,8 +2409,8 @@ namespace OpenSim.Region.Environment.Scenes Animations = new AvatarAnimations(); Animations.LoadAnims(); - m_animations = new List(); - m_animations.Add(Animations.AnimsLLUUID["STAND"]); + m_animations = new List(); + m_animations.Add(Animations.AnimsUUID["STAND"]); m_animationSeqs.Add(m_controllingClient.NextAnimationSequenceNumber); SetDirectionVectors(); @@ -2447,7 +2435,7 @@ namespace OpenSim.Region.Environment.Scenes */ if (DefaultTexture == null) { - LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTexture(); + Primitive.TextureEntry textu = AvatarAppearance.GetDefaultTexture(); DefaultTexture = textu.ToBytes(); } @@ -2459,7 +2447,7 @@ namespace OpenSim.Region.Environment.Scenes m_requestedSitTargetID = (uint)info.GetValue("m_requestedSitTargetID", typeof(uint)); m_requestedSitOffset - = new LLVector3( + = new Vector3( (float)info.GetValue("m_requestedSitOffset.X", typeof(float)), (float)info.GetValue("m_requestedSitOffset.Y", typeof(float)), (float)info.GetValue("m_requestedSitOffset.Z", typeof(float))); @@ -2470,10 +2458,10 @@ namespace OpenSim.Region.Environment.Scenes 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))); + (float)info.GetValue("m_bodyRot.X", typeof(float)), + (float)info.GetValue("m_bodyRot.Y", typeof(float)), + (float)info.GetValue("m_bodyRot.Z", typeof(float)), + (float)info.GetValue("m_bodyRot.W", typeof(float))); IsRestrictedToRegion = (bool)info.GetValue("IsRestrictedToRegion", typeof(bool)); m_newForce = (bool)info.GetValue("m_newForce", typeof(bool)); @@ -2493,7 +2481,7 @@ namespace OpenSim.Region.Environment.Scenes Dir_Vectors = Dir_Vectors_work2.ToArray(); lastPhysPos - = new LLVector3( + = new Vector3( (float)info.GetValue("lastPhysPos.X", typeof(float)), (float)info.GetValue("lastPhysPos.Y", typeof(float)), (float)info.GetValue("lastPhysPos.Z", typeof(float))); @@ -2527,7 +2515,7 @@ namespace OpenSim.Region.Environment.Scenes m_knownChildRegions = (List)info.GetValue("m_knownChildRegions", typeof(List)); posLastSignificantMove - = new LLVector3( + = new Vector3( (float)info.GetValue("posLastSignificantMove.X", typeof(float)), (float)info.GetValue("posLastSignificantMove.Y", typeof(float)), (float)info.GetValue("posLastSignificantMove.Z", typeof(float))); @@ -2540,14 +2528,14 @@ namespace OpenSim.Region.Environment.Scenes foreach (Guid id in updateTimes_work.Keys) { - m_updateTimes.Add(new LLUUID(id), updateTimes_work[id]); + m_updateTimes.Add(new UUID(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)), + m_parentPosition = new Vector3((float)info.GetValue("m_parentPosition.X", typeof(float)), (float)info.GetValue("m_parentPosition.Y", typeof(float)), (float)info.GetValue("m_parentPosition.Z", typeof(float))); @@ -2555,7 +2543,7 @@ namespace OpenSim.Region.Environment.Scenes m_parentID = (uint)info.GetValue("m_parentID", typeof(uint)); // for OpenSim_v0.5 - currentParcelUUID = new LLUUID((Guid)info.GetValue("currentParcelUUID", typeof(Guid))); + currentParcelUUID = new UUID((Guid)info.GetValue("currentParcelUUID", typeof(Guid))); lastKnownAllowedPosition = new Vector3( @@ -2566,7 +2554,7 @@ namespace OpenSim.Region.Environment.Scenes sentMessageAboutRestrictedParcelFlyingDown = (bool)info.GetValue("sentMessageAboutRestrictedParcelFlyingDown", typeof(bool)); m_LastChildAgentUpdatePosition - = new LLVector3( + = new Vector3( (float)info.GetValue("m_LastChildAgentUpdatePosition.X", typeof(float)), (float)info.GetValue("m_LastChildAgentUpdatePosition.Y", typeof(float)), (float)info.GetValue("m_LastChildAgentUpdatePosition.Z", typeof(float))); @@ -2575,11 +2563,11 @@ namespace OpenSim.Region.Environment.Scenes m_AgentControlFlags = (uint)info.GetValue("m_AgentControlFlags", typeof(uint)); m_headrotation - = new LLQuaternion( - (float)info.GetValue("m_headrotation.W", typeof(float)), + = new Quaternion( (float)info.GetValue("m_headrotation.X", typeof(float)), (float)info.GetValue("m_headrotation.Y", typeof(float)), - (float)info.GetValue("m_headrotation.Z", typeof(float))); + (float)info.GetValue("m_headrotation.Z", typeof(float)), + (float)info.GetValue("m_headrotation.W", typeof(float))); m_state = (byte)info.GetValue("m_state", typeof(byte)); @@ -2605,7 +2593,7 @@ namespace OpenSim.Region.Environment.Scenes info.AddValue("m_updateCount", m_updateCount); info.AddValue("m_requestedSitTargetID", m_requestedSitTargetID); - // LLVector3 + // Vector3 info.AddValue("m_requestedSitOffset.X", m_requestedSitOffset.X); info.AddValue("m_requestedSitOffset.Y", m_requestedSitOffset.Y); info.AddValue("m_requestedSitOffset.Z", m_requestedSitOffset.Z); @@ -2615,16 +2603,16 @@ namespace OpenSim.Region.Environment.Scenes 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("m_bodyRot.X", m_bodyRot.X); + info.AddValue("m_bodyRot.Y", m_bodyRot.Y); + info.AddValue("m_bodyRot.Z", m_bodyRot.Z); + info.AddValue("m_bodyRot.W", m_bodyRot.W); 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", false); + info.AddValue("m_gotAPrimitivesInScene", false); info.AddValue("m_avHeight", m_avHeight); // info.AddValue("m_regionInfo", m_regionInfo); @@ -2635,41 +2623,41 @@ namespace OpenSim.Region.Environment.Scenes foreach (Vector3 v3 in Dir_Vectors) { - Dir_Vectors_work.Add(new float[] { v3.x, v3.y, v3.z }); + Dir_Vectors_work.Add(new float[] { v3.X, v3.Y, v3.Z }); } info.AddValue("Dir_Vectors", Dir_Vectors_work); - // LLVector3 + // Vector3 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); + 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); + 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); + 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_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 + // Vector3 info.AddValue("posLastSignificantMove.X", posLastSignificantMove.X); info.AddValue("posLastSignificantMove.Y", posLastSignificantMove.Y); info.AddValue("posLastSignificantMove.Z", posLastSignificantMove.Z); @@ -2679,7 +2667,7 @@ namespace OpenSim.Region.Environment.Scenes /* Dictionary updateTimes_work = new Dictionary(); - foreach (LLUUID id in m_updateTimes.Keys) + foreach (UUID id in m_updateTimes.Keys) { updateTimes_work.Add(id.UUID, m_updateTimes[id]); } @@ -2699,11 +2687,11 @@ namespace OpenSim.Region.Environment.Scenes info.AddValue("m_parentID", m_parentID); // for OpenSim_v0.5 - info.AddValue("currentParcelUUID", currentParcelUUID.UUID); + info.AddValue("currentParcelUUID", currentParcelUUID.Guid); - info.AddValue("lastKnownAllowedPosition.X", lastKnownAllowedPosition.x); - info.AddValue("lastKnownAllowedPosition.Y", lastKnownAllowedPosition.y); - info.AddValue("lastKnownAllowedPosition.Z", lastKnownAllowedPosition.z); + info.AddValue("lastKnownAllowedPosition.X", lastKnownAllowedPosition.X); + info.AddValue("lastKnownAllowedPosition.Y", lastKnownAllowedPosition.Y); + info.AddValue("lastKnownAllowedPosition.Z", lastKnownAllowedPosition.Z); info.AddValue("sentMessageAboutRestrictedParcelFlyingDown", sentMessageAboutRestrictedParcelFlyingDown); @@ -2734,13 +2722,13 @@ namespace OpenSim.Region.Environment.Scenes } } - public void RegisterControlEventsToScript(int controls, int accept, int pass_on, uint Obj_localID, LLUUID Script_item_LLUUID) + public void RegisterControlEventsToScript(int controls, int accept, int pass_on, uint Obj_localID, UUID Script_item_UUID) { ScriptControllers obj = new ScriptControllers(); obj.ignoreControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = ScriptControlled.CONTROL_ZERO; - obj.itemID = Script_item_LLUUID; + obj.itemID = Script_item_UUID; obj.objID = Obj_localID; if (pass_on == 0 && accept == 0) { @@ -2766,27 +2754,27 @@ namespace OpenSim.Region.Environment.Scenes if (pass_on == 1 && accept == 0) { IgnoredControls &= ~(ScriptControlled)controls; - if (scriptedcontrols.ContainsKey(Script_item_LLUUID)) - scriptedcontrols.Remove(Script_item_LLUUID); + if (scriptedcontrols.ContainsKey(Script_item_UUID)) + scriptedcontrols.Remove(Script_item_UUID); } else { - if (scriptedcontrols.ContainsKey(Script_item_LLUUID)) + if (scriptedcontrols.ContainsKey(Script_item_UUID)) { - scriptedcontrols[Script_item_LLUUID] = obj; + scriptedcontrols[Script_item_UUID] = obj; } else { - scriptedcontrols.Add(Script_item_LLUUID, obj); + scriptedcontrols.Add(Script_item_UUID, obj); } } } ControllingClient.SendTakeControls(controls, pass_on == 1 ? true : false, true); } - public void HandleForceReleaseControls(IClientAPI remoteClient, LLUUID agentID) + public void HandleForceReleaseControls(IClientAPI remoteClient, UUID agentID) { IgnoredControls = ScriptControlled.CONTROL_ZERO; lock (scriptedcontrols) @@ -2796,13 +2784,13 @@ namespace OpenSim.Region.Environment.Scenes ControllingClient.SendTakeControls(int.MaxValue, false, false); } - public void UnRegisterControlEventsToScript(uint Obj_localID, LLUUID Script_item_LLUUID) + public void UnRegisterControlEventsToScript(uint Obj_localID, UUID Script_item_UUID) { lock (scriptedcontrols) { - if (scriptedcontrols.ContainsKey(Script_item_LLUUID)) + if (scriptedcontrols.ContainsKey(Script_item_UUID)) { - scriptedcontrols.Remove(Script_item_LLUUID); + scriptedcontrols.Remove(Script_item_UUID); IgnoredControls = ScriptControlled.CONTROL_ZERO; foreach (ScriptControllers scData in scriptedcontrols.Values) { @@ -2864,7 +2852,7 @@ namespace OpenSim.Region.Environment.Scenes { lock (scriptedcontrols) { - foreach (LLUUID scriptUUID in scriptedcontrols.Keys) + foreach (UUID scriptUUID in scriptedcontrols.Keys) { ScriptControllers scriptControlData = scriptedcontrols[scriptUUID]; ScriptControlled localHeld = allflags & scriptControlData.eventControls; // the flags interesting for us @@ -2916,14 +2904,14 @@ namespace OpenSim.Region.Environment.Scenes return flags; } - private void ItemReceived(LLUUID itemID) + private void ItemReceived(UUID itemID) { int attachpoint = m_appearance.GetAttachpoint(itemID); if (attachpoint == 0) return; - LLUUID asset = m_appearance.GetAttachedAsset(attachpoint); - if (asset == LLUUID.Zero) // We have just logged in + UUID asset = m_appearance.GetAttachedAsset(attachpoint); + if (asset == UUID.Zero) // We have just logged in { m_log.InfoFormat("[ATTACHMENT] Rez attachment {0}", itemID.ToString()); @@ -2947,7 +2935,7 @@ namespace OpenSim.Region.Environment.Scenes // Attach from world, if not already attached if (att.ParentGroup != null && !att.IsAttachment) - m_scene.AttachObject(ControllingClient, att.ParentGroup.LocalId, (uint)0, att.ParentGroup.GroupRotation, LLVector3.Zero); + m_scene.AttachObject(ControllingClient, att.ParentGroup.LocalId, (uint)0, att.ParentGroup.GroupRotation, Vector3.Zero); } } } diff --git a/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs b/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs index dbe2516438..152825fa46 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs @@ -25,8 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using Axiom.Math; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Scenes.Scripting { @@ -35,10 +34,10 @@ namespace OpenSim.Region.Environment.Scenes.Scripting string Name { get; set; } string Description { get; set; } - LLUUID UUID { get; } - LLUUID ObjectOwner { get; } - LLUUID ObjectCreator { get; } - LLVector3 AbsolutePosition { get; } + UUID UUID { get; } + UUID ObjectOwner { get; } + UUID ObjectCreator { get; } + Vector3 AbsolutePosition { get; } string SitName { get; set; } string TouchName { get; set; } diff --git a/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs b/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs index 4b1b56ae90..37f5d43ad9 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs @@ -26,14 +26,13 @@ */ using System; -using Axiom.Math; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Scenes.Scripting { public class NullScriptHost : IScriptHost { - private LLVector3 m_pos = new LLVector3(128, 128, 30); + private Vector3 m_pos = new Vector3(128, 128, 30); public string Name { @@ -59,22 +58,22 @@ namespace OpenSim.Region.Environment.Scenes.Scripting set { } } - public LLUUID UUID + public UUID UUID { - get { return LLUUID.Zero; } + get { return UUID.Zero; } } - public LLUUID ObjectOwner + public UUID ObjectOwner { - get { return LLUUID.Zero; } + get { return UUID.Zero; } } - public LLUUID ObjectCreator + public UUID ObjectCreator { - get { return LLUUID.Zero; } + get { return UUID.Zero; } } - public LLVector3 AbsolutePosition + public Vector3 AbsolutePosition { get { return m_pos; } } diff --git a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs index 0e551cb9ef..5f0f3167d5 100644 --- a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs +++ b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs @@ -27,7 +27,7 @@ using System; using System.Timers; -using libsecondlife.Packets; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Framework.Statistics; using OpenSim.Region.Environment.Interfaces; diff --git a/OpenSim/Region/Environment/Scenes/UndoState.cs b/OpenSim/Region/Environment/Scenes/UndoState.cs index fdbfa8c80a..d828d8dd9b 100644 --- a/OpenSim/Region/Environment/Scenes/UndoState.cs +++ b/OpenSim/Region/Environment/Scenes/UndoState.cs @@ -25,17 +25,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Environment.Scenes { public class UndoState { - public LLVector3 Position = LLVector3.Zero; - public LLVector3 Scale = LLVector3.Zero; - public LLQuaternion Rotation = LLQuaternion.Identity; + public Vector3 Position = Vector3.Zero; + public Vector3 Scale = Vector3.Zero; + public Quaternion Rotation = Quaternion.Identity; - public UndoState(LLVector3 pos, LLQuaternion rot, LLVector3 scale) + public UndoState(Vector3 pos, Quaternion rot, Vector3 scale) { Position = pos; Rotation = rot; diff --git a/OpenSim/Region/Environment/Types/UpdateQueue.cs b/OpenSim/Region/Environment/Types/UpdateQueue.cs index e9133acdb6..0c86df21ee 100644 --- a/OpenSim/Region/Environment/Types/UpdateQueue.cs +++ b/OpenSim/Region/Environment/Types/UpdateQueue.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Runtime.Serialization; using System.Security.Permissions; -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.Environment.Types @@ -39,7 +39,7 @@ namespace OpenSim.Region.Environment.Types { private Queue m_queue; - private List m_ids; + private List m_ids; private object m_syncObject = new object(); @@ -51,7 +51,7 @@ namespace OpenSim.Region.Environment.Types public UpdateQueue() { m_queue = new Queue(); - m_ids = new List(); + m_ids = new List(); } public void Clear() @@ -104,7 +104,7 @@ namespace OpenSim.Region.Environment.Types foreach (Guid guid in ids_work) { - m_ids.Add(new LLUUID(guid)); + m_ids.Add(new UUID(guid)); } //System.Console.WriteLine("UpdateQueue Deserialize END"); @@ -122,9 +122,9 @@ namespace OpenSim.Region.Environment.Types List ids_work = new List(); - foreach (LLUUID uuid in m_ids) + foreach (UUID uuid in m_ids) { - ids_work.Add(uuid.UUID); + ids_work.Add(uuid.Guid); } info.AddValue("m_queue", m_queue); diff --git a/OpenSim/Region/Examples/SimpleModule/ComplexObject.cs b/OpenSim/Region/Examples/SimpleModule/ComplexObject.cs index 16636e093c..c8c46249c8 100644 --- a/OpenSim/Region/Examples/SimpleModule/ComplexObject.cs +++ b/OpenSim/Region/Examples/SimpleModule/ComplexObject.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -33,7 +33,7 @@ namespace OpenSim.Region.Examples.SimpleModule { public class ComplexObject : SceneObjectGroup { - private readonly LLQuaternion m_rotationDirection; + private readonly Quaternion m_rotationDirection; protected override bool InSceneBackup { @@ -45,21 +45,21 @@ namespace OpenSim.Region.Examples.SimpleModule private class RotatingWheel : SceneObjectPart { - private readonly LLQuaternion m_rotationDirection; + private readonly Quaternion m_rotationDirection; public RotatingWheel() { } - public RotatingWheel(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID, - LLVector3 groupPosition, LLVector3 offsetPosition, LLQuaternion rotationDirection) + public RotatingWheel(ulong regionHandle, SceneObjectGroup parent, UUID ownerID, uint localID, + Vector3 groupPosition, Vector3 offsetPosition, Quaternion rotationDirection) : base( regionHandle, parent, ownerID, localID, PrimitiveBaseShape.Default, groupPosition, offsetPosition ) { m_rotationDirection = rotationDirection; - Flags |= LLObject.ObjectFlags.Touch; + Flags |= PrimFlags.Touch; } public override void UpdateMovement() @@ -79,55 +79,55 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public ComplexObject(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos) + public ComplexObject(Scene scene, ulong regionHandle, UUID ownerID, uint localID, Vector3 pos) : base(scene, regionHandle, ownerID, localID, pos, PrimitiveBaseShape.Default) { - m_rotationDirection = new LLQuaternion(0.05f, 0.1f, 0.15f); + m_rotationDirection = new Quaternion(0.05f, 0.1f, 0.15f); AddPart( - new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new LLVector3(0, 0, 0.75f), - new LLQuaternion(0.05f, 0, 0))); + new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new Vector3(0, 0, 0.75f), + new Quaternion(0.05f, 0, 0))); AddPart( - new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new LLVector3(0, 0, -0.75f), - new LLQuaternion(-0.05f, 0, 0))); + new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new Vector3(0, 0, -0.75f), + new Quaternion(-0.05f, 0, 0))); AddPart( - new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new LLVector3(0, 0.75f, 0), - new LLQuaternion(0.5f, 0, 0.05f))); + new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new Vector3(0, 0.75f, 0), + new Quaternion(0.5f, 0, 0.05f))); AddPart( - new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new LLVector3(0, -0.75f, 0), - new LLQuaternion(-0.5f, 0, -0.05f))); + new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new Vector3(0, -0.75f, 0), + new Quaternion(-0.5f, 0, -0.05f))); AddPart( - new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new LLVector3(0.75f, 0, 0), - new LLQuaternion(0, 0.5f, 0.05f))); + new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new Vector3(0.75f, 0, 0), + new Quaternion(0, 0.5f, 0.05f))); AddPart( - new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new LLVector3(-0.75f, 0, 0), - new LLQuaternion(0, -0.5f, -0.05f))); + new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new Vector3(-0.75f, 0, 0), + new Quaternion(0, -0.5f, -0.05f))); - RootPart.Flags |= LLObject.ObjectFlags.Touch; + RootPart.Flags |= PrimFlags.Touch; UpdateParentIDs(); } - public override void OnGrabPart(SceneObjectPart part, LLVector3 offsetPos, IClientAPI remoteClient) + public override void OnGrabPart(SceneObjectPart part, Vector3 offsetPos, IClientAPI remoteClient) { m_parts.Remove(part.UUID); - remoteClient.SendKillObject(m_regionHandle, part.LocalId); + remoteClient.SendKiPrimitive(m_regionHandle, part.LocalId); remoteClient.AddMoney(1); - remoteClient.SendChatMessage("Poof!", 1, AbsolutePosition, "Party Party", LLUUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully); + remoteClient.SendChatMessage("Poof!", 1, AbsolutePosition, "Party Party", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully); } - public override void OnGrabGroup(LLVector3 offsetPos, IClientAPI remoteClient) + public override void OnGrabGroup(Vector3 offsetPos, IClientAPI remoteClient) { if (m_parts.Count == 1) { m_parts.Remove(m_rootPart.UUID); m_scene.DeleteSceneObject(this); - remoteClient.SendKillObject(m_regionHandle, m_rootPart.LocalId); + remoteClient.SendKiPrimitive(m_regionHandle, m_rootPart.LocalId); remoteClient.AddMoney(50); - remoteClient.SendChatMessage("KABLAM!!!", 1, AbsolutePosition, "Groupie Groupie", LLUUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully); + remoteClient.SendChatMessage("KABLAM!!!", 1, AbsolutePosition, "Groupie Groupie", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully); } } } diff --git a/OpenSim/Region/Examples/SimpleModule/CpuCounterObject.cs b/OpenSim/Region/Examples/SimpleModule/CpuCounterObject.cs index e7d5db8bfd..126ccd3aa3 100644 --- a/OpenSim/Region/Examples/SimpleModule/CpuCounterObject.cs +++ b/OpenSim/Region/Examples/SimpleModule/CpuCounterObject.cs @@ -27,7 +27,7 @@ using System; using System.Diagnostics; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -45,7 +45,7 @@ namespace OpenSim.Region.Examples.SimpleModule private PerformanceCounter m_counter; - public CpuCounterObject(Scene world, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos) + public CpuCounterObject(Scene world, ulong regionHandle, UUID ownerID, uint localID, Vector3 pos) : base(world, regionHandle, ownerID, localID, pos, PrimitiveBaseShape.Default) { String objectName = "Processor"; @@ -58,7 +58,7 @@ namespace OpenSim.Region.Examples.SimpleModule public override void UpdateMovement() { float cpu = m_counter.NextValue()/40f; - LLVector3 size = new LLVector3(cpu, cpu, cpu); + Vector3 size = new Vector3(cpu, cpu, cpu); RootPart.Resize(size); diff --git a/OpenSim/Region/Examples/SimpleModule/FileSystemObject.cs b/OpenSim/Region/Examples/SimpleModule/FileSystemObject.cs index 34ed08621d..3b43c7a7df 100644 --- a/OpenSim/Region/Examples/SimpleModule/FileSystemObject.cs +++ b/OpenSim/Region/Examples/SimpleModule/FileSystemObject.cs @@ -26,7 +26,7 @@ */ using System.IO; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -34,8 +34,8 @@ namespace OpenSim.Region.Examples.SimpleModule { public class FileSystemObject : SceneObjectGroup { - public FileSystemObject(Scene world, FileInfo fileInfo, LLVector3 pos) - : base(world, world.RegionInfo.RegionHandle, LLUUID.Zero, world.NextLocalId, pos, PrimitiveBaseShape.Default) + public FileSystemObject(Scene world, FileInfo fileInfo, Vector3 pos) + : base(world, world.RegionInfo.RegionHandle, UUID.Zero, world.NextLocalId, pos, PrimitiveBaseShape.Default) { Text = fileInfo.Name; } diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 3ea518fffe..8f579bd5f8 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs @@ -28,8 +28,8 @@ using System; using System.Collections.Generic; using System.Net; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -39,7 +39,7 @@ namespace OpenSim.Region.Examples.SimpleModule { private uint movementFlag = 0; private short flyState = 0; - private LLQuaternion bodyDirection = LLQuaternion.Identity; + private Quaternion bodyDirection = Quaternion.Identity; private short count = 0; private short frame = 0; private Scene m_scene; @@ -117,7 +117,7 @@ namespace OpenSim.Region.Examples.SimpleModule public event UpdateVector OnUpdatePrimGroupScale; public event StatusChange OnChildAgentStatus; public event GenericCall2 OnStopMovement; - public event Action OnRemoveAvatar; + public event Action OnRemoveAvatar; public event CreateNewInventoryItem OnCreateNewInventoryItem; public event CreateInventoryFolder OnCreateNewInventoryFolder; @@ -216,37 +216,37 @@ namespace OpenSim.Region.Examples.SimpleModule #pragma warning restore 67 - private LLUUID myID = LLUUID.Random(); + private UUID myID = UUID.Random(); public MyNpcCharacter(Scene scene) { - // startPos = new LLVector3(128, (float)(Util.RandomClass.NextDouble()*100), 2); + // startPos = new Vector3(128, (float)(Util.RandomClass.NextDouble()*100), 2); m_scene = scene; m_scene.EventManager.OnFrame += Update; } - private LLVector3 startPos = new LLVector3(128, 128, 2); + private Vector3 startPos = new Vector3(128, 128, 2); - public virtual LLVector3 StartPos + public virtual Vector3 StartPos { get { return startPos; } set { } } - public virtual LLUUID AgentId + public virtual UUID AgentId { get { return myID; } } - public LLUUID SessionId + public UUID SessionId { - get { return LLUUID.Zero; } + get { return UUID.Zero; } } - public LLUUID SecureSessionId + public UUID SecureSessionId { - get { return LLUUID.Zero; } + get { return UUID.Zero; } } public virtual string FirstName @@ -272,9 +272,9 @@ namespace OpenSim.Region.Examples.SimpleModule set { } } - public LLUUID ActiveGroupId + public UUID ActiveGroupId { - get { return LLUUID.Zero; } + get { return UUID.Zero; } } public string ActiveGroupName @@ -287,10 +287,10 @@ namespace OpenSim.Region.Examples.SimpleModule get { return 0; } } - public ulong GetGroupPowers(LLUUID groupID) - { - return 0; - } + public ulong GetGroupPowers(UUID groupID) + { + return 0; + } public virtual int NextAnimationSequenceNumber { @@ -307,7 +307,7 @@ namespace OpenSim.Region.Examples.SimpleModule set { } } - public virtual void ActivateGesture(LLUUID assetId, LLUUID gestureId) + public virtual void ActivateGesture(UUID assetId, UUID gestureId) { } @@ -320,7 +320,7 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public virtual void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry) + public virtual void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry) { } @@ -336,12 +336,12 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public virtual void SendAgentDataUpdate(LLUUID agentid, LLUUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) + public virtual void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) { } - public virtual void SendKillObject(ulong regionHandle, uint localID) + public virtual void SendKiPrimitive(ulong regionHandle, uint localID) { } @@ -354,27 +354,27 @@ namespace OpenSim.Region.Examples.SimpleModule } - public virtual void SendAnimations(LLUUID[] animations, int[] seqs, LLUUID sourceAgentId) + public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId) { } - public virtual void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, - LLUUID fromAgentID, byte source, byte audible) + public virtual void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, + UUID fromAgentID, byte source, byte audible) { } - public virtual void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, - LLUUID fromAgentID, byte source, byte audible) + public virtual void SendChatMessage(byte[] message, byte type, Vector3 fromPos, string fromName, + UUID fromAgentID, byte source, byte audible) { } - public virtual void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, - LLUUID imSessionID, string fromName, byte dialog, uint timeStamp) + public virtual void SendInstantMessage(UUID fromAgent, UUID fromAgentSession, string message, UUID toAgent, + UUID imSessionID, string fromName, byte dialog, uint timeStamp) { } - public virtual void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, - LLUUID imSessionID, string fromName, byte dialog, uint timeStamp, + public virtual void SendInstantMessage(UUID fromAgent, UUID fromAgentSession, string message, UUID toAgent, + UUID imSessionID, string fromName, byte dialog, uint timeStamp, byte[] binaryBucket) { } @@ -390,7 +390,7 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public virtual void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look) + public virtual void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look) { } @@ -403,7 +403,7 @@ namespace OpenSim.Region.Examples.SimpleModule return new AgentCircuitData(); } - public virtual void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, + public virtual void CrossRegion(ulong newRegionHandle, Vector3 pos, Vector3 lookAt, IPEndPoint newRegionExternalEndPoint, string capsURL) { } @@ -412,7 +412,7 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public virtual void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags) + public virtual void SendLocalTeleport(Vector3 position, Vector3 lookAt, uint flags) { } @@ -429,66 +429,66 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public virtual void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance) + public virtual void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance) { } - public virtual void SendPayPrice(LLUUID objectID, int[] payPrice) + public virtual void SendPayPrice(UUID objectID, int[] payPrice) { } - public virtual void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, - uint avatarLocalID, LLVector3 Pos, byte[] textureEntry, uint parentID, LLQuaternion rotation) + public virtual void SendAvatarData(ulong regionHandle, string firstName, string lastName, UUID avatarID, + uint avatarLocalID, Vector3 Pos, byte[] textureEntry, uint parentID, Quaternion rotation) { } public virtual void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, - LLVector3 position, LLVector3 velocity, LLQuaternion rotation) + Vector3 position, Vector3 velocity, Quaternion rotation) { } - public virtual void SendCoarseLocationUpdate(List CoarseLocations) + public virtual void SendCoarseLocationUpdate(List CoarseLocations) { } - public virtual void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint) + public virtual void AttachObject(uint localID, Quaternion rotation, byte attachPoint) { } - public virtual void SendDialog(string objectname, LLUUID objectID, LLUUID ownerID, string msg, LLUUID textureID, int ch, string[] buttonlabels) + public virtual void SendDialog(string objectname, UUID objectID, UUID ownerID, string msg, UUID textureID, int ch, string[] buttonlabels) { } public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, - PrimitiveBaseShape primShape, LLVector3 pos, LLVector3 vel, - LLVector3 acc, LLQuaternion rotation, LLVector3 rvel, uint flags, - LLUUID objectID, LLUUID ownerID, string text, byte[] color, + PrimitiveBaseShape primShape, Vector3 pos, Vector3 vel, + Vector3 acc, Quaternion rotation, Vector3 rvel, uint flags, + UUID objectID, UUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, byte clickAction) { } public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, - PrimitiveBaseShape primShape, LLVector3 pos, LLVector3 vel, - LLVector3 acc, LLQuaternion rotation, LLVector3 rvel, uint flags, - LLUUID objectID, LLUUID ownerID, string text, byte[] color, + PrimitiveBaseShape primShape, Vector3 pos, Vector3 vel, + Vector3 acc, Quaternion rotation, Vector3 rvel, uint flags, + UUID objectID, UUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem, byte clickAction, byte[] textureanimation, - bool attachment, uint AttachmentPoint, LLUUID AssetId, LLUUID SoundId, double SoundVolume, byte SoundFlags, double SoundRadius) + bool attachment, uint AttachmentPoint, UUID AssetId, UUID SoundId, double SoundVolume, byte SoundFlags, double SoundRadius) { } public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, - LLVector3 position, LLQuaternion rotation, LLVector3 velocity, - LLVector3 rotationalvelocity, byte state, LLUUID AssetId) + Vector3 position, Quaternion rotation, Vector3 velocity, + Vector3 rotationalvelocity, byte state, UUID AssetId) { } public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, - LLVector3 position, LLQuaternion rotation, LLVector3 velocity, - LLVector3 rotationalvelocity) + Vector3 position, Quaternion rotation, Vector3 velocity, + Vector3 rotationalvelocity) { } - public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, + public virtual void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List items, List folders, bool fetchFolders, @@ -496,7 +496,7 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public virtual void SendInventoryItemDetails(LLUUID ownerID, InventoryItemBase item) + public virtual void SendInventoryItemDetails(UUID ownerID, InventoryItemBase item) { } @@ -504,7 +504,7 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public virtual void SendRemoveInventoryItem(LLUUID itemID) + public virtual void SendRemoveInventoryItem(UUID itemID) { } @@ -513,16 +513,16 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public LLUUID GetDefaultAnimation(string name) + public UUID GetDefaultAnimation(string name) { - return LLUUID.Zero; + return UUID.Zero; } public void SendTakeControls(int controls, bool passToAgent, bool TakeControls) { } - public virtual void SendTaskInventory(LLUUID taskID, short serial, byte[] fileName) + public virtual void SendTaskInventory(UUID taskID, short serial, byte[] fileName) { } @@ -537,24 +537,24 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public virtual void SendNameReply(LLUUID profileId, string firstname, string lastname) + public virtual void SendNameReply(UUID profileId, string firstname, string lastname) { } - public virtual void SendPreLoadSound(LLUUID objectID, LLUUID ownerID, LLUUID soundID) + public virtual void SendPreLoadSound(UUID objectID, UUID ownerID, UUID soundID) { } - public virtual void SendPlayAttachedSound(LLUUID soundID, LLUUID objectID, LLUUID ownerID, float gain, + public virtual void SendPlayAttachedSound(UUID soundID, UUID objectID, UUID ownerID, float gain, byte flags) { } - public void SendTriggeredSound(LLUUID soundID, LLUUID ownerID, LLUUID objectID, LLUUID parentID, ulong handle, LLVector3 position, float gain) + public void SendTriggeredSound(UUID soundID, UUID ownerID, UUID objectID, UUID parentID, ulong handle, Vector3 position, float gain) { } - public void SendAttachedSoundGainChange(LLUUID objectID, float gain) + public void SendAttachedSoundGainChange(UUID objectID, float gain) { } @@ -571,7 +571,7 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public void SendLoadURL(string objectname, LLUUID objectID, LLUUID ownerID, bool groupOwned, string message, + public void SendLoadURL(string objectname, UUID objectID, UUID ownerID, bool groupOwned, string message, string url) { } @@ -588,7 +588,7 @@ namespace OpenSim.Region.Examples.SimpleModule OnCompleteMovementToRegion(); } } - public void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, LLUUID AssetFullID) + public void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, UUID AssetFullID) { } @@ -596,11 +596,11 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public void SendXferRequest(ulong XferID, short AssetType, LLUUID vFileID, byte FilePath, byte[] FileName) + public void SendXferRequest(ulong XferID, short AssetType, UUID vFileID, byte FilePath, byte[] FileName) { } - public void SendImagePart(ushort numParts, LLUUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec) + public void SendImagePart(ushort numParts, UUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec) { } @@ -612,37 +612,37 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public void SendObjectPropertiesFamilyData(uint RequestFlags, LLUUID ObjectUUID, LLUUID OwnerID, LLUUID GroupID, + public void SendObjectPropertiesFamilyData(uint RequestFlags, UUID ObjectUUID, UUID OwnerID, UUID GroupID, uint BaseMask, uint OwnerMask, uint GroupMask, uint EveryoneMask, uint NextOwnerMask, int OwnershipCost, byte SaleType,int SalePrice, uint Category, - LLUUID LastOwnerID, string ObjectName, string Description) + UUID LastOwnerID, string ObjectName, string Description) { } - public void SendObjectPropertiesReply(LLUUID ItemID, ulong CreationDate, LLUUID CreatorUUID, LLUUID FolderUUID, LLUUID FromTaskUUID, - LLUUID GroupUUID, short InventorySerial, LLUUID LastOwnerUUID, LLUUID ObjectUUID, - LLUUID OwnerUUID, string TouchTitle, byte[] TextureID, string SitTitle, string ItemName, + public void SendObjectPropertiesReply(UUID ItemID, ulong CreationDate, UUID CreatorUUID, UUID FolderUUID, UUID FromTaskUUID, + UUID GroupUUID, short InventorySerial, UUID LastOwnerUUID, UUID ObjectUUID, + UUID OwnerUUID, string TouchTitle, byte[] TextureID, string SitTitle, string ItemName, string ItemDescription, uint OwnerMask, uint NextOwnerMask, uint GroupMask, uint EveryoneMask, uint BaseMask, byte saleType, int salePrice) { } - public void SendAgentOffline(LLUUID[] agentIDs) + public void SendAgentOffline(UUID[] agentIDs) { } - public void SendAgentOnline(LLUUID[] agentIDs) + public void SendAgentOnline(UUID[] agentIDs) { } - public void SendSitResponse(LLUUID TargetID, LLVector3 OffsetPos, LLQuaternion SitOrientation, bool autopilot, - LLVector3 CameraAtOffset, LLVector3 CameraEyeOffset, bool ForceMouseLook) + public void SendSitResponse(UUID TargetID, Vector3 OffsetPos, Quaternion SitOrientation, bool autopilot, + Vector3 CameraAtOffset, Vector3 CameraEyeOffset, bool ForceMouseLook) { } - public void SendAdminResponse(LLUUID Token, uint AdminLevel) + public void SendAdminResponse(UUID Token, uint AdminLevel) { } @@ -692,7 +692,7 @@ namespace OpenSim.Region.Examples.SimpleModule args.Message = "Hey You! Get out of my Home. This is my Region"; args.Channel = 0; args.From = FirstName + " " + LastName; - args.Position = new LLVector3(128, 128, 26); + args.Position = new Vector3(128, 128, 26); args.Sender = this; args.Type = ChatTypeEnum.Shout; @@ -710,7 +710,7 @@ namespace OpenSim.Region.Examples.SimpleModule return false; } - public void SendSunPos(LLVector3 sunPos, LLVector3 sunVel, ulong time, uint dlen, uint ylen, float phase) + public void SendSunPos(Vector3 sunPos, Vector3 sunVel, ulong time, uint dlen, uint ylen, float phase) { } @@ -718,9 +718,9 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public void SendAvatarProperties(LLUUID avatarID, string aboutText, string bornOn, Byte[] charterMember, - string flAbout, uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, - LLUUID partnerID) + public void SendAvatarProperties(UUID avatarID, string aboutText, string bornOn, Byte[] charterMember, + string flAbout, uint flags, UUID flImageID, UUID imageID, string profileURL, + UUID partnerID) { } @@ -751,7 +751,7 @@ namespace OpenSim.Region.Examples.SimpleModule get { return m_circuitCode; } set { m_circuitCode = value; } } - public void SendBlueBoxMessage(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message) + public void SendBlueBoxMessage(UUID FromAvatarID, UUID fromSessionID, String FromAvatarName, String Message) { } @@ -772,41 +772,41 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public void SendScriptQuestion(LLUUID objectID, string taskName, string ownerName, LLUUID itemID, int question) + public void SendScriptQuestion(UUID objectID, string taskName, string ownerName, UUID itemID, int question) { } public void SendHealth(float health) { } - public void SendEstateManagersList(LLUUID invoice, LLUUID[] EstateManagers, uint estateID) + public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID) { } - public void SendBannedUserList(LLUUID invoice, EstateBan[] banlist, uint estateID) + public void SendBannedUserList(UUID invoice, EstateBan[] banlist, uint estateID) { } public void SendRegionInfoToEstateMenu(RegionInfoForEstateMenuArgs args) { } - public void SendEstateCovenantInformation(LLUUID covenant) + public void SendEstateCovenantInformation(UUID covenant) { } - public void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, LLUUID covenant, string abuseEmail) + public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail) { } public void SendLandProperties(IClientAPI remote_client, int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) { } - public void SendLandAccessListData(List avatars, uint accessFlag, int localLandID) + public void SendLandAccessListData(List avatars, uint accessFlag, int localLandID) { } public void SendForceClientSelectObjects(List objectIDs) { } - public void SendLandObjectOwners(Dictionary ownersAndCount) + public void SendLandObjectOwners(Dictionary ownersAndCount) { } public void SendLandParcelOverlay(byte[] data, int sequence_id) @@ -818,13 +818,13 @@ namespace OpenSim.Region.Examples.SimpleModule } - public void SendParcelMediaUpdate(string mediaUrl, LLUUID mediaTextureID, byte autoScale, string mediaType, + public void SendParcelMediaUpdate(string mediaUrl, UUID mediaTextureID, byte autoScale, string mediaType, string mediaDesc, int mediaWidth, int mediaHeight, byte mediaLoop) { } - public void SendGroupNameReply(LLUUID groupLLUID, string GroupName) + public void SendGroupNameReply(UUID groupLLUID, string GroupName) { } @@ -832,7 +832,7 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public void SendScriptRunningReply(LLUUID objectID, LLUUID itemID, bool running) + public void SendScriptRunningReply(UUID objectID, UUID itemID, bool running) { } @@ -845,19 +845,19 @@ namespace OpenSim.Region.Examples.SimpleModule } - public void SendSetFollowCamProperties (LLUUID objectID, SortedDictionary parameters) + public void SendSetFollowCamProperties (UUID objectID, SortedDictionary parameters) { } - public void SendClearFollowCamProperties (LLUUID objectID) + public void SendClearFollowCamProperties (UUID objectID) { } - public void SendRegionHandle (LLUUID regoinID, ulong handle) + public void SendRegionHandle (UUID regoinID, ulong handle) { } - public void SendParcelInfo (RegionInfo info, LandData land, LLUUID parcelID, uint x, uint y) + public void SendParcelInfo (RegionInfo info, LandData land, UUID parcelID, uint x, uint y) { } diff --git a/OpenSim/Region/Examples/SimpleModule/RegionModule.cs b/OpenSim/Region/Examples/SimpleModule/RegionModule.cs index 441c69697b..4fc0dbbb72 100644 --- a/OpenSim/Region/Examples/SimpleModule/RegionModule.cs +++ b/OpenSim/Region/Examples/SimpleModule/RegionModule.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.IO; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; @@ -50,7 +50,7 @@ namespace OpenSim.Region.Examples.SimpleModule { // RegionInfo regionInfo = m_scene.RegionInfo; - // LLVector3 pos = new LLVector3(110, 129, 27); + // Vector3 pos = new Vector3(110, 129, 27); //AddCpuCounter(regionInfo, pos); // AddComplexObjects(regionInfo, pos); @@ -67,7 +67,7 @@ namespace OpenSim.Region.Examples.SimpleModule // foreach (FileInfo fileInfo in dirInfo.GetFiles()) // { - // LLVector3 filePos = new LLVector3(100 + x, 129, 27 + z); + // Vector3 filePos = new Vector3(100 + x, 129, 27 + z); // x = x + 2; // if (x > 50) // { @@ -92,29 +92,29 @@ namespace OpenSim.Region.Examples.SimpleModule foreach (ScenePresence avatar in avatars) { avatar.AbsolutePosition = - new LLVector3((float)Util.RandomClass.Next(100, 200), (float)Util.RandomClass.Next(30, 200), 2); + new Vector3((float)Util.RandomClass.Next(100, 200), (float)Util.RandomClass.Next(30, 200), 2); } } - // private void AddComplexObjects(RegionInfo regionInfo, LLVector3 pos) + // private void AddComplexObjects(RegionInfo regionInfo, Vector3 pos) // { // int objs = 3; // for (int i = 0; i < (objs*objs*objs); i++) // { - // LLVector3 posOffset = new LLVector3((i % objs) * 4, ((i % (objs*objs)) / (objs)) * 4, (i / (objs*objs)) * 4); + // Vector3 posOffset = new Vector3((i % objs) * 4, ((i % (objs*objs)) / (objs)) * 4, (i / (objs*objs)) * 4); // ComplexObject complexObject = - // new ComplexObject(m_scene, regionInfo.RegionHandle, LLUUID.Zero, m_scene.PrimIDAllocate(), + // new ComplexObject(m_scene, regionInfo.RegionHandle, UUID.Zero, m_scene.PrimIDAllocate(), // pos + posOffset); // m_scene.AddNewSceneObject(complexObject, true); // } // } - // private void AddCpuCounter(RegionInfo regionInfo, LLVector3 pos) + // private void AddCpuCounter(RegionInfo regionInfo, Vector3 pos) // { // SceneObjectGroup sceneObject = - // new CpuCounterObject(m_scene, regionInfo.RegionHandle, LLUUID.Zero, m_scene.PrimIDAllocate(), - // pos + new LLVector3(1f, 1f, 1f)); + // new CpuCounterObject(m_scene, regionInfo.RegionHandle, UUID.Zero, m_scene.PrimIDAllocate(), + // pos + new Vector3(1f, 1f, 1f)); // m_scene.AddNewSceneObject(sceneObject, true); // } diff --git a/OpenSim/Region/Interfaces/IMoneyModule.cs b/OpenSim/Region/Interfaces/IMoneyModule.cs index 5636857633..37caa39239 100644 --- a/OpenSim/Region/Interfaces/IMoneyModule.cs +++ b/OpenSim/Region/Interfaces/IMoneyModule.cs @@ -27,18 +27,18 @@ using System; using OpenSim.Framework; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.Interfaces { - public delegate void ObjectPaid(LLUUID objectID, LLUUID agentID, int amount); + public delegate void ObjectPaid(UUID objectID, UUID agentID, int amount); public interface IMoneyModule { - bool ObjectGiveMoney(LLUUID objectID, LLUUID fromID, LLUUID toID, + bool ObjectGiveMoney(UUID objectID, UUID fromID, UUID toID, int amount); int GetBalance(IClientAPI client); - void ApplyUploadCharge(LLUUID agentID); + void ApplyUploadCharge(UUID agentID); bool UploadCovered(IClientAPI client); event ObjectPaid OnObjectPaid; diff --git a/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs index 671b8549c7..ab86d107da 100644 --- a/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Data.Base; @@ -48,7 +48,7 @@ namespace OpenSim.Region.Modules.AvatarFactory private Scene m_scene = null; private static readonly AvatarAppearance def = new AvatarAppearance(); - public bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance) + public bool TryGetAvatarAppearance(UUID avatarId, out AvatarAppearance appearance) { CachedUserInfo profile = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(avatarId); //if ((profile != null) && (profile.RootFolder != null)) @@ -69,7 +69,7 @@ namespace OpenSim.Region.Modules.AvatarFactory } - private AvatarAppearance CreateDefault(LLUUID avatarId) + private AvatarAppearance CreateDefault(UUID avatarId) { AvatarAppearance appearance = null; AvatarWearable[] wearables; @@ -127,13 +127,13 @@ namespace OpenSim.Region.Modules.AvatarFactory { for (int i = 0; i < 13; i++) { - if (appearance.Wearables[i].ItemID == LLUUID.Zero) + if (appearance.Wearables[i].ItemID == UUID.Zero) { - appearance.Wearables[i].AssetID = LLUUID.Zero; + appearance.Wearables[i].AssetID = UUID.Zero; } else { - // LLUUID assetId; + // UUID assetId; InventoryItemBase baseItem = profile.RootFolder.FindItem(appearance.Wearables[i].ItemID); @@ -201,7 +201,7 @@ namespace OpenSim.Region.Modules.AvatarFactory wearables = AvatarWearable.DefaultWearables; } - public void UpdateDatabase(LLUUID user, AvatarAppearance appearance) + public void UpdateDatabase(UUID user, AvatarAppearance appearance) { m_scene.CommsManager.AvatarService.UpdateUserAppearance(user, appearance); } diff --git a/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs b/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs index a1c1b887a7..4bab7c915a 100644 --- a/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs +++ b/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs @@ -57,7 +57,7 @@ namespace OpenSim.Region.Modules.SvnSerialiser private string m_svnpass = "password"; private TimeSpan m_svnperiod = new TimeSpan(0, 0, 15, 0, 0); - private string m_svnurl = "svn://insert.your.svn/here/"; + private string m_svnurl = "svn://insert.Your.svn/here/"; private string m_svnuser = "username"; #region SvnModule Core @@ -117,7 +117,7 @@ namespace OpenSim.Region.Modules.SvnSerialiser public void LoadRegion(Scene scene) { scene.LoadPrimsFromXml2(m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID + - Slash.DirectorySeparatorChar + "objects.xml"); + Slash.DirectorySeparatorChar + "objects.Xml"); scene.RequestModuleInterface().LoadFromFile(m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID + Slash.DirectorySeparatorChar + "heightmap.r32"); m_log.Info("[SVNBACKUP]: Region load successful (" + scene.RegionInfo.RegionName + ")."); diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs index 3bf0956a0b..e38a12b430 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs @@ -26,8 +26,8 @@ */ using System.Collections.Generic; -using Axiom.Math; using Nini.Config; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs index cc55f6e867..c969f9a0e4 100644 --- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs +++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs @@ -29,13 +29,15 @@ using System; using System.Collections.Generic; +using OpenMetaverse; using MonoXnaCompactMaths; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; using XnaDevRu.BulletX; using XnaDevRu.BulletX.Dynamics; using Nini.Config; -using AxiomQuaternion = Axiom.Math.Quaternion; +using Vector3 = MonoXnaCompactMaths.Vector3; +using Quaternion = MonoXnaCompactMaths.Quaternion; #endregion @@ -61,14 +63,14 @@ namespace OpenSim.Region.Physics.BulletXPlugin } //Quaternion - public static Quaternion AxiomQuaternionToXnaQuaternion(AxiomQuaternion axiomQuaternion) + public static Quaternion QuaternionToXnaQuaternion(OpenMetaverse.Quaternion quaternion) { - return new Quaternion(axiomQuaternion.x, axiomQuaternion.y, axiomQuaternion.z, axiomQuaternion.w); + return new Quaternion(quaternion.X, quaternion.Y, quaternion.Z, quaternion.W); } - public static AxiomQuaternion XnaQuaternionToAxiomQuaternion(Quaternion xnaQuaternion) + public static OpenMetaverse.Quaternion XnaQuaternionToQuaternion(Quaternion xnaQuaternion) { - return new AxiomQuaternion(xnaQuaternion.W, xnaQuaternion.X, xnaQuaternion.Y, xnaQuaternion.Z); + return new OpenMetaverse.Quaternion(xnaQuaternion.W, xnaQuaternion.X, xnaQuaternion.Y, xnaQuaternion.Z); } //Next methods are extracted from XnaDevRu.BulletX(See 3rd party license): @@ -92,7 +94,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin internal static Quaternion GetRotation(Matrix m) { - Quaternion q = new Quaternion(); + Quaternion q; float trace = m.M11 + m.M22 + m.M33; @@ -108,6 +110,8 @@ namespace OpenSim.Region.Physics.BulletXPlugin } else { + q.X = q.Y = q.Z = q.W = 0f; + int i = m.M11 < m.M22 ? (m.M22 < m.M33 ? 2 : 1) @@ -601,13 +605,13 @@ namespace OpenSim.Region.Physics.BulletXPlugin } public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position, - PhysicsVector size, AxiomQuaternion rotation) + PhysicsVector size, OpenMetaverse.Quaternion rotation) { return AddPrimShape(primName, pbs, position, size, rotation, false); } public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position, - PhysicsVector size, AxiomQuaternion rotation, bool isPhysical) + PhysicsVector size, OpenMetaverse.Quaternion rotation, bool isPhysical) { PhysicsActor result; @@ -634,7 +638,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin return result; } - public PhysicsActor AddPrim(String name, PhysicsVector position, PhysicsVector size, AxiomQuaternion rotation, + public PhysicsActor AddPrim(String name, PhysicsVector position, PhysicsVector size, OpenMetaverse.Quaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool isPhysical) { BulletXPrim newPrim = null; @@ -680,7 +684,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin //Try to remove garbage RemoveForgottenRigidBodies(); //End of remove - MoveAllObjects(timeStep); + MoveAPrimitives(timeStep); fps = (timeStep*simulationSubSteps); @@ -694,7 +698,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin return fps; } - private void MoveAllObjects(float timeStep) + private void MoveAPrimitives(float timeStep) { foreach (BulletXCharacter actor in _characters.Values) { @@ -867,7 +871,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin protected PhysicsVector _velocity; protected PhysicsVector _size; protected PhysicsVector _acceleration; - protected AxiomQuaternion _orientation; + protected OpenMetaverse.Quaternion _orientation; protected PhysicsVector m_rotationalVelocity = PhysicsVector.Zero; protected RigidBody rigidBody; protected int m_PhysicsActorType; @@ -972,7 +976,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin get { return _acceleration; } } - public override AxiomQuaternion Orientation + public override OpenMetaverse.Quaternion Orientation { get { return _orientation; } set @@ -1148,10 +1152,10 @@ namespace OpenSim.Region.Physics.BulletXPlugin ReOrient(_orientation); } - protected internal void ReOrient(AxiomQuaternion _newOrient) + protected internal void ReOrient(OpenMetaverse.Quaternion _newOrient) { Quaternion _newOrientation; - _newOrientation = BulletXMaths.AxiomQuaternionToXnaQuaternion(_newOrient); + _newOrientation = BulletXMaths.QuaternionToXnaQuaternion(_newOrient); Matrix _comTransform = rigidBody.CenterOfMassTransform; BulletXMaths.SetRotation(ref _comTransform, _newOrientation); rigidBody.CenterOfMassTransform = _comTransform; @@ -1206,12 +1210,12 @@ namespace OpenSim.Region.Physics.BulletXPlugin public BulletXCharacter(String avName, BulletXScene parent_scene, PhysicsVector pos) : this(avName, parent_scene, pos, new PhysicsVector(), new PhysicsVector(), new PhysicsVector(), - AxiomQuaternion.Identity) + OpenMetaverse.Quaternion.Identity) { } public BulletXCharacter(String avName, BulletXScene parent_scene, PhysicsVector pos, PhysicsVector velocity, - PhysicsVector size, PhysicsVector acceleration, AxiomQuaternion orientation) + PhysicsVector size, PhysicsVector acceleration, OpenMetaverse.Quaternion orientation) : base(avName) { //This fields will be removed. They're temporal @@ -1289,7 +1293,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin get { return base.Acceleration; } } - public override AxiomQuaternion Orientation + public override OpenMetaverse.Quaternion Orientation { get { return base.Orientation; } set { base.Orientation = value; } @@ -1404,7 +1408,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin public BulletXPrim(String primName, BulletXScene parent_scene, PhysicsVector pos, PhysicsVector size, - AxiomQuaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool isPhysical) + OpenMetaverse.Quaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool isPhysical) : this( primName, parent_scene, pos, new PhysicsVector(), size, new PhysicsVector(), rotation, mesh, pbs, isPhysical) @@ -1413,12 +1417,14 @@ namespace OpenSim.Region.Physics.BulletXPlugin public BulletXPrim(String primName, BulletXScene parent_scene, PhysicsVector pos, PhysicsVector velocity, PhysicsVector size, - PhysicsVector acceleration, AxiomQuaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, + PhysicsVector acceleration, OpenMetaverse.Quaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool isPhysical) : base(primName) { - if ((size.X == 0) || (size.Y == 0) || (size.Z == 0)) throw new Exception("Size 0"); - if (rotation.Norm == 0f) rotation = AxiomQuaternion.Identity; + if ((size.X == 0) || (size.Y == 0) || (size.Z == 0)) + throw new Exception("Size 0"); + if (OpenMetaverse.Quaternion.Normalize(rotation).Length() == 0f) + rotation = OpenMetaverse.Quaternion.Identity; _position = pos; _physical = isPhysical; @@ -1468,7 +1474,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin get { return base.Acceleration; } } - public override AxiomQuaternion Orientation + public override OpenMetaverse.Quaternion Orientation { get { return base.Orientation; } set { base.Orientation = value; } @@ -1565,7 +1571,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin _position = BulletXMaths.XnaVector3ToPhysicsVector(rigidBody.CenterOfMassPosition); _velocity = BulletXMaths.XnaVector3ToPhysicsVector(rigidBody.LinearVelocity); - _orientation = BulletXMaths.XnaQuaternionToAxiomQuaternion(rigidBody.Orientation); + _orientation = BulletXMaths.XnaQuaternionToQuaternion(rigidBody.Orientation); if ((Math.Abs(m_prev_position.X - _position.X) < 0.03) && (Math.Abs(m_prev_position.Y - _position.Y) < 0.03) @@ -1687,7 +1693,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin { private PhysicsVector _staticPosition; // private PhysicsVector _staticVelocity; -// private AxiomQuaternion _staticOrientation; +// private OpenMetaverse.Quaternion _staticOrientation; private float _mass; // private BulletXScene _parentscene; internal float[] _heightField; @@ -1702,7 +1708,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin { _staticPosition = new PhysicsVector(BulletXScene.MaxXY/2, BulletXScene.MaxXY/2, 0); // _staticVelocity = new PhysicsVector(); -// _staticOrientation = AxiomQuaternion.Identity; +// _staticOrientation = OpenMetaverse.Quaternion.Identity; _mass = 0; //No active // _parentscene = parent_scene; _heightField = heightField; diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index d4af2714aa..482b478fa3 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs @@ -27,8 +27,8 @@ using System; using System.Collections.Generic; -using Axiom.Math; using OpenSim.Framework; +using OpenMetaverse; namespace OpenSim.Region.Physics.Manager { diff --git a/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs b/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs index 3d9207ff01..db412513c9 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs @@ -115,43 +115,73 @@ namespace OpenSim.Region.Physics.Manager // that the LoadFrom context be avoided. This can be done by installing assemblies in the // Global Assembly Cache or in the ApplicationBase directory and using Assembly. // Load when explicitly loading assemblies. - Assembly pluginAssembly = Assembly.LoadFrom(FileName); + Assembly pluginAssembly = null; + Type[] types = null; - foreach (Type pluginType in pluginAssembly.GetTypes()) + try { - if (pluginType.IsPublic) + pluginAssembly = Assembly.LoadFrom(FileName); + } + catch (Exception ex) + { + m_log.Error("Failed to load plugin from " + FileName, ex); + } + + if (pluginAssembly != null) + { + try { - if (!pluginType.IsAbstract) + types = pluginAssembly.GetTypes(); + } + catch (ReflectionTypeLoadException ex) + { + m_log.Error("[PHYSICS]: Failed to enumerate types in plugin from " + FileName + ": " + + ex.LoaderExceptions[0].Message, ex); + } + catch (Exception ex) + { + m_log.Error("[PHYSICS]: Failed to enumerate types in plugin from " + FileName, ex); + } + + if (types != null) + { + foreach (Type pluginType in types) { - Type physTypeInterface = pluginType.GetInterface("IPhysicsPlugin", true); - - if (physTypeInterface != null) + if (pluginType.IsPublic) { - IPhysicsPlugin plug = - (IPhysicsPlugin) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); - plug.Init(); - if (!_PhysPlugins.ContainsKey(plug.GetName())) + if (!pluginType.IsAbstract) { - _PhysPlugins.Add(plug.GetName(), plug); - m_log.Info("[PHYSICS]: Added physics engine: " + plug.GetName()); + Type physTypeInterface = pluginType.GetInterface("IPhysicsPlugin", true); + + if (physTypeInterface != null) + { + IPhysicsPlugin plug = + (IPhysicsPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + plug.Init(); + if (!_PhysPlugins.ContainsKey(plug.GetName())) + { + _PhysPlugins.Add(plug.GetName(), plug); + m_log.Info("[PHYSICS]: Added physics engine: " + plug.GetName()); + } + } + + Type meshTypeInterface = pluginType.GetInterface("IMeshingPlugin", true); + + if (meshTypeInterface != null) + { + IMeshingPlugin plug = + (IMeshingPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + if (!_MeshPlugins.ContainsKey(plug.GetName())) + { + _MeshPlugins.Add(plug.GetName(), plug); + m_log.Info("[PHYSICS]: Added meshing engine: " + plug.GetName()); + } + } + + physTypeInterface = null; + meshTypeInterface = null; } } - - Type meshTypeInterface = pluginType.GetInterface("IMeshingPlugin", true); - - if (meshTypeInterface != null) - { - IMeshingPlugin plug = - (IMeshingPlugin) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); - if (!_MeshPlugins.ContainsKey(plug.GetName())) - { - _MeshPlugins.Add(plug.GetName(), plug); - m_log.Info("[PHYSICS]: Added meshing engine: " + plug.GetName()); - } - } - - physTypeInterface = null; - meshTypeInterface = null; } } } diff --git a/OpenSim/Region/Physics/Manager/PhysicsScene.cs b/OpenSim/Region/Physics/Manager/PhysicsScene.cs index f9d990bc5b..3575a51be3 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsScene.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsScene.cs @@ -27,10 +27,10 @@ using System.Collections.Generic; using System.Reflection; -using Axiom.Math; using log4net; using Nini.Config; using OpenSim.Framework; +using OpenMetaverse; namespace OpenSim.Region.Physics.Manager { diff --git a/OpenSim/Region/Physics/Manager/PhysicsVector.cs b/OpenSim/Region/Physics/Manager/PhysicsVector.cs index adf4715e0c..bbd6464f15 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsVector.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsVector.cs @@ -60,7 +60,7 @@ namespace OpenSim.Region.Physics.Manager } /// - /// These routines are the easiest way to store XYZ values in an LLVector3 without requiring 3 calls. + /// These routines are the easiest way to store XYZ values in an Vector3 without requiring 3 calls. /// /// public byte[] GetBytes() diff --git a/OpenSim/Region/Physics/Meshing/Extruder.cs b/OpenSim/Region/Physics/Meshing/Extruder.cs index a47b6ae407..1fc65e3fd6 100644 --- a/OpenSim/Region/Physics/Meshing/Extruder.cs +++ b/OpenSim/Region/Physics/Meshing/Extruder.cs @@ -26,6 +26,7 @@ */ //#define SPAM +using OpenMetaverse; using OpenSim.Region.Physics.Manager; namespace OpenSim.Region.Physics.Meshing @@ -72,9 +73,6 @@ namespace OpenSim.Region.Physics.Meshing { Mesh result = new Mesh(); - // Quaternion tt = new Quaternion(); - // Vertex v2 = new Vertex(0, 0, 0); - Mesh newLayer; Mesh lastLayer = null; @@ -163,7 +161,7 @@ namespace OpenSim.Region.Physics.Meshing // apply twist rotation to the profile layer and position the layer in the prim - Quaternion profileRot = new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist); + Quaternion profileRot = Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), twist); foreach (Vertex v in newLayer.vertices) { if (v != null) @@ -259,9 +257,6 @@ namespace OpenSim.Region.Physics.Meshing { Mesh result = new Mesh(); - // Quaternion tt = new Quaternion(); - // Vertex v2 = new Vertex(0, 0, 0); - Mesh newLayer; Mesh lastLayer = null; @@ -377,7 +372,7 @@ namespace OpenSim.Region.Physics.Meshing // next apply twist rotation to the profile layer if (twistTotal != 0.0f || twistBot != 0.0f) { - Quaternion profileRot = new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist); + Quaternion profileRot = new Quaternion(new Vector3(0.0f, 0.0f, 1.0f), twist); foreach (Vertex v in newLayer.vertices) { if (v != null) @@ -392,7 +387,7 @@ namespace OpenSim.Region.Physics.Meshing // now orient the rotation of the profile layer relative to it's position on the path // adding pushY to the angle used to generate the quat appears to approximate the viewer - Quaternion layerRot = new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), (float)angle + pushY * 0.9f); + Quaternion layerRot = Quaternion.CreateFromAxisAngle(new Vector3(1.0f, 0.0f, 0.0f), (float)angle + pushY * 0.9f); foreach (Vertex v in newLayer.vertices) { if (v != null) diff --git a/OpenSim/Region/Physics/Meshing/HelperTypes.cs b/OpenSim/Region/Physics/Meshing/HelperTypes.cs index 2cb8d04309..7491782293 100644 --- a/OpenSim/Region/Physics/Meshing/HelperTypes.cs +++ b/OpenSim/Region/Physics/Meshing/HelperTypes.cs @@ -29,70 +29,10 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; +using OpenMetaverse; using OpenSim.Region.Physics.Manager; using OpenSim.Region.Physics.Meshing; -public class Quaternion -{ - public float x = 0; - public float y = 0; - public float z = 0; - public float w = 1; - - public Quaternion() - { - - } - public Quaternion(float x1, float y1, float z1, float w1) - { - x = x1; y = y1; z = z1; w = w1; - } - public Quaternion(Vertex axis, float angle) - { - // using (* 0.5) instead of (/2) - w = (float)Math.Cos(angle * 0.5f); - float sin = (float)Math.Sin(angle * 0.5f); - //x = axis.X * (float)Math.Sin(angle * 0.5f); - //y = axis.Y * (float)Math.Sin(angle * 0.5f); - //z = axis.Z * (float)Math.Sin(angle * 0.5f); - x = axis.X * sin; - y = axis.Y * sin; - z = axis.Z * sin; - normalize(); - } - public static Quaternion operator *(Quaternion a, Quaternion b) - { - Quaternion c = new Quaternion(); - c.x = a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y; - c.y = a.w * b.y + a.y * b.w + a.z * b.x - a.x * b.z; - c.z = a.w * b.z + a.z * b.w + a.x * b.y - a.y * b.x; - c.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z; - return c; - } - - public void normalize() - { - //float mag = length(); - - //w /= mag; - //x /= mag; - //y /= mag; - //z /= mag; - float iMag = 1.0f / length(); - - w *= iMag; - x *= iMag; - y *= iMag; - z *= iMag; - } - public float length() - { - return (float)Math.Sqrt(w * w + x * x + y * y + z * z); - } -} - - - public class Vertex : PhysicsVector, IComparable { public Vertex(float x, float y, float z) @@ -129,34 +69,34 @@ public class Vertex : PhysicsVector, IComparable Vertex v2 = new Vertex(0f, 0f, 0f); - v2.X = q.w * q.w * v.X + - 2f * q.y * q.w * v.Z - - 2f * q.z * q.w * v.Y + - q.x * q.x * v.X + - 2f * q.y * q.x * v.Y + - 2f * q.z * q.x * v.Z - - q.z * q.z * v.X - - q.y * q.y * v.X; + v2.X = q.W * q.W * v.X + + 2f * q.Y * q.W * v.Z - + 2f * q.Z * q.W * v.Y + + q.X * q.X * v.X + + 2f * q.Y * q.X * v.Y + + 2f * q.Z * q.X * v.Z - + q.Z * q.Z * v.X - + q.Y * q.Y * v.X; v2.Y = - 2f * q.x * q.y * v.X + - q.y * q.y * v.Y + - 2f * q.z * q.y * v.Z + - 2f * q.w * q.z * v.X - - q.z * q.z * v.Y + - q.w * q.w * v.Y - - 2f * q.x * q.w * v.Z - - q.x * q.x * v.Y; + 2f * q.X * q.Y * v.X + + q.Y * q.Y * v.Y + + 2f * q.Z * q.Y * v.Z + + 2f * q.W * q.Z * v.X - + q.Z * q.Z * v.Y + + q.W * q.W * v.Y - + 2f * q.X * q.W * v.Z - + q.X * q.X * v.Y; v2.Z = - 2f * q.x * q.z * v.X + - 2f * q.y * q.z * v.Y + - q.z * q.z * v.Z - - 2f * q.w * q.y * v.X - - q.y * q.y * v.Z + - 2f * q.w * q.x * v.Y - - q.x * q.x * v.Z + - q.w * q.w * v.Z; + 2f * q.X * q.Z * v.X + + 2f * q.Y * q.Z * v.Y + + q.Z * q.Z * v.Z - + 2f * q.W * q.Y * v.X - + q.Y * q.Y * v.Z + + 2f * q.W * q.X * v.Y - + q.X * q.X * v.Z + + q.W * q.W * v.Z; return v2; } diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs index ecde92a0d8..f955c52d81 100644 --- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs @@ -30,6 +30,7 @@ using System; using System.Collections.Generic; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; +using OpenMetaverse; namespace OpenSim.Region.Physics.Meshing { @@ -1559,7 +1560,7 @@ namespace OpenSim.Region.Physics.Meshing if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle) { - Quaternion zFlip = new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), (float)Math.PI); + Quaternion zFlip = Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), (float)Math.PI); Vertex vTmp = new Vertex(0.0f, 0.0f, 0.0f); foreach (Vertex v in cuttedHull.getVertices()) if (v != null) diff --git a/OpenSim/Region/Physics/Meshing/PrimMesher.cs b/OpenSim/Region/Physics/Meshing/PrimMesher.cs index 86bdabcc76..08b2d10556 100644 --- a/OpenSim/Region/Physics/Meshing/PrimMesher.cs +++ b/OpenSim/Region/Physics/Meshing/PrimMesher.cs @@ -29,6 +29,7 @@ using System; using System.Collections.Generic; using System.IO; using OpenSim.Region.Physics.Manager; +using OpenMetaverse; namespace OpenSim.Region.Physics.Meshing { @@ -783,7 +784,7 @@ angles24 = [ Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides); if (initialProfileRot != 0.0f) - profile.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), initialProfileRot)); + profile.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), initialProfileRot)); bool done = false; while (!done) @@ -807,7 +808,7 @@ angles24 = [ float twist = twistBegin + twistTotal * percentOfPath; if (twist != 0.0f) - newLayer.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist)); + newLayer.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), twist)); newLayer.AddPos(xOffset, yOffset, zOffset); @@ -948,7 +949,7 @@ angles24 = [ Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides); if (initialProfileRot != 0.0f) - profile.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), initialProfileRot)); + profile.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), initialProfileRot)); bool done = false; while (!done) // loop through the length of the path and add the layers @@ -991,12 +992,12 @@ angles24 = [ // next apply twist rotation to the profile layer if (twistTotal != 0.0f || twistBegin != 0.0f) - newLayer.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist)); + newLayer.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), twist)); // now orient the rotation of the profile layer relative to it's position on the path // adding taperY to the angle used to generate the quat appears to approximate the viewer //newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY * 0.9f)); - newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY)); + newLayer.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(1.0f, 0.0f, 0.0f), angle + this.topShearY)); newLayer.AddPos(xOffset, yOffset, zOffset); if (angle == startAngle) diff --git a/OpenSim/Region/Physics/Meshing/SculptMesh.cs b/OpenSim/Region/Physics/Meshing/SculptMesh.cs index 360b2f7806..707c0e3124 100644 --- a/OpenSim/Region/Physics/Meshing/SculptMesh.cs +++ b/OpenSim/Region/Physics/Meshing/SculptMesh.cs @@ -30,14 +30,14 @@ using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Text; -using OpenJPEGNet; -using Image = System.Drawing.Image; +using OpenMetaverse.Imaging; namespace OpenSim.Region.Physics.Meshing { // This functionality based on the XNA SculptPreview by John Hurliman. public class SculptMesh : Mesh { + ManagedImage managedImage; Image idata = null; Bitmap bLOD = null; Bitmap bBitmap = null; @@ -55,7 +55,7 @@ namespace OpenSim.Region.Physics.Meshing try { - idata = OpenJPEG.DecodeToImage(jpegData); + OpenJPEG.DecodeToImage(jpegData, out managedImage, out idata); //int i = 0; //i = i / i; } @@ -64,6 +64,7 @@ namespace OpenSim.Region.Physics.Meshing System.Console.WriteLine("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed!"); return; } + if (idata != null) { bBitmap = new Bitmap(idata); diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 5d3e98665e..38d4060833 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs @@ -26,7 +26,7 @@ */ using System; -using Axiom.Math; +using OpenMetaverse; using Ode.NET; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; @@ -587,7 +587,6 @@ namespace OpenSim.Region.Physics.OdePlugin //Matrix3 or = Orientation.ToRotationMatrix(); //d.Matrix3 ord = new d.Matrix3(or.m00, or.m10, or.m20, or.m01, or.m11, or.m21, or.m02, or.m12, or.m22); //d.BodySetRotation(Body, ref ord); - } } diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index eafce5af16..21e514bb5a 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -30,8 +30,8 @@ using System.Collections.Generic; using System.Reflection; using System.Runtime.InteropServices; using System.Threading; -using Axiom.Math; using log4net; +using OpenMetaverse; using Ode.NET; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; @@ -294,10 +294,10 @@ namespace OpenSim.Region.Physics.OdePlugin setMass(); d.BodySetPosition(Body, _position.X, _position.Y, _position.Z); d.Quaternion myrot = new d.Quaternion(); - myrot.W = _orientation.w; - myrot.X = _orientation.x; - myrot.Y = _orientation.y; - myrot.Z = _orientation.z; + myrot.X = _orientation.X; + myrot.Y = _orientation.Y; + myrot.Z = _orientation.Z; + myrot.W = _orientation.W; d.BodySetQuaternion(Body, ref myrot); d.GeomSetBody(prim_geom, Body); m_collisionCategories |= CollisionCategories.Body; @@ -1021,10 +1021,10 @@ namespace OpenSim.Region.Physics.OdePlugin { d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); d.Quaternion myrot = new d.Quaternion(); - myrot.W = _orientation.w; - myrot.X = _orientation.x; - myrot.Y = _orientation.y; - myrot.Z = _orientation.z; + myrot.X = _orientation.X; + myrot.Y = _orientation.Y; + myrot.Z = _orientation.Z; + myrot.W = _orientation.W; d.GeomSetQuaternion(prim_geom, ref myrot); } @@ -1220,10 +1220,10 @@ namespace OpenSim.Region.Physics.OdePlugin public void rotate(float timestep) { d.Quaternion myrot = new d.Quaternion(); - myrot.W = _orientation.w; - myrot.X = _orientation.x; - myrot.Y = _orientation.y; - myrot.Z = _orientation.z; + myrot.X = _orientation.X; + myrot.Y = _orientation.Y; + myrot.Z = _orientation.Z; + myrot.W = _orientation.W; d.GeomSetQuaternion(prim_geom, ref myrot); if (m_isphysical && Body != (IntPtr) 0) { @@ -1339,10 +1339,10 @@ namespace OpenSim.Region.Physics.OdePlugin setMesh(_parent_scene, mesh); d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); d.Quaternion myrot = new d.Quaternion(); - myrot.W = _orientation.w; - myrot.X = _orientation.x; - myrot.Y = _orientation.y; - myrot.Z = _orientation.z; + myrot.X = _orientation.X; + myrot.Y = _orientation.Y; + myrot.Z = _orientation.Z; + myrot.W = _orientation.W; d.GeomSetQuaternion(prim_geom, ref myrot); //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z); @@ -1388,10 +1388,10 @@ namespace OpenSim.Region.Physics.OdePlugin //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z); d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); d.Quaternion myrot = new d.Quaternion(); - myrot.W = _orientation.w; - myrot.X = _orientation.x; - myrot.Y = _orientation.y; - myrot.Z = _orientation.z; + myrot.X = _orientation.X; + myrot.Y = _orientation.Y; + myrot.Z = _orientation.Z; + myrot.W = _orientation.W; d.GeomSetQuaternion(prim_geom, ref myrot); } } @@ -1452,9 +1452,9 @@ namespace OpenSim.Region.Physics.OdePlugin // d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); // d.Quaternion myrot = new d.Quaternion(); // myrot.W = _orientation.w; - // myrot.X = _orientation.x; - // myrot.Y = _orientation.y; - // myrot.Z = _orientation.z; + // myrot.X = _orientation.X; + // myrot.Y = _orientation.Y; + // myrot.Z = _orientation.Z; // d.GeomSetQuaternion(prim_geom, ref myrot); // //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z); @@ -1512,9 +1512,9 @@ namespace OpenSim.Region.Physics.OdePlugin // d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); // d.Quaternion myrot = new d.Quaternion(); // myrot.W = _orientation.w; - // myrot.X = _orientation.x; - // myrot.Y = _orientation.y; - // myrot.Z = _orientation.z; + // myrot.X = _orientation.X; + // myrot.Y = _orientation.Y; + // myrot.Z = _orientation.Z; // d.GeomSetQuaternion(prim_geom, ref myrot); // } // } @@ -1553,9 +1553,9 @@ namespace OpenSim.Region.Physics.OdePlugin // d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); // d.Quaternion myrot = new d.Quaternion(); // myrot.W = _orientation.w; - // myrot.X = _orientation.x; - // myrot.Y = _orientation.y; - // myrot.Z = _orientation.z; + // myrot.X = _orientation.X; + // myrot.Y = _orientation.Y; + // myrot.Z = _orientation.Z; // d.GeomSetQuaternion(prim_geom, ref myrot); // //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z); @@ -1626,10 +1626,10 @@ namespace OpenSim.Region.Physics.OdePlugin setMesh(_parent_scene, mesh); d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); d.Quaternion myrot = new d.Quaternion(); - myrot.W = _orientation.w; - myrot.X = _orientation.x; - myrot.Y = _orientation.y; - myrot.Z = _orientation.z; + myrot.X = _orientation.X; + myrot.Y = _orientation.Y; + myrot.Z = _orientation.Z; + myrot.W = _orientation.W; d.GeomSetQuaternion(prim_geom, ref myrot); //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z); @@ -1684,10 +1684,10 @@ namespace OpenSim.Region.Physics.OdePlugin //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z); d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); d.Quaternion myrot = new d.Quaternion(); - myrot.W = _orientation.w; - myrot.X = _orientation.x; - myrot.Y = _orientation.y; - myrot.Z = _orientation.z; + myrot.X = _orientation.X; + myrot.Y = _orientation.Y; + myrot.Z = _orientation.Z; + myrot.W = _orientation.W; d.GeomSetQuaternion(prim_geom, ref myrot); } } @@ -1726,9 +1726,9 @@ namespace OpenSim.Region.Physics.OdePlugin // d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); // d.Quaternion myrot = new d.Quaternion(); // myrot.W = _orientation.w; - // myrot.X = _orientation.x; - // myrot.Y = _orientation.y; - // myrot.Z = _orientation.z; + // myrot.X = _orientation.X; + // myrot.Y = _orientation.Y; + // myrot.Z = _orientation.Z; // d.GeomSetQuaternion(prim_geom, ref myrot); // //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z); @@ -2106,9 +2106,9 @@ namespace OpenSim.Region.Physics.OdePlugin _acceleration.Z = 0; //_orientation.w = 0f; - //_orientation.x = 0f; - //_orientation.y = 0f; - //_orientation.z = 0f; + //_orientation.X = 0f; + //_orientation.Y = 0f; + //_orientation.Z = 0f; m_rotationalVelocity.X = 0; m_rotationalVelocity.Y = 0; m_rotationalVelocity.Z = 0; @@ -2154,10 +2154,10 @@ namespace OpenSim.Region.Physics.OdePlugin } //System.Console.WriteLine("ODE: " + m_rotationalVelocity.ToString()); - _orientation.w = ori.W; - _orientation.x = ori.X; - _orientation.y = ori.Y; - _orientation.z = ori.Z; + _orientation.X = ori.X; + _orientation.Y = ori.Y; + _orientation.Z = ori.Z; + _orientation.W = ori.W; m_lastUpdateSent = false; if (!m_throttleUpdates || throttleCounter > _parent_scene.geomUpdatesPerThrottledUpdate) { diff --git a/OpenSim/Region/Physics/OdePlugin/ODETestClass.cs b/OpenSim/Region/Physics/OdePlugin/ODETestClass.cs index 074170a203..606134afeb 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODETestClass.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODETestClass.cs @@ -26,9 +26,9 @@ */ using System; -using Axiom.Math; using Nini.Config; using NUnit.Framework; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; @@ -74,7 +74,7 @@ namespace OpenSim.Region.Physics.OdePlugin PrimitiveBaseShape newcube = PrimitiveBaseShape.CreateBox(); PhysicsVector position = new PhysicsVector(128, 128, 128); PhysicsVector size = new PhysicsVector(0.5f, 0.5f, 0.5f); - Quaternion rot = new Quaternion(1, 0, 0, 0); + Quaternion rot = Quaternion.Identity; PhysicsActor prim = ps.AddPrimShape("CoolShape", newcube, position, size, rot, true); OdePrim oprim = (OdePrim)prim; OdeScene pscene = (OdeScene) ps; diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index f285911f31..5a501ef3e9 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs @@ -31,13 +31,12 @@ using System.Reflection; using System.Runtime.InteropServices; using System.Threading; using System.IO; -using Axiom.Math; using log4net; using Nini.Config; using Ode.NET; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; -using libsecondlife; +using OpenMetaverse; //using OpenSim.Region.Physics.OdePlugin.Meshing; @@ -1129,11 +1128,7 @@ namespace OpenSim.Region.Physics.OdePlugin siz.X = size.X; siz.Y = size.Y; siz.Z = size.Z; - Quaternion rot = new Quaternion(); - rot.w = rotation.w; - rot.x = rotation.x; - rot.y = rotation.y; - rot.z = rotation.z; + Quaternion rot = rotation; OdePrim newPrim; lock (OdeLock) @@ -1524,8 +1519,8 @@ namespace OpenSim.Region.Physics.OdePlugin // but we still need to check for sculptie meshing being enabled so this is the most // convenient place to do it for now... - // //if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle && pbs.ProfileCurve == (byte)LLObject.ProfileCurve.Circle && pbs.PathScaleY <= 0.75f) - // //Console.WriteLine("needsMeshing: " + " pathCurve: " + pbs.PathCurve.ToString() + " profileCurve: " + pbs.ProfileCurve.ToString() + " pathScaleY: " + LLObject.UnpackPathScale(pbs.PathScaleY).ToString()); + // //if (pbs.PathCurve == (byte)Primitive.PathCurve.Circle && pbs.ProfileCurve == (byte)Primitive.ProfileCurve.Circle && pbs.PathScaleY <= 0.75f) + // //Console.WriteLine("needsMeshing: " + " pathCurve: " + pbs.PathCurve.ToString() + " profileCurve: " + pbs.ProfileCurve.ToString() + " pathScaleY: " + Primitive.UnpackPathScale(pbs.PathScaleY).ToString()); if (pbs.SculptEntry && !meshSculptedPrim) { return false; @@ -1555,19 +1550,19 @@ namespace OpenSim.Region.Physics.OdePlugin // return true; // // test for torus - // if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle - // && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.Circle - // && LLObject.UnpackPathScale(pbs.PathScaleY) <= 0.75f) + // if (pbs.PathCurve == (byte)Primitive.PathCurve.Circle + // && (pbs.ProfileCurve & 0x07) == (byte)Primitive.ProfileCurve.Circle + // && Primitive.UnpackPathScale(pbs.PathScaleY) <= 0.75f) // return true; // // test for tube - // if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle - // && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle) + // if (pbs.PathCurve == (byte)Primitive.PathCurve.Circle + // && (pbs.ProfileCurve & 0x07) == (byte)Primitive.ProfileCurve.EqualTriangle) // return true; // // test for ring - // if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle - // && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle) + // if (pbs.PathCurve == (byte)Primitive.PathCurve.Circle + // && (pbs.ProfileCurve & 0x07) == (byte)Primitive.ProfileCurve.EqualTriangle) // return true; // if (pbs.ProfileShape == ProfileShape.EquilateralTriangle) @@ -2132,17 +2127,17 @@ namespace OpenSim.Region.Physics.OdePlugin d.Matrix3 R = new d.Matrix3(); - Quaternion q1 = Quaternion.FromAngleAxis(1.5707f, new Vector3(1, 0, 0)); - Quaternion q2 = Quaternion.FromAngleAxis(1.5707f, new Vector3(0, 1, 0)); + Quaternion q1 = Quaternion.CreateFromAxisAngle(new Vector3(1, 0, 0), 1.5707f); + Quaternion q2 = Quaternion.CreateFromAxisAngle(new Vector3(0, 1, 0), 1.5707f); //Axiom.Math.Quaternion q3 = Axiom.Math.Quaternion.FromAngleAxis(3.14f, new Axiom.Math.Vector3(0, 0, 1)); q1 = q1*q2; //q1 = q1 * q3; - Vector3 v3 = new Vector3(); - float angle = 0; - q1.ToAngleAxis(ref angle, ref v3); + Vector3 v3; + float angle; + q1.GetAxisAngle(out v3, out angle); - d.RFromAxisAndAngle(out R, v3.x, v3.y, v3.z, angle); + d.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle); d.GeomSetRotation(LandGeom, ref R); d.GeomSetPosition(LandGeom, 128, 128, 0); } @@ -2197,17 +2192,17 @@ namespace OpenSim.Region.Physics.OdePlugin d.Matrix3 R = new d.Matrix3(); - Quaternion q1 = Quaternion.FromAngleAxis(1.5707f, new Vector3(1, 0, 0)); - Quaternion q2 = Quaternion.FromAngleAxis(1.5707f, new Vector3(0, 1, 0)); + Quaternion q1 = Quaternion.CreateFromAxisAngle(new Vector3(1, 0, 0), 1.5707f); + Quaternion q2 = Quaternion.CreateFromAxisAngle(new Vector3(0, 1, 0), 1.5707f); //Axiom.Math.Quaternion q3 = Axiom.Math.Quaternion.FromAngleAxis(3.14f, new Axiom.Math.Vector3(0, 0, 1)); q1 = q1 * q2; //q1 = q1 * q3; - Vector3 v3 = new Vector3(); - float angle = 0; - q1.ToAngleAxis(ref angle, ref v3); + Vector3 v3; + float angle; + q1.GetAxisAngle(out v3, out angle); - d.RFromAxisAndAngle(out R, v3.x, v3.y, v3.z, angle); + d.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle); d.GeomSetRotation(WaterGeom, ref R); d.GeomSetPosition(WaterGeom, 128, 128, 0); } diff --git a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs index c674d15cdb..400280ff72 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs @@ -27,8 +27,8 @@ using System; using System.Collections.Generic; -using Axiom.Math; using Nini.Config; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; diff --git a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs index 65f10f9c6d..c8cbcf5f9a 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs @@ -27,7 +27,6 @@ using System; using System.Collections.Generic; -using Axiom.Math; using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; diff --git a/OpenSim/Region/Physics/POSPlugin/POSPrim.cs b/OpenSim/Region/Physics/POSPlugin/POSPrim.cs index fed67dd2a9..69cd19c61c 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSPrim.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSPrim.cs @@ -27,8 +27,8 @@ using System; using System.Collections.Generic; -using Axiom.Math; using Nini.Config; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; diff --git a/OpenSim/Region/Physics/POSPlugin/POSScene.cs b/OpenSim/Region/Physics/POSPlugin/POSScene.cs index a32021d996..9771a62ead 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSScene.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSScene.cs @@ -27,8 +27,8 @@ using System; using System.Collections.Generic; -using Axiom.Math; using Nini.Config; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; @@ -109,14 +109,13 @@ namespace OpenSim.Region.Physics.POSPlugin private bool isColliding(POSCharacter c, POSPrim p) { - Vector3 rotatedPos = p.Orientation.Inverse() * - new Vector3(c.Position.X - p.Position.X, c.Position.Y - p.Position.Y, - c.Position.Z - p.Position.Z); - Vector3 avatarSize = p.Orientation.Inverse()*new Vector3(c.Size.X, c.Size.Y, c.Size.Z); + Vector3 rotatedPos = new Vector3(c.Position.X - p.Position.X, c.Position.Y - p.Position.Y, + c.Position.Z - p.Position.Z) * Quaternion.Inverse(p.Orientation); + Vector3 avatarSize = new Vector3(c.Size.X, c.Size.Y, c.Size.Z) * Quaternion.Inverse(p.Orientation); - if (Math.Abs(rotatedPos.x) >= (p.Size.X*0.5 + Math.Abs(avatarSize.x)) || - Math.Abs(rotatedPos.y) >= (p.Size.Y*0.5 + Math.Abs(avatarSize.y)) || - Math.Abs(rotatedPos.z) >= (p.Size.Z*0.5 + Math.Abs(avatarSize.z))) + if (Math.Abs(rotatedPos.X) >= (p.Size.X*0.5 + Math.Abs(avatarSize.X)) || + Math.Abs(rotatedPos.Y) >= (p.Size.Y*0.5 + Math.Abs(avatarSize.Y)) || + Math.Abs(rotatedPos.Z) >= (p.Size.Z*0.5 + Math.Abs(avatarSize.Z))) { return false; } diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs index 197da0a8d2..37e2a2f300 100644 --- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs @@ -31,7 +31,7 @@ using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; using PhysXWrapper; -using Quaternion=Axiom.Math.Quaternion; +using Quaternion=OpenMetaverse.Quaternion; namespace OpenSim.Region.Physics.PhysXPlugin { @@ -614,12 +614,12 @@ namespace OpenSim.Region.Physics.PhysXPlugin { get { - Quaternion res = new Quaternion(); + Quaternion res; PhysXWrapper.Quaternion quat = _prim.GetOrientation(); - res.w = quat.W; - res.x = quat.X; - res.y = quat.Y; - res.z = quat.Z; + res.W = quat.W; + res.X = quat.X; + res.Y = quat.Y; + res.Z = quat.Z; return res; } set { } diff --git a/OpenSim/Region/ScriptEngine/Common/BuilIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/BuilIn_Commands.cs index 1a50f0b2e8..9c45ab53ae 100644 --- a/OpenSim/Region/ScriptEngine/Common/BuilIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/BuilIn_Commands.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.ScriptEngine.Common @@ -36,7 +36,7 @@ namespace OpenSim.Region.ScriptEngine.Common public class BuilIn_Commands : OSSL_BuilIn_Commands { public BuilIn_Commands(ScriptEngineBase.ScriptEngine scriptEngine, SceneObjectPart host, uint localID, - LLUUID itemID) : base(scriptEngine, host, localID, itemID) + UUID itemID) : base(scriptEngine, host, localID, itemID) { } } diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index bcdff8ff50..0c5d60b3c6 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs @@ -32,9 +32,8 @@ using System.Runtime.Remoting.Lifetime; using System.Text; using System.Threading; using Nini.Config; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Environment; @@ -60,10 +59,10 @@ namespace OpenSim.Region.ScriptEngine.Common internal ScriptEngineBase.ScriptEngine m_ScriptEngine; internal SceneObjectPart m_host; internal uint m_localID; - internal LLUUID m_itemID; + internal UUID m_itemID; internal bool throwErrorOnNotImplemented = true; - public LSL_BuiltIn_Commands(ScriptEngineBase.ScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID) + public LSL_BuiltIn_Commands(ScriptEngineBase.ScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) { m_ScriptEngine = ScriptEngine; m_host = host; @@ -151,11 +150,11 @@ namespace OpenSim.Region.ScriptEngine.Common return World.GetCommander(name); } - private LLUUID InventorySelf() + private UUID InventorySelf() { - LLUUID invItemID = new LLUUID(); + UUID invItemID = new UUID(); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Type == 10 && inv.Value.ItemID == m_itemID) { @@ -167,54 +166,54 @@ namespace OpenSim.Region.ScriptEngine.Common return invItemID; } - private LLUUID InventoryKey(string name, int type) + private UUID InventoryKey(string name, int type) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { if (inv.Value.Type != type) - return LLUUID.Zero; + return UUID.Zero; return inv.Value.AssetID.ToString(); } } - return LLUUID.Zero; + return UUID.Zero; } - private LLUUID InventoryKey(string name) + private UUID InventoryKey(string name) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { return inv.Value.AssetID.ToString(); } } - return LLUUID.Zero; + return UUID.Zero; } /// - /// accepts a valid LLUUID, -or- a name of an inventory item. - /// Returns a valid LLUUID or LLUUID.Zero if key invalid and item not found + /// accepts a valid UUID, -or- a name of an inventory item. + /// Returns a valid UUID or UUID.Zero if key invalid and item not found /// in prim inventory. /// /// /// - private LLUUID KeyOrName(string k) + private UUID KeyOrName(string k) { - LLUUID key = LLUUID.Zero; + UUID key = UUID.Zero; // if we can parse the string as a key, use it. - if (LLUUID.TryParse(k, out key)) + if (UUID.TryParse(k, out key)) { return key; } // else try to locate the name in inventory of object. found returns key, - // not found returns LLUUID.Zero which will translate to the default particle texture + // not found returns UUID.Zero which will translate to the default particle texture else { return InventoryKey(k); @@ -573,7 +572,7 @@ namespace OpenSim.Region.ScriptEngine.Common if (text.Length > 1023) text = text.Substring(0, 1023); - World.SimChat(Helpers.StringToField(text), + World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.Whisper, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); @@ -587,7 +586,7 @@ namespace OpenSim.Region.ScriptEngine.Common if (text.Length > 1023) text = text.Substring(0, 1023); - World.SimChat(Helpers.StringToField(text), + World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.Say, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); @@ -601,7 +600,7 @@ namespace OpenSim.Region.ScriptEngine.Common if (text.Length > 1023) text = text.Substring(0, 1023); - World.SimChat(Helpers.StringToField(text), + World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.Shout, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, true); IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); @@ -628,8 +627,8 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llListen(int channelID, string name, string ID, string msg) { m_host.AddScriptLPS(1); - LLUUID keyID; - LLUUID.TryParse(ID, out keyID); + UUID keyID; + UUID.TryParse(ID, out keyID); IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); return wComm.Listen(m_localID, m_itemID, m_host.UUID, channelID, name, keyID, msg); } @@ -651,8 +650,8 @@ namespace OpenSim.Region.ScriptEngine.Common public void llSensor(string name, string id, int type, double range, double arc) { m_host.AddScriptLPS(1); - LLUUID keyID = LLUUID.Zero; - LLUUID.TryParse(id, out keyID); + UUID keyID = UUID.Zero; + UUID.TryParse(id, out keyID); m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SenseOnce(m_localID, m_itemID, name, keyID, type, range, arc, m_host); } @@ -660,8 +659,8 @@ namespace OpenSim.Region.ScriptEngine.Common public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) { m_host.AddScriptLPS(1); - LLUUID keyID = LLUUID.Zero; - LLUUID.TryParse(id, out keyID); + UUID keyID = UUID.Zero; + UUID.TryParse(id, out keyID); m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host); } @@ -672,7 +671,7 @@ namespace OpenSim.Region.ScriptEngine.Common m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.UnSetSenseRepeaterEvents(m_localID, m_itemID); } - public string resolveName(LLUUID objecUUID) + public string resolveName(UUID objecUUID) { // try avatar username surname CachedUserInfo profile = World.CommsManager.UserProfileCacheService.GetUserDetails(objecUUID); @@ -708,7 +707,7 @@ namespace OpenSim.Region.ScriptEngine.Common { if ((number >= 0) && (number <= SenseList.Length)) { - LLUUID SensedUUID = (LLUUID)SenseList.Data[number]; + UUID SensedUUID = (UUID)SenseList.Data[number]; return resolveName(SensedUUID); } } @@ -741,14 +740,14 @@ namespace OpenSim.Region.ScriptEngine.Common return String.Empty; } - public LLUUID uuidDetectedKey(int number) + public UUID uuidDetectedKey(int number) { LSL_Types.list SenseList = m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.GetSensorList(m_localID, m_itemID); if (SenseList != null) { if ((number >= 0) && (number < SenseList.Length)) { - LLUUID SensedUUID = (LLUUID)SenseList.Data[number]; + UUID SensedUUID = (UUID)SenseList.Data[number]; return SensedUUID; } } @@ -768,14 +767,14 @@ namespace OpenSim.Region.ScriptEngine.Common { if (script.llDetectParams._key[number]) { - return new LLUUID(script.llDetectParams._key[number]); + return new UUID(script.llDetectParams._key[number]); } } } } } } - return LLUUID.Zero; + return UUID.Zero; } public EntityBase entityDetectedKey(int number) @@ -785,7 +784,7 @@ namespace OpenSim.Region.ScriptEngine.Common { if ((number >= 0) && (number < SenseList.Length)) { - LLUUID SensedUUID = (LLUUID)SenseList.Data[number]; + UUID SensedUUID = (UUID)SenseList.Data[number]; EntityBase SensedObject = null; lock (World.Entities) { @@ -810,7 +809,7 @@ namespace OpenSim.Region.ScriptEngine.Common { if (script.llDetectParams._key[number]) { - LLUUID SensedUUID = new LLUUID(script.llDetectParams._key[number]); + UUID SensedUUID = new UUID(script.llDetectParams._key[number]); EntityBase SensedObject = null; lock (World.Entities) { @@ -830,8 +829,8 @@ namespace OpenSim.Region.ScriptEngine.Common public string llDetectedKey(int number) { m_host.AddScriptLPS(1); - LLUUID SensedUUID = uuidDetectedKey(number); - if (SensedUUID == LLUUID.Zero) + UUID SensedUUID = uuidDetectedKey(number); + if (SensedUUID == UUID.Zero) return String.Empty; return SensedUUID.ToString(); } @@ -843,7 +842,7 @@ namespace OpenSim.Region.ScriptEngine.Common EntityBase SensedObject = entityDetectedKey(number); if (SensedObject ==null) return String.Empty; - LLUUID SensedUUID = uuidDetectedKey(number); + UUID SensedUUID = uuidDetectedKey(number); if (World.GetScenePresence(SensedUUID) == null) { // sensed object is not an avatar @@ -870,7 +869,7 @@ namespace OpenSim.Region.ScriptEngine.Common return 0; int mask = 0; - LLUUID SensedUUID = uuidDetectedKey(number); + UUID SensedUUID = uuidDetectedKey(number); LSL_Types.Vector3 ZeroVector = new LSL_Types.Vector3(0, 0, 0); if (World.GetScenePresence(SensedUUID) != null) mask |= 0x01; // actor @@ -888,7 +887,10 @@ namespace OpenSim.Region.ScriptEngine.Common EntityBase SensedObject = entityDetectedKey(number); if (SensedObject == null) return new LSL_Types.Vector3(0, 0, 0); - return new LSL_Types.Vector3(SensedObject.AbsolutePosition.X,SensedObject.AbsolutePosition.Y,SensedObject.AbsolutePosition.Z); + return new LSL_Types.Vector3( + SensedObject.AbsolutePosition.X, + SensedObject.AbsolutePosition.Y, + SensedObject.AbsolutePosition.Z); } public LSL_Types.Vector3 llDetectedVel(int number) @@ -897,7 +899,10 @@ namespace OpenSim.Region.ScriptEngine.Common EntityBase SensedObject = entityDetectedKey(number); if (SensedObject == null) return new LSL_Types.Vector3(0, 0, 0); - return new LSL_Types.Vector3(SensedObject.Velocity.X, SensedObject.Velocity.Y, SensedObject.Velocity.Z); + return new LSL_Types.Vector3( + SensedObject.Velocity.X, + SensedObject.Velocity.Y, + SensedObject.Velocity.Z); } public LSL_Types.Vector3 llDetectedGrab(int number) @@ -910,7 +915,7 @@ namespace OpenSim.Region.ScriptEngine.Common return new LSL_Types.Vector3( SensedObject.AbsolutePosition.X, SensedObject.AbsolutePosition.Y, - SensedObject.AbsolutePosition.Y); + SensedObject.AbsolutePosition.Z); } public LSL_Types.Quaternion llDetectedRot(int number) @@ -919,7 +924,11 @@ namespace OpenSim.Region.ScriptEngine.Common EntityBase SensedObject = entityDetectedKey(number); if (SensedObject == null) return new LSL_Types.Quaternion(); - return new LSL_Types.Quaternion(SensedObject.Rotation.x, SensedObject.Rotation.y, SensedObject.Rotation.z, SensedObject.Rotation.w); + return new LSL_Types.Quaternion( + SensedObject.Rotation.X, + SensedObject.Rotation.Y, + SensedObject.Rotation.Z, + SensedObject.Rotation.W); } public LSL_Types.LSLInteger llDetectedGroup(int number) @@ -1005,7 +1014,7 @@ namespace OpenSim.Region.ScriptEngine.Common if ((status & BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) == BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) { - m_host.AddFlag(LLObject.ObjectFlags.CastShadows); + m_host.AddFlag(PrimFlags.CastShadows); } if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) @@ -1055,25 +1064,25 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llGetStatus(int status) { m_host.AddScriptLPS(1); - // Console.WriteLine(m_host.UUID.ToString() + " status is " + m_host.GetEffectiveObjectFlags().ToString()); + // Console.WriteLine(m_host.ToString() + " status is " + m_host.GetEffectiveObjectFlags().ToString()); switch (status) { case BuiltIn_Commands_BaseClass.STATUS_PHYSICS: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == (uint)LLObject.ObjectFlags.Physics) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) == (uint)PrimFlags.Physics) { return 1; } return 0; case BuiltIn_Commands_BaseClass.STATUS_PHANTOM: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == (uint)LLObject.ObjectFlags.Phantom) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) == (uint)PrimFlags.Phantom) { return 1; } return 0; case BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.CastShadows) == (uint)LLObject.ObjectFlags.CastShadows) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.CastShadows) == (uint)PrimFlags.CastShadows) { return 1; } @@ -1140,7 +1149,7 @@ namespace OpenSim.Region.ScriptEngine.Common scale.y = World.m_maxNonphys; if (scale.z > World.m_maxNonphys) scale.z = World.m_maxNonphys; - LLVector3 tmp = part.Scale; + Vector3 tmp = part.Scale; tmp.X = (float)scale.x; tmp.Y = (float)scale.y; tmp.Z = (float)scale.z; @@ -1163,8 +1172,8 @@ namespace OpenSim.Region.ScriptEngine.Common private void SetColor(SceneObjectPart part, LSL_Types.Vector3 color, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -1200,7 +1209,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void SetGlow(SceneObjectPart part, int face, float glow) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { tex.CreateFace((uint) face); @@ -1247,7 +1256,7 @@ namespace OpenSim.Region.ScriptEngine.Common break; } - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { tex.CreateFace((uint) face); @@ -1275,7 +1284,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void SetFullBright(SceneObjectPart part, int face, bool bright) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { tex.CreateFace((uint) face); @@ -1301,7 +1310,7 @@ namespace OpenSim.Region.ScriptEngine.Common public double llGetAlpha(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color { return (double)((tex.DefaultTexture.RGBA.A * 255) / 255); @@ -1322,8 +1331,8 @@ namespace OpenSim.Region.ScriptEngine.Common private void SetAlpha(SceneObjectPart part, double alpha, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -1450,8 +1459,8 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.Vector3 llGetColor(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = m_host.Shape.Textures; + Color4 texcolor; LSL_Types.Vector3 rgb; if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color { @@ -1484,21 +1493,21 @@ namespace OpenSim.Region.ScriptEngine.Common private void SetTexture(SceneObjectPart part, string texture, int face) { - LLUUID textureID=new LLUUID(); + UUID textureID=new UUID(); - if (!LLUUID.TryParse(texture, out textureID)) + if (!UUID.TryParse(texture, out textureID)) { textureID=InventoryKey(texture, (int)AssetType.Texture); } - if (textureID == LLUUID.Zero) + if (textureID == UUID.Zero) return; - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { - LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); texface.TextureID = textureID; tex.FaceTextures[face] = texface; part.UpdateTexture(tex); @@ -1529,10 +1538,10 @@ namespace OpenSim.Region.ScriptEngine.Common private void ScaleTexture(SceneObjectPart part, double u, double v, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { - LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); texface.RepeatU = (float)u; texface.RepeatV = (float)v; tex.FaceTextures[face] = texface; @@ -1565,10 +1574,10 @@ namespace OpenSim.Region.ScriptEngine.Common private void OffsetTexture(SceneObjectPart part, double u, double v, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { - LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); texface.OffsetU = (float)u; texface.OffsetV = (float)v; tex.FaceTextures[face] = texface; @@ -1601,10 +1610,10 @@ namespace OpenSim.Region.ScriptEngine.Common private void RotateTexture(SceneObjectPart part, double rotation, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { - LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); texface.Rotation = (float)rotation; tex.FaceTextures[face] = texface; part.UpdateTexture(tex); @@ -1628,14 +1637,14 @@ namespace OpenSim.Region.ScriptEngine.Common public string llGetTexture(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; if (face == -1) { face = 0; } if (face > -1) { - LLObject.TextureEntryFace texface; + Primitive.TextureEntryFace texface; texface = tex.GetFace((uint)face); return texface.TextureID.ToString(); } @@ -1665,11 +1674,11 @@ namespace OpenSim.Region.ScriptEngine.Common if (part.ParentID != 0) { - part.UpdateOffSet(new LLVector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z)); + part.UpdateOffSet(new Vector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z)); } else { - part.UpdateGroupPosition(new LLVector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z)); + part.UpdateGroupPosition(new Vector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z)); } } @@ -1709,7 +1718,7 @@ namespace OpenSim.Region.ScriptEngine.Common private void SetRot(SceneObjectPart part, LSL_Types.Quaternion rot) { - part.UpdateRotation(new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s)); + part.UpdateRotation(new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s)); // Update rotation does not move the object in the physics scene if it's a linkset. part.ParentGroup.AbsolutePosition = part.ParentGroup.AbsolutePosition; } @@ -1717,14 +1726,18 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.Quaternion llGetRot() { m_host.AddScriptLPS(1); - LLQuaternion q = m_host.RotationOffset; + Quaternion q = m_host.RotationOffset; return new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); } public LSL_Types.Quaternion llGetLocalRot() { m_host.AddScriptLPS(1); - return new LSL_Types.Quaternion(m_host.RotationOffset.X, m_host.RotationOffset.Y, m_host.RotationOffset.Z, m_host.RotationOffset.W); + return new LSL_Types.Quaternion( + m_host.RotationOffset.X, + m_host.RotationOffset.Y, + m_host.RotationOffset.Z, + m_host.RotationOffset.W); } public void llSetForce(LSL_Types.Vector3 force, int local) @@ -1769,7 +1782,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range) { m_host.AddScriptLPS(1); - return m_host.registerTargetWaypoint(new LLVector3((float)position.x, (float)position.y, (float)position.z), (float)range); + return m_host.registerTargetWaypoint(new Vector3((float)position.x, (float)position.y, (float)position.z), (float)range); } @@ -1795,7 +1808,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void llMoveToTarget(LSL_Types.Vector3 target, double tau) { m_host.AddScriptLPS(1); - m_host.MoveToTarget(new LLVector3((float)target.x, (float)target.y, (float)target.z), (float)tau); + m_host.MoveToTarget(new Vector3((float)target.x, (float)target.y, (float)target.z), (float)tau); } public void llStopMoveToTarget() @@ -1816,7 +1829,7 @@ namespace OpenSim.Region.ScriptEngine.Common if (force.z > 20000) force.z = 20000; - m_host.ApplyImpulse(new LLVector3((float)force.x, (float)force.y, (float)force.z), local != 0); + m_host.ApplyImpulse(new Vector3((float)force.x, (float)force.y, (float)force.z), local != 0); } public void llApplyRotationalImpulse(LSL_Types.Vector3 force, int local) @@ -1925,7 +1938,7 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); - if (m_host.Sound != LLUUID.Zero) + if (m_host.Sound != UUID.Zero) llStopSound(); m_host.Sound = KeyOrName(sound); @@ -1967,7 +1980,7 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); - m_host.Sound = LLUUID.Zero; + m_host.Sound = UUID.Zero; m_host.SoundGain = 0; m_host.SoundFlags = 0; m_host.SoundRadius = 0; @@ -1975,7 +1988,7 @@ namespace OpenSim.Region.ScriptEngine.Common m_host.ScheduleFullUpdate(); m_host.SendFullUpdateToAllClients(); - // m_host.SendSound(LLUUID.Zero.ToString(), 1.0, false, 2); + // m_host.SendSound(UUID.Zero.ToString(), 1.0, false, 2); } public void llPreloadSound(string sound) @@ -2223,13 +2236,13 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llGiveMoney(string destination, int amount) { - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return 0; m_host.AddScriptLPS(1); - if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) + if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) return 0; if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_DEBIT) == 0) @@ -2238,9 +2251,9 @@ namespace OpenSim.Region.ScriptEngine.Common return 0; } - LLUUID toID=new LLUUID(); + UUID toID=new UUID(); - if (!LLUUID.TryParse(destination, out toID)) + if (!UUID.TryParse(destination, out toID)) { LSLError("Bad key in llGiveMoney"); return 0; @@ -2303,7 +2316,7 @@ namespace OpenSim.Region.ScriptEngine.Common // it's possible to have two items with the same task inventory name. // this is an easter egg of sorts. - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == inventory) { @@ -2314,18 +2327,18 @@ namespace OpenSim.Region.ScriptEngine.Common continue; } - LLVector3 llpos = new LLVector3((float)pos.x, (float)pos.y, (float)pos.z); + Vector3 llpos = new Vector3((float)pos.x, (float)pos.y, (float)pos.z); // test if we're further away then 10m if (Util.GetDistanceTo(llpos, m_host.AbsolutePosition) > 10) return; // wiki says, if it's further away then 10m, silently fail. - LLVector3 llvel = new LLVector3((float)vel.x, (float)vel.y, (float)vel.z); + Vector3 llvel = new Vector3((float)vel.x, (float)vel.y, (float)vel.z); // need the magnitude later float velmag = (float)Util.GetMagnitude(llvel); - SceneObjectGroup new_group = World.RezObject(m_host, inv.Value, llpos, new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), llvel, param); + SceneObjectGroup new_group = World.RezObject(m_host, inv.Value, llpos, new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), llvel, param); // If either of these are null, then there was an unknown error. if (new_group == null) @@ -2336,7 +2349,7 @@ namespace OpenSim.Region.ScriptEngine.Common // objects rezzed with this method are die_at_edge by default. new_group.RootPart.SetDieAtEdge(true); - m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "object_rez", EventQueueManager.llDetectNull, new Object[] { new LSL_Types.LSLString(new_group.RootPart.UUID.ToString()) }); + m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "object_rez", EventQueueManager.llDetectNull, new Object[] { new LSL_Types.LSLString(new_group.RootPart.ToString()) }); float groupmass = new_group.GetMass(); //Recoil. @@ -2401,7 +2414,7 @@ namespace OpenSim.Region.ScriptEngine.Common return; } - if (m_host.TaskInventory[InventorySelf()].PermsGranter != LLUUID.Zero) + if (m_host.TaskInventory[InventorySelf()].PermsGranter != UUID.Zero) { ScenePresence presence = World.GetScenePresence(m_host.TaskInventory[InventorySelf()].PermsGranter); @@ -2428,7 +2441,7 @@ namespace OpenSim.Region.ScriptEngine.Common return; } - if (m_host.TaskInventory[InventorySelf()].PermsGranter != LLUUID.Zero) + if (m_host.TaskInventory[InventorySelf()].PermsGranter != UUID.Zero) { ScenePresence presence = World.GetScenePresence(m_host.TaskInventory[InventorySelf()].PermsGranter); @@ -2489,14 +2502,14 @@ namespace OpenSim.Region.ScriptEngine.Common // TODO: figure out values for client, fromSession, and imSessionID // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); - LLUUID friendTransactionID = LLUUID.Random(); + UUID friendTransactionID = UUID.Random(); //m_pendingFriendRequests.Add(friendTransactionID, fromAgentID); GridInstantMessage msg = new GridInstantMessage(); - msg.fromAgentID = new Guid(m_host.UUID.ToString()); // fromAgentID.UUID; + msg.fromAgentID = new Guid(m_host.ToString()); // fromAgentID.Guid; msg.fromAgentSession = new Guid(friendTransactionID.ToString());// fromAgentSession.UUID; - msg.toAgentID = new Guid(user); // toAgentID.UUID; + msg.toAgentID = new Guid(user); // toAgentID.Guid; msg.imSessionID = new Guid(friendTransactionID.ToString()); // This is the item we're mucking with here // Console.WriteLine("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message); // Console.WriteLine("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString()); @@ -2514,8 +2527,8 @@ namespace OpenSim.Region.ScriptEngine.Common msg.fromGroup = false;// fromGroup; msg.offline = (byte)0; //offline; msg.ParentEstateID = 0; //ParentEstateID; - msg.Position = new sLLVector3();// new sLLVector3(m_host.AbsolutePosition); - msg.RegionID = World.RegionInfo.RegionID.UUID;//RegionID.UUID; + msg.Position = Vector3.Zero;// new Vector3(m_host.AbsolutePosition); + msg.RegionID = World.RegionInfo.RegionID.Guid;//RegionID.Guid; msg.binaryBucket = new byte[0];// binaryBucket; World.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule); // ScriptSleep(2000); @@ -2543,7 +2556,7 @@ namespace OpenSim.Region.ScriptEngine.Common public string llGetKey() { m_host.AddScriptLPS(1); - return m_host.UUID.ToString(); + return m_host.ToString(); } public void llSetBuoyancy(double buoyancy) @@ -2607,11 +2620,11 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return; - if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) + if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) return; if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) @@ -2620,9 +2633,9 @@ namespace OpenSim.Region.ScriptEngine.Common if (presence != null) { - // Do NOT try to parse LLUUID, animations cannot be triggered by ID - LLUUID animID=InventoryKey(anim, (int)AssetType.Animation); - if (animID == LLUUID.Zero) + // Do NOT try to parse UUID, animations cannot be triggered by ID + UUID animID=InventoryKey(anim, (int)AssetType.Animation); + if (animID == UUID.Zero) presence.AddAnimation(anim); else presence.AddAnimation(animID); @@ -2634,30 +2647,30 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return; - if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) + if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) return; if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) { - LLUUID animID = new LLUUID(); + UUID animID = new UUID(); - if (!LLUUID.TryParse(anim, out animID)) + if (!UUID.TryParse(anim, out animID)) { animID=InventoryKey(anim); } - if (animID == LLUUID.Zero) + if (animID == UUID.Zero) return; ScenePresence presence = World.GetScenePresence(m_host.TaskInventory[invItemID].PermsGranter); if (presence != null) { - if (animID == LLUUID.Zero) + if (animID == UUID.Zero) presence.RemoveAnimation(anim); else presence.RemoveAnimation(animID); @@ -2680,8 +2693,8 @@ namespace OpenSim.Region.ScriptEngine.Common public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain) { m_host.AddScriptLPS(1); - m_host.RotationalVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); - m_host.AngularVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); + m_host.RotationalVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); + m_host.AngularVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); m_host.ScheduleTerseUpdate(); m_host.SendTerseUpdateToAllClients(); } @@ -2700,19 +2713,19 @@ namespace OpenSim.Region.ScriptEngine.Common public void llRequestPermissions(string agent, int perm) { - LLUUID agentID=new LLUUID(); + UUID agentID=new UUID(); - if (!LLUUID.TryParse(agent, out agentID)) + if (!UUID.TryParse(agent, out agentID)) return; - LLUUID invItemID=InventorySelf(); + UUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + if (invItemID == UUID.Zero) return; // Not in a prim? How?? - if (agentID == LLUUID.Zero || perm == 0) // Releasing permissions + if (agentID == UUID.Zero || perm == 0) // Releasing permissions { - m_host.TaskInventory[invItemID].PermsGranter=LLUUID.Zero; + m_host.TaskInventory[invItemID].PermsGranter=UUID.Zero; m_host.TaskInventory[invItemID].PermsMask=0; m_ScriptEngine.m_EventQueueManager.AddToScriptQueue( @@ -2786,14 +2799,14 @@ namespace OpenSim.Region.ScriptEngine.Common m_localID, m_itemID, "run_time_permissions", EventQueueManager.llDetectNull, new Object[] {new LSL_Types.LSLInteger(0)}); } - void handleScriptAnswer(IClientAPI client, LLUUID taskID, LLUUID itemID, int answer) + void handleScriptAnswer(IClientAPI client, UUID taskID, UUID itemID, int answer) { if (taskID != m_host.UUID) return; - LLUUID invItemID=InventorySelf(); + UUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + if (invItemID == UUID.Zero) return; client.OnScriptAnswer-=handleScriptAnswer; @@ -2816,7 +2829,7 @@ namespace OpenSim.Region.ScriptEngine.Common } } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public LSL_Types.LSLInteger llGetPermissions() @@ -2854,8 +2867,8 @@ namespace OpenSim.Region.ScriptEngine.Common SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknumber); if (linknumber > -1) { - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -2901,8 +2914,8 @@ namespace OpenSim.Region.ScriptEngine.Common { linknumber = w; part = m_host.ParentGroup.GetLinkNumPart(linknumber); - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -2945,7 +2958,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void llCreateLink(string target, int parent) { m_host.AddScriptLPS(1); - LLUUID invItemID = InventorySelf(); + UUID invItemID = InventorySelf(); if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_CHANGE_LINKS) == 0) { ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); return; @@ -2970,7 +2983,7 @@ namespace OpenSim.Region.ScriptEngine.Common childPrim.RootPart.UpdateFlag = uf; } parentPrim.TriggerScriptChangedEvent(Changed.LINK); - parentPrim.RootPart.AddFlag(LLObject.ObjectFlags.CreateSelected); + parentPrim.RootPart.AddFlag(PrimFlags.CreateSelected); parentPrim.GetProperties(client); ScriptSleep(1000); @@ -2994,11 +3007,11 @@ namespace OpenSim.Region.ScriptEngine.Common SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum); if (part != null) { - return part.UUID.ToString(); + return part.ToString(); } else { - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } } @@ -3020,7 +3033,7 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); int count = 0; - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Type == type || type == -1) { @@ -3034,7 +3047,7 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); ArrayList keys = new ArrayList(); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Type == type || type == -1) { @@ -3055,7 +3068,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void llSetScriptState(string name, int run) { - LLUUID item; + UUID item; ScriptManager sm; IScript script = null; @@ -3064,7 +3077,7 @@ namespace OpenSim.Region.ScriptEngine.Common // These functions are supposed to be robust, // so get the state one step at a time. - if ((item = ScriptByName(name)) != LLUUID.Zero) + if ((item = ScriptByName(name)) != UUID.Zero) { if ((sm = m_ScriptEngine.m_ScriptManager) != null) { @@ -3098,17 +3111,17 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); bool found = false; - LLUUID destId = LLUUID.Zero; - LLUUID objId = LLUUID.Zero; + UUID destId = UUID.Zero; + UUID objId = UUID.Zero; - if (!LLUUID.TryParse(destination, out destId)) + if (!UUID.TryParse(destination, out destId)) { llSay(0, "Could not parse key " + destination); return; } // move the first object found with this inventory name - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == inventory) { @@ -3186,22 +3199,22 @@ namespace OpenSim.Region.ScriptEngine.Common { if (item.Type == 3 && item.Name == name) { - LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.m_Dataserver.RegisterRequest( + UUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.m_Dataserver.RegisterRequest( m_localID, m_itemID, item.AssetID.ToString()); - LLVector3 region = new LLVector3( + Vector3 region = new Vector3( World.RegionInfo.RegionLocX * Constants.RegionSize, World.RegionInfo.RegionLocY * Constants.RegionSize, 0); World.AssetCache.GetAsset(item.AssetID, - delegate(LLUUID i, AssetBase a) + delegate(UUID i, AssetBase a) { AssetLandmark lm = new AssetLandmark(a); float rx = (uint)(lm.RegionHandle >> 32); float ry = (uint)lm.RegionHandle; - region = lm.Position + new LLVector3(rx, ry, 0) - region; + region = lm.Position + new Vector3(rx, ry, 0) - region; string reply = region.ToString(); m_ScriptEngine.m_ASYNCLSLCommandManager. @@ -3226,8 +3239,8 @@ namespace OpenSim.Region.ScriptEngine.Common public void llTeleportAgentHome(string agent) { m_host.AddScriptLPS(1); - LLUUID agentId = new LLUUID(); - if (LLUUID.TryParse(agent, out agentId)) + UUID agentId = new UUID(); + if (UUID.TryParse(agent, out agentId)) { ScenePresence presence = World.GetScenePresence(agentId); if (presence != null) @@ -3243,7 +3256,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void llModifyLand(int action, int brush) { m_host.AddScriptLPS(1); - World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new LLVector3(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, 0)); + World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new Vector3(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, 0)); } public void llCollisionSound(string impact_sound, double impact_volume) @@ -3277,7 +3290,7 @@ namespace OpenSim.Region.ScriptEngine.Common m_host.AddScriptLPS(1); uint partLocalID; - LLUUID partItemID; + UUID partItemID; switch ((int)linknum) { @@ -3452,7 +3465,7 @@ namespace OpenSim.Region.ScriptEngine.Common SceneObjectPart targ = World.GetSceneObjectPart(target); if (targ == null) return; - targ.ApplyImpulse(new LLVector3((float)impulse.x, (float)impulse.y, (float)impulse.z), local != 0); + targ.ApplyImpulse(new Vector3((float)impulse.x, (float)impulse.y, (float)impulse.z), local != 0); } public void llPassCollisions(int pass) @@ -3731,7 +3744,7 @@ namespace OpenSim.Region.ScriptEngine.Common public string llGetInventoryKey(string name) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { @@ -3741,11 +3754,11 @@ namespace OpenSim.Region.ScriptEngine.Common } else { - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } } } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public void llAllowInventoryDrop(int add) @@ -3763,10 +3776,10 @@ namespace OpenSim.Region.ScriptEngine.Common m_host.AddScriptLPS(1); LSL_Types.Vector3 SunDoubleVector3; - LLVector3 SunFloatVector3; + Vector3 SunFloatVector3; // sunPosition estate setting is set in OpenSim.Region.Environment.Modules.SunModule - // have to convert from LLVector3 (float) to LSL_Types.Vector3 (double) + // have to convert from Vector3 (float) to LSL_Types.Vector3 (double) SunFloatVector3 = World.RegionInfo.RegionSettings.SunVector; SunDoubleVector3.x = (double)SunFloatVector3.X; SunDoubleVector3.y = (double)SunFloatVector3.Y; @@ -3778,7 +3791,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.Vector3 llGetTextureOffset(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; LSL_Types.Vector3 offset; if (face == -1) { @@ -3793,7 +3806,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.Vector3 llGetTextureScale(int side) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; LSL_Types.Vector3 scale; if (side == -1) { @@ -3808,7 +3821,7 @@ namespace OpenSim.Region.ScriptEngine.Common public double llGetTextureRot(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; if (face == -1) { face = 0; @@ -3825,14 +3838,14 @@ namespace OpenSim.Region.ScriptEngine.Common public string llGetOwnerKey(string id) { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id, out key)) + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) { return World.GetSceneObjectPart(World.Entities[key].LocalId).OwnerID.ToString(); } else { - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } } @@ -4041,8 +4054,8 @@ namespace OpenSim.Region.ScriptEngine.Common return 2; if (src.Data[index] is String) { - LLUUID tuuid; - if (LLUUID.TryParse(src.Data[index].ToString(), out tuuid)) + UUID tuuid; + if (UUID.TryParse(src.Data[index].ToString(), out tuuid)) { return 3; } @@ -4454,8 +4467,8 @@ namespace OpenSim.Region.ScriptEngine.Common public string llKey2Name(string id) { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id,out key)) + UUID key = new UUID(); + if (UUID.TryParse(id,out key)) { ScenePresence presence = World.GetScenePresence(key); @@ -4479,7 +4492,7 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); Primitive.TextureAnimation pTexAnim = new Primitive.TextureAnimation(); - pTexAnim.Flags =(uint) mode; + pTexAnim.Flags =(Primitive.TextureAnimMode)mode; //ALL_SIDES if (face == -1) @@ -4568,8 +4581,8 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llOverMyLand(string id) { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id,out key)) + UUID key = new UUID(); + if (UUID.TryParse(id,out key)) { ScenePresence presence = World.GetScenePresence(key); if (presence != null) // object is an avatar @@ -4612,8 +4625,8 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id, out key)) + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) { ScenePresence av = World.GetScenePresence(key); @@ -4751,8 +4764,8 @@ namespace OpenSim.Region.ScriptEngine.Common Primitive.ParticleSystem ps = new Primitive.ParticleSystem(); // TODO find out about the other defaults and add them here - ps.PartStartColor = new LLColor(1.0f, 1.0f, 1.0f, 1.0f); - ps.PartEndColor = new LLColor(1.0f, 1.0f, 1.0f, 1.0f); + ps.PartStartColor = new Color4(1.0f, 1.0f, 1.0f, 1.0f); + ps.PartEndColor = new Color4(1.0f, 1.0f, 1.0f, 1.0f); ps.PartStartScaleX = 1.0f; ps.PartStartScaleY = 1.0f; ps.PartEndScaleX = 1.0f; @@ -4800,7 +4813,7 @@ namespace OpenSim.Region.ScriptEngine.Common case (int)BuiltIn_Commands_BaseClass.PSYS_PART_END_COLOR: tempv = (LSL_Types.Vector3)rules.Data[i + 1]; - //prules.PartEndColor = new LLColor(tempv.x,tempv.y,tempv.z,1); + //prules.PartEndColor = new Color4(tempv.x,tempv.y,tempv.z,1); prules.PartEndColor.R = (float)tempv.x; prules.PartEndColor.G = (float)tempv.y; @@ -4879,8 +4892,8 @@ namespace OpenSim.Region.ScriptEngine.Common break; case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_TARGET_KEY: - LLUUID key = LLUUID.Zero; - if (LLUUID.TryParse(rules.Data[i + 1].ToString(), out key)) + UUID key = UUID.Zero; + if (UUID.TryParse(rules.Data[i + 1].ToString(), out key)) { prules.Target = key; } @@ -4924,37 +4937,37 @@ namespace OpenSim.Region.ScriptEngine.Common NotImplemented("llGroundRepel"); } - private LLUUID GetTaskInventoryItem(string name) + private UUID GetTaskInventoryItem(string name) { - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) return inv.Key; } - return LLUUID.Zero; + return UUID.Zero; } public void llGiveInventoryList(string destination, string category, LSL_Types.list inventory) { m_host.AddScriptLPS(1); - LLUUID destID; - if (!LLUUID.TryParse(destination, out destID)) + UUID destID; + if (!UUID.TryParse(destination, out destID)) return; - List itemList = new List(); + List itemList = new List(); foreach (Object item in inventory.Data) { - LLUUID itemID; - if (LLUUID.TryParse(item.ToString(), out itemID)) + UUID itemID; + if (UUID.TryParse(item.ToString(), out itemID)) { itemList.Add(itemID); } else { itemID = GetTaskInventoryItem(item.ToString()); - if (itemID != LLUUID.Zero) + if (itemID != UUID.Zero) itemList.Add(itemID); } } @@ -5015,7 +5028,7 @@ namespace OpenSim.Region.ScriptEngine.Common rot.z = 1; // ZERO_ROTATION = 0,0,0,1 m_host.SitTargetPosition = new Vector3((float)offset.x, (float)offset.y, (float)offset.z); - m_host.SitTargetOrientation = new Quaternion((float)rot.s, (float)rot.x, (float)rot.y, (float)rot.z); + m_host.SitTargetOrientation = new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); } public string llAvatarOnSitTarget() @@ -5027,12 +5040,12 @@ namespace OpenSim.Region.ScriptEngine.Common public void llAddToLandPassList(string avatar, double hours) { m_host.AddScriptLPS(1); - LLUUID key; + UUID key; LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).landData; if (land.OwnerID == m_host.OwnerID) { ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); - if (LLUUID.TryParse(avatar, out key)) + if (UUID.TryParse(avatar, out key)) { entry.AgentID = key; entry.Flags = ParcelManager.AccessList.Access; @@ -5058,13 +5071,13 @@ namespace OpenSim.Region.ScriptEngine.Common public void llSetCameraEyeOffset(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - m_host.SetCameraEyeOffset(new LLVector3((float)offset.x, (float)offset.y, (float)offset.z)); + m_host.SetCameraEyeOffset(new Vector3((float)offset.x, (float)offset.y, (float)offset.z)); } public void llSetCameraAtOffset(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - m_host.SetCameraAtOffset(new LLVector3((float)offset.x, (float)offset.y, (float)offset.z)); + m_host.SetCameraAtOffset(new Vector3((float)offset.x, (float)offset.y, (float)offset.z)); } public string llDumpList2String(LSL_Types.list src, string seperator) @@ -5086,7 +5099,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llScriptDanger(LSL_Types.Vector3 pos) { m_host.AddScriptLPS(1); - bool result = World.scriptDanger(m_host.LocalId, new LLVector3((float)pos.x, (float)pos.y, (float)pos.z)); + bool result = World.scriptDanger(m_host.LocalId, new Vector3((float)pos.x, (float)pos.y, (float)pos.z)); if (result) { return 1; @@ -5101,8 +5114,8 @@ namespace OpenSim.Region.ScriptEngine.Common public void llDialog(string avatar, string message, LSL_Types.list buttons, int chat_channel) { m_host.AddScriptLPS(1); - LLUUID av = new LLUUID(); - if (!LLUUID.TryParse(avatar,out av)) + UUID av = new UUID(); + if (!UUID.TryParse(avatar,out av)) { LSLError("First parameter to llDialog needs to be a key"); return; @@ -5127,7 +5140,7 @@ namespace OpenSim.Region.ScriptEngine.Common } buts[i] = buttons.Data[i].ToString(); } - World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new LLUUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); + World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); // ScriptSleep(1000); } @@ -5144,7 +5157,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void llResetOtherScript(string name) { - LLUUID item; + UUID item; ScriptManager sm; IScript script = null; @@ -5153,7 +5166,7 @@ namespace OpenSim.Region.ScriptEngine.Common // These functions are supposed to be robust, // so get the state one step at a time. - if ((item = ScriptByName(name)) != LLUUID.Zero) + if ((item = ScriptByName(name)) != UUID.Zero) if ((sm = m_ScriptEngine.m_ScriptManager) != null) sm.ResetScript(m_localID, item); @@ -5168,7 +5181,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llGetScriptState(string name) { - LLUUID item; + UUID item; ScriptManager sm; IScript script = null; @@ -5177,7 +5190,7 @@ namespace OpenSim.Region.ScriptEngine.Common // These functions are supposed to be robust, // so get the state one step at a time. - if ((item = ScriptByName(name)) != LLUUID.Zero) + if ((item = ScriptByName(name)) != UUID.Zero) { if ((sm = m_ScriptEngine.m_ScriptManager) != null) { @@ -5216,10 +5229,10 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); bool found = false; - LLUUID destId = LLUUID.Zero; - LLUUID srcId = LLUUID.Zero; + UUID destId = UUID.Zero; + UUID srcId = UUID.Zero; - if (!LLUUID.TryParse(target, out destId)) + if (!UUID.TryParse(target, out destId)) { llSay(0, "Could not parse key " + target); return; @@ -5232,7 +5245,7 @@ namespace OpenSim.Region.ScriptEngine.Common } // copy the first script found with this inventory name - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { @@ -5264,8 +5277,8 @@ namespace OpenSim.Region.ScriptEngine.Common IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); if (xmlrpcMod.IsEnabled()) { - LLUUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, LLUUID.Zero); - object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(LLUUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) }; + UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, UUID.Zero); + object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(UUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) }; m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "remote_data", EventQueueManager.llDetectNull, resobj); } // ScriptSleep(1000); @@ -5583,9 +5596,9 @@ namespace OpenSim.Region.ScriptEngine.Common private void SetPrimitiveShapeParams(SceneObjectPart part, string map, int type) { ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); - LLUUID sculptId; + UUID sculptId; - if (!LLUUID.TryParse(map, out sculptId)) + if (!UUID.TryParse(map, out sculptId)) { llSay(0, "Could not parse key " + map); return; @@ -6015,9 +6028,9 @@ namespace OpenSim.Region.ScriptEngine.Common ScenePresence av = World.GetScenePresence(id); if (av == null) return l; - LLUUID[] anims; + UUID[] anims; anims = av.GetAnimationArray(); - foreach (LLUUID foo in anims) + foreach (UUID foo in anims) l.Add(foo.ToString()); return l; } @@ -6025,8 +6038,8 @@ namespace OpenSim.Region.ScriptEngine.Common public void llSetParcelMusicURL(string url) { m_host.AddScriptLPS(1); - LLUUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); - if (landowner == LLUUID.Zero) + UUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); + if (landowner == UUID.Zero) { return; } @@ -6041,9 +6054,9 @@ namespace OpenSim.Region.ScriptEngine.Common public void osSetParcelMediaURL(string url) { m_host.AddScriptLPS(1); - LLUUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); + UUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); - if (landowner == LLUUID.Zero) + if (landowner == UUID.Zero) { return; } @@ -6059,13 +6072,20 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.Vector3 llGetRootPosition() { m_host.AddScriptLPS(1); - return new LSL_Types.Vector3(m_host.ParentGroup.AbsolutePosition.X, m_host.ParentGroup.AbsolutePosition.Y, m_host.ParentGroup.AbsolutePosition.Z); + return new LSL_Types.Vector3( + m_host.ParentGroup.AbsolutePosition.X, + m_host.ParentGroup.AbsolutePosition.Y, + m_host.ParentGroup.AbsolutePosition.Z); } public LSL_Types.Quaternion llGetRootRotation() { m_host.AddScriptLPS(1); - return new LSL_Types.Quaternion(m_host.ParentGroup.GroupRotation.X, m_host.ParentGroup.GroupRotation.Y, m_host.ParentGroup.GroupRotation.Z, m_host.ParentGroup.GroupRotation.W); + return new LSL_Types.Quaternion( + m_host.ParentGroup.GroupRotation.X, + m_host.ParentGroup.GroupRotation.Y, + m_host.ParentGroup.GroupRotation.Z, + m_host.ParentGroup.GroupRotation.W); } public string llGetObjectDesc() @@ -6097,8 +6117,8 @@ namespace OpenSim.Region.ScriptEngine.Common SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknumber); if (linknumber > -1) { - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -6136,8 +6156,8 @@ namespace OpenSim.Region.ScriptEngine.Common { linknumber = w; part = m_host.ParentGroup.GetLinkNumPart(linknumber); - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -6184,7 +6204,8 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.Vector3 llGetGeometricCenter() { - return new LSL_Types.Vector3(m_host.GetGeometricCenter().X, m_host.GetGeometricCenter().Y, m_host.GetGeometricCenter().Z); + return new LSL_Types.Vector3( + m_host.GetGeometricCenter().X, m_host.GetGeometricCenter().Y, m_host.GetGeometricCenter().Z); } public LSL_Types.list llGetPrimitiveParams(LSL_Types.list rules) @@ -6205,21 +6226,21 @@ namespace OpenSim.Region.ScriptEngine.Common break; case (int)BuiltIn_Commands_BaseClass.PRIM_PHYSICS: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) != 0) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) != 0) res.Add(new LSL_Types.LSLInteger(1)); else res.Add(new LSL_Types.LSLInteger(0)); break; case (int)BuiltIn_Commands_BaseClass.PRIM_TEMP_ON_REZ: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.TemporaryOnRez) != 0) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) != 0) res.Add(new LSL_Types.LSLInteger(1)); else res.Add(new LSL_Types.LSLInteger(0)); break; case (int)BuiltIn_Commands_BaseClass.PRIM_PHANTOM: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) != 0) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) != 0) res.Add(new LSL_Types.LSLInteger(1)); else res.Add(new LSL_Types.LSLInteger(0)); @@ -6324,8 +6345,8 @@ namespace OpenSim.Region.ScriptEngine.Common if (face == -1) face = 0; - LLObject.TextureEntry tex = m_host.Shape.Textures; - LLObject.TextureEntryFace texface = tex.GetFace((uint)face); + Primitive.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); res.Add(new LSL_Types.LSLString(texface.TextureID.ToString())); res.Add(new LSL_Types.Vector3(texface.RepeatU, @@ -6344,7 +6365,7 @@ namespace OpenSim.Region.ScriptEngine.Common face=Convert.ToInt32("" + rules.Data[idx++]); tex = m_host.Shape.Textures; - LLColor texcolor; + Color4 texcolor; if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color texcolor = tex.DefaultTexture.RGBA; else @@ -6698,7 +6719,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void llSetLocalRot(LSL_Types.Quaternion rot) { m_host.AddScriptLPS(1); - m_host.RotationOffset = new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); + m_host.RotationOffset = new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); // ScriptSleep(200); } @@ -6954,7 +6975,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llGetInventoryPermMask(string item, int mask) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == item) { @@ -6985,7 +7006,7 @@ namespace OpenSim.Region.ScriptEngine.Common public string llGetInventoryCreator(string item) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == item) { @@ -7000,7 +7021,7 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); - World.SimChatBroadcast(Helpers.StringToField(msg), ChatTypeEnum.Owner, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); + World.SimChatBroadcast(Utils.StringToBytes(msg), ChatTypeEnum.Owner, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); // IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); // wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg); } @@ -7021,7 +7042,7 @@ namespace OpenSim.Region.ScriptEngine.Common if (info == null) { // ScriptSleep(1000); - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } reply = new LSL_Types.Vector3( info.RegionLocX * Constants.RegionSize, @@ -7038,7 +7059,7 @@ namespace OpenSim.Region.ScriptEngine.Common if (info == null) { // ScriptSleep(1000); - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } int access = info.RegionSettings.Maturity; if (access == 0) @@ -7053,11 +7074,11 @@ namespace OpenSim.Region.ScriptEngine.Common break; default: // ScriptSleep(1000); - return LLUUID.Zero.ToString(); // Raise no event + return UUID.Zero.ToString(); // Raise no event } - LLUUID rq = LLUUID.Random(); + UUID rq = UUID.Random(); - LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. + UUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. m_Dataserver.RegisterRequest(m_localID, m_itemID, rq.ToString()); m_ScriptEngine.m_ASYNCLSLCommandManager. @@ -7069,7 +7090,7 @@ namespace OpenSim.Region.ScriptEngine.Common catch(Exception e) { Console.WriteLine(e.ToString()); - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } } @@ -7082,8 +7103,8 @@ namespace OpenSim.Region.ScriptEngine.Common public double llGetObjectMass(string id) { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id,out key)) + UUID key = new UUID(); + if (UUID.TryParse(id,out key)) { return (double)World.GetSceneObjectPart(World.Entities[key].LocalId).GetMass(); } @@ -7175,7 +7196,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void llLoadURL(string avatar_id, string message, string url) { m_host.AddScriptLPS(1); - LLUUID avatarId = new LLUUID(avatar_id); + UUID avatarId = new UUID(avatar_id); m_ScriptEngine.World.SendUrlToUser(avatarId, m_host.Name, m_host.UUID, m_host.ObjectOwner, false, message, url); // ScriptSleep(10000); @@ -7321,7 +7342,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llGetInventoryType(string name) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { @@ -7350,10 +7371,10 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.Vector3 llGetCameraPos() { m_host.AddScriptLPS(1); - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return new LSL_Types.Vector3(); - if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) + if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) return new LSL_Types.Vector3(); if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRACK_CAMERA) == 0) { @@ -7363,7 +7384,10 @@ namespace OpenSim.Region.ScriptEngine.Common ScenePresence presence = World.GetScenePresence(m_host.OwnerID); if (presence != null) { - LSL_Types.Vector3 pos = new LSL_Types.Vector3(presence.CameraPosition.x,presence.CameraPosition.y,presence.CameraPosition.z); + LSL_Types.Vector3 pos = new LSL_Types.Vector3( + presence.CameraPosition.X, + presence.CameraPosition.Y, + presence.CameraPosition.Z); return pos; } return new LSL_Types.Vector3(); @@ -7426,12 +7450,12 @@ namespace OpenSim.Region.ScriptEngine.Common public void llAddToLandBanList(string avatar, double hours) { m_host.AddScriptLPS(1); - LLUUID key; + UUID key; LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).landData; if (land.OwnerID == m_host.OwnerID) { ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); - if (LLUUID.TryParse(avatar, out key)) + if (UUID.TryParse(avatar, out key)) { entry.AgentID = key; entry.Flags = ParcelManager.AccessList.Ban; @@ -7445,11 +7469,11 @@ namespace OpenSim.Region.ScriptEngine.Common public void llRemoveFromLandPassList(string avatar) { m_host.AddScriptLPS(1); - LLUUID key; + UUID key; LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).landData; if (land.OwnerID == m_host.OwnerID) { - if (LLUUID.TryParse(avatar, out key)) + if (UUID.TryParse(avatar, out key)) { foreach (ParcelManager.ParcelAccessEntry entry in land.ParcelAccessList) { @@ -7467,11 +7491,11 @@ namespace OpenSim.Region.ScriptEngine.Common public void llRemoveFromLandBanList(string avatar) { m_host.AddScriptLPS(1); - LLUUID key; + UUID key; LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).landData; if (land.OwnerID == m_host.OwnerID) { - if (LLUUID.TryParse(avatar, out key)) + if (UUID.TryParse(avatar, out key)) { foreach (ParcelManager.ParcelAccessEntry entry in land.ParcelAccessList) { @@ -7491,16 +7515,16 @@ namespace OpenSim.Region.ScriptEngine.Common m_host.AddScriptLPS(1); // our key in the object we are in - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) return; + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return; // the object we are in - LLUUID objectID = m_host.ParentUUID; - if (objectID == LLUUID.Zero) return; + UUID objectID = m_host.ParentUUID; + if(objectID == UUID.Zero) return; // we need the permission first, to know which avatar we want to set the camera for - LLUUID agentID = m_host.TaskInventory[invItemID].PermsGranter; - if (agentID == LLUUID.Zero) return; + UUID agentID = m_host.TaskInventory[invItemID].PermsGranter; + if (agentID == UUID.Zero) return; if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_CONTROL_CAMERA) == 0) return; ScenePresence presence = World.GetScenePresence(agentID); @@ -7542,16 +7566,16 @@ namespace OpenSim.Region.ScriptEngine.Common m_host.AddScriptLPS(1); // our key in the object we are in - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) return; + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return; // the object we are in - LLUUID objectID = m_host.ParentUUID; - if (objectID == LLUUID.Zero) return; + UUID objectID = m_host.ParentUUID; + if(objectID == UUID.Zero) return; // we need the permission first, to know which avatar we want to clear the camera for - LLUUID agentID = m_host.TaskInventory[invItemID].PermsGranter; - if (agentID == LLUUID.Zero) return; + UUID agentID = m_host.TaskInventory[invItemID].PermsGranter; + if (agentID == UUID.Zero) return; if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_CONTROL_CAMERA) == 0) return; ScenePresence presence = World.GetScenePresence(agentID); @@ -7650,9 +7674,9 @@ namespace OpenSim.Region.ScriptEngine.Common param.Add(o.ToString()); } - LLVector3 position = m_host.AbsolutePosition; - LLVector3 velocity = m_host.Velocity; - LLQuaternion rotation = m_host.RotationOffset; + Vector3 position = m_host.AbsolutePosition; + Vector3 velocity = m_host.Velocity; + Quaternion rotation = m_host.RotationOffset; ScenePresence scenePresence = World.GetScenePresence(m_host.ObjectOwner); RegionInfo regionInfo = World.RegionInfo; @@ -7668,10 +7692,10 @@ namespace OpenSim.Region.ScriptEngine.Common httpHeaders["X-SecondLife-Owner-Name"] = scenePresence == null ? string.Empty : scenePresence.ControllingClient.Name; httpHeaders["X-SecondLife-Owner-Key"] = m_host.ObjectOwner.ToString(); - LLUUID reqID = httpScriptMod. + UUID reqID = httpScriptMod. StartHttpRequest(m_localID, m_itemID, url, param, httpHeaders, body); - if (reqID != LLUUID.Zero) + if (reqID != UUID.Zero) return reqID.ToString(); else return null; @@ -7781,7 +7805,7 @@ namespace OpenSim.Region.ScriptEngine.Common LSL_Types.list ret = new LSL_Types.list(); if (land != null) { - foreach (KeyValuePair d in land.getLandObjectOwners()) + foreach (KeyValuePair d in land.getLandObjectOwners()) { ret.Add(d.Key.ToString()); ret.Add(d.Value); @@ -7794,7 +7818,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llGetObjectPrimCount(string object_id) { m_host.AddScriptLPS(1); - SceneObjectPart part = World.GetSceneObjectPart(new LLUUID(object_id)); + SceneObjectPart part = World.GetSceneObjectPart(new UUID(object_id)); if (part == null) { return 0; @@ -7900,8 +7924,8 @@ namespace OpenSim.Region.ScriptEngine.Common { m_host.AddScriptLPS(1); LSL_Types.list ret = new LSL_Types.list(); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id, out key)) + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) { ScenePresence av = World.GetScenePresence(key); @@ -7921,19 +7945,19 @@ namespace OpenSim.Region.ScriptEngine.Common ret.Add(new LSL_Types.Vector3((double)av.AbsolutePosition.X, (double)av.AbsolutePosition.Y, (double)av.AbsolutePosition.Z)); break; case "4": - ret.Add(new LSL_Types.Quaternion((double)av.Rotation.x, (double)av.Rotation.y, (double)av.Rotation.z, (double)av.Rotation.w)); + ret.Add(new LSL_Types.Quaternion((double)av.Rotation.X, (double)av.Rotation.Y, (double)av.Rotation.Z, (double)av.Rotation.W)); break; case "5": - ret.Add(new LSL_Types.Vector3(av.Velocity.X,av.Velocity.Y,av.Velocity.Z)); + ret.Add(new LSL_Types.Vector3(av.Velocity.X, av.Velocity.Y, av.Velocity.Z)); break; case "6": ret.Add(id); break; case "7": - ret.Add(LLUUID.Zero.ToString()); + ret.Add(UUID.Zero.ToString()); break; case "8": - ret.Add(LLUUID.Zero.ToString()); + ret.Add(UUID.Zero.ToString()); break; } } @@ -7953,7 +7977,7 @@ namespace OpenSim.Region.ScriptEngine.Common ret.Add(obj.Description); break; case "3": - ret.Add(new LSL_Types.Vector3(obj.AbsolutePosition.X,obj.AbsolutePosition.Y,obj.AbsolutePosition.Z)); + ret.Add(new LSL_Types.Vector3(obj.AbsolutePosition.X, obj.AbsolutePosition.Y, obj.AbsolutePosition.Z)); break; case "4": ret.Add(new LSL_Types.Quaternion(obj.RotationOffset.X, obj.RotationOffset.Y, obj.RotationOffset.Z, obj.RotationOffset.W)); @@ -7979,14 +8003,14 @@ namespace OpenSim.Region.ScriptEngine.Common } - internal LLUUID ScriptByName(string name) + internal UUID ScriptByName(string name) { foreach (TaskInventoryItem item in m_host.TaskInventory.Values) { if (item.Type == 10 && item.Name == name) return item.ItemID; } - return LLUUID.Zero; + return UUID.Zero; } internal void ShoutError(string msg) @@ -8063,7 +8087,7 @@ namespace OpenSim.Region.ScriptEngine.Common String[] notecardLines = { "0" }; notecardLines[0] = String.Empty; - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if ((inv.Value.Name == name) && (inv.Value.InvType == (int)InventoryType.Notecard)) { diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs index 581b82065d..8c24ae38ad 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs @@ -123,7 +123,7 @@ namespace OpenSim.Region.ScriptEngine.Common Vector3 vector = (Vector3)o; - return (x == vector.x && x == vector.x && z == vector.z); + return (x == vector.x && y == vector.y && z == vector.y); } public static Vector3 operator -(Vector3 vector) diff --git a/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs index 687d5e1df1..b410eec7b2 100644 --- a/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs @@ -25,8 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; -using Axiom.Math; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework.Console; using OpenSim.Region.Environment.Interfaces; @@ -40,7 +39,7 @@ namespace OpenSim.Region.ScriptEngine.Common public class OSSL_BuilIn_Commands : LSL_BuiltIn_Commands, OSSL_BuilIn_Commands_Interface { public OSSL_BuilIn_Commands(ScriptEngineBase.ScriptEngine scriptEngine, SceneObjectPart host, uint localID, - LLUUID itemID) + UUID itemID) : base(scriptEngine, host, localID, itemID) { Prim = new OSSLPrim(this); @@ -259,7 +258,7 @@ namespace OpenSim.Region.ScriptEngine.Common if (x > 255 || x < 0 || y > 255 || y < 0) LSLError("osTerrainSetHeight: Coordinate out of bounds"); - if (World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new LLVector3(x, y, 0))) + if (World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new Vector3(x, y, 0))) { World.Heightmap[x, y] = val; return 1; @@ -299,7 +298,7 @@ namespace OpenSim.Region.ScriptEngine.Common World.SendGeneralAlert(msg); } - public void osSetRot(LLUUID target, Quaternion rotation) + public void osSetRot(UUID target, Quaternion rotation) { m_host.AddScriptLPS(1); if (World.Entities.ContainsKey(target)) @@ -319,7 +318,7 @@ namespace OpenSim.Region.ScriptEngine.Common if (dynamicID == String.Empty) { IDynamicTextureManager textureManager = World.RequestModuleInterface(); - LLUUID createdTexture = + UUID createdTexture = textureManager.AddDynamicTextureURL(World.RegionInfo.RegionID, m_host.UUID, contentType, url, extraParams, timer); return createdTexture.ToString(); @@ -329,7 +328,7 @@ namespace OpenSim.Region.ScriptEngine.Common //TODO update existing dynamic textures } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, @@ -339,7 +338,7 @@ namespace OpenSim.Region.ScriptEngine.Common if (dynamicID == String.Empty) { IDynamicTextureManager textureManager = World.RequestModuleInterface(); - LLUUID createdTexture = + UUID createdTexture = textureManager.AddDynamicTextureURL(World.RegionInfo.RegionID, m_host.UUID, contentType, url, extraParams, timer, true, (byte) alpha); return createdTexture.ToString(); @@ -349,7 +348,7 @@ namespace OpenSim.Region.ScriptEngine.Common //TODO update existing dynamic textures } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, @@ -361,7 +360,7 @@ namespace OpenSim.Region.ScriptEngine.Common IDynamicTextureManager textureManager = World.RequestModuleInterface(); if (textureManager != null) { - LLUUID createdTexture = + UUID createdTexture = textureManager.AddDynamicTextureData(World.RegionInfo.RegionID, m_host.UUID, contentType, data, extraParams, timer); return createdTexture.ToString(); @@ -372,7 +371,7 @@ namespace OpenSim.Region.ScriptEngine.Common //TODO update existing dynamic textures } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, @@ -384,7 +383,7 @@ namespace OpenSim.Region.ScriptEngine.Common IDynamicTextureManager textureManager = World.RequestModuleInterface(); if (textureManager != null) { - LLUUID createdTexture = + UUID createdTexture = textureManager.AddDynamicTextureData(World.RegionInfo.RegionID, m_host.UUID, contentType, data, extraParams, timer, true, (byte) alpha); return createdTexture.ToString(); @@ -395,7 +394,7 @@ namespace OpenSim.Region.ScriptEngine.Common //TODO update existing dynamic textures } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public bool osConsoleCommand(string command) @@ -538,8 +537,8 @@ namespace OpenSim.Region.ScriptEngine.Common IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); if (xmlrpcMod.IsEnabled()) { - LLUUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, new LLUUID(channel)); - object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(LLUUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) }; + UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, new UUID(channel)); + object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(UUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) }; m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "remote_data", EventQueueManager.llDetectNull, resobj); } } diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandManager.cs index 64f6970541..ee86500988 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandManager.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandManager.cs @@ -27,7 +27,7 @@ using System.Collections; using System.Threading; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins; @@ -153,7 +153,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase /// /// /// - public void RemoveScript(uint localID, LLUUID itemID) + public void RemoveScript(uint localID, UUID itemID) { // Remove a specific script diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Dataserver.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Dataserver.cs index 77cc7eae0c..378610ac79 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Dataserver.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Dataserver.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins @@ -48,28 +48,28 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin private class DataserverRequest { public uint localID; - public LLUUID itemID; + public UUID itemID; - public LLUUID ID; + public UUID ID; public string handle; public DateTime startTime; } - public LLUUID RegisterRequest(uint localID, LLUUID itemID, + public UUID RegisterRequest(uint localID, UUID itemID, string identifier) { lock (DataserverRequests) { if (DataserverRequests.ContainsKey(identifier)) - return LLUUID.Zero; + return UUID.Zero; DataserverRequest ds = new DataserverRequest(); ds.localID = localID; ds.itemID = itemID; - ds.ID = LLUUID.Random(); + ds.ID = UUID.Random(); ds.handle = identifier; ds.startTime = DateTime.Now; @@ -99,7 +99,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin new LSL_Types.LSLString(reply)}); } - public void RemoveEvents(uint localID, LLUUID itemID) + public void RemoveEvents(uint localID, UUID itemID) { lock (DataserverRequests) { diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/SensorRepeat.cs index 9b636fdd1d..0fce1f2cda 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/SensorRepeat.cs @@ -27,7 +27,7 @@ //#define SPAM using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; using OpenSim.Framework.Communications.Cache; @@ -43,8 +43,8 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin m_CmdManager = CmdManager; } - public Dictionary> SenseEvents = - new Dictionary>(); + public Dictionary> SenseEvents = + new Dictionary>(); private Object SenseLock = new Object(); // @@ -53,12 +53,12 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin private class SenseRepeatClass { public uint localID; - public LLUUID itemID; + public UUID itemID; public double interval; public DateTime next; public string name; - public LLUUID keyID; + public UUID keyID; public int type; public double range; public double arc; @@ -68,8 +68,8 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin private List SenseRepeaters = new List(); private object SenseRepeatListLock = new object(); - public void SetSenseRepeatEvent(uint m_localID, LLUUID m_itemID, - string name, LLUUID keyID, int type, double range, double arc, double sec, SceneObjectPart host) + public void SetSenseRepeatEvent(uint m_localID, UUID m_itemID, + string name, UUID keyID, int type, double range, double arc, double sec, SceneObjectPart host) { #if SPAM Console.WriteLine("SetSensorEvent"); @@ -98,7 +98,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin } } - public void UnSetSenseRepeaterEvents(uint m_localID, LLUUID m_itemID) + public void UnSetSenseRepeaterEvents(uint m_localID, UUID m_itemID) { // Remove from timer lock (SenseRepeatListLock) @@ -138,8 +138,8 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin } // lock } - public void SenseOnce(uint m_localID, LLUUID m_itemID, - string name, LLUUID keyID, int type, + public void SenseOnce(uint m_localID, UUID m_itemID, + string name, UUID keyID, int type, double range, double arc, SceneObjectPart host) { // Add to timer @@ -156,11 +156,11 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin SensorSweep(ts); } - public LSL_Types.list GetSensorList(uint m_localID, LLUUID m_itemID) + public LSL_Types.list GetSensorList(uint m_localID, UUID m_itemID) { lock (SenseLock) { - Dictionary Obj = null; + Dictionary Obj = null; if (!SenseEvents.TryGetValue(m_localID, out Obj)) { #if SPAM @@ -199,11 +199,11 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin } //m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep Scan"); - LLVector3 sensorPos = SensePoint.AbsolutePosition; - LLVector3 regionPos = new LLVector3(m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocX * Constants.RegionSize, m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocY * Constants.RegionSize, 0); - LLVector3 fromRegionPos = sensorPos + regionPos; + Vector3 sensorPos = SensePoint.AbsolutePosition; + Vector3 regionPos = new Vector3(m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocX * Constants.RegionSize, m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocY * Constants.RegionSize, 0); + Vector3 fromRegionPos = sensorPos + regionPos; - LLQuaternion q = SensePoint.RotationOffset; + Quaternion q = SensePoint.RotationOffset; LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r); double mag_fwd = LSL_Types.Vector3.Mag(forward_dir); @@ -215,7 +215,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin foreach (EntityBase ent in m_CmdManager.m_ScriptEngine.World.Entities.Values) { - LLVector3 toRegionPos = ent.AbsolutePosition + regionPos; + Vector3 toRegionPos = ent.AbsolutePosition + regionPos; double dis = Math.Abs((double)Util.GetDistanceTo(toRegionPos, fromRegionPos)); if (dis <= ts.range) { @@ -248,7 +248,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin double ang_obj = 0; try { - LLVector3 diff = toRegionPos - fromRegionPos; + Vector3 diff = toRegionPos - fromRegionPos; LSL_Types.Vector3 obj_dir = new LSL_Types.Vector3(diff.X, diff.Y, diff.Z); double dot = LSL_Types.Vector3.Dot(forward_dir, obj_dir); double mag_obj = LSL_Types.Vector3.Mag(obj_dir); @@ -261,7 +261,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin if (ang_obj > ts.arc) keep = false; } - if (keep && (ts.keyID != LLUUID.Zero) && (ts.keyID != ent.UUID)) + if (keep && (ts.keyID != UUID.Zero) && (ts.keyID != ent.UUID)) { keep = false; } @@ -303,10 +303,10 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin // Create object if it doesn't exist if (SenseEvents.ContainsKey(ts.localID) == false) { - SenseEvents.Add(ts.localID, new Dictionary()); + SenseEvents.Add(ts.localID, new Dictionary()); } // clear if previous traces exist - Dictionary Obj; + Dictionary Obj; SenseEvents.TryGetValue(ts.localID, out Obj); if (Obj.ContainsKey(ts.itemID) == true) Obj.Remove(ts.itemID); diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Timer.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Timer.cs index 09af34ac51..7940b3600a 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Timer.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Timer.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins { @@ -47,7 +47,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin private class TimerClass { public uint localID; - public LLUUID itemID; + public UUID itemID; //public double interval; public long interval; //public DateTime next; @@ -57,7 +57,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin private List Timers = new List(); private object TimerListLock = new object(); - public void SetTimerEvent(uint m_localID, LLUUID m_itemID, double sec) + public void SetTimerEvent(uint m_localID, UUID m_itemID, double sec) { // Console.WriteLine("SetTimerEvent"); @@ -82,7 +82,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin } } - public void UnSetTimerEvents(uint m_localID, LLUUID m_itemID) + public void UnSetTimerEvents(uint m_localID, UUID m_itemID) { // Remove from timer lock (TimerListLock) diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs index 3fdfd8a02d..89d7045cbf 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney; using OpenSim.Region.Environment; @@ -96,7 +96,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase { } - private void HandleObjectPaid(LLUUID objectID, LLUUID agentID, int amount) + private void HandleObjectPaid(UUID objectID, UUID agentID, int amount) { SceneObjectPart part=myScriptEngine.World.GetSceneObjectPart(objectID); if (part != null) @@ -117,7 +117,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "state_entry", EventQueueManager.llDetectNull, new object[] { }); } - public void touch_start(uint localID, uint originalID, LLVector3 offsetPos, IClientAPI remoteClient) + public void touch_start(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient) { // Add to queue for all scripts in ObjectID object EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct(); @@ -135,7 +135,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString()); detstruct._string[0] = remoteClient.Name; detstruct._int[0] = 0; - detstruct._Quaternion[0] = new LSL_Types.Quaternion(av.Rotation.x,av.Rotation.y,av.Rotation.z,av.Rotation.w); + detstruct._Quaternion[0] = new LSL_Types.Quaternion(av.Rotation.X,av.Rotation.Y,av.Rotation.Z,av.Rotation.W); detstruct._Vector3[0] = new LSL_Types.Vector3(av.AbsolutePosition.X,av.AbsolutePosition.Y,av.AbsolutePosition.Z); detstruct._Vector32[0] = new LSL_Types.Vector3(av.Velocity.X,av.Velocity.Y,av.Velocity.Z); } @@ -170,7 +170,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString()); detstruct._string[0] = remoteClient.Name; detstruct._int[0] = 0; - detstruct._Quaternion[0] = new LSL_Types.Quaternion(av.Rotation.x, av.Rotation.y, av.Rotation.z, av.Rotation.w); + detstruct._Quaternion[0] = new LSL_Types.Quaternion(av.Rotation.X, av.Rotation.Y, av.Rotation.Z, av.Rotation.W); detstruct._Vector3[0] = new LSL_Types.Vector3(av.AbsolutePosition.X, av.AbsolutePosition.Y, av.AbsolutePosition.Z); detstruct._Vector32[0] = new LSL_Types.Vector3(av.Velocity.X, av.Velocity.Y, av.Velocity.Z); } @@ -187,14 +187,14 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "touch_end", detstruct, new object[] { new LSL_Types.LSLInteger(1) }); } - public void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez) + public void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez) { myScriptEngine.Log.Debug("OnRezScript localID: " + localID + " LLUID: " + itemID.ToString() + " Size: " + script.Length); myScriptEngine.m_ScriptManager.StartScript(localID, itemID, script, startParam, postOnRez); } - public void OnRemoveScript(uint localID, LLUUID itemID) + public void OnRemoveScript(uint localID, UUID itemID) { myScriptEngine.Log.Debug("OnRemoveScript localID: " + localID + " LLUID: " + itemID.ToString()); myScriptEngine.m_ScriptManager.StopScript( @@ -203,7 +203,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase ); } - public void money(uint localID, LLUUID agentID, int amount) + public void money(uint localID, UUID agentID, int amount) { myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "money", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLString(agentID.ToString()), new LSL_Types.LSLInteger(amount) }); } @@ -220,12 +220,12 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "state_exit", EventQueueManager.llDetectNull, new object[] { }); } - public void touch(uint localID, uint originalID, LLUUID itemID) + public void touch(uint localID, uint originalID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "touch", EventQueueManager.llDetectNull); } - public void touch_end(uint localID, uint originalID, LLUUID itemID) + public void touch_end(uint localID, uint originalID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "touch_end", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(1) }); } @@ -314,7 +314,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "collision_end", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(col.Colliders.Count) }); } - public void land_collision_start(uint localID, LLUUID itemID) + public void land_collision_start(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "land_collision_start", EventQueueManager.llDetectNull); } @@ -324,48 +324,48 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "land_collision", EventQueueManager.llDetectNull); } - public void land_collision_end(uint localID, LLUUID itemID) + public void land_collision_end(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "land_collision_end", EventQueueManager.llDetectNull); } // Handled by long commands - public void timer(uint localID, LLUUID itemID) + public void timer(uint localID, UUID itemID) { //myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, String.Empty); } - public void listen(uint localID, LLUUID itemID) + public void listen(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "listen", EventQueueManager.llDetectNull); } - public void on_rez(uint localID, LLUUID itemID) + public void on_rez(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "on_rez", EventQueueManager.llDetectNull); } - public void sensor(uint localID, LLUUID itemID) + public void sensor(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "sensor", EventQueueManager.llDetectNull); } - public void no_sensor(uint localID, LLUUID itemID) + public void no_sensor(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "no_sensor", EventQueueManager.llDetectNull); } - public void control(uint localID, LLUUID itemID, LLUUID agentID, uint held, uint change) + public void control(uint localID, UUID itemID, UUID agentID, uint held, uint change) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "control", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLString(agentID.ToString()), new LSL_Types.LSLInteger(held), new LSL_Types.LSLInteger(change)}); } - public void email(uint localID, LLUUID itemID) + public void email(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "email", EventQueueManager.llDetectNull); } - public void at_target(uint localID, uint handle, LLVector3 targetpos, LLVector3 atpos) + public void at_target(uint localID, uint handle, Vector3 targetpos, Vector3 atpos) { myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "at_target", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(handle), new LSL_Types.Vector3(targetpos.X,targetpos.Y,targetpos.Z), new LSL_Types.Vector3(atpos.X,atpos.Y,atpos.Z) }); } @@ -375,63 +375,63 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "not_at_target", EventQueueManager.llDetectNull); } - public void at_rot_target(uint localID, LLUUID itemID) + public void at_rot_target(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "at_rot_target", EventQueueManager.llDetectNull); } - public void not_at_rot_target(uint localID, LLUUID itemID) + public void not_at_rot_target(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "not_at_rot_target", EventQueueManager.llDetectNull); } - public void run_time_permissions(uint localID, LLUUID itemID) + public void run_time_permissions(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "run_time_permissions", EventQueueManager.llDetectNull); } - public void changed(uint localID, LLUUID itemID) + public void changed(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "changed", EventQueueManager.llDetectNull); } - public void attach(uint localID, LLUUID itemID) + public void attach(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "attach", EventQueueManager.llDetectNull); } - public void dataserver(uint localID, LLUUID itemID) + public void dataserver(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "dataserver", EventQueueManager.llDetectNull); } - public void link_message(uint localID, LLUUID itemID) + public void link_message(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "link_message", EventQueueManager.llDetectNull); } - public void moving_start(uint localID, LLUUID itemID) + public void moving_start(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "moving_start", EventQueueManager.llDetectNull); } - public void moving_end(uint localID, LLUUID itemID) + public void moving_end(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "moving_end", EventQueueManager.llDetectNull); } - public void object_rez(uint localID, LLUUID itemID) + public void object_rez(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "object_rez", EventQueueManager.llDetectNull); } - public void remote_data(uint localID, LLUUID itemID) + public void remote_data(uint localID, UUID itemID) { myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "remote_data", EventQueueManager.llDetectNull); } // Handled by long commands - public void http_response(uint localID, LLUUID itemID) + public void http_response(uint localID, UUID itemID) { // myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "http_response", EventQueueManager.llDetectNull); } diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs index 5c5787480d..1a08795238 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase { @@ -134,7 +134,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase public struct QueueItemStruct { public uint localID; - public LLUUID itemID; + public UUID itemID; public string functionName; public Queue_llDetectParams_Struct llDetectParams; public object[] param; @@ -308,10 +308,10 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase return; } - Dictionary.KeyCollection scriptKeys = + Dictionary.KeyCollection scriptKeys = m_ScriptEngine.m_ScriptManager.GetScriptKeys(localID); - foreach (LLUUID itemID in scriptKeys) + foreach (UUID itemID in scriptKeys) { // Add to each script in that object // TODO: Some scripts may not subscribe to this event. Should we NOT add it? Does it matter? @@ -326,7 +326,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase /// Region script ID /// Name of the function, will be state + "_event_" + FunctionName /// Array of parameters to match event mask - public void AddToScriptQueue(uint localID, LLUUID itemID, string FunctionName, Queue_llDetectParams_Struct qParams, params object[] param) + public void AddToScriptQueue(uint localID, UUID itemID, string FunctionName, Queue_llDetectParams_Struct qParams, params object[] param) { lock (eventQueue) { diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs index 4376e00cf6..1e71ae561c 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs @@ -31,7 +31,7 @@ using System.Reflection; using System.Text.RegularExpressions; using System.Threading; using System.Globalization; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes.Scripting; @@ -327,7 +327,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase m_ScriptEngine.World.GetSceneObjectPart(QIS.localID); //if (m_host != null) //{ - m_ScriptEngine.World.SimChat(Helpers.StringToField(text), + m_ScriptEngine.World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.DebugChannel, 2147483647, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptManager.cs index 99bbdee90b..60333b1dd8 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptManager.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptManager.cs @@ -31,7 +31,7 @@ using System.IO; using System.Reflection; using System.Runtime.Serialization.Formatters.Binary; using System.Threading; -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase @@ -69,7 +69,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase private struct LUStruct { public uint localID; - public LLUUID itemID; + public UUID itemID; public string script; public LUType Action; public int startParam; @@ -84,13 +84,13 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase } // Xantor 20080525: Keep a list of compiled scripts this session for reuse - public Dictionary scriptList = new Dictionary(); + public Dictionary scriptList = new Dictionary(); // Object> // IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory. // Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead! - public Dictionary> Scripts = - new Dictionary>(); + public Dictionary> Scripts = + new Dictionary>(); public Scene World @@ -254,7 +254,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase /// /// /// - public void StartScript(uint localID, LLUUID itemID, string Script, int startParam, bool postOnRez) + public void StartScript(uint localID, UUID itemID, string Script, int startParam, bool postOnRez) { lock (LUQueue) { @@ -280,7 +280,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase /// /// /// - public void StopScript(uint localID, LLUUID itemID) + public void StopScript(uint localID, UUID itemID) { LUStruct ls = new LUStruct(); ls.localID = localID; @@ -297,8 +297,8 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase // Create a new instance of the compiler (reuse) //private Compiler.LSL.Compiler LSLCompiler = new Compiler.LSL.Compiler(); - public abstract void _StartScript(uint localID, LLUUID itemID, string Script, int startParam, bool postOnRez); - public abstract void _StopScript(uint localID, LLUUID itemID); + public abstract void _StartScript(uint localID, UUID itemID, string Script, int startParam, bool postOnRez); + public abstract void _StopScript(uint localID, UUID itemID); #endregion @@ -312,7 +312,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase /// Script ID /// Name of function /// Arguments to pass to function - internal void ExecuteEvent(uint localID, LLUUID itemID, string FunctionName, EventQueueManager.Queue_llDetectParams_Struct qParams, object[] args) + internal void ExecuteEvent(uint localID, UUID itemID, string FunctionName, EventQueueManager.Queue_llDetectParams_Struct qParams, object[] args) { //cfk 2-7-08 dont need this right now and the default Linux build has DEBUG defined ///#if DEBUG @@ -335,7 +335,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase Script.Exec.ExecuteEvent(FunctionName, args); } - public int GetStateEventFlags(uint localID, LLUUID itemID) + public int GetStateEventFlags(uint localID, UUID itemID) { // Console.WriteLine("GetStateEventFlags for <" + localID + "," + itemID + ">"); try @@ -360,25 +360,25 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase #region Internal functions to keep track of script - public Dictionary.KeyCollection GetScriptKeys(uint localID) + public Dictionary.KeyCollection GetScriptKeys(uint localID) { if (Scripts.ContainsKey(localID) == false) return null; - Dictionary Obj; + Dictionary Obj; Scripts.TryGetValue(localID, out Obj); return Obj.Keys; } - public IScript GetScript(uint localID, LLUUID itemID) + public IScript GetScript(uint localID, UUID itemID) { lock (scriptLock) { if (Scripts.ContainsKey(localID) == false) return null; - Dictionary Obj; + Dictionary Obj; Scripts.TryGetValue(localID, out Obj); if (Obj.ContainsKey(itemID) == false) return null; @@ -390,18 +390,18 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase } } - public void SetScript(uint localID, LLUUID itemID, IScript Script) + public void SetScript(uint localID, UUID itemID, IScript Script) { lock (scriptLock) { // Create object if it doesn't exist if (Scripts.ContainsKey(localID) == false) { - Scripts.Add(localID, new Dictionary()); + Scripts.Add(localID, new Dictionary()); } // Delete script if it exists - Dictionary Obj; + Dictionary Obj; Scripts.TryGetValue(localID, out Obj); if (Obj.ContainsKey(itemID) == true) Obj.Remove(itemID); @@ -411,14 +411,14 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase } } - public void RemoveScript(uint localID, LLUUID itemID) + public void RemoveScript(uint localID, UUID itemID) { // Don't have that object? if (Scripts.ContainsKey(localID) == false) return; // Delete script if it exists - Dictionary Obj; + Dictionary Obj; Scripts.TryGetValue(localID, out Obj); if (Obj.ContainsKey(itemID) == true) Obj.Remove(itemID); @@ -427,21 +427,21 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase #endregion - public void ResetScript(uint localID, LLUUID itemID) + public void ResetScript(uint localID, UUID itemID) { IScript s = GetScript(localID, itemID); string script = s.Source; StopScript(localID, itemID); SceneObjectPart part = World.GetSceneObjectPart(localID); part.GetInventoryItem(itemID).PermsMask = 0; - part.GetInventoryItem(itemID).PermsGranter = LLUUID.Zero; + part.GetInventoryItem(itemID).PermsGranter = UUID.Zero; StartScript(localID, itemID, script, s.StartParam, false); } #region Script serialization/deserialization - public void GetSerializedScript(uint localID, LLUUID itemID) + public void GetSerializedScript(uint localID, UUID itemID) { // Serialize the script and return it // Should not be a problem @@ -451,7 +451,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase fs.Close(); } - public void PutSerializedScript(uint localID, LLUUID itemID) + public void PutSerializedScript(uint localID, UUID itemID) { // Deserialize the script and inject it into an AppDomain diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptServerInterfaces.cs b/OpenSim/Region/ScriptEngine/Common/ScriptServerInterfaces.cs index 41fde02cf4..a6473ee764 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptServerInterfaces.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptServerInterfaces.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; @@ -38,40 +38,40 @@ namespace OpenSim.Region.ScriptEngine.Common { public interface RemoteEvents { - void touch_start(uint localID, uint originalID, LLVector3 offsetPos, IClientAPI remoteClient); - void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez); - void OnRemoveScript(uint localID, LLUUID itemID); + void touch_start(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient); + void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez); + void OnRemoveScript(uint localID, UUID itemID); void state_exit(uint localID); - void touch(uint localID, uint originalID, LLUUID itemID); - void touch_end(uint localID, uint originalID, LLUUID itemID); + void touch(uint localID, uint originalID, UUID itemID); + void touch_end(uint localID, uint originalID, UUID itemID); void collision_start(uint localID, ColliderArgs col); void collision(uint localID, ColliderArgs col); void collision_end(uint localID, ColliderArgs col); - void land_collision_start(uint localID, LLUUID itemID); + void land_collision_start(uint localID, UUID itemID); void land_collision(uint localID, ColliderArgs col); - void land_collision_end(uint localID, LLUUID itemID); - void timer(uint localID, LLUUID itemID); - void listen(uint localID, LLUUID itemID); - void on_rez(uint localID, LLUUID itemID); - void sensor(uint localID, LLUUID itemID); - void no_sensor(uint localID, LLUUID itemID); - void control(uint localID, LLUUID itemID, LLUUID agentID, uint held, uint change); - void money(uint LocalID, LLUUID agentID, int amount); - void email(uint localID, LLUUID itemID); - void at_target(uint localID, uint handle, LLVector3 targetpos, LLVector3 atpos); + void land_collision_end(uint localID, UUID itemID); + void timer(uint localID, UUID itemID); + void listen(uint localID, UUID itemID); + void on_rez(uint localID, UUID itemID); + void sensor(uint localID, UUID itemID); + void no_sensor(uint localID, UUID itemID); + void control(uint localID, UUID itemID, UUID agentID, uint held, uint change); + void money(uint LocalID, UUID agentID, int amount); + void email(uint localID, UUID itemID); + void at_target(uint localID, uint handle, Vector3 targetpos, Vector3 atpos); void not_at_target(uint localID); - void at_rot_target(uint localID, LLUUID itemID); - void not_at_rot_target(uint localID, LLUUID itemID); - void run_time_permissions(uint localID, LLUUID itemID); - void changed(uint localID, LLUUID itemID); - void attach(uint localID, LLUUID itemID); - void dataserver(uint localID, LLUUID itemID); - void link_message(uint localID, LLUUID itemID); - void moving_start(uint localID, LLUUID itemID); - void moving_end(uint localID, LLUUID itemID); - void object_rez(uint localID, LLUUID itemID); - void remote_data(uint localID, LLUUID itemID); - void http_response(uint localID, LLUUID itemID); + void at_rot_target(uint localID, UUID itemID); + void not_at_rot_target(uint localID, UUID itemID); + void run_time_permissions(uint localID, UUID itemID); + void changed(uint localID, UUID itemID); + void attach(uint localID, UUID itemID); + void dataserver(uint localID, UUID itemID); + void link_message(uint localID, UUID itemID); + void moving_start(uint localID, UUID itemID); + void moving_end(uint localID, UUID itemID); + void object_rez(uint localID, UUID itemID); + void remote_data(uint localID, UUID itemID); + void http_response(uint localID, UUID itemID); } public interface ServerRemotingObject diff --git a/OpenSim/Region/ScriptEngine/Common/TRPC_Remote.cs b/OpenSim/Region/ScriptEngine/Common/TRPC_Remote.cs index a3109783d5..b02f2f50e3 100644 --- a/OpenSim/Region/ScriptEngine/Common/TRPC_Remote.cs +++ b/OpenSim/Region/ScriptEngine/Common/TRPC_Remote.cs @@ -31,7 +31,7 @@ using System.Diagnostics; using System.Net; using System.Text; using System.Web; -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.ScriptEngine.Common.TRPC; namespace OpenSim.Region.ScriptEngine.Common @@ -53,7 +53,7 @@ namespace OpenSim.Region.ScriptEngine.Common typeof(Double), typeof(Decimal), typeof(Array), - typeof(LLUUID), + typeof(UUID), typeof(UInt16), typeof(UInt32), typeof(UInt64) diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs index 371ba45248..cf1d489765 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs @@ -120,7 +120,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL //System.Console.WriteLine("SCRIPT:" + checkscript); // checks for alpha.alpha way of referring to objects in C# - // ignores alpha.x alpha.y, alpha.z for refering to vector components + // ignores alpha.X alpha.Y, alpha.Z for refering to vector components Match SecurityM; diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs index c94b56af60..8176d3fe49 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs @@ -28,7 +28,7 @@ using System; using System.Reflection; using log4net; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; using OpenSim.Region.ScriptEngine.Common; @@ -54,13 +54,13 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } // KEEP TRACK OF SCRIPTS - //internal Dictionary> Scripts = new Dictionary>(); + //internal Dictionary> Scripts = new Dictionary>(); // LOAD SCRIPT // UNLOAD SCRIPT // PROVIDE SCRIPT WITH ITS INTERFACE TO OpenSim - public override void _StartScript(uint localID, LLUUID itemID, string Script, int startParam, bool postOnRez) + public override void _StartScript(uint localID, UUID itemID, string Script, int startParam, bool postOnRez) { m_log.DebugFormat( "[{0}]: ScriptManager StartScript: localID: {1}, itemID: {2}", @@ -84,7 +84,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } // Xantor 20080525: I need assetID here to see if we already compiled this one previously - LLUUID assetID = LLUUID.Zero; + UUID assetID = UUID.Zero; TaskInventoryItem taskInventoryItem = new TaskInventoryItem(); if (m_host.TaskInventory.TryGetValue(itemID, out taskInventoryItem)) assetID = taskInventoryItem.AssetID; @@ -153,7 +153,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine string text = "Error compiling script:\r\n" + e.Message.ToString(); if (text.Length > 1500) text = text.Substring(0, 1499); // 0-1499 is 1500 characters - World.SimChat(Helpers.StringToField(text), ChatTypeEnum.DebugChannel, 2147483647, + World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.DebugChannel, 2147483647, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); } catch (Exception e2) // LEGIT: User Scripting @@ -165,7 +165,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } } - public override void _StopScript(uint localID, LLUUID itemID) + public override void _StopScript(uint localID, UUID itemID) { // Stop script #if DEBUG diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs index 2df41d0777..e94de68747 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.Environment.Scenes; @@ -38,6 +38,6 @@ namespace OpenSim.Region.ScriptEngine.Interfaces // Each API has an identifier, which is used to load the // proper runtime assembly at load time. // - void Initialize(IScriptEngine engine, SceneObjectPart part, uint localID, LLUUID item); + void Initialize(IScriptEngine engine, SceneObjectPart part, uint localID, UUID item); } } diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs index 6b3804c16d..4b46c21baa 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs @@ -29,7 +29,7 @@ using log4net; using System; using OpenSim.Region.ScriptEngine.Shared; using OpenSim.Region.Environment.Scenes; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Region.ScriptEngine.Interfaces; using Amib.Threading; @@ -49,16 +49,16 @@ namespace OpenSim.Region.ScriptEngine.Interfaces ILog Log { get; } string ScriptEngineName { get; } - bool PostScriptEvent(LLUUID itemID, EventParams parms); + bool PostScriptEvent(UUID itemID, EventParams parms); bool PostObjectEvent(uint localID, EventParams parms); - void ApiResetScript(LLUUID itemID); - void ResetScript(LLUUID itemID); - void SetScriptState(LLUUID itemID, bool state); - bool GetScriptState(LLUUID itemID); - void SetState(LLUUID itemID, string newState); - int GetStartParameter(LLUUID itemID); + void ApiResetScript(UUID itemID); + void ResetScript(UUID itemID); + void SetScriptState(UUID itemID, bool state); + bool GetScriptState(UUID itemID); + void SetState(UUID itemID, string newState); + int GetStartParameter(UUID itemID); IScriptWorkItem QueueEventHandler(object parms); - DetectParams GetDetectParams(LLUUID item, int number); + DetectParams GetDetectParams(UUID item, int number); } } diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs index 3aeb602c5e..f79c1a3693 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using log4net; using OpenSim.Framework; using OpenSim.Region.ScriptEngine.Shared; @@ -55,13 +55,13 @@ namespace OpenSim.Region.ScriptEngine.Interfaces bool Running { get; set; } string State { get; set; } IScriptEngine Engine { get; } - LLUUID AppDomain { get; set; } + UUID AppDomain { get; set; } string PrimName { get; } string ScriptName { get; } - LLUUID ItemID { get; } - LLUUID ObjectID { get; } + UUID ItemID { get; } + UUID ObjectID { get; } uint LocalID { get; } - LLUUID AssetID { get; } + UUID AssetID { get; } Queue EventQueue { get; } void ClearQueue(); @@ -82,7 +82,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces Dictionary GetVars(); void SetVars(Dictionary vars); DetectParams GetDetectParams(int idx); - LLUUID GetDetectID(int idx); + UUID GetDetectID(int idx); void SaveState(string assembly); } } diff --git a/OpenSim/Region/ScriptEngine/RemoteServer/EventManager.cs b/OpenSim/Region/ScriptEngine/RemoteServer/EventManager.cs index 21888faab8..afb731102c 100644 --- a/OpenSim/Region/ScriptEngine/RemoteServer/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/RemoteServer/EventManager.cs @@ -28,7 +28,7 @@ /* Original code: Tedd Hansen */ using System; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.ScriptEngine.Common; using OpenSim.Region.ScriptEngine.Common.TRPC; @@ -77,7 +77,7 @@ namespace OpenSim.Region.ScriptEngine.RemoteServer } } - public void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez) + public void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez) { // WE ARE CREATING A NEW SCRIPT ... CREATE SCRIPT, GET A REMOTEID THAT WE MAP FROM LOCALID myScriptEngine.Log.Info("[RemoteEngine]: Creating new script (with connection)"); @@ -90,7 +90,7 @@ namespace OpenSim.Region.ScriptEngine.RemoteServer //remoteScript[localID].Events().OnRezScript(localID, itemID, script); } - public void touch_start(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) + public void touch_start(uint localID, Vector3 offsetPos, IClientAPI remoteClient) { //remoteScript[localID].Events.touch_start(localID, offsetPos, remoteClient); RPC.SendCommand(myScriptServerID, "touch_start", offsetPos, "How to transfer IClientAPI?"); @@ -100,162 +100,162 @@ namespace OpenSim.Region.ScriptEngine.RemoteServer // PLACEHOLDERS -- CODE WILL CHANGE! - //public void OnRemoveScript(uint localID, LLUUID itemID) + //public void OnRemoveScript(uint localID, UUID itemID) //{ // remoteScript[localID].Events.OnRemoveScript(localID, itemID); //} - //public void state_exit(uint localID, LLUUID itemID) + //public void state_exit(uint localID, UUID itemID) //{ // remoteScript[localID].Events.state_exit(localID, itemID); //} - //public void touch(uint localID, LLUUID itemID) + //public void touch(uint localID, UUID itemID) //{ // remoteScript[localID].Events.touch(localID, itemID); //} - //public void touch_end(uint localID, LLUUID itemID) + //public void touch_end(uint localID, UUID itemID) //{ // remoteScript[localID].Events.touch_end(localID, itemID); //} - //public void collision_start(uint localID, LLUUID itemID) + //public void collision_start(uint localID, UUID itemID) //{ // remoteScript[localID].Events.collision_start(localID, itemID); //} - //public void collision(uint localID, LLUUID itemID) + //public void collision(uint localID, UUID itemID) //{ // remoteScript[localID].Events.collision(localID, itemID); //} - //public void collision_end(uint localID, LLUUID itemID) + //public void collision_end(uint localID, UUID itemID) //{ // remoteScript[localID].Events.collision_end(localID, itemID); //} - //public void land_collision_start(uint localID, LLUUID itemID) + //public void land_collision_start(uint localID, UUID itemID) //{ // remoteScript[localID].Events.land_collision_start(localID, itemID); //} - //public void land_collision(uint localID, LLUUID itemID) + //public void land_collision(uint localID, UUID itemID) //{ // remoteScript[localID].Events.land_collision(localID, itemID); //} - //public void land_collision_end(uint localID, LLUUID itemID) + //public void land_collision_end(uint localID, UUID itemID) //{ // remoteScript[localID].Events.land_collision_end(localID, itemID); //} - //public void timer(uint localID, LLUUID itemID) + //public void timer(uint localID, UUID itemID) //{ // remoteScript[localID].Events.timer(localID, itemID); //} - //public void listen(uint localID, LLUUID itemID) + //public void listen(uint localID, UUID itemID) //{ // remoteScript[localID].Events.listen(localID, itemID); //} - //public void on_rez(uint localID, LLUUID itemID) + //public void on_rez(uint localID, UUID itemID) //{ // remoteScript[localID].Events.on_rez(localID, itemID); //} - //public void sensor(uint localID, LLUUID itemID) + //public void sensor(uint localID, UUID itemID) //{ // remoteScript[localID].Events.sensor(localID, itemID); //} - //public void no_sensor(uint localID, LLUUID itemID) + //public void no_sensor(uint localID, UUID itemID) //{ // remoteScript[localID].Events.no_sensor(localID, itemID); //} - //public void control(uint localID, LLUUID itemID) + //public void control(uint localID, UUID itemID) //{ // remoteScript[localID].Events.control(localID, itemID); //} - //public void money(uint localID, LLUUID itemID) + //public void money(uint localID, UUID itemID) //{ // remoteScript[localID].Events.money(localID, itemID); //} - //public void email(uint localID, LLUUID itemID) + //public void email(uint localID, UUID itemID) //{ // remoteScript[localID].Events.email(localID, itemID); //} - //public void at_target(uint localID, LLUUID itemID) + //public void at_target(uint localID, UUID itemID) //{ // remoteScript[localID].Events.at_target(localID, itemID); //} - //public void not_at_target(uint localID, LLUUID itemID) + //public void not_at_target(uint localID, UUID itemID) //{ // remoteScript[localID].Events.not_at_target(localID, itemID); //} - //public void at_rot_target(uint localID, LLUUID itemID) + //public void at_rot_target(uint localID, UUID itemID) //{ // remoteScript[localID].Events.at_rot_target(localID, itemID); //} - //public void not_at_rot_target(uint localID, LLUUID itemID) + //public void not_at_rot_target(uint localID, UUID itemID) //{ // remoteScript[localID].Events.not_at_rot_target(localID, itemID); //} - //public void run_time_permissions(uint localID, LLUUID itemID) + //public void run_time_permissions(uint localID, UUID itemID) //{ // remoteScript[localID].Events.run_time_permissions(localID, itemID); //} - //public void changed(uint localID, LLUUID itemID) + //public void changed(uint localID, UUID itemID) //{ // remoteScript[localID].Events.changed(localID, itemID); //} - //public void attach(uint localID, LLUUID itemID) + //public void attach(uint localID, UUID itemID) //{ // remoteScript[localID].Events.attach(localID, itemID); //} - //public void dataserver(uint localID, LLUUID itemID) + //public void dataserver(uint localID, UUID itemID) //{ // remoteScript[localID].Events.dataserver(localID, itemID); //} - //public void link_message(uint localID, LLUUID itemID) + //public void link_message(uint localID, UUID itemID) //{ // remoteScript[localID].Events.link_message(localID, itemID); //} - //public void moving_start(uint localID, LLUUID itemID) + //public void moving_start(uint localID, UUID itemID) //{ // remoteScript[localID].Events.moving_start(localID, itemID); //} - //public void moving_end(uint localID, LLUUID itemID) + //public void moving_end(uint localID, UUID itemID) //{ // remoteScript[localID].Events.moving_end(localID, itemID); //} - //public void object_rez(uint localID, LLUUID itemID) + //public void object_rez(uint localID, UUID itemID) //{ // remoteScript[localID].Events.object_rez(localID, itemID); //} - //public void remote_data(uint localID, LLUUID itemID) + //public void remote_data(uint localID, UUID itemID) //{ // remoteScript[localID].Events.remote_data(localID, itemID); //} - //public void http_response(uint localID, LLUUID itemID) + //public void http_response(uint localID, UUID itemID) //{ // remoteScript[localID].Events.http_response(localID, itemID); //} diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs index fcd1df8c0b..93a1a803d1 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs @@ -29,7 +29,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Threading; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.ScriptEngine.Interfaces; @@ -192,7 +192,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// /// /// - public void RemoveScript(uint localID, LLUUID itemID) + public void RemoveScript(uint localID, UUID itemID) { // Remove a specific script @@ -219,7 +219,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } - public Object[] GetSerializationData(LLUUID itemID) + public Object[] GetSerializationData(UUID itemID) { List data = new List(); @@ -250,7 +250,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return data.ToArray(); } - public void CreateFromData(uint localID, LLUUID itemID, LLUUID hostID, + public void CreateFromData(uint localID, UUID itemID, UUID hostID, Object[] data) { int idx = 0; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 93dfeea834..b2be0dfd21 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -32,9 +32,8 @@ using System.Runtime.Remoting.Lifetime; using System.Text; using System.Threading; using Nini.Config; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; @@ -63,13 +62,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api internal IScriptEngine m_ScriptEngine; internal SceneObjectPart m_host; internal uint m_localID; - internal LLUUID m_itemID; + internal UUID m_itemID; internal bool throwErrorOnNotImplemented = true; internal AsyncCommandManager AsyncCommands = null; internal float m_ScriptDelayFactor = 1.0f; internal float m_ScriptDistanceFactor = 1.0f; - public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID) + public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) { m_ScriptEngine = ScriptEngine; m_host = host; @@ -129,11 +128,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return World.GetCommander(name); } - private LLUUID InventorySelf() + private UUID InventorySelf() { - LLUUID invItemID = new LLUUID(); + UUID invItemID = new UUID(); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Type == 10 && inv.Value.ItemID == m_itemID) { @@ -145,54 +144,54 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return invItemID; } - private LLUUID InventoryKey(string name, int type) + private UUID InventoryKey(string name, int type) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { if (inv.Value.Type != type) - return LLUUID.Zero; + return UUID.Zero; return inv.Value.AssetID.ToString(); } } - return LLUUID.Zero; + return UUID.Zero; } - private LLUUID InventoryKey(string name) + private UUID InventoryKey(string name) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { return inv.Value.AssetID.ToString(); } } - return LLUUID.Zero; + return UUID.Zero; } /// - /// accepts a valid LLUUID, -or- a name of an inventory item. - /// Returns a valid LLUUID or LLUUID.Zero if key invalid and item not found + /// accepts a valid UUID, -or- a name of an inventory item. + /// Returns a valid UUID or UUID.Zero if key invalid and item not found /// in prim inventory. /// /// /// - private LLUUID KeyOrName(string k) + private UUID KeyOrName(string k) { - LLUUID key = LLUUID.Zero; + UUID key = UUID.Zero; // if we can parse the string as a key, use it. - if (LLUUID.TryParse(k, out key)) + if (UUID.TryParse(k, out key)) { return key; } // else try to locate the name in inventory of object. found returns key, - // not found returns LLUUID.Zero which will translate to the default particle texture + // not found returns UUID.Zero which will translate to the default particle texture else { return InventoryKey(k); @@ -551,7 +550,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (text.Length > 1023) text = text.Substring(0, 1023); - World.SimChat(Helpers.StringToField(text), + World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.Whisper, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); @@ -565,7 +564,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (text.Length > 1023) text = text.Substring(0, 1023); - World.SimChat(Helpers.StringToField(text), + World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.Say, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); @@ -579,7 +578,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (text.Length > 1023) text = text.Substring(0, 1023); - World.SimChat(Helpers.StringToField(text), + World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.Shout, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, true); IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); @@ -606,8 +605,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llListen(int channelID, string name, string ID, string msg) { m_host.AddScriptLPS(1); - LLUUID keyID; - LLUUID.TryParse(ID, out keyID); + UUID keyID; + UUID.TryParse(ID, out keyID); IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); return wComm.Listen(m_localID, m_itemID, m_host.UUID, channelID, name, keyID, msg); } @@ -629,8 +628,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSensor(string name, string id, int type, double range, double arc) { m_host.AddScriptLPS(1); - LLUUID keyID = LLUUID.Zero; - LLUUID.TryParse(id, out keyID); + UUID keyID = UUID.Zero; + UUID.TryParse(id, out keyID); AsyncCommands.SensorRepeatPlugin.SenseOnce(m_localID, m_itemID, name, keyID, type, range, arc, m_host); } @@ -638,8 +637,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) { m_host.AddScriptLPS(1); - LLUUID keyID = LLUUID.Zero; - LLUUID.TryParse(id, out keyID); + UUID keyID = UUID.Zero; + UUID.TryParse(id, out keyID); AsyncCommands.SensorRepeatPlugin.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host); } @@ -650,7 +649,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api AsyncCommands.SensorRepeatPlugin.UnSetSenseRepeaterEvents(m_localID, m_itemID); } - public string resolveName(LLUUID objecUUID) + public string resolveName(UUID objecUUID) { // try avatar username surname CachedUserInfo profile = World.CommsManager.UserProfileCacheService.GetUserDetails(objecUUID); @@ -841,7 +840,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if ((status & ScriptBaseClass.STATUS_CAST_SHADOWS) == ScriptBaseClass.STATUS_CAST_SHADOWS) { - m_host.AddFlag(LLObject.ObjectFlags.CastShadows); + m_host.AddFlag(PrimFlags.CastShadows); } if ((status & ScriptBaseClass.STATUS_ROTATE_X) == ScriptBaseClass.STATUS_ROTATE_X) @@ -891,25 +890,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llGetStatus(int status) { m_host.AddScriptLPS(1); - // Console.WriteLine(m_host.UUID.ToString() + " status is " + m_host.GetEffectiveObjectFlags().ToString()); + // Console.WriteLine(m_host.ToString() + " status is " + m_host.GetEffectiveObjectFlags().ToString()); switch (status) { case ScriptBaseClass.STATUS_PHYSICS: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == (uint)LLObject.ObjectFlags.Physics) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) == (uint)PrimFlags.Physics) { return 1; } return 0; case ScriptBaseClass.STATUS_PHANTOM: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == (uint)LLObject.ObjectFlags.Phantom) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) == (uint)PrimFlags.Phantom) { return 1; } return 0; case ScriptBaseClass.STATUS_CAST_SHADOWS: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.CastShadows) == (uint)LLObject.ObjectFlags.CastShadows) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.CastShadows) == (uint)PrimFlags.CastShadows) { return 1; } @@ -976,7 +975,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api scale.y = World.m_maxNonphys; if (scale.z > World.m_maxNonphys) scale.z = World.m_maxNonphys; - LLVector3 tmp = part.Scale; + Vector3 tmp = part.Scale; tmp.X = (float)scale.x; tmp.Y = (float)scale.y; tmp.Z = (float)scale.z; @@ -999,8 +998,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private void SetColor(SceneObjectPart part, LSL_Types.Vector3 color, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -1036,7 +1035,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void SetGlow(SceneObjectPart part, int face, float glow) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { tex.CreateFace((uint) face); @@ -1083,7 +1082,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api break; } - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { tex.CreateFace((uint) face); @@ -1111,7 +1110,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void SetFullBright(SceneObjectPart part, int face, bool bright) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { tex.CreateFace((uint) face); @@ -1137,7 +1136,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public double llGetAlpha(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color { return (double)((tex.DefaultTexture.RGBA.A * 255) / 255); @@ -1158,8 +1157,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private void SetAlpha(SceneObjectPart part, double alpha, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -1286,8 +1285,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.Vector3 llGetColor(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = m_host.Shape.Textures; + Color4 texcolor; LSL_Types.Vector3 rgb; if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color { @@ -1320,21 +1319,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private void SetTexture(SceneObjectPart part, string texture, int face) { - LLUUID textureID=new LLUUID(); + UUID textureID=new UUID(); - if (!LLUUID.TryParse(texture, out textureID)) + if (!UUID.TryParse(texture, out textureID)) { textureID=InventoryKey(texture, (int)AssetType.Texture); } - if (textureID == LLUUID.Zero) + if (textureID == UUID.Zero) return; - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { - LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); texface.TextureID = textureID; tex.FaceTextures[face] = texface; part.UpdateTexture(tex); @@ -1365,10 +1364,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private void ScaleTexture(SceneObjectPart part, double u, double v, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { - LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); texface.RepeatU = (float)u; texface.RepeatV = (float)v; tex.FaceTextures[face] = texface; @@ -1401,10 +1400,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private void OffsetTexture(SceneObjectPart part, double u, double v, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { - LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); texface.OffsetU = (float)u; texface.OffsetV = (float)v; tex.FaceTextures[face] = texface; @@ -1437,10 +1436,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private void RotateTexture(SceneObjectPart part, double rotation, int face) { - LLObject.TextureEntry tex = part.Shape.Textures; + Primitive.TextureEntry tex = part.Shape.Textures; if (face > -1) { - LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); texface.Rotation = (float)rotation; tex.FaceTextures[face] = texface; part.UpdateTexture(tex); @@ -1464,14 +1463,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public string llGetTexture(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; if (face == -1) { face = 0; } if (face > -1) { - LLObject.TextureEntryFace texface; + Primitive.TextureEntryFace texface; texface = tex.GetFace((uint)face); return texface.TextureID.ToString(); } @@ -1501,11 +1500,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (part.ParentID != 0) { - part.UpdateOffSet(new LLVector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z)); + part.UpdateOffSet(new Vector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z)); } else { - part.UpdateGroupPosition(new LLVector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z)); + part.UpdateGroupPosition(new Vector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z)); } } @@ -1545,7 +1544,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private void SetRot(SceneObjectPart part, LSL_Types.Quaternion rot) { - part.UpdateRotation(new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s)); + part.UpdateRotation(new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s)); // Update rotation does not move the object in the physics scene if it's a linkset. part.ParentGroup.AbsolutePosition = part.ParentGroup.AbsolutePosition; } @@ -1553,7 +1552,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.Quaternion llGetRot() { m_host.AddScriptLPS(1); - LLQuaternion q = m_host.RotationOffset; + Quaternion q = m_host.RotationOffset; return new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); } @@ -1605,7 +1604,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range) { m_host.AddScriptLPS(1); - return m_host.registerTargetWaypoint(new LLVector3((float)position.x, (float)position.y, (float)position.z), (float)range); + return m_host.registerTargetWaypoint(new Vector3((float)position.x, (float)position.y, (float)position.z), (float)range); } @@ -1631,7 +1630,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llMoveToTarget(LSL_Types.Vector3 target, double tau) { m_host.AddScriptLPS(1); - m_host.MoveToTarget(new LLVector3((float)target.x, (float)target.y, (float)target.z), (float)tau); + m_host.MoveToTarget(new Vector3((float)target.x, (float)target.y, (float)target.z), (float)tau); } public void llStopMoveToTarget() @@ -1652,7 +1651,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (force.z > 20000) force.z = 20000; - m_host.ApplyImpulse(new LLVector3((float)force.x, (float)force.y, (float)force.z), local != 0); + m_host.ApplyImpulse(new Vector3((float)force.x, (float)force.y, (float)force.z), local != 0); } public void llApplyRotationalImpulse(LSL_Types.Vector3 force, int local) @@ -1761,7 +1760,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); - if (m_host.Sound != LLUUID.Zero) + if (m_host.Sound != UUID.Zero) llStopSound(); m_host.Sound = KeyOrName(sound); @@ -1803,7 +1802,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); - m_host.Sound = LLUUID.Zero; + m_host.Sound = UUID.Zero; m_host.SoundGain = 0; m_host.SoundFlags = 0; m_host.SoundRadius = 0; @@ -1811,7 +1810,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_host.ScheduleFullUpdate(); m_host.SendFullUpdateToAllClients(); - // m_host.SendSound(LLUUID.Zero.ToString(), 1.0, false, 2); + // m_host.SendSound(UUID.Zero.ToString(), 1.0, false, 2); } public void llPreloadSound(string sound) @@ -2059,13 +2058,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llGiveMoney(string destination, int amount) { - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return 0; m_host.AddScriptLPS(1); - if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) + if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) return 0; if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) @@ -2074,9 +2073,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return 0; } - LLUUID toID=new LLUUID(); + UUID toID=new UUID(); - if (!LLUUID.TryParse(destination, out toID)) + if (!UUID.TryParse(destination, out toID)) { LSLError("Bad key in llGiveMoney"); return 0; @@ -2140,7 +2139,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // it's possible to have two items with the same task inventory name. // this is an easter egg of sorts. - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == inventory) { @@ -2151,18 +2150,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api continue; } - LLVector3 llpos = new LLVector3((float)pos.x, (float)pos.y, (float)pos.z); + Vector3 llpos = new Vector3((float)pos.x, (float)pos.y, (float)pos.z); // test if we're further away then 10m if (Util.GetDistanceTo(llpos, m_host.AbsolutePosition) > 10) return; // wiki says, if it's further away then 10m, silently fail. - LLVector3 llvel = new LLVector3((float)vel.x, (float)vel.y, (float)vel.z); + Vector3 llvel = new Vector3((float)vel.x, (float)vel.y, (float)vel.z); // need the magnitude later float velmag = (float)Util.GetMagnitude(llvel); - SceneObjectGroup new_group = World.RezObject(m_host, inv.Value, llpos, new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), llvel, param); + SceneObjectGroup new_group = World.RezObject(m_host, inv.Value, llpos, new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), llvel, param); // If either of these are null, then there was an unknown error. if (new_group == null) @@ -2176,7 +2175,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( "object_rez", new Object[] { new LSL_Types.LSLString( - new_group.RootPart.UUID.ToString()) }, + new_group.RootPart.ToString()) }, new DetectParams[0])); float groupmass = new_group.GetMass(); @@ -2243,7 +2242,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return; } - if (m_host.TaskInventory[InventorySelf()].PermsGranter != LLUUID.Zero) + if (m_host.TaskInventory[InventorySelf()].PermsGranter != UUID.Zero) { ScenePresence presence = World.GetScenePresence(m_host.TaskInventory[InventorySelf()].PermsGranter); @@ -2270,7 +2269,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return; } - if (m_host.TaskInventory[InventorySelf()].PermsGranter != LLUUID.Zero) + if (m_host.TaskInventory[InventorySelf()].PermsGranter != UUID.Zero) { ScenePresence presence = World.GetScenePresence(m_host.TaskInventory[InventorySelf()].PermsGranter); @@ -2331,14 +2330,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // TODO: figure out values for client, fromSession, and imSessionID // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); - LLUUID friendTransactionID = LLUUID.Random(); + UUID friendTransactionID = UUID.Random(); //m_pendingFriendRequests.Add(friendTransactionID, fromAgentID); GridInstantMessage msg = new GridInstantMessage(); - msg.fromAgentID = new Guid(m_host.UUID.ToString()); // fromAgentID.UUID; + msg.fromAgentID = new Guid(m_host.ToString()); // fromAgentID.Guid; msg.fromAgentSession = new Guid(friendTransactionID.ToString());// fromAgentSession.UUID; - msg.toAgentID = new Guid(user); // toAgentID.UUID; + msg.toAgentID = new Guid(user); // toAgentID.Guid; msg.imSessionID = new Guid(friendTransactionID.ToString()); // This is the item we're mucking with here // Console.WriteLine("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message); // Console.WriteLine("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString()); @@ -2356,8 +2355,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api msg.fromGroup = false;// fromGroup; msg.offline = (byte)0; //offline; msg.ParentEstateID = 0; //ParentEstateID; - msg.Position = new sLLVector3();// new sLLVector3(m_host.AbsolutePosition); - msg.RegionID = World.RegionInfo.RegionID.UUID;//RegionID.UUID; + msg.Position = Vector3.Zero;// new Vector3(m_host.AbsolutePosition); + msg.RegionID = World.RegionInfo.RegionID.Guid;//RegionID.Guid; msg.binaryBucket = new byte[0];// binaryBucket; World.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule); // ScriptSleep(2000); @@ -2404,7 +2403,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public string llGetKey() { m_host.AddScriptLPS(1); - return m_host.UUID.ToString(); + return m_host.ToString(); } public void llSetBuoyancy(double buoyancy) @@ -2468,11 +2467,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return; - if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) + if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) return; if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) @@ -2481,9 +2480,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (presence != null) { - // Do NOT try to parse LLUUID, animations cannot be triggered by ID - LLUUID animID=InventoryKey(anim, (int)AssetType.Animation); - if (animID == LLUUID.Zero) + // Do NOT try to parse UUID, animations cannot be triggered by ID + UUID animID=InventoryKey(anim, (int)AssetType.Animation); + if (animID == UUID.Zero) presence.AddAnimation(anim); else presence.AddAnimation(animID); @@ -2495,30 +2494,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return; - if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) + if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) return; if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) { - LLUUID animID = new LLUUID(); + UUID animID = new UUID(); - if (!LLUUID.TryParse(anim, out animID)) + if (!UUID.TryParse(anim, out animID)) { animID=InventoryKey(anim); } - if (animID == LLUUID.Zero) + if (animID == UUID.Zero) return; ScenePresence presence = World.GetScenePresence(m_host.TaskInventory[invItemID].PermsGranter); if (presence != null) { - if (animID == LLUUID.Zero) + if (animID == UUID.Zero) presence.RemoveAnimation(anim); else presence.RemoveAnimation(animID); @@ -2541,8 +2540,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain) { m_host.AddScriptLPS(1); - m_host.RotationalVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); - m_host.AngularVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); + m_host.RotationalVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); + m_host.AngularVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); m_host.ScheduleTerseUpdate(); m_host.SendTerseUpdateToAllClients(); } @@ -2561,19 +2560,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llRequestPermissions(string agent, int perm) { - LLUUID agentID=new LLUUID(); + UUID agentID=new UUID(); - if (!LLUUID.TryParse(agent, out agentID)) + if (!UUID.TryParse(agent, out agentID)) return; - LLUUID invItemID=InventorySelf(); + UUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + if (invItemID == UUID.Zero) return; // Not in a prim? How?? - if (agentID == LLUUID.Zero || perm == 0) // Releasing permissions + if (agentID == UUID.Zero || perm == 0) // Releasing permissions { - m_host.TaskInventory[invItemID].PermsGranter=LLUUID.Zero; + m_host.TaskInventory[invItemID].PermsGranter=UUID.Zero; m_host.TaskInventory[invItemID].PermsMask=0; m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( @@ -2655,14 +2654,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api new DetectParams[0])); } - void handleScriptAnswer(IClientAPI client, LLUUID taskID, LLUUID itemID, int answer) + void handleScriptAnswer(IClientAPI client, UUID taskID, UUID itemID, int answer) { if (taskID != m_host.UUID) return; - LLUUID invItemID=InventorySelf(); + UUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + if (invItemID == UUID.Zero) return; client.OnScriptAnswer-=handleScriptAnswer; @@ -2687,7 +2686,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public LSL_Types.LSLInteger llGetPermissions() @@ -2725,8 +2724,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknumber); if (linknumber > -1) { - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -2772,8 +2771,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { linknumber = w; part = m_host.ParentGroup.GetLinkNumPart(linknumber); - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -2816,7 +2815,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llCreateLink(string target, int parent) { m_host.AddScriptLPS(1); - LLUUID invItemID = InventorySelf(); + UUID invItemID = InventorySelf(); if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0) { ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); return; @@ -2841,7 +2840,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api childPrim.RootPart.UpdateFlag = uf; } parentPrim.TriggerScriptChangedEvent(Changed.LINK); - parentPrim.RootPart.AddFlag(LLObject.ObjectFlags.CreateSelected); + parentPrim.RootPart.AddFlag(PrimFlags.CreateSelected); parentPrim.GetProperties(client); ScriptSleep(1000); @@ -2865,11 +2864,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum); if (part != null) { - return part.UUID.ToString(); + return part.ToString(); } else { - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } } @@ -2891,7 +2890,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); int count = 0; - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Type == type || type == -1) { @@ -2905,7 +2904,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); ArrayList keys = new ArrayList(); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Type == type || type == -1) { @@ -2926,14 +2925,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetScriptState(string name, int run) { - LLUUID item; + UUID item; m_host.AddScriptLPS(1); // These functions are supposed to be robust, // so get the state one step at a time. - if ((item = ScriptByName(name)) != LLUUID.Zero) + if ((item = ScriptByName(name)) != UUID.Zero) { m_ScriptEngine.SetScriptState(item, run == 0 ? false : true); } @@ -2954,17 +2953,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); bool found = false; - LLUUID destId = LLUUID.Zero; - LLUUID objId = LLUUID.Zero; + UUID destId = UUID.Zero; + UUID objId = UUID.Zero; - if (!LLUUID.TryParse(destination, out destId)) + if (!UUID.TryParse(destination, out destId)) { llSay(0, "Could not parse key " + destination); return; } // move the first object found with this inventory name - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == inventory) { @@ -3037,7 +3036,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api World.CommsManager.UserService.GetAgentByUUID(id); if (userProfile == null || userAgent == null) - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); string reply = String.Empty; @@ -3065,12 +3064,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api reply = "0"; break; default: - return LLUUID.Zero.ToString(); // Raise no event + return UUID.Zero.ToString(); // Raise no event } - LLUUID rq = LLUUID.Random(); + UUID rq = UUID.Random(); - LLUUID tid = AsyncCommands. + UUID tid = AsyncCommands. DataserverPlugin.RegisterRequest(m_localID, m_itemID, rq.ToString()); @@ -3089,23 +3088,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { if (item.Type == 3 && item.Name == name) { - LLUUID tid = AsyncCommands. + UUID tid = AsyncCommands. DataserverPlugin.RegisterRequest(m_localID, m_itemID, item.AssetID.ToString()); - LLVector3 region = new LLVector3( + Vector3 region = new Vector3( World.RegionInfo.RegionLocX * Constants.RegionSize, World.RegionInfo.RegionLocY * Constants.RegionSize, 0); World.AssetCache.GetAsset(item.AssetID, - delegate(LLUUID i, AssetBase a) + delegate(UUID i, AssetBase a) { AssetLandmark lm = new AssetLandmark(a); float rx = (uint)(lm.RegionHandle >> 32); float ry = (uint)lm.RegionHandle; - region = lm.Position + new LLVector3(rx, ry, 0) - region; + region = lm.Position + new Vector3(rx, ry, 0) - region; string reply = region.ToString(); AsyncCommands. @@ -3130,8 +3129,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llTeleportAgentHome(string agent) { m_host.AddScriptLPS(1); - LLUUID agentId = new LLUUID(); - if (LLUUID.TryParse(agent, out agentId)) + UUID agentId = new UUID(); + if (UUID.TryParse(agent, out agentId)) { ScenePresence presence = World.GetScenePresence(agentId); if (presence != null) @@ -3147,7 +3146,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llModifyLand(int action, int brush) { m_host.AddScriptLPS(1); - World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new LLVector3(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, 0)); + World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new Vector3(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, 0)); } public void llCollisionSound(string impact_sound, double impact_volume) @@ -3182,7 +3181,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_host.AddScriptLPS(1); // uint partLocalID; - LLUUID partItemID; + UUID partItemID; switch ((int)linknum) { @@ -3357,7 +3356,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api SceneObjectPart targ = World.GetSceneObjectPart(target); if (targ == null) return; - targ.ApplyImpulse(new LLVector3((float)impulse.x, (float)impulse.y, (float)impulse.z), local != 0); + targ.ApplyImpulse(new Vector3((float)impulse.x, (float)impulse.y, (float)impulse.z), local != 0); } public void llPassCollisions(int pass) @@ -3636,7 +3635,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public string llGetInventoryKey(string name) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { @@ -3646,11 +3645,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } else { - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } } } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public void llAllowInventoryDrop(int add) @@ -3668,10 +3667,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_host.AddScriptLPS(1); LSL_Types.Vector3 SunDoubleVector3; - LLVector3 SunFloatVector3; + Vector3 SunFloatVector3; // sunPosition estate setting is set in OpenSim.Region.Environment.Modules.SunModule - // have to convert from LLVector3 (float) to LSL_Types.Vector3 (double) + // have to convert from Vector3 (float) to LSL_Types.Vector3 (double) SunFloatVector3 = World.RegionInfo.RegionSettings.SunVector; SunDoubleVector3.x = (double)SunFloatVector3.X; SunDoubleVector3.y = (double)SunFloatVector3.Y; @@ -3683,7 +3682,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.Vector3 llGetTextureOffset(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; LSL_Types.Vector3 offset; if (face == -1) { @@ -3698,7 +3697,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.Vector3 llGetTextureScale(int side) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; LSL_Types.Vector3 scale; if (side == -1) { @@ -3713,7 +3712,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public double llGetTextureRot(int face) { m_host.AddScriptLPS(1); - LLObject.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntry tex = m_host.Shape.Textures; if (face == -1) { face = 0; @@ -3730,14 +3729,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public string llGetOwnerKey(string id) { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id, out key)) + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) { return World.GetSceneObjectPart(World.Entities[key].LocalId).OwnerID.ToString(); } else { - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } } @@ -3946,8 +3945,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return 2; if (src.Data[index] is String) { - LLUUID tuuid; - if (LLUUID.TryParse(src.Data[index].ToString(), out tuuid)) + UUID tuuid; + if (UUID.TryParse(src.Data[index].ToString(), out tuuid)) { return 3; } @@ -4359,8 +4358,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public string llKey2Name(string id) { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id,out key)) + UUID key = new UUID(); + if (UUID.TryParse(id,out key)) { ScenePresence presence = World.GetScenePresence(key); @@ -4384,7 +4383,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); Primitive.TextureAnimation pTexAnim = new Primitive.TextureAnimation(); - pTexAnim.Flags =(uint) mode; + pTexAnim.Flags = (Primitive.TextureAnimMode)mode; //ALL_SIDES if (face == -1) @@ -4473,8 +4472,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llOverMyLand(string id) { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id,out key)) + UUID key = new UUID(); + if (UUID.TryParse(id,out key)) { ScenePresence presence = World.GetScenePresence(key); if (presence != null) // object is an avatar @@ -4517,8 +4516,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id, out key)) + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) { ScenePresence av = World.GetScenePresence(key); @@ -4656,8 +4655,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api Primitive.ParticleSystem ps = new Primitive.ParticleSystem(); // TODO find out about the other defaults and add them here - ps.PartStartColor = new LLColor(1.0f, 1.0f, 1.0f, 1.0f); - ps.PartEndColor = new LLColor(1.0f, 1.0f, 1.0f, 1.0f); + ps.PartStartColor = new Color4(1.0f, 1.0f, 1.0f, 1.0f); + ps.PartEndColor = new Color4(1.0f, 1.0f, 1.0f, 1.0f); ps.PartStartScaleX = 1.0f; ps.PartStartScaleY = 1.0f; ps.PartEndScaleX = 1.0f; @@ -4705,7 +4704,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api case (int)ScriptBaseClass.PSYS_PART_END_COLOR: tempv = (LSL_Types.Vector3)rules.Data[i + 1]; - //prules.PartEndColor = new LLColor(tempv.x,tempv.y,tempv.z,1); + //prules.PartEndColor = new Color4(tempv.x,tempv.y,tempv.z,1); prules.PartEndColor.R = (float)tempv.x; prules.PartEndColor.G = (float)tempv.y; @@ -4784,8 +4783,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api break; case (int)ScriptBaseClass.PSYS_SRC_TARGET_KEY: - LLUUID key = LLUUID.Zero; - if (LLUUID.TryParse(rules.Data[i + 1].ToString(), out key)) + UUID key = UUID.Zero; + if (UUID.TryParse(rules.Data[i + 1].ToString(), out key)) { prules.Target = key; } @@ -4829,37 +4828,37 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api NotImplemented("llGroundRepel"); } - private LLUUID GetTaskInventoryItem(string name) + private UUID GetTaskInventoryItem(string name) { - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) return inv.Key; } - return LLUUID.Zero; + return UUID.Zero; } public void llGiveInventoryList(string destination, string category, LSL_Types.list inventory) { m_host.AddScriptLPS(1); - LLUUID destID; - if (!LLUUID.TryParse(destination, out destID)) + UUID destID; + if (!UUID.TryParse(destination, out destID)) return; - List itemList = new List(); + List itemList = new List(); foreach (Object item in inventory.Data) { - LLUUID itemID; - if (LLUUID.TryParse(item.ToString(), out itemID)) + UUID itemID; + if (UUID.TryParse(item.ToString(), out itemID)) { itemList.Add(itemID); } else { itemID = GetTaskInventoryItem(item.ToString()); - if (itemID != LLUUID.Zero) + if (itemID != UUID.Zero) itemList.Add(itemID); } } @@ -4920,7 +4919,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api rot.z = 1; // ZERO_ROTATION = 0,0,0,1 m_host.SitTargetPosition = new Vector3((float)offset.x, (float)offset.y, (float)offset.z); - m_host.SitTargetOrientation = new Quaternion((float)rot.s, (float)rot.x, (float)rot.y, (float)rot.z); + m_host.SitTargetOrientation = new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); } public string llAvatarOnSitTarget() @@ -4932,12 +4931,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llAddToLandPassList(string avatar, double hours) { m_host.AddScriptLPS(1); - LLUUID key; + UUID key; LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).landData; if (land.OwnerID == m_host.OwnerID) { ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); - if (LLUUID.TryParse(avatar, out key)) + if (UUID.TryParse(avatar, out key)) { entry.AgentID = key; entry.Flags = ParcelManager.AccessList.Access; @@ -4963,13 +4962,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetCameraEyeOffset(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - m_host.SetCameraEyeOffset(new LLVector3((float)offset.x, (float)offset.y, (float)offset.z)); + m_host.SetCameraEyeOffset(new Vector3((float)offset.x, (float)offset.y, (float)offset.z)); } public void llSetCameraAtOffset(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - m_host.SetCameraAtOffset(new LLVector3((float)offset.x, (float)offset.y, (float)offset.z)); + m_host.SetCameraAtOffset(new Vector3((float)offset.x, (float)offset.y, (float)offset.z)); } public string llDumpList2String(LSL_Types.list src, string seperator) @@ -4991,7 +4990,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llScriptDanger(LSL_Types.Vector3 pos) { m_host.AddScriptLPS(1); - bool result = World.scriptDanger(m_host.LocalId, new LLVector3((float)pos.x, (float)pos.y, (float)pos.z)); + bool result = World.scriptDanger(m_host.LocalId, new Vector3((float)pos.x, (float)pos.y, (float)pos.z)); if (result) { return 1; @@ -5006,8 +5005,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llDialog(string avatar, string message, LSL_Types.list buttons, int chat_channel) { m_host.AddScriptLPS(1); - LLUUID av = new LLUUID(); - if (!LLUUID.TryParse(avatar,out av)) + UUID av = new UUID(); + if (!UUID.TryParse(avatar,out av)) { LSLError("First parameter to llDialog needs to be a key"); return; @@ -5032,7 +5031,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } buts[i] = buttons.Data[i].ToString(); } - World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new LLUUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); + World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); // ScriptSleep(1000); } @@ -5049,11 +5048,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llResetOtherScript(string name) { - LLUUID item; + UUID item; m_host.AddScriptLPS(1); - if ((item = ScriptByName(name)) != LLUUID.Zero) + if ((item = ScriptByName(name)) != UUID.Zero) m_ScriptEngine.ResetScript(item); else ShoutError("llResetOtherScript: script "+name+" not found"); @@ -5061,11 +5060,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llGetScriptState(string name) { - LLUUID item; + UUID item; m_host.AddScriptLPS(1); - if ((item = ScriptByName(name)) != LLUUID.Zero) + if ((item = ScriptByName(name)) != UUID.Zero) { return m_ScriptEngine.GetScriptState(item) ?1:0; } @@ -5095,10 +5094,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); bool found = false; - LLUUID destId = LLUUID.Zero; - LLUUID srcId = LLUUID.Zero; + UUID destId = UUID.Zero; + UUID srcId = UUID.Zero; - if (!LLUUID.TryParse(target, out destId)) + if (!UUID.TryParse(target, out destId)) { llSay(0, "Could not parse key " + target); return; @@ -5111,7 +5110,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } // copy the first script found with this inventory name - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { @@ -5143,8 +5142,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); if (xmlrpcMod.IsEnabled()) { - LLUUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, LLUUID.Zero); - object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(LLUUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) }; + UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, UUID.Zero); + object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(UUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) }; m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( "remote_data", resobj, new DetectParams[0])); @@ -5464,9 +5463,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private void SetPrimitiveShapeParams(SceneObjectPart part, string map, int type) { ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); - LLUUID sculptId; + UUID sculptId; - if (!LLUUID.TryParse(map, out sculptId)) + if (!UUID.TryParse(map, out sculptId)) { llSay(0, "Could not parse key " + map); return; @@ -5896,9 +5895,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api ScenePresence av = World.GetScenePresence(id); if (av == null) return l; - LLUUID[] anims; + UUID[] anims; anims = av.GetAnimationArray(); - foreach (LLUUID foo in anims) + foreach (UUID foo in anims) l.Add(foo.ToString()); return l; } @@ -5906,8 +5905,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetParcelMusicURL(string url) { m_host.AddScriptLPS(1); - LLUUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); - if (landowner == LLUUID.Zero) + UUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); + if (landowner == UUID.Zero) { return; } @@ -5922,9 +5921,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void osSetParcelMediaURL(string url) { m_host.AddScriptLPS(1); - LLUUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); + UUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); - if (landowner == LLUUID.Zero) + if (landowner == UUID.Zero) { return; } @@ -5978,8 +5977,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknumber); if (linknumber > -1) { - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -6017,8 +6016,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { linknumber = w; part = m_host.ParentGroup.GetLinkNumPart(linknumber); - LLObject.TextureEntry tex = part.Shape.Textures; - LLColor texcolor; + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; if (face > -1) { texcolor = tex.CreateFace((uint)face).RGBA; @@ -6086,21 +6085,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api break; case (int)ScriptBaseClass.PRIM_PHYSICS: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) != 0) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) != 0) res.Add(new LSL_Types.LSLInteger(1)); else res.Add(new LSL_Types.LSLInteger(0)); break; case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.TemporaryOnRez) != 0) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) != 0) res.Add(new LSL_Types.LSLInteger(1)); else res.Add(new LSL_Types.LSLInteger(0)); break; case (int)ScriptBaseClass.PRIM_PHANTOM: - if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) != 0) + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) != 0) res.Add(new LSL_Types.LSLInteger(1)); else res.Add(new LSL_Types.LSLInteger(0)); @@ -6205,8 +6204,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (face == -1) face = 0; - LLObject.TextureEntry tex = m_host.Shape.Textures; - LLObject.TextureEntryFace texface = tex.GetFace((uint)face); + Primitive.TextureEntry tex = m_host.Shape.Textures; + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); res.Add(new LSL_Types.LSLString(texface.TextureID.ToString())); res.Add(new LSL_Types.Vector3(texface.RepeatU, @@ -6225,7 +6224,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api face=Convert.ToInt32(rules.Data[idx++].ToString()); tex = m_host.Shape.Textures; - LLColor texcolor; + Color4 texcolor; if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color texcolor = tex.DefaultTexture.RGBA; else @@ -6579,7 +6578,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetLocalRot(LSL_Types.Quaternion rot) { m_host.AddScriptLPS(1); - m_host.RotationOffset = new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); + m_host.RotationOffset = new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); // ScriptSleep(200); } @@ -6835,7 +6834,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llGetInventoryPermMask(string item, int mask) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == item) { @@ -6866,7 +6865,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public string llGetInventoryCreator(string item) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == item) { @@ -6881,7 +6880,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); - World.SimChatBroadcast(Helpers.StringToField(msg), ChatTypeEnum.Owner, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); + World.SimChatBroadcast(Utils.StringToBytes(msg), ChatTypeEnum.Owner, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); // IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); // wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg); } @@ -6902,7 +6901,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (info == null) { // ScriptSleep(1000); - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } reply = new LSL_Types.Vector3( info.RegionLocX * Constants.RegionSize, @@ -6919,7 +6918,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (info == null) { // ScriptSleep(1000); - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } int access = info.RegionSettings.Maturity; if (access == 0) @@ -6934,11 +6933,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api break; default: // ScriptSleep(1000); - return LLUUID.Zero.ToString(); // Raise no event + return UUID.Zero.ToString(); // Raise no event } - LLUUID rq = LLUUID.Random(); + UUID rq = UUID.Random(); - LLUUID tid = AsyncCommands. + UUID tid = AsyncCommands. DataserverPlugin.RegisterRequest(m_localID, m_itemID, rq.ToString()); AsyncCommands. @@ -6950,7 +6949,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api catch(Exception e) { Console.WriteLine(e.ToString()); - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } } @@ -6963,8 +6962,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public double llGetObjectMass(string id) { m_host.AddScriptLPS(1); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id,out key)) + UUID key = new UUID(); + if (UUID.TryParse(id,out key)) { return (double)World.GetSceneObjectPart(World.Entities[key].LocalId).GetMass(); } @@ -7056,7 +7055,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llLoadURL(string avatar_id, string message, string url) { m_host.AddScriptLPS(1); - LLUUID avatarId = new LLUUID(avatar_id); + UUID avatarId = new UUID(avatar_id); m_ScriptEngine.World.SendUrlToUser(avatarId, m_host.Name, m_host.UUID, m_host.ObjectOwner, false, message, url); // ScriptSleep(10000); @@ -7202,7 +7201,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llGetInventoryType(string name) { m_host.AddScriptLPS(1); - foreach (KeyValuePair inv in m_host.TaskInventory) + foreach (KeyValuePair inv in m_host.TaskInventory) { if (inv.Value.Name == name) { @@ -7231,10 +7230,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.Vector3 llGetCameraPos() { m_host.AddScriptLPS(1); - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return new LSL_Types.Vector3(); - if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) + if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) return new LSL_Types.Vector3(); if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) { @@ -7244,7 +7243,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api ScenePresence presence = World.GetScenePresence(m_host.OwnerID); if (presence != null) { - LSL_Types.Vector3 pos = new LSL_Types.Vector3(presence.CameraPosition.x,presence.CameraPosition.y,presence.CameraPosition.z); + LSL_Types.Vector3 pos = new LSL_Types.Vector3(presence.CameraPosition.X, presence.CameraPosition.Y, presence.CameraPosition.Z); return pos; } return new LSL_Types.Vector3(); @@ -7307,12 +7306,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llAddToLandBanList(string avatar, double hours) { m_host.AddScriptLPS(1); - LLUUID key; + UUID key; LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).landData; if (land.OwnerID == m_host.OwnerID) { ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); - if (LLUUID.TryParse(avatar, out key)) + if (UUID.TryParse(avatar, out key)) { entry.AgentID = key; entry.Flags = ParcelManager.AccessList.Ban; @@ -7326,11 +7325,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llRemoveFromLandPassList(string avatar) { m_host.AddScriptLPS(1); - LLUUID key; + UUID key; LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).landData; if (land.OwnerID == m_host.OwnerID) { - if (LLUUID.TryParse(avatar, out key)) + if (UUID.TryParse(avatar, out key)) { foreach (ParcelManager.ParcelAccessEntry entry in land.ParcelAccessList) { @@ -7348,11 +7347,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llRemoveFromLandBanList(string avatar) { m_host.AddScriptLPS(1); - LLUUID key; + UUID key; LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).landData; if (land.OwnerID == m_host.OwnerID) { - if (LLUUID.TryParse(avatar, out key)) + if (UUID.TryParse(avatar, out key)) { foreach (ParcelManager.ParcelAccessEntry entry in land.ParcelAccessList) { @@ -7372,16 +7371,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_host.AddScriptLPS(1); // our key in the object we are in - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) return; + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return; // the object we are in - LLUUID objectID = m_host.ParentUUID; - if (objectID == LLUUID.Zero) return; + UUID objectID = m_host.ParentUUID; + if(objectID == UUID.Zero) return; // we need the permission first, to know which avatar we want to set the camera for - LLUUID agentID = m_host.TaskInventory[invItemID].PermsGranter; - if (agentID == LLUUID.Zero) return; + UUID agentID = m_host.TaskInventory[invItemID].PermsGranter; + if (agentID == UUID.Zero) return; if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) return; ScenePresence presence = World.GetScenePresence(agentID); @@ -7423,16 +7422,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_host.AddScriptLPS(1); // our key in the object we are in - LLUUID invItemID=InventorySelf(); - if (invItemID == LLUUID.Zero) return; + UUID invItemID=InventorySelf(); + if (invItemID == UUID.Zero) return; // the object we are in - LLUUID objectID = m_host.ParentUUID; - if (objectID == LLUUID.Zero) return; + UUID objectID = m_host.ParentUUID; + if(objectID == UUID.Zero) return; // we need the permission first, to know which avatar we want to clear the camera for - LLUUID agentID = m_host.TaskInventory[invItemID].PermsGranter; - if (agentID == LLUUID.Zero) return; + UUID agentID = m_host.TaskInventory[invItemID].PermsGranter; + if (agentID == UUID.Zero) return; if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) return; ScenePresence presence = World.GetScenePresence(agentID); @@ -7531,9 +7530,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api param.Add(o.ToString()); } - LLVector3 position = m_host.AbsolutePosition; - LLVector3 velocity = m_host.Velocity; - LLQuaternion rotation = m_host.RotationOffset; + Vector3 position = m_host.AbsolutePosition; + Vector3 velocity = m_host.Velocity; + Quaternion rotation = m_host.RotationOffset; ScenePresence scenePresence = World.GetScenePresence(m_host.ObjectOwner); RegionInfo regionInfo = World.RegionInfo; @@ -7549,10 +7548,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api httpHeaders["X-SecondLife-Owner-Name"] = scenePresence == null ? string.Empty : scenePresence.ControllingClient.Name; httpHeaders["X-SecondLife-Owner-Key"] = m_host.ObjectOwner.ToString(); - LLUUID reqID = httpScriptMod. + UUID reqID = httpScriptMod. StartHttpRequest(m_localID, m_itemID, url, param, httpHeaders, body); - if (reqID != LLUUID.Zero) + if (reqID != UUID.Zero) return reqID.ToString(); else return null; @@ -7662,7 +7661,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api LSL_Types.list ret = new LSL_Types.list(); if (land != null) { - foreach (KeyValuePair d in land.getLandObjectOwners()) + foreach (KeyValuePair d in land.getLandObjectOwners()) { ret.Add(d.Key.ToString()); ret.Add(d.Value); @@ -7675,7 +7674,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Types.LSLInteger llGetObjectPrimCount(string object_id) { m_host.AddScriptLPS(1); - SceneObjectPart part = World.GetSceneObjectPart(new LLUUID(object_id)); + SceneObjectPart part = World.GetSceneObjectPart(new UUID(object_id)); if (part == null) { return 0; @@ -7781,8 +7780,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); LSL_Types.list ret = new LSL_Types.list(); - LLUUID key = new LLUUID(); - if (LLUUID.TryParse(id, out key)) + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) { ScenePresence av = World.GetScenePresence(key); @@ -7802,19 +7801,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api ret.Add(new LSL_Types.Vector3((double)av.AbsolutePosition.X, (double)av.AbsolutePosition.Y, (double)av.AbsolutePosition.Z)); break; case "4": - ret.Add(new LSL_Types.Quaternion((double)av.Rotation.x, (double)av.Rotation.y, (double)av.Rotation.z, (double)av.Rotation.w)); + ret.Add(new LSL_Types.Quaternion((double)av.Rotation.X, (double)av.Rotation.Y, (double)av.Rotation.Z, (double)av.Rotation.W)); break; case "5": - ret.Add(new LSL_Types.Vector3(av.Velocity.X,av.Velocity.Y,av.Velocity.Z)); + ret.Add(new LSL_Types.Vector3(av.Velocity.X, av.Velocity.Y, av.Velocity.Z)); break; case "6": ret.Add(id); break; case "7": - ret.Add(LLUUID.Zero.ToString()); + ret.Add(UUID.Zero.ToString()); break; case "8": - ret.Add(LLUUID.Zero.ToString()); + ret.Add(UUID.Zero.ToString()); break; } } @@ -7834,7 +7833,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api ret.Add(obj.Description); break; case "3": - ret.Add(new LSL_Types.Vector3(obj.AbsolutePosition.X,obj.AbsolutePosition.Y,obj.AbsolutePosition.Z)); + ret.Add(new LSL_Types.Vector3(obj.AbsolutePosition.X, obj.AbsolutePosition.Y, obj.AbsolutePosition.Z)); break; case "4": ret.Add(new LSL_Types.Quaternion(obj.RotationOffset.X, obj.RotationOffset.Y, obj.RotationOffset.Z, obj.RotationOffset.W)); @@ -7860,14 +7859,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } - internal LLUUID ScriptByName(string name) + internal UUID ScriptByName(string name) { foreach (TaskInventoryItem item in m_host.TaskInventory.Values) { if (item.Type == 10 && item.Name == name) return item.ItemID; } - return LLUUID.Zero; + return UUID.Zero; } internal void ShoutError(string msg) @@ -7893,10 +7892,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api throw new Exception("LSL Runtime Error: " + msg); } - public delegate void AssetRequestCallback(LLUUID assetID, AssetBase asset); - private void WithNotecard(LLUUID assetID, AssetRequestCallback cb) + public delegate void AssetRequestCallback(UUID assetID, AssetBase asset); + private void WithNotecard(UUID assetID, AssetRequestCallback cb) { - World.AssetCache.GetAsset(assetID, delegate(LLUUID i, AssetBase a) { cb(i, a); }, false); + World.AssetCache.GetAsset(assetID, delegate(UUID i, AssetBase a) { cb(i, a); }, false); } public string llGetNumberOfNotecardLines(string name) @@ -7907,7 +7906,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { if (item.Type == 7 && item.Name == name) { - LLUUID tid = AsyncCommands. + UUID tid = AsyncCommands. DataserverPlugin.RegisterRequest(m_localID, m_itemID, item.AssetID.ToString()); if (NotecardCache.IsCached(item.AssetID)) @@ -7918,7 +7917,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // ScriptSleep(100); return tid.ToString(); } - WithNotecard(item.AssetID, delegate (LLUUID id, AssetBase a) + WithNotecard(item.AssetID, delegate (UUID id, AssetBase a) { System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); @@ -7934,7 +7933,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } } // ScriptSleep(100); - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public string llGetNotecardLine(string name, int line) @@ -7945,7 +7944,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { if (item.Type == 7 && item.Name == name) { - LLUUID tid = AsyncCommands. + UUID tid = AsyncCommands. DataserverPlugin.RegisterRequest(m_localID, m_itemID, item.AssetID.ToString()); if (NotecardCache.IsCached(item.AssetID)) @@ -7956,7 +7955,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // ScriptSleep(100); return tid.ToString(); } - WithNotecard(item.AssetID, delegate (LLUUID id, AssetBase a) + WithNotecard(item.AssetID, delegate (UUID id, AssetBase a) { System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); @@ -7987,10 +7986,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public DateTime lastRef; } - private static Dictionary m_Notecards = - new Dictionary(); + private static Dictionary m_Notecards = + new Dictionary(); - public static void Cache(LLUUID assetID, string text) + public static void Cache(UUID assetID, string text) { CacheCheck(); @@ -8081,7 +8080,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return output.ToArray(); } - public static bool IsCached(LLUUID assetID) + public static bool IsCached(UUID assetID) { lock (m_Notecards) { @@ -8089,7 +8088,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } } - public static int GetLines(LLUUID assetID) + public static int GetLines(UUID assetID) { if (!IsCached(assetID)) return -1; @@ -8101,7 +8100,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } } - public static string GetLine(LLUUID assetID, int line) + public static string GetLine(UUID assetID, int line) { if (line < 0) return ""; @@ -8128,7 +8127,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public static void CacheCheck() { - foreach (LLUUID key in new List(m_Notecards.Keys)) + foreach (UUID key in new List(m_Notecards.Keys)) { Notecard nc = m_Notecards[key]; if (nc.lastRef.AddSeconds(30) < DateTime.Now) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 257b17bf35..0f598ea8e5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -26,8 +26,7 @@ */ using System; using System.Runtime.Remoting.Lifetime; -using Axiom.Math; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework.Console; using OpenSim.Region.Environment.Interfaces; @@ -46,9 +45,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api internal IScriptEngine m_ScriptEngine; internal SceneObjectPart m_host; internal uint m_localID; - internal LLUUID m_itemID; + internal UUID m_itemID; - public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID) + public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) { m_ScriptEngine = ScriptEngine; m_host = host; @@ -86,7 +85,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (x > 255 || x < 0 || y > 255 || y < 0) OSSLError("osTerrainSetHeight: Coordinate out of bounds"); - if (World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new LLVector3(x, y, 0))) + if (World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new Vector3(x, y, 0))) { World.Heightmap[x, y] = val; return 1; @@ -144,7 +143,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api World.SendGeneralAlert(msg); } - public void osSetRot(LLUUID target, Quaternion rotation) + public void osSetRot(UUID target, Quaternion rotation) { if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) { @@ -176,7 +175,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (dynamicID == String.Empty) { IDynamicTextureManager textureManager = World.RequestModuleInterface(); - LLUUID createdTexture = + UUID createdTexture = textureManager.AddDynamicTextureURL(World.RegionInfo.RegionID, m_host.UUID, contentType, url, extraParams, timer); return createdTexture.ToString(); @@ -186,7 +185,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api //TODO update existing dynamic textures } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, @@ -202,7 +201,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (dynamicID == String.Empty) { IDynamicTextureManager textureManager = World.RequestModuleInterface(); - LLUUID createdTexture = + UUID createdTexture = textureManager.AddDynamicTextureURL(World.RegionInfo.RegionID, m_host.UUID, contentType, url, extraParams, timer, true, (byte) alpha); return createdTexture.ToString(); @@ -212,7 +211,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api //TODO update existing dynamic textures } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, @@ -230,7 +229,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api IDynamicTextureManager textureManager = World.RequestModuleInterface(); if (textureManager != null) { - LLUUID createdTexture = + UUID createdTexture = textureManager.AddDynamicTextureData(World.RegionInfo.RegionID, m_host.UUID, contentType, data, extraParams, timer); return createdTexture.ToString(); @@ -241,7 +240,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api //TODO update existing dynamic textures } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, @@ -259,7 +258,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api IDynamicTextureManager textureManager = World.RequestModuleInterface(); if (textureManager != null) { - LLUUID createdTexture = + UUID createdTexture = textureManager.AddDynamicTextureData(World.RegionInfo.RegionID, m_host.UUID, contentType, data, extraParams, timer, true, (byte) alpha); return createdTexture.ToString(); @@ -270,7 +269,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api //TODO update existing dynamic textures } - return LLUUID.Zero.ToString(); + return UUID.Zero.ToString(); } public bool osConsoleCommand(string command) @@ -539,9 +538,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } m_host.AddScriptLPS(1); - LLUUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); + UUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); - if (landowner == LLUUID.Zero) + if (landowner == UUID.Zero) { return; } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Dataserver.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Dataserver.cs index 52d277ef7e..7300f10afc 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Dataserver.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Dataserver.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.ScriptEngine.Shared; using OpenSim.Region.ScriptEngine.Shared.Api; @@ -49,28 +49,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins private class DataserverRequest { public uint localID; - public LLUUID itemID; + public UUID itemID; - public LLUUID ID; + public UUID ID; public string handle; public DateTime startTime; } - public LLUUID RegisterRequest(uint localID, LLUUID itemID, + public UUID RegisterRequest(uint localID, UUID itemID, string identifier) { lock (DataserverRequests) { if (DataserverRequests.ContainsKey(identifier)) - return LLUUID.Zero; + return UUID.Zero; DataserverRequest ds = new DataserverRequest(); ds.localID = localID; ds.itemID = itemID; - ds.ID = LLUUID.Random(); + ds.ID = UUID.Random(); ds.handle = identifier; ds.startTime = DateTime.Now; @@ -101,7 +101,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins new DetectParams[0])); } - public void RemoveEvents(uint localID, LLUUID itemID) + public void RemoveEvents(uint localID, UUID itemID) { lock (DataserverRequests) { diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs index 11b45b1ea8..b353cba52f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs @@ -26,7 +26,7 @@ */ using System; -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Modules.Scripting.WorldComm; using OpenSim.Region.ScriptEngine.Shared; @@ -74,14 +74,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins } } - public Object[] GetSerializationData(LLUUID itemID) + public Object[] GetSerializationData(UUID itemID) { IWorldComm comms = m_CmdManager.m_ScriptEngine.World.RequestModuleInterface(); return comms.GetSerializationData(itemID); } - public void CreateFromData(uint localID, LLUUID itemID, LLUUID hostID, + public void CreateFromData(uint localID, UUID itemID, UUID hostID, Object[] data) { IWorldComm comms = m_CmdManager.m_ScriptEngine.World.RequestModuleInterface(); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs index eaf4bd053f..d1e39211f9 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Environment.Scenes; @@ -45,8 +45,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins m_CmdManager = CmdManager; } - public Dictionary> SenseEvents = - new Dictionary>(); + public Dictionary> SenseEvents = + new Dictionary>(); private Object SenseLock = new Object(); // @@ -55,12 +55,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins private class SenseRepeatClass { public uint localID; - public LLUUID itemID; + public UUID itemID; public double interval; public DateTime next; public string name; - public LLUUID keyID; + public UUID keyID; public int type; public double range; public double arc; @@ -70,8 +70,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins private List SenseRepeaters = new List(); private object SenseRepeatListLock = new object(); - public void SetSenseRepeatEvent(uint m_localID, LLUUID m_itemID, - string name, LLUUID keyID, int type, double range, + public void SetSenseRepeatEvent(uint m_localID, UUID m_itemID, + string name, UUID keyID, int type, double range, double arc, double sec, SceneObjectPart host) { // Always remove first, in case this is a re-set @@ -98,7 +98,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins } } - public void UnSetSenseRepeaterEvents(uint m_localID, LLUUID m_itemID) + public void UnSetSenseRepeaterEvents(uint m_localID, UUID m_itemID) { // Remove from timer lock (SenseRepeatListLock) @@ -138,8 +138,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins } // lock } - public void SenseOnce(uint m_localID, LLUUID m_itemID, - string name, LLUUID keyID, int type, + public void SenseOnce(uint m_localID, UUID m_itemID, + string name, UUID keyID, int type, double range, double arc, SceneObjectPart host) { // Add to timer @@ -156,11 +156,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins SensorSweep(ts); } - public LSL_Types.list GetSensorList(uint m_localID, LLUUID m_itemID) + public LSL_Types.list GetSensorList(uint m_localID, UUID m_itemID) { lock (SenseLock) { - Dictionary Obj = null; + Dictionary Obj = null; if (!SenseEvents.TryGetValue(m_localID, out Obj)) { return null; @@ -187,11 +187,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins return; } - LLVector3 sensorPos = SensePoint.AbsolutePosition; - LLVector3 regionPos = new LLVector3(m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocX * Constants.RegionSize, m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocY * Constants.RegionSize, 0); - LLVector3 fromRegionPos = sensorPos + regionPos; + Vector3 sensorPos = SensePoint.AbsolutePosition; + Vector3 regionPos = new Vector3(m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocX * Constants.RegionSize, m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocY * Constants.RegionSize, 0); + Vector3 fromRegionPos = sensorPos + regionPos; - LLQuaternion q = SensePoint.RotationOffset; + Quaternion q = SensePoint.RotationOffset; LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r); double mag_fwd = LSL_Types.Vector3.Mag(forward_dir); @@ -203,7 +203,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins foreach (EntityBase ent in m_CmdManager.m_ScriptEngine.World.Entities.Values) { - LLVector3 toRegionPos = ent.AbsolutePosition + regionPos; + Vector3 toRegionPos = ent.AbsolutePosition + regionPos; double dis = Math.Abs((double)Util.GetDistanceTo(toRegionPos, fromRegionPos)); if (dis <= ts.range) { @@ -239,7 +239,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins double ang_obj = 0; try { - LLVector3 diff = toRegionPos - fromRegionPos; + Vector3 diff = toRegionPos - fromRegionPos; LSL_Types.Vector3 obj_dir = new LSL_Types.Vector3(diff.X, diff.Y, diff.Z); double dot = LSL_Types.Vector3.Dot(forward_dir, obj_dir); double mag_obj = LSL_Types.Vector3.Mag(obj_dir); @@ -252,7 +252,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins if (ang_obj > ts.arc) keep = false; } - if (keep && (ts.keyID != LLUUID.Zero) && (ts.keyID != ent.UUID)) + if (keep && (ts.keyID != UUID.Zero) && (ts.keyID != ent.UUID)) { keep = false; } @@ -292,10 +292,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins // Create object if it doesn't exist if (SenseEvents.ContainsKey(ts.localID) == false) { - SenseEvents.Add(ts.localID, new Dictionary()); + SenseEvents.Add(ts.localID, new Dictionary()); } // clear if previous traces exist - Dictionary Obj; + Dictionary Obj; SenseEvents.TryGetValue(ts.localID, out Obj); if (Obj.ContainsKey(ts.itemID) == true) Obj.Remove(ts.itemID); @@ -320,7 +320,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins for (idx = 0; idx < SensedObjects.Length; idx++) { detect[idx] = new DetectParams(); - detect[idx].Key=(LLUUID)(SensedObjects.Data[idx]); + detect[idx].Key=(UUID)(SensedObjects.Data[idx]); detect[idx].Populate(m_CmdManager.m_ScriptEngine.World); } @@ -333,7 +333,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins } } - public Object[] GetSerializationData(LLUUID itemID) + public Object[] GetSerializationData(UUID itemID) { List data = new List(); @@ -352,7 +352,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins return data.ToArray(); } - public void CreateFromData(uint localID, LLUUID itemID, LLUUID objectID, + public void CreateFromData(uint localID, UUID itemID, UUID objectID, Object[] data) { SceneObjectPart part = @@ -373,7 +373,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins ts.interval = (double)data[idx]; ts.name = (string)data[idx+1]; - ts.keyID = (LLUUID)data[idx+2]; + ts.keyID = (UUID)data[idx+2]; ts.type = (int)data[idx+3]; ts.range = (double)data[idx+4]; ts.arc = (double)data[idx+5]; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs index 36e992bd75..ec7cd35a19 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Region.ScriptEngine.Shared.Api; namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins @@ -48,7 +48,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins private class TimerClass { public uint localID; - public LLUUID itemID; + public UUID itemID; //public double interval; public long interval; //public DateTime next; @@ -58,7 +58,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins private List Timers = new List(); private object TimerListLock = new object(); - public void SetTimerEvent(uint m_localID, LLUUID m_itemID, double sec) + public void SetTimerEvent(uint m_localID, UUID m_itemID, double sec) { // Always remove first, in case this is a re-set UnSetTimerEvents(m_localID, m_itemID); @@ -81,7 +81,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins } } - public void UnSetTimerEvents(uint m_localID, LLUUID m_itemID) + public void UnSetTimerEvents(uint m_localID, UUID m_itemID) { // Remove from timer lock (TimerListLock) @@ -122,7 +122,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins } } - public Object[] GetSerializationData(LLUUID itemID) + public Object[] GetSerializationData(UUID itemID) { List data = new List(); @@ -140,7 +140,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins return data.ToArray(); } - public void CreateFromData(uint localID, LLUUID itemID, LLUUID objectID, + public void CreateFromData(uint localID, UUID itemID, UUID objectID, Object[] data) { int idx = 0; diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSL2CSConverter.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSL2CSConverter.cs index 45f92e3fad..57efb2ed49 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSL2CSConverter.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSL2CSConverter.cs @@ -118,7 +118,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools //System.Console.WriteLine("SCRIPT:" + checkscript); // checks for alpha.alpha way of referring to objects in C# - // ignores alpha.x alpha.y, alpha.z for refering to vector components + // ignores alpha.X alpha.Y, alpha.Z for refering to vector components Match SecurityM; // BROKEN: this check is very wrong. It block's any url in strings. diff --git a/OpenSim/Region/ScriptEngine/Shared/Helpers.cs b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs index d3222e728a..8599e0638c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Helpers.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs @@ -31,7 +31,7 @@ using System.Threading; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment; using OpenSim.Region.Environment.Scenes; @@ -70,24 +70,24 @@ namespace OpenSim.Region.ScriptEngine.Shared { public DetectParams() { - Key = LLUUID.Zero; + Key = UUID.Zero; OffsetPos = new LSL_Types.Vector3(); LinkNum = 0; - Group = LLUUID.Zero; + Group = UUID.Zero; Name = String.Empty; - Owner = LLUUID.Zero; + Owner = UUID.Zero; Position = new LSL_Types.Vector3(); Rotation = new LSL_Types.Quaternion(); Type = 0; Velocity = new LSL_Types.Vector3(); } - public LLUUID Key; + public UUID Key; public LSL_Types.Vector3 OffsetPos; public int LinkNum; - public LLUUID Group; + public UUID Group; public string Name; - public LLUUID Owner; + public UUID Owner; public LSL_Types.Vector3 Position; public LSL_Types.Quaternion Rotation; public int Type; @@ -109,17 +109,17 @@ namespace OpenSim.Region.ScriptEngine.Shared presence.AbsolutePosition.Y, presence.AbsolutePosition.Z); Rotation = new LSL_Types.Quaternion( - presence.Rotation.x, - presence.Rotation.y, - presence.Rotation.z, - presence.Rotation.w); + presence.Rotation.X, + presence.Rotation.Y, + presence.Rotation.Z, + presence.Rotation.W); Velocity = new LSL_Types.Vector3( presence.Velocity.X, presence.Velocity.Y, presence.Velocity.Z); Type = 0x01; // Avatar - if (presence.Velocity != LLVector3.Zero) + if (presence.Velocity != Vector3.Zero) Type |= 0x02; // Active Group = presence.ControllingClient.ActiveGroupId; @@ -134,7 +134,7 @@ namespace OpenSim.Region.ScriptEngine.Shared Group = part.GroupID; Name = part.Name; Owner = part.OwnerID; - if (part.Velocity == LLVector3.Zero) + if (part.Velocity == Vector3.Zero) Type = 0x04; // Passive else Type = 0x02; // Passive @@ -152,7 +152,7 @@ namespace OpenSim.Region.ScriptEngine.Shared part.AbsolutePosition.Y, part.AbsolutePosition.Z); - LLQuaternion wr = part.GetWorldRotation(); + Quaternion wr = part.GetWorldRotation(); Rotation = new LSL_Types.Quaternion(wr.X, wr.Y, wr.Z, wr.W); Velocity = new LSL_Types.Vector3(part.Velocity.X, diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index e3dd9e9f71..d35bfa8056 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs @@ -34,7 +34,7 @@ using System.Security.Policy; using System.Reflection; using System.Globalization; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using Amib.Threading; @@ -56,12 +56,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance private IScriptWorkItem m_CurrentResult=null; private Queue m_EventQueue = new Queue(32); private bool m_RunEvents = false; - private LLUUID m_ItemID; + private UUID m_ItemID; private uint m_LocalID; - private LLUUID m_ObjectID; - private LLUUID m_AssetID; + private UUID m_ObjectID; + private UUID m_AssetID; private IScript m_Script; - private LLUUID m_AppDomain; + private UUID m_AppDomain; private DetectParams[] m_DetectParams; private bool m_TimerQueued; private DateTime m_EventStart; @@ -98,7 +98,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance get { return m_Engine; } } - public LLUUID AppDomain + public UUID AppDomain { get { return m_AppDomain; } set { m_AppDomain = value; } @@ -114,12 +114,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance get { return m_ScriptName; } } - public LLUUID ItemID + public UUID ItemID { get { return m_ItemID; } } - public LLUUID ObjectID + public UUID ObjectID { get { return m_ObjectID; } } @@ -129,7 +129,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance get { return m_LocalID; } } - public LLUUID AssetID + public UUID AssetID { get { return m_AssetID; } } @@ -152,7 +152,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance } public ScriptInstance(IScriptEngine engine, uint localID, - LLUUID objectID, LLUUID itemID, LLUUID assetID, string assembly, + UUID objectID, UUID itemID, UUID assetID, string assembly, AppDomain dom, string primName, string scriptName, int startParam, bool postOnRez, StateSource stateSource, int maxScriptQueue) @@ -520,7 +520,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance string text = "Runtime error:\n" + e.InnerException.ToString(); if (text.Length > 1000) text = text.Substring(0, 1000); - m_Engine.World.SimChat(Helpers.StringToField(text), + m_Engine.World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.DebugChannel, 2147483647, part.AbsolutePosition, part.Name, part.UUID, false); @@ -581,7 +581,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance Stop(0); SceneObjectPart part=m_Engine.World.GetSceneObjectPart(m_LocalID); part.GetInventoryItem(m_ItemID).PermsMask = 0; - part.GetInventoryItem(m_ItemID).PermsGranter = LLUUID.Zero; + part.GetInventoryItem(m_ItemID).PermsGranter = UUID.Zero; AsyncCommandManager async = (AsyncCommandManager)m_Engine.AsyncCommands; async.RemoveScript(m_LocalID, m_ItemID); m_EventQueue.Clear(); @@ -602,7 +602,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance m_Script.ResetVars(); SceneObjectPart part=m_Engine.World.GetSceneObjectPart(m_LocalID); part.GetInventoryItem(m_ItemID).PermsMask = 0; - part.GetInventoryItem(m_ItemID).PermsGranter = LLUUID.Zero; + part.GetInventoryItem(m_ItemID).PermsGranter = UUID.Zero; AsyncCommandManager async = (AsyncCommandManager)m_Engine.AsyncCommands; async.RemoveScript(m_LocalID, m_ItemID); if (m_CurrentEvent != "state_entry") @@ -630,10 +630,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance return m_DetectParams[idx]; } - public LLUUID GetDetectID(int idx) + public UUID GetDetectID(int idx) { if (idx < 0 || idx >= m_DetectParams.Length) - return LLUUID.Zero; + return UUID.Zero; return m_DetectParams[idx].Key; } diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs index ba003c51c4..bc9b1742d7 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs @@ -34,7 +34,7 @@ using System.Security.Policy; using System.Reflection; using System.Globalization; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using Amib.Threading; @@ -264,9 +264,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance new LSL_Types.Vector3(vect); int d_linkNum=0; - LLUUID d_group = LLUUID.Zero; + UUID d_group = UUID.Zero; string d_name = String.Empty; - LLUUID d_owner = LLUUID.Zero; + UUID d_owner = UUID.Zero; LSL_Types.Vector3 d_position = new LSL_Types.Vector3(); LSL_Types.Quaternion d_rotation = @@ -285,14 +285,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance tmp = det.Attributes.GetNamedItem( "group").Value; - LLUUID.TryParse(tmp, out d_group); + UUID.TryParse(tmp, out d_group); d_name = det.Attributes.GetNamedItem( "name").Value; tmp = det.Attributes.GetNamedItem( "owner").Value; - LLUUID.TryParse(tmp, out d_owner); + UUID.TryParse(tmp, out d_owner); tmp = det.Attributes.GetNamedItem( "position").Value; @@ -318,8 +318,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance { } - LLUUID uuid = new LLUUID(); - LLUUID.TryParse(det.InnerText, + UUID uuid = new UUID(); + UUID.TryParse(det.InnerText, out uuid); DetectParams d = new DetectParams(); @@ -427,10 +427,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance if (itemType == "list") return ReadList(tag); - if (itemType == "libsecondlife.LLUUID") + if (itemType == "libsecondlife.UUID") { - LLUUID val = new LLUUID(); - LLUUID.TryParse(tag.InnerText, out val); + UUID val = new UUID(); + UUID.TryParse(tag.InnerText, out val); return val; } diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 4713283e75..3820daed93 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs @@ -123,7 +123,7 @@ namespace OpenSim.Region.ScriptEngine.Shared Vector3 vector = (Vector3)o; - return (x == vector.x && x == vector.x && z == vector.z); + return (x == vector.x && y == vector.y && z == vector.z); } public static Vector3 operator -(Vector3 vector) diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs index d431286289..22abd79e70 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs @@ -28,7 +28,7 @@ using System; using System.Collections; using System.Collections.Generic; -using libsecondlife; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney; using OpenSim.Region.Interfaces; @@ -36,7 +36,6 @@ using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.ScriptEngine.Shared; using OpenSim.Region.ScriptEngine.Interfaces; -using Axiom.Math; namespace OpenSim.Region.ScriptEngine.XEngine { @@ -68,7 +67,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine } } - private void HandleObjectPaid(LLUUID objectID, LLUUID agentID, + private void HandleObjectPaid(UUID objectID, UUID agentID, int amount) { SceneObjectPart part = @@ -80,7 +79,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine } } - public void touch_start(uint localID, uint originalID, LLVector3 offsetPos, + public void touch_start(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient) { // Add to queue for all scripts in ObjectID object @@ -108,7 +107,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine det)); } - public void touch(uint localID, uint originalID, LLVector3 offsetPos, + public void touch(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient) { // Add to queue for all scripts in ObjectID object @@ -177,7 +176,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine // state_entry: not processed here // state_exit: not processed here - public void money(uint localID, LLUUID agentID, int amount) + public void money(uint localID, UUID agentID, int amount) { myScriptEngine.PostObjectEvent(localID, new EventParams( "money", new object[] { @@ -242,7 +241,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine det.ToArray())); } - public void land_collision_start(uint localID, LLUUID itemID) + public void land_collision_start(uint localID, UUID itemID) { myScriptEngine.PostObjectEvent(localID, new EventParams( "land_collision_start", @@ -250,7 +249,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine new DetectParams[0])); } - public void land_collision(uint localID, LLUUID itemID) + public void land_collision(uint localID, UUID itemID) { myScriptEngine.PostObjectEvent(localID, new EventParams( "land_collision", @@ -258,7 +257,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine new DetectParams[0])); } - public void land_collision_end(uint localID, LLUUID itemID) + public void land_collision_end(uint localID, UUID itemID) { myScriptEngine.PostObjectEvent(localID, new EventParams( "land_collision_end", @@ -269,7 +268,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine // timer: not handled here // listen: not handled here - public void control(uint localID, LLUUID itemID, LLUUID agentID, uint held, uint change) + public void control(uint localID, UUID itemID, UUID agentID, uint held, uint change) { myScriptEngine.PostObjectEvent(localID, new EventParams( "control",new object[] { @@ -279,7 +278,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine new DetectParams[0])); } - public void email(uint localID, LLUUID itemID, string timeSent, + public void email(uint localID, UUID itemID, string timeSent, string address, string subject, string message, int numLeft) { myScriptEngine.PostObjectEvent(localID, new EventParams( @@ -292,8 +291,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine new DetectParams[0])); } - public void at_target(uint localID, uint handle, LLVector3 targetpos, - LLVector3 atpos) + public void at_target(uint localID, uint handle, Vector3 targetpos, + Vector3 atpos) { myScriptEngine.PostObjectEvent(localID, new EventParams( "at_target", new object[] { @@ -310,14 +309,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine new DetectParams[0])); } - public void at_rot_target(uint localID, LLUUID itemID) + public void at_rot_target(uint localID, UUID itemID) { myScriptEngine.PostObjectEvent(localID, new EventParams( "at_rot_target",new object[0], new DetectParams[0])); } - public void not_at_rot_target(uint localID, LLUUID itemID) + public void not_at_rot_target(uint localID, UUID itemID) { myScriptEngine.PostObjectEvent(localID, new EventParams( "not_at_rot_target",new object[0], @@ -326,7 +325,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine // run_time_permissions: not handled here - public void attach(uint localID, LLUUID itemID, LLUUID avatar) + public void attach(uint localID, UUID itemID, UUID avatar) { myScriptEngine.PostObjectEvent(localID, new EventParams( "attach",new object[] { @@ -337,14 +336,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine // dataserver: not handled here // link_message: not handled here - public void moving_start(uint localID, LLUUID itemID) + public void moving_start(uint localID, UUID itemID) { myScriptEngine.PostObjectEvent(localID, new EventParams( "moving_start",new object[0], new DetectParams[0])); } - public void moving_end(uint localID, LLUUID itemID) + public void moving_end(uint localID, UUID itemID) { myScriptEngine.PostObjectEvent(localID, new EventParams( "moving_end",new object[0], diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 8ad81105cf..485531d722 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -34,7 +34,7 @@ using System.Security.Policy; using System.Reflection; using System.Globalization; using System.Xml; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using Amib.Threading; @@ -76,28 +76,28 @@ namespace OpenSim.Region.ScriptEngine.XEngine // Maps the local id to the script inventory items in it - private Dictionary > m_PrimObjects = - new Dictionary >(); + private Dictionary > m_PrimObjects = + new Dictionary >(); - // Maps the LLUUID above to the script instance + // Maps the UUID above to the script instance - private Dictionary m_Scripts = - new Dictionary(); + private Dictionary m_Scripts = + new Dictionary(); // Maps the asset ID to the assembly - private Dictionary m_Assemblies = - new Dictionary(); + private Dictionary m_Assemblies = + new Dictionary(); // This will list AppDomains by script asset - private Dictionary m_AppDomains = - new Dictionary(); + private Dictionary m_AppDomains = + new Dictionary(); // List the scripts running in each appdomain - private Dictionary > m_DomainScripts = - new Dictionary >(); + private Dictionary > m_DomainScripts = + new Dictionary >(); private Queue m_CompileQueue = new Queue(100); IWorkItemResult m_CurrentCompile = null; @@ -125,7 +125,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine // private struct RezScriptParms // { // uint LocalID; - // LLUUID ItemID; + // UUID ItemID; // string Script; // } @@ -314,7 +314,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine get { return false; } } - public void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez) + public void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez) { Object[] parms = new Object[]{localID, itemID, script, startParam, postOnRez}; @@ -395,7 +395,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine { Object[] p = (Object[])parm; uint localID = (uint)p[0]; - LLUUID itemID = (LLUUID)p[1]; + UUID itemID = (UUID)p[1]; string script =(string)p[2]; int startParam = (int)p[3]; bool postOnRez = (bool)p[4]; @@ -411,7 +411,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine if (item == null) return false; - LLUUID assetID = item.AssetID; + UUID assetID = item.AssetID; // m_log.DebugFormat("[XEngine] Compiling script {0} ({1})", // item.Name, itemID.ToString()); @@ -430,7 +430,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine string text = "Error compiling script:\r\n" + e.Message.ToString(); if (text.Length > 1000) text = text.Substring(0, 1000); - World.SimChat(Helpers.StringToField(text), + World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.DebugChannel, 2147483647, part.AbsolutePosition, part.Name, part.UUID, false); @@ -455,7 +455,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine if ((!m_Scripts.ContainsKey(itemID)) || (m_Scripts[itemID].AssetID != assetID)) { - LLUUID appDomain = assetID; + UUID appDomain = assetID; if (part.ParentGroup.RootPart.IsAttachment) appDomain = part.ParentGroup.RootPart.UUID; @@ -480,7 +480,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine m_AppDomains[appDomain].AssemblyResolve += new ResolveEventHandler( AssemblyResolver.OnAssemblyResolve); - m_DomainScripts[appDomain] = new List(); + m_DomainScripts[appDomain] = new List(); } catch (Exception e) { @@ -507,7 +507,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine } if (!m_PrimObjects.ContainsKey(localID)) - m_PrimObjects[localID] = new List(); + m_PrimObjects[localID] = new List(); if (!m_PrimObjects[localID].Contains(itemID)) m_PrimObjects[localID].Add(itemID); @@ -518,7 +518,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine return true; } - public void OnRemoveScript(uint localID, LLUUID itemID) + public void OnRemoveScript(uint localID, UUID itemID) { lock (m_Scripts) { @@ -569,24 +569,24 @@ namespace OpenSim.Region.ScriptEngine.XEngine } } - public void OnScriptReset(uint localID, LLUUID itemID) + public void OnScriptReset(uint localID, UUID itemID) { ResetScript(itemID); } - public void OnStartScript(uint localID, LLUUID itemID) + public void OnStartScript(uint localID, UUID itemID) { StartScript(itemID); } - public void OnStopScript(uint localID, LLUUID itemID) + public void OnStopScript(uint localID, UUID itemID) { StopScript(itemID); } private void CleanAssemblies() { - List assetIDList = new List(m_Assemblies.Keys); + List assetIDList = new List(m_Assemblies.Keys); foreach (IScriptInstance i in m_Scripts.Values) { @@ -594,7 +594,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine assetIDList.Remove(i.AssetID); } - foreach (LLUUID assetID in assetIDList) + foreach (UUID assetID in assetIDList) { // m_log.DebugFormat("[XEngine] Removing unreferenced assembly {0}", m_Assemblies[assetID]); try @@ -615,7 +615,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine } } - private void UnloadAppDomain(LLUUID id) + private void UnloadAppDomain(UUID id) { if (m_AppDomains.ContainsKey(id)) { @@ -681,7 +681,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine if (!m_PrimObjects.ContainsKey(localID)) return false; - foreach (LLUUID itemID in m_PrimObjects[localID]) + foreach (UUID itemID in m_PrimObjects[localID]) { if (m_Scripts.ContainsKey(itemID)) { @@ -699,7 +699,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine // // Post an event to a single script // - public bool PostScriptEvent(LLUUID itemID, EventParams p) + public bool PostScriptEvent(UUID itemID, EventParams p) { if (m_Scripts.ContainsKey(itemID)) { @@ -737,7 +737,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine return null; } - private IScriptInstance GetInstance(LLUUID itemID) + private IScriptInstance GetInstance(UUID itemID) { IScriptInstance instance; lock (m_Scripts) @@ -749,7 +749,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine return instance; } - public void SetScriptState(LLUUID itemID, bool running) + public void SetScriptState(UUID itemID, bool running) { IScriptInstance instance = GetInstance(itemID); if (instance != null) @@ -761,7 +761,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine } } - public bool GetScriptState(LLUUID itemID) + public bool GetScriptState(UUID itemID) { IScriptInstance instance = GetInstance(itemID); if (instance != null) @@ -769,35 +769,35 @@ namespace OpenSim.Region.ScriptEngine.XEngine return false; } - public void ApiResetScript(LLUUID itemID) + public void ApiResetScript(UUID itemID) { IScriptInstance instance = GetInstance(itemID); if (instance != null) instance.ApiResetScript(); } - public void ResetScript(LLUUID itemID) + public void ResetScript(UUID itemID) { IScriptInstance instance = GetInstance(itemID); if (instance != null) instance.ResetScript(); } - public void StartScript(LLUUID itemID) + public void StartScript(UUID itemID) { IScriptInstance instance = GetInstance(itemID); if (instance != null) instance.Start(); } - public void StopScript(LLUUID itemID) + public void StopScript(UUID itemID) { IScriptInstance instance = GetInstance(itemID); if (instance != null) instance.Stop(0); } - public DetectParams GetDetectParams(LLUUID itemID, int idx) + public DetectParams GetDetectParams(UUID itemID, int idx) { IScriptInstance instance = GetInstance(itemID); if (instance != null) @@ -805,22 +805,22 @@ namespace OpenSim.Region.ScriptEngine.XEngine return null; } - public LLUUID GetDetectID(LLUUID itemID, int idx) + public UUID GetDetectID(UUID itemID, int idx) { IScriptInstance instance = GetInstance(itemID); if (instance != null) return instance.GetDetectID(idx); - return LLUUID.Zero; + return UUID.Zero; } - public void SetState(LLUUID itemID, string newState) + public void SetState(UUID itemID, string newState) { IScriptInstance instance = GetInstance(itemID); if (instance == null) return; instance.SetState(newState); } - public string GetState(LLUUID itemID) + public string GetState(UUID itemID) { IScriptInstance instance = GetInstance(itemID); if (instance == null) @@ -828,7 +828,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine return instance.State; } - public int GetStartParameter(LLUUID itemID) + public int GetStartParameter(UUID itemID) { IScriptInstance instance = GetInstance(itemID); if (instance == null) @@ -836,7 +836,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine return instance.StartParam; } - public bool GetScriptRunning(LLUUID objectID, LLUUID itemID) + public bool GetScriptRunning(UUID objectID, UUID itemID) { return GetScriptState(itemID); } diff --git a/OpenSim/TestSuite/BotManager.cs b/OpenSim/TestSuite/BotManager.cs index 29864ab566..7039b0ff66 100644 --- a/OpenSim/TestSuite/BotManager.cs +++ b/OpenSim/TestSuite/BotManager.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -198,7 +198,7 @@ namespace OpenSim.TestSuite break; case "addbots": int newbots; - Helpers.TryParse(cmdparams[0], out newbots); + Int32.TryParse(cmdparams[0], out newbots); if (newbots > 0) addbots(newbots); diff --git a/OpenSim/TestSuite/PhysicsBot.cs b/OpenSim/TestSuite/PhysicsBot.cs index 0e02aef573..c04e19eca3 100644 --- a/OpenSim/TestSuite/PhysicsBot.cs +++ b/OpenSim/TestSuite/PhysicsBot.cs @@ -29,7 +29,7 @@ using System; using System.IO; using System.Threading; using System.Timers; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Framework.Console; @@ -55,7 +55,7 @@ namespace OpenSim.TestSuite protected Random somthing = new Random(Environment.TickCount);// We do stuff randomly here //New instance of a SecondLife client - public SecondLife client = new SecondLife(); + public GridClient client = new GridClient(); protected string[] talkarray; /// @@ -87,8 +87,8 @@ namespace OpenSim.TestSuite client.Self.Movement.AlwaysRun = false; } - // TODO: unused: LLVector3 pos = client.Self.SimPosition; - LLVector3 newpos = new LLVector3(somthing.Next(255), somthing.Next(255), somthing.Next(255)); + // TODO: unused: Vector3 pos = client.Self.SimPosition; + Vector3 newpos = new Vector3(somthing.Next(255), somthing.Next(255), somthing.Next(255)); client.Self.Movement.TurnToward(newpos); for (int i = 0; i < 2000; i++) diff --git a/OpenSim/Tests/Common/VectorToleranceConstraint.cs b/OpenSim/Tests/Common/VectorToleranceConstraint.cs index 249fe09150..ce2683c6a6 100644 --- a/OpenSim/Tests/Common/VectorToleranceConstraint.cs +++ b/OpenSim/Tests/Common/VectorToleranceConstraint.cs @@ -26,17 +26,17 @@ */ using System; -using libsecondlife; +using OpenMetaverse; using NUnit.Framework; namespace OpenSim.Tests.Common { public class VectorToleranceConstraint : ANumericalToleranceConstraint { - private LLVector3 _baseValue; - private LLVector3 _valueToBeTested; + private Vector3 _baseValue; + private Vector3 _valueToBeTested; - public VectorToleranceConstraint(LLVector3 baseValue, double tolerance) : base(tolerance) + public VectorToleranceConstraint(Vector3 baseValue, double tolerance) : base(tolerance) { _baseValue = baseValue; } @@ -54,12 +54,12 @@ namespace OpenSim.Tests.Common { throw new ArgumentException("Constraint cannot be used upon null values."); } - if (valueToBeTested.GetType() != typeof (LLVector3)) + if (valueToBeTested.GetType() != typeof (Vector3)) { throw new ArgumentException("Constraint cannot be used upon non vector values."); } - _valueToBeTested = (LLVector3) valueToBeTested; + _valueToBeTested = (Vector3) valueToBeTested; return (IsWithinDoubleConstraint(_valueToBeTested.X, _baseValue.X) && IsWithinDoubleConstraint(_valueToBeTested.Y, _baseValue.Y) && diff --git a/OpenSim/Tests/Framework/UtilTest.cs b/OpenSim/Tests/Framework/UtilTest.cs index 121ee932f2..a973ed2981 100644 --- a/OpenSim/Tests/Framework/UtilTest.cs +++ b/OpenSim/Tests/Framework/UtilTest.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using libsecondlife; +using OpenMetaverse; using NUnit.Framework; using NUnit.Framework.SyntaxHelpers; using OpenSim.Tests.Common; @@ -38,15 +38,15 @@ namespace OpenSim.Framework.Tests [Test] public void VectorOperationTests() { - LLVector3 v1, v2; + Vector3 v1, v2; double expectedDistance; double expectedMagnitude; double lowPrecisionTolerance = 0.001; //Lets test a simple case of <0,0,0> and <5,5,5> { - v1 = new LLVector3(0, 0, 0); - v2 = new LLVector3(5, 5, 5); + v1 = new Vector3(0, 0, 0); + v2 = new Vector3(5, 5, 5); expectedDistance = 8.66; Assert.That(Util.GetDistanceTo(v1, v2), new DoubleToleranceConstraint(expectedDistance, lowPrecisionTolerance), @@ -65,9 +65,9 @@ namespace OpenSim.Framework.Tests Assert.That(causesArgumentException, Is.True, "Getting magnitude of null vector did not cause argument exception."); - LLVector3 expectedNormalizedVector = new LLVector3(.577f, .577f, .577f); + Vector3 expectedNormalizedVector = new Vector3(.577f, .577f, .577f); double expectedNormalizedMagnitude = 1; - LLVector3 normalizedVector = Util.GetNormalizedVector(v2); + Vector3 normalizedVector = Util.GetNormalizedVector(v2); Assert.That(normalizedVector, new VectorToleranceConstraint(expectedNormalizedVector, lowPrecisionTolerance), "Normalized vector generated from vector was not what was expected."); @@ -78,8 +78,8 @@ namespace OpenSim.Framework.Tests //Lets test a simple case of <0,0,0> and <0,0,0> { - v1 = new LLVector3(0, 0, 0); - v2 = new LLVector3(0, 0, 0); + v1 = new Vector3(0, 0, 0); + v2 = new Vector3(0, 0, 0); expectedDistance = 0; Assert.That(Util.GetDistanceTo(v1, v2), new DoubleToleranceConstraint(expectedDistance, lowPrecisionTolerance), @@ -106,8 +106,8 @@ namespace OpenSim.Framework.Tests //Lets test a simple case of <0,0,0> and <-5,-5,-5> { - v1 = new LLVector3(0, 0, 0); - v2 = new LLVector3(-5, -5, -5); + v1 = new Vector3(0, 0, 0); + v2 = new Vector3(-5, -5, -5); expectedDistance = 8.66; Assert.That(Util.GetDistanceTo(v1, v2), new DoubleToleranceConstraint(expectedDistance, lowPrecisionTolerance), @@ -126,9 +126,9 @@ namespace OpenSim.Framework.Tests Assert.That(causesArgumentException, Is.True, "Getting magnitude of null vector did not cause argument exception."); - LLVector3 expectedNormalizedVector = new LLVector3(-.577f, -.577f, -.577f); + Vector3 expectedNormalizedVector = new Vector3(-.577f, -.577f, -.577f); double expectedNormalizedMagnitude = 1; - LLVector3 normalizedVector = Util.GetNormalizedVector(v2); + Vector3 normalizedVector = Util.GetNormalizedVector(v2); Assert.That(normalizedVector, new VectorToleranceConstraint(expectedNormalizedVector, lowPrecisionTolerance), "Normalized vector generated from vector was not what was expected."); diff --git a/OpenSim/Tools/Export/OpenSimExport.cs b/OpenSim/Tools/Export/OpenSimExport.cs index f469d91046..68d47162b6 100644 --- a/OpenSim/Tools/Export/OpenSimExport.cs +++ b/OpenSim/Tools/Export/OpenSimExport.cs @@ -63,7 +63,7 @@ namespace OpenSimExport XmlConfigurator.Configure(); OpenSimExport export = new OpenSimExport(InitConfig(args)); - RegionInfo reg = new RegionInfo("Sara Jane", "Regions/1000-1000.xml",false); + RegionInfo reg = new RegionInfo("Sara Jane", "Regions/1000-1000.Xml",false); Console.WriteLine("This application does nothing useful yet: " + reg.RegionID); foreach (SceneObjectGroup group in export.sman.DataStore.LoadObjects(reg.RegionID)) @@ -109,4 +109,4 @@ namespace OpenSimExport return config; } } -} \ No newline at end of file +} diff --git a/OpenSim/Tools/pCampBot/BotManager.cs b/OpenSim/Tools/pCampBot/BotManager.cs index 4bdc49413a..8eb00c736e 100644 --- a/OpenSim/Tools/pCampBot/BotManager.cs +++ b/OpenSim/Tools/pCampBot/BotManager.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Reflection; using System.Threading; -using libsecondlife; +using OpenMetaverse; using log4net; using Nini.Config; using OpenSim.Framework; @@ -197,7 +197,7 @@ namespace pCampBot break; case "addbots": int newbots; - Helpers.TryParse(cmdparams[0], out newbots); + Int32.TryParse(cmdparams[0], out newbots); if (newbots > 0) addbots(newbots); diff --git a/OpenSim/Tools/pCampBot/PhysicsBot.cs b/OpenSim/Tools/pCampBot/PhysicsBot.cs index 49c3c780fa..84987b239d 100644 --- a/OpenSim/Tools/pCampBot/PhysicsBot.cs +++ b/OpenSim/Tools/pCampBot/PhysicsBot.cs @@ -29,7 +29,7 @@ using System; using System.IO; using System.Threading; using System.Timers; -using libsecondlife; +using OpenMetaverse; using Nini.Config; using OpenSim.Framework; using OpenSim.Framework.Console; @@ -55,7 +55,7 @@ namespace pCampBot protected Random somthing = new Random(Environment.TickCount);// We do stuff randomly here //New instance of a SecondLife client - public SecondLife client = new SecondLife(); + public GridClient client = new GridClient(); protected string[] talkarray; /// @@ -87,8 +87,8 @@ namespace pCampBot client.Self.Movement.AlwaysRun = false; } - // TODO: unused: LLVector3 pos = client.Self.SimPosition; - LLVector3 newpos = new LLVector3(somthing.Next(255), somthing.Next(255), somthing.Next(255)); + // TODO: unused: Vector3 pos = client.Self.SimPosition; + Vector3 newpos = new Vector3(somthing.Next(255), somthing.Next(255), somthing.Next(255)); client.Self.Movement.TurnToward(newpos); for (int i = 0; i < 2000; i++) diff --git a/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs b/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs index a724a23a72..396ad5944a 100644 --- a/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs +++ b/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs @@ -32,8 +32,8 @@ using System.IO; using System.Net; using System.Reflection; using System.Threading; -using libsecondlife; -using libsecondlife.Packets; +using OpenMetaverse; +using OpenMetaverse.Packets; using log4net; using Mono.Addins; using Nwc.XmlRpc; @@ -600,7 +600,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer { if (createID_flag) { - dst_region.RegionID = LLUUID.Random(); + dst_region.RegionID = UUID.Random(); } // change RegionInfo (memory only) @@ -611,7 +611,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer simMain.CreateRegion(dst_region, false); } - private void RemoveRegion(LLUUID regionID, int port) + private void RemoveRegion(UUID regionID, int port) { Scene killScene; if (sceneManager.TryGetScene(regionID, out killScene)) @@ -834,9 +834,9 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer // this callback receives physic scene updates from the other sub-scenes (in split mode) int regionPort = (int) request.Params[0]; - LLUUID scenePresenceID = new LLUUID((byte[]) request.Params[1], 0); - LLVector3 position = new LLVector3((byte[]) request.Params[2], 0); - LLVector3 velocity = new LLVector3((byte[]) request.Params[3], 0); + UUID scenePresenceID = new UUID((byte[]) request.Params[1], 0); + Vector3 position = new Vector3((byte[]) request.Params[2], 0); + Vector3 velocity = new Vector3((byte[]) request.Params[3], 0); bool flying = (bool) request.Params[4]; LocalUpdatePhysics(regionPort, scenePresenceID, position, velocity, flying); @@ -844,7 +844,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer return new XmlRpcResponse(); } - private void LocalUpdatePhysics(int regionPort, LLUUID scenePresenceID, LLVector3 position, LLVector3 velocity, bool flying) + private void LocalUpdatePhysics(int regionPort, UUID scenePresenceID, Vector3 position, Vector3 velocity, bool flying) { //m_log.Info("[SPLITSCENE] "+String.Format("UpdatePhysics called {0}", regionID)); @@ -867,7 +867,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } // m_log.Info("[SPLITSCENE] "+"LocalUpdatePhysics [region:{0}, client:{1}]", -// regionID.ToString(), pre.UUID.ToString()); +// regionID.ToString(), pre.ToString()); pre.AbsolutePosition = position; // will set PhysicsActor.Position pre.Velocity = velocity; // will set PhysicsActor.Velocity @@ -908,13 +908,13 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer if (isLocalNeighbour[i]) { //m_log.Info("[SPLITSCENE] "+"Synchronize ScenePresence (Local) [region:{0}=>{1}, client:{2}]", - // scene.RegionInfo.RegionID, regionPortList[i], pre.UUID.ToString()); + // scene.RegionInfo.RegionID, regionPortList[i], pre.ToString()); LocalUpdatePhysics(regionPortList[i], pre.UUID, pre.AbsolutePosition, pre.Velocity, pre.PhysicsActor.Flying); } else { //m_log.Info("[SPLITSCENE] "+"Synchronize ScenePresence (Remote) [region port:{0}, client:{1}, position:{2}, velocity:{3}, flying:{4}]", - // regionPortList[i], pre.UUID.ToString(), pre.AbsolutePosition.ToString(), + // regionPortList[i], pre.ToString(), pre.AbsolutePosition.ToString(), // pre.Velocity.ToString(), pre.PhysicsActor.Flying); @@ -936,7 +936,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer header.type = 1; header.throttlePacketType = 0; header.numbytes = buff.Length; - header.agent_id = pre.UUID.UUID; + header.agent_id = pre.UUID.Guid; header.region_port = regionPortList[i]; //Send @@ -950,7 +950,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } } - public bool SynchronizePackets(IScene scene, Packet packet, LLUUID agentID, ThrottleOutPacketType throttlePacketType) + public bool SynchronizePackets(IScene scene, Packet packet, UUID agentID, ThrottleOutPacketType throttlePacketType) { if (!isSplit) { @@ -985,7 +985,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer header.type = 0; header.throttlePacketType = (int) throttlePacketType; header.numbytes = buff.Length; - header.agent_id = agentID.UUID; + header.agent_id = agentID.Guid; header.region_port = regionPortList[i]; //Send @@ -998,7 +998,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer return true; } - private void LocalUpdatePacket(int regionPort, LLUUID agentID, Packet packet, ThrottleOutPacketType throttlePacketType) + private void LocalUpdatePacket(int regionPort, UUID agentID, Packet packet, ThrottleOutPacketType throttlePacketType) { Scene scene; @@ -1060,7 +1060,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer Packet packet = PacketPool.Instance.GetPacket(buff, ref packetEnd, zero); - LocalUpdatePacket(header.region_port, new LLUUID(header.agent_id), + LocalUpdatePacket(header.region_port, new UUID(header.agent_id), packet, (ThrottleOutPacketType) header.throttlePacketType); } catch (Exception e) @@ -1074,9 +1074,9 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer case 1: int regionPort = header.region_port; - LLUUID scenePresenceID = new LLUUID(header.agent_id); - LLVector3 position = new LLVector3(buff, 0); - LLVector3 velocity = new LLVector3(buff, 12); + UUID scenePresenceID = new UUID(header.agent_id); + Vector3 position = new Vector3(buff, 0); + Vector3 velocity = new Vector3(buff, 12); bool flying = ((buff[24] == 1) ? true : false); LocalUpdatePhysics(regionPort, scenePresenceID, position, velocity, flying); diff --git a/bin/OpenMetaverse.dll b/bin/OpenMetaverse.dll new file mode 100755 index 0000000000000000000000000000000000000000..6c6f80adbc68b8daf192bddc20b651b87c6a8835 GIT binary patch literal 1851392 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 t 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
Rt2T4#yc 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%0DtCK9g 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

;F-ax>Qkeldc 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

-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

-pF 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

!Oxfc{Hve; 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

1)v&V3FQuPS8(v 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 literal 0 HcmV?d00001 diff --git a/bin/OpenMetaverse.dll.config b/bin/OpenMetaverse.dll.config new file mode 100644 index 0000000000..85bfa7d4f3 --- /dev/null +++ b/bin/OpenMetaverse.dll.config @@ -0,0 +1,5 @@ + + + + + diff --git a/bin/OpenMetaverseTypes.dll b/bin/OpenMetaverseTypes.dll new file mode 100755 index 0000000000000000000000000000000000000000..943fa99c428932235c6e48d73912fa6f12de4edc GIT binary patch literal 73728 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

%Ro|F^Ym_N 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 XGil}9#+@EQ=xt5;+jJ!Fng0JDu(uFc literal 0 HcmV?d00001 diff --git a/bin/libopenjpeg-dotnet-2.1.3.0.dylib b/bin/libopenjpeg-dotnet-2.1.3.0.dylib new file mode 100755 index 0000000000000000000000000000000000000000..ddf633450053e919fa3a079da1b6df4396dd21b4 GIT binary patch literal 125128 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 z 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 literal 0 HcmV?d00001 diff --git a/bin/libopenjpeg-dotnet-2.1.3.0.so b/bin/libopenjpeg-dotnet-2.1.3.0.so new file mode 100755 index 0000000000000000000000000000000000000000..9b19d8a0703b18d78b0d4fd38552ada812f7f404 GIT binary patch literal 116784 zcmd444M1GwwKlp3#$=46Gg_+XNsqLpHYw49VhaZAFfxD&iZK(ZCPGX|KuLmRCK4M4 z$bhoDGZ9Tv(>AsAn4Z$pR8ga)ZK@E`46zu=PZe6!(L;MSLUn3mf+;6_&-3ng4@0!) zJLlf}-FsMr z!SfY7TM6Xfk3rYsc?{1Jcy{99UoM_n@uny*f$qigC5i8q^lZ|BfLmqY4RMh>ILDGMd^eRwIzNbsN9`sH; zKa}`s&~M21ZqO7wrFg!BXCIzR@hrfz1kX}DKf`1G?Z?YK63mm7`r)5y5as8Rl61=V z`$0?OI|6+wdeAQ2cv6{w>0D0MA8uXt$ri^Aw&Z@tA+#!^=OJK+?sMejfDY zv*NxD?7_23hOd$I%b*Y8c^uC#@H~p=U-9h5Q;dgyzr@ob-W28Ql0Gl#YS7E^+>WOg zPXV5v;yL^8yE5P>pyhaeh38-JY{TQm6aQBTunJE$o_aic@R)zqcxg1j|Ht&R|A*@T z!apeY>a)VT+**fN|GVp?}`hHe_bTO&7im83F0|lhMi5CWk4CI_v}dE4S4RB;n#uw zGoCx}xbU>%*^Y;Q6$Xj@`-pt2i-jmk4&DP2hvLHddI_F&cpkv>Af75b{M&>l3r`aP z{``2pCEgU}8A-n=DalGazmCH{lJ9A8VQ0UV(7E9+QH(;y*l6H6B0TB47C{r0^8|Ip zuw7t|WBf~$QeF_l7l`mJ7(b18hoBrY4eS)uigD7whNanKnBES4|DYLfSlY;|CcZ>@ z@?4Qb_;RM+h$jMptpL49nWNYefy*t*$2J3BVO5kUly(S3Fuob#?ei?kmu33jCn(B5 zjWOmi{v>du%A))oRA8fO;iFmK9+cNeMacO1=fJPSk(u>Bit-0g{tdGHuOM9`jO{^L z|AoLMz*GUt9|MjSTf{g+d-M3-vlkr6euR(oRfU>;n!A}(Y49oHY zsHYo)@nteT1>xy1^cy990_D`KHT*mCkAoln(N9r+5VcYQeW?P^Q7)xEP8f3xrtd>~ z=O}C*?IeD8Hp)7xDA&Vuh)=M6o1stH-d41af8W5v@>}qfV9+r2`x5o_tfJ5lF+XX0 zT>FkuK8RWiQQHcI)tNcq2_C?OetKCo-QqR>|`|1z|v{1og2 z4JKZVeBH3;bi`i>&$$r!q6NkrgYjQL{zl~gs?47Qe!5{S%hB~1Ux4(^LPhz4jDM2y z3|o|_Ebk?h-?$EAuH>f!;hkvz<1&2$a;luN(D46^{|ND% z1iXN9iQgo@aPps%<-LdY@vlPErzmeyK8=_|%KA~PV)~bh;9q{k#P~DpAHE*tD$A$s zWq|U=-0Dzf_bf@k)L^pnTmH#ScD-|Bm*xeV{03Bwh)54)iL@zsdC7 z!0o>?#w@143iUL?UeQHG{=1Mrde|7p7{8GG;g4dVcX|r-MKy~UgBZUGVFR$AdQjpG zXn!~QKYcdw+en|j#iG0~@%O-g`AgINWl**+LAG}eXbt3lr%Zn}`0d=UC|61RSDBu& zAU`XSzNB#49$rO#&TB175gY{TzZmfYC=V(Vc#8NQV}8f@WHtI?kbBr%7=Mi|R7DX%2t>qh_Xmhn4*+XocoYKi{_>V*FHO1u{3MXD{zTi}EBeGBd8 zU$1B{>PG!3aBlNa598ONypq?9bqDb%+S3Mk-;6xO9HGtm!bO-bsL02^2k_9oios_M z^!a6h=O|xAJz)=K>9`qnez_jzXLuQU{H}voYsz>#^wS1^WBQk01E*wIlo28S zISQw?DaF(Cr9|)($+yJ%gAeJQNfxC!$teG0$^U(l|22p=|ENDV_~hRrQ9t@2(zicu zQLdHseVg_Mf3*o|$ZwiRZTyo0vL5l}h&Sc^AJ9ws^NRAS%>T5k|IY$rEyec0{=SU7 zEbrIIpVBkk-lrg+2>i!V8UK6GHrV%h5(mL=I_v`~68XV)>@Njxm!p3EX?SR_N?FT35E#zvkYJJ_(q;tYYm75hK9L3IjY?Tji?|!L=33SIT&lyn3y8Usgshy39G98>noKNsM1$aT`gYLS5(|DUQ8ycD^~eL!0HO$y){Of z`>Tu>a#^)jSyyvkS;dBmwZ5`7>sN~uf+3d66zlv(0S3QJ%$OC`>(*C@tVHW-D%L71 zAM}->metEqrhH$!u6B+2&hRpnTx|w0aykHFS+^3+t3U%O1H7!L*(lPkSYExNtfH=_ zx@rZ4331n~hy2$otE$(ns}(6AU}k2m#_QST8ko$luRt23wX17c3j&l4>uYMO*7{b7 z234(DzPh5!lt1$rA%+6d6|h4MoE@R8_pPj`tyNYTg1YbO`^#3WTf3nGW>izVZgp+N z`t?;XtaY_Wr7)JE1}v+F5h;`n3l=$rvQfaA8fFw>VANj&zSvZw1j*yfWM&`}#^pA+ z7ujW~Z^g@;d?KXGS5;jhf(;I)F)dVP`_w?0$uMU&P8M)q4V8(8u2J|Z zItMJUtPwPpAc7E zyy+omz@m4-2JTnTk!t^h5h%4kBTNW4R;Hm8 zQT$nk7FTAxO-+|NBa}+}hpJrS&b7E;#JnpP_$gQ4Za(}M(2%-n+}k| zMN_JkH4m(q_PqqAWJS!q8*AXAKQ#=6#3vDMRrqWcg6=1Vf*FM&u)>FMdU+-?kpLnx zmfti;CX>A_#v7U^a+s}05~*6F(A8^}*WMp137(_^9@FI3WX#0IXg~{s&!MXk))cb_ zSgs*?rZ8$Ld$7t^d3K=4HPfn?10m4Hs^$J_Q*X6pHOp(4uc-i2>&;BDBu0xqktD{A z>6wJVLwo4IG23LARQyZ^rI;i;alX*VAv(UuDIHu~;mj&S;ThIe)cNQvWUr7ipAL`} z)h>T<+Mo!84Iok>h)ZPZn8Bt;%|HUdk>bmU3zU*yac}kgasXS!1V&+HMzAl|i50w> z1+He#f*KSb-at1julBW;%Gya+y@r8*3m6pbknJ8d%^u zPRe{6%QmFTl03$g00aD*bsI2Q6LYs%lPc;~RMhy`Ny_e8d{fCSD`Wy+Wi41Xc**C? ztL(0o%S$%MkX(+>28%1>gN(Y&AS1z@=vz0@(^Xg9i91A_ZoIMVnyb>4f})$; zH`L-uPyZh`a;N_npDzA=I>kSF zGg9+kO!VVQWcv7$48Eqh`(*0)8q9QwiuJ5Ar&CRrKK*7<&XMWk!z{5ZG{1jpQvnUD5IvJl1y#DektdP!8 zo|R$Fsw(WHB`Uv(OTS3QF~4vA<5)pim9Pvu_RRfQK_w{1WO|-maEZ5DQXBSaiIXHv zk#vEiS(4^SS|aIENh>AwN!lps7D;zXx?9ptN%u*5T+)c7V9iNvkETlXR1$t&(n$ zbf=`dB<+xNkEC6a?vu1n(tb$?B^{Pjmvmgx2}vgkc!B+Zeu zP|_kvOC?<@X{DsqlGaJONzztHw@A8E(p{2vNV-STE=l)E+9zqhq=S+UOR7scF6o4% zlaktgC)+P+vZQk*ohRu6NwXx)k+e|KB1uanT`Fm%q}7tvNxDhWR!O%=x>M3!l6FYC zN761y_et6(X}_d{k`7C%OFAy;grt*_+WKYtB~6xeuB7uMT_9m=PIX{)4LB;6_LE=fBi-6Lt2r28c8 zleAybK}m-t)q63D;!tXw^m^>ElHwx62~uqCO^}9g*NqhWhYIe+&B8ut1o#b#(SsRQS@q!?Uzk8UpGNpVP!MS2PDM35$9 z&z1C2Mad(*Oi>C+vAJJF`p+1*NiSEF#iS{?pGEq4>`Rhh4czV zsV2qdW)0~)jMt>|6{U{!E7(UR#U^Sa=>kP*CcO%GJ4nBZb01Pn4BALDaNmRUYTS<_ z&BWa)(rd9tOZqj8^Q1Tr>>$Oa=pIt+mv)k36Mrvh4(_&*egpT*NO7p&P3nT!Npo?( zkJPOw{iHWy51!PcD91?)aXve^T_%4pY(C)pL84aPr4oYC;blePx=J(Pr4KOC;cw; zkNN5B??L~h--rH5cR~N8KY;#8pM?HNe+d1P{s{UfeG2*~-3|Sd{wwrP+5!EO{uKHr z{Ws{J^k>jN>Cd5m(x;(+(r2K5(oX1~^jYYi^f~CCbT9Nz`U3P%`XcmC`U~ivvNAZ-o%2cs)S;O+94?g#qIzDl&z?r<}x$9vu)kiI{<--2x{Q z^Pka9f#(vZ5Vs4=*UEXsZ33qfrxP~{%&5vN;u?V$5W9%W1!mI9LgEsEGl@%xT>>*} zWhrsGz&XU_#3=&1h%1Sm0_PFe5Gw++=*l|c=oth&RYcrK91)mRRkjij2)vlMjksH2 zR$aN1xKrSz#O=iG0+$na5Vr}ulDLz&QDCxG*+pCUN@u~Xn?;wZ5qa4Ycyar8gg{w>5?H0M zcqef(ai_q$h*OB$1#TyvN8BdxZsK&}Mu9tsvxsX1-b3snE*H3yxRAI+;Jw5p#4drm zh)apn1>Q$oPMjieH*qDgQ{V%{HN=X*6m4Z4adeXH?>{oac$~PKxLjbWs+Y zsk+KR;&g#0i6g`*0xNi})QOz}TZyB@ioiDF3F7GA*?v1Qb^_3Tft|!Q;sJqiC=C4* zcMF_MoJ`y)@Lb{);&y>ki02Wv37krtPTVN)JmM_k8i5xOyNJsLPA4uTE)h7BxP;gx za29bXak{`c#O1^(0=tMSiJb!H5!Vna0v8h35l2sp{!iRU91*yLxRrQ7VBYwsY$NU# zxRiJ&ai_pbiQ9?W1uiG!Q{ZOeD6t}NEAa$z^kdQgiIqg)h`?>cypB3LAn0#a69ol;x>VI6Q>h53fw`QMO-8B9%2`9xxk&og~TNS?V=n7Ey|UEm0D2XULgBgCD=jRNb$UBop4j}vzjmkS&v?jtS{_yq9)u}k0y;z8nc zfhUP0#3=$RP;I47>=f8a93@r+wh>PdM^B0VPpnvhBLX{#ZNvitClNb|y9G`r=5@T$ zPJ!nVrx3RboI*U0xJ}?x;&kFhf#(rt5!VR3fY?P`E^s<=A#sVonZzZ;E`hU%ONrA3 z&LJ)*P7&BeTuJN{IFGo7SP{68xQ;k_QuKe~M&gLTCB&`70|GB5ZX@m%xRiJ&ai_pb ziQ9?W1uiGb8Lmi5B zCPAmP7vR zo_B2--P*0Trgy3Orqk2REWFjKF0rfm&h<%-7cJ-J+nF!dqUPJ$LcS}QUmXaJT8`;p zKn3_1g&&JpJST!vQ~n=mppuup*xeBNTcQ=)GEQo__HeF~K{->tbJgfQU>D^<9@_1; zRWDhTFOie$$%vY3hhQ8pQZ@^3x2n0$^{+WzOjwn1^4wf|$Zb(`ZE92&#$vF{!Ugwf zd!hI}HvJ@~eNDYT{UPk#@+!bmJDc$w7* z`JzE+j`n~}XmbGCj2GYoR`qr}nZB{-JxICr;!wa6+~}OGZnXJ?nzY;P8QsvprwD(e z%v*a&$dKPX9QG9I*1)0s1eDskghI&ZrqW|wQM|tufrOedRtHydw6d0!rY|wpJ|QppClv?TL}gCOJ24m}b?QD*!xveDa0DCYjAgJdpPBN_m)xQ|>tGj>pv|%=weXs77H@!Y!M5gcny-fc z3XUhM{z>$1b=ib|p{Sz!5g7SN-vz;dHNkh0nwhHSKp@((3C%yLj>9458}^UDv3Jhy zFTwFFb=e6$j9Fq+?*^2l`X|)-$&4xVgt-u?9{G?QsRw=8YM4yUf;pi}R#?KpHYRR6x?7oPVAgTnxO?W~8 zr6{bgw;aU);Mn?iR^^_`4m%!=Fv7^+pZ!K)uU7QBRqa!Y2gaU7>y7Lze7NCiU{Ot? zXZXm({GRML)S}lX9b4~3BT)x42KrHlkq0>fhk?M!7zBSDBWyX^z{Z7&4o|AZ;|K~s(_D7d8&&-$XbDXaOUp^e4?Q0=)_-DkulwZBB-JsSFYM$evO|uj5)-#nb|BRY>MCc;wX!al*M4WlVvGuEX z6+%AYc=R)(G?Dpuw)aHfMJ?}$RSlyRW6uZcql#};V6Emo5n6m?LiI*6j*eYx$gAEk zj1#Q&c*EDV`pBo%pN$6jj!gQ}P_*VdVhw~ftHIF;)pI;>2*{`_9IQWKaWpIB#sdii zR-(0NVqOpQHw}z%L^l;_o?+St+6+q{JTeio&Q{IReW|Eg%Q+G_ z$o9}k1{%T|hE)IH*lWS}ERIK?#%@;dz&ttM0dtd#dtQ!@$c2iJkB%ahu$Nre*YVLm z08$~o-?HK^DI=Wf28;fmbODNc~mq zLUo`=zuYnaiCad$Y4{KN3)oA!>e)kg;q6e1chgR`(@u`UPM&Y9e;#)7Wg)=b8HY6Q zo>1O?a5pe^3+=-{5bUvJ7w^_CZtwzVvqG5(T|HMT%BlC&gJ0sk5%rCXqn3jgzJZ*M zJ!j6J?;nQHd#29MF78l$ub`J7r=M8-iWQ}(-r)ck*`p=(8N~*Erup}1*27~R(jS4n zLtrc1SRV#kmyj)Q2RPk&Ghd7MXx`nhsmY8(u=%k&+GyK{G-u%6P%b+EZpWkNF_}O5 z-{Erv!Umse<|~4i4oCB!$*F%2o11x9^^XMFfl&V9!`6l;$!NZH>?gvnwlbxMqTKp6 z#tO~TVTumwkBnWf`6C7k`~cz~i)vi+kH@jF+tK_OOG|pC1??LT+%8(x(J-I>(+PnF zenKwt4qL~b3f6bP8s8SySRR{SFnaOf$+2UmJ&NR$qwkyc2)x8PwwL1d)y1(5jh`6v zz#dN+!hpVS2Vf(dUH^3>j%)toLf^Zo@4y!fU3aM7U_7Xk& zRIAjaZyrP_%xxbk^#~RASsQ*XRrs7C#L2Orwh1{rq!o7{2!qQ6e0Ij6F&DhG6oa#& zMDzE9fs70Ow+!rMm3a`se3S-lX}-g79D4)Lvc9ClMv0J#A%&j{|3FCu^245X$bz<~ z6}NXijf3G+3l6KEotkH->fM!bRCF|pXXl09T^j!H*~xaR*28GJQL0+p?w5V$FIY{? zEHCjglvfR2{&xk!u*?#7qr`^a1`i0+qL1+TVeh7@U@cu^Zs8xg1OxOBMVh}$n`Idg zx;phfra1pVQG;|1l#?_SxP`&M3vs5h8|w%4*u#Em=m-6&Z*uHUW`Bb3DzT2e zE+kSsL(F1)Gj#Vqlr@|(WUcvkW8~g?6_yyXT(%G9K=py=|CvQlfBqh+KNMunA2Pbd zj)d5?a8F@wdnuN=39?niE{xinXj>S^U<$C&A$ z1GK8eJF$XNJ=-}AT4dF3vSC2?wqdSU+^H3}j-_f%%`}+D=%&+hH>Ew+h?nev`UG_# zJB)wB!JbW63HdQ-Z4X&_pF>IW!ujn=^P|Hxb2)_72e%9K$KS(BrnocY9Z`4GVNmUP zCn31Tj@^(E4D6Z*yzC7XA6G*@#HpTcM{@~BAn@gF){47T|2WpN81^)8x2BRQ)zheX zy0yo}2;$mAo-zCG#$-fO8xcPrqq;u-6>z~U?oI0cp7$`QW4mMifa-~Ao@TmE9QndF zFsp0~dk)}T0b6SE7S*#4BcfJ6u6aj#A_-Uxcz3IwcHd>{5zV_V-ZVb09S^f2OP~`02p12f22PV^E2!S zwg&mo>E5b%yiLJ~&6m)^Eb7!XBRap-&8F91VN=`Hn?*Dw_POC0?%= z8)52%`thmvdOp5<{wtxIEuo}E^WVUL7P=FHv}v~{VP@5Qin)$Dnm+)=gqRLsDj3GZ zKO+1WHkrCz87DC}*XnJUHNOe7EJ(&O`06(YvF#TTn-Ulh=VMT=?>iPL30WWiqct^n zz#6g^4DantLKhDON3g;jw!JwwRnL5fwlIv|idoxSESOdA2-nQ9)$$*g>0B-Q_23yx zAfQGw4jq|*9D@^pZf&@o#F+{3CTYsL^AQFHOy6FBl1WhS9=dH5Ypr zkwlMu{zSHaP__8JjB2%;uwd&O4a11So(M`%Mw21_Q$r|VLKHCeo8W;QVNbtg4KM!< z(PQmr>1UJZ(KZ$cQMzo}McPeHZ9}r|gnMY}eR%^u$wv1)p!Q*>6dMV}U8*15^cKwK z?(f;8)gK6Zcp#(n{6|7i--I5n)^Atq+tm6kYJICHTTd)W(&mKR&04KZd&oW?!&9GD zYn^{et?$?BY-;_0_E7VD{99*FtHU~*Q~jRcI~F*QDBlkT|7@9m5EB-ShSZbaFJ%3I>k5v5~r``&Cq6kx9`tVh%e|N~b8S_}~Z}nq- zaw$|u*RZFJePW9$Og$T20`90&{TOR>)PeC^U-kjEYNi5nWuF^P#3aZfv+-!k&F>V9&b=m{6ViL&*9Fe30tJ466?f zycpvwR*e{Mtxu@d$HbDX&;Oz3->acG_*w5bcV+?@n1qW$x5u>XP@=aT{&YXQ-lM`l z4p1QDC=ab`r_&is#7H&WI{4CT|2SK>&!Sw*V12}6w=&$+&X|M-XYS@R#X&&z%PKex}xx2QQdZfN8Gpnd)& z`u~o7UjOf(YM&R2R{lS0pTam{rL@lr&^(NpEhqmA`z#)BIrM+mKJUS?&Hv0k=V>)| zeFSFR)Vu8gZWcRQ>TwpR6LS&|UW6{*>(E!G_k5p1yr5;4|se<$ozd(_iV$~u&LQk@vHs{7SGlpNAdpbEG?$-nEwkZWSdH96$6 zqAd!#{ouKSuINx{^sR$KuMVF3*8ZVGL!~FsLYK`%6N4`M;JKl~l(%|@N+ACs0pD_mBkw$)#v=Z4gqf{jGkj82pY5xliEOWXL@+O|Y9PD?m+TLk;wrb1EQ zP|$`V(>x<=<0o1-R3MsFFfmjxIaI)Al^M+{W3$TGtg^{qI3;_3T(dknMy>z`PqfP} z<%1Omn->+$qZB{AdG`Oy&7;Mzg$F~oqJg z8k#>bls`F?&xYP(H1r-e^d2_!p2^_B84bnmt+9M4G5k&7b6OUB44n&n3|&p=L8tnm z>W_{-isLQ#D7APPyMEXcHWSF?p+YB}6{cKRw2hDc7O8`EHf+m%6>notpb@|18gixs z8*M;jTipCIw*DPQTCM~3y-h#Ko3mK_8Y|x#yK2mT;J9{_aHin3sUa>TxDbA!lrMgy zS<071HtpQ`uV^7on2bg1|71nn!oqs~!bTeTfN=D^IbrJUiI zsd5?KsWmoJ&Wkq9hhcZ(q=jq0#~T^e$VEBk@uHpR2=k+wA1QP#{}an_k%V)Vcf|JZ zKw3ytg0bWURy%*f@l2m4+6>2pg9EPTMdLB8SBv*)g4eL80~KPArAf?v`Yqt7Uv0@k z0jK_;?#L8uN3oX2JUZ+lbGWcz#SZ-Z{ao%Aj|cZVRX_GEbgjNi-I0Uz*c#(jfd2qC zwAAA5TJb*BzXhXCh|5s*z7sfh%^53EDE6QLv=7k7y`A=jbY$>6Bd2*nOi z_6rm;qy2k>Yx=BM)M`6umlkh_#k+@Fk0;1dh}JmY)Z6GP?n$6(!{Yq?A?sr}roiH) z=g-ze|41muX)vx9?=sS;AHob&Y^>Ou)X-d%1&yM`*t6M9fD;kO>GV$A^xgu3N#xZQtGS#Q%2(D>I&fRf2 ze>XatIYpV%<$W;vSGEre-3`g=3!+n@+X#!t-VGe~r*7Z0oWzQedpDhO?*?m{(n)eJ z_HMp12&Z;{F3xbi{(jSIhzhV${c{3WXI#DR#3q@#!v)sV9rMUwG3GME>MK3(S`%>| z+#R@v`&oNo9^B1RE$HoB{JU+qm4Z`yT;M_SU{6Y-C?h-C@CHh7JR`az)^sqWP}0NL zEt=nl`A@JL*9Zb>YR`XBoG6Q~2OA3wLz?hNddf$%+Q!7dU50Fszj!a0`>OgOxH5Rv z5Pr zNQ9frOvU{c8@;i93#L|yFHl(7zo7&2A0PXPW{=%Ni`^fsXyEJ&(>hr<5`RZ_+ zEB=CoR%dOQ^1X+<6=K5(wM9ZNM0qfQD>n*?=e-A*g2GixI)?d>2fMscv;;og$#$_# z1&1L3_;+a62$_0A6gRdF8zN&*ivFK9_8qfrq~?AaZ=dNtnq2P}$?-|wZ5%8LlW}9@ zdaVRkJ_7k#Npi*%l$Lk(0&H+yzzu{JNRjDElJPI(96XqwUFU2V=6+|D5yxcr;MKeo zVD>Df(ypUWHhlRS(}aPHU(BS->Mbh zW{piNz}-B%R^Y@9J*^-Kw`;IHsOBeY1#{K>xmrPrnx8`csa)LpaXe$(f%(fZ(S-a3 z{;gVYoOVqMuziWlAT0IVO|0ql99|o`B8W-CpES$#`VCm~eOjC%zZ;Ja>RPC}8 zM$glq7NspCXC~9*GjT*{H@g#YOWluj{SvFWG#B|Rj%}!rg$U5@k5;LSj^s3 zg&3Jq$UCgxi4fdRshY}!x)OgmfJ2+O1bP-TJTi|{t@yrORcJfTl$fmFTx}_ij?&%4 z&u5MMXPC#Hfb^SspIQ#i>k3T{)tprQt$yJN487;1;x^O!iTWV~Vv+pWm_Z=n3kc&m z&6wHSru#R_-!96(k>$Il%ZD3*Y`+y>1-3<_p}>DKd>$Y%B6Gt#CO6_fqS$|%3zg|s!O!#MpJ?yXYDr_SKaQn-S^mAFQm0q2FK8Ad?Ja4{U_ z!?ILb0_D5`m>Z5mX0Jg8wA;vlrt4mrLC63ZJZ6TmS7ZK6-X}!+QqhZ>dXJTf_R;iQ z;!>ro4gOm{2l-J0#CTQ4N%}WRkMTyG`k!7g1Yt7xd*Ez;)IVrSl=@X)qXo^?YFzqr zM_J=?)JVg3H1iIdR+t5KSA8gq_E{QjOhtz38&RmbKltwDJrm~yPg{8X@8MKfv7`BQ zaDu~+7JT@~OUWwE$+#Wn*!m*`WK4~vwSoCqX;ApJqA1*!eJ@d6d}gkicP0g+!ovFT z`b=#}GKRI+WCqb7WUz`1;#{HU^m#M$Z0ZjNk}dwMj6*N;yhfb2sC}nCz+V2u<@5Jz z`E#-K$UB@0bZX%9c+v7xfahWD9sIc5f811J=+3F>n?6`}W}*MVv$0c;ejV?!gC^cu zJ$ejt2}6L)`*SD)b^g&|}Dw?9YcfeF(NXqAyZTuM3TLQR6J!=<;keXAY2kE6Sz6E3huiPjze^Lkzk{ zj8_aLt3-+fwE(k>=?G*kMg+T3H{$FVbj(b8CL+`V=UK`B8KEaVAD3^SGwo@81o*K4f)rJ?(Ninw!9c#`i3m zoLAS}g<5S6bV=sT{p z5SZ4;G(06730y}3;y93ds_GfIJxcgl=8RbvnEDI~Z=Drf6A_mwq84m<^G<-SirP$< zrA8Asv*e(jNbzW!1p~;wm~vw3X^vDZa1#?nb~J!FB!8oK(`S6*`+@24w;988Q|~o6 zD~CL#e-MV`r6}nlDh^Ou<0_=5qn5C1DMc1*4@~Mtq`*oRlJi6Y^)#BAl{l?v#y9_% zOh+_VIj>mbJPse#i`9!;6sfDVm8yHO>Mlj*Qw`^j-E6pBj52T$Cf}-5wfEFO4sc0_nl`u_YCSj|A6Df{gm5NW_5%J4>9B z=#~lM@$4FBLu|eh8y{FdmOA>6;KQ1FOUQz&(DWv5c#~V8NbTkui>^3e@YHbw9N`NOspVZ@ZR%m2 z{H)9R1d?%FDRDOZ$+Wqun}uJbQ^Z-;_~=hKkucV)cj$9D8|eL=7yjH>-xi@_bA6kD zc4LaV-**mMkbtGGI>5#5Uh{h_em{bl2CkQ23UUPfzp1woMPanS4mNfTzKX`BQA@tK zQuk0I7poD}78w3aYralYCztj&ohJ+FPWFf6n1Nq;=t0_ZNKlZb;*3bMh=|R|GQ|}e{4-8b>k zzg4ffv2tIK;AqaJn-a6JSALD=@Dd{&f(soVpY-Jjmu!qw3yo;)c9-TZ;W-1(z>(hE zyO}HXQEU@eWzf-YcV)Xv99wy!pylRqV~`^qzkS0HpNDxM%1<&}?~|CY^Y{b{%(kS%F$B9;iuTvbd$A_35*?{ml25y=r#8mB|BckxqhTE$Aa6bk;Ze{krp1> zbWU1H3HI-BoNvR%=VFoH z0gA(>zYjBM>iq%BcNJ=j42|bui4XI;NqfMlm6TR_qGEoZ`64#K6Zbm#tvNh4tG|P_ zd2NaA1@zU}hPxTN)$*e(l%JaycG=iKncQk5r@9_Wp}G$0%b^*JBlE-AX95Z88JX~p zFH`0;0dBhE^Mc$=UROwRhO8G0Gt7m~M>MPGpijRfnBWuy`~U7toc$*zwPL2@)dOFE z4vNL(!yHu=nyy!GwO#_9WS_y85U7WXijlHxO`RrpluS zap56C&xQG&7_YS^Rt5{Oae8L?&=PGr$TwC<16qkX7uFBpYA9D(@Nw0qs)eQ%Qx+J^ z`cSpL`xl1h9?FZUU^Kv%))b9iAbhc~_`jgopnkquP{MvwmpA%8R>yL_C&se{T1k#v zq3WMQ*K6wS$BY}>y4oTqgp5ALB^Ot%+*0Ex(6k#?pgnFjhkcEPU53lr+@!(U68B57 z8|3a1EBt!hg7j=SQzF9ggYHlsenasYd`b#GOMzd4q!2hqL;e~OOc1wf@uD;xQ% z1Mr{xpm@5HWHaF=kuZu)K}_$>gvm4Nnro&lVcI2F(dcGE9{EVN)0+-%2mfZ;RHlUl zutv=0s*^{@=8jLie&%Y0uBy|t6g_|r)YN+=zL(P;sGi4yIDb$NV*hvn9KK$Qe%{pkd3*({1q!uWbGVz~ zsutIEM)*;B4#xpuaiG>aV4GOB>d(9YKMd1+1NLSlF_yVlM;8-IQ@Pu1)IgOdLOpRhC9UiRCih0vsD357CTm`1)XbIp zc$%NHIIBJiQ@|9BwV6!o=P)NG3OT73&hf1J0VMh~`@ooG6V9Wl_cMi%27aCc2dj$8 z{oVons%Ocs4Z{UhuVSL;=?md{H14y*EK>H8y#wkd)XiCC@c{kwb;v_jpJR>nky#j- z94%KNKLhI#$Tb%>?gb73r+NAp@(dHdW+*&??C1KC=TOkWo(bFa{EoxXvJiQ+pibvx zQ}^S%HW^27=Z#$?)?e8Nedh-E+qDGzM8V(a0NvJ>T&ttGn3>!*OsUQRb5poS!>Hgy zitp>e374Z~HHxGETzW#ZG`P{4;`>}E`2HY*p&n|V{NQpoTl}ODYhUm{k=$B6yYbg| z8jXJe=77dq+4$x!lVyCbfdcBEhx-ibf1EBI{9zI>KptEuJ?x=-R>r<7GZY~M`Z@Vv zO7Mik&^n{u!ev-f`7w@C56)*{GC#TCO!iWVKrhmpCudp7KJ;94d!Iw zKZBAbQ==9ZQ{2a5_sU}WQTL}7b5u%DN^WIbG2G)f*W*jE-q%N9)wutQFUqw7tTPJ= z80)Y(oQbzpo1eyrK}Rj-5YgHu za&p;(0)({Xr&3{0w-G452pGE+a|#QlwcNQpE{t5PS!{YTt)LjbcYq%vHF@^YF*kX- z4RXLBeI(h>a3`zrWj@A9?Xn zMW^GL=Bs&2W9+%c(W+Zcz7Hk|r7 zw*CQihPHi-$WZV)Ch+lu&t+vve>ijcw3w(9q&cyZ-HT04d%EYJ8o4sN#KMj$5N z*qw;b9~=Bw_4%v`3q**Ke9l4~#|rYQpD*I%Yz2$4LBaQ_pD{-Y*Cs|fX3^haC}zPB z3B`n=YFbPX&cD!8dF??QIAY|%=0ke6+v#|ewi*hq1>rhB~IYl;9e` zOzWlJj94Zjrj^odM&yZzq*&!$W<;8Zz-MVvjh$x1MT~eP73La?>oDU^{)BPjhL4%A z-HiJKK)bZJEH=L&3v_lstpx z_#0d8;7cN-L)z$-*~r3wH5NU8L=|S|p~Eg=2SB7?jlh?=9(Jtcy0UI&#^IKH@J%xV285;p`-(HtCYfo|Wm81jGmxBGkSWu$ zb!?4}P>!{3F&R&np+^n(j2oNq!W>z4AtE-%6@E#UBj%GRr`;$A)4IgkWPCtBF+2Ef z1MXcS8IJLA-6_uE^!2h*+<(BwXv`5G>lLva#Vr`n)49Lw!H3AnVRtIHK%Y)k-Sap= zc%q^=)p9xq(chMpR*)WAY~e+u)0dyZ7r?r9TaH?ghdEPPL1tWxT2ROeIZMO5Est`b z{ip@i+Ke^8-*>~F3QAZjx7y7GK;Q=L&T5>T9+LJIZl2RYIp7bD1c(!F{)Me`_=b#4 zJ+iVwT>QrUEVwW|T(DFmDp*OP)ntVW%8h`<1}PN;jEbc>CUW32i+n!JCHpixd9e{g zjNNT)xPLhD!RjivlUbQB9Zli)Y)zhFax$Zcg}5UBI|>A8MdD+0&**yYbTd>|#*$t% zBDLDQu-nLibHS6oQr5~}6y+sc2plt0+`|Ra`I*S9<}c6+3f25{4F=3RxjD3r0w_0C zE67yy=dmKO)oTcu6&0f*HNP~rb1?mTA@cj;BHpJ?g+s>q|JTL$o6X121WZR^vd#S2 zSgoG7*PDNXS61Ld`{1Og6a51YC0={jl}8wMVFLn<$LHHvW9GZG%_jMF@yv6BlyWBaul@z~ z-~*0gyIN4A-JXI4D`$fApL!ZQDtA5lc!k-W#VgF%k;T3oqOIn-d=7RAIq9N(ut*0FWcVMD#sI|$Cpf?rMd;_OF5>*hT?BG$ z>=OUcdLMqnve9xA3M=kw&AsqouG7K-v7#*Cf(18Qcz69O-d#tp;N@Se!#oGj8A3_; z%sw6UV(hZx!Cauv;>K@$G`x+ns1sTvPK+GSS! zQu%8R*(G)~0F9cBO`IMh`|o2(; zsrIW*)I%%0fL17?gj0Bq;n;k@`WwHnqtg0bQ(tcibJtis5?g5l5+7oas&8{w%qj4omdDR$3;M#u4Xocx3gr-&v8}&Cy8w|H^Om} zg`XcSQQaw8Zh2FWktTiYN$fUY`xVVn#jXV`hdPS$KV9%6Y<0a;6{i9)S!(EdFfD)n zLvDXlIye`>{UUkNFppPDW@(#6$AC}YJPgfe9L0}n1m;Ztpaw*)F0tW)VN(Rrj6AO` zF18-AcI}Z7cCLJ9MtAUK9j^+Gz2I#OU+a+P-^rzJ00%S%Xx6A&}XwL)^3()FYB^f!4%DAnwZSf(Bk)4@LO=`XiZ~0cbD;{hS=T07D#A&y0~zOZx0k{F2U{llb8p%&4QmHTWHlHTWG4PnV;)g)&5M7wmu!$ChuA@8T|W46JhJ zAHfzBK0{=Z?M>tgKOED2>@;z66YCXt0&eWKj6=Af9kAm^Urux1>NI}zg&W~FPvYjy z7X@36t?N-Zew)L%KQzssxDAMd#BlB;8mx>iA`kVEaDjkhFL5{3Wkk(JR9JK}BveKp z$CQ4?d4V`Bz+^QKX4BOBw{%Qa-8sBmhFu#j#oaDP^S_}I?jhj1#-c*m@AwS{PP#VJ z1;GW{wQqAaB3h4G?l?C1!i|i>|2cPM_ZBnVx4+L8#m=PmhZbKnoBOgyFqz|Q3b$=> z*n=%0M`$kcV&(=_k7_6d_vfN4MwAE_z5^wp8eDmfFTa7IIIAz%o$BKY^WgB(flx2sq#nY$|!*17*CjKpG245p4F3AmTd5~1MfC4>q_rW=5%e}_nG?_#Ra z>rfW@8@}@c2Rz2wEMzY)L(A)HybV~$Gs)2cE>UnkXs%D@ViOR9s(w3$_oiM2zig^q zf-w!VC+gI$-dX75MA^n^BZUYerfbbV#OJD0PjIek2o{GgToiDtOemKko%${s6?dY+ zZEbCv&eqStXB+2@ozEi-y!xy-+W4D>GmHYOZ*9}ZZ8!n(pRX10vJjTlCz($kYUJ=x zqri%j>egcj=E=s@IN9(wW9v?T_>b^g4b~Lw|9%c~`{cO>tV2Jv3-!l+KxN#$IYv=? z#3EY%fg$y{(*op+9T=E9{dyw`l4IuB($l7+&^tF{3LX z8(HLNDK#5>>klXe3XqmT1+X3~GL3$XDGYx=eTv^hzC(YwovOU{O70=f)x_5Uu_gO5 z<7AH|9EEaV?R-5&4otmqVJbo&V^i{T%=0~LUd=e%Ln`BgDVET}!Z3x!F?_zb7@%z^ z#9aoi8E8GC3;D;5?HByYK_b4DlS9-k$Z2ez9H5q`H&3F0W!Tu&!&E}{p|WU zVjM~Hj~G=50W`A1Ll!>#2wq(7?;-;MpWpH`2p zD@^5_{M_UBPf}scX;@B7sU?MKVGh1!SL^Z|&Hq7>7*`Riy17)LtcSjX`Z40;Kbufc zs)^+fKFkoyA8koBzQsV8T9Axp zVG3EnGL3{MXWye4`IEx=g)147Uxd{V|8pGrg{UcSL5pHn#KeYg}RaDXGD@3lRfsDt=G^ zG2~Xmf6hQ`|6BDJg@~tPZ~!7>cAb?+d~$}`^x)Z9o(+oZz!LkW#FZC&l|Jx3Vy+hmJ#GZ5jKQxQ0pPo)3><_uIfkx9xHFru+ zWOgD}l{xTmqJ!yO%<2`bH`W(5@=sI!ejDyBm?{LdE~4U5tR2Zo zGmWAcB^2-3s~=%W*zwGF;l>=7e2F#Hv1aGT)bq-ALp`E3;wl7Pfd0G;7Gj;gM6+u~ z>X@`!5DXj5II6FI(_rW+vW;)}r`x+%|Egi4GunHL$jNlFy>n!HH_T}7QnuIM#nt_# z$U&OR(lTSSDa<(aw^$ek^aA0D3k*-ZSGZwxCbRMQbxuvJS8$X`XPlpm;Y~F9rEPFy z_%_ecd@Xit(ZS7~>;r-8aJ}(X==uyi>=}4iNAr&$F?!kXw3qE>6+-^#w-2DO?D_)@ z*bCt9y#AQ5)qVVh4&$x}jbNXCnY3(?4VFM{ehpdiE1c6p`AAqr8!znnaKPdWKIF6n zQt@9a0hicD{ZO|^5pL>>>5*KdpNnwpXP8mEn!4HG z&qn@Gq)_BXk70UnIR+s7mI;T>u*J;5Xu9QNNCEBOd>k{v(Qo1(97AX>7uTd*|Fh?~ zT_OMnc#h_7hCNg$E|AAsx>C0EVHC#JJPrFJw?da-#nZ3fA{$~hoGN3|JCJ1zKMy!y zGUj;6dI5)c*@9~jFYi(mlGTH?$C#~%7LMPBL8`@u8|l{vVJ$30)G96LL>sd+o$OZ6 z)1+VvP#%76k{e=0I1J5?_26p^Z=t&9ay!P+!rR1}CrRw+U>*$nJ;D--ljtRLOX!hi z;aCTDer|~2ZTuBpV^0a!cta0D!BuC(wrBm8#EsRVTj^V!q2LM5=jwN(my!XhoB|W$ z&ureuLV@$BWBjJTgV?d%9xmXKlY;-0fQ2{Av7^=E#oho~fawE%@y5x%%O9Mj)m*g| zIqQ>fYa1gr8k&R|ZPf$Dbz$6NMcH;XLR=T-^;P`niny_X-JsUZ;34eU$;!f>b`s6M zU8~>8)2V<{^KXIsl>hyb)vU&g7B@GdAHrVHSYBlCZ+QJyI^(vtn1WY81c?O;uy+G9#N8}tei5aDJ3hJecrgp) zN`bM~M-2;HV3^yq1rF+m5CwIaxs2;>qL;jec9_y!o6Fx}mh9qt{(4D&J?Iy)Pjl>avBG`nRA zdn)iu0XVrY2`7j3F1_3pgUl?yhdTEJK)o~jL3%kHFBWgnaA>~Q#`PZ*+L8u^Lf)7R ze~n{;KS_Q)t1T(j9&~=1)IVUSxpM*La~53hw9>}wdEiT1!jD}na%neVHfd$A!P$Iq ztFf?->0%po0oPK;4zUD3t>S3@27D3=Sd_rJ%EGn1oxaDPZSFOI)G|$>nN@oo@ zh`Y_sThBM+c5i7_kC^@zIk7}Ww-}c9ITLTL#)cGTs5fPt9D08!@7biG|3%vQz(;vi zd7mLu7;5ShY_^RWHPuvMgDYrV8AEH5G6}_|4V6Gw>sl4Npml|sX=#^)gqfi{eV9Ni zajT0izEWS@ML{JMT+$}MW@r~{DAp2;7e?(Vz&D0$}o zJ@?#m&pG$pbI#3oj~}I|2490+m!=j@L9exwnxTeYhs%#Xme?2m z&9g^u`H_z3qst0cb`czr_NDa3%UOMx)x4@mrgb*sFnX5PZPUegLuIOEfMboUku2^I zjWw@f2wXH6v>ELevCe17FF4D>;L8@fl+0k~^Wqw#94g#pwIklb@(|>+W-9Nr_+Be4 z*w;iajcY_kViHD1Fr(tNBr^j81=!((+bDf1+I-CCU%!G1fS_QRsaFA*KQ!VKQ~RPO z0{+0Yi-kAiI&EvQxo`|sXhM!z_YwE${KX3q5(d~MH~Cd=xS7D{>>dh|7n@^x<0dWk z8zS!G6@1q7ODs1L+lcE}Hh~d88sF%w{q1XlbaNv1AV#$ZqxXtro%C8u7593d5nVBd z3i-~s_|%0=Bv zUshandi^>LNh;_CU1%r25Q%uajAz$IIG}0?>$g$fosg3mHfUi!DFwCD+}bI*t*;9z zW^WBV!@EhEJ97ZZuxQ0~9usMBGM;B->;?l~^^EHeewdKx>fcDq9kPxh*~<=MPIt=7WhYCpC@JAy;A%v7L2M`d6Vm42W8SP|vVJW7)Te*blYa)!w=ZU2g>2jQ ze&1T0#&R}%flLj>s1VAG^=IE3j7CYyTKvJKUsTb*U^M!>;M^)FvcD%wh{;#EW6|Oz zD*D=L;Pk0qS=dELHAFmnZqD$!$c*G@c34*VIzJf6(X8qWHfZf@=jLb~T0eK6n=^dj z;WOvvl;!Kh$l*KtWmcooMj4~BuZ%)YUW@oMwS+l*Sc^EUS#FH9-BS!%jdPOM1Fjk@ z^_TnzvInxes5=I8w}0jHD%ztN9?dt(1qri}{om*2OwZ?}&&`>V&-tp+OC+(p90l=z z0h78E4mH30G3aifkh;DT=v9$n4^$9xK%I_Pny)nFq0PS28Xcf$pw%A_2;{>y{C>4D z-`^JWXM6lSwK3el@ucvkazO(dDU?6$&zJJ5rl}zT@dL`|J_&0eA=~GZ+z2jDWxotS z`D*+PfBy4JKc}K`>&I6lnxZgJjaX5NMzQ7D-s}mHMDH+tR{M1niHt*L3@3N>si{u} z!vHtKS0J7rHHCSS7;n{2Q6(5!4~24rFv}5pfA)(kB>aDQPD&R;{Pp;X-`L2oPGrAM zTcd|nR@Pwa@!N^9=@;L7@g;(BHR<~MLz?3681nt-1z=r3`7z`xdR7BpJ{Oj3_TqD3 zS$cQVZ7TW}wK0034;#e>SDlkHQ!r^df1@1qyM|e8M*e(wK72+|#r|s42K2{%+33<) zcO6lGyt+q!Sv3`qST_6DqozMU5BFF-l?&zpbzYt3y+6O{!|mOq?EqH`vv>QAjNpGD zdl_X$W(Vm@}}6@a&|< zzjeLOhvNKcp zWyYx>E#t6|4p#;4_n%V{4ED6Uti)wA!9h5W+STCM5UJ2B!5+cpYs)yl#-OUV>S~I4 zZ8p^M{$1+mXVdw|n|)ac&_*-tAaEtDGG5Kp>Bx7_^yr+TmB-b5eNm>S#5@6NN~wi0 zy-a_+yKyXPc^^0LUh?M5o^hJDB(UB>vAzM97HC^fx)gHP__sXd*u*j`XqsnTNwdV` zXqq*|s;Ln?v^+(B62TLv=|t;shy_9#CKkZ4TlyP7V!jwK26Cq9y9R8zM(9-+<2un) z!b>Vm?@kOB#IYPO#%XwqjB`()ypLL$nrSj-0(bNzo>IqOduQ!TAs1j_v-m23n>$ z;qvZ8TUjTMk7_5Iq!sF3kxuLnrj!+#pH(4mFXTL<`{b6hMg*4yI>kuV`W3V%_eG?yK1!P_M1|lxh%_8Bbz8m9*RK@jghq1KD=6(}_Ed zsZhT(zovJNrdmP&e`rm7%)hxdJW6JD3FJqUtlZJ5pU9^g?Q6A&0J zj895lnoqSrr&| z&4Xbl3whwK%BM~rUG|-RYT}-97~m8qIYSWP2FfuiL)gR=u@_AeME0b*USpEh|+w?DqO3uTjCoJ@%0&W=0V@gv7azvbHiid(OY~>2!wh7njueaAPNWZn*x2V#NnE=I?q6ixN%!=% ztxtV5kfBu+^@!FoSk&~6#Ngzn^2Fd<@R{Uxc$!#j{D=2sPKQsKS`WlQ?B26)5PSH*cI2T zC$F{nB`g)2?d$h^_3(wETTXCHmlo8fI1^3^mSiI=vk`kFp00~n3{-s13Nv+vSwTw! zc2#Gw)ho&S2bn&UP89#f=Yv8!g$+pzt%A|!YPCE@`gk7=2s}VdeTFRg`>7{?en<6m z7J_YU{yo4%oYcoCDZJJB^Pew9A5T*Z56Ij*C=n2m;XiSTtsSQWE!T3`&o((;=oRji zMf9piykZ{m8%T#Ir^8FxqPek`VQUqQ0~I>5#K)9<8z+%F-NHu{>!`Un{%B%f#NGxU z@lWIZZMJ2c1GZGDea-}RHsD>g(<}a&qAl^ndGRiq_3B?H3UDkEIv9G&1pxeIVKc?M z+^ZDaN{#PH>cECp%QcWdo*#q{oBC5HeW}>tB;1;j)qqq?LP90BYTgQu0GmxKP9Xcx0#S}Ic14$_F|isG;UTt_YBXxfTcb3I3wkSKN+)m z?U-jd*xK^)3wYg*Z!MQ|mo)ECTW6jRz3Mh@wQ^f1x1@gaZ5-#C2QC`?&hN>qpmE=s zFLW=7@3SAVojX+`^pe}S`^*>xt-{cZ2?hrfeZ{u2yBhP$cyTI6t|A6%R z#=~5dcQ)?*JU3qG8V~mkj4`;Q^A#8s%2ksG_4bBnP-+mrp9O;tB zkk0%j6ziL;Q6IKKeV0t7$0MVAJTe(n5Cf|52+QHz9$T%){-DSH$#|pS?ZJ)QSk~{c zf26xmEISzoWd4UZuRk&T8hF1J(tz8zW_XYTlUZi`Pu}%KDmOK@29P*r5(xxPJ{G%; z8=TY{L~LT;a(h!<@})8IY0T*rHAQ=kUrWB%7p8F?t69YB(Q^4~g=!_gx%^R>sfmd3 zw6f6R6Zye}j&tW0N#r0O)ZU1^vKR#ZLlF7(?7v4KE^$L7kqaH_4^7|<=!QuAJ>CL3 zB?KH-``6TjIGE1VTK(3ULrs%1I+Yp6YXl_9gmUtC{`v{{8}Ey7X)nT=c#Ss^r84$% zU>`snC%NatD#>1+d zSD3Emg4QA;$QUxj)yHuifYV|jgKJ!^$nGZInI=UT$&1xSy&wGvn#g8g&TV_|Bnnje zYp=8TeE8k@Z6)xQ#Negzmx&^(^BP$7ClCYKuUmx}74$%Lksd}`TcDaC*u8#z3B_%` z%>FT${TnNO8O0U68CH%8^Zb_(2{cuJDN0fmEM4BTEvkqr zv>0iVqWhi1{Q~h9PU6o2+?^X%ST4Qo`?5Y14{yK?oqV^z{-}G0R-wRNfADkRgYQm! zF%oLKCp@$gKt7LO1w{S=E83e|OuNZHQf?RpFAk$1zQYIIxmPzm1%A-3f&ahr{@KqK zO?~1v{Fgs?_oY~&Jyh-(Oy*@2Jt2vt%9&1LD=qMhTqgFi7KT?@HJC(xn%{qq9N9sKH!Mc$jEipBI@jj<*y<8Ux_ZKQ-Q_9ifLcf!dJpROs0G+n~7 zUK8@>7Pdx*n!c2-rZmA-da{?UsSdThdx)ogc^UjrU|=2)o4P~b@v`PBWTFMl!w&#(8QDfW+2|i{-Y-BtVs%HBQwD&i~(%q z!oV&W>Fy1Hz5l-pYyjuUZZ8xX53He!&F&b0`tvdNN1vbhOe}lg<|f?j+_kF1vi>x5zNNc;vU`-#nIE+4`3JcvLK0ujBwmMGNl%S$ZHYfUJSSTxf1Ud?c7Xk{lQ{pwe!dOS9^ zhF>nIrxm4yp@}1fifLA9&bUDG<^GBSqOAai_z(ZnD#p%6^!4HK+7PGy0w`lAzv}ZV z8{*_q%{$5aK)?t*qlQU!AN)h_RU<9a^FxjA8YwUM1IUB&&N#pP%D#O0rkJ5-+DI++ zVrDPDgY)on^4p_8jAt%{f#K@Im=hY9Z_PB(gZ5l91RpOT-1da%p1UT#UveE&%ncFm zvO~{#Hx#;;+2V7Ok2C%=d-x|3zfCIxr}4gE8QUZWz+Ir`b}F?!XEi_R*YqY_sAg@U zMA8I?MB}UujV zB6_PzEU*%@_4#o=^9N;P?NfRW1nV5fNcBb8XTK;A*Po#WKi>P3W@;^NdO!B3spzLy zBAAhPZ^gV;nD_7XYAhbZgP+6v!|~AgCg+^z=EfE_hqr&emBPOY;yvrMn2_L$tn*8) zbE$ynU2jV#)`C%t4kPCuD2Ctqf@}yyfo>?IsRU9^)`{%L{$`9?caD7s{%qqN)OcT9 zqVaAzt?|-jA?NS!W~A?Aq;K;_`i^r(`P}D6H_m9|FOHP3p;di`p&c96pCk`_jg}#{ zS%1^%Pv^(lNJ}XVUuSVp5J8{-yWXSKpF_-VR4Ud3l- zweE@ASM4-EOV_+1R2nO+L&RI5qTs7{wFNZDtS%0`16Lg!a}wasf1)`uzDce$GlsJJ zY47Aw)&1dL`*n-g$M-T0^0q3kE59Gg(`R9JoJ$hF*+WFush|qJ39Zvx4dD#;qjN})(4+?`}X%h zNZa1V-y1oY+M&fL+%V#`@P@$1?F;fz`zP7Qx!rx6)&DcBZ3h0x`01-!DhXfk2to1neX5n32HU|dfZHzD#Cg!OsvLh?tQF;z z^Jr(|MD;P#`;j(y-mW87WeQcGmPAcy2shw)r7}}hM=DcFcY9hUc=i?D^AcNKF8vQpeVU@7 zv#vpt+r>acU(&^FXvr&tkw?0zlBqSMz>fK$|1zu9lK#_MpZ)yxRto`{6x>Zadr(ov zm-v-EqiuUir~PXxc~7C&smzSMv}}cYyvquliZoNjWt6aYCr^RvTjr?e(sPCmJuf7- z^-~tka7lDe%OrPCo`GC6n&nafh8&J%j`4p3=DhcVKM|{{T z=go3EM5WH!@4?c1q#8xJ7V7(rXvv5*w_mUi6UaA&%i3uHbqE_;O+G??{yGS$t^y&f zq?+=|8pwYM9SR{}qo&+_ii;xLS1EP2u^-!ZLor9V3rhIGQ`xw^V_~Ze-B;c!aJJ)r{&1P+3_!%UQdcwUwv^+l`UjO#*Xl4QK6UC7xUBGONWR zrB*flKmB0eM0?5T)da8_iGLg{#rQF;!`P9P-=a?I%yIGeQoHp4u(&mgy;b||<5q9g zVf(n9JDB#dNThbodRxU_AyHFe3^yLhy>ga8f4!UHe~NuQ>9qeVMZAX%C9zF>k8?ZA zA%#5u=+KXVe>Ib9{7Y%U%{!)E%&UH59yJ^Po2a=2)SSn!xW|)cR@T3ev~lIvL{YI# zkn5&IO6kKq%7{1MQLJOL-ARA+6~=M*tt?4f%$4^b7I=wsocA+L z|9N8Jp!;K0J-OGbo~C82SZI|sGo7^^Vd1$vl=~I;G`u#OtLnvGo6S}AtzMhWRW+fz zY_6&o<^Ju}|6;*fL-l{1H>56u&D@q@AK<&>{FNZmd1}P%ake$!77lxQbuv>Y;~JMWaqtDFNk42?j@(synIK=fR28Yd06+3)4wN#BH zhqT<%>eI7Fs78gTj9Sl5@|YDd%%_CaF-0_VC%J35mGt~*KKLcWT2AhvE*n6`vw1wE z(F)Utx>U8oGSl;?>q>5b0QGce(0#GOX3yDXkoxe-kD8#3wN-9yd2TwLLU%kFQebLb zWkbYCcMsz7a1Eylg>k3nxv)2TGD33pWE}J6KsVeUCEi?a9fi)T+3;Vf`5p=lbDHaB zx@psY59a>;WzC-i7XUq=B_rh;g@>4Ys9!T(Q;&0h;6@lr4If}uTK3GSACs-&>0)6e zxv%oW?VEZKFElNzT*%J2xng@*B>xtU3qqXNx>`?i=_F!N{Q-i9@w`&l*N>nvRx`l} zU=^H6+wutHRsHVt{PDyi+lS+LM=_|Dd?)B2$g#ELHbNU$k?zrj&fGZ=(UJ9aVb%{v z$GDq|Dmi+tKU`3M;+#b?BO2f5qz?UF)Lwr$SRQIkWLe*L&f55A%6YtfK~X_`z#X+D zcum6=QGPvq;gl_g>9oaSXgqIEFTrSVr-@)$yI-hXJY z!f%epd;n<-b$^Ktd>Yu2rvdyra9ntBga$U}X<&;>OpW^Wbob!7G_claVC`5MX!U7e z%@`V3JBkL9ZfX`#d$G-;fgOqrfG7R{uwaDnY1Mu*y+>2dMCAkM$|&knF?I6v)iq+%>fN; zgITywbk9~@yuu4 zVy||wTerxoT}mib`QG1bRtd8oc_ED17blv_Lh*0eem+)G87ptDNfR3|*2n%s*NY9x z#?6*r4|Cn@JRF`p>v|{o5cw-_(Iw;Kd?`Qi<-Sm&xo;@`6x{@l-i+hghMTU>eF)U^ z-Eb}6@AJQJy8haR+}r){>u@cV?*m_H8{!Lw9TbrR$X5-R_d&MtI*fT z>-J9acYNwXGl#mU^WN%Kit4rv0k-TLWaY3p4@K)sxl}(2Rk=@)Dtkk$MCP0|s%P!| zoG-6-g*5_NSAbRnmWU`c;;hwij#pozKs(wA_?7fNowquv-|Bq2|IO^=PO+^>w3LVL zygGnB{Y&fM!jofO-#(Z+Oj0!D6}j(gXJWlKe|hu_=hiD@6e;9ZS^}XU0y@e4ttG6e ztexNVeWQ{U!DaE0);~Vnh^5VPZ5X+$lXE){2I7pu=+FYXuv)VFTOy- z*4SvG__)82N9^gwj|({q%NE}#rn~po44%-?G4u^5`OlytVAP>Ko(1J3q$Y%e5hJeq z{{B-N-o4TtF%Q;CY`1pXkCwZ=zgMzuJxITtU8LifH_PID3NZXk$}4Eec2!yVwEUC% zl-D@WmdTQ2VXgdFpxq&zRdz_Q5MeX8E%#j&X1_+85AvBmvh>?Nxt;R{#uvmZY|M+C z?4RGDksjsw9(zlZ08cv1QGZ_RX7Nb42`x^b#f*QYM!MH#CpqaNil9_*<+z^BUtJLg z*SJvT0R&_1&xbh$?>RwRyzrBW?cf8U(Cz;bI*8NIN&`6T`jfkIHe1?WXWPP=1q-Lk zv2S9uubGz#txT(1bHaUz%vl8suTo|m&k;6X#Fx}|aVB-G%7Kppwvu_C#rsAY;&z=h_iM9hzpbMq7uy%4wf6 zp3lbC;gjcn4I~pw>JKr$H0$`0HYYKF72MGe`4XJ3V3&pT8t*pu;c39V3S#jP*|t`j z4fXUiJ1OwW%jSiMCK>PEjKbnRUeIttn{t0IszJs!adWbuChP7QPAACnSfoq-!rcl%D#yr6_CfcRf*Zp8)(`9&+7Gn$Qyy|NTT0WgDYeyYcpVkZGb^o~ zZ}eaIU5~byE^bCh+ z_1b1izO|Jpr}=>Q_glaLDp<-$t{Detu+yEncTlKN6s> zl6$Wryr?CfJ6NUgGJ54;RUg&Oof?k9RPG36+FlP@bayFQj0gK@E3%JMZd5;FZ*9F!^s zV`D2|I@?xhR<+W*V!}@=*f)eYshkub?!^$CCh)=lv10yTrDVWzQ8Y$1Pcel}l=5B7 z8$!F(0IuY#wliFJmC)#|+HK#4s8!lDxT}OwZVlrj_$pMN7kvq6Gp{TfaE8_1ds?%zwz%8MJjSD6<#|La;` z+^letjT&G5jzEhE&PKfZyQ#{`X|HB7f@MFpNWis&sDE%&FHU&Q1Kh6Q8lwc#vK4?> zaId6M0WQ?s<7n<99>5rxB=XI}^kyF>UocsKHw4oT1k?Kcz%okOH16Osie%HO17w^h zp0-k}V13`%I?Nst>V8>%O-OASBcu+SklHLE#dQl4Qrh+Ah13ZXQr* zA&K_{*(*psop=NJv@wuR+cTVVP$Ms&wvNarY%<3J`Lt2;X>%Z-HX>r`PoSZCgx2=u zQ*6Bnr&2`O`a@sXgvRPiCVq_)OS0V>tbdSO(EZ^|Rli!vRGr{o z{`l$x&xfF&&E;y!2Dj!Ex9{8^1N6$T^t^yhe2Sagc!ACLJr!xvwC~?vBe|A^z7u=K>!I|goo$1aEoJV4 z@|AaB$!i`^wW4#Y?N&8x-Y5>WexMEB4a?uu#O^MlSWcOAxXXIt76JSY&o!~UY|GU~ zF13YRC&DP-Qkuj0$F3y@UQSnA)sN{S$Ea#`LA9c$H|ceUmNKhGuYn_TgK z0xjb`NqFCI`4kQ9t5`JA>OQ1cP7!xP_VY{|`;hEw^qHwG6f!ckLIQs@uly;~A9g9a zsy`U`#*MmPZ2L(mS=ur`3%vM0!TmE;e)TG=ZlO1w_RL!mn_pY;Tlz{>o%MZpf=!d# zQBH#HrlysHGDM6)@6O_$XD{+4Rp>=GJzqJU_V2uiH;Ge6CA1VxeVn5}KBX03OCOok zY<>yuOsrLZye_N6?ua=0OH16;tt!o9Nq;CIv!N)HniEv;?2Ge5eiKDIJv&nBrWWzT z?Sr9ki`Hp>h&q|n^+AP4hU+bdsH|Q} zCA<#(_N)yyi!5%qgxjHq2)zyi;1_OMO0+k(sNx!eY~R5l(JX$S?g{ZcRmuj~$o7wi z0@ha4Btx0Rv*XF|kwymR(KYKUYS!R(k+N3jlz0@5MJm#2rlLcQXXnCM#qdjo7%Al_ zq->=-gsaPh}6clhf z7h5$u8chpfN2^QI-lAuQhK@`+T3VjnSvfSM=YYaTn}6s0H1@k4g}1q^`@W-JKK1KQ zXODjQcZ8di@#z&Wt(MMAb$jiSru+1aCquoHpHB3IovmjtVHtF)kA(Fc>KVGk>k~>XR$rp zx(%gXhjoh_o`Id;OY0XZ=mqaBDj4yZr5gYk!s~%Z4)^zG0;-Ckg2a= zk(!G`fjO7B9V;lD$c8HocP*DX56AiwU1}k;CdDplsAXcW{T&yiI?2~3Fd+lvkjlr#HGYM+{+U*}TaUDAll<3Gt3^hZ}qvGPl!EzH-U&FZu1UgySJd&O>I@v*nnVN zwdDoYE#xhCx+1r0hx&SS`S|qG@os0IN}g?dUSMJ01qEj^;~Mx*{UhJbw#U5=0Zohq zFRfP7;Wn?xP3`B?OY2{qW%hk2z7dU40 z_5AK#Q~MHKny(3N=K=m;wp2rDB_(nb4h<5g!+A7$?M9?9x>J|HXnSq|Tb4h9o>#+M za0jMKSNxw*Fx_h~{TQ0DtP?{+A4;kDJZ!IO*)S15k#zUEl;t&)dnuvU`DtNG=*g*l zw@r$8X(im2m~(bK|BMe8bod2kw}fw-RDIU@>FkyWALDOpn>4OSzY1?l%sm^rZ4$-j zj*oaYUAMKpd0dr${#d^wAf42|{?PzP*j(dUt4WJC6g%s_r3}Pae0OwNNsC=Zi0|Zb zEOfbUvE}WAwYwP0@`YCZ`q#0(v)3v9@tem|r;n%B^L3=h=OxFgN{`=M>LhPwfef$itNGE|B{l%Ki_zhH zE-G&Mt@ne1PH_)(JS}pIKA$k=6Y?7iXMBc}jSqOf9#T^Z_la6+ z^Cfv6)BYOl)=RCWp0H7^zPhXxOY!vyFKZCbrQfp|G;qfICq`ppm*1KGf z@Lh_Vm_`*lDnFx}n-Z5I)Rk>6T`1q)?8qrUY3iPYH4A8Jv)El&c#2gnPB#zU|Pzvya-Qle) zL?OdDr)#S~5$~!Cco&R|2sJCia4hGiRe7#ujO?~6cfIC3I+&X&3#2gzElCAon+R#; z4p{O58q6mTK(4uYuS44bBY2+QFR7T(rItmfmW3}D>onzoz*+2dnDBVA<*zw>gF-$t zOm9;}Z^JVD{S|6WG;jez%iveY#5k$-^pg02)YEia$gcMhXE*r2y@@FQK)^dQ*fUn*)kK{SKO|CWj99-J@0m&;&Vi{ zjYu}6ku=vALD8DjNtGwWMd~mg0t-b<%Ka~-A#^A)lR6S)CH92f#?83|!wu}`(HEU| zMLqSM=)hp9XAMcP4Pa%FV5=U|=Q>}o0h&bGLPXjzTIJ}9(;uHM)QizYdO6!??3)n? zgi{(xHh1t!$*`-(F)c(CWQkSQZwl^CnExJKzjL_jN}5bA^82>$o7H(7(@ey>(>jk6 zU1gJ^=nh<{?+5dJuRXu->*zcBMDvmhjkwoI{$(&?KJ8%(j3IP7M+?D@>9hdG4s>I_ zv-Rh9cBgm=2dI7(uR}E@1KOqjX+SrWRHijYEk}ppaX@&bO@fnrO!eu%Q)Os~70ICe zMcKTSoC}P;Yd~dvb$Z4gIE<0u1Sh#oI$2sY z>Gq8g)-N#EvA$G?Xw-CzK6h|d=&jv}Zl~>qab?(lF51alqb>=A)-I80C_Ve$5{}%R zWHrs2JR7kjauhg1dK&#vQRpE{wGg{*M8xUq1|3o1)R60>Vo2ddA)8CSH7_bfdD|8Q8n% z-Cs@%iUW$S5;^0YcA;f#awSj95-Q>*0YMMuD#T0u*8U6Z$l5ZNly69EX)yN%Ntw}L z#W%s-45lq_2orA=HAjZqfyE5wzM*#hGgjdPA$Bob8J01adrXx%U9 zl20#f8arP%1LY%OTp{e^j%!4QjQleCrzuF79iW+o8pzQsDGP;o9&mw_CI6Eu^&xOK zw$xMS)%&dQ+q^d4`t_>UabCT{HVf;m6sp#HRVuYvvHH6;f7m@_;yT>;UHfOe#z(w2ga7fkY*aRE^!a??^n_7FnB|%Z+g#&{kqj zQ6PZ!6j)8?(b?7GzdwYSb5eh&O3k=hB{JikZJF~6d{PBs`#BFdKkpjyI56lg=nz0O zJ8%5=cUiNF;|NV;QiDJ*NF|wK2k>RraQv1C+2)1YZ1Xi07nB1j|7II8(NdR#36b@v z(r$d8-x@8C8&lP<=cJxv#O~nOO3gtfSjdGd{lKuw@J4lY!Pc8pFr|s}y7X_N8!ymB zd4q@;+zg0{F((Yi?4yJe7DcoV-*+lF?U#!EvrroMM;l6~7g5I;t*-?rGlUc8sH$lXIO%QC?Fh;E147%0m&U7pUVrI`Q;Ad^H~x!sFeywY_iX z(P*dYIO(sbH1f5sq%vhG?VnakT2_=9PoleD?petn^9a%Yri(e8p7A6a)P_Btft0b1 z1QCv~MT_(Y=m4x7bSly)cLt_8c#B048UB+SpLs8>Fk$I(4Yr{i>iTKn zvf&N6Qq#qkkL<}Ma<%tf#+JNJTk>UW$?Mp7%w9HjH=dhE)jX)$MKl1v=et2aJPK@C zIr==ir2xDIE1sdl*{c*_&b!RFo=gB*nNCV+Aa6P;;oB^7|9GWZ)lV6wkHZ6VKha2} z&lPzK%Dwo3H|7jJWBn7H!5(jV1I|!RU*~cLpW$3AD4vxhX+Dt1pmuZ4jESLJCIKoA3{V0B~92Qx^G4A@r)fq zF$V{&)Jm1|x!FT%A>?)H56sNA!M7^A5e_N_CAORUjONBn%#zXLBnN+BlW;pF0^76y zMuYM<;4?DBQH#$FWioQ6=hyRYr=cm>GcTjh(Df+bP z_(tg5OTQCnO94>!)aNyWo#Mxy9enxr`AqDXnj_qF&vR@Ex8q9Kd8<}Y$0GjC%ixxG zdANw3<>BWEde^Hr+|xfn?@NTEb`rpQZn0xfiz;$)DHPjY(5328JHmEAzK@UdfUGTCx_YwTuFW~ zAAjO3VB44py3hpV?g3ccFUb49u8^F;gG!He7iKGLdH&r)Rot%a{js3=<~&$q?&4ldN5*P|B@L(r+FR9#zRZ)WxoCS zCN69jc|V;(H(Z0~3TI%JHYn1@!{KFS81`;rvN=2oyB%6m-a^`t+=U2y_0PMpxZ=jb ziiMHv44jM8WxE&y(P}?|GM!a!TABTnen)uX=+to)OI?gN+KJApO zU}63^(=5q4(k#)$`I$QFv?EQ^)Wv~0Hg437T%A*LT6t%QYc_gsokr_+bkl)v7H1VD zzYS6|W>*ngIP}mla#1?lR}0x@;deV0Gg@w)kTOoO-eZUT46n=2kY5UlMawnV`vy#` z&v=Qmu?{u0k_QKiyfxNy-=RTTUbB^s+==orMQGsH5bfAcK>{E1xV+-n#|J`oa2Pey zef(=8(5}N2aklwJLBj%(6`0V_AOMB>bja%ZXAa5vB5O0t1JX(#QV#EI*dt~s8^;mX z7F$r}Nq?15>q^h8iUe+kIsDpZ3xe^;jip}KK0c0?-W&gQ-om28%p)X*Y)Kb%Zsj}L zae#m04|(a`{N-!{iB~A@)@i?eABWepX1he1d4s)wT3%^X>#Vy5`5KTek!We*aaHgS zF>Gld^OiC-ab^zaL6!QFd?6|J+%VF%>FEBd= zLo|~f+nFw$fR9`DT_`QAzYZbw;9%4mb;I|?@%1_dG3@XRn_ly&kcBD<#dk*SSS9{Y z?mOz=WT)q^-Q{}gJA3-iNH#$!NpwL;g*}RyB#+! zx!V4}w5IFK#@wvW#_mxYXLijU57LmozcPQvN=tB(B@|w-ebbF4(Z`+iB-J&cKI1eS zAx=}fZ^Jk*!}A`VqQU6A$DVP(NiUMV$4(@gcbm5dS3B^rMM`LQqMd1VunqF}K&QRy zBH9D_7kvG5aTxL4VJCS5edhN=&Z7hFi*3(p+MAZ0>6LXlz69O+fM@Ocd+*jR;Wd;l zUhm&&=IoLt(%>T4Gn(wNorU%kJ?tjlwBi{kjw4g97O{K%J=+A~_-+liQ+ozGEc6<8 z2YB&atGEH(I|R6314hW^(Fec*YyCG4gl4#m{G*jZvsg;U@nZLH-3<7x{OS zf6hdu77Ft}(8}aQN|UEmnXBf*v-L`BI6EbRFu2g7OfA{x51#c_mbjfO819+hpjiB) zJme?!5;nPWxp3HS0h?sPux0!k*wg?#C0E8CY-`A;1n_0W2(cT$e%9orSn3`K(R&aO2yFUnImu0!xqEyjg0nAq95lq?TL|0y{$& zcQLH`;mGU+Y9GZl7EYk**S8#F1Mg4Y>ERh$pP#YyLXn+3x$y^G&YhNXC`{c8VyJUE z?OXs!ol{76QrloJ=iw>!FsZGt`o~AD&zI%Tjyg2sc^>Q=Xq;pez{O|2ajE!>XK`QR z6MSz)XB$r|r!`bB&Xsp3UAS5|!ksnOQ%P}f{2&UFCd21A9~DG_k<58?EQzOn{NDiV zCs3RK8+QS~y!wsKHi9TvY$bQUPvpbUby8E%vGoD8wVZ$1IauzhKLy(6{|0Cl!yVAR z0FSu<&Nk(7wq-QV-Wx#0d-G!urlXfPM3~Od&!5TRISkH;{s}H4sqjm9>bdZ+0C4r+ z>_PFd4d)vF|H(H>%%bJa zhwRV#++U0KM(I+lFg^Qbb`W2kA`V^n;471Q2;GLWxht1IX$b9)A~+=OuQLa=@#4vZ z2Wvhy;sKE8Es$xi^A-)k0^HEe09tg<6U(<52v20-t#^mm4z-Vzhx%XUu{NTnts67c?G=?r|+TQuD*w zUe}aFEv8TN77T|J;NsQETJy(3_@SXVsehxgujDz&FH16Xsv+O3Ph=U3*kmL_xQKm@ zZ_wukKQV5)ZZ#Ni_`95!SFq_D`p1~{&3$zSPEk#7_L}$4cr0omh@1^QVuP?wqTrZ- zk&J8J=f?X;cg;^RFY<(fK;$9mq`h|DOp=qFrGEqFq_NSyNLJi zAn##~rgz3uPRiVrxsiu2-8Lflq~#~cRV$xBTn>$ZG`&IOex5~MssEoA`LC%#Gtsy& zwLK^OB{06*_{JLF#XR@2!bHlSqMqGR;mQQds}^82KStb8HuQY~@^n(a(1Lzr;@+-o zBd-hAzMt$16S!|=R|tmOWopBZJ=J^+hebV>$5y`jb&@+~0;e{3%`dAXTL`wmWhky$ zqyauxNRBNLP19lhvZW#()XOjZeT2WckJ1E|PpmS>PJYv~U_a?vf<@T2Vxvm3J?zas zz*oBXFa0$FWsjS*C-+NWnQ=OI--|RpYCq|j%}iTL0peanCl68Nocl5P`#0Z%f{6e7 z4pd7)?jYnvQ>mu+`iy_nS~47 zULpW&q>@)%=JKS|Jd|x~@(BE1m&>b5a9hHS_Dk25uE0jgop0~@BJL+~_c#)&-*UPJ zX%O4k^rhZ$+A#H2hwks?GGcFaLD>8HY}hK+jX~Z?EDG&`1fjvHdxDgb5IK=G)nRY7 zmD|JVPtU&>h59(*p;(_iPu2796uVNSJGF03^+k!E3B2;erBcW=B`b@EGg7U>uCz<6 zDL7$oX<&x&uMVWcPnwBq4fb-;aePg|GNQMXN}_xsLPBksKIhmcbX|*9-cm<^;n)!x zq{SnC#exMTnVND-sxGOhDRsHrDxM;Hf#1ZxGN;_hQ4>U&oE{xqiH5ty>^HGfzJaPN zS_`$_0UX)8E~d0B&Ko(vx3JN2#Q>5w7YNF&>~*0FRkxl%P-BvbE0{lhI=4mK#_dGr<0y$?#=XYvGfvMKI(a!C?tV;A ziOh86abjww26vE)8=mYf<=ip*6#)gj@OU;EeHuO5S^)~IF&M52?%ihmKpDFEA4jY;QK4XINddtZ93)F>hSZNZ)e<~<#>=xz z0*8082Uk8}$l3t1Hh`>^?Otr4A{J@erv+)sqq2TVXrbky~TML$za3)GT zTP%@W=ZNieQicLlyv7r-a>&1OsF>B;X|N+B_c9 z6NvNeBtHT=i5Ko9-^~CBIpws+ET!D!ztjE#zpma4tikWMYn+Wl9^2{NQ|`?OosFKs zu;rxRM|wK^=#0l8+k%=1T1ODUz_!te?jmI6$ui6WY^9@vO;@t;c$l}i(r#BZEgFtT z(1(^+z-^eU#Rp#%UBAj*6OWi@4P_iHz7lG=g!^{~UjYOB;1)`F{M24t z45P8#x?sDTTP{zI=_CGKJjQWIAwVq>&V2$nmS4#OhmBh)cHUBj!S9D|qs_bH$3g4p zd~jjP_ZHDL@PG-Phg)7AYAADGEtnjA+DZ3FnAPt9AGU}OoV-HU8wQ)E>&`<)#^6Nk zK(SX;Ft0rNs?+{}ipO;5UBLa>IgGwARNoB(9vdF-*k7tK=zLj=zKP53( zIOoJWx*ddO%TXcP_8xkGVKz_m;?rR;3=K{iK^`oL6)HNN?&rmJ7gXO)$a$7kv;d>A zm2;k8uQYz*kC-oJjp)e39(eUq1`64G0#z_EC(Jx6lEcICY<9F?K?% zZK^)&OC*lDMyek7!v%P;J79Dw(=V`MdaIfHX@1Sg z8q2P{EkTI9wqBhias(Ky?|0026cnDr%7@$!M3JQ_y{&`aRYfBT+Q7+4E`%{41YB^O zGmYO2B=+6zdudz<7sa;xZAOqY!$o6PF?%J9a2TzzaBjCQMpm`wCDup$q zLG%;rn?a;1)%}H#`X~#xt=W+3B;|Qf(Okks_0b5{n2$M+T*q43`KC1rr4WCY7BS*s ze&}URUI_#$i5}ZYSf^0#Q`XgX?=1-Q#+~uso;;LJY|KGw5G0Ghv_);q$BVwZS?|Fr z%e@Y#@Ly6%KPp1W`#)%9vE-?f{R_0Kw!O#OMSYlM!yNew|9-F~MZS?ME6sj`x$}Jy zg7s@}7{n)gb`IONPfZ4d)`~hMX5rP`?psg19n&}aD}Bx9*sUz7_f<5zvCHI-xH!l{ z6F-d7H{xKy6<|g$;76SeQihpWfKP(R>2e*f5o2iH6e!^Bs6itQ`k^uPp2erQ`svlP zQ%I^Uh~}MMtW>hhrdqF&nlOK2W0P=FH!ehSh>(;@EKv%&vtaeck9mQ`BC{Ytk-iW9UVu5j%d$0}wV_;%Ke< zq}mg~tMNox3UqtBb;R2#mAs6)psZ<*JwZ^^ROMe)O3%93R3=E&6!;KX77C^p+8*3Qe573w4qnt3$Nhl*JGGHJvgWJ1!jrx&Fgc%66ycL6bG-V~{9Anw}jYNNKW zvNr4_Z{@qd{7k)SuvuM9Y+g;)9MXf$;>nMDL|tP!$Jgg|YcWSQnL$fcBRL;J<$Vq;O9Gd%5d~K8BFrOuWqzH!SIP(RiB9IU4CQZ!ja6IYPfN8! zSh6MC|Dw@&>TB8>6Ri)jPrbytx~jZ@um!Pf_Ab-`R@Lb$_Qf;UTN40=)p}3p0VjFo zL}7x}`r@e7DmZ+1oNqyqgx7$EP;0OkBrAwyLNvnsdi}Pp5e%=__<|M$=jtB}ZkdWkQ-+h2f*9$d%doRNub1&(n+WdBat zk8w@qU&7KglzCOfm4xj{zFmz}msGOuk`CVm{wo4c@#eL6lX?8eYU8x?+!af4i&`9Y zVK27E>$;vM3znC7ca@`HCVxl)@2)A*H8WZXH->}o$(gz`RZcG}^%lGiGD3Zoe!Tj7 z6#=ebVOcsX#ot%ZCyEGK#g`Vm?oKR#+e*76icQ$xO+BQn8&2^6?+0HpGY+Cg-Yx^k!e*FcjXk~2mu#w+jqmza* zP5h^lSJ2nJQ$^xX%~sa%R^P1eTbXv4dYG+XFVrE+S8lRa=~&+J5~tfg6Y+^@oYXFX zuzOIr(IZs%B>9QKf^;mX_t zWcl%)5tiHY3wOWQG`>ikl~SDjg0T5PnAGs%W##^nvTAvd-!?epmDkHmBu_tSM~;B;)?p8~*1e#Y;J zf5+wi$Q7Xxg-EgWEdnK{Bk6DzAw3JKv7?o{++2wF?Y1Cjt6?w4^1mKtq$+%A0qyx3);nW~PfD z)+lNt6{eKAv+suwqtejFVhX}3v9Q6*p`)LH))63`WH(pOpOlsqw*aBLvD4EU)Xozpo%y9-mvW# za<^!q`7HUR|2tYO&iw)Y9WeRau|btuqwToGE5q`F@P3i2nE{7?7#9>aMb~V4;$8&$F#8_+V@}hA~6J#WW z!I?9ekB{q>z23w_t4W1MDQv^!08O4`sJV|oV~CQf`Mz3L0lD5Wf9gP}X0dDZoBOQb zX_)U-EoR?#ayRs1x6LGRa{n88F{zn5E11*_Qb=;iB$67LJ0C%myTh&oHNZ+ApTh60!m-r`GCrCRp&VQ{Zy%BG#fCsRP~YU zuSNTN?`tFNrgE>U%)4%icMsw(48L+aBKkL7$iLEU6p4nr7U{0pB;a%eQ(^KDX1dR> zFSqL$Y3Z<7g_}CTw`Wb@>qQB?3YBtGv3Fe|N^Qve){Dq+(^)c{_E%}bTTXzhaY1{T z)K$S(I=s@_?5ChW`6m@+5NSV@fS~2YH29g@am2b6Aitg+DLLXr{++zE8v2qoy!`05 z^z2t?Pr(gKXPiFTbqzm`rj+FTG^HO3wv?L12QJ0Ep(BqS{ek^>+tD8=_t(|o;iON7 z^J$SpPvJ;%#7|D_DU6c^j%UaZgp$U91rO}2u1yR&8oYYhiQt9sLbn({OhIFQ2uPdY42qrat|h`oJp0F>w};M@zYbCE~V;lVa4?6 z!$HJKNRz_z*R%kcahqkhk+OUvRfH-9R)eb8I*EcrsQn?7epwT zE`)clI#n_IzEhsTx{mDIEmm#0%9>JU?Y@R@drh~gxs9%=ith+(% z-{vY|gn)~=rZ15a(!&Xx`LH>h%l^UzK9Ungc-*TIEhUWhRz$hswXQ`)(qamDBa#P2 z>rcWM!1U-cio6Ly*0xVP#tbY{tj@9DD!^uT5z1HF-b;Bl&a0c^RT09a;2k9LF3vKEF@8 zbo*J6VEvJF_yMtx*p?v1E}k?lq2RHAR51^1|DE5#raP^$91@m6T}sQifN_X)tGk)<%2W`T-}s#{lj}*t<`- zzrZGtE?h-SZC&A$Co7>8qTaz(?bW4GGD!bRlW6ol`2<@mop)BkN})p*j< zEnJ`|cF$JEx3BmY!cjFIW1|JM(6VfHm_Q)dl=e4h^6BD733!h0vsZKKc+G%l6aYE= zIRkE&I_dF&;HtOgZ=NDfWH}reutW7JfW-*s&{b>~Gm# zvXwYd9&O|_um|cjqcY*ZW7)DOZ%(Biu(bWu?dJ4)MU?xHsZWT?8@Y|J4;Tohy}8UT z2fm%;<454X`{oo$c2Xy|xOWB0FT-*;AxauC;3%=n$PKjr5b92j&AFH?;b z2fkR1X%M}7rdBxzwpTqWq!d1oE?kqoYP&b@lvm3GS?nv19j_f=yDfdEzo5uvtJJvZ z*yje^$3ar=2)$tA@wX8tzjOZk!WMse8uY!Sv2YHXuk8ELy4v<0yPHWMvLQs(5DD=w z1SUG>K0DKsKV%ivVel*NdF~>fe;__%V^&4}6}Z_31~#F*QNDSg;2xqtnte~3l5`!` zNApbM?8CRp;t@ILCqw>xvk~W|Qw4Y6zEH+YTTIaH1PjN&l>hl1{j9_P zpdbI$x+12pyfW6m@?V*9g275*Tt^ABG2o~Z>np?4YvsK_YZfR)79Q{!k#?CujZdph zLavIM2u-M~F%xZ8P6P#JsmXoQMsbc|`*Pl&?VP}aXF%b!EdcrXZ_Hg(p?mLe;jKlu-+Afr&(!%;kem?}$wzuj|oe~nG%OCrr&zlu2`&0go4oU0Z@65-)wVD&C znU8-vllHS;eb!8;Z};Qh))r^N<>EToPgy!9JYJh073Y@i^o-Nl8~$H==K@`Ib>;ux ziFYDx<_hX;e z-uvvc4+WiQZofa;{5G9kv-6*-coE>FX0{MA_E#-qVs9|Y#4k#Y*M<(W=F#qn1`@Oy zfllibjh_%dyhE=e>$DiM$f;OTop&-kb+U`s9s{y#g#|`QZO%o-%RPZN+Wzd?UhH)WNEoyHFy^Wj9MEqh4HP1OlGNyK!A?4Sy z1jirxw3<+Rz14GT{GlOa`>LxHf?Hj;993Oki;YheA~F?XAYOaYfcQAx@rR~ajW@<0 zDzy69f|8I$Lxe8>q?R8CM=_^ZhS;kT)ue=E!SORzw`LJqIsL<$L^eR)S4|rdHSK9N zZRYZ^i1-pMbWN%LVg@SJwx7@w>jW?KJ+{FMo{g!P{tma2Bm~5J*;M54n1M&{&=6I% z=vP&XepR&?B%Ij#9lJJBg)bjba@x_hpo;6-z63HqVM;{L)$Zv};$T^r{ar$W@)itZdGxXCkoZHjddR3zF4EWcPLx;ykqHlJhH)>7}F~%}5Hh#wmDp|Ah z>t&Ra;CH})rkp)v`ceeGFh3UI=5b#BYk)p0x|-A$?P%>EPD%k$o~oABk4cSqEq0}K znk3NY=)3pS-_d59(`GAdvu*Wl(fa<_c<`A25PkZeow_GmoM*AVSN)tB63eEbthNMU zMQXJF)0jok#^HEygQsWK=GtJF`l+PjYl*-jQadwLvgG=~AQO{(dhPaS<&kVS~D*0M^={8{BE zAh5sVa*m~vH&oL`@cj-^ka6QYZ*1Se9P-UTe^-WsFeeq{1+H=cp#a(P`tlmFEK~bs z)?4H1GnizYS;#ZiC|K1R5c+2}$`AEN%q6svSa@6=P;1Z)XU651QvVIjwR-g@>PakC zqkdpn@Za6y9R4^9R#j?~ZL|Ivr_KV|i|n2JXaofy_}0Kea%3gaA%a+I#1z(Tiq zP`qS_1ZRR}@NX(9fTj27n0`ms55Y5f|3FQdY`AMi4p9a!n-!^tbH1N;_*7fBr+g(u+?4urWQp{cb=FZPp5=D*;k6_^T(?=cV!Sq) zCE-v8c#;ONRvORipT)+I)cg;JS!Nm+5xMrhzJVjp2qs6qr^GIcl)8wjY%{-hSvXL+ zJU%0E)W#&b&50IU!SQZoAIY6$-wGg#r&{|FI6j)z%Ics}DA7)8#l}#(KmMN}aGc_O zU0J);V@!Y4K`6T?m1$;qa>}Z^6&e=^j^6S5nHKo5)KqZ}*Zn}v5-k4HXx005aN+8h z*wK*mrkOr6`@)Oj?>|6NYk&QNZMHSO&9&(0!^?0VwdobDe^mB|BmCECM7`>DA|Lrv zldr8m&C;MYh#`{ze*dHOf}CF|EdfXCA6G7o%H`<8szGhN%H&?Le!?krzpz*;H(q;| z74%5G;tFD_s~~pNJBCbX($Pj`1^BGrUSa6Cev6HPs^sZq+xS?@+2yqx547Yt{fD^S zzQ3WPASNu=Y6;>&eK~NFZFzr(tRUydMlJwK`XR37+ZH`$NJ1R+w?9AUM7L7vKS6PR z;|ypm{Z+m{V3qCBoHx!K$$7nh3utyCrgcGwA$%W7vpxa*j-tuaK|4u>GD4bOI7cG6 zoS>x5fy4xG@cnWxGH#j6?A5~nqZv|%pV>_UnAQ3*X7w&Chrg%)KYzH%>70^E$0*?cXv(8#mJ(96P%+n6ri6^yh3|_+Pfp z(BMJ})PiUmjMD%v&tv$&Wofl85aQDg=33ff5^~HCifdUT2p%%7NIU)F-~M3xt>U&6 z5_fP>!_5Q0n`(BxxPXyU4OgrmI>lkZWi8@Wt|)IPMRa`1%aEd2MVoKo?e^k567w=i zmFU=k;AM=aI`=*U0`_7|^@XcLFLA{2G~lZ_eZaG6QS7Q#;P_MplOpXwS&_Y z$o6H9NlK|}VgYnQ_0codWzFMXB90hpM`vZE)IF?9O9r0zLLgL7Q=hV`iav&GWWtS; z`o_x8ak$H-%F9t6c)a)4q5BL`U7g16Si5_9bj|9u1atKXwSWQc0n~kE2&G2rR`;Ws zxHdbNxEt)QnUl6w!2v|@<#=$(txUs^X!Th3Fj&vSxkI)~gS+-+nsmPok7HF^c=<$l zL78%c#9x7kY?JEaQy{ShJMmuGw{}Nbl)K*$O_SF8BtdLRxc*Hmh+*;98 zle_9%zU zvecASFDMk5;WywPiZXNpO*xmO8AKiE3+f&m70* zCz|a(&pHxuq(j^SxG4^U+2K2xzWml zQL+Ri$E`N$uc#S^Fgg6gU5sh_tZ$c-zJ%~##UWtRUUJz%8!j1t~E&1Gt+h* z>rcx|TK`$lf!$dO(R$o+kfWZ9rurn{YS}=l;`3T_606OM<1PO|>pQOJCk>7!j8T=; zd^=4B0^x)jnVq8{bH98WR1tT%?*V3iaqf{DezWfP ze$+{8IL1-$)HbK;6o4BHjT0$^eM9oV%adB2QrWn+qO~ym>K-N!LOHR6rC;||xtvB9 z*O@xpTJd5)S727W$W53Xm+o-X<*R{%uSQ=NRjICr6`@klvZ>!e2Y6EqwaEv0AK8XP zl;;t1U*t?co4{9jHs;L1-?)SfLqE+KJvym0?BF{1au?{q6kpc~xw6%(#E}9dwf_bi=?_CRSnEvE3BV!zn3jYf}dhz{|+p8 zZ0HDig864r+~MY9+k?}S`VQ{na~nii9DR5oL7hlNFRQuir>u2GpD1rD@@Tyx9@}>$ z>F{m+Vm19)l!85&2bwdmpWXRMJk+G~Wooi*pO$1;zH4JkxXz3~y-wpb4Pkg@zO~=l2nsbA5d9YN`qT^EIIoFNzfuI9n2b*8MsSeKz0L{UvR98j z8(8C^-XqLX4NpXaUh*JIiLx=F^60sEXlU0cX?w;Ptt<5%R&BUoIV2w9nl!@vQdZxn zKGDVBHSP@<-9$B+2*#ll^xBwN-K6cEQOaD-J(Q%=w#;l!*VeODyX~Xa);kg(S7avgnOF^*3^iz|2+z?OOax;wa`{gqd1JPFRj?BOx_PDni{jD>1v%jP; zLjQ~{1y#Tl=x;O0Jcol2&d;fJ%RyD0Q3ztdD0tu}S`S(zGpswQCZfs;=u~k&e=hor z7VPKkKY3|yt%^i*>yX%Pxe+YKEy8Yhw5GeoHdgl~5k;{F9W`XR!X_rG=yr_`e^+?g z60&txZEeW`VqMOUCrZI7^lW}|^DM??&CbhiBTpWBWW8A(vtL!Cxs) z+4_{4d2b#V!pbIHXLAQec?@DsWZKS@?eIT=OgY8AozJYJ`Md0ZFHeh`6db7{5Z}`# zCL|ED`tl+s7h-fXId|`g0eXoXG3OOr%X}@0sEAJL;QUJrgwx%;lvSpFh2;jRPY#7g zK7jm9@vx^20%wBdNzu2V@q&{P-D#%rr|->?*0@vzX!ExMP1xJRgX1$|-I#RUaWf6U zQBtFC5il}1ei$pAKOKRtx?n2;p`urV*%`V$IW;MBM|F2y8Qc-&s%?HMy1tk*BZFgx z#inw9SGPlKN21xSx&SvamD?kI+7L6gv}Uvz>xN!zVj#qm)1ZQrHn)ZI&^^`O6=lJN zGeM-}fZ`-YxiQTE^yybW4&}FsrIB-ah*Gx);aqo&BkV8#MGgMPA$KxY90H+OaVT@e z5&a%P7Ky8wTos>mTvsvUUlmE@AZ;g&2JF?Qeq~a!-MT?~m19mQPj2Mf`OV~k2Vafn zq_Xtdn0sw-E)PqyYv=CLyV9-E=}A=J5I>+$NBBvr-JSv23+)F0GZAlIeViqxcGpCk z{&v4UA%CiYCEd4^(wb*IYvX?=9y1p?v>yh|v-C2rb81@ch2L^|WsX=bef75ANIb2p zrwk8H$q;YH@I~u$)?J5}sqX{4^`N8YDIDVKHu(-_z$%Z5sI>zT*dJ zEuW?e{`v;%PUrz`cGc$10TzaOBhEyD2>||j;zQYxXD6E-TXCGDwBR;TWyO<@kF3vu zx8!It|8{3wTeVZrgJQbqGt1<3-7zxIWg?p5x7agE5f!eJlNoYaEuhb4LOit1C06?7 z%Ev{8K6ArqWF{HrB}MHGy{?h9xi?zYdj_4>1a<8t>#51n?QOB&a#=G|A-};h#pmWd z=)^0|tjf(hc7m3;ix`HgN5NRfax)znI_{PmT~tWz9N=s{c2^MHl(pT9S4}~sa_c}; z>JTMEr8oNyxJhg9l4#Y_dI-xXG8V$8gX45rSQ8qQ4p#?a4OfC#Q-SXw)&y%K*2bt( zxe?K4Ki0qbKk_1+F{+XghD`1T>Jf=CF+;-YqHhUvi@JBrb2kL@w1|le*OLBQzPmUYjA=Ll0C@_k#6w#^&cu)*#3L!|8{xqtpP()CI zj>=jab0Y@B z^58z0St)hjH)4eKILb+R-FM}xs_RN|Z8u!F?$RB#j^uJr+FD-%5jPB2wgwxx+}f*N zy)emTqZZ2l^+AwZ-B_m4vtz`T3xL>4>Z1@B#-Sod~3hhmlE`q2Cn8qb*d>sGYaYzM?p0h85G^U$8L4I+2Lp?(H3h!yP~@d zSzn7rT;IBm$7~pia6*j~CtibF968u~z^9tl1Wp4NkxNiso7v5RVWk?)XeTokXKHa+}l9M2{Ptw9e?HK0cka(dZOD)d20zur-mZ zITM>2%6wTK;I|||-pf(?h7gRTFXEw|BTO@(NGy4X9VUG?aKe-0p-i`%!-x`W#AacP zb_*k0_cO*O>JOtm6requfI@znpCW*jv#a+vHI`Rw@o%gl#gZX>30N2)MmTob>X3#< z?gkc}S{t*DC|hPjTSS?-Ln*5Zj40dCl_>j?5oMaXwYCJd6J=VfQ&u;NC^MZ+wZ&( zZCOt{MZ@JrYX2($4F@;P1`5l+rb%uCf%1MZy1V5Mg2{yus0!~1G? zg&gwK0bOc&nX6!jYx{!owCUGLJxwMKLAouiWq|IAz1a!B6)6O2oZS3HW>L+~PfrBU zD>$C(8yz3+Oz1JdMBp^n10T{DjpOLN;?t&>B5M&kNzRDcF?@-;J@Dmsi&_76$`ezE z2d8F;dTB$21Bt1U>aZ*jpf`v&GB|aZ;$?^Ya39fyM-__C3~;oX$ZT8}RG1is3RfwH zWivL}$A)dx8JrDUhdBtzIW9GJFWSwxF2=+%JUDFl|Amm@(+*pHCnEd;^h)GD;lho= zMX9*M%qGD9Pae!238yA;JMDIu@%zSx&v)qBcg2Kf3lmwTQnp-WC<fDub6mx!K%ia%ho~RuYLBhniPE4S0;X>F_$8C5%G_L*f8r^cF4CiKCCP7ssI? zTit4BYe!wIUhUPo$EgR$hK802FZgR=(t7>yotU)n2rt5ry9g$2IP*I&>2~Zxi{@bC zR@%b-UYPX31SYL~|JRuG(_oALTTFV7VVns}x=F70gGsCY7r>EKGYTT(@$+v|IC-Fnzgh)^%up&g?WI58wbqvBOiQ~fxIU0 z@}Gf=tBV{iE}Nq(|2nw1@_#Q}JaJ~>aPb5Jt~*Zx|J_=ox*l9y$-@5*%-Yj#&;_%W zh~YahYda5eXSa|M?}}U-eAjT^P5v^<7qS1eg@xDb}yS4SOxE-tRkrsa;mBz|23`V8}MTURvup5L~k*wR>d z!TXUlC!b?!iskF-N^@@}R?W_5ve<{-uv3HW(YzsuV#TJ0W6P3I6e5H=h%m{y=#u`? z?1Apd!REI&X&FUxWEjaDVW zPJq!JJ#m3}0+K*Z-lh5rv3!oT#Y2`pxD~sC_ucwt0PS39DfJ%!O^j|I`ex$(jKmUu zn1&Qk?e^t+>V7CeKJo03@r$ncp^9ak1ajAnFv*oFF4L{$^6c6gE7b{-y@n{e)xG{6 z6}SR<#&y2>Vb-$Y!KJstQFD6ew65*=F3g5;NotTU_a_L24OX25l?QQZ0gwE*!Pqv zJe9PgcScm5UosN5l?h%s|tWK>Ssi{-d>|R4aI9K3Y%A=bmwUO0d z9NW1zdU)Qe--$0JvaMpUoOrCcn%v{H-!phTaB+D2gDOGiED7{IeIlxOuZ0s0x zPS_R>oGBs)dF_buq!sfKLYnmWV07OiC^E9%>WsWdZd3G)!P%j~ zmlGdW*amKeGZI1#nk&~cuV_#ZsfC+|Ae)K8ixk+La3_j#JJjv&XocawMO|n;=CsXo8n52sxRKHHqKziq zGn)ZT+`QnQG%B`fRD9bw`dufA&2v?}nwX9^(5}|Awl%Pmr{o-)_+0c2UyYl@hL3aj z(;PVcibR52qbp9fjMLd@N5Gmgwv@Q3g3sSD=rr#JJ+0QP*y}e4er)d%lap2~P>1d{ zDDRD}9OA#f9W_QeIX2K&(Psz4ztlt+JPwjJcMBjlIgMBv!6$?H8#52AycA(MpPyn9 zJ&0G6JQ})|=Wa8nB(3}*{p$3p!TWmJJOw| zFpjg>Tds*^C8N8vDdg|JqMtk|8}F>vv9>8S^ZBY*@7$^M%yn2blVJXYke96d@QCrD z<;f?mF#Iude5m@;D0~+WaosoWY}k1b{6~le+%ht1?oD5T|6I>YDzAn(Zj0R@8Rd;c zh&wcIyOV1@5sJRemV0^Z5}r~fci2LjiaZ&&G%2&Sx;sY`(cPIPy02dKGD`$;SHA4HdYNvNEKTA)gk@)In|VIY zn1!t;{vPCN1oPsXP5z4kDNi-cnvK2%SJ#)Ler;Q3QMY#fYKQh-O()mv{P*iRxA!-l z+AI9!0_|Po+B*|wr&B-(tRnNe$m~_FFi3Q`X=qJzJ(^!JcgzzsL>Fm zFjFU3^^fPykElwkI^=6Ev&GF#kxXOoM`tEg<|II%;-d#zmh0z9E0e=S^)&L-K4FG zabMyk<`*o3=8tlN-d^!ddE#}J&gahr-0QSCKMJ9(iD0Bcl$9P}|5v?8wbw3J zJ`#IouVs&fJ6gq})!eoDJQY{B8rxC&haLqujTV8kL{9U0cu7#OCl^5iCWK-iFcd3g zm5_{-C!Tjt#u7)9FrL;Y+IU=r*o&F2DzTiJvjP=&+u)_t5i=HVRvddXHWF3XTQxI^wUiYvs^v-;wzv5 zqZpYrJAZdA?W5dJXso%roy|*`5Zq-Zl40PC=0B>VSWn~fMD|CxB$ok`9R=~&dd1(W z_;hZ}r6kp7Xp1;;%={*$<2a!kVh42WG?TF*fLj!C3qyI&Bpx>8lE&09gaHp(D?1u< zHx;9331#V$Vs&*at{|lISRm{7Vif@Q)F1F|+kb)9>gRCy8M9D>h{Y9*y5J!(3)}uy zH#U{a18;NhWq0U-ZVY!2n5x&c0$HBmPs+O1vdsuSqari&!YjY)auqpJL#x}{I#2!9 zXfUACMchs{45?<9AnrO5h)nt>lt(i-#n7e`uf0%+L4 z*8u&Roi`12YvDffh`v$B>uh-hYAmMI{f-|r+U<32w9;V{SmL$6|4+bJKZlsKEjAt{ z`K+_cQir|}D@%(T!f5-A_S3AhqAvGjov|M!$8lT*?8$n~{j@sIKjtuA(P)YQ%I^nYjHQgFeC`I4!(B!?#6w%mmsWv2~}EVdx9o zoF(i;wx8@txlpghf4j{cSIWRkvE_jw3@)Ao8ISUoK?j(`J5p9ZLgwgMBSuE_4UsvP zZbWu?`S%k8{v~x~qiV#)Els|0!JTCs#4Xf(=Icxi2E0`=u_>{7ZKjhcVmF%RfDRBq zI9|9Ja>q(7;?+oO-n&>wkH1g{&GRiXL3Ee?XSH(0UVE0-bFP`XBcR-mTfZ z9&NU8HmfVh;qLlT6cA|Hi(M#|2Esnw_cXEUi7jB26Disv0yFOu#tI)pzdO$~f6#K;eGNTUbyg1u(x6|fx$bfTT>r4@wo`2$n{1QbU(?(2R`@N1 zH=k;>ng1)pw|xCXKV*HY**U*c{`Xt{2KR-^w};DiY_f(*d!3cB!g8q954WS92C0%0pe;K$&>!%YbvEFwF;&e5u zP&~IG_M|MfA#}>(RVoe(&6J);>+c{={rPI%WOy!v2bLOQp|5f$q8lQ8I|7++quv#| z>`6t^Dm5c%a36%d=&Qkq(*bhHm+XyB?ia0QZKi`vIC33Q1VJJo_)z2d{8sxRbMkc83i+eF&cFTkN8?&>j>b7S@m#c=zEf-kyn z@Q|`)i+qT3M`VTn>>DaFb8L9!V@Ne()rK|!=sCb@t_&8K90=)^Yv@RS-%!uB?HgCJ zkT!2ds95`kh$QgO8Miclks*xy!(c7+XPFT3yt6!jReR=qWxuGuQ268dJRF&`wWmUa zRsH_%7v!qKZo5Ee;Q?s4OV24Br?YP&gz!ud2Mfs3hT10{Kg+POh>G z7c5#-ION zR(l%RT1PLrvFFR*Dmy=V!QcIE`RFH8v#K8I8=A2{oHbwHuQRevPJR07`V(1McdXv= z$AKsFvcCQ`zLq)uZ&}u7_5CK2rDVOY@v@%!{eQo>tR*Gu&4HwNGMuH{Z|pfVYv&*F z_;_}fa+^AEs!Knp!2ez1>NT*&{Zg~PbbgOgiiytkDjq&(^GR-{%-W1 z&tD(Sp7Yk|H(r=DH}%$}thcN0-dcG@U)R3w1O0jocW^j6&cXdpGu!HyUs5o4QBkMoQ;XA|O!ethr@ZL5b zCg{92N5x$wh2~%#&|EGnC@)w{;pG*sv`W9YN-Iw#RQfqqwq;ql)QYHF;OAOd3`hnP zx(veMvhusyilcgq3hpKMHlM}wD%(V?#@{)Sv-Gku>*x7gu_cpSijn#W`*6QF6oeM zd1-OQg5vq@EeMAzDvQc0itkf92GUOh3J1BS2oCd>(zwD7?gck`lM0GU!sA({i^{`= zMOuvu88HSzfHfCiQhbJgwsN|)*W#(S)YYXWTBZk(YC0>spN7S~17I{h%UPuFDGC=? zgclUwwSa6Z7ZjA(4shWlwmlHLt%#nJ7$NiTb(==n?DC?*s(D52<0ZYPDtPZ`&x@y>uJKe{GQU)@Jb(7I z&7Fe8>?tk*_H1|5TqDH3`0t+FaC-OVQDY0pgT1emtxqrx+l1=rxe5|;bKbS%sid2q zZN3x6=S*w&wS8}Capi)r`Hv~3l(wj2@@~56LQ&1%MQu-SrOho}7S>21lP)2hbG|w6 zLit|Qm&A!|6U)ok>0h{D9_DX_wZq4a!SK!3em()C2_^RwEGjPSFtpmnL`ArQ6|8uE zF%Vq3K;2YPRB1RtRhdBQL)-28Hx-nWlvairc7;Stw7&Crymr=SuT|H*qds?+UCY!e zubNj`RSv|)mXh=-Q@dAIW{{Povp2*)Y$Jp7o;%$=wFO)#ktQPdAk9f8e*H6Td^#KbxLG zy>2P0q=dqvWg1G8^CwQE*;Ha4*pNoKaI4a?yJ!1@Y<^YAJgrPjO$Oew%JPDFl@`ac z7!t0kVC(3VWVVLaY>oASgTn2}CztxAE-hZPC_J|)d{k>T}>hg7o{toAR<)8E(-#aqw;_)8Ile)IQYkj)5uS@oq zbdBG&ysq)PhQC+-UBDUYnqOCU*ZkiryleZr)~9Rxy5`q4{-0al_sYL(d%C*2)~Bnx zYy7TmFBt3*?9n4hrU!w6Q0NkXoFsF}1>D`bcfX`NVKVP0ylecf?ylu^4gYJqFYTFp zScERoV#+JsACR-~2Sf?RD~Oh2s> z`CkXC`DA%nA@J315igRI>X{-(W%+;jMFL(h67qUPF7Ymn^z@P=mw73XRPO_kE4(Ws zeZ0Pr4|!Kb`gvDJKI(le@^PY2NfmzBe;+t9M)EcJI!}EN@Pvz?&B- z^yWwI@`@vOdy68Az0ydTS01VGsv>A7Z~uUi{n5w#Mfmf&dEFxXc|qC`^g>>UmUNHs zM|*mBm(Zr9ND}S3)ax1P8RHE21Gs?q2-Z5-e7Nt+8+6gH`Kc}Vy*YCj|}&2 z@J2*NdZQv2X@6v@cS~ftH^aL%@&(UYADQFL^$H_JYP+}4TO28glts!TmEJwxGVeZb zxmOMRKS;g$czq&Q(jRGF8vSxb|13^J> z5F`W({Y4TZ?1Io}3w3e-PsX34T#8GID~q8K?h_`OS1@lOSn>pr@q$V*{MtyQTc+f- zu|QnH8^DTv7D#U1ct5Z`LA#$L=a{=*IGe^}Hegz1&w?c(%EOo=&OT3$p5d@);DkS} z@LWibj&9N9MHX41?px8*yT)bckoZDT6a(gmD}17SfFm#=#}y4u#x+Bs1xgqCajpp$ zE(OQ$=wY?&N$oA0p|<<|p)Us&XFTT6@$=_D7bMQX4soWm$617T z&THq-&*Il!@J!@0wl*~R{-77ezX1~=&J4woc-{r#Y{7dgaU^OJdaOenzdra}6i#Zd z%pJcze?D6g6Zwy+4N(Q}{5P%)^a>yBRvQe&g580O;_#XOr%!i(q(|VNdUW!?Jdl*p zeNrI5-Shl6@Eh1YH!!KApYr`i@TbAR!A|)y1}uO7S9X;-jm1#E1^#a-zrAt)9ltth z%;Tu=GJey(7VtDKUc^wE*KmdBNopna63-*5cZ`3%(voIx?YRoFkddw!wHq3s^G0Z8T zj$uw=&S84PXu29BhSMm_WXvo~38ose3bP)w39}8eA9D(voIx?YRoFkddw!wHq3s^G0Z8< zIZW@*k{*+e8HJgQnT09ARAW|Q)?+qdwqf>Tj$uw=&S82FBRwV^GYT^qGYeCKsm83r ztjBD^Y{Trw9K)Q#oWt~HA-furjv0lSjG2Wg!Bk^bVb)_dVYXrRV~$}?Va{QCBRY9C zCLJ>hGZ`}rQ-Z0+bo@5(AY@X9@!2sCZkjexBYN7zo1|aN zo0fOeMCOmpb)22PDflXGYdP~5douO|m7FVLPsN^Bfi8UPnu~c$JZ~y?<(c;Y`C?DQ zzF`r3OW&TifVTMdh62_)-ySB;oxZ)b$n$3VcJCqHbi%H7WXbdR`%R)h$dMeX{3KpRQkEhVuz?lOY2mx8NbW`~t&V zcoz01->vXG><8r52FEuCdw8F7E4&PM2JY=z2>BwoBfeYV4Y(U{e@qJ}-v-I0tB+s*R@_aPz;sLQd6duGD-9_~BM~Y65;f{KL3ahWbO{ z8MswOVti-eRvB_DJP)_ZNc7Jf+$uwEg_mJh8G$q$d=czn->vWl>=|-@z=Cb;XZdc0 zZ^oV{_vJ3U3Hu!1t?&cb%P@)gbsT%dcPqRVdxPAUy7V4%WrOclcq;DAxF1P!;hI}b zzFXm%TL*9_=4Tdel_9sn^Kh$-?2t=82e-_KCbvKTo3P6y=KlfgGWLzT>82aP1IJCy9~2&zJ~Vx3 z_}Yw&>oTstc35~I^m%#FqN0L|qCw$-7I@8P7Z)xZ(ev-miYZZ z`ELOG+X#Elsra`+^8d{sajRx}#R52Dl?8LX^aTYK3%vBgdrKuAl<$=k9q#r;vih#q)?=O2+(4x6)kBb1R4qhi@@r zPj3HsAOFSY&|aqP{zc!6gpc8G|DMnU8KEWwcDUN8K4`D>hDW3Q$ zGUBHszQn%xF+9W@Q9SWQWEu!el&fDE*apT+G5;_QOoShmA)|8j!2q{CTk#@cXT*=O zboeQrP^PgM?d|dx|3*f99l7P7h&Kg0)iJ)1_(n3~`6RwXxi{mHh_`?^GT{#GRXmye z4)GeUqpg^_xk~9i!A{@pm_&Z!Q_1+Ku7xMcE%4*1-dV(vd96bQ!xkIW79HaC|9-%e z@li*Mk;rdphj>GXBQvMHde#OdsOb>z!5;)XnKA|VUm`!qV{3={=ZYLHBa?xCSEh~ zy24rcZ|M+Ee8A8a@YBSgB1~~)p6L)zypIhi1IS^HB)+h3*~zcUSGli&=e_pKh1;>0 e@DAX&cncFqXNRyv8}PDk3T=5l;ovus$NvL&tORiY literal 0 HcmV?d00001 diff --git a/bin/libsecondlife.dll.config b/bin/libsecondlife.dll.config index c9ff7fffcb..e69de29bb2 100644 --- a/bin/libsecondlife.dll.config +++ b/bin/libsecondlife.dll.config @@ -1,5 +0,0 @@ - - - - - diff --git a/bin/openjpeg-dotnet.dll b/bin/openjpeg-dotnet.dll new file mode 100755 index 0000000000000000000000000000000000000000..50a6b454f157aa5debd8cd2e5116e1a4a2e27fa9 GIT binary patch literal 196608 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 H=0h{i!q#rT$^O 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 - + + @@ -118,7 +119,7 @@ - + @@ -140,7 +141,7 @@ - + @@ -166,7 +167,8 @@ ../../../bin/ - + + @@ -191,7 +193,7 @@ - + @@ -214,7 +216,8 @@ - + + @@ -244,7 +247,7 @@ - + @@ -273,7 +276,7 @@ - + @@ -324,7 +327,7 @@ ../../../../bin/ - + @@ -349,7 +352,7 @@ ../../../../bin/ - + @@ -378,7 +381,7 @@ - + @@ -401,7 +404,7 @@ ../../../../bin/ - + @@ -427,7 +430,7 @@ ../../../../bin/ - + @@ -455,7 +458,8 @@ - + + @@ -480,8 +484,7 @@ ../../../../bin/ - - + @@ -508,7 +511,7 @@ ../../../../bin/ - + @@ -531,7 +534,7 @@ ../../../../bin/ - + @@ -554,8 +557,7 @@ ../../../../bin/ - - + @@ -579,8 +581,7 @@ ../../../../bin/ - - + @@ -608,14 +609,13 @@ ../../../../bin/ - - + + - @@ -638,7 +638,8 @@ ../../../../bin/ - + + @@ -666,7 +667,7 @@ - + @@ -697,7 +698,8 @@ - + + @@ -728,7 +730,7 @@ - + @@ -761,7 +763,7 @@ - + @@ -787,8 +789,8 @@ - - + + @@ -830,8 +832,7 @@ ../../../bin/ - - + @@ -866,8 +867,8 @@ ../../../../bin/ - - + + @@ -903,7 +904,7 @@ ../../../bin/ - + @@ -930,7 +931,7 @@ - + @@ -959,7 +960,7 @@ ../../../../bin/ - + @@ -1009,7 +1010,7 @@ - + @@ -1039,8 +1040,8 @@ - - + + @@ -1077,7 +1078,7 @@ - + @@ -1111,7 +1112,7 @@ - + @@ -1147,7 +1148,7 @@ - + @@ -1181,7 +1182,7 @@ - + @@ -1218,7 +1219,8 @@ - + + @@ -1262,7 +1264,8 @@ - + + @@ -1284,7 +1287,8 @@ ../../../../bin/ - + + @@ -1316,7 +1320,8 @@ - + + @@ -1350,7 +1355,8 @@ - + + @@ -1382,7 +1388,8 @@ - + + @@ -1414,7 +1421,8 @@ - + + @@ -1467,13 +1475,12 @@ - + - @@ -1526,14 +1533,13 @@ - + - @@ -1561,14 +1567,13 @@ - + - @@ -1596,7 +1601,8 @@ - + + @@ -1606,7 +1612,6 @@ - @@ -1637,7 +1642,7 @@ - + @@ -1687,7 +1692,7 @@ - + @@ -1725,7 +1730,7 @@ - + @@ -1737,7 +1742,6 @@ - @@ -1767,7 +1771,7 @@ - + @@ -1799,7 +1803,8 @@ - + + @@ -1830,7 +1835,7 @@ - + @@ -1862,7 +1867,8 @@ - + + @@ -1892,7 +1898,7 @@ - + @@ -1922,7 +1928,8 @@ - + + @@ -1949,7 +1956,8 @@ - + + @@ -1957,7 +1965,6 @@ - @@ -2008,14 +2015,13 @@ - + - @@ -2054,8 +2060,8 @@ - - + + @@ -2085,7 +2091,7 @@ - + @@ -2116,8 +2122,7 @@ - - + @@ -2152,7 +2157,8 @@ ../../../bin/ - + + @@ -2222,7 +2228,8 @@ - + + @@ -2244,7 +2251,8 @@ ../../bin/ - + +