using System.IO; using System.Linq; using System.Threading.Tasks; using Sandbox; using System.Text.Json; public static class UpdateCloths { private static string outputFolder = @"c:/users/hamit_ba31xcg/documents/s&box projects/sasalka/assets/items/cloth/"; [Menu( "Editor", "MyClothing/Generate .clitem Files" )] public static async void GenerateClitemFiles() { var packageResult = await Package.FindAsync( "type:clothing", 100 ); Directory.CreateDirectory( outputFolder ); foreach ( var package in packageResult.Packages ) { var clothUrl = package.Url.Replace( "https://sbox.game/", "" ); //package.Url; var imageUrl = package.Thumb; var fileName = $"{SanitizeFileName( package.Ident )}.clitem"; var filePath = Path.Combine( outputFolder, fileName ); if ( File.Exists( filePath ) ) continue; var itemObject = new { ClothUrl = clothUrl, Slot = "Body", Name = package.Title, Description = package.Description == "" ? package.Ident : package.Description, Prefab = new { _type = "gameobject", prefab = "prefabs/item_parcel.prefab" }, ImageTexture = (string)null, ImageUrl = imageUrl, MaxCount = 1, __references = new object[] { }, __version = 0 }; var json = JsonSerializer.Serialize( itemObject, new JsonSerializerOptions { WriteIndented = true } ); await File.WriteAllTextAsync( filePath, json ); } } private static string SanitizeFileName( string name ) { var invalidChars = Path.GetInvalidFileNameChars(); foreach ( var c in invalidChars ) { name = name.Replace( c, '_' ); } return name; } }