예제 #1
0
        public readonly ResType ResType; //16 bit File type
        //uint ResId; // 32 bit Resource ID, starts at 0 and increments
        //ushort Unused; // 16 bit NULLs

        public ErfKeyFrame(ResRef resref, ResType resType)
        {
            ResRef = resref;
            //ResId = res_id;
            ResType = resType;
            //Unused = unused;
        }
예제 #2
0
            public void load(ref BinaryReaderBE reader, UInt32 mapOffset)
            {
                reader.BaseStream.Seek(mapOffset + 24, SeekOrigin.Begin);

                typeListOffset = reader.ReadInt16();
                nameListOffset = reader.ReadInt16();
                numTypes       = reader.ReadInt16();


                for (int i = 0; i <= numTypes; i++)
                {
                    Type type = new Type();
                    type.load(ref reader);
                    types.Add(type);
                }

                for (int t = 0; t < types.Count; t++)
                {
                    for (int r = 0; r < types[t].numRefs; r++)
                    {
                        ResRef resref = new ResRef();

                        resref.load(ref reader);
                        resref.type = types[t].type;
                        refs.Add(resref);
                    }
                }
            }
예제 #3
0
 public void Init(string name, string url, bool noCache = false)
 {
     assetbundleName = name;
     this.url        = url;
     this.noCache    = noCache;
     _resRef         = ResRef.Null;
     isOver          = false;
 }
예제 #4
0
 public void Start()
 {
     _resRef = ResManager.LoadObject("", this.url, true);
     if (_resRef == ResRef.Null)
     {
         Logger.LogError("New www failed!!!");
         isOver = true;
     }
     else
     {
         //Logger.Log("Downloading : " + url);
     }
 }
예제 #5
0
        public void Load(string path)
        {
            if (File.Exists(path))
            {
                if (Path.GetExtension(path) == Ext)
                {
                    var lBf = new List <BiffFile>();
                    var br  = new LatinBinaryReader(File.OpenRead(path));
                    var kh  = new KeyHeader(br);

                    br.Stream.Position = kh.OffsetToFileTable;
                    for (var i = 0; i < kh.BiffCount; i++)
                    {
                        br.Stream.Seek(sizeof(uint), SeekOrigin.Current);
                        var nameOffset = br.ReadUInt32();
                        var nameSize   = br.ReadUInt16();
                        br.Stream.Seek(sizeof(ushort), SeekOrigin.Current);

                        var pos = br.Stream.Position;
                        br.Stream.Position = nameOffset;
                        var name = new string(br.ReadChars(nameSize)).TrimEnd('\0').ToLower();
                        br.Stream.Position = pos;

                        lBf.Add(new BiffFile(Path.GetDirectoryName(path) + "/" + name));
                    }

                    br.Stream.Position = kh.OffsetToKeyTable;
                    for (var i = 0; i < kh.KeyCount; i++)
                    {
                        var resref = new ResRef(br.ReadChars(ResRef.Length));
                        br.Stream.Seek(sizeof(ushort), SeekOrigin.Current);
                        var rawid  = br.ReadUInt32();
                        var biffId = (int)(rawid >> BitShift);
                        var resId  = (int)(rawid - (biffId << BitShift));
                        var res    = lBf[biffId][resId];
                        Add(new ContentObject(lBf[biffId].FilePath, resref, res.ResType, res.Offset, res.Size));
                    }
                }
                else
                {
                    throw new ApplicationException("Le fichier n'est pas un fichier .key valide.");
                }
            }
            else
            {
                throw new ApplicationException("Le fichier n'existe pas.");
            }
        }
예제 #6
0
 internal unsafe void ApplyToNativeStructure(CNWSQuickbarButton button)
 {
     button.m_oidItem          = Item;
     button.m_oidSecondaryItem = SecondaryItem;
     button.m_nObjectType      = (byte)ObjectType;
     button.m_nMultiClass      = button.m_nMultiClass;
     button.m_cResRef          = ResRef != null ? new CResRef(ResRef.GetFixedLengthString(16)) : new CResRef();
     button.m_sCommandLabel    = CommandLabel.ToExoString();
     button.m_sCommandLine     = CommandLine.ToExoString();
     button.m_sToolTip         = ToolTip.ToExoString();
     button.m_nINTParam1       = Param1;
     button.m_nMetaType        = MetaType;
     button.m_nDomainLevel     = DomainLevel;
     button.m_nAssociateType   = (ushort)AssociateType;
     button.m_oidAssociate     = Associate;
 }
