示例#1
0
 public void Dispose()
 {
     if ((mOpportunities != null) &&
         (mSim.OpportunityHistory != null))
     {
         mSim.OpportunityHistory.mCurrentOpportunities = mOpportunities;
         mSim.NeedsOpportunityImport = (true);
         if (mSim.CreatedSim != null)
         {
             if (mSim.CreatedSim.mOpportunityManager == null)
             {
                 mSim.CreatedSim.mOpportunityManager = new OpportunityManager(mSim.CreatedSim);
                 mSim.CreatedSim.mOpportunityManager.SetupLocationBasedOpportunities();
             }
             try{
                 //   [NRaas:]Due to an odd bit of coding at the bottom of AcceptOpportunityFromTravel(),
                 // the expiration time for non-expirying opportunities is checked
                 foreach (OpportunityHistory.OpportunityExportInfo info in mSim.OpportunityHistory.GetCurrentOpportunities())
                 {
                     if (info.ExpirationTime < SimClock.CurrentTime())
                     {
                         Opportunity opp = OpportunityManager.GetStaticOpportunity(info.Guid);
                         if (opp != null)
                         {
                             bool requiresTimeout = (false);
                             switch (opp.Timeout)
                             {
                             case Opportunity.OpportunitySharedData.TimeoutCondition.SimDays:
                             case Opportunity.OpportunitySharedData.TimeoutCondition.SimHours:
                             case Opportunity.OpportunitySharedData.TimeoutCondition.SimTime:
                             case Opportunity.OpportunitySharedData.TimeoutCondition.Gig:
                             case Opportunity.OpportunitySharedData.TimeoutCondition.AfterschoolRecitalOrAudition:
                                 requiresTimeout = (true);
                                 break;
                             }
                             if (!requiresTimeout)
                             {
                                 info.ExpirationTime = SimClock.Add(SimClock.CurrentTime(), TimeUnit.Hours, 1);
                             }
                         }
                     }
                 }
                 mSim.CreatedSim.OpportunityManager.TravelFixup();
             }catch (Exception exception) {
                 //  Get stack trace for the exception. with source file information
                 var st = new StackTrace(exception, true);
                 //  Get the top stack frame
                 var frame = st.GetFrame(0);
                 //  Get the line number from the stack frame
                 var line = frame.GetFileLineNumber();
                 Alive.WriteLog(exception.Message + "\n\n" +
                                exception.StackTrace + "\n\n" +
                                exception.Source + "\n\n" +
                                line);
             }finally{
             }
             mSim.NeedsOpportunityImport = (false);
         }
     }
 }
示例#2
0
        public void Dispose()
        {
            if ((mOpportunities != null) && (mSim.OpportunityHistory != null))
            {
                mSim.OpportunityHistory.mCurrentOpportunities = mOpportunities;
                mSim.NeedsOpportunityImport = true;

                if (mSim.CreatedSim != null)
                {
                    if (mSim.CreatedSim.mOpportunityManager == null)
                    {
                        mSim.CreatedSim.mOpportunityManager = new OpportunityManager(mSim.CreatedSim);
                        mSim.CreatedSim.mOpportunityManager.SetupLocationBasedOpportunities();
                    }

                    try
                    {
                        // Due to an odd bit of coding at the bottom of AcceptOpportunityFromTravel(),
                        //   the expiration time for non-expirying opportunities is checked
                        foreach (OpportunityHistory.OpportunityExportInfo info in mSim.OpportunityHistory.GetCurrentOpportunities())
                        {
                            if (info.ExpirationTime < SimClock.CurrentTime())
                            {
                                Opportunity opp = OpportunityManager.GetStaticOpportunity(info.Guid);
                                if (opp != null)
                                {
                                    bool requiresTimeout = false;

                                    switch (opp.Timeout)
                                    {
                                    case Opportunity.OpportunitySharedData.TimeoutCondition.SimDays:
                                    case Opportunity.OpportunitySharedData.TimeoutCondition.SimHours:
                                    case Opportunity.OpportunitySharedData.TimeoutCondition.SimTime:
                                    case Opportunity.OpportunitySharedData.TimeoutCondition.Gig:
                                    case Opportunity.OpportunitySharedData.TimeoutCondition.AfterschoolRecitalOrAudition:
                                        requiresTimeout = true;
                                        break;
                                    }

                                    if (!requiresTimeout)
                                    {
                                        info.ExpirationTime = SimClock.Add(SimClock.CurrentTime(), TimeUnit.Hours, 1);
                                    }
                                }
                            }
                        }

                        mSim.CreatedSim.OpportunityManager.TravelFixup();
                    }
                    catch (Exception e)
                    {
                        Common.Exception(mSim, e);
                    }

                    mSim.NeedsOpportunityImport = false;
                }
            }
        }
