Ejemplo n.º 1
0
            protected override void OnPerform()
            {
                try
                {
                    mScenario.IncStat("TriggerDisgraceTask");

                    CelebrityManager manager = mScenario.Sim.CelebrityManager;

                    if ((manager.mDisgracefulActionQueue == null) || (manager.mDisgracefulActionQueue.Count == 0x0))
                    {
                        mScenario.IncStat("DisgraceTask: No Task Event");
                        return;
                    }

                    CelebrityDisgracefulActionStaticData data;
                    DisgracefulActionEvent item = manager.mDisgracefulActionQueue[0x0];
                    manager.mDisgracefulActionQueue.Remove(item);

                    DisgracefulActionType disgracefulActionType = item.DisgracefulActionType;

                    if (manager.CantBeDisgraced())
                    {
                        mScenario.IncStat("DisgraceTask: Not Disgracable");
                        return;
                    }

                    if (!CelebrityUtil.sCelebrityDisgracefulActionData.TryGetValue(disgracefulActionType, out data))
                    {
                        mScenario.IncStat("DisgraceTask: No Task Data");
                        return;
                    }

                    BuffManager buffManager = null;

                    if (mScenario.Sim.CreatedSim != null)
                    {
                        buffManager = mScenario.Sim.CreatedSim.BuffManager;
                    }

                    if (buffManager != null)
                    {
                        buffManager.RemoveElement(BuffNames.PubliclyDisgraced);
                    }

                    SimDescription otherNaughty = ManagerSim.Find(item.TargetId);

                    bool flag = (disgracefulActionType == DisgracefulActionType.Cheating) && !mScenario.Sim.TraitManager.HasElement(TraitNames.NoJealousy);

                    int change = NRaas.StoryProgression.Main.GetValue <RelationshipChangeOption, int>();
                    if (change > 0)
                    {
                        change = 0;
                    }

                    foreach (Relationship relationship in Relationship.Get(mScenario.Sim))
                    {
                        SimDescription other = relationship.GetOtherSimDescription(mScenario.Sim);

                        if (other == otherNaughty)
                        {
                            continue;
                        }

                        if (other.ToddlerOrBelow)
                        {
                            continue;
                        }

                        bool testFriendship = true;
                        if (!mScenario.Cares(other, disgracefulActionType, mScenario.GetValue <RelationDropChanceOption, int>(), out testFriendship))
                        {
                            mScenario.IncStat("DisgraceTask: Sim Doesn't Care");
                            continue;
                        }

                        if (flag && relationship.AreRomantic())
                        {
                            Sim createdSim = other.CreatedSim;
                            if (createdSim != null)
                            {
                                SocialComponent.OnIWasCheatedOn(createdSim, mScenario.Sim, otherNaughty, JealousyLevel.Medium);
                            }
                        }

                        if (relationship.AreFriends())
                        {
                            mScenario.AddScoring("DisgraceTask: Relation Change", change);

                            relationship.LTR.UpdateLiking(change);
                        }
                    }

                    if (buffManager != null)
                    {
                        buffManager.AddElement(BuffNames.PubliclyDisgraced, data.DisgracedOrigin);
                    }

                    if (data.DisgracedOrigin == Origin.FromFalselyAccused)
                    {
                        manager.IncrementFalselyAccused();
                    }
                    else
                    {
                        manager.IncrementPubliclyDisgraced();
                    }

                    Sim sim = mScenario.Sim.CreatedSim;
                    if (sim != null)
                    {
                        mScenario.IncStat("DisgraceTask: Display Message");

                        sim.ShowTNSAndPlayStingIfSelectable("sting_generic_tragic", data.TnsId, null, sim, null, null, new bool[] { mScenario.Sim.IsFemale }, mScenario.Sim.IsFemale, new object[] { sim });
                    }
                }
                catch (Exception e)
                {
                    Common.Exception(mScenario.Sim, e);
                }
            }