public override InteractionDefinition GetInteraction(Sim actor, Sim target, CommonWoohoo.WoohooStyle style) { switch (style) { case CommonWoohoo.WoohooStyle.Safe: return new HotAirBalloonWoohoo.SafeHotAirBalloonDefinition(target); case CommonWoohoo.WoohooStyle.Risky: return new HotAirBalloonWoohoo.RiskyHotAirBalloonDefinition(target); case CommonWoohoo.WoohooStyle.TryForBaby: return new HotAirBalloonWoohoo.TryForBabyHotAirBalloonDefinition(target); } return null; }
public static WoohooLocationControl GetControl(CommonWoohoo.WoohooLocation location) { if (sControls == null) { sControls = new Dictionary<CommonWoohoo.WoohooLocation, WoohooLocationControl>(); foreach (WoohooLocationControl control in Common.DerivativeSearch.Find<WoohooLocationControl>()) { sControls.Add(control.Location, control); } } WoohooLocationControl result; if (sControls.TryGetValue(location, out result)) { return result; } else { return null; } }
public override InteractionDefinition GetInteraction(Sim actor, Sim target, CommonWoohoo.WoohooStyle style) { return null; }
public static bool SatisfiesTryForBaby(Sim actor, Sim target, string logName, bool isAutonomous, bool scoreTarget, ref GreyedOutTooltipCallback callback) { using (Common.TestSpan span = new Common.TestSpan(ScoringLookup.Stats, "Duration " + logName, Common.DebugLevel.Stats)) { int speciesIndex = PersistedSettings.GetSpeciesIndex(actor); if (isAutonomous) { if (!Woohooer.Settings.mTryForBabyAutonomousV2[speciesIndex]) { return(false); } if (!Woohooer.Settings.mAllowOffLotTryForBabyAutonomous[speciesIndex]) { if (actor.LotCurrent != Household.ActiveHousehold.LotHome) { return(false); } } } if ((!scoreTarget) && (!CommonWoohoo.SatisfiesUserLikingGate(actor, target, isAutonomous, true, logName))) { callback = Common.DebugTooltip("Liking Gate Fail"); return(false); } if (!CommonSocials.SatisfiedInteractionLevel(actor, target, isAutonomous, ref callback)) { return(false); } if (!WoohooInteractionLevelSetting.Satisfies(actor, target, true)) { ScoringLookup.IncStat(logName + " Interaction Level Fail"); callback = Common.DebugTooltip("Interaction Level Fail"); return(false); } if (!CommonWoohoo.SatisfiesCooldown(actor, target, isAutonomous, ref callback)) { return(false); } string reason; if (!CanTryForBaby(actor, target, isAutonomous, CommonWoohoo.WoohooStyle.TryForBaby, ref callback, out reason)) { ScoringLookup.IncStat(logName + " " + reason); return(false); } WoohooScoring.ScoreTestResult result = WoohooScoring.ScoreActor(logName, actor, target, isAutonomous, "InterestInTryForBaby", true); if (result != WoohooScoring.ScoreTestResult.Success) { ScoringLookup.IncStat(logName + " " + result); callback = Common.DebugTooltip("Actor Scoring Fail " + result); return(false); } if (scoreTarget) { result = WoohooScoring.ScoreTarget(logName, target, actor, isAutonomous, "InterestInTryForBaby", true); if (result != WoohooScoring.ScoreTestResult.Success) { ScoringLookup.IncStat(logName + " " + result); callback = Common.DebugTooltip("Target Scoring Fail " + result); return(false); } } ScoringLookup.IncStat(logName + " Success"); return(true); } }
public static Pregnancy Impregnate(Sim actor, Sim target, bool isAutonomous, CommonWoohoo.WoohooStyle style) { PregnancyChoice choice = Woohooer.Settings.mTryForBabyPregnancyChoice; bool playChimes = true; if (Woohooer.Settings.ReplaceWithRisky || style == CommonWoohoo.WoohooStyle.Risky) { choice = Woohooer.Settings.mRiskyPregnancyChoice; playChimes = false; } if (actor.SimDescription.Gender == target.SimDescription.Gender) { switch (choice) { case PregnancyChoice.Initiator: return StartPregnancy(actor, target, isAutonomous, playChimes); case PregnancyChoice.Target: return StartPregnancy(target, actor, isAutonomous, playChimes); default: Sim a = actor; Sim b = target; switch(choice) { case PregnancyChoice.Random: if (RandomUtil.CoinFlip()) { b = actor; a = target; } break; case PregnancyChoice.TargetThenInitiator: b = actor; a = target; break; } Pregnancy pregnancy = StartPregnancy(a, b, isAutonomous, playChimes); if (pregnancy != null) { return pregnancy; } else { return StartPregnancy(b, a, isAutonomous, playChimes); } } } else { if (actor.IsFemale) { return StartPregnancy(actor, target, isAutonomous, playChimes); } else { return StartPregnancy(target, actor, isAutonomous, playChimes); } } }
public static float OnGetChanceOfSuccess(Sim a, Sim b, CommonWoohoo.WoohooStyle style) { float chance = 0; bool useFertility = true; int speciesIndex = PersistedSettings.GetSpeciesIndex(a); switch (style) { case CommonWoohoo.WoohooStyle.Risky: if ((a.SimDescription.Teen) || (b.SimDescription.Teen)) { chance = Woohooer.Settings.mRiskyTeenBabyMadeChance; } else { chance = Woohooer.Settings.mRiskyBabyMadeChanceV2[speciesIndex]; } useFertility = Woohooer.Settings.mRiskyFertility[speciesIndex]; break; case CommonWoohoo.WoohooStyle.TryForBaby: if ((a.SimDescription.Teen) || (b.SimDescription.Teen)) { chance = Woohooer.Settings.mTryForBabyTeenBabyMadeChance; } else { chance = Woohooer.Settings.mTryForBabyMadeChanceV2[speciesIndex]; } useFertility = Woohooer.Settings.mTryForBabyFertility[speciesIndex]; break; } if (chance <= 0) { Common.DebugNotify("Pregnancy: No Chance"); return 0; } if (useFertility) { if (a.IsHuman) { if ((a.BuffManager != null) && a.BuffManager.HasTransformBuff()) { return 0; } if ((b.BuffManager == null) && b.BuffManager.HasTransformBuff()) { return 0; } if ((a.TraitManager.HasElement(TraitNames.FertilityTreatment)) || ((a.BuffManager != null) && a.BuffManager.HasElement(BuffNames.ATwinkleInTheEye))) { chance += TraitTuning.kFertilityBabyMakingChanceIncrease; } if ((b.TraitManager.HasElement(TraitNames.FertilityTreatment)) || ((b.BuffManager != null) && b.BuffManager.HasElement(BuffNames.ATwinkleInTheEye))) { chance += TraitTuning.kFertilityBabyMakingChanceIncrease; } } else { if (a.TraitManager.HasElement(TraitNames.FertilityTreatmentPet)) { chance += TraitTuning.kFertilityLitterMakingChanceIncrease; } if (b.TraitManager.HasElement(TraitNames.FertilityTreatmentPet)) { chance += TraitTuning.kFertilityLitterMakingChanceIncrease; } } if (a.TraitManager.HasElement(TraitNames.WishedForLargeFamily)) { chance += 100f; a.BuffManager.RemoveElement(BuffNames.WishForLargeFamily); } if (b.TraitManager.HasElement(TraitNames.WishedForLargeFamily)) { chance += 100f; b.BuffManager.RemoveElement(BuffNames.WishForLargeFamily); } if ((a.BuffManager != null) && a.BuffManager.HasElement(BuffNames.MagicInTheAir)) { chance += BuffMagicInTheAir.kBabyMakingChanceIncrease * 100f; } if ((b.BuffManager != null) && b.BuffManager.HasElement(BuffNames.MagicInTheAir)) { chance += BuffMagicInTheAir.kBabyMakingChanceIncrease * 100f; } if ((GameUtils.IsInstalled(ProductVersion.EP7)) && (SimClock.IsNightTime()) && (SimClock.IsFullMoon())) { chance += Pregnancy.kFullMoonImprovedBabyChance * 100f; } } return chance; }
public static bool IsSuccess(Sim simA, Sim simB, bool isAutonomous, CommonWoohoo.WoohooStyle style) { if (Woohooer.Settings.ReplaceWithRisky) { if (style == CommonWoohoo.WoohooStyle.Safe) { style = CommonWoohoo.WoohooStyle.Risky; } } string reason; GreyedOutTooltipCallback callBack = null; if (!CanTryForBaby(simA, simB, isAutonomous, style, ref callBack, out reason)) { if (callBack != null) { Common.DebugNotify("Pregnancy: " + callBack(), simA, simB); } return false; } float chance = sGetChanceOfSuccess(simA, simB, style); if (!RandomUtil.RandomChance(chance)) { Common.DebugNotify("Pregnancy: Chance Fail " + chance, simA, simB); return false; } Common.DebugNotify("Pregnancy: Chance Success " + chance, simA, simB); return true; }
public static bool CanTryForBaby(Sim a, Sim target, bool autonomous, CommonWoohoo.WoohooStyle style, ref GreyedOutTooltipCallback greyedOutTooltipCallback, out string reason) { using (Common.TestSpan span = new Common.TestSpan(ScoringLookup.Stats, "Duration CanTryForBaby", Common.DebugLevel.Stats)) { int chance = 0; bool teenCanTry = false; int speciesIndex = PersistedSettings.GetSpeciesIndex(a); PregnancyChoice pregnancyChoice = PregnancyChoice.Either; switch (style) { case CommonWoohoo.WoohooStyle.Risky: if ((a.SimDescription.Teen) || (target.SimDescription.Teen)) { chance = Woohooer.Settings.mRiskyTeenBabyMadeChance; } else { chance = Woohooer.Settings.mRiskyBabyMadeChanceV2[speciesIndex]; } teenCanTry = Woohooer.Settings.mTeenRiskyAutonomous; pregnancyChoice = Woohooer.Settings.mRiskyPregnancyChoice; break; case CommonWoohoo.WoohooStyle.TryForBaby: if ((a.SimDescription.Teen) || (target.SimDescription.Teen)) { chance = Woohooer.Settings.mTryForBabyTeenBabyMadeChance; } else { chance = Woohooer.Settings.mTryForBabyMadeChanceV2[speciesIndex]; } teenCanTry = Woohooer.Settings.mTeenTryForBabyAutonomous; pregnancyChoice = Woohooer.Settings.mTryForBabyPregnancyChoice; break; } if (chance <= 0) { greyedOutTooltipCallback = Common.DebugTooltip("Chance Fail"); reason = "Chance Fail"; return false; } if (!CommonSocials.CanGetRomantic(a, target, autonomous, true, true, ref greyedOutTooltipCallback, out reason)) { return false; } if (autonomous) { if ((sStoryProgressionAllowPregnancy.Valid) && (Woohooer.Settings.TestStoryProgression(autonomous))) { reason = sStoryProgressionAllowPregnancy.Invoke<string>(new object[] { a.SimDescription, target.SimDescription, autonomous }); if (reason != null) { greyedOutTooltipCallback = Woohooer.StoryProgressionTooltip(reason, false); return false; } } } if (a.SimDescription.Gender == target.SimDescription.Gender) { if (!Woohooer.Settings.mAllowSameSexTryForBabyV2[speciesIndex]) { greyedOutTooltipCallback = Common.DebugTooltip("Same Sex Fail"); reason = "Same Sex Fail"; return false; } if ((!CanGetPreggers(a, autonomous, ref greyedOutTooltipCallback, out reason)) && (!CanGetPreggers(target, autonomous, ref greyedOutTooltipCallback, out reason))) { return false; } } else { if (a.IsFemale) { if (!CanGetPreggers(a, autonomous, ref greyedOutTooltipCallback, out reason)) { return false; } } else { if (!CanGetPreggers(target, autonomous, ref greyedOutTooltipCallback, out reason)) { return false; } } } if ((autonomous) || (Woohooer.Settings.mTestAllConditionsForUserDirected[speciesIndex])) { if (HasBlockingBuff(a)) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:BuffBlock"); }; reason = "BuffBlock"; return false; } if (HasBlockingBuff(target)) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:BuffBlock"); }; reason = "BuffBlock"; return false; } if ((a.SimDescription.Gender != target.SimDescription.Gender) || (pregnancyChoice != PregnancyChoice.Either)) { if (autonomous) { if (a.SimDescription.IsPregnant) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:Pregnant"); }; reason = "Pregnant"; return false; } if (target.SimDescription.IsPregnant) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:Pregnant"); }; reason = "Pregnant"; return false; } } else { if (a.SimDescription.IsVisuallyPregnant) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:Pregnant"); }; reason = "Pregnant"; return false; } if (target.SimDescription.IsVisuallyPregnant) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:Pregnant"); }; reason = "Pregnant"; return false; } } } if ((a.SimDescription.IsMale) && (target.SimDescription.IsMale)) { if (!Woohooer.Settings.mAutonomousMaleMaleTryForBabyV2[speciesIndex]) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:SameSexDenied"); }; reason = "SameSexDenied"; return false; } if (a.SimDescription.Elder) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:Elder"); }; reason = "Elder"; return false; } if (target.SimDescription.Elder) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:Elder"); }; return false; } } if ((a.SimDescription.IsFemale) && (target.SimDescription.IsFemale)) { if (!Woohooer.Settings.mAutonomousFemaleFemaleTryForBabyV2[speciesIndex]) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:SameSexDenied"); }; reason = "SameSexDenied"; return false; } } if ((a.SimDescription.Elder) && (a.SimDescription.IsFemale)) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:Elder"); }; reason = "Elder"; return false; } if ((target.SimDescription.Elder) && (target.SimDescription.IsFemale)) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:Elder"); }; reason = "Elder"; return false; } if ((a.SimDescription.Teen) || (target.SimDescription.Teen)) { if ((!teenCanTry) && (autonomous)) { greyedOutTooltipCallback = delegate { return Common.LocalizeEAString("NRaas.Woohooer:Teenagers"); }; reason = "Teenagers"; return false; } } if ((SimTypes.IsSkinJob(a.SimDescription)) || (SimTypes.IsSkinJob(target.SimDescription))) { greyedOutTooltipCallback = delegate { return Common.Localize("TryForBaby:SkinJob"); }; reason = "SkinJob"; return false; } } return true; } }
public abstract InteractionDefinition GetInteraction(Sim actor, Sim target, CommonWoohoo.WoohooStyle style);