示例#3
0
        public static bool Perform(SimDescription me, OpportunityNames guid)
        {
            Opportunity opportunity = null;

            GenericManager <OpportunityNames, Opportunity, Opportunity> .sDictionary.TryGetValue((ulong)guid, out opportunity);

            Repeatability origRepeatability = Repeatability.Undefined;

            if (opportunity != null)
            {
                origRepeatability = opportunity.RepeatLevel;

                opportunity.mSharedData.mRepeatLevel = Repeatability.Always;
            }

            try
            {
                me.Household.mCompletedHouseholdOpportunities.Remove((ulong)guid);

                if (opportunity.IsLocationBased)
                {
                    List <Lot> alreadyChosenLots = new List <Lot>();

                    foreach (ulong lotId in OpportunityManager.sLocationBasedOpportunities.Values)
                    {
                        Lot lot = LotManager.GetLot(lotId);
                        if (lot == null)
                        {
                            continue;
                        }

                        alreadyChosenLots.Add(lot);
                    }

                    Lot lotTarget = OpportunityManager.GetLotTarget(opportunity, alreadyChosenLots);
                    if (lotTarget != null)
                    {
                        lotTarget.AddLocationBasedOpportunity(opportunity.EventDay, opportunity.EventStartTime, opportunity.EventEndTime, opportunity.Guid);
                        alreadyChosenLots.Add(lotTarget);
                    }
                }

                return(me.CreatedSim.OpportunityManager.AddOpportunityNow(guid, true, false));
            }
            finally
            {
                if (opportunity != null)
                {
                    opportunity.mSharedData.mRepeatLevel = origRepeatability;
                }
            }
        }
示例#4
0
        public override void OnPreLoad()
        {
            Overwatch.Log(GetTitlePrefix());

            Opportunity opportunity = OpportunityManager.GetStaticOpportunity(OpportunityNames.EP7_FortuneTellerCareer_HelpInvestigation_Police);

            if (opportunity != null)
            {
                if ((opportunity.SharedData.mRequirementList == null) || (opportunity.SharedData.mRequirementList.Count == 0))
                {
                    opportunity.SharedData.mRequirementList = new System.Collections.ArrayList();

                    // FortuneTeller career requirement
                    Opportunity.OpportunitySharedData.RequirementInfo info = new Opportunity.OpportunitySharedData.RequirementInfo();
                    info.mType     = RequirementType.Career;
                    info.mGuid     = (ulong)OccupationNames.FortuneTeller;
                    info.mMinLevel = 1;
                    info.mMaxLevel = 10;
                    opportunity.SharedData.mRequirementList.Add(info);

                    // Police Station requirement
                    info       = new Opportunity.OpportunitySharedData.RequirementInfo();
                    info.mType = RequirementType.WorldHasRabbitHoleType;
                    info.mGuid = (ulong)RabbitHoleType.PoliceStation;
                    opportunity.SharedData.mRequirementList.Add(info);
                }
            }

            foreach (OpportunityNames opp in new OpportunityNames[] { OpportunityNames.EP9_Academics_StudyAtHome, OpportunityNames.EP9_Academics_StudyAtLibrary, OpportunityNames.EP9_Academics_StudyAtQuad, OpportunityNames.EP9_Academics_StudyAtStudentUnion })
            {
                opportunity = OpportunityManager.GetStaticOpportunity(opp);
                if (opportunity != null)
                {
                    if ((opportunity.SharedData.mRequirementList == null) || (opportunity.SharedData.mRequirementList.Count == 0))
                    {
                        opportunity.SharedData.mRequirementList = new System.Collections.ArrayList();

                        // University Student career requirement
                        Opportunity.OpportunitySharedData.RequirementInfo info = new Opportunity.OpportunitySharedData.RequirementInfo();
                        info.mType     = RequirementType.Career;
                        info.mGuid     = (ulong)OccupationNames.AcademicCareer;
                        info.mMinLevel = 1;
                        info.mMaxLevel = 1;
                        opportunity.SharedData.mRequirementList.Add(info);
                    }
                }
            }
        }
