Beispiel #1
0
        public static void OnGotTips(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            IncrementalEvent iEvent = e as IncrementalEvent;

            if (iEvent == null)
            {
                return;
            }

            foreach (SkillNames skill in MetricMusicSkill.Skills)
            {
                SkillBasedCareerBooter.UpdateExperience(actor, skill, (int)iEvent.mIncrement);
            }
        }
Beispiel #2
0
            public override bool Test(Sim a, TrainingDummy target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (a.SkillManager.GetSkillLevel(SkillNames.MartialArts) >= 7)
                {
                    return(false);
                }

                if (SkillBasedCareerBooter.GetSkillBasedCareer(a, SkillNames.MartialArts) == null)
                {
                    return(false);
                }

                GreyedOutTooltipCallback callback = null;

                if (target.mTrainee == null)
                {
                    if (TrainingDummy.PushTrain.GetValidCandidates(a, target).Count != 0x0)
                    {
                        return(true);
                    }
                    if (callback == null)
                    {
                        callback = delegate
                        {
                            return(Common.LocalizeEAString(a.IsFemale, "Gameplay/Objects/HobbiesSkills/TrainingDummy/Train:NoOneToTrain", new object[0x0]));
                        };
                    }
                    greyedOutTooltipCallback = callback;
                }

                return(false);
            }
Beispiel #3
0
        public static void OnRankedChessPlayed(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            PlayedChessEvent pEvent = e as PlayedChessEvent;

            if (!pEvent.WonGame)
            {
                return;
            }

            int cash = SkillBasedCareerBooter.GetCareerPay(actor, SkillNames.Chess);

            cash *= 4;

            actor.ModifyFunds(cash);

            SkillBasedCareerBooter.UpdateExperience(actor, SkillNames.Chess, cash);
        }
Beispiel #4
0
            public override bool Test(Sim a, AthleticGameObject target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (isAutonomous)
                {
                    if (TrainableSim.Service != null)
                    {
                        return(false);
                    }
                }

                if (SkillBasedCareerBooter.GetSkillBasedCareer(a, SkillNames.Athletic) == null)
                {
                    return(false);
                }

                if ((!target.CanObjectTrainSim() || (a.SkillManager.GetSkillLevel(SkillNames.Athletic) >= AthleticGameObject.TrainSim.AthleticSkillLevelGate)) || ((target.ActorsUsingMe.Count != 0x0) || isAutonomous))
                {
                    return(false);
                }

                if (target.Cardio)
                {
                    return(AthleticGameObject.WorkOut.CardioSingleton.CreateInstance(target, TrainableSim, a.InheritedPriority(), false, true).Test());
                }
                return(AthleticGameObject.WorkOut.StrengthSingleton.CreateInstance(target, TrainableSim, a.InheritedPriority(), false, true).Test());
            }
Beispiel #5
0
        public static void OnWonTournament(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            int cash = SkillBasedCareerBooter.GetCareerPay(actor, SkillNames.MartialArts);

            cash *= 4;

            actor.ModifyFunds(cash);

            SkillBasedCareerBooter.UpdateExperience(actor, SkillNames.MartialArts, cash);

            if (GameUtils.GetCurrentWorld() != WorldName.China)
            {
                RollNewSparOpponent.Perform(actor);
            }
        }
