Пример #1
0
        public bool EnableChildAgentsForRegion(GridRegion requestingRegion)
        {
            int              count           = 0;
            bool             informed        = true;
            INeighborService neighborService = m_registry.RequestModuleInterface <INeighborService>();

            if (neighborService != null)
            {
                List <GridRegion> neighbors = neighborService.GetNeighbors(requestingRegion, 0);

                foreach (GridRegion neighbor in neighbors)
                {
                    //m_log.WarnFormat("--> Going to send child agent to {0}, new agent {1}", neighbour.RegionName, newAgent);

                    IRegionCapsService regionCaps = m_registry.RequestModuleInterface <ICapsService>().GetCapsForRegion(neighbor.RegionHandle);
                    if (regionCaps == null) //If there isn't a region caps, there isn't an agent in this sim
                    {
                        continue;
                    }
                    List <UUID> usersInformed = new List <UUID>();
                    foreach (IRegionClientCapsService regionClientCaps in regionCaps.GetClients())
                    {
                        if (usersInformed.Contains(regionClientCaps.AgentID)) //Only inform agents once
                        {
                            continue;
                        }

                        AgentCircuitData regionCircuitData = regionClientCaps.CircuitData.Copy();
                        regionCircuitData.child = true; //Fix child agent status
                        string reason;                  //Tell the region about it
                        if (!InformClientOfNeighbor(regionClientCaps.AgentID, requestingRegion.RegionHandle,
                                                    regionCircuitData, requestingRegion, (uint)TeleportFlags.Default, null, out reason))
                        {
                            informed = false;
                        }
                        else
                        {
                            usersInformed.Add(regionClientCaps.AgentID);
                        }
                    }
                    count++;
                }
            }
            return(informed);
        }
Пример #2
0
        /// <summary>
        ///   Get all agent locations for the given region
        /// </summary>
        /// <param name = "X"></param>
        /// <param name = "Y"></param>
        /// <param name = "regionHandle"></param>
        /// <returns></returns>
        private List <mapItemReply> GetItems(int X, int Y, ulong regionHandle)
        {
            GridRegion region = GetRegionByPosition(UUID.Zero, X, Y);

            //if the region is down or doesn't exist, don't check it
            if (region == null || region.Access == (byte)SimAccess.Down ||
                region.Access == (byte)SimAccess.NonExistent)
            {
                return(new List <mapItemReply>());
            }

            ICapsService capsService = m_registryCore.RequestModuleInterface <ICapsService>();

            if (capsService == null)
            {
                return(new List <mapItemReply>());
            }

            IRegionCapsService regionCaps = capsService.GetCapsForRegion(regionHandle);

            if (regionCaps == null)
            {
                return(new List <mapItemReply>());
            }

            Dictionary <Vector3, int> Positions = new Dictionary <Vector3, int>();

            //Get a list of all the clients in the region and add them
            foreach (IRegionClientCapsService clientCaps in regionCaps.GetClients())
            {
                //Only root agents!
                if (clientCaps.RootAgent)
                {
                    //Normalize the positions to 5 meter blocks so that agents stack instead of cover up each other
                    Vector3 position = new Vector3(NormalizePosition(clientCaps.LastPosition.X),
                                                   NormalizePosition(clientCaps.LastPosition.Y), 0);
                    int Number = 0;
                    //Find the number of agents currently at this position
                    if (!Positions.TryGetValue(position, out Number))
                    {
                        Number = 0;
                    }
                    Number++;
                    Positions[position] = Number;
                }
            }
            //Build the mapItemReply blocks
#if (!ISWIN)
            List <mapItemReply> mapItems = new List <mapItemReply>();
            foreach (KeyValuePair <Vector3, int> kvp in Positions)
            {
                mapItems.Add(new mapItemReply
                {
                    x =
                        (uint)
                        (region.RegionLocX + kvp.Key.X),
                    y =
                        (uint)
                        (region.RegionLocY + kvp.Key.Y),
                    id   = UUID.Zero,
                    name =
                        Util.Md5Hash(region.RegionName +
                                     Environment.TickCount.
                                     ToString()),
                    Extra  = kvp.Value,
                    Extra2 = 0
                });
            }
#else
            List <mapItemReply> mapItems = Positions.Select(position => new mapItemReply
            {
                x =
                    (uint)
                    (region.RegionLocX + position.Key.X),
                y =
                    (uint)
                    (region.RegionLocY + position.Key.Y),
                id   = UUID.Zero,
                name =
                    Util.Md5Hash(region.RegionName +
                                 Environment.TickCount.
                                 ToString()),
                Extra  = position.Value,
                Extra2 = 0
            }).ToList();
#endif

            //If there are no agents, we send one blank one to the client
            if (mapItems.Count == 0)
            {
                mapItemReply mapitem = new mapItemReply
                {
                    x      = (uint)(region.RegionLocX + 1),
                    y      = (uint)(region.RegionLocY + 1),
                    id     = UUID.Zero,
                    name   = Util.Md5Hash(region.RegionName + Environment.TickCount.ToString()),
                    Extra  = 0,
                    Extra2 = 0
                };
                mapItems.Add(mapitem);
            }
            return(mapItems);
        }
