示例#1
0
        public static bool CallbackTest(Sim actor, Sim target, ActiveTopic topic, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
        {
            try
            {
                if (GameUtils.GetCurrentWorld() == WorldName.China)
                {
                    return(false);
                }

                MartialArts skill = actor.SkillManager.GetSkill <MartialArts>(SkillNames.MartialArts);
                MartialArts arts2 = target.SkillManager.GetSkill <MartialArts>(SkillNames.MartialArts);
                if (((skill != null) && skill.CanParticipateInTournaments) && ((arts2 != null) && arts2.CanParticipateInTournaments))
                {
                    SimDescription tournamentChallenger = skill.TournamentChallenger;
                    if ((tournamentChallenger != null) && (tournamentChallenger == target.SimDescription))
                    {
                        if (MartialArts.IsSimsMotiveSparWorthy(actor))
                        {
                            return(true);
                        }
                        greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Common.LocalizeEAString(actor.IsFemale, "Gameplay/Objects/HobbiesSkills/BoardBreaker:CannotBeFatigued", new object[] { actor }));
                    }
                }

                greyedOutTooltipCallback = Common.DebugTooltip("CanParticipateInTournaments fail");
                return(false);
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
                return(false);
            }
        }
示例#2
0
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            if (!ApplyAll)
            {
                if (!AcceptCancelDialog.Show(Common.Localize("DropOpponents:Prompt", me.IsFemale, new object[] { me })))
                {
                    return(false);
                }
            }

            LogicSkill logic = me.SkillManager.GetSkill <LogicSkill>(SkillNames.Logic);

            if (logic != null)
            {
                logic.mChessRankingNextChallenger = null;
            }

            MartialArts martial = me.SkillManager.GetSkill <MartialArts>(SkillNames.MartialArts);

            if (martial != null)
            {
                martial.mTournamentChallenger = 0;
            }

            return(true);
        }
示例#3
0
        protected SimDescription FindNextOpponent(SimDescription sim)
        {
            MartialArts mySkill = sim.SkillManager.GetElement(SkillNames.MartialArts) as MartialArts;

            if (mySkill == null)
            {
                IncStat("No Skill");
                return(null);
            }

            SimDescription tournamentChallenger = ManagerSim.Find(mySkill.mTournamentChallenger);

            if ((tournamentChallenger == null) ||
                (SimTypes.IsDead(tournamentChallenger)) ||
                (tournamentChallenger.CreatedSim == null) ||
                (tournamentChallenger.CreatedSim.WorldBuilderDeath != null) ||
                (!tournamentChallenger.IsValidDescription) ||
                (SimTypes.IsSelectable(tournamentChallenger)))
            {
                List <Household> households = new List <Household>(Household.sHouseholdList);
                households.Remove(Household.ActiveHousehold);

                tournamentChallenger = TournamentManagement.FindSuitableOpponent(sim, households, tournamentChallenger, new TournamentManagement.GetAffinity(mySkill.GetAffinity));
            }

            if (tournamentChallenger == null)
            {
                IncStat("No Choice");
                return(null);
            }

            mySkill.mTournamentChallenger = tournamentChallenger.SimDescriptionId;

            if (!TestNextOpponent(this, mySkill))
            {
                return(null);
            }

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

            MartialArts theirSkill = tournamentChallenger.SkillManager.GetElement(SkillNames.MartialArts) as MartialArts;

            if ((theirSkill != null) && (!TestNextOpponent(this, theirSkill)))
            {
                return(null);
            }

            return(tournamentChallenger);
        }
