public bool Init(uint mapId) { FilenameChunk mwmo = GetChunk("MWMO")?.As <FilenameChunk>(); if (mwmo != null && mwmo.Filenames.Count > 0) { foreach (var filename in mwmo.Filenames) { wmoInstanceNames.Add(filename); VmapFile.ExtractSingleWmo(filename); } } MODF wmoChunk = GetChunk("MODF")?.As <MODF>(); if (wmoChunk != null && wmoChunk.MapObjDefs.Length > 0) { foreach (var wmo in wmoChunk.MapObjDefs) { if (wmo.Flags.HasAnyFlag(MODFFlags.EntryIsFileID)) { string fileName = $"FILE{wmo.Id:X8}.xxx"; VmapFile.ExtractSingleWmo(fileName); WMORoot.Extract(wmo, fileName, false, mapId, mapId, Program.DirBinWriter, null); if (VmapFile.WmoDoodads.ContainsKey(fileName)) { Model.ExtractSet(VmapFile.WmoDoodads[fileName], wmo, false, mapId, mapId, Program.DirBinWriter, null); } } else { WMORoot.Extract(wmo, wmoInstanceNames[(int)wmo.Id], false, mapId, mapId, Program.DirBinWriter, null); if (VmapFile.WmoDoodads.ContainsKey(wmoInstanceNames[(int)wmo.Id])) { Model.ExtractSet(VmapFile.WmoDoodads[wmoInstanceNames[(int)wmo.Id]], wmo, false, mapId, mapId, Program.DirBinWriter, null); } } } wmoInstanceNames.Clear(); } return(true); }
public bool Init(uint mapNum, uint originalMapId) { if (dirFileCache != null) { return(InitFromCache(mapNum, originalMapId)); } if (cacheable) { dirFileCache = new List <ADTOutputCache>(); } FilenameChunk mmdx = GetChunk("MMDX")?.As <FilenameChunk>(); if (mmdx != null && mmdx.Filenames.Count > 0) { foreach (var filename in mmdx.Filenames) { modelInstanceNames.Add(filename); VmapFile.ExtractSingleModel(filename); } } FilenameChunk mwmo = GetChunk("MWMO")?.As <FilenameChunk>(); if (mwmo != null && mwmo.Filenames.Count > 0) { foreach (var filename in mwmo.Filenames) { wmoInstanceNames.Add(filename); VmapFile.ExtractSingleWmo(filename); } } MDDF doodadChunk = GetChunk("MDDF")?.As <MDDF>(); if (doodadChunk != null && doodadChunk.DoodadDefs.Length > 0) { foreach (var doodad in doodadChunk.DoodadDefs) { if (doodad.Flags.HasAnyFlag(MDDFFlags.EntryIsFileID)) { string fileName = $"FILE{doodad.Id:X8}.xxx"; VmapFile.ExtractSingleModel(fileName); Model.Extract(doodad, fileName, mapNum, originalMapId, Program.DirBinWriter, dirFileCache); } else { Model.Extract(doodad, modelInstanceNames[(int)doodad.Id], mapNum, originalMapId, Program.DirBinWriter, dirFileCache); } } modelInstanceNames.Clear(); } MODF wmoChunk = GetChunk("MODF")?.As <MODF>(); if (wmoChunk != null && wmoChunk.MapObjDefs.Length > 0) { foreach (var wmo in wmoChunk.MapObjDefs) { if (wmo.Flags.HasAnyFlag(MODFFlags.EntryIsFileID)) { string fileName = $"FILE{wmo.Id:X8}.xxx"; VmapFile.ExtractSingleWmo(wmo.Id); WMORoot.Extract(wmo, fileName, false, mapNum, originalMapId, Program.DirBinWriter, dirFileCache); if (VmapFile.WmoDoodads.ContainsKey(fileName)) { Model.ExtractSet(VmapFile.WmoDoodads[fileName], wmo, false, mapNum, originalMapId, Program.DirBinWriter, dirFileCache); } } else { WMORoot.Extract(wmo, wmoInstanceNames[(int)wmo.Id], false, mapNum, originalMapId, Program.DirBinWriter, dirFileCache); if (VmapFile.WmoDoodads.ContainsKey(wmoInstanceNames[(int)wmo.Id])) { Model.ExtractSet(VmapFile.WmoDoodads[wmoInstanceNames[(int)wmo.Id]], wmo, false, mapNum, originalMapId, Program.DirBinWriter, dirFileCache); } } } wmoInstanceNames.Clear(); } return(true); }