private static void RespecAndRefresh(SGBarracksMWDetailPanel __instance, Pilot pilot) { WipePilotStats(pilot); UnityGameInstance.BattleTechGame.Simulation.AddFunds(-modSettings.cost); pilot.pilotDef.PilotTags.Add("HasRetrained"); __instance.DisplayPilot(pilot); }
PilotReskill(SGBarracksMWDetailPanel __instance, Pilot ___curPilot) { var sim = UnityGameInstance.BattleTechGame.Simulation; var pilotDef = ___curPilot.pilotDef.CopyToSim(); foreach (var val in sim.Constants.Story.CampaignCommanderUpdateTags) { if (!sim.CompanyTags.Contains(val)) { sim.CompanyTags.Add(val); } } // save xpUsed var xpUsed = ( sim.GetLevelRangeCost(1, pilotDef.SkillPiloting - 1) + sim.GetLevelRangeCost(1, pilotDef.SkillGunnery - 1) + sim.GetLevelRangeCost(1, pilotDef.SkillGuts - 1) + sim.GetLevelRangeCost(1, pilotDef.SkillTactics - 1) ); // handle xpUsed overflow if (xpUsed < 0) { xpUsed = 0x40000000; } // reset ___curPilot Traverse.Create(pilotDef).Property("BasePiloting").SetValue(1); Traverse.Create(pilotDef).Property("BaseGunnery").SetValue(1); Traverse.Create(pilotDef).Property("BaseGuts").SetValue(1); Traverse.Create(pilotDef).Property("BaseTactics").SetValue(1); Traverse.Create(pilotDef).Property("BonusPiloting").SetValue(1); Traverse.Create(pilotDef).Property("BonusGunnery").SetValue(1); Traverse.Create(pilotDef).Property("BonusGuts").SetValue(1); Traverse.Create(pilotDef).Property("BonusTactics").SetValue(1); pilotDef.abilityDefNames.Clear(); pilotDef.SetSpentExperience(0); pilotDef.ForceRefreshAbilityDefs(); pilotDef.ResetBonusStats(); ___curPilot.FromPilotDef(pilotDef); // reset xpUsed ___curPilot.AddExperience(0, "reset", xpUsed); // ___curPilot.AddExperience(0, "reset", 1234567); __instance.DisplayPilot(___curPilot); }
private static void RespecAndRefresh(SGBarracksMWDetailPanel __instance, Pilot pilot) { Logger.Log($"==============================================================="); Logger.Log($"Before:\t{pilot.pilotDef.ExperienceSpent}, {pilot.pilotDef.ExperienceUnspent}"); Logger.Log($"Skill:\t{pilot.pilotDef.SkillGunnery}, {pilot.pilotDef.SkillPiloting}, {pilot.pilotDef.SkillGuts}, {pilot.pilotDef.SkillTactics}"); Logger.Log($"Base:\t{pilot.pilotDef.BaseGunnery}, {pilot.pilotDef.BasePiloting}, {pilot.pilotDef.BaseGuts}, {pilot.pilotDef.BaseTactics}"); Logger.Log($"Bonus:\t{pilot.pilotDef.BonusGunnery}, {pilot.pilotDef.BonusPiloting}, {pilot.pilotDef.BonusGuts}, {pilot.pilotDef.BonusTactics}"); SimGameState sim = UnityGameInstance.BattleTechGame.Simulation; int cost = GetRespecCost(sim, pilot); int days = GetRespecInjuryDays(sim, pilot) + sim.GetPilotTimeoutTimeRemaining(pilot); RespecPilot(pilot); sim.AddFunds(-cost); // currently bugged: AddInjuryDays(sim, pilot, days); pilot.pilotDef.SetTimeoutTime(days); pilot.pilotDef.PilotTags.Add("pilot_lightinjury"); sim.RefreshInjuries(); pilot.pilotDef.PilotTags.Add("HasRetrained"); __instance.DisplayPilot(pilot); __instance.ForceRefreshImmediate(); sim.RoomManager.RefreshDisplay(); Logger.Log($"==============================================================="); Logger.Log($"cost: {cost}, days: {days}"); Logger.Log($"==============================================================="); Logger.Log($"After:\t{pilot.pilotDef.ExperienceSpent}, {pilot.pilotDef.ExperienceUnspent}"); Logger.Log($"Skill:\t{pilot.pilotDef.SkillGunnery}, {pilot.pilotDef.SkillPiloting}, {pilot.pilotDef.SkillGuts}, {pilot.pilotDef.SkillTactics}"); Logger.Log($"Base:\t{pilot.pilotDef.BaseGunnery}, {pilot.pilotDef.BasePiloting}, {pilot.pilotDef.BaseGuts}, {pilot.pilotDef.BaseTactics}"); Logger.Log($"Bonus:\t{pilot.pilotDef.BonusGunnery}, {pilot.pilotDef.BonusPiloting}, {pilot.pilotDef.BonusGuts}, {pilot.pilotDef.BonusTactics}"); //invoking private method: sim.RespecPilot(pilot); // bugged method!!! //typeof(ToHit).GetMethod("RespecPilot", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(sim, new object[] { pilot }); //pilot.AddExperience(0, "respec", experienceSpent); }