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);
        }
        private void OnAllAgentsFromPeerSpawnedFromVisuals(MissionPeer peer)
        {
            bool flag         = peer.Team == this.Mission.AttackerTeam;
            Team defenderTeam = this.Mission.DefenderTeam;

            MultiplayerClassDivisions.MPHeroClass mpHeroClass = MultiplayerClassDivisions.GetMPHeroClasses(MBObjectManager.Instance.GetObject <BasicCultureObject>(flag ? MultiplayerOptions.OptionType.CultureTeam1.GetStrValue() : MultiplayerOptions.OptionType.CultureTeam2.GetStrValue())).ElementAt <MultiplayerClassDivisions.MPHeroClass>(peer.SelectedTroopIndex);
            this.GameMode.ChangeCurrentGoldForPeer(peer, this.GameMode.GetCurrentGoldForPeer(peer) - mpHeroClass.TroopCost);
        }
Пример #3
0
        public static MultiplayerClassDivisions.MPHeroClass GetMPHeroClassForPeer(
            MissionPeer peer)
        {
            Team team  = peer.Team;
            bool flag1 = team == Mission.Current.AttackerTeam;
            bool flag2 = team == Mission.Current.DefenderTeam;

            if (team == null || !flag1 && !flag2 || peer.SelectedTroopIndex < 0 && peer.ControlledAgent == null)
            {
                return((MultiplayerClassDivisions.MPHeroClass)null);
            }
            if (peer.ControlledAgent != null)
            {
                return(MultiplayerClassDivisions.GetMPHeroClassForCharacter(peer.ControlledAgent.Character));
            }
            return(peer.SelectedTroopIndex >= 0 ? MultiplayerClassDivisions.GetMPHeroClasses(MBObjectManager.Instance.GetObject <BasicCultureObject>(flag1 ? MultiplayerOptions.OptionType.CultureTeam1.GetStrValue() : MultiplayerOptions.OptionType.CultureTeam2.GetStrValue())).ToList <MultiplayerClassDivisions.MPHeroClass>()[peer.SelectedTroopIndex] : (MultiplayerClassDivisions.MPHeroClass)null);
        }
        protected void 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));
            agentBuildData.ClothingColor1(agentTeam.Side == BattleSideEnum.Attacker ? cultureLimit.Color : cultureLimit.ClothAlternativeColor);
            agentBuildData.ClothingColor2(agentTeam.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));
            Agent agent = this.Mission.SpawnAgent(agentBuildData);

            agent.AddComponent((AgentComponent) new AgentAIStateFlagComponent(agent));
            agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed);
        }
        protected override void SpawnAgents()
        {
            BasicCultureObject cultureLimit1 = MBObjectManager.Instance.GetObject <BasicCultureObject>(MultiplayerOptions.OptionType.CultureTeam1.GetStrValue());
            BasicCultureObject cultureLimit2 = MBObjectManager.Instance.GetObject <BasicCultureObject>(MultiplayerOptions.OptionType.CultureTeam2.GetStrValue());

            foreach (MissionPeer peer in VirtualPlayer.Peers <MissionPeer>())
            {
                if (peer.GetNetworkPeer().IsSynchronized&& peer.ControlledAgent == null && (!peer.HasSpawnedAgentVisuals && peer.Team != null) && (peer.Team != this.Mission.SpectatorTeam && peer.SpawnTimer.Check(MBCommon.GetTime(MBCommon.TimeType.Mission))))
                {
                    IAgentVisual       agentVisualForPeer = peer.GetAgentVisualForPeer(0);
                    BasicCultureObject basicCultureObject = peer.Team.Side == BattleSideEnum.Attacker ? cultureLimit1 : cultureLimit2;
                    int num = peer.SelectedTroopIndex;
                    IEnumerable <MultiplayerClassDivisions.MPHeroClass> mpHeroClasses = MultiplayerClassDivisions.GetMPHeroClasses(basicCultureObject);
                    MultiplayerClassDivisions.MPHeroClass mpHeroClass = num < 0 ? (MultiplayerClassDivisions.MPHeroClass)null : mpHeroClasses.ElementAt <MultiplayerClassDivisions.MPHeroClass>(num);
                    if (mpHeroClass == null && num < 0)
                    {
                        mpHeroClass = mpHeroClasses.First <MultiplayerClassDivisions.MPHeroClass>();
                        num         = 0;
                    }
                    BasicCharacterObject heroCharacter = mpHeroClass.HeroCharacter;
                    Equipment            equipment     = heroCharacter.Equipment.Clone();
                    IEnumerable <(EquipmentIndex, EquipmentElement)> alternativeEquipments = MPPerkObject.GetOnSpawnPerkHandler(peer)?.GetAlternativeEquipments(true);
                    if (alternativeEquipments != null)
                    {
                        foreach ((EquipmentIndex, EquipmentElement)tuple in alternativeEquipments)
                        {
                            equipment[tuple.Item1] = tuple.Item2;
                        }
                    }
                    AgentBuildData agentBuildData = new AgentBuildData(heroCharacter);
                    agentBuildData.MissionPeer(peer);
                    agentBuildData.Equipment(equipment);
                    agentBuildData.Team(peer.Team);
                    MatrixFrame frame;
                    if (agentVisualForPeer == null)
                    {
                        frame = this.SpawnComponent.GetSpawnFrame(peer.Team, heroCharacter.Equipment.Horse.Item != null);
                    }
                    else
                    {
                        frame = agentVisualForPeer.GetFrame();
                        frame.rotation.MakeUnit();
                    }
                    agentBuildData.InitialFrame(frame);
                    agentBuildData.IsFemale(peer.Peer.IsFemale);
                    BodyProperties bodyProperties = this.GetBodyProperties(peer, basicCultureObject);
                    agentBuildData.BodyProperties(bodyProperties);
                    agentBuildData.VisualsIndex(0);
                    agentBuildData.ClothingColor1(peer.Team == this.Mission.AttackerTeam ? basicCultureObject.Color : basicCultureObject.ClothAlternativeColor);
                    agentBuildData.ClothingColor2(peer.Team == this.Mission.AttackerTeam ? basicCultureObject.Color2 : basicCultureObject.ClothAlternativeColor2);
                    agentBuildData.TroopOrigin((IAgentOriginBase) new BasicBattleAgentOrigin(heroCharacter));
                    NetworkCommunicator networkPeer = peer.GetNetworkPeer();
                    if (this.GameMode.ShouldSpawnVisualsForServer(networkPeer))
                    {
                        this.AgentVisualSpawnComponent.SpawnAgentVisualsForPeer(peer, agentBuildData, num);
                    }
                    this.GameMode.HandleAgentVisualSpawning(networkPeer, agentBuildData);
                }
            }
            if (this.Mission.AttackerTeam != null)
            {
                int num = 0;
                foreach (Agent activeAgent in this.Mission.AttackerTeam.ActiveAgents)
                {
                    if (activeAgent.Character != null && activeAgent.MissionPeer == null)
                    {
                        ++num;
                    }
                }
                if (num < MultiplayerOptions.OptionType.NumberOfBotsTeam1.GetIntValue())
                {
                    this.SpawnBot(this.Mission.AttackerTeam, cultureLimit1);
                }
            }
            if (this.Mission.DefenderTeam == null)
            {
                return;
            }
            int num1 = 0;

            foreach (Agent activeAgent in this.Mission.DefenderTeam.ActiveAgents)
            {
                if (activeAgent.Character != null && activeAgent.MissionPeer == null)
                {
                    ++num1;
                }
            }
            if (num1 >= MultiplayerOptions.OptionType.NumberOfBotsTeam2.GetIntValue())
            {
                return;
            }
            this.SpawnBot(this.Mission.DefenderTeam, cultureLimit2);
        }
Пример #6
0
        public static int GetMinimumTroopCost(BasicCultureObject culture = null)
        {
            MBReadOnlyList <MultiplayerClassDivisions.MPHeroClass> mpHeroClasses = MultiplayerClassDivisions.GetMPHeroClasses();

            return(culture != null?mpHeroClasses.Where <MultiplayerClassDivisions.MPHeroClass>((Func <MultiplayerClassDivisions.MPHeroClass, bool>)(c => c.Culture == culture)).Min <MultiplayerClassDivisions.MPHeroClass>((Func <MultiplayerClassDivisions.MPHeroClass, int>)(troop => troop.TroopCost)) : mpHeroClasses.Min <MultiplayerClassDivisions.MPHeroClass>((Func <MultiplayerClassDivisions.MPHeroClass, int>)(troop => troop.TroopCost)));
        }