示例#5
0
        private static bool CheckAllRequirements(Sim s, Opportunity op, OpportunityNames lastOpName, ref string msg)
        {
            Opportunity.OpportunitySharedData sharedData = op.SharedData;
            WorldName mTargetWorldRequired = sharedData.mTargetWorldRequired;
            WorldName currentWorld         = GameUtils.GetCurrentWorld();

            if (mTargetWorldRequired == WorldName.SunsetValley)
            {
                mTargetWorldRequired = s.SimDescription.HomeWorld;
            }
            if ((mTargetWorldRequired == currentWorld) || (mTargetWorldRequired == WorldName.Undefined))
            {
                foreach (Opportunity.OpportunitySharedData.RequirementInfo info in sharedData.mRequirementList)
                {
                    if (info.mType == RequirementType.OpportunityComplete)
                    {
                        OpportunityNames mGuid = (OpportunityNames)info.mGuid;
                        if (lastOpName == mGuid)
                        {
                            continue;
                        }
                    }
                    if (!op.CheckRequirement(info, s, sharedData))
                    {
                        msg += Common.NewLine + " Failure: " + info.mType;

                        return(false);
                    }
                }
            }
            OpportunityNames mCompletionTriggerOpportunity = sharedData.mCompletionTriggerOpportunity;

            if (mCompletionTriggerOpportunity != OpportunityNames.Undefined)
            {
                Opportunity staticOpportunity = OpportunityManager.GetStaticOpportunity(mCompletionTriggerOpportunity);
                if ((staticOpportunity != null) && !op.CheckAllRequirements(s, staticOpportunity, sharedData.mGuid))
                {
                    msg += Common.NewLine + " Failure: B";
                    return(false);
                }
            }
            return(true);
        }
示例#6
0
        public void Execute(IServiceProvider serviceProvider)
        {
            var context   = serviceProvider.GetContext();
            var targetOpp = context.target();

            if (!IsValidEvent(targetOpp))
            {
                return;
            }
            var postImage = context.postimage();
            var crmSvc    = serviceProvider.CreateOrganizationService(context.UserId);

            var opportunityManager = new OpportunityManager(postImage, crmSvc);
            var contractManager    = new ContractManager(crmSvc);
            var contractId         = contractManager.CreateContract(postImage);

            opportunityManager.SetQualifiedContract(postImage, contractId);
            var opportunityProducts = opportunityManager.RetrieveProducts();

            contractManager.CreateProducts(opportunityProducts, contractId);
        }
示例#7
0
        public override void RemoveAllIncompleteListeners()
        {
            base.RemoveAllIncompleteListeners();

            if ((IsTargetDeleted()) && (!mKilled))
            {
                SimDescription sim = mSuspendedSim;
                if (TargetObject is Sim)
                {
                    sim = (TargetObject as Sim).SimDescription;
                }

                if (TargetDead(sim))
                {
                    OpportunityNames names;
                    OnCompletion(out names);
                    if (names != OpportunityNames.Undefined)
                    {
                        OpportunityManager.GetStaticOpportunity(names);

                        OpportunityManager.OpportunityPropagateInfo item  = null;
                        OpportunityManager.OpportunityPropagateInfo info2 = null;
                        item  = new OpportunityManager.OpportunityPropagateInfo(SourceObject, SourceData, SourceType, CustomSource, OriginalSource);
                        info2 = new OpportunityManager.OpportunityPropagateInfo(TargetObject, TargetData, TargetType, CustomTarget, OriginalTarget);
                        List <OpportunityNames> list8 = new List <OpportunityNames>(ParentOpportunities);
                        list8.Add(Guid);

                        Opportunity opportunity3;
                        if (this.Actor.OpportunityManager.AddOpportunityNow(names, item, info2, list8, !TriggerQuietly, out opportunity3))
                        {
                            opportunity3.WorldStartedIn = WorldStartedIn;
                        }
                    }
                }
            }
        }
