private static void OnDailyTick()
        {
            foreach (var clan in Clan.All.Where(c => c.IsUnderMercenaryService))
            {
                if (!MercenarySettings.Instance.ApplyRelationshipRulesToNPC && clan != Clan.PlayerClan)
                {
                    continue;
                }

                if (MercenaryManager.DaysBeforeContractEnds(clan) < 1f)
                {
                    var mercenaryContractExpired = new MercenaryContractExpiredLogEntry(Clan.PlayerClan.Leader);
                    LogEntry.AddLogEntry(mercenaryContractExpired);
                    Campaign.Current.CampaignInformationManager.NewMapNoticeAdded(new MercenaryContractMapNotification(Clan.PlayerClan.Leader, mercenaryContractExpired.GetEncyclopediaText()));
                }
            }
        }
        private bool IsContributingToWar(Clan mercenaryClan)
        {
            if (!MercenarySettings.Instance.ApplyRelationshipRulesToNPC && mercenaryClan == Clan.PlayerClan)
            {
                return(true);
            }

            var isAtWar = FactionManager.GetEnemyFactions(mercenaryClan.Kingdom).Any();

            if (isAtWar)
            {
                var mercenary        = mercenaryClan.Leader;
                var mercenaryFaction = mercenary.MapFaction;

                if (mercenaryClan.LastFactionChangeTime.ElapsedDaysUntilNow >= MercenarySettings.Instance.DaysBeforeInfluencePenalty)
                {
                    var days = MercenaryManager.DaysAfterContractStartedOrRenewed(mercenaryClan);
                    return(_currentMonthBattleHistories
                           .Where(b => b.Time.ElapsedDaysUntilNow < days)
                           .Count(b =>
                    {
                        if (b.Attacker?.LeaderHero?.MapFaction == null || b.Defender?.LeaderHero?.MapFaction == null)
                        {
                            return false;
                        }

                        var flag1 = mercenary == b.Attacker.LeaderHero && mercenaryFaction.IsAtWarWith(b.Defender.LeaderHero.MapFaction);
                        var flag2 = mercenary == b.Defender.LeaderHero && mercenaryFaction.IsAtWarWith(b.Attacker.LeaderHero.MapFaction);
                        return flag1 || flag2;
                    }) >= MercenarySettings.Instance.MinimumBattleCount);
                }
                else
                {
                    return(true);
                }
            }
            else
            {
                return(true);
            }
        }
Esempio n. 3
0
        protected override void OnGameStart(Game game, IGameStarter gameStarter)
        {
            _mercenaryManager = new MercenaryManager();
            _campaignEvents   = new MercenaryContractCampaignEvents();

            if (game.GameType is CampaignStoryMode campaignStoryMode && gameStarter is CampaignGameStarter campaignGameStarter)
            {
                campaignGameStarter.LoadGameTexts($"{BasePath.Name}Modules/Aragas.MercenaryContract/ModuleData/global_strings.xml");
                campaignGameStarter.AddBehavior(new BattleBehavior());
                campaignGameStarter.AddBehavior(new BattleHistoryBehavior());
                campaignGameStarter.AddBehavior(new MercenaryContractBehavior());

                if (campaignStoryMode.CampaignGameLoadingType == Campaign.GameLoadingType.SavedCampaign)
                {
                    // Keep this fix for a few versions (ZIJI: disabling it now in e1.5.5, as this property doesn't even have a public setter)
                    if (Clan.PlayerClan.IsUnderMercenaryService && Clan.PlayerClan.Kingdom == null)
                    {
                        Clan.PlayerClan.EndMercenaryService(isByLeavingKingdom: false);
                    }
                }
            }
        }
Esempio n. 4
0
        protected override void OnGameStart(Game game, IGameStarter gameStarter)
        {
            _mercenaryManager = new MercenaryManager();
            _campaignEvents   = new MercenaryContractCampaignEvents();

            if (game.GameType is CampaignStoryMode campaignStoryMode && gameStarter is CampaignGameStarter campaignGameStarter)
            {
                campaignGameStarter.LoadGameTexts($"{BasePath.Name}Modules/Aragas.MercenaryContract/ModuleData/global_strings.xml");
                campaignGameStarter.AddBehavior(new BattleBehavior());
                campaignGameStarter.AddBehavior(new BattleHistoryBehavior());
                campaignGameStarter.AddBehavior(new MercenaryContractBehavior());

                if (campaignStoryMode.CampaignGameLoadingType == Campaign.GameLoadingType.SavedCampaign)
                {
                    // Keep this fix for a few versions
                    if (Clan.PlayerClan.IsUnderMercenaryService && Clan.PlayerClan.Kingdom == null)
                    {
                        Clan.PlayerClan.IsUnderMercenaryService = false;
                    }
                }
            }
        }
 private void EndContract()
 {
     MercenaryManager.EndContract(MercenaryContractMapNotification.Mercenary);
     MercenaryContractMapNotification.IsHandled = true;
 }