public bool UpdateBlackWhiteList(PartyCharacterVM character, BlackWhiteListType listType)
        {
            try
            {
                List <string> targetList = null;
                var           unitName   = character.Name;
                var           listName   = "";

                if (listType == BlackWhiteListType.Transfer && character.IsPrisoner && PartyScreenLogic.PrisonerTransferState == PartyScreenLogic.TransferState.TransferableWithTrade)
                {
                    targetList = PartyManagerSettings.Settings.RansomPrisonerBlackWhiteList;
                    listName   = "sell prisoners";
                }
                else if (listType == BlackWhiteListType.Transfer && character.IsPrisoner && PartyScreenLogic.PrisonerTransferState == PartyScreenLogic.TransferState.Transferable)
                {
                    targetList = PartyManagerSettings.Settings.TransferPrisonerBlackWhiteList;
                    listName   = "transfer prisoners";
                }
                else if (listType == BlackWhiteListType.Transfer && !character.IsPrisoner)
                {
                    //targetList = PartyManagerSettings.Settings.TransferTroopsBlackWhiteList;
                    //listName = "transfer troops";
                }
                else if (listType == BlackWhiteListType.Recruit)
                {
                    targetList = PartyManagerSettings.Settings.RecruitPrisonerBlackWhiteList;
                    listName   = "recruit prisoners";
                }
                else if (listType == BlackWhiteListType.Upgrade)
                {
                    targetList = PartyManagerSettings.Settings.UpgradeTroopsBlackWhiteList;
                    listName   = "upgrade troops";
                }

                if (targetList == null)
                {
                    return(true);
                }

                if (targetList.Contains(unitName))
                {
                    GenericHelpers.LogMessage($"Removed {unitName} from {listName} filter list");
                    targetList.Remove(unitName);
                }
                else
                {
                    GenericHelpers.LogMessage($"Added {unitName} to {listName} filter list");
                    targetList.Add(unitName);
                }

                PartyManagerSettings.Settings.SaveSettings();
                return(false);
            }
            catch (Exception e)
            {
                GenericHelpers.LogException("UpdateBlackWhiteList", e);
            }

            return(true);
        }
        public void RecruitAllPrisoners(bool ignorePartyLimit)
        {
            var currentlyRecruitingPrisoner = "";

            try
            {
                var recruits = PartyVM?.MainPartyPrisoners?
                               .Where(x => !x.IsHero &&
                                      x.IsRecruitablePrisoner && x.NumOfRecruitablePrisoners > 0).ToList();


                if (PartyManagerSettings.Settings.RecruitPrisonersUseWhitelist)
                {
                    recruits = recruits.Where(x =>
                                              PartyManagerSettings.Settings.RecruitPrisonerBlackWhiteList.Contains(x.Name)).ToList();
                }
                else
                {
                    recruits = recruits.Where(x =>
                                              !PartyManagerSettings.Settings.RecruitPrisonerBlackWhiteList.Contains(x.Name)).ToList();
                }

                if (recruits?.Count > 0)
                {
                    var freeUnitSlots = PartyScreenLogic.RightOwnerParty.PartySizeLimit - PartyScreenLogic.RightOwnerParty.NumberOfAllMembers;

                    var recruitCount = 0;

                    foreach (var troop in recruits)
                    {
                        currentlyRecruitingPrisoner = troop?.Name?.ToString();
                        if (freeUnitSlots > 0 || ignorePartyLimit)
                        {
                            var toBeRecruited = ignorePartyLimit ? troop.NumOfRecruitablePrisoners : Math.Min(freeUnitSlots, troop.NumOfRecruitablePrisoners);
                            for (int i = 0; i < toBeRecruited; i++)
                            {
                                PartyScreenLogic.PartyCommand command = new PartyScreenLogic.PartyCommand();
                                command.FillForRecruitTroop(PartyScreenLogic.PartyRosterSide.Right, troop.Type,
                                                            troop.Character, 1);
                                PartyScreenLogic.AddCommand(command);
                            }

                            GenericHelpers.LogDebug("RecruitAll", $"Recruited {toBeRecruited} {troop.Character.Name}");
                            recruitCount  += toBeRecruited;
                            freeUnitSlots -= toBeRecruited;
                        }
                    }

                    ButtonClickRefresh(true, true);
                }
                else
                {
                    GenericHelpers.LogMessage("No prisoners found to recruit");
                }
            }
            catch (Exception ex)
            {
                GenericHelpers.LogException($"RecruitAllPrisoners UnitType({currentlyRecruitingPrisoner})", ex);
            }
        }
        public static void ToggleUpgradePath(PartyCharacterVM vm, int upgradeIndex, bool split = false)
        {
            try
            {
                split = split && vm.IsUpgrade1Exists && vm.IsUpgrade2Exists;

                string message = "";
                var    upgrade = PartyManagerSettings.Settings.SavedTroopUpgradePaths.FirstOrDefault(x => x.UnitName == vm.Character.Name.ToString());

                if (upgrade != null)
                {
                    if ((upgradeIndex == upgrade.TargetUpgrade && (split == upgrade.EvenSplit)) || (split && upgrade.EvenSplit))
                    {
                        PartyManagerSettings.Settings.SavedTroopUpgradePaths.Remove(upgrade);
                        message = $"Removed Upgrade Path for {vm.Character.Name.ToString()}";
                    }
                    else if (split)
                    {
                        upgrade.EvenSplit = true;
                        message           = $"Changed Upgrade Path for {vm.Character.Name.ToString()} to be split evenly";
                    }
                    else
                    {
                        upgrade.EvenSplit     = false;
                        upgrade.TargetUpgrade = upgradeIndex;
                        message = $"Changed Upgrade Path for {vm.Character.Name.ToString()}";
                    }
                }
                else
                {
                    var newUpgrade = new SavedTroopUpgradePath()
                    {
                        UnitName      = vm.Name,
                        TargetUpgrade = upgradeIndex,
                        EvenSplit     = split
                    };

                    PartyManagerSettings.Settings.SavedTroopUpgradePaths.Add(newUpgrade);
                    if (split)
                    {
                        message = $"Added Split Upgrade Path for {vm.Character.Name.ToString()}";
                    }
                    else
                    {
                        message = $"Added Upgrade Path for {vm.Character.Name.ToString()}";
                    }
                }
                PartyManagerSettings.Settings.SaveSettings();
                GenericHelpers.LogMessage(message);
            }
            catch (Exception e)
            {
                GenericHelpers.LogException("UpgradeAllTroops", e);
            }
        }
