mirror of
https://github.com/opensim/opensim.git
synced 2026-08-06 09:16:28 +08:00
Add hypergrid teleporting support to user profiles picks
This commit is contained in:
@@ -48,6 +48,8 @@ using Mono.Addins;
|
||||
using OpenSim.Services.Connectors.Hypergrid;
|
||||
using OpenSim.Framework.Servers.HttpServer;
|
||||
using OpenSim.Services.UserProfilesService;
|
||||
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
|
||||
using Microsoft.CSharp;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
{
|
||||
@@ -78,7 +80,8 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
/// <value>
|
||||
/// The configuration
|
||||
/// </value>
|
||||
public IConfigSource Config {
|
||||
public IConfigSource Config
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
@@ -89,7 +92,8 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
/// <value>
|
||||
/// The profile server URI.
|
||||
/// </value>
|
||||
public string ProfileServerUri {
|
||||
public string ProfileServerUri
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
@@ -111,11 +115,17 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
/// <value>
|
||||
/// <c>true</c> if enabled; otherwise, <c>false</c>.
|
||||
/// </value>
|
||||
public bool Enabled {
|
||||
public bool Enabled
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public string MyGatekeeper
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
|
||||
|
||||
#region IRegionModuleBase implementation
|
||||
/// <summary>
|
||||
@@ -152,6 +162,9 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
m_log.Debug("[PROFILES]: Full Profiles Enabled");
|
||||
ReplaceableInterface = null;
|
||||
Enabled = true;
|
||||
|
||||
MyGatekeeper = Util.GetConfigVarFromSections<string>(source, "GatekeeperURI",
|
||||
new string[] { "Startup", "Hypergrid", "UserProfiles" }, String.Empty);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -599,30 +612,64 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
return;
|
||||
|
||||
UUID targetID;
|
||||
UUID.TryParse(args[0], out targetID);
|
||||
UUID.TryParse (args [0], out targetID);
|
||||
string serverURI = string.Empty;
|
||||
GetUserProfileServerURI(targetID, out serverURI);
|
||||
GetUserProfileServerURI (targetID, out serverURI);
|
||||
|
||||
string theirGatekeeperURI;
|
||||
GetUserGatekeeperURI (targetID, out theirGatekeeperURI);
|
||||
|
||||
IClientAPI remoteClient = (IClientAPI)sender;
|
||||
|
||||
UserProfilePick pick = new UserProfilePick();
|
||||
UUID.TryParse(args[0], out pick.CreatorId);
|
||||
UUID.TryParse(args[1], out pick.PickId);
|
||||
UserProfilePick pick = new UserProfilePick ();
|
||||
UUID.TryParse (args [0], out pick.CreatorId);
|
||||
UUID.TryParse (args [1], out pick.PickId);
|
||||
|
||||
|
||||
object Pick = (object)pick;
|
||||
if(!rpc.JsonRpcRequest(ref Pick, "pickinforequest", serverURI, UUID.Random().ToString()))
|
||||
{
|
||||
remoteClient.SendAgentAlertMessage(
|
||||
if (!rpc.JsonRpcRequest (ref Pick, "pickinforequest", serverURI, UUID.Random ().ToString ())) {
|
||||
remoteClient.SendAgentAlertMessage (
|
||||
"Error selecting pick", false);
|
||||
return;
|
||||
}
|
||||
pick = (UserProfilePick) Pick;
|
||||
|
||||
Vector3 globalPos;
|
||||
Vector3.TryParse(pick.GlobalPos,out globalPos);
|
||||
pick = (UserProfilePick)Pick;
|
||||
|
||||
Vector3 globalPos = new Vector3(Vector3.Zero);
|
||||
|
||||
// Smoke and mirrors
|
||||
if (pick.Gatekeeper == MyGatekeeper)
|
||||
{
|
||||
Vector3.TryParse(pick.GlobalPos,out globalPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Setup the illusion
|
||||
string region = string.Format("{0} {1}",pick.Gatekeeper,pick.SimName);
|
||||
GridRegion target = Scene.GridService.GetRegionByName(Scene.RegionInfo.ScopeID, region);
|
||||
|
||||
if(target == null)
|
||||
{
|
||||
// This is a dead or unreachable region
|
||||
}
|
||||
else
|
||||
{
|
||||
// Work our slight of hand
|
||||
int x = target.RegionLocX;
|
||||
int y = target.RegionLocY;
|
||||
|
||||
dynamic synthX = globalPos.X - (globalPos.X/Constants.RegionSize) * Constants.RegionSize;
|
||||
synthX += x;
|
||||
globalPos.X = synthX;
|
||||
|
||||
dynamic synthY = globalPos.Y - (globalPos.Y/Constants.RegionSize) * Constants.RegionSize;
|
||||
synthY += y;
|
||||
globalPos.Y = synthY;
|
||||
}
|
||||
}
|
||||
|
||||
m_log.DebugFormat("[PROFILES]: PickInfoRequest: {0} : {1}", pick.Name.ToString(), pick.SnapshotId.ToString());
|
||||
|
||||
// Pull the rabbit out of the hat
|
||||
remoteClient.SendPickInfoReply(pick.PickId,pick.CreatorId,pick.TopPick,pick.ParcelId,pick.Name,
|
||||
pick.Desc,pick.SnapshotId,pick.User,pick.OriginalName,pick.SimName,
|
||||
globalPos,pick.SortOrder,pick.Enabled);
|
||||
@@ -659,7 +706,8 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
/// Enabled.
|
||||
/// </param>
|
||||
public void PickInfoUpdate(IClientAPI remoteClient, UUID pickID, UUID creatorID, bool topPick, string name, string desc, UUID snapshotID, int sortOrder, bool enabled)
|
||||
{
|
||||
{
|
||||
//TODO: See how this works with NPC, May need to test
|
||||
m_log.DebugFormat("[PROFILES]: Start PickInfoUpdate Name: {0} PickId: {1} SnapshotId: {2}", name, pickID.ToString(), snapshotID.ToString());
|
||||
|
||||
UserProfilePick pick = new UserProfilePick();
|
||||
@@ -699,6 +747,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
avaPos.X, avaPos.Y, p.Scene.Name);
|
||||
}
|
||||
|
||||
|
||||
pick.PickId = pickID;
|
||||
pick.CreatorId = creatorID;
|
||||
pick.TopPick = topPick;
|
||||
@@ -708,6 +757,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
pick.SnapshotId = snapshotID;
|
||||
pick.User = landOwnerName;
|
||||
pick.SimName = remoteClient.Scene.RegionInfo.RegionName;
|
||||
pick.Gatekeeper = MyGatekeeper;
|
||||
pick.GlobalPos = posGlobal.ToString();
|
||||
pick.SortOrder = sortOrder;
|
||||
pick.Enabled = enabled;
|
||||
@@ -1259,6 +1309,37 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the user gatekeeper server URI.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// The user gatekeeper server URI.
|
||||
/// </returns>
|
||||
/// <param name='userID'>
|
||||
/// If set to <c>true</c> user URI.
|
||||
/// </param>
|
||||
/// <param name='serverURI'>
|
||||
/// If set to <c>true</c> server URI.
|
||||
/// </param>
|
||||
bool GetUserGatekeeperURI(UUID userID, out string serverURI)
|
||||
{
|
||||
bool local;
|
||||
local = UserManagementModule.IsLocalGridUser(userID);
|
||||
|
||||
if (!local)
|
||||
{
|
||||
serverURI = UserManagementModule.GetUserServerURL(userID, "GatekeeperURI");
|
||||
// Is Foreign
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
serverURI = MyGatekeeper;
|
||||
// Is local
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the user profile server UR.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user