示例#8
0
            public DreamStore(Sim sim, bool initialStore, bool simpleRetain)
            {
                mInitialStore = initialStore;

                mSim = sim.SimDescription;

                mDnPExportData = null;

                bool storeDnP = false;

                if ((sim.mDreamsAndPromisesManager != null) &&
                    (sim.DreamsAndPromisesManager.mPromiseNodes != null))
                {
                    foreach (ActiveDreamNode node in sim.DreamsAndPromisesManager.mPromiseNodes)
                    {
                        if (node != null)
                        {
                            storeDnP = true;
                            break;
                        }
                    }
                }

                if (storeDnP)
                {
                    OnLoadFixup(sim, false);

                    if (simpleRetain)
                    {
                        mDnpManager = sim.DreamsAndPromisesManager;
                        sim.mDreamsAndPromisesManager = null;
                    }
                    else
                    {
                        try
                        {
                            mDnPExportData = new DnPExportData(mSim);

                            sim.NullDnPManager();
                        }
                        catch (Exception e)
                        {
                            Common.Exception(mSim, e);
                        }
                    }
                }

                if (sim.HasOpportunity())
                {
                    foreach (Opportunity opp in sim.OpportunityManager.List)
                    {
                        if (mSim.OpportunityHistory.GetCurrentOpportunity(opp.OpportunityCategory) == null)
                        {
                            mSim.OpportunityHistory.AddCurrentOpportunity(opp.OpportunityCategory, opp.Guid, null, opp.TargetObject as Sim, opp.ParentOpportunities, opp.TargetInteractionNumberItemsRequiredList(), opp.Name, opp.Description, opp.DeadlineString);
                        }
                    }

                    Corrections.CleanupOpportunities(mSim, false, null);

                    if (simpleRetain)
                    {
                        mOpportunityManager = sim.OpportunityManager;
                    }
                    else
                    {
                        mOppStore = new OpportunityStore(sim.SimDescription, true);
                    }

                    sim.mOpportunityManager = null;
                }
                else
                {
                    mSim.NeedsOpportunityImport = false;
                }
            }
示例#9
0
        public DreamStore(Sim sim, bool initialStore, bool simpleRetain)
        {
            mInitialStore  = initialStore;
            mSim           = sim.SimDescription;
            mDnPExportData = null;
            bool storeDnP = (false);

            if ((sim.mDreamsAndPromisesManager != null) &&
                (sim.DreamsAndPromisesManager.mPromiseNodes != null))
            {
                foreach (ActiveDreamNode node in sim.DreamsAndPromisesManager.mPromiseNodes)
                {
                    if (node != null)
                    {
                        storeDnP = (true);
                        break;
                    }
                }
            }
            if (storeDnP)
            {
                OnLoadFixup(sim, false);
                if (simpleRetain)
                {
                    mDnpManager = sim.DreamsAndPromisesManager;
                    sim.mDreamsAndPromisesManager = null;
                }
                else
                {
                    try{
                        mDnPExportData = new DnPExportData(mSim);
                        sim.NullDnPManager();
                    }catch (Exception exception) {
                        //  Get stack trace for the exception. with source file information
                        var st = new StackTrace(exception, true);
                        //  Get the top stack frame
                        var frame = st.GetFrame(0);
                        //  Get the line number from the stack frame
                        var line = frame.GetFileLineNumber();
                        Alive.WriteLog(exception.Message + "\n\n" +
                                       exception.StackTrace + "\n\n" +
                                       exception.Source + "\n\n" +
                                       line);
                    }finally{
                    }
                }
            }

            if (sim.HasOpportunity())
            {
                foreach (Opportunity opp in sim.OpportunityManager.List)
                {
                    if (mSim.OpportunityHistory.GetCurrentOpportunity(opp.OpportunityCategory) == null)
                    {
                        mSim.OpportunityHistory.AddCurrentOpportunity(opp.OpportunityCategory,
                                                                      opp.Guid, null,
                                                                      opp.TargetObject as Sim,
                                                                      opp.ParentOpportunities,
                                                                      opp.TargetInteractionNumberItemsRequiredList(),
                                                                      opp.Name,
                                                                      opp.Description,
                                                                      opp.DeadlineString);
                    }
                }
                Alive.ResetClearSimTask.
                CleanupOpportunities(mSim, false);
                if (simpleRetain)
                {
                    mOpportunityManager = sim.OpportunityManager;
                }
                else
                {
                    mOppStore = new OpportunityStore(sim.SimDescription, true);
                }
                sim.mOpportunityManager = null;
            }
            else
            {
                mSim.NeedsOpportunityImport = false;
            }
        }
