IsValid() public méthode

public IsValid ( ) : QbItemBase
Résultat QbItemBase
Exemple #1
0
        public void ResetBonusArt(QbFile storeDataQb)
        {
            if (_project.GameInfo.Game == Game.GH3_Wii || _project.GameInfo.Game == Game.GHA_Wii)
            {
                QbItemArray qa = storeDataQb.FindItem(QbKey.Create("Bonus_Songs_Info"), false) as QbItemArray;

                if (qa != null)
                {
                    //set all prices to 0
                    QbKey cover = QbKey.Create("album_cover");
                    qa.FindItem(true, delegate(QbItemBase qib)
                    {
                        if (qib.ItemQbKey != null && qib.ItemQbKey.Crc == cover.Crc)
                            ((QbItemQbKey)qib).Values[0] = QbKey.Create("store_song_default");
                        return false; //loop until end of qb
                    });

                    storeDataQb.AlignPointers();
                    storeDataQb.IsValid();
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Remove song to bonus list and shop
        /// </summary>
        /// <param name="songQk"></param>
        public void RemoveBonusSongQbItems(QbKey songQk, QbFile qbStore)
        {
            QbItemBase item;

            //find bonus song list
            QbItemArray bonusSongs = qbStore.FindItem(QbKey.Create("songs"), true) as QbItemArray;

            //find bonus song price list
            QbItemStruct songData = qbStore.FindItem(QbKey.Create("store_song_data"), true) as QbItemStruct;

            //find bonus song info
            QbItemArray bonusInfo = qbStore.FindItem(QbKey.Create("Bonus_Songs_Info"), true) as QbItemArray;

            //remove bonus song from list
            if (bonusSongs != null)
            {
                List<QbKey> songs = new List<QbKey>((bonusSongs.Items[0] as QbItemQbKey).Values);
                songs.Remove(songQk);
                (bonusSongs.Items[0] as QbItemQbKey).Values = songs.ToArray();
            }

            //remove bonus song price
            if (songData != null)
            {
                item = songData.FindItem(false, delegate(QbItemBase qib)
                    {
                        return (qib.ItemQbKey.Crc == songQk.Crc);
                    });
                if (item != null)
                    songData.RemoveItem(item);
            }

            //remove bonus info
            if (bonusInfo != null && bonusInfo.Items.Count > 0)
            {
                QbKey itemQk = QbKey.Create("item");
                QbItemStructArray infoArray = (bonusInfo.Items[0] as QbItemStructArray);
                item = infoArray.FindItem(false, delegate(QbItemBase qib)
                    {
                        QbItemQbKey iqk = (QbItemQbKey)(qib.Items[0]);
                        return iqk.ItemQbKey.Crc == itemQk.Crc && iqk.Values[0] == songQk.Crc;
                    });
                if (item != null)
                    infoArray.RemoveItem(item);
            }

            qbStore.AlignPointers();
            qbStore.IsValid();
        }
Exemple #3
0
 public void RemoveIntroVids(QbFile bootupMenuFlowQb)
 {
     if (_project.GameInfo.Game == Game.GH3_Wii || _project.GameInfo.Game == Game.GHA_Wii)
     {
         //remove the intro videos
         QbItemScript qbs = bootupMenuFlowQb.FindItem(QbKey.Create("bootup_sequence"), false) as QbItemScript;
         if (qbs.ScriptData.Length == 474) //make sure it hasn't already been edited
         {
             byte[] scr = new byte[68 + 130];
             Array.Copy(qbs.ScriptData, scr, 68);
             Array.Copy(qbs.ScriptData, qbs.ScriptData.Length - 130, scr, 68, 130);
             qbs.ScriptData = scr;
             bootupMenuFlowQb.AlignPointers();
             bootupMenuFlowQb.IsValid();
         }
     }
 }
Exemple #4
0
        /// <summary>
        /// Add song to bonus list and shop
        /// </summary>
        /// <param name="songQk"></param>
        public void AddBonusSongQbItems(QbKey songQk, QbFile qbStore, bool insertAdd)
        {
            QbKey qkCreditsSong = _project.GameInfo.Game == Game.GH3_Wii ? QbKey.Create("thrufireandflames") : QbKey.Create("kingsandqueenscredits");

            //find bonus song list
            QbItemArray bonusSongs = qbStore.FindItem(QbKey.Create("songs"), true) as QbItemArray;

            //find bonus song price list
            QbItemStruct songData = qbStore.FindItem(QbKey.Create("store_song_data"), true) as QbItemStruct;

            //find bonus song info
            QbItemArray bonusInfo = qbStore.FindItem(QbKey.Create("Bonus_Songs_Info"), true) as QbItemArray;

            //add bonus song to list
            if (bonusSongs != null)
            {
                List<QbKey> songs = new List<QbKey>((bonusSongs.Items[0] as QbItemQbKey).Values);
                if (!songs.Contains(songQk))
                {
                    if (insertAdd)
                        songs.Insert(0, songQk.Clone());
                    else
                    {
                        //insert second from the end (before TTFAF / kingandqueenscredits)
                        if (songs.Count == 0 || songs[songs.Count - 1].Crc != qkCreditsSong.Crc)
                            songs.Add(songQk.Clone()); //clone qbkey
                        else
                            songs.Insert(songs.Count - 1, songQk.Clone()); //clone qbkey
                    }
                    (bonusSongs.Items[0] as QbItemQbKey).Values = songs.ToArray();
                }
            }

            if (songData != null)
            {
                //add bonus song price
                if (null == songData.FindItem(false, delegate(QbItemBase qib)
                    {
                        return (qib.ItemQbKey.Crc == songQk.Crc);
                    }))
                {
                    QbItemStruct songDataItem = new QbItemStruct(qbStore);
                    songDataItem.Create(QbItemType.StructItemStruct);
                    songDataItem.ItemQbKey = songQk.Clone();
                    QbItemInteger songDataItemPrice = new QbItemInteger(qbStore);
                    songDataItemPrice.Create(QbItemType.StructItemInteger);
                    songDataItemPrice.ItemQbKey = QbKey.Create("price");
                    songDataItemPrice.Values = new uint[] { 0 };
                    songDataItem.AddItem(songDataItemPrice);
                    if (!insertAdd || songData.Items.Count == 0)
                        songData.AddItem(songDataItem);
                    else
                        songData.InsertItem(songDataItem, songData.Items[0], true);
                }
            }

            if (bonusInfo != null)
            {
                //add bonus info
                QbKey itemQk = QbKey.Create("item");
                QbItemStructArray infoArray = (bonusInfo.Items[0] as QbItemStructArray);
                if (null == infoArray.FindItem(false, delegate(QbItemBase qib)
                    {
                        QbItemQbKey iqk = (QbItemQbKey)(qib.Items[0]);
                        return iqk.ItemQbKey.Crc == itemQk.Crc && iqk.Values[0] == songQk.Crc;
                    }))
                {
                    QbItemStruct infoStruct = new QbItemStruct(qbStore);
                    infoStruct.Create(QbItemType.StructHeader);
                    if (!insertAdd || infoArray.Items.Count == 0)
                        infoArray.AddItem(infoStruct);
                    else
                        infoArray.InsertItem(infoStruct, infoArray.Items[0], true);
                    qbStore.AlignPointers();
                    qbStore.IsValid();
                    QbItemQbKey infoItem = new QbItemQbKey(qbStore);
                    infoItem.Create(QbItemType.StructItemQbKey);
                    infoItem.ItemQbKey = itemQk; //"item"
                    infoItem.Values = new QbKey[] { songQk.Clone() };
                    infoStruct.AddItem(infoItem);
                    qbStore.AlignPointers();
                    qbStore.IsValid();
                    QbItemString infoText = new QbItemString(qbStore);
                    infoText.Create(QbItemType.StructItemString);
                    infoText.ItemQbKey = QbKey.Create("text");
                    infoText.Strings = new string[] { "Bonus song added with TheGHOST" };
                    infoStruct.AddItem(infoText);
                    qbStore.AlignPointers();
                    qbStore.IsValid();
                    QbItemQbKey infoCover = new QbItemQbKey(qbStore);
                    infoCover.Create(QbItemType.StructItemQbKey);
                    infoCover.ItemQbKey = QbKey.Create("album_cover");
                    infoCover.Values = new QbKey[] { QbKey.Create("store_song_default") };
                    infoStruct.AddItem(infoCover);
                    qbStore.AlignPointers();
                    qbStore.IsValid();
                }
            }
        }
Exemple #5
0
        public void FreeStore(QbFile storeDataQb)
        {
            if (_project.GameInfo.Game == Game.GH3_Wii || _project.GameInfo.Game == Game.GHA_Wii)
            {
                //set all prices to 0
                QbKey price = QbKey.Create("price");
                storeDataQb.FindItem(true, delegate(QbItemBase qib)
                    {
                        if (qib.ItemQbKey != null && qib.ItemQbKey.Crc == price.Crc)
                            ((QbItemInteger)qib).Values[0] = 0;
                        return false; //loop until end of qb
                    });

                storeDataQb.AlignPointers();
                storeDataQb.IsValid();
            }
        }
Exemple #6
0
        private void removeSongFromSonglist(QbFile qbSongList, QbKey qkSong)
        {
            QbItemArray songsList = qbSongList.FindItem(QbKey.Create("gh3_songlist"), false) as QbItemArray;
            if (songsList != null)
            {
                List<QbKey> songlistQk = new List<QbKey>(((QbItemQbKey)songsList.Items[0]).Values);

                if (songlistQk.Contains(qkSong))
                    songlistQk.Remove(qkSong);

                //update gh3_songlist
                ((QbItemQbKey)songsList.Items[0]).Values = songlistQk.ToArray();

                qbSongList.AlignPointers();
                qbSongList.IsValid();
            }
        }
Exemple #7
0
        //#if DEBUG
        //        /// <summary>
        //        /// Edits tiers using the files in Partition folder
        //        /// </summary>
        //        /// <param name="removeBossBattles"></param>
        //        /// <param name="bonusSongs"></param>
        //        /// <param name="songCounts"></param>
        //        public void CoopCopyTest(PakEditor pak)
        //        {
        //            QbKey[] nonCareerSongs = new QbKey[0];
        //            string progQb = @"scripts\guitar\guitar_progression.qb.ngc";
        //            string coopQb = @"scripts\guitar\guitar_coop.qb.ngc";
        //            string storeDataQb = @"scripts\guitar\store_data.qb.ngc";
        //            string songlistQb = @"scripts\guitar\songlist.qb.ngc";
        //            if (_project.GameInfo.Game == Game.GH3_Wii)
        //            {
        //                progQb = progQb.Substring(1);  //remove first char
        //                coopQb = coopQb.Substring(1);  //remove first char
        //                storeDataQb = storeDataQb.Substring(1);  //remove first char
        //                songlistQb = songlistQb.Substring(1);  //remove first char
        //            }
        //            if (_project.GameInfo.Game == Game.GH3_Wii || _project.GameInfo.Game == Game.GHA_Wii)
        //            {
        //                //add song to song list
        //                QbFile qbProg = pak.ReadQbFile(progQb);
        //                QbFile qbCoop = _project.GameInfo.Game == Game.GH3_Wii ? pak.ReadQbFile(coopQb) : null;
        //                QbFile qbStore = pak.ReadQbFile(storeDataQb);
        //                QbFile qbSonglist = pak.ReadQbFile(songlistQb);
        //                copyCareerTiersToCoop(qbCoop, qbProg);
        //                pak.ReplaceFile(coopQb, qbCoop);
        //            }
        //        }
        //#endif
        private void copyCareerTiersToCoop(QbFile coopQb, QbFile guitarProgressionQb)
        {
            int coopMoviesCount = 6;

            QbKey qkEncore = QbKey.Create("encorep1");
            QbKey qkEncore2 = QbKey.Create("encorep2");
            QbKey qkLevel = QbKey.Create("level");
            QbKey qkLevel2 = QbKey.Create("level2");
            QbKey qkNumTiers = QbKey.Create("num_tiers");
            QbKey qkCompMovie = QbKey.Create("completion_movie");
            QbKey qkSetList = QbKey.Create("setlist_icon");
            QbKey qkNumSongs = QbKey.Create("numsongstoprogress");
            QbKey qkCoopNumSongs = QbKey.Create("GH3_COOPCareer_NumSongToProgress");
            QbKey qkAtom = QbKey.Create("atom");
            QbKey qkTier = QbKey.Create("tier");

            QbItemStruct careerSongsSec = guitarProgressionQb.FindItem(QbKey.Create("GH3_Career_Songs"), false) as QbItemStruct;
            QbItemInteger qbNumTiers = careerSongsSec.FindItem(qkNumTiers, false) as QbItemInteger;
            int currTierCount = (int)qbNumTiers.Values[0];

            QbItemStruct coopSongsSec = coopQb.FindItem(QbKey.Create("GH3_CoopCareer_Songs"), false) as QbItemStruct;
            QbItemInteger qbCoopNumTiers = coopSongsSec.FindItem(qkNumTiers, false) as QbItemInteger;
            int currCoopTierCount = (int)qbCoopNumTiers.Values[0];
            qbCoopNumTiers.Values[0] = (uint)currTierCount; //set new value

            //copy file ids

            #region copy setlist

            for (int i = 1; i <= currCoopTierCount; i++)
            {
                QbItemStruct srcTier = coopSongsSec.FindItem(QbKey.Create(string.Format("tier{0}", i.ToString())), false) as QbItemStruct;
                if (srcTier == null)
                    continue;

                coopSongsSec.RemoveItem(srcTier);
            }

            for (int i = 1; i <= currTierCount; i++)
            {
                QbItemStruct srcTier = careerSongsSec.FindItem(QbKey.Create(string.Format("tier{0}", i.ToString())), false) as QbItemStruct;
                if (srcTier == null)
                    continue;

                srcTier = (QbItemStruct)srcTier.Clone();

                foreach (QbItemBase qib in srcTier.Items)
                {
                    if (qib.QbItemType == QbItemType.StructItemQbKey)
                    {
                        if (((QbItemQbKey)qib).Values[0].Crc == qkEncore.Crc)
                            ((QbItemQbKey)qib).Values[0] = qkEncore2.Clone();
                    }
                    else if (qib.QbItemType == QbItemType.StructItemString && qib.ItemQbKey != null && qib.ItemQbKey.Crc == qkCompMovie.Crc)
                    {
                        int m = i + 1;
                        if (m < currTierCount)
                            ((QbItemString)qib).Strings[0] = string.Format("coop_{0}", (m < coopMoviesCount ? m : (m % coopMoviesCount == 0 ? coopMoviesCount : m % coopMoviesCount)).ToString().PadLeft(2,'0'));
                        else
                            ((QbItemString)qib).Strings[0] = "singleplayer_end"; //on 2nd last tier

                    }
                }

                if (i == currTierCount) //last tier
                {
                    QbItemBase tmp = srcTier.FindItem(qkCompMovie, false);
                    if (tmp != null)
                        srcTier.RemoveItem(tmp); //no movie in last coop tier

                    tmp = srcTier.FindItem(qkSetList, false);
                    if (tmp != null)
                        srcTier.RemoveItem(tmp);

                    tmp = new QbItemQbKey(guitarProgressionQb);
                    tmp.Create(QbItemType.StructItemQbKey);
                    tmp.ItemQbKey = qkLevel2.Clone();
                    ((QbItemQbKey)tmp).Values = new QbKey[] { QbKey.Create("load_z_hell") };
                    srcTier.AddItem(tmp);

                    tmp = new QbItemQbKey(guitarProgressionQb);
                    tmp.Create(QbItemType.StructItemQbKey);
                    //tmp.ItemQbKey = null
                    ((QbItemQbKey)tmp).Values = new QbKey[] { QbKey.Create("nocash") };
                    srcTier.AddItem(tmp);

                }

                coopSongsSec.AddItem(srcTier);

                coopQb.AlignPointers();
                coopQb.IsValid();
            }

            #endregion

            #region copy songs to progress values

            QbItemStruct careerSongs = guitarProgressionQb.FindItem(QbKey.Create("GH3_Career_NumSongToProgress"), false) as QbItemStruct;
            QbItemStruct coopSongs = coopQb.FindItem(QbKey.Create("GH3_COOPCareer_NumSongToProgress"), false) as QbItemStruct;

            foreach (QbItemBase qib in careerSongs.Items)
            {
                QbItemInteger qbVal = coopSongs.FindItem(qib.ItemQbKey, false) as QbItemInteger;
                if (qbVal != null)
                    qbVal.Values[0] = ((QbItemInteger)qib).Values[0];
            }

            #endregion

            #region copy progression

            QbItemArray careerSongsProg = guitarProgressionQb.FindItem(QbKey.Create("GH3_Career_Progression"), false) as QbItemArray;
            QbItemArray coopSongsProg = coopQb.FindItem(QbKey.Create("GH3_CoopCareer_Progression"), false) as QbItemArray;

            string[] masks = new string[4];

            masks[0] = "career_tier{0}_songscomplete";
            masks[1] = "career_tier{0}_encoreunlock";
            masks[2] = "career_tier{0}_encorecomplete";
            masks[3] = "career_tier{0}_complete";

            //remove existing progression entries
            for (int i = 1; i <= currCoopTierCount; i++)
            {
                for (int c = 0; c < masks.Length; c++)
                {
                    QbItemBase qib = findTierProgStruct(QbKey.Create(string.Format(masks[c], i.ToString())), coopSongsProg);
                    if (qib != null)
                        coopSongsProg.Items[0].RemoveItem(qib);
                }
            }

            //point all checks for the setlist being complete to the last tier, do while less items in list
            QbKey qkEndOrig = QbKey.Create(string.Format(masks[3], currCoopTierCount - 1)); //-1 if original coop tier list
            QbKey qkEndTG = QbKey.Create(string.Format(masks[3], currCoopTierCount)); //TheGHOST has alreay edited this ISO
            QbKey qkEndNew = QbKey.Create(string.Format(masks[3], currTierCount)); //New value
            coopSongsProg.Items[0].FindItem(true, delegate(QbItemBase qb)
                {
                    if (qb.ItemQbKey != null && qb.ItemQbKey.Crc == qkAtom.Crc)
                    {
                        QbItemQbKey qbk = (QbItemQbKey)qb;
                        if (qbk.Values[0].Crc == qkEndOrig.Crc || qbk.Values[0].Crc == qkEndTG.Crc)
                            qbk.Values[0] = qkEndNew;
                    }
                    return false;
                });

            QbItemBase qibUnlock = findTierProgStruct(QbKey.Create("career_unlock_unlockedsongs"), coopSongsProg);

            //edit to set end unlock info.  We hack this to just point to the last tier (so we can allow GH3 to have 1 toer if required)
            qibUnlock.FindItem(true, delegate(QbItemBase qb)
                {
                    if (qb.ItemQbKey != null && qb.ItemQbKey.Crc == qkTier.Crc)
                        ((QbItemInteger)qb).Values[0] = (uint)currTierCount; //point to the last tier
                    return false;
                });

            //insert new entries
            for (int i = 1; i <= currTierCount; i++)
            {
                for (int c = 0; c < masks.Length; c++)
                {
                    QbItemBase qib = findTierProgStruct(QbKey.Create(string.Format(masks[c], i.ToString())), careerSongsProg);
                    if (qib == null)
                        continue;

                    qib = qib.Clone();

                    qib.FindItem(true, delegate(QbItemBase qb)
                        {
                            if (qb.ItemQbKey != null && qb.ItemQbKey.Crc == qkNumSongs.Crc)
                                ((QbItemQbKey)qb).Values[0] = qkCoopNumSongs.Clone();
                            return false;
                        });

                    coopSongsProg.Items[0].InsertItem(qib, qibUnlock, true);

                }
            }

            #endregion

            coopQb.AlignPointers();
            coopQb.IsValid();
        }
Exemple #8
0
        private static void addSongToSonglist(QbFile qbSongList, QbKey qkSong)
        {
            QbItemStruct songs = qbSongList.FindItem(QbKey.Create("permanent_songlist_props"), false) as QbItemStruct;
            QbItemArray songsList = qbSongList.FindItem(QbKey.Create("gh3_songlist"), false) as QbItemArray;
            if (songsList != null)
            {
                List<QbKey> songlistQk = new List<QbKey>(((QbItemQbKey)songsList.Items[0]).Values);

                if (!songlistQk.Contains(qkSong))
                {
                    songs.AddItem((QbItemBase)SongQb.CreateSong(songs.Root, qkSong.Text));
                    songlistQk.Add(qkSong);
                }

                //update gh3_songlist
                ((QbItemQbKey)songsList.Items[0]).Values = songlistQk.ToArray();

                qbSongList.AlignPointers();
                qbSongList.IsValid();
            }
        }
Exemple #9
0
 public void SetCheats(QbFile menuCheatsQb)
 {
     if (_project.GameInfo.Game == Game.GH3_Wii || _project.GameInfo.Game == Game.GHA_Wii)
     {
         //edit the cheats
         uint t = 0x00010000;
         uint f = 0x00011000;
         bool b = true;
         menuCheatsQb.FindItem(true, delegate(QbItemBase qib)
         {
             if (qib.QbItemType == QbItemType.StructItemArray && qib.ItemQbKey == QbKey.Create("unlock_pattern"))
             {
                 uint[] ui = new uint[1];
                 if (b)
                 {
                     ui[0] = t;
                     t >>= 4;
                 }
                 else
                 {
                     ui[0] = f;
                     f >>= 4;
                 }
                 b = !b;
                 ((QbItemInteger)qib.Items[0]).Values = ui;
             }
             return false;
         });
         menuCheatsQb.AlignPointers();
         menuCheatsQb.IsValid();
     }
 }
Exemple #10
0
        public void ResetBonusInfoText(QbFile storeDataQb, string infoText)
        {
            if (_project.GameInfo.Game == Game.GH3_Wii || _project.GameInfo.Game == Game.GHA_Wii)
            {
                QbItemArray qa = storeDataQb.FindItem(QbKey.Create("Bonus_Songs_Info"), false) as QbItemArray;

                if (qa != null)
                {
                    //set all prices to 0
                    QbKey info = QbKey.Create("text");
                    qa.FindItem(true, delegate(QbItemBase qib)
                    {
                        if (qib.ItemQbKey != null && qib.ItemQbKey.Crc == info.Crc)
                            ((QbItemString)qib).Strings[0] = infoText;
                        return false; //loop until end of qb
                    });

                    storeDataQb.AlignPointers();
                    storeDataQb.IsValid();
                }
            }
        }