Esempio n. 1
0
        static void Postfix(SGContractsWidget __instance, Contract contract)
        {
            SimGameState Sim = (SimGameState)ReflectionHelper.Helper.GetPrivateProperty(__instance, "Sim");

            int MinSalvage = Sim.Constants.Finances.ContractFloorSalvageBonus;
            int MaxSalvage = Sim.Constants.Salvage.DefaultSalvagePotential;

            if (contract.Override.salvagePotential > -1)
            {
                MaxSalvage = contract.Override.salvagePotential;
            }
            else if (contract.SalvagePotential > -1)
            {
                MaxSalvage = contract.SalvagePotential;
            }

            if (MaxSalvage > 0)
            {
                MaxSalvage = MaxSalvage + MinSalvage;
            }

            TextMeshProUGUI NegSalvageMin = (TextMeshProUGUI)ReflectionHelper.Helper.GetPrivateField(__instance, "NegSalvageMin");
            TextMeshProUGUI NegSalvageMax = (TextMeshProUGUI)ReflectionHelper.Helper.GetPrivateField(__instance, "NegSalvageMax");


            NegSalvageMin.text = string.Format("{0} / {1}", Math.Floor(MinSalvage / 4f), MinSalvage);
            NegSalvageMax.text = string.Format("{0} / {1}", Math.Floor(MaxSalvage / 4f), MaxSalvage);
        }
Esempio n. 2
0
        public static void Postfix(SGContractsWidget __instance)
        {
            var sim      = Traverse.Create(__instance).Property("Sim").GetValue <SimGameState>();
            var contract = __instance.SelectedContract;

            var actualSalvage = sim.Constants.Salvage.DefaultSalvagePotential;

            if (contract.Override.salvagePotential > -1)
            {
                actualSalvage = contract.Override.salvagePotential;
            }
            else if (contract.SalvagePotential > -1)
            {
                actualSalvage = contract.SalvagePotential;
            }
            if (actualSalvage > 0)
            {
                var negSalvageSlider = Traverse.Create(__instance).Field("NegSalvageSlider").GetValue <HBSSliderInput>();
                var negSalvage       = negSalvageSlider.Value / negSalvageSlider.ValueMax;
                actualSalvage  = Mathf.FloorToInt(actualSalvage * negSalvage);
                actualSalvage += sim.Constants.Finances.ContractFloorSalvageBonus;
            }

            var actualPrioritySalvage = Math.Min(7, Mathf.FloorToInt(actualSalvage * sim.Constants.Salvage.PrioritySalvageModifier));

            Traverse.Create(__instance).Field("NegSalvageCurrent").GetValue <TextMeshProUGUI>().text = $"{actualPrioritySalvage} / {actualSalvage}";
        }
Esempio n. 3
0
 public static void Postfix(SGContractsWidget __instance, Contract contract)
 {
     // Reset contractDisplayStyle
     if (isOpportunityMission)
     {
         contract.Override.contractDisplayStyle = ContractDisplayStyle.BaseCampaignNormal;
     }
 }
Esempio n. 4
0
        static void Postfix(SGContractsWidget __instance, List <SGContractsListItem> ___listedContracts, List <Contract> contracts, ContractDisplayStyle?initialSelection = null)
        {
            //Main.modLog.LogMessage("ListContracts Called");
            ContractCardController.Instance.lastContractSet = ___listedContracts;
            foreach (SGContractsListItem listedContract in ___listedContracts)
            {
                GameObject fillObject = listedContract.gameObject.transform.findChild("ENABLED-bg-fill").gameObject;
                if (fillObject != null)
                {
                    bool              priorityContract   = listedContract.Contract.Override.contractDisplayStyle == ContractDisplayStyle.BaseCampaignStory;
                    bool              campaignContract   = listedContract.Contract.Override.contractDisplayStyle == ContractDisplayStyle.BaseCampaignRestoration;
                    bool              flashpointContract = listedContract.Contract.IsFlashpointContract;
                    bool              fpCampaignContract = listedContract.Contract.IsFlashpointCampaignContract;
                    Image             filler             = fillObject.GetComponent <Image>();
                    Color             colour;
                    ContractCardFixup fixup = fillObject.GetComponent <ContractCardFixup>();

                    // Add this fixup component to the card, otherwise on first initialzation after loading a save or after a battle, the colours will revert to deafult
                    if (fixup == null)
                    {
                        fixup = fillObject.AddComponent <ContractCardFixup>();
                    }
                    if (flashpointContract || fpCampaignContract)
                    {
                        if (FlashPointController.Instance.getFlashpointContractColour(listedContract.Contract.Override.ID, fpCampaignContract, out colour))
                        {
                            filler.color = colour;
                            fixup.setColour(colour);
                            fixup.setUp(filler);
                        }
                    }
                    else
                    {
                        // leave priority & restoration campaign missions alone
                        if (!priorityContract && !campaignContract)
                        {
                            if (ContractCardController.Instance.getContractColour(listedContract.Contract, out colour))
                            {
                                //Main.modLog.LogMessage($"Before Colour: {filler.color.r}, {filler.color.g}, {filler.color.b}");
                                filler.color = colour;
                                fixup.setColour(colour);
                                fixup.setUp(filler);
                                //Main.modLog.LogMessage($"After Colour: {filler.color.r}, {filler.color.g}, {filler.color.b}");
                            }
                        }
                    }
                }
                else
                {
                    Main.modLog.LogMessage("Failed to find fill object!");
                }
            }
        }
