Beispiel #1
0
        public static Bot SpawnBot(
            BotType botType,
            BotFaction faction     = BotFaction.None,
            IPlayer player         = null,
            PlayerTeam team        = BotTeam,
            bool ignoreFullSpawner = false,
            bool triggerOnSpawn    = true)
        {
            if (player == null)
            {
                player = SpawnPlayer(ignoreFullSpawner);
            }
            if (player == null)
            {
                return(null);
            }

            player.SetTeam(team);

            var bot       = BotFactory.Create(player, botType, faction);
            var info      = bot.Info;
            var weaponSet = WeaponSet.Empty;

            if (RandomHelper.Percentage(info.EquipWeaponChance))
            {
                weaponSet = RandomHelper.GetItem(GetWeapons(botType));
            }
            BotHelper.Equip(player, weaponSet);

            var profile = RandomHelper.GetItem(GetProfiles(botType));

            player.SetProfile(profile);
            if (player.Name == "COM")
            {
                player.SetBotName(profile.Name);
            }

            var behaviorSet = GetBehaviorSet(info.AIType);

            behaviorSet.SearchItems     = info.SearchItems;
            behaviorSet.SearchItemRange = info.SearchRange;

            bot.SetBotBehaviorSet(behaviorSet, true);
            player.SetModifiers(info.Modifiers);
            player.SetBotBehaviorActive(true);

            m_bots[player.UniqueID] = bot; // This may be updated if using setplayer command

            if (triggerOnSpawn)
            {
                TriggerOnSpawn(bot);
            }

            return(bot);
        }
        private bool TurnIntoZombie()
        {
            if (Body.IsRemoved || Body.IsBurnedCorpse)
            {
                return(false);
            }

            var player     = Game.CreatePlayer(Body.GetWorldPosition());
            var zombieType = BotHelper.GetZombieType(Type);
            var oldProfile = Body.GetProfile();
            var oldWeapons = BotHelper.GetWeaponSet(Body); // TODO: test gun with lazer once gurt fixed https://www.mythologicinteractiveforums.com/viewtopic.php?f=31&t=4000

            ScriptHelper.LogDebug(Type, "->", zombieType);
            player.SetBotName(Body.Name); // NOTE: set right now so SpawnLine dialogue will show the bot name correctly

            var zombie     = BotManager.SpawnBot(zombieType, Faction, player, BotManager.GetBot(Body).InfectTeam);
            var zombieBody = zombie.Player;

            var modifiers = Body.GetModifiers();

            // Survivor has fake MaxHealth to have blood effect on the face
            if (Enum.GetName(typeof(BotType), BotManager.GetBot(Body).Type).StartsWith("Survivor"))
            {
                modifiers.CurrentHealth = modifiers.MaxHealth = 50;
            }
            else
            {
                modifiers.CurrentHealth = modifiers.MaxHealth * 0.75f;
            }

            zombieBody.SetModifiers(modifiers);
            zombieBody.SetProfile(BotHelper.ToZombieProfile(oldProfile));
            BotHelper.Equip(zombieBody, oldWeapons);

            Body.Remove();
            Body = zombieBody;
            Body.SetBotBehaivorActive(false);
            Body.AddCommand(new PlayerCommand(PlayerCommandType.StartCrouch));
            IsTurningIntoZombie = true;
            return(true);
        }