From 244bfcde5b86180981e99ac9e88eb394f20bcd09 Mon Sep 17 00:00:00 2001
From: Teravus Ovares
Date: Thu, 17 Apr 2008 05:07:14 +0000
Subject: * Implements 'Set Home to Here' * Implements 'Teleport Home' * User
Server has to be updated for it to save your home in grid mode * home
position accuracy is in int because the grid comms ExpectUser method tries to
convert to Uint and crashes if it gets a float. Added a convert to decimal
in ExpectUser but to avoid a breaking change with old revisions, kept the
save value in int for now. Eventually it needs to be a float, but lets
release another incremental version before doing that.
---
.../Environment/Modules/BetaGridLikeMoneyModule.cs | 20 ++++++----
OpenSim/Region/Environment/Scenes/Scene.cs | 46 ++++++++++++++++++++++
OpenSim/Region/Environment/Scenes/SceneEvents.cs | 4 +-
3 files changed, 60 insertions(+), 10 deletions(-)
(limited to 'OpenSim/Region/Environment')
diff --git a/OpenSim/Region/Environment/Modules/BetaGridLikeMoneyModule.cs b/OpenSim/Region/Environment/Modules/BetaGridLikeMoneyModule.cs
index aef0f81..9727a8b 100644
--- a/OpenSim/Region/Environment/Modules/BetaGridLikeMoneyModule.cs
+++ b/OpenSim/Region/Environment/Modules/BetaGridLikeMoneyModule.cs
@@ -423,7 +423,7 @@ namespace OpenSim.Region.Environment.Modules
{
if (e.parcelPrice >= 0)
{
- doMoneyTranfer(agentId, e.parcelOwnerID, e.parcelPrice);
+ doMoneyTransfer(agentId, e.parcelOwnerID, e.parcelPrice);
lock (e)
{
e.transactionID = Util.UnixTimeSinceEpoch();
@@ -446,13 +446,15 @@ namespace OpenSim.Region.Environment.Modules
IClientAPI sender = null;
IClientAPI receiver = null;
+ m_log.WarnFormat("[MONEY] Explicit transfer of {0} from {1} to {2}", e.amount, e.sender.ToString(), e.receiver.ToString());
+
sender = LocateClientObject(e.sender);
if (sender != null)
{
- receiver = LocateClientObject(e.reciever);
- bool transactionresult = doMoneyTranfer(e.sender, e.reciever, e.amount);
+ receiver = LocateClientObject(e.receiver);
+ bool transactionresult = doMoneyTransfer(e.sender, e.receiver, e.amount);
- if (e.sender != e.reciever)
+ if (e.sender != e.receiver)
{
if (sender != null)
{
@@ -462,14 +464,14 @@ namespace OpenSim.Region.Environment.Modules
if (receiver != null)
{
- receiver.SendMoneyBalance(LLUUID.Random(), transactionresult, Helpers.StringToField(e.description), GetFundsForAgentID(e.reciever));
+ receiver.SendMoneyBalance(LLUUID.Random(), transactionresult, Helpers.StringToField(e.description), GetFundsForAgentID(e.receiver));
}
}
else
{
- m_log.Warn("[MONEY]: Potential Fraud Warning, got money transfer request for avatar that isn't in this simulator - Details; Sender:" + e.sender.ToString() + " Reciver: " + e.reciever.ToString() + " Amount: " + e.amount.ToString());
+ m_log.Warn("[MONEY]: Potential Fraud Warning, got money transfer request for avatar that isn't in this simulator - Details; Sender:" + e.sender.ToString() + " Reciver: " + e.receiver.ToString() + " Amount: " + e.amount.ToString());
}
}
@@ -490,7 +492,7 @@ namespace OpenSim.Region.Environment.Modules
// Use this to exclude Region Owners (2), Estate Managers(1), Users (0), Disabled(-1)
if (PriceUpload > 0 && userlevel <= UserLevelPaysFees)
{
- doMoneyTranfer(Uploader, EconomyBaseAccount, PriceUpload);
+ doMoneyTransfer(Uploader, EconomyBaseAccount, PriceUpload);
}
}
@@ -634,8 +636,10 @@ namespace OpenSim.Region.Environment.Modules
///
///
///
- private bool doMoneyTranfer(LLUUID Sender, LLUUID Receiver, int amount)
+ private bool doMoneyTransfer(LLUUID Sender, LLUUID Receiver, int amount)
{
+ m_log.WarnFormat("[MONEY] Transfer {0} from {1} to {2}", amount, Sender.ToString(), Receiver.ToString());
+
bool result = false;
if (amount >= 0)
{
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 08cf3d8..20572a9 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1581,9 +1581,55 @@ namespace OpenSim.Region.Environment.Scenes
client.OnObjectIncludeInSearch += m_innerScene.MakeObjectSearchable;
+ client.OnTeleportHomeRequest += TeleportClientHome;
+
+ client.OnSetStartLocationRequest += SetHomeRezPoint;
+
EventManager.TriggerOnNewClient(client);
}
+ public virtual void TeleportClientHome(LLUUID AgentId, IClientAPI client)
+ {
+ UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(AgentId);
+ if (UserProfile != null)
+ {
+ ulong homeRegion = UserProfile.HomeRegion;
+ LLVector3 homePostion = new LLVector3(UserProfile.HomeLocationX,UserProfile.HomeLocationY,UserProfile.HomeLocationZ);
+ LLVector3 homeLookat = new LLVector3(UserProfile.HomeLookAt);
+ RequestTeleportLocation(client, homeRegion, homePostion,homeLookat,(uint)0);
+
+ }
+
+ }
+
+ public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags)
+ {
+ UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(remoteClient.AgentId);
+ if (UserProfile != null)
+ {
+ // I know I'm ignoring the regionHandle provided by the teleport location request.
+ // reusing the TeleportLocationRequest delegate, so regionHandle isn't valid
+ UserProfile.HomeRegion = RegionInfo.RegionHandle;
+
+ // We cast these to an int so as not to cause a breaking change with old regions
+ // Newer regions treat this as a float on the ExpectUser method.. so we need to wait a few
+ // releases before setting these to floats. (r4257)
+ UserProfile.HomeLocationX = (int)position.X;
+ UserProfile.HomeLocationY = (int)position.Y;
+ UserProfile.HomeLocationZ = (int)position.Z;
+ UserProfile.HomeLookAtX = (int)lookAt.X;
+ UserProfile.HomeLookAtY = (int)lookAt.Y;
+ UserProfile.HomeLookAtZ = (int)lookAt.Z;
+ CommsManager.UserService.UpdateUserProfileProperties(UserProfile);
+
+ remoteClient.SendAgentAlertMessage("Set home to here if supported by login service",false);
+ }
+ else
+ {
+ remoteClient.SendAgentAlertMessage("Set Home request Failed",false);
+ }
+
+ }
protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client, bool child)
{
ScenePresence avatar = null;
diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
index 67edf6b..89c519e 100644
--- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
@@ -158,7 +158,7 @@ namespace OpenSim.Region.Environment.Scenes
public class MoneyTransferArgs : System.EventArgs
{
public LLUUID sender;
- public LLUUID reciever;
+ public LLUUID receiver;
// Always false. The SL protocol sucks.
public bool authenticated = false;
@@ -169,7 +169,7 @@ namespace OpenSim.Region.Environment.Scenes
public MoneyTransferArgs(LLUUID asender, LLUUID areciever, int aamount, int atransactiontype, string adescription) {
sender = asender;
- reciever = areciever;
+ receiver = areciever;
amount = aamount;
transactiontype = atransactiontype;
description = adescription;
--
cgit v1.1