Пример #1
0
        public static void Postfix(AbstractActor __instance, ref int __result, StatCollection ___statCollection)
        {
            Mod.Log.Trace?.Write("AA:BI - entered.");

            Mod.Log.Debug?.Write($"Actor:({CombatantUtils.Label(__instance)}) has raw result: {__result}");
            if (__instance.Combat.TurnDirector.IsInterleaved)
            {
                int baseInit     = ___statCollection.GetValue <int>("BaseInitiative");
                int phaseMod     = ___statCollection.GetValue <int>("PhaseModifier");
                int modifiedInit = baseInit + phaseMod;

                if (modifiedInit < Mod.MinPhase)
                {
                    Mod.Log.Info?.Write($"Actor:({CombatantUtils.Label(__instance)}) being set to {Mod.MinPhase} due to BaseInit:{baseInit} + PhaseMod:{phaseMod}");
                    __result = Mod.MinPhase;
                }
                else if (modifiedInit > Mod.MaxPhase)
                {
                    Mod.Log.Info?.Write($"Actor:({CombatantUtils.Label(__instance)}) being set to {Mod.MaxPhase} due to BaseInit:{baseInit} + PhaseMod:{phaseMod}");
                    __result = Mod.MaxPhase;
                }
                else
                {
                    Mod.Log.Info?.Write($"Actor:({CombatantUtils.Label(__instance)}) has stats BaseInit:{baseInit} + PhaseMod:{phaseMod} = modifiedInit:{modifiedInit}.");
                    __result = modifiedInit;
                }
            }
            else
            {
                Mod.Log.Info?.Write($"Actor:({CombatantUtils.Label(__instance)}) is non-interleaved, returning phase: {Mod.MaxPhase}.");
                __result = Mod.MaxPhase;
            }
        }
Пример #2
0
        public static void Postfix(AbstractActor __instance, ref int __result, StatCollection ___statCollection)
        {
            CombatGameState ___Combat = (CombatGameState)Traverse.Create(__instance).Property("Combat").GetValue();

            if (___Combat.TurnDirector.IsInterleaved)
            {
                CombatHUD ___HUD = (CombatHUD)Traverse.Create(__instance).Property("HUD").GetValue();

                int baseInit     = ___statCollection.GetValue <int>("BaseInitiative");
                int phaseMod     = ___statCollection.GetValue <int>("PhaseModifier");
                int modifiedInit = baseInit + phaseMod;
                //SkillBasedInit.Logger.LogIfDebug($"Actor:({__instance.DisplayName}_{__instance.GetPilot().Name}) has stats BaseInit:{baseInit} / PhaseMod:{phaseMod}");

                if (modifiedInit < Mod.MinPhase)
                {
                    Mod.Log.Info($"Actor:({CombatantHelper.LogLabel(__instance)}) being set to {Mod.MinPhase} due to BaseInit:{baseInit} + PhaseMod:{phaseMod}");
                    __result = Mod.MinPhase;
                }
                else if (modifiedInit > Mod.MaxPhase)
                {
                    Mod.Log.Info($"Actor:({CombatantHelper.LogLabel(__instance)}) being set to {Mod.MaxPhase} due to BaseInit:{baseInit} + PhaseMod:{phaseMod}");
                    __result = Mod.MaxPhase;
                }
                else
                {
                    __result = modifiedInit;
                    //SkillBasedInit.Logger.Log($"Actor:({__instance.DisplayName}_{__instance.GetPilot().Name}) has stats BaseInit:{baseInit} + PhaseMod:{phaseMod} = modifiedInit:{modifiedInit}.");
                }
            }
        }
Пример #3
0
        public static int AdditionalMechSlots()
        {
            if (BiggerDrops.settings.allowUpgrades && companyStats != null)
            {
                int maxSize = CustomUnitsAPI.Detected() ? BiggerDrops.settings.MAX_CU_ADDITINAL_MECH_SLOTS : MaxAdditionalMechSlots;
                int val     = companyStats.GetValue <int>(AdditionalMechSlotsStat);
                return(val > maxSize ? maxSize : val);
            }

            return(Math.Max(Math.Min(MaxAdditionalMechSlots, BiggerDrops.settings.additinalMechSlots), 0));
        }
Пример #4
0
        public static object GetBattleTechFloat(TsEnvironment env, object[] inputs)
        {
            int    statScope = env.ToInt(inputs[0]);
            string statName  = env.ToString(inputs[1]);

            Main.Logger.Log($"[GetBattleTechFloat] Triggered with scope {statScope} and statName {statName}.");

            StatCollection statCollection = SimHelper.GetStatCollection(statScope);

            if (statCollection == null) // GUARD
            {
                Main.Logger.LogError($"[GetBattleTechFloat] StatCollection is null for {statScope}");
                return(null);
            }

            if (statCollection.ContainsStatistic(statName))
            {
                float stat = statCollection.GetValue <float>(statName);
                Main.Logger.Log($"[GetBattleTechFloat] Stat {statName} found with value {stat}.");
                return(stat);
            }

            Main.Logger.LogError($"[GetBattleTechFloat] Stat {statName} does not exist for conversation operation.");
            return(null);
        }
