Mantis#2287. Thank you kindly, Idb for a patch that solves:
The current llGetLinkName returns an empty string if a prim with the given link number is not found in the link set. In SL an empty string is only returned if the prim name is actually blank, a NULL_KEY is returned instead with a couple of exceptions.0.6.0-stable
parent
4f0c759fb0
commit
6a863311f7
|
@ -3039,18 +3039,71 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The rules governing the returned name are not simple. The only
|
||||||
|
/// time a blank name is returned is if the target prim has a blank
|
||||||
|
/// name. If no prim with the given link number can be found then
|
||||||
|
/// usually NULL_KEY is returned but there are exceptions.
|
||||||
|
///
|
||||||
|
/// In a single unlinked prim, A call with 0 returns the name, all
|
||||||
|
/// other values for link number return NULL_KEY
|
||||||
|
///
|
||||||
|
/// In link sets it is more complicated.
|
||||||
|
///
|
||||||
|
/// If the script is in the root prim:-
|
||||||
|
/// A zero link number returns NULL_KEY.
|
||||||
|
/// Positive link numbers return the name of the prim, or NULL_KEY
|
||||||
|
/// if a prim does not exist at that position.
|
||||||
|
/// Negative link numbers return the name of the first child prim.
|
||||||
|
///
|
||||||
|
/// If the script is in a child prim:-
|
||||||
|
/// Link numbers 0 or 1 return the name of the root prim.
|
||||||
|
/// Positive link numbers return the name of the prim or NULL_KEY
|
||||||
|
/// if a prim does not exist at that position.
|
||||||
|
/// Negative numbers return the name of the root prim.
|
||||||
|
///
|
||||||
|
/// References
|
||||||
|
/// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetLinkName
|
||||||
|
/// Mentions NULL_KEY being returned
|
||||||
|
/// http://wiki.secondlife.com/wiki/LlGetLinkName
|
||||||
|
/// Mentions using the LINK_* constants, some of which are negative
|
||||||
|
/// </summary>
|
||||||
public LSL_String llGetLinkName(int linknum)
|
public LSL_String llGetLinkName(int linknum)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum);
|
|
||||||
if (part != null)
|
// simplest case, this prims link number
|
||||||
|
if (m_host.LinkNum == linknum)
|
||||||
|
return m_host.Name;
|
||||||
|
|
||||||
|
// Single prim
|
||||||
|
if (m_host.LinkNum == 0)
|
||||||
{
|
{
|
||||||
return part.Name;
|
if (linknum == 0)
|
||||||
}
|
return m_host.Name;
|
||||||
else
|
else
|
||||||
{
|
return UUID.Zero.ToString();
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
// Link set
|
||||||
|
SceneObjectPart part = null;
|
||||||
|
if (m_host.LinkNum == 1) // this is the Root prim
|
||||||
|
{
|
||||||
|
if (linknum < 0)
|
||||||
|
part = m_host.ParentGroup.GetLinkNumPart(2);
|
||||||
|
else
|
||||||
|
part = m_host.ParentGroup.GetLinkNumPart(linknum);
|
||||||
|
}
|
||||||
|
else // this is a child prim
|
||||||
|
{
|
||||||
|
if (linknum < 2)
|
||||||
|
part = m_host.ParentGroup.GetLinkNumPart(1);
|
||||||
|
else
|
||||||
|
part = m_host.ParentGroup.GetLinkNumPart(linknum);
|
||||||
|
}
|
||||||
|
if (part != null)
|
||||||
|
return part.Name;
|
||||||
|
else
|
||||||
|
return UUID.Zero.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Integer llGetInventoryNumber(int type)
|
public LSL_Integer llGetInventoryNumber(int type)
|
||||||
|
|
Loading…
Reference in New Issue