private bool IsDefeatedBanditLike(MapEvent m) { try { if (m.GetLeaderParty(m.DefeatedSide).MapFaction.IsBanditFaction&& KBRRModLibSettings.Instance.IncludeBandits) { return(true); } if (m.GetLeaderParty(m.DefeatedSide).MapFaction.IsOutlaw&& KBRRModLibSettings.Instance.IncludeOutlaws) { return(true); } if (m.GetLeaderParty(m.DefeatedSide).Owner.Clan.IsMafia&& KBRRModLibSettings.Instance.IncludeMafia) { return(true); } } catch (Exception ex) { //Avoids crash for parties without an owner set } return(false); }
public BattleHistoryEntry(MapEvent battle, CampaignTime endTime) { Attacker = battle.GetLeaderParty(BattleSideEnum.Attacker); Defender = battle.GetLeaderParty(BattleSideEnum.Defender); Type = battle.EventType; State = battle.BattleState; Time = endTime; }
public void MergeNearbyBanditsAfterBanditFight(MapEvent m) { if (!m.GetLeaderParty(m.DefeatedSide).MapFaction.IsBanditFaction || !Settings.Instance.MergeEnabled) { return; } var banditSide = m.PlayerSide == BattleSideEnum.Attacker ? m.DefenderSide : m.AttackerSide; BanditDeathCounter += banditSide.Casualties; InformationManager.DisplayMessage(new InformationMessage("Bandit Casualties: " + BanditDeathCounter, Color.Black)); var nearbyBanditParties = MobileParty.All.ToList().FindAll(i => i.IsBandit && i.Party.NumberOfAllMembers > 0 && i.Party.NumberOfAllMembers <= Settings.Instance.BanditNumber && i.Party.Culture.StringId == banditSide.LeaderParty.Culture.StringId && i.MapEvent == null && i.Position2D.DistanceSquared(m.Position) <= Settings.Instance.Radius) .OrderBy(o => o.Party.TotalStrength).Take(2).ToList(); if (nearbyBanditParties.Count < 2) { return; } MobileParty temp = null; foreach (var mp in nearbyBanditParties) { if (temp != null) { InformationManager.DisplayMessage(new InformationMessage( $"{mp.Party.Culture} has increase {temp.Party.NumberOfAllMembers} mans", Color.FromUint(4282569842U))); MergePartiesAction.Apply(mp.Party, temp.Party); temp = null; } else { temp = mp; } } ResetBanditDeathCounter(); }
private void OnMapEventEnded(MapEvent mapEvent) { if (mapEvent.EventType == MapEvent.BattleTypes.None) { return; } var attacker = mapEvent.GetLeaderParty(BattleSideEnum.Attacker); var defender = mapEvent.GetLeaderParty(BattleSideEnum.Defender); var attackers = mapEvent.PartiesOnSide(BattleSideEnum.Attacker).Where(a => a != attacker).ToList(); var defenders = mapEvent.PartiesOnSide(BattleSideEnum.Defender).Where(d => d != defender).ToList(); switch (mapEvent.WinningSide) { // If you attack groups larger than you, the same thing with the [Daring] trait. case BattleSideEnum.Attacker: { var hero = attacker.LeaderHero; if (hero == null) { break; } var multiplier = hero.Clan.IsUnderMercenaryService ? MercenarySettings.Instance.MercenaryMultiplier : MercenarySettings.Instance.VassalMultiplier; var ratio = (mapEvent.StrengthOfSide[0] / mapEvent.StrengthOfSide[1]) - 1f; var value = 0; if (ratio >= 0.33f) { value = 1; } else if (ratio >= 0.66f) { value = 2; } else if (ratio >= 0.99f) { value = 3; } if (value == 0) { break; } foreach (var kingdomHero in hero.Clan.Kingdom.Heroes) { var valor = kingdomHero.GetTraitLevel(DefaultTraits.Valor); if (valor > 0) { AragasChangeRelationAction.ApplyRelation( hero, kingdomHero, value * multiplier * valor, MercenarySettings.Instance.TraitCap, true); } } break; } // Helping out other parties in battles, positive rep with people with the [Generous] trait. case BattleSideEnum.Defender: { var ratio = (attacker.TotalStrength / defender.TotalStrength) - 1f; var value = 0; if (ratio >= 0.33f) { value = 1; } else if (ratio >= 0.66f) { value = 2; } else if (ratio >= 0.99f) { value = 3; } if (value == 0) { break; } if (_partiedJoinedMapEvent.TryGetValue(mapEvent, out var parties)) { foreach (var partyBase in parties) { var joinedHero = partyBase.LeaderHero; if (joinedHero == null) { continue; } var contributionRate = mapEvent.AttackerSide.GetPartyContributionRate(partyBase); if (contributionRate < 0.3f) { continue; } var multiplier = joinedHero.Clan.IsUnderMercenaryService ? MercenarySettings.Instance.MercenaryMultiplier : MercenarySettings.Instance.VassalMultiplier; var otherHeroesNotJoined = defenders .Where(p => !parties.Contains(p)) .Select(p => p.LeaderHero) .Where(h => h != null) .ToList(); foreach (var notJoinedHero in otherHeroesNotJoined) { var generosity = notJoinedHero.GetTraitLevel(DefaultTraits.Generosity); if (generosity > 0) { AragasChangeRelationAction.ApplyRelation( joinedHero, notJoinedHero, value * multiplier * generosity, MercenarySettings.Instance.HelpedDefenderCap, true); } } } } break; } case BattleSideEnum.None: case BattleSideEnum.NumSides: break; } // Clean up storage after event ended if (_partiedJoinedMapEvent.TryGetValue(mapEvent, out var list)) { _partiedJoinedMapEvent.Remove(mapEvent); list.Clear(); list = null; } }