Пример #5
0
        public static object EvaluateBattleTechString(TsEnvironment env, object[] inputs)
        {
            int    statScope    = env.ToInt(inputs[0]);
            string statName     = env.ToString(inputs[1]);
            int    operation    = env.ToInt(inputs[2]);
            string compareValue = env.ToString(inputs[3]);

            Main.Logger.Log($"[EvaluateBattleTechString] Triggered with scope '{statScope}', statName '{statName}', operation '{operation}', compareValue '{compareValue}");

            StatCollection statCollection = SimHelper.GetStatCollection(statScope);

            if (statCollection.ContainsStatistic(statName))
            {
                string stat = statCollection.GetValue <string>(statName);

                switch (operation)
                {
                case 1: // equal to
                    return(stat == compareValue);

                case 2: // not equal to
                    return(stat != compareValue);

                default:
                    return(false);
                }
            }

            Main.Logger.Log($"[EvaluateBattleTechString] Stat {statName} does not exist for conversation operation.");
            return(false);
        }
Пример #6
0
        public void setCompanyStats(StatCollection stats)
        {
            companyStats = stats;

            if (!companyStats.ContainsStatistic(PqMechSkillTracker))
            {
                companyStats.AddStatistic <float>(PqMechSkillTracker, 0.0f);
            }
            if (!companyStats.ContainsStatistic(PqMedSkillTracker))
            {
                companyStats.AddStatistic <float>(PqMedSkillTracker, 0.0f);
            }
            if (!companyStats.ContainsStatistic(PqMoraleTracker))
            {
                companyStats.AddStatistic <float>(PqMoraleTracker, 0.0f);
            }
            Main.modLog.LogMessage($"Tracker Stat: {PqMechSkillTracker}, value: {companyStats.GetValue<float>(PqMechSkillTracker)}");
            Main.modLog.LogMessage($"Tracker Stat: {PqMedSkillTracker}, value: {companyStats.GetValue<float>(PqMedSkillTracker)}");
            Main.modLog.LogMessage($"Tracker Stat: {PqMoraleTracker}, value: {companyStats.GetValue<float>(PqMoraleTracker)}");
        }
Пример #7
0
        private void updateStat(string trackerStat, string cStat, float trackerValue)
        {
            int cValue = companyStats.GetValue <int>(cStat);

            Main.modLog.LogMessage($"possible update to {cStat}, current {cValue}, tracker: {trackerValue}");
            int trackerInt = (int)trackerValue;

            trackerValue -= trackerInt;
            if (trackerInt != 0)
            {
                cValue += trackerInt;
            }
            if (trackerValue < 0)
            {
                cValue      -= 1;
                trackerValue = 1.0f + trackerValue;
            }
            Main.modLog.LogMessage($"Updating: {cStat} => {cValue}, tracker => {trackerValue}");
            companyStats.Set <int>(cStat, cValue);
            companyStats.Set <float>(trackerStat, trackerValue);
        }
Пример #8
0
 public void UpdateCULances()
 {
     if (CustomUnitsAPI.Detected())
     {
         int lanceCount = 1;
         int mCount     = BiggerDrops.settings.additinalMechSlots;
         while (mCount > 0)
         {
             lanceCount++;
             mCount -= 4;
         }
         int vCount = BiggerDrops.settings.vehicleCount;
         while (vCount > 0)
         {
             lanceCount++;
             vCount -= 4;
         }
         int iBayCount = Math.Max(MIN_CU_MECHBAYS, companyStats.GetValue <int>("MechBayPods"));
         if (debugLanceLoadout)
         {
             CustomUnitsAPI.setLancesCount(3);
             CustomUnitsAPI.setLanceData(0, 6, 5, false);
             CustomUnitsAPI.setLanceData(1, 4, 4, false);
             CustomUnitsAPI.setLanceData(2, 4, 2, true);
             CustomUnitsAPI.setOverallDeployCount(6);
             CustomUnitsAPI.playerControl(-1, -1);
         }
         else
         {
             CustomUnitsAPI.setLancesCount(lanceCount);
             CustomUnitsAPI.setLanceData(0, DEFAULT_MECH_SLOTS, DEFAULT_MECH_SLOTS, false);
             int vStart = 1;
             mCount = BiggerDrops.settings.additinalMechSlots;
             while (mCount > 0)
             {
                 CustomUnitsAPI.setLanceData(vStart, DEFAULT_MECH_SLOTS, mCount > DEFAULT_MECH_SLOTS ? DEFAULT_MECH_SLOTS : mCount, false);
                 vStart++;
                 mCount -= 4;
             }
             vCount = BiggerDrops.settings.vehicleCount;
             while (vCount > 0)
             {
                 CustomUnitsAPI.setLanceData(vStart, DEFAULT_MECH_SLOTS, vCount > DEFAULT_MECH_SLOTS ? DEFAULT_MECH_SLOTS : vCount, true);
                 vStart++;
                 vCount -= 4;
             }
             CustomUnitsAPI.setOverallDeployCount(System.Math.Min(DEFAULT_MECH_SLOTS + BiggerDrops.settings.additinalMechSlots + BiggerDrops.settings.vehicleCount, MAX_CU_DROP_SIZE));
             CustomUnitsAPI.playerControl(DEFAULT_MECH_SLOTS + BiggerDrops.settings.additinalPlayerMechSlots, BiggerDrops.settings.vehicleCount);
             CustomUnitsAPI.setMechBayCount(iBayCount);
         }
     }
 }
