예제 #1
0
파일: LSL_Api.cs 프로젝트: rknop/Aurora-Sim
        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();
            
        }
예제 #2
0
        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();
            
        }
예제 #3
0
        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());
        }