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 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); } }
private void DismemberHead(Agent agent) { bool flag = agent.IsActive(); if (flag) { this.KillAgent(agent); } _ignoreAgents.Add(agent); agent.AgentVisuals.SetVoiceDefinitionIndex(-1, 0f); AgentBuildData agentBuildData = new AgentBuildData(agent.Character); agentBuildData.NoHorses(true); agentBuildData.NoWeapons(true); agentBuildData.NoArmor(false); agentBuildData.Team(Mission.Current.PlayerEnemyTeam); agentBuildData.TroopOrigin(agent.Origin); agentBuildData.InitialFrame(new MatrixFrame { origin = agent.Position + agent.LookDirection * -0.75f, rotation = agent.Frame.rotation }); Agent agent2 = Mission.Current.SpawnAgent(agentBuildData, false, 0); _ignoreAgents.Add(agent2); IEnumerable <object> meshes = agent2.AgentVisuals.GetSkeleton().GetAllMeshes(); foreach (Mesh current in meshes) { bool flag2 = !current.Name.ToLower().Contains("head") && !current.Name.ToLower().Contains("hair") && !current.Name.ToLower().Contains("beard") && !current.Name.ToLower().Contains("eyebrow") && !current.Name.ToLower().Contains("helmet") && !current.Name.ToLower().Contains("_cap_"); if (flag2) { current.SetVisibilityMask(VisibilityMaskFlags.EditModeAny); //current.ClearMesh(); } } agent2.AgentVisuals.GetEntity().ActivateRagdoll(); agent2.AgentVisuals.SetVoiceDefinitionIndex(-1, 0f); this.KillAgent(agent2); foreach (Mesh current2 in agent.AgentVisuals.GetSkeleton().GetAllMeshes()) { bool flag3 = current2.Name.ToLower().Contains("head") || current2.Name.ToLower().Contains("hair") || current2.Name.ToLower().Contains("beard") || current2.Name.ToLower().Contains("eyebrow") || current2.Name.ToLower().Contains("helmet") || current2.Name.ToLower().Contains("_cap_"); if (flag3) { current2.SetVisibilityMask(VisibilityMaskFlags.EditModeAny); //current2.ClearMesh(); } } MatrixFrame boneEntitialFrameWithIndex = agent.AgentVisuals.GetSkeleton().GetBoneEntitialFrameWithIndex((byte)agent.BoneMappingArray[HumanBone.Head]); Vec3 vec = agent.AgentVisuals.GetGlobalFrame().TransformToParent(boneEntitialFrameWithIndex.origin); agent.CreateBloodBurstAtLimb(13, ref vec, 0.5f + MBRandom.RandomFloat * 0.5f); boneEntitialFrameWithIndex = agent2.AgentVisuals.GetSkeleton().GetBoneEntitialFrameWithIndex((byte)agent2.BoneMappingArray[HumanBone.Head]); vec = agent2.AgentVisuals.GetGlobalFrame().TransformToParent(boneEntitialFrameWithIndex.origin); agent2.CreateBloodBurstAtLimb(13, ref vec, 0.5f + MBRandom.RandomFloat * 0.5f); }
private void DismemberAgent(Agent victim, Agent attacker, BodyPart bodyPart, bool isPlayerAttacker) { AgentBuildData bodyPartData = new AgentBuildData(victim.Character); bodyPartData.NoWeapons(true); bodyPartData.NoHorses(true); bodyPartData.Team(victim.Team); bodyPartData.TroopOrigin(victim.Origin); bodyPartData.InitialFrame(new MatrixFrame(victim.Frame.rotation, victim.Frame.origin)); Agent bodyPartAgent = Mission.SpawnAgent(bodyPartData); SetSkeletonParts(bodyPartAgent.AgentVisuals.GetSkeleton(), true); SetSkeletonParts(victim.AgentVisuals.GetSkeleton(), false); MakeDead(bodyPartAgent, attacker); bodyPartAgent.AgentVisuals.GetEntity().ActivateRagdoll(); //TODO:: Add blood spurt //if (isPlayerAttacker && Settings.Instance.ReportPlayerDecapitatedSomeoneEnabled) // ReportDismemberment(victim, bodyPart); }
public override Agent SpawnTroop(BattleSideEnum side, bool hasFormation, bool spawnWithHorse, bool isReinforcement, bool enforceSpawningOnInitialPoint, int formationTroopCount, int formationTroopIndex, bool isAlarmed, bool wieldInitialWeapons, bool forceDismounted = false, string specialActionSet = null, MatrixFrame?initFrame = null) { BasicCharacterObject troop = Troop; var team = IsUnderPlayersCommand ? Mission.Current.PlayerTeam : Mission.Current.PlayerEnemyTeam; MatrixFrame frame = initFrame ?? Mission.Current .GetFormationSpawnFrame(team.Side, FormationClass.NumberOfRegularFormations, false).ToGroundMatrixFrame(); if (SPCharacter.IsPlayer && !forceDismounted) { spawnWithHorse = true; } AgentBuildData agentBuildData = new AgentBuildData(this) .Team(team).Banner(Banner) .ClothingColor1(team.Color).ClothingColor2(team.Color2) .NoHorses(!spawnWithHorse).CivilianEquipment(Mission.Current.DoesMissionRequireCivilianEquipment); agentBuildData.IsFemale(SPCharacter.IsFemale); if (!SPCharacter.IsPlayer) { agentBuildData.IsReinforcement(isReinforcement).SpawnOnInitialPoint(enforceSpawningOnInitialPoint); } if (!hasFormation || SPCharacter.IsPlayer) { agentBuildData.InitialFrame(frame); } if (spawnWithHorse) { agentBuildData.MountKey(MountCreationKey.GetRandomMountKey( troop.Equipment[EquipmentIndex.ArmorItemEndSlot].Item, troop.GetMountKeySeed())); } if (hasFormation && !SPCharacter.IsPlayer) { Formation formation = team.GetFormation(SPCharacter.FormationIndex); agentBuildData.Formation(formation); agentBuildData.FormationTroopCount(formationTroopCount).FormationTroopIndex(formationTroopIndex); } if (SPCharacter.IsPlayer) { agentBuildData.Controller(Agent.ControllerType.Player); } if (troop.IsHero) { agentBuildData.Equipment(troop.GetFirstEquipment(agentBuildData.AgentCivilianEquipment).Clone(false)); } else { var equipmentModifierType = BattleConfig.Instance.BattleTypeConfig.EquipmentModifierType; var equipment = Equipment.GetRandomEquipmentElements(troop, equipmentModifierType == EquipmentModifierType.Random, agentBuildData.AgentCivilianEquipment, agentBuildData.AgentEquipmentSeed); if (equipmentModifierType == EquipmentModifierType.Average) { for (EquipmentIndex index = EquipmentIndex.Weapon0; index < EquipmentIndex.NumEquipmentSetSlots; ++index) { var equipmentElement = equipment.GetEquipmentFromSlot(index); if (equipmentElement.Item != null) { if (equipmentElement.Item.HasArmorComponent) { equipmentElement.SetModifier( Utility.AverageItemModifier(equipmentElement.Item.ArmorComponent .ItemModifierGroup)); } else if (equipmentElement.Item.HasHorseComponent) { equipmentElement.SetModifier( Utility.AverageItemModifier(equipmentElement.Item.HorseComponent .ItemModifierGroup)); } } } } agentBuildData.Equipment(equipment); } Agent agent = Mission.Current.SpawnAgent(agentBuildData, false, formationTroopCount); if (agent.IsAIControlled & isAlarmed) { agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed); } if (wieldInitialWeapons) { agent.WieldInitialWeapons(); } if (!specialActionSet.IsStringNoneOrEmpty()) { AnimationSystemData animationSystemData = agentBuildData.AgentMonster.FillAnimationSystemData(MBGlobals.GetActionSet(specialActionSet), agent.Character.GetStepSize(), false); AgentVisualsNativeData agentVisualsNativeData = agentBuildData.AgentMonster.FillAgentVisualsNativeData(); agentBuildData.AgentMonster.FillAgentVisualsNativeData(); agent.SetActionSet(ref agentVisualsNativeData, ref animationSystemData); } return(agent); }
public void AfterStart2() { this._started = true; var scene = this.Mission.Scene; if (this.battleTestParams.skyBrightness >= 0) { scene.SetSkyBrightness(this.battleTestParams.skyBrightness); } if (this.battleTestParams.rainDensity >= 0) { scene.SetRainDensity(this.battleTestParams.rainDensity); } this.Mission.MissionTeamAIType = Mission.MissionTeamAITypeEnum.FieldBattle; this.Mission.SetMissionMode(MissionMode.Battle, true); var xInterval = this.battleTestParams.soldierXInterval; var yInterval = this.battleTestParams.soldierYInterval; var soldiersPerRow = this.battleTestParams.soldiersPerRow; var startPos = this.battleTestParams.FormationPosition; var xDir = this.battleTestParams.formationDirection; var yDir = this.battleTestParams.formationDirection.LeftVec(); var agentDefaultDir = new TL.Vec2(0, 1); var useFreeCamera = this.battleTestParams.useFreeCamera; BasicCharacterObject soldierCharacter = this._game.ObjectManager.GetObject <BasicCharacterObject>(this.battleTestParams.playerSoldierCharacterId); var playerSoldierFormationClass = soldierCharacter.CurrentFormationClass; var playerTeam = this.Mission.Teams.Add(BattleSideEnum.Attacker, 0xff3f51b5); playerTeam.AddTeamAI(new TeamAIGeneral(this.Mission, playerTeam)); playerTeam.AddTacticOption(new TacticCharge(playerTeam)); // playerTeam.AddTacticOption(new TacticFullScaleAttack(playerTeam)); playerTeam.ExpireAIQuerySystem(); playerTeam.ResetTactic(); this.Mission.PlayerTeam = playerTeam; var playerPosVec2 = startPos + xDir * -10 + yDir * -10; var playerPos = new TL.Vec3(playerPosVec2.x, playerPosVec2.y, 30); if (!useFreeCamera) { var playerMat = TL.Mat3.Identity; playerMat.RotateAboutUp(agentDefaultDir.AngleBetween(xDir)); BasicCharacterObject playerCharacter = this._game.ObjectManager.GetObject <BasicCharacterObject>(this.battleTestParams.playerCharacterId); AgentBuildData agentBuildData = new AgentBuildData(new BasicBattleAgentOrigin(playerCharacter)) .ClothingColor1(0xff3f51b5) .ClothingColor2(0xff3f51b5) .Banner(Banner.CreateRandomBanner()) .IsFemale(false) .InitialFrame(new TL.MatrixFrame(playerMat, playerPos)); Agent player = this.Mission.SpawnAgent(agentBuildData, false, 0); player.Controller = Agent.ControllerType.Player; player.WieldInitialWeapons(); player.AllowFirstPersonWideRotation(); Mission.MainAgent = player; player.SetTeam(playerTeam, true); playerTeam.GetFormation(playerSoldierFormationClass).PlayerOwner = player; playerTeam.PlayerOrderController.Owner = player; this._playerAgent = player; } else { var c = this.battleTestParams.playerSoldierCount; if (c <= 0) { this.freeCameraPosition = new TL.Vec3(startPos.x, startPos.y, 30); } else { var rowCount = (c + soldiersPerRow - 1) / soldiersPerRow; var p = startPos + (System.Math.Min(soldiersPerRow, c) - 1) / 2 * yInterval * yDir - rowCount * xInterval * xDir; this.freeCameraPosition = new TL.Vec3(p.x, p.y, 5); } } 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; } for (var i = 0; i < this.battleTestParams.playerSoldierCount; i += 1) { 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 = i / soldiersPerRow; var y = i % 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); } BasicCharacterObject enemyCharacter = this._game.ObjectManager.GetObject <BasicCharacterObject>(this.battleTestParams.enemySoldierCharacterId); var enemyTeam = this.Mission.Teams.Add(BattleSideEnum.Defender, 0xffff6090); enemyTeam.AddTeamAI(new TeamAIGeneral(this.Mission, enemyTeam)); enemyTeam.AddTacticOption(new TacticCharge(enemyTeam)); // enemyTeam.AddTacticOption(new TacticFullScaleAttack(enemyTeam)); enemyTeam.SetIsEnemyOf(playerTeam, true); playerTeam.SetIsEnemyOf(enemyTeam, true); enemyTeam.ExpireAIQuerySystem(); enemyTeam.ResetTactic(); var enemyFormationClass = enemyCharacter.CurrentFormationClass; var enemyFormation = enemyTeam.GetFormation(FormationClass.Ranged); { float width = this.getInitialFormationWidth(enemyTeam, enemyFormationClass); var centerPos = startPos + yDir * (width / 2) + xDir * this.battleTestParams.distance; var wp = new WorldPosition(scene, centerPos.ToVec3()); enemyFormation.SetPositioning(wp, -xDir, null); enemyFormation.FormOrder = FormOrder.FormOrderCustom(width); } for (var i = 0; i < this.battleTestParams.enemySoldierCount; i += 1) { AgentBuildData enemyBuildData = new AgentBuildData(new BasicBattleAgentOrigin(enemyCharacter)) .ClothingColor1(enemyTeam.Color) .ClothingColor2(enemyTeam.Color2) .Banner(enemyTeam.Banner) .Formation(enemyFormation); if (!mapHasNavMesh) { var x = i / soldiersPerRow; var y = i % soldiersPerRow; var mat = TL.Mat3.Identity; mat.RotateAboutUp(agentDefaultDir.AngleBetween(-xDir)); var pos = startPos + xDir * this.battleTestParams.distance + xDir * xInterval * x + yDir * yInterval * y; var agentFrame = new TaleWorlds.Library.MatrixFrame(TaleWorlds.Library.Mat3.Identity, new TL.Vec3(pos.x, pos.y, 30)); enemyBuildData.InitialFrame(agentFrame); } var agent = this.Mission.SpawnAgent(enemyBuildData); agent.SetTeam(enemyTeam, true); agent.Formation = enemyFormation; agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed); } { var a = this.Mission.IsOrderShoutingAllowed(); var b = this.Mission.IsAgentInteractionAllowed(); var c = GameNetwork.IsClientOrReplay; var d = playerTeam.PlayerOrderController.Owner == null; ModuleLogger.Log("mission allowed shouting: {0} interaction: {1} {2} {3}", a, b, c, d); } }
public override Agent SpawnTroop(BattleSideEnum side, bool hasFormation, bool spawnWithHorse, bool isReinforcement, bool enforceSpawningOnInitialPoint, int formationTroopCount, int formationTroopIndex, bool isAlarmed, bool wieldInitialWeapons, bool forceDismounted = false, string specialActionSet = null, MatrixFrame?initFrame = null) { BasicCharacterObject troop = Troop; var team = IsUnderPlayersCommand ? Mission.Current.PlayerTeam : Mission.Current.PlayerEnemyTeam; MatrixFrame frame = initFrame ?? Mission.Current .GetFormationSpawnFrame(team.Side, FormationClass.NumberOfRegularFormations, false).ToGroundMatrixFrame(); if (MPCharacter.IsPlayer && !forceDismounted) { spawnWithHorse = true; } AgentBuildData agentBuildData = new AgentBuildData(this).Team(team).Banner(Banner) .ClothingColor1(team.Color).ClothingColor2(team.Color2) .NoHorses(!spawnWithHorse).CivilianEquipment(Mission.Current.DoesMissionRequireCivilianEquipment); var equipment = Utility.GetNewEquipmentsForPerks(MPCharacter.HeroClass, MPCharacter.IsHero, MPCharacter.SelectedFirstPerk, MPCharacter.SelectedSecondPerk, MPCharacter.IsHero, Seed); agentBuildData.Equipment(equipment); agentBuildData.IsFemale(MPCharacter.IsFemale); if (!MPCharacter.IsPlayer) { agentBuildData.IsReinforcement(isReinforcement).SpawnOnInitialPoint(enforceSpawningOnInitialPoint); } if (!hasFormation || MPCharacter.IsPlayer) { agentBuildData.InitialFrame(frame); } if (spawnWithHorse) { agentBuildData.MountKey(MountCreationKey.GetRandomMountKey( troop.Equipment[EquipmentIndex.ArmorItemEndSlot].Item, troop.GetMountKeySeed())); } if (hasFormation && !MPCharacter.IsPlayer) { Formation formation = team.GetFormation(MPCharacter.FormationIndex); agentBuildData.Formation(formation); agentBuildData.FormationTroopCount(formationTroopCount).FormationTroopIndex(formationTroopIndex); } if (MPCharacter.IsPlayer) { agentBuildData.Controller(Agent.ControllerType.Player); } Agent agent = Mission.Current.SpawnAgent(agentBuildData, false, formationTroopCount); if (agent.IsAIControlled & isAlarmed) { agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed); } if (wieldInitialWeapons) { agent.WieldInitialWeapons(); } if (!specialActionSet.IsStringNoneOrEmpty()) { AnimationSystemData animationSystemData = agentBuildData.AgentMonster.FillAnimationSystemData(MBGlobals.GetActionSet(specialActionSet), agent.Character.GetStepSize(), false); AgentVisualsNativeData agentVisualsNativeData = agentBuildData.AgentMonster.FillAgentVisualsNativeData(); agentBuildData.AgentMonster.FillAgentVisualsNativeData(); agent.SetActionSet(ref agentVisualsNativeData, ref animationSystemData); } return(agent); }