Exemple #4
0
        protected override void OnBeforeInitialModuleScreenSetAsRoot()
        {
            base.OnBeforeInitialModuleScreenSetAsRoot();

            try
            {
                GenericHelpers.LogMessage("Loaded PartyManager. Press CTRL+SHIFT+S in Party Screen to sort, CTRL+SHIFT+R to upgrade/recruit sort, CTRL+SHIFT+(Minus) to cycle sort types", "#ffa136FF");
                if (!string.IsNullOrEmpty(PartyManagerSettings.Settings.NewFileMessage))
                {
                    GenericHelpers.LogMessage(PartyManagerSettings.Settings.NewFileMessage);
                }
            }
            catch (Exception ex)
            {
                GenericHelpers.LogException("OnBeforeInitialModuleScreenSetAsRoot", ex);
            }
        }
        public void UpgradeAllTroops(bool customOnly = false)
        {
            var currentlyUpgradingUnit = "";

            try
            {
                var upgrades = PartyVM?.MainPartyTroops?
                               .Where(x => !x.IsHero &&
                                      ((x.IsUpgrade1Available && !x.IsUpgrade1Insufficient) || (x.IsUpgrade2Available && !x.IsUpgrade2Insufficient))).ToList();

                var upgradesCount = 0;

                if (!PartyManagerSettings.Settings.DisableCustomUpgradePaths)

                {
                    var splitTroops    = PartyManagerSettings.Settings.SavedTroopUpgradePaths.Where(x => x.EvenSplit).Select(x => x.UnitName).ToList();
                    var customTroops   = PartyManagerSettings.Settings.SavedTroopUpgradePaths.Where(x => !x.EvenSplit).Select(x => x.UnitName).ToList();
                    var splitUpgrades  = upgrades.Where(x => splitTroops.Contains(x.Name.ToString())).ToList();
                    var customUpgrades = upgrades.Where(x => customTroops.Contains(x.Name.ToString())).ToList();
                    upgrades = upgrades.Where(x => !splitTroops.Contains(x.Name.ToString()) && !customTroops.Contains(x.Name.ToString())).ToList();

                    foreach (var troop in splitUpgrades)
                    {
                        currentlyUpgradingUnit = troop?.Character?.Name?.ToString();
                        var unitUpgrades = Math.Min(troop.NumOfTarget1UpgradesAvailable,
                                                    troop.NumOfTarget2UpgradesAvailable) / 2;
                        GenericHelpers.LogDebug("UpgradeAllTroops", $"Split {troop.Name.ToString()}: {unitUpgrades}");

                        var unitsUpgraded = false;

                        for (int i = 0; i < unitUpgrades; i++)
                        {
                            if (troop.IsUpgrade1Insufficient || troop.IsUpgrade2Insufficient || !troop.IsUpgrade1Available || !troop.IsUpgrade2Available)
                            {
                                break;
                            }

                            PartyScreenLogic.PartyCommand command1 = new PartyScreenLogic.PartyCommand();
                            PartyScreenLogic.PartyCommand command2 = new PartyScreenLogic.PartyCommand();
                            command1.FillForUpgradeTroop(PartyScreenLogic.PartyRosterSide.Right, troop.Type, troop.Character, 1,
                                                         PartyScreenLogic.PartyCommand.UpgradeTargetType.UpgradeTarget1);
                            var c1Valid = PartyScreenLogic.ValidateCommand(command1);
                            PartyScreenLogic.AddCommand(command1);


                            if (troop.IsUpgrade2Insufficient)
                            {
                                GenericHelpers.LogDebug("UpgradeAllTroops", $"Upgrade2 Insufficient");
                                break;
                            }

                            command2.FillForUpgradeTroop(PartyScreenLogic.PartyRosterSide.Right, troop.Type, troop.Character, 1,
                                                         PartyScreenLogic.PartyCommand.UpgradeTargetType.UpgradeTarget2);
                            var c2Valid = PartyScreenLogic.ValidateCommand(command1);
                            PartyScreenLogic.AddCommand(command2);
                            unitsUpgraded = true;
                        }



                        if (unitsUpgraded)
                        {
                            upgradesCount++;
                        }
                    }

                    foreach (var troop in customUpgrades)
                    {
                        currentlyUpgradingUnit = troop?.Character?.Name?.ToString();
                        var upgradePath = PartyManagerSettings.Settings.SavedTroopUpgradePaths
                                          .Where(x => x.UnitName == troop.Name.ToString())?.Select(x => x.TargetUpgrade).FirstOrDefault();

                        if (upgradePath == 0 && !troop.IsUpgrade1Insufficient)
                        {
                            UpgradeUnit(troop, true);
                            upgradesCount++;
                        }
                        else if (upgradePath == 1 && !troop.IsUpgrade2Insufficient)
                        {
                            UpgradeUnit(troop, false);
                            upgradesCount++;
                        }
                    }
                }

                if (!customOnly)
                {
                    //single upgrade units
                    var singleUpgrades = upgrades.Where(x => !(x.IsUpgrade1Exists && x.IsUpgrade2Exists)).ToList();

                    if (PartyManagerSettings.Settings.UpgradeTroopsUseWhitelist)
                    {
                        singleUpgrades = singleUpgrades.Where(x =>
                                                              PartyManagerSettings.Settings.UpgradeTroopsBlackWhiteList.Contains(x.Name)).ToList();
                    }
                    else
                    {
                        singleUpgrades = singleUpgrades.Where(x =>
                                                              !PartyManagerSettings.Settings.UpgradeTroopsBlackWhiteList.Contains(x.Name)).ToList();
                    }


                    foreach (var troop in singleUpgrades)
                    {
                        currentlyUpgradingUnit = troop?.Character?.Name?.ToString();
                        PartyScreenLogic.PartyCommand command = new PartyScreenLogic.PartyCommand();
                        if (troop.NumOfTarget1UpgradesAvailable > 0)
                        {
                            UpgradeUnit(troop, true);
                        }
                        else
                        {
                            UpgradeUnit(troop, false);
                        }

                        upgradesCount++;
                    }
                }

                if (upgradesCount > 0)
                {
                    GenericHelpers.LogDebug("UpgradeAllTroops", $"{upgradesCount} troops upgraded");
                    ButtonClickRefresh(true, false);
                }
                else
                {
                    GenericHelpers.LogMessage("No troops found to upgrade");
                }
            }
            catch (Exception ex)
            {
                GenericHelpers.LogException($"UpgradeAllTroops unittype({currentlyUpgradingUnit})", ex);
            }
        }
Exemple #6
0
 public static void ReloadSettings()
 {
     _settings = LoadSettings();
     GenericHelpers.LogMessage("Settings Reloaded");
 }