// 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);
        }
예제 #2
0
        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);
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
                }
            }
        }
예제 #6
0
        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;
                            }
                        }
                    }
                }
            }
        }
예제 #7
0
        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"); }
        }
예제 #8
0
        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()));
            }
        }
예제 #9
0
        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");
            }
        }
예제 #11
0
        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");
        }
예제 #12
0
 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);
         }
     }
 }
예제 #14
0
 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;
 }
예제 #16
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");
        }
예제 #18
0
 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));
        }
예제 #20
0
        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");
        }
예제 #21
0
        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();
        }
예제 #22
0
        /* 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));
            }
        }
예제 #24
0
        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");
        }
예제 #26
0
        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));
         }
     }
 }
예제 #28
0
 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);
        }
예제 #30
0
        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);
        }