public LSL_Key llRequestAgentData(string id, int data) { ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL"); UUID uuid = (UUID)id; UserInfo pinfo = null; UserAccount account; UserInfoCacheEntry ce; if (!m_userInfoCache.TryGetValue(uuid, out ce)) { account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid); if (account == null) { m_userInfoCache[uuid] = null; // Cache negative return UUID.Zero.ToString(); } ce = new UserInfoCacheEntry(); ce.time = Util.EnvironmentTickCount(); ce.account = account; pinfo = World.RequestModuleInterface<IAgentInfoService>().GetUserInfo(uuid.ToString()); ce.pinfo = pinfo; m_userInfoCache[uuid] = ce; } else { if (ce == null) { return (LSL_Key)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 (LSL_Key) 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 (LSL_Key)tid.ToString(); }
public LSL_Key llRequestAgentData(string id, int data) { ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL"); UUID uuid = (UUID)id; PresenceInfo pinfo = null; UserAccount account; UserInfoCacheEntry ce; if (!m_userInfoCache.TryGetValue(uuid, out ce)) { account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid); if (account == null) { m_userInfoCache[uuid] = null; // Cache negative return UUID.Zero.ToString(); } PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); if (pinfos != null && pinfos.Length > 0) { foreach (PresenceInfo p in pinfos) { if (p.RegionID != UUID.Zero) { pinfo = p; } } } ce = new UserInfoCacheEntry(); ce.time = Util.EnvironmentTickCount(); ce.account = account; ce.pinfo = pinfo; } else { if (ce == null) { return (LSL_Key)UUID.Zero.ToString(); } account = ce.account; pinfo = ce.pinfo; } if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000) { PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); if (pinfos != null && pinfos.Length > 0) { foreach (PresenceInfo p in pinfos) { if (p.RegionID != UUID.Zero) { pinfo = p; } } } else pinfo = null; ce.time = Util.EnvironmentTickCount(); ce.pinfo = pinfo; } string reply = String.Empty; switch (data) { case 1: // DATA_ONLINE (0|1) if (pinfo != null && pinfo.RegionID != UUID.Zero) reply = "1"; else reply = "0"; break; case 2: // DATA_NAME (First Last) reply = account.FirstName + " " + account.LastName; 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) reply = "0"; break; default: return (LSL_Key) 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 (LSL_Key)tid.ToString(); }
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 userAcct; UserInfoCacheEntry ce; if (!m_userInfoCache.TryGetValue(uuid, out ce)) { userAcct = World.UserAccountService.GetUserAccount(World.RegionInfo.AllScopeIDs, uuid); if (!userAcct.Valid) { m_userInfoCache[uuid] = null; // Cache negative return(UUID.Zero.ToString()); } ce = new UserInfoCacheEntry { time = Util.EnvironmentTickCount(), account = userAcct }; pinfo = World.RequestModuleInterface <IAgentInfoService>().GetUserInfo(uuid.ToString()); ce.pinfo = pinfo; m_userInfoCache[uuid] = ce; } else { if (ce == null) { return(UUID.Zero.ToString()); } userAcct = 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 = userAcct.Name; break; case 3: // DATA_BORN (YYYY-MM-DD) DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0); born = born.AddSeconds(userAcct.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 ((userAcct.UserFlags & ScriptBaseClass.PAYMENT_INFO_ON_FILE) == ScriptBaseClass.PAYMENT_INFO_ON_FILE) { reply = ScriptBaseClass.PAYMENT_INFO_ON_FILE.ToString(); } if ((userAcct.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); PScriptSleep(m_sleepMsOnRequestAgentData); return(tid.ToString()); }