diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index a6b91a3e34..6fba71eec3 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -462,7 +462,7 @@ namespace OpenSim
string password = MainConsole.Instance.PasswdPrompt("Password");
string email = MainConsole.Instance.CmdPrompt("Email", "");
- string rawPrincipalId = MainConsole.Instance.CmdPrompt("ID", UUID.Random().ToString());
+ string rawPrincipalId = MainConsole.Instance.CmdPrompt("User ID", UUID.Random().ToString());
UUID principalId = UUID.Zero;
if (!UUID.TryParse(rawPrincipalId, out principalId))
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 29a54e81b6..b1755ac3c2 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -137,8 +137,6 @@ namespace OpenSim.Region.Framework.Scenes
protected IDialogModule m_dialogModule;
protected IEntityTransferModule m_teleportModule;
protected ICapabilitiesModule m_capsModule;
- // Central Update Loop
- protected int m_fps = 10;
///
/// Current scene frame number
@@ -149,8 +147,20 @@ namespace OpenSim.Region.Framework.Scenes
protected set;
}
- protected float m_timespan = 0.089f;
- protected DateTime m_lastupdate = DateTime.UtcNow;
+ ///
+ /// The minimum length of time in seconds that will be taken for a scene frame. If the frame takes less time then we
+ /// will sleep for the remaining period.
+ ///
+ ///
+ /// One can tweak this number to experiment. One current effect of reducing it is to make avatar animations
+ /// occur too quickly (viewer 1) or with even more slide (viewer 2).
+ ///
+ protected float m_minFrameTimespan = 0.089f;
+
+ ///
+ /// The time of the last frame update.
+ ///
+ protected DateTime m_lastFrameUpdate = DateTime.UtcNow;
// TODO: Possibly stop other classes being able to manipulate this directly.
private SceneGraph m_sceneGraph;
@@ -173,6 +183,7 @@ namespace OpenSim.Region.Framework.Scenes
// private int m_update_land = 1;
private int m_update_coarse_locations = 50;
+ private int agentMS;
private int frameMS;
private int physicsMS2;
private int physicsMS;
@@ -1211,17 +1222,20 @@ namespace OpenSim.Region.Framework.Scenes
public override void Update()
{
- TimeSpan SinceLastFrame = DateTime.UtcNow - m_lastupdate;
+ TimeSpan SinceLastFrame = DateTime.UtcNow - m_lastFrameUpdate;
float physicsFPS = 0f;
int maintc = Util.EnvironmentTickCount();
int tmpFrameMS = maintc;
- tempOnRezMS = eventMS = backupMS = terrainMS = landMS = 0;
+ agentMS = tempOnRezMS = eventMS = backupMS = terrainMS = landMS = 0;
+ // TODO: ADD AGENT TIME HERE
// Increment the frame counter
++Frame;
try
{
+ int tmpAgentMS = Util.EnvironmentTickCount();
+
// Check if any objects have reached their targets
CheckAtTargets();
@@ -1248,6 +1262,8 @@ namespace OpenSim.Region.Framework.Scenes
});
}
+ agentMS = Util.EnvironmentTickCountSubtract(tmpAgentMS);
+
int tmpPhysicsMS2 = Util.EnvironmentTickCount();
if ((Frame % m_update_physics == 0) && m_physics_enabled)
m_sceneGraph.UpdatePreparePhysics();
@@ -1255,7 +1271,11 @@ namespace OpenSim.Region.Framework.Scenes
// Apply any pending avatar force input to the avatar's velocity
if (Frame % m_update_entitymovement == 0)
+ {
+ tmpAgentMS = Util.EnvironmentTickCount();
m_sceneGraph.UpdateScenePresenceMovement();
+ agentMS += Util.EnvironmentTickCountSubtract(tmpAgentMS);
+ }
// Perform the main physics update. This will do the actual work of moving objects and avatars according to their
// velocity
@@ -1263,7 +1283,7 @@ namespace OpenSim.Region.Framework.Scenes
if (Frame % m_update_physics == 0)
{
if (m_physics_enabled)
- physicsFPS = m_sceneGraph.UpdatePhysics(Math.Max(SinceLastFrame.TotalSeconds, m_timespan));
+ physicsFPS = m_sceneGraph.UpdatePhysics(Math.Max(SinceLastFrame.TotalSeconds, m_minFrameTimespan));
if (SynchronizeScene != null)
SynchronizeScene(this);
}
@@ -1320,6 +1340,7 @@ namespace OpenSim.Region.Framework.Scenes
StatsReporter.SetObjects(m_sceneGraph.GetTotalObjectsCount());
StatsReporter.SetActiveObjects(m_sceneGraph.GetActiveObjectsCount());
StatsReporter.addFrameMS(frameMS);
+ StatsReporter.addAgentMS(agentMS);
StatsReporter.addPhysicsMS(physicsMS + physicsMS2);
StatsReporter.addOtherMS(otherMS);
StatsReporter.SetActiveScripts(m_sceneGraph.GetActiveScriptsCount());
@@ -1379,11 +1400,11 @@ namespace OpenSim.Region.Framework.Scenes
}
finally
{
- m_lastupdate = DateTime.UtcNow;
+ m_lastFrameUpdate = DateTime.UtcNow;
}
maintc = Util.EnvironmentTickCountSubtract(maintc);
- maintc = (int)(m_timespan * 1000) - maintc;
+ maintc = (int)(m_minFrameTimespan * 1000) - maintc;
if (maintc > 0)
Thread.Sleep(maintc);
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 36c5c52483..caec704fb5 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -166,6 +166,12 @@ namespace OpenSim.Region.Framework.Scenes
}
}
+ ///
+ /// Update the position of all the scene presences.
+ ///
+ ///
+ /// Called only from the main scene loop.
+ ///
protected internal void UpdatePresences()
{
ForEachScenePresence(delegate(ScenePresence presence)
@@ -174,6 +180,11 @@ namespace OpenSim.Region.Framework.Scenes
});
}
+ ///
+ /// Perform a physics frame update.
+ ///
+ ///
+ ///
protected internal float UpdatePhysics(double elapsed)
{
lock (m_syncRoot)
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 0290576c95..ce63946b48 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -870,11 +870,7 @@ namespace OpenSim.Region.Framework.Scenes
///
public void SendPrimUpdates()
{
- m_perfMonMS = Util.EnvironmentTickCount();
-
SceneViewer.SendPrimUpdates();
-
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
#region Status Methods
@@ -1276,7 +1272,7 @@ namespace OpenSim.Region.Framework.Scenes
// return;
//}
- m_perfMonMS = Util.EnvironmentTickCount();
+// m_perfMonMS = Util.EnvironmentTickCount();
++m_movementUpdateCount;
if (m_movementUpdateCount < 1)
@@ -1565,7 +1561,8 @@ namespace OpenSim.Region.Framework.Scenes
m_scene.EventManager.TriggerOnClientMovement(this);
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
+ // It doesn't make sense to add this to frame stats as this update is processed indepedently of the scene loop
+// m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
///
@@ -2341,8 +2338,6 @@ namespace OpenSim.Region.Framework.Scenes
/// The vector in which to move. This is relative to the rotation argument
public void AddNewMovement(Vector3 vec)
{
- m_perfMonMS = Util.EnvironmentTickCount();
-
Vector3 direc = vec * Rotation;
direc.Normalize();
@@ -2379,8 +2374,6 @@ namespace OpenSim.Region.Framework.Scenes
// TODO: Add the force instead of only setting it to support multiple forces per frame?
m_forceToApply = direc;
-
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
#endregion
@@ -2443,8 +2436,6 @@ namespace OpenSim.Region.Framework.Scenes
// server.
if (remoteClient.IsActive)
{
- m_perfMonMS = Util.EnvironmentTickCount();
-
Vector3 pos = m_pos;
pos.Z += Appearance.HipOffset;
@@ -2455,7 +2446,6 @@ namespace OpenSim.Region.Framework.Scenes
PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
| PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity);
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
m_scene.StatsReporter.AddAgentUpdates(1);
}
}
@@ -2496,14 +2486,11 @@ namespace OpenSim.Region.Framework.Scenes
|| Math.Abs(distanceError) > distanceErrorThreshold
|| velocidyDiff > 0.01f) // did velocity change from last update?
{
- m_perfMonMS = currentTick;
lastVelocitySentToAllClients = Velocity;
lastTerseUpdateToAllClientsTick = currentTick;
lastPositionSentToAllClients = OffsetPosition;
m_scene.ForEachClient(SendTerseUpdateToClient);
-
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
}
@@ -2524,9 +2511,7 @@ namespace OpenSim.Region.Framework.Scenes
public void SendCoarseLocationsDefault(UUID sceneId, ScenePresence p, List coarseLocations, List avatarUUIDs)
{
- m_perfMonMS = Util.EnvironmentTickCount();
ControllingClient.SendCoarseLocationUpdate(avatarUUIDs, coarseLocations);
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
///
@@ -2587,8 +2572,6 @@ namespace OpenSim.Region.Framework.Scenes
m_log.Warn("[SCENE PRESENCE] attempt to send avatar data from a child agent");
return;
}
-
- m_perfMonMS = Util.EnvironmentTickCount();
int count = 0;
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
@@ -2598,7 +2581,6 @@ namespace OpenSim.Region.Framework.Scenes
});
m_scene.StatsReporter.AddAgentUpdates(count);
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
///
@@ -2607,8 +2589,6 @@ namespace OpenSim.Region.Framework.Scenes
///
public void SendOtherAgentsAvatarDataToMe()
{
- m_perfMonMS = Util.EnvironmentTickCount();
-
int count = 0;
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
{
@@ -2625,7 +2605,6 @@ namespace OpenSim.Region.Framework.Scenes
});
m_scene.StatsReporter.AddAgentUpdates(count);
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
///
@@ -2654,8 +2633,6 @@ namespace OpenSim.Region.Framework.Scenes
m_log.Warn("[SCENE PRESENCE] attempt to send avatar data from a child agent");
return;
}
-
- m_perfMonMS = Util.EnvironmentTickCount();
int count = 0;
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
@@ -2668,7 +2645,6 @@ namespace OpenSim.Region.Framework.Scenes
});
m_scene.StatsReporter.AddAgentUpdates(count);
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
///
@@ -2678,7 +2654,6 @@ namespace OpenSim.Region.Framework.Scenes
public void SendOtherAgentsAppearanceToMe()
{
//m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} ({1})", Name, UUID);
- m_perfMonMS = Util.EnvironmentTickCount();
int count = 0;
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
@@ -2696,7 +2671,6 @@ namespace OpenSim.Region.Framework.Scenes
});
m_scene.StatsReporter.AddAgentUpdates(count);
- m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
///
diff --git a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
index 87dcdeea14..282b677ee5 100644
--- a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
+++ b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
@@ -37,6 +37,9 @@ namespace OpenSim.Region.Framework.Scenes
{
public class SimStatsReporter
{
+// private static readonly log4net.ILog m_log
+// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
public delegate void SendStatResult(SimStats stats);
public delegate void YourStatsAreWrong();
@@ -165,18 +168,9 @@ namespace OpenSim.Region.Framework.Scenes
#region various statistic googly moogly
- // Our FPS is actually 10fps, so multiplying by 5 to get the amount that people expect there
- // 0-50 is pretty close to 0-45
- float simfps = (int) ((m_fps * 5));
// save the reported value so there is something available for llGetRegionFPS
- lastReportedSimFPS = (float)simfps / statsUpdateFactor;
+ lastReportedSimFPS = (float)m_fps / statsUpdateFactor;
- //if (simfps > 45)
- //simfps = simfps - (simfps - 45);
- //if (simfps < 0)
- //simfps = 0;
-
- //
float physfps = ((m_pfps / 1000));
//if (physfps > 600)
@@ -197,7 +191,7 @@ namespace OpenSim.Region.Framework.Scenes
// 'statsUpdateFactor' is how often stats packets are sent in seconds. Used below to change
// values to X-per-second values.
- for (int i = 0; i<21;i++)
+ for (int i = 0; i < 21; i++)
{
sb[i] = new SimStatsPacket.StatBlock();
}
@@ -206,7 +200,7 @@ namespace OpenSim.Region.Framework.Scenes
sb[0].StatValue = (Single.IsNaN(m_timeDilation)) ? 0.1f : m_timeDilation ; //((((m_timeDilation + (0.10f * statsUpdateFactor)) /10) / statsUpdateFactor));
sb[1].StatID = (uint) Stats.SimFPS;
- sb[1].StatValue = simfps/statsUpdateFactor;
+ sb[1].StatValue = m_fps/statsUpdateFactor;
sb[2].StatID = (uint) Stats.PhysicsFPS;
sb[2].StatValue = physfps / statsUpdateFactor;
@@ -272,7 +266,8 @@ namespace OpenSim.Region.Framework.Scenes
SimStats simStats
= new SimStats(
- ReportingRegion.RegionLocX, ReportingRegion.RegionLocY, regionFlags, (uint)m_objectCapacity, rb, sb, m_scene.RegionInfo.originRegionID);
+ ReportingRegion.RegionLocX, ReportingRegion.RegionLocY, regionFlags, (uint)m_objectCapacity,
+ rb, sb, m_scene.RegionInfo.originRegionID);
handlerSendStatResult = OnSendStatsResult;
if (handlerSendStatResult != null)
@@ -395,30 +390,32 @@ namespace OpenSim.Region.Framework.Scenes
{
m_frameMS += ms;
}
+
public void addNetMS(int ms)
{
m_netMS += ms;
}
+
public void addAgentMS(int ms)
{
m_agentMS += ms;
}
+
public void addPhysicsMS(int ms)
{
m_physicsMS += ms;
}
+
public void addImageMS(int ms)
{
m_imageMS += ms;
}
+
public void addOtherMS(int ms)
{
m_otherMS += ms;
}
-// private static readonly log4net.ILog m_log
-// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
-
public void AddPendingDownloads(int count)
{
m_pendingDownloads += count;
@@ -455,12 +452,6 @@ namespace OpenSim.Region.Framework.Scenes
AddOutPackets(outPackets);
AddunAckedBytes(unAckedBytes);
}
-
- public void AddAgentTime(int ms)
- {
- addFrameMS(ms);
- addAgentMS(ms);
- }
#endregion
}
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
index 6e603e8f4f..2da922bce0 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
@@ -2651,8 +2651,6 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
//base.TriggerPhysicsBasedRestart();
//}
- int i = 0;
-
// Figure out the Frames Per Second we're going at.
//(step_time == 0.004f, there's 250 of those per second. Times the step time/step size
@@ -2810,7 +2808,6 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
}
step_time -= ODE_STEPSIZE;
- i++;
//}
//else
//{
diff --git a/OpenSim/Region/UserStatistics/WebStatsModule.cs b/OpenSim/Region/UserStatistics/WebStatsModule.cs
index 3139b8ade1..9d87c4502d 100644
--- a/OpenSim/Region/UserStatistics/WebStatsModule.cs
+++ b/OpenSim/Region/UserStatistics/WebStatsModule.cs
@@ -58,7 +58,7 @@ namespace OpenSim.Region.UserStatistics
private static SqliteConnection dbConn;
private Dictionary m_sessions = new Dictionary();
- private List m_scene = new List();
+ private List m_scenes = new List();
private Dictionary reports = new Dictionary();
private Dictionary m_simstatsCounters = new Dictionary();
private const int updateStatsMod = 6;
@@ -71,25 +71,17 @@ namespace OpenSim.Region.UserStatistics
public virtual void Initialise(Scene scene, IConfigSource config)
{
- IConfig cnfg;
- try
- {
- cnfg = config.Configs["WebStats"];
+ IConfig cnfg = config.Configs["WebStats"];
+
+ if (cnfg != null)
enabled = cnfg.GetBoolean("enabled", false);
- }
- catch (Exception)
- {
- enabled = false;
- }
if (!enabled)
- {
return;
- }
- lock (m_scene)
+ lock (m_scenes)
{
- if (m_scene.Count == 0)
+ if (m_scenes.Count == 0)
{
//IConfig startupConfig = config.Configs["Startup"];
@@ -115,22 +107,19 @@ namespace OpenSim.Region.UserStatistics
reports.Add("clients.report", clientReport);
reports.Add("sessions.report", sessionsReport);
-
-
////
// Add Your own Reports here (Do Not Modify Lines here Devs!)
////
////
// End Own reports section
- ////
-
+ ////
MainServer.Instance.AddHTTPHandler("/SStats/", HandleStatsRequest);
MainServer.Instance.AddHTTPHandler("/CAPS/VS/", HandleUnknownCAPSRequest);
}
- m_scene.Add(scene);
+ m_scenes.Add(scene);
if (m_simstatsCounters.ContainsKey(scene.RegionInfo.RegionID))
m_simstatsCounters.Remove(scene.RegionInfo.RegionID);
@@ -214,7 +203,7 @@ namespace OpenSim.Region.UserStatistics
repParams["DatabaseConnection"] = dbConn;
- repParams["Scenes"] = m_scene;
+ repParams["Scenes"] = m_scenes;
repParams["SimStats"] = m_simstatsCounters;
repParams["LogLines"] = m_loglines;
repParams["Reports"] = reports;
@@ -265,7 +254,6 @@ namespace OpenSim.Region.UserStatistics
CreateTables(db);
}
}
-
}
public void CreateTables(SqliteConnection db)
@@ -277,8 +265,6 @@ namespace OpenSim.Region.UserStatistics
createcmd.ExecuteNonQuery();
}
-
-
public virtual void PostInitialise()
{
if (!enabled)
@@ -297,7 +283,7 @@ namespace OpenSim.Region.UserStatistics
dbConn.Close();
dbConn.Dispose();
m_sessions.Clear();
- m_scene.Clear();
+ m_scenes.Clear();
reports.Clear();
m_simstatsCounters.Clear();
}
@@ -333,10 +319,10 @@ namespace OpenSim.Region.UserStatistics
protected virtual void AddHandlers()
{
- lock (m_scene)
+ lock (m_scenes)
{
- updateLogMod = m_scene.Count * 2;
- foreach (Scene scene in m_scene)
+ updateLogMod = m_scenes.Count * 2;
+ foreach (Scene scene in m_scenes)
{
scene.EventManager.OnRegisterCaps += OnRegisterCaps;
scene.EventManager.OnDeregisterCaps += OnDeRegisterCaps;
@@ -376,15 +362,11 @@ namespace OpenSim.Region.UserStatistics
}
}
-
-
-
public void OnMakeChildAgent(ScenePresence agent)
{
}
-
public void OnClientClosed(UUID agentID, Scene scene)
{
lock (m_sessions)
@@ -394,7 +376,6 @@ namespace OpenSim.Region.UserStatistics
m_sessions.Remove(agentID);
}
}
-
}
public string readLogLines(int amount)
@@ -433,14 +414,13 @@ namespace OpenSim.Region.UserStatistics
fs.Close();
fs.Dispose();
return encoding.GetString(buffer);
-
}
public UUID GetRegionUUIDFromHandle(ulong regionhandle)
{
- lock (m_scene)
+ lock (m_scenes)
{
- foreach (Scene scene in m_scene)
+ foreach (Scene scene in m_scenes)
{
if (scene.RegionInfo.RegionHandle == regionhandle)
return scene.RegionInfo.RegionID;
@@ -448,6 +428,7 @@ namespace OpenSim.Region.UserStatistics
}
return UUID.Zero;
}
+
///
/// Callback for a viewerstats cap
///
@@ -523,8 +504,6 @@ namespace OpenSim.Region.UserStatistics
usd = uid.session_data;
-
-
if (message.Type != OSDType.Map)
return new UserSessionID();
@@ -699,7 +678,6 @@ namespace OpenSim.Region.UserStatistics
}
}
-
}
#region SQL
@@ -824,6 +802,7 @@ set session_id=:session_id,
WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key";
#endregion
}
+
public static class UserSessionUtil
{
public static UserSessionData newUserSessionData()
@@ -941,7 +920,6 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
return result / cnt;
}
-
public static float ArrayMode_f(float[] arr)
{
List mode = new List();
@@ -995,10 +973,8 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
}
return mode.ToArray()[0];
-
}
-
public static int ArrayMode_i(int[] arr)
{
List mode = new List();
@@ -1052,7 +1028,6 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
}
return mode.ToArray()[0];
-
}
#endregion
@@ -1178,7 +1153,6 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
public List _sim_fps;
public List _agents_in_view;
}
-
#endregion
@@ -1263,5 +1237,4 @@ WHERE session_id=:session_key AND agent_id=:agent_key AND region_id=:region_key"
m_scriptLinesPerSecond = stats.StatsBlock[20].StatValue;
}
}
-
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Services/Interfaces/IUserAccountService.cs b/OpenSim/Services/Interfaces/IUserAccountService.cs
index 20414f6550..cadf297cad 100644
--- a/OpenSim/Services/Interfaces/IUserAccountService.cs
+++ b/OpenSim/Services/Interfaces/IUserAccountService.cs
@@ -44,6 +44,17 @@ namespace OpenSim.Services.Interfaces
PrincipalID = principalID;
}
+ public UserAccount(UUID scopeID, string firstName, string lastName, string email)
+ {
+ PrincipalID = UUID.Random();
+ ScopeID = scopeID;
+ FirstName = firstName;
+ LastName = lastName;
+ Email = email;
+ ServiceURLs = new Dictionary();
+ Created = Util.UnixTimeSinceEpoch();
+ }
+
public UserAccount(UUID scopeID, UUID principalID, string firstName, string lastName, string email)
{
PrincipalID = principalID;