private new List <Sim> GetValidSimsToSpinWith(Sim actor, ISkatableObject skateLocation) { List <Sim> lazyList = null; if ((skateLocation.Skaters == null) || (skateLocation.Skaters.Count < 2)) { return(null); } foreach (KeyValuePair <ulong, SkatingRink.Lane> pair in skateLocation.Skaters) { Sim createdSim = SimDescription.GetCreatedSim(pair.Key); if (createdSim != null) { SkateEx currentInteraction = createdSim.CurrentInteraction as SkateEx; if (((currentInteraction != null) && currentInteraction.IsSkating) && !SkateHelper.CalculateIfActorIsOccultSkaterEx(actor)) { Lazy.Add <List <Sim>, Sim>(ref lazyList, createdSim); } } } return(lazyList); }
public override bool Run() { try { Definition interactionDefinition = InteractionDefinition as Definition; mIsJoin = interactionDefinition.IsJoin; if (!Actor.RoutingComponent.RouteToObjectRadialRange(Target, WeatherStone.kSummonWeatherRouteDistance[0], WeatherStone.kSummonWeatherRouteDistance[1], AlwaysRoute ? new Route.RouteOption[] { Route.RouteOption.DoNotEmitDegenerateRoutesForRadialRangeGoals } : null)) { return(false); } if ((interactionDefinition.mType == WeatherStone.SummonWeatherType.HuntersStorm) && !Actor.BuffManager.HasElement(BuffNames.Werewolf)) { InteractionInstance instance = OccultWerewolf.TransformationToWerewolf.Singleton.CreateInstance(Actor, Actor, GetPriority(), Autonomous, CancellableByPlayer); if (instance != null) { if (instance.RunInteraction()) { Actor.ClearExitReasons(); } else { return(false); } } } if (!Target.TryStartSummoningWeather(Actor, interactionDefinition.mType, mIsJoin)) { if (mIsJoin || !Target.TryStartSummoningWeather(Actor, interactionDefinition.mType, true)) { Sim createdSim = null; if (Target.mSummoningSimDescriptionId != 0L) { createdSim = SimDescription.GetCreatedSim(Target.mSummoningSimDescriptionId); } Actor.PlayRouteFailure(createdSim); return(false); } mIsJoin = true; } StandardEntry(); EnterStateMachine("SummonWeather", "Enter", "x"); if (Target.mSummonWeatherType == WeatherStone.SummonWeatherType.BewitchingRain) { StartLightningEffects(); } AnimateSim(interactionDefinition.mType.ToString()); BeginCommodityUpdates(); if (mIsJoin) { mSummonWeatherTimeRemaining = WeatherStone.kSummonWeatherDetermineOutcomeTime[1] + 10f; } else { mSummonWeatherTimeRemaining = RandomUtil.GetFloat(WeatherStone.kSummonWeatherDetermineOutcomeTime[0], WeatherStone.kSummonWeatherDetermineOutcomeTime[1]); } bool succeeded = DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached), SummonLoop, mCurrentStateMachine); EndCommodityUpdates(succeeded); StandardExit(); switch (Target.CurrentWeatherStoneState) { case WeatherStone.WeatherStoneState.AfterSuccessfulSummon: AnimateSim("Success"); BuffNames buffNameFromSummonWeatherType = WeatherStone.GetBuffNameFromSummonWeatherType(Target.mSummonWeatherType); if (buffNameFromSummonWeatherType != BuffNames.Undefined) { Actor.BuffManager.AddElement(buffNameFromSummonWeatherType, Origin.FromWeatherStone); } if (!mIsJoin) { Target.StopElectrifiedEffect(); } break; case WeatherStone.WeatherStoneState.AfterFailureSummon: if (!Target.mUseExtremeFailure) { AnimateSim("FailureNormal"); } else { BuffSinged.SingeViaInteraction(this, Origin.FromLightning); AnimateSim("FailureExtreme"); } if (!HasOtherSimsSummoning(Actor)) { Target.AnimateChangeWeatherStoneState(false, WeatherStone.WeatherStoneState.Resting); } break; default: if (!mIsJoin) { Target.OnSummoningStoppedEarly(); } AnimateSim("FailureNormal"); break; } AnimateSim("Exit"); return(succeeded); } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, e); return(false); } }