예제 #7
0
        public void Load(string path)
        {
            var br = new LatinBinaryReader(File.OpenRead(path));
            var h  = new ErfHeader(br);

            _lDesc = new Dictionary <uint, string>();

            var keys   = new List <ErfKeyFrame>();
            var values = new List <ErfResFrame>();

            br.Stream.Position = h.OffsetToLocalizedString;
            for (var i = 0; i < h.LanguageCount; i++)
            {
                var langId  = br.ReadUInt32();
                var strSize = br.ReadUInt32();
                var str     = new string(br.ReadChars((int)strSize)).TrimEnd('\0');
                _lDesc.Add(langId, str);
            }

            br.Stream.Position = h.OffsetToKeyList;

            for (var i = 0; i < h.EntryCount; i++)
            {
                var resref = new ResRef(br.ReadChars(ResRef.Length));
                br.ReadUInt32(); // ResId
                var restype = (ResType)br.ReadUInt16();
                br.ReadUInt16(); // Unused
                keys.Add(new ErfKeyFrame(resref, restype));
            }

            br.Stream.Position = h.OffsetToResourceList;

            for (var i = 0; i < h.EntryCount; i++)
            {
                values.Add(new ErfResFrame(br.ReadUInt32(), br.ReadUInt32()));
            }

            for (var i = 0; i < h.EntryCount; i++)
            {
                Add(new ContentObject(path, keys[i].ResRef, keys[i].ResType, values[i].OffsetToResource,
                                      values[i].ResourceSize));
            }
        }
예제 #8
0
        /// <summary>
        /// 加载 ab package 内包含的资源
        /// </summary>
        public void LoadRes()
        {
            // 已经加载过了
            if (_isLoaded)
            {
                return;
            }

            /// 加载 _resRef 依赖的资源
            for (int i = waitingList.Count - 1; i >= 0; i--)
            {
                /// 还的解析 assetname, 靠!!!
                var url = AssetBundleUtility.GetAssetBundleFileUrl(waitingList[i]);
                var r   = ResManager.LoadObject(waitingList[i], url, true);
                _resRefs.Add(r);
            }

            {
                // 对于package 来说, resRef 可能只hold bundle, object,加载不了因为 ……
                var url = AssetBundleUtility.GetAssetBundleFileUrl(assetbundleName);
                _resRef = ResManager.LoadObject(assetbundleName, url, true);
            }
            _isLoaded = true;
        }
예제 #9
0
            private static FIELD CreateNewField(BinaryReader br, int index, int fieldOffset, int dataOrDataOffset, GffFieldType fieldType)
            {
                FIELD data;

                switch (fieldType)
                {
                case GffFieldType.BYTE:
                    data = new BYTE(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.CHAR:
                    data = new CHAR(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.WORD:
                    data = new WORD(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.SHORT:
                    data = new SHORT(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.DWORD:
                    data = new DWORD(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.INT:
                    data = new INT(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.DWORD64:
                    data = new DWORD64(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.INT64:
                    data = new INT64(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.FLOAT:
                    data = new FLOAT(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.DOUBLE:
                    data = new DOUBLE(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.CExoString:
                    data = new CExoString(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.ResRef:
                    data = new ResRef(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.CExoLocString:
                    data = new CExoLocString(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.VOID:
                    data = new VOID(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.Struct:
                    int lbl_index = br.ReadInt32();
                    data = new STRUCT(br, br.ReadInt32(), lbl_index);
                    break;

                case GffFieldType.List:
                    data = new LIST(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.Orientation:
                    data = new Orientation(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.Vector:
                    data = new Vector(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.StrRef:
                    data = new StrRef(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                default:
                    throw new Exception(string.Format("UNEXPECTED FIELD TYPE \"{0}\", IN STRUCT INDEX \"{1}\"", fieldType, index));
                }

                return(data);
            }
예제 #10
0
 public void Parse(string value)
 {
     _resref = new ResRef(value);
 }
예제 #11
0
 public void Parse(GffField field)
 {
     _resref = new ResRef(LatinEncoding.Latin1.GetString(field.Bytes));
 }