public static List <Frame> InputWz(WZFile wz, string inpath) { WZObject iwahz = wz.ResolvePath(inpath); WZSubProperty iwah = iwahz as WZSubProperty; if (iwah == null) { throw new ArgumentException("The path provided did not lead to an animation; check input-wzfile, input-wzpath and input-wzver"); } List <Frame> r = new List <Frame>(); foreach (WZObject iwzo in iwah) { WZCanvasProperty iwc = iwzo.ResolveUOL() as WZCanvasProperty; if (iwc == null) { continue; } int n; if (!int.TryParse(iwzo.Name, out n)) { continue; } r.Add(new Frame(n, new Bitmap(iwc.Value), ((WZPointProperty)iwc["origin"]).Value, iwc.HasChild("delay") ? Math.Max(iwc["delay"].ToInt(), 1) : 100)); iwc.Dispose(); } return(r.OrderBy(f => f.Number).ToList()); }
public static void LoadCursor(GraphicsDevice graphics, WZSubProperty cursor) { foreach (WZSubProperty ani in cursor) { Dictionary<int, MapleFrame> frames = new Dictionary<int, MapleFrame>(); foreach (WZObject frame in ani) if (frame is WZCanvasProperty) { Texture2D texture = Tools.BitmapToTexture(graphics, ((WZCanvasProperty)frame).Value); Vector2 offset = new Vector2(0, 0) ; int aniDelay = 100; foreach (WZObject offs in frame) if (offs is WZPointProperty && offs.Name == "origin") offset = new Vector2(((WZPointProperty)offs).Value.Y, ((WZPointProperty)offs).Value.X); else if (offs is WZInt32Property && offs.Name == "delay") aniDelay = ((WZInt32Property)offs).Value; frames.Add(int.Parse(frame.Name), new MapleFrame(new MapleCanvas(texture,offset), aniDelay)); } cursorFrames.Add(int.Parse(ani.Name), new MapleAnimation(frames)); } }
public ExtractDamageSkinNumbers(string fileName, string outputLocation) { int count = 0; //var dmgSkins = JsonConvert.DeserializeObject<List<DamageSkin>>(File.ReadAllText(jsonLocation)); WZFile xz = new WZFile(fileName, WZVariant.MSEA, false); WZSubProperty damageSkinNumberImg = (WZSubProperty)xz.MainDirectory["BasicEff.img"]["damageSkin"]; foreach (var numberType in damageSkinNumberImg) { Bitmap dmgSkinNumberPng = null; //foreach (var numberImg in numberType) //{ // foreach (var number in numberImg) // { // if (!(number is WZCanvasProperty)) // { // break; // } // WZCanvasProperty test = (WZCanvasProperty)number; // string[] pathNames = number.Path.Split('/'); // int itemId = 0; // if (numberType.HasChild("ItemID")) // { // itemId = numberType["ItemID"].ValueOrDefault<Int32>(Int32.Parse(pathNames[3])); // } // if (numberType["NoRed0"]["3"].HasChild("_inlink")) // { // break; // //string path = numberType["NoCri1"]["5"]["_inlink"].ValueOrDie<string>(); // //dmgSkinNumberPng = xz.ResolvePath($"BasicEff.img/{path}").ValueOrDie<Bitmap>(); // } // else // { // dmgSkinNumberPng = numberType["NoRed0"]["3"].ValueOrDie<Bitmap>(); // } // //Directory.CreateDirectory($@"{outputLocation}\"); // if (numberType.HasChild("ItemID")) // { // dmgSkinNumberPng.Save($@"{outputLocation}\{numberType.Name}_{itemId}.png", ImageFormat.Png); // } // else // { // dmgSkinNumberPng.Save($@"{outputLocation}\{numberType.Name}.png", ImageFormat.Png); // } // Console.WriteLine($"Exported damage skin - {pathNames[3]}"); // } //} if (numberType.HasChild("ItemID")) { Console.WriteLine("hi"); foreach (var numberImg in numberType) { foreach (var number in numberImg) { if (!(number is WZCanvasProperty)) { break; } WZCanvasProperty test = (WZCanvasProperty)number; string[] pathNames = number.Path.Split('/'); int itemId = numberType["ItemID"].ValueOrDefault <Int32>(Int32.Parse(pathNames[3])); if (number.HasChild("_inlink")) { break; string path = number["_inlink"].ValueOrDie <string>(); dmgSkinNumberPng = xz.ResolvePath($"BasicEff.img/{path}").ValueOrDie <Bitmap>(); } else { dmgSkinNumberPng = test.Value; } Directory.CreateDirectory($@"{outputLocation}\{pathNames[3]}_{itemId.ToString()}\{pathNames[4]}"); dmgSkinNumberPng.Save($@"{outputLocation}\{pathNames[3]}_{itemId.ToString()}\{pathNames[4]}\{pathNames[5]}.png", ImageFormat.Png); Console.WriteLine("Exported damage skin"); } } } else { foreach (var numberImg in numberType) { foreach (var number in numberImg) { if (!(number is WZCanvasProperty)) { break; } WZCanvasProperty test = (WZCanvasProperty)number; string[] pathNames = number.Path.Split('/'); if (number.HasChild("_inlink")) { string path = number["_inlink"].ValueOrDie <string>(); dmgSkinNumberPng = xz.ResolvePath($"BasicEff.img/{path}").ValueOrDie <Bitmap>(); } else { dmgSkinNumberPng = test.Value; } Directory.CreateDirectory($@"{outputLocation}\{pathNames[3]}\{pathNames[4]}"); dmgSkinNumberPng.Save($@"{outputLocation}\{pathNames[3]}\{pathNames[4]}\{pathNames[5]}.png", ImageFormat.Png); Console.WriteLine($"Exported damage skin - {pathNames[3]}"); } } } count++; } Console.WriteLine($"Successfully dumped {count.ToString()} number of damage skins"); Console.ReadKey(); }