Пример #9
0
        public static string getClientPostId()
        {
            if (companyStats == null)
            {
                Logger.Log("null company Stats, cannot send data to server!");
                return("");
            }
            string clientPostId = $"{companyStats.GetValue<string>(CLIENT_ID_STAT)}{companyStats.GetValue<string>(CAREER_ID_STAT)}{companyStats.GetValue<string>(SEASON_STAT)}";

            return(clientPostId);
        }
        public int getCompanyCosts()
        {
            if (companyStats == null)
            {
                DCECore.modLog.Info?.Write($"CStats is null, race-condition?");
                return(0);
            }
            long totalCost = 0;

            for (int i = 0; i < DCECore.settings.averagedDrops; i++)
            {
                string statName = $"{DropCostStatPrefix}{i}";
                if (companyStats.ContainsStatistic(statName))
                {
                    totalCost += companyStats.GetValue <int>(statName);
                }
            }

            DCECore.modLog.Debug?.Write($"TotalCost before averaging: {totalCost}");
            totalCost /= DCECore.settings.averagedDrops;
            DCECore.modLog.Debug?.Write($"TotalCost after averaging: {totalCost}");
            dropWorth = (int)totalCost;
            return(dropWorth);
        }
Пример #11
0
        public static void setCompanyStats(StatCollection stats, bool init)
        {
            companyStats = stats;


            if (!companyStats.ContainsStatistic(CLIENT_ID_STAT))
            {
                companyStats.AddStatistic(CLIENT_ID_STAT, Fields.settings.ClientID);
            }
            ;
            if (!companyStats.ContainsStatistic(CAREER_ID_STAT) && init)
            {
                Guid careerId = Guid.NewGuid();
                companyStats.AddStatistic(CAREER_ID_STAT, careerId.ToString());
            }
            else
            {
                if (!companyStats.ContainsStatistic(CAREER_ID_STAT))
                {
                    companyStats.AddStatistic(CAREER_ID_STAT, "");
                }
            }
            if (!companyStats.ContainsStatistic(SEASON_STAT))
            {
                companyStats.AddStatistic(SEASON_STAT, Fields.settings.Season);
            }
            ;
            if (!companyStats.ContainsStatistic(MISSION_COUNT_STAT))
            {
                companyStats.AddStatistic(MISSION_COUNT_STAT, 0);
            }
            ;
            if (!companyStats.ContainsStatistic(CONSOLE_COUNT))
            {
                companyStats.AddStatistic(CONSOLE_COUNT, 0);
            }
            ;
            if (!companyStats.ContainsStatistic(BM_TRANSACTION))
            {
                companyStats.AddStatistic(BM_TRANSACTION, "");
            }
            ;

            Logger.Log($"Career ID Loaded: {companyStats.GetValue<string>(CAREER_ID_STAT)}");
            Logger.Log($"Client issue Token: {RtCore.RTCore.rtData}");
            Logger.Log($"Client Salt: {RtCore.RTCore.rtSalt}");
            Web.forceRefreshServerSettings();
        }
Пример #12
0
 // Direct copy of BattleTech.PilotGenerator.GetSpentXPPilot
 private static int GetSpentXPPilot(StatCollection stats)
 {
     return(GetSpentXPPilot(stats.GetValue <int>("Gunnery")) + GetSpentXPPilot(stats.GetValue <int>("Piloting")) +
            GetSpentXPPilot(stats.GetValue <int>("Guts")) + GetSpentXPPilot(stats.GetValue <int>("Tactics")));
 }
Пример #13
0
 internal T Get()
 {
     return(StatCollection.GetValue <T>(Key));
 }