internal static Landblock GetNewEphemeralLandblock(uint landcell, Player owner, List <ACE.Entity.Models.Realm> realmTemplates)
        {
            EphemeralRealm ephemeralRealm;

            lock (realmsLock)
                ephemeralRealm = EphemeralRealm.Initialize(owner, realmTemplates);
            var iid       = LandblockManager.GetFreeInstanceID(true, ephemeralRealm.RulesetTemplate.Realm.Id, (ushort)(landcell >> 16));
            var longcell  = ((ulong)iid << 32) | landcell;
            var landblock = LandblockManager.GetLandblock(longcell, false, false, ephemeralRealm);

            log.Info($"GetNewEphemeralLandblock created for player {owner.Name}, realm ruleset {ephemeralRealm.RulesetTemplate.Realm.Id}, longcell {longcell}.");
            return(landblock);
        }
Example #2
0
        /// <summary>
        /// Returns a reference to a landblock, loading the landblock if not already active
        /// </summary>
        public static Landblock GetLandblock(ulong objCellID, bool loadAdjacents, bool permaload = false, EphemeralRealm ephemeralRealm = null)
        {
            Landblock landblock;

            lock (landblockMutex)
            {
                bool setAdjacents = false;

                landblocks.TryGetValue(objCellID | 0xFFFF, out landblock);

                if (landblock == null)
                {
                    // load up this landblock
                    landblock = new Landblock(objCellID | 0xFFFF);
                    landblocks.Add(objCellID | 0xFFFF, landblock);

                    if (!loadedLandblocks.Add(landblock))
                    {
                        log.Error($"LandblockManager: failed to add {objCellID:X8} to active landblocks!");
                        return(landblock);
                    }

                    landblockGroupPendingAdditions.Add(landblock);

                    landblock.Init(false, ephemeralRealm);

                    setAdjacents = true;
                }

                if (permaload)
                {
                    landblock.Permaload = true;
                }

                // load adjacents, if applicable
                if (loadAdjacents)
                {
                    var adjacents = GetAdjacentIDs(landblock);
                    foreach (var adjacent in adjacents)
                    {
                        GetLandblock(adjacent, false, permaload, ephemeralRealm);
                    }

                    setAdjacents = true;
                }

                // cache adjacencies
                if (setAdjacents)
                {
                    SetAdjacents(landblock, true, true);
                }
            }

            return(landblock);
        }