// Actual Hiring from Tavern private void HireCustomMercenariesInTavern(bool buyOne, bool pastPartyLimit = false) { if (MobileParty.MainParty.CurrentSettlement == null || !MobileParty.MainParty.CurrentSettlement.IsTown) { return; } CustomMercData customMercData = GetCustomMercDataOfPlayerEncounter(); if (customMercData == null) { return; } int troopRecruitmentCost = this.troopRecruitmentCost(customMercData); int numberOfMercsToHire = 0; if (buyOne) { numberOfMercsToHire = 1; } else { int numOfTroopSlotsOpen = PartyBase.MainParty.PartySizeLimit - PartyBase.MainParty.NumberOfAllMembers; while (Hero.MainHero.Gold > troopRecruitmentCost * (numberOfMercsToHire + 1) && customMercData.Number > numberOfMercsToHire && (pastPartyLimit || numOfTroopSlotsOpen > numberOfMercsToHire)) { numberOfMercsToHire++; } } customMercData.ChangeMercenaryCount(-numberOfMercsToHire); MobileParty.MainParty.AddElementToMemberRoster(customMercData.TroopInfoCharObject(), numberOfMercsToHire, false); int amount = numberOfMercsToHire * troopRecruitmentCost; GiveGoldAction.ApplyBetweenCharacters(Hero.MainHero, null, amount, false); CampaignEventDispatcher.Instance.OnUnitRecruited(customMercData.TroopInfoCharObject(), numberOfMercsToHire); }
private static void CSAddCompanion(int NoToAdd) { Hero mainhero = Hero.MainHero; for (int i = 0; i < NoToAdd; i++) { string Locculture = CSCharCreationOption.CSOptionSettlement().Culture.StringId; CharacterObject wanderer = (from x in CharacterObject.Templates where x.Occupation == Occupation.Wanderer && (x.Culture.StringId == mainhero.Culture.StringId || x.Culture.StringId == Locculture) select x).GetRandomElementInefficiently <CharacterObject>(); Settlement randomElement = (from settlement in Settlement.All where settlement.Culture == wanderer.Culture && settlement.IsTown select settlement).GetRandomElementInefficiently <Settlement>(); Hero hero = HeroCreator.CreateSpecialHero(wanderer, randomElement, null, null, 33); Campaign.Current.GetCampaignBehavior <IHeroCreationCampaignBehavior>().DeriveSkillsFromTraits(hero, wanderer); GiveGoldAction.ApplyBetweenCharacters(null, hero, 2000, true); CSSetEquip(hero, 4); hero.HasMet = true; hero.Clan = randomElement.OwnerClan; hero.ChangeState(Hero.CharacterStates.Active); AddCompanionAction.Apply(Clan.PlayerClan, hero); AddHeroToPartyAction.Apply(hero, MobileParty.MainParty, true); CampaignEventDispatcher.Instance.OnHeroCreated(hero, false); } }
private static void RecruitMercenaries(int count) { try { var cost = GetMercenaryCost(); MobileParty.MainParty.AddElementToMemberRoster(PlayerEncounter.Settlement.Town.MercenaryData.TroopType, count, false); GiveGoldAction.ApplyBetweenCharacters(Hero.MainHero, null, count * cost, true); CampaignEventDispatcher.Instance.OnUnitRecruited(PlayerEncounter.Settlement.Town.MercenaryData.TroopType, count); PlayerEncounter.Settlement.Town.MercenaryData.ChangeMercenaryCount(-count); if (count == 1) { InformationManager.DisplayMessage(new InformationMessage( $"You recruited one {PlayerEncounter.Settlement.Town.MercenaryData.TroopType.Name}.")); } else { InformationManager.DisplayMessage(new InformationMessage( $"You recruited {count} {PlayerEncounter.Settlement.Town.MercenaryData.TroopType.Name}s.")); } MBTextManager.SetTextVariable("GOLD_AMOUNT", count * cost, false); InformationManager.DisplayMessage(new InformationMessage(GameTexts.FindText("str_gold_removed_with_icon", null).ToString(), "event:/ui/notification/coins_negative")); } catch (Exception ex) { NativeMethods.MessageBox(IntPtr.Zero, ex.Message, "RecruitAllButton -- RecruitMercenaries", NativeMethods.MB_ICONERROR | NativeMethods.MB_OK); } }
private static void AddExiledHero() { Hero mainhero = Hero.MainHero; CharacterObject wanderer = (from x in CharacterObject.Templates where x.Occupation == Occupation.Wanderer && x.Culture.StringId == mainhero.Culture.StringId select x).GetRandomElementInefficiently <CharacterObject>(); Equipment equipment = (from y in CharacterObject.All where y.Level > 20 && y.Culture.StringId == wanderer.Culture.StringId && !y.IsHero && y.Tier > 4 select y).GetRandomElementInefficiently <CharacterObject>().Equipment; Equipment equipmentMC = (from z in CharacterObject.All where z.Tier == 4 && z.Culture.StringId == wanderer.Culture.StringId && !z.IsHero select z).GetRandomElementInefficiently <CharacterObject>().Equipment; Settlement randomElement = (from settlement in Settlement.All where settlement.Culture == wanderer.Culture && settlement.IsTown select settlement).GetRandomElementInefficiently <Settlement>(); //wanderer.Equipment.FillFrom(equipment); Hero hero = HeroCreator.CreateSpecialHero(wanderer, randomElement, null, null, 33); Campaign.Current.GetCampaignBehavior <IHeroCreationCampaignBehavior>().DeriveSkillsFromTraits(hero, wanderer); GiveGoldAction.ApplyBetweenCharacters(null, hero, 4000, true); hero.BattleEquipment.FillFrom(equipment); mainhero.BattleEquipment.FillFrom(equipmentMC); hero.HasMet = true; hero.Clan = randomElement.OwnerClan; hero.ChangeState(Hero.CharacterStates.Active); AddCompanionAction.Apply(Clan.PlayerClan, hero); AddHeroToPartyAction.Apply(hero, MobileParty.MainParty, true); CampaignEventDispatcher.Instance.OnHeroCreated(hero, false); }
static void Postfix() { if (Hero.MainHero.Gold < mainHeroGold_beforeTransaction) { // presume transaction occurred if (Hero.MainHero.IsHumanPlayerCharacter && Hero.MainHero.CharacterObject.GetFeatValue(DefaultFeats.Cultural.AseraiCheapCaravans)) { int creditAmount = mainHeroGold_beforeTransaction - Hero.MainHero.Gold; // will modify later if (DefaultFeats.Cultural.AseraiCheapCaravans.EffectBonus == 0f) { // Assume 30% creditAmount = (int)(creditAmount * 0.30f); } else { creditAmount = (int)(creditAmount * (1.0f - DefaultFeats.Cultural.AseraiCheapCaravans.EffectBonus)); } // Flavor text TextObject textObject = new TextObject("An Aserai clerk nods to you and slips a coinpurse into your hands."); // StringHelpers.SetCharacterProperties("HERO", Hero.MainHero.CharacterObject, null, textObject); InformationManager.DisplayMessage(new InformationMessage(textObject.ToString())); // Apply credit GiveGoldAction.ApplyForSettlementToCharacter(Settlement.CurrentSettlement, Hero.MainHero, creditAmount, false); } } }
private void recruitAll(MobileParty recruiter, Settlement settlement) { DefaultPartyWageModel wageModel = new DefaultPartyWageModel(); foreach (Hero notable in settlement.Notables) { List <CharacterObject> recruitables = HeroHelper.GetVolunteerTroopsOfHeroForRecruitment(notable); for (int recruitableIndex = 0; recruitableIndex < recruitables.Count; recruitableIndex++) { CharacterObject recruitable = recruitables[recruitableIndex]; if (recruitable != null && hasSufficientRelationsship(notable, recruitableIndex)) { int recruitCost = wageModel.GetTroopRecruitmentCost(recruitable, Hero.MainHero); if (recruitCost > recruiter.PartyTradeGold) { continue; } recruiter.MemberRoster.AddToCounts(recruitable, 1); GiveGoldAction.ApplyForPartyToSettlement(recruiter.Party, settlement, recruitCost); for (int i = 0; i < notable.VolunteerTypes.Length; i++) { if (recruitable == notable.VolunteerTypes[i]) { notable.VolunteerTypes[i] = null; break; } } } } } }
internal void ConsequenceChangeCaptorGold(Companion companion, Hero hero) { if (!companion.MultipleRestrictedListOfConsequences.Contains(RestrictedListOfConsequences.ChangeCaptorGold)) { return; } if (hero.PartyBelongedToAsPrisoner.LeaderHero == null) { return; } try { int level = 0; if (!string.IsNullOrEmpty(companion.GoldTotal)) { level = new CEVariablesLoader().GetIntFromXML(companion.GoldTotal); } else { CECustomHandler.LogToFile("Missing GoldTotal"); } GiveGoldAction.ApplyBetweenCharacters(null, hero.PartyBelongedToAsPrisoner.LeaderHero, level); } catch (Exception) { CECustomHandler.LogToFile("Invalid GoldTotal"); } }
public void PayPatrols() { int totalWages = 0; PatrolProperties patrolProperties; foreach (Settlement settlement in Settlement.All) { if ((settlement.IsVillage || settlement.IsCastle) && settlement.OwnerClan == Clan.PlayerClan) { settlementPatrolProperties.TryGetValue(settlement.StringId, out patrolProperties); foreach (MobileParty patrol in patrolProperties.patrols.ToList()) { GiveGoldAction.ApplyForCharacterToParty(Hero.MainHero, patrol.Party, (int)(patrol.GetTotalWage() * DailyPatrolWageModifier), true); totalWages += (int)(patrol.GetTotalWage() * DailyPatrolWageModifier); } settlementPatrolProperties[settlement.StringId] = patrolProperties; } } if (totalWages > 0) { TextObject text = new TextObject("Daily Patrol Wages: -{BASILPATROL_DAILY_WAGES}{GOLD_ICON}", null); text.SetTextVariable("GOLD_ICON", "<img src=\"Icons\\Coin@2x\">"); text.SetTextVariable("BASILPATROL_DAILY_WAGES", totalWages); InformationManager.DisplayMessage(new InformationMessage(text.ToString())); } }
private bool TryToHireRecruiterAtSettlement(Settlement settlement) { var recruiterData = GetRecruiterDataAtSettlement(settlement); var costToHire = GetRecruiterCost(recruiterData.RecruiterLevel + 1); if (costToHire > Hero.MainHero.Gold) { if (recruiterData.RecruiterLevel == 0) { InformationManager.DisplayMessage(new InformationMessage("You cannot afford to hire a recruiter here.")); } else { InformationManager.DisplayMessage(new InformationMessage("You cannot afford to upgrade the recruiter.")); } return(false); } recruiterData.HasRecruiter = true; recruiterData.RecruiterLevel += 1; recruiterData.IsRecruiterEnabled = true; GiveGoldAction.ApplyForCharacterToSettlement(Hero.MainHero, settlement, costToHire); return(true); }
private void HireCustomMecenariesViaGameMenu(bool buyingOne, bool toPartyLimit) { if (MobileParty.MainParty.CurrentSettlement == null || !MobileParty.MainParty.CurrentSettlement.IsTown) { return; } CustomMercData customMercData = GetCustomMercDataOfPlayerEncounter(); if (customMercData == null) { return; } int numOfTroopSlotsOpen = PartyBase.MainParty.PartySizeLimit - PartyBase.MainParty.NumberOfAllMembers; int troopRecruitmentCost = this.troopRecruitmentCost(customMercData); if (customMercData.Number > 0 && Hero.MainHero.Gold >= troopRecruitmentCost && (!toPartyLimit || numOfTroopSlotsOpen > 0)) { int numOfMercs = 1; if (!buyingOne) { int numOfTroopPlayerCanBuy = (troopRecruitmentCost == 0) ? customMercData.Number : Hero.MainHero.Gold / troopRecruitmentCost; numOfMercs = Math.Min(customMercData.Number, numOfTroopPlayerCanBuy); if (toPartyLimit) { numOfMercs = Math.Min(numOfTroopSlotsOpen, numOfMercs); } } MobileParty.MainParty.MemberRoster.AddToCounts(customMercData.TroopInfoCharObject(), numOfMercs, false, 0, 0, true, -1); GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, -(numOfMercs * troopRecruitmentCost), false); customMercData.ChangeMercenaryCount(-numOfMercs); GameMenu.SwitchToMenu("town_backstreet"); } }
private void HealPlayerCharacter() { int price = PriceToHeal(Hero.MainHero); Hero.MainHero.HitPoints = Hero.MainHero.MaxHitPoints; GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, -price, false); GameMenu.SwitchToMenu("town_medical_district"); }
private void ApplyTrainingCosts(int cost) { GiveGoldAction.ApplyForCharacterToSettlement( PartyBase.MainParty.LeaderHero, Settlement.CurrentSettlement, cost ); }
public override void CalculateClanExpenses(Clan clan, ref ExplainedNumber goldChange, bool applyWithdrawals = false) { foreach (MobileParty party in clan.Parties) { if (party.IsActive && (party.IsLordParty || party.IsGarrison || party.IsCaravan)) { int partyWage = this.CalculatePartyWage(party, applyWithdrawals); int amount = party.LeaderHero == null || party.LeaderHero == clan.Leader || (party.IsCaravan || party.LeaderHero.Gold > 10000) ? 0 : (party.LeaderHero.Gold < 5000 ? (int)((double)(5000 - party.LeaderHero.Gold) / 10.0) : 0); if (applyWithdrawals) { float num = (float)clan.Gold + MathF.Abs(goldChange.ResultNumber); int paymentAmount; if ((double)num > (double)(partyWage + amount)) { paymentAmount = partyWage; if (amount > 0) { GiveGoldAction.ApplyBetweenCharacters((Hero)null, party.LeaderHero, amount, true); } } else { paymentAmount = (int)num > 0 ? (int)num : 0; if (paymentAmount > partyWage) { paymentAmount = partyWage; } } HardmodeClanFinanceModel.ApplyMoraleEffect(party, partyWage, paymentAmount); } TextObject desription1 = new TextObject("{=rhKxsdtz} {PARTY_NAME} wages", (Dictionary <string, TextObject>)null); desription1.SetTextVariable("PARTY_NAME", party.Name); goldChange.Add((float)-partyWage, desription1); if (party.LeaderHero != null && party.LeaderHero != clan.Leader && amount > 0) { TextObject desription2 = new TextObject("{=tetGlwTx} {PARTY_NAME} finance help", (Dictionary <string, TextObject>)null); desription2.SetTextVariable("PARTY_NAME", party.Name); goldChange.Add((float)-amount, desription2); } } } if (clan.MapFaction == null || !clan.MapFaction.IsKingdomFaction || clan.Leader != clan.MapFaction.Leader) { return; } foreach (Clan clan1 in ((Kingdom)clan.MapFaction).Clans) { if (!clan1.IsUnderMercenaryService && clan1 != clan && clan1.Fortifications.Count == 0) { TextObject desription = new TextObject("{=*} King's support", (Dictionary <string, TextObject>)null); int num1 = ((clan1 == Clan.PlayerClan ? 1 : 0) + clan1.CommanderHeroes.Count) * 100; int num2 = clan.Leader.Gold > num1 ? num1 : clan.Leader.Gold; goldChange.Add((float)-num2, desription); } } }
private static void SpawnPartyAtPosition(Hero hero, Vec2 position) { if (hero.IsActive || !hero.IsAlive) { return; } hero.ChangeState(Hero.CharacterStates.Active); GiveGoldAction.ApplyBetweenCharacters((Hero)null, hero, 3000, true); MobilePartyHelper.SpawnLordParty(hero, position, 0.5f); }
private void OnPlayerEliminated() { this.IsPlayerEliminated = true; this.BetOdd = 0f; if (this.BettedDenars > 0) { GiveGoldAction.ApplyForCharacterToSettlement(null, Settlement.CurrentSettlement, this.BettedDenars, false); } this.OverallExpectedDenars = 0; }
private void ApplyAddRelation(Hero hero, Clan clan, int daysToNow) { var relation = GetExpectRelation(hero, clan, daysToNow); var cost = GetExpectGoldCostOfRelation(clan, relation); if (Hero.MainHero.Gold > cost * 1.2 && CharacterRelationManager.GetHeroRelation(Hero.MainHero, clan.Leader) < 100) { ChangeRelationAction.ApplyPlayerRelation(clan.Leader, GetExpectRelation(hero, clan, daysToNow, false)); GiveGoldAction.ApplyBetweenCharacters(Hero.MainHero, clan.Leader, cost); } }
private static void ml_menu_bribe_guards_consequence(MenuCallbackArgs args) { int bribe = Campaign.Current.Models.BribeCalculationModel.GetBribeToEnterLordsHall(Settlement.CurrentSettlement); if (bribe == 0) { bribe = 500; } GiveGoldAction.ApplyBetweenCharacters(Hero.MainHero, null, bribe, false); GameMenu.ActivateGameMenu("ml_garrison_menu"); }
public static void PayWarReparations(Kingdom kingdom, Kingdom otherKingdom, int goldCost) { if (goldCost >= kingdom.Leader.Gold) { GiveGoldAction.ApplyBetweenCharacters(kingdom.Leader, otherKingdom.Leader, kingdom.Leader.Gold); } else { GiveGoldAction.ApplyBetweenCharacters(kingdom.Leader, otherKingdom.Leader, goldCost); } }
private static void TakeGoldFromHero(Hero hero, Clan captorClan, out string goldLossMessage) { var goldAmount = CalculateGoldLoss(hero.Gold, MaximumGoldPenalty); GiveGoldAction.ApplyBetweenCharacters(hero, captorClan.Leader, goldAmount, true); GameTexts.SetVariable("AMOUNT", goldAmount); goldLossMessage = GameTexts.FindText("str_you_have_lost_AMOUNT_denars", null).ToString(); InformationManager.DisplayMessage(new InformationMessage(goldLossMessage)); }
private void HealPartyCharacters(bool healplayer) { int numberTreated = 0; int price = 0; CalculatePriceAndNumInjured(ref price, ref numberTreated, healplayer, true); if (numberTreated > 0) { GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, -price, false); } GameMenu.SwitchToMenu("town_medical_district"); }
private void ExecuteSellBrothel(object identifier) { if (_brothel == null) { return; } GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, _brothel.Capital); CEBrothelBehavior.BrothelInteraction(_brothel.Settlement, false); Action onRefresh = _onRefresh; onRefresh?.Invoke(); }
/* Saved for another time * private void NotifyDestroyedPatrol(MobileParty arg1, PartyBase arg2) * { * if(arg1.Name.Contains("Patrol")) * { * if (Settings.Instance.NotifyDestroyedPatrol) * { * InformationManager.DisplayMessage(new InformationMessage(arg1.HomeSettlement.ToString() + " has lost a patrol.")); * } * if (Settings.Instance.AutoBuyDestroyedPatrol && arg1.HomeSettlement.OwnerClan == Clan.PlayerClan) // Autobuy * { * PatrolProperties properties; * settlementPatrolProperties.TryGetValue(arg1.HomeSettlement.StringId, out properties); * int cost = (BaseCost + properties.getPatrolCost()) * 2; * if (AttemptAddPatrolToDictionary(arg1.HomeSettlement, properties, cost, 2)) * { * InformationManager.DisplayMessage(new InformationMessage(arg1.HomeSettlement.ToString() + " has auto bought a medium patrol.")); * } * else if (AttemptAddPatrolToDictionary(arg1.HomeSettlement, properties, cost / 2)) * { * InformationManager.DisplayMessage(new InformationMessage(arg1.HomeSettlement.ToString() + " has auto bought a small patrol.")); * } * } * } * } */ private bool AttemptAddPatrolToDictionary(Settlement currentSettlement, PatrolProperties properties, int cost, int multiplier = 1) { if (cost <= Hero.MainHero.Gold) { GiveGoldAction.ApplyForCharacterToSettlement(Hero.MainHero, Settlement.CurrentSettlement, cost); MobileParty party = spawnPatrol(Settlement.CurrentSettlement, TroopsPerPatrol * multiplier); properties.patrols.Add(party); settlementPatrolProperties[currentSettlement.StringId] = properties; allPatrols.Add(party); return(true); } return(false); }
public static void TaxReliefDailyTick() { float settled = 0f; int goldTaken = 0; foreach (var detailsModel in SettlersCampaignBehavior.Instance._settlersForVillagesData) { detailsModel.Value.SettlementToday = 0; if (detailsModel.Value.TaxReliefTier == -1) { continue; } Settlement settlement = Settlement.FindFirst((args) => args.StringId == detailsModel.Value.SettlementId); if (settlement == null) { Logger.logDebug("Settlement " + detailsModel.Value.SettlementId + " not found"); continue; } var village = settlement.Village; var tax = detailsModel.Value.TaxReliefAmount(); var villagersToAdd = (tax / Random.Next(5, 25)) / Random.Next(1, 10); goldTaken += (int)tax; settled += villagersToAdd; village.Hearth += villagersToAdd; GiveGoldAction.ApplyForCharacterToSettlement(Hero.MainHero, settlement, (int)tax, true); if (!Main.Settings.ProsperityAffection || village.MarketTown == null) { continue; } village.MarketTown.Settlement.Prosperity -= villagersToAdd / 2; Logger.logDebug("Changed prosperity in " + village.MarketTown.Name + " by " + villagersToAdd / 2); } if (goldTaken != 0f || settled != 0f) { Logger.DisplayInfoMsg(Main.Localization.GetTranslation(Localization.SettlersActionTaxMigration, (int)settled, goldTaken)); } }
internal void ConsequenceGold(Companion companion, Hero hero) { if (!companion.MultipleRestrictedListOfConsequences.Contains(RestrictedListOfConsequences.GiveGold)) { return; } int content = _score.AttractivenessScore(hero); int currentValue = hero.GetSkillValue(CESkills.Prostitution); content += currentValue / 2; content *= companion.MultipleRestrictedListOfConsequences.Count(consequence => consequence == RestrictedListOfConsequences.GiveGold); GiveGoldAction.ApplyBetweenCharacters(null, hero, content); }
private void Deposit(int amount, Settlement settlement) { if (amount > Hero.MainHero.Gold) { InformationManager.DisplayMessage(new InformationMessage("You do not have enough money to deposit.")); return; } var bankData = GetBankDataAtSettlement(settlement); bankData.Balance += amount; GiveGoldAction.ApplyForCharacterToSettlement(Hero.MainHero, settlement, amount, true); InformationManager.DisplayMessage(new InformationMessage($"You deposited {amount}<img src=\"Icons\\Coin@2x\">.", "event:/ui/notification/coins_positive")); UpdateBankMenuTextVariables(); GameMenu.SwitchToMenu("bank_account"); }
private void ExecuteToggleBrothel(object identifier) { if (_brothel == null) { return; } if (!_brothel.IsRunning) { GiveGoldAction.ApplyBetweenCharacters(Hero.MainHero, null, _brothel.Expense); } _brothel.IsRunning = !_brothel.IsRunning; Action onRefresh = _onRefresh; onRefresh?.Invoke(); }
private void OnDailyTick() { if (Config.Value.ClanPartyGoldLimitToTakeFromTreasury <= 0) { return; } foreach (MobileParty warParty in Clan.PlayerClan.WarParties) { if (!warParty.IsGarrison && !warParty.IsMilitia && (!warParty.IsVillager && !warParty.IsCaravan) && !warParty.IsMainParty && (warParty?.LeaderHero != null && warParty.LeaderHero.Gold < Config.Value.ClanPartyGoldLimitToTakeFromTreasury)) { GiveGoldAction.ApplyBetweenCharacters(Hero.MainHero, warParty.LeaderHero, Config.Value.ClanPartyGoldLimitToTakeFromTreasury); InformationManager.DisplayMessage(new InformationMessage(warParty.LeaderHero.Name?.ToString() + " is short on gold and gets " + Config.Value.ClanPartyGoldLimitToTakeFromTreasury.ToString() + " from the treasury.", Colors.Yellow)); } } }
public override void ApplyCost() { if (_giver != null && _receiver != null) { GiveGoldAction.ApplyBetweenCharacters(_giver, _receiver, (int)Value); } else if (_giver != null) { _giver.ChangeHeroGold(-(int)Value); } else if (_receiver != null) { _receiver.ChangeHeroGold((int)Value); } }
private bool TryOpenBankAccountAtSettlement(Settlement settlement) { var openingCost = GetBankAccountOpeningCostAtSettlement(settlement); if (openingCost > Hero.MainHero.Gold) { InformationManager.DisplayMessage(new InformationMessage("You cannot afford to open an account here.")); return(false); } var bankData = GetBankDataAtSettlement(settlement); bankData.HasAccount = true; bankData.AccountOpenDate = CampaignTime.Now; bankData.LastBankUpdateDate = CampaignTime.Now; GiveGoldAction.ApplyForCharacterToSettlement(Hero.MainHero, settlement, openingCost); return(true); }
private static bool Prefix(TournamentBehavior __instance) { var winners = (List <TournamentParticipant>)Traverse.Create(__instance.CurrentMatch).Method("GetWinners").GetValue(); if (winners.Where(x => x.Character.HeroObject == Hero.MainHero).Count() > 0) { var tournamentInfo = TournamentsXPandedBehavior.GetTournamentInfo(__instance.TournamentGame.Town); if (__instance.CurrentRoundIndex > tournamentInfo.Rewards.LastPayoutIndex) { tournamentInfo.Rewards.LastPayoutIndex = __instance.CurrentRoundIndex; if (TournamentXPSettings.Instance.EnableRenownPerTroopTier) { var renownbonus = 0f; foreach (var team in __instance.CurrentMatch.Teams) { var teambonus = 0f; foreach (var p in team.Participants) { teambonus += TournamentXPSettings.Instance.GetRenownValue(p.Character); if (p.Character.IsHero && p.Character.HeroObject == Hero.MainHero) { teambonus = 0; break; } } renownbonus += teambonus; } tournamentInfo.Rewards.BonusRenown += renownbonus; } if (TournamentXPSettings.Instance.BonusTournamentMatchGold > 0) { if (TournamentXPSettings.Instance.BonusTournamentMatchGoldImmediate) { GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, TournamentXPSettings.Instance.BonusTournamentMatchGold, false); } else { typeof(TournamentBehavior).GetProperty("OverallExpectedDenars").SetValue(__instance, __instance.OverallExpectedDenars + TournamentXPSettings.Instance.BonusTournamentMatchGold); } } } } return(true); }