Beispiel #1
0
        public PlaceInstanceTerrainDetails[,,] GetTerrainDetails()
        {
            PlaceInstanceTerrainDetails[,,] result;

            lock (_terrainDetailsLock)
            {
                result = new PlaceInstanceTerrainDetails[_terrainDetails.GetLength(0), _terrainDetails.GetLength(1), _terrainDetails.GetLength(2)];

                for (int z = 0; z < _terrainDetails.GetLength(2); z++)
                {
                    for (int y = 0; y < _terrainDetails.GetLength(1); y++)
                    {
                        for (int x = 0; x < _terrainDetails.GetLength(0); x++)
                        {
                            if (_terrainDetails[x, y, z] != null)
                            {
                                result[x, y, z] = _terrainDetails[x, y, z].Copy();
                            }
                            else
                            {
                                result[x, y, z] = null;
                            }
                        }
                    }
                }
            }

            return(result);
        }
Beispiel #2
0
        private BoxedData FillTerrainDetails(List <DbTerrainObjectsData> terrainDataList)
        {
            BoxedData data    = new BoxedData();
            bool      success = false;
            string    msg     = "";

            try
            {
                int  toId;
                int  wmId;
                int  localPosX;
                int  localPosY;
                int  localPosZ;
                int  todId;
                int  parentId;
                bool isParentalTeleport;
                bool isExit;
                DbTerrainObjectDefinitions terrainDefinition;

                lock (_terrainDetailsLock)
                {
                    foreach (DbTerrainObjectsData terrainData in terrainDataList)
                    {
                        toId               = terrainData.ToId;
                        wmId               = terrainData.WmId;
                        localPosX          = terrainData.LocalPosX;
                        localPosY          = terrainData.LocalPosY;
                        localPosZ          = terrainData.LocalPosZ;
                        todId              = terrainData.TodId;
                        parentId           = terrainData.ParentId;
                        isParentalTeleport = terrainData.IsParentalTeleport;
                        isExit             = terrainData.IsExit;
                        terrainDefinition  = (todId > -1 ? GetTerrainDefinition(todId) : null);

                        if
                        (
                            localPosX < 0 || localPosX >= _terrainDetails.GetLength(0) ||
                            localPosY < 0 || localPosY >= _terrainDetails.GetLength(1) ||
                            localPosZ < 0 || localPosZ >= _terrainDetails.GetLength(2)
                        )
                        {
                            continue;
                        }

                        //Console.WriteLine($"Terrain details - wm_id [{wmId}] local pos [{localPosX}, {localPosY}, {localPosZ}] parent [{parentId}] is TP [{isParentalTeleport}] exit [{isExit}]");
                        _terrainDetails[localPosX, localPosY, localPosZ] = new PlaceInstanceTerrainDetails
                                                                           (
                            toId,
                            wmId,
                            localPosX,
                            localPosY,
                            localPosZ,
                            parentId,
                            isParentalTeleport,
                            isExit,
                            terrainDefinition
                                                                           );

                        if (isExit)
                        {
                            _exitElementsIndexList.Add(Tuple.Create(localPosX, localPosY, localPosZ));
                        }
                    }
                }

                success = true;
            }
            catch (Exception exception)
            {
                msg = $"Error - terrain details filling - place instance ID [{this.PlaceInstanceId}]: {exception.Message}";
            }

            data.Data = success;
            data.Msg  = msg;
            return(data);
        }