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); } }
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); } } } }
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; }