Beispiel #6
0
        public static bool CallbackTest(Sim actor, Sim target, ActiveTopic topic, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
        {
            try
            {
                if (!SocialTest.TestTrainSim(actor, target, topic, isAutonomous, ref greyedOutTooltipCallback))
                {
                    return(false);
                }

                if (SkillBasedCareerBooter.GetSkillBasedCareer(actor, SkillNames.Athletic) == null)
                {
                    if (actor.SkillManager.GetSkillLevel(SkillNames.Athletic) < AthleticGameObject.TrainSim.kAthleticSkillLevelGate)
                    {
                        return(false);
                    }
                }

                return(true);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
                return(false);
            }
        }
Beispiel #7
0
        public static void GetPaid(Sim actor, Lot lot, int payment, bool notify)
        {
            if (payment > 0)
            {
                Household house = lot.Household;
                if (house != null)
                {
                    if (payment > house.FamilyFunds)
                    {
                        payment = house.FamilyFunds;
                        if ((payment == 0) && (notify))
                        {
                            if (actor.Household == Household.ActiveHousehold)
                            {
                                ObjectGuid guid = ObjectGuid.InvalidObjectGuid;
                                if (house.Sims.Count > 0)
                                {
                                    guid = house.Sims[0].ObjectId;
                                }

                                Common.Notify(Common.Localize("Repairman:UnableToPay"), guid);
                            }
                        }
                    }

                    house.ModifyFamilyFunds(-payment);
                }

                actor.ModifyFunds(payment);

                SkillBasedCareerBooter.UpdateExperience(actor, SkillNames.Handiness, payment);
            }
        }
Beispiel #8
0
        public static float GetPay(Sim sim)
        {
            float cashPerHour = SkillBasedCareerBooter.GetCareerPay(sim, SkillNames.Athletic);

            if ((cashPerHour == 0) && (!sim.IsSelectable))
            {
                cashPerHour = 10;
            }

            cashPerHour *= SkillBasedCareerBooter.GetLevelFactor(sim, SkillNames.Athletic);

            return(cashPerHour);
        }
Beispiel #9
0
            public override bool Test(Sim a, TrainingDummy target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (!base.Test(a, target, isAutonomous, ref greyedOutTooltipCallback))
                {
                    return(false);
                }

                if (a.SkillManager.GetSkillLevel(SkillNames.MartialArts) >= 7)
                {
                    return(false);
                }

                return(SkillBasedCareerBooter.GetSkillBasedCareer(a, SkillNames.MartialArts) != null);
            }
Beispiel #10
0
        public static float GetPay(Sim sim)
        {
            float cashPerHour = SkillBasedCareerBooter.GetCareerPay(sim, SkillNames.MartialArts);

            if ((cashPerHour == 0) && (!sim.IsSelectable))
            {
                cashPerHour = 25;
            }

            cashPerHour /= 5f; // Value normally used for tournament pay

            cashPerHour *= SkillBasedCareerBooter.GetLevelFactor(sim, SkillNames.MartialArts);

            return(cashPerHour);
        }
Beispiel #11
0
            public override bool Test(Sim a, Computer target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (isAutonomous)
                {
                    return(false);
                }

                if (!target.IsComputerUsable(a, true, false, isAutonomous))
                {
                    return(false);
                }

                SkillBasedCareer career = SkillBasedCareerBooter.GetSkillBasedCareer(a, SkillNames.Handiness);

                return(career != null);
            }
Beispiel #12
0
        public static void OnMeditated(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if (SkillBasedCareerBooter.GetSkillBasedCareer(actor, SkillNames.MartialArts) == null)
            {
                return;
            }

            TimePassedEvent tEvent = e as TimePassedEvent;

            float perSimValue = 0;

            perSimValue *= tEvent.Increment;

            foreach (Sim sim in actor.LotCurrent.GetSims())
            {
                if (sim == actor)
                {
                    continue;
                }

                if (sim.RoomId != actor.RoomId)
                {
                    continue;
                }

                if (sim.FamilyFunds >= perSimValue)
                {
                    sim.Motives.SetMax(CommodityKind.VampireThirst);
                    sim.Motives.SetMax(CommodityKind.Hunger);
                    sim.Motives.SetMax(CommodityKind.Energy);

                    AddAccrued(actor, sim, perSimValue);
                }
            }

            CollectAccrued(actor, null);
        }
Beispiel #13
0
            public override bool Test(Sim a, Guitar target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (!base.Test(a, target, isAutonomous, ref greyedOutTooltipCallback))
                {
                    return(false);
                }

                if (SkillBasedCareerBooter.GetSkillBasedCareer(a, Sims3.Gameplay.Skills.SkillNames.Guitar) == null)
                {
                    return(false);
                }

                if (a.SkillManager.GetSkillLevel(Sims3.Gameplay.Skills.SkillNames.Guitar) >= 5)
                {
                    return(false);
                }

                return(true);
            }
Beispiel #14
0
            public override bool Test(Sim a, AthleticGameObject target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (!target.CanObjectTrainSim())
                {
                    return(false);
                }

                if (a.SkillManager.GetSkillLevel(SkillNames.Athletic) >= AthleticGameObject.TrainSim.kAthleticSkillLevelGate)
                {
                    return(false);
                }

                if (target.OtherActor(a) == null)
                {
                    return(false);
                }

                return(SkillBasedCareerBooter.GetSkillBasedCareer(a, SkillNames.Athletic) != null);
            }
Beispiel #15
0
        public static void OnSoldObject(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            if ((e.TargetObject is RockGemMetalBase) || (e.TargetObject is IRelic) || (e.TargetObject is IHazInsect))
            {
                SkillBasedCareerBooter.UpdateExperience(actor, SkillNames.Collecting, e.TargetObject.Value);
            }
        }
Beispiel #16
0
            public override bool Test(Sim a, ShowVenue target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                bool success = false;

                SkillBasedCareer career = SkillBasedCareerBooter.GetSkillBasedCareer(a, SkillNames.Guitar);

                if (career != null)
                {
                    success = true;

                    if (career.CareerLevel < NRaas.Careers.Settings.mBuskerLevelToGetPaidForConcerts)
                    {
                        greyedOutTooltipCallback = delegate
                        {
                            return(Common.Localize("Busker:ConcertLevelTooLow", a.IsFemale, new object[] { Music.LevelToGetPaidForConcerts - 3 }));
                        };
                        return(false);
                    }
                }
                else
                {
                    success = OmniCareer.HasMetric <MetricConcertsPerformed>(a.Occupation);
                }

                if (success)
                {
                    if (!target.PerformConcertAllowed(ref greyedOutTooltipCallback))
                    {
                        return(false);
                    }
                    if ((SimClock.Hours24 >= ShowVenue.kPerformConcertAvailableStartingAtHour) && (SimClock.Hours24 < ShowVenue.kPerformConcertAvailableEndingAtHour))
                    {
                        return(true);
                    }

                    greyedOutTooltipCallback = delegate
                    {
                        return(PerformConcert.LocalizeString(a.SimDescription, "CannotPerformConcert", new object[] { SimClockUtils.GetText(ShowVenue.kPerformConcertAvailableStartingAtHour), SimClockUtils.GetText(ShowVenue.kPerformConcertAvailableEndingAtHour) }));
                    };
                }
                return(false);
            }
Beispiel #17
0
        public static void OnHack(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            IncrementalEvent iEvent = e as IncrementalEvent;

            if (iEvent != null)
            {
                SkillBasedCareerBooter.UpdateExperience(actor, SkillNames.Hacking, (int)iEvent.mIncrement);
            }
        }
Beispiel #18
0
        public static void OnPerformedConcert(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            if (actor.InteractionQueue == null)
            {
                return;
            }

            InteractionInstance interaction = actor.InteractionQueue.GetCurrentInteraction();

            if (interaction == null)
            {
                return;
            }

            ShowVenue venue = interaction.Target as ShowVenue;

            if (venue == null)
            {
                return;
            }

            foreach (SkillNames skill in MetricMusicSkill.Skills)
            {
                SkillBasedCareerBooter.UpdateExperience(actor, skill, (int)venue.ConcertPayAmount);
            }
        }
Beispiel #19
0
        public static void OnChessWon(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            Sim target = e.TargetObject as Sim;

            if (target == null)
            {
                return;
            }

            if (target.SimDescription.ChildOrBelow)
            {
                return;
            }

            if (actor.Household == target.Household)
            {
                return;
            }

            if (actor.InteractionQueue == null)
            {
                return;
            }

            InteractionInstance instance = actor.InteractionQueue.GetCurrentInteraction();

            if (instance == null)
            {
                return;
            }

            ChessTable.PracticeChess practice = instance as ChessTable.PracticeChess;
            if (practice == null)
            {
                return;
            }

            if (practice.Target == null)
            {
                return;
            }

            if (practice.Target.mbPlayingForChessRank)
            {
                return;
            }

            int actorCash  = SkillBasedCareerBooter.GetCareerPay(actor, SkillNames.Chess);
            int targetCash = SkillBasedCareerBooter.GetCareerPay(target, SkillNames.Chess);

            if (actorCash < targetCash)
            {
                actorCash = targetCash;
            }

            if (actorCash == 0)
            {
                return;
            }

            if (actor.SkillManager == null)
            {
                return;
            }

            int diff = actor.SkillManager.GetSkillLevel(SkillNames.Chess);

            if (target.SkillManager != null)
            {
                diff -= target.SkillManager.GetSkillLevel(SkillNames.Chess);
            }

            if (diff < 0)
            {
                diff = -diff;
            }

            if (diff != 0)
            {
                actorCash /= diff;
            }

            if (actorCash > target.FamilyFunds)
            {
                actorCash = target.FamilyFunds;
                if (actorCash == 0)
                {
                    Common.Notify(Common.Localize("ChessPlayer:UnableToPay"), target.ObjectId);

                    if (actor.InteractionQueue != null)
                    {
                        actor.InteractionQueue.CancelAllInteractions();
                    }
                    return;
                }
            }

            actor.ModifyFunds(actorCash);

            target.ModifyFunds(-actorCash);

            SkillBasedCareerBooter.UpdateExperience(actor, SkillNames.Chess, actorCash);
        }
Beispiel #20
0
        protected static bool CollectAccrued(Sim sim, Sim target)
        {
            Dictionary <ulong, float> funds;

            if (!sAccrued.TryGetValue(sim.SimDescription.SimDescriptionId, out funds))
            {
                return(true);
            }

            float cash = 0;

            bool success = true;

            Dictionary <ulong, float> replace = new Dictionary <ulong, float>();

            foreach (KeyValuePair <ulong, float> value in funds)
            {
                if (value.Value >= 1)
                {
                    Household house = Household.Find(value.Key);
                    if (house == null)
                    {
                        replace.Add(value.Key, 0);
                    }
                    else
                    {
                        int remains = (int)value.Value;
                        if (remains > house.FamilyFunds)
                        {
                            remains = house.FamilyFunds;

                            replace.Add(value.Key, value.Value - remains);

                            if ((target != null) && (target.Household == house))
                            {
                                success = true;
                            }
                        }

                        cash += remains;

                        house.ModifyFamilyFunds(-remains);
                    }
                }
            }

            foreach (KeyValuePair <ulong, float> value in replace)
            {
                funds.Remove(value.Key);

                if (value.Value > 0)
                {
                    funds.Add(value.Key, value.Value);
                }
            }


            sim.ModifyFunds((int)cash);

            SkillBasedCareerBooter.UpdateExperience(sim, SkillNames.MartialArts, (int)cash);

            return(success);
        }
Beispiel #21
0
        public static void OnTrained(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            if (actor.InteractionQueue == null)
            {
                return;
            }

            InteractionInstance interaction = actor.InteractionQueue.GetCurrentInteraction();

            if (interaction == null)
            {
                return;
            }

            if (!(interaction.Target is AthleticGameObject))
            {
                return;
            }

            TimePassedEvent pEvent = e as TimePassedEvent;

            Sim target = e.TargetObject as Sim;

            if (target == null)
            {
                return;
            }

            if (actor.Household == target.Household)
            {
                return;
            }

            float cash = GetPay(actor) * pEvent.mIncrement;

            if (sAccrued.ContainsKey(actor.SimDescription.SimDescriptionId))
            {
                cash += sAccrued[actor.SimDescription.SimDescriptionId];
            }

            if (cash >= target.FamilyFunds)
            {
                cash = target.FamilyFunds;
                if (cash == 0)
                {
                    if (actor.InteractionQueue != null)
                    {
                        actor.InteractionQueue.CancelAllInteractions();
                    }

                    if (actor.IsSelectable)
                    {
                        Common.Notify(Common.Localize("Trainer:UnableToPay"), actor.ObjectId);
                    }
                    return;
                }
            }

            sAccrued.Remove(actor.SimDescription.SimDescriptionId);

            if (cash < 1)
            {
                sAccrued.Add(actor.SimDescription.SimDescriptionId, cash);
            }
            else
            {
                target.ModifyFunds(-(int)cash);

                actor.ModifyFunds((int)cash);

                SkillBasedCareerBooter.UpdateExperience(actor, SkillNames.Athletic, (int)cash);
            }
        }
Beispiel #22
0
        public static void OnPlayedInstrument(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            SkillNames instrumentSkill = SkillNames.None;

            switch (e.Id)
            {
            case EventTypeId.kPlayedDrums:
                instrumentSkill = SkillNames.Drums;
                break;

            case EventTypeId.kPlayedGuitar:
                instrumentSkill = SkillNames.Guitar;
                break;

            case EventTypeId.kPlayedBassGuitar:
                instrumentSkill = SkillNames.BassGuitar;
                break;

            case EventTypeId.kPlayedPiano:
                instrumentSkill = SkillNames.Piano;
                break;

            case EventTypeId.kPlayedLaserHarp:
                instrumentSkill = SkillNames.LaserHarp;
                break;
            }

            float opening = 0, closing = 0;

            if (!Bartending.TryGetHoursOfOperation(actor.LotCurrent, ref opening, ref closing))
            {
                return;
            }

            if (!SimClock.IsTimeBetweenTimes(opening, closing))
            {
                return;
            }

            IncrementalEvent iEvent = e as IncrementalEvent;

            float cash = GetPay(actor, instrumentSkill) * iEvent.mIncrement;

            if (cash == 0)
            {
                return;
            }

            foreach (SkillNames skill in MetricMusicSkill.Skills)
            {
                if (SkillBasedCareerBooter.GetSkillBasedCareer(actor, skill) == null)
                {
                    continue;
                }

                SkillBasedCareerBooter.UpdateExperience(actor, skill, (int)cash);
            }
        }
Beispiel #23
0
        public override bool InRabbitHole()
        {
            BeginCommodityUpdates();

            bool succeeded = false;

            try
            {
                Target.StartPlayerConcert();
                StartStages();
                succeeded = DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached));
                Target.EndPlayerConcert();
            }
            finally
            {
                EndCommodityUpdates(succeeded);
            }

            if (succeeded)
            {
                EventTracker.SendEvent(EventTypeId.kPerformedConcert, Actor);

                int level = 10;

                Music job = OmniCareer.Career <Music>(Actor.Occupation);
                if (job != null)
                {
                    job.ConcertsPerformed++;

                    OmniCareer omni = Actor.Occupation as OmniCareer;
                    if (omni != null)
                    {
                        if (omni.PaidForConcerts())
                        {
                            level = 0;
                        }
                    }
                    else
                    {
                        level = Music.LevelToGetPaidForConcerts;
                    }
                }

                SkillBasedCareer career = SkillBasedCareerBooter.GetSkillBasedCareer(Actor, SkillNames.Guitar);
                if (career != null)
                {
                    level = NRaas.Careers.Settings.mBuskerLevelToGetPaidForConcerts;
                }

                if (Actor.Occupation.CareerLevel >= level)
                {
                    int concertPayAmount = Target.ConcertPayAmount;

                    Actor.ModifyFunds(concertPayAmount);

                    Actor.ShowTNSIfSelectable(LocalizeString(Actor.SimDescription, "ConcertPay", new object[] { Actor, concertPayAmount }), StyledNotification.NotificationStyle.kGameMessagePositive, ObjectGuid.InvalidObjectGuid, Actor.ObjectId);
                }
                else
                {
                    Actor.Occupation.ShowOccupationTNS(OmniCareer.LocalizeString(Actor.SimDescription, "PerformTone:ConcertPerformed", "Gameplay/Careers/Music/PerformTone:ConcertPerformed", new object[] { Actor }));
                }
            }
            return(true);
        }
