public static void Postfix(Pilot ___curPilot, SimGameState ___simState, List <SGBarracksSkillPip> pips, int originalSkill, int curSkill, int idx, bool isLocked) { if ((___curPilot.pilotDef.PilotTags.Contains("pilot_fatigued") && settings.FatigueReducesSkills) || (settings.InjuriesHurt && (___curPilot.Injuries > 0 || ___curPilot.pilotDef.PilotTags.Contains("pilot_lightinjury")))) { SGBarracksSkillPip.PurchaseState purchaseState = SGBarracksSkillPip.PurchaseState.Unselected; if (originalSkill > idx) { purchaseState = SGBarracksSkillPip.PurchaseState.Purchased; } else if (curSkill > idx) { purchaseState = SGBarracksSkillPip.PurchaseState.Selected; } bool flag = false; if (isLocked && (idx + 1 == pips.Count || curSkill == idx + 1)) { flag = true; } if (pips[idx].Ability != null) { bool flag2 = ___simState.CanPilotTakeAbility(___curPilot.pilotDef, pips[idx].Ability, pips[idx].SecondTierAbility); bool flag3 = ___curPilot.pilotDef.abilityDefNames.Contains(pips[idx].Ability.Description.Id); pips[idx].Set(purchaseState, (curSkill == idx || curSkill == idx + 1) && !isLocked, curSkill == idx, true, isLocked && flag); pips[idx].SetActiveAbilityVisible(flag2 || flag3); } pips[idx].Set(purchaseState, (curSkill == idx || curSkill == idx + 1) && !isLocked, curSkill == idx, true, isLocked && flag); } }
public static void Postfix(SGBarracksSkillPip __instance, SGBarracksSkillPip.PurchaseState purchaseState, bool canClick, bool showXP, bool needXP, bool isLocked, int ___idx, string ___type, HBSTooltip ___AbilityTooltip) { if (purchaseState == SGBarracksSkillPip.PurchaseState.Unselected) { var sim = UnityGameInstance.BattleTechGame.Simulation; var abilityDictionaries = sim.AbilityTree.Select(x => x.Value).ToList(); var abilityDefs = new List <AbilityDef>(); foreach (var abilityDictionary in abilityDictionaries) { abilityDefs.AddRange(abilityDictionary[___idx].Where(x => x.ReqSkill.ToString() == ___type)); } var title = $"{___type}: Level {___idx+1} Ability Options"; var desc = ""; foreach (var ability in abilityDefs) { var abilityFilter = modSettings.abilityReqs.Values.SelectMany(x => x).ToList(); List <AbilityDef> abilitiesWithReqs = abilityDefs.Where(x => abilityFilter.Any(y => y.Equals(x.Id))).ToList(); if (abilitiesWithReqs.Contains(ability)) { var reqAbilityName = modSettings.abilityReqs.FirstOrDefault(x => x.Value.Contains(ability.Description.Id)).Key; var allAbilities = new List <AbilityDef>(); allAbilities = sim.AbilityTree[___type].SelectMany(x => x.Value).ToList(); var reqAbility = allAbilities.Find(x => x.Id == reqAbilityName); // desc += "<b><u>" + ability.Description.Name + "</b></u> - Requires: " + reqAbility.Description.Name + "\n\n" + ability.Description.Details + "\n\n\n"; } else { desc += "<b><u>" + ability.Description.Name + "</b></u>\n\n" + ability.Description.Details + "\n\n\n"; } } var descDef = new BaseDescriptionDef("PilotSpecs", title, desc, null); ___AbilityTooltip.SetDefaultStateData(TooltipUtilities.GetStateDataFromObject(descDef)); } }
public static bool Prefix(SGBarracksAdvancementPanel __instance, List <SGBarracksSkillPip> pips, int originalSkill, int curSkill, int idx, bool needsXP, bool isLocked, Pilot ___curPilot) { var sim = UnityGameInstance.BattleTechGame.Simulation; SGBarracksSkillPip.PurchaseState purchaseState = SGBarracksSkillPip.PurchaseState.Unselected; if (originalSkill > idx) { purchaseState = SGBarracksSkillPip.PurchaseState.Purchased; } else if (curSkill > idx) { purchaseState = SGBarracksSkillPip.PurchaseState.Selected; } bool flag = false; if (isLocked && (idx + 1 == pips.Count || curSkill == idx + 1)) { flag = true; } if (pips[idx].Ability != null) { bool flag2 = sim.CanPilotTakeAbility(___curPilot.pilotDef, pips[idx].Ability, pips[idx].SecondTierAbility); bool flag3 = ___curPilot.pilotDef.abilityDefNames.Contains(pips[idx].Ability.Description.Id); //this is the pertinent change, which checks if pilot has ANY ability of the correct type and level, and sets it to be visible if true var type = pips[idx].Ability.ReqSkill; var abilityDefs = ___curPilot.pilotDef.AbilityDefs.Where(x => x.ReqSkill == type && x.ReqSkillLevel == idx + 1 && x.IsPrimaryAbility); bool flag4 = abilityDefs.Any(); pips[idx].Set(purchaseState, (curSkill == idx || curSkill == idx + 1) && !isLocked, curSkill == idx, needsXP, isLocked && flag); pips[idx].SetActiveAbilityVisible(flag2 || flag3 || flag4); } pips[idx].Set(purchaseState, (curSkill == idx || curSkill == idx + 1) && !isLocked, curSkill == idx, needsXP, isLocked && flag); return(false); }