示例#10
0
        public override bool Run()
        {
            try
            {
                if (!Actor.Inventory.Contains(Target))
                {
                    if (!Actor.RouteToObjectRadiusAndCheckInUse(Target, 0.7f))
                    {
                        return(false);
                    }

                    StandardEntry();
                    BeginCommodityUpdates();
                    Actor.PlaySoloAnimation("a2o_object_genericSwipe_x", true);
                    if (!Actor.Inventory.TryToAdd(Target))
                    {
                        EndCommodityUpdates(false);
                        StandardExit();
                        return(false);
                    }
                }
                else
                {
                    StandardEntry();
                    BeginCommodityUpdates();
                }

                SocialJigTwoPerson person = GlobalFunctions.CreateObjectOutOfWorld(SocialJig.SocialJigMedatorNames.SocialJigTwoPerson.ToString()) as SocialJigTwoPerson;
                person.RegisterParticipants(Actor, null);
                Sim createdSim = null;
                try
                {
                    World.FindGoodLocationParams fglParams = new World.FindGoodLocationParams(Actor.Position);
                    fglParams.BooleanConstraints |= FindGoodLocationBooleans.Routable;
                    if (GlobalFunctions.PlaceAtGoodLocation(person, fglParams, true))
                    {
                        Route r = Actor.CreateRoute();
                        r.PlanToSlot(person, person.GetSlotForActor(Actor, true));
                        r.DoRouteFail = true;
                        if (Actor.DoRoute(r))
                        {
                            bool paramValue = false;
                            mSummonGenieBroadcast = new ReactionBroadcaster(Actor, kSummonGenieBroadcastParams, SummonGenieBroadcastCallback);
                            Sims3.Gameplay.Gameflow.SetGameSpeed(Sims3.Gameplay.Gameflow.GameSpeed.Normal, Sims3.Gameplay.Gameflow.SetGameSpeedContext.Gameplay);
                            if (Target.mGenieDescription == null)
                            {
                                Target.mGenieDescription = OccultGenie.CreateGenie(Actor, Target);
                                createdSim = Target.mGenieDescription.CreatedSim;
                                EventTracker.SendEvent(EventTypeId.kCleanLamp, Actor, Target);
                                paramValue = true;
                            }
                            else
                            {
                                createdSim = Target.mGenieDescription.Instantiate(Vector3.OutOfWorld, false);
                                OccultGenie occultType          = null;
                                DateAndTime previousDateAndTime = SimClock.CurrentTime();
                                do
                                {
                                    SpeedTrap.Sleep(0xa);
                                    occultType = createdSim.OccultManager.GetOccultType(OccultTypes.None | OccultTypes.Genie) as OccultGenie;
                                }while ((occultType == null) && (SimClock.ElapsedTime(TimeUnit.Minutes, previousDateAndTime) < 120f));

                                if (occultType != null)
                                {
                                    occultType.SetGenieLampRelations(Actor, createdSim, Target);
                                }
                                else
                                {
                                    createdSim.Destroy();
                                    createdSim = null;
                                }
                            }

                            if (createdSim != null)
                            {
                                createdSim.FadeOut(false, false, 0f);
                                createdSim.GreetSimOnLot(Actor.LotCurrent);
                                createdSim.AddToWorld();
                                Slot slotForActor = person.GetSlotForActor(createdSim, false);
                                createdSim.SetPosition(person.GetSlotPosition(slotForActor));
                                createdSim.SetForward(person.GetForwardOfSlot(slotForActor));
                                IGameObject actor = GlobalFunctions.CreateObject("GenieLamp", ProductVersion.EP6, Vector3.OutOfWorld, 0x0, Vector3.UnitZ, null, null);
                                if (!actor.IsActorUsingMe(Actor))
                                {
                                    actor.AddToUseList(Actor);
                                }
                                EnterStateMachine("GenieLampSummon", "Enter", "x");
                                SetActor("lamp", actor);
                                SetParameter("isFirstTime", paramValue);
                                AnimateSim("Exit");
                                actor.Destroy();
                                createdSim.FadeIn();
                                VisualEffect effect = VisualEffect.Create("ep6GenieAppearSmoke_main");
                                effect.SetPosAndOrient(createdSim.Position, Vector3.UnitX, Vector3.UnitZ);
                                effect.SubmitOneShotEffect(VisualEffect.TransitionType.SoftTransition);
                                OpportunityManager opportunityManager = Actor.OpportunityManager;
                                if ((opportunityManager != null) && opportunityManager.HasOpportunity(OpportunityNames.EP6_ReleaseGenie_SummonGenie))
                                {
                                    OccultGenie genie2 = createdSim.OccultManager.GetOccultType(OccultTypes.Genie) as OccultGenie;
                                    if (genie2 == null)
                                    {
                                        createdSim.Destroy();
                                        createdSim = null;
                                    }
                                    else
                                    {
                                        OccultGenieEx.OnFreedFromLamp(genie2, Actor, createdSim, true);
                                        if (opportunityManager.GetLastOpportunity(OpportunityCategory.Special) == OpportunityNames.EP6_ReleaseGenie_SummonGenie)
                                        {
                                            opportunityManager.ClearLastOpportunity(OpportunityCategory.Special);
                                        }

                                        EventTracker.SendEvent(EventTypeId.kGrantedWishToFreeGenie, Actor, Target);
                                        if (Target.InInventory)
                                        {
                                            Actor.Inventory.RemoveByForce(Target);
                                            if (Target.IsOnHandTool)
                                            {
                                                Target.RemoveFromWorld();
                                            }
                                        }
                                        else
                                        {
                                            Target.RemoveFromWorld();
                                        }
                                        EnterStateMachine("FreeTheGenie", "Enter", "x");
                                        SetActor("x", createdSim);
                                        AnimateSim("Exit");
                                    }
                                }
                                else
                                {
                                    Target.mGenieSocializingEvent        = EventTracker.AddListener(EventTypeId.kSocialInteraction, OnSocialization);
                                    Target.CheckGenieReturnToLamp        = createdSim.AddAlarmRepeating(1f, TimeUnit.Minutes, Target.CheckGenieReturnToLampCallback, "Genie Check to return to lamp", AlarmType.AlwaysPersisted);
                                    Target.mTimeSinceLastSocialWithGenie = SimClock.CurrentTime();
                                }
                            }
                        }
                    }
                }
                finally
                {
                    person.Destroy();
                }

                EndCommodityUpdates(true);
                StandardExit(createdSim == null, createdSim == null);
                return(true);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
                return(false);
            }
        }
