Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim

integration
Melanie 2012-08-24 00:16:58 +01:00
commit 1747030d19
3 changed files with 80 additions and 1 deletions

View File

@ -2895,6 +2895,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
}); });
} }
public LSL_Float osGetHealth(string avatar)
{
CheckThreatLevel(ThreatLevel.None, "osGetHealth");
m_host.AddScriptLPS(1);
LSL_Float health = new LSL_Float(-1);
ScenePresence presence = World.GetScenePresence(new UUID(avatar));
if (presence != null) health = presence.Health;
return health;
}
public void osCauseDamage(string avatar, double damage) public void osCauseDamage(string avatar, double damage)
{ {
@ -3333,5 +3344,55 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return new LSL_Key(m_host.ParentGroup.FromPartID.ToString()); return new LSL_Key(m_host.ParentGroup.FromPartID.ToString());
} }
public void osRezDuplicate(LSL_Vector offset, LSL_Rotation rot)
{
CheckThreatLevel(ThreatLevel.High, "osRezDuplicate");
m_host.AddScriptLPS(1);
Vector3 v = new Vector3((float)offset.x, (float)offset.y, (float)offset.z);
Quaternion r = new Quaternion(
(float)rot.x,
(float)rot.y,
(float)rot.z,
(float)rot.s
);
Vector3 destination = m_host.ParentGroup.AbsolutePosition + v;
if (!World.Permissions.CanRezObject(
m_host.ParentGroup.PrimCount,
m_host.OwnerID,
destination
))
{
OSSLShoutError("Cannot duplicate object to destination, owner cannot rez objects at destination parcel.");
ScriptSleep(100);
}
else
{
SceneObjectGroup duplicate = World.SceneGraph.DuplicateObject(
m_host.ParentGroup.LocalId,
v,
m_host.ParentGroup.RootPart.GetEffectiveObjectFlags(),
m_host.OwnerID,
m_host.GroupID,
r
);
m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams(
"object_rez", new Object[] {
new LSL_String(
duplicate.RootPart.UUID.ToString()) },
new DetectParams[0]));
ScriptSleep(100);
m_ScriptEngine.PostObjectEvent(duplicate.LocalId, new EventParams(
"on_rez", new Object[]{
new LSL_Integer(0)},
new DetectParams[0]));
}
}
} }
} }

View File

@ -258,6 +258,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
int osGetSimulatorMemory(); int osGetSimulatorMemory();
void osKickAvatar(string FirstName,string SurName,string alert); void osKickAvatar(string FirstName,string SurName,string alert);
void osSetSpeed(string UUID, LSL_Float SpeedModifier); void osSetSpeed(string UUID, LSL_Float SpeedModifier);
LSL_Float osGetHealth(string avatar);
void osCauseHealing(string avatar, double healing); void osCauseHealing(string avatar, double healing);
void osCauseDamage(string avatar, double damage); void osCauseDamage(string avatar, double damage);
LSL_List osGetPrimitiveParams(LSL_Key prim, LSL_List rules); LSL_List osGetPrimitiveParams(LSL_Key prim, LSL_List rules);
@ -305,5 +306,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
/// </summary> /// </summary>
/// <returns>Rezzing object key or NULL_KEY if rezzed by agent or otherwise unknown.</returns> /// <returns>Rezzing object key or NULL_KEY if rezzed by agent or otherwise unknown.</returns>
LSL_Key osGetRezzingObject(); LSL_Key osGetRezzingObject();
/// <summary>
/// Duplicates an object as if the owner duplicated it.
/// </summary>
/// <param name="offset"></param>
/// <param name="rot"></param>
void osRezDuplicate(vector offset, rotation rot);
} }
} }

View File

@ -865,7 +865,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
{ {
m_OSSL_Functions.osSetSpeed(UUID, SpeedModifier); m_OSSL_Functions.osSetSpeed(UUID, SpeedModifier);
} }
public LSL_Float osGetHealth(string avatar)
{
return m_OSSL_Functions.osGetHealth(avatar);
}
public void osCauseDamage(string avatar, double damage) public void osCauseDamage(string avatar, double damage)
{ {
m_OSSL_Functions.osCauseDamage(avatar, damage); m_OSSL_Functions.osCauseDamage(avatar, damage);
@ -950,5 +955,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
{ {
return m_OSSL_Functions.osGetRezzingObject(); return m_OSSL_Functions.osGetRezzingObject();
} }
public void osRezDuplicate(vector offset, rotation rot)
{
m_OSSL_Functions.osRezDuplicate(offset, rot);
}
} }
} }