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