示例#11
0
        public static bool CleanupOpportunities(SimDescription sim, bool clean, Logger log)
        {
            if (sim.OpportunityHistory == null)
            {
                return(false);
            }

            if (sim.OpportunityHistory.mCurrentOpportunities == null)
            {
                return(false);
            }

            OpportunityManager manager = null;

            if (sim.CreatedSim != null)
            {
                manager = sim.CreatedSim.OpportunityManager;
            }

            for (int i = 0; i < sim.OpportunityHistory.mCurrentOpportunities.Length; i++)
            {
                OpportunityHistory.OpportunityExportInfo info = sim.OpportunityHistory.mCurrentOpportunities[i];
                if (info == null)
                {
                    if (manager != null)
                    {
                        info = new OpportunityHistory.OpportunityExportInfo();

                        sim.OpportunityHistory.mCurrentOpportunities[i] = info;

                        if (log != null)
                        {
                            log(" OpportunityExportInfo Created " + sim.FullName);
                        }
                    }
                }
                else if (clean)
                {
                    if (manager == null)
                    {
                        sim.OpportunityHistory.mCurrentOpportunities[i] = null;

                        if (log != null)
                        {
                            log(" OpportunityExportInfo Removed " + sim.FullName);
                        }
                    }
                }

                if (info == null)
                {
                    continue;
                }

                if (info.ListenerStates == null)
                {
                    info.ListenerStates = new EventListenerExportInfo[3];

                    if (log != null)
                    {
                        log(" ListenerState Array Initialized " + sim.FullName);
                    }
                }

                for (int index = 0; index < 3; index++)
                {
                    if (info.ListenerStates[index] == null)
                    {
                        info.ListenerStates[index] = new EventListenerExportInfo();

                        if (log != null)
                        {
                            log(" ListenerState Element Initialized " + sim.FullName);
                        }
                    }
                }
            }

            return(true);
        }
