private void LoadMaps() { var mapFile = MAPS_D2P_DIRECTORY + "maps0.d2p"; // put this in const field string eleFile = MAPS_D2P_DIRECTORY + "elements.ele"; if (!File.Exists(mapFile)) { return; } logger.White("Loading Maps from d2p..."); EleReader eleReader = new EleReader(eleFile); Elements elements = eleReader.ReadElements(); D2pFile d2p = new D2pFile(mapFile); var datas = d2p.ReadAllFiles(); UpdateLogger m_logger = new UpdateLogger(); int x = 0; foreach (var data in datas) { DlmReader mapReader = new DlmReader(new MemoryStream(data.Value)); mapReader.DecryptionKey = SqlSyncConfiguration.Instance.MapKey; ReadMap(mapReader, elements); //elements x++; m_logger.Update(x.Percentage(datas.Count) + "%"); } }
public TextureManager() { m_textures = new Dictionary <int, Texture>(); ele = new EleReader(AppDomain.CurrentDomain.BaseDirectory + @"data\maps\elements.ele"); instance = ele.ReadElements(); Init(); }
public static void Initialize() { if (m_gfxFile != null) { return; } m_gfxFile = new D2pFile(Settings.LoaderSettings.WorldGfxFile); m_eleReader = new EleReader(Settings.LoaderSettings.WorldEleFile); m_elements = m_eleReader.ReadElements(); }
static void Main(string[] args) { List <Test> list = new List <Test>(); MapsManager.Initialize(@"E:\Jeux\Ankama\Dofus\app\content\maps"); I18nDataManager.Instance.AddReaders(@"E:\Jeux\Ankama\Dofus\app\data\i18n"); ObjectDataManager.Initialize(@"E:\Jeux\Ankama\Dofus\app\data\common"); EleReader elementManager = new EleReader(@"E:\Jeux\Ankama\Dofus\app\content\maps\elements.ele"); var instance = elementManager.ReadElements(); var maps = MapsManager.ParseAllMaps(); int i = 0; foreach (var map in maps) { Console.Title = "triages de tiles : " + i.ToString() + @"/" + (maps.Count - 1).ToString(); var subArea = ObjectDataManager.Get <SubArea>(map.SubAreaId); var name = I18nDataManager.Instance.GetText((int)subArea.nameId); var area = ObjectDataManager.Get <Area>(subArea.areaId); var namel = I18nDataManager.Instance.GetText((int)area.nameId); if (!list.Any(x => x.Name == name)) { list.Add(new Test() { Name = name }); } var zone = list.First(x => x.Name == name); for (int j = 0; j <= 1; j++) // sols { if (!map.Layers.Any(x => x.LayerId == j)) { continue; } var layer = map.Layers.First(x => x.LayerId == j); foreach (var cell in layer.Cells) { foreach (var element in cell.Elements) { if (element is GraphicalElement) //test { var ele = instance.GraphicalDatas.FirstOrDefault(x => x.Value.Id == (element as GraphicalElement).ElementId).Value as NormalGraphicalElementData; if (ele == null) { continue; } if (!zone.Sols.Any(x => x == ele.Gfx)) { zone.Sols.Add(ele.Gfx); } } } } } for (int j = 2; j <= 3; j++) // sols { if (!map.Layers.Any(x => x.LayerId == j)) { continue; } var layer = map.Layers.First(x => x.LayerId == j); foreach (var cell in layer.Cells) { foreach (var element in cell.Elements) { if (element is GraphicalElement) //test { var ele = instance.GraphicalDatas.FirstOrDefault(x => x.Value.Id == (element as GraphicalElement).ElementId).Value as NormalGraphicalElementData; if (ele == null) { continue; } if (!zone.Objects.Any(x => x == ele.Gfx)) { zone.Objects.Add(ele.Gfx); } } } } } i++; } //} BigEndianWriter writer = new BigEndianWriter(); foreach (var zone in list) { writer.WriteUTF(zone.Name); writer.WriteInt(zone.Sols.Count); foreach (var tile in zone.Sols) { writer.WriteInt(tile); } writer.WriteInt(zone.Objects.Count); foreach (var tile in zone.Objects) { writer.WriteInt(tile); } } File.WriteAllBytes("Test.data", writer.Data); }
public static void LoadSpawns() { // Since 2.36 version there is the same interactive on different maps because of the 16/9 mode, we have to find the correct one Console.WriteLine("Generating interactive spawns"); var worldDatabase = Program.ConnectToWorld(); if (worldDatabase == null) { return; } worldDatabase.Database.Execute("DELETE FROM interactives_spawns"); worldDatabase.Database.Execute("ALTER TABLE interactives_spawns AUTO_INCREMENT=1"); string eleFilePath = Path.Combine(Program.FindDofusPath(), "content", "maps", "elements.ele"); string mapsfilePath = Path.Combine(Program.FindDofusPath(), "content", "maps", "maps0.d2p"); var eleFile = new EleReader(eleFilePath); var eleInstance = eleFile.ReadElements(); var d2pFile = new D2pFile(mapsfilePath); var entries = d2pFile.ReadAllFiles(); var i = 0; var ids = new List <int>(); var failures = new List <int>(); var spawns = new Dictionary <int, InteractiveSpawn>(); var elementsGlobal = new Dictionary <int, DlmGraphicalElement>(); var identifiableElementsByMap = new Dictionary <int, List <IdentifiableElement> >(); int fails = 0; Console.WriteLine("Loading maps ... "); Program.InitializeCounter(); foreach (var mapBytes in entries.Values) { DlmReader mapFile; DlmMap map = null; try { mapFile = new DlmReader(mapBytes) { DecryptionKey = Program.MapDecryptionKey }; map = mapFile.ReadMap(); } catch (Exception) { fails++; continue; } var elements = (from layer in map.Layers from cell in layer.Cells from element in cell.Elements.OfType <DlmGraphicalElement>() where element.Identifier != 0 let point = new MapPoint(cell.Id) select new IdentifiableElement(element, map)).ToList(); identifiableElementsByMap.Add(map.Id, elements); Program.UpdateCounter(i++, entries.Count); } Program.EndCounter(); var identifiableElements = identifiableElementsByMap.Values.SelectMany(x => x). GroupBy(x => x.Element.Identifier).ToDictionary(x => x.Key, x => x.ToList()); Program.InitializeCounter(); i = 0; // every elements grouped by the same id foreach (var keyPair in identifiableElements) { var likelyElement = keyPair.Value.Where(x => !x.Ignore) .OrderByDescending(x => DistanceFromBorder(new MapPoint(x.Element.Cell.Id))) .ThenBy(x => Math.Abs(x.Element.PixelOffset.X) + Math.Abs(x.Element.PixelOffset.Y)).First(); var eleElement = eleInstance.GraphicalDatas[(int)likelyElement.Element.ElementId]; InteractiveSpawn spawn; spawn = new InteractiveSpawn { Id = (int)likelyElement.Element.Identifier, MapId = likelyElement.Map.Id, CellId = likelyElement.Element.Cell.Id, Animated = eleElement is AnimatedGraphicalElementData || eleElement is EntityGraphicalElementData, ElementId = (int)likelyElement.Element.ElementId }; if (ids.Contains(spawn.Id)) { Console.WriteLine($"Id {spawn.Id} already added"); failures.Add(spawn.Id); continue; } ids.Add(spawn.Id); worldDatabase.Database.Insert("interactives_spawns", "Id", false, spawn); spawns.Add(spawn.Id, spawn); elementsGlobal.Add(spawn.Id, likelyElement.Element); Program.UpdateCounter(i++, identifiableElements.Count); } Program.EndCounter(); if (fails > 0) { Console.WriteLine($"{fails} failes !"); } Program.ExecutePatch("./Patchs/interactives_spawns_patch.sql", worldDatabase.Database); }