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); }
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); }
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); }
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); }
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)); }
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); }