public Dictionary <string, List <StoreItem> > ItemDictionaryBooks() { Dictionary <string, List <StoreItem> > books = Bookstore.sItemDictionary; //Add written books into the shopping list List <Sim> sList = new List <Sim>(Sims3.Gameplay.Queries.GetObjects <Sim>()); BookWrittenData data3 = null; foreach (Sim s in sList) { if (s.SimDescription != null && s.SimDescription.ChildOrAbove && s.SkillManager != null) { Writing element = s.SkillManager.GetElement(SkillNames.Writing) as Writing; if ((element != null) && (element.WrittenBookDataList.Count > 0)) { BookGeneralStoreItem item = null; foreach (WrittenBookData data in element.WrittenBookDataList.Values) { //Check has the book already been added object o = books["General"].Find(delegate(StoreItem i) { return(i.Name.Equals(data.Title)); }); if (o == null) { data3 = new BookWrittenData(data, false); data3.Author = s.SimDescription.FullName; ThumbnailKey thumb = new ThumbnailKey(new ResourceKey((ulong)ResourceUtils.XorFoldHashString32("book_standard"), 0x1661233, 1), ThumbnailSize.Medium, ResourceUtils.HashString32("default"), ResourceUtils.HashString32(data.MaterialState)); item = new BookGeneralStoreItem(data.Title, (float)data.Value, data3, thumb, ("BookGeneral_" + data.Title.Replace(" ", string.Empty)), new CreateObjectCallback(CreateWrittenBookCallback), new ProcessObjectCallback(ProcessWrittenBookCallback), null, new List <WorldType> { WorldType.Undefined, WorldType.Base, WorldType.Downtown }, data3.Author, data.Title, data.NumPages, BookData.GetGenreLocalizedString(data.Genre)); if (books.ContainsKey("General")) { books["General"].Add(item); books["All"].Add(item); } } } } } } return(books); }
public void OnWorldLoadFinished() { Dictionary<BookWrittenData, bool> existing = new Dictionary<BookWrittenData, bool>(); foreach (BookWritten book in Sims3.Gameplay.Queries.GetObjects<BookWritten>()) { BookWrittenData bookData = book.Data as BookWrittenData; if (bookData == null) continue; existing[bookData] = true; } List<string> remove = new List<string>(); foreach (SimDescription sim in SimListing.GetResidents(true).Values) { if (sim.SkillManager == null) continue; Writing skill = sim.SkillManager.GetSkill<Writing>(SkillNames.Writing); if (skill == null) continue; if (skill.WrittenBookDataList == null) continue; foreach (WrittenBookData book in skill.WrittenBookDataList.Values) { book.Author = sim.FullName; string id = book.Title + book.Author; BookWrittenData bookData; if (!BookData.BookWrittenDataList.TryGetValue(id, out bookData)) { // Constructor auto-adds to dictionary bookData = new BookWrittenData(book, true); } existing[bookData] = true; } } RemoveWrittenData("General"); RemoveWrittenData("All"); List<StoreItem> general = null, all = null; Bookstore.mItemDictionary.TryGetValue("General", out general); Bookstore.mItemDictionary.TryGetValue("All", out all); List<WorldType> worldTypes = new List<WorldType>(); worldTypes.Add(GameUtils.GetCurrentWorldType()); Writing stateSkill = new Writing(); foreach (KeyValuePair<string,BookWrittenData> pair in BookData.BookWrittenDataList) { BookWrittenData data = pair.Value; if (!existing.ContainsKey(pair.Value)) { remove.Add(pair.Key); continue; } else if ((string.IsNullOrEmpty(data.Title)) || (string.IsNullOrEmpty(data.Author))) { remove.Add(pair.Key); continue; } string geoState, materialState; stateSkill.GetGeoAndMaterialStates(data.Genre, out geoState, out materialState); if (string.IsNullOrEmpty(data.GeometryState)) { data.GeometryState = geoState; } if (string.IsNullOrEmpty(data.MaterialState)) { data.MaterialState = materialState; } ThumbnailKey thumb = new ThumbnailKey(new ResourceKey((ulong)ResourceUtils.XorFoldHashString32("book_standard"), 0x1661233, 0x1), ThumbnailSize.Medium, ResourceUtils.HashString32(data.GeometryState), ResourceUtils.HashString32(data.MaterialState)); BookGeneralStoreItem item = new BookGeneralStoreItem(data.Title + " - " + data.Author, (float)data.Value, data, thumb, data.GenerateUIStoreItemID(), new CreateObjectCallback(CreateBookWrittenCallback), new ProcessObjectCallback(ProcessBookWrittenCallback), data.AllowedWorlds, worldTypes, data.Author, data.Title, data.Length, data.GenreString); general.Add(item); all.Add(item); } foreach (string id in remove) { BookData.BookWrittenDataList.Remove(id); BooterLogger.AddTrace("Removed: " + id); } }
public void OnWorldLoadFinished() { Dictionary <BookWrittenData, bool> existing = new Dictionary <BookWrittenData, bool>(); foreach (BookWritten book in Sims3.Gameplay.Queries.GetObjects <BookWritten>()) { BookWrittenData bookData = book.Data as BookWrittenData; if (bookData == null) { continue; } existing[bookData] = true; } List <string> remove = new List <string>(); foreach (SimDescription sim in SimListing.GetResidents(true).Values) { if (sim.SkillManager == null) { continue; } Writing skill = sim.SkillManager.GetSkill <Writing>(SkillNames.Writing); if (skill == null) { continue; } if (skill.WrittenBookDataList == null) { continue; } foreach (WrittenBookData book in skill.WrittenBookDataList.Values) { book.Author = sim.FullName; string id = book.Title + book.Author; BookWrittenData bookData; if (!BookData.BookWrittenDataList.TryGetValue(id, out bookData)) { // Constructor auto-adds to dictionary bookData = new BookWrittenData(book, true); } existing[bookData] = true; } } RemoveWrittenData("General"); RemoveWrittenData("All"); List <StoreItem> general = null, all = null; Bookstore.mItemDictionary.TryGetValue("General", out general); Bookstore.mItemDictionary.TryGetValue("All", out all); List <WorldType> worldTypes = new List <WorldType>(); worldTypes.Add(GameUtils.GetCurrentWorldType()); Writing stateSkill = new Writing(); foreach (KeyValuePair <string, BookWrittenData> pair in BookData.BookWrittenDataList) { BookWrittenData data = pair.Value; if (!existing.ContainsKey(pair.Value)) { remove.Add(pair.Key); continue; } else if ((string.IsNullOrEmpty(data.Title)) || (string.IsNullOrEmpty(data.Author))) { remove.Add(pair.Key); continue; } string geoState, materialState; stateSkill.GetGeoAndMaterialStates(data.Genre, out geoState, out materialState); if (string.IsNullOrEmpty(data.GeometryState)) { data.GeometryState = geoState; } if (string.IsNullOrEmpty(data.MaterialState)) { data.MaterialState = materialState; } ThumbnailKey thumb = new ThumbnailKey(new ResourceKey((ulong)ResourceUtils.XorFoldHashString32("book_standard"), 0x1661233, 0x1), ThumbnailSize.Medium, ResourceUtils.HashString32(data.GeometryState), ResourceUtils.HashString32(data.MaterialState)); BookGeneralStoreItem item = new BookGeneralStoreItem(data.Title + " - " + data.Author, (float)data.Value, data, thumb, data.GenerateUIStoreItemID(), new CreateObjectCallback(CreateBookWrittenCallback), new ProcessObjectCallback(ProcessBookWrittenCallback), data.AllowedWorlds, worldTypes, data.Author, data.Title, data.Length, data.GenreString); general.Add(item); all.Add(item); } foreach (string id in remove) { BookData.BookWrittenDataList.Remove(id); BooterLogger.AddTrace("Removed: " + id); } }