public LSL_Key llRequestSimulatorData(string simulator, int data)
{
UUID tid = UUID.Zero;
try
{
if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) return "";
string reply = String.Empty;
GridRegion info = World.RegionInfo.RegionName == simulator
? new GridRegion(World.RegionInfo)
: World.GridService.GetRegionByName(World.RegionInfo.AllScopeIDs, simulator);
switch (data)
{
case 5: // DATA_SIM_POS
if (info == null)
break;
reply = new LSL_Vector(
info.RegionLocX,
info.RegionLocY,
0).ToString();
break;
case 6: // DATA_SIM_STATUS
if (info != null)
{
reply = (info.Flags & (int)Framework.RegionFlags.RegionOnline) != 0 ? "up" : "down";
}
//if() starting
//if() stopping
//if() crashed
else
reply = "unknown";
break;
case 7: // DATA_SIM_RATING
if (info == null)
break;
uint access = Util.ConvertAccessLevelToMaturity(info.Access);
if (access == 0)
reply = "PG";
else if (access == 1)
reply = "MATURE";
else if (access == 2)
reply = "ADULT";
else
reply = "UNKNOWN";
break;
case 128:
try
{
if (!ScriptProtection.CheckThreatLevel(ThreatLevel.High, "llRequestSimulatorData", m_host, "LSL", m_itemID)) return "";
reply = "Aurora";
}
catch
{
reply = "";
}
break;
}
if (reply != "")
{
UUID rq = UUID.Random();
DataserverPlugin dataserverPlugin = (DataserverPlugin)m_ScriptEngine.GetScriptPlugin("Dataserver");
tid = dataserverPlugin.RegisterRequest(m_host.UUID, m_itemID, rq.ToString());
dataserverPlugin.AddReply(rq.ToString(), reply, 1000);
}
}
catch
{
}
ScriptSleep(1000);
return (LSL_Key)tid.ToString();
}