示例#12
0
        protected static List <Opportunity> GetAllOpportunities(Sim sim, bool singleCategory, Dictionary <OpportunityNames, Opportunity> opportunityList)
        {
            //Common.StringBuilder msg = new Common.StringBuilder("GetAllOpportunities");

            List <Opportunity> allOpportunities = new List <Opportunity>();

            if (!GameStates.IsOnVacation)
            {
                CareerManager manager = sim.CareerManager;
                if (manager != null)
                {
                    for (int i = 0; i < 2; i++)
                    {
                        Sims3.Gameplay.Careers.Career career = manager.Occupation as Sims3.Gameplay.Careers.Career;
                        if (i == 1)
                        {
                            career = manager.School;
                        }

                        if (career == null)
                        {
                            continue;
                        }

                        foreach (Sims3.Gameplay.Careers.Career.EventDaily daily in career.CareerEventList)
                        {
                            Sims3.Gameplay.Careers.Career.EventOpportunity oppEvent = daily as Sims3.Gameplay.Careers.Career.EventOpportunity;
                            if (oppEvent == null)
                            {
                                continue;
                            }

                            if (opportunityList.ContainsKey(oppEvent.mOpportunity))
                            {
                                continue;
                            }

                            Opportunity opportunity = OpportunityManager.GetStaticOpportunity(oppEvent.mOpportunity);
                            if (opportunity == null)
                            {
                                continue;
                            }

                            opportunityList.Add(opportunity.Guid, opportunity);
                        }
                    }
                }
            }

            foreach (Opportunity opportunity in opportunityList.Values)
            {
                //msg += Common.NewLine + "A: " + opportunity.Guid;

                Repeatability    origRepeatability   = opportunity.RepeatLevel;
                OpportunityNames origTriggerOpp      = opportunity.SharedData.mCompletionTriggerOpportunity;
                WorldName        targetWorldRequired = opportunity.SharedData.mTargetWorldRequired;

                try
                {
                    if (!singleCategory)
                    {
                        opportunity.mSharedData.mRepeatLevel = Repeatability.Always;
                        opportunity.mSharedData.mCompletionTriggerOpportunity = OpportunityNames.Undefined;
                    }

                    if (opportunity.TargetWorldRequired == WorldName.SunsetValley)
                    {
                        if ((singleCategory) && (Common.IsOnTrueVacation()))
                        {
                            if (sim.SimDescription.HomeWorld != GameUtils.GetCurrentWorld())
                            {
                                continue;
                            }
                        }
                        else
                        {
                            opportunity.SharedData.mTargetWorldRequired = WorldName.Undefined;
                        }
                    }
                    else if (opportunity.TargetWorldRequired != WorldName.Undefined)
                    {
                        if (opportunity.TargetWorldRequired != GameUtils.GetCurrentWorld())
                        {
                            continue;
                        }
                    }

                    if (GameStates.IsOnVacation)
                    {
                        bool career = false;
                        foreach (Opportunity.OpportunitySharedData.RequirementInfo info in opportunity.SharedData.mRequirementList)
                        {
                            if (info.mType == RequirementType.Career)
                            {
                                career = true;
                                break;
                            }
                        }

                        if (career)
                        {
                            continue;
                        }
                    }

                    //if (IsAvailable(opportunity, sim, ref msg))
                    if (opportunity.IsAvailable(sim))
                    {
                        allOpportunities.Add(opportunity);
                    }
                }
                catch (Exception e)
                {
                    Common.DebugException(opportunity.Guid + Common.NewLine + opportunity.Name, e);
                }
                finally
                {
                    opportunity.mSharedData.mRepeatLevel = origRepeatability;
                    opportunity.mSharedData.mCompletionTriggerOpportunity = origTriggerOpp;
                    opportunity.SharedData.mTargetWorldRequired           = targetWorldRequired;
                }
            }

            List <Opportunity> allPotentials = new List <Opportunity>();

            foreach (Opportunity opportunity in allOpportunities)
            {
                string name = null;

                //msg += Common.NewLine + "B: " + opportunity.Guid;

                try
                {
                    if (sim.OpportunityManager.HasOpportunity(opportunity.OpportunityCategory))
                    {
                        continue;
                    }

                    Opportunity toAdd = opportunity.Clone();
                    toAdd.Actor = sim;

                    // EA has coding to spawn the Time Traveler in SetupTargets(), don't do it in that case
                    if ((toAdd.SharedData.mTargetType != OpportunityTargetTypes.Sim) || (toAdd.SharedData.mTargetData != "TimeTraveler"))
                    {
                        if (!sim.OpportunityManager.SetupTargets(toAdd))
                        {
                            continue;
                        }
                    }
                    toAdd.SetLocalizationIndex();

                    name = toAdd.Name;

                    allPotentials.Add(toAdd);
                }
                catch (Exception e)
                {
                    Common.DebugException(opportunity.Guid + Common.NewLine + name, e);
                }
            }

            //Common.DebugWriteLog(msg);

            return(allPotentials);
        }