Exemplo n.º 1
0
        public static SwfDecompiledMap ReadSwfMap(string id, string mapid)
        {
            string           path       = (Constants.MapsPath + $"{id}" + "_" + $"{mapid}X.swf");
            SwfReader        Reader     = new SwfReader(path);
            Swf              swf        = Reader.ReadSwf();
            SwfDecompiledMap mapDatas   = null;
            IEnumerator      enumerator = swf.Tags.GetEnumerator();

            while (enumerator.MoveNext())
            {
                BaseTag current = (BaseTag)enumerator.Current;

                if (current.ActionRecCount != 0)
                {
                    string      sb = "";
                    IEnumerator currentenumerator = current.GetEnumerator();
                    while (currentenumerator.MoveNext())
                    {
                        Decompiler decompiler = new Decompiler(swf.Version);
                        ArrayList  actions    = decompiler.Decompile((byte[])currentenumerator.Current);

                        foreach (BaseAction obj in actions)
                        {
                            sb += obj.ToString();
                        }
                    }
                    mapDatas = ParseSwfMapDatas(sb);
                }
            }
            Reader.Close();
            return(mapDatas);
        }
Exemplo n.º 2
0
        public string GetBytesCode()
        {
            StringBuilder code   = new StringBuilder();
            SwfReader     Reader = new SwfReader(this.File);
            Swf           swf    = null;

            try
            {
                swf = Reader.ReadSwf();
            }
            catch (Exception Ex) { throw new Exception(Ex.ToString()); }

            IEnumerator enumerator = swf.Tags.GetEnumerator();

            while (enumerator.MoveNext())
            {
                BaseTag current = (BaseTag)enumerator.Current;
                if (current.ActionRecCount != 0)
                {
                    IEnumerator currentenumerator = current.GetEnumerator();
                    while (currentenumerator.MoveNext())
                    {
                        Decompiler decompiler = new Decompiler(swf.Version);
                        foreach (BaseAction action in decompiler.Decompile((byte[])currentenumerator.Current))
                        {
                            code.AppendLine(action.ToString());
                        }
                    }
                }
            }

            return(code.ToString());
        }
Exemplo n.º 3
0
        public static List <MapDatas> ReadListSwfMap(string id)
        {
            List <MapDatas> MapList = new List <MapDatas>();
            List <string>   Files   = Directory.GetFiles(Constants.MapsPath, "*.swf").ToList();

            Files = Files.Where(x => x.Contains("\\" + id)).ToList();
            SwfReader Reader;

            foreach (var mapFile in Files)
            {
                string path = mapFile;

                Reader = new SwfReader(path);
                Swf swf = Reader.ReadSwf();

                IEnumerator enumerator = swf.Tags.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    BaseTag current = (BaseTag)enumerator.Current;
                    if (current.ActionRecCount != 0)
                    {
                        string      sb = "";
                        IEnumerator currentenumerator = current.GetEnumerator();
                        while (currentenumerator.MoveNext())
                        {
                            Decompiler decompiler = new Decompiler(swf.Version);
                            ArrayList  actions    = decompiler.Decompile((byte[])currentenumerator.Current);

                            foreach (BaseAction obj in actions)
                            {
                                sb += obj.ToString();
                            }
                        }
                        SwfDecompiledMap content = ParseSwfMapDatas(sb);
                        content.DecypheredMapData = Hash.DecypherData(content.CypheredMapData, MapKeyCracker.MapCrackKey(content.CypheredMapData));
                        GlobalMapsInfos.First(x => x.Id == content.Id).SwfDatas.MapId = path.Substring(path.IndexOf(id) + id.Length + 1, path.IndexOf(".swf") - (path.IndexOf(id) + id.Length + 1));
                        GlobalMapsInfos.First(x => x.Id == content.Id).SwfDatas       = content;
                        MapList.Add(GlobalMapsInfos.First(x => x.SwfDatas == content));
                        sb = "";
                    }
                }
                Reader.Close();
                swf = null;
            }
            string firstValue = MapList.First().SwfDatas.DecypheredMapData;

            if (MapList.All(x => x.SwfDatas.DecypheredMapData == firstValue))
            {
                return new List <MapDatas>()
                       {
                           MapList.First()
                       }
            }
            ;
            return(MapList);
        }
Exemplo n.º 4
0
        public static void ReadSwfLang(string path)
        {
            //This part is dirty but there arent so much ressources about how to decompile langs, decompilation & reading takes more than12 secondes..
            StringHelper.WriteLine($"[DataManager] Reading maps lang ..", ConsoleColor.Cyan);
            SwfReader   Reader     = new SwfReader(path);
            Swf         swf        = Reader.ReadSwf();
            IEnumerator enumerator = swf.Tags.GetEnumerator();

            while (enumerator.MoveNext())
            {
                BaseTag current = (BaseTag)enumerator.Current;
                if (current.ActionRecCount != 0)
                {
                    string      sb = "";
                    IEnumerator currentenumerator = current.GetEnumerator();
                    while (currentenumerator.MoveNext())
                    {
                        Decompiler decompiler = new Decompiler(swf.Version);
                        ArrayList  actions    = decompiler.Decompile((byte[])currentenumerator.Current);

                        foreach (BaseAction obj in actions)
                        {
                            sb += obj.ToString();
                        }

                        //maps coords & subarea id
                        string          regex   = @"getMemberpush ([0-9]*?) as int push (-?[0-9]*?) as var push (-?[0-9]*?) as int push (-?[0-9]*?) as var push (-?[0-9]*?) as int push (-?[0-9]*?) as var push (-?[0-9]*?) as int";
                        MatchCollection matches = Regex.Matches(sb, regex);
                        foreach (Match match in matches)
                        {
                            GlobalMapsInfos.Add(new MapDatas(int.Parse(match.Groups[1].Value), int.Parse(match.Groups[3].Value), int.Parse(match.Groups[5].Value), int.Parse(match.Groups[7].Value)));
                        }
                        //area id
                        foreach (var map in GlobalMapsInfos.Where(x => x.AreaId == -1))
                        {
                            var regex2   = @"getMemberpush " + map.SubAreaId + " as int push (-?[0-9]*?) as var push (-?[0-9]*?) as var push (-?[0-9]*?) as var push (-?[0-9]*?) ";
                            var matches2 = Regex.Matches(sb, regex2);
                            foreach (Match match2 in matches2)
                            {
                                map.AreaId = int.Parse(match2.Groups[4].Value);
                            }
                        }
                        GC.Collect();
                        GC.WaitForPendingFinalizers();
                        sb = "";
                        Console.Write($"\r{DateTime.Now:[HH:mm:ss:fff]} [DataManager] {GlobalMapsInfos.Count()} maps loaded..");
                    }
                }
            }
            Reader.Close();
            swf = null;

            Console.Write("\n");
            StringHelper.WriteLine($"[DataManager] {GlobalMapsInfos.Count()} maps added to list !", ConsoleColor.Cyan);
            StringHelper.WriteLine("[DataManager] Map with undefinied AreaId : " + GlobalMapsInfos.Count(x => x.AreaId == -1), ConsoleColor.Blue);
        }