public static void PackWorld(string directoryName, Stream targetStream, Func <string, bool> filter, bool embedExternalContent) { WorldInfo worldInfo = GetWorldInfo(directoryName); if (worldInfo == null) { throw new InvalidOperationException("Directory does not contain a world."); } List <string> list = new List <string>(); RecursiveEnumerateDirectory(directoryName, list, null, filter); using (ZipArchive zipArchive = ZipArchive.Create(targetStream, keepStreamOpen: true)) { foreach (string item in list) { using (Stream source = Storage.OpenFile(item, OpenFileMode.Read)) { string fileName = Storage.GetFileName(item); zipArchive.AddStream(fileName, source); } } if (embedExternalContent) { if (!BlocksTexturesManager.IsBuiltIn(worldInfo.WorldSettings.BlocksTextureName)) { try { using (Stream source2 = Storage.OpenFile(BlocksTexturesManager.GetFileName(worldInfo.WorldSettings.BlocksTextureName), OpenFileMode.Read)) { string filenameInZip = Storage.CombinePaths("EmbeddedContent", Storage.GetFileNameWithoutExtension(worldInfo.WorldSettings.BlocksTextureName) + ".scbtex"); zipArchive.AddStream(filenameInZip, source2); } } catch (Exception ex) { Log.Warning($"Failed to embed blocks texture \"{worldInfo.WorldSettings.BlocksTextureName}\". Reason: {ex.Message}"); } } foreach (PlayerInfo playerInfo in worldInfo.PlayerInfos) { if (!CharacterSkinsManager.IsBuiltIn(playerInfo.CharacterSkinName)) { try { using (Stream source3 = Storage.OpenFile(CharacterSkinsManager.GetFileName(playerInfo.CharacterSkinName), OpenFileMode.Read)) { string filenameInZip2 = Storage.CombinePaths("EmbeddedContent", Storage.GetFileNameWithoutExtension(playerInfo.CharacterSkinName) + ".scskin"); zipArchive.AddStream(filenameInZip2, source3); } } catch (Exception ex2) { Log.Warning($"Failed to embed character skin \"{playerInfo.CharacterSkinName}\". Reason: {ex2.Message}"); } } } } } }
public IEnumerable <ActiveExternalContentInfo> GetActiveExternalContent() { string downloadedContentAddress = CommunityContentManager.GetDownloadedContentAddress(ExternalContentType.World, DirectoryName); if (!string.IsNullOrEmpty(downloadedContentAddress)) { yield return(new ActiveExternalContentInfo { Address = downloadedContentAddress, DisplayName = WorldSettings.Name, Type = ExternalContentType.World }); } if (!BlocksTexturesManager.IsBuiltIn(WorldSettings.BlocksTextureName)) { downloadedContentAddress = CommunityContentManager.GetDownloadedContentAddress(ExternalContentType.BlocksTexture, WorldSettings.BlocksTextureName); if (!string.IsNullOrEmpty(downloadedContentAddress)) { yield return(new ActiveExternalContentInfo { Address = downloadedContentAddress, DisplayName = BlocksTexturesManager.GetDisplayName(WorldSettings.BlocksTextureName), Type = ExternalContentType.BlocksTexture }); } } SubsystemPlayers subsystemPlayers = base.Project.FindSubsystem <SubsystemPlayers>(throwOnError: true); foreach (PlayerData playersDatum in subsystemPlayers.PlayersData) { if (!CharacterSkinsManager.IsBuiltIn(playersDatum.CharacterSkinName)) { downloadedContentAddress = CommunityContentManager.GetDownloadedContentAddress(ExternalContentType.CharacterSkin, playersDatum.CharacterSkinName); yield return(new ActiveExternalContentInfo { Address = downloadedContentAddress, DisplayName = CharacterSkinsManager.GetDisplayName(playersDatum.CharacterSkinName), Type = ExternalContentType.CharacterSkin }); } } SubsystemFurnitureBlockBehavior subsystemFurnitureBlockBehavior = base.Project.FindSubsystem <SubsystemFurnitureBlockBehavior>(throwOnError: true); foreach (FurnitureSet furnitureSet in subsystemFurnitureBlockBehavior.FurnitureSets) { if (furnitureSet.ImportedFrom != null) { downloadedContentAddress = CommunityContentManager.GetDownloadedContentAddress(ExternalContentType.FurniturePack, furnitureSet.ImportedFrom); yield return(new ActiveExternalContentInfo { Address = downloadedContentAddress, DisplayName = FurniturePacksManager.GetDisplayName(furnitureSet.ImportedFrom), Type = ExternalContentType.FurniturePack }); } } }
public void SpawnPlayer(Vector3 position, SpawnMode spawnMode) { ComponentMount componentMount = null; if (spawnMode != SpawnMode.Respawn && CheckIsPointInWater(Terrain.ToCell(position))) { Entity entity = DatabaseManager.CreateEntity(m_project, "Boat", throwIfNotFound: true); entity.FindComponent <ComponentBody>(throwOnError: true).Position = position; entity.FindComponent <ComponentBody>(throwOnError: true).Rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitY, MathUtils.DegToRad(45f)); componentMount = entity.FindComponent <ComponentMount>(throwOnError: true); m_project.AddEntity(entity); position.Y += entity.FindComponent <ComponentBody>(throwOnError: true).BoxSize.Y; } string value = ""; string value2 = ""; string value3 = ""; string value4 = ""; if (spawnMode != SpawnMode.Respawn) { if (PlayerClass == PlayerClass.Female) { if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("2")) { value = ""; value2 = MakeClothingValue(37, 2); value3 = MakeClothingValue(16, 14); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(27, 0); } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("3")) { value = MakeClothingValue(31, 0); value2 = MakeClothingValue(13, 7) + ";" + MakeClothingValue(5, 0); value3 = MakeClothingValue(17, 15); value4 = MakeClothingValue(29, 0); } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("4")) { value = MakeClothingValue(30, 7); value2 = MakeClothingValue(14, 6); value3 = MakeClothingValue(25, 7); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(8, 0); } else { value = MakeClothingValue(30, 12); value2 = MakeClothingValue(37, 3) + ";" + MakeClothingValue(1, 3); value3 = MakeClothingValue(0, 12); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(29, 0); } } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("2")) { value = ""; value2 = MakeClothingValue(13, 0) + ";" + MakeClothingValue(5, 0); value3 = MakeClothingValue(25, 8); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(29, 0); } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("3")) { value = MakeClothingValue(32, 0); value2 = MakeClothingValue(37, 5); value3 = MakeClothingValue(0, 15); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(8, 0); } else if (CharacterSkinsManager.IsBuiltIn(CharacterSkinName) && CharacterSkinName.Contains("4")) { value = MakeClothingValue(31, 0); value2 = MakeClothingValue(15, 14); value3 = MakeClothingValue(0, 0); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(8, 0); } else { value = MakeClothingValue(32, 0); value2 = MakeClothingValue(37, 0) + ";" + MakeClothingValue(1, 9); value3 = MakeClothingValue(0, 12); value4 = MakeClothingValue(26, 6) + ";" + MakeClothingValue(29, 0); } } ValuesDictionary overrides = new ValuesDictionary { { "Player", new ValuesDictionary { { "PlayerIndex", PlayerIndex } } }, { "Intro", new ValuesDictionary { { "PlayIntro", spawnMode == SpawnMode.InitialIntro } } }, { "Clothing", new ValuesDictionary { { "Clothes", new ValuesDictionary { { "Feet", value4 }, { "Legs", value3 }, { "Torso", value2 }, { "Head", value } } } } } }; Vector2 v = ComponentIntro.FindOceanDirection(m_subsystemTerrain.TerrainContentsGenerator, position.XZ); string entityTemplateName = (PlayerClass == PlayerClass.Male) ? "MalePlayer" : "FemalePlayer"; Entity entity2 = DatabaseManager.CreateEntity(m_project, entityTemplateName, overrides, throwIfNotFound: true); entity2.FindComponent <ComponentBody>(throwOnError: true).Position = position; entity2.FindComponent <ComponentBody>(throwOnError: true).Rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitY, Vector2.Angle(v, -Vector2.UnitY)); m_project.AddEntity(entity2); if (componentMount != null) { entity2.FindComponent <ComponentRider>(throwOnError: true).StartMounting(componentMount); } LastSpawnTime = m_subsystemGameInfo.TotalElapsedGameTime; int num = ++SpawnsCount; }
public void RandomizeCharacterSkin() { Random random = new Random(); CharacterSkinsManager.UpdateCharacterSkinsList(); string[] array = CharacterSkinsManager.CharacterSkinsNames.Where((string n) => CharacterSkinsManager.IsBuiltIn(n) && CharacterSkinsManager.GetPlayerClass(n) == m_playerClass).ToArray(); string[] second = SubsystemPlayers.PlayersData.Select((PlayerData pd) => pd.CharacterSkinName).ToArray(); string[] array2 = array.Except(second).ToArray(); if (array2.Length != 0) { CharacterSkinName = array2[random.Int(0, array2.Length - 1)]; } else { CharacterSkinName = array[random.Int(0, array.Length - 1)]; } }