Exemple #1
0
 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);
        }
Exemple #3
0
        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);
        }