private bool IsValidUnitItem( BasicCharacterObject o, BasicCultureObject culture, ArmyCompositionGroupVM.TroopType troopType) { if (o == null || culture != o.Culture) { return(false); } switch (troopType) { case ArmyCompositionGroupVM.TroopType.MeleeInfantry: return(o.DefaultFormationClass == FormationClass.Infantry || o.DefaultFormationClass == FormationClass.HeavyInfantry); case ArmyCompositionGroupVM.TroopType.RangedInfantry: return(o.DefaultFormationClass == FormationClass.Ranged); case ArmyCompositionGroupVM.TroopType.MeleeCavalry: return(o.DefaultFormationClass == FormationClass.Cavalry || o.DefaultFormationClass == FormationClass.HeavyCavalry || o.DefaultFormationClass == FormationClass.LightCavalry); case ArmyCompositionGroupVM.TroopType.RangedCavalry: return(o.DefaultFormationClass == FormationClass.HorseArcher); default: return(false); } }
public override float CalculateStrikeMagnitudeForSwing(BasicCharacterObject attackerCharacter, BasicCharacterObject attackerCaptainCharacter, float swingSpeed, float impactPointAsPercent, float weaponWeight, float weaponLength, float weaponInertia, float weaponCoM, float extraLinearSpeed, bool doesAttackerHaveMount, WeaponClass weaponClass) { return(CombatStatCalculator.CalculateStrikeMagnitudeForSwing(swingSpeed, impactPointAsPercent, weaponWeight, weaponLength, weaponInertia, weaponCoM, extraLinearSpeed)); }
public override float CalculateStrikeMagnitudeForThrust(BasicCharacterObject attackerCharacter, BasicCharacterObject attackerCaptainCharacter, float thrustWeaponSpeed, float weaponWeight, float extraLinearSpeed, bool doesAttackerHaveMount, WeaponClass weaponClass, bool isThrown = false) { return(CombatStatCalculator.CalculateStrikeMagnitudeForThrust(thrustWeaponSpeed, weaponWeight, extraLinearSpeed, isThrown)); }
public CustomBattleCombatant[] GetCustomBattleParties( BasicCharacterObject playerCharacter, BasicCharacterObject playerSideGeneralCharacter, BasicCharacterObject enemyCharacter, BasicCultureObject playerFaction, int[] playerNumbers, List <BasicCharacterObject>[] playerTroopSelections, BasicCultureObject enemyFaction, int[] enemyNumbers, List <BasicCharacterObject>[] enemyTroopSelections, bool isPlayerAttacker) { CustomBattleCombatant[] customBattleCombatantArray = new CustomBattleCombatant[2] { new CustomBattleCombatant(new TextObject("{=sSJSTe5p}Player Party"), playerFaction, Banner.CreateRandomBanner()), new CustomBattleCombatant(new TextObject("{=0xC75dN6}Enemy Party"), enemyFaction, Banner.CreateRandomBanner()) }; customBattleCombatantArray[0].Side = isPlayerAttacker ? BattleSideEnum.Attacker : BattleSideEnum.Defender; customBattleCombatantArray[0].AddCharacter(playerCharacter, 1); if (playerSideGeneralCharacter != null) { customBattleCombatantArray[0].AddCharacter(playerSideGeneralCharacter, 1); } customBattleCombatantArray[1].Side = customBattleCombatantArray[0].Side.GetOppositeSide(); customBattleCombatantArray[1].AddCharacter(enemyCharacter, 1); for (int index = 0; index < customBattleCombatantArray.Length; ++index) { this.PopulateListsWithDefaults(ref customBattleCombatantArray[index], index == 0 ? playerNumbers : enemyNumbers, index == 0 ? playerTroopSelections : enemyTroopSelections); } return(customBattleCombatantArray); }
protected BodyProperties GetBodyProperties( MissionPeer missionPeer, BasicCultureObject cultureLimit) { NetworkCommunicator networkPeer = missionPeer.GetNetworkPeer(); if (networkPeer != null) { return(networkPeer.PlayerConnectionInfo.GetParameter <PlayerData>("PlayerData").BodyProperties); } Team team = missionPeer.Team; BasicCharacterObject troopCharacter = MultiplayerClassDivisions.GetMPHeroClasses(cultureLimit).ToList <MultiplayerClassDivisions.MPHeroClass>().GetRandomElement <MultiplayerClassDivisions.MPHeroClass>().TroopCharacter; MatrixFrame spawnFrame = this.SpawnComponent.GetSpawnFrame(team, troopCharacter.HasMount(), true); AgentBuildData agentBuildData = new AgentBuildData(troopCharacter); agentBuildData.Team(team); agentBuildData.InitialFrame(spawnFrame); agentBuildData.TroopOrigin((IAgentOriginBase) new BasicBattleAgentOrigin(troopCharacter)); agentBuildData.EquipmentSeed(this.MissionLobbyComponent.GetRandomFaceSeedForCharacter(troopCharacter)); agentBuildData.ClothingColor1(team.Side == BattleSideEnum.Attacker ? cultureLimit.Color : cultureLimit.ClothAlternativeColor); agentBuildData.ClothingColor2(team.Side == BattleSideEnum.Attacker ? cultureLimit.Color2 : cultureLimit.ClothAlternativeColor2); agentBuildData.IsFemale(troopCharacter.IsFemale); agentBuildData.Equipment(Equipment.GetRandomEquipmentElements(troopCharacter, !(Game.Current.GameType is MultiplayerGame), seed: agentBuildData.AgentEquipmentSeed)); agentBuildData.BodyProperties(BodyProperties.GetRandomBodyProperties(agentBuildData.AgentIsFemale, troopCharacter.GetBodyPropertiesMin(), troopCharacter.GetBodyPropertiesMax(), (int)agentBuildData.AgentOverridenSpawnEquipment.HairCoverType, agentBuildData.AgentEquipmentSeed, troopCharacter.HairTags, troopCharacter.BeardTags, troopCharacter.TattooTags)); return(agentBuildData.AgentBodyProperties); }
public bool agentCharacterIsExpendable(Agent agent) { IEnumerable <Agent> nearbyAgents = base.Mission.GetNearbyAgents(agent.GetWorldPosition().AsVec2, 10f); BasicCharacterObject affectedCharacter = agent.Character; if (affectedCharacter != null) { if (affectedCharacter.getAttributes().Contains("Expendable")) { Helpers.Say(affectedCharacter.GetName() + " died, but is Expendable. Nearby allies lost 0 morale."); float moraleSum = 0f; nearbyAgents.ToList().ForEach(a => { VampireMoraleAgentComponent moraleComponent = a.GetComponent <VampireMoraleAgentComponent>(); if (moraleComponent != null) { moraleSum += moraleComponent.Morale; } else if (a.GetComponent <MoraleAgentComponent>() != null) { moraleSum += a.GetMorale(); } } ); float averageMorale = moraleSum / nearbyAgents.ToList().Count; Helpers.Say("Average morale of nearby allies: " + averageMorale); return(true); } } return(false); }
private bool IsValidUnitItem( BasicCharacterObject o, BasicCultureObject culture, ArmyCompositionGroup.TroopType troopType) { if (o == null || culture != o.Culture) { return(false); } switch (troopType) { case ArmyCompositionGroup.TroopType.MeleeInfantry: return /*(int) o.CurrentFormationClass == null ||*/ ((int)o.CurrentFormationClass == 5); case ArmyCompositionGroup.TroopType.RangedInfantry: return((int)o.CurrentFormationClass == 1); case ArmyCompositionGroup.TroopType.MeleeCavalry: return((int)o.CurrentFormationClass == 2 || (int)o.CurrentFormationClass == 7 || (int)o.CurrentFormationClass == 6); case ArmyCompositionGroup.TroopType.RangedCavalry: return((int)o.CurrentFormationClass == 3); default: return(false); } }
public BaseBasicCharacterObject(BasicCharacterObject character) { if (character == null) { return; } Age = character.Age; Culture = new BaseBasicCultureObject(character.Culture); HasMount = character.HasMount(); HitPoints = character.HitPoints; IsFemale = character.IsFemale; IsHero = character.IsHero; IsPlayerCharacter = character.IsPlayerCharacter; IsSoldier = character.IsSoldier; Level = character.Level; Name = character.Name.ToString(); var h = Hero.FindFirst(n => n.Name == character.Name && n.Culture == character.Culture && n.IsHumanPlayerCharacter == character.IsPlayerCharacter); Vigor = h.GetAttributeValue(CharacterAttributesEnum.Vigor); Control = h.GetAttributeValue(CharacterAttributesEnum.Control); Endurance = h.GetAttributeValue(CharacterAttributesEnum.Endurance); Cunning = h.GetAttributeValue(CharacterAttributesEnum.Cunning); Social = h.GetAttributeValue(CharacterAttributesEnum.Social); Intelligence = h.GetAttributeValue(CharacterAttributesEnum.Intelligence); }
private void FillFrom(BasicCharacterObject character, int seed = -1) { if (_teamConfig != null) { Character.ArmorColor1 = _teamConfig.Color1; Character.ArmorColor2 = _teamConfig.Color2; Character.BannerCodeText = _teamConfig.BannerKey; } else { Character.ArmorColor1 = 0; Character.ArmorColor2 = 0; Character.BannerCodeText = ""; } Character.CharStringId = character.StringId; Character.IsFemale = _config.FemaleRatio > 0.5; var equipment = character.Equipment; Character.EquipmentCode = equipment.CalculateEquipmentCode(); Character.BodyProperties = null; Character.BodyProperties = FaceGen.GetRandomBodyProperties(_config.FemaleRatio > 0.5, character.GetBodyPropertiesMin(false), character.GetBodyPropertiesMax(), (int)equipment.HairCoverType, seed, character.HairTags, character.BeardTags, character.TattooTags).ToString(); Character.MountCreationKey = MountCreationKey.GetRandomMountKey(equipment[10].Item, Common.GetDJB2(character.StringId)); }
private void FillFrom(bool isAttacker, BasicCharacterObject character, int seed = -1) { if (character.Culture != null) { Character.ArmorColor1 = Utility.ClothingColor1(character.Culture, isAttacker); Character.ArmorColor2 = Utility.ClothingColor2(character.Culture, isAttacker); Character.BannerCodeText = Utility.BannerFor(character.Culture, isAttacker).Serialize(); } else { Character.ArmorColor1 = 0; Character.ArmorColor2 = 0; Character.BannerCodeText = ""; } Character.CharStringId = character.StringId; Character.IsFemale = _config.FemaleRatio > 0.5; var equipment = Utility.GetNewEquipmentsForPerks(_config.HeroClass, _config.IsHero, _config.SelectedFirstPerk, _config.SelectedSecondPerk, _config.IsHero); Character.EquipmentCode = equipment.CalculateEquipmentCode(); Character.BodyProperties = null; Character.BodyProperties = FaceGen.GetRandomBodyProperties(_config.FemaleRatio > 0.5, character.GetBodyPropertiesMin(false), character.GetBodyPropertiesMax(), (int)equipment.HairCoverType, seed, character.HairTags, character.BeardTags, character.TattooTags).ToString(); Character.MountCreationKey = MountCreationKey.GetRandomMountKey(equipment[10].Item, Common.GetDJB2(character.StringId)); }
private CustomBattleData PrepareBattleData() { BasicCharacterObject selectedCharacter1 = this.PlayerSide.SelectedCharacter; BasicCharacterObject selectedCharacter2 = this.EnemySide.SelectedCharacter; int armySize1 = this.PlayerSide.CompositionGroup.ArmySize; int armySize2 = this.EnemySide.CompositionGroup.ArmySize; bool isPlayerAttacker = this.GameTypeSelectionGroup.SelectedPlayerSide == CustomBattlePlayerSide.Attacker; bool flag = this.GameTypeSelectionGroup.SelectedPlayerType == CustomBattlePlayerType.Commander; BasicCharacterObject playerSideGeneralCharacter = (BasicCharacterObject)null; if (!flag) { List <BasicCharacterObject> list = CustomBattleData.Characters.ToList <BasicCharacterObject>(); list.Remove(selectedCharacter1); list.Remove(selectedCharacter2); playerSideGeneralCharacter = list.GetRandomElement <BasicCharacterObject>(); --armySize1; } int[] troopCounts1 = CustomBattleMenuVM.CustomBattleHelper.GetTroopCounts(armySize1, this.PlayerSide.CompositionGroup); ArmyCompositionGroupVM compositionGroup = this.EnemySide.CompositionGroup; int[] troopCounts2 = CustomBattleMenuVM.CustomBattleHelper.GetTroopCounts(armySize2, compositionGroup); List <BasicCharacterObject>[] troopSelections1 = CustomBattleMenuVM.CustomBattleHelper.GetTroopSelections(this.PlayerSide.CompositionGroup); List <BasicCharacterObject>[] troopSelections2 = CustomBattleMenuVM.CustomBattleHelper.GetTroopSelections(this.EnemySide.CompositionGroup); BasicCultureObject selectedFaction1 = this.PlayerSide.SelectedFaction; BasicCultureObject selectedFaction2 = this.EnemySide.SelectedFaction; CustomBattleCombatant[] customBattleParties = this._customBattleState.GetCustomBattleParties(selectedCharacter1, playerSideGeneralCharacter, selectedCharacter2, selectedFaction1, troopCounts1, troopSelections1, selectedFaction2, troopCounts2, troopSelections2, isPlayerAttacker); CustomBattleData customBattleData = new CustomBattleData(); customBattleData.GameType = this.GameTypeSelectionGroup.SelectedGameType; customBattleData.SceneId = this.MapSelectionGroup.SelectedMapId; customBattleData.PlayerCharacter = selectedCharacter1; customBattleData.PlayerParty = customBattleParties[0]; customBattleData.EnemyParty = customBattleParties[1]; customBattleData.IsPlayerGeneral = flag; customBattleData.PlayerSideGeneralCharacter = playerSideGeneralCharacter; customBattleData.SeasonId = this.MapSelectionGroup.SelectedSeasonId; customBattleData.SceneLevel = ""; customBattleData.TimeOfDay = (float)this.MapSelectionGroup.SelectedTimeOfDay; if (customBattleData.GameType == CustomBattleGameType.Siege) { Dictionary <SiegeEngineType, int> machineCounts1 = new Dictionary <SiegeEngineType, int>(); Dictionary <SiegeEngineType, int> machineCounts2 = new Dictionary <SiegeEngineType, int>(); CustomBattleMenuVM.CustomBattleHelper.FillSiegeMachineCounts(machineCounts1, this._attackerMeleeMachines); CustomBattleMenuVM.CustomBattleHelper.FillSiegeMachineCounts(machineCounts1, this._attackerRangedMachines); CustomBattleMenuVM.CustomBattleHelper.FillSiegeMachineCounts(machineCounts2, this._defenderMachines); float[] hitpointPercentages = CustomBattleMenuVM.CustomBattleHelper.GetWallHitpointPercentages(this.MapSelectionGroup.SelectedWallBreachedCount); customBattleData.AttackerMachines = machineCounts1; customBattleData.DefenderMachines = machineCounts2; customBattleData.WallHitpointPercentages = hitpointPercentages; customBattleData.HasAnySiegeTower = this._attackerMeleeMachines.Any <CustomBattleSiegeMachineVM>((Func <CustomBattleSiegeMachineVM, bool>)(mm => mm.SiegeEngineType == DefaultSiegeEngineTypes.SiegeTower)); customBattleData.IsPlayerAttacker = isPlayerAttacker; customBattleData.SceneUpgradeLevel = this.MapSelectionGroup.SelectedSceneLevel; customBattleData.IsSallyOut = this.MapSelectionGroup.IsSallyOutSelected; customBattleData.IsReliefAttack = false; } return(customBattleData); }
public void AddCharacter(BasicCharacterObject characterObject, int number) { for (int index = 0; index < number; ++index) { this._characters.Add(characterObject); } this.NumberOfAllMembers += number; }
public virtual int GetEffectiveSkill( BasicCharacterObject agentCharacter, IAgentOriginBase agentOrigin, Formation agentFormation, SkillObject skill) { return(agentCharacter.GetSkillValue(skill)); }
protected new Agent SpawnBot(Team agentTeam, BasicCultureObject cultureLimit) { BasicCharacterObject troopCharacter = MultiplayerClassDivisions.GetMPHeroClasses(cultureLimit).ToList <MultiplayerClassDivisions.MPHeroClass>().GetRandomElement <MultiplayerClassDivisions.MPHeroClass>().TroopCharacter; MatrixFrame spawnFrame = this.SpawnComponent.GetSpawnFrame(agentTeam, troopCharacter.HasMount(), true); AgentBuildData agentBuildData = new AgentBuildData(troopCharacter); agentBuildData.Team(agentTeam); agentBuildData.InitialFrame(spawnFrame); agentBuildData.TroopOrigin((IAgentOriginBase) new BasicBattleAgentOrigin(troopCharacter)); agentBuildData.EquipmentSeed(this.MissionLobbyComponent.GetRandomFaceSeedForCharacter(troopCharacter, 0)); agentBuildData.ClothingColor1(agentTeam.Side == BattleSideEnum.Attacker ? cultureLimit.Color : cultureLimit.ClothAlternativeColor); agentBuildData.ClothingColor2(agentTeam.Side == BattleSideEnum.Attacker ? cultureLimit.Color2 : cultureLimit.ClothAlternativeColor2); agentBuildData.IsFemale(troopCharacter.IsFemale); var randomEquipmentElements = Equipment.GetRandomEquipmentElements(troopCharacter, !(Game.Current.GameType is MultiplayerGame), false, agentBuildData.AgentEquipmentSeed); var items = new Dictionary <ItemObject.ItemTypeEnum, ItemObject>(); foreach (ItemObject.ItemTypeEnum itemtype in ((ItemObject.ItemTypeEnum[])Enum.GetValues( typeof(ItemObject.ItemTypeEnum))).Skip(1)) { switch (itemtype) { case ItemObject.ItemTypeEnum.Goods: case ItemObject.ItemTypeEnum.Pistol: case ItemObject.ItemTypeEnum.Bullets: case ItemObject.ItemTypeEnum.Musket: case ItemObject.ItemTypeEnum.Animal: case ItemObject.ItemTypeEnum.Banner: case ItemObject.ItemTypeEnum.Book: case ItemObject.ItemTypeEnum.ChestArmor: case ItemObject.ItemTypeEnum.Invalid: continue; } items[itemtype] = ItemObject.All .Where(x => x.ItemType == itemtype).GetRandomElement(); } randomEquipmentElements[EquipmentIndex.Weapon0] = new EquipmentElement(items[ItemObject.ItemTypeEnum.OneHandedWeapon], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Weapon1] = new EquipmentElement(items[ItemObject.ItemTypeEnum.Shield], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Weapon2] = new EquipmentElement(items[ItemObject.ItemTypeEnum.Bow], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Weapon3] = new EquipmentElement(items[ItemObject.ItemTypeEnum.Arrows], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Weapon4] = new EquipmentElement(items[ItemObject.ItemTypeEnum.TwoHandedWeapon], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Body] = new EquipmentElement(items[ItemObject.ItemTypeEnum.BodyArmor], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Cape] = new EquipmentElement(items[ItemObject.ItemTypeEnum.Cape], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Gloves] = new EquipmentElement(items[ItemObject.ItemTypeEnum.HandArmor], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Head] = new EquipmentElement(items[ItemObject.ItemTypeEnum.HeadArmor], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Leg] = new EquipmentElement(items[ItemObject.ItemTypeEnum.LegArmor], new ItemModifier()); randomEquipmentElements[EquipmentIndex.Horse] = new EquipmentElement(items[ItemObject.ItemTypeEnum.Horse], new ItemModifier()); agentBuildData.Equipment(randomEquipmentElements); agentBuildData.BodyProperties(BodyProperties.GetRandomBodyProperties(agentBuildData.AgentIsFemale, troopCharacter.GetBodyPropertiesMin(false), troopCharacter.GetBodyPropertiesMax(), (int)agentBuildData.AgentOverridenSpawnEquipment.HairCoverType, agentBuildData.AgentEquipmentSeed, troopCharacter.HairTags, troopCharacter.BeardTags, troopCharacter.TattooTags)); Agent agent = this.Mission.SpawnAgent(agentBuildData, false, 0); agent.AddComponent((AgentComponent) new AgentAIStateFlagComponent(agent)); agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed); return(agent); }
public abstract float CalculateStrikeMagnitudeForThrust( BasicCharacterObject attackerCharacter, BasicCharacterObject attackerCaptainCharacter, float thrustWeaponSpeed, float weaponWeight, float extraLinearSpeed, bool doesAtttackerHaveMount, WeaponClass weaponClass, bool isThrown = false);
void IAgentOriginBase.OnScoreHit( BasicCharacterObject victim, BasicCharacterObject captain, int damage, bool isFatal, bool isTeamKill, WeaponComponentData attackerWeapon) { }
public void RespawnUnits() { var scene = this.Mission.Scene; var xInterval = this.CaptureTheBannerLordParams.soldierXInterval; var yInterval = this.CaptureTheBannerLordParams.soldierYInterval; var soldiersPerRow = this.CaptureTheBannerLordParams.soldiersPerRow; var startPos = this.CaptureTheBannerLordParams.FormationPosition; var xDir = this.CaptureTheBannerLordParams.formationDirection; var yDir = this.CaptureTheBannerLordParams.formationDirection.LeftVec(); var agentDefaultDir = new TL.Vec2(0, 1); var useFreeCamera = this.CaptureTheBannerLordParams.useFreeCamera; BasicCharacterObject soldierCharacter = this._game.ObjectManager.GetObject <BasicCharacterObject>(this.CaptureTheBannerLordParams.playerSoldierCharacterId); var playerSoldierFormationClass = soldierCharacter.CurrentFormationClass; this.playerTeam = this.Mission.Teams.Add(BattleSideEnum.Attacker, 0xff3f51b5); var mapHasNavMesh = false; { var formation = playerTeam.GetFormation(playerSoldierFormationClass); var width = this.getInitialFormationWidth(playerTeam, playerSoldierFormationClass); var centerPos = startPos + yDir * (width / 2); var wp = new WorldPosition(scene, centerPos.ToVec3()); formation.SetPositioning(wp, xDir, null); formation.FormOrder = FormOrder.FormOrderCustom(width); mapHasNavMesh = wp.GetNavMesh() != System.UIntPtr.Zero; } if (this.playerTeamAgents.Count < this.CaptureTheBannerLordParams.playerSoldierCount) { var formation = playerTeam.GetFormation(playerSoldierFormationClass); AgentBuildData soldierBuildData = new AgentBuildData(new BasicBattleAgentOrigin(soldierCharacter)) .ClothingColor1(playerTeam.Color) .ClothingColor2(playerTeam.Color2) .Banner(playerTeam.Banner) .IsFemale(false) .Team(playerTeam) .Formation(formation); if (!mapHasNavMesh) { var x = this.playerTeamAgents.Count / soldiersPerRow; var y = this.playerTeamAgents.Count % soldiersPerRow; var mat = TL.Mat3.Identity; var pos = startPos + xDir * (-xInterval * x) + yDir * yInterval * y; mat.RotateAboutUp(agentDefaultDir.AngleBetween(xDir)); var agentFrame = new TaleWorlds.Library.MatrixFrame(mat, new TL.Vec3(pos.x, pos.y, 30)); soldierBuildData.InitialFrame(agentFrame); } var agent = this.Mission.SpawnAgent(soldierBuildData); agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed); this.playerTeamAgents.Add(agent); } }
public virtual float CalculateAdjustedArmorForBlow( float baseArmor, BasicCharacterObject attackerCharacter, BasicCharacterObject attackerCaptainCharacter, BasicCharacterObject victimCharacter, BasicCharacterObject victimCaptainCharacter, WeaponComponentData weaponComponent) { return(baseArmor); }
public static Mission OpenCustomBattleMission( string scene, BasicCharacterObject character, CustomBattleCombatant playerParty, CustomBattleCombatant enemyParty, bool isPlayerGeneral, BasicCharacterObject playerSideGeneralCharacter, string sceneLevels = "", string seasonString = "", float timeOfDay = 6f) { BattleSideEnum playerSide = playerParty.Side; bool isPlayerAttacker = playerSide == BattleSideEnum.Attacker; IMissionTroopSupplier[] troopSuppliers = new IMissionTroopSupplier[2]; CustomBattleTroopSupplier battleTroopSupplier1 = new CustomBattleTroopSupplier(playerParty, true); troopSuppliers[(int)playerParty.Side] = (IMissionTroopSupplier)battleTroopSupplier1; CustomBattleTroopSupplier battleTroopSupplier2 = new CustomBattleTroopSupplier(enemyParty, false); troopSuppliers[(int)enemyParty.Side] = (IMissionTroopSupplier)battleTroopSupplier2; bool isPlayerSergeant = !isPlayerGeneral; return(MissionState.OpenNew("CustomBattle", new MissionInitializerRecord(scene) { DoNotUseLoadingScreen = false, PlayingInCampaignMode = false, AtmosphereOnCampaign = BannerlordMissions.CreateAtmosphereInfoForMission(seasonString, (int)timeOfDay), SceneLevels = sceneLevels, TimeOfDay = timeOfDay }, (InitializeMissionBehvaioursDelegate)(missionController => (IEnumerable <MissionBehaviour>) new MissionBehaviour[20] { (MissionBehaviour) new MissionOptionsComponent(), (MissionBehaviour) new BattleEndLogic(), (MissionBehaviour) new MissionCombatantsLogic((IEnumerable <IBattleCombatant>)null, (IBattleCombatant)playerParty, !isPlayerAttacker ? (IBattleCombatant)playerParty : (IBattleCombatant)enemyParty, isPlayerAttacker ? (IBattleCombatant)playerParty : (IBattleCombatant)enemyParty, Mission.MissionTeamAITypeEnum.FieldBattle, isPlayerSergeant), (MissionBehaviour) new BattleObserverMissionLogic(), (MissionBehaviour) new CustomBattleAgentLogic(), (MissionBehaviour) new MissionAgentSpawnLogic(troopSuppliers, playerSide), (MissionBehaviour) new CustomBattleMissionSpawnHandler(!isPlayerAttacker ? playerParty : enemyParty, isPlayerAttacker ? playerParty : enemyParty), (MissionBehaviour) new AgentBattleAILogic(), (MissionBehaviour) new AgentVictoryLogic(), (MissionBehaviour) new MissionAgentPanicHandler(), (MissionBehaviour) new MissionHardBorderPlacer(), (MissionBehaviour) new MissionBoundaryPlacer(), (MissionBehaviour) new MissionBoundaryCrossingHandler(), (MissionBehaviour) new BattleMissionAgentInteractionLogic(), (MissionBehaviour) new AgentFadeOutLogic(), (MissionBehaviour) new AgentMoraleInteractionLogic(), (MissionBehaviour) new AssignPlayerRoleInTeamMissionController(isPlayerGeneral, isPlayerSergeant, false, isPlayerSergeant ? Enumerable.Repeat <string>(character.StringId, 1).ToList <string>() : new List <string>()), (MissionBehaviour) new CreateBodyguardMissionBehavior(isPlayerAttacker & isPlayerGeneral ? character.GetName().ToString() : (isPlayerAttacker & isPlayerSergeant ? playerSideGeneralCharacter.GetName().ToString() : (string)null), !isPlayerAttacker & isPlayerGeneral ? character.GetName().ToString() : (!isPlayerAttacker & isPlayerSergeant ? playerSideGeneralCharacter.GetName().ToString() : (string)null)), (MissionBehaviour) new HighlightsController(), (MissionBehaviour) new BattleHighlightsController() }))); }
public BaseHero(BasicCharacterObject character) { if (character == null) { return; } Id = character.Id; _name = character.Name?.ToString(); _isHumanPlayerCharacter = character.IsPlayerCharacter; }
public SpousesBattleRecordCharacter GetBattleRecordCharacter(BasicCharacterObject character) { foreach (SpousesBattleRecordCharacter data in Characters) { if (data.Character == character) { return(data); } } return(null); }
public abstract float CalculateStrikeMagnitudeForSwing( BasicCharacterObject attackerCharacter, BasicCharacterObject attackerCaptainCharacter, float swingSpeed, float impactPointAsPercent, float weaponWeight, float weaponLength, float weaponInertia, float weaponCoM, float extraLinearSpeed, bool doesAttackerHaveMount, WeaponClass weaponClass);
public static void Postfix(ref bool __result) { BasicCharacterObject character = Campaign.Current.ConversationManager.OneToOneConversationAgent.Character; if (character is CharacterObject) { CultureObject culture = (character as CharacterObject).Culture; __result = character == culture.TownsmanInfant || character == culture.TownswomanInfant || character == culture.TownsmanChild || character == culture.TownswomanChild || character == culture.VillagerMaleChild || character == culture.VillagerFemaleChild; } }
public TestQuest(Hero questGiver, BasicCharacterObject target, int targetCount) : base("test_quest_1", questGiver, CampaignTime.YearsFromNow(2), 99999999) { KillQuestAction task1 = new KillQuestAction(target, targetCount); structure = new QuestActionStructure(task1, this); structure.AddQuestActionOnComplete(task1, new KillQuestAction(target, targetCount)); structure.Completed().Where((x) => x).Subscribe((x) => CompleteQuestWithSuccess()); structure.Failed().Where((x) => x).Subscribe((x) => CompleteQuestWithFail()); SetDialogs(); AddTrackedObject(questGiver); }
public void ApplyAoeMoraleEffect(Agent affectedAgent, WorldPosition affectedAgentPosition, WorldPosition affectorAgentPosition, Team affectedAgentTeam, float moraleChangeAffected, float moraleChangeAffector, float radius, Predicate <Agent> affectedCondition = null, Predicate <Agent> affectorCondition = null) { if (AgentCharacterIsExpendable(affectedAgent)) { return; } IEnumerable <Agent> nearbyAgents = Mission.GetNearbyAgents(affectedAgentPosition.AsVec2, radius); int num = 10; int num2 = 10; foreach (Agent agent in nearbyAgents) { BasicCharacterObject character = agent.Character; BasicCultureObject culture = character != null ? character.Culture : null; string cultureStringId = culture != null ? culture.StringId : null; if (agent.Team != null) { float num3 = agent.GetWorldPosition().GetNavMeshVec3().Distance(affectedAgentPosition.GetNavMeshVec3()); if (num3 < radius && agent.IsAIControlled) { if (agent.Team.IsEnemyOf(affectedAgentTeam)) { if (num > 0 && (affectorCondition == null || affectorCondition(agent))) { float delta = MissionGameModels.Current.BattleMoraleModel.CalculateMoraleChangeToCharacter(agent, moraleChangeAffector, num3); agent.GetCustomMoraleComponents().ForEach(component => { if (component != null) { component.Morale += delta; } }); num--; } } else if (num2 > 0 && (affectedCondition == null || affectedCondition(agent))) { float delta2 = MissionGameModels.Current.BattleMoraleModel.CalculateMoraleChangeToCharacter(agent, moraleChangeAffected, num3); agent.GetCustomMoraleComponents().ForEach(component => { if (component != null) { component.Morale += delta2; } }); num2--; } } } } }
private static bool HasItemType(BasicCharacterObject character, ItemObject.ItemTypeEnum itemType) { for (EquipmentIndex equipmentIndex = EquipmentIndex.WeaponItemBeginSlot; equipmentIndex < EquipmentIndex.NumAllWeaponSlots; equipmentIndex++) { ItemObject item = character.Equipment[equipmentIndex].Item; if (item != null && item.Type == itemType) { return(true); } } return(false); }
public static void Announce(string text, BasicCharacterObject agent = null, Dictionary <string, TextObject> attributes = null) { var sayContent = new TextObject(text); if (attributes != null) { foreach (var kv in attributes) { sayContent = sayContent.SetTextVariable(kv.Key, kv.Value); } } InformationManager.AddQuickInformation(sayContent, announcerCharacter: agent); }
private static bool AddWeaponItemFlags(ItemMenuVM __instance, ref BasicCharacterObject ____character, MBBindingList <ItemFlagVM> list, WeaponComponentData weapon) { var hero = (CharacterObject)____character; var blowCanMount = weapon.WeaponClass == WeaponClass.Bow && hero.IsHero && (hero.GetPerkValue(DefaultPerks.Bow.MountedArcher) || hero.GetPerkValue(DefaultPerks.Riding.BowExpert)); var crossBlowCanReloadMount = weapon.WeaponClass == WeaponClass.Crossbow && hero.IsHero && (hero.GetPerkValue(DefaultPerks.Crossbow.CrossbowCavalry) || hero.GetPerkValue(DefaultPerks.Riding.CrossbowExpert)); if (weapon.RelevantSkill == DefaultSkills.Bow) { list.Add(new ItemFlagVM("Weapons\\bow", GameTexts.FindText("str_inventory_flag_bow").ToString())); } if (weapon.RelevantSkill == DefaultSkills.Crossbow) { list.Add(new ItemFlagVM("Weapons\\crossbow", GameTexts.FindText("str_inventory_flag_crossbow").ToString())); } if (weapon.RelevantSkill == DefaultSkills.Polearm) { list.Add(new ItemFlagVM("Weapons\\polearm", GameTexts.FindText("str_inventory_flag_polearm").ToString())); } if (weapon.RelevantSkill == DefaultSkills.OneHanded) { list.Add(new ItemFlagVM("Weapons\\one_handed", GameTexts.FindText("str_inventory_flag_one_handed").ToString())); } if (weapon.RelevantSkill == DefaultSkills.TwoHanded) { list.Add(new ItemFlagVM("Weapons\\two_handed", GameTexts.FindText("str_inventory_flag_two_handed").ToString())); } if (weapon.RelevantSkill == DefaultSkills.Throwing) { list.Add(new ItemFlagVM("Weapons\\throwing", GameTexts.FindText("str_inventory_flag_throwing").ToString())); } if (weapon.WeaponFlags.HasAnyFlag(WeaponFlags.CantReloadOnHorseback) && !crossBlowCanReloadMount) { list.Add(new ItemFlagVM("Weapons\\cant_reload_on_horseback", GameTexts.FindText("str_inventory_flag_cant_reload_on_horseback").ToString())); } if (weapon.WeaponFlags.HasAnyFlag(WeaponFlags.BonusAgainstShield)) { list.Add(new ItemFlagVM("Weapons\\bonus_against_shield", GameTexts.FindText("str_inventory_flag_bonus_against_shield").ToString())); } ItemObject.ItemUsageSetFlags p = PerkHelp.GetItemUsageSetFlag(weapon); if (p.HasAnyFlag(ItemObject.ItemUsageSetFlags.RequiresNoMount) && !blowCanMount) { list.Add(new ItemFlagVM("Weapons\\cant_use_with_horse", GameTexts.FindText("str_inventory_flag_cant_use_with_mounts").ToString())); } if (p.HasAnyFlag(ItemObject.ItemUsageSetFlags.RequiresNoShield)) { list.Add(new ItemFlagVM("Weapons\\cant_use_with_shields", GameTexts.FindText("str_inventory_flag_cant_use_with_shields").ToString())); } return(false); }
internal static void GetWeaponSkillPostfix(ref int __result, BasicCharacterObject character, WeaponComponentData equippedItem) { SkillObject skill = DefaultSkills.Athletics; if (equippedItem != null) { skill = equippedItem.RelevantSkill; } var skillAmount = character.GetSkillValue(skill); var amountToReturn = GCOToolbox.GCOToolbox.ProjectileBalance.IfCrossbowEmpowerStat(skillAmount, skill); __result = amountToReturn; }
private void GetAllTroops() { foreach (XmlNode selectNode in this.LoadXmlFile(BasePath.Name + "/Modules/Native/ModuleData/mpcharacters.xml").DocumentElement.SelectNodes("NPCCharacter")) { if (selectNode.Attributes != null && selectNode.Attributes["occupation"] != null && selectNode.Attributes["occupation"].InnerText == "Soldier") { BasicCharacterObject basicCharacterObject = Game.Current.ObjectManager.GetObject <BasicCharacterObject>(selectNode.Attributes["id"].InnerText); if (basicCharacterObject != null && basicCharacterObject.Culture == this._culture) { this._troops.Add(basicCharacterObject); } } } }