From 9821c4f566e11c75c8d87721777480c5b2e2bd4e Mon Sep 17 00:00:00 2001 From: Revolution Date: Sun, 14 Feb 2010 15:41:57 -0600 Subject: Revolution is on the roll again! :) Fixes: Undo, T-pose of others on login, modifiedBulletX works again, feet now stand on the ground instead of in the ground, adds checks to CombatModule. Adds: Redo, Land Undo, checks to agentUpdate (so one can not fall off of a region), more vehicle parts. Finishes almost all of LSL (1 function left, 2 events). Direct flames and kudos to Revolution, please Signed-off-by: Melanie --- .../Region/ClientStack/LindenUDP/LLClientView.cs | 56 ++- .../CoreModules/Avatar/Combat/CombatModule.cs | 14 +- .../Region/CoreModules/World/Sound/SoundModule.cs | 14 +- .../CoreModules/World/Terrain/TerrainModule.cs | 41 +++ .../Region/Examples/SimpleModule/MyNpcCharacter.cs | 2 + .../Region/Framework/Interfaces/ISoundModule.cs | 4 +- .../Region/Framework/Interfaces/ITerrainModule.cs | 2 + .../Scenes/Animation/ScenePresenceAnimator.cs | 13 +- OpenSim/Region/Framework/Scenes/Scene.cs | 47 ++- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 9 + .../Region/Framework/Scenes/SceneObjectGroup.cs | 139 +++++-- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 340 +++++++++++++++-- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 89 ++++- OpenSim/Region/Framework/Scenes/UndoState.cs | 79 +++- .../Server/IRCClientView.cs | 2 + .../Scripting/Minimodule/SOPObject.cs | 2 +- .../OptionalModules/Scripting/Minimodule/World.cs | 4 +- .../Region/OptionalModules/World/NPC/NPCAvatar.cs | 2 + .../BasicPhysicsPlugin/BasicPhysicsActor.cs | 5 + .../BulletDotNETPlugin/BulletDotNETCharacter.cs | 5 + .../Physics/BulletDotNETPlugin/BulletDotNETPrim.cs | 5 + .../Region/Physics/BulletXPlugin/BulletXPlugin.cs | 19 +- OpenSim/Region/Physics/Manager/PhysicsActor.cs | 6 + OpenSim/Region/Physics/Manager/VehicleConstants.cs | 12 +- OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 5 + OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs | 401 +++++++++++++++++++-- OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 5 + OpenSim/Region/Physics/POSPlugin/POSCharacter.cs | 2 + OpenSim/Region/Physics/POSPlugin/POSPrim.cs | 2 + OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs | 4 + .../Shared/Api/Implementation/LSL_Api.cs | 257 ++++++++++--- .../Shared/Api/Runtime/LSL_Constants.cs | 8 + 32 files changed, 1380 insertions(+), 215 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index e39323f..9fe61a7 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -233,6 +233,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP public event ObjectBuy OnObjectBuy; public event BuyObjectInventory OnBuyObjectInventory; public event AgentSit OnUndo; + public event AgentSit OnRedo; + public event LandUndo OnLandUndo; public event ForceReleaseControls OnForceReleaseControls; public event GodLandStatRequest OnLandStatRequest; public event RequestObjectPropertiesFamily OnObjectGroupRequest; @@ -4667,6 +4669,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP AddLocalPacketHandler(PacketType.ObjectName, HandleObjectName, false); AddLocalPacketHandler(PacketType.ObjectPermissions, HandleObjectPermissions, false); AddLocalPacketHandler(PacketType.Undo, HandleUndo, false); + AddLocalPacketHandler(PacketType.UndoLand, HandleLandUndo, false); + AddLocalPacketHandler(PacketType.Redo, HandleRedo, false); AddLocalPacketHandler(PacketType.ObjectDuplicateOnRay, HandleObjectDuplicateOnRay); AddLocalPacketHandler(PacketType.RequestObjectPropertiesFamily, HandleRequestObjectPropertiesFamily, false); AddLocalPacketHandler(PacketType.ObjectIncludeInSearch, HandleObjectIncludeInSearch); @@ -5836,7 +5840,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP handlerSoundTrigger(soundTriggerPacket.SoundData.SoundID, soundTriggerPacket.SoundData.OwnerID, soundTriggerPacket.SoundData.ObjectID, soundTriggerPacket.SoundData.ParentID, soundTriggerPacket.SoundData.Gain, soundTriggerPacket.SoundData.Position, - soundTriggerPacket.SoundData.Handle); + soundTriggerPacket.SoundData.Handle, 0); } return true; @@ -6734,6 +6738,56 @@ namespace OpenSim.Region.ClientStack.LindenUDP return true; } + private bool HandleLandUndo(IClientAPI sender, Packet Pack) + { + UndoLandPacket undolanditem = (UndoLandPacket)Pack; + + #region Packet Session and User Check + if (m_checkPackets) + { + if (undolanditem.AgentData.SessionID != SessionId || + undolanditem.AgentData.AgentID != AgentId) + return true; + } + #endregion + + LandUndo handlerOnUndo = OnLandUndo; + if (handlerOnUndo != null) + { + handlerOnUndo(this); + } + return true; + } + + private bool HandleRedo(IClientAPI sender, Packet Pack) + { + RedoPacket redoitem = (RedoPacket)Pack; + + #region Packet Session and User Check + if (m_checkPackets) + { + if (redoitem.AgentData.SessionID != SessionId || + redoitem.AgentData.AgentID != AgentId) + return true; + } + #endregion + + if (redoitem.ObjectData.Length > 0) + { + for (int i = 0; i < redoitem.ObjectData.Length; i++) + { + UUID objiD = redoitem.ObjectData[i].ObjectID; + AgentSit handlerOnRedo = OnRedo; + if (handlerOnRedo != null) + { + handlerOnRedo(this, objiD); + } + + } + } + return true; + } + private bool HandleObjectDuplicateOnRay(IClientAPI sender, Packet Pack) { ObjectDuplicateOnRayPacket dupeOnRay = (ObjectDuplicateOnRayPacket)Pack; diff --git a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs index 61b6d65..4069991 100644 --- a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs @@ -148,13 +148,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) { ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); - if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0) + try { - avatar.Invulnerable = false; + if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0) + { + avatar.Invulnerable = false; + } + else + { + avatar.Invulnerable = true; + } } - else + catch (Exception ex) { - avatar.Invulnerable = true; } } } diff --git a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs index 37f1f2e..1f5a4ff 100644 --- a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs +++ b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs @@ -60,7 +60,7 @@ namespace OpenSim.Region.CoreModules.World.Sound } public virtual void PlayAttachedSound( - UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags) + UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags, float radius) { foreach (ScenePresence p in m_scene.GetAvatars()) { @@ -69,14 +69,17 @@ namespace OpenSim.Region.CoreModules.World.Sound continue; // Scale by distance - gain = (float)((double)gain*((100.0 - dis) / 100.0)); + if (radius == 0) + gain = (float)((double)gain * ((100.0 - dis) / 100.0)); + else + gain = (float)((double)gain * ((radius - dis) / radius)); p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)gain, flags); } } public virtual void TriggerSound( - UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle) + UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle, float radius) { foreach (ScenePresence p in m_scene.GetAvatars()) { @@ -85,7 +88,10 @@ namespace OpenSim.Region.CoreModules.World.Sound continue; // Scale by distance - gain = (float)((double)gain*((100.0 - dis) / 100.0)); + if (radius == 0) + gain = (float)((double)gain * ((100.0 - dis) / 100.0)); + else + gain = (float)((double)gain * ((radius - dis) / radius)); p.ControllingClient.SendTriggeredSound( soundId, ownerID, objectID, parentID, handle, position, (float)gain); diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index a40828b..1e7ea7b 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs @@ -84,6 +84,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain private ITerrainChannel m_revert; private Scene m_scene; private volatile bool m_tainted; + private readonly UndoStack m_undo = new UndoStack(5); #region ICommandableModule Members @@ -174,6 +175,11 @@ namespace OpenSim.Region.CoreModules.World.Terrain #region ITerrainModule Members + public void UndoTerrain(ITerrainChannel channel) + { + m_channel = channel; + } + /// /// Loads a terrain file from disk and installs it in the scene. /// @@ -574,6 +580,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain { client.OnModifyTerrain += client_OnModifyTerrain; client.OnBakeTerrain += client_OnBakeTerrain; + client.OnLandUndo += client_OnLandUndo; } /// @@ -664,6 +671,19 @@ namespace OpenSim.Region.CoreModules.World.Terrain return changesLimited; } + private void client_OnLandUndo(IClientAPI client) + { + lock (m_undo) + { + if (m_undo.Count > 0) + { + LandUndoState goback = m_undo.Pop(); + if (goback != null) + goback.PlaybackState(); + } + } + } + /// /// Sends a copy of the current terrain to the scenes clients /// @@ -718,6 +738,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain } if (allowed) { + StoreUndoState(); m_painteffects[(StandardTerrainEffects) action].PaintEffect( m_channel, allowMask, west, south, height, size, seconds); @@ -758,6 +779,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain if (allowed) { + StoreUndoState(); m_floodeffects[(StandardTerrainEffects) action].FloodEffect( m_channel, fillArea, size); @@ -782,6 +804,25 @@ namespace OpenSim.Region.CoreModules.World.Terrain } } + private void StoreUndoState() + { + lock (m_undo) + { + if (m_undo.Count > 0) + { + LandUndoState last = m_undo.Peek(); + if (last != null) + { + if (last.Compare(m_channel)) + return; + } + } + + LandUndoState nUndo = new LandUndoState(this, m_channel); + m_undo.Push(nUndo); + } + } + #region Console Commands private void InterfaceLoadFile(Object[] args) diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 0bd1a26..ce9362f 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs @@ -194,6 +194,8 @@ namespace OpenSim.Region.Examples.SimpleModule public event ObjectBuy OnObjectBuy; public event BuyObjectInventory OnBuyObjectInventory; public event AgentSit OnUndo; + public event AgentSit OnRedo; + public event LandUndo OnLandUndo; public event ForceReleaseControls OnForceReleaseControls; diff --git a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs index 379fabd..6117a80 100644 --- a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs +++ b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs @@ -32,9 +32,9 @@ namespace OpenSim.Region.Framework.Interfaces { public interface ISoundModule { - void PlayAttachedSound(UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags); + void PlayAttachedSound(UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags, float radius); void TriggerSound( - UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle); + UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle, float radius); } } \ No newline at end of file diff --git a/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs b/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs index 7caac55..5947afb 100644 --- a/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs +++ b/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs @@ -62,5 +62,7 @@ namespace OpenSim.Region.Framework.Interfaces void SaveToStream(string filename, Stream stream); void InstallPlugin(string name, ITerrainEffect plug); + + void UndoTerrain(ITerrainChannel channel); } } diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index fd526eb..712dcc7 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs @@ -418,15 +418,12 @@ namespace OpenSim.Region.Framework.Scenes.Animation { if (m_scenePresence.IsChildAgent) return; - - UUID[] animIDs; - int[] sequenceNums; - UUID[] objectIDs; - m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs); - - m_scenePresence.ControllingClient.SendAnimations( - animIDs, sequenceNums, m_scenePresence.ControllingClient.AgentId, objectIDs); + m_scenePresence.Scene.ForEachScenePresence( + delegate(ScenePresence SP) + { + SP.Animator.SendAnimPack(); + }); } /// diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 2909311..c7fb32a 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1976,6 +1976,23 @@ namespace OpenSim.Region.Framework.Scenes return; } + if (grp.RootPart.RETURN_AT_EDGE) + { + // We remove the object here + try + { + List objects = new List(); + objects.Add(grp); + SceneObjectGroup[] objectsArray = objects.ToArray(); + returnObjects(objectsArray, UUID.Zero); + } + catch (Exception) + { + m_log.Warn("[DATABASE]: exception when trying to return the prim that crossed the border."); + } + return; + } + int thisx = (int)RegionInfo.RegionLocX; int thisy = (int)RegionInfo.RegionLocY; Vector3 EastCross = new Vector3(0.1f,0,0); @@ -2044,19 +2061,25 @@ namespace OpenSim.Region.Framework.Scenes Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S); //(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize) - if (crossedBordery.BorderLine.Z > 0) + try { - pos.Y = ((pos.Y + crossedBordery.BorderLine.Z)); - changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize); - } - else - pos.Y = ((pos.Y + Constants.RegionSize)); + if (crossedBordery.BorderLine.Z > 0) + { + pos.Y = ((pos.Y + crossedBordery.BorderLine.Z)); + changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize); + } + else + pos.Y = ((pos.Y + Constants.RegionSize)); - newRegionHandle - = Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize), - (uint)((thisy + changeY) * Constants.RegionSize)); - // x - 1 - // y + 1 + newRegionHandle + = Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize), + (uint)((thisy + changeY) * Constants.RegionSize)); + // x - 1 + // y + 1 + } + catch (Exception ex) + { + } } else { @@ -2684,6 +2707,7 @@ namespace OpenSim.Region.Framework.Scenes client.OnGrabUpdate += ProcessObjectGrabUpdate; client.OnDeGrabObject += ProcessObjectDeGrab; client.OnUndo += m_sceneGraph.HandleUndo; + client.OnRedo += m_sceneGraph.HandleRedo; client.OnObjectDescription += m_sceneGraph.PrimDescription; client.OnObjectDrop += m_sceneGraph.DropObject; client.OnObjectSaleInfo += ObjectSaleInfo; @@ -2838,6 +2862,7 @@ namespace OpenSim.Region.Framework.Scenes client.OnGrabObject -= ProcessObjectGrab; client.OnDeGrabObject -= ProcessObjectDeGrab; client.OnUndo -= m_sceneGraph.HandleUndo; + client.OnRedo -= m_sceneGraph.HandleRedo; client.OnObjectDescription -= m_sceneGraph.PrimDescription; client.OnObjectDrop -= m_sceneGraph.DropObject; client.OnObjectSaleInfo -= ObjectSaleInfo; diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 1ac061a..2b13181 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -452,6 +452,15 @@ namespace OpenSim.Region.Framework.Scenes part.Undo(); } } + protected internal void HandleRedo(IClientAPI remoteClient, UUID primId) + { + if (primId != UUID.Zero) + { + SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId); + if (part != null) + part.Redo(); + } + } protected internal void HandleObjectGroupUpdate( IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index af46659..fe9dd9b 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -298,7 +298,16 @@ namespace OpenSim.Region.Framework.Scenes { m_scene.CrossPrimGroupIntoNewRegion(val, this, true); } - + if (RootPart.GetStatusSandbox()) + { + if (Util.GetDistanceTo(RootPart.StatusSandboxPos, value) > 10) + { + RootPart.ScriptSetPhysicsStatus(false); + Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), + ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false); + return; + } + } lock (m_parts) { foreach (SceneObjectPart part in m_parts.Values) @@ -398,6 +407,34 @@ namespace OpenSim.Region.Framework.Scenes } } + private SceneObjectPart m_PlaySoundMasterPrim = null; + public SceneObjectPart PlaySoundMasterPrim + { + get { return m_PlaySoundMasterPrim; } + set { m_PlaySoundMasterPrim = value; } + } + + private List m_PlaySoundSlavePrims = new List(); + public List PlaySoundSlavePrims + { + get { return m_LoopSoundSlavePrims; } + set { m_LoopSoundSlavePrims = value; } + } + + private SceneObjectPart m_LoopSoundMasterPrim = null; + public SceneObjectPart LoopSoundMasterPrim + { + get { return m_LoopSoundMasterPrim; } + set { m_LoopSoundMasterPrim = value; } + } + + private List m_LoopSoundSlavePrims = new List(); + public List LoopSoundSlavePrims + { + get { return m_LoopSoundSlavePrims; } + set { m_LoopSoundSlavePrims = value; } + } + // The UUID for the Region this Object is in. public UUID RegionUUID { @@ -1779,32 +1816,6 @@ namespace OpenSim.Region.Framework.Scenes } } - public void rotLookAt(Quaternion target, float strength, float damping) - { - SceneObjectPart rootpart = m_rootPart; - if (rootpart != null) - { - if (IsAttachment) - { - /* - ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar); - if (avatar != null) - { - Rotate the Av? - } */ - } - else - { - if (rootpart.PhysActor != null) - { - rootpart.PhysActor.APIDTarget = new Quaternion(target.X, target.Y, target.Z, target.W); - rootpart.PhysActor.APIDStrength = strength; - rootpart.PhysActor.APIDDamping = damping; - rootpart.PhysActor.APIDActive = true; - } - } - } - } public void stopLookAt() { SceneObjectPart rootpart = m_rootPart; @@ -1963,6 +1974,8 @@ namespace OpenSim.Region.Framework.Scenes foreach (SceneObjectPart part in m_parts.Values) { + if (!IsSelected) + part.UpdateLookAt(); part.SendScheduledUpdates(); } } @@ -2452,11 +2465,14 @@ namespace OpenSim.Region.Framework.Scenes { if (m_rootPart.PhysActor.IsPhysical) { - Vector3 llmoveforce = pos - AbsolutePosition; - Vector3 grabforce = llmoveforce; - grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass; - m_rootPart.PhysActor.AddForce(grabforce,true); - m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); + if (!m_rootPart.BlockGrab) + { + Vector3 llmoveforce = pos - AbsolutePosition; + Vector3 grabforce = llmoveforce; + grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass; + m_rootPart.PhysActor.AddForce(grabforce, true); + m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); + } } else { @@ -2812,6 +2828,7 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart part = GetChildPart(localID); if (part != null) { + part.IgnoreUndoUpdate = true; if (scale.X > m_scene.m_maxNonphys) scale.X = m_scene.m_maxNonphys; if (scale.Y > m_scene.m_maxNonphys) @@ -2839,6 +2856,7 @@ namespace OpenSim.Region.Framework.Scenes { if (obPart.UUID != m_rootPart.UUID) { + obPart.IgnoreUndoUpdate = true; Vector3 oldSize = new Vector3(obPart.Scale); float f = 1.0f; @@ -2898,6 +2916,8 @@ namespace OpenSim.Region.Framework.Scenes z *= a; } } + obPart.IgnoreUndoUpdate = false; + obPart.StoreUndoState(); } } } @@ -2913,6 +2933,7 @@ namespace OpenSim.Region.Framework.Scenes { foreach (SceneObjectPart obPart in m_parts.Values) { + obPart.IgnoreUndoUpdate = true; if (obPart.UUID != m_rootPart.UUID) { Vector3 currentpos = new Vector3(obPart.OffsetPosition); @@ -2926,6 +2947,8 @@ namespace OpenSim.Region.Framework.Scenes obPart.Resize(newSize); obPart.UpdateOffSet(currentpos); } + obPart.IgnoreUndoUpdate = false; + obPart.StoreUndoState(); } } @@ -2935,6 +2958,8 @@ namespace OpenSim.Region.Framework.Scenes m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor); } + part.IgnoreUndoUpdate = false; + part.StoreUndoState(); HasGroupChanged = true; ScheduleGroupForTerseUpdate(); } @@ -2950,13 +2975,26 @@ namespace OpenSim.Region.Framework.Scenes /// public void UpdateGroupPosition(Vector3 pos) { + foreach (SceneObjectPart part in Children.Values) + { + part.StoreUndoState(); + } if (m_scene.EventManager.TriggerGroupMove(UUID, pos)) { if (IsAttachment) { m_rootPart.AttachedPos = pos; } - + if (RootPart.GetStatusSandbox()) + { + if (Util.GetDistanceTo(RootPart.StatusSandboxPos, pos) > 10) + { + RootPart.ScriptSetPhysicsStatus(false); + pos = AbsolutePosition; + Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), + ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false); + } + } AbsolutePosition = pos; HasGroupChanged = true; @@ -2975,7 +3013,10 @@ namespace OpenSim.Region.Framework.Scenes public void UpdateSinglePosition(Vector3 pos, uint localID) { SceneObjectPart part = GetChildPart(localID); - + foreach (SceneObjectPart parts in Children.Values) + { + parts.StoreUndoState(); + } if (part != null) { if (part.UUID == m_rootPart.UUID) @@ -2997,6 +3038,10 @@ namespace OpenSim.Region.Framework.Scenes /// private void UpdateRootPosition(Vector3 pos) { + foreach (SceneObjectPart part in Children.Values) + { + part.StoreUndoState(); + } Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); Vector3 oldPos = new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X, @@ -3040,6 +3085,10 @@ namespace OpenSim.Region.Framework.Scenes /// public void UpdateGroupRotationR(Quaternion rot) { + foreach (SceneObjectPart parts in Children.Values) + { + parts.StoreUndoState(); + } m_rootPart.UpdateRotation(rot); PhysicsActor actor = m_rootPart.PhysActor; @@ -3060,6 +3109,10 @@ namespace OpenSim.Region.Framework.Scenes /// public void UpdateGroupRotationPR(Vector3 pos, Quaternion rot) { + foreach (SceneObjectPart parts in Children.Values) + { + parts.StoreUndoState(); + } m_rootPart.UpdateRotation(rot); PhysicsActor actor = m_rootPart.PhysActor; @@ -3083,6 +3136,10 @@ namespace OpenSim.Region.Framework.Scenes public void UpdateSingleRotation(Quaternion rot, uint localID) { SceneObjectPart part = GetChildPart(localID); + foreach (SceneObjectPart parts in Children.Values) + { + parts.StoreUndoState(); + } if (part != null) { if (part.UUID == m_rootPart.UUID) @@ -3113,8 +3170,11 @@ namespace OpenSim.Region.Framework.Scenes } else { + part.IgnoreUndoUpdate = true; part.UpdateRotation(rot); part.OffsetPosition = pos; + part.IgnoreUndoUpdate = false; + part.StoreUndoState(); } } } @@ -3128,6 +3188,7 @@ namespace OpenSim.Region.Framework.Scenes Quaternion axRot = rot; Quaternion oldParentRot = m_rootPart.RotationOffset; + m_rootPart.StoreUndoState(); m_rootPart.UpdateRotation(rot); if (m_rootPart.PhysActor != null) { @@ -3141,6 +3202,7 @@ namespace OpenSim.Region.Framework.Scenes { if (prim.UUID != m_rootPart.UUID) { + prim.IgnoreUndoUpdate = true; Vector3 axPos = prim.OffsetPosition; axPos *= oldParentRot; axPos *= Quaternion.Inverse(axRot); @@ -3153,7 +3215,14 @@ namespace OpenSim.Region.Framework.Scenes } } } - + foreach (SceneObjectPart childpart in Children.Values) + { + if (childpart != m_rootPart) + { + childpart.IgnoreUndoUpdate = false; + childpart.StoreUndoState(); + } + } m_rootPart.ScheduleTerseUpdate(); } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index dd797fc..d339208 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -133,6 +133,18 @@ namespace OpenSim.Region.Framework.Scenes [XmlIgnore] public bool DIE_AT_EDGE; + [XmlIgnore] + public bool RETURN_AT_EDGE; + + [XmlIgnore] + public bool BlockGrab; + + [XmlIgnore] + public bool StatusSandbox; + + [XmlIgnore] + public Vector3 StatusSandboxPos; + // TODO: This needs to be persisted in next XML version update! [XmlIgnore] public readonly int[] PayPrice = {-2,-2,-2,-2,-2}; @@ -219,6 +231,15 @@ namespace OpenSim.Region.Framework.Scenes [XmlIgnore] public Quaternion SpinOldOrientation = Quaternion.Identity; + [XmlIgnore] + public Quaternion m_APIDTarget = Quaternion.Identity; + + [XmlIgnore] + public float m_APIDDamp = 0; + + [XmlIgnore] + public float m_APIDStrength = 0; + /// /// This part's inventory /// @@ -233,6 +254,9 @@ namespace OpenSim.Region.Framework.Scenes public bool Undoing; [XmlIgnore] + public bool IgnoreUndoUpdate = false; + + [XmlIgnore] private PrimFlags LocalFlags; [XmlIgnore] private float m_damage = -1.0f; @@ -253,6 +277,7 @@ namespace OpenSim.Region.Framework.Scenes private string m_text = String.Empty; private string m_touchName = String.Empty; private readonly UndoStack m_undo = new UndoStack(5); + private readonly UndoStack m_redo = new UndoStack(5); private UUID _creatorID; private bool m_passTouches; @@ -501,6 +526,27 @@ namespace OpenSim.Region.Framework.Scenes } } + [XmlIgnore] + public Quaternion APIDTarget + { + get { return m_APIDTarget; } + set { m_APIDTarget = value; } + } + + [XmlIgnore] + public float APIDDamp + { + get { return m_APIDDamp; } + set { m_APIDDamp = value; } + } + + [XmlIgnore] + public float APIDStrength + { + get { return m_APIDStrength; } + set { m_APIDStrength = value; } + } + public ulong RegionHandle { get { return m_regionHandle; } @@ -512,6 +558,33 @@ namespace OpenSim.Region.Framework.Scenes get { return m_scriptAccessPin; } set { m_scriptAccessPin = (int)value; } } + private SceneObjectPart m_PlaySoundMasterPrim = null; + public SceneObjectPart PlaySoundMasterPrim + { + get { return m_PlaySoundMasterPrim; } + set { m_PlaySoundMasterPrim = value; } + } + + private List m_PlaySoundSlavePrims = new List(); + public List PlaySoundSlavePrims + { + get { return m_LoopSoundSlavePrims; } + set { m_LoopSoundSlavePrims = value; } + } + + private SceneObjectPart m_LoopSoundMasterPrim = null; + public SceneObjectPart LoopSoundMasterPrim + { + get { return m_LoopSoundMasterPrim; } + set { m_LoopSoundMasterPrim = value; } + } + + private List m_LoopSoundSlavePrims = new List(); + public List LoopSoundSlavePrims + { + get { return m_LoopSoundSlavePrims; } + set { m_LoopSoundSlavePrims = value; } + } [XmlIgnore] public Byte[] TextureAnimation @@ -573,8 +646,6 @@ namespace OpenSim.Region.Framework.Scenes } set { - StoreUndoState(); - m_groupPosition = value; PhysicsActor actor = PhysActor; @@ -1401,6 +1472,10 @@ namespace OpenSim.Region.Framework.Scenes { m_undo.Clear(); } + lock (m_redo) + { + m_redo.Clear(); + } StoreUndoState(); } @@ -1711,6 +1786,66 @@ namespace OpenSim.Region.Framework.Scenes return m_parentGroup.RootPart.DIE_AT_EDGE; } + public bool GetReturnAtEdge() + { + if (m_parentGroup == null) + return false; + if (m_parentGroup.IsDeleted) + return false; + + return m_parentGroup.RootPart.RETURN_AT_EDGE; + } + + public void SetReturnAtEdge(bool p) + { + if (m_parentGroup == null) + return; + if (m_parentGroup.IsDeleted) + return; + + m_parentGroup.RootPart.RETURN_AT_EDGE = p; + } + + public bool GetBlockGrab() + { + if (m_parentGroup == null) + return false; + if (m_parentGroup.IsDeleted) + return false; + + return m_parentGroup.RootPart.BlockGrab; + } + + public void SetBlockGrab(bool p) + { + if (m_parentGroup == null) + return; + if (m_parentGroup.IsDeleted) + return; + + m_parentGroup.RootPart.BlockGrab = p; + } + + public void SetStatusSandbox(bool p) + { + if (m_parentGroup == null) + return; + if (m_parentGroup.IsDeleted) + return; + StatusSandboxPos = m_parentGroup.RootPart.AbsolutePosition; + m_parentGroup.RootPart.StatusSandbox = p; + } + + public bool GetStatusSandbox() + { + if (m_parentGroup == null) + return false; + if (m_parentGroup.IsDeleted) + return false; + + return m_parentGroup.RootPart.StatusSandbox; + } + public int GetAxisRotation(int axis) { //Cannot use ScriptBaseClass constants as no referance to it currently. @@ -1917,7 +2052,7 @@ namespace OpenSim.Region.Framework.Scenes // play the sound. if (startedColliders.Count > 0 && CollisionSound != UUID.Zero && CollisionSoundVolume > 0.0f) { - SendSound(CollisionSound.ToString(), CollisionSoundVolume, true, (byte)0); + SendSound(CollisionSound.ToString(), CollisionSoundVolume, true, (byte)0, 0, false, false); } if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_start) != 0) @@ -2491,9 +2626,8 @@ namespace OpenSim.Region.Framework.Scenes List avatarts = m_parentGroup.Scene.GetAvatars(); foreach (ScenePresence p in avatarts) { - // TODO: some filtering by distance of avatar - - p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID); + if (!(Util.GetDistanceTo(p.AbsolutePosition, AbsolutePosition) >= 100)) + p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID); } } @@ -2554,7 +2688,38 @@ namespace OpenSim.Region.Framework.Scenes public void RotLookAt(Quaternion target, float strength, float damping) { - m_parentGroup.rotLookAt(target, strength, damping); + rotLookAt(target, strength, damping); + } + + public void rotLookAt(Quaternion target, float strength, float damping) + { + if (IsAttachment) + { + /* + ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar); + if (avatar != null) + { + Rotate the Av? + } */ + } + else + { + APIDDamp = damping; + APIDStrength = strength; + APIDTarget = target; + } + } + + public void startLookAt(Quaternion rot, float damp, float strength) + { + APIDDamp = damp; + APIDStrength = strength; + APIDTarget = rot; + } + + public void stopLookAt() + { + APIDTarget = Quaternion.Identity; } /// @@ -2814,7 +2979,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// /// - public void SendSound(string sound, double volume, bool triggered, byte flags) + public void SendSound(string sound, double volume, bool triggered, byte flags, float radius, bool useMaster, bool isMaster) { if (volume > 1) volume = 1; @@ -2850,10 +3015,51 @@ namespace OpenSim.Region.Framework.Scenes ISoundModule soundModule = m_parentGroup.Scene.RequestModuleInterface(); if (soundModule != null) { - if (triggered) - soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle); + if (useMaster) + { + if (isMaster) + { + if (triggered) + soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius); + else + soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius); + ParentGroup.PlaySoundMasterPrim = this; + ownerID = this._ownerID; + objectID = this.UUID; + parentID = this.GetRootPartUUID(); + position = this.AbsolutePosition; // region local + regionHandle = this.ParentGroup.Scene.RegionInfo.RegionHandle; + if (triggered) + soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius); + else + soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius); + foreach (SceneObjectPart prim in ParentGroup.PlaySoundSlavePrims) + { + ownerID = prim._ownerID; + objectID = prim.UUID; + parentID = prim.GetRootPartUUID(); + position = prim.AbsolutePosition; // region local + regionHandle = prim.ParentGroup.Scene.RegionInfo.RegionHandle; + if (triggered) + soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius); + else + soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius); + } + ParentGroup.PlaySoundSlavePrims.Clear(); + ParentGroup.PlaySoundMasterPrim = null; + } + else + { + ParentGroup.PlaySoundSlavePrims.Add(this); + } + } else - soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags); + { + if (triggered) + soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius); + else + soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius); + } } } @@ -3156,6 +3362,14 @@ namespace OpenSim.Region.Framework.Scenes hasProfileCut = hasDimple; // is it the same thing? } + public void SetVehicleFlags(int param, bool remove) + { + if (PhysActor != null) + { + PhysActor.VehicleFlags(param, remove); + } + } + public void SetGroup(UUID groupID, IClientAPI client) { _groupID = groupID; @@ -3260,27 +3474,30 @@ namespace OpenSim.Region.Framework.Scenes { if (!Undoing) { - if (m_parentGroup != null) + if (!IgnoreUndoUpdate) { - lock (m_undo) + if (m_parentGroup != null) { - if (m_undo.Count > 0) + lock (m_undo) { - UndoState last = m_undo.Peek(); - if (last != null) + if (m_undo.Count > 0) { - if (last.Compare(this)) - return; + UndoState last = m_undo.Peek(); + if (last != null) + { + if (last.Compare(this)) + return; + } } - } - if (m_parentGroup.GetSceneMaxUndo() > 0) - { - UndoState nUndo = new UndoState(this); + if (m_parentGroup.GetSceneMaxUndo() > 0) + { + UndoState nUndo = new UndoState(this); - m_undo.Push(nUndo); - } + m_undo.Push(nUndo); + } + } } } } @@ -3751,11 +3968,36 @@ namespace OpenSim.Region.Framework.Scenes lock (m_undo) { if (m_undo.Count > 0) + { + UndoState nUndo = null; + if (m_parentGroup.GetSceneMaxUndo() > 0) { - UndoState goback = m_undo.Pop(); - if (goback != null) - goback.PlaybackState(this); + nUndo = new UndoState(this); + } + UndoState goback = m_undo.Pop(); + if (goback != null) + { + goback.PlaybackState(this); + if (nUndo != null) + m_redo.Push(nUndo); + } + } + } + } + + public void Redo() + { + lock (m_redo) + { + if (m_parentGroup.GetSceneMaxUndo() > 0) + { + UndoState nUndo = new UndoState(this); + + m_undo.Push(nUndo); } + UndoState gofwd = m_redo.Pop(); + if (gofwd != null) + gofwd.PlayfwdState(this); } } @@ -3802,6 +4044,18 @@ namespace OpenSim.Region.Framework.Scenes (pos.Z != OffsetPosition.Z)) { Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); + + if (ParentGroup.RootPart.GetStatusSandbox()) + { + if (Util.GetDistanceTo(ParentGroup.RootPart.StatusSandboxPos, newPos) > 10) + { + ParentGroup.RootPart.ScriptSetPhysicsStatus(false); + newPos = OffsetPosition; + ParentGroup.Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), + ChatTypeEnum.DebugChannel, 0x7FFFFFFF, ParentGroup.RootPart.AbsolutePosition, Name, UUID, false); + } + } + OffsetPosition = newPos; ScheduleTerseUpdate(); } @@ -4094,7 +4348,6 @@ namespace OpenSim.Region.Framework.Scenes (rot.Z != RotationOffset.Z) || (rot.W != RotationOffset.W)) { - //StoreUndoState(); RotationOffset = rot; ParentGroup.HasGroupChanged = true; ScheduleTerseUpdate(); @@ -4396,5 +4649,36 @@ namespace OpenSim.Region.Framework.Scenes Inventory.ApplyNextOwnerPermissions(); } + public void UpdateLookAt() + { + try + { + if (APIDTarget != Quaternion.Identity) + { + if (Single.IsNaN(APIDTarget.W) == true) + { + APIDTarget = Quaternion.Identity; + return; + } + Quaternion rot = RotationOffset; + Quaternion dir = (rot - APIDTarget); + float speed = ((APIDStrength / APIDDamp) * (float)(Math.PI / 180.0f)); + if (dir.Z > speed) + { + rot.Z -= speed; + } + if (dir.Z < -speed) + { + rot.Z += speed; + } + rot.Normalize(); + UpdateRotation(rot); + } + } + catch (Exception ex) + { + m_log.Error("[Physics] " + ex); + } + } } } diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 9c7559b..675fb69 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -164,6 +164,8 @@ namespace OpenSim.Region.Framework.Scenes private Quaternion m_bodyRot= Quaternion.Identity; + private Quaternion m_bodyRotPrevious = Quaternion.Identity; + private const int LAND_VELOCITYMAG_MAX = 12; public bool IsRestrictedToRegion; @@ -508,6 +510,12 @@ namespace OpenSim.Region.Framework.Scenes set { m_bodyRot = value; } } + public Quaternion PreviousRotation + { + get { return m_bodyRotPrevious; } + set { m_bodyRotPrevious = value; } + } + /// /// If this is true, agent doesn't have a representation in this scene. /// this is an agent 'looking into' this scene from a nearby scene(region) @@ -824,6 +832,31 @@ namespace OpenSim.Region.Framework.Scenes if (pos.X < 0 || pos.Y < 0 || pos.Z < 0) { Vector3 emergencyPos = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 128); + + if (pos.X < 0) + { + emergencyPos.X = (int)Constants.RegionSize + pos.X; + if (!(pos.Y < 0)) + emergencyPos.Y = pos.Y; + if (!(pos.Z < 0)) + emergencyPos.X = pos.X; + } + if (pos.Y < 0) + { + emergencyPos.Y = (int)Constants.RegionSize + pos.Y; + if (!(pos.X < 0)) + emergencyPos.X = pos.X; + if (!(pos.Z < 0)) + emergencyPos.Z = pos.Z; + } + if (pos.Z < 0) + { + if (!(pos.X < 0)) + emergencyPos.X = pos.X; + if (!(pos.Y < 0)) + emergencyPos.Y = pos.Y; + //Leave as 128 + } m_log.WarnFormat( "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", @@ -1193,6 +1226,14 @@ namespace OpenSim.Region.Framework.Scenes } else { + if (m_pos.X < 0) + m_pos.X = 128; + if (m_pos.Y < 0) + m_pos.Y = 128; + if (m_pos.X > Scene.WestBorders[0].BorderLine.X) + m_pos.X = 128; + if (m_pos.Y > Scene.NorthBorders[0].BorderLine.Y) + m_pos.Y = 128; m_LastFinitePos = m_pos; } @@ -2704,36 +2745,72 @@ namespace OpenSim.Region.Framework.Scenes { // Checks if where it's headed exists a region + bool needsTransit = false; if (m_scene.TestBorderCross(pos2, Cardinals.W)) { if (m_scene.TestBorderCross(pos2, Cardinals.S)) + { + needsTransit = true; neighbor = HaveNeighbor(Cardinals.SW, ref fix); + } else if (m_scene.TestBorderCross(pos2, Cardinals.N)) + { + needsTransit = true; neighbor = HaveNeighbor(Cardinals.NW, ref fix); + } else + { + needsTransit = true; neighbor = HaveNeighbor(Cardinals.W, ref fix); + } } else if (m_scene.TestBorderCross(pos2, Cardinals.E)) { if (m_scene.TestBorderCross(pos2, Cardinals.S)) + { + needsTransit = true; neighbor = HaveNeighbor(Cardinals.SE, ref fix); + } else if (m_scene.TestBorderCross(pos2, Cardinals.N)) + { + needsTransit = true; neighbor = HaveNeighbor(Cardinals.NE, ref fix); + } else + { + needsTransit = true; neighbor = HaveNeighbor(Cardinals.E, ref fix); + } } else if (m_scene.TestBorderCross(pos2, Cardinals.S)) + { + needsTransit = true; neighbor = HaveNeighbor(Cardinals.S, ref fix); + } else if (m_scene.TestBorderCross(pos2, Cardinals.N)) + { + needsTransit = true; neighbor = HaveNeighbor(Cardinals.N, ref fix); + } + - // Makes sure avatar does not end up outside region - if (neighbor < 0) - AbsolutePosition = new Vector3( - AbsolutePosition.X + 3*fix[0], - AbsolutePosition.Y + 3*fix[1], - AbsolutePosition.Z); + if (neighbor <= 0) + { + if (!needsTransit) + { + Vector3 pos = AbsolutePosition; + if (AbsolutePosition.X < 0) + pos.X += Velocity.Y; + else if (AbsolutePosition.X > Constants.RegionSize) + pos.X -= Velocity.Y; + if (AbsolutePosition.Y < 0) + pos.Y += Velocity.Y; + else if (AbsolutePosition.Y > Constants.RegionSize) + pos.Y -= Velocity.Y; + AbsolutePosition = pos; + } + } else if (neighbor > 0) CrossToNewRegion(); } diff --git a/OpenSim/Region/Framework/Scenes/UndoState.cs b/OpenSim/Region/Framework/Scenes/UndoState.cs index 713ff69..55e407e 100644 --- a/OpenSim/Region/Framework/Scenes/UndoState.cs +++ b/OpenSim/Region/Framework/Scenes/UndoState.cs @@ -26,6 +26,7 @@ */ using OpenMetaverse; +using OpenSim.Region.Framework.Interfaces; namespace OpenSim.Region.Framework.Scenes { @@ -35,29 +36,21 @@ namespace OpenSim.Region.Framework.Scenes public Vector3 Scale = Vector3.Zero; public Quaternion Rotation = Quaternion.Identity; - public UndoState(Vector3 pos, Quaternion rot, Vector3 scale) - { - Position = pos; - Rotation = rot; - Scale = scale; - } - public UndoState(SceneObjectPart part) { if (part != null) { if (part.ParentID == 0) { - Position = part.AbsolutePosition; + Position = part.ParentGroup.AbsolutePosition; Rotation = part.RotationOffset; - + Scale = part.Shape.Scale; } else { Position = part.OffsetPosition; Rotation = part.RotationOffset; Scale = part.Shape.Scale; - } } } @@ -68,7 +61,7 @@ namespace OpenSim.Region.Framework.Scenes { if (part.ParentID == 0) { - if (Position == part.AbsolutePosition && Rotation == part.RotationOffset) + if (Position == part.ParentGroup.AbsolutePosition && Rotation == part.ParentGroup.Rotation) return true; else return false; @@ -93,24 +86,78 @@ namespace OpenSim.Region.Framework.Scenes if (part.ParentID == 0) { - part.ParentGroup.AbsolutePosition = Position; - part.UpdateRotation(Rotation); + if (Position != Vector3.Zero) + part.ParentGroup.AbsolutePosition = Position; + part.RotationOffset = Rotation; + if (Scale != Vector3.Zero) + part.Resize(Scale); part.ParentGroup.ScheduleGroupForTerseUpdate(); } else { - part.OffsetPosition = Position; + if (Position != Vector3.Zero) + part.OffsetPosition = Position; part.UpdateRotation(Rotation); - part.Resize(Scale); + if (Scale != Vector3.Zero) + part.Resize(Scale); part.ScheduleTerseUpdate(); + } + part.Undoing = false; + + } + } + public void PlayfwdState(SceneObjectPart part) + { + if (part != null) + { + part.Undoing = true; + + if (part.ParentID == 0) + { + if (Position != Vector3.Zero) + part.ParentGroup.AbsolutePosition = Position; + if (Rotation != Quaternion.Identity) + part.UpdateRotation(Rotation); + if (Scale != Vector3.Zero) + part.Resize(Scale); + part.ParentGroup.ScheduleGroupForTerseUpdate(); + } + else + { + if (Position != Vector3.Zero) + part.OffsetPosition = Position; + if (Rotation != Quaternion.Identity) + part.UpdateRotation(Rotation); + if (Scale != Vector3.Zero) + part.Resize(Scale); part.ScheduleTerseUpdate(); } part.Undoing = false; } } + } + public class LandUndoState + { + public ITerrainModule m_terrainModule; + public ITerrainChannel m_terrainChannel; + + public LandUndoState(ITerrainModule terrainModule, ITerrainChannel terrainChannel) + { + m_terrainModule = terrainModule; + m_terrainChannel = terrainChannel; + } + + public bool Compare(ITerrainChannel terrainChannel) + { + if (m_terrainChannel != terrainChannel) + return false; + else + return false; + } - public UndoState() + public void PlaybackState() { + m_terrainModule.UndoTerrain(m_terrainChannel); } } } diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index b421623..009dd37 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs @@ -774,6 +774,8 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server public event UUIDNameRequest OnTeleportHomeRequest; public event ScriptAnswer OnScriptAnswer; public event AgentSit OnUndo; + public event AgentSit OnRedo; + public event LandUndo OnLandUndo; public event ForceReleaseControls OnForceReleaseControls; public event GodLandStatRequest OnLandStatRequest; public event DetailedEstateDataRequest OnDetailedEstateDataRequest; diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs index 31f28e0..5bfe4be 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs @@ -767,7 +767,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule if (!CanEdit()) return; - GetSOP().SendSound(asset.ToString(), volume, true, 0); + GetSOP().SendSound(asset.ToString(), volume, true, 0, 0, false, false); } #endregion diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs index c7cd37b..45bb005 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs @@ -231,7 +231,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule if (soundModule != null) { soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, volume, position, - m_internalScene.RegionInfo.RegionHandle); + m_internalScene.RegionInfo.RegionHandle, 0); } } @@ -241,7 +241,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule if (soundModule != null) { soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, 1.0, position, - m_internalScene.RegionInfo.RegionHandle); + m_internalScene.RegionInfo.RegionHandle, 0); } } diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index 1d15552..b331001 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs @@ -298,6 +298,8 @@ namespace OpenSim.Region.OptionalModules.World.NPC public event ObjectBuy OnObjectBuy; public event BuyObjectInventory OnBuyObjectInventory; public event AgentSit OnUndo; + public event AgentSit OnRedo; + public event LandUndo OnLandUndo; public event ForceReleaseControls OnForceReleaseControls; public event GodLandStatRequest OnLandStatRequest; diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs index 31366db..5e2eeeb 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs @@ -185,6 +185,11 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin } + public override void VehicleFlags(int param, bool remove) + { + + } + public override void SetVolumeDetect(int param) { diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs index 97eb6a2..6a54705 100644 --- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs +++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs @@ -362,6 +362,11 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin } + public override void VehicleFlags(int param, bool remove) + { + + } + public override void SetVolumeDetect(int param) { diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs index 9603ea4..920ed96 100644 --- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs +++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs @@ -397,6 +397,11 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin //TODO: } + public override void VehicleFlags(int param, bool remove) + { + + } + public override void SetVolumeDetect(int param) { //TODO: GhostObject diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs index d5d146e..e2a6a2e 100644 --- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs +++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs @@ -500,6 +500,18 @@ namespace OpenSim.Region.Physics.BulletXPlugin public BulletXScene(String sceneIdentifier) { //identifier = sceneIdentifier; + cDispatcher = new CollisionDispatcherLocal(this); + Vector3 worldMinDim = new Vector3((float)minXY, (float)minXY, (float)minZ); + Vector3 worldMaxDim = new Vector3((float)maxXY, (float)maxXY, (float)maxZ); + opCache = new AxisSweep3(worldMinDim, worldMaxDim, maxHandles); + sicSolver = new SequentialImpulseConstraintSolver(); + + lock (BulletXLock) + { + ddWorld = new DiscreteDynamicsWorld(cDispatcher, opCache, sicSolver); + ddWorld.Gravity = new Vector3(0, 0, -gravity); + } + //this._heightmap = new float[65536]; } public static float Gravity @@ -582,12 +594,12 @@ namespace OpenSim.Region.Physics.BulletXPlugin pos.Y = position.Y; pos.Z = position.Z + 20; BulletXCharacter newAv = null; - newAv.Flying = isFlying; lock (BulletXLock) { newAv = new BulletXCharacter(avName, this, pos); _characters.Add(newAv.RigidBody, newAv); } + newAv.Flying = isFlying; return newAv; } @@ -984,6 +996,11 @@ namespace OpenSim.Region.Physics.BulletXPlugin { } + + public override void VehicleFlags(int param, bool remove) + { + + } public override void SetVolumeDetect(int param) { diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index 9c192ed..880c3ea 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs @@ -208,6 +208,7 @@ namespace OpenSim.Region.Physics.Manager public abstract void VehicleFloatParam(int param, float value); public abstract void VehicleVectorParam(int param, Vector3 value); public abstract void VehicleRotationParam(int param, Quaternion rotation); + public abstract void VehicleFlags(int param, bool remove); public abstract void SetVolumeDetect(int param); // Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more @@ -352,6 +353,11 @@ namespace OpenSim.Region.Physics.Manager } + public override void VehicleFlags(int param, bool remove) + { + + } + public override void SetVolumeDetect(int param) { diff --git a/OpenSim/Region/Physics/Manager/VehicleConstants.cs b/OpenSim/Region/Physics/Manager/VehicleConstants.cs index 532e55e..f0775c1 100644 --- a/OpenSim/Region/Physics/Manager/VehicleConstants.cs +++ b/OpenSim/Region/Physics/Manager/VehicleConstants.cs @@ -91,7 +91,9 @@ namespace OpenSim.Region.Physics.Manager BANKING_EFFICIENCY = 38, BANKING_MIX = 39, BANKING_TIMESCALE = 40, - REFERENCE_FRAME = 44 + REFERENCE_FRAME = 44, + BLOCK_EXIT = 45, + ROLL_FRAME = 46 } @@ -107,7 +109,13 @@ namespace OpenSim.Region.Physics.Manager LIMIT_MOTOR_UP = 64, MOUSELOOK_STEER = 128, MOUSELOOK_BANK = 256, - CAMERA_DECOUPLED = 512 + CAMERA_DECOUPLED = 512, + NO_X = 1024, + NO_Y = 2048, + NO_Z = 4096, + LOCK_HOVER_HEIGHT = 8192, + NO_DEFLECTION = 16392, + LOCK_ROTATION = 32784 } } diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 06ed8fb..a2229e8 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs @@ -734,6 +734,11 @@ namespace OpenSim.Region.Physics.OdePlugin } + public override void VehicleFlags(int param, bool remove) + { + + } + public override void SetVolumeDetect(int param) { diff --git a/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs b/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs index 008070b..6ae0c8a 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs @@ -82,7 +82,9 @@ namespace OpenSim.Region.Physics.OdePlugin // HOVER_UP_ONLY // LIMIT_MOTOR_UP // LIMIT_ROLL_ONLY - + private VehicleFlag m_Hoverflags = (VehicleFlag)0; + private Vector3 m_BlockingEndPoint = Vector3.Zero; + private Quaternion m_RollreferenceFrame = Quaternion.Identity; // Linear properties private Vector3 m_linearMotorDirection = Vector3.Zero; // velocity requested by LSL, decayed by time private Vector3 m_linearMotorDirectionLASTSET = Vector3.Zero; // velocity requested by LSL @@ -91,6 +93,7 @@ namespace OpenSim.Region.Physics.OdePlugin private float m_linearMotorDecayTimescale = 0; private float m_linearMotorTimescale = 0; private Vector3 m_lastLinearVelocityVector = Vector3.Zero; + private d.Vector3 m_lastPositionVector = new d.Vector3(); // private bool m_LinearMotorSetLastFrame = false; // private Vector3 m_linearMotorOffset = Vector3.Zero; @@ -255,6 +258,9 @@ namespace OpenSim.Region.Physics.OdePlugin case Vehicle.LINEAR_MOTOR_OFFSET: // m_linearMotorOffset = new Vector3(pValue.X, pValue.Y, pValue.Z); break; + case Vehicle.BLOCK_EXIT: + m_BlockingEndPoint = new Vector3(pValue.X, pValue.Y, pValue.Z); + break; } }//end ProcessVectorVehicleParam @@ -265,15 +271,189 @@ namespace OpenSim.Region.Physics.OdePlugin case Vehicle.REFERENCE_FRAME: // m_referenceFrame = pValue; break; + case Vehicle.ROLL_FRAME: + m_RollreferenceFrame = pValue; + break; } }//end ProcessRotationVehicleParam + internal void ProcessVehicleFlags(int pParam, bool remove) + { + if (remove) + { + if (pParam == -1) + { + m_flags = (VehicleFlag)0; + m_Hoverflags = (VehicleFlag)0; + return; + } + if ((pParam & (int)VehicleFlag.HOVER_GLOBAL_HEIGHT) == (int)VehicleFlag.HOVER_GLOBAL_HEIGHT) + { + if ((m_Hoverflags & VehicleFlag.HOVER_GLOBAL_HEIGHT) != (VehicleFlag)0) + m_Hoverflags &= ~(VehicleFlag.HOVER_GLOBAL_HEIGHT); + } + if ((pParam & (int)VehicleFlag.HOVER_TERRAIN_ONLY) == (int)VehicleFlag.HOVER_TERRAIN_ONLY) + { + if ((m_Hoverflags & VehicleFlag.HOVER_TERRAIN_ONLY) != (VehicleFlag)0) + m_Hoverflags &= ~(VehicleFlag.HOVER_TERRAIN_ONLY); + } + if ((pParam & (int)VehicleFlag.HOVER_UP_ONLY) == (int)VehicleFlag.HOVER_UP_ONLY) + { + if ((m_Hoverflags & VehicleFlag.HOVER_UP_ONLY) != (VehicleFlag)0) + m_Hoverflags &= ~(VehicleFlag.HOVER_UP_ONLY); + } + if ((pParam & (int)VehicleFlag.HOVER_WATER_ONLY) == (int)VehicleFlag.HOVER_WATER_ONLY) + { + if ((m_Hoverflags & VehicleFlag.HOVER_WATER_ONLY) != (VehicleFlag)0) + m_Hoverflags &= ~(VehicleFlag.HOVER_WATER_ONLY); + } + if ((pParam & (int)VehicleFlag.LIMIT_MOTOR_UP) == (int)VehicleFlag.LIMIT_MOTOR_UP) + { + if ((m_flags & VehicleFlag.LIMIT_MOTOR_UP) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.LIMIT_MOTOR_UP); + } + if ((pParam & (int)VehicleFlag.LIMIT_ROLL_ONLY) == (int)VehicleFlag.LIMIT_ROLL_ONLY) + { + if ((m_flags & VehicleFlag.LIMIT_ROLL_ONLY) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.LIMIT_ROLL_ONLY); + } + if ((pParam & (int)VehicleFlag.MOUSELOOK_BANK) == (int)VehicleFlag.MOUSELOOK_BANK) + { + if ((m_flags & VehicleFlag.MOUSELOOK_BANK) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.MOUSELOOK_BANK); + } + if ((pParam & (int)VehicleFlag.MOUSELOOK_STEER) == (int)VehicleFlag.MOUSELOOK_STEER) + { + if ((m_flags & VehicleFlag.MOUSELOOK_STEER) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.MOUSELOOK_STEER); + } + if ((pParam & (int)VehicleFlag.NO_DEFLECTION_UP) == (int)VehicleFlag.NO_DEFLECTION_UP) + { + if ((m_flags & VehicleFlag.NO_DEFLECTION_UP) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP); + } + if ((pParam & (int)VehicleFlag.CAMERA_DECOUPLED) == (int)VehicleFlag.CAMERA_DECOUPLED) + { + if ((m_flags & VehicleFlag.CAMERA_DECOUPLED) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.CAMERA_DECOUPLED); + } + if ((pParam & (int)VehicleFlag.NO_X) == (int)VehicleFlag.NO_X) + { + if ((m_flags & VehicleFlag.NO_X) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.NO_X); + } + if ((pParam & (int)VehicleFlag.NO_Y) == (int)VehicleFlag.NO_Y) + { + if ((m_flags & VehicleFlag.NO_Y) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.NO_Y); + } + if ((pParam & (int)VehicleFlag.NO_Z) == (int)VehicleFlag.NO_Z) + { + if ((m_flags & VehicleFlag.NO_Z) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.NO_Z); + } + if ((pParam & (int)VehicleFlag.LOCK_HOVER_HEIGHT) == (int)VehicleFlag.LOCK_HOVER_HEIGHT) + { + if ((m_Hoverflags & VehicleFlag.LOCK_HOVER_HEIGHT) != (VehicleFlag)0) + m_Hoverflags &= ~(VehicleFlag.LOCK_HOVER_HEIGHT); + } + if ((pParam & (int)VehicleFlag.NO_DEFLECTION) == (int)VehicleFlag.NO_DEFLECTION) + { + if ((m_flags & VehicleFlag.NO_DEFLECTION) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.NO_DEFLECTION); + } + if ((pParam & (int)VehicleFlag.LOCK_ROTATION) == (int)VehicleFlag.LOCK_ROTATION) + { + if ((m_flags & VehicleFlag.LOCK_ROTATION) != (VehicleFlag)0) + m_flags &= ~(VehicleFlag.LOCK_ROTATION); + } + } + else + { + if ((pParam & (int)VehicleFlag.HOVER_GLOBAL_HEIGHT) == (int)VehicleFlag.HOVER_GLOBAL_HEIGHT) + { + m_Hoverflags |= (VehicleFlag.HOVER_GLOBAL_HEIGHT | m_flags); + } + if ((pParam & (int)VehicleFlag.HOVER_TERRAIN_ONLY) == (int)VehicleFlag.HOVER_TERRAIN_ONLY) + { + m_Hoverflags |= (VehicleFlag.HOVER_TERRAIN_ONLY | m_flags); + } + if ((pParam & (int)VehicleFlag.HOVER_UP_ONLY) == (int)VehicleFlag.HOVER_UP_ONLY) + { + m_Hoverflags |= (VehicleFlag.HOVER_UP_ONLY | m_flags); + } + if ((pParam & (int)VehicleFlag.HOVER_WATER_ONLY) == (int)VehicleFlag.HOVER_WATER_ONLY) + { + m_Hoverflags |= (VehicleFlag.HOVER_WATER_ONLY | m_flags); + } + if ((pParam & (int)VehicleFlag.LIMIT_MOTOR_UP) == (int)VehicleFlag.LIMIT_MOTOR_UP) + { + m_flags |= (VehicleFlag.LIMIT_MOTOR_UP | m_flags); + } + if ((pParam & (int)VehicleFlag.MOUSELOOK_BANK) == (int)VehicleFlag.MOUSELOOK_BANK) + { + m_flags |= (VehicleFlag.MOUSELOOK_BANK | m_flags); + } + if ((pParam & (int)VehicleFlag.MOUSELOOK_STEER) == (int)VehicleFlag.MOUSELOOK_STEER) + { + m_flags |= (VehicleFlag.MOUSELOOK_STEER | m_flags); + } + if ((pParam & (int)VehicleFlag.NO_DEFLECTION_UP) == (int)VehicleFlag.NO_DEFLECTION_UP) + { + m_flags |= (VehicleFlag.NO_DEFLECTION_UP | m_flags); + } + if ((pParam & (int)VehicleFlag.CAMERA_DECOUPLED) == (int)VehicleFlag.CAMERA_DECOUPLED) + { + m_flags |= (VehicleFlag.CAMERA_DECOUPLED | m_flags); + } + if ((pParam & (int)VehicleFlag.NO_X) == (int)VehicleFlag.NO_X) + { + m_flags |= (VehicleFlag.NO_X); + } + if ((pParam & (int)VehicleFlag.NO_Y) == (int)VehicleFlag.NO_Y) + { + m_flags |= (VehicleFlag.NO_Y); + } + if ((pParam & (int)VehicleFlag.NO_Z) == (int)VehicleFlag.NO_Z) + { + m_flags |= (VehicleFlag.NO_Z); + } + if ((pParam & (int)VehicleFlag.LOCK_HOVER_HEIGHT) == (int)VehicleFlag.LOCK_HOVER_HEIGHT) + { + m_Hoverflags |= (VehicleFlag.LOCK_HOVER_HEIGHT); + } + if ((pParam & (int)VehicleFlag.NO_DEFLECTION) == (int)VehicleFlag.NO_DEFLECTION) + { + m_flags |= (VehicleFlag.NO_DEFLECTION); + } + if ((pParam & (int)VehicleFlag.LOCK_ROTATION) == (int)VehicleFlag.LOCK_ROTATION) + { + m_flags |= (VehicleFlag.LOCK_ROTATION); + } + } + }//end ProcessVehicleFlags + internal void ProcessTypeChange(Vehicle pType) { // Set Defaults For Type m_type = pType; switch (pType) { + case Vehicle.TYPE_NONE: + m_linearFrictionTimescale = new Vector3(0, 0, 0); + m_angularFrictionTimescale = new Vector3(0, 0, 0); + m_linearMotorDirection = Vector3.Zero; + m_linearMotorTimescale = 0; + m_linearMotorDecayTimescale = 0; + m_angularMotorDirection = Vector3.Zero; + m_angularMotorTimescale = 0; + m_angularMotorDecayTimescale = 0; + m_VhoverHeight = 0; + m_VhoverTimescale = 0; + m_VehicleBuoyancy = 0; + m_flags = (VehicleFlag)0; + break; + case Vehicle.TYPE_SLED: m_linearFrictionTimescale = new Vector3(30, 1, 1000); m_angularFrictionTimescale = new Vector3(1000, 1000, 1000); @@ -295,9 +475,9 @@ namespace OpenSim.Region.Physics.OdePlugin // m_bankingMix = 1; // m_bankingTimescale = 10; // m_referenceFrame = Quaternion.Identity; - m_flags &= - ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | - VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY); + m_Hoverflags &= + ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | + VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY); m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_ROLL_ONLY | VehicleFlag.LIMIT_MOTOR_UP); break; case Vehicle.TYPE_CAR: @@ -323,9 +503,10 @@ namespace OpenSim.Region.Physics.OdePlugin // m_bankingMix = 1; // m_bankingTimescale = 1; // m_referenceFrame = Quaternion.Identity; - m_flags &= ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT); - m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_ROLL_ONLY | VehicleFlag.HOVER_UP_ONLY | + m_Hoverflags &= ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT); + m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_ROLL_ONLY | VehicleFlag.LIMIT_MOTOR_UP); + m_Hoverflags |= (VehicleFlag.HOVER_UP_ONLY); break; case Vehicle.TYPE_BOAT: m_linearFrictionTimescale = new Vector3(10, 3, 2); @@ -350,10 +531,12 @@ namespace OpenSim.Region.Physics.OdePlugin // m_bankingMix = 0.8f; // m_bankingTimescale = 1; // m_referenceFrame = Quaternion.Identity; - m_flags &= ~(VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.LIMIT_ROLL_ONLY | + m_Hoverflags &= ~(VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY); - m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.HOVER_WATER_ONLY | + m_flags &= ~(VehicleFlag.LIMIT_ROLL_ONLY); + m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_MOTOR_UP); + m_Hoverflags |= (VehicleFlag.HOVER_WATER_ONLY); break; case Vehicle.TYPE_AIRPLANE: m_linearFrictionTimescale = new Vector3(200, 10, 5); @@ -378,8 +561,9 @@ namespace OpenSim.Region.Physics.OdePlugin // m_bankingMix = 0.7f; // m_bankingTimescale = 2; // m_referenceFrame = Quaternion.Identity; - m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | - VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY | VehicleFlag.LIMIT_MOTOR_UP); + m_Hoverflags &= ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | + VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY); + m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_MOTOR_UP); m_flags |= (VehicleFlag.LIMIT_ROLL_ONLY); break; case Vehicle.TYPE_BALLOON: @@ -405,9 +589,11 @@ namespace OpenSim.Region.Physics.OdePlugin // m_bankingMix = 0.7f; // m_bankingTimescale = 5; // m_referenceFrame = Quaternion.Identity; - m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | - VehicleFlag.HOVER_UP_ONLY | VehicleFlag.LIMIT_MOTOR_UP); - m_flags |= (VehicleFlag.LIMIT_ROLL_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT); + m_Hoverflags &= ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | + VehicleFlag.HOVER_UP_ONLY); + m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_MOTOR_UP); + m_flags |= (VehicleFlag.LIMIT_ROLL_ONLY); + m_Hoverflags |= (VehicleFlag.HOVER_GLOBAL_HEIGHT); break; } @@ -431,6 +617,7 @@ namespace OpenSim.Region.Physics.OdePlugin MoveLinear(pTimestep, pParentScene); MoveAngular(pTimestep); + LimitRotation(pTimestep); }// end Step private void MoveLinear(float pTimestep, OdeScene _pParentScene) @@ -477,61 +664,152 @@ namespace OpenSim.Region.Physics.OdePlugin // .Z velocity and gravity. Therefore only 0g will used script-requested // .Z velocity. >0g (m_VehicleBuoyancy < 1) will used modified gravity only. Vector3 grav = Vector3.Zero; - if (m_VehicleBuoyancy < 1.0f) + // There is some gravity, make a gravity force vector + // that is applied after object velocity. + d.Mass objMass; + d.BodyGetMass(Body, out objMass); + // m_VehicleBuoyancy: -1=2g; 0=1g; 1=0g; + grav.Z = _pParentScene.gravityz * objMass.mass * (1f - m_VehicleBuoyancy); + // Preserve the current Z velocity + d.Vector3 vel_now = d.BodyGetLinearVel(Body); + m_dir.Z = vel_now.Z; // Preserve the accumulated falling velocity + + d.Vector3 pos = d.BodyGetPosition(Body); + Vector3 accel = new Vector3(-(m_dir.X - m_lastLinearVelocityVector.X / 0.1f), -(m_dir.Y - m_lastLinearVelocityVector.Y / 0.1f), m_dir.Z - m_lastLinearVelocityVector.Z / 0.1f); + Vector3 posChange = new Vector3(); + posChange.X = pos.X - m_lastPositionVector.X; + posChange.Y = pos.Y - m_lastPositionVector.Y; + posChange.Z = pos.Z - m_lastPositionVector.Z; + double Zchange = Math.Abs(posChange.Z); + if (m_BlockingEndPoint != Vector3.Zero) + { + if (pos.X >= (m_BlockingEndPoint.X - (float)1)) + { + pos.X -= posChange.X + 1; + d.BodySetPosition(Body, pos.X, pos.Y, pos.Z); + } + if (pos.Y >= (m_BlockingEndPoint.Y - (float)1)) + { + pos.Y -= posChange.Y + 1; + d.BodySetPosition(Body, pos.X, pos.Y, pos.Z); + } + if (pos.Z >= (m_BlockingEndPoint.Z - (float)1)) + { + pos.Z -= posChange.Z + 1; + d.BodySetPosition(Body, pos.X, pos.Y, pos.Z); + } + if (pos.X <= 0) + { + pos.X += posChange.X + 1; + d.BodySetPosition(Body, pos.X, pos.Y, pos.Z); + } + if (pos.Y <= 0) + { + pos.Y += posChange.Y + 1; + d.BodySetPosition(Body, pos.X, pos.Y, pos.Z); + } + } + if (pos.Z < _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y)) { - // There is some gravity, make a gravity force vector - // that is applied after object velocity. - d.Mass objMass; - d.BodyGetMass(Body, out objMass); - // m_VehicleBuoyancy: -1=2g; 0=1g; 1=0g; - grav.Z = _pParentScene.gravityz * objMass.mass * (1f - m_VehicleBuoyancy); - // Preserve the current Z velocity - d.Vector3 vel_now = d.BodyGetLinearVel(Body); - m_dir.Z = vel_now.Z; // Preserve the accumulated falling velocity - } // else its 1.0, no gravity. + pos.Z = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y) + 2; + d.BodySetPosition(Body, pos.X, pos.Y, pos.Z); + } // Check if hovering - if ((m_flags & (VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT)) != 0) + if ((m_Hoverflags & (VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT)) != 0) { // We should hover, get the target height - d.Vector3 pos = d.BodyGetPosition(Body); - if ((m_flags & VehicleFlag.HOVER_WATER_ONLY) == VehicleFlag.HOVER_WATER_ONLY) + if ((m_Hoverflags & VehicleFlag.HOVER_WATER_ONLY) != 0) { m_VhoverTargetHeight = _pParentScene.GetWaterLevel() + m_VhoverHeight; } - else if ((m_flags & VehicleFlag.HOVER_TERRAIN_ONLY) == VehicleFlag.HOVER_TERRAIN_ONLY) + if ((m_Hoverflags & VehicleFlag.HOVER_TERRAIN_ONLY) != 0) { m_VhoverTargetHeight = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y) + m_VhoverHeight; } - else if ((m_flags & VehicleFlag.HOVER_GLOBAL_HEIGHT) == VehicleFlag.HOVER_GLOBAL_HEIGHT) + if ((m_Hoverflags & VehicleFlag.HOVER_GLOBAL_HEIGHT) != 0) { m_VhoverTargetHeight = m_VhoverHeight; } - if ((m_flags & VehicleFlag.HOVER_UP_ONLY) == VehicleFlag.HOVER_UP_ONLY) + if ((m_Hoverflags & VehicleFlag.HOVER_UP_ONLY) != 0) { // If body is aready heigher, use its height as target height if (pos.Z > m_VhoverTargetHeight) m_VhoverTargetHeight = pos.Z; } + if ((m_Hoverflags & VehicleFlag.LOCK_HOVER_HEIGHT) != 0) + { + if ((pos.Z - m_VhoverTargetHeight) > .2 || (pos.Z - m_VhoverTargetHeight) < -.2) + { + d.BodySetPosition(Body, pos.X, pos.Y, m_VhoverTargetHeight); + } + } + else + { + float herr0 = pos.Z - m_VhoverTargetHeight; + // Replace Vertical speed with correction figure if significant + if (Math.Abs(herr0) > 0.01f) + { + m_dir.Z = -((herr0 * pTimestep * 50.0f) / m_VhoverTimescale); + //KF: m_VhoverEfficiency is not yet implemented + } + else + { + m_dir.Z = 0f; + } + } // m_VhoverEfficiency = 0f; // 0=boucy, 1=Crit.damped // m_VhoverTimescale = 0f; // time to acheive height // pTimestep is time since last frame,in secs - float herr0 = pos.Z - m_VhoverTargetHeight; - // Replace Vertical speed with correction figure if significant - if (Math.Abs(herr0) > 0.01f) + } + + if ((m_flags & (VehicleFlag.LIMIT_MOTOR_UP)) != 0) + { + //Start Experimental Values + if (Zchange > .3) { - d.Mass objMass; - d.BodyGetMass(Body, out objMass); - m_dir.Z = - ((herr0 * pTimestep * 50.0f) / m_VhoverTimescale); - //KF: m_VhoverEfficiency is not yet implemented + grav.Z = (float)(grav.Z * 3); } - else + if (Zchange > .15) + { + grav.Z = (float)(grav.Z * 2); + } + if (Zchange > .75) + { + grav.Z = (float)(grav.Z * 1.5); + } + if (Zchange > .05) + { + grav.Z = (float)(grav.Z * 1.25); + } + if (Zchange > .025) + { + grav.Z = (float)(grav.Z * 1.125); + } + float terraintemp = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y); + float postemp = (pos.Z - terraintemp); + if (postemp > 2.5f) { - m_dir.Z = 0f; + grav.Z = (float)(grav.Z * 1.037125); } + //End Experimental Values + } + if ((m_flags & (VehicleFlag.NO_X)) != 0) + { + m_dir.X = 0; + } + if ((m_flags & (VehicleFlag.NO_Y)) != 0) + { + m_dir.Y = 0; + } + if ((m_flags & (VehicleFlag.NO_Z)) != 0) + { + m_dir.Z = 0; } + m_lastPositionVector = d.BodyGetPosition(Body); + // Apply velocity d.BodySetLinearVel(Body, m_dir.X, m_dir.Y, m_dir.Z); // apply gravity force @@ -629,6 +907,12 @@ namespace OpenSim.Region.Physics.OdePlugin // Sum velocities m_lastAngularVelocity = m_angularMotorVelocity + vertattr; // + bank + deflection + + if ((m_flags & (VehicleFlag.NO_DEFLECTION_UP)) != 0) + { + m_lastAngularVelocity.X = 0; + m_lastAngularVelocity.Y = 0; + } if (!m_lastAngularVelocity.ApproxEquals(Vector3.Zero, 0.01f)) { @@ -647,5 +931,44 @@ namespace OpenSim.Region.Physics.OdePlugin d.BodySetAngularVel (Body, m_lastAngularVelocity.X, m_lastAngularVelocity.Y, m_lastAngularVelocity.Z); } //end MoveAngular + internal void LimitRotation(float timestep) + { + d.Quaternion rot = d.BodyGetQuaternion(Body); + Quaternion rotq = new Quaternion(rot.X, rot.Y, rot.Z, rot.W); // rotq = rotation of object + d.Quaternion m_rot = new d.Quaternion(); + bool changed = false; + m_rot.X = rotq.X; + m_rot.Y = rotq.Y; + m_rot.Z = rotq.Z; + m_rot.W = rotq.W; + if (m_RollreferenceFrame != Quaternion.Identity) + { + if (rotq.X >= m_RollreferenceFrame.X) + { + m_rot.X = rotq.X - (m_RollreferenceFrame.X / 2); + } + if (rotq.Y >= m_RollreferenceFrame.Y) + { + m_rot.Y = rotq.Y - (m_RollreferenceFrame.Y / 2); + } + if (rotq.X <= -m_RollreferenceFrame.X) + { + m_rot.X = rotq.X + (m_RollreferenceFrame.X / 2); + } + if (rotq.Y <= -m_RollreferenceFrame.Y) + { + m_rot.Y = rotq.Y + (m_RollreferenceFrame.Y / 2); + } + changed = true; + } + if ((m_flags & VehicleFlag.LOCK_ROTATION) != 0) + { + m_rot.X = 0; + m_rot.Y = 0; + changed = true; + } + if (changed) + d.BodySetQuaternion(Body, ref m_rot); + } } } diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 44b2727..03736d1 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -2355,6 +2355,11 @@ Console.WriteLine(" JointCreateFixed"); m_vehicle.ProcessRotationVehicleParam((Vehicle) param, rotation); } + public override void VehicleFlags(int param, bool remove) + { + m_vehicle.ProcessVehicleFlags(param, remove); + } + public override void SetVolumeDetect(int param) { lock (_parent_scene.OdeLock) diff --git a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs index 566b4e7..a70179b 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs @@ -182,6 +182,8 @@ namespace OpenSim.Region.Physics.POSPlugin } + public override void VehicleFlags(int param, bool remove) { } + public override void SetVolumeDetect(int param) { diff --git a/OpenSim/Region/Physics/POSPlugin/POSPrim.cs b/OpenSim/Region/Physics/POSPlugin/POSPrim.cs index 7447f76..91ec3df 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSPrim.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSPrim.cs @@ -139,6 +139,8 @@ namespace OpenSim.Region.Physics.POSPlugin } + public override void VehicleFlags(int param, bool remove) { } + public override void SetVolumeDetect(int param) { diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs index 24eb6b1..dd2c686 100644 --- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs @@ -371,6 +371,8 @@ namespace OpenSim.Region.Physics.PhysXPlugin } + public override void VehicleFlags(int param, bool remove) { } + public override void SetVolumeDetect(int param) { @@ -775,6 +777,8 @@ namespace OpenSim.Region.Physics.PhysXPlugin } + public override void VehicleFlags(int param, bool remove) { } + public override void SetVolumeDetect(int param) { diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index a1db77e..eab4754 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -1181,7 +1181,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB) { - NotImplemented("llSetStatus - STATUS_BLOCK_GRAB"); + if (value != 0) + m_host.SetBlockGrab(true); + else + m_host.SetBlockGrab(false); } if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE) @@ -1194,12 +1197,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if ((status & ScriptBaseClass.STATUS_RETURN_AT_EDGE) == ScriptBaseClass.STATUS_RETURN_AT_EDGE) { - NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE"); + if (value != 0) + m_host.SetReturnAtEdge(true); + else + m_host.SetReturnAtEdge(false); } if ((status & ScriptBaseClass.STATUS_SANDBOX) == ScriptBaseClass.STATUS_SANDBOX) { - NotImplemented("llSetStatus - STATUS_SANDBOX"); + if (value != 0) + m_host.SetStatusSandbox(true); + else + m_host.SetStatusSandbox(false); } if (statusrotationaxis != 0) @@ -1236,8 +1245,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return 0; case ScriptBaseClass.STATUS_BLOCK_GRAB: - NotImplemented("llGetStatus - STATUS_BLOCK_GRAB"); - return 0; + if (m_host.GetBlockGrab()) + return 1; + else + return 0; case ScriptBaseClass.STATUS_DIE_AT_EDGE: if (m_host.GetDieAtEdge()) @@ -1246,24 +1257,34 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return 0; case ScriptBaseClass.STATUS_RETURN_AT_EDGE: - NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE"); - return 0; + if (m_host.GetReturnAtEdge()) + return 1; + else + return 0; case ScriptBaseClass.STATUS_ROTATE_X: - NotImplemented("llGetStatus - STATUS_ROTATE_X"); - return 0; + if (m_host.GetAxisRotation(2) == 2) + return 1; + else + return 0; case ScriptBaseClass.STATUS_ROTATE_Y: - NotImplemented("llGetStatus - STATUS_ROTATE_Y"); - return 0; + if (m_host.GetAxisRotation(4) == 4) + return 1; + else + return 0; case ScriptBaseClass.STATUS_ROTATE_Z: - NotImplemented("llGetStatus - STATUS_ROTATE_Z"); - return 0; + if (m_host.GetAxisRotation(8) == 8) + return 1; + else + return 0; case ScriptBaseClass.STATUS_SANDBOX: - NotImplemented("llGetStatus - STATUS_SANDBOX"); - return 0; + if (m_host.GetStatusSandbox()) + return 1; + else + return 0; } return 0; } @@ -2201,7 +2222,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_host.AddScriptLPS(1); // send the sound, once, to all clients in range - m_host.SendSound(KeyOrName(sound).ToString(), volume, false, 0); + m_host.SendSound(KeyOrName(sound).ToString(), volume, false, 0, 0, false, false); } // Xantor 20080528 we should do this differently. @@ -2231,42 +2252,98 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llLoopSoundMaster(string sound, double volume) { m_host.AddScriptLPS(1); - NotImplemented("llLoopSoundMaster"); + m_host.ParentGroup.LoopSoundMasterPrim = m_host; + lock (m_host.ParentGroup.LoopSoundSlavePrims) + { + foreach (SceneObjectPart prim in m_host.ParentGroup.LoopSoundSlavePrims) + { + if (prim.Sound != UUID.Zero) + llStopSound(); + + prim.Sound = KeyOrName(sound); + prim.SoundGain = volume; + prim.SoundFlags = 1; // looping + prim.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable? + + prim.ScheduleFullUpdate(); + prim.SendFullUpdateToAllClients(); + } + } + if (m_host.Sound != UUID.Zero) + llStopSound(); + + m_host.Sound = KeyOrName(sound); + m_host.SoundGain = volume; + m_host.SoundFlags = 1; // looping + m_host.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable? + + m_host.ScheduleFullUpdate(); + m_host.SendFullUpdateToAllClients(); } public void llLoopSoundSlave(string sound, double volume) { m_host.AddScriptLPS(1); - NotImplemented("llLoopSoundSlave"); + lock (m_host.ParentGroup.LoopSoundSlavePrims) + { + m_host.ParentGroup.LoopSoundSlavePrims.Add(m_host); + } } public void llPlaySoundSlave(string sound, double volume) { m_host.AddScriptLPS(1); - NotImplemented("llPlaySoundSlave"); + + // send the sound, once, to all clients in range + m_host.SendSound(KeyOrName(sound).ToString(), volume, false, 0, 0, true, false); } public void llTriggerSound(string sound, double volume) { m_host.AddScriptLPS(1); // send the sound, once, to all clients in range - m_host.SendSound(KeyOrName(sound).ToString(), volume, true, 0); + m_host.SendSound(KeyOrName(sound).ToString(), volume, true, 0, 0, false, false); } // Xantor 20080528: Clear prim data of sound instead public void llStopSound() { m_host.AddScriptLPS(1); - - m_host.Sound = UUID.Zero; - m_host.SoundGain = 0; - m_host.SoundFlags = 0; - m_host.SoundRadius = 0; - - m_host.ScheduleFullUpdate(); - m_host.SendFullUpdateToAllClients(); - - // m_host.SendSound(UUID.Zero.ToString(), 1.0, false, 2); + if (m_host.ParentGroup.LoopSoundSlavePrims.Contains(m_host)) + { + if (m_host.ParentGroup.LoopSoundMasterPrim == m_host) + { + foreach (SceneObjectPart part in m_host.ParentGroup.LoopSoundSlavePrims) + { + part.Sound = UUID.Zero; + part.SoundGain = 0; + part.SoundFlags = 0; + part.SoundRadius = 0; + part.ScheduleFullUpdate(); + part.SendFullUpdateToAllClients(); + } + m_host.ParentGroup.LoopSoundMasterPrim = null; + m_host.ParentGroup.LoopSoundSlavePrims.Clear(); + } + else + { + m_host.Sound = UUID.Zero; + m_host.SoundGain = 0; + m_host.SoundFlags = 0; + m_host.SoundRadius = 0; + m_host.ScheduleFullUpdate(); + m_host.SendFullUpdateToAllClients(); + } + } + else + { + m_host.Sound = UUID.Zero; + m_host.SoundGain = 0; + m_host.SoundFlags = 0; + m_host.SoundRadius = 0; + m_host.ScheduleFullUpdate(); + m_host.SendFullUpdateToAllClients(); + } } public void llPreloadSound(string sound) @@ -2660,8 +2737,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llLookAt(LSL_Vector target, double strength, double damping) { - // partial implementation, rotates objects correctly but does not apply strength or damping attributes - m_host.AddScriptLPS(1); // Determine where we are looking from LSL_Vector from = llGetPos(); @@ -2681,9 +2756,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // the angles of rotation in radians into rotation value LSL_Types.Quaternion rot = llEuler2Rot(angle); - + Quaternion rotation = new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); + m_host.startLookAt(rotation, (float)damping, (float)strength); // Orient the object to the angle calculated - llSetRot(rot); + //llSetRot(rot); } public void llStopLookAt() @@ -3045,8 +3121,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llRotLookAt(LSL_Rotation target, double strength, double damping) { m_host.AddScriptLPS(1); -// NotImplemented("llRotLookAt"); - m_host.RotLookAt(Rot2Quaternion(target), (float)strength, (float)damping); + Quaternion rot = new Quaternion((float)target.x, (float)target.y, (float)target.z, (float)target.s); + m_host.RotLookAt(rot, (float)strength, (float)damping); } public LSL_Integer llStringLength(string str) @@ -3144,13 +3220,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llPointAt(LSL_Vector pos) { m_host.AddScriptLPS(1); - NotImplemented("llPointAt"); + ScenePresence Owner = World.GetScenePresence(m_host.UUID); + LSL_Rotation rot = llEuler2Rot(pos); + Owner.PreviousRotation = Owner.Rotation; + Owner.Rotation = (new Quaternion((float)rot.x,(float)rot.y,(float)rot.z,(float)rot.s)); } public void llStopPointAt() { m_host.AddScriptLPS(1); - NotImplemented("llStopPointAt"); + ScenePresence Owner = m_host.ParentGroup.Scene.GetScenePresence(m_host.OwnerID); + Owner.Rotation = Owner.PreviousRotation; } public void llTargetOmega(LSL_Vector axis, double spinrate, double gain) @@ -3946,8 +4026,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llCollisionSound(string impact_sound, double impact_volume) { m_host.AddScriptLPS(1); - //NotImplemented("llCollisionSound"); - // TODO: Parameter check logic required. UUID soundId = UUID.Zero; if (!UUID.TryParse(impact_sound, out soundId)) @@ -4535,8 +4613,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Vector llGetCenterOfMass() { m_host.AddScriptLPS(1); - NotImplemented("llGetCenterOfMass"); - return new LSL_Vector(); + Vector3 center = m_host.GetGeometricCenter(); + return new LSL_Vector(center.X,center.Y,center.Z); } public LSL_List llListSort(LSL_List src, int stride, int ascending) @@ -5269,8 +5347,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api flags |= ScriptBaseClass.AGENT_SITTING; } - //NotImplemented("llGetAgentInfo"); - return flags; } @@ -5353,7 +5429,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api LSL_Vector bottom_south_west) { m_host.AddScriptLPS(1); - NotImplemented("llTriggerSoundLimited"); + float radius1 = (float)llVecDist(llGetPos(), top_north_east); + float radius2 = (float)llVecDist(llGetPos(), bottom_south_west); + float radius = Math.Abs(radius1 - radius2); + m_host.SendSound(KeyOrName(sound).ToString(), volume, true, 0, radius, false, false); } public void llEjectFromLand(string pest) @@ -5892,7 +5971,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llGroundRepel(double height, int water, double tau) { m_host.AddScriptLPS(1); - NotImplemented("llGroundRepel"); + if (m_host.PhysActor != null) + { + float ground = (float)llGround(new LSL_Types.Vector3(0, 0, 0)); + float waterLevel = (float)llWater(new LSL_Types.Vector3(0, 0, 0)); + PIDHoverType hoverType = PIDHoverType.Ground; + if (water != 0) + { + hoverType = PIDHoverType.GroundAndWater; + if (ground < waterLevel) + height += waterLevel; + else + height += ground; + } + else + { + height += ground; + } + + m_host.SetHoverHeight((float)height, hoverType, (float)tau); + } } protected UUID GetTaskInventoryItem(string name) @@ -6021,13 +6119,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetVehicleFlags(int flags) { m_host.AddScriptLPS(1); - NotImplemented("llSetVehicleFlags"); + if (m_host.ParentGroup != null) + { + if (!m_host.ParentGroup.IsDeleted) + { + m_host.ParentGroup.RootPart.SetVehicleFlags(flags, false); + } + } } public void llRemoveVehicleFlags(int flags) { m_host.AddScriptLPS(1); - NotImplemented("llRemoveVehicleFlags"); + if (m_host.ParentGroup != null) + { + if (!m_host.ParentGroup.IsDeleted) + { + m_host.ParentGroup.RootPart.SetVehicleFlags(flags, true); + } + } } public void llSitTarget(LSL_Vector offset, LSL_Rotation rot) @@ -7049,7 +7159,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llRemoteDataSetRegion() { m_host.AddScriptLPS(1); - NotImplemented("llRemoteDataSetRegion"); + Deprecated("llRemoteDataSetRegion"); } public LSL_Float llLog10(double val) @@ -8081,7 +8191,39 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetInventoryPermMask(string item, int mask, int value) { m_host.AddScriptLPS(1); - NotImplemented("llSetInventoryPermMask"); + if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false)) + { + if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) + { + lock (m_host.TaskInventory) + { + foreach (KeyValuePair inv in m_host.TaskInventory) + { + if (inv.Value.Name == item) + { + switch (mask) + { + case 0: + inv.Value.BasePermissions = (uint)value; + break; + case 1: + inv.Value.CurrentPermissions = (uint)value; + break; + case 2: + inv.Value.GroupPermissions = (uint)value; + break; + case 3: + inv.Value.EveryonePermissions = (uint)value; + break; + case 4: + inv.Value.NextPermissions = (uint)value; + break; + } + } + } + } + } + } } public LSL_String llGetInventoryCreator(string item) @@ -8515,6 +8657,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // we send to all landData.MediaID = new UUID(texture); landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0; + landData.MediaSize[0] = width; + landData.MediaSize[1] = height; + landData.MediaType = mediaType; // do that one last, it will cause a ParcelPropertiesUpdate landObject.SetMediaUrl(url); @@ -8574,11 +8719,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_host.AddScriptLPS(1); LSL_List list = new LSL_List(); //TO DO: make the implementation for the missing commands - //PARCEL_MEDIA_COMMAND_TEXTURE key uuid Use this to get or set the parcel's media texture. - //PARCEL_MEDIA_COMMAND_URL string url Used to get or set the parcel's media url. - //PARCEL_MEDIA_COMMAND_TYPE string mime_type Use this to get or set the parcel media MIME type (e.g. "text/html"). (1.19.1 RC0 or later) - //PARCEL_MEDIA_COMMAND_SIZE integer x, integer y Use this to get or set the parcel media pixel resolution. (1.19.1 RC0 or later) - //PARCEL_MEDIA_COMMAND_DESC string desc Use this to get or set the parcel media description. (1.19.1 RC0 or later) //PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later) for (int i = 0; i < aList.Data.Length; i++) { @@ -8596,6 +8736,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api case ParcelMediaCommandEnum.Texture: list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaID.ToString())); break; + case ParcelMediaCommandEnum.Type: + list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaType)); + break; + case ParcelMediaCommandEnum.Size: + list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[0])); + list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[1])); + break; default: ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url; NotImplemented("llParcelMediaQuery parameter do not supported yet: " + Enum.Parse(mediaCommandEnum.GetType() , aList.Data[i].ToString()).ToString()); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs index 13b855f..7cf82b2 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs @@ -160,6 +160,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public const int VEHICLE_BANKING_MIX = 39; public const int VEHICLE_BANKING_TIMESCALE = 40; public const int VEHICLE_REFERENCE_FRAME = 44; + public const int VEHICLE_RANGE_BLOCK = 45; + public const int VEHICLE_ROLL_FRAME = 46; public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1; public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2; public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4; @@ -170,6 +172,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128; public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256; public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512; + public const int VEHICLE_FLAG_NO_X = 1024; + public const int VEHICLE_FLAG_NO_Y = 2048; + public const int VEHICLE_FLAG_NO_Z = 4096; + public const int VEHICLE_FLAG_LOCK_HOVER_HEIGHT = 8192; + public const int VEHICLE_FLAG_NO_DEFLECTION = 16392; + public const int VEHICLE_FLAG_LOCK_ROTATION = 32784; public const int INVENTORY_ALL = -1; public const int INVENTORY_NONE = -1; -- cgit v1.1 From 2c0c21d0a5fd89120d8be47cd959acd96b286fe3 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sun, 14 Feb 2010 23:58:54 +0000 Subject: Plug a small hole --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 3 +++ 1 file changed, 3 insertions(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 7df3e50..c6cee75 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -585,6 +585,9 @@ namespace OpenSim.Region.Framework.Scenes m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString()); return; } + + if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) + return; } AssetBase asset = AssetService.Get(item.AssetID.ToString()); -- cgit v1.1 From 5c7acd0d4d4d4cf1eceb27dadabc051611a9be33 Mon Sep 17 00:00:00 2001 From: Revolution Date: Sun, 14 Feb 2010 19:32:08 -0600 Subject: Fixes a bug in the previous patch. Signed-off-by: Melanie --- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 31 ++++++++++-------------- 1 file changed, 13 insertions(+), 18 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 675fb69..7cdea05 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1226,14 +1226,6 @@ namespace OpenSim.Region.Framework.Scenes } else { - if (m_pos.X < 0) - m_pos.X = 128; - if (m_pos.Y < 0) - m_pos.Y = 128; - if (m_pos.X > Scene.WestBorders[0].BorderLine.X) - m_pos.X = 128; - if (m_pos.Y > Scene.NorthBorders[0].BorderLine.Y) - m_pos.Y = 128; m_LastFinitePos = m_pos; } @@ -2799,16 +2791,19 @@ namespace OpenSim.Region.Framework.Scenes { if (!needsTransit) { - Vector3 pos = AbsolutePosition; - if (AbsolutePosition.X < 0) - pos.X += Velocity.Y; - else if (AbsolutePosition.X > Constants.RegionSize) - pos.X -= Velocity.Y; - if (AbsolutePosition.Y < 0) - pos.Y += Velocity.Y; - else if (AbsolutePosition.Y > Constants.RegionSize) - pos.Y -= Velocity.Y; - AbsolutePosition = pos; + if (m_requestedSitTargetUUID == UUID.Zero) + { + Vector3 pos = AbsolutePosition; + if (AbsolutePosition.X < 0) + pos.X += Velocity.X; + else if (AbsolutePosition.X > Constants.RegionSize) + pos.X -= Velocity.X; + if (AbsolutePosition.Y < 0) + pos.Y += Velocity.Y; + else if (AbsolutePosition.Y > Constants.RegionSize) + pos.Y -= Velocity.Y; + AbsolutePosition = pos; + } } } else if (neighbor > 0) -- cgit v1.1 From af265e001d3bf043590e480cd6574a14193f6de0 Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Mon, 15 Feb 2010 19:15:03 +0900 Subject: Formatting cleanup. --- OpenSim/Region/Application/OpenSim.cs | 7 +- .../Region/ClientStack/LindenUDP/LLClientView.cs | 2 +- .../Region/CoreModules/Asset/CenomeAssetCache.cs | 2 +- .../Asset/LocalAssetServiceConnector.cs | 2 +- .../CoreModules/World/Access/AccessModule.cs | 2 +- .../World/Archiver/Tests/ArchiverTests.cs | 24 +-- .../Framework/Interfaces/IDynamicTextureManager.cs | 2 +- .../Framework/Interfaces/IEntityInventory.cs | 2 +- OpenSim/Region/Framework/Interfaces/IWorldComm.cs | 8 +- OpenSim/Region/Framework/Scenes/EventManager.cs | 172 ++++++++++----------- OpenSim/Region/Framework/Scenes/Scene.cs | 2 +- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 2 +- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 2 +- .../Framework/Scenes/SceneObjectPartInventory.cs | 6 +- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 8 +- OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs | 50 +++--- .../Shared/Api/Implementation/LSL_Api.cs | 64 ++++---- OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 2 +- 18 files changed, 178 insertions(+), 181 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index a86a831..96eceb0 100755 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -367,7 +367,6 @@ namespace OpenSim m_console.Commands.AddCommand("hypergrid", false, "unlink-region", "unlink-region or : ", "Unlink a hypergrid region", RunCommand); - } public override void ShutdownSpecific() @@ -433,7 +432,7 @@ namespace OpenSim // kick client... if (alert != null) presence.ControllingClient.Kick(alert); - else + else presence.ControllingClient.Kick("\nThe OpenSim manager kicked you out.\n"); // ...and close on our side @@ -640,7 +639,6 @@ namespace OpenSim } } - /// /// Load, Unload, and list Region modules in use /// @@ -972,7 +970,6 @@ namespace OpenSim scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY, scene.RegionInfo.InternalEndPoint.Port)); - }); break; @@ -1097,7 +1094,7 @@ namespace OpenSim } else { - MainConsole.Instance.Output(string.Format("A user with the name {0} {1} already exists!", firstName, lastName)); + MainConsole.Instance.Output(string.Format("A user with the name {0} {1} already exists!", firstName, lastName)); } } diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 9fe61a7..6cc0bd2 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -5216,7 +5216,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP args.Type = ChatTypeEnum.Shout; args.Position = new Vector3(); args.Scene = Scene; - args.Sender = this; + args.Sender = this; ChatMessage handlerChatFromClient2 = OnChatFromClient; if (handlerChatFromClient2 != null) handlerChatFromClient2(this, args); diff --git a/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs b/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs index 1903eb9..b1b7b27 100644 --- a/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs @@ -330,7 +330,7 @@ namespace OpenSim.Region.CoreModules.Asset //m_log.DebugFormat("[XXX] name = {0} (this module's name: {1}", name, Name); if (name != Name) - return; + return; long maxSize = DefaultMaxSize; int maxCount = DefaultMaxCount; diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs index 2f21e6d..50348da 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs @@ -224,7 +224,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset m_Cache.Cache(a); // if (null == a) -// m_log.WarnFormat("[LOCAL ASSET SERVICES CONNECTOR]: Could not asynchronously find asset with id {0}", id); +// m_log.WarnFormat("[LOCAL ASSET SERVICES CONNECTOR]: Could not asynchronously find asset with id {0}", id); Util.FireAndForget(delegate { handler(assetID, s, a); }); }); diff --git a/OpenSim/Region/CoreModules/World/Access/AccessModule.cs b/OpenSim/Region/CoreModules/World/Access/AccessModule.cs index 73f7ae3..e4fe352 100644 --- a/OpenSim/Region/CoreModules/World/Access/AccessModule.cs +++ b/OpenSim/Region/CoreModules/World/Access/AccessModule.cs @@ -109,7 +109,7 @@ namespace OpenSim.Region.CoreModules.World { foreach (Scene s in m_SceneList) { - if(!ProcessCommand(s, cmd)) + if (!ProcessCommand(s, cmd)) break; } } diff --git a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs index c3e57f0..e77a23b 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs @@ -99,7 +99,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests Quaternion rotationOffset = new Quaternion(20, 30, 40, 50); Vector3 offsetPosition = new Vector3(5, 10, 15); - return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, offsetPosition) { Name = partName }; + return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, offsetPosition) { Name = partName }; } protected SceneObjectPart CreateSceneObjectPart2() @@ -112,7 +112,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests Vector3 offsetPosition = new Vector3(20, 25, 30); return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, offsetPosition) { Name = partName }; - } + } /// /// Test saving a V0.2 OpenSim Region Archive. @@ -231,7 +231,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests foreach (string name in names) { if (name.EndsWith(".Resources.test-sound.wav")) - soundDataResourceName = name; + soundDataResourceName = name; } Assert.That(soundDataResourceName, Is.Not.Null); @@ -259,7 +259,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests = new TaskInventoryItem { AssetID = soundUuid, ItemID = soundItemUuid, Name = soundItemName }; part1.Inventory.AddInventoryItem(item1, true); } - } + } m_scene.AddNewSceneObject(object1, false); @@ -306,15 +306,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests /// Test loading the region settings of a V0.2 OpenSim Region Archive. /// [Test] - public void TestLoadOarV0_2RegionSettings() + public void TestLoadOarV0_2RegionSettings() { TestHelper.InMethod(); - //log4net.Config.XmlConfigurator.Configure(); + //log4net.Config.XmlConfigurator.Configure(); MemoryStream archiveWriteStream = new MemoryStream(); TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream); - tar.WriteDir(ArchiveConstants.TERRAINS_PATH); + tar.WriteDir(ArchiveConstants.TERRAINS_PATH); tar.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, ArchiveWriteRequestExecution.Create0p2ControlFile()); RegionSettings rs = new RegionSettings(); @@ -329,11 +329,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests rs.DisablePhysics = true; rs.DisableScripts = true; rs.Elevation1NW = 15.9; - rs.Elevation1NE = 45.3; + rs.Elevation1NE = 45.3; rs.Elevation1SE = 49; rs.Elevation1SW = 1.9; rs.Elevation2NW = 4.5; - rs.Elevation2NE = 19.2; + rs.Elevation2NE = 19.2; rs.Elevation2SE = 9.2; rs.Elevation2SW = 2.1; rs.FixedSun = true; @@ -411,7 +411,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests // Quaternion part2RotationOffset = new Quaternion(60, 70, 80, 90); // Vector3 part2OffsetPosition = new Vector3(20, 25, 30); - SceneObjectPart part2 = CreateSceneObjectPart2(); + SceneObjectPart part2 = CreateSceneObjectPart2(); // Create an oar file that we can use for the merge { @@ -420,9 +420,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests TerrainModule terrainModule = new TerrainModule(); Scene scene = SceneSetupHelpers.SetupScene(); - SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule); + SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule); - m_scene.AddNewSceneObject(new SceneObjectGroup(part2), false); + m_scene.AddNewSceneObject(new SceneObjectGroup(part2), false); // Write out this scene scene.EventManager.OnOarFileSaved += SaveCompleted; diff --git a/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs b/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs index c289cdb..8954513 100644 --- a/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs +++ b/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs @@ -65,7 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces /// The UUID of the texture updater, not the texture UUID. If you need the texture UUID then you will need /// to obtain it directly from the SceneObjectPart. For instance, if ALL_SIDES is set then this texture /// can be obtained as SceneObjectPart.Shape.Textures.DefaultTexture.TextureID - /// + /// UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams, int updateTimer, bool SetBlending, byte AlphaValue); diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs index fa9bf19..f58904f 100644 --- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs +++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs @@ -150,7 +150,7 @@ namespace OpenSim.Region.Framework.Interfaces /// /// A list of inventory items with that name. /// If no inventory item has that name then an empty list is returned. - /// + /// IList GetInventoryItems(string name); /// diff --git a/OpenSim/Region/Framework/Interfaces/IWorldComm.cs b/OpenSim/Region/Framework/Interfaces/IWorldComm.cs index 948b9dc..8da99a0 100644 --- a/OpenSim/Region/Framework/Interfaces/IWorldComm.cs +++ b/OpenSim/Region/Framework/Interfaces/IWorldComm.cs @@ -62,7 +62,7 @@ namespace OpenSim.Region.Framework.Interfaces /// name to filter on /// key to filter on (user given, could be totally faked) /// msg to filter on - /// number of the scripts handle + /// number of the scripts handle int Listen(uint LocalID, UUID itemID, UUID hostID, int channel, string name, UUID id, string msg); /// @@ -77,19 +77,19 @@ namespace OpenSim.Region.Framework.Interfaces /// channel to sent on /// name of sender (object or avatar) /// key of sender (object or avatar) - /// msg to sent + /// msg to sent void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg); /// /// Are there any listen events ready to be dispatched? /// - /// boolean indication + /// boolean indication bool HasMessages(); /// /// Pop the first availlable listen event from the queue /// - /// ListenerInfo with filter filled in + /// ListenerInfo with filter filled in IWorldCommListenerInfo GetNextMessage(); void ListenControl(UUID itemID, int handle, int active); diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 9f74b2a..57e1c37 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs @@ -209,7 +209,7 @@ namespace OpenSim.Region.Framework.Scenes /// Triggered when an object or attachment enters a scene /// public event OnIncomingSceneObjectDelegate OnIncomingSceneObject; - public delegate void OnIncomingSceneObjectDelegate(SceneObjectGroup so); + public delegate void OnIncomingSceneObjectDelegate(SceneObjectGroup so); public delegate void NewInventoryItemUploadComplete(UUID avatarID, UUID assetID, string name, int userlevel); @@ -413,7 +413,7 @@ namespace OpenSim.Region.Framework.Scenes } } } - } + } public void TriggerGetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) { @@ -433,7 +433,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnScriptChangedEvent(uint localID, uint change) @@ -454,7 +454,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnClientMovement(ScenePresence avatar) @@ -475,7 +475,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerPermissionError(UUID user, string reason) @@ -496,7 +496,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnPluginConsole(string[] args) @@ -517,7 +517,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnFrame() @@ -538,11 +538,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnNewClient(IClientAPI client) - { + { OnNewClientDelegate handlerNewClient = OnNewClient; if (handlerNewClient != null) { @@ -559,10 +559,10 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } if (client is IClientCore) - { + { OnClientConnectCoreDelegate handlerClientConnect = OnClientConnect; if (handlerClientConnect != null) { @@ -579,7 +579,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } } @@ -601,11 +601,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnRemovePresence(UUID agentId) - { + { OnRemovePresenceDelegate handlerRemovePresence = OnRemovePresence; if (handlerRemovePresence != null) { @@ -622,11 +622,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnBackup(IRegionDataStore dstore) - { + { OnBackupDelegate handlerOnAttach = OnBackup; if (handlerOnAttach != null) { @@ -643,7 +643,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerParcelPrimCountUpdate() @@ -664,7 +664,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerMoneyTransfer(Object sender, MoneyTransferArgs args) @@ -685,7 +685,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerTerrainTick() @@ -706,7 +706,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerParcelPrimCountAdd(SceneObjectGroup obj) @@ -727,7 +727,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerObjectBeingRemovedFromScene(SceneObjectGroup obj) @@ -748,11 +748,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerShutdown() - { + { OnShutdownDelegate handlerShutdown = OnShutdown; if (handlerShutdown != null) { @@ -769,11 +769,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) - { + { ObjectGrabDelegate handlerObjectGrab = OnObjectGrab; if (handlerObjectGrab != null) { @@ -790,11 +790,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerObjectGrabbing(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) - { + { ObjectGrabDelegate handlerObjectGrabbing = OnObjectGrabbing; if (handlerObjectGrabbing != null) { @@ -811,11 +811,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) - { + { ObjectDeGrabDelegate handlerObjectDeGrab = OnObjectDeGrab; if (handlerObjectDeGrab != null) { @@ -832,11 +832,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerScriptReset(uint localID, UUID itemID) - { + { ScriptResetDelegate handlerScriptReset = OnScriptReset; if (handlerScriptReset != null) { @@ -853,11 +853,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource) - { + { NewRezScript handlerRezScript = OnRezScript; if (handlerRezScript != null) { @@ -874,7 +874,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerStartScript(uint localID, UUID itemID) @@ -895,7 +895,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerStopScript(uint localID, UUID itemID) @@ -916,11 +916,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerRemoveScript(uint localID, UUID itemID) - { + { RemoveScript handlerRemoveScript = OnRemoveScript; if (handlerRemoveScript != null) { @@ -937,7 +937,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public bool TriggerGroupMove(UUID groupID, Vector3 delta) @@ -1036,7 +1036,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerLandObjectAdded(ILandObject newParcel) @@ -1057,7 +1057,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerLandObjectRemoved(UUID globalID) @@ -1078,7 +1078,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerLandObjectUpdated(uint localParcelID, ILandObject newParcel) @@ -1104,7 +1104,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerIncomingInstantMessage(GridInstantMessage message) @@ -1125,7 +1125,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerUnhandledInstantMessage(GridInstantMessage message) @@ -1146,7 +1146,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerClientClosed(UUID ClientID, Scene scene) @@ -1167,7 +1167,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnMakeChildAgent(ScenePresence presence) @@ -1188,7 +1188,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnMakeRootAgent(ScenePresence presence) @@ -1209,7 +1209,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnIncomingSceneObject(SceneObjectGroup so) @@ -1229,12 +1229,12 @@ namespace OpenSim.Region.Framework.Scenes "[EVENT MANAGER]: Delegate for TriggerOnIncomingSceneObject failed - continuing. {0} {1}", e.Message, e.StackTrace); } - } + } } } public void TriggerOnRegisterCaps(UUID agentID, Caps caps) - { + { RegisterCapsEvent handlerRegisterCaps = OnRegisterCaps; if (handlerRegisterCaps != null) { @@ -1251,7 +1251,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnDeregisterCaps(UUID agentID, Caps caps) @@ -1272,7 +1272,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnNewInventoryItemUploadComplete(UUID agentID, UUID AssetID, String AssetName, int userlevel) @@ -1293,7 +1293,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerLandBuy(Object sender, LandBuyArgs args) @@ -1314,7 +1314,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerValidateLandBuy(Object sender, LandBuyArgs args) @@ -1335,11 +1335,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 currentpos) - { + { ScriptAtTargetEvent handlerScriptAtTargetEvent = OnScriptAtTargetEvent; if (handlerScriptAtTargetEvent != null) { @@ -1356,7 +1356,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerNotAtTargetEvent(uint localID) @@ -1377,11 +1377,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion currentrot) - { + { ScriptAtRotTargetEvent handlerScriptAtRotTargetEvent = OnScriptAtRotTargetEvent; if (handlerScriptAtRotTargetEvent != null) { @@ -1398,7 +1398,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerNotAtRotTargetEvent(uint localID) @@ -1419,7 +1419,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerRequestChangeWaterHeight(float height) @@ -1440,7 +1440,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerAvatarKill(uint KillerObjectLocalID, ScenePresence DeadAvatar) @@ -1461,7 +1461,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerSignificantClientMovement(IClientAPI client) @@ -1482,7 +1482,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnChatFromWorld(Object sender, OSChatMessage chat) @@ -1503,7 +1503,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnChatFromClient(Object sender, OSChatMessage chat) @@ -1524,7 +1524,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat) @@ -1545,7 +1545,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } internal void TriggerControlEvent(uint p, UUID scriptUUID, UUID avatarID, uint held, uint _changed) @@ -1566,7 +1566,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerNoticeNoLandDataFromStorage() @@ -1587,7 +1587,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerIncomingLandDataFromStorage(List landData) @@ -1608,7 +1608,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerSetAllowForcefulBan(bool allow) @@ -1629,7 +1629,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerRequestParcelPrimCountUpdate() @@ -1650,7 +1650,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerParcelPrimCountTainted() @@ -1671,7 +1671,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } // this lets us keep track of nasty script events like timer, etc. @@ -1710,7 +1710,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public float GetCurrentTimeAsSunLindenHour() @@ -1737,7 +1737,7 @@ namespace OpenSim.Region.Framework.Scenes } public void TriggerOarFileLoaded(Guid requestId, string message) - { + { OarFileLoaded handlerOarFileLoaded = OnOarFileLoaded; if (handlerOarFileLoaded != null) { @@ -1754,7 +1754,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOarFileSaved(Guid requestId, string message) @@ -1775,7 +1775,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerEmptyScriptCompileQueue(int numScriptsFailed, string message) @@ -1796,7 +1796,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerScriptCollidingStart(uint localId, ColliderArgs colliders) @@ -1817,7 +1817,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerScriptColliding(uint localId, ColliderArgs colliders) @@ -1838,7 +1838,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerScriptCollidingEnd(uint localId, ColliderArgs colliders) @@ -1859,7 +1859,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerScriptLandCollidingStart(uint localId, ColliderArgs colliders) @@ -1880,7 +1880,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerScriptLandColliding(uint localId, ColliderArgs colliders) @@ -1901,7 +1901,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerScriptLandCollidingEnd(uint localId, ColliderArgs colliders) @@ -1922,11 +1922,11 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerSetRootAgentScene(UUID agentID, Scene scene) - { + { OnSetRootAgentSceneDelegate handlerSetRootAgentScene = OnSetRootAgentScene; if (handlerSetRootAgentScene != null) { @@ -1943,7 +1943,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } public void TriggerOnRegionUp(GridRegion otherRegion) @@ -1964,7 +1964,7 @@ namespace OpenSim.Region.Framework.Scenes e.Message, e.StackTrace); } } - } + } } } } \ No newline at end of file diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index c7fb32a..41fd1e1 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2541,7 +2541,7 @@ namespace OpenSim.Region.Framework.Scenes AttachObject( sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); RootPrim.RemFlag(PrimFlags.TemporaryOnRez); - grp.SendGroupFullUpdate(); + grp.SendGroupFullUpdate(); } else { diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 2b13181..321cc45 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -642,7 +642,7 @@ namespace OpenSim.Region.Framework.Scenes // it get cleaned up // group.RootPart.RemFlag(PrimFlags.TemporaryOnRez); - group.HasGroupChanged = false; + group.HasGroupChanged = false; } else { diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index d339208..5c283bc 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -4531,7 +4531,7 @@ namespace OpenSim.Region.Framework.Scenes else { // m_log.DebugFormat( -// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId); +// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId); ScheduleFullUpdate(); } } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 298ede9..a555eae 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs @@ -314,7 +314,7 @@ namespace OpenSim.Region.Framework.Scenes } ); } - } + } private void RestoreSavedScriptState(UUID oldID, UUID newID) { @@ -579,7 +579,7 @@ namespace OpenSim.Region.Framework.Scenes m_items.TryGetValue(itemId, out item); return item; - } + } /// /// Get inventory items by name. @@ -588,7 +588,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// A list of inventory items with that name. /// If no inventory item has that name then an empty list is returned. - /// + /// public IList GetInventoryItems(string name) { IList items = new List(); diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 7cdea05..4973663 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -227,7 +227,7 @@ namespace OpenSim.Region.Framework.Scenes // Agent's Draw distance. protected float m_DrawDistance; - protected AvatarAppearance m_appearance; + protected AvatarAppearance m_appearance; // neighbouring regions we have enabled a child agent in // holds the seed cap for the child agent in that region @@ -648,7 +648,7 @@ namespace OpenSim.Region.Framework.Scenes #region Constructor(s) public ScenePresence() - { + { m_sendCourseLocationsMethod = SendCoarseLocationsDefault; CreateSceneViewer(); m_animator = new ScenePresenceAnimator(this); @@ -3265,7 +3265,7 @@ namespace OpenSim.Region.Framework.Scenes m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; m_physicsActor.OnOutOfBounds += OutOfBoundsCall; // Called for PhysicsActors when there's something wrong m_physicsActor.SubscribeEvents(500); - m_physicsActor.LocalID = LocalId; + m_physicsActor.LocalID = LocalId; } private void OutOfBoundsCall(Vector3 pos) @@ -3357,7 +3357,7 @@ namespace OpenSim.Region.Framework.Scenes } if (m_health <= 0) m_scene.EventManager.TriggerAvatarKill(killerObj, this); - } + } } public void setHealthWithUpdate(float health) diff --git a/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs b/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs index 6ae0c8a..9beeabb 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs @@ -72,23 +72,23 @@ namespace OpenSim.Region.Physics.OdePlugin // Vehicle properties - private Vehicle m_type = Vehicle.TYPE_NONE; // If a 'VEHICLE', and what kind - // private Quaternion m_referenceFrame = Quaternion.Identity; // Axis modifier - private VehicleFlag m_flags = (VehicleFlag) 0; // Boolean settings: - // HOVER_TERRAIN_ONLY - // HOVER_GLOBAL_HEIGHT - // NO_DEFLECTION_UP - // HOVER_WATER_ONLY - // HOVER_UP_ONLY - // LIMIT_MOTOR_UP - // LIMIT_ROLL_ONLY + private Vehicle m_type = Vehicle.TYPE_NONE; // If a 'VEHICLE', and what kind + // private Quaternion m_referenceFrame = Quaternion.Identity; // Axis modifier + private VehicleFlag m_flags = (VehicleFlag) 0; // Boolean settings: + // HOVER_TERRAIN_ONLY + // HOVER_GLOBAL_HEIGHT + // NO_DEFLECTION_UP + // HOVER_WATER_ONLY + // HOVER_UP_ONLY + // LIMIT_MOTOR_UP + // LIMIT_ROLL_ONLY private VehicleFlag m_Hoverflags = (VehicleFlag)0; private Vector3 m_BlockingEndPoint = Vector3.Zero; private Quaternion m_RollreferenceFrame = Quaternion.Identity; // Linear properties - private Vector3 m_linearMotorDirection = Vector3.Zero; // velocity requested by LSL, decayed by time - private Vector3 m_linearMotorDirectionLASTSET = Vector3.Zero; // velocity requested by LSL - private Vector3 m_dir = Vector3.Zero; // velocity applied to body + private Vector3 m_linearMotorDirection = Vector3.Zero; // velocity requested by LSL, decayed by time + private Vector3 m_linearMotorDirectionLASTSET = Vector3.Zero; // velocity requested by LSL + private Vector3 m_dir = Vector3.Zero; // velocity applied to body private Vector3 m_linearFrictionTimescale = Vector3.Zero; private float m_linearMotorDecayTimescale = 0; private float m_linearMotorTimescale = 0; @@ -98,14 +98,14 @@ namespace OpenSim.Region.Physics.OdePlugin // private Vector3 m_linearMotorOffset = Vector3.Zero; //Angular properties - private Vector3 m_angularMotorDirection = Vector3.Zero; // angular velocity requested by LSL motor - private int m_angularMotorApply = 0; // application frame counter - private Vector3 m_angularMotorVelocity = Vector3.Zero; // current angular motor velocity - private float m_angularMotorTimescale = 0; // motor angular velocity ramp up rate - private float m_angularMotorDecayTimescale = 0; // motor angular velocity decay rate - private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate - private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body - // private Vector3 m_lastVertAttractor = Vector3.Zero; // what VA was last applied to body + private Vector3 m_angularMotorDirection = Vector3.Zero; // angular velocity requested by LSL motor + private int m_angularMotorApply = 0; // application frame counter + private Vector3 m_angularMotorVelocity = Vector3.Zero; // current angular motor velocity + private float m_angularMotorTimescale = 0; // motor angular velocity ramp up rate + private float m_angularMotorDecayTimescale = 0; // motor angular velocity decay rate + private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate + private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body + // private Vector3 m_lastVertAttractor = Vector3.Zero; // what VA was last applied to body //Deflection properties // private float m_angularDeflectionEfficiency = 0; @@ -123,14 +123,14 @@ namespace OpenSim.Region.Physics.OdePlugin // private float m_VhoverEfficiency = 0f; private float m_VhoverTimescale = 0f; private float m_VhoverTargetHeight = -1.0f; // if <0 then no hover, else its the current target height - private float m_VehicleBuoyancy = 0f; //KF: m_VehicleBuoyancy is set by VEHICLE_BUOYANCY for a vehicle. + private float m_VehicleBuoyancy = 0f; //KF: m_VehicleBuoyancy is set by VEHICLE_BUOYANCY for a vehicle. // Modifies gravity. Slider between -1 (double-gravity) and 1 (full anti-gravity) // KF: So far I have found no good method to combine a script-requested .Z velocity and gravity. // Therefore only m_VehicleBuoyancy=1 (0g) will use the script-requested .Z velocity. - //Attractor properties - private float m_verticalAttractionEfficiency = 1.0f; // damped - private float m_verticalAttractionTimescale = 500f; // Timescale > 300 means no vert attractor. + //Attractor properties + private float m_verticalAttractionEfficiency = 1.0f; // damped + private float m_verticalAttractionTimescale = 500f; // Timescale > 300 means no vert attractor. internal void ProcessFloatVehicleParam(Vehicle pParam, float pValue) { diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index eab4754..aa876ec 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -8192,38 +8192,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false)) - { - if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) - { - lock (m_host.TaskInventory) - { - foreach (KeyValuePair inv in m_host.TaskInventory) - { - if (inv.Value.Name == item) - { - switch (mask) - { - case 0: - inv.Value.BasePermissions = (uint)value; - break; - case 1: - inv.Value.CurrentPermissions = (uint)value; - break; - case 2: - inv.Value.GroupPermissions = (uint)value; - break; - case 3: - inv.Value.EveryonePermissions = (uint)value; - break; - case 4: - inv.Value.NextPermissions = (uint)value; - break; - } - } - } - } - } - } + { + if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) + { + lock (m_host.TaskInventory) + { + foreach (KeyValuePair inv in m_host.TaskInventory) + { + if (inv.Value.Name == item) + { + switch (mask) + { + case 0: + inv.Value.BasePermissions = (uint)value; + break; + case 1: + inv.Value.CurrentPermissions = (uint)value; + break; + case 2: + inv.Value.GroupPermissions = (uint)value; + break; + case 3: + inv.Value.EveryonePermissions = (uint)value; + break; + case 4: + inv.Value.NextPermissions = (uint)value; + break; + } + } + } + } + } + } } public LSL_String llGetInventoryCreator(string item) diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index c552b92..98e77c0 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -841,7 +841,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine ObjectRemoved handlerObjectRemoved = OnObjectRemoved; if (handlerObjectRemoved != null) { - SceneObjectPart part = m_Scene.GetSceneObjectPart(localID); + SceneObjectPart part = m_Scene.GetSceneObjectPart(localID); handlerObjectRemoved(part.UUID); } -- cgit v1.1 From 052f2b3e275b60777c51ca0274f33abce869c55d Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 16 Feb 2010 14:36:08 +0000 Subject: minor: Make SOG.DelinkFromGroup() return the newly delinked scene object instead of void --- OpenSim/Region/Framework/Scenes/SceneBase.cs | 2 +- .../Region/Framework/Scenes/SceneObjectGroup.cs | 35 +++++++++++++++------- 2 files changed, 26 insertions(+), 11 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index 1547f9a..5e798c0 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs @@ -262,7 +262,7 @@ namespace OpenSim.Region.Framework.Scenes /// Returns a new unallocated local ID /// /// A brand new local ID - protected internal uint AllocateLocalId() + public uint AllocateLocalId() { uint myID; diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index af46659..94e64e4 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -509,7 +509,7 @@ namespace OpenSim.Region.Framework.Scenes if (m_rootPart.Shape.PCode != 9 || m_rootPart.Shape.State == 0) m_rootPart.ParentID = 0; - if (m_rootPart.LocalId==0) + if (m_rootPart.LocalId == 0) m_rootPart.LocalId = m_scene.AllocateLocalId(); // No need to lock here since the object isn't yet in a scene @@ -1468,6 +1468,9 @@ namespace OpenSim.Region.Framework.Scenes /// internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags) { +// m_log.DebugFormat( +// "[SOG]: Sendinging part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId); + if (m_rootPart.UUID == part.UUID) { if (IsAttachment) @@ -2284,7 +2287,6 @@ namespace OpenSim.Region.Framework.Scenes AttachToBackup(); - // Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the // position of linkset prims. IF YOU CHANGE THIS, YOU MUST TEST colliding with just linked and // unmoved prims! @@ -2299,9 +2301,10 @@ namespace OpenSim.Region.Framework.Scenes /// an independent SceneObjectGroup. /// /// - public void DelinkFromGroup(uint partID) + /// The object group of the newly delinked prim. Null if part could not be found + public SceneObjectGroup DelinkFromGroup(uint partID) { - DelinkFromGroup(partID, true); + return DelinkFromGroup(partID, true); } /// @@ -2310,28 +2313,39 @@ namespace OpenSim.Region.Framework.Scenes /// /// /// - public void DelinkFromGroup(uint partID, bool sendEvents) + /// The object group of the newly delinked prim. Null if part could not be found + public SceneObjectGroup DelinkFromGroup(uint partID, bool sendEvents) { SceneObjectPart linkPart = GetChildPart(partID); if (linkPart != null) { - DelinkFromGroup(linkPart, sendEvents); + return DelinkFromGroup(linkPart, sendEvents); } else { - m_log.InfoFormat("[SCENE OBJECT GROUP]: " + + m_log.WarnFormat("[SCENE OBJECT GROUP]: " + "DelinkFromGroup(): Child prim {0} not found in object {1}, {2}", partID, LocalId, UUID); + + return null; } } - public void DelinkFromGroup(SceneObjectPart linkPart, bool sendEvents) + /// + /// Delink the given prim from this group. The delinked prim is established as + /// an independent SceneObjectGroup. + /// + /// + /// + /// The object group of the newly delinked prim. + public SceneObjectGroup DelinkFromGroup(SceneObjectPart linkPart, bool sendEvents) { - linkPart.ClearUndoState(); // m_log.DebugFormat( // "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}", // linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID); + + linkPart.ClearUndoState(); Quaternion worldRot = linkPart.GetWorldRotation(); @@ -2384,6 +2398,8 @@ namespace OpenSim.Region.Framework.Scenes //HasGroupChanged = true; //ScheduleGroupForFullUpdate(); + + return objectGroup; } /// @@ -2422,7 +2438,6 @@ namespace OpenSim.Region.Framework.Scenes part.LinkNum = linkNum; - part.OffsetPosition = part.GroupPosition - AbsolutePosition; Quaternion rootRotation = m_rootPart.RotationOffset; -- cgit v1.1 From 95a31c9b6f0ca4308bc74fb0da5572885823451f Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Wed, 17 Feb 2010 20:57:29 +0000 Subject: minor: fix error inserting field in log message --- .../ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index 3883dc6..191e859 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs @@ -317,7 +317,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory item = m_InventoryService.GetItem(item); if (null == item) - m_log.ErrorFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Could not find item with id {0}"); + m_log.ErrorFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Could not find item with id {0}", item.ID); return item; } -- cgit v1.1 From 10f94a3c335dec8902b45bf16b8a8beb7f0e8ea8 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Wed, 17 Feb 2010 21:13:31 +0000 Subject: remove old commented out switch statement in LLClientView since this has successfully been split into separate methods for quite some time now --- .../Region/ClientStack/LindenUDP/LLClientView.cs | 4849 +------------------- 1 file changed, 3 insertions(+), 4846 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 6cc0bd2..0b90b55 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -11025,4855 +11025,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// OpenMetaverse.packet public void ProcessInPacket(Packet Pack) { - - if (ProcessPacketMethod(Pack)) - { - PacketPool.Instance.ReturnPacket(Pack); - return; - } - - // Main packet processing conditional - switch (Pack.Type) - { - #region CommentedOut - /* - #region Scene/Avatar - - - case PacketType.AvatarPropertiesRequest: - AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (avatarProperties.AgentData.SessionID != SessionId || - avatarProperties.AgentData.AgentID != AgentId) - break; - } - #endregion - - RequestAvatarProperties handlerRequestAvatarProperties = OnRequestAvatarProperties; - if (handlerRequestAvatarProperties != null) - { - handlerRequestAvatarProperties(this, avatarProperties.AgentData.AvatarID); - } - - break; - - case PacketType.ChatFromViewer: - ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (inchatpack.AgentData.SessionID != SessionId || - inchatpack.AgentData.AgentID != AgentId) - break; - } - #endregion - - string fromName = String.Empty; //ClientAvatar.firstname + " " + ClientAvatar.lastname; - byte[] message = inchatpack.ChatData.Message; - byte type = inchatpack.ChatData.Type; - Vector3 fromPos = new Vector3(); // ClientAvatar.Pos; - // UUID fromAgentID = AgentId; - - int channel = inchatpack.ChatData.Channel; - - if (OnChatFromClient != null) - { - OSChatMessage args = new OSChatMessage(); - args.Channel = channel; - args.From = fromName; - args.Message = Utils.BytesToString(message); - args.Type = (ChatTypeEnum)type; - args.Position = fromPos; - - args.Scene = Scene; - args.Sender = this; - args.SenderUUID = this.AgentId; - - ChatMessage handlerChatFromClient = OnChatFromClient; - if (handlerChatFromClient != null) - handlerChatFromClient(this, args); - } - break; - - case PacketType.AvatarPropertiesUpdate: - AvatarPropertiesUpdatePacket avatarProps = (AvatarPropertiesUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (avatarProps.AgentData.SessionID != SessionId || - avatarProps.AgentData.AgentID != AgentId) - break; - } - #endregion - - UpdateAvatarProperties handlerUpdateAvatarProperties = OnUpdateAvatarProperties; - if (handlerUpdateAvatarProperties != null) - { - AvatarPropertiesUpdatePacket.PropertiesDataBlock Properties = avatarProps.PropertiesData; - UserProfileData UserProfile = new UserProfileData(); - UserProfile.ID = AgentId; - UserProfile.AboutText = Utils.BytesToString(Properties.AboutText); - UserProfile.FirstLifeAboutText = Utils.BytesToString(Properties.FLAboutText); - UserProfile.FirstLifeImage = Properties.FLImageID; - UserProfile.Image = Properties.ImageID; - UserProfile.ProfileUrl = Utils.BytesToString(Properties.ProfileURL); - - handlerUpdateAvatarProperties(this, UserProfile); - } - break; - - case PacketType.ScriptDialogReply: - ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (rdialog.AgentData.SessionID != SessionId || - rdialog.AgentData.AgentID != AgentId) - break; - } - #endregion - - int ch = rdialog.Data.ChatChannel; - byte[] msg = rdialog.Data.ButtonLabel; - if (OnChatFromClient != null) - { - OSChatMessage args = new OSChatMessage(); - args.Channel = ch; - args.From = String.Empty; - args.Message = Utils.BytesToString(msg); - args.Type = ChatTypeEnum.Shout; - args.Position = new Vector3(); - args.Scene = Scene; - args.Sender = this; - ChatMessage handlerChatFromClient2 = OnChatFromClient; - if (handlerChatFromClient2 != null) - handlerChatFromClient2(this, args); - } - - break; - - case PacketType.ImprovedInstantMessage: - ImprovedInstantMessagePacket msgpack = (ImprovedInstantMessagePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (msgpack.AgentData.SessionID != SessionId || - msgpack.AgentData.AgentID != AgentId) - break; - } - #endregion - - string IMfromName = Util.FieldToString(msgpack.MessageBlock.FromAgentName); - string IMmessage = Utils.BytesToString(msgpack.MessageBlock.Message); - ImprovedInstantMessage handlerInstantMessage = OnInstantMessage; - - if (handlerInstantMessage != null) - { - GridInstantMessage im = new GridInstantMessage(Scene, - msgpack.AgentData.AgentID, - IMfromName, - msgpack.MessageBlock.ToAgentID, - msgpack.MessageBlock.Dialog, - msgpack.MessageBlock.FromGroup, - IMmessage, - msgpack.MessageBlock.ID, - msgpack.MessageBlock.Offline != 0 ? true : false, - msgpack.MessageBlock.Position, - msgpack.MessageBlock.BinaryBucket); - - handlerInstantMessage(this, im); - } - break; - - case PacketType.AcceptFriendship: - AcceptFriendshipPacket afriendpack = (AcceptFriendshipPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (afriendpack.AgentData.SessionID != SessionId || - afriendpack.AgentData.AgentID != AgentId) - break; - } - #endregion - - // My guess is this is the folder to stick the calling card into - List callingCardFolders = new List(); - - UUID agentID = afriendpack.AgentData.AgentID; - UUID transactionID = afriendpack.TransactionBlock.TransactionID; - - for (int fi = 0; fi < afriendpack.FolderData.Length; fi++) - { - callingCardFolders.Add(afriendpack.FolderData[fi].FolderID); - } - - FriendActionDelegate handlerApproveFriendRequest = OnApproveFriendRequest; - if (handlerApproveFriendRequest != null) - { - handlerApproveFriendRequest(this, agentID, transactionID, callingCardFolders); - } - break; - - case PacketType.DeclineFriendship: - DeclineFriendshipPacket dfriendpack = (DeclineFriendshipPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dfriendpack.AgentData.SessionID != SessionId || - dfriendpack.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (OnDenyFriendRequest != null) - { - OnDenyFriendRequest(this, - dfriendpack.AgentData.AgentID, - dfriendpack.TransactionBlock.TransactionID, - null); - } - break; - - case PacketType.TerminateFriendship: - TerminateFriendshipPacket tfriendpack = (TerminateFriendshipPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (tfriendpack.AgentData.SessionID != SessionId || - tfriendpack.AgentData.AgentID != AgentId) - break; - } - #endregion - - UUID listOwnerAgentID = tfriendpack.AgentData.AgentID; - UUID exFriendID = tfriendpack.ExBlock.OtherID; - - FriendshipTermination handlerTerminateFriendship = OnTerminateFriendship; - if (handlerTerminateFriendship != null) - { - handlerTerminateFriendship(this, listOwnerAgentID, exFriendID); - } - break; - - case PacketType.RezObject: - RezObjectPacket rezPacket = (RezObjectPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (rezPacket.AgentData.SessionID != SessionId || - rezPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - RezObject handlerRezObject = OnRezObject; - if (handlerRezObject != null) - { - handlerRezObject(this, rezPacket.InventoryData.ItemID, rezPacket.RezData.RayEnd, - rezPacket.RezData.RayStart, rezPacket.RezData.RayTargetID, - rezPacket.RezData.BypassRaycast, rezPacket.RezData.RayEndIsIntersection, - rezPacket.RezData.RezSelected, rezPacket.RezData.RemoveItem, - rezPacket.RezData.FromTaskID); - } - break; - - case PacketType.DeRezObject: - DeRezObjectPacket DeRezPacket = (DeRezObjectPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (DeRezPacket.AgentData.SessionID != SessionId || - DeRezPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - DeRezObject handlerDeRezObject = OnDeRezObject; - if (handlerDeRezObject != null) - { - List deRezIDs = new List(); - - foreach (DeRezObjectPacket.ObjectDataBlock data in - DeRezPacket.ObjectData) - { - deRezIDs.Add(data.ObjectLocalID); - } - // It just so happens that the values on the DeRezAction enumerator match the Destination - // values given by a Second Life client - handlerDeRezObject(this, deRezIDs, - DeRezPacket.AgentBlock.GroupID, - (DeRezAction)DeRezPacket.AgentBlock.Destination, - DeRezPacket.AgentBlock.DestinationID); - - } - break; - - case PacketType.ModifyLand: - ModifyLandPacket modify = (ModifyLandPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (modify.AgentData.SessionID != SessionId || - modify.AgentData.AgentID != AgentId) - break; - } - - #endregion - //m_log.Info("[LAND]: LAND:" + modify.ToString()); - if (modify.ParcelData.Length > 0) - { - if (OnModifyTerrain != null) - { - for (int i = 0; i < modify.ParcelData.Length; i++) - { - ModifyTerrain handlerModifyTerrain = OnModifyTerrain; - if (handlerModifyTerrain != null) - { - handlerModifyTerrain(AgentId, modify.ModifyBlock.Height, modify.ModifyBlock.Seconds, - modify.ModifyBlock.BrushSize, - modify.ModifyBlock.Action, modify.ParcelData[i].North, - modify.ParcelData[i].West, modify.ParcelData[i].South, - modify.ParcelData[i].East, AgentId); - } - } - } - } - - break; - - case PacketType.RegionHandshakeReply: - - Action handlerRegionHandShakeReply = OnRegionHandShakeReply; - if (handlerRegionHandShakeReply != null) - { - handlerRegionHandShakeReply(this); - } - - break; - - case PacketType.AgentWearablesRequest: - GenericCall2 handlerRequestWearables = OnRequestWearables; - - if (handlerRequestWearables != null) - { - handlerRequestWearables(); - } - - Action handlerRequestAvatarsData = OnRequestAvatarsData; - - if (handlerRequestAvatarsData != null) - { - handlerRequestAvatarsData(this); - } - - break; - - case PacketType.AgentSetAppearance: - AgentSetAppearancePacket appear = (AgentSetAppearancePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (appear.AgentData.SessionID != SessionId || - appear.AgentData.AgentID != AgentId) - break; - } - #endregion - - SetAppearance handlerSetAppearance = OnSetAppearance; - if (handlerSetAppearance != null) - { - // Temporarily protect ourselves from the mantis #951 failure. - // However, we could do this for several other handlers where a failure isn't terminal - // for the client session anyway, in order to protect ourselves against bad code in plugins - try - { - byte[] visualparams = new byte[appear.VisualParam.Length]; - for (int i = 0; i < appear.VisualParam.Length; i++) - visualparams[i] = appear.VisualParam[i].ParamValue; - - Primitive.TextureEntry te = null; - if (appear.ObjectData.TextureEntry.Length > 1) - te = new Primitive.TextureEntry(appear.ObjectData.TextureEntry, 0, appear.ObjectData.TextureEntry.Length); - - handlerSetAppearance(te, visualparams); - } - catch (Exception e) - { - m_log.ErrorFormat( - "[CLIENT VIEW]: AgentSetApperance packet handler threw an exception, {0}", - e); - } - } - - break; - - case PacketType.AgentIsNowWearing: - if (OnAvatarNowWearing != null) - { - AgentIsNowWearingPacket nowWearing = (AgentIsNowWearingPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (nowWearing.AgentData.SessionID != SessionId || - nowWearing.AgentData.AgentID != AgentId) - break; - } - #endregion - - AvatarWearingArgs wearingArgs = new AvatarWearingArgs(); - for (int i = 0; i < nowWearing.WearableData.Length; i++) - { - AvatarWearingArgs.Wearable wearable = - new AvatarWearingArgs.Wearable(nowWearing.WearableData[i].ItemID, - nowWearing.WearableData[i].WearableType); - wearingArgs.NowWearing.Add(wearable); - } - - AvatarNowWearing handlerAvatarNowWearing = OnAvatarNowWearing; - if (handlerAvatarNowWearing != null) - { - handlerAvatarNowWearing(this, wearingArgs); - } - } - break; - - case PacketType.RezSingleAttachmentFromInv: - RezSingleAttachmentFromInv handlerRezSingleAttachment = OnRezSingleAttachmentFromInv; - if (handlerRezSingleAttachment != null) - { - RezSingleAttachmentFromInvPacket rez = (RezSingleAttachmentFromInvPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (rez.AgentData.SessionID != SessionId || - rez.AgentData.AgentID != AgentId) - break; - } - #endregion - - handlerRezSingleAttachment(this, rez.ObjectData.ItemID, - rez.ObjectData.AttachmentPt); - } - - break; - - case PacketType.RezMultipleAttachmentsFromInv: - RezMultipleAttachmentsFromInv handlerRezMultipleAttachments = OnRezMultipleAttachmentsFromInv; - if (handlerRezMultipleAttachments != null) - { - RezMultipleAttachmentsFromInvPacket rez = (RezMultipleAttachmentsFromInvPacket)Pack; - handlerRezMultipleAttachments(this, rez.HeaderData, - rez.ObjectData); - } - - break; - - case PacketType.DetachAttachmentIntoInv: - UUIDNameRequest handlerDetachAttachmentIntoInv = OnDetachAttachmentIntoInv; - if (handlerDetachAttachmentIntoInv != null) - { - DetachAttachmentIntoInvPacket detachtoInv = (DetachAttachmentIntoInvPacket)Pack; - - #region Packet Session and User Check - // UNSUPPORTED ON THIS PACKET - #endregion - - UUID itemID = detachtoInv.ObjectData.ItemID; - // UUID ATTACH_agentID = detachtoInv.ObjectData.AgentID; - - handlerDetachAttachmentIntoInv(itemID, this); - } - break; - - case PacketType.ObjectAttach: - if (OnObjectAttach != null) - { - ObjectAttachPacket att = (ObjectAttachPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (att.AgentData.SessionID != SessionId || - att.AgentData.AgentID != AgentId) - break; - } - #endregion - - ObjectAttach handlerObjectAttach = OnObjectAttach; - - if (handlerObjectAttach != null) - { - if (att.ObjectData.Length > 0) - { - handlerObjectAttach(this, att.ObjectData[0].ObjectLocalID, att.AgentData.AttachmentPoint, att.ObjectData[0].Rotation, false); - } - } - } - break; - - case PacketType.ObjectDetach: - ObjectDetachPacket dett = (ObjectDetachPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dett.AgentData.SessionID != SessionId || - dett.AgentData.AgentID != AgentId) - break; - } - #endregion - - for (int j = 0; j < dett.ObjectData.Length; j++) - { - uint obj = dett.ObjectData[j].ObjectLocalID; - ObjectDeselect handlerObjectDetach = OnObjectDetach; - if (handlerObjectDetach != null) - { - handlerObjectDetach(obj, this); - } - - } - break; - - case PacketType.ObjectDrop: - ObjectDropPacket dropp = (ObjectDropPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dropp.AgentData.SessionID != SessionId || - dropp.AgentData.AgentID != AgentId) - break; - } - #endregion - - for (int j = 0; j < dropp.ObjectData.Length; j++) - { - uint obj = dropp.ObjectData[j].ObjectLocalID; - ObjectDrop handlerObjectDrop = OnObjectDrop; - if (handlerObjectDrop != null) - { - handlerObjectDrop(obj, this); - } - } - break; - - case PacketType.SetAlwaysRun: - SetAlwaysRunPacket run = (SetAlwaysRunPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (run.AgentData.SessionID != SessionId || - run.AgentData.AgentID != AgentId) - break; - } - #endregion - - SetAlwaysRun handlerSetAlwaysRun = OnSetAlwaysRun; - if (handlerSetAlwaysRun != null) - handlerSetAlwaysRun(this, run.AgentData.AlwaysRun); - - break; - - case PacketType.CompleteAgentMovement: - GenericCall2 handlerCompleteMovementToRegion = OnCompleteMovementToRegion; - if (handlerCompleteMovementToRegion != null) - { - handlerCompleteMovementToRegion(); - } - handlerCompleteMovementToRegion = null; - - break; - - case PacketType.AgentAnimation: - AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (AgentAni.AgentData.SessionID != SessionId || - AgentAni.AgentData.AgentID != AgentId) - break; - } - #endregion - - StartAnim handlerStartAnim = null; - StopAnim handlerStopAnim = null; - - for (int i = 0; i < AgentAni.AnimationList.Length; i++) - { - if (AgentAni.AnimationList[i].StartAnim) - { - handlerStartAnim = OnStartAnim; - if (handlerStartAnim != null) - { - handlerStartAnim(this, AgentAni.AnimationList[i].AnimID); - } - } - else - { - handlerStopAnim = OnStopAnim; - if (handlerStopAnim != null) - { - handlerStopAnim(this, AgentAni.AnimationList[i].AnimID); - } - } - } - break; - - case PacketType.AgentRequestSit: - if (OnAgentRequestSit != null) - { - AgentRequestSitPacket agentRequestSit = (AgentRequestSitPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (agentRequestSit.AgentData.SessionID != SessionId || - agentRequestSit.AgentData.AgentID != AgentId) - break; - } - #endregion - - AgentRequestSit handlerAgentRequestSit = OnAgentRequestSit; - if (handlerAgentRequestSit != null) - handlerAgentRequestSit(this, agentRequestSit.AgentData.AgentID, - agentRequestSit.TargetObject.TargetID, agentRequestSit.TargetObject.Offset); - } - break; - - case PacketType.AgentSit: - if (OnAgentSit != null) - { - AgentSitPacket agentSit = (AgentSitPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (agentSit.AgentData.SessionID != SessionId || - agentSit.AgentData.AgentID != AgentId) - break; - } - #endregion - - AgentSit handlerAgentSit = OnAgentSit; - if (handlerAgentSit != null) - { - OnAgentSit(this, agentSit.AgentData.AgentID); - } - } - break; - - case PacketType.SoundTrigger: - SoundTriggerPacket soundTriggerPacket = (SoundTriggerPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - // UNSUPPORTED ON THIS PACKET - } - #endregion - - SoundTrigger handlerSoundTrigger = OnSoundTrigger; - if (handlerSoundTrigger != null) - { - handlerSoundTrigger(soundTriggerPacket.SoundData.SoundID, soundTriggerPacket.SoundData.OwnerID, - soundTriggerPacket.SoundData.ObjectID, soundTriggerPacket.SoundData.ParentID, - soundTriggerPacket.SoundData.Gain, soundTriggerPacket.SoundData.Position, - soundTriggerPacket.SoundData.Handle); - - } - break; - - case PacketType.AvatarPickerRequest: - AvatarPickerRequestPacket avRequestQuery = (AvatarPickerRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (avRequestQuery.AgentData.SessionID != SessionId || - avRequestQuery.AgentData.AgentID != AgentId) - break; - } - #endregion - - AvatarPickerRequestPacket.AgentDataBlock Requestdata = avRequestQuery.AgentData; - AvatarPickerRequestPacket.DataBlock querydata = avRequestQuery.Data; - //m_log.Debug("Agent Sends:" + Utils.BytesToString(querydata.Name)); - - AvatarPickerRequest handlerAvatarPickerRequest = OnAvatarPickerRequest; - if (handlerAvatarPickerRequest != null) - { - handlerAvatarPickerRequest(this, Requestdata.AgentID, Requestdata.QueryID, - Utils.BytesToString(querydata.Name)); - } - break; - - case PacketType.AgentDataUpdateRequest: - AgentDataUpdateRequestPacket avRequestDataUpdatePacket = (AgentDataUpdateRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (avRequestDataUpdatePacket.AgentData.SessionID != SessionId || - avRequestDataUpdatePacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - FetchInventory handlerAgentDataUpdateRequest = OnAgentDataUpdateRequest; - - if (handlerAgentDataUpdateRequest != null) - { - handlerAgentDataUpdateRequest(this, avRequestDataUpdatePacket.AgentData.AgentID, avRequestDataUpdatePacket.AgentData.SessionID); - } - - break; - - case PacketType.UserInfoRequest: - UserInfoRequest handlerUserInfoRequest = OnUserInfoRequest; - if (handlerUserInfoRequest != null) - { - handlerUserInfoRequest(this); - } - else - { - SendUserInfoReply(false, true, ""); - } - break; - - case PacketType.UpdateUserInfo: - UpdateUserInfoPacket updateUserInfo = (UpdateUserInfoPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (updateUserInfo.AgentData.SessionID != SessionId || - updateUserInfo.AgentData.AgentID != AgentId) - break; - } - #endregion - - UpdateUserInfo handlerUpdateUserInfo = OnUpdateUserInfo; - if (handlerUpdateUserInfo != null) - { - bool visible = true; - string DirectoryVisibility = - Utils.BytesToString(updateUserInfo.UserData.DirectoryVisibility); - if (DirectoryVisibility == "hidden") - visible = false; - - handlerUpdateUserInfo( - updateUserInfo.UserData.IMViaEMail, - visible, this); - } - break; - - case PacketType.SetStartLocationRequest: - SetStartLocationRequestPacket avSetStartLocationRequestPacket = (SetStartLocationRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (avSetStartLocationRequestPacket.AgentData.SessionID != SessionId || - avSetStartLocationRequestPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (avSetStartLocationRequestPacket.AgentData.AgentID == AgentId && avSetStartLocationRequestPacket.AgentData.SessionID == SessionId) - { - TeleportLocationRequest handlerSetStartLocationRequest = OnSetStartLocationRequest; - if (handlerSetStartLocationRequest != null) - { - handlerSetStartLocationRequest(this, 0, avSetStartLocationRequestPacket.StartLocationData.LocationPos, - avSetStartLocationRequestPacket.StartLocationData.LocationLookAt, - avSetStartLocationRequestPacket.StartLocationData.LocationID); - } - } - break; - - case PacketType.AgentThrottle: - AgentThrottlePacket atpack = (AgentThrottlePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (atpack.AgentData.SessionID != SessionId || - atpack.AgentData.AgentID != AgentId) - break; - } - #endregion - - m_udpClient.SetThrottles(atpack.Throttle.Throttles); - break; - - case PacketType.AgentPause: - m_udpClient.IsPaused = true; - break; - - case PacketType.AgentResume: - m_udpClient.IsPaused = false; - SendStartPingCheck(m_udpClient.CurrentPingSequence++); - - break; - - case PacketType.ForceScriptControlRelease: - ForceReleaseControls handlerForceReleaseControls = OnForceReleaseControls; - if (handlerForceReleaseControls != null) - { - handlerForceReleaseControls(this, AgentId); - } - break; - - #endregion - - - //#region Objects/m_sceneObjects - - case PacketType.ObjectLink: - ObjectLinkPacket link = (ObjectLinkPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (link.AgentData.SessionID != SessionId || - link.AgentData.AgentID != AgentId) - break; - } - #endregion - - uint parentprimid = 0; - List childrenprims = new List(); - if (link.ObjectData.Length > 1) - { - parentprimid = link.ObjectData[0].ObjectLocalID; - - for (int i = 1; i < link.ObjectData.Length; i++) - { - childrenprims.Add(link.ObjectData[i].ObjectLocalID); - } - } - LinkObjects handlerLinkObjects = OnLinkObjects; - if (handlerLinkObjects != null) - { - handlerLinkObjects(this, parentprimid, childrenprims); - } - break; - - case PacketType.ObjectDelink: - ObjectDelinkPacket delink = (ObjectDelinkPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (delink.AgentData.SessionID != SessionId || - delink.AgentData.AgentID != AgentId) - break; - } - #endregion - - // It appears the prim at index 0 is not always the root prim (for - // instance, when one prim of a link set has been edited independently - // of the others). Therefore, we'll pass all the ids onto the delink - // method for it to decide which is the root. - List prims = new List(); - for (int i = 0; i < delink.ObjectData.Length; i++) - { - prims.Add(delink.ObjectData[i].ObjectLocalID); - } - DelinkObjects handlerDelinkObjects = OnDelinkObjects; - if (handlerDelinkObjects != null) - { - handlerDelinkObjects(prims); - } - - break; - - case PacketType.ObjectAdd: - if (OnAddPrim != null) - { - ObjectAddPacket addPacket = (ObjectAddPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (addPacket.AgentData.SessionID != SessionId || - addPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - PrimitiveBaseShape shape = GetShapeFromAddPacket(addPacket); - // m_log.Info("[REZData]: " + addPacket.ToString()); - //BypassRaycast: 1 - //RayStart: <69.79469, 158.2652, 98.40343> - //RayEnd: <61.97724, 141.995, 92.58341> - //RayTargetID: 00000000-0000-0000-0000-000000000000 - - //Check to see if adding the prim is allowed; useful for any module wanting to restrict the - //object from rezing initially - - AddNewPrim handlerAddPrim = OnAddPrim; - if (handlerAddPrim != null) - handlerAddPrim(AgentId, ActiveGroupId, addPacket.ObjectData.RayEnd, addPacket.ObjectData.Rotation, shape, addPacket.ObjectData.BypassRaycast, addPacket.ObjectData.RayStart, addPacket.ObjectData.RayTargetID, addPacket.ObjectData.RayEndIsIntersection); - } - break; - - case PacketType.ObjectShape: - ObjectShapePacket shapePacket = (ObjectShapePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (shapePacket.AgentData.SessionID != SessionId || - shapePacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - UpdateShape handlerUpdatePrimShape = null; - for (int i = 0; i < shapePacket.ObjectData.Length; i++) - { - handlerUpdatePrimShape = OnUpdatePrimShape; - if (handlerUpdatePrimShape != null) - { - UpdateShapeArgs shapeData = new UpdateShapeArgs(); - shapeData.ObjectLocalID = shapePacket.ObjectData[i].ObjectLocalID; - shapeData.PathBegin = shapePacket.ObjectData[i].PathBegin; - shapeData.PathCurve = shapePacket.ObjectData[i].PathCurve; - shapeData.PathEnd = shapePacket.ObjectData[i].PathEnd; - shapeData.PathRadiusOffset = shapePacket.ObjectData[i].PathRadiusOffset; - shapeData.PathRevolutions = shapePacket.ObjectData[i].PathRevolutions; - shapeData.PathScaleX = shapePacket.ObjectData[i].PathScaleX; - shapeData.PathScaleY = shapePacket.ObjectData[i].PathScaleY; - shapeData.PathShearX = shapePacket.ObjectData[i].PathShearX; - shapeData.PathShearY = shapePacket.ObjectData[i].PathShearY; - shapeData.PathSkew = shapePacket.ObjectData[i].PathSkew; - shapeData.PathTaperX = shapePacket.ObjectData[i].PathTaperX; - shapeData.PathTaperY = shapePacket.ObjectData[i].PathTaperY; - shapeData.PathTwist = shapePacket.ObjectData[i].PathTwist; - shapeData.PathTwistBegin = shapePacket.ObjectData[i].PathTwistBegin; - shapeData.ProfileBegin = shapePacket.ObjectData[i].ProfileBegin; - shapeData.ProfileCurve = shapePacket.ObjectData[i].ProfileCurve; - shapeData.ProfileEnd = shapePacket.ObjectData[i].ProfileEnd; - shapeData.ProfileHollow = shapePacket.ObjectData[i].ProfileHollow; - - handlerUpdatePrimShape(m_agentId, shapePacket.ObjectData[i].ObjectLocalID, - shapeData); - } - } - break; - - case PacketType.ObjectExtraParams: - ObjectExtraParamsPacket extraPar = (ObjectExtraParamsPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (extraPar.AgentData.SessionID != SessionId || - extraPar.AgentData.AgentID != AgentId) - break; - } - #endregion - - ObjectExtraParams handlerUpdateExtraParams = OnUpdateExtraParams; - if (handlerUpdateExtraParams != null) - { - for (int i = 0; i < extraPar.ObjectData.Length; i++) - { - handlerUpdateExtraParams(m_agentId, extraPar.ObjectData[i].ObjectLocalID, - extraPar.ObjectData[i].ParamType, - extraPar.ObjectData[i].ParamInUse, extraPar.ObjectData[i].ParamData); - } - } - break; - - case PacketType.ObjectDuplicate: - ObjectDuplicatePacket dupe = (ObjectDuplicatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dupe.AgentData.SessionID != SessionId || - dupe.AgentData.AgentID != AgentId) - break; - } - #endregion - - ObjectDuplicatePacket.AgentDataBlock AgentandGroupData = dupe.AgentData; - - ObjectDuplicate handlerObjectDuplicate = null; - - for (int i = 0; i < dupe.ObjectData.Length; i++) - { - handlerObjectDuplicate = OnObjectDuplicate; - if (handlerObjectDuplicate != null) - { - handlerObjectDuplicate(dupe.ObjectData[i].ObjectLocalID, dupe.SharedData.Offset, - dupe.SharedData.DuplicateFlags, AgentandGroupData.AgentID, - AgentandGroupData.GroupID); - } - } - - break; - - case PacketType.RequestMultipleObjects: - RequestMultipleObjectsPacket incomingRequest = (RequestMultipleObjectsPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (incomingRequest.AgentData.SessionID != SessionId || - incomingRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - ObjectRequest handlerObjectRequest = null; - - for (int i = 0; i < incomingRequest.ObjectData.Length; i++) - { - handlerObjectRequest = OnObjectRequest; - if (handlerObjectRequest != null) - { - handlerObjectRequest(incomingRequest.ObjectData[i].ID, this); - } - } - break; - - case PacketType.ObjectSelect: - ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (incomingselect.AgentData.SessionID != SessionId || - incomingselect.AgentData.AgentID != AgentId) - break; - } - #endregion - - ObjectSelect handlerObjectSelect = null; - - for (int i = 0; i < incomingselect.ObjectData.Length; i++) - { - handlerObjectSelect = OnObjectSelect; - if (handlerObjectSelect != null) - { - handlerObjectSelect(incomingselect.ObjectData[i].ObjectLocalID, this); - } - } - break; - - case PacketType.ObjectDeselect: - ObjectDeselectPacket incomingdeselect = (ObjectDeselectPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (incomingdeselect.AgentData.SessionID != SessionId || - incomingdeselect.AgentData.AgentID != AgentId) - break; - } - #endregion - - ObjectDeselect handlerObjectDeselect = null; - - for (int i = 0; i < incomingdeselect.ObjectData.Length; i++) - { - handlerObjectDeselect = OnObjectDeselect; - if (handlerObjectDeselect != null) - { - OnObjectDeselect(incomingdeselect.ObjectData[i].ObjectLocalID, this); - } - } - break; - - case PacketType.ObjectPosition: - // DEPRECATED: but till libsecondlife removes it, people will use it - ObjectPositionPacket position = (ObjectPositionPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (position.AgentData.SessionID != SessionId || - position.AgentData.AgentID != AgentId) - break; - } - #endregion - - - for (int i = 0; i < position.ObjectData.Length; i++) - { - UpdateVector handlerUpdateVector = OnUpdatePrimGroupPosition; - if (handlerUpdateVector != null) - handlerUpdateVector(position.ObjectData[i].ObjectLocalID, position.ObjectData[i].Position, this); - } - - break; - - case PacketType.ObjectScale: - // DEPRECATED: but till libsecondlife removes it, people will use it - ObjectScalePacket scale = (ObjectScalePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (scale.AgentData.SessionID != SessionId || - scale.AgentData.AgentID != AgentId) - break; - } - #endregion - - for (int i = 0; i < scale.ObjectData.Length; i++) - { - UpdateVector handlerUpdatePrimGroupScale = OnUpdatePrimGroupScale; - if (handlerUpdatePrimGroupScale != null) - handlerUpdatePrimGroupScale(scale.ObjectData[i].ObjectLocalID, scale.ObjectData[i].Scale, this); - } - - break; - - case PacketType.ObjectRotation: - // DEPRECATED: but till libsecondlife removes it, people will use it - ObjectRotationPacket rotation = (ObjectRotationPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (rotation.AgentData.SessionID != SessionId || - rotation.AgentData.AgentID != AgentId) - break; - } - #endregion - - for (int i = 0; i < rotation.ObjectData.Length; i++) - { - UpdatePrimRotation handlerUpdatePrimRotation = OnUpdatePrimGroupRotation; - if (handlerUpdatePrimRotation != null) - handlerUpdatePrimRotation(rotation.ObjectData[i].ObjectLocalID, rotation.ObjectData[i].Rotation, this); - } - - break; - - case PacketType.ObjectFlagUpdate: - ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (flags.AgentData.SessionID != SessionId || - flags.AgentData.AgentID != AgentId) - break; - } - #endregion - - UpdatePrimFlags handlerUpdatePrimFlags = OnUpdatePrimFlags; - - if (handlerUpdatePrimFlags != null) - { - byte[] data = Pack.ToBytes(); - // 46,47,48 are special positions within the packet - // This may change so perhaps we need a better way - // of storing this (OMV.FlagUpdatePacket.UsePhysics,etc?) - bool UsePhysics = (data[46] != 0) ? true : false; - bool IsTemporary = (data[47] != 0) ? true : false; - bool IsPhantom = (data[48] != 0) ? true : false; - handlerUpdatePrimFlags(flags.AgentData.ObjectLocalID, UsePhysics, IsTemporary, IsPhantom, this); - } - break; - case PacketType.ObjectImage: - ObjectImagePacket imagePack = (ObjectImagePacket)Pack; - - UpdatePrimTexture handlerUpdatePrimTexture = null; - for (int i = 0; i < imagePack.ObjectData.Length; i++) - { - handlerUpdatePrimTexture = OnUpdatePrimTexture; - if (handlerUpdatePrimTexture != null) - { - handlerUpdatePrimTexture(imagePack.ObjectData[i].ObjectLocalID, - imagePack.ObjectData[i].TextureEntry, this); - } - } - break; - - case PacketType.ObjectGrab: - ObjectGrabPacket grab = (ObjectGrabPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (grab.AgentData.SessionID != SessionId || - grab.AgentData.AgentID != AgentId) - break; - } - #endregion - - GrabObject handlerGrabObject = OnGrabObject; - - if (handlerGrabObject != null) - { - List touchArgs = new List(); - if ((grab.SurfaceInfo != null) && (grab.SurfaceInfo.Length > 0)) - { - foreach (ObjectGrabPacket.SurfaceInfoBlock surfaceInfo in grab.SurfaceInfo) - { - SurfaceTouchEventArgs arg = new SurfaceTouchEventArgs(); - arg.Binormal = surfaceInfo.Binormal; - arg.FaceIndex = surfaceInfo.FaceIndex; - arg.Normal = surfaceInfo.Normal; - arg.Position = surfaceInfo.Position; - arg.STCoord = surfaceInfo.STCoord; - arg.UVCoord = surfaceInfo.UVCoord; - touchArgs.Add(arg); - } - } - handlerGrabObject(grab.ObjectData.LocalID, grab.ObjectData.GrabOffset, this, touchArgs); - } - break; - - case PacketType.ObjectGrabUpdate: - ObjectGrabUpdatePacket grabUpdate = (ObjectGrabUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (grabUpdate.AgentData.SessionID != SessionId || - grabUpdate.AgentData.AgentID != AgentId) - break; - } - #endregion - - MoveObject handlerGrabUpdate = OnGrabUpdate; - - if (handlerGrabUpdate != null) - { - List touchArgs = new List(); - if ((grabUpdate.SurfaceInfo != null) && (grabUpdate.SurfaceInfo.Length > 0)) - { - foreach (ObjectGrabUpdatePacket.SurfaceInfoBlock surfaceInfo in grabUpdate.SurfaceInfo) - { - SurfaceTouchEventArgs arg = new SurfaceTouchEventArgs(); - arg.Binormal = surfaceInfo.Binormal; - arg.FaceIndex = surfaceInfo.FaceIndex; - arg.Normal = surfaceInfo.Normal; - arg.Position = surfaceInfo.Position; - arg.STCoord = surfaceInfo.STCoord; - arg.UVCoord = surfaceInfo.UVCoord; - touchArgs.Add(arg); - } - } - handlerGrabUpdate(grabUpdate.ObjectData.ObjectID, grabUpdate.ObjectData.GrabOffsetInitial, - grabUpdate.ObjectData.GrabPosition, this, touchArgs); - } - break; - - case PacketType.ObjectDeGrab: - ObjectDeGrabPacket deGrab = (ObjectDeGrabPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (deGrab.AgentData.SessionID != SessionId || - deGrab.AgentData.AgentID != AgentId) - break; - } - #endregion - - DeGrabObject handlerDeGrabObject = OnDeGrabObject; - if (handlerDeGrabObject != null) - { - List touchArgs = new List(); - if ((deGrab.SurfaceInfo != null) && (deGrab.SurfaceInfo.Length > 0)) - { - foreach (ObjectDeGrabPacket.SurfaceInfoBlock surfaceInfo in deGrab.SurfaceInfo) - { - SurfaceTouchEventArgs arg = new SurfaceTouchEventArgs(); - arg.Binormal = surfaceInfo.Binormal; - arg.FaceIndex = surfaceInfo.FaceIndex; - arg.Normal = surfaceInfo.Normal; - arg.Position = surfaceInfo.Position; - arg.STCoord = surfaceInfo.STCoord; - arg.UVCoord = surfaceInfo.UVCoord; - touchArgs.Add(arg); - } - } - handlerDeGrabObject(deGrab.ObjectData.LocalID, this, touchArgs); - } - break; - - case PacketType.ObjectSpinStart: - //m_log.Warn("[CLIENT]: unhandled ObjectSpinStart packet"); - ObjectSpinStartPacket spinStart = (ObjectSpinStartPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (spinStart.AgentData.SessionID != SessionId || - spinStart.AgentData.AgentID != AgentId) - break; - } - #endregion - - SpinStart handlerSpinStart = OnSpinStart; - if (handlerSpinStart != null) - { - handlerSpinStart(spinStart.ObjectData.ObjectID, this); - } - break; - case PacketType.ObjectSpinUpdate: - //m_log.Warn("[CLIENT]: unhandled ObjectSpinUpdate packet"); - ObjectSpinUpdatePacket spinUpdate = (ObjectSpinUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (spinUpdate.AgentData.SessionID != SessionId || - spinUpdate.AgentData.AgentID != AgentId) - break; - } - #endregion - - Vector3 axis; - float angle; - spinUpdate.ObjectData.Rotation.GetAxisAngle(out axis, out angle); - //m_log.Warn("[CLIENT]: ObjectSpinUpdate packet rot axis:" + axis + " angle:" + angle); - - SpinObject handlerSpinUpdate = OnSpinUpdate; - if (handlerSpinUpdate != null) - { - handlerSpinUpdate(spinUpdate.ObjectData.ObjectID, spinUpdate.ObjectData.Rotation, this); - } - break; - - - case PacketType.ObjectSpinStop: - //m_log.Warn("[CLIENT]: unhandled ObjectSpinStop packet"); - ObjectSpinStopPacket spinStop = (ObjectSpinStopPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (spinStop.AgentData.SessionID != SessionId || - spinStop.AgentData.AgentID != AgentId) - break; - } - #endregion - - SpinStop handlerSpinStop = OnSpinStop; - if (handlerSpinStop != null) - { - handlerSpinStop(spinStop.ObjectData.ObjectID, this); - } - break; - - case PacketType.ObjectDescription: - ObjectDescriptionPacket objDes = (ObjectDescriptionPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (objDes.AgentData.SessionID != SessionId || - objDes.AgentData.AgentID != AgentId) - break; - } - #endregion - - GenericCall7 handlerObjectDescription = null; - - for (int i = 0; i < objDes.ObjectData.Length; i++) - { - handlerObjectDescription = OnObjectDescription; - if (handlerObjectDescription != null) - { - handlerObjectDescription(this, objDes.ObjectData[i].LocalID, - Util.FieldToString(objDes.ObjectData[i].Description)); - } - } - break; - - case PacketType.ObjectName: - ObjectNamePacket objName = (ObjectNamePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (objName.AgentData.SessionID != SessionId || - objName.AgentData.AgentID != AgentId) - break; - } - #endregion - - GenericCall7 handlerObjectName = null; - for (int i = 0; i < objName.ObjectData.Length; i++) - { - handlerObjectName = OnObjectName; - if (handlerObjectName != null) - { - handlerObjectName(this, objName.ObjectData[i].LocalID, - Util.FieldToString(objName.ObjectData[i].Name)); - } - } - break; - - case PacketType.ObjectPermissions: - if (OnObjectPermissions != null) - { - ObjectPermissionsPacket newobjPerms = (ObjectPermissionsPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (newobjPerms.AgentData.SessionID != SessionId || - newobjPerms.AgentData.AgentID != AgentId) - break; - } - #endregion - - UUID AgentID = newobjPerms.AgentData.AgentID; - UUID SessionID = newobjPerms.AgentData.SessionID; - - ObjectPermissions handlerObjectPermissions = null; - - for (int i = 0; i < newobjPerms.ObjectData.Length; i++) - { - ObjectPermissionsPacket.ObjectDataBlock permChanges = newobjPerms.ObjectData[i]; - - byte field = permChanges.Field; - uint localID = permChanges.ObjectLocalID; - uint mask = permChanges.Mask; - byte set = permChanges.Set; - - handlerObjectPermissions = OnObjectPermissions; - - if (handlerObjectPermissions != null) - handlerObjectPermissions(this, AgentID, SessionID, field, localID, mask, set); - } - } - - // Here's our data, - // PermField contains the field the info goes into - // PermField determines which mask we're changing - // - // chmask is the mask of the change - // setTF is whether we're adding it or taking it away - // - // objLocalID is the localID of the object. - - // Unfortunately, we have to pass the event the packet because objData is an array - // That means multiple object perms may be updated in a single packet. - - break; - - case PacketType.Undo: - UndoPacket undoitem = (UndoPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (undoitem.AgentData.SessionID != SessionId || - undoitem.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (undoitem.ObjectData.Length > 0) - { - for (int i = 0; i < undoitem.ObjectData.Length; i++) - { - UUID objiD = undoitem.ObjectData[i].ObjectID; - AgentSit handlerOnUndo = OnUndo; - if (handlerOnUndo != null) - { - handlerOnUndo(this, objiD); - } - - } - } - break; - - case PacketType.ObjectDuplicateOnRay: - ObjectDuplicateOnRayPacket dupeOnRay = (ObjectDuplicateOnRayPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dupeOnRay.AgentData.SessionID != SessionId || - dupeOnRay.AgentData.AgentID != AgentId) - break; - } - #endregion - - ObjectDuplicateOnRay handlerObjectDuplicateOnRay = null; - - for (int i = 0; i < dupeOnRay.ObjectData.Length; i++) - { - handlerObjectDuplicateOnRay = OnObjectDuplicateOnRay; - if (handlerObjectDuplicateOnRay != null) - { - handlerObjectDuplicateOnRay(dupeOnRay.ObjectData[i].ObjectLocalID, dupeOnRay.AgentData.DuplicateFlags, - dupeOnRay.AgentData.AgentID, dupeOnRay.AgentData.GroupID, dupeOnRay.AgentData.RayTargetID, dupeOnRay.AgentData.RayEnd, - dupeOnRay.AgentData.RayStart, dupeOnRay.AgentData.BypassRaycast, dupeOnRay.AgentData.RayEndIsIntersection, - dupeOnRay.AgentData.CopyCenters, dupeOnRay.AgentData.CopyRotates); - } - } - - break; - - case PacketType.RequestObjectPropertiesFamily: - //This powers the little tooltip that appears when you move your mouse over an object - RequestObjectPropertiesFamilyPacket packToolTip = (RequestObjectPropertiesFamilyPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (packToolTip.AgentData.SessionID != SessionId || - packToolTip.AgentData.AgentID != AgentId) - break; - } - #endregion - - RequestObjectPropertiesFamilyPacket.ObjectDataBlock packObjBlock = packToolTip.ObjectData; - - RequestObjectPropertiesFamily handlerRequestObjectPropertiesFamily = OnRequestObjectPropertiesFamily; - - if (handlerRequestObjectPropertiesFamily != null) - { - handlerRequestObjectPropertiesFamily(this, m_agentId, packObjBlock.RequestFlags, - packObjBlock.ObjectID); - } - - break; - - case PacketType.ObjectIncludeInSearch: - //This lets us set objects to appear in search (stuff like DataSnapshot, etc) - ObjectIncludeInSearchPacket packInSearch = (ObjectIncludeInSearchPacket)Pack; - ObjectIncludeInSearch handlerObjectIncludeInSearch = null; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (packInSearch.AgentData.SessionID != SessionId || - packInSearch.AgentData.AgentID != AgentId) - break; - } - #endregion - - foreach (ObjectIncludeInSearchPacket.ObjectDataBlock objData in packInSearch.ObjectData) - { - bool inSearch = objData.IncludeInSearch; - uint localID = objData.ObjectLocalID; - - handlerObjectIncludeInSearch = OnObjectIncludeInSearch; - - if (handlerObjectIncludeInSearch != null) - { - handlerObjectIncludeInSearch(this, inSearch, localID); - } - } - break; - - case PacketType.ScriptAnswerYes: - ScriptAnswerYesPacket scriptAnswer = (ScriptAnswerYesPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (scriptAnswer.AgentData.SessionID != SessionId || - scriptAnswer.AgentData.AgentID != AgentId) - break; - } - #endregion - - ScriptAnswer handlerScriptAnswer = OnScriptAnswer; - if (handlerScriptAnswer != null) - { - handlerScriptAnswer(this, scriptAnswer.Data.TaskID, scriptAnswer.Data.ItemID, scriptAnswer.Data.Questions); - } - break; - - case PacketType.ObjectClickAction: - ObjectClickActionPacket ocpacket = (ObjectClickActionPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (ocpacket.AgentData.SessionID != SessionId || - ocpacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - GenericCall7 handlerObjectClickAction = OnObjectClickAction; - if (handlerObjectClickAction != null) - { - foreach (ObjectClickActionPacket.ObjectDataBlock odata in ocpacket.ObjectData) - { - byte action = odata.ClickAction; - uint localID = odata.ObjectLocalID; - handlerObjectClickAction(this, localID, action.ToString()); - } - } - break; - - case PacketType.ObjectMaterial: - ObjectMaterialPacket ompacket = (ObjectMaterialPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (ompacket.AgentData.SessionID != SessionId || - ompacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - GenericCall7 handlerObjectMaterial = OnObjectMaterial; - if (handlerObjectMaterial != null) - { - foreach (ObjectMaterialPacket.ObjectDataBlock odata in ompacket.ObjectData) - { - byte material = odata.Material; - uint localID = odata.ObjectLocalID; - handlerObjectMaterial(this, localID, material.ToString()); - } - } - break; - - //#endregion - - //#region Inventory/Asset/Other related packets - - case PacketType.RequestImage: - RequestImagePacket imageRequest = (RequestImagePacket)Pack; - //m_log.Debug("image request: " + Pack.ToString()); - - #region Packet Session and User Check - if (m_checkPackets) - { - if (imageRequest.AgentData.SessionID != SessionId || - imageRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - //handlerTextureRequest = null; - for (int i = 0; i < imageRequest.RequestImage.Length; i++) - { - if (OnRequestTexture != null) - { - TextureRequestArgs args = new TextureRequestArgs(); - - RequestImagePacket.RequestImageBlock block = imageRequest.RequestImage[i]; - - args.RequestedAssetID = block.Image; - args.DiscardLevel = block.DiscardLevel; - args.PacketNumber = block.Packet; - args.Priority = block.DownloadPriority; - args.requestSequence = imageRequest.Header.Sequence; - - // NOTE: This is not a built in part of the LLUDP protocol, but we double the - // priority of avatar textures to get avatars rezzing in faster than the - // surrounding scene - if ((ImageType)block.Type == ImageType.Baked) - args.Priority *= 2.0f; - - //handlerTextureRequest = OnRequestTexture; - - //if (handlerTextureRequest != null) - //OnRequestTexture(this, args); - - // in the end, we null this, so we have to check if it's null - if (m_imageManager != null) - { - m_imageManager.EnqueueReq(args); - } - } - } - break; - - case PacketType.TransferRequest: - //m_log.Debug("ClientView.ProcessPackets.cs:ProcessInPacket() - Got transfer request"); - - TransferRequestPacket transfer = (TransferRequestPacket)Pack; - //m_log.Debug("Transfer Request: " + transfer.ToString()); - // Validate inventory transfers - // Has to be done here, because AssetCache can't do it - // - UUID taskID = UUID.Zero; - if (transfer.TransferInfo.SourceType == 3) - { - taskID = new UUID(transfer.TransferInfo.Params, 48); - UUID itemID = new UUID(transfer.TransferInfo.Params, 64); - UUID requestID = new UUID(transfer.TransferInfo.Params, 80); - if (!(((Scene)m_scene).Permissions.BypassPermissions())) - { - if (taskID != UUID.Zero) // Prim - { - SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID); - if (part == null) - break; - - if (part.OwnerID != AgentId) - break; - - if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) - break; - - TaskInventoryItem ti = part.Inventory.GetInventoryItem(itemID); - if (ti == null) - break; - - if (ti.OwnerID != AgentId) - break; - - if ((ti.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) != ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) - break; - - if (ti.AssetID != requestID) - break; - } - else // Agent - { - IInventoryService invService = m_scene.RequestModuleInterface(); - InventoryItemBase assetRequestItem = new InventoryItemBase(itemID, AgentId); - assetRequestItem = invService.GetItem(assetRequestItem); - if (assetRequestItem == null) - { - assetRequestItem = ((Scene)m_scene).CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID); - if (assetRequestItem == null) - return; - } - - // At this point, we need to apply perms - // only to notecards and scripts. All - // other asset types are always available - // - if (assetRequestItem.AssetType == 10) - { - if (!((Scene)m_scene).Permissions.CanViewScript(itemID, UUID.Zero, AgentId)) - { - SendAgentAlertMessage("Insufficient permissions to view script", false); - break; - } - } - else if (assetRequestItem.AssetType == 7) - { - if (!((Scene)m_scene).Permissions.CanViewNotecard(itemID, UUID.Zero, AgentId)) - { - SendAgentAlertMessage("Insufficient permissions to view notecard", false); - break; - } - } - - if (assetRequestItem.AssetID != requestID) - break; - } - } - } - - //m_assetCache.AddAssetRequest(this, transfer); - - MakeAssetRequest(transfer, taskID); - - // RequestAsset = OnRequestAsset; - // if (RequestAsset != null) - // { - // RequestAsset(this, transfer); - // } - - break; - - case PacketType.AssetUploadRequest: - AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack; - - - // m_log.Debug("upload request " + request.ToString()); - // m_log.Debug("upload request was for assetid: " + request.AssetBlock.TransactionID.Combine(this.SecureSessionId).ToString()); - UUID temp = UUID.Combine(request.AssetBlock.TransactionID, SecureSessionId); - - UDPAssetUploadRequest handlerAssetUploadRequest = OnAssetUploadRequest; - - if (handlerAssetUploadRequest != null) - { - handlerAssetUploadRequest(this, temp, - request.AssetBlock.TransactionID, request.AssetBlock.Type, - request.AssetBlock.AssetData, request.AssetBlock.StoreLocal, - request.AssetBlock.Tempfile); - } - break; - - case PacketType.RequestXfer: - RequestXferPacket xferReq = (RequestXferPacket)Pack; - - RequestXfer handlerRequestXfer = OnRequestXfer; - - if (handlerRequestXfer != null) - { - handlerRequestXfer(this, xferReq.XferID.ID, Util.FieldToString(xferReq.XferID.Filename)); - } - break; - - case PacketType.SendXferPacket: - SendXferPacketPacket xferRec = (SendXferPacketPacket)Pack; - - XferReceive handlerXferReceive = OnXferReceive; - if (handlerXferReceive != null) - { - handlerXferReceive(this, xferRec.XferID.ID, xferRec.XferID.Packet, xferRec.DataPacket.Data); - } - break; - - case PacketType.ConfirmXferPacket: - ConfirmXferPacketPacket confirmXfer = (ConfirmXferPacketPacket)Pack; - - ConfirmXfer handlerConfirmXfer = OnConfirmXfer; - if (handlerConfirmXfer != null) - { - handlerConfirmXfer(this, confirmXfer.XferID.ID, confirmXfer.XferID.Packet); - } - break; - - case PacketType.AbortXfer: - AbortXferPacket abortXfer = (AbortXferPacket)Pack; - AbortXfer handlerAbortXfer = OnAbortXfer; - if (handlerAbortXfer != null) - { - handlerAbortXfer(this, abortXfer.XferID.ID); - } - - break; - - case PacketType.CreateInventoryFolder: - CreateInventoryFolderPacket invFolder = (CreateInventoryFolderPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (invFolder.AgentData.SessionID != SessionId || - invFolder.AgentData.AgentID != AgentId) - break; - } - #endregion - - CreateInventoryFolder handlerCreateInventoryFolder = OnCreateNewInventoryFolder; - if (handlerCreateInventoryFolder != null) - { - handlerCreateInventoryFolder(this, invFolder.FolderData.FolderID, - (ushort)invFolder.FolderData.Type, - Util.FieldToString(invFolder.FolderData.Name), - invFolder.FolderData.ParentID); - } - break; - - case PacketType.UpdateInventoryFolder: - if (OnUpdateInventoryFolder != null) - { - UpdateInventoryFolderPacket invFolderx = (UpdateInventoryFolderPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (invFolderx.AgentData.SessionID != SessionId || - invFolderx.AgentData.AgentID != AgentId) - break; - } - #endregion - - UpdateInventoryFolder handlerUpdateInventoryFolder = null; - - for (int i = 0; i < invFolderx.FolderData.Length; i++) - { - handlerUpdateInventoryFolder = OnUpdateInventoryFolder; - if (handlerUpdateInventoryFolder != null) - { - OnUpdateInventoryFolder(this, invFolderx.FolderData[i].FolderID, - (ushort)invFolderx.FolderData[i].Type, - Util.FieldToString(invFolderx.FolderData[i].Name), - invFolderx.FolderData[i].ParentID); - } - } - } - break; - - case PacketType.MoveInventoryFolder: - if (OnMoveInventoryFolder != null) - { - MoveInventoryFolderPacket invFoldery = (MoveInventoryFolderPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (invFoldery.AgentData.SessionID != SessionId || - invFoldery.AgentData.AgentID != AgentId) - break; - } - #endregion - - MoveInventoryFolder handlerMoveInventoryFolder = null; - - for (int i = 0; i < invFoldery.InventoryData.Length; i++) - { - handlerMoveInventoryFolder = OnMoveInventoryFolder; - if (handlerMoveInventoryFolder != null) - { - OnMoveInventoryFolder(this, invFoldery.InventoryData[i].FolderID, - invFoldery.InventoryData[i].ParentID); - } - } - } - break; - - case PacketType.CreateInventoryItem: - CreateInventoryItemPacket createItem = (CreateInventoryItemPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (createItem.AgentData.SessionID != SessionId || - createItem.AgentData.AgentID != AgentId) - break; - } - #endregion - - CreateNewInventoryItem handlerCreateNewInventoryItem = OnCreateNewInventoryItem; - if (handlerCreateNewInventoryItem != null) - { - handlerCreateNewInventoryItem(this, createItem.InventoryBlock.TransactionID, - createItem.InventoryBlock.FolderID, - createItem.InventoryBlock.CallbackID, - Util.FieldToString(createItem.InventoryBlock.Description), - Util.FieldToString(createItem.InventoryBlock.Name), - createItem.InventoryBlock.InvType, - createItem.InventoryBlock.Type, - createItem.InventoryBlock.WearableType, - createItem.InventoryBlock.NextOwnerMask, - Util.UnixTimeSinceEpoch()); - } - break; - - case PacketType.FetchInventory: - if (OnFetchInventory != null) - { - FetchInventoryPacket FetchInventoryx = (FetchInventoryPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (FetchInventoryx.AgentData.SessionID != SessionId || - FetchInventoryx.AgentData.AgentID != AgentId) - break; - } - #endregion - - FetchInventory handlerFetchInventory = null; - - for (int i = 0; i < FetchInventoryx.InventoryData.Length; i++) - { - handlerFetchInventory = OnFetchInventory; - - if (handlerFetchInventory != null) - { - OnFetchInventory(this, FetchInventoryx.InventoryData[i].ItemID, - FetchInventoryx.InventoryData[i].OwnerID); - } - } - } - break; - - case PacketType.FetchInventoryDescendents: - FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (Fetch.AgentData.SessionID != SessionId || - Fetch.AgentData.AgentID != AgentId) - break; - } - #endregion - - FetchInventoryDescendents handlerFetchInventoryDescendents = OnFetchInventoryDescendents; - if (handlerFetchInventoryDescendents != null) - { - handlerFetchInventoryDescendents(this, Fetch.InventoryData.FolderID, Fetch.InventoryData.OwnerID, - Fetch.InventoryData.FetchFolders, Fetch.InventoryData.FetchItems, - Fetch.InventoryData.SortOrder); - } - break; - - case PacketType.PurgeInventoryDescendents: - PurgeInventoryDescendentsPacket Purge = (PurgeInventoryDescendentsPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (Purge.AgentData.SessionID != SessionId || - Purge.AgentData.AgentID != AgentId) - break; - } - #endregion - - PurgeInventoryDescendents handlerPurgeInventoryDescendents = OnPurgeInventoryDescendents; - if (handlerPurgeInventoryDescendents != null) - { - handlerPurgeInventoryDescendents(this, Purge.InventoryData.FolderID); - } - break; - - case PacketType.UpdateInventoryItem: - UpdateInventoryItemPacket inventoryItemUpdate = (UpdateInventoryItemPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (inventoryItemUpdate.AgentData.SessionID != SessionId || - inventoryItemUpdate.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (OnUpdateInventoryItem != null) - { - UpdateInventoryItem handlerUpdateInventoryItem = null; - for (int i = 0; i < inventoryItemUpdate.InventoryData.Length; i++) - { - handlerUpdateInventoryItem = OnUpdateInventoryItem; - - if (handlerUpdateInventoryItem != null) - { - InventoryItemBase itemUpd = new InventoryItemBase(); - itemUpd.ID = inventoryItemUpdate.InventoryData[i].ItemID; - itemUpd.Name = Util.FieldToString(inventoryItemUpdate.InventoryData[i].Name); - itemUpd.Description = Util.FieldToString(inventoryItemUpdate.InventoryData[i].Description); - itemUpd.GroupID = inventoryItemUpdate.InventoryData[i].GroupID; - itemUpd.GroupOwned = inventoryItemUpdate.InventoryData[i].GroupOwned; - itemUpd.GroupPermissions = inventoryItemUpdate.InventoryData[i].GroupMask; - itemUpd.NextPermissions = inventoryItemUpdate.InventoryData[i].NextOwnerMask; - itemUpd.EveryOnePermissions = inventoryItemUpdate.InventoryData[i].EveryoneMask; - itemUpd.CreationDate = inventoryItemUpdate.InventoryData[i].CreationDate; - itemUpd.Folder = inventoryItemUpdate.InventoryData[i].FolderID; - itemUpd.InvType = inventoryItemUpdate.InventoryData[i].InvType; - itemUpd.SalePrice = inventoryItemUpdate.InventoryData[i].SalePrice; - itemUpd.SaleType = inventoryItemUpdate.InventoryData[i].SaleType; - itemUpd.Flags = inventoryItemUpdate.InventoryData[i].Flags; - - OnUpdateInventoryItem(this, inventoryItemUpdate.InventoryData[i].TransactionID, - inventoryItemUpdate.InventoryData[i].ItemID, - itemUpd); - } - } - } - break; - - case PacketType.CopyInventoryItem: - CopyInventoryItemPacket copyitem = (CopyInventoryItemPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (copyitem.AgentData.SessionID != SessionId || - copyitem.AgentData.AgentID != AgentId) - break; - } - #endregion - - CopyInventoryItem handlerCopyInventoryItem = null; - if (OnCopyInventoryItem != null) - { - foreach (CopyInventoryItemPacket.InventoryDataBlock datablock in copyitem.InventoryData) - { - handlerCopyInventoryItem = OnCopyInventoryItem; - if (handlerCopyInventoryItem != null) - { - handlerCopyInventoryItem(this, datablock.CallbackID, datablock.OldAgentID, - datablock.OldItemID, datablock.NewFolderID, - Util.FieldToString(datablock.NewName)); - } - } - } - break; - - case PacketType.MoveInventoryItem: - MoveInventoryItemPacket moveitem = (MoveInventoryItemPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (moveitem.AgentData.SessionID != SessionId || - moveitem.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (OnMoveInventoryItem != null) - { - MoveInventoryItem handlerMoveInventoryItem = null; - InventoryItemBase itm = null; - List items = new List(); - foreach (MoveInventoryItemPacket.InventoryDataBlock datablock in moveitem.InventoryData) - { - itm = new InventoryItemBase(datablock.ItemID, AgentId); - itm.Folder = datablock.FolderID; - itm.Name = Util.FieldToString(datablock.NewName); - // weird, comes out as empty string - //m_log.DebugFormat("[XXX] new name: {0}", itm.Name); - items.Add(itm); - } - handlerMoveInventoryItem = OnMoveInventoryItem; - if (handlerMoveInventoryItem != null) - { - handlerMoveInventoryItem(this, items); - } - } - break; - - case PacketType.RemoveInventoryItem: - RemoveInventoryItemPacket removeItem = (RemoveInventoryItemPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (removeItem.AgentData.SessionID != SessionId || - removeItem.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (OnRemoveInventoryItem != null) - { - RemoveInventoryItem handlerRemoveInventoryItem = null; - List uuids = new List(); - foreach (RemoveInventoryItemPacket.InventoryDataBlock datablock in removeItem.InventoryData) - { - uuids.Add(datablock.ItemID); - } - handlerRemoveInventoryItem = OnRemoveInventoryItem; - if (handlerRemoveInventoryItem != null) - { - handlerRemoveInventoryItem(this, uuids); - } - - } - break; - - case PacketType.RemoveInventoryFolder: - RemoveInventoryFolderPacket removeFolder = (RemoveInventoryFolderPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (removeFolder.AgentData.SessionID != SessionId || - removeFolder.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (OnRemoveInventoryFolder != null) - { - RemoveInventoryFolder handlerRemoveInventoryFolder = null; - List uuids = new List(); - foreach (RemoveInventoryFolderPacket.FolderDataBlock datablock in removeFolder.FolderData) - { - uuids.Add(datablock.FolderID); - } - handlerRemoveInventoryFolder = OnRemoveInventoryFolder; - if (handlerRemoveInventoryFolder != null) - { - handlerRemoveInventoryFolder(this, uuids); - } - } - break; - - case PacketType.RemoveInventoryObjects: - RemoveInventoryObjectsPacket removeObject = (RemoveInventoryObjectsPacket)Pack; - #region Packet Session and User Check - if (m_checkPackets) - { - if (removeObject.AgentData.SessionID != SessionId || - removeObject.AgentData.AgentID != AgentId) - break; - } - #endregion - if (OnRemoveInventoryFolder != null) - { - RemoveInventoryFolder handlerRemoveInventoryFolder = null; - List uuids = new List(); - foreach (RemoveInventoryObjectsPacket.FolderDataBlock datablock in removeObject.FolderData) - { - uuids.Add(datablock.FolderID); - } - handlerRemoveInventoryFolder = OnRemoveInventoryFolder; - if (handlerRemoveInventoryFolder != null) - { - handlerRemoveInventoryFolder(this, uuids); - } - } - - if (OnRemoveInventoryItem != null) - { - RemoveInventoryItem handlerRemoveInventoryItem = null; - List uuids = new List(); - foreach (RemoveInventoryObjectsPacket.ItemDataBlock datablock in removeObject.ItemData) - { - uuids.Add(datablock.ItemID); - } - handlerRemoveInventoryItem = OnRemoveInventoryItem; - if (handlerRemoveInventoryItem != null) - { - handlerRemoveInventoryItem(this, uuids); - } - } - break; - - case PacketType.RequestTaskInventory: - RequestTaskInventoryPacket requesttask = (RequestTaskInventoryPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (requesttask.AgentData.SessionID != SessionId || - requesttask.AgentData.AgentID != AgentId) - break; - } - #endregion - - RequestTaskInventory handlerRequestTaskInventory = OnRequestTaskInventory; - if (handlerRequestTaskInventory != null) - { - handlerRequestTaskInventory(this, requesttask.InventoryData.LocalID); - } - break; - - case PacketType.UpdateTaskInventory: - UpdateTaskInventoryPacket updatetask = (UpdateTaskInventoryPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (updatetask.AgentData.SessionID != SessionId || - updatetask.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (OnUpdateTaskInventory != null) - { - if (updatetask.UpdateData.Key == 0) - { - UpdateTaskInventory handlerUpdateTaskInventory = OnUpdateTaskInventory; - if (handlerUpdateTaskInventory != null) - { - TaskInventoryItem newTaskItem = new TaskInventoryItem(); - newTaskItem.ItemID = updatetask.InventoryData.ItemID; - newTaskItem.ParentID = updatetask.InventoryData.FolderID; - newTaskItem.CreatorID = updatetask.InventoryData.CreatorID; - newTaskItem.OwnerID = updatetask.InventoryData.OwnerID; - newTaskItem.GroupID = updatetask.InventoryData.GroupID; - newTaskItem.BasePermissions = updatetask.InventoryData.BaseMask; - newTaskItem.CurrentPermissions = updatetask.InventoryData.OwnerMask; - newTaskItem.GroupPermissions = updatetask.InventoryData.GroupMask; - newTaskItem.EveryonePermissions = updatetask.InventoryData.EveryoneMask; - newTaskItem.NextPermissions = updatetask.InventoryData.NextOwnerMask; - //newTaskItem.GroupOwned=updatetask.InventoryData.GroupOwned; - newTaskItem.Type = updatetask.InventoryData.Type; - newTaskItem.InvType = updatetask.InventoryData.InvType; - newTaskItem.Flags = updatetask.InventoryData.Flags; - //newTaskItem.SaleType=updatetask.InventoryData.SaleType; - //newTaskItem.SalePrice=updatetask.InventoryData.SalePrice;; - newTaskItem.Name = Util.FieldToString(updatetask.InventoryData.Name); - newTaskItem.Description = Util.FieldToString(updatetask.InventoryData.Description); - newTaskItem.CreationDate = (uint)updatetask.InventoryData.CreationDate; - handlerUpdateTaskInventory(this, updatetask.InventoryData.TransactionID, - newTaskItem, updatetask.UpdateData.LocalID); - } - } - } - - break; - - case PacketType.RemoveTaskInventory: - - RemoveTaskInventoryPacket removeTask = (RemoveTaskInventoryPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (removeTask.AgentData.SessionID != SessionId || - removeTask.AgentData.AgentID != AgentId) - break; - } - #endregion - - RemoveTaskInventory handlerRemoveTaskItem = OnRemoveTaskItem; - - if (handlerRemoveTaskItem != null) - { - handlerRemoveTaskItem(this, removeTask.InventoryData.ItemID, removeTask.InventoryData.LocalID); - } - - break; - - case PacketType.MoveTaskInventory: - - MoveTaskInventoryPacket moveTaskInventoryPacket = (MoveTaskInventoryPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (moveTaskInventoryPacket.AgentData.SessionID != SessionId || - moveTaskInventoryPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - MoveTaskInventory handlerMoveTaskItem = OnMoveTaskItem; - - if (handlerMoveTaskItem != null) - { - handlerMoveTaskItem( - this, moveTaskInventoryPacket.AgentData.FolderID, - moveTaskInventoryPacket.InventoryData.LocalID, - moveTaskInventoryPacket.InventoryData.ItemID); - } - - break; - - case PacketType.RezScript: - //m_log.Debug(Pack.ToString()); - RezScriptPacket rezScriptx = (RezScriptPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (rezScriptx.AgentData.SessionID != SessionId || - rezScriptx.AgentData.AgentID != AgentId) - break; - } - #endregion - - RezScript handlerRezScript = OnRezScript; - InventoryItemBase item = new InventoryItemBase(); - item.ID = rezScriptx.InventoryBlock.ItemID; - item.Folder = rezScriptx.InventoryBlock.FolderID; - item.CreatorId = rezScriptx.InventoryBlock.CreatorID.ToString(); - item.Owner = rezScriptx.InventoryBlock.OwnerID; - item.BasePermissions = rezScriptx.InventoryBlock.BaseMask; - item.CurrentPermissions = rezScriptx.InventoryBlock.OwnerMask; - item.EveryOnePermissions = rezScriptx.InventoryBlock.EveryoneMask; - item.NextPermissions = rezScriptx.InventoryBlock.NextOwnerMask; - item.GroupPermissions = rezScriptx.InventoryBlock.GroupMask; - item.GroupOwned = rezScriptx.InventoryBlock.GroupOwned; - item.GroupID = rezScriptx.InventoryBlock.GroupID; - item.AssetType = rezScriptx.InventoryBlock.Type; - item.InvType = rezScriptx.InventoryBlock.InvType; - item.Flags = rezScriptx.InventoryBlock.Flags; - item.SaleType = rezScriptx.InventoryBlock.SaleType; - item.SalePrice = rezScriptx.InventoryBlock.SalePrice; - item.Name = Util.FieldToString(rezScriptx.InventoryBlock.Name); - item.Description = Util.FieldToString(rezScriptx.InventoryBlock.Description); - item.CreationDate = rezScriptx.InventoryBlock.CreationDate; - - if (handlerRezScript != null) - { - handlerRezScript(this, item, rezScriptx.InventoryBlock.TransactionID, rezScriptx.UpdateBlock.ObjectLocalID); - } - break; - - case PacketType.MapLayerRequest: - RequestMapLayer(); - break; - case PacketType.MapBlockRequest: - MapBlockRequestPacket MapRequest = (MapBlockRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (MapRequest.AgentData.SessionID != SessionId || - MapRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - RequestMapBlocks handlerRequestMapBlocks = OnRequestMapBlocks; - if (handlerRequestMapBlocks != null) - { - handlerRequestMapBlocks(this, MapRequest.PositionData.MinX, MapRequest.PositionData.MinY, - MapRequest.PositionData.MaxX, MapRequest.PositionData.MaxY, MapRequest.AgentData.Flags); - } - break; - case PacketType.MapNameRequest: - MapNameRequestPacket map = (MapNameRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (map.AgentData.SessionID != SessionId || - map.AgentData.AgentID != AgentId) - break; - } - #endregion - - string mapName = Util.UTF8.GetString(map.NameData.Name, 0, - map.NameData.Name.Length - 1); - RequestMapName handlerMapNameRequest = OnMapNameRequest; - if (handlerMapNameRequest != null) - { - handlerMapNameRequest(this, mapName); - } - break; - - case PacketType.TeleportLandmarkRequest: - TeleportLandmarkRequestPacket tpReq = (TeleportLandmarkRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (tpReq.Info.SessionID != SessionId || - tpReq.Info.AgentID != AgentId) - break; - } - #endregion - - UUID lmid = tpReq.Info.LandmarkID; - AssetLandmark lm; - if (lmid != UUID.Zero) - { - //AssetBase lma = m_assetCache.GetAsset(lmid, false); - AssetBase lma = m_assetService.Get(lmid.ToString()); - - if (lma == null) - { - // Failed to find landmark - TeleportCancelPacket tpCancel = (TeleportCancelPacket)PacketPool.Instance.GetPacket(PacketType.TeleportCancel); - tpCancel.Info.SessionID = tpReq.Info.SessionID; - tpCancel.Info.AgentID = tpReq.Info.AgentID; - OutPacket(tpCancel, ThrottleOutPacketType.Task); - } - - try - { - lm = new AssetLandmark(lma); - } - catch (NullReferenceException) - { - // asset not found generates null ref inside the assetlandmark constructor. - TeleportCancelPacket tpCancel = (TeleportCancelPacket)PacketPool.Instance.GetPacket(PacketType.TeleportCancel); - tpCancel.Info.SessionID = tpReq.Info.SessionID; - tpCancel.Info.AgentID = tpReq.Info.AgentID; - OutPacket(tpCancel, ThrottleOutPacketType.Task); - break; - } - } - else - { - // Teleport home request - UUIDNameRequest handlerTeleportHomeRequest = OnTeleportHomeRequest; - if (handlerTeleportHomeRequest != null) - { - handlerTeleportHomeRequest(AgentId, this); - } - break; - } - - TeleportLandmarkRequest handlerTeleportLandmarkRequest = OnTeleportLandmarkRequest; - if (handlerTeleportLandmarkRequest != null) - { - handlerTeleportLandmarkRequest(this, lm.RegionID, lm.Position); - } - else - { - //no event handler so cancel request - - - TeleportCancelPacket tpCancel = (TeleportCancelPacket)PacketPool.Instance.GetPacket(PacketType.TeleportCancel); - tpCancel.Info.AgentID = tpReq.Info.AgentID; - tpCancel.Info.SessionID = tpReq.Info.SessionID; - OutPacket(tpCancel, ThrottleOutPacketType.Task); - - } - break; - - case PacketType.TeleportLocationRequest: - TeleportLocationRequestPacket tpLocReq = (TeleportLocationRequestPacket)Pack; - // m_log.Debug(tpLocReq.ToString()); - - #region Packet Session and User Check - if (m_checkPackets) - { - if (tpLocReq.AgentData.SessionID != SessionId || - tpLocReq.AgentData.AgentID != AgentId) - break; - } - #endregion - - TeleportLocationRequest handlerTeleportLocationRequest = OnTeleportLocationRequest; - if (handlerTeleportLocationRequest != null) - { - handlerTeleportLocationRequest(this, tpLocReq.Info.RegionHandle, tpLocReq.Info.Position, - tpLocReq.Info.LookAt, 16); - } - else - { - //no event handler so cancel request - TeleportCancelPacket tpCancel = (TeleportCancelPacket)PacketPool.Instance.GetPacket(PacketType.TeleportCancel); - tpCancel.Info.SessionID = tpLocReq.AgentData.SessionID; - tpCancel.Info.AgentID = tpLocReq.AgentData.AgentID; - OutPacket(tpCancel, ThrottleOutPacketType.Task); - } - break; - - //#endregion - - case PacketType.UUIDNameRequest: - UUIDNameRequestPacket incoming = (UUIDNameRequestPacket)Pack; - - foreach (UUIDNameRequestPacket.UUIDNameBlockBlock UUIDBlock in incoming.UUIDNameBlock) - { - UUIDNameRequest handlerNameRequest = OnNameFromUUIDRequest; - if (handlerNameRequest != null) - { - handlerNameRequest(UUIDBlock.ID, this); - } - } - break; - - //#region Parcel related packets - - - case PacketType.RegionHandleRequest: - RegionHandleRequestPacket rhrPack = (RegionHandleRequestPacket)Pack; - - RegionHandleRequest handlerRegionHandleRequest = OnRegionHandleRequest; - if (handlerRegionHandleRequest != null) - { - handlerRegionHandleRequest(this, rhrPack.RequestBlock.RegionID); - } - break; - - case PacketType.ParcelInfoRequest: - ParcelInfoRequestPacket pirPack = (ParcelInfoRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (pirPack.AgentData.SessionID != SessionId || - pirPack.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelInfoRequest handlerParcelInfoRequest = OnParcelInfoRequest; - if (handlerParcelInfoRequest != null) - { - handlerParcelInfoRequest(this, pirPack.Data.ParcelID); - } - break; - - case PacketType.ParcelAccessListRequest: - ParcelAccessListRequestPacket requestPacket = (ParcelAccessListRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (requestPacket.AgentData.SessionID != SessionId || - requestPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelAccessListRequest handlerParcelAccessListRequest = OnParcelAccessListRequest; - - if (handlerParcelAccessListRequest != null) - { - handlerParcelAccessListRequest(requestPacket.AgentData.AgentID, requestPacket.AgentData.SessionID, - requestPacket.Data.Flags, requestPacket.Data.SequenceID, - requestPacket.Data.LocalID, this); - } - break; - - case PacketType.ParcelAccessListUpdate: - ParcelAccessListUpdatePacket updatePacket = (ParcelAccessListUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (updatePacket.AgentData.SessionID != SessionId || - updatePacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - List entries = new List(); - foreach (ParcelAccessListUpdatePacket.ListBlock block in updatePacket.List) - { - ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); - entry.AgentID = block.ID; - entry.Flags = (AccessList)block.Flags; - entry.Time = new DateTime(); - entries.Add(entry); - } - - ParcelAccessListUpdateRequest handlerParcelAccessListUpdateRequest = OnParcelAccessListUpdateRequest; - if (handlerParcelAccessListUpdateRequest != null) - { - handlerParcelAccessListUpdateRequest(updatePacket.AgentData.AgentID, - updatePacket.AgentData.SessionID, updatePacket.Data.Flags, - updatePacket.Data.LocalID, entries, this); - } - break; - - case PacketType.ParcelPropertiesRequest: - - ParcelPropertiesRequestPacket propertiesRequest = (ParcelPropertiesRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (propertiesRequest.AgentData.SessionID != SessionId || - propertiesRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelPropertiesRequest handlerParcelPropertiesRequest = OnParcelPropertiesRequest; - if (handlerParcelPropertiesRequest != null) - { - handlerParcelPropertiesRequest((int)Math.Round(propertiesRequest.ParcelData.West), - (int)Math.Round(propertiesRequest.ParcelData.South), - (int)Math.Round(propertiesRequest.ParcelData.East), - (int)Math.Round(propertiesRequest.ParcelData.North), - propertiesRequest.ParcelData.SequenceID, - propertiesRequest.ParcelData.SnapSelection, this); - } - break; - - case PacketType.ParcelDivide: - ParcelDividePacket landDivide = (ParcelDividePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (landDivide.AgentData.SessionID != SessionId || - landDivide.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelDivideRequest handlerParcelDivideRequest = OnParcelDivideRequest; - if (handlerParcelDivideRequest != null) - { - handlerParcelDivideRequest((int)Math.Round(landDivide.ParcelData.West), - (int)Math.Round(landDivide.ParcelData.South), - (int)Math.Round(landDivide.ParcelData.East), - (int)Math.Round(landDivide.ParcelData.North), this); - } - break; - - case PacketType.ParcelJoin: - ParcelJoinPacket landJoin = (ParcelJoinPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (landJoin.AgentData.SessionID != SessionId || - landJoin.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelJoinRequest handlerParcelJoinRequest = OnParcelJoinRequest; - - if (handlerParcelJoinRequest != null) - { - handlerParcelJoinRequest((int)Math.Round(landJoin.ParcelData.West), - (int)Math.Round(landJoin.ParcelData.South), - (int)Math.Round(landJoin.ParcelData.East), - (int)Math.Round(landJoin.ParcelData.North), this); - } - break; - - case PacketType.ParcelPropertiesUpdate: - ParcelPropertiesUpdatePacket parcelPropertiesPacket = (ParcelPropertiesUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (parcelPropertiesPacket.AgentData.SessionID != SessionId || - parcelPropertiesPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelPropertiesUpdateRequest handlerParcelPropertiesUpdateRequest = OnParcelPropertiesUpdateRequest; - - if (handlerParcelPropertiesUpdateRequest != null) - { - LandUpdateArgs args = new LandUpdateArgs(); - - args.AuthBuyerID = parcelPropertiesPacket.ParcelData.AuthBuyerID; - args.Category = (ParcelCategory)parcelPropertiesPacket.ParcelData.Category; - 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 = 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; - args.SalePrice = parcelPropertiesPacket.ParcelData.SalePrice; - args.SnapshotID = parcelPropertiesPacket.ParcelData.SnapshotID; - args.UserLocation = parcelPropertiesPacket.ParcelData.UserLocation; - args.UserLookAt = parcelPropertiesPacket.ParcelData.UserLookAt; - handlerParcelPropertiesUpdateRequest(args, parcelPropertiesPacket.ParcelData.LocalID, this); - } - break; - - case PacketType.ParcelSelectObjects: - ParcelSelectObjectsPacket selectPacket = (ParcelSelectObjectsPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (selectPacket.AgentData.SessionID != SessionId || - selectPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - List returnIDs = new List(); - - foreach (ParcelSelectObjectsPacket.ReturnIDsBlock rb in - selectPacket.ReturnIDs) - { - returnIDs.Add(rb.ReturnID); - } - - ParcelSelectObjects handlerParcelSelectObjects = OnParcelSelectObjects; - - if (handlerParcelSelectObjects != null) - { - handlerParcelSelectObjects(selectPacket.ParcelData.LocalID, - Convert.ToInt32(selectPacket.ParcelData.ReturnType), returnIDs, this); - } - break; - - case PacketType.ParcelObjectOwnersRequest: - //m_log.Debug(Pack.ToString()); - ParcelObjectOwnersRequestPacket reqPacket = (ParcelObjectOwnersRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (reqPacket.AgentData.SessionID != SessionId || - reqPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelObjectOwnerRequest handlerParcelObjectOwnerRequest = OnParcelObjectOwnerRequest; - - if (handlerParcelObjectOwnerRequest != null) - { - handlerParcelObjectOwnerRequest(reqPacket.ParcelData.LocalID, this); - } - break; - - case PacketType.ParcelGodForceOwner: - ParcelGodForceOwnerPacket godForceOwnerPacket = (ParcelGodForceOwnerPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (godForceOwnerPacket.AgentData.SessionID != SessionId || - godForceOwnerPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelGodForceOwner handlerParcelGodForceOwner = OnParcelGodForceOwner; - if (handlerParcelGodForceOwner != null) - { - handlerParcelGodForceOwner(godForceOwnerPacket.Data.LocalID, godForceOwnerPacket.Data.OwnerID, this); - } - break; - - case PacketType.ParcelRelease: - ParcelReleasePacket releasePacket = (ParcelReleasePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (releasePacket.AgentData.SessionID != SessionId || - releasePacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelAbandonRequest handlerParcelAbandonRequest = OnParcelAbandonRequest; - if (handlerParcelAbandonRequest != null) - { - handlerParcelAbandonRequest(releasePacket.Data.LocalID, this); - } - break; - - case PacketType.ParcelReclaim: - ParcelReclaimPacket reclaimPacket = (ParcelReclaimPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (reclaimPacket.AgentData.SessionID != SessionId || - reclaimPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelReclaim handlerParcelReclaim = OnParcelReclaim; - if (handlerParcelReclaim != null) - { - handlerParcelReclaim(reclaimPacket.Data.LocalID, this); - } - break; - - case PacketType.ParcelReturnObjects: - - - ParcelReturnObjectsPacket parcelReturnObjects = (ParcelReturnObjectsPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (parcelReturnObjects.AgentData.SessionID != SessionId || - parcelReturnObjects.AgentData.AgentID != AgentId) - break; - } - #endregion - - UUID[] puserselectedOwnerIDs = new UUID[parcelReturnObjects.OwnerIDs.Length]; - for (int parceliterator = 0; parceliterator < parcelReturnObjects.OwnerIDs.Length; parceliterator++) - puserselectedOwnerIDs[parceliterator] = parcelReturnObjects.OwnerIDs[parceliterator].OwnerID; - - UUID[] puserselectedTaskIDs = new UUID[parcelReturnObjects.TaskIDs.Length]; - - for (int parceliterator = 0; parceliterator < parcelReturnObjects.TaskIDs.Length; parceliterator++) - puserselectedTaskIDs[parceliterator] = parcelReturnObjects.TaskIDs[parceliterator].TaskID; - - ParcelReturnObjectsRequest handlerParcelReturnObjectsRequest = OnParcelReturnObjectsRequest; - if (handlerParcelReturnObjectsRequest != null) - { - handlerParcelReturnObjectsRequest(parcelReturnObjects.ParcelData.LocalID, parcelReturnObjects.ParcelData.ReturnType, puserselectedOwnerIDs, puserselectedTaskIDs, this); - - } - break; - - case PacketType.ParcelSetOtherCleanTime: - ParcelSetOtherCleanTimePacket parcelSetOtherCleanTimePacket = (ParcelSetOtherCleanTimePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (parcelSetOtherCleanTimePacket.AgentData.SessionID != SessionId || - parcelSetOtherCleanTimePacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelSetOtherCleanTime handlerParcelSetOtherCleanTime = OnParcelSetOtherCleanTime; - if (handlerParcelSetOtherCleanTime != null) - { - handlerParcelSetOtherCleanTime(this, - parcelSetOtherCleanTimePacket.ParcelData.LocalID, - parcelSetOtherCleanTimePacket.ParcelData.OtherCleanTime); - } - break; - - case PacketType.LandStatRequest: - LandStatRequestPacket lsrp = (LandStatRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (lsrp.AgentData.SessionID != SessionId || - lsrp.AgentData.AgentID != AgentId) - break; - } - #endregion - - GodLandStatRequest handlerLandStatRequest = OnLandStatRequest; - if (handlerLandStatRequest != null) - { - handlerLandStatRequest(lsrp.RequestData.ParcelLocalID, lsrp.RequestData.ReportType, lsrp.RequestData.RequestFlags, Utils.BytesToString(lsrp.RequestData.Filter), this); - } - break; - - case PacketType.ParcelDwellRequest: - ParcelDwellRequestPacket dwellrq = - (ParcelDwellRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dwellrq.AgentData.SessionID != SessionId || - dwellrq.AgentData.AgentID != AgentId) - break; - } - #endregion - - ParcelDwellRequest handlerParcelDwellRequest = OnParcelDwellRequest; - if (handlerParcelDwellRequest != null) - { - handlerParcelDwellRequest(dwellrq.Data.LocalID, this); - } - break; - - //#endregion - - //#region Estate Packets - - case PacketType.EstateOwnerMessage: - EstateOwnerMessagePacket messagePacket = (EstateOwnerMessagePacket)Pack; - //m_log.Debug(messagePacket.ToString()); - - #region Packet Session and User Check - if (m_checkPackets) - { - if (messagePacket.AgentData.SessionID != SessionId || - messagePacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - switch (Utils.BytesToString(messagePacket.MethodData.Method)) - { - case "getinfo": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - OnDetailedEstateDataRequest(this, messagePacket.MethodData.Invoice); - } - break; - case "setregioninfo": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - 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(Utils.BytesToString(messagePacket.ParamList[4].Parameter), Culture.NumberFormatInfo)), - (float)Convert.ToDecimal(Utils.BytesToString(messagePacket.ParamList[5].Parameter), Culture.NumberFormatInfo), - Convert.ToInt16(Utils.BytesToString(messagePacket.ParamList[6].Parameter)), - convertParamStringToBool(messagePacket.ParamList[7].Parameter), convertParamStringToBool(messagePacket.ParamList[8].Parameter)); - } - break; - // case "texturebase": - // if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - // { - // foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) - // { - // string s = Utils.BytesToString(block.Parameter); - // string[] splitField = s.Split(' '); - // if (splitField.Length == 2) - // { - // UUID tempUUID = new UUID(splitField[1]); - // OnSetEstateTerrainBaseTexture(this, Convert.ToInt16(splitField[0]), tempUUID); - // } - // } - // } - // break; - case "texturedetail": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) - { - string s = Utils.BytesToString(block.Parameter); - string[] splitField = s.Split(' '); - if (splitField.Length == 2) - { - Int16 corner = Convert.ToInt16(splitField[0]); - UUID textureUUID = new UUID(splitField[1]); - - OnSetEstateTerrainDetailTexture(this, corner, textureUUID); - } - } - } - - break; - case "textureheights": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) - { - string s = Utils.BytesToString(block.Parameter); - string[] splitField = s.Split(' '); - if (splitField.Length == 3) - { - Int16 corner = Convert.ToInt16(splitField[0]); - float lowValue = (float)Convert.ToDecimal(splitField[1], Culture.NumberFormatInfo); - float highValue = (float)Convert.ToDecimal(splitField[2], Culture.NumberFormatInfo); - - OnSetEstateTerrainTextureHeights(this, corner, lowValue, highValue); - } - } - } - break; - case "texturecommit": - OnCommitEstateTerrainTextureRequest(this); - break; - case "setregionterrain": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - if (messagePacket.ParamList.Length != 9) - { - m_log.Error("EstateOwnerMessage: SetRegionTerrain method has a ParamList of invalid length"); - } - else - { - try - { - string tmp = Utils.BytesToString(messagePacket.ParamList[0].Parameter); - if (!tmp.Contains(".")) tmp += ".00"; - float WaterHeight = (float)Convert.ToDecimal(tmp, Culture.NumberFormatInfo); - tmp = Utils.BytesToString(messagePacket.ParamList[1].Parameter); - if (!tmp.Contains(".")) tmp += ".00"; - float TerrainRaiseLimit = (float)Convert.ToDecimal(tmp, Culture.NumberFormatInfo); - tmp = Utils.BytesToString(messagePacket.ParamList[2].Parameter); - if (!tmp.Contains(".")) tmp += ".00"; - float TerrainLowerLimit = (float)Convert.ToDecimal(tmp, Culture.NumberFormatInfo); - bool UseEstateSun = convertParamStringToBool(messagePacket.ParamList[3].Parameter); - bool UseFixedSun = convertParamStringToBool(messagePacket.ParamList[4].Parameter); - float SunHour = (float)Convert.ToDecimal(Utils.BytesToString(messagePacket.ParamList[5].Parameter), Culture.NumberFormatInfo); - bool UseGlobal = convertParamStringToBool(messagePacket.ParamList[6].Parameter); - bool EstateFixedSun = convertParamStringToBool(messagePacket.ParamList[7].Parameter); - float EstateSunHour = (float)Convert.ToDecimal(Utils.BytesToString(messagePacket.ParamList[8].Parameter), Culture.NumberFormatInfo); - - OnSetRegionTerrainSettings(WaterHeight, TerrainRaiseLimit, TerrainLowerLimit, UseEstateSun, UseFixedSun, SunHour, UseGlobal, EstateFixedSun, EstateSunHour); - - } - catch (Exception ex) - { - m_log.Error("EstateOwnerMessage: Exception while setting terrain settings: \n" + messagePacket + "\n" + ex); - } - } - } - - break; - case "restart": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - // There's only 1 block in the estateResetSim.. and that's the number of seconds till restart. - foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) - { - float timeSeconds; - Utils.TryParseSingle(Utils.BytesToString(block.Parameter), out timeSeconds); - timeSeconds = (int)timeSeconds; - OnEstateRestartSimRequest(this, (int)timeSeconds); - - } - } - break; - case "estatechangecovenantid": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) - { - UUID newCovenantID = new UUID(Utils.BytesToString(block.Parameter)); - OnEstateChangeCovenantRequest(this, newCovenantID); - } - } - break; - case "estateaccessdelta": // Estate access delta manages the banlist and allow list too. - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - 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).Permissions.CanIssueEstateCommand(AgentId, false)) - { - 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; - case "instantmessage": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - if (messagePacket.ParamList.Length < 5) - break; - 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).Permissions.CanIssueEstateCommand(AgentId, false)) - { - 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); - - OnEstateDebugRegionRequest(this, invoice, SenderID, scripted, collisionEvents, physics); - } - break; - case "teleporthomeuser": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - UUID invoice = messagePacket.MethodData.Invoice; - UUID SenderID = messagePacket.AgentData.AgentID; - UUID Prey; - - UUID.TryParse(Utils.BytesToString(messagePacket.ParamList[1].Parameter), out Prey); - - OnEstateTeleportOneUserHomeRequest(this, invoice, SenderID, Prey); - } - break; - case "teleporthomeallusers": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - UUID invoice = messagePacket.MethodData.Invoice; - UUID SenderID = messagePacket.AgentData.AgentID; - OnEstateTeleportAllUsersHomeRequest(this, invoice, SenderID); - } - break; - case "colliders": - handlerLandStatRequest = OnLandStatRequest; - if (handlerLandStatRequest != null) - { - handlerLandStatRequest(0, 1, 0, "", this); - } - break; - case "scripts": - handlerLandStatRequest = OnLandStatRequest; - if (handlerLandStatRequest != null) - { - handlerLandStatRequest(0, 0, 0, "", this); - } - break; - case "terrain": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - if (messagePacket.ParamList.Length > 0) - { - if (Utils.BytesToString(messagePacket.ParamList[0].Parameter) == "bake") - { - BakeTerrain handlerBakeTerrain = OnBakeTerrain; - if (handlerBakeTerrain != null) - { - handlerBakeTerrain(this); - } - } - if (Utils.BytesToString(messagePacket.ParamList[0].Parameter) == "download filename") - { - if (messagePacket.ParamList.Length > 1) - { - RequestTerrain handlerRequestTerrain = OnRequestTerrain; - if (handlerRequestTerrain != null) - { - handlerRequestTerrain(this, Utils.BytesToString(messagePacket.ParamList[1].Parameter)); - } - } - } - if (Utils.BytesToString(messagePacket.ParamList[0].Parameter) == "upload filename") - { - if (messagePacket.ParamList.Length > 1) - { - RequestTerrain handlerUploadTerrain = OnUploadTerrain; - if (handlerUploadTerrain != null) - { - handlerUploadTerrain(this, Utils.BytesToString(messagePacket.ParamList[1].Parameter)); - } - } - } - - } - - - } - break; - - case "estatechangeinfo": - if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) - { - 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)); - - EstateChangeInfo handlerEstateChangeInfo = OnEstateChangeInfo; - if (handlerEstateChangeInfo != null) - { - handlerEstateChangeInfo(this, invoice, SenderID, param1, param2); - } - } - break; - - default: - m_log.Error("EstateOwnerMessage: Unknown method requested\n" + messagePacket); - break; - } - - //int parcelID, uint reportType, uint requestflags, string filter - - //lsrp.RequestData.ParcelLocalID; - //lsrp.RequestData.ReportType; // 1 = colliders, 0 = scripts - //lsrp.RequestData.RequestFlags; - //lsrp.RequestData.Filter; - - break; - - case PacketType.RequestRegionInfo: - RequestRegionInfoPacket.AgentDataBlock mPacket = ((RequestRegionInfoPacket)Pack).AgentData; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (mPacket.SessionID != SessionId || - mPacket.AgentID != AgentId) - break; - } - #endregion - - RegionInfoRequest handlerRegionInfoRequest = OnRegionInfoRequest; - if (handlerRegionInfoRequest != null) - { - handlerRegionInfoRequest(this); - } - break; - - case PacketType.EstateCovenantRequest: - - //EstateCovenantRequestPacket.AgentDataBlock epack = - // ((EstateCovenantRequestPacket)Pack).AgentData; - - EstateCovenantRequest handlerEstateCovenantRequest = OnEstateCovenantRequest; - if (handlerEstateCovenantRequest != null) - { - handlerEstateCovenantRequest(this); - } - break; - - //#endregion - - //#region GodPackets - - case PacketType.RequestGodlikePowers: - RequestGodlikePowersPacket rglpPack = (RequestGodlikePowersPacket)Pack; - RequestGodlikePowersPacket.RequestBlockBlock rblock = rglpPack.RequestBlock; - UUID token = rblock.Token; - - RequestGodlikePowersPacket.AgentDataBlock ablock = rglpPack.AgentData; - - RequestGodlikePowers handlerReqGodlikePowers = OnRequestGodlikePowers; - - if (handlerReqGodlikePowers != null) - { - handlerReqGodlikePowers(ablock.AgentID, ablock.SessionID, token, rblock.Godlike, this); - } - - break; - - case PacketType.GodKickUser: - GodKickUserPacket gkupack = (GodKickUserPacket)Pack; - - if (gkupack.UserInfo.GodSessionID == SessionId && AgentId == gkupack.UserInfo.GodID) - { - GodKickUser handlerGodKickUser = OnGodKickUser; - if (handlerGodKickUser != null) - { - handlerGodKickUser(gkupack.UserInfo.GodID, gkupack.UserInfo.GodSessionID, - gkupack.UserInfo.AgentID, gkupack.UserInfo.KickFlags, gkupack.UserInfo.Reason,gkupack.UserInfo); - } - } - else - { - SendAgentAlertMessage("Kick request denied", false); - } - //KickUserPacket kupack = new KickUserPacket(); - //KickUserPacket.UserInfoBlock kupackib = kupack.UserInfo; - - //kupack.UserInfo.AgentID = gkupack.UserInfo.AgentID; - //kupack.UserInfo.SessionID = gkupack.UserInfo.GodSessionID; - - //kupack.TargetBlock.TargetIP = (uint)0; - //kupack.TargetBlock.TargetPort = (ushort)0; - //kupack.UserInfo.Reason = gkupack.UserInfo.Reason; - - //OutPacket(kupack, ThrottleOutPacketType.Task); - break; - - //#endregion - - //#region Economy/Transaction Packets - - case PacketType.MoneyBalanceRequest: - MoneyBalanceRequestPacket moneybalancerequestpacket = (MoneyBalanceRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (moneybalancerequestpacket.AgentData.SessionID != SessionId || - moneybalancerequestpacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - MoneyBalanceRequest handlerMoneyBalanceRequest = OnMoneyBalanceRequest; - - if (handlerMoneyBalanceRequest != null) - { - handlerMoneyBalanceRequest(this, moneybalancerequestpacket.AgentData.AgentID, moneybalancerequestpacket.AgentData.SessionID, moneybalancerequestpacket.MoneyData.TransactionID); - } - - break; - - case PacketType.EconomyDataRequest: - - - EconomyDataRequest handlerEconomoyDataRequest = OnEconomyDataRequest; - if (handlerEconomoyDataRequest != null) - { - handlerEconomoyDataRequest(AgentId); - } - break; - - case PacketType.RequestPayPrice: - RequestPayPricePacket requestPayPricePacket = (RequestPayPricePacket)Pack; - - RequestPayPrice handlerRequestPayPrice = OnRequestPayPrice; - if (handlerRequestPayPrice != null) - { - handlerRequestPayPrice(this, requestPayPricePacket.ObjectData.ObjectID); - } - break; - - case PacketType.ObjectSaleInfo: - ObjectSaleInfoPacket objectSaleInfoPacket = (ObjectSaleInfoPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (objectSaleInfoPacket.AgentData.SessionID != SessionId || - objectSaleInfoPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ObjectSaleInfo handlerObjectSaleInfo = OnObjectSaleInfo; - if (handlerObjectSaleInfo != null) - { - foreach (ObjectSaleInfoPacket.ObjectDataBlock d - in objectSaleInfoPacket.ObjectData) - { - handlerObjectSaleInfo(this, - objectSaleInfoPacket.AgentData.AgentID, - objectSaleInfoPacket.AgentData.SessionID, - d.LocalID, - d.SaleType, - d.SalePrice); - } - } - break; - - case PacketType.ObjectBuy: - ObjectBuyPacket objectBuyPacket = (ObjectBuyPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (objectBuyPacket.AgentData.SessionID != SessionId || - objectBuyPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ObjectBuy handlerObjectBuy = OnObjectBuy; - - if (handlerObjectBuy != null) - { - foreach (ObjectBuyPacket.ObjectDataBlock d - in objectBuyPacket.ObjectData) - { - handlerObjectBuy(this, - objectBuyPacket.AgentData.AgentID, - objectBuyPacket.AgentData.SessionID, - objectBuyPacket.AgentData.GroupID, - objectBuyPacket.AgentData.CategoryID, - d.ObjectLocalID, - d.SaleType, - d.SalePrice); - } - } - break; - - //#endregion - - //#region Script Packets - - case PacketType.GetScriptRunning: - GetScriptRunningPacket scriptRunning = (GetScriptRunningPacket)Pack; - - GetScriptRunning handlerGetScriptRunning = OnGetScriptRunning; - if (handlerGetScriptRunning != null) - { - handlerGetScriptRunning(this, scriptRunning.Script.ObjectID, scriptRunning.Script.ItemID); - } - break; - - case PacketType.SetScriptRunning: - SetScriptRunningPacket setScriptRunning = (SetScriptRunningPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (setScriptRunning.AgentData.SessionID != SessionId || - setScriptRunning.AgentData.AgentID != AgentId) - break; - } - #endregion - - SetScriptRunning handlerSetScriptRunning = OnSetScriptRunning; - if (handlerSetScriptRunning != null) - { - handlerSetScriptRunning(this, setScriptRunning.Script.ObjectID, setScriptRunning.Script.ItemID, setScriptRunning.Script.Running); - } - break; - - case PacketType.ScriptReset: - ScriptResetPacket scriptResetPacket = (ScriptResetPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (scriptResetPacket.AgentData.SessionID != SessionId || - scriptResetPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ScriptReset handlerScriptReset = OnScriptReset; - if (handlerScriptReset != null) - { - handlerScriptReset(this, scriptResetPacket.Script.ObjectID, scriptResetPacket.Script.ItemID); - } - break; - - //#endregion - - //#region Gesture Managment - - case PacketType.ActivateGestures: - ActivateGesturesPacket activateGesturePacket = (ActivateGesturesPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (activateGesturePacket.AgentData.SessionID != SessionId || - activateGesturePacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - ActivateGesture handlerActivateGesture = OnActivateGesture; - if (handlerActivateGesture != null) - { - handlerActivateGesture(this, - activateGesturePacket.Data[0].AssetID, - activateGesturePacket.Data[0].ItemID); - } - else m_log.Error("Null pointer for activateGesture"); - - break; - - case PacketType.DeactivateGestures: - DeactivateGesturesPacket deactivateGesturePacket = (DeactivateGesturesPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (deactivateGesturePacket.AgentData.SessionID != SessionId || - deactivateGesturePacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - DeactivateGesture handlerDeactivateGesture = OnDeactivateGesture; - if (handlerDeactivateGesture != null) - { - handlerDeactivateGesture(this, deactivateGesturePacket.Data[0].ItemID); - } - break; - case PacketType.ObjectOwner: - ObjectOwnerPacket objectOwnerPacket = (ObjectOwnerPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (objectOwnerPacket.AgentData.SessionID != SessionId || - objectOwnerPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - List localIDs = new List(); - - foreach (ObjectOwnerPacket.ObjectDataBlock d in objectOwnerPacket.ObjectData) - localIDs.Add(d.ObjectLocalID); - - ObjectOwner handlerObjectOwner = OnObjectOwner; - if (handlerObjectOwner != null) - { - handlerObjectOwner(this, objectOwnerPacket.HeaderData.OwnerID, objectOwnerPacket.HeaderData.GroupID, localIDs); - } - break; - - //#endregion - - case PacketType.AgentFOV: - AgentFOVPacket fovPacket = (AgentFOVPacket)Pack; - - if (fovPacket.FOVBlock.GenCounter > m_agentFOVCounter) - { - m_agentFOVCounter = fovPacket.FOVBlock.GenCounter; - AgentFOV handlerAgentFOV = OnAgentFOV; - if (handlerAgentFOV != null) - { - handlerAgentFOV(this, fovPacket.FOVBlock.VerticalAngle); - } - } - break; - - //#region unimplemented handlers - - case PacketType.ViewerStats: - // TODO: handle this packet - //m_log.Warn("[CLIENT]: unhandled ViewerStats packet"); - break; - - case PacketType.MapItemRequest: - MapItemRequestPacket mirpk = (MapItemRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (mirpk.AgentData.SessionID != SessionId || - mirpk.AgentData.AgentID != AgentId) - break; - } - #endregion - - //m_log.Debug(mirpk.ToString()); - MapItemRequest handlerMapItemRequest = OnMapItemRequest; - if (handlerMapItemRequest != null) - { - handlerMapItemRequest(this, mirpk.AgentData.Flags, mirpk.AgentData.EstateID, - mirpk.AgentData.Godlike, mirpk.RequestData.ItemType, - mirpk.RequestData.RegionHandle); - - } - break; - - case PacketType.TransferAbort: - // TODO: handle this packet - //m_log.Warn("[CLIENT]: unhandled TransferAbort packet"); - break; - - case PacketType.MuteListRequest: - MuteListRequestPacket muteListRequest = - (MuteListRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (muteListRequest.AgentData.SessionID != SessionId || - muteListRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - MuteListRequest handlerMuteListRequest = OnMuteListRequest; - if (handlerMuteListRequest != null) - { - handlerMuteListRequest(this, muteListRequest.MuteData.MuteCRC); - } - else - { - SendUseCachedMuteList(); - } - break; - - case PacketType.UseCircuitCode: - // Don't display this one, we handle it at a lower level - break; - - case PacketType.AgentHeightWidth: - // TODO: handle this packet - //m_log.Warn("[CLIENT]: unhandled AgentHeightWidth packet"); - break; - - case PacketType.InventoryDescendents: - // TODO: handle this packet - //m_log.Warn("[CLIENT]: unhandled InventoryDescent packet"); - - break; - - case PacketType.DirPlacesQuery: - DirPlacesQueryPacket dirPlacesQueryPacket = (DirPlacesQueryPacket)Pack; - //m_log.Debug(dirPlacesQueryPacket.ToString()); - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dirPlacesQueryPacket.AgentData.SessionID != SessionId || - dirPlacesQueryPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - DirPlacesQuery handlerDirPlacesQuery = OnDirPlacesQuery; - if (handlerDirPlacesQuery != null) - { - handlerDirPlacesQuery(this, - dirPlacesQueryPacket.QueryData.QueryID, - Utils.BytesToString( - dirPlacesQueryPacket.QueryData.QueryText), - (int)dirPlacesQueryPacket.QueryData.QueryFlags, - (int)dirPlacesQueryPacket.QueryData.Category, - Utils.BytesToString( - dirPlacesQueryPacket.QueryData.SimName), - dirPlacesQueryPacket.QueryData.QueryStart); - } - break; - - case PacketType.DirFindQuery: - DirFindQueryPacket dirFindQueryPacket = (DirFindQueryPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dirFindQueryPacket.AgentData.SessionID != SessionId || - dirFindQueryPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - DirFindQuery handlerDirFindQuery = OnDirFindQuery; - if (handlerDirFindQuery != null) - { - handlerDirFindQuery(this, - dirFindQueryPacket.QueryData.QueryID, - Utils.BytesToString( - dirFindQueryPacket.QueryData.QueryText), - dirFindQueryPacket.QueryData.QueryFlags, - dirFindQueryPacket.QueryData.QueryStart); - } - break; - - case PacketType.DirLandQuery: - DirLandQueryPacket dirLandQueryPacket = (DirLandQueryPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dirLandQueryPacket.AgentData.SessionID != SessionId || - dirLandQueryPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - DirLandQuery handlerDirLandQuery = OnDirLandQuery; - if (handlerDirLandQuery != null) - { - handlerDirLandQuery(this, - dirLandQueryPacket.QueryData.QueryID, - dirLandQueryPacket.QueryData.QueryFlags, - dirLandQueryPacket.QueryData.SearchType, - dirLandQueryPacket.QueryData.Price, - dirLandQueryPacket.QueryData.Area, - dirLandQueryPacket.QueryData.QueryStart); - } - break; - - case PacketType.DirPopularQuery: - DirPopularQueryPacket dirPopularQueryPacket = (DirPopularQueryPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dirPopularQueryPacket.AgentData.SessionID != SessionId || - dirPopularQueryPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - DirPopularQuery handlerDirPopularQuery = OnDirPopularQuery; - if (handlerDirPopularQuery != null) - { - handlerDirPopularQuery(this, - dirPopularQueryPacket.QueryData.QueryID, - dirPopularQueryPacket.QueryData.QueryFlags); - } - break; - - case PacketType.DirClassifiedQuery: - DirClassifiedQueryPacket dirClassifiedQueryPacket = (DirClassifiedQueryPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (dirClassifiedQueryPacket.AgentData.SessionID != SessionId || - dirClassifiedQueryPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - DirClassifiedQuery handlerDirClassifiedQuery = OnDirClassifiedQuery; - if (handlerDirClassifiedQuery != null) - { - handlerDirClassifiedQuery(this, - dirClassifiedQueryPacket.QueryData.QueryID, - Utils.BytesToString( - dirClassifiedQueryPacket.QueryData.QueryText), - dirClassifiedQueryPacket.QueryData.QueryFlags, - dirClassifiedQueryPacket.QueryData.Category, - dirClassifiedQueryPacket.QueryData.QueryStart); - } - break; - - case PacketType.EventInfoRequest: - EventInfoRequestPacket eventInfoRequestPacket = (EventInfoRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (eventInfoRequestPacket.AgentData.SessionID != SessionId || - eventInfoRequestPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (OnEventInfoRequest != null) - { - OnEventInfoRequest(this, eventInfoRequestPacket.EventData.EventID); - } - break; - - //#region Calling Card - - case PacketType.OfferCallingCard: - OfferCallingCardPacket offerCallingCardPacket = (OfferCallingCardPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (offerCallingCardPacket.AgentData.SessionID != SessionId || - offerCallingCardPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (OnOfferCallingCard != null) - { - OnOfferCallingCard(this, - offerCallingCardPacket.AgentBlock.DestID, - offerCallingCardPacket.AgentBlock.TransactionID); - } - break; - - case PacketType.AcceptCallingCard: - AcceptCallingCardPacket acceptCallingCardPacket = (AcceptCallingCardPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (acceptCallingCardPacket.AgentData.SessionID != SessionId || - acceptCallingCardPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - // according to http://wiki.secondlife.com/wiki/AcceptCallingCard FolderData should - // contain exactly one entry - if (OnAcceptCallingCard != null && acceptCallingCardPacket.FolderData.Length > 0) - { - OnAcceptCallingCard(this, - acceptCallingCardPacket.TransactionBlock.TransactionID, - acceptCallingCardPacket.FolderData[0].FolderID); - } - break; - - case PacketType.DeclineCallingCard: - DeclineCallingCardPacket declineCallingCardPacket = (DeclineCallingCardPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (declineCallingCardPacket.AgentData.SessionID != SessionId || - declineCallingCardPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (OnDeclineCallingCard != null) - { - OnDeclineCallingCard(this, - declineCallingCardPacket.TransactionBlock.TransactionID); - } - break; - //#endregion - - //#region Groups - case PacketType.ActivateGroup: - ActivateGroupPacket activateGroupPacket = (ActivateGroupPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (activateGroupPacket.AgentData.SessionID != SessionId || - activateGroupPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - m_GroupsModule.ActivateGroup(this, activateGroupPacket.AgentData.GroupID); - m_GroupsModule.SendAgentGroupDataUpdate(this); - } - break; - - - case PacketType.GroupTitlesRequest: - GroupTitlesRequestPacket groupTitlesRequest = - (GroupTitlesRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupTitlesRequest.AgentData.SessionID != SessionId || - groupTitlesRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - GroupTitlesReplyPacket groupTitlesReply = (GroupTitlesReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupTitlesReply); - - groupTitlesReply.AgentData = - new GroupTitlesReplyPacket.AgentDataBlock(); - - groupTitlesReply.AgentData.AgentID = AgentId; - groupTitlesReply.AgentData.GroupID = - groupTitlesRequest.AgentData.GroupID; - - groupTitlesReply.AgentData.RequestID = - groupTitlesRequest.AgentData.RequestID; - - List titles = - m_GroupsModule.GroupTitlesRequest(this, - groupTitlesRequest.AgentData.GroupID); - - groupTitlesReply.GroupData = - new GroupTitlesReplyPacket.GroupDataBlock[titles.Count]; - - int i = 0; - foreach (GroupTitlesData d in titles) - { - groupTitlesReply.GroupData[i] = - new GroupTitlesReplyPacket.GroupDataBlock(); - - groupTitlesReply.GroupData[i].Title = - Util.StringToBytes256(d.Name); - groupTitlesReply.GroupData[i].RoleID = - d.UUID; - groupTitlesReply.GroupData[i].Selected = - d.Selected; - i++; - } - - OutPacket(groupTitlesReply, ThrottleOutPacketType.Task); - } - break; - - case PacketType.GroupProfileRequest: - GroupProfileRequestPacket groupProfileRequest = - (GroupProfileRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupProfileRequest.AgentData.SessionID != SessionId || - groupProfileRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - GroupProfileReplyPacket groupProfileReply = (GroupProfileReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupProfileReply); - - groupProfileReply.AgentData = new GroupProfileReplyPacket.AgentDataBlock(); - groupProfileReply.GroupData = new GroupProfileReplyPacket.GroupDataBlock(); - groupProfileReply.AgentData.AgentID = AgentId; - - GroupProfileData d = m_GroupsModule.GroupProfileRequest(this, - groupProfileRequest.GroupData.GroupID); - - groupProfileReply.GroupData.GroupID = d.GroupID; - groupProfileReply.GroupData.Name = Util.StringToBytes256(d.Name); - groupProfileReply.GroupData.Charter = Util.StringToBytes1024(d.Charter); - groupProfileReply.GroupData.ShowInList = d.ShowInList; - groupProfileReply.GroupData.MemberTitle = Util.StringToBytes256(d.MemberTitle); - groupProfileReply.GroupData.PowersMask = d.PowersMask; - groupProfileReply.GroupData.InsigniaID = d.InsigniaID; - groupProfileReply.GroupData.FounderID = d.FounderID; - groupProfileReply.GroupData.MembershipFee = d.MembershipFee; - groupProfileReply.GroupData.OpenEnrollment = d.OpenEnrollment; - groupProfileReply.GroupData.Money = d.Money; - groupProfileReply.GroupData.GroupMembershipCount = d.GroupMembershipCount; - groupProfileReply.GroupData.GroupRolesCount = d.GroupRolesCount; - groupProfileReply.GroupData.AllowPublish = d.AllowPublish; - groupProfileReply.GroupData.MaturePublish = d.MaturePublish; - groupProfileReply.GroupData.OwnerRole = d.OwnerRole; - - OutPacket(groupProfileReply, ThrottleOutPacketType.Task); - } - break; - - case PacketType.GroupMembersRequest: - GroupMembersRequestPacket groupMembersRequestPacket = - (GroupMembersRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupMembersRequestPacket.AgentData.SessionID != SessionId || - groupMembersRequestPacket.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - List members = - m_GroupsModule.GroupMembersRequest(this, groupMembersRequestPacket.GroupData.GroupID); - - int memberCount = members.Count; - - while (true) - { - int blockCount = members.Count; - if (blockCount > 40) - blockCount = 40; - - GroupMembersReplyPacket groupMembersReply = (GroupMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupMembersReply); - - groupMembersReply.AgentData = - new GroupMembersReplyPacket.AgentDataBlock(); - groupMembersReply.GroupData = - new GroupMembersReplyPacket.GroupDataBlock(); - groupMembersReply.MemberData = - new GroupMembersReplyPacket.MemberDataBlock[ - blockCount]; - - groupMembersReply.AgentData.AgentID = AgentId; - groupMembersReply.GroupData.GroupID = - groupMembersRequestPacket.GroupData.GroupID; - groupMembersReply.GroupData.RequestID = - groupMembersRequestPacket.GroupData.RequestID; - groupMembersReply.GroupData.MemberCount = memberCount; - - for (int i = 0; i < blockCount; i++) - { - GroupMembersData m = members[0]; - members.RemoveAt(0); - - groupMembersReply.MemberData[i] = - new GroupMembersReplyPacket.MemberDataBlock(); - groupMembersReply.MemberData[i].AgentID = - m.AgentID; - groupMembersReply.MemberData[i].Contribution = - m.Contribution; - groupMembersReply.MemberData[i].OnlineStatus = - Util.StringToBytes256(m.OnlineStatus); - groupMembersReply.MemberData[i].AgentPowers = - m.AgentPowers; - groupMembersReply.MemberData[i].Title = - Util.StringToBytes256(m.Title); - groupMembersReply.MemberData[i].IsOwner = - m.IsOwner; - } - OutPacket(groupMembersReply, ThrottleOutPacketType.Task); - if (members.Count == 0) - break; - } - } - break; - - case PacketType.GroupRoleDataRequest: - GroupRoleDataRequestPacket groupRolesRequest = - (GroupRoleDataRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupRolesRequest.AgentData.SessionID != SessionId || - groupRolesRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - GroupRoleDataReplyPacket groupRolesReply = (GroupRoleDataReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupRoleDataReply); - - groupRolesReply.AgentData = - new GroupRoleDataReplyPacket.AgentDataBlock(); - - groupRolesReply.AgentData.AgentID = AgentId; - - groupRolesReply.GroupData = - new GroupRoleDataReplyPacket.GroupDataBlock(); - - groupRolesReply.GroupData.GroupID = - groupRolesRequest.GroupData.GroupID; - - groupRolesReply.GroupData.RequestID = - groupRolesRequest.GroupData.RequestID; - - List titles = - m_GroupsModule.GroupRoleDataRequest(this, - groupRolesRequest.GroupData.GroupID); - - groupRolesReply.GroupData.RoleCount = - titles.Count; - - groupRolesReply.RoleData = - new GroupRoleDataReplyPacket.RoleDataBlock[titles.Count]; - - int i = 0; - foreach (GroupRolesData d in titles) - { - groupRolesReply.RoleData[i] = - new GroupRoleDataReplyPacket.RoleDataBlock(); - - groupRolesReply.RoleData[i].RoleID = - d.RoleID; - groupRolesReply.RoleData[i].Name = - Util.StringToBytes256(d.Name); - groupRolesReply.RoleData[i].Title = - Util.StringToBytes256(d.Title); - groupRolesReply.RoleData[i].Description = - Util.StringToBytes1024(d.Description); - groupRolesReply.RoleData[i].Powers = - d.Powers; - groupRolesReply.RoleData[i].Members = - (uint)d.Members; - - i++; - } - - OutPacket(groupRolesReply, ThrottleOutPacketType.Task); - } - break; - - case PacketType.GroupRoleMembersRequest: - GroupRoleMembersRequestPacket groupRoleMembersRequest = - (GroupRoleMembersRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupRoleMembersRequest.AgentData.SessionID != SessionId || - groupRoleMembersRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - List mappings = - m_GroupsModule.GroupRoleMembersRequest(this, - groupRoleMembersRequest.GroupData.GroupID); - - int mappingsCount = mappings.Count; - - while (mappings.Count > 0) - { - int pairs = mappings.Count; - if (pairs > 32) - pairs = 32; - - GroupRoleMembersReplyPacket groupRoleMembersReply = (GroupRoleMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupRoleMembersReply); - groupRoleMembersReply.AgentData = - new GroupRoleMembersReplyPacket.AgentDataBlock(); - groupRoleMembersReply.AgentData.AgentID = - AgentId; - groupRoleMembersReply.AgentData.GroupID = - groupRoleMembersRequest.GroupData.GroupID; - groupRoleMembersReply.AgentData.RequestID = - groupRoleMembersRequest.GroupData.RequestID; - - groupRoleMembersReply.AgentData.TotalPairs = - (uint)mappingsCount; - - groupRoleMembersReply.MemberData = - new GroupRoleMembersReplyPacket.MemberDataBlock[pairs]; - - for (int i = 0; i < pairs; i++) - { - GroupRoleMembersData d = mappings[0]; - mappings.RemoveAt(0); - - groupRoleMembersReply.MemberData[i] = - new GroupRoleMembersReplyPacket.MemberDataBlock(); - - groupRoleMembersReply.MemberData[i].RoleID = - d.RoleID; - groupRoleMembersReply.MemberData[i].MemberID = - d.MemberID; - } - - OutPacket(groupRoleMembersReply, ThrottleOutPacketType.Task); - } - } - break; - - case PacketType.CreateGroupRequest: - CreateGroupRequestPacket createGroupRequest = - (CreateGroupRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (createGroupRequest.AgentData.SessionID != SessionId || - createGroupRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - m_GroupsModule.CreateGroup(this, - Utils.BytesToString(createGroupRequest.GroupData.Name), - Utils.BytesToString(createGroupRequest.GroupData.Charter), - createGroupRequest.GroupData.ShowInList, - createGroupRequest.GroupData.InsigniaID, - createGroupRequest.GroupData.MembershipFee, - createGroupRequest.GroupData.OpenEnrollment, - createGroupRequest.GroupData.AllowPublish, - createGroupRequest.GroupData.MaturePublish); - } - break; - - case PacketType.UpdateGroupInfo: - UpdateGroupInfoPacket updateGroupInfo = - (UpdateGroupInfoPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (updateGroupInfo.AgentData.SessionID != SessionId || - updateGroupInfo.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - m_GroupsModule.UpdateGroupInfo(this, - updateGroupInfo.GroupData.GroupID, - Utils.BytesToString(updateGroupInfo.GroupData.Charter), - updateGroupInfo.GroupData.ShowInList, - updateGroupInfo.GroupData.InsigniaID, - updateGroupInfo.GroupData.MembershipFee, - updateGroupInfo.GroupData.OpenEnrollment, - updateGroupInfo.GroupData.AllowPublish, - updateGroupInfo.GroupData.MaturePublish); - } - - break; - - case PacketType.SetGroupAcceptNotices: - SetGroupAcceptNoticesPacket setGroupAcceptNotices = - (SetGroupAcceptNoticesPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (setGroupAcceptNotices.AgentData.SessionID != SessionId || - setGroupAcceptNotices.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - m_GroupsModule.SetGroupAcceptNotices(this, - setGroupAcceptNotices.Data.GroupID, - setGroupAcceptNotices.Data.AcceptNotices, - setGroupAcceptNotices.NewData.ListInProfile); - } - - break; - - case PacketType.GroupTitleUpdate: - GroupTitleUpdatePacket groupTitleUpdate = - (GroupTitleUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupTitleUpdate.AgentData.SessionID != SessionId || - groupTitleUpdate.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - m_GroupsModule.GroupTitleUpdate(this, - groupTitleUpdate.AgentData.GroupID, - groupTitleUpdate.AgentData.TitleRoleID); - } - - break; - - - case PacketType.ParcelDeedToGroup: - ParcelDeedToGroupPacket parcelDeedToGroup = (ParcelDeedToGroupPacket)Pack; - if (m_GroupsModule != null) - { - ParcelDeedToGroup handlerParcelDeedToGroup = OnParcelDeedToGroup; - if (handlerParcelDeedToGroup != null) - { - handlerParcelDeedToGroup(parcelDeedToGroup.Data.LocalID, parcelDeedToGroup.Data.GroupID, this); - - } - } - - break; - - - case PacketType.GroupNoticesListRequest: - GroupNoticesListRequestPacket groupNoticesListRequest = - (GroupNoticesListRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupNoticesListRequest.AgentData.SessionID != SessionId || - groupNoticesListRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - GroupNoticeData[] gn = - m_GroupsModule.GroupNoticesListRequest(this, - groupNoticesListRequest.Data.GroupID); - - GroupNoticesListReplyPacket groupNoticesListReply = (GroupNoticesListReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupNoticesListReply); - groupNoticesListReply.AgentData = - new GroupNoticesListReplyPacket.AgentDataBlock(); - groupNoticesListReply.AgentData.AgentID = AgentId; - groupNoticesListReply.AgentData.GroupID = groupNoticesListRequest.Data.GroupID; - - groupNoticesListReply.Data = new GroupNoticesListReplyPacket.DataBlock[gn.Length]; - - int i = 0; - foreach (GroupNoticeData g in gn) - { - groupNoticesListReply.Data[i] = new GroupNoticesListReplyPacket.DataBlock(); - groupNoticesListReply.Data[i].NoticeID = - g.NoticeID; - groupNoticesListReply.Data[i].Timestamp = - g.Timestamp; - groupNoticesListReply.Data[i].FromName = - Util.StringToBytes256(g.FromName); - groupNoticesListReply.Data[i].Subject = - Util.StringToBytes256(g.Subject); - groupNoticesListReply.Data[i].HasAttachment = - g.HasAttachment; - groupNoticesListReply.Data[i].AssetType = - g.AssetType; - i++; - } - - OutPacket(groupNoticesListReply, ThrottleOutPacketType.Task); - } - - break; - - case PacketType.GroupNoticeRequest: - GroupNoticeRequestPacket groupNoticeRequest = - (GroupNoticeRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupNoticeRequest.AgentData.SessionID != SessionId || - groupNoticeRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - m_GroupsModule.GroupNoticeRequest(this, - groupNoticeRequest.Data.GroupNoticeID); - } - break; - - case PacketType.GroupRoleUpdate: - GroupRoleUpdatePacket groupRoleUpdate = - (GroupRoleUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupRoleUpdate.AgentData.SessionID != SessionId || - groupRoleUpdate.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - foreach (GroupRoleUpdatePacket.RoleDataBlock d in - groupRoleUpdate.RoleData) - { - m_GroupsModule.GroupRoleUpdate(this, - groupRoleUpdate.AgentData.GroupID, - d.RoleID, - Utils.BytesToString(d.Name), - Utils.BytesToString(d.Description), - Utils.BytesToString(d.Title), - d.Powers, - d.UpdateType); - } - m_GroupsModule.NotifyChange(groupRoleUpdate.AgentData.GroupID); - } - break; - - case PacketType.GroupRoleChanges: - GroupRoleChangesPacket groupRoleChanges = - (GroupRoleChangesPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (groupRoleChanges.AgentData.SessionID != SessionId || - groupRoleChanges.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - foreach (GroupRoleChangesPacket.RoleChangeBlock d in - groupRoleChanges.RoleChange) - { - m_GroupsModule.GroupRoleChanges(this, - groupRoleChanges.AgentData.GroupID, - d.RoleID, - d.MemberID, - d.Change); - } - m_GroupsModule.NotifyChange(groupRoleChanges.AgentData.GroupID); - } - break; - - case PacketType.JoinGroupRequest: - JoinGroupRequestPacket joinGroupRequest = - (JoinGroupRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (joinGroupRequest.AgentData.SessionID != SessionId || - joinGroupRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - m_GroupsModule.JoinGroupRequest(this, - joinGroupRequest.GroupData.GroupID); - } - break; - - case PacketType.LeaveGroupRequest: - LeaveGroupRequestPacket leaveGroupRequest = - (LeaveGroupRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (leaveGroupRequest.AgentData.SessionID != SessionId || - leaveGroupRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - m_GroupsModule.LeaveGroupRequest(this, - leaveGroupRequest.GroupData.GroupID); - } - break; - - case PacketType.EjectGroupMemberRequest: - EjectGroupMemberRequestPacket ejectGroupMemberRequest = - (EjectGroupMemberRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (ejectGroupMemberRequest.AgentData.SessionID != SessionId || - ejectGroupMemberRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - foreach (EjectGroupMemberRequestPacket.EjectDataBlock e - in ejectGroupMemberRequest.EjectData) - { - m_GroupsModule.EjectGroupMemberRequest(this, - ejectGroupMemberRequest.GroupData.GroupID, - e.EjecteeID); - } - } - break; - - case PacketType.InviteGroupRequest: - InviteGroupRequestPacket inviteGroupRequest = - (InviteGroupRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (inviteGroupRequest.AgentData.SessionID != SessionId || - inviteGroupRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - if (m_GroupsModule != null) - { - foreach (InviteGroupRequestPacket.InviteDataBlock b in - inviteGroupRequest.InviteData) - { - m_GroupsModule.InviteGroupRequest(this, - inviteGroupRequest.GroupData.GroupID, - b.InviteeID, - b.RoleID); - } - } - break; - - //#endregion - - case PacketType.StartLure: - StartLurePacket startLureRequest = (StartLurePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (startLureRequest.AgentData.SessionID != SessionId || - startLureRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - StartLure handlerStartLure = OnStartLure; - if (handlerStartLure != null) - handlerStartLure(startLureRequest.Info.LureType, - Utils.BytesToString( - startLureRequest.Info.Message), - startLureRequest.TargetData[0].TargetID, - this); - break; - - case PacketType.TeleportLureRequest: - TeleportLureRequestPacket teleportLureRequest = - (TeleportLureRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (teleportLureRequest.Info.SessionID != SessionId || - teleportLureRequest.Info.AgentID != AgentId) - break; - } - #endregion - - TeleportLureRequest handlerTeleportLureRequest = OnTeleportLureRequest; - if (handlerTeleportLureRequest != null) - handlerTeleportLureRequest( - teleportLureRequest.Info.LureID, - teleportLureRequest.Info.TeleportFlags, - this); - break; - - case PacketType.ClassifiedInfoRequest: - ClassifiedInfoRequestPacket classifiedInfoRequest = - (ClassifiedInfoRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (classifiedInfoRequest.AgentData.SessionID != SessionId || - classifiedInfoRequest.AgentData.AgentID != AgentId) - break; - } - #endregion - - ClassifiedInfoRequest handlerClassifiedInfoRequest = OnClassifiedInfoRequest; - if (handlerClassifiedInfoRequest != null) - handlerClassifiedInfoRequest( - classifiedInfoRequest.Data.ClassifiedID, - this); - break; - - case PacketType.ClassifiedInfoUpdate: - ClassifiedInfoUpdatePacket classifiedInfoUpdate = - (ClassifiedInfoUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (classifiedInfoUpdate.AgentData.SessionID != SessionId || - classifiedInfoUpdate.AgentData.AgentID != AgentId) - break; - } - #endregion - - ClassifiedInfoUpdate handlerClassifiedInfoUpdate = OnClassifiedInfoUpdate; - if (handlerClassifiedInfoUpdate != null) - handlerClassifiedInfoUpdate( - classifiedInfoUpdate.Data.ClassifiedID, - classifiedInfoUpdate.Data.Category, - Utils.BytesToString( - classifiedInfoUpdate.Data.Name), - Utils.BytesToString( - classifiedInfoUpdate.Data.Desc), - classifiedInfoUpdate.Data.ParcelID, - classifiedInfoUpdate.Data.ParentEstate, - classifiedInfoUpdate.Data.SnapshotID, - new Vector3( - classifiedInfoUpdate.Data.PosGlobal), - classifiedInfoUpdate.Data.ClassifiedFlags, - classifiedInfoUpdate.Data.PriceForListing, - this); - break; - - case PacketType.ClassifiedDelete: - ClassifiedDeletePacket classifiedDelete = - (ClassifiedDeletePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (classifiedDelete.AgentData.SessionID != SessionId || - classifiedDelete.AgentData.AgentID != AgentId) - break; - } - #endregion - - ClassifiedDelete handlerClassifiedDelete = OnClassifiedDelete; - if (handlerClassifiedDelete != null) - handlerClassifiedDelete( - classifiedDelete.Data.ClassifiedID, - this); - break; - - case PacketType.ClassifiedGodDelete: - ClassifiedGodDeletePacket classifiedGodDelete = - (ClassifiedGodDeletePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (classifiedGodDelete.AgentData.SessionID != SessionId || - classifiedGodDelete.AgentData.AgentID != AgentId) - break; - } - #endregion - - ClassifiedDelete handlerClassifiedGodDelete = OnClassifiedGodDelete; - if (handlerClassifiedGodDelete != null) - handlerClassifiedGodDelete( - classifiedGodDelete.Data.ClassifiedID, - this); - break; - - case PacketType.EventGodDelete: - EventGodDeletePacket eventGodDelete = - (EventGodDeletePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (eventGodDelete.AgentData.SessionID != SessionId || - eventGodDelete.AgentData.AgentID != AgentId) - break; - } - #endregion - - EventGodDelete handlerEventGodDelete = OnEventGodDelete; - if (handlerEventGodDelete != null) - handlerEventGodDelete( - eventGodDelete.EventData.EventID, - eventGodDelete.QueryData.QueryID, - Utils.BytesToString( - eventGodDelete.QueryData.QueryText), - eventGodDelete.QueryData.QueryFlags, - eventGodDelete.QueryData.QueryStart, - this); - break; - - case PacketType.EventNotificationAddRequest: - EventNotificationAddRequestPacket eventNotificationAdd = - (EventNotificationAddRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (eventNotificationAdd.AgentData.SessionID != SessionId || - eventNotificationAdd.AgentData.AgentID != AgentId) - break; - } - #endregion - - EventNotificationAddRequest handlerEventNotificationAddRequest = OnEventNotificationAddRequest; - if (handlerEventNotificationAddRequest != null) - handlerEventNotificationAddRequest( - eventNotificationAdd.EventData.EventID, this); - break; - - case PacketType.EventNotificationRemoveRequest: - EventNotificationRemoveRequestPacket eventNotificationRemove = - (EventNotificationRemoveRequestPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (eventNotificationRemove.AgentData.SessionID != SessionId || - eventNotificationRemove.AgentData.AgentID != AgentId) - break; - } - #endregion - - EventNotificationRemoveRequest handlerEventNotificationRemoveRequest = OnEventNotificationRemoveRequest; - if (handlerEventNotificationRemoveRequest != null) - handlerEventNotificationRemoveRequest( - eventNotificationRemove.EventData.EventID, this); - break; - - case PacketType.RetrieveInstantMessages: - RetrieveInstantMessagesPacket rimpInstantMessagePack = (RetrieveInstantMessagesPacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (rimpInstantMessagePack.AgentData.SessionID != SessionId || - rimpInstantMessagePack.AgentData.AgentID != AgentId) - break; - } - #endregion - - RetrieveInstantMessages handlerRetrieveInstantMessages = OnRetrieveInstantMessages; - if (handlerRetrieveInstantMessages != null) - handlerRetrieveInstantMessages(this); - break; - - case PacketType.PickDelete: - PickDeletePacket pickDelete = - (PickDeletePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (pickDelete.AgentData.SessionID != SessionId || - pickDelete.AgentData.AgentID != AgentId) - break; - } - #endregion - - PickDelete handlerPickDelete = OnPickDelete; - if (handlerPickDelete != null) - handlerPickDelete(this, pickDelete.Data.PickID); - break; - - case PacketType.PickGodDelete: - PickGodDeletePacket pickGodDelete = - (PickGodDeletePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (pickGodDelete.AgentData.SessionID != SessionId || - pickGodDelete.AgentData.AgentID != AgentId) - break; - } - #endregion - - PickGodDelete handlerPickGodDelete = OnPickGodDelete; - if (handlerPickGodDelete != null) - handlerPickGodDelete(this, - pickGodDelete.AgentData.AgentID, - pickGodDelete.Data.PickID, - pickGodDelete.Data.QueryID); - break; - - case PacketType.PickInfoUpdate: - PickInfoUpdatePacket pickInfoUpdate = - (PickInfoUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (pickInfoUpdate.AgentData.SessionID != SessionId || - pickInfoUpdate.AgentData.AgentID != AgentId) - break; - } - #endregion - - PickInfoUpdate handlerPickInfoUpdate = OnPickInfoUpdate; - if (handlerPickInfoUpdate != null) - handlerPickInfoUpdate(this, - pickInfoUpdate.Data.PickID, - pickInfoUpdate.Data.CreatorID, - pickInfoUpdate.Data.TopPick, - Utils.BytesToString(pickInfoUpdate.Data.Name), - Utils.BytesToString(pickInfoUpdate.Data.Desc), - pickInfoUpdate.Data.SnapshotID, - pickInfoUpdate.Data.SortOrder, - pickInfoUpdate.Data.Enabled); - break; - - case PacketType.AvatarNotesUpdate: - AvatarNotesUpdatePacket avatarNotesUpdate = - (AvatarNotesUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (avatarNotesUpdate.AgentData.SessionID != SessionId || - avatarNotesUpdate.AgentData.AgentID != AgentId) - break; - } - #endregion - - AvatarNotesUpdate handlerAvatarNotesUpdate = OnAvatarNotesUpdate; - if (handlerAvatarNotesUpdate != null) - handlerAvatarNotesUpdate(this, - avatarNotesUpdate.Data.TargetID, - Utils.BytesToString(avatarNotesUpdate.Data.Notes)); - break; - - case PacketType.AvatarInterestsUpdate: - AvatarInterestsUpdatePacket avatarInterestUpdate = - (AvatarInterestsUpdatePacket)Pack; - - #region Packet Session and User Check - if (m_checkPackets) - { - if (avatarInterestUpdate.AgentData.SessionID != SessionId || - avatarInterestUpdate.AgentData.AgentID != AgentId) - break; - } - #endregion - - AvatarInterestUpdate handlerAvatarInterestUpdate = OnAvatarInterestUpdate; - if (handlerAvatarInterestUpdate != null) - handlerAvatarInterestUpdate(this, - avatarInterestUpdate.PropertiesData.WantToMask, - Utils.BytesToString(avatarInterestUpdate.PropertiesData.WantToText), - avatarInterestUpdate.PropertiesData.SkillsMask, - Utils.BytesToString(avatarInterestUpdate.PropertiesData.SkillsText), - Utils.BytesToString(avatarInterestUpdate.PropertiesData.LanguagesText)); - break; - - case PacketType.GrantUserRights: - GrantUserRightsPacket GrantUserRights = - (GrantUserRightsPacket)Pack; - #region Packet Session and User Check - if (m_checkPackets) - { - if (GrantUserRights.AgentData.SessionID != SessionId || - GrantUserRights.AgentData.AgentID != AgentId) - break; - } - #endregion - GrantUserFriendRights GrantUserRightsHandler = OnGrantUserRights; - if (GrantUserRightsHandler != null) - GrantUserRightsHandler(this, - GrantUserRights.AgentData.AgentID, - GrantUserRights.Rights[0].AgentRelated, - GrantUserRights.Rights[0].RelatedRights); - break; - - case PacketType.PlacesQuery: - PlacesQueryPacket placesQueryPacket = - (PlacesQueryPacket)Pack; - - PlacesQuery handlerPlacesQuery = OnPlacesQuery; - - if (handlerPlacesQuery != null) - handlerPlacesQuery(placesQueryPacket.AgentData.QueryID, - placesQueryPacket.TransactionData.TransactionID, - Utils.BytesToString( - placesQueryPacket.QueryData.QueryText), - placesQueryPacket.QueryData.QueryFlags, - (byte)placesQueryPacket.QueryData.Category, - Utils.BytesToString( - placesQueryPacket.QueryData.SimName), - this); - break; - */ - #endregion - default: - m_log.Warn("[CLIENT]: unhandled packet " + Pack); - break; + if (!ProcessPacketMethod(Pack)) + { + m_log.Warn("[CLIENT]: unhandled packet " + Pack); } PacketPool.Instance.ReturnPacket(Pack); - } private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket) -- cgit v1.1 From 842b68eeff7571d3c82415c65065bec3c95f34ea Mon Sep 17 00:00:00 2001 From: Melanie Date: Thu, 18 Feb 2010 04:19:33 +0000 Subject: Change handling of the SYSTEMIP constant to be more sane. This will now choose the first network interface IP address, or the loopback interface if no external interfaces are found. It will log the IP address used as [NETWORK]: Using x.x.x.x for SYSTEMIP. --- OpenSim/Region/Application/OpenSim.cs | 2 ++ 1 file changed, 2 insertions(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 96eceb0..05e283e 100755 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -190,6 +190,8 @@ namespace OpenSim PrintFileToConsole("startuplogo.txt"); + m_log.InfoFormat("[NETWORK]: Using {0} as SYSTEMIP", Util.GetLocalHost().ToString()); + // For now, start at the 'root' level by default if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it ChangeSelectedRegion("region", -- cgit v1.1 From 214b1351fbd7287a70e465a4dd83668b1d2c7044 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 19 Feb 2010 21:18:03 +0000 Subject: minor: Make FlotsamAssetCache default loglevel 0 to match that given in bin/config-include/FlotsamCache.ini.example --- OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 4 ++-- OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 0b90b55..2ca2657 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -11025,10 +11025,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// OpenMetaverse.packet public void ProcessInPacket(Packet Pack) { +// m_log.DebugFormat("[CLIENT]: Packet IN {0}", Pack); + if (!ProcessPacketMethod(Pack)) - { m_log.Warn("[CLIENT]: unhandled packet " + Pack); - } PacketPool.Instance.ReturnPacket(Pack); } diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index 9216e0b..967c0a1 100644 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs @@ -69,7 +69,7 @@ namespace Flotsam.RegionModules.AssetCache private readonly List m_InvalidChars = new List(); - private int m_LogLevel = 1; + private int m_LogLevel = 0; private ulong m_HitRateDisplay = 1; // How often to display hit statistics, given in requests private static ulong m_Requests; @@ -156,7 +156,7 @@ namespace Flotsam.RegionModules.AssetCache m_WaitOnInprogressTimeout = assetConfig.GetInt("WaitOnInprogressTimeout", 3000); #endif - m_LogLevel = assetConfig.GetInt("LogLevel", 1); + m_LogLevel = assetConfig.GetInt("LogLevel", 0); m_HitRateDisplay = (ulong)assetConfig.GetInt("HitRateDisplay", 1000); m_FileExpiration = TimeSpan.FromHours(assetConfig.GetDouble("FileCacheTimeout", m_DefaultFileExpiration)); -- cgit v1.1 From c767a7901cbdb1f2fe786f1a1632c09606af9c6c Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 19 Feb 2010 22:30:46 +0000 Subject: forestall bug reports about the Command error: System.EntryPointNotFoundException: CreateZStream save/load oar/iar issue by telling the user what the likely problem is --- .../Inventory/Archiver/InventoryArchiverModule.cs | 66 ++++++++++++++++++++-- .../World/Archiver/ArchiveReadRequest.cs | 14 ++++- .../Archiver/ArchiveWriteRequestPreparation.cs | 14 ++++- 3 files changed, 86 insertions(+), 8 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index ecd60bd..ac3e199 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs @@ -131,7 +131,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver { if (CheckPresence(userInfo.UserProfile.ID)) { - new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute(); + try + { + new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute(); + } + catch (EntryPointNotFoundException e) + { + m_log.ErrorFormat( + "[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream." + + "If you've manually installed Mono, have you appropriately updated zlib1g as well?"); + m_log.Error(e); + + return false; + } + return true; } else @@ -156,7 +169,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver { if (CheckPresence(userInfo.UserProfile.ID)) { - new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute(); + try + { + new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute(); + } + catch (EntryPointNotFoundException e) + { + m_log.ErrorFormat( + "[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream." + + "If you've manually installed Mono, have you appropriately updated zlib1g as well?"); + m_log.Error(e); + + return false; + } + return true; } else @@ -181,8 +207,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver { if (CheckPresence(userInfo.UserProfile.ID)) { - InventoryArchiveReadRequest request = - new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream); + InventoryArchiveReadRequest request; + + try + { + request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream); + } + catch (EntryPointNotFoundException e) + { + m_log.ErrorFormat( + "[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream." + + "If you've manually installed Mono, have you appropriately updated zlib1g as well?"); + m_log.Error(e); + + return false; + } + UpdateClientWithLoadedNodes(userInfo, request.Execute()); return true; @@ -209,8 +249,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver { if (CheckPresence(userInfo.UserProfile.ID)) { - InventoryArchiveReadRequest request = - new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath); + InventoryArchiveReadRequest request; + + try + { + request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath); + } + catch (EntryPointNotFoundException e) + { + m_log.ErrorFormat( + "[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream." + + "If you've manually installed Mono, have you appropriately updated zlib1g as well?"); + m_log.Error(e); + + return false; + } + UpdateClientWithLoadedNodes(userInfo, request.Execute()); return true; diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 8ed1913..ad58f40 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -73,7 +73,19 @@ namespace OpenSim.Region.CoreModules.World.Archiver public ArchiveReadRequest(Scene scene, string loadPath, bool merge, Guid requestId) { m_scene = scene; - m_loadStream = new GZipStream(GetStream(loadPath), CompressionMode.Decompress); + + try + { + m_loadStream = new GZipStream(GetStream(loadPath), CompressionMode.Decompress); + } + catch (EntryPointNotFoundException e) + { + m_log.ErrorFormat( + "[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream." + + "If you've manually installed Mono, have you appropriately updated zlib1g as well?"); + m_log.Error(e); + } + m_errorMessage = String.Empty; m_merge = merge; m_requestId = requestId; diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs index 71bfe57..b61b341 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs @@ -65,7 +65,19 @@ namespace OpenSim.Region.CoreModules.World.Archiver public ArchiveWriteRequestPreparation(Scene scene, string savePath, Guid requestId) { m_scene = scene; - m_saveStream = new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress); + + try + { + m_saveStream = new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress); + } + catch (EntryPointNotFoundException e) + { + m_log.ErrorFormat( + "[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream." + + "If you've manually installed Mono, have you appropriately updated zlib1g as well?"); + m_log.Error(e); + } + m_requestId = requestId; } -- cgit v1.1 From 8294fbd069aaec81121c8563cf29d89030066717 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 19 Feb 2010 22:31:53 +0000 Subject: minor: remove mono compiler warning --- OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs index 4069991..1a6cd6c 100644 --- a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs @@ -159,7 +159,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule avatar.Invulnerable = true; } } - catch (Exception ex) + catch (Exception) { } } -- cgit v1.1 From 68b494b2cc54cfdd8fa8a0736332046de3887d6f Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 19 Feb 2010 22:44:33 +0000 Subject: Apply http://opensimulator.org/mantis/view.php?id=4495 Adds IsChildAgent property to IAvatar in MRM. Thanks ziah --- .../OptionalModules/Scripting/Minimodule/Interfaces/IAvatar.cs | 3 +++ OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs | 5 +++++ 2 files changed, 8 insertions(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatar.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatar.cs index 03c1e95..3d49732 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatar.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatar.cs @@ -34,6 +34,9 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule { public interface IAvatar : IEntity { + + bool IsChildAgent { get; } + //// /// Array of worn attachments, empty but not null, if no attachments are worn /// diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs index 4427426..0786bd9 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs @@ -70,6 +70,11 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule set { GetSP().TeleportWithMomentum(value); } } + public bool IsChildAgent + { + get { return GetSP().IsChildAgent; } + } + #region IAvatar implementation public IAvatarAttachment[] Attachments { -- cgit v1.1 From d1f2fae3481ea502630eaf2c4d1cdb776b165c05 Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Sat, 20 Feb 2010 11:01:50 +0900 Subject: Formatting cleanup. --- .../Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs | 123 +++++++++------------ .../SvnSerialiser/SvnBackupModule.cs | 10 +- 2 files changed, 59 insertions(+), 74 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs index b04b076..35819a6 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs @@ -50,7 +50,6 @@ using OpenSim.Region.Framework.Scenes; using Caps = OpenSim.Framework.Capabilities.Caps; using System.Text.RegularExpressions; - namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice { public class FreeSwitchVoiceModule : IRegionModule, IVoiceModule @@ -76,7 +75,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice // SLVoice client will do a GET on this prefix private static string m_freeSwitchAPIPrefix; - // We need to return some information to SLVoice + // We need to return some information to SLVoice // figured those out via curl // http://vd1.vivox.com/api2/viv_get_prelogin.php // @@ -102,9 +101,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice private readonly Dictionary m_UUIDName = new Dictionary(); private Dictionary m_ParcelAddress = new Dictionary(); - + private Scene m_scene; - + private IConfig m_config; @@ -136,9 +135,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice m_freeSwitchServerUser = m_config.GetString("freeswitch_server_user", String.Empty); m_freeSwitchServerPass = m_config.GetString("freeswitch_server_pass", String.Empty); m_freeSwitchAPIPrefix = m_config.GetString("freeswitch_api_prefix", String.Empty); - + // XXX: get IP address of HTTP server. (This can be this OpenSim server or another, or could be a dedicated grid service or may live on the freeswitch server) - + string serviceIP = m_config.GetString("freeswitch_service_server", String.Empty); int servicePort = m_config.GetInt("freeswitch_service_port", 80); IPAddress serviceIPAddress = IPAddress.Parse(serviceIP); @@ -156,7 +155,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice // m_freeSwitchSubscribeRetry = m_config.GetInt("freeswitch_subscribe_retry", 120); m_freeSwitchUrlResetPassword = m_config.GetString("freeswitch_password_reset_url", String.Empty); m_freeSwitchContext = m_config.GetString("freeswitch_context", "default"); - + if (String.IsNullOrEmpty(m_freeSwitchServerUser) || String.IsNullOrEmpty(m_freeSwitchServerPass) || String.IsNullOrEmpty(m_freeSwitchRealm) || @@ -182,9 +181,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice { MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler); - + // RestStreamHandler h = new - // RestStreamHandler("GET", + // RestStreamHandler("GET", // String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler); // MainServer.Instance.AddStreamHandler(h); @@ -202,13 +201,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_buddy.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceBuddyHTTPHandler); } - - - - m_log.InfoFormat("[FreeSwitchVoice] using FreeSwitch server {0}", m_freeSwitchRealm); - + m_FreeSwitchDirectory = new FreeSwitchDirectory(); m_FreeSwitchDialplan = new FreeSwitchDialplan(); @@ -225,7 +220,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice } } - if (m_pluginEnabled) + if (m_pluginEnabled) { // we need to capture scene in an anonymous method // here as we need it later in the callbacks @@ -233,8 +228,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice { OnRegisterCaps(scene, agentID, caps); }; - - try { @@ -254,16 +247,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice m_log.Error("[FreeSwitchVoice]: Certificate validation handler change not supported. You may get ssl certificate validation errors teleporting from your region to some SSL regions."); } } - } } - + public void PostInitialise() { if (m_pluginEnabled) { m_log.Info("[FreeSwitchVoice] registering IVoiceModule with the scene"); - + // register the voice interface for this module, so the script engine can call us m_scene.RegisterModuleInterface(this); } @@ -282,15 +274,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice { get { return true; } } - + // // implementation of IVoiceModule, called by osSetParcelSIPAddress script function // public void setLandSIPAddress(string SIPAddress,UUID GlobalID) { - m_log.DebugFormat("[FreeSwitchVoice]: setLandSIPAddress parcel id {0}: setting sip address {1}", + m_log.DebugFormat("[FreeSwitchVoice]: setLandSIPAddress parcel id {0}: setting sip address {1}", GlobalID, SIPAddress); - + lock (m_ParcelAddress) { if (m_ParcelAddress.ContainsKey(GlobalID.ToString())) @@ -303,18 +295,18 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice } } } - + // // OnRegisterCaps is invoked via the scene.EventManager // everytime OpenSim hands out capabilities to a client // (login, region crossing). We contribute two capabilities to // the set of capabilities handed back to the client: // ProvisionVoiceAccountRequest and ParcelVoiceInfoRequest. - // + // // ProvisionVoiceAccountRequest allows the client to obtain // the voice account credentials for the avatar it is // controlling (e.g., user name, password, etc). - // + // // ParcelVoiceInfoRequest is invoked whenever the client // changes from one region or parcel to another. // @@ -371,7 +363,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice { System.Threading.Thread.Sleep(2000); avatar = scene.GetScenePresence(agentID); - + if (avatar == null) return "undef"; } @@ -407,8 +399,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice // new LLSDVoiceAccountResponse(agentname, password, m_freeSwitchRealm, "http://etsvc02.hursley.ibm.com/api"); LLSDVoiceAccountResponse voiceAccountResponse = new LLSDVoiceAccountResponse(agentname, password, m_freeSwitchRealm, - String.Format("http://{0}:{1}{2}/", m_openSimWellKnownHTTPAddress, - m_freeSwitchServicePort, m_freeSwitchAPIPrefix)); + String.Format("http://{0}:{1}{2}/", m_openSimWellKnownHTTPAddress, + m_freeSwitchServicePort, m_freeSwitchAPIPrefix)); string r = LLSDHelpers.SerialiseLLSDReply(voiceAccountResponse); @@ -442,7 +434,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice string avatarName = avatar.Name; // - check whether we have a region channel in our cache - // - if not: + // - if not: // create it and cache it // - send it to the client // - send channel_uri: as "sip:regionID@m_sipDomain" @@ -451,12 +443,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice LLSDParcelVoiceInfoResponse parcelVoiceInfo; string channelUri; - if (null == scene.LandChannel) + if (null == scene.LandChannel) throw new Exception(String.Format("region \"{0}\": avatar \"{1}\": land data not yet available", scene.RegionInfo.RegionName, avatarName)); - - // get channel_uri: check first whether estate // settings allow voice, then whether parcel allows // voice, if all do retrieve or obtain the parcel @@ -493,22 +483,21 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice parcelVoiceInfo = new LLSDParcelVoiceInfoResponse(scene.RegionInfo.RegionName, land.LocalID, creds); string r = LLSDHelpers.SerialiseLLSDReply(parcelVoiceInfo); - m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": {4}", + m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": {4}", scene.RegionInfo.RegionName, land.Name, land.LocalID, avatarName, r); return r; } catch (Exception e) { - m_log.ErrorFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": avatar \"{1}\": {2}, retry later", + m_log.ErrorFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": avatar \"{1}\": {2}, retry later", scene.RegionInfo.RegionName, avatarName, e.Message); - m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": avatar \"{1}\": {2} failed", + m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": avatar \"{1}\": {2} failed", scene.RegionInfo.RegionName, avatarName, e.ToString()); return "undef"; } } - /// /// Callback for a client request for ChatSessionRequest /// @@ -550,7 +539,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice string fwdresponsestr = ""; int fwdresponsecode = 200; string fwdresponsecontenttype = "text/xml"; - HttpWebRequest forwardreq = (HttpWebRequest)WebRequest.Create(forwardaddress); forwardreq.Method = method; @@ -577,7 +565,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice response["content_type"] = fwdresponsecontenttype; response["str_response_string"] = fwdresponsestr; response["int_response_code"] = fwdresponsecode; - + return response; } @@ -585,11 +573,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice public Hashtable FreeSwitchSLVoiceGetPreloginHTTPHandler(Hashtable request) { m_log.Debug("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler called"); - + Hashtable response = new Hashtable(); response["content_type"] = "text/xml"; response["keepalive"] = false; - + response["str_response_string"] = String.Format( "\r\n" + "\r\n"+ @@ -607,9 +595,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice "", m_freeSwitchRealm, m_freeSwitchSIPProxy, m_freeSwitchAttemptUseSTUN, m_freeSwitchEchoServer, m_freeSwitchEchoPort, - m_freeSwitchDefaultWellKnownIP, m_freeSwitchDefaultTimeout, + m_freeSwitchDefaultWellKnownIP, m_freeSwitchDefaultTimeout, m_freeSwitchUrlResetPassword, ""); - + response["int_response_code"] = 200; m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler return {0}",response["str_response_string"]); @@ -624,7 +612,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice response["content-type"] = "text/xml"; Hashtable requestBody = parseRequestBody((string)request["body"]); - + if (!requestBody.ContainsKey("auth_token")) return response; @@ -632,7 +620,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice //string[] auth_tokenvals = auth_token.Split(':'); //string username = auth_tokenvals[0]; int strcount = 0; - + string[] ids = new string[strcount]; int iter = -1; @@ -648,7 +636,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice } StringBuilder resp = new StringBuilder(); resp.Append(""); - + resp.Append(string.Format(@" OK lib_session @@ -678,7 +666,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice ", ids[i],i,m_freeSwitchRealm,dt)); } - + resp.Append(""); response["str_response_string"] = resp.ToString(); @@ -694,7 +682,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice string requestbody = (string)request["body"]; string uri = (string)request["uri"]; string contenttype = (string)request["content-type"]; - + Hashtable requestBody = parseRequestBody((string)request["body"]); //string pwd = (string) requestBody["pwd"]; @@ -712,7 +700,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice pos++; if (s == userid) break; - } } } @@ -735,7 +722,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice ", userid, pos, avatarName); - + response["int_response_code"] = 200; return response; /* @@ -752,13 +739,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice public Hashtable FreeSwitchConfigHTTPHandler(Hashtable request) { m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchConfigHTTPHandler called with {0}", (string)request["body"]); - + Hashtable response = new Hashtable(); response["str_response_string"] = string.Empty; // all the params come as NVPs in the request body Hashtable requestBody = parseRequestBody((string) request["body"]); - // is this a dialplan or directory request + // is this a dialplan or directory request string section = (string) requestBody["section"]; if (section == "directory") @@ -767,40 +754,39 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice response = m_FreeSwitchDialplan.HandleDialplanRequest(m_freeSwitchContext, m_freeSwitchRealm, requestBody); else m_log.WarnFormat("[FreeSwitchVoice]: section was {0}", section); - - // XXX: re-generate dialplan: + + // XXX: re-generate dialplan: // - conf == region UUID // - conf number = region port // -> TODO Initialise(): keep track of regions via events - // re-generate accounts for all avatars + // re-generate accounts for all avatars // -> TODO Initialise(): keep track of avatars via events Regex normalizeEndLines = new Regex(@"\r\n", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.Multiline); m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchConfigHTTPHandler return {0}",normalizeEndLines.Replace(((string)response["str_response_string"]), "")); return response; } - + public Hashtable parseRequestBody(string body) { Hashtable bodyParams = new Hashtable(); // split string string [] nvps = body.Split(new Char [] {'&'}); - foreach (string s in nvps) { - + foreach (string s in nvps) + { if (s.Trim() != "") { string [] nvp = s.Split(new Char [] {'='}); bodyParams.Add(HttpUtility.UrlDecode(nvp[0]), HttpUtility.UrlDecode(nvp[1])); } } - + return bodyParams; } private string ChannelUri(Scene scene, LandData land) { - string channelUri = null; string landUUID; @@ -808,12 +794,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice // Create parcel voice channel. If no parcel exists, then the voice channel ID is the same // as the directory ID. Otherwise, it reflects the parcel's ID. - + lock (m_ParcelAddress) { if (m_ParcelAddress.ContainsKey(land.GlobalID.ToString())) { - m_log.DebugFormat("[FreeSwitchVoice]: parcel id {0}: using sip address {1}", + m_log.DebugFormat("[FreeSwitchVoice]: parcel id {0}: using sip address {1}", land.GlobalID, m_ParcelAddress[land.GlobalID.ToString()]); return m_ParcelAddress[land.GlobalID.ToString()]; } @@ -823,22 +809,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice { landName = String.Format("{0}:{1}", scene.RegionInfo.RegionName, land.Name); landUUID = land.GlobalID.ToString(); - m_log.DebugFormat("[FreeSwitchVoice]: Region:Parcel \"{0}\": parcel id {1}: using channel name {2}", + m_log.DebugFormat("[FreeSwitchVoice]: Region:Parcel \"{0}\": parcel id {1}: using channel name {2}", landName, land.LocalID, landUUID); } else { landName = String.Format("{0}:{1}", scene.RegionInfo.RegionName, scene.RegionInfo.RegionName); landUUID = scene.RegionInfo.RegionID.ToString(); - m_log.DebugFormat("[FreeSwitchVoice]: Region:Parcel \"{0}\": parcel id {1}: using channel name {2}", + m_log.DebugFormat("[FreeSwitchVoice]: Region:Parcel \"{0}\": parcel id {1}: using channel name {2}", landName, land.LocalID, landUUID); } System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); - + // slvoice handles the sip address differently if it begins with confctl, hiding it from the user in the friends list. however it also disables // the personal speech indicators as well unless some siren14-3d codec magic happens. we dont have siren143d so we'll settle for the personal speech indicator. channelUri = String.Format("sip:conf-{0}@{1}", "x" + Convert.ToBase64String(encoding.GetBytes(landUUID)), m_freeSwitchRealm); - + lock (m_ParcelAddress) { if (!m_ParcelAddress.ContainsKey(land.GlobalID.ToString())) @@ -849,14 +835,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice return channelUri; } - + private static bool CustomCertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error) { - return true; - } } + public class MonoCert : ICertificatePolicy { #region ICertificatePolicy Members diff --git a/OpenSim/Region/OptionalModules/SvnSerialiser/SvnBackupModule.cs b/OpenSim/Region/OptionalModules/SvnSerialiser/SvnBackupModule.cs index 3490a8b..ccdea14 100644 --- a/OpenSim/Region/OptionalModules/SvnSerialiser/SvnBackupModule.cs +++ b/OpenSim/Region/OptionalModules/SvnSerialiser/SvnBackupModule.cs @@ -121,19 +121,19 @@ namespace OpenSim.Region.Modules.SvnSerialiser { serialiser.LoadPrimsFromXml2( scene, - m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID + m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID + Slash.DirectorySeparatorChar + "objects.xml"); - + scene.RequestModuleInterface().LoadFromFile( - m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID + m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID + Slash.DirectorySeparatorChar + "heightmap.r32"); - + m_log.Info("[SVNBACKUP]: Region load successful (" + scene.RegionInfo.RegionName + ")."); } else { m_log.ErrorFormat( - "[SVNBACKUP]: Region load of {0} failed - no serialisation module available", + "[SVNBACKUP]: Region load of {0} failed - no serialisation module available", scene.RegionInfo.RegionName); } } -- cgit v1.1 From 2dea162073dbc8622d47d95f5f0b1ca2c619a22a Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Mon, 22 Feb 2010 12:25:59 +0900 Subject: Formatting cleanup. --- .../Avatar/Inventory/Archiver/InventoryArchiverModule.cs | 8 ++++---- OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index ac3e199..a898992 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs @@ -134,7 +134,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver try { new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute(); - } + } catch (EntryPointNotFoundException e) { m_log.ErrorFormat( @@ -172,7 +172,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver try { new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute(); - } + } catch (EntryPointNotFoundException e) { m_log.ErrorFormat( @@ -212,7 +212,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver try { request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream); - } + } catch (EntryPointNotFoundException e) { m_log.ErrorFormat( @@ -254,7 +254,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver try { request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath); - } + } catch (EntryPointNotFoundException e) { m_log.ErrorFormat( diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 6357192..c5a6171 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -2351,7 +2351,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// /// - /// The object group of the newly delinked prim. + /// The object group of the newly delinked prim. public SceneObjectGroup DelinkFromGroup(SceneObjectPart linkPart, bool sendEvents) { // m_log.DebugFormat( -- cgit v1.1 From 300f4c58a646daa233a370e46f257bf65453aea8 Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Mon, 22 Feb 2010 13:16:40 +0900 Subject: Separate PhysX classes into separate files. --- .../Region/Physics/PhysXPlugin/PhysXCharacter.cs | 353 ++++++++++ OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs | 771 +-------------------- OpenSim/Region/Physics/PhysXPlugin/PhysXPrim.cs | 345 +++++++++ OpenSim/Region/Physics/PhysXPlugin/PhysXScene.cs | 183 +++++ 4 files changed, 882 insertions(+), 770 deletions(-) create mode 100644 OpenSim/Region/Physics/PhysXPlugin/PhysXCharacter.cs create mode 100644 OpenSim/Region/Physics/PhysXPlugin/PhysXPrim.cs create mode 100644 OpenSim/Region/Physics/PhysXPlugin/PhysXScene.cs (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXCharacter.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXCharacter.cs new file mode 100644 index 0000000..92261cd --- /dev/null +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXCharacter.cs @@ -0,0 +1,353 @@ +/* + * 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 OpenSimulator 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 System.Collections.Generic; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Region.Physics.Manager; +using PhysXWrapper; +using Quaternion=OpenMetaverse.Quaternion; +using System.Reflection; +using log4net; +using OpenMetaverse; + +namespace OpenSim.Region.Physics.PhysXPlugin +{ + public class PhysXCharacter : PhysicsActor + { + private Vector3 _position; + private Vector3 _velocity; + private Vector3 m_rotationalVelocity = Vector3.Zero; + private Vector3 _acceleration; + private NxCharacter _character; + private bool flying; + private bool iscolliding = false; + private float gravityAccel; + + public PhysXCharacter(NxCharacter character) + { + _character = character; + } + + public override int PhysicsActorType + { + get { return (int) ActorTypes.Agent; } + set { return; } + } + + public override bool SetAlwaysRun + { + get { return false; } + set { return; } + } + + public override uint LocalID + { + set { return; } + } + + public override bool Grabbed + { + set { return; } + } + + public override bool Selected + { + set { return; } + } + + public override float Buoyancy + { + get { return 0f; } + set { return; } + } + + public override bool FloatOnWater + { + set { return; } + } + + public override bool IsPhysical + { + get { return false; } + set { return; } + } + + public override bool ThrottleUpdates + { + get { return false; } + set { return; } + } + + public override bool Flying + { + get { return flying; } + set { flying = value; } + } + + public override bool IsColliding + { + get { return iscolliding; } + set { iscolliding = value; } + } + + public override bool CollidingGround + { + get { return false; } + set { return; } + } + + public override bool CollidingObj + { + get { return false; } + set { return; } + } + + public override Vector3 RotationalVelocity + { + get { return m_rotationalVelocity; } + set { m_rotationalVelocity = value; } + } + + public override bool Stopped + { + get { return false; } + } + + public override Vector3 Position + { + get { return _position; } + set + { + _position = value; + Vec3 ps = new Vec3(); + ps.X = value.X; + ps.Y = value.Y; + ps.Z = value.Z; + _character.Position = ps; + } + } + + public override Vector3 Size + { + get { return Vector3.Zero; } + set { } + } + + public override float Mass + { + get { return 0f; } + } + + public override Vector3 Force + { + get { return Vector3.Zero; } + set { return; } + } + + public override int VehicleType + { + get { return 0; } + set { return; } + } + + public override void VehicleFloatParam(int param, float value) + { + } + + public override void VehicleVectorParam(int param, Vector3 value) + { + } + + public override void VehicleRotationParam(int param, Quaternion rotation) + { + } + + public override void VehicleFlags(int param, bool remove) + { + } + + public override void SetVolumeDetect(int param) + { + } + + public override Vector3 CenterOfMass + { + get { return Vector3.Zero; } + } + + public override Vector3 GeometricCenter + { + get { return Vector3.Zero; } + } + + public override Vector3 Velocity + { + get { return _velocity; } + set { _velocity = value; } + } + + public override float CollisionScore + { + get { return 0f; } + set { } + } + + public override bool Kinematic + { + get { return false; } + set { } + } + + public override Quaternion Orientation + { + get { return Quaternion.Identity; } + set { } + } + + public override Vector3 Acceleration + { + get { return _acceleration; } + } + + public void SetAcceleration(Vector3 accel) + { + _acceleration = accel; + } + + public override void AddForce(Vector3 force, bool pushforce) + { + } + + public override Vector3 Torque + { + get { return Vector3.Zero; } + set { return; } + } + + public override void AddAngularForce(Vector3 force, bool pushforce) + { + } + + public override void link(PhysicsActor obj) + { + } + + public override void delink() + { + } + + public override void LockAngularMotion(Vector3 axis) + { + } + + public override void SetMomentum(Vector3 momentum) + { + } + + public void Move(float timeStep) + { + Vec3 vec = new Vec3(); + vec.X = _velocity.X*timeStep; + vec.Y = _velocity.Y*timeStep; + if (flying) + { + vec.Z = (_velocity.Z)*timeStep; + } + else + { + gravityAccel += -9.8f; + vec.Z = (gravityAccel + _velocity.Z)*timeStep; + } + int res = _character.Move(vec); + if (res == 1) + { + gravityAccel = 0; + } + } + + public override PrimitiveBaseShape Shape + { + set { return; } + } + + public void UpdatePosition() + { + Vec3 vec = _character.Position; + _position.X = vec.X; + _position.Y = vec.Y; + _position.Z = vec.Z; + } + + public override void CrossingFailure() + { + } + + public override Vector3 PIDTarget { set { return; } } + public override bool PIDActive { set { return; } } + public override float PIDTau { set { return; } } + + public override float PIDHoverHeight { set { return; } } + public override bool PIDHoverActive { set { return; } } + public override PIDHoverType PIDHoverType { set { return; } } + public override float PIDHoverTau { set { return; } } + + public override Quaternion APIDTarget + { + set { return; } + } + + public override bool APIDActive + { + set { return; } + } + + public override float APIDStrength + { + set { return; } + } + + public override float APIDDamping + { + set { return; } + } + + public override void SubscribeEvents(int ms) + { + + } + public override void UnSubscribeEvents() + { + + } + public override bool SubscribedEvents() + { + return false; + } + } +} diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs index dd2c686..ca7a4f8 100644 --- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs @@ -1,4 +1,4 @@ -/*/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -73,773 +73,4 @@ namespace OpenSim.Region.Physics.PhysXPlugin { } } - - public class PhysXScene : PhysicsScene - { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private List _characters = new List(); - private List _prims = new List(); - private float[] _heightMap = null; - private NxPhysicsSDK mySdk; - private NxScene scene; - - // protected internal string sceneIdentifier; - public PhysXScene(string _sceneIdentifier) - { - //sceneIdentifier = _sceneIdentifier; - - mySdk = NxPhysicsSDK.CreateSDK(); - m_log.Info("Sdk created - now creating scene"); - scene = mySdk.CreateScene(); - } - - public override void Initialise(IMesher meshmerizer, IConfigSource config) - { - // Does nothing right now - } - public override void Dispose() - { - - } - - public override void SetWaterLevel(float baseheight) - { - - } - - public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) - { - Vec3 pos = new Vec3(); - pos.X = position.X; - pos.Y = position.Y; - pos.Z = position.Z; - PhysXCharacter act = new PhysXCharacter(scene.AddCharacter(pos)); - act.Flying = isFlying; - act.Position = position; - _characters.Add(act); - return act; - } - - public override void RemovePrim(PhysicsActor prim) - { - } - - public override void RemoveAvatar(PhysicsActor actor) - { - } - - private PhysicsActor AddPrim(Vector3 position, Vector3 size, Quaternion rotation) - { - Vec3 pos = new Vec3(); - pos.X = position.X; - pos.Y = position.Y; - pos.Z = position.Z; - Vec3 siz = new Vec3(); - siz.X = size.X; - siz.Y = size.Y; - siz.Z = size.Z; - PhysXPrim act = new PhysXPrim(scene.AddNewBox(pos, siz)); - _prims.Add(act); - return act; - } - - public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, - Vector3 size, Quaternion rotation) //To be removed - { - return AddPrimShape(primName, pbs, position, size, rotation, false); - } - - public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, - Vector3 size, Quaternion rotation, bool isPhysical) - { - return AddPrim(position, size, rotation); - } - - public override void AddPhysicsActorTaint(PhysicsActor prim) - { - } - - public override float Simulate(float timeStep) - { - float fps = 0f; - try - { - foreach (PhysXCharacter actor in _characters) - { - actor.Move(timeStep); - } - scene.Simulate(timeStep); - scene.FetchResults(); - scene.UpdateControllers(); - - foreach (PhysXCharacter actor in _characters) - { - actor.UpdatePosition(); - } - } - catch (Exception e) - { - m_log.Error(e.Message); - } - return fps; - } - - public override void GetResults() - { - } - - public override bool IsThreaded - { - get { return (false); // for now we won't be multithreaded - } - } - - public override void SetTerrain(float[] heightMap) - { - if (_heightMap != null) - { - m_log.Debug("PhysX - deleting old terrain"); - scene.DeleteTerrain(); - } - _heightMap = heightMap; - scene.AddTerrain(heightMap); - } - - public override void DeleteTerrain() - { - scene.DeleteTerrain(); - } - - public override Dictionary GetTopColliders() - { - Dictionary returncolliders = new Dictionary(); - return returncolliders; - } - - } - - public class PhysXCharacter : PhysicsActor - { - private Vector3 _position; - private Vector3 _velocity; - private Vector3 m_rotationalVelocity = Vector3.Zero; - private Vector3 _acceleration; - private NxCharacter _character; - private bool flying; - private bool iscolliding = false; - private float gravityAccel; - - public PhysXCharacter(NxCharacter character) - { - _character = character; - } - - public override int PhysicsActorType - { - get { return (int) ActorTypes.Agent; } - set { return; } - } - - public override bool SetAlwaysRun - { - get { return false; } - set { return; } - } - - public override uint LocalID - { - set { return; } - } - - public override bool Grabbed - { - set { return; } - } - - public override bool Selected - { - set { return; } - } - - public override float Buoyancy - { - get { return 0f; } - set { return; } - } - - public override bool FloatOnWater - { - set { return; } - } - - public override bool IsPhysical - { - get { return false; } - set { return; } - } - - public override bool ThrottleUpdates - { - get { return false; } - set { return; } - } - - public override bool Flying - { - get { return flying; } - set { flying = value; } - } - - public override bool IsColliding - { - get { return iscolliding; } - set { iscolliding = value; } - } - - public override bool CollidingGround - { - get { return false; } - set { return; } - } - - public override bool CollidingObj - { - get { return false; } - set { return; } - } - - public override Vector3 RotationalVelocity - { - get { return m_rotationalVelocity; } - set { m_rotationalVelocity = value; } - } - - public override bool Stopped - { - get { return false; } - } - - public override Vector3 Position - { - get { return _position; } - set - { - _position = value; - Vec3 ps = new Vec3(); - ps.X = value.X; - ps.Y = value.Y; - ps.Z = value.Z; - _character.Position = ps; - } - } - - public override Vector3 Size - { - get { return Vector3.Zero; } - set { } - } - - public override float Mass - { - get { return 0f; } - } - - public override Vector3 Force - { - get { return Vector3.Zero; } - set { return; } - } - - public override int VehicleType - { - get { return 0; } - set { return; } - } - - public override void VehicleFloatParam(int param, float value) - { - - } - - public override void VehicleVectorParam(int param, Vector3 value) - { - - } - - public override void VehicleRotationParam(int param, Quaternion rotation) - { - - } - - public override void VehicleFlags(int param, bool remove) { } - - public override void SetVolumeDetect(int param) - { - - } - - - public override Vector3 CenterOfMass - { - get { return Vector3.Zero; } - } - - public override Vector3 GeometricCenter - { - get { return Vector3.Zero; } - } - - public override Vector3 Velocity - { - get { return _velocity; } - set { _velocity = value; } - } - - public override float CollisionScore - { - get { return 0f; } - set { } - } - - public override bool Kinematic - { - get { return false; } - set { } - } - - public override Quaternion Orientation - { - get { return Quaternion.Identity; } - set { } - } - - public override Vector3 Acceleration - { - get { return _acceleration; } - } - - public void SetAcceleration(Vector3 accel) - { - _acceleration = accel; - } - - public override void AddForce(Vector3 force, bool pushforce) - { - } - public override Vector3 Torque - { - get { return Vector3.Zero; } - set { return; } - } - public override void AddAngularForce(Vector3 force, bool pushforce) - { - } - - public override void link(PhysicsActor obj) - { - - } - - public override void delink() - { - - } - - public override void LockAngularMotion(Vector3 axis) - { - - } - - public override void SetMomentum(Vector3 momentum) - { - } - - public void Move(float timeStep) - { - Vec3 vec = new Vec3(); - vec.X = _velocity.X*timeStep; - vec.Y = _velocity.Y*timeStep; - if (flying) - { - vec.Z = (_velocity.Z)*timeStep; - } - else - { - gravityAccel += -9.8f; - vec.Z = (gravityAccel + _velocity.Z)*timeStep; - } - int res = _character.Move(vec); - if (res == 1) - { - gravityAccel = 0; - } - } - - public override PrimitiveBaseShape Shape - { - set { return; } - } - - public void UpdatePosition() - { - Vec3 vec = _character.Position; - _position.X = vec.X; - _position.Y = vec.Y; - _position.Z = vec.Z; - } - public override void CrossingFailure() - { - - } - - public override Vector3 PIDTarget { set { return; } } - public override bool PIDActive { set { return; } } - public override float PIDTau { set { return; } } - - public override float PIDHoverHeight { set { return; } } - public override bool PIDHoverActive { set { return; } } - public override PIDHoverType PIDHoverType { set { return; } } - public override float PIDHoverTau { set { return; } } - - public override Quaternion APIDTarget - { - set { return; } - } - - public override bool APIDActive - { - set { return; } - } - - public override float APIDStrength - { - set { return; } - } - - public override float APIDDamping - { - set { return; } - } - - - - public override void SubscribeEvents(int ms) - { - - } - public override void UnSubscribeEvents() - { - - } - public override bool SubscribedEvents() - { - return false; - } - } - - - public class PhysXPrim : PhysicsActor - { - private Vector3 _velocity; - private Vector3 _acceleration; - private Vector3 m_rotationalVelocity; - private NxActor _prim; - - public PhysXPrim(NxActor prim) - { - _velocity = Vector3.Zero; - _acceleration = Vector3.Zero; - _prim = prim; - } - - public override int PhysicsActorType - { - get { return (int) ActorTypes.Prim; } - set { return; } - } - - public override bool IsPhysical - { - get { return false; } - set { return; } - } - - public override bool SetAlwaysRun - { - get { return false; } - set { return; } - } - - public override uint LocalID - { - set { return; } - } - - public override bool Grabbed - { - set { return; } - } - - public override bool Selected - { - set { return; } - } - - public override float Buoyancy - { - get { return 0f; } - set { return; } - } - - public override bool FloatOnWater - { - set { return; } - } - - public override bool ThrottleUpdates - { - get { return false; } - set { return; } - } - - public override Vector3 RotationalVelocity - { - get { return m_rotationalVelocity; } - set { m_rotationalVelocity = value; } - } - - public override bool Flying - { - get { return false; //no flying prims for you - } - set { } - } - - public override bool IsColliding - { - get { return false; } - set { } - } - - public override bool CollidingGround - { - get { return false; } - set { return; } - } - - public override bool CollidingObj - { - get { return false; } - set { return; } - } - - public override bool Stopped - { - get { return false; } - } - - public override Vector3 Position - { - get - { - Vector3 pos = Vector3.Zero; - Vec3 vec = _prim.Position; - pos.X = vec.X; - pos.Y = vec.Y; - pos.Z = vec.Z; - return pos; - } - set - { - Vector3 vec = value; - Vec3 pos = new Vec3(); - pos.X = vec.X; - pos.Y = vec.Y; - pos.Z = vec.Z; - _prim.Position = pos; - } - } - - public override PrimitiveBaseShape Shape - { - set { return; } - } - - public override Vector3 Velocity - { - get { return _velocity; } - set { _velocity = value; } - } - - public override Vector3 Torque - { - get { return Vector3.Zero; } - set { return; } - } - - public override float CollisionScore - { - get { return 0f; } - set { } - } - - public override bool Kinematic - { - get { return _prim.Kinematic; } - set { _prim.Kinematic = value; } - } - - public override Quaternion Orientation - { - get - { - Quaternion res; - PhysXWrapper.Quaternion quat = _prim.GetOrientation(); - res.W = quat.W; - res.X = quat.X; - res.Y = quat.Y; - res.Z = quat.Z; - return res; - } - set { } - } - - public override Vector3 Acceleration - { - get { return _acceleration; } - } - - public void SetAcceleration(Vector3 accel) - { - _acceleration = accel; - } - - public override void AddForce(Vector3 force, bool pushforce) - { - } - - public override void AddAngularForce(Vector3 force, bool pushforce) - { - } - - public override void SetMomentum(Vector3 momentum) - { - } - - public override Vector3 Size - { - get { return Vector3.Zero; } - set { } - } - - public override void link(PhysicsActor obj) - { - } - - public override void delink() - { - } - - public override void LockAngularMotion(Vector3 axis) - { - - } - - public override float Mass - { - get { return 0f; } - } - - public override Vector3 Force - { - get { return Vector3.Zero; } - set { return; } - } - - public override int VehicleType - { - get { return 0; } - set { return; } - } - - public override void VehicleFloatParam(int param, float value) - { - - } - - public override void VehicleVectorParam(int param, Vector3 value) - { - - } - - public override void VehicleRotationParam(int param, Quaternion rotation) - { - - } - - public override void VehicleFlags(int param, bool remove) { } - - public override void SetVolumeDetect(int param) - { - - } - - public override Vector3 CenterOfMass - { - get { return Vector3.Zero; } - } - - public override Vector3 GeometricCenter - { - get { return Vector3.Zero; } - } - - public override void CrossingFailure() - { - } - - public override Vector3 PIDTarget { set { return; } } - public override bool PIDActive { set { return; } } - public override float PIDTau { set { return; } } - - public override float PIDHoverHeight { set { return; } } - public override bool PIDHoverActive { set { return; } } - public override PIDHoverType PIDHoverType { set { return; } } - public override float PIDHoverTau { set { return; } } - - public override Quaternion APIDTarget - { - set { return; } - } - - public override bool APIDActive - { - set { return; } - } - - public override float APIDStrength - { - set { return; } - } - - public override float APIDDamping - { - set { return; } - } - - - - public override void SubscribeEvents(int ms) - { - - } - public override void UnSubscribeEvents() - { - - } - public override bool SubscribedEvents() - { - return false; - } - } } diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPrim.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPrim.cs new file mode 100644 index 0000000..c0e24fd --- /dev/null +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPrim.cs @@ -0,0 +1,345 @@ +/* + * 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 OpenSimulator 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 System.Collections.Generic; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Region.Physics.Manager; +using PhysXWrapper; +using Quaternion=OpenMetaverse.Quaternion; +using System.Reflection; +using log4net; +using OpenMetaverse; + +namespace OpenSim.Region.Physics.PhysXPlugin +{ + public class PhysXPrim : PhysicsActor + { + private Vector3 _velocity; + private Vector3 _acceleration; + private Vector3 m_rotationalVelocity; + private NxActor _prim; + + public PhysXPrim(NxActor prim) + { + _velocity = Vector3.Zero; + _acceleration = Vector3.Zero; + _prim = prim; + } + + public override int PhysicsActorType + { + get { return (int) ActorTypes.Prim; } + set { return; } + } + + public override bool IsPhysical + { + get { return false; } + set { return; } + } + + public override bool SetAlwaysRun + { + get { return false; } + set { return; } + } + + public override uint LocalID + { + set { return; } + } + + public override bool Grabbed + { + set { return; } + } + + public override bool Selected + { + set { return; } + } + + public override float Buoyancy + { + get { return 0f; } + set { return; } + } + + public override bool FloatOnWater + { + set { return; } + } + + public override bool ThrottleUpdates + { + get { return false; } + set { return; } + } + + public override Vector3 RotationalVelocity + { + get { return m_rotationalVelocity; } + set { m_rotationalVelocity = value; } + } + + public override bool Flying + { + get { return false; //no flying prims for you + } + set { } + } + + public override bool IsColliding + { + get { return false; } + set { } + } + + public override bool CollidingGround + { + get { return false; } + set { return; } + } + + public override bool CollidingObj + { + get { return false; } + set { return; } + } + + public override bool Stopped + { + get { return false; } + } + + public override Vector3 Position + { + get + { + Vector3 pos = Vector3.Zero; + Vec3 vec = _prim.Position; + pos.X = vec.X; + pos.Y = vec.Y; + pos.Z = vec.Z; + return pos; + } + set + { + Vector3 vec = value; + Vec3 pos = new Vec3(); + pos.X = vec.X; + pos.Y = vec.Y; + pos.Z = vec.Z; + _prim.Position = pos; + } + } + + public override PrimitiveBaseShape Shape + { + set { return; } + } + + public override Vector3 Velocity + { + get { return _velocity; } + set { _velocity = value; } + } + + public override Vector3 Torque + { + get { return Vector3.Zero; } + set { return; } + } + + public override float CollisionScore + { + get { return 0f; } + set { } + } + + public override bool Kinematic + { + get { return _prim.Kinematic; } + set { _prim.Kinematic = value; } + } + + public override Quaternion Orientation + { + get + { + Quaternion res; + PhysXWrapper.Quaternion quat = _prim.GetOrientation(); + res.W = quat.W; + res.X = quat.X; + res.Y = quat.Y; + res.Z = quat.Z; + return res; + } + set { } + } + + public override Vector3 Acceleration + { + get { return _acceleration; } + } + + public void SetAcceleration(Vector3 accel) + { + _acceleration = accel; + } + + public override void AddForce(Vector3 force, bool pushforce) + { + } + + public override void AddAngularForce(Vector3 force, bool pushforce) + { + } + + public override void SetMomentum(Vector3 momentum) + { + } + + public override Vector3 Size + { + get { return Vector3.Zero; } + set { } + } + + public override void link(PhysicsActor obj) + { + } + + public override void delink() + { + } + + public override void LockAngularMotion(Vector3 axis) + { + + } + + public override float Mass + { + get { return 0f; } + } + + public override Vector3 Force + { + get { return Vector3.Zero; } + set { return; } + } + + public override int VehicleType + { + get { return 0; } + set { return; } + } + + public override void VehicleFloatParam(int param, float value) + { + + } + + public override void VehicleVectorParam(int param, Vector3 value) + { + + } + + public override void VehicleRotationParam(int param, Quaternion rotation) + { + + } + + public override void VehicleFlags(int param, bool remove) { } + + public override void SetVolumeDetect(int param) + { + + } + + public override Vector3 CenterOfMass + { + get { return Vector3.Zero; } + } + + public override Vector3 GeometricCenter + { + get { return Vector3.Zero; } + } + + public override void CrossingFailure() + { + } + + public override Vector3 PIDTarget { set { return; } } + public override bool PIDActive { set { return; } } + public override float PIDTau { set { return; } } + + public override float PIDHoverHeight { set { return; } } + public override bool PIDHoverActive { set { return; } } + public override PIDHoverType PIDHoverType { set { return; } } + public override float PIDHoverTau { set { return; } } + + public override Quaternion APIDTarget + { + set { return; } + } + + public override bool APIDActive + { + set { return; } + } + + public override float APIDStrength + { + set { return; } + } + + public override float APIDDamping + { + set { return; } + } + + + + public override void SubscribeEvents(int ms) + { + + } + public override void UnSubscribeEvents() + { + + } + public override bool SubscribedEvents() + { + return false; + } + } +} diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXScene.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXScene.cs new file mode 100644 index 0000000..4de4b01 --- /dev/null +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXScene.cs @@ -0,0 +1,183 @@ +/* + * 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 OpenSimulator 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 System.Collections.Generic; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Region.Physics.Manager; +using PhysXWrapper; +using Quaternion=OpenMetaverse.Quaternion; +using System.Reflection; +using log4net; +using OpenMetaverse; + +namespace OpenSim.Region.Physics.PhysXPlugin +{ + public class PhysXScene : PhysicsScene + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private List _characters = new List(); + private List _prims = new List(); + private float[] _heightMap = null; + private NxPhysicsSDK mySdk; + private NxScene scene; + + // protected internal string sceneIdentifier; + public PhysXScene(string _sceneIdentifier) + { + //sceneIdentifier = _sceneIdentifier; + + mySdk = NxPhysicsSDK.CreateSDK(); + m_log.Info("Sdk created - now creating scene"); + scene = mySdk.CreateScene(); + } + + public override void Initialise(IMesher meshmerizer, IConfigSource config) + { + // Does nothing right now + } + public override void Dispose() + { + + } + + public override void SetWaterLevel(float baseheight) + { + + } + + public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) + { + Vec3 pos = new Vec3(); + pos.X = position.X; + pos.Y = position.Y; + pos.Z = position.Z; + PhysXCharacter act = new PhysXCharacter(scene.AddCharacter(pos)); + act.Flying = isFlying; + act.Position = position; + _characters.Add(act); + return act; + } + + public override void RemovePrim(PhysicsActor prim) + { + } + + public override void RemoveAvatar(PhysicsActor actor) + { + } + + private PhysicsActor AddPrim(Vector3 position, Vector3 size, Quaternion rotation) + { + Vec3 pos = new Vec3(); + pos.X = position.X; + pos.Y = position.Y; + pos.Z = position.Z; + Vec3 siz = new Vec3(); + siz.X = size.X; + siz.Y = size.Y; + siz.Z = size.Z; + PhysXPrim act = new PhysXPrim(scene.AddNewBox(pos, siz)); + _prims.Add(act); + return act; + } + + public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, + Vector3 size, Quaternion rotation) //To be removed + { + return AddPrimShape(primName, pbs, position, size, rotation, false); + } + + public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, + Vector3 size, Quaternion rotation, bool isPhysical) + { + return AddPrim(position, size, rotation); + } + + public override void AddPhysicsActorTaint(PhysicsActor prim) + { + } + + public override float Simulate(float timeStep) + { + float fps = 0f; + try + { + foreach (PhysXCharacter actor in _characters) + { + actor.Move(timeStep); + } + scene.Simulate(timeStep); + scene.FetchResults(); + scene.UpdateControllers(); + + foreach (PhysXCharacter actor in _characters) + { + actor.UpdatePosition(); + } + } + catch (Exception e) + { + m_log.Error(e.Message); + } + return fps; + } + + public override void GetResults() + { + } + + public override bool IsThreaded + { + // for now we won't be multithreaded + get { return (false); } + } + + public override void SetTerrain(float[] heightMap) + { + if (_heightMap != null) + { + m_log.Debug("PhysX - deleting old terrain"); + scene.DeleteTerrain(); + } + _heightMap = heightMap; + scene.AddTerrain(heightMap); + } + + public override void DeleteTerrain() + { + scene.DeleteTerrain(); + } + + public override Dictionary GetTopColliders() + { + Dictionary returncolliders = new Dictionary(); + return returncolliders; + } + } +} -- cgit v1.1 From 93967d4a1c500ede1431e2aa56d5d3a6b0da0130 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 26 Feb 2010 18:30:05 +0000 Subject: fix bug where region settings loaded via an oar (water height, terrain textures, etc.) were not being persisted to the database this meant that the loaded settings would disappear after a restart --- OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs | 2 ++ 1 file changed, 2 insertions(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index ad58f40..381c8f7 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -435,6 +435,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver currentRegionSettings.TerrainTexture4 = loadedRegionSettings.TerrainTexture4; currentRegionSettings.UseEstateSun = loadedRegionSettings.UseEstateSun; currentRegionSettings.WaterHeight = loadedRegionSettings.WaterHeight; + + currentRegionSettings.Save(); IEstateModule estateModule = m_scene.RequestModuleInterface(); -- cgit v1.1 From 84b0a23e193b220d61b5a67e90df32138441c1e8 Mon Sep 17 00:00:00 2001 From: Melanie Date: Thu, 4 Mar 2010 10:38:03 +0000 Subject: Remove a superfluous array creation --- OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | 1 - 1 file changed, 1 deletion(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index e87b1f4..1ea52c5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs @@ -416,7 +416,6 @@ namespace OpenSim.Region.ScriptEngine.Shared public list(params object[] args) { - m_data = new object[args.Length]; m_data = args; } -- cgit v1.1 From 83929c69e35d156d99be46a6ee50b0d3fe5c9f25 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 6 Mar 2010 00:56:55 -0600 Subject: - implementing server 1.38 functions Signed-off-by: Melanie --- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 5 ++ .../Shared/Api/Implementation/LSL_Api.cs | 99 +++++++++++++++++++--- .../ScriptEngine/Shared/Api/Interface/ILSL_Api.cs | 4 + .../Shared/Api/Runtime/LSL_Constants.cs | 1 + .../ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs | 20 +++++ 5 files changed, 119 insertions(+), 10 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 5c283bc..a85a4b3 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -4680,5 +4680,10 @@ namespace OpenSim.Region.Framework.Scenes m_log.Error("[Physics] " + ex); } } + + public Color4 GetTextColor() + { + return new Color4((byte)Color.R, (byte)Color.G, (byte)Color.B, (byte)(0xFF - Color.A)); + } } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index aa876ec..a373046 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -5406,12 +5406,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate) { m_host.AddScriptLPS(1); + + SetTextureAnim(m_host, mode, face, sizex, sizey, start, length, rate); + } + + public void llSetLinkTextureAnim(int linknumber, int mode, int face, int sizex, int sizey, double start, double length, double rate) + { + m_host.AddScriptLPS(1); + + List parts = GetLinkParts(linknumber); + + foreach (var part in parts) + { + SetTextureAnim(part, mode, face, sizex, sizey, start, length, rate); + } + } + + private void SetTextureAnim(SceneObjectPart part, int mode, int face, int sizex, int sizey, double start, double length, double rate) + { + Primitive.TextureAnimation pTexAnim = new Primitive.TextureAnimation(); pTexAnim.Flags = (Primitive.TextureAnimMode)mode; //ALL_SIDES if (face == ScriptBaseClass.ALL_SIDES) - face = 255; + face = 255; pTexAnim.Face = (uint)face; pTexAnim.Length = (float)length; @@ -5420,9 +5439,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api pTexAnim.SizeY = (uint)sizey; pTexAnim.Start = (float)start; - m_host.AddTextureAnimation(pTexAnim); - m_host.SendFullUpdateToAllClients(); - m_host.ParentGroup.HasGroupChanged = true; + part.AddTextureAnimation(pTexAnim); + part.SendFullUpdateToAllClients(); + part.ParentGroup.HasGroupChanged = true; } public void llTriggerSoundLimited(string sound, double volume, LSL_Vector top_north_east, @@ -5819,13 +5838,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return ps; } + public void llLinkParticleSystem(int linknumber, LSL_List rules) + { + m_host.AddScriptLPS(1); + + List parts = GetLinkParts(linknumber); + + foreach (var part in parts) + { + SetParticleSystem(part, rules); + } + } + public void llParticleSystem(LSL_List rules) { m_host.AddScriptLPS(1); + SetParticleSystem(m_host, rules); + } + + private void SetParticleSystem(SceneObjectPart part, LSL_List rules) { + + if (rules.Length == 0) { - m_host.RemoveParticleSystem(); - m_host.ParentGroup.HasGroupChanged = true; + part.RemoveParticleSystem(); + part.ParentGroup.HasGroupChanged = true; } else { @@ -5936,7 +5973,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } else { - prules.Target = m_host.UUID; + prules.Target = part.UUID; } break; @@ -5962,10 +5999,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } prules.CRC = 1; - m_host.AddNewParticleSystem(prules); - m_host.ParentGroup.HasGroupChanged = true; + part.AddNewParticleSystem(prules); + part.ParentGroup.HasGroupChanged = true; } - m_host.SendFullUpdateToAllClients(); + part.SendFullUpdateToAllClients(); } public void llGroundRepel(double height, int water, double tau) @@ -6759,6 +6796,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api SetPrimParams(part, rules); } + public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules) + { + llSetLinkPrimitiveParams(linknumber, rules); + } + protected void SetPrimParams(SceneObjectPart part, LSL_List rules) { int idx = 0; @@ -7115,6 +7157,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api int style = rules.GetLSLIntegerItem(idx++); SetTexGen(part, face, style); break; + case (int)ScriptBaseClass.PRIM_TEXT: + if (remain < 3) + return; + string primText = rules.GetLSLStringItem(idx++); + LSL_Vector primTextColor = rules.GetVector3Item(idx++); + LSL_Float primTextAlpha = rules.GetLSLFloatItem(idx++); + Vector3 av3 = new Vector3(Util.Clip((float)primTextColor.x, 0.0f, 1.0f), + Util.Clip((float)primTextColor.y, 0.0f, 1.0f), + Util.Clip((float)primTextColor.z, 0.0f, 1.0f)); + part.SetText(primText, av3, Util.Clip((float)primTextAlpha, 0.0f, 1.0f)); + + break; } } } @@ -7358,6 +7412,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return GetLinkPrimitiveParams(m_host, rules); } + public LSL_List llGetLinkPrimitiveParams(int linknumber, LSL_List rules) + { + m_host.AddScriptLPS(1); + + List parts = GetLinkParts(linknumber); + + LSL_List res = new LSL_List(); + + foreach (var part in parts) + { + LSL_List partRes = GetLinkPrimitiveParams(part, rules); + res += partRes; + } + + return res; + } + public LSL_List GetLinkPrimitiveParams(SceneObjectPart part, LSL_List rules) { LSL_List res = new LSL_List(); @@ -7635,6 +7706,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api res.Add(new LSL_Float(0)); break; + case (int)ScriptBaseClass.PRIM_TEXT: + Color4 textColor = part.GetTextColor(); + res.Add(part.Text); + res.Add(new LSL_Vector(textColor.R, + textColor.G, + textColor.B)); + res.Add(new LSL_Float(textColor.A)); + break; } } return res; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs index a74e8da..7ab04a3 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs @@ -135,6 +135,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces LSL_Key llGetLinkKey(int linknum); LSL_String llGetLinkName(int linknum); LSL_Integer llGetLinkNumber(); + LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules); LSL_Integer llGetListEntryType(LSL_List src, int index); LSL_Integer llGetListLength(LSL_List src); LSL_Vector llGetLocalPos(); @@ -206,6 +207,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces void llInstantMessage(string user, string message); LSL_String llIntegerToBase64(int number); LSL_String llKey2Name(string id); + void llLinkParticleSystem(int linknum, LSL_List rules); LSL_String llList2CSV(LSL_List src); LSL_Float llList2Float(LSL_List src, int index); LSL_Integer llList2Integer(LSL_List src, int index); @@ -322,6 +324,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces void llSetLinkColor(int linknumber, LSL_Vector color, int face); void llSetLinkPrimitiveParams(int linknumber, LSL_List rules); void llSetLinkTexture(int linknumber, string texture, int face); + void llSetLinkTextureAnim(int linknum, int mode, int face, int sizex, int sizey, double start, double length, double rate); void llSetLocalRot(LSL_Rotation rot); void llSetObjectDesc(string desc); void llSetObjectName(string name); @@ -330,6 +333,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces void llSetPayPrice(int price, LSL_List quick_pay_buttons); void llSetPos(LSL_Vector pos); void llSetPrimitiveParams(LSL_List rules); + void llSetLinkPrimitiveParamsFast(int linknum, LSL_List rules); void llSetPrimURL(string url); void llSetRemoteScriptAccessPin(int pin); void llSetRot(LSL_Rotation rot); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs index 7cf82b2..ee35fa4 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs @@ -313,6 +313,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public const int PRIM_CAST_SHADOWS = 24; // Not implemented, here for completeness sake public const int PRIM_POINT_LIGHT = 23; // Huh? public const int PRIM_GLOW = 25; + public const int PRIM_TEXT = 26; public const int PRIM_TEXGEN_DEFAULT = 0; public const int PRIM_TEXGEN_PLANAR = 1; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index a28e97b..3339995 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs @@ -674,6 +674,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase return m_LSL_Functions.llGetPrimitiveParams(rules); } + public LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules) + { + return m_LSL_Functions.llGetLinkPrimitiveParams(linknum, rules); + } + public LSL_Integer llGetRegionAgentCount() { return m_LSL_Functions.llGetRegionAgentCount(); @@ -889,6 +894,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase return m_LSL_Functions.llKey2Name(id); } + public void llLinkParticleSystem(int linknum, LSL_List rules) + { + m_LSL_Functions.llLinkParticleSystem(linknum, rules); + } + public LSL_String llList2CSV(LSL_List src) { return m_LSL_Functions.llList2CSV(src); @@ -1468,6 +1478,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase m_LSL_Functions.llSetLinkTexture(linknumber, texture, face); } + public void llSetLinkTextureAnim(int linknum, int mode, int face, int sizex, int sizey, double start, double length, double rate) + { + m_LSL_Functions.llSetLinkTextureAnim(linknum, mode, face, sizex, sizey, start, length, rate); + } + public void llSetLocalRot(LSL_Rotation rot) { m_LSL_Functions.llSetLocalRot(rot); @@ -1508,6 +1523,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase m_LSL_Functions.llSetPrimitiveParams(rules); } + public void llSetLinkPrimitiveParamsFast(int linknum, LSL_List rules) + { + m_LSL_Functions.llSetLinkPrimitiveParamsFast(linknum, rules); + } + public void llSetPrimURL(string url) { m_LSL_Functions.llSetPrimURL(url); -- cgit v1.1