public override bool Run() { ForceKillSimNiec.Definition definition = base.InteractionDefinition as ForceKillSimNiec.Definition; List <Sim> list = new List <Sim>(); foreach (Sim sim in NFinalizeDeath.SC_GetObjects <Sim>()) { if (sim.SimDescription.ToddlerOrAbove && !sim.IsInActiveHousehold && sim.LotCurrent != Household.ActiveHousehold.LotHome) { // SpeedTrap.Sleep(10); sim.BuffManager.AddElement(BuffNames.Mourning, Origin.FromWitnessingDeath); BuffMourning.BuffInstanceMourning buffInstanceMourning = sim.BuffManager.GetElement(BuffNames.Mourning) as BuffMourning.BuffInstanceMourning; if (buffInstanceMourning != null) { buffInstanceMourning.MissedSim = Target.SimDescription; } // SpeedTrap.Sleep(10); sim.BuffManager.AddElement(BuffNames.HeartBroken, Urnstone.CalculateMourningMoodStrength(sim, sim.SimDescription), Origin.FromWitnessingDeath); BuffHeartBroken.BuffInstanceHeartBroken buffInstanceHeartBroken = sim.BuffManager.GetElement(BuffNames.HeartBroken) as BuffHeartBroken.BuffInstanceHeartBroken; if (buffInstanceHeartBroken != null) { buffInstanceHeartBroken.MissedSim = Target.SimDescription; } // SpeedTrap.Sleep(10); sim.BuffManager.AddElement(BuffNames.Negligent, Origin.FromNeglectingChildren); BuffNegligent.BuffInstanceNegligent buffInstanceNegligent = sim.BuffManager.GetElement(BuffNames.Negligent) as BuffNegligent.BuffInstanceNegligent; if (buffInstanceNegligent != null) { buffInstanceNegligent.MissedSims.Add(Target.SimDescription); } } } SpeedTrap.Sleep(10); if (Target.IsNPC) { SafeNRaas.NRUrnstones_CreateGrave(Target.SimDescription, definition.death, true, true); } return(true); }
// Methods public override bool Run() // Run { WelcomeWagonSituation.Create(Actor.LotHome); if (Household.ActiveHousehold == null || Household.ActiveHousehold.LotHome == null) { return(false); } List <Sim> list = new List <Sim>(); foreach (Sim sim in LotManager.Actors) { if (sim.SimDescription.ToddlerOrAbove && !sim.IsInActiveHousehold && sim.LotCurrent != Household.ActiveHousehold.LotHome) { //Urnstone.FinalizeSimDeath(sim.SimDescription, sim.Household, false); //sim.InteractionQueue.CancelAllInteractions(); sim.ModifyFunds(-99999999); sim.BuffManager.AddElement(BuffNames.Mourning, Urnstone.CalculateMourningMoodStrength(sim, sim.SimDescription), Origin.FromWitnessingDeath); BuffMourning.BuffInstanceMourning buffInstanceMourning = sim.BuffManager.GetElement(BuffNames.Mourning) as BuffMourning.BuffInstanceMourning; if (buffInstanceMourning != null) { buffInstanceMourning.MissedSim = Actor.SimDescription; } //sim.Occupation.FireSim(true); //list.Add(sim); //sim.Occupation.FireSim(true); list.Add(sim); } } if (list.Count > 0) { Sim randomObjectFromList = RandomUtil.GetRandomObjectFromList <Sim>(list); if (!randomObjectFromList.InWorld) { randomObjectFromList.AddToWorld(); } //randomObjectFromList.SimDescription.Occupation.FireSim(true); //Urnstone.FinalizeSimDeath(randomObjectFromList.SimDescription, randomObjectFromList.Household, false); randomObjectFromList.InteractionQueue.CancelAllInteractions(); //Urnstone.FinalizeSimDeath(randomObjectFromList.SimDescription, randomObjectFromList.Household, false); //randomObjectFromList.FlagSet(Sim.SimFlags.IgnoreDoorLocks, true); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); randomObjectFromList.InteractionQueue.Add(VisitLot.Singleton.CreateInstance(Household.ActiveHousehold.LotHome, randomObjectFromList, new InteractionPriority((InteractionPriorityLevel)349), false, true)); return(true); } return(false); }
/* * [Tunable] * [TunableComment("Range: Fun/Stress motive amount. Description: Amount of stress that a Sim gets when seeing another Sim die.")] * public static float kWitnessDeathStressPenalty = -50f; * * [Tunable] * [TunableComment("Range: Float multiplier. Description: Multiplier on additional stress when a family member of loved one sees a Sim die.")] * public static float kWitnessDeathRelationshipMultiplier = 1.5f; * * [TunableComment("Range: Fun/Stress motive amount. Description: Amount of fun that a Sim gets when seeing an enemy Sim die.")] * [Tunable] * public static float kWitnessEnemyDeathFunGain = 50f; * */ public override bool Run() { SwimmingInPool swimmingInPool = Actor.Posture as SwimmingInPool; if (swimmingInPool != null && !swimmingInPool.ContainerPool.RouteToEdge(Actor)) { return(false); } SwimmingInPool swimmingInPool2 = Target.Posture as SwimmingInPool; if (swimmingInPool2 != null) { if (!swimmingInPool2.ContainerPool.RouteToEdge(Actor)) { return(false); } Actor.RouteTurnToFace(Target.Position); } else if (!GlobalFunctions.ObjectsWithinRadiusOfEachOther(Actor, Target, 2f)) { if (Actor == null || Target == null || Target.LotCurrent == null) { return(false); } Route route = Actor.CreateRoute(); if (route == null) { return(false); } RequestWalkStyle(Sim.WalkStyle.Run); route.PlanToPointRadialRange(Target.Position, 2f, 6f, RouteDistancePreference.PreferNearestToRouteDestination, RouteOrientationPreference.TowardsObject, Target.LotCurrent.LotId, new int[1] { Target.RoomId }); if (Actor == null || !Actor.DoRoute(route)) { return(false); } UnrequestWalkStyle(Sim.WalkStyle.Run); } else { Actor.RouteTurnToFace(Target.Position); } if (Simulator.CheckYieldingContext(false)) { Simulator.Sleep(20); } if (Target.SimDescription == null || !Target.SimDescription.IsValidDescription) { return(true); } NFinalizeDeath.CheckYieldingContext(); StateMachineClient stateMachineClient = StateMachineClient.Acquire(Actor, "DeathReactions"); stateMachineClient.SetActor("x", Actor); stateMachineClient.EnterState("x", "Enter"); BeginCommodityUpdates(); bool flag = false; bool flag2 = false; //bool flag3 = false; LTRData.RelationshipClassification relationshipClassification = LTRData.RelationshipClassification.Low; Relationship relationship = Relationship.Get(Actor, Target, false); if (relationship != null) { relationshipClassification = LTRData.Get(relationship.LTR.CurrentLTR).RelationshipClass; } if (Actor == null || Target == null || Actor.Genealogy == null || Target.Genealogy == null) { return(true); } if (relationshipClassification == LTRData.RelationshipClassification.High || Actor.Genealogy.IsBloodRelated(Target.Genealogy)) { if (relationship != null && relationship.AreRomantic() && relationship.LTR.IsPositive) { flag2 = true; } else { flag = true; } //flag3 = true; } NFinalizeDeath.CheckYieldingContext(); switch (Actor.SimDescription.Species) { case CASAgeGenderFlags.None: case CASAgeGenderFlags.Human: if (!Actor.IsInActiveHousehold) { stateMachineClient.RequestState("x", "Shocked"); NFinalizeDeath.CheckYieldingContext(); if (RandomUtil.RandomChance(25)) { stateMachineClient.RequestState("x", "Evil"); } else { stateMachineClient.RequestState("x", "LovedOneLoop"); } flag = true; flag2 = true; //flag3 = true; } else { stateMachineClient.RequestState("x", "Shocked"); NFinalizeDeath.CheckYieldingContext(); Actor.Motives.ChangeValue(CommodityKind.Fun, kWitnessDeathStressPenalty); stateMachineClient.RequestState("x", "BasicLoop"); flag = false; flag2 = false; //flag3 = false; } break; case CASAgeGenderFlags.Dog: case CASAgeGenderFlags.LittleDog: stateMachineClient.RequestState("x", "Dog"); break; case CASAgeGenderFlags.Cat: stateMachineClient.RequestState("x", "Cat"); break; case CASAgeGenderFlags.Horse: stateMachineClient.RequestState("x", "Horse"); break; } EventTracker.SendEvent(EventTypeId.kSawSimDie, Actor, Target); DoLoop(ExitReason.Default, __LoopDel, stateMachineClient); EndCommodityUpdates(true); if (Actor.IsInActiveHousehold) { if (Actor.BuffManager == null) { return(false); } if (flag2 && Target.SimDescription.DeathStyle != 0) { Actor.BuffManager.AddElement(BuffNames.HeartBroken, Origin.FromWitnessingDeath); BuffHeartBroken.BuffInstanceHeartBroken buffInstanceHeartBroken = Actor.BuffManager.GetElement(BuffNames.HeartBroken) as BuffHeartBroken.BuffInstanceHeartBroken; if (buffInstanceHeartBroken != null) { buffInstanceHeartBroken.MissedSim = Target.SimDescription; } } else if (flag && Target.SimDescription.DeathStyle != 0) { Actor.BuffManager.AddElement(BuffNames.Mourning, Urnstone.CalculateMourningMoodStrength(Actor, Target.SimDescription), Origin.FromWitnessingDeath); BuffMourning.BuffInstanceMourning buffInstanceMourning = Actor.BuffManager.GetElement(BuffNames.Mourning) as BuffMourning.BuffInstanceMourning; if (buffInstanceMourning != null) { buffInstanceMourning.MissedSim = Target.SimDescription; } } } else { if (Actor.BuffManager == null) { return(false); } if (flag2) { Actor.BuffManager.AddElement(BuffNames.HeartBroken, Origin.FromWitnessingDeath); BuffHeartBroken.BuffInstanceHeartBroken buffInstanceHeartBroken = Actor.BuffManager.GetElement(BuffNames.HeartBroken) as BuffHeartBroken.BuffInstanceHeartBroken; if (buffInstanceHeartBroken != null) { buffInstanceHeartBroken.MissedSim = Target.SimDescription; } } else if (flag) { Actor.BuffManager.AddElement(BuffNames.Mourning, Urnstone.CalculateMourningMoodStrength(Actor, Target.SimDescription), Origin.FromWitnessingDeath); BuffMourning.BuffInstanceMourning buffInstanceMourning = Actor.BuffManager.GetElement(BuffNames.Mourning) as BuffMourning.BuffInstanceMourning; if (buffInstanceMourning != null) { buffInstanceMourning.MissedSim = Target.SimDescription; } } } NFinalizeDeath.CheckYieldingContext(); stateMachineClient.RequestState("x", "Exit"); stateMachineClient.Dispose(); //if (!NFinalizeDeath.IsAllActiveHousehold_SimObject(Actor) && // !NFinalizeDeath.IsAllActiveHousehold_SimObject(Target) && // !(Actor.SimDescription.Service is GrimReaper) && // !(Target.SimDescription.Service is GrimReaper) && // RandomUtil.RandomChance(70) //) //return NFinalizeDeath.ForceNHSReapSoul(Target, Actor); return(true); }