public static void Postfix(Mission __instance,
                                   AgentBuildData agentBuildData,
                                   bool spawnFromAgentVisuals,
                                   int formationTroopCount,
                                   ref Agent __result)
        {
            if (agentBuildData != null)
            {
                double fullStamina = StaminaProperties.Instance.BaseStaminaValue +
                                     agentBuildData.AgentCharacter.GetSkillValue(DefaultSkills.Athletics) * StaminaProperties.Instance.StaminaGainedPerAthletics +
                                     agentBuildData.AgentCharacter.GetSkillValue(DefaultSkills.OneHanded) * StaminaProperties.Instance.StaminaGainedPerCombatSkill +
                                     agentBuildData.AgentCharacter.GetSkillValue(DefaultSkills.TwoHanded) * StaminaProperties.Instance.StaminaGainedPerCombatSkill +
                                     agentBuildData.AgentCharacter.GetSkillValue(DefaultSkills.Polearm) * StaminaProperties.Instance.StaminaGainedPerCombatSkill +
                                     agentBuildData.AgentCharacter.GetSkillValue(DefaultSkills.Bow) * StaminaProperties.Instance.StaminaGainedPerCombatSkill +
                                     agentBuildData.AgentCharacter.GetSkillValue(DefaultSkills.Crossbow) * StaminaProperties.Instance.StaminaGainedPerCombatSkill +
                                     agentBuildData.AgentCharacter.GetSkillValue(DefaultSkills.Throwing) * StaminaProperties.Instance.StaminaGainedPerCombatSkill +
                                     agentBuildData.AgentCharacter.Level * StaminaProperties.Instance.StaminaGainedPerLevel;

                MaxStaminaPerAgent.Add(__result, fullStamina);
                CurrentStaminaPerAgent.Add(__result, fullStamina);
            }
            MissionOnTickPatch.AgentRecoveryTimers.Add(__result, 0);

            if (__result.IsPlayerControlled)
            {
                heroAgent = __result;
            }
        }
Example #2
0
        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);
        }
 public CreateAgentVisuals(
     NetworkCommunicator peer,
     AgentBuildData agentBuildData,
     int selectedEquipmentSetIndex,
     int troopCountInFormation = 0)
 {
     this.Peer               = peer;
     this.VisualsIndex       = agentBuildData.AgentVisualsIndex;
     this.Character          = agentBuildData.AgentCharacter;
     this.BodyPropertiesSeed = agentBuildData.AgentEquipmentSeed;
     this.IsFemale           = agentBuildData.AgentIsFemale;
     this.Equipment          = new Equipment();
     this.Equipment.FillFrom(agentBuildData.AgentOverridenSpawnEquipment);
     this.SelectedEquipmentSetIndex = selectedEquipmentSetIndex;
     this.TroopCountInFormation     = troopCountInFormation;
 }
Example #6
0
        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 void AfterStart2()
        {
            this._started    = true;
            playerTeamAgents = new List <Agent>();
            var scene = this.Mission.Scene;

            if (this.CaptureTheBannerLordParams.skyBrightness >= 0)
            {
                scene.SetSkyBrightness(this.CaptureTheBannerLordParams.skyBrightness);
            }

            if (this.CaptureTheBannerLordParams.rainDensity >= 0)
            {
                scene.SetRainDensity(this.CaptureTheBannerLordParams.rainDensity);
            }

            this.Mission.MissionTeamAIType = Mission.MissionTeamAITypeEnum.FieldBattle;
            this.Mission.SetMissionMode(MissionMode.Battle, true);

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

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


            BasicCharacterObject enemyCharacter = this._game.ObjectManager.GetObject <BasicCharacterObject>(this.CaptureTheBannerLordParams.enemySoldierCharacterId);

            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.CaptureTheBannerLordParams.distance;
                var   wp        = new WorldPosition(scene, centerPos.ToVec3());
                enemyFormation.SetPositioning(wp, -xDir, null);
                enemyFormation.FormOrder = FormOrder.FormOrderCustom(width);
            }

            for (var i = 0; i < this.CaptureTheBannerLordParams.enemySoldierCount; i += 1)
            {
                AgentBuildData enemyBuildData = new AgentBuildData(new BasicBattleAgentOrigin(enemyCharacter))
                                                .ClothingColor1(enemyTeam.Color)
                                                .ClothingColor2(enemyTeam.Color2)
                                                .Banner(enemyTeam.Banner)
                                                .Formation(enemyFormation);


                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);
            }
        }