Beispiel #24
0
        public static void OnSparred(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            MartialArts.SparEvent sEvent = e as MartialArts.SparEvent;

            if (sEvent.IsRanked)
            {
                return;
            }

            Sim target = e.TargetObject as Sim;

            if (target == null)
            {
                return;
            }

            if (actor.Household == target.Household)
            {
                return;
            }

            int actorCash = SkillBasedCareerBooter.GetCareerPay(actor, SkillNames.MartialArts);

            if (actorCash == 0)
            {
                return;
            }

            int targetCash = SkillBasedCareerBooter.GetCareerPay(target, SkillNames.MartialArts);

            if (actorCash < targetCash)
            {
                actorCash = targetCash;
            }

            if (actorCash == 0)
            {
                return;
            }

            if (actor.SkillManager == null)
            {
                return;
            }

            int diff = actor.SkillManager.GetSkillLevel(SkillNames.MartialArts);

            if (target.SkillManager != null)
            {
                diff -= target.SkillManager.GetSkillLevel(SkillNames.MartialArts);
            }

            if (diff < 0)
            {
                diff = -diff;
            }

            if (diff != 0)
            {
                actorCash /= diff;
            }

            Sim winner = actor;
            Sim loser  = target;

            if (!sEvent.HasWon)
            {
                winner = target;
                loser  = actor;
            }

            if (actorCash > loser.FamilyFunds)
            {
                actorCash = loser.FamilyFunds;
                if (actorCash == 0)
                {
                    if ((winner.Household == Household.ActiveHousehold) ||
                        (loser.Household == Household.ActiveHousehold))
                    {
                        Common.Notify(Common.Localize("MartialArts:UnableToPay"), loser.ObjectId);
                        return;
                    }
                }
            }

            winner.ModifyFunds(actorCash);

            loser.ModifyFunds(-actorCash);

            SkillBasedCareerBooter.UpdateExperience(winner, SkillNames.MartialArts, actorCash);
        }