示例#4
0
        protected static bool CanCompete(SimDescription sim)
        {
            MartialArts skill = sim.SkillManager.GetElement(SkillNames.MartialArts) as MartialArts;

            if ((skill != null) && (skill.CanParticipateInTournaments))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
示例#5
0
            public override bool Test(Sim a, Phone target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (!base.Test(a, target, isAutonomous, ref greyedOutTooltipCallback))
                {
                    greyedOutTooltipCallback = Common.DebugTooltip("Base fail");
                    return(false);
                }

                MartialArts skill = a.SkillManager.GetSkill <MartialArts>(SkillNames.MartialArts);

                if ((skill == null) || !skill.CanParticipateInTournaments)
                {
                    greyedOutTooltipCallback = Common.DebugTooltip("CanParticipateInTournaments fail");
                    return(false);
                }

                SimDescription tournamentChallenger = skill.TournamentChallenger;

                if (tournamentChallenger == null)
                {
                    greyedOutTooltipCallback = Common.DebugTooltip("tournamentChallenger fail");
                    return(false);
                }

                /* Removed
                 * if (GameUtils.GetCurrentWorld() != WorldName.China)
                 * {
                 *  Phone.CallInviteOverSparTournamentChallenger.Definition.GreyedOutTooltipHelper helper = new Phone.CallInviteOverSparTournamentChallenger.Definition.GreyedOutTooltipHelper(a.SimDescription, tournamentChallenger, "CanSparOnlyInChina");
                 *  greyedOutTooltipCallback = new GreyedOutTooltipCallback(helper.Callback);
                 *  return false;
                 * }
                 */
                if (tournamentChallenger.Household == a.Household)
                {
                    Phone.CallInviteOverSparTournamentChallenger.Definition.GreyedOutTooltipHelper helper2 = new Phone.CallInviteOverSparTournamentChallenger.Definition.GreyedOutTooltipHelper(a.SimDescription, tournamentChallenger, "ChallengerPartOfHousehold");
                    greyedOutTooltipCallback = new GreyedOutTooltipCallback(helper2.Callback);
                    return(false);
                }
                if (!CanSimInviteOver(a, isAutonomous) || !CanInviteOverToLot(a.LotCurrent, isAutonomous))
                {
                    greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Sims3.Gameplay.Visa.TravelUtil.LocalizeString(a.IsFemale, "CannotInviteOver", new object[] { a }));
                    return(false);
                }
                if ((tournamentChallenger.CreatedSim != null) && (tournamentChallenger.CreatedSim.LotCurrent == a.LotCurrent))
                {
                    Phone.CallInviteOverSparTournamentChallenger.Definition.GreyedOutTooltipHelper helper3 = new Phone.CallInviteOverSparTournamentChallenger.Definition.GreyedOutTooltipHelper(a.SimDescription, tournamentChallenger, "ChallengerOnTheSameLot");
                    greyedOutTooltipCallback = new GreyedOutTooltipCallback(helper3.Callback);
                    return(false);
                }
                return(true);
            }
示例#6
0
            public int GetAffinity(SimDescription simDescription)
            {
                int num = 0x0;

                if (mSkill.mSkillOwner.Household != simDescription.Household)
                {
                    num++;
                }

                // Custom
                if (simDescription.AssignedRole != null)
                {
                    return(0x0);
                }

                int          num2         = MartialArts.kMartialArtsSkillForOpponentPerTournamentRank[mSkill.mTournamentRank];
                SkillManager skillManager = simDescription.SkillManager;

                if (skillManager != null)
                {
                    MartialArts skill = skillManager.GetSkill <MartialArts>(SkillNames.MartialArts);
                    if ((skill == null) || (!skill.CanParticipateInTournaments))
                    {
                        MiniSimDescription miniSim = simDescription.GetMiniSimForProtection();
                        if ((GameUtils.GetCurrentWorld() == WorldName.China) || ((miniSim != null) && (miniSim.ProtectionFlags == MiniSimDescription.ProtectionFlag.None)))
                        {
                            num += mSkill.MaxSkillLevel - num2;
                        }
                        else
                        {
                            return(0x0);
                        }
                    }
                    else
                    {
                        int num3 = Math.Abs((int)(num2 - skill.SkillLevel));
                        num += mSkill.MaxSkillLevel - num3;
                    }

                    if (skillManager.HasElement(SkillNames.Athletic))
                    {
                        num += MartialArts.kIncreaseInAffinityForOpponentsWithAthleticSkill;
                    }
                }
                return(num);
            }