Example #8
0
        protected override void SpawnAgents()
        {
            BasicCultureObject cultureTeam  = MBMultiplayerOptionsAccessor.GetCultureTeam1(MBMultiplayerOptionsAccessor.MultiplayerOptionsAccessMode.CurrentMapOptions);
            BasicCultureObject cultureTeam2 = MBMultiplayerOptionsAccessor.GetCultureTeam2(MBMultiplayerOptionsAccessor.MultiplayerOptionsAccessMode.CurrentMapOptions);
            var availableCultures           = MBObjectManager.Instance.GetObjectTypeList <BasicCultureObject>()
                                              .Where(x => x.IsMainCulture).ToList();

            foreach (MissionPeer missionPeer in VirtualPlayer.Peers <MissionPeer>())
            {
                NetworkCommunicator networkPeer = missionPeer.GetNetworkPeer();
                if (networkPeer.IsSynchronized && missionPeer.ControlledAgent == null && !missionPeer.HasSpawnedAgentVisuals && missionPeer.Team != null && missionPeer.Team != base.Mission.SpectatorTeam && missionPeer.SpawnTimer.Check(MBCommon.GetTime(MBCommon.TimeType.Mission)))
                {
                    BasicCultureObject basicCultureObject = (missionPeer.Team.Side == BattleSideEnum.Attacker) ? cultureTeam : cultureTeam2;
                    MultiplayerClassDivisions.MPHeroClass mpheroClassForPeer =
                        MultiplayerClassDivisions.GetMPHeroClasses().GetRandomElement();                        // MultiplayerClassDivisions.GetMPHeroClassForPeer(missionPeer);


                    BasicCharacterObject heroCharacter = mpheroClassForPeer.HeroCharacter;

                    AgentBuildData agentBuildData = new AgentBuildData(heroCharacter);
                    agentBuildData.MissionPeer(missionPeer);

                    agentBuildData.EquipmentSeed(
                        this.MissionLobbyComponent.GetRandomFaceSeedForCharacter(heroCharacter, 0));
                    agentBuildData.Equipment(Equipment.GetRandomEquipmentElements(heroCharacter, true, false, agentBuildData.AgentEquipmentSeed));
                    agentBuildData.Team(missionPeer.Team);
                    agentBuildData.IsFemale(missionPeer.Peer.IsFemale);
                    agentBuildData.BodyProperties(base.GetBodyProperties(missionPeer, (missionPeer.Team == base.Mission.AttackerTeam) ? cultureTeam : cultureTeam2));
                    agentBuildData.VisualsIndex(0);
                    agentBuildData.ClothingColor1(availableCultures.GetRandomElement().Color);
                    agentBuildData.ClothingColor2(availableCultures.GetRandomElement().Color2);

                    agentBuildData.TroopOrigin(new BasicBattleAgentOrigin(heroCharacter));
                    if (this.GameMode.ShouldSpawnVisualsForServer(networkPeer))
                    {
                        base.AgentVisualSpawnComponent.SpawnAgentVisualsForPeer(missionPeer, agentBuildData, missionPeer.SelectedTroopIndex, false, 0);
                    }
                    this.GameMode.HandleAgentVisualSpawning(networkPeer, agentBuildData, 0);
                }
            }
            if (base.Mission.AttackerTeam != null)
            {
                int num = 0;
                foreach (Agent agent in base.Mission.AttackerTeam.ActiveAgents)
                {
                    if (agent.Character != null && agent.MissionPeer == null)
                    {
                        num++;
                    }
                }
                if (num < MBMultiplayerOptionsAccessor.GetNumberOfBotsTeam1(MBMultiplayerOptionsAccessor.MultiplayerOptionsAccessMode.CurrentMapOptions))
                {
                    base.SpawnBot(base.Mission.AttackerTeam, cultureTeam);
                }
            }
            if (base.Mission.DefenderTeam != null)
            {
                int num2 = 0;
                foreach (Agent agent2 in base.Mission.DefenderTeam.ActiveAgents)
                {
                    if (agent2.Character != null && agent2.MissionPeer == null)
                    {
                        num2++;
                    }
                }
                if (num2 < MBMultiplayerOptionsAccessor.GetNumberOfBotsTeam2(MBMultiplayerOptionsAccessor.MultiplayerOptionsAccessMode.CurrentMapOptions))
                {
                    var agent = SpawnBot(base.Mission.DefenderTeam, cultureTeam2);
                }
            }
        }
        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);
        }
Example #10
0
 public override void InitializeAgentStats(Agent agent, Equipment spawnEquipment,
                                           AgentDrivenProperties agentDrivenProperties, AgentBuildData agentBuildData)
 {
     previousModel.InitializeAgentStats(agent, spawnEquipment, agentDrivenProperties, agentBuildData);
 }
Example #11
0
        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);
        }
        public static void InitializeAgentStats(Agent agent, Equipment spawnEquipment, AgentDrivenProperties agentDrivenProperties, AgentBuildData agentBuildData)
        {
            if (!agent.IsHuman)
            {
                return;
            }

            var characterObject = CharacterObject.Find(agent.Character.StringId);
            var speedMultiplier = new CharacterAttributeBonuses(characterObject).MoveSpeedMultiplier;

            Logger.Log("Bonus " + speedMultiplier.ToString("P") + " Movement Speed from END", characterObject);
            agentDrivenProperties.CombatMaxSpeedMultiplier *= 1 + speedMultiplier;
        }