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); } }
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) { 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); }
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); } }
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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
public Affinity(MartialArts skill) { mSkill = skill; }