public LSL_Key llRequestAgentData(string id, int data)
{
if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) return "";
UUID uuid = (UUID)id;
UserInfo pinfo = null;
UserAccount account;
UserInfoCacheEntry ce;
if (!m_userInfoCache.TryGetValue(uuid, out ce))
{
account = World.UserAccountService.GetUserAccount(World.RegionInfo.AllScopeIDs, uuid);
if (account == null)
{
m_userInfoCache[uuid] = null; // Cache negative
return UUID.Zero.ToString();
}
ce = new UserInfoCacheEntry { time = Util.EnvironmentTickCount(), account = account };
pinfo = World.RequestModuleInterface<IAgentInfoService>().GetUserInfo(uuid.ToString());
ce.pinfo = pinfo;
m_userInfoCache[uuid] = ce;
}
else
{
if (ce == null)
{
return UUID.Zero.ToString();
}
account = ce.account;
pinfo = ce.pinfo;
}
if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000)
{
ce.time = Util.EnvironmentTickCount();
ce.pinfo = World.RequestModuleInterface<IAgentInfoService>().GetUserInfo(uuid.ToString());
pinfo = ce.pinfo;
}
string reply = String.Empty;
switch (data)
{
case 1: // DATA_ONLINE (0|1)
if (pinfo != null && pinfo.IsOnline)
reply = "1";
else
reply = "0";
break;
case 2: // DATA_NAME (First Last)
reply = account.Name;
break;
case 3: // DATA_BORN (YYYY-MM-DD)
DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0);
born = born.AddSeconds(account.Created);
reply = born.ToString("yyyy-MM-dd");
break;
case 4: // DATA_RATING (0,0,0,0,0,0)
reply = "0,0,0,0,0,0";
break;
case 8: // DATA_PAYINFO (0|1|2|3)
if ((account.UserFlags & ScriptBaseClass.PAYMENT_INFO_ON_FILE) == ScriptBaseClass.PAYMENT_INFO_ON_FILE)
reply = ScriptBaseClass.PAYMENT_INFO_ON_FILE.ToString();
if ((account.UserFlags & ScriptBaseClass.PAYMENT_INFO_USED) == ScriptBaseClass.PAYMENT_INFO_USED)
reply = ScriptBaseClass.PAYMENT_INFO_USED.ToString();
reply = "0";
break;
default:
return UUID.Zero.ToString(); // Raise no event
}
UUID rq = UUID.Random();
DataserverPlugin dataserverPlugin = (DataserverPlugin)m_ScriptEngine.GetScriptPlugin("Dataserver");
UUID tid = dataserverPlugin.RegisterRequest(m_host.UUID,
m_itemID, rq.ToString());
dataserverPlugin.AddReply(rq.ToString(), reply, 100);
ScriptSleep(200);
return tid.ToString();
}