Пример #1
0
        public object FindUserTxtr(string name)
        {
            if (txtrs == null)
            {
                this.LoadSkinImages();
            }
            if (txtrs == null)
            {
                return(null);
            }

            name = name.ToLower();
            SimPe.Plugin.Txtr txtr = (SimPe.Plugin.Txtr)txtrs[name];
            if (txtr == null)
            {
                txtr = (SimPe.Plugin.Txtr)txtrs[name + "_txtr"];
            }
            if (txtr == null)
            {
                return(null);
            }

            if (txtr.Fast)
            {
                txtr.Fast = false;
                SimPe.Packages.File fl = SimPe.Packages.File.LoadFromFile(txtr.Package.FileName);
                Interfaces.Files.IPackedFileDescriptor pfd = fl.FindFile(txtr.FileDescriptor.Type, txtr.FileDescriptor.SubType, txtr.FileDescriptor.Group, txtr.FileDescriptor.Instance);
                txtr.ProcessData(pfd, fl);
                //fl.Reader.Close();
            }

            return(txtr);
        }
Пример #2
0
        public object FindTxtr(string name)
        {
            if (name == null)
            {
                return(null);
            }
            string file = System.IO.Path.Combine(SimPe.PathProvider.Global[Expansions.BaseGame].InstallFolder, "TSData\\Res\\Sims3D\\Sims07.package");

            if (System.IO.File.Exists(file))
            {
                SimPe.Interfaces.Files.IPackageFile      package = SimPe.Packages.File.LoadFromFile(file);
                Interfaces.Files.IPackedFileDescriptor[] pfds    = package.FindFile(name, 0x1C4A276C);

                //look for the right one
                foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds)
                {
                    SimPe.Plugin.Txtr rcol = new SimPe.Plugin.Txtr(null, false);
                    rcol.ProcessData(pfd, package);
                    if (rcol.FileName.Trim().ToLower() == name.Trim().ToLower())
                    {
                        return(rcol);
                    }
                }
            }

            return(null);
        }
Пример #3
0
        /// <summary>
        /// Fix all links
        /// </summary>
        public string Fix(string family, uint group, ref int ct, Hashtable matdrep, Hashtable txtrrep, ArrayList guids)
        {
            //make sure the references are loaded
            txtr = TXTR;

            string groups = "#0x" + Helper.HexString(group) + "!";

            groups = "##0x1c050000!";
            MMAT.GetSaveItem("family").StringValue = family;
            string matdname = Hashes.StripHashFromName(MMAT.GetSaveItem("name").StringValue) + "_" + family;

            if (matdrep[MMAT.GetSaveItem("name").StringValue] == null)
            {
                matdrep.Add(MMAT.GetSaveItem("name").StringValue, groups + matdname);
                MMAT.GetSaveItem("name").StringValue = groups + matdname;
            }
            else
            {
                MMAT.GetSaveItem("name").StringValue = (string)matdrep[MMAT.GetSaveItem("name").StringValue];
            }

            //make sure we use a supported GUID
            if (guids.Count > 0)
            {
                if (!guids.Contains(MMAT.GetSaveItem("objectGUID").UIntegerValue))
                {
                    MMAT.GetSaveItem("objectGUID").UIntegerValue = (uint)guids[0];
                }
            }

            MMAT.GetSaveItem("defaultMaterial").BooleanValue = false;
            MMAT.FileDescriptor.Instance = (uint)(0x4000 + ct++);
            MMAT.FileDescriptor.Group    = 0xffffffff;

            string txtrname = groups + "_" + family;
            string org      = "";

            if (MATD != null)
            {
                MaterialDefinition md = (MaterialDefinition)MATD.Blocks[0];
                md.FileDescription = matdname;
                MATD.FileName      = groups + matdname + "_txmt";
                SimPe.Packages.PackedFileDescriptor matdpfd = new PackedFileDescriptor();

                matdpfd.Type              = MATD.FileDescriptor.Type;
                MATD.FileDescriptor       = matdpfd;
                MATD.FileDescriptor.Group = 0x1c050000;                 //group; //0x1C0532FA;

                MATD.FileDescriptor.Instance = Hashes.InstanceHash(Hashes.StripHashFromName(MATD.FileName));
                MATD.FileDescriptor.SubType  = Hashes.SubTypeHash(Hashes.StripHashFromName(MATD.FileName));

                org = TxtrRef;
                string realtxtrname = "";                 //Hashes.StripHashFromName(md.GetProperty("stdMatBaseTextureName").Value);
                if (TXTR != null)
                {
                    realtxtrname = Hashes.StripHashFromName(TXTR.FileName);
                    if (realtxtrname.Length > 5)
                    {
                        realtxtrname = realtxtrname.Substring(0, realtxtrname.Length - 5);
                    }
                }

                //we foudn a texture
                if (realtxtrname.Trim() != "")
                {
                    txtrname = realtxtrname + "_" + family;
                    if (txtrrep[realtxtrname] == null)
                    {
                        txtrrep.Add(realtxtrname, txtrname);
                        txtrrep.Add(txtrname, txtrname);
                    }
                    else
                    {
                        txtrname = (string)txtrrep[realtxtrname];
                    }

                    md.GetProperty("stdMatBaseTextureName").Value = /*groups +*/ Hashes.StripHashFromName(txtrname);

                    string[] files = new string[1];
                    files[0]   = /*groups +*/ Hashes.StripHashFromName(txtrname);
                    md.Listing = files;
                }
            }


            if (TXTR != null)
            {
                TXTR.FileName = groups + txtrname + "_txtr";
                SimPe.Packages.PackedFileDescriptor txtrpfd = new PackedFileDescriptor();

                txtrpfd.Type              = TXTR.FileDescriptor.Type;
                TXTR.FileDescriptor       = txtrpfd;
                TXTR.FileDescriptor.Group = 0x1c050000;                 //group; //0x1C0532FA;

                TXTR.FileDescriptor.Instance = Hashes.InstanceHash(Hashes.StripHashFromName(TXTR.FileName));
                TXTR.FileDescriptor.SubType  = Hashes.SubTypeHash(Hashes.StripHashFromName(TXTR.FileName));
            }

            return(org);
        }
Пример #4
0
        protected void LoadSkinImageFormPackage(SimPe.Interfaces.Files.IPackageFile package)
        {
            Interfaces.Files.IPackedFileDescriptor[] pfds = package.FindFiles(0xAC506764);
            foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds)
            {
                try
                {
                    SimPe.Plugin.RefFile reffile = new SimPe.Plugin.RefFile();
                    reffile.ProcessData(pfd, package);
                    refs.Add(reffile);
                }
                catch (Exception) {}
            }

            pfds = package.FindFiles(0x49596978);
            foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds)
            {
                try
                {
                    SimPe.Plugin.Rcol matd = new SimPe.Plugin.GenericRcol(null, true);
                    matd.ProcessData(pfd, package);
                    matds.Add(matd);
                }
                catch (Exception) {}
            }

            //Material Files
            Interfaces.Files.IPackedFileDescriptor[] nmap_pfd = package.FindFiles(Data.MetaData.NAME_MAP);
            pfds = package.FindFiles(0x49596978);
            Plugin.Nmap nmap = new SimPe.Plugin.Nmap(null);
            if (nmap_pfd.Length > 0)
            {
                nmap.ProcessData(nmap_pfd[0], package);
            }
            bool check = false;

            foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds)
            {
                try
                {
                    SimPe.Plugin.Rcol matd = new SimPe.Plugin.GenericRcol(null, true);
                    check = false;

                    foreach (Interfaces.Files.IPackedFileDescriptor epfd in nmap.Items)
                    {
                        if (
                            (epfd.Group == pfd.Group) &&
                            (epfd.Instance == pfd.Instance)
                            )
                        {
                            matd.FileDescriptor = pfd;
                            matd.Package        = package;
                            matds.Add(matd);
                            check = true;
                        }
                    }

                    //not found in the FileMap, so process Normally
                    if (!check)
                    {
                        matd.ProcessData(pfd, package);
                        matds.Add(matd);
                    }
                }
                catch (Exception) {}
            }

            //Texture Files
            nmap_pfd = package.FindFiles(Data.MetaData.NAME_MAP);
            pfds     = package.FindFiles(0x1C4A276C);
            check    = false;

            foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds)
            {
                try
                {
                    SimPe.Plugin.Txtr txtr = new SimPe.Plugin.Txtr(null, true);
                    check = false;

                    foreach (Interfaces.Files.IPackedFileDescriptor epfd in nmap.Items)
                    {
                        if (
                            (epfd.Group == pfd.Group) &&
                            (epfd.Instance == pfd.Instance)
                            )
                        {
                            txtr.FileDescriptor = pfd;
                            txtr.Package        = package;
                            txtrs.Add(epfd.Filename, txtr);
                            continue;
                        }
                    }

                    //not found in the FileMap, so process Normally
                    if (!check)
                    {
                        txtr.ProcessData(pfd, package);
                        foreach (SimPe.Plugin.ImageData id in txtr.Blocks)
                        {
                            txtrs.Add(id.NameResource.FileName.ToLower(), txtr);
                        }
                    }
                }
                catch (Exception) {}
            }
        }