private void setCareerTiers(QbItemStruct careerSongsSec, int existingTierCount, int newTierCount, bool setUnlockIfOneTier) { //if setUnlockIfOneTier is false and we only have only 1 tier then don't unlock the new tiers, if tier 2 exists the lock is clones from that int add = newTierCount - existingTierCount; int clone; QbKey qkTier; QbKey qkNewTier; QbKey qkLastTier = QbKey.Create(string.Format("tier{0}", newTierCount.ToString())); for (int t = existingTierCount + 1; t <= newTierCount; t++) { int origTiersCount = Math.Min(existingTierCount, (_project.GameInfo.Game == Game.GH3_Wii) ? 8 : 6); //6 for aerosmith clone = t % origTiersCount; if (clone == 0) clone = origTiersCount; qkTier = QbKey.Create(string.Format("tier{0}", clone.ToString())); qkNewTier = QbKey.Create(string.Format("tier{0}", t.ToString())); QbItemStruct clonedTier = careerSongsSec.FindItem(qkTier, false).Clone() as QbItemStruct; clonedTier.ItemQbKey = qkNewTier.Clone(); if (clone == 1) //if tier 1 is being cloned then check is tier 1 has the unlocked value and make this the same { QbItemStruct tier2 = careerSongsSec.FindItem(QbKey.Create("tier2"), false) as QbItemStruct; if (tier2 != null) { tier2 = tier2.Clone() as QbItemStruct; QbItemInteger ul = tier2.FindItem(QbKey.Create("defaultunlocked"), false) as QbItemInteger; if (ul == null) //remove the cloned item { if ((ul = clonedTier.FindItem(QbKey.Create("defaultunlocked"), false) as QbItemInteger) != null) clonedTier.RemoveItem(ul); } } else if (!setUnlockIfOneTier) { //clear lock QbItemInteger ul = clonedTier.FindItem(QbKey.Create("defaultunlocked"), false) as QbItemInteger; if (ul != null) clonedTier.RemoveItem(ul); } } careerSongsSec.AddItem(clonedTier); } while (careerSongsSec.Items.Count > 3 && careerSongsSec.Items[careerSongsSec.Items.Count - 1].ItemQbKey.Crc != qkLastTier.Crc) careerSongsSec.RemoveItem(careerSongsSec.Items[careerSongsSec.Items.Count - 1]); //remove last item careerSongsSec.Root.AlignPointers(); careerSongsSec.Root.IsValid(); }
private QbItemStruct copyCareerTiers(QbItemStruct careerSongsSec, QbItemStruct toTier) { //all other tier structs have encore2 in them so add it. and no completion movie item QbItemBase tmp; QbKey qkInitialMovie = QbKey.Create("initial_movie"); QbKey qkCompletionMovie = QbKey.Create("completion_movie"); QbKey qkEncoreP1 = QbKey.Create("encorep1"); QbKey qkPrefix = QbKey.Create("prefix"); string prefix = ((QbItemString)toTier.FindItem(qkPrefix, false)).Strings[0]; QbItemStruct to = (QbItemStruct)careerSongsSec.Clone(); if ((tmp = to.FindItem(qkInitialMovie, false)) != null) to.RemoveItem(tmp); //remove initial move if found to.ItemQbKey = toTier.ItemQbKey.Clone(); ((QbItemString)to.FindItem(qkPrefix, false)).Strings[0] = prefix; QbItemQbKey encorep2 = new QbItemQbKey(to.Root); encorep2.Create(QbItemType.StructItemQbKey); encorep2.Values = new QbKey[] { QbKey.Create("encorep2") }; foreach (QbItemBase qb in to.Items) { if (qb.QbItemType == QbItemType.StructItemStruct) { if ((tmp = qb.FindItem(qkCompletionMovie, false)) != null) qb.RemoveItem(tmp); //remove initial move if found if ((tmp = qb.FindItem(false, delegate (QbItemBase q) { return (qb.QbItemType == QbItemType.StructItemQbKey && qb.ItemQbKey != null && qb.ItemQbKey.Crc == 0 && ((QbItemQbKey)qb).Values[0].Crc == qkEncoreP1.Crc); })) != null) { qb.InsertItem(encorep2.Clone(), tmp, false); } } } return to; }
private void insertFinishGame(QbItemStruct prog) { prog.FindItem(true, delegate(QbItemBase qib) { if (qib is QbItemStruct && qib.ItemQbKey.Crc == QbKey.Create("atom_params").Crc) { QbItemQbKey qk = new QbItemQbKey(prog.Root); qk.Create(QbItemType.StructItemQbKey); qk.Values = new QbKey[] { QbKey.Create("finished_game") }; ((QbItemStruct)qib).AddItem(qk); return true; //stop after the first find } return false; //return false to continue search }); }
internal SongQb(Project project, QbItemStruct song) { _song = song; QbItemBase temp; _hopoMeasure = null; _checksum = (QbItemQbKey)song.FindItem(QbKey.Create("checksum"), false); //_key = song.ItemQbKey; _key = QbKey.Create(((QbItemString)song.FindItem(QbKey.Create("name"), false)).Strings[0]); _title = (QbItemString)song.FindItem(QbKey.Create("title"), false); _artist = (QbItemString)song.FindItem(QbKey.Create("artist"), false); _leaderboard = (QbItemInteger)song.FindItem(QbKey.Create("leaderboard"), false); _year = (QbItemString)song.FindItem(QbKey.Create("year"), false); _boss = song.FindItem(QbKey.Create("boss"), false) as QbItemQbKey; //is this a boss temp = song.FindItem(QbKey.Create("band_playback_volume"), false); //sometimes integer instead of float if (temp == null) { _songVolume = new QbItemFloat(song.Root); _songVolume.Create(QbItemType.StructItemFloat); _songVolume.ItemQbKey = QbKey.Create("band_playback_volume"); _songVolume.Values = new float[1]; _songVolume.Values[0] = 0; song.AddItem(_songVolume); song.Root.AlignPointers(); } else if (temp is QbItemInteger) _songVolume = replaceItemIntForFloat(song, (QbItemInteger)temp); else _songVolume = (QbItemFloat)temp; temp = song.FindItem(QbKey.Create("guitar_playback_volume"), false); //sometimes integer instead of float if (temp == null) { _guitarVolume = new QbItemFloat(song.Root); _guitarVolume.Create(QbItemType.StructItemFloat); _guitarVolume.ItemQbKey = QbKey.Create("guitar_playback_volume"); _guitarVolume.Values = new float[1]; _guitarVolume.Values[0] = 0; song.AddItem(_guitarVolume); song.Root.AlignPointers(); } else if (temp is QbItemInteger) _guitarVolume = replaceItemIntForFloat(song, (QbItemInteger)temp); else _guitarVolume = (QbItemFloat)temp; _rhythmTrack = (QbItemInteger)song.FindItem(QbKey.Create("rhythm_track"), false); temp = song.FindItem(QbKey.Create("artist_text"), false); if (temp is QbItemString) { _artistTextString = (QbItemString)temp; _artistText = null; } else { _artistText = song.FindItem(QbKey.Create("artist_text"), false) as QbItemQbKey; _artistTextString = null; } _originalArtist = (QbItemInteger)song.FindItem(QbKey.Create("original_artist"), false); temp = song.FindItem(QbKey.Create("singer"), false); if (temp == null) //GH3 wii Cream sunshine for your love has no singer item { _singer = new QbItemQbKey(song.Root); _singer.Create(QbItemType.StructItemQbKey); _singer.ItemQbKey = QbKey.Create("singer"); _singer.Values = new QbKey[1]; _singer.Values[0] = QbKey.Create("male"); song.AddItem(_singer); song.Root.AlignPointers(); } else _singer = (QbItemQbKey)temp; _fretbarOffset = song.FindItem(QbKey.Create("fretbar_offset"), false) as QbItemInteger; _gemOffset = song.FindItem(QbKey.Create("gem_offset"), false) as QbItemInteger; _inputOffset = song.FindItem(QbKey.Create("input_offset"), false) as QbItemInteger; //this fixes an issue with GH3(cult of personality) and GHA (talk talking) if (this.key.Crc != this.checksum.Crc) _id = (project.GameInfo.Game == Game.GH3_Wii) ? this.checksum : this.key; else _id = this.checksum.HasText ? this.checksum : this.key; }