private void ExecuteTransferWounded() { try { var enumerator = new PartyCharacterVM[_mainPartyList.Count]; _mainPartyList?.CopyTo(enumerator, 0); foreach (PartyCharacterVM character in enumerator) { if (character?.WoundedCount > 0) { if (character.IsTroopTransferrable) { int wounded = Math.Min(character.WoundedCount, character.Number); character.OnTransfer(character, -1, wounded, character.Side); character.InitializeUpgrades(); } } } _partyVm?.ExecuteRemoveZeroCounts(); _parent.RefreshValues(); } catch (Exception e) { Logging.Log(Logging.Levels.ERROR, $"Transfer Wounded Troops: {e}"); Utilities.DisplayMessage($"PSE Transfer Wounded Exception: {e}"); } }
//TODO: Switch to cleaner RecruitByDefault=false logic. public void RecruitAll() { bool shouldIgnoreLimit = Utilities.IsControlDown(); int amountUpgraded = 0; try { var enumerator = new PartyCharacterVM[_mainPartyPrisoners.Count]; _mainPartyPrisoners.CopyTo(enumerator, 0); foreach (PartyCharacterVM prisoner in enumerator) { if (prisoner == null) { continue; } int remainingPartySize = _partyLogic.RightOwnerParty.PartySizeLimit - _partyLogic .MemberRosters[(int)PartyScreenLogic.PartyRosterSide.Right] .TotalManCount; if (remainingPartySize > 0 || shouldIgnoreLimit) { if (prisoner.IsTroopRecruitable) { _partyVM.CurrentCharacter = prisoner; if (PartyScreenConfig.PrisonersToRecruit.TryGetValue(prisoner.Character.StringId, out int val)) { if (val == -1 && PartyScreenConfig.ExtraSettings.RecruitByDefault) { continue; } } else if (!PartyScreenConfig.ExtraSettings.RecruitByDefault) { continue; } RecruitPrisoner(prisoner, shouldIgnoreLimit ? prisoner.NumOfRecruitablePrisoners : remainingPartySize, ref amountUpgraded); } } else { if (PartyScreenConfig.ExtraSettings.ShowGeneralLogMessage) { InformationManager.DisplayMessage( new InformationMessage($"Party size limit reached, {amountUpgraded} recruited!")); } return; } } if (PartyScreenConfig.ExtraSettings.ShowGeneralLogMessage) { InformationManager.DisplayMessage(new InformationMessage($"Recruited {amountUpgraded} prisoners")); } _parent.RefreshValues(); } catch (Exception e) { Logging.Log(Logging.Levels.ERROR, $"Recruit Prisoners: {e}"); Utilities.DisplayMessage($"PSE Recruit Prisoner Exception {e}"); } }
public void UpgradeAllTroopsPath(int shouldUseOnlyDictInt) { var totalUpgrades = 0; var toUpgrade = new Dictionary <PartyCharacterVM, UpgradeTarget>(); var shouldUseOnlyDict = shouldUseOnlyDictInt == 1; try { foreach (PartyCharacterVM character in _mainPartyList) { if (character == null || character.Upgrades.Count == 0) { continue; } if (PartyScreenConfig.PathsToUpgrade.TryGetValue(character.Character.StringId, out var upgradePath)) { if (upgradePath != -1) { toUpgrade.Add(character, new SpecificUpgradeTarget(upgradePath)); } } else if (!shouldUseOnlyDict) { if (character.Upgrades.Count >= 2) { if (PartyScreenConfig.ExtraSettings.EqualUpgrades) { toUpgrade.Add(character, new EqualDistributionTarget()); } } else if (character.Upgrades[0].IsAvailable) { toUpgrade.Add(character, new SpecificUpgradeTarget(0)); } } } foreach (var keyValuePair in toUpgrade) { totalUpgrades += Upgrade(keyValuePair.Key, keyValuePair.Value); } _parent.RefreshValues(); _partyVM.ExecuteRemoveZeroCounts(); if (PartyScreenConfig.ExtraSettings.ShowGeneralLogMessage) { InformationManager.DisplayMessage(new InformationMessage($"Upgraded {totalUpgrades} troops!")); } } catch (Exception e) { Utilities.DisplayMessage($"PSE UpgradeTroops exception: {e}"); Logging.Log(Logging.Levels.ERROR, $"Upgrade All Troops: {e}"); foreach (var upgradeTarget in toUpgrade) { Logging.Log(Logging.Levels.DEBUG, $"Key: {upgradeTarget.Key.Name} - Value: {upgradeTarget.Value}"); } } }