public override bool Run() { if (!base.Actor.RouteToObjectRadialRange(base.Target, 0f, base.Target.MaxProximityBeforeSwiping())) { base.Actor.PlayRouteFailure(); return false; } base.Actor.RouteTurnToFace(base.Target.Position); base.StandardEntry(); base.BeginCommodityUpdates(); List<ObjectGuid> objectsICanBuyInDisplay = DisplayHelper.GetObjectsICanBuyInDisplay(base.Actor, base.Target); RandomUtil.RandomizeListOfObjects<ObjectGuid>(objectsICanBuyInDisplay); for (int i = 0; base.Actor.HasNoExitReason() && (i < objectsICanBuyInDisplay.Count); i++) { ObjectGuid guid = objectsICanBuyInDisplay[i]; GameObject target = GlobalFunctions.ConvertGuidToObject<GameObject>(guid); if (target != null) { base.Actor.RouteTurnToFace(target.Position); int priority = 100; base.Actor.LookAtManager.SetInteractionLookAt(target, priority, LookAtJointFilter.HeadBones | LookAtJointFilter.TorsoBones); bool flag = RandomUtil.RandomChance01(CraftersConsignment.kBrowseChanceOfDislikingObject); ThoughtBalloonManager.BalloonData bd = new ThoughtBalloonManager.BalloonData(target.GetThumbnailKey()); if (flag) { bd.LowAxis = ThoughtBalloonAxis.kDislike; } base.Actor.ThoughtBalloonManager.ShowBalloon(bd); string state = "1"; if (flag) { state = RandomUtil.GetRandomStringFromList(new string[] { "3", "5", "CantStandArtTraitReaction" }); } else { state = RandomUtil.GetRandomStringFromList(new string[] { "0", "1", "2" }); } base.EnterStateMachine("viewobjectinteraction", "Enter", "x"); base.AnimateSim(state); base.AnimateSim("Exit"); base.Actor.LookAtManager.ClearInteractionLookAt(); } } if (base.Autonomous && !base.Actor.IsSelectable) { float chance = CraftersConsignment.kBrowseBaseChanceOfBuyingObjectWithoutSale + base.Target.mSaleDiscount; if (RandomUtil.RandomChance01(chance)) { List<ObjectGuid> randomList = DisplayHelper.GetObjectsICanBuyInDisplay(base.Actor, base.Target); if (randomList.Count > 0) { ObjectGuid randomObjectFromList = RandomUtil.GetRandomObjectFromList<ObjectGuid>(randomList); if (randomObjectFromList != ObjectGuid.InvalidObjectGuid) { PurchaseItemEx.Definition continuationDefinition = new PurchaseItemEx.Definition(randomObjectFromList, DisplayHelper.ComputeFinalPriceOnObject(randomObjectFromList), false); base.TryPushAsContinuation(continuationDefinition); } } } } if (!base.Autonomous) { List<ObjectGuid> list3 = DisplayHelper.GetObjectsICanBuyInDisplay(base.Actor, base.Target); if (objectsICanBuyInDisplay.Count > 0) { StringBuilder builder = new StringBuilder(); builder.AppendLine(CraftersConsignment.LocalizeString(base.Actor.IsFemale, "BrowseItemsForPurchaseHeading", new object[0])); for (int j = 0; j < list3.Count; j++) { GameObject obj3 = GlobalFunctions.ConvertGuidToObject<GameObject>(list3[j]); if (obj3 != null) { ServingContainer container = obj3 as ServingContainer; if (container != null) { builder.AppendLine(CraftersConsignment.LocalizeString(base.Actor.IsFemale, "BrowseLineItem", new object[] { container.CookingProcess.RecipeNameFinal, DisplayHelper.ComputeFinalPriceOnObject(list3[j]) })); } else { Common.Notify("BrowseEx for " + obj3.CatalogName); builder.AppendLine(CraftersConsignment.LocalizeString(base.Actor.IsFemale, "BrowseLineItem", new object[] { obj3.CatalogName, DisplayHelper.ComputeFinalPriceOnObject(list3[j]) })); } } } base.Actor.ShowTNSIfSelectable(builder.ToString(), StyledNotification.NotificationStyle.kGameMessagePositive); } } base.EndCommodityUpdates(true); base.StandardExit(); return true; }
public override bool Run() { if (!base.Actor.RouteToObjectRadialRange(base.Target, 0f, base.Target.MaxProximityBeforeSwiping())) { //Honestly just plain annoying to watch, especially since sims love this interaction so much //base.Actor.PlayRouteFailure(); return(false); } base.Actor.RouteTurnToFace(base.Target.Position); base.StandardEntry(); base.BeginCommodityUpdates(); List <ObjectGuid> objectsICanBuyInDisplay = DisplayHelper.GetObjectsICanBuyInDisplay(base.Actor, base.Target); RandomUtil.RandomizeListOfObjects <ObjectGuid>(objectsICanBuyInDisplay); for (int i = 0; base.Actor.HasNoExitReason() && (i < objectsICanBuyInDisplay.Count); i++) { ObjectGuid guid = objectsICanBuyInDisplay[i]; GameObject target = GlobalFunctions.ConvertGuidToObject <GameObject>(guid); if (target != null) { base.Actor.RouteTurnToFace(target.Position); int priority = 100; base.Actor.LookAtManager.SetInteractionLookAt(target, priority, LookAtJointFilter.HeadBones | LookAtJointFilter.TorsoBones); bool flag = RandomUtil.RandomChance01(CraftersConsignment.kBrowseChanceOfDislikingObject); ThoughtBalloonManager.BalloonData bd = new ThoughtBalloonManager.BalloonData(target.GetThumbnailKey()); if (flag) { bd.LowAxis = ThoughtBalloonAxis.kDislike; } base.Actor.ThoughtBalloonManager.ShowBalloon(bd); string state = "1"; if (flag) { state = RandomUtil.GetRandomStringFromList(new string[] { "3", "5", "CantStandArtTraitReaction" }); } else { state = RandomUtil.GetRandomStringFromList(new string[] { "0", "1", "2" }); } base.EnterStateMachine("viewobjectinteraction", "Enter", "x"); base.AnimateSim(state); base.AnimateSim("Exit"); base.Actor.LookAtManager.ClearInteractionLookAt(); } } if (base.Autonomous && !base.Actor.IsSelectable) { float chance = CraftersConsignment.kBrowseBaseChanceOfBuyingObjectWithoutSale + base.Target.mSaleDiscount; if (RandomUtil.RandomChance01(chance)) { List <ObjectGuid> randomList = DisplayHelper.GetObjectsICanBuyInDisplay(base.Actor, base.Target); if (randomList.Count > 0) { ObjectGuid randomObjectFromList = RandomUtil.GetRandomObjectFromList <ObjectGuid>(randomList); if (randomObjectFromList != ObjectGuid.InvalidObjectGuid) { PurchaseItemEx.Definition continuationDefinition = null; if (Actor.Motives.IsHungry()) { PreparedFood food = GlobalFunctions.ConvertGuidToObject <PreparedFood>(randomObjectFromList); if (food != null) { continuationDefinition = new PurchaseItemEx.BuyFoodDefinition(food); } } if (continuationDefinition == null) { continuationDefinition = new PurchaseItemEx.Definition(randomObjectFromList, false); } base.TryPushAsContinuation(continuationDefinition); } } } } if (!base.Autonomous) { List <ObjectGuid> list3 = DisplayHelper.GetObjectsICanBuyInDisplay(base.Actor, base.Target); if (objectsICanBuyInDisplay.Count > 0) { StringBuilder builder = new StringBuilder(); builder.AppendLine(CraftersConsignment.LocalizeString(base.Actor.IsFemale, "BrowseItemsForPurchaseHeading", new object[0])); for (int j = 0; j < list3.Count; j++) { GameObject obj3 = GlobalFunctions.ConvertGuidToObject <GameObject>(list3[j]); if (obj3 != null) { ServingContainer container = obj3 as ServingContainer; if (container != null) { builder.AppendLine(CraftersConsignment.LocalizeString(base.Actor.IsFemale, "BrowseLineItem", new object[] { container.CookingProcess.RecipeNameFinal, DisplayHelper.ComputeFinalPriceOnObject(list3[j]) })); } else { Common.Notify("BrowseEx for " + obj3.CatalogName); builder.AppendLine(CraftersConsignment.LocalizeString(base.Actor.IsFemale, "BrowseLineItem", new object[] { obj3.CatalogName, DisplayHelper.ComputeFinalPriceOnObject(list3[j]) })); } } } base.Actor.ShowTNSIfSelectable(builder.ToString(), StyledNotification.NotificationStyle.kGameMessagePositive); } } base.EndCommodityUpdates(true); base.StandardExit(); return(true); }