protected Story PrintInternalStory(StoryProgressionObject manager, string storyKey, string summaryKey, object[] oldParameters, string[] extended, PerformFormat format, bool notify, SummaryPerSim summaryPerSim, StoryLogging logging) { bool matchesAlert = notify, foundSim = false, foundLot = false; Story.Element element1 = null; Story.Element element2 = null; CASAgeGenderFlags firstGender = CASAgeGenderFlags.None; CASAgeGenderFlags secondGender = CASAgeGenderFlags.None; List <object> newParameters = new List <object>(); if (!matchesAlert) { if (oldParameters.Length == 0) { matchesAlert = true; } else if (manager != null) { foreach (object obj in oldParameters) { SimDescription sim = null; if (obj is Sim) { sim = (obj as Sim).SimDescription; } else { sim = obj as SimDescription; } if (sim != null) { if (manager.MatchesAlertLevel(sim)) { matchesAlert = true; break; } } else { Lot lot = obj as Lot; if ((lot != null) && (lot.Household != null)) { if (manager.MatchesAlertLevel(lot.Household.AllSimDescriptions)) { matchesAlert = true; break; } } } } } } foreach (object obj in oldParameters) { SimDescription sim = null; if (obj is Sim) { sim = (obj as Sim).SimDescription; } else { sim = obj as SimDescription; } if (sim != null) { newParameters.Add(obj); if ((summaryPerSim == SummaryPerSim.Yes) || (!foundSim)) { AddSummary(manager, sim, summaryKey, extended, logging); } AddGenderNouns(sim, newParameters); foundSim = true; if (element1 == null) { firstGender = sim.Gender; element1 = new Story.Element(sim); } else if (element2 == null) { secondGender = sim.Gender; element2 = new Story.Element(sim); } } else { Lot lot = obj as Lot; if (lot != null) { string name = lot.Name.Trim(); if (string.IsNullOrEmpty(name)) { name = Localize("SomeHome"); } newParameters.Add(name); name = lot.Address.Trim(); if (string.IsNullOrEmpty(name)) { name = Localize("SomeAddress"); } newParameters.Add(name); foundLot = true; if (!string.IsNullOrEmpty(lot.Name)) { AddSummary(manager, lot.Name, summaryKey, null, matchesAlert, logging); } AddSummary(manager, lot.Address, summaryKey, extended, matchesAlert, logging); if (element1 == null) { element1 = new Story.Element(lot.ObjectId); } else if (element2 == null) { element2 = new Story.Element(lot.ObjectId); } } else { newParameters.Add(obj); string str = obj as string; if (str != null) { if ((!foundSim) && (foundLot)) { AddSummary(manager, str, summaryKey, extended, matchesAlert, logging); } } } } } if (((logging & StoryLogging.Notice) == StoryLogging.Notice) && ((!foundSim) || (matchesAlert))) { string text = storyKey; if (format == PerformFormat.Yes) { object[] parameters = newParameters.ToArray(); string uniqueKey = manager.UnlocalizedName + storyKey; List <AvailableStory> stories; if (!mValidStories.TryGetValue(uniqueKey, out stories)) { stories = new List <AvailableStory>(); mValidStories.Add(uniqueKey, stories); for (int i = 0; i <= 9; i++) { AvailableStory story = new AvailableStory(manager, storyKey + i.ToString(), parameters); if (!story.IsValid) { continue; } stories.Add(story); } } if (stories.Count > 0) { AvailableStory set = RandomUtil.GetRandomObjectFromList(stories); text = set.Localize(manager, firstGender, secondGender, parameters); IncStat("Story: " + uniqueKey); } else { text = manager.Localize(storyKey + "0", false, parameters); IncStat("Missing: " + text, Common.DebugLevel.High); } } if (!string.IsNullOrEmpty(text)) { return(NewStory(new Story(manager, text, element1, element2))); } } return(new Story(manager, null, null)); }