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);
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public override int GetScoreForAssist(Agent killedAgent)
 {
     return((int)((float)MultiplayerClassDivisions.GetMPHeroClassForCharacter(killedAgent.Character).TroopCost * 0.5f));
 }
Esempio n. 7
0
 public override int GetScoreForKill(Agent killedAgent)
 {
     return(MultiplayerClassDivisions.GetMPHeroClassForCharacter(killedAgent.Character).TroopCost);
 }
Esempio n. 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);
                }
            }
        }
Esempio n. 9
0
 private bool IsAgentSergeant(Agent agent) => agent.Character == MultiplayerClassDivisions.GetMPHeroClassForCharacter(agent.Character).HeroCharacter;