diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 6f7256e0ad..9807ea5745 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -426,6 +426,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
if (part == null || part.ParentGroup == null)
return;
+ if (part.ParentGroup.RootPart.AttachedAvatar != remoteClient.AgentId)
+ return;
+
UUID inventoryID = part.ParentGroup.GetFromItemID();
ScenePresence presence;
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
index 83c8eac8b3..a64f785d6d 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
@@ -42,7 +42,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private IGridUserService m_GridUserService;
- private Scene m_aScene;
public ActivityDetector(IGridUserService guservice)
{
@@ -56,9 +55,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
// But we could trigger the position update more often
scene.EventManager.OnMakeRootAgent += OnMakeRootAgent;
scene.EventManager.OnNewClient += OnNewClient;
-
- if (m_aScene == null)
- m_aScene = scene;
}
public void RemoveRegion(Scene scene)
@@ -70,8 +66,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
public void OnMakeRootAgent(ScenePresence sp)
{
m_log.DebugFormat("[ACTIVITY DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName);
-
- m_GridUserService.SetLastPosition(sp.UUID.ToString(), sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat);
+ m_GridUserService.SetLastPosition(sp.UUID.ToString(), UUID.Zero, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat);
}
public void OnNewClient(IClientAPI client)
@@ -99,7 +94,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
}
}
m_log.DebugFormat("[ACTIVITY DETECTOR]: Detected client logout {0} in {1}", client.AgentId, client.Scene.RegionInfo.RegionName);
- m_GridUserService.LoggedOut(client.AgentId.ToString(), client.Scene.RegionInfo.RegionID, position, lookat);
+ m_GridUserService.LoggedOut(client.AgentId.ToString(), client.SessionId, client.Scene.RegionInfo.RegionID, position, lookat);
}
}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs
index d914a576e1..985aceca5d 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs
@@ -152,9 +152,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
return m_GridUserService.LoggedIn(userID);
}
- public bool LoggedOut(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+ public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
{
- return m_GridUserService.LoggedOut(userID, regionID, lastPosition, lastLookAt);
+ return m_GridUserService.LoggedOut(userID, sessionID, regionID, lastPosition, lastLookAt);
}
public bool SetHome(string userID, UUID homeID, Vector3 homePosition, Vector3 homeLookAt)
@@ -162,9 +162,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
return m_GridUserService.SetHome(userID, homeID, homePosition, homeLookAt);
}
- public bool SetLastPosition(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+ public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
{
- return m_GridUserService.SetLastPosition(userID, regionID, lastPosition, lastLookAt);
+ return m_GridUserService.SetLastPosition(userID, sessionID, regionID, lastPosition, lastLookAt);
}
public GridUserInfo GetGridUserInfo(string userID)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
index e3e2e619c1..95b3591ab4 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
@@ -126,9 +126,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
return null;
}
- public bool LoggedOut(string userID, UUID region, Vector3 position, Vector3 lookat)
+ public bool LoggedOut(string userID, UUID sessionID, UUID region, Vector3 position, Vector3 lookat)
{
- return m_RemoteConnector.LoggedOut(userID, region, position, lookat);
+ return m_RemoteConnector.LoggedOut(userID, sessionID, region, position, lookat);
}
@@ -137,9 +137,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
return m_RemoteConnector.SetHome(userID, regionID, position, lookAt);
}
- public bool SetLastPosition(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
+ public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt)
{
- return m_RemoteConnector.SetLastPosition(userID, regionID, position, lookAt);
+ return m_RemoteConnector.SetLastPosition(userID, sessionID, regionID, position, lookAt);
}
public GridUserInfo GetGridUserInfo(string userID)
diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
index c8fb9da08a..a674d60057 100644
--- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
@@ -104,7 +104,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
part.GetProperties(client);
}
- public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType)
+ public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType, int salePrice)
{
SceneObjectPart part = m_scene.GetSceneObjectPart(localID);
@@ -114,6 +114,18 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
if (part.ParentGroup == null)
return false;
+ if (part.ObjectSaleType != saleType)
+ {
+ m_dialogModule.SendAlertToUser(remoteClient, "This item is not available for the type of sale specified");
+ return false;
+ }
+
+ if (part.SalePrice != salePrice)
+ {
+ m_dialogModule.SendAlertToUser(remoteClient, "This item is not available for the price specified");
+ return false;
+ }
+
SceneObjectGroup group = part.ParentGroup;
switch (saleType)
diff --git a/OpenSim/Region/Framework/Interfaces/IBuySellModule.cs b/OpenSim/Region/Framework/Interfaces/IBuySellModule.cs
index 0132bae284..d1ce4c0167 100644
--- a/OpenSim/Region/Framework/Interfaces/IBuySellModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IBuySellModule.cs
@@ -42,6 +42,6 @@ namespace OpenSim.Region.Framework.Interfaces
///
/// True on a successful purchase, false on failure
///
- bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType);
+ bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType, int salePrice);
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
index cc51c3b020..d364df60da 100644
--- a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
+++ b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
@@ -814,7 +814,7 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
IBuySellModule module = s.RequestModuleInterface();
if (module != null)
- module.BuyObject(remoteClient, categoryID, localID, saleType);
+ module.BuyObject(remoteClient, categoryID, localID, saleType, salePrice);
}
}
@@ -825,4 +825,4 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
Gift = 2,
Purchase = 3
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs b/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs
index f8fa42967f..485bc3e911 100644
--- a/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs
+++ b/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs
@@ -131,7 +131,7 @@ namespace OpenSim.Server.Handlers.GridUser
if (!UnpackArgs(request, out userID, out regionID, out position, out lookat))
return FailureResult();
- if (m_GridUserService.LoggedOut(userID, regionID, position, lookat))
+ if (m_GridUserService.LoggedOut(userID, UUID.Zero, regionID, position, lookat))
return SuccessResult();
return FailureResult();
@@ -166,7 +166,7 @@ namespace OpenSim.Server.Handlers.GridUser
if (!UnpackArgs(request, out user, out region, out position, out look))
return FailureResult();
- if (m_GridUserService.SetLastPosition(user, region, position, look))
+ if (m_GridUserService.SetLastPosition(user, UUID.Zero, region, position, look))
return SuccessResult();
return FailureResult();
diff --git a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
index 935ebb1be5..b3ea865996 100644
--- a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
+++ b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
@@ -101,7 +101,7 @@ namespace OpenSim.Services.Connectors
}
- public bool LoggedOut(string userID, UUID region, Vector3 position, Vector3 lookat)
+ public bool LoggedOut(string userID, UUID sessionID, UUID region, Vector3 position, Vector3 lookat)
{
Dictionary sendData = new Dictionary();
//sendData["SCOPEID"] = scopeID.ToString();
@@ -123,7 +123,7 @@ namespace OpenSim.Services.Connectors
return Set(sendData, userID, regionID, position, lookAt);
}
- public bool SetLastPosition(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
+ public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt)
{
Dictionary sendData = new Dictionary();
//sendData["SCOPEID"] = scopeID.ToString();
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
index 67a06f3f83..b8703c69c9 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
@@ -29,6 +29,7 @@ using System;
using System.Reflection;
using OpenSim.Framework;
using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
using OpenMetaverse;
using log4net;
@@ -38,12 +39,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- private SimianPresenceServiceConnector m_GridUserService;
- private Scene m_aScene;
+ private IGridUserService m_GridUserService;
- public SimianActivityDetector(SimianPresenceServiceConnector guservice)
+ public SimianActivityDetector(IGridUserService guService)
{
- m_GridUserService = guservice;
+ m_GridUserService = guService;
m_log.DebugFormat("[SIMIAN ACTIVITY DETECTOR]: Started");
}
@@ -54,9 +54,6 @@ namespace OpenSim.Services.Connectors.SimianGrid
scene.EventManager.OnMakeRootAgent += OnMakeRootAgent;
scene.EventManager.OnNewClient += OnNewClient;
scene.EventManager.OnAvatarEnteringNewParcel += OnEnteringNewParcel;
-
- if (m_aScene == null)
- m_aScene = scene;
}
public void RemoveRegion(Scene scene)
@@ -101,9 +98,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
}
m_log.DebugFormat("[SIMIAN ACTIVITY DETECTOR]: Detected client logout {0} in {1}", client.AgentId, client.Scene.RegionInfo.RegionName);
- m_GridUserService.LoggedOut(client.AgentId.ToString(), client.Scene.RegionInfo.RegionID, position, lookat);
+ m_GridUserService.LoggedOut(client.AgentId.ToString(), client.SessionId, client.Scene.RegionInfo.RegionID, position, lookat);
}
-
}
void OnEnteringNewParcel(ScenePresence sp, int localLandID, UUID regionID)
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
index a344594a1d..8141420a1e 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
@@ -260,8 +260,14 @@ namespace OpenSim.Services.Connectors.SimianGrid
return null;
}
- public bool LoggedOut(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+ public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
{
+ m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID);
+
+ // Remove the session to mark this user offline
+ if (!LogoutAgent(sessionID))
+ return false;
+
// Save our last position as user data
NameValueCollection requestArgs = new NameValueCollection
{
@@ -304,12 +310,6 @@ namespace OpenSim.Services.Connectors.SimianGrid
return UpdateSession(sessionID, regionID, lastPosition, lastLookAt);
}
- public bool SetLastPosition(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
- {
- // Never called
- return false;
- }
-
public GridUserInfo GetGridUserInfo(string user)
{
m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent " + user);
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs
index 8c3be7023b..8acd618b92 100644
--- a/OpenSim/Services/HypergridService/UserAgentService.cs
+++ b/OpenSim/Services/HypergridService/UserAgentService.cs
@@ -232,7 +232,7 @@ namespace OpenSim.Services.HypergridService
GridUserInfo guinfo = m_GridUserService.GetGridUserInfo(userID.ToString());
if (guinfo != null)
- m_GridUserService.LoggedOut(userID.ToString(), guinfo.LastRegionID, guinfo.LastPosition, guinfo.LastLookAt);
+ m_GridUserService.LoggedOut(userID.ToString(), sessionID, guinfo.LastRegionID, guinfo.LastPosition, guinfo.LastLookAt);
}
// We need to prevent foreign users with the same UUID as a local user
diff --git a/OpenSim/Services/Interfaces/IGridUserService.cs b/OpenSim/Services/Interfaces/IGridUserService.cs
index 95ce5e8fe7..6613ae769f 100644
--- a/OpenSim/Services/Interfaces/IGridUserService.cs
+++ b/OpenSim/Services/Interfaces/IGridUserService.cs
@@ -105,11 +105,31 @@ namespace OpenSim.Services.Interfaces
public interface IGridUserService
{
GridUserInfo LoggedIn(string userID);
- bool LoggedOut(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt);
+
+ ///
+ /// Informs the grid that a user is logged out and to remove any session data for them
+ ///
+ /// Ignore if your connector does not use userID for logouts
+ /// Ignore if your connector does not use sessionID for logouts
+ /// RegionID where the user was last located
+ /// Last region-relative position of the user
+ /// Last normalized look direction for the user
+ /// True if the logout request was successfully processed, otherwise false
+ bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt);
bool SetHome(string userID, UUID homeID, Vector3 homePosition, Vector3 homeLookAt);
- bool SetLastPosition(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt);
-
+
+ ///
+ /// Stores the last known user position at the grid level
+ ///
+ /// Ignore if your connector does not use userID for position updates
+ /// Ignore if your connector does not use sessionID for position updates
+ /// RegionID where the user is currently located
+ /// Region-relative position
+ /// Normalized look direction
+ /// True if the user's last position was successfully updated, otherwise false
+ bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt);
+
GridUserInfo GetGridUserInfo(string userID);
}
}
\ No newline at end of file
diff --git a/OpenSim/Services/UserAccountService/GridUserService.cs b/OpenSim/Services/UserAccountService/GridUserService.cs
index 697ba639d2..9b18915255 100644
--- a/OpenSim/Services/UserAccountService/GridUserService.cs
+++ b/OpenSim/Services/UserAccountService/GridUserService.cs
@@ -92,7 +92,7 @@ namespace OpenSim.Services.UserAccountService
return GetGridUserInfo(userID);
}
- public bool LoggedOut(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+ public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
{
m_log.DebugFormat("[GRID USER SERVICE]: User {0} is offline", userID);
GridUserData d = m_Database.Get(userID);
@@ -139,7 +139,7 @@ namespace OpenSim.Services.UserAccountService
return m_Database.Store(d);
}
- public bool SetLastPosition(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+ public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
{
//m_log.DebugFormat("[Grid User Service]: SetLastPosition for {0}", userID);
GridUserData d = m_Database.Get(userID);