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); }
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); }