Ejemplo n.º 1
0
        public static FactionSet GetFactionSet(BotFaction botFaction, int bossIndex = -1)
        {
            var factionSet = new FactionSet(botFaction);
            var bosses     = GetBosses(botFaction);

            bosses.Insert(0, BotType.None); // Have a chance to spawn faction without boss

            // TODO: add sub-bosses
            BotType mainBoss;

            if (bossIndex >= 0 && bossIndex < bosses.Count)
            {
                mainBoss = bosses[bossIndex];
            }
            else
            {
                mainBoss = RandomHelper.GetItem(bosses);
            }

            switch (botFaction)
            {
                #region Assassin
            case BotFaction.Assassin:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.AssassinMelee, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.AssassinRange, 1f),
                    });
                break;
            }
                #endregion

                #region Agent
            case BotFaction.Agent:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Agent, 1f),
                    });
                break;
            }
                #endregion

                #region Bandido
            case BotFaction.Bandido:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Bandido, 1f),
                    });
                break;
            }
                #endregion

                #region Biker
            case BotFaction.Biker:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Biker, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Biker, 0.5f),
                        new SubFaction(BotType.Thug, 0.5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Biker, 0.6f),
                        new SubFaction(BotType.BikerHulk, 0.4f),
                    });
                break;
            }
                #endregion

                #region Clown
            case BotFaction.Clown:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.ClownCowboy, 0.5f),
                        new SubFaction(BotType.ClownGangster, 0.25f),
                        new SubFaction(BotType.ClownBoxer, 0.25f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.ClownCowboy, 0.6f),
                        new SubFaction(BotType.ClownGangster, 0.4f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.ClownBoxer, 0.7f),
                        new SubFaction(BotType.ClownGangster, 0.3f),
                    });
                break;
            }
                #endregion

                #region Cowboy
            case BotFaction.Cowboy:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Cowboy, 1f),
                    });
                break;
            }
                #endregion

                #region Engineer
            case BotFaction.Engineer:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Engineer, 1f),
                    });
                break;
            }
                #endregion

                #region Farmer
            case BotFaction.Farmer:
            {
                var nonFarmer = new BotType[] { BotType.Gardener, BotType.Lumberjack, BotType.Hunter, };
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Farmer, 0.5f),
                        new SubFaction(nonFarmer, .5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Farmer, 0.3f),
                        new SubFaction(nonFarmer, .7f),
                    });
                break;
            }
                #endregion

                #region Gangster
            case BotFaction.Gangster:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Gangster, 0.8f),
                        new SubFaction(BotType.GangsterHulk, 0.2f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Gangster, 0.7f),
                        new SubFaction(BotType.ThugHulk, 0.3f),
                    });
                break;
            }
                #endregion

                #region Hunter
            case BotFaction.Hunter:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Hunter, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Hunter, .7f),
                        new SubFaction(BotType.Farmer, .3f),
                    });
                break;
            }
                #endregion

                #region MetroCop
            case BotFaction.MetroCop:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.MetroCop, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.MetroCop, 0.7f),
                        new SubFaction(BotType.Agent2, 0.3f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.MetroCop, 0.5f),
                        new SubFaction(BotType.Agent2, 0.5f),
                    });
                break;
            }
                #endregion

                #region Nazi
            case BotFaction.Nazi:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.NaziSoldier, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.NaziSoldier, 0.6f),
                        new SubFaction(BotType.NaziMuscleSoldier, 0.4f),
                    });
                break;
            }
                #endregion

                #region Police
            case BotFaction.Police:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Police, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Police, 0.7f),
                        new SubFaction(BotType.PoliceSWAT, 0.3f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.PoliceSWAT, 0.8f),
                        new SubFaction(BotType.Police, 0.2f),
                    });
                break;
            }
                #endregion

                #region PoliceSWAT
            case BotFaction.PoliceSWAT:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.PoliceSWAT, 1f),
                    });
                break;
            }
                #endregion

                #region Punk
            case BotFaction.Punk:
            {
                // TODO: add punk semi boss
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Punk, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Punk, 0.5f),
                        new SubFaction(BotType.Biker, 0.5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Punk, 0.6f),
                        new SubFaction(BotType.PunkHulk, 0.4f),
                    });
                break;
            }
                #endregion

                #region Robot
            case BotFaction.Robot:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Cyborg, 1f),
                    });
                break;
            }
                #endregion

                #region Sniper
            case BotFaction.Sniper:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Sniper, 1f),
                    });
                break;
            }
                #endregion

                #region Spacer
            case BotFaction.Spacer:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Spacer, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Spacer, .7f),
                        new SubFaction(BotType.SpaceSniper, .3f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Spacer, .9f),
                        new SubFaction(BotType.SpaceSniper, .1f),
                    });
                break;
            }
                #endregion

                #region SpaceSniper
            case BotFaction.SpaceSniper:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.SpaceSniper, 1f),
                    });
                break;
            }
                #endregion

                #region Stripper
            case BotFaction.Stripper:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Stripper, .5f),
                        new SubFaction(BotType.Bodyguard, .5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Stripper, .5f),
                        new SubFaction(BotType.BikerHulk, .5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Stripper, .5f),
                        new SubFaction(BotType.GangsterHulk, .5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Stripper, .5f),
                        new SubFaction(BotType.PunkHulk, .5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Stripper, .5f),
                        new SubFaction(BotType.ThugHulk, .5f),
                    });
                break;
            }
                #endregion

                #region Soldier
            case BotFaction.Soldier:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Soldier, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Soldier, 0.7f),
                        new SubFaction(BotType.Sniper, 0.3f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Soldier, 0.9f),
                        new SubFaction(BotType.Soldier2, 0.1f),
                    });
                break;
            }
                #endregion

                #region Survivor
            case BotFaction.Survivor:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(new BotType[]
                        {
                            BotType.SurvivorBiker,
                            BotType.SurvivorCrazy,
                            BotType.SurvivorNaked,
                            BotType.SurvivorRifleman,
                            BotType.SurvivorRobber,
                            BotType.SurvivorTough,
                        }, 1f),
                    });
                break;
            }
                #endregion

                #region Thug
            case BotFaction.Thug:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Thug, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Thug, 0.5f),
                        new SubFaction(BotType.Biker, 0.5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(mainBoss),
                        new SubFaction(BotType.Thug, 0.6f),
                        new SubFaction(BotType.ThugHulk, 0.4f),
                    });
                break;
            }
                #endregion

                #region Zombie
            case BotFaction.Zombie:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Zombie, 0.4f),
                        new SubFaction(CommonZombieTypes, 0.6f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.8f),
                        new SubFaction(BotType.ZombieBruiser, 0.2f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.6f),
                        new SubFaction(BotType.ZombieBruiser, 0.4f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.8f),
                        new SubFaction(BotType.ZombieChild, 0.2f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.6f),
                        new SubFaction(BotType.ZombieChild, 0.4f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.8f),
                        new SubFaction(BotType.ZombieFat, 0.2f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.6f),
                        new SubFaction(BotType.ZombieFat, 0.4f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.8f),
                        new SubFaction(BotType.ZombieFlamer, 0.2f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.6f),
                        new SubFaction(BotType.ZombieFlamer, 0.4f),
                    });
                break;
            }
                #endregion

                #region ZombieMutated
            case BotFaction.ZombieMutated:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(MutatedZombieTypes, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.2f),
                        new SubFaction(MutatedZombieTypes, 0.8f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.4f),
                        new SubFaction(MutatedZombieTypes, 0.6f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(CommonZombieTypes, 0.7f),
                        new SubFaction(MutatedZombieTypes, 0.3f),
                    });
                break;
            }
                #endregion

                #region Boss_Balista
            case BotFaction.Boss_Balista:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Balista),
                        new SubFaction(BotType.Punk, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Balista),
                        new SubFaction(BotType.Punk, .5f),
                        new SubFaction(BotType.PunkHulk, .5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Balista),
                        new SubFaction(BotType.Punk, .75f),
                        new SubFaction(BotType.PunkHulk, .25f),
                    });
                break;
            }
                #endregion

                #region Boss_Boffin
            case BotFaction.Boss_Boffin:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Boffin),
                        new SubFaction(BotType.Scientist, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Boffin),
                        new SubFaction(BotType.LabAssistant, .5f),
                        new SubFaction(BotType.Scientist, .5f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Boffin),
                        new SubFaction(BotType.Scientist, .75f),
                        new SubFaction(BotType.LabAssistant, .25f),
                    });
                break;
            }
                #endregion

                #region Boss_Cindy
            case BotFaction.Boss_Cindy:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Cindy),
                        new SubFaction(BotType.Police, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Cindy),
                        new SubFaction(BotType.Police, 0.7f),
                        new SubFaction(BotType.PoliceSWAT, 0.3f),
                    });
                break;
            }
                #endregion

                #region Boss_Demolitionist
            case BotFaction.Boss_Demolitionist:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Demolitionist),
                    });
                break;
            }
                #endregion

                #region Boss_Funnyman
            case BotFaction.Boss_Funnyman:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Funnyman),
                        new SubFaction(BotType.ClownBodyguard, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Funnyman),
                        new SubFaction(new BotType[]
                        {
                            BotType.ClownBoxer,
                            BotType.ClownCowboy,
                            BotType.ClownGangster,
                        }, 1f),
                    });
                break;
            }
                #endregion

                #region Boss_Jo
            case BotFaction.Boss_Jo:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Jo),
                        new SubFaction(BotType.Biker, 0.6f),
                        new SubFaction(BotType.BikerHulk, 0.4f),
                    });
                break;
            }
                #endregion

                #region Boss_Hacker
            case BotFaction.Boss_Hacker:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Hacker),
                        new SubFaction(BotType.Hacker),
                    });
                break;
            }
                #endregion

                #region Boss_Incinerator
            case BotFaction.Boss_Incinerator:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Incinerator),
                    });
                break;
            }
                #endregion

                #region Boss_Kingpin
            case BotFaction.Boss_Kingpin:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Kingpin),
                        new SubFaction(BotType.Bodyguard, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Kingpin),
                        new SubFaction(BotType.GangsterHulk, 0.55f),
                        new SubFaction(BotType.Bodyguard2, 0.45f),
                    });
                break;
            }
                #endregion

                #region Boss_MadScientist
            case BotFaction.Boss_MadScientist:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Kriegbar),
                        new SubFaction(BotType.Fritzliebe),
                    });
                break;
            }
                #endregion

                #region Boss_Meatgrinder
            case BotFaction.Boss_Meatgrinder:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Meatgrinder),
                    });
                break;
            }
                #endregion

                #region Boss_Mecha
            case BotFaction.Boss_Mecha:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Mecha),
                    });
                break;
            }
                #endregion

                #region Boss_MetroCop
            case BotFaction.Boss_MetroCop:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.MetroCop2),
                        new SubFaction(BotType.MetroCop, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.MetroCop2),
                        new SubFaction(BotType.MetroCop, 0.7f),
                        new SubFaction(BotType.Agent2, 0.3f),
                    });
                break;
            }
                #endregion

                #region Boss_MirrorMan
            case BotFaction.Boss_MirrorMan:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.MirrorMan),
                    });
                break;
            }
                #endregion

                #region Boss_Ninja
            case BotFaction.Boss_Ninja:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Ninja),
                    });
                break;
            }
                #endregion

                #region Boss_Santa
            case BotFaction.Boss_Santa:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Santa),
                        new SubFaction(BotType.Elf, 1f),
                    });
                break;
            }
                #endregion

                #region Boss_Sheriff
            case BotFaction.Boss_Sheriff:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Sheriff),
                        new SubFaction(BotType.Cowboy, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Sheriff),
                        new SubFaction(BotType.Bandido, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Sheriff),
                        new SubFaction(BotType.Cowboy, .5f),
                        new SubFaction(BotType.Bandido, .5f),
                    });
                break;
            }
                #endregion

                #region Boss_Teddybear
            case BotFaction.Boss_Teddybear:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.Teddybear),
                        new SubFaction(BotType.Babybear),
                        new SubFaction(BotType.Babybear),
                    });
                break;
            }
                #endregion

                #region Boss_Zombie
            case BotFaction.Boss_Zombie:
            {
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.ZombieFighter),
                        new SubFaction(CommonZombieTypes, 1f),
                    });
                factionSet.AddFaction(new List <SubFaction>()
                    {
                        new SubFaction(BotType.ZombieFighter),
                        new SubFaction(CommonZombieTypes, 0.7f),
                        new SubFaction(MutatedZombieTypes, 0.3f),
                    });
                break;
            }
                #endregion
            }

            return(factionSet);
        }