コード例 #1
0
ファイル: WMORoot.cs プロジェクト: WowDevs/WoWMap
        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();
        }
コード例 #2
0
        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));
        }
コード例 #3
0
ファイル: WMOReader.cs プロジェクト: mastajappa/WoWFormatTest
        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);
        }
コード例 #4
0
 //+ 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;
コード例 #5
0
        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();
                }
        }