예제 #1
0
        private void OnEstateTeleportOneUserHomeRequest(IClientAPI client, UUID invoice, UUID senderID, UUID prey, bool kick)
        {
            if (prey == UUID.Zero)
            {
                return;
            }

            if (!(client.Scene is Scene))
            {
                return;
            }

            Scene scene = (Scene)client.Scene;

            uint estateID = scene.RegionInfo.EstateSettings.EstateID;

            if (!scene.Permissions.CanIssueEstateCommand(client.AgentId, false))
            {
                return;
            }

            foreach (Scene s in Scenes)
            {
                if (s.RegionInfo.EstateSettings.EstateID != estateID)
                {
                    continue;
                }

                ScenePresence p = scene.GetScenePresence(prey);
                if (p != null && !p.IsChildAgent && !p.IsDeleted && !p.IsInTransit)
                {
                    if (kick)
                    {
                        p.ControllingClient.Kick("You have been kicked out");
                        s.CloseAgent(p.UUID, false);
                    }
                    else
                    {
                        p.ControllingClient.SendTeleportStart(16);
                        if (!s.TeleportClientHome(prey, client))
                        {
                            p.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed");
                            s.CloseAgent(p.UUID, false);
                        }
                    }
                    return;
                }
            }

            m_EstateConnector.SendTeleportHomeOneUser(estateID, prey);
        }
예제 #2
0
        private void OnEstateTeleportOneUserHomeRequest(IClientAPI client, UUID invoice, UUID senderID, UUID prey)
        {
            if (prey == UUID.Zero)
            {
                return;
            }

            if (!(client.Scene is Scene))
            {
                return;
            }

            Scene scene = (Scene)client.Scene;

            uint estateID = scene.RegionInfo.EstateSettings.EstateID;

            if (!scene.Permissions.CanIssueEstateCommand(client.AgentId, false))
            {
                return;
            }

            foreach (Scene s in Scenes)
            {
                if (s == scene)
                {
                    continue; // Already handles by estate module
                }
                if (s.RegionInfo.EstateSettings.EstateID != estateID)
                {
                    continue;
                }

                ScenePresence p = scene.GetScenePresence(prey);
                if (p != null && !p.IsChildAgent)
                {
                    p.ControllingClient.SendTeleportStart(16);
                    scene.TeleportClientHome(prey, p.ControllingClient);
                }
            }

            m_EstateConnector.SendTeleportHomeOneUser(estateID, prey);
        }