예제 #1
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);
        }
예제 #2
0
        protected SimDescription FindNextOpponent(SimDescription sim)
        {
            LogicSkill mySkill = sim.SkillManager.GetElement(SkillNames.Logic) as LogicSkill;

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

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

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

            if (mySkill.mChessRankingNextChallenger == null)
            {
                IncStat("No Choice");
                return(null);
            }

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

            if (mySkill.mChessRankingNextChallenger.SkillManager == null)
            {
                return(null);
            }

            LogicSkill theirSkill = mySkill.mChessRankingNextChallenger.SkillManager.GetElement(SkillNames.Logic) as LogicSkill;

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

            return(mySkill.mChessRankingNextChallenger);
        }
예제 #3
0
        protected static bool TestNextOpponent(Common.IStatGenerator stats, LogicSkill mySkill, SimDescription choice)
        {
            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)))
            {
                Chess oppSkill = nextOpponent.SkillManager.AddElement(SkillNames.Chess) as Chess;
                if ((oppSkill != null) && (oppSkill.SkillLevel < LogicSkill.kChessSkillForOpponentPerRank[mySkill.mChessRank]))
                {
                    // Next opponent will receive free skills
                    return(false);
                }
            }

            return(true);
        }
예제 #4
0
            public override bool Test(Sim initiatingSim, Sim targetSim, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                try
                {
                    LogicSkill skill = initiatingSim.SkillManager.GetSkill <LogicSkill>(SkillNames.Logic);
                    if ((skill != null) && (skill.SkillLevel < skill.MaxSkillLevel))
                    {
                        return(false);
                    }

                    return(base.Test(initiatingSim, targetSim, isAutonomous, ref greyedOutTooltipCallback));
                }
                catch (Exception e)
                {
                    Common.Exception(initiatingSim, targetSim, e);
                }

                return(false);
            }
예제 #5
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));
        }
예제 #6
0
        protected static bool TestNextOpponent(Common.IStatGenerator stats, LogicSkill mySkill)
        {
            if (!TestNextOpponent(stats, mySkill, mySkill.mChessRankingNextChallenger))
            {
                stats.IncStat("Next Opponent Fail");
                return(false);
            }

            int possibleWins = mySkill.NumberOfChessTournamentWins + 1;

            int newRank = 0;

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

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

            return(true);
        }