示例#7
0
        private static SimDescription FindSparTournamentOpponent(MartialArts ths, SimDescription presentChallenger)
        {
            if ((ths.SkillOwner == null) || ((ths.SkillOwner.Household != null) && !ths.SkillOwner.Household.IsActive))
            {
                return(null);
            }

            SimDescription description = TournamentManagement.FindSuitableOpponent(ths.mSkillOwner, Household.sHouseholdList, presentChallenger, new Affinity(ths).GetAffinity);

            if (description != null)
            {
                Household household = description.Household;
                if (!household.IsActive && !household.IsTravelHousehold)
                {
                    MartialArts arts = description.SkillManager.AddElement(SkillNames.MartialArts) as MartialArts;
                    if (arts != null)
                    {
                        int num = MartialArts.kMartialArtsSkillForOpponentPerTournamentRank[ths.mTournamentRank];
                        if (arts.SkillLevel < num)
                        {
                            if ((GameUtils.GetCurrentWorld() == WorldName.China) || (description.GetMiniSimForProtection().ProtectionFlags == MiniSimDescription.ProtectionFlag.None))
                            {
                                int num2 = num;
                                num2 += RandomUtil.GetInt(0x0, MartialArts.kMaximumVarienceInSkillLevelForSparTournametOpponent);
                                num2  = MathUtils.Clamp(num2, MartialArts.kMartialArtsSkillForOpponentPerTournamentRank[0x1], arts.MaxSkillLevel);
                                arts.ForceSkillLevelUp(num2);
                            }
                            else
                            {
                                return(null);
                            }
                        }
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }
            }
            return(description);
        }
示例#8
0
        protected override bool PrivateAllow(SimDescription me)
        {
            if (me.SkillManager == null)
            {
                return(false);
            }

            LogicSkill logic = me.SkillManager.GetSkill <LogicSkill>(SkillNames.Logic);

            if ((logic == null) || (logic.mChessRankingNextChallenger == null))
            {
                MartialArts martial = me.SkillManager.GetSkill <MartialArts>(SkillNames.MartialArts);
                if ((martial == null) || (martial.mTournamentChallenger == 0))
                {
                    return(false);
                }
            }

            return(base.PrivateAllow(me));
        }
示例#9
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);
                }

                MartialArts skill = a.SkillManager.GetSkill <MartialArts>(SkillNames.MartialArts);

                if (skill == null)
                {
                    return(false);
                }

                return(skill.CanParticipateInTournaments);
            }
示例#10
0
        protected static bool TestNextOpponent(Common.IStatGenerator stats, MartialArts mySkill)
        {
            SimDescription tournamentChallenger = ManagerSim.Find(mySkill.mTournamentChallenger);

            if (!TestNextOpponent(stats, mySkill, tournamentChallenger))
            {
                stats.IncStat("Next Opponent Fail");
                return(false);
            }

            int possibleWins = mySkill.mSparringTournamentMatchWins + 1;

            int newRank = 0;

            while ((newRank < MartialArts.kTournamentWinsToImproveSparringRank.Length) && (possibleWins >= MartialArts.kTournamentWinsToImproveSparringRank[newRank]))
            {
                newRank++;
            }

            if (newRank > mySkill.mTournamentRank)
            {
                int oldRank = mySkill.mTournamentRank;
                mySkill.mTournamentRank = newRank;
                try
                {
                    if (!TestNextOpponent(stats, mySkill, tournamentChallenger))
                    {
                        stats.IncStat("Next Rank Fail");
                        return(false);
                    }
                }
                finally
                {
                    mySkill.mTournamentRank = oldRank;
                }
            }

            return(true);
        }
示例#11
0
        public static bool Perform(Sim actor)
        {
            MartialArts skill = actor.SkillManager.GetSkill <MartialArts>(SkillNames.MartialArts);

            if (skill == null)
            {
                return(false);
            }

            SimDescription sim = FindSparTournamentOpponent(skill, skill.TournamentChallenger);

            if (sim == null)
            {
                Common.Notify(Common.Localize("NewSparOpponent:NoResult", actor.IsFemale, new object[] { actor }), actor.ObjectId);

                skill.mTournamentChallenger = 0;
                return(false);
            }

            skill.mTournamentChallenger = sim.SimDescriptionId;
            return(true);
        }
