Mantis5502 implementation of some of the new constants

Signed-off-by: Melanie <melanie@t-data.com>
0.7.4.1
Talun 2012-04-09 19:58:07 +01:00 committed by Melanie
parent 0f277dfa17
commit 78c0028179
6 changed files with 155 additions and 20 deletions

View File

@ -225,6 +225,16 @@ namespace OpenSim.Region.Framework.Interfaces
/// </summary></returns>
bool ContainsScripts();
/// <summary>
/// Returns the count of scripts contained
/// </summary></returns>
int ScriptCount();
/// <summary>
/// Returns the count of running scripts contained
/// </summary></returns>
int RunningScriptCount();
/// <summary>
/// Get the uuids of all items in this inventory
/// </summary>

View File

@ -69,6 +69,12 @@ namespace OpenSim.Region.Framework.Interfaces
ArrayList GetScriptErrors(UUID itemID);
/// <summary>
/// Returns true if a script is running.
/// </summary>
/// <param name="itemID">The item ID of the script.</param>
bool GetScriptState(UUID itemID);
void SaveAllState();
/// <summary>

View File

@ -3255,7 +3255,33 @@ namespace OpenSim.Region.Framework.Scenes
for (int i = 0; i < parts.Length; i++)
parts[i].TriggerScriptChangedEvent(val);
}
/// <summary>
/// Returns a count of the number of scripts in this groups parts.
/// </summary>
public int ScriptCount()
{
int count = 0;
SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++)
count += parts[i].Inventory.ScriptCount();
return count;
}
/// <summary>
/// Returns a count of the number of running scripts in this groups parts.
/// </summary>
public int RunningScriptCount()
{
int count = 0;
SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++)
count += parts[i].Inventory.RunningScriptCount();
return count;
}
public override string ToString()
{
return String.Format("{0} {1} ({2})", Name, UUID, AbsolutePosition);

View File

@ -1081,10 +1081,59 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
return false;
}
/// <summary>
/// Returns the count of scripts in this parts inventory.
/// </summary>
/// <returns></returns>
public int ScriptCount()
{
int count = 0;
lock (m_items)
{
foreach (TaskInventoryItem item in m_items.Values)
{
if (item.InvType == (int)InventoryType.LSL)
{
count++;
}
}
}
return count;
}
/// <summary>
/// Returns the count of running scripts in this parts inventory.
/// </summary>
/// <returns></returns>
public int RunningScriptCount()
{
IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
if (engines.Length == 0)
return 0;
int count = 0;
List<TaskInventoryItem> scripts = GetInventoryScripts();
foreach (TaskInventoryItem item in scripts)
{
foreach (IScriptModule engine in engines)
{
if (engine != null)
{
if (engine.GetScriptState(item.ItemID))
{
count++;
}
}
}
}
return count;
}
public List<UUID> GetInventoryList()
{
List<UUID> ret = new List<UUID>();

View File

@ -3418,6 +3418,44 @@ namespace OpenSim.Region.Framework.Scenes
return m_attachments.Count > 0;
}
/// <summary>
/// Returns the total count of scripts in all parts inventories.
/// </summary>
public int ScriptCount()
{
int count = 0;
lock (m_attachments)
{
foreach (SceneObjectGroup gobj in m_attachments)
{
if (gobj != null)
{
count += gobj.ScriptCount();
}
}
}
return count;
}
/// <summary>
/// Returns the total count of running scripts in all parts.
/// </summary>
public int RunningScriptCount()
{
int count = 0;
lock (m_attachments)
{
foreach (SceneObjectGroup gobj in m_attachments)
{
if (gobj != null)
{
count += gobj.RunningScriptCount();
}
}
}
return count;
}
public bool HasScriptedAttachments()
{
lock (m_attachments)

View File

@ -10358,19 +10358,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
break;
// For the following 8 see the Object version below
case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT:
ret.Add(new LSL_Integer(0));
ret.Add(new LSL_Integer(av.RunningScriptCount()));
break;
case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT:
ret.Add(new LSL_Integer(0));
ret.Add(new LSL_Integer(av.ScriptCount()));
break;
case ScriptBaseClass.OBJECT_SCRIPT_MEMORY:
ret.Add(new LSL_Integer(0));
ret.Add(new LSL_Integer(av.RunningScriptCount() * 16384));
break;
case ScriptBaseClass.OBJECT_SCRIPT_TIME:
ret.Add(new LSL_Float(0));
break;
case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE:
ret.Add(new LSL_Integer(0));
ret.Add(new LSL_Integer(1));
break;
case ScriptBaseClass.OBJECT_SERVER_COST:
ret.Add(new LSL_Float(0));
@ -10422,24 +10422,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case ScriptBaseClass.OBJECT_CREATOR:
ret.Add(new LSL_String(obj.CreatorID.ToString()));
break;
// The following 8 I have intentionaly coded to return zero. They are part of
// "Land Impact" calculations. These calculations are probably not applicable
// to OpenSim, required figures (cpu/memory usage) are not currently tracked
// I have intentionally left these all at zero rather than return possibly
// missleading numbers
case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT:
// in SL this currently includes crashed scripts
ret.Add(new LSL_Integer(0));
ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount()));
break;
case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT:
ret.Add(new LSL_Integer(0));
ret.Add(new LSL_Integer(obj.ParentGroup.ScriptCount()));
break;
case ScriptBaseClass.OBJECT_SCRIPT_MEMORY:
// The value returned in SL for mono scripts is 65536 * number of active scripts
ret.Add(new LSL_Integer(0));
// and 16384 * number of active scripts for LSO. since llGetFreememory
// is coded to give the LSO value use it here
ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount() * 16384));
break;
case ScriptBaseClass.OBJECT_SCRIPT_TIME:
// Average cpu time per simulator frame expended on all scripts in the objetc
// Average cpu time per simulator frame expended on all scripts in the object
// Not currently available at Object level
ret.Add(new LSL_Float(0));
break;
case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE:
@ -10447,18 +10444,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// equivalent of the number of prims in a linkset if it does not
// contain a mesh anywhere in the link set or is not a normal prim
// The value returned in SL for normal prims is prim count
ret.Add(new LSL_Integer(0));
ret.Add(new LSL_Integer(obj.ParentGroup.PrimCount));
break;
// The following 3 costs I have intentionaly coded to return zero. They are part of
// "Land Impact" calculations. These calculations are probably not applicable
// to OpenSim and are not yet complete in SL
case ScriptBaseClass.OBJECT_SERVER_COST:
// The value returned in SL for normal prims is prim count
// The linden calculation is here
// http://wiki.secondlife.com/wiki/Mesh/Mesh_Server_Weight
// The value returned in SL for normal prims looks like the prim count
ret.Add(new LSL_Float(0));
break;
case ScriptBaseClass.OBJECT_STREAMING_COST:
// The value returned in SL for normal prims is prim count * 0.06
// The linden calculation is here
// http://wiki.secondlife.com/wiki/Mesh/Mesh_Streaming_Cost
// The value returned in SL for normal prims looks like the prim count * 0.06
ret.Add(new LSL_Float(0));
break;
case ScriptBaseClass.OBJECT_PHYSICS_COST:
// The value returned in SL for normal prims is prim count
// The linden calculation is here
// http://wiki.secondlife.com/wiki/Mesh/Mesh_physics
// The value returned in SL for normal prims looks like the prim count
ret.Add(new LSL_Float(0));
break;
default: