public override void Initialize() { Debug.Assert(MultiplayerClassDivisions.AvailableCultures != null, "Available Cultures should not be null"); if (MultiplayerClassDivisions.AvailableCultures == null) { return; } Cultures.Clear(); foreach (var eachCulture in MultiplayerClassDivisions.AvailableCultures) { Cultures.Add(eachCulture.StringId); var groupsInCurrentCulture = new List <Group>(); GroupsInCultures.Add(eachCulture.StringId, groupsInCurrentCulture); foreach (var mpHeroClass in MultiplayerClassDivisions.GetMPHeroClasses(eachCulture)) { var group = groupsInCurrentCulture.Find(g => g.Info.StringId == mpHeroClass.ClassGroup.StringId) as MPGroup; if (group == null) { var newGroup = new MPGroup(mpHeroClass.ClassGroup, mpHeroClass.HeroCharacter.DefaultFormationClass); groupsInCurrentCulture.Add(newGroup); groupsInCurrentCulture.Sort((lhs, rhs) => lhs.Info.FormationClass - rhs.Info.FormationClass); group = newGroup; } group.CharactersInGroup.Add(mpHeroClass.StringId, new MPCharacter(mpHeroClass, group.Info)); } } }
protected override void OnInitialize() { TaleWorlds.Core.Game currentGame = this.CurrentGame; currentGame.FirstInitialize(false); InitializeGameTexts(currentGame.GameTextManager); IGameStarter gameStarter = new BasicGameStarter(); InitializeGameModels(gameStarter); GameManager.OnGameStart(currentGame, gameStarter); MBObjectManager objectManager = currentGame.ObjectManager; currentGame.SecondInitialize(gameStarter.Models); currentGame.CreateGameManager(); GameManager.BeginGameStart(currentGame); currentGame.ThirdInitialize(); currentGame.CreateObjects(); currentGame.InitializeDefaultGameObjects(); currentGame.LoadBasicFiles(false); LoadXmls(); currentGame.SetDefaultEquipments((IReadOnlyDictionary <string, Equipment>) new Dictionary <string, Equipment>()); currentGame.CreateLists(); ObjectManager.LoadXML("MPClassDivisions"); objectManager.ClearEmptyObjects(); MultiplayerClassDivisions.Initialize(); GameManager.OnCampaignStart(this.CurrentGame, (object)null); GameManager.OnAfterCampaignStart(this.CurrentGame); GameManager.OnGameInitializationFinished(this.CurrentGame); CurrentGame.AddGameHandler <ChatBox>(); }
public int GetGoldGainsFromKillData( MPPerkObject.MPPerkHandler killerPerkHandler, MPPerkObject.MPPerkHandler assistingHitterPerkHandler, MultiplayerClassDivisions.MPHeroClass victimClass, bool isAssist) { int num1; if (isAssist) { num1 = (killerPerkHandler != null ? killerPerkHandler.GetRewardedGoldOnAssist() : 0) + (assistingHitterPerkHandler != null ? assistingHitterPerkHandler.GetGoldOnAssist() : 0); } else { int num2 = this.ControlledAgent != null?MultiplayerClassDivisions.GetMPHeroClassForCharacter(this.ControlledAgent.Character).TroopCost : 0; num1 = killerPerkHandler != null?killerPerkHandler.GetGoldOnKill((float)num2, (float)victimClass.TroopCost) : 0; } if (num1 > 0) { GameNetwork.BeginModuleEventAsServer(this.Peer); GameNetwork.WriteMessage((GameNetworkMessage) new TDMGoldGain(new List <KeyValuePair <ushort, int> >() { new KeyValuePair <ushort, int>((ushort)2048, num1) })); GameNetwork.EndModuleEventAsServer(); } return(num1); }
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 int GetGoldGainsFromKillDataAndUpdateFlags( MPPerkObject.MPPerkHandler killerPerkHandler, MPPerkObject.MPPerkHandler assistingHitterPerkHandler, MultiplayerClassDivisions.MPHeroClass victimClass, bool isAssist, bool isRanged) { int num1 = 0; List <KeyValuePair <ushort, int> > goldChangeEventList = new List <KeyValuePair <ushort, int> >(); if (isAssist) { int num2 = 1; int num3 = (killerPerkHandler != null ? killerPerkHandler.GetRewardedGoldOnAssist() : 0) + (assistingHitterPerkHandler != null ? assistingHitterPerkHandler.GetGoldOnAssist() : 0); if (num3 > 0) { num1 += num3; this._currentGoldGains |= GoldGainFlags.PerkBonus; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)2048, num3)); } switch (this.MissionPeer.AssistCount - this._assistCountOnSpawn) { case 1: num1 += 10; this._currentGoldGains |= GoldGainFlags.FirstAssist; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)4, 10)); break; case 2: num1 += 10; this._currentGoldGains |= GoldGainFlags.SecondAssist; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)8, 10)); break; case 3: num1 += 10; this._currentGoldGains |= GoldGainFlags.ThirdAssist; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)16, 10)); break; default: num1 += num2; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)256, num2)); break; } } else { int num2 = 0; if (this.ControlledAgent != null) { num2 = MultiplayerClassDivisions.GetMPHeroClassForCharacter(this.ControlledAgent.Character).TroopCost; int num3 = 2 + Math.Max(0, (victimClass.TroopCost - num2) / 2); num1 += num3; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)128, num3)); } int num4 = killerPerkHandler != null?killerPerkHandler.GetGoldOnKill((float)num2, (float)victimClass.TroopCost) : 0; if (num4 > 0) { num1 += num4; this._currentGoldGains |= GoldGainFlags.PerkBonus; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)2048, num4)); } switch (this.MissionPeer.KillCount - this._killCountOnSpawn) { case 5: num1 += 20; this._currentGoldGains |= GoldGainFlags.FifthKill; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)32, 20)); break; case 10: num1 += 30; this._currentGoldGains |= GoldGainFlags.TenthKill; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)64, 30)); break; } if (isRanged && !this._currentGoldGains.HasAnyFlag <GoldGainFlags>(GoldGainFlags.FirstRangedKill)) { num1 += 10; this._currentGoldGains |= GoldGainFlags.FirstRangedKill; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)1, 10)); } if (!isRanged && !this._currentGoldGains.HasAnyFlag <GoldGainFlags>(GoldGainFlags.FirstMeleeKill)) { num1 += 10; this._currentGoldGains |= GoldGainFlags.FirstMeleeKill; goldChangeEventList.Add(new KeyValuePair <ushort, int>((ushort)2, 10)); } } int num5 = 0; if (this.MissionPeer.Team == Mission.Current.Teams.Attacker) { num5 = MultiplayerOptions.OptionType.GoldGainChangePercentageTeam1.GetIntValue(); } else if (this.MissionPeer.Team == Mission.Current.Teams.Defender) { num5 = MultiplayerOptions.OptionType.GoldGainChangePercentageTeam2.GetIntValue(); } if (num5 != 0 && (num1 > 0 || goldChangeEventList.Count > 0)) { num1 = 0; float num2 = (float)(1.0 + (double)num5 * 0.00999999977648258); for (int index = 0; index < goldChangeEventList.Count; ++index) { int num3 = (int)((double)goldChangeEventList[index].Value * (double)num2); goldChangeEventList[index] = new KeyValuePair <ushort, int>(goldChangeEventList[index].Key, num3); num1 += num3; } } if (goldChangeEventList.Count > 0 && !this.Peer.Communicator.IsServerPeer && this.Peer.Communicator.IsConnectionActive) { GameNetwork.BeginModuleEventAsServer(this.Peer); GameNetwork.WriteMessage((GameNetworkMessage) new TDMGoldGain(goldChangeEventList)); GameNetwork.EndModuleEventAsServer(); } return(num1); }
public override int GetScoreForAssist(Agent killedAgent) { return((int)((float)MultiplayerClassDivisions.GetMPHeroClassForCharacter(killedAgent.Character).TroopCost * 0.5f)); }
public override int GetScoreForKill(Agent killedAgent) { return(MultiplayerClassDivisions.GetMPHeroClassForCharacter(killedAgent.Character).TroopCost); }
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); } } }
private bool IsAgentSergeant(Agent agent) => agent.Character == MultiplayerClassDivisions.GetMPHeroClassForCharacter(agent.Character).HeroCharacter;