Пример #3
0
        public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest,
                                                OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator)
        {
            var vars = new Dictionary <string, object>();

            if (httpRequest.Query.ContainsKey("regionid"))
            {
                GridRegion region = webInterface.Registry.RequestModuleInterface <IGridService>().GetRegionByUUID(null,
                                                                                                                  UUID.Parse(httpRequest.Query["regionid"].ToString()));

                IEstateConnector estateConnector = Aurora.DataManager.DataManager.RequestPlugin <IEstateConnector>();
                EstateSettings   estate          = estateConnector.GetEstateSettings(region.RegionID);

                vars.Add("RegionName", region.RegionName);
                vars.Add("OwnerUUID", estate.EstateOwner);
                vars.Add("OwnerName", webInterface.Registry.RequestModuleInterface <IUserAccountService>().
                         GetUserAccount(null, estate.EstateOwner).Name);
                vars.Add("RegionLocX", region.RegionLocX / Constants.RegionSize);
                vars.Add("RegionLocY", region.RegionLocY / Constants.RegionSize);
                vars.Add("RegionSizeX", region.RegionSizeX);
                vars.Add("RegionSizeY", region.RegionSizeY);
                vars.Add("RegionType", region.RegionType);
                vars.Add("RegionOnline", (region.Flags & (int)Aurora.Framework.RegionFlags.RegionOnline) == (int)Aurora.Framework.RegionFlags.RegionOnline ?
                         translator.GetTranslatedString("Online") : translator.GetTranslatedString("Offline"));

                ICapsService       capsService = webInterface.Registry.RequestModuleInterface <ICapsService>();
                IRegionCapsService regionCaps  = capsService != null?capsService.GetCapsForRegion(region.RegionHandle) : null;

                if (regionCaps != null)
                {
                    vars.Add("NumberOfUsersInRegion", regionCaps.GetClients().Count);
                    List <Dictionary <string, object> > users = new List <Dictionary <string, object> >();
                    foreach (var client in regionCaps.GetClients())
                    {
                        Dictionary <string, object> user = new Dictionary <string, object>();
                        user.Add("UserNameText", translator.GetTranslatedString("UserNameText"));
                        user.Add("UserUUID", client.AgentID);
                        user.Add("UserName", client.ClientCaps.AccountInfo.Name);
                        users.Add(user);
                    }
                    vars.Add("UsersInRegion", users);
                }
                else
                {
                    vars.Add("NumberOfUsersInRegion", 0);
                    vars.Add("UsersInRegion", new List <Dictionary <string, object> >());
                }
                IDirectoryServiceConnector directoryConnector = Aurora.DataManager.DataManager.RequestPlugin <IDirectoryServiceConnector>();
                if (directoryConnector != null)
                {
                    List <LandData> data = directoryConnector.GetParcelsByRegion(0, 10, region.RegionID, UUID.Zero, ParcelFlags.None, ParcelCategory.Any);
                    List <Dictionary <string, object> > parcels = new List <Dictionary <string, object> >();
                    foreach (var p in data)
                    {
                        Dictionary <string, object> parcel = new Dictionary <string, object>();
                        parcel.Add("ParcelNameText", translator.GetTranslatedString("ParcelNameText"));
                        parcel.Add("ParcelOwnerText", translator.GetTranslatedString("ParcelOwnerText"));
                        parcel.Add("ParcelUUID", p.InfoUUID);
                        parcel.Add("ParcelName", p.Name);
                        parcel.Add("ParcelOwnerUUID", p.OwnerID);
                        IUserAccountService accountService = webInterface.Registry.RequestModuleInterface <IUserAccountService>();
                        if (accountService != null)
                        {
                            var account = accountService.GetUserAccount(null, p.OwnerID);
                            if (account == null)
                            {
                                parcel.Add("ParcelOwnerName", translator.GetTranslatedString("NoAccountFound"));
                            }
                            else
                            {
                                parcel.Add("ParcelOwnerName", account.Name);
                            }
                        }
                        parcels.Add(parcel);
                    }
                    vars.Add("ParcelInRegion", parcels);
                    vars.Add("NumberOfParcelsInRegion", parcels.Count);
                }
                IWebHttpTextureService webTextureService = webInterface.Registry.
                                                           RequestModuleInterface <IWebHttpTextureService>();
                if (webTextureService != null && region.TerrainMapImage != UUID.Zero)
                {
                    vars.Add("RegionImageURL", webTextureService.GetTextureURL(region.TerrainMapImage));
                }
                else
                {
                    vars.Add("RegionImageURL", "images/icons/no_picture.jpg");
                }

                // Menu Region
                vars.Add("MenuRegionTitle", translator.GetTranslatedString("MenuRegionTitle"));
                vars.Add("MenuParcelTitle", translator.GetTranslatedString("MenuParcelTitle"));
                vars.Add("MenuOwnerTitle", translator.GetTranslatedString("MenuOwnerTitle"));

                vars.Add("RegionInformationText", translator.GetTranslatedString("RegionInformationText"));
                vars.Add("OwnerNameText", translator.GetTranslatedString("OwnerNameText"));
                vars.Add("RegionLocationText", translator.GetTranslatedString("RegionLocationText"));
                vars.Add("RegionSizeText", translator.GetTranslatedString("RegionSizeText"));
                vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText"));
                vars.Add("RegionTypeText", translator.GetTranslatedString("RegionTypeText"));
                vars.Add("RegionInfoText", translator.GetTranslatedString("RegionInfoText"));
                vars.Add("RegionOnlineText", translator.GetTranslatedString("RegionOnlineText"));
                vars.Add("NumberOfUsersInRegionText", translator.GetTranslatedString("NumberOfUsersInRegionText"));
                vars.Add("ParcelsInRegionText", translator.GetTranslatedString("ParcelsInRegionText"));

                // Style Switcher
                vars.Add("styles1", translator.GetTranslatedString("styles1"));
                vars.Add("styles2", translator.GetTranslatedString("styles2"));
                vars.Add("styles3", translator.GetTranslatedString("styles3"));
                vars.Add("styles4", translator.GetTranslatedString("styles4"));
                vars.Add("styles5", translator.GetTranslatedString("styles5"));

                vars.Add("StyleSwitcherStylesText", translator.GetTranslatedString("StyleSwitcherStylesText"));
                vars.Add("StyleSwitcherLanguagesText", translator.GetTranslatedString("StyleSwitcherLanguagesText"));
                vars.Add("StyleSwitcherChoiceText", translator.GetTranslatedString("StyleSwitcherChoiceText"));

                // Language Switcher
                vars.Add("en", translator.GetTranslatedString("en"));
                vars.Add("fr", translator.GetTranslatedString("fr"));
                vars.Add("de", translator.GetTranslatedString("de"));
                vars.Add("it", translator.GetTranslatedString("it"));
                vars.Add("es", translator.GetTranslatedString("es"));
            }

            return(vars);
        }