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));
 }
Esempio n. 4
0
 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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 12
0
 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));
 }
Esempio n. 14
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 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()
            })));
        }
Esempio n. 20
0
        public BaseHero(BasicCharacterObject character)
        {
            if (character == null)
            {
                return;
            }

            Id    = character.Id;
            _name = character.Name?.ToString();
            _isHumanPlayerCharacter = character.IsPlayerCharacter;
        }
Esempio n. 21
0
 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);
Esempio n. 23
0
        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;
            }
        }
Esempio n. 24
0
        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);
        }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
        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);
        }
Esempio n. 29
0
        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);
             }
         }
     }
 }