Esempio n. 5
0
        public static void Postfix(SGContractsWidget __instance, List <SGContractsListItem> ___listedContracts)
        {
            for (int i = 0; i < ___listedContracts.Count; i++)
            {
                SGContractsListItem sgContractsListItem = ___listedContracts[i];

                // Reset contractDisplayStyle
                if (opportunityMissionIndexList.Contains(i))
                {
                    sgContractsListItem.Contract.Override.contractDisplayStyle = ContractDisplayStyle.BaseCampaignNormal;
                }
            }
            opportunityMissionIndexList.Clear();
        }
Esempio n. 6
0
 public static bool Prefix(SGContractsWidget __instance)
 {
     try {
         Flareup flareup = Utilities.currentFlareup();
         if (flareup != null && __instance.SelectedContract.Name == flareup.currentContractName)
         {
             WIIC.modLog.Debug?.Write($"Blocking HandleEscapeKeypress. selected: {__instance.SelectedContract.Name}, selectedContract: {__instance.SelectedContract.Name}, flareupContract: {flareup.currentContractName}");
             return(false);
         }
     }
     catch (Exception e) {
         WIIC.modLog.Error?.Write(e);
     }
     return(true);
 }
Esempio n. 7
0
        public static void Postfix(SGContractsWidget __instance, ref int __result, Contract contract)
        {
            try
            {
                if (contract.IsOpportunityMission())
                {
                    Logger.Info($"[SGContractsWidget_GetContractComparePriority_POSTFIX] Set {contract.Override.ID} to have highest sort order");

                    __result = -1;
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Esempio n. 8
0
            static void Postfix(SGContractsWidget __instance, GameObject ___ContractList)
            {
                Mod.Log.Trace?.Write($"SGCW:I - entered.");

                RectTransform clRT = ___ContractList.GetComponent <RectTransform>();

                if (clRT != null)
                {
                    Vector3 ns = clRT.sizeDelta;
                    ns.y          += 260;
                    clRT.sizeDelta = ns;
                }
                else
                {
                    Mod.Log.Info?.Write("ContractList rectTransform is null!");
                }
            }
Esempio n. 9
0
        public static void Prefix(SGContractsWidget __instance, Contract contract)
        {
            try
            {
                if (contract.IsOpportunityMission())
                {
                    isOpportunityMission = true;
                    Logger.Debug($"[SGContractsWidget_AddContract_PREFIX] {contract.Override.ID} is an opportunity mission");

                    // Temporarily set contractDisplayStyle
                    contract.Override.contractDisplayStyle = ContractDisplayStyle.BaseCampaignStory;
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Esempio n. 10
0
        public static void Postfix(SGContractsWidget __instance)
        {
            try {
                Flareup flareup = Utilities.currentFlareup();
                if (flareup != null && __instance.SelectedContract.Name == flareup.currentContractName)
                {
                    WIIC.modLog.Debug?.Write($"Hiding widgets for NegotiateContract. selectedContract: {__instance.SelectedContract.Name}, flareupContract: {flareup.currentContractName}");

                    HBSButton backButton = (HBSButton)AccessTools.Field(typeof(SGContractsWidget), "NegotiateTitleBackButton").GetValue(__instance);
                    backButton.SetState(ButtonState.Disabled);

                    SGLeftNavDrawer leftDrawer = (SGLeftNavDrawer)AccessTools.Field(typeof(SGRoomManager), "LeftDrawerWidget").GetValue(WIIC.sim.RoomManager);
                    leftDrawer.gameObject.SetActive(false);
                }
            }
            catch (Exception e) {
                WIIC.modLog.Error?.Write(e);
            }
        }
Esempio n. 11
0
 static bool Prefix(SGContractsWidget __instance, ref int __result, Contract contract)
 {
     try
     {
         int difficulty = contract.Override.GetUIDifficulty();
         if (Fields.settings.SortByRealDifficulty)
         {
             difficulty = contract.Difficulty;
         }
         int          result = 100;
         SimGameState Sim    = (SimGameState)ReflectionHelper.InvokePrivateMethode(__instance, "get_Sim", null);
         if (Sim.ContractUserMeetsReputation(contract))
         {
             if (contract.Override.contractDisplayStyle == ContractDisplayStyle.BaseCampaignRestoration)
             {
                 result = 0;
             }
             else if (contract.Override.contractDisplayStyle == ContractDisplayStyle.BaseCampaignStory)
             {
                 result = 1;
             }
             else if (contract.TargetSystem.Replace("starsystemdef_", "").Equals(Sim.CurSystem.Name))
             {
                 result = difficulty + 1;
             }
             else
             {
                 result = difficulty + 11;
             }
         }
         else
         {
             result = difficulty + 21;
         }
         __result = result;
         return(false);
     }
     catch (Exception e)
     {
         PersistentMapClient.Logger.LogError(e);
         return(false);
     }
 }
            public static void Postfix(SGContractsWidget __instance, Contract contract,
                                       HBSTooltip ___ContractTypeTooltip)
            {
                string arg;

                if (contract.IsPriorityContract)
                {
                    arg = "Priority";
                }
                else
                {
                    arg = contract.Override.ContractTypeValue.Name;
                }

                var text2 = string.Format("ContractType{0}", arg);

                text2.Replace(" ", null);

                var specDesc =
                    Descriptions.GetMissionSpecializationDescription(contract.Override.ContractTypeValue.Name);

                if (!string.IsNullOrEmpty(text2) &&
                    sim.DataManager.Exists(BattleTechResourceType.BaseDescriptionDef, text2))
                {
                    var def2 = sim.DataManager.BaseDescriptionDefs.Get(text2);

                    if (!string.IsNullOrEmpty(specDesc))
                    {
                        if (!def2.Details.Contains(specDesc))
                        {
                            var details = def2.GetLocalizedDetails();
                            details.Append(specDesc);

                            var deets = details.ToString();
                            Traverse.Create(def2).Field("localizedDetails").SetValue(details);
                            Traverse.Create(def2).Property("Details").SetValue(deets);
                        }
                    }

                    ___ContractTypeTooltip.SetDefaultStateData(TooltipUtilities.GetStateDataFromObject(def2));
                }
            }
Esempio n. 13
0
 static bool Prefix(SGContractsWidget __instance)
 {
     try {
         SimGameState Sim = (SimGameState)AccessTools.Property(typeof(SGContractsWidget), "Sim").GetValue(__instance, null);
         if (__instance.SelectedContract.Override.travelOnly && !__instance.SelectedContract.IsPriorityContract && Sim.ActiveMechs.Count < 8)
         {
             string message = "Commander, a deployment is a longer term arrangement with an employer, that may require missions to be done without time between them for repairs. I strongly encourage you to only deploy on this arrangement if we are capable of fielding multiple lances with little or no time for repairs, just in case.";
             PauseNotification.Show("Deployment", message,
                                    Sim.GetCrewPortrait(SimGameCrew.Crew_Darius), string.Empty, true, delegate {
                 __instance.NegotiateContract(__instance.SelectedContract, null);
             }, "Do it anyways", null, "Cancel");
             return(false);
         }
         else
         {
             return(true);
         }
     }
     catch (Exception e) {
         Logger.LogError(e);
         return(true);
     }
 }
Esempio n. 14
0
        public static void Prefix(SGContractsWidget __instance, List <SGContractsListItem> ___listedContracts)
        {
            try
            {
                for (int i = 0; i < ___listedContracts.Count; i++)
                {
                    SGContractsListItem sgContractsListItem = ___listedContracts[i];

                    if (sgContractsListItem.Contract.IsOpportunityMission())
                    {
                        opportunityMissionIndexList.Add(i);
                        Logger.Debug($"[SGContractsWidget_AddContract_PREFIX] Contract at index {i} is an opportunity mission");

                        // Temporarily set contractDisplayStyle
                        sgContractsListItem.Contract.Override.contractDisplayStyle = ContractDisplayStyle.BaseCampaignStory;
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Esempio n. 15
0
        static bool Prefix(SGContractsWidget __instance, ref int __result, Contract contract)
        {
            try {
                int difficulty = contract.Override.GetUIDifficulty();
                if (WIIC.sim.ContractUserMeetsReputation(contract))
                {
                    if (contract.Override.contractDisplayStyle == ContractDisplayStyle.BaseCampaignRestoration)
                    {
                        __result = 0;
                    }
                    else if (contract.Override.contractDisplayStyle == ContractDisplayStyle.HeavyMetalFlashpointCampaign)
                    {
                        __result = 1;
                    }
                    else if (contract.Override.contractDisplayStyle == ContractDisplayStyle.BaseCampaignStory)
                    {
                        __result = 2;
                    }
                    else if (contract.TargetSystem.Replace("starsystemdef_", "").Equals(WIIC.sim.CurSystem.Name))
                    {
                        __result = difficulty + 2;
                    }
                    else
                    {
                        __result = difficulty + 12;
                    }
                }
                else
                {
                    __result = difficulty + 22;
                }
            } catch (Exception e) {
                WIIC.modLog.Error?.Write(e);
            }

            return(false);
        }
Esempio n. 16
0
 static bool Prefix(SGContractsWidget __instance)
 {
     try {
         if (Fields.Deployment)
         {
             HBSSliderInput NegPaymentSlider = (HBSSliderInput)AccessTools.Field(typeof(SGContractsWidget), "NegPaymentSlider").GetValue(__instance);
             HBSSliderInput NegSalvageSlider = (HBSSliderInput)AccessTools.Field(typeof(SGContractsWidget), "NegSalvageSlider").GetValue(__instance);
             float          cbill            = NegPaymentSlider.Value / NegPaymentSlider.ValueMax;
             float          salvage          = NegSalvageSlider.Value / NegSalvageSlider.ValueMax;
             __instance.SelectedContract.SetNegotiatedValues(cbill, salvage);
             Action <bool> contractAccepted = (Action <bool>)AccessTools.Field(typeof(SGContractsWidget), "contractAccepted").GetValue(__instance);
             contractAccepted(false);
             return(false);
         }
         else
         {
             return(true);
         }
     }
     catch (Exception e) {
         Logger.LogError(e);
         return(true);
     }
 }
Esempio n. 17
0
        public static void Postfix(SGContractsWidget __instance, Contract contract, LocalizableText ___ContractLocationField, GameObject ___ContractLocation, GameObject ___ContractLocationArrow, GameObject ___TravelContractBGFill, GameObject ___TravelIcon, GameObject ___PriorityMissionStoryObject)
        {
            try
            {
                // Only for "normal" contracts with no negotiations
                if (contract.IsOpportunityMission())
                {
                    Logger.Debug($"[SGContractsWidget_PopulateContract_POSTFIX] {contract.Override.ID} is an opportunity mission");

                    StarSystem targetSystem = contract.GameContext.GetObject(GameContextObjectTagEnum.TargetStarSystem) as StarSystem;
                    ___ContractLocationField.SetText("Opportunity Mission at {0}", new object[] { targetSystem.Name });
                    ___ContractLocation.SetActive(true);
                    ___ContractLocationArrow.SetActive(false);
                    //___TravelContractBGFill.SetActive(false);
                    ___TravelIcon.SetActive(false);

                    __instance.ForceRefreshImmediate();
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Esempio n. 18
0
        public static void Postfix(SGContractsWidget __instance, Contract contract)
        {
            var sim = Traverse.Create(__instance).Property("Sim").GetValue <SimGameState>();

            var actualSalvage = contract.SalvagePotential;

            if (actualSalvage > 0)
            {
                if (contract.Override.contractDisplayStyle != ContractDisplayStyle.BaseCampaignNormal)
                {
                    actualSalvage = Mathf.FloorToInt(contract.Override.salvagePotential * contract.PercentageContractSalvage);
                }

                actualSalvage += sim.Constants.Finances.ContractFloorSalvageBonus;
            }

            var actualPrioritySalvage = Math.Min(7, Mathf.FloorToInt(actualSalvage * sim.Constants.Salvage.PrioritySalvageModifier));

            Traverse.Create(__instance).Field("MetaMaxSalvageField").GetValue <TextMeshProUGUI>().text = $"{actualPrioritySalvage} / {actualSalvage}";

            // for some reason this is broken, I don't know exactly why this is yielding incorrect values, consider it's identical (I think)
            // to the decompiled version. There must be something I'm missing.
            //Traverse.Create(__instance).Field("MetaStorySalvageField").GetValue<TextMeshProUGUI>().text = $"{actualPrioritySalvage} / {actualSalvage}";
        }
Esempio n. 19
0
        public static bool Prefix(ref bool __result, SimGameResultAction action, object additionalObject)
        {
            try
            {
                SimGameState simulation = UnityGameInstance.BattleTechGame.Simulation;

                if (simulation == null || action.Type != SimGameResultAction.ActionType.System_AddContract)
                {
                    return(true);
                }

                // In vanilla the SimGameResultAction.ActionType.System_AddContract is only used for travel-contracts (breadcrumbs)
                // I use it to add custom contracts by custom events which need to have negotiations disabled as they are "self-employed opportunity contracts"
                SimGameState.AddContractData addContractData   = simulation.ParseContractActionData(action.value, action.additionalValues);
                ContractOverride             contractOverride  = simulation.DataManager.ContractOverrides.Get(addContractData.ContractName).Copy();
                ContractTypeValue            contractTypeValue = contractOverride.ContractTypeValue;

                // Call original method if contract is a breadcrumb (used by campaign a lot)
                if (contractTypeValue.IsTravelOnly)
                {
                    return(true);
                }
                // Custom handling
                else
                {
                    // Validate target system and enrich contractData
                    StarSystem targetSystem;
                    Logger.Debug($"[SimGameState_ApplyEventAction_PREFIX] addContractData.TargetSystem: {addContractData.TargetSystem}");
                    if (!string.IsNullOrEmpty(addContractData.TargetSystem))
                    {
                        string validatedSystemString = simulation.GetValidatedSystemString(addContractData.TargetSystem);
                        addContractData.IsGlobal = validatedSystemString != simulation.CurSystem.ID;

                        if (simulation.GetSystemById(validatedSystemString) != null)
                        {
                            targetSystem = simulation.GetSystemById(validatedSystemString);
                        }
                        else
                        {
                            throw new Exception("Couldn't find StarSystem for: " + validatedSystemString);
                        }
                    }
                    else
                    {
                        targetSystem = simulation.CurSystem;
                    }
                    Logger.Debug($"[SimGameState_ApplyEventAction_PREFIX] targetSystem.ID: {targetSystem.ID}");



                    // Internal helper method
                    IEnumerator InjectAdditionalContractRoutine()
                    {
                        while (!targetSystem.InitialContractsFetched)
                        {
                            yield return(new WaitForSeconds(0.2f));
                        }

                        InjectAdditionalContract();

                        yield break;
                    }

                    // Internal helper method
                    void InjectAdditionalContract(bool refresh = true)
                    {
                        // Get the contract
                        Contract contract = simulation.GetValidContractForContractDataAndSystem(addContractData, targetSystem);

                        targetSystem.SystemContracts.Add(contract);

                        if (refresh)
                        {
                            SGContractsWidget    ___contractsWidget           = (SGContractsWidget)AccessTools.Field(typeof(SGRoomController_CmdCenter), "contractsWidget").GetValue(simulation.RoomManager.CmdCenterRoom);
                            List <Contract>      allContracts                 = simulation.GetAllCurrentlySelectableContracts(true);
                            ContractDisplayStyle?___contractDisplayAutoSelect = Traverse.Create(___contractsWidget).Field("contractDisplayAutoSelect").GetValue <ContractDisplayStyle?>();
                            ___contractsWidget.ListContracts(allContracts, ___contractDisplayAutoSelect);
                        }
                    }



                    if (simulation.TimeMoving)
                    {
                        simulation.PauseTimer();
                        simulation.StopPlayMode();
                    }



                    // Need to check this as the initial contract fetching routine clears all existing contracts
                    Logger.Debug($"[SimGameState_ApplyEventAction_PREFIX] targetSystem.InitialContractsFetched: {targetSystem.InitialContractsFetched}");
                    if (!targetSystem.InitialContractsFetched)
                    {
                        SceneSingletonBehavior <UnityGameInstance> .Instance.StartCoroutine(InjectAdditionalContractRoutine());

                        return(false);
                    }
                    else
                    {
                        InjectAdditionalContract(false);

                        // Skip original method
                        return(false);
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                return(true);
            }
        }