public void Read() { foreach (var subChunk in Data.Chunks) { switch (subChunk.Name) { case "MOHD": MOHD = new MOHD(subChunk); break; case "MOGN": MOGN = new MOGN(subChunk); break; case "MOGI": MOGI = new MOGI(subChunk); break; case "MODD": MODD = new MODD(subChunk); break; case "MODN": MODN = new MODN(subChunk); break; case "MODS": MODS = new MODS(subChunk); break; } } ReadGroups(); }
public static bool IsModLoaded(string modID) { if (modID.StartsWith("srml:")) { if (GuuCore.srmlBridge == null) { return(false); } string trueID = modID.Replace("srml:", ""); MethodInfo method = srmlLoaderBridge?.GetMethod("IsModLoaded", BindingFlags.NonPublic | BindingFlags.Static); object result = method?.Invoke(null, new object[] { trueID }); return(result != null && (bool)result); } if (modID.StartsWith("assem:")) { string trueID = modID.Replace("assem:", ""); return(IsAssemblyLoaded(trueID)); } return(MODS.ContainsKey(modID)); }
private MODS[] ReadMODSChunk(uint size, BinaryReader bin) { var numDoodadSets = size / 32; var doodadSets = new MODS[numDoodadSets]; for (var i = 0; i < numDoodadSets; i++) { doodadSets[i].setName = new string(bin.ReadChars(20)).Replace("\0", string.Empty); doodadSets[i].firstInstanceIndex = bin.ReadUInt32(); doodadSets[i].numDoodads = bin.ReadUInt32(); doodadSets[i].unused = bin.ReadUInt32(); } return(doodadSets); }
//+ INTERACTIONS /// <summary>Gets the mod context for the given mod ID. Or null if none if found</summary> public static ModContext GetModContext(string modID) => MODS.ContainsKey(modID) ? GetModContext(MODS[modID].Assembly) : null;
public void Read(byte[] data) { // Clear chunks to prevent double data. Chunks.Clear(); using (var stream = new MemoryStream(data)) using (var reader = new BinaryReader(stream)) { while (reader.BaseStream.Position < reader.BaseStream.Length) { var chunkId = (WMOChunkId)reader.ReadUInt32(); var chunkSize = reader.ReadUInt32(); var chunkData = new byte[chunkSize]; Buffer.BlockCopy(stream.ToArray(), (int)reader.BaseStream.Position, chunkData, 0, (int)chunkSize); IChunk chunk = null; switch (chunkId) { case WMOChunkId.MVER: chunk = new MVER(); break; case WMOChunkId.MOHD: chunk = new MOHD(); break; case WMOChunkId.MOTX: chunk = new MOTX(); break; case WMOChunkId.MOMT: chunk = new MOMT(); break; case WMOChunkId.MOGN: chunk = new MOGN(); break; case WMOChunkId.MOGI: chunk = new MOGI(); break; case WMOChunkId.MOPV: chunk = new MOPV(); break; case WMOChunkId.MOPT: chunk = new MOPT(); break; case WMOChunkId.MOPR: chunk = new MOPR(); break; case WMOChunkId.MOLT: chunk = new MOLT(); break; case WMOChunkId.MODS: chunk = new MODS(); break; case WMOChunkId.MODI: chunk = new MODI(); break; case WMOChunkId.MODD: chunk = new MODD(); break; case WMOChunkId.MFOG: chunk = new MFOG(); break; default: Console.WriteLine($"Skipping {chunkId} (0x{(uint)chunkId:X})"); break; } if (chunk != null) { chunk.Read(chunkData); Chunks.Add(chunk); } reader.BaseStream.Position += chunkSize; } // Add mandatory chunks. Chunks.Add(new MOSB()); Chunks.Add(new MOVV()); Chunks.Add(new MOVB()); // Close the streams so they can be written. reader.Close(); stream.Close(); } }