protected static void Consign(Dictionary <ulong, List <ConsignedObjectProxy> > lookup, Dictionary <ObjectGuid, float> consignAttempts, float[] consignmentPrices, float madeGoodSaleThreshold, float reputationBonusForPositiveFeedback, Curve qualityVsReputationCurve, float sellXItemsOpportunityReputationGainMultiplier, int consignmentLifespan, float dailyNumberOfAttemptsDecrement, Curve reputationVsStoreFeeCurve, int numberOfTopSellingItems, float makeXSimoleonsOpportunityConsignmentFeeMultiplier) { if (lookup != null) { Dictionary <ulong, SimDescription> sims = SimListing.GetSims <SimDescription>(null, false); foreach (ulong num in lookup.Keys) { SimDescription desc = null; sims.TryGetValue(num, out desc); if ((desc != null) && (desc.CreatedSim != null))// && desc.CreatedSim.IsInActiveHousehold) { Consignment consignment = desc.SkillManager.AddElement(SkillNames.Consignment) as Consignment; bool unsold = false; int totalSale = 0x0; List <Pair <int, IGameObject> > list = new List <Pair <int, IGameObject> >(); bool bornSalesmanAdded = false; string displayName = null; List <ConsignedObjectProxy> list2 = lookup[num]; int index = 0x0; while (index < list2.Count) { ConsignedObjectProxy local1 = list2[index]; local1.Age++; float chance = 0; try { if (list2[index].Object != null) { chance = list2[index].GetChanceOfSale(desc.CreatedSim); } else { list2.RemoveAt(index); continue; } } catch (Exception e) { Common.DebugException("Consignment Section A", e); chance = 1f; } if (RandomUtil.RandomChance01(chance)) { if (list2[index].Age >= consignmentPrices.Length) { list2[index].Age = consignmentPrices.Length - 1; } int valueOfSale = list2[index].GetValueOfSale(desc); totalSale += valueOfSale; float quality = list2[index].GetQuality(); try { if ((((float)valueOfSale) / ((float)list2[index].Object.Value)) >= madeGoodSaleThreshold) { desc.CreatedSim.BuffManager.AddElement(BuffNames.MadeGoodSale, Origin.None); } if (!bornSalesmanAdded && (((desc.TraitManager.HasElement(TraitNames.BornSalesman) && (quality >= TraitTuning.BornSalesmanQualityMinimumThresholdForPositiveFeedback)) && RandomUtil.InterpolatedChance(TraitTuning.BornSalesmanQualityMinimumThresholdForPositiveFeedback, 1f, TraitTuning.BornSalesmanQualityMinimumChanceOfPositiveFeedback, TraitTuning.BornSalesmanQualityMaximumChanceOfPositiveFeedback, quality)) || ((!desc.TraitManager.HasElement(TraitNames.BornSalesman) && (quality >= ConsignmentRegister.kQualityMinimumThreshold)) && RandomUtil.InterpolatedChance(ConsignmentRegister.kQualityMinimumThreshold, 1f, ConsignmentRegister.kQualityMinimumChanceOfPositiveFeedback, ConsignmentRegister.kQualityMaximumChanceOfPositiveFeedback, quality)))) { bornSalesmanAdded = true; displayName = list2[index].DisplayName; consignment.TrackReputationChange(reputationBonusForPositiveFeedback); } float reputationChange = qualityVsReputationCurve.Fx(quality); if (consignment.OppItemsSoldLifetimeOpportunityCompleted && (reputationChange > 0f)) { reputationChange *= sellXItemsOpportunityReputationGainMultiplier; } if (desc.TraitManager.HasElement(TraitNames.BornSalesman) && (reputationChange > 0f)) { reputationChange *= TraitTuning.BornSalesmanReputationOnSaleBonusMultiplier; } consignment.TrackConsignmentSale(list2[index].Object, valueOfSale, reputationChange); } catch (Exception e) { Common.DebugException("Consignment Section B", e); } list.Add(new Pair <int, IGameObject>(valueOfSale, list2[index].Object)); EventTracker.SendEvent(EventTypeId.kSoldConsignedObject, desc.CreatedSim); GameObject obj2 = list2[index].Object as GameObject; if (obj2 != null) { Consignments.NotifySell(desc, obj2, valueOfSale); } list2.RemoveAt(index); } else if (list2[index].Age >= consignmentLifespan) { unsold = true; consignment.TrackConsignmentReturn(); if (desc.CreatedSim.Inventory.ValidForThisInventory(list2[index].Object)) { Inventories.TryToMove(list2[index].Object, desc.CreatedSim); } else { desc.CreatedSim.Household.SharedFamilyInventory.Inventory.TryToAdd(list2[index].Object); } list2[index].Object.EnableInteractions(); list2.RemoveAt(index); } else { index++; } } DisplayStory(desc, list, totalSale, unsold, displayName, reputationVsStoreFeeCurve, numberOfTopSellingItems, makeXSimoleonsOpportunityConsignmentFeeMultiplier); } } } foreach (ObjectGuid guid in new List <ObjectGuid>(consignAttempts.Keys)) { float attempts = consignAttempts[guid]; consignAttempts[guid] = Math.Max((float)0f, (float)(attempts - dailyNumberOfAttemptsDecrement)); } }