示例#12
0
        protected static bool TestNextOpponent(Common.IStatGenerator stats, MartialArts mySkill, SimDescription choice)
        {
            if (GameUtils.GetCurrentWorld() == WorldName.China)
            {
                return(true);
            }

            SimDescription nextOpponent = TournamentManagement.FindSuitableOpponent(mySkill.SkillOwner, Household.sHouseholdList, choice, new TournamentManagement.GetAffinity(mySkill.GetAffinity));

            if ((nextOpponent != null) &&
                (nextOpponent.SkillManager != null) &&
                ((nextOpponent.Household == null) || (!nextOpponent.Household.IsActive)))
            {
                MartialArts oppSkill = nextOpponent.SkillManager.AddElement(SkillNames.MartialArts) as MartialArts;
                if ((oppSkill != null) && (oppSkill.SkillLevel < MartialArts.kMartialArtsSkillForOpponentPerTournamentRank[mySkill.mTournamentRank]))
                {
                    // Next opponent will receive free skills
                    return(false);
                }
            }

            return(true);
        }
示例#13
0
        public override bool Run()
        {
            if (!SafeToSync())
            {
                return(false);
            }
            StandardEntry(addToUseList: false);

            float num = GetSocialDistanceAndSetupJig();

            if (num < 0f)
            {
                Actor.AddExitReason(ExitReason.RouteFailed);
                return(false);
            }

            if (!BeginSocialInteraction(new SocialInteractionB.Definition(null, GetInteractionName(),
                                                                          allowCarryChild: false), pairedSocial: true, doCallOver: false))
            {
                Actor.AddExitReason(ExitReason.FailedToStart);
                return(false);
            }

            skillActor = Actor.SkillManager.GetSkill <EWPetFightingSkill>(EWPetFightingSkill.skillNameID);
            if (skillActor == null)
            {
                skillActor = Actor.SkillManager.AddElement(EWPetFightingSkill.skillNameID) as EWPetFightingSkill;
                if (skillActor == null)
                {
                    return(false);
                }
            }

            skillTarget = Target.SkillManager.GetSkill <MartialArts>(SkillNames.MartialArts);
            if (skillTarget == null)
            {
                skillTarget = Actor.SkillManager.AddElement(SkillNames.MartialArts)
                              as MartialArts;
                if (skillTarget == null)
                {
                    return(false);
                }
            }

            skillActor.StartSkillGain(skillActor.getSkillGainRate(Actor));
            skillTarget.StartSkillGain(EWPetFightingSkill.kSkillGainRateNormal);

            UpdateConversationWhenSocialStarts(Actor, Target);
            mSmc = GetStateMachine();
            string jazzState = mTargetEffect.RHS.JazzState;

            jazzState = SetupAnimationParameters(false, false, false, jazzState);
            mSmc.RequestState(null, jazzState);

            skillActor.StopSkillGain();
            skillTarget.StopSkillGain();

            bool actorWon = DoesActorWinFight();

            if (actorWon)
            {
                skillActor.wonFight(Target, Actor.LotCurrent == Actor.LotHome);
                skillActor.AddPoints(200f, true, true);
                Actor.ShowTNSIfSelectable(Localization.LocalizeString("Echoweaver/PetFighting/EWPetAttackSim:PetAttackWin",
                                                                      Actor.Name), StyledNotification.NotificationStyle.kGameMessagePositive);

                // TODO: Need appropriate origin for dog attack
                Target.BuffManager.AddElement(BuffNames.ShreddedDignity, Origin.FromFight);
                PlayHumanLossAnims();
            }
            else
            {
                skillActor.lostFight(Target);
                Actor.ShowTNSIfSelectable(Localization.LocalizeString("Echoweaver/PetFighting/EWPetAttackSim:PetAttackLose",
                                                                      Actor.Name), StyledNotification.NotificationStyle.kGameMessageNegative);
                PlayScoldAnims();
            }

            AfterAttack();
            FinishLinkedInteraction();
            WaitForSyncComplete();
            if (actorWon && targetRunOnLose && Target.LotCurrent != Target.LotHome)
            {
                // Success! Actor drove the unwanted sim off the lot.
                Target.RequestWalkStyle(WalkStyle.MeanChasedRun);
                MakeSimGoHome(Target, false);
            }
            else if (!actorWon && actorRunOnLose && Actor.LotCurrent != Actor.LotHome)
            {
                // Currently nothing calls this condition, but it seemed good to have it anyway.
                Actor.RequestWalkStyle(WalkStyle.PetRun);
                MakeSimGoHome(Actor, false);
            }

            StandardExit(removeFromUseList: false);
            return(true);
        }
示例#14
0
 public Affinity(MartialArts skill)
 {
     mSkill = skill;
 }