public static List <IDescendantHouseholdUiData> GetTimeAlamanacDescendantHouseholdData(FutureDescendantService instance) { // custom BuildDescendantHouseholdSpecs(instance); List <IDescendantHouseholdUiData> list = new List <IDescendantHouseholdUiData>(); List <ulong> remove = new List <ulong>(); foreach (ulong num in FutureDescendantService.sPersistableData.DescendantHouseholdsMap.Keys) { // Overwatch does this too but no harm in doing it here too if (SimDescription.Find(num) == null && MiniSims.Find(num) == null) { remove.Add(num); } FutureDescendantService.DescendantHouseholdUiData item = new FutureDescendantService.DescendantHouseholdUiData { mAncestorSimId = num }; int householdWealthScore = 0; int numberOfMembers = 0; bool flag = false; foreach (FutureDescendantService.FutureDescendantHouseholdInfo info in FutureDescendantService.sPersistableData.DescendantHouseholdsMap[num]) { if (remove.Contains(num) && info.IsSimAnAncestor(num)) { FutureDescendantService.sPersistableData.InvalidDescendantHouseholdsInfo.Add(info); flag = true; continue; } if (!info.HasAncestorFromHousehold(Household.ActiveHousehold)) { flag = true; continue; } foreach (ulong num4 in info.mHouseholdMembers) { IMiniSimDescription iMiniSimDescription = SimDescription.GetIMiniSimDescription(num4); if ((iMiniSimDescription != null) && !item.mHouseholdMembers.Contains(iMiniSimDescription)) { item.mHouseholdMembers.Add(iMiniSimDescription); } } householdWealthScore += info.mCurrentHouseholdWealthScore; numberOfMembers += info.mCurrentDesiredHouseholdSize; } householdWealthScore /= Math.Max(1, FutureDescendantService.sPersistableData.DescendantHouseholdsMap[num].Count); numberOfMembers /= Math.Max(1, FutureDescendantService.sPersistableData.DescendantHouseholdsMap[num].Count); item.mHouseholdWorth = FutureDescendantService.GetWealthTypeString(householdWealthScore); item.mHouseholdSize = FutureDescendantService.GetHouseholdSizeString(numberOfMembers); if (item != null && !flag) { list.Add(item); } } return(list); }
public static void WipeDescendants() { if (FutureDescendantService.sPersistableData == null) { return; } if (Household.ActiveHousehold == null) { return; } foreach (FutureDescendantService.FutureDescendantHouseholdInfo info in FutureDescendantService.sPersistableData.ActiveDescendantHouseholdsInfo) { if (info.HasAncestorFromHousehold(Household.ActiveHousehold)) { FutureDescendantService.sPersistableData.InvalidDescendantHouseholdsInfo.Add(info); if (info.DescendantHousehold != null && !GameUtils.IsFutureWorld()) { foreach (ulong id in info.mHouseholdMembers) { MiniSimDescription mini = MiniSims.Find(id); if (mini != null) { foreach (SimDescription desc in Household.ActiveHousehold.AllSimDescriptions) { mini.RemoveMiniRelatioship(desc.SimDescriptionId); } } } } if (info.DescendantHousehold != null && GameUtils.IsFutureWorld()) { Annihilation.Cleanse(info.DescendantHousehold); } } } foreach (FutureDescendantService.FutureDescendantHouseholdInfo info in FutureDescendantService.sPersistableData.InvalidDescendantHouseholdsInfo) { FutureDescendantService.sPersistableData.ActiveDescendantHouseholdsInfo.Remove(info); } if (GameUtils.IsFutureWorld()) { // will axe map tags GetInstance().RemoveInactiveDescendantHouseholds(); } }
// externalized to Register and MasterController public static WorldName GetSimHomeworld(ulong sim) { MiniSimDescription desc = MiniSims.Find(sim); if (desc != null) { return(Traveler.Settings.GetHomeWorld(desc)); } SimDescription desc2 = SimDescription.Find(sim); if (desc2 != null) { return(Traveler.Settings.GetHomeWorld(desc2 as IMiniSimDescription)); } return(WorldName.Undefined); }