Exemple #1
0
        /// <summary>
        /// Make sure the correct Face Structure is used (as desribed by Nukael)
        /// </summary>
        /// <remarks>http://www.modthesims2.com/showthread.php?t=56241</remarks>
        /// <param name="pkg">The package with the Face Data</param>
        public void UpdateFaceStructure(SimPe.Packages.GeneratableFile pkg)
        {
            SimPe.Interfaces.Files.IPackedFileDescriptor[] pfds   = pkg.FindFiles((uint)0xCCCEF852);           //LxNR, Face
            SimPe.Interfaces.Files.IPackedFileDescriptor   oldpfd = null;
            SimPe.Interfaces.Files.IPackedFileDescriptor   newpfd = null;

            uint oi = 1;
            uint ni = 2;

            foreach (SimPe.Interfaces.Files.IPackedFileDescriptor pfd in pfds)
            {
                if (pfd.Instance <= oi)
                {
                    oldpfd = pfd; oi = pfd.Instance;
                }
                if (pfd.Instance >= ni)
                {
                    newpfd = pfd; ni = pfd.Instance;
                }
            }

            if (oldpfd != null && newpfd != null)
            {
                SimPe.Interfaces.Files.IPackedFile pf = pkg.Read(newpfd);
                oldpfd.UserData = pf.UncompressedData;
                oldpfd.Changed  = true;
            }
        }
Exemple #2
0
        /// <summary>
        /// Create a 1:1 Clone based on the CRES Name
        /// </summary>
        /// <param name="cres"></param>
        /// <returns></returns>
        public static SimPe.Packages.GeneratableFile CreatCloneByCres(string cres)
        {
            SimPe.Packages.GeneratableFile         package = SimPe.Packages.GeneratableFile.CreateNew();
            SimPe.Interfaces.IAlias                a;
            Interfaces.Files.IPackedFileDescriptor pfd;
            uint            localgroup;
            OWCloneSettings cs;

            ObjectWorkshopHelper.PrepareForClone(package, out a, out localgroup, out pfd, out cs);

            SimPe.PackedFiles.Wrapper.Str str = new SimPe.PackedFiles.Wrapper.Str();
            str.FileDescriptor              = new SimPe.Packages.PackedFileDescriptor();
            str.FileDescriptor.Type         = Data.MetaData.STRING_FILE;
            str.FileDescriptor.LongInstance = 0x85;
            str.FileDescriptor.Group        = 0x7F000000;
            package.Add(str.FileDescriptor);

            string name = cres.ToLower().Trim();

            if (!name.EndsWith("_cres"))
            {
                name += "_cres";
            }

            str.FileName = "Model - Names";
            str.Add(new SimPe.PackedFiles.Wrapper.StrToken(0, (byte)Data.MetaData.Languages.English, "", ""));
            str.Add(new SimPe.PackedFiles.Wrapper.StrToken(1, (byte)Data.MetaData.Languages.English, name, ""));
            str.SynchronizeUserData();

            str.FileDescriptor.MarkForDelete = true;

            return(ObjectWorkshopHelper.Start(package, a, ref pfd, localgroup, cs, true));
        }
Exemple #3
0
 /// <summary>
 /// Update the old Provider Infrastructure
 /// </summary>
 public void UpdateProviders()
 {
     if (Helper.IsNeighborhoodFile(FileName) && (Helper.WindowsRegistry.LoadMetaInfo))
     {
         SimPe.Interfaces.Files.IPackageFile pkg = Package;
         try
         {
             string mname = Helper.GetMainNeighborhoodFile(pkg.SaveFileName);
             if (mname != pkg.SaveFileName)
             {
                 pkg = SimPe.Packages.GeneratableFile.LoadFromFile(mname);
             }
         }
         catch {}
         FileTable.ProviderRegistry.SimFamilynameProvider.BasePackage  = pkg;
         FileTable.ProviderRegistry.SimDescriptionProvider.BasePackage = pkg;
         FileTable.ProviderRegistry.SimNameProvider.BaseFolder         = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(FileName), "Characters");
         FileTable.ProviderRegistry.LotProvider.BaseFolder             = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(FileName), "Lots");
     }
     else
     {
         FileTable.ProviderRegistry.SimNameProvider.BaseFolder         = "";
         FileTable.ProviderRegistry.SimFamilynameProvider.BasePackage  = null;
         FileTable.ProviderRegistry.SimDescriptionProvider.BasePackage = null;
         FileTable.ProviderRegistry.LotProvider.BaseFolder             = "";
     }
 }
Exemple #4
0
        /// <summary>
        /// Create a package based on the collected Files
        /// </summary>
        /// <returns></returns>
        public SimPe.Packages.GeneratableFile BuildPackage()
        {
            SimPe.Packages.GeneratableFile pkg = SimPe.Packages.GeneratableFile.LoadFromFile("simpe_memory");
            BuildPackage(pkg);

            return(pkg);
        }
Exemple #5
0
        /// <summary>
        /// Build an override for another Skin
        /// </summary>
        /// <param name="skintone"></param>
        /// <param name="filename"></param>
        /// <param name="addtxtr">true, if you want to replace the default TXTR Files</param>
        /// <param name="addtxmt">true if you want to replace the default TXMT Files</param>
        public void CreateOverride(string skintone, string family, string filename, bool addtxmt, bool addtxtr, bool addref)
        {
            if (selection.Length > 1)
            {
                return;
            }

            SimPe.Packages.GeneratableFile pkg = BuildOverride(selection[0], skintone, family, selection[0].Package, addtxmt, addtxtr, addref);
            pkg.Save(filename);
        }
Exemple #6
0
 void AddLotsToFileIndex()
 {
     //ngbhfi.AddIndexFromFolder(dir);
     string[] names = System.IO.Directory.GetFiles(dir, ngbh + "*_Lot*.package");
     foreach (string name in names)
     {
         SimPe.Packages.GeneratableFile pkg = SimPe.Packages.GeneratableFile.LoadFromFile(name);
         ngbhfi.AddTypesIndexFromPackage(pkg, 0x856DDBAC, false);
     }
 }
Exemple #7
0
        void AddHoodsToFileIndex()
        {
            string mydir = System.IO.Directory.GetParent(dir).FullName;

            string[] names = System.IO.Directory.GetFiles(mydir, ngbh + "_*.package");
            foreach (string name in names)
            {
                SimPe.Packages.GeneratableFile pkg = SimPe.Packages.GeneratableFile.LoadFromFile(name);
                ngbhfi.AddTypesIndexFromPackage(pkg, 0x0BF999E7, false);
            }
        }
Exemple #8
0
 private void AddPackage(object sender, System.EventArgs e)
 {
     ofd.Filter = "Sims 2 Package (*.package)|*.package|All Files (*.*)|*.*";
     if (ofd.ShowDialog() == DialogResult.OK)
     {
         SimPe.Packages.GeneratableFile package = GeneratableFile.LoadFromFile(ofd.FileName);
         S2CPDescriptor s2cp = new S2CPDescriptor(package, "", "", "", "", Sims2CommunityPack.DEFAULT_COMPRESSION_STRENGTH, new S2CPDescriptorBase[0], extension);
         lblist.Items.Add(s2cp);
         lblist.SelectedIndex = lblist.Items.Count - 1;
     }
 }
Exemple #9
0
        /// <summary>
        /// Load a File from the Disc
        /// </summary>
        /// <param name="flname">The Filename</param>
        /// <param name="sync">
        /// Only needed if a PackageMaintainer is used. This will tell the Maintainer, that
        /// it should reload the Package from the Disk, and not only get the Package in Memory
        /// </param>
        /// <returns>true, if the file was loaded</returns>
        public bool LoadFromFile(string flname, bool sync)
        {
            bool res = false;

            try
            {
                FileNameEventArg e = new FileNameEventArg(flname);
                if (BeforeFileLoad != null)
                {
                    BeforeFileLoad(this, e);
                }
                if (e.Cancel)
                {
                    return(false);
                }

                Wait.SubStart();
                Wait.Message = "Loading File";

                if (pkg != null)
                {
                    this.SetupEvents(false);
                }

                pkg = SimPe.Packages.File.LoadFromFile(e.FileName, sync);
                if (pkg.Index.Length < Helper.WindowsRegistry.BigPackageResourceCount)
                {
                    pkg.LoadCompressedState();
                }

                this.SetupEvents(true);
                Helper.WindowsRegistry.AddRecentFile(flname);

                Wait.SubStop();

                if (AfterFileLoad != null)
                {
                    AfterFileLoad(this);
                }
                res = true;
            }
#if !DEBUG
            catch (Exception ex) { SimPe.Helper.ExceptionMessage(ex); }
#endif
            finally { }
            if (res != true)
            {
                pkg = null;
            }
            return(res);
        }
Exemple #10
0
        /// <summary>
        /// Clone the Makeup of a Sim
        /// </summary>
        /// <returns>the new Package for the patient Sim</returns>
        /// <param name="eyecolor">true, if you want to alter the eyecolor</param>
        /// <param name="makeups">true, if you want to alter the makeup</param>
        public SimPe.Packages.GeneratableFile CloneMakeup(bool eyecolor, bool makeups)
        {
            SimPe.Packages.GeneratableFile ret = SimPe.Packages.GeneratableFile.LoadFromFile((string)null);

            ArrayList list = new ArrayList();

            list.Add((uint)0xE86B1EEF);             //make sure the compressed Directory won't be copied!
            foreach (Interfaces.Files.IPackedFileDescriptor pfd in patient.Index)
            {
                if (!list.Contains(pfd.Type))
                {
                    Interfaces.Files.IPackedFile fl = patient.Read(pfd);

                    Interfaces.Files.IPackedFileDescriptor newpfd = ret.NewDescriptor(pfd.Type, pfd.SubType, pfd.Group, pfd.Instance);
                    newpfd.UserData = fl.UncompressedData;
                    ret.Add(newpfd);
                }
            }

            //Update TXMT Files for the Face
            SimPe.Interfaces.Files.IPackedFileDescriptor[] pfds = ret.FindFiles(Data.MetaData.TXMT);
            foreach (SimPe.Interfaces.Files.IPackedFileDescriptor pfd in pfds)
            {
                SimPe.Plugin.Rcol rcol = new GenericRcol(null, false);
                rcol.ProcessData(pfd, ret);

                MaterialDefinition md = (MaterialDefinition)rcol.Blocks[0];
                this.UpdateMakeup(md, eyecolor, makeups);

                rcol.SynchronizeUserData();
            }

            if (eyecolor)
            {
                //Update DNA File
                Interfaces.Files.IPackedFileDescriptor dna  = ngbh.FindFile(0xEBFEE33F, 0, Data.MetaData.LOCAL_GROUP, spatient.Instance);
                Interfaces.Files.IPackedFileDescriptor adna = ngbh.FindFile(0xEBFEE33F, 0, Data.MetaData.LOCAL_GROUP, sarchetype.Instance);
                if ((dna != null) && (adna != null))
                {
                    SimPe.PackedFiles.Wrapper.Cpf cpf = new Cpf();
                    cpf.ProcessData(dna, ngbh);

                    SimPe.PackedFiles.Wrapper.Cpf acpf = new Cpf();
                    acpf.ProcessData(adna, ngbh);
                    cpf.GetSaveItem("3").StringValue = acpf.GetSaveItem("3").StringValue;

                    cpf.SynchronizeUserData();
                }
            }
            return(ret);
        }
Exemple #11
0
        /// <summary>
        /// Create a 1:1 Clone based on the passed Group Number
        /// </summary>
        /// <param name="gid"></param>
        /// <returns></returns>
        public static SimPe.Packages.GeneratableFile CreatCloneByGroup(uint gid)
        {
            SimPe.Packages.GeneratableFile         package = SimPe.Packages.GeneratableFile.CreateNew();
            SimPe.Interfaces.IAlias                a;
            Interfaces.Files.IPackedFileDescriptor pfd;
            uint            localgroup;
            OWCloneSettings cs;

            ObjectWorkshopHelper.PrepareForClone(package, out a, out localgroup, out pfd, out cs);

            ObjectWorkshopHelper.BaseClone(gid, package, false);

            return(ObjectWorkshopHelper.Start(package, a, ref pfd, localgroup, cs, true));
        }
Exemple #12
0
        public Interfaces.Plugin.IToolResult ShowDialog(ref SimPe.Interfaces.Files.IPackedFileDescriptor pfd, ref SimPe.Interfaces.Files.IPackageFile package)
        {
            ds.ShowDialog();

            if (ds.FileName == null)
            {
                return(new ToolResult(false, false));
            }
            else
            {
                SimPe.Packages.GeneratableFile gf = SimPe.Packages.GeneratableFile.LoadFromFile(ds.FileName);
                package = gf;
                return(new ToolResult(false, true));
            }
        }
Exemple #13
0
        /// <summary>
        /// Load another Package
        /// </summary>
        /// <param name="newpkg">the Package that should be the currently opened</param>
        /// <returns>true, if the file was loaded</returns>
        public bool LoadFromPackage(SimPe.Packages.GeneratableFile newpkg)
        {
            if (newpkg == null)
            {
                return(false);
            }
            string flname = newpkg.FileName;

            if (flname == null)
            {
                flname = "";
            }

            FileNameEventArg e = new FileNameEventArg(flname);

            if (BeforeFileLoad != null)
            {
                BeforeFileLoad(this, e);
            }
            if (e.Cancel)
            {
                return(false);
            }

            if (pkg != null)
            {
                this.SetupEvents(false);
            }

            pkg = newpkg;
            pkg.LoadCompressedState();

            if (pkg != null)
            {
                this.SetupEvents(true);
            }

            if (pkg.FileName != null)
            {
                Helper.WindowsRegistry.AddRecentFile(pkg.FileName);
            }
            if (AfterFileLoad != null)
            {
                AfterFileLoad(this);
            }

            return(true);
        }
Exemple #14
0
        /// <summary>
        /// Close the current Package
        /// </summary>
        /// <returns>true, if the Package was closed</returns>
        public bool Close()
        {
            if (pkg != null)
            {
                bool res = true;
                if (pkg.HasUserChanges)
                {
                    DialogResult dr = SimPe.Message.Show(
                        SimPe.Localization.Manager.GetString("savechanges").Replace("{filename}", FileName),
                        SimPe.Localization.Manager.GetString("savechanges?"),
                        MessageBoxButtons.YesNoCancel);

                    if (dr == DialogResult.Yes)
                    {
                        res = Save();
                    }
                    else if (dr == DialogResult.Cancel)
                    {
                        return(false);
                    }
                }
                if (res)
                {
                    FileNameEventArg e = new FileNameEventArg(this.FileName);
                    if (BeforeFileClose != null)
                    {
                        BeforeFileClose(this, e);
                    }
                    if (e.Cancel)
                    {
                        res = false;
                    }
                }

                if (res)
                {
                    pkg.Close();
                    this.SetupEvents(false);
                    pkg = null;
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
Exemple #15
0
        /// <summary>
        /// Displays a Save Dialog for the S2CP Files
        /// </summary>
        /// <param name="package">The package that should be added to the S2CP Files (the user can add more!)</param>
        /// <param name="extension">true if you want to add the Community Extension, otherwise
        /// a normal Sims2Pack File will be generated</param>
        public static bool ShowSaveDialog(SimPe.Packages.GeneratableFile package, bool extension)
        {
            SimPe.Packages.GeneratableFile[] fls = null;

            if (package != null)
            {
                fls    = new SimPe.Packages.GeneratableFile[1];
                fls[0] = package;
            }
            else
            {
                fls = new SimPe.Packages.GeneratableFile[0];
            }

            return(ShowSaveDialog(fls, extension));
        }
Exemple #16
0
        /// <summary>
        /// Create the virtual Lua Package
        /// </summary>
        static void CreatePackge()
        {
            pkg = SimPe.Packages.File.CreateNew();

            foreach (ExpansionItem ei in PathProvider.Global.Expansions)
            {
                if (ei.Flag.LuaFolders)
                {
                    string path = System.IO.Path.Combine(ei.InstallFolder, "TSData/Res/ObjectScripts");
                    if (System.IO.Directory.Exists(path))
                    {
                        LoadFromFolder(path, "globalObjLua", true);
                        LoadFromFolder(path, "ObjLua", false);
                    }
                }
            }
        }
Exemple #17
0
 private void AddPackage(object sender, System.EventArgs e)
 {
     ofd.Filter = "Sims 2 Package (*.package)|*.package|All Files (*.*)|*.*";
     if (ofd.ShowDialog() == DialogResult.OK)
     {
         SimPe.Packages.GeneratableFile package = GeneratableFile.LoadFromFile(ofd.FileName);
         S2CPDescriptorBase             s2cpb   = new S2CPDescriptorBase(package);
         if (s2cpb.Guid == null)
         {
             MessageBox.Show("This Package does not contain a valid GlobalGUID.\nYou can create on by including this File in a diffren Sims2Community Package or by adding a 'Sims2Comunity Identifier' to the Package.");
         }
         else
         {
             lblist.Items.Add(s2cpb);
         }
     }
 }
Exemple #18
0
        protected static SimPe.Packages.GeneratableFile ReColorXObject(CloneSettings.BaseResourceType br, SimPe.Packages.GeneratableFile pkg, Interfaces.Files.IPackedFileDescriptor pfd, uint localgroup, ObjectWorkshopSettings settings)
        {
            settings.KeepOriginalMesh = true;
            SimPe.Packages.GeneratableFile package = pkg;
            // we need packages in the Gmaes and the Download Folder

            if (((!System.IO.File.Exists(ScenegraphHelper.GMND_PACKAGE)) || (!System.IO.File.Exists(ScenegraphHelper.MMAT_PACKAGE))) && (settings is OWCloneSettings))
            {
                if (Message.Show(Localization.Manager.GetString("OW_Warning"), "Warning", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return(package);
                }
            }

            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Filter = ExtensionProvider.BuildFilterString(
                new SimPe.ExtensionType[] {
                SimPe.ExtensionType.Package,
                SimPe.ExtensionType.AllFiles
            }
                );
            if (sfd.ShowDialog() != DialogResult.OK)
            {
                return(package);
            }

            //create a Cloned Object to get all needed Files for the Process
            WaitingScreen.Wait();
            try
            {
                WaitingScreen.UpdateMessage("Collecting needed Files");

                if ((package == null) && (pfd != null))
                {
                    package = RecolorClone(br, package, pfd, localgroup, settings, false);
                }
            }
            finally { WaitingScreen.Stop(); }

            package.FileName = sfd.FileName;
            package.Save();

            return(package);
        }
Exemple #19
0
        private void NgbOpen(object sender, System.EventArgs e)
        {
            if (lv.SelectedItems.Count <= 0)
            {
                return;
            }

            ngbh = cbtypes.SelectedItem as NgbhType;
            if (ngbh != null)
            {
                if (loadNgbh)
                {
                    package = SimPe.Packages.GeneratableFile.LoadFromFile(ngbh.FileName);
                }
                this.DialogResult = DialogResult.OK;
                Close();
            }
        }
Exemple #20
0
        public IToolResult Execute(ref SimPe.Interfaces.Files.IPackageFile package, Interfaces.IProviderRegistry prov)
        {
            this.Cursor    = Cursors.WaitCursor;
            this.package   = null;
            this.prov      = prov;
            source_package = (SimPe.Packages.File)package;
            changed        = false;
            UpdateList();
            this.Cursor = Cursors.Default;

            pnBackup.Visible = ngbhBUMgr;
            RemoteControl.ShowSubForm(this);
            if (this.package != null)
            {
                package = this.package;
            }
            return(new Plugin.ToolResult(false, ((this.package != null) || (changed))));
        }
Exemple #21
0
        private void Activate_miSaveCopyAs(object sender, System.EventArgs e)
        {
            sfd.Filter = ExtensionProvider.BuildFilterString(
                new SimPe.ExtensionType[] {
                SimPe.ExtensionType.Package,
                SimPe.ExtensionType.DisabledPackage,
                SimPe.ExtensionType.AllFiles
            }
                );

            sfd.FileName = package.FileName;
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                SimPe.Packages.GeneratableFile gf = (SimPe.Packages.GeneratableFile)package.Package.Clone();
                gf.Save(sfd.FileName);
                //package.UpdateRecentFileMenu(this.miRecent);
            }
        }
Exemple #22
0
        private void tsmi_Click(object sender, EventArgs e)
        {
            pjse.FileTable.Entry fe;
            SimPe.ExpansionItem  exp;
            int i = cmenuCompare.Items.IndexOf((ToolStripItem)sender);

            if (i < 0)
            {
                throw new ArgumentOutOfRangeException("menuItem", "Unrecognised object triggered event");
            }
            else if (i == 0)
            {
                pjse.FileTable.Entry[] items =
                    pjse.FileTable.GFT[wrapper.FileDescriptor.Type, wrapper.FileDescriptor.Group, wrapper.FileDescriptor.Instance, pjse.FileTable.Source.Maxis];
                if (items == null || items.Length == 0)
                {
                    MessageBox.Show(pjse.Localization.GetString("cmpNFCurrent", wrapperName),
                                    this.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    return;
                }
                fe  = items[0];
                exp = null;
            }
            else
            {
                exp = (SimPe.ExpansionItem)cmenuCompare.Items[i].Tag;
                SimPe.Packages.GeneratableFile op = SimPe.Packages.GeneratableFile.LoadFromFile(
                    System.IO.Path.Combine(System.IO.Path.Combine(exp.InstallFolder, exp.ObjectsSubFolder), "objects.package"));
                if (op == null)
                {
                    throw new Exception("Could not read " + exp.Name + " objects.package");
                }
                IPackedFileDescriptor pfd = op.FindFile(wrapper.FileDescriptor);
                if (pfd == null)
                {
                    MessageBox.Show(pjse.Localization.GetString("cmpNFExp", wrapperName, exp.Name),
                                    this.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    return;
                }
                fe = new pjse.FileTable.Entry(op, pfd, true, false);
            }

            OnCompareWith(this, new CompareWithEventArgs(fe, exp));
        }
Exemple #23
0
        protected static void UpdateDescription(OWCloneSettings cs, SimPe.Packages.GeneratableFile package)
        {
            //change the price in the OBJd
            SimPe.PackedFiles.Wrapper.ExtObjd obj = new SimPe.PackedFiles.Wrapper.ExtObjd();
            SimPe.PackedFiles.Wrapper.Str     str = new SimPe.PackedFiles.Wrapper.Str();
            SimPe.Interfaces.Files.IPackedFileDescriptor[] pfds = package.FindFiles(Data.MetaData.OBJD_FILE);
            foreach (SimPe.Interfaces.Files.IPackedFileDescriptor pfd in pfds)
            {
                obj.ProcessData(pfd, package);

                SimPe.Interfaces.Files.IPackedFileDescriptor spfd = UpdateDescription(cs, package, obj);

                if (spfd != null)
                {
                    str.ProcessData(spfd, package);
                    UpdateDescription(cs, str);
                }
            }

            //change Price, Title, Desc in the XObj Files
            uint[] types = new uint[] { Data.MetaData.XFNC, Data.MetaData.XROF, Data.MetaData.XFLR, Data.MetaData.XOBJ };
            SimPe.PackedFiles.Wrapper.Cpf cpf = new SimPe.PackedFiles.Wrapper.Cpf();
            foreach (uint t in types)
            {
                pfds = package.FindFiles(t);
                foreach (SimPe.Interfaces.Files.IPackedFileDescriptor pfd in pfds)
                {
                    cpf.ProcessData(pfd, package);
                    SimPe.Interfaces.Files.IPackedFileDescriptor spfd = UpdateDescription(cs, package, cpf);

                    if (spfd != null)
                    {
                        str.ProcessData(spfd, package);
                        UpdateDescription(cs, str);
                    }
                }
            }

            if (package.FileName != null)
            {
                package.Save();
            }
        }
Exemple #24
0
        /// <summary>
        /// Reads a package from the Stream
        /// </summary>
        /// <param name="reader">The S2CP Stream</param>
        /// <param name="offset">The starting offset</param>
        /// <param name="length">The Length of the Package</param>
        /// <param name="desc">Package Description</param>
        /// <returns>The Package</returns>
        protected static SimPe.Packages.GeneratableFile LoadPackage(BinaryReader reader, int offset, int length, SimPe.Packages.S2CPDescriptor desc)
        {
            reader.BaseStream.Seek(offset, System.IO.SeekOrigin.Begin);
            MemoryStream ms = new MemoryStream(reader.ReadBytes(length));

            if (desc.Compressed == CompressionStrength.None)
            {
                SimPe.Packages.GeneratableFile pkg = GeneratableFile.LoadFromStream(new BinaryReader(ms));
                return(pkg);
            }
            else
            {
                MemoryStream unc = new MemoryStream();
                Decompress(ms, unc);
                SimPe.Packages.GeneratableFile pkg = GeneratableFile.LoadFromStream(new BinaryReader(unc));
                pkg.FileName = desc.Name;
                return(pkg);
            }
        }
Exemple #25
0
        /// <summary>
        /// Clone the Face of a Sim
        /// </summary>
        /// <returns>the new Package for the patient Sim</returns>
        public SimPe.Packages.GeneratableFile CloneFace()
        {
            SimPe.Packages.GeneratableFile ret = SimPe.Packages.GeneratableFile.LoadFromFile((string)null);



            ArrayList list = new ArrayList();

            list.Add((uint)0xCCCEF852);             //LxNR, Face

            uint hashgroup = this.GetPatientHash();


            foreach (Interfaces.Files.IPackedFileDescriptor pfd in archetype.Index)
            {
                if (list.Contains(pfd.Type))
                {
                    Interfaces.Files.IPackedFile fl = archetype.Read(pfd);

                    Interfaces.Files.IPackedFileDescriptor newpfd = ret.NewDescriptor(pfd.Type, pfd.SubType, pfd.Group, pfd.Instance);
                    newpfd.UserData = fl.UncompressedData;
                    ret.Add(newpfd);
                }
            }

            list.Add((uint)0xE86B1EEF);             //make sure the compressed Directory won't be copied!
            foreach (Interfaces.Files.IPackedFileDescriptor pfd in patient.Index)
            {
                if (!list.Contains(pfd.Type))
                {
                    Interfaces.Files.IPackedFile fl = patient.Read(pfd);

                    Interfaces.Files.IPackedFileDescriptor newpfd = ret.NewDescriptor(pfd.Type, pfd.SubType, pfd.Group, pfd.Instance);
                    newpfd.UserData = fl.UncompressedData;
                    ret.Add(newpfd);
                }
            }

            UpdateFaceStructure(ret);
            return(ret);
        }
Exemple #26
0
        public Interfaces.Plugin.IToolResult ShowDialog(ref SimPe.Interfaces.Files.IPackedFileDescriptor pfd, ref SimPe.Interfaces.Files.IPackageFile package)
        {
            System.Windows.Forms.DialogResult dr =
                System.Windows.Forms.MessageBox.Show("Using this Tool can serioulsy mess up all of your Neighborhoods. However if some of your Neighborhoods are missing in the Neighborhood Selection of the Game, this Tool might help fixing it.\n\nMake sure you have a Backup of ALL your Neighborhoods befor starting this Tool!\n\nDo you want to start this Tool?", "Confirmation", System.Windows.Forms.MessageBoxButtons.YesNo);


            if (dr == System.Windows.Forms.DialogResult.Yes)
            {
                Wait.SubStop();
                try
                {
                    System.Collections.Hashtable ht = Idno.FindUids(PathProvider.SimSavegameFolder, true);
                    foreach (string file in ht.Keys)
                    {
                        Wait.Message = file;

                        SimPe.Packages.GeneratableFile fl = SimPe.Packages.GeneratableFile.LoadFromFile(file);
                        SimPe.Interfaces.Files.IPackedFileDescriptor[] pfds = fl.FindFiles(Data.MetaData.IDNO);
                        foreach (SimPe.Interfaces.Files.IPackedFileDescriptor spfd in pfds)
                        {
                            Idno idno = new Idno();
                            idno.ProcessData(spfd, fl);
                            idno.MakeUnique(ht);

                            idno.SynchronizeUserData();
                        }

                        fl.Save();
                    }
                }
                catch (Exception ex)
                {
                    Helper.ExceptionMessage("", ex);
                }
                finally
                {
                    Wait.SubStop();
                }
            }
            return(new ToolResult(false, false));
        }
Exemple #27
0
        /// <summary>
        /// Create a 1:1 Clone based on the passed GUID
        /// </summary>
        /// <param name="guid"></param>
        /// <returns></returns>
        public static SimPe.Packages.GeneratableFile CreatCloneByGuid(uint guid)
        {
            SimPe.Packages.GeneratableFile         package = SimPe.Packages.GeneratableFile.CreateNew();
            SimPe.Interfaces.IAlias                a;
            Interfaces.Files.IPackedFileDescriptor pfd;
            uint            localgroup;
            OWCloneSettings cs;

            ObjectWorkshopHelper.PrepareForClone(package, out a, out localgroup, out pfd, out cs);
            SimPe.Interfaces.Scenegraph.IScenegraphFileIndex fii = FileTable.FileIndex.AddNewChild();

            SimPe.Cache.MemoryCacheItem mci = SimPe.PackedFiles.Wrapper.ObjectComboBox.ObjectCache.FindItem(guid);
            if (mci != null)
            {
                localgroup = mci.FileDescriptor.Group;
                if (localgroup == Data.MetaData.LOCAL_GROUP)
                {
                    SimPe.Interfaces.Wrapper.IGroupCacheItem gci = SimPe.FileTable.GroupCache.GetItem(mci.ParentCacheContainer.FileName);
                    if (gci != null)
                    {
                        if (!FileTable.FileIndex.Contains(mci.ParentCacheContainer.FileName))
                        {
                            fii.AddIndexFromPackage(mci.ParentCacheContainer.FileName);
                        }

                        localgroup = gci.LocalGroup;
                    }
                }
                ObjectWorkshopHelper.BaseClone(localgroup, package, false);
            }

            SimPe.Packages.GeneratableFile ret = ObjectWorkshopHelper.Start(package, a, ref pfd, localgroup, cs, true);
            fii.CloseAssignedPackages();
            FileTable.FileIndex.RemoveChild(fii);

            return(ret);
        }
Exemple #28
0
        /// <summary>
        /// Creates a Package File from a previously extracted Package
        /// </summary>
        /// <param name="filename">Filename of package.xml File describing the Package</param>
        /// <param name="pb">A Progressbar indicating the progress</param>
        /// <returns>Binary Reader representing the Package File</returns>
        public static System.IO.BinaryReader OpenExtractedPackage(ProgressBar pb, string filename)
        {
            string path = System.IO.Path.GetDirectoryName(filename);

            System.Xml.XmlDocument xmlfile = new XmlDocument();
            xmlfile.Load(filename);

            //Root Node suchen
            XmlNodeList XMLData = xmlfile.GetElementsByTagName("package");

            ArrayList list = new ArrayList();

            //Alle Eintr&auml;ge im Root Node verarbeiten
            Data.MetaData.IndexTypes type = Data.MetaData.IndexTypes.ptShortFileIndex;
            for (int i = 0; i < XMLData.Count; i++)
            {
                XmlNode node = XMLData.Item(i);

                object o = node.Attributes["type"].Value; if (o == null)
                {
                    o = "1";
                }
                type = (Data.MetaData.IndexTypes) uint.Parse(o.ToString());

                if (pb != null)
                {
                    pb.Maximum = node.ChildNodes.Count;
                }
                int count = 0;
                foreach (XmlNode subnode in node)
                {
                    if (pb != null)
                    {
                        pb.Value = count++;
                        System.Windows.Forms.Application.DoEvents();
                    }
                    ///a New FileItem
                    if (subnode.LocalName == "packedfile")
                    {
                        list.Add(CreateDescriptor(path, subnode));
                    }
                }
            }

            SimPe.Packages.GeneratableFile file = SimPe.Packages.GeneratableFile.CreateNew();
            file.BeginUpdate();
            file.Header.IndexType = type;

            foreach (SimPe.Packages.PackedFileDescriptor pfd in list)
            {
                file.Add(pfd);
                if (pfd.Type == Packages.File.FILELIST_TYPE)
                {
                    file.FileList = pfd;
                }
            }

            System.IO.MemoryStream ms = file.Build();
            file.EndUpdate();
            if (pb != null)
            {
                pb.Value = pb.Maximum;
            }
            return(new System.IO.BinaryReader(ms));
        }
Exemple #29
0
        /// <summary>
        /// Change the SkinTone of a Sim
        /// </summary>
        /// <param name="skin">the new skintone</param>
        /// param name="skinfiles">a Hashtable listing al Proerty Sets for each available skintone (key=skintone string, value= ArrayList of Cpf Objects)</param>
        /// <returns>the new Package for the patient Sim</returns>
        public SimPe.Packages.GeneratableFile CloneSkinTone(string skin, Hashtable skinfiles)
        {
            SimPe.Packages.GeneratableFile ret = SimPe.Packages.GeneratableFile.LoadFromFile((string)null);
            string pskin = GetSkintone(this.patient);

            ArrayList list = new ArrayList();

            list.Add((uint)0xE86B1EEF);             //make sure the compressed Directory won't be copied!
            foreach (Interfaces.Files.IPackedFileDescriptor pfd in patient.Index)
            {
                if (!list.Contains(pfd.Type))
                {
                    Interfaces.Files.IPackedFile fl = patient.Read(pfd);

                    Interfaces.Files.IPackedFileDescriptor newpfd = ret.NewDescriptor(pfd.Type, pfd.SubType, pfd.Group, pfd.Instance);
                    newpfd.UserData = fl.UncompressedData;
                    ret.Add(newpfd);

                    switch (newpfd.Type)
                    {
                    case (uint)0xAC598EAC:                             //AGED
                    {
                        SimPe.PackedFiles.Wrapper.Cpf cpf = new Cpf();
                        cpf.ProcessData(newpfd, ret);
                        cpf.GetSaveItem("skincolor").StringValue = skin;

                        cpf.SynchronizeUserData();
                        break;
                    }

                    case Data.MetaData.GZPS:
                    {
                        SimPe.PackedFiles.Wrapper.Cpf cpf = new Cpf();
                        cpf.ProcessData(newpfd, ret);
                        cpf.GetSaveItem("skintone").StringValue = skin;

                        cpf.SynchronizeUserData();
                        break;
                    }

                    case Data.MetaData.TXMT:
                    {
                        SimPe.Plugin.Rcol rcol = new GenericRcol(null, false);
                        rcol.ProcessData(newpfd, ret);
                        MaterialDefinition txmt = (MaterialDefinition)rcol.Blocks[0];
                        txmt.FindProperty("cafSkinTone").Value = skin;

                        rcol.SynchronizeUserData();
                        break;
                    }
                    }
                }
            }

            //Update DNA File
            Interfaces.Files.IPackedFileDescriptor dna = ngbh.FindFile(0xEBFEE33F, 0, Data.MetaData.LOCAL_GROUP, spatient.Instance);
            if (dna != null)
            {
                SimPe.PackedFiles.Wrapper.Cpf cpf = new Cpf();
                cpf.ProcessData(dna, ngbh);
                cpf.GetSaveItem("2").StringValue = skin;
                cpf.GetSaveItem("6").StringValue = skin;

                cpf.SynchronizeUserData();
            }

            //Update 3IDR Files
            SimPe.Interfaces.Files.IPackedFileDescriptor[] pfds = ret.FindFiles(0xAC506764);
            foreach (SimPe.Interfaces.Files.IPackedFileDescriptor pfd in pfds)
            {
                SimPe.Plugin.RefFile reffile = new RefFile();
                reffile.ProcessData(pfd, ret);

                UpdateSkintone(reffile, skin, skinfiles);
            }

            //Update TXMT Files for the Face
            pfds = ret.FindFiles(Data.MetaData.TXMT);
            foreach (SimPe.Interfaces.Files.IPackedFileDescriptor pfd in pfds)
            {
                SimPe.Plugin.Rcol rcol = new GenericRcol(null, false);
                rcol.ProcessData(pfd, ret);

                MaterialDefinition md = (MaterialDefinition)rcol.Blocks[0];
                this.UpdateSkintone(md, skin, skinfiles);

                rcol.SynchronizeUserData();
            }


            return(ret);
        }
Exemple #30
0
        /// <summary>
        /// Create a cloned Sim
        /// </summary>
        /// <returns>the new Package for the patient Sim</returns>
        public SimPe.Packages.GeneratableFile CloneSim()
        {
            SimPe.Packages.GeneratableFile ret = SimPe.Packages.GeneratableFile.LoadFromFile((string)null);



            ArrayList list = new ArrayList();

            list.Add((uint)0xAC506764);             //3IDR
            list.Add(Data.MetaData.GZPS);           //GZPS, Property Set
            list.Add((uint)0xAC598EAC);             //AGED
            list.Add((uint)0xCCCEF852);             //LxNR, Face
            list.Add((uint)0x856DDBAC);             //IMG
            list.Add((uint)0x534C4F54);             //SLOT
            list.AddRange(Data.MetaData.RcolList);

            uint hashgroup = this.GetPatientHash();


            foreach (Interfaces.Files.IPackedFileDescriptor pfd in archetype.Index)
            {
                if (list.Contains(pfd.Type))
                {
                    Interfaces.Files.IPackedFile fl = archetype.Read(pfd);

                    Interfaces.Files.IPackedFileDescriptor newpfd = ret.NewDescriptor(pfd.Type, pfd.SubType, pfd.Group, pfd.Instance);
                    newpfd.UserData = fl.UncompressedData;
                    ret.Add(newpfd);

                    ///This is a scenegraph Resource and needs a new Hash
                    if (Data.MetaData.RcolList.Contains(pfd.Type))
                    {
                        SimPe.Plugin.Rcol rcol = new GenericRcol(null, false);
                        rcol.ProcessData(newpfd, ret);

                        rcol.FileName = "#0x" + Helper.HexString(hashgroup) + "!" + Hashes.StripHashFromName(rcol.FileName);

                        switch (pfd.Type)
                        {
                        case Data.MetaData.SHPE:
                        {
                            Shape shp = (Shape)rcol.Blocks[0];
                            foreach (ShapeItem i in shp.Items)
                            {
                                i.FileName = "#0x" + Helper.HexString(hashgroup) + "!" + Hashes.StripHashFromName(i.FileName);
                            }
                            break;
                        }
                        }
                        rcol.SynchronizeUserData();
                    }
                }
            }

            list.Add((uint)0xE86B1EEF);             //make sure the compressed Directory won't be copied!
            foreach (Interfaces.Files.IPackedFileDescriptor pfd in patient.Index)
            {
                if (!list.Contains(pfd.Type))
                {
                    Interfaces.Files.IPackedFile fl = patient.Read(pfd);

                    Interfaces.Files.IPackedFileDescriptor newpfd = ret.NewDescriptor(pfd.Type, pfd.SubType, pfd.Group, pfd.Instance);
                    newpfd.UserData = fl.UncompressedData;
                    ret.Add(newpfd);
                }
            }

            //Copy DNA File
            Interfaces.Files.IPackedFileDescriptor dna = ngbh.FindFile(0xEBFEE33F, 0, Data.MetaData.LOCAL_GROUP, sarchetype.Instance);
            if (dna != null)
            {
                Interfaces.Files.IPackedFileDescriptor tna = ngbh.FindFile(0xEBFEE33F, 0, Data.MetaData.LOCAL_GROUP, spatient.Instance);
                if (tna == null)
                {
                    tna         = ngbh.NewDescriptor(0xEBFEE33F, 0, Data.MetaData.LOCAL_GROUP, spatient.Instance);
                    tna.Changed = true;
                    ngbh.Add(tna);
                }

                Interfaces.Files.IPackedFile fl = ngbh.Read(dna);

                tna.UserData = fl.UncompressedData;
            }

            UpdateFaceStructure(ret);
            return(ret);
        }