Exemple #1
0
        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());
        }
Exemple #2
0
        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();
        }