示例#1
0
        private static void CCSpawnAI(ConCommandArgs args)
        {
            //- Spawns the specified CharacterMaster. Requires 1 argument: spawn_ai 0:{localised_objectname} 1:[Count:1] 2:[EliteIndex:-1/None] 3:[Braindead:0/false(0|1)] 4:[TeamIndex:0/Neutral]

            if (args.sender == null)
            {
                Log.Message(Lang.DS_NOTYETIMPLEMENTED, LogLevel.Error);
                return;
            }
            if (args.Count == 0)
            {
                Log.MessageNetworked(Lang.SPAWNAI_ARGS, args, LogLevel.MessageClientOnly);
                return;
            }

            string character = StringFinder.Instance.GetMasterName(args[0]);

            if (character == null)
            {
                Log.MessageNetworked(Lang.SPAWN_ERROR + character, args, LogLevel.MessageClientOnly);
                return;
            }
            var masterprefab = MasterCatalog.FindMasterPrefab(character);
            var body         = masterprefab.GetComponent <CharacterMaster>().bodyPrefab;

            int amount = 1;

            if (args.Count > 1)
            {
                if (int.TryParse(args[1], out amount) == false)
                {
                    Log.MessageNetworked(Lang.SPAWNAI_ARGS, args, LogLevel.MessageClientOnly);
                    return;
                }
            }
            Vector3 location = args.sender.master.GetBody().transform.position;

            Log.MessageNetworked(string.Format(Lang.SPAWN_ATTEMPT_2, amount, character), args);
            for (int i = 0; i < amount; i++)
            {
                var             bodyGameObject = UnityEngine.Object.Instantiate <GameObject>(masterprefab, location, Quaternion.identity);
                CharacterMaster master         = bodyGameObject.GetComponent <CharacterMaster>();
                NetworkServer.Spawn(bodyGameObject);
                master.SpawnBody(body, args.sender.master.GetBody().transform.position, Quaternion.identity);

                if (args.Count > 2)
                {
                    var eliteIndex = StringFinder.GetEnumFromPartial <EliteIndex>(args[2]);
                    if (eliteIndex != EliteIndex.None)
                    {
                        master.inventory.SetEquipmentIndex(EliteCatalog.GetEliteDef(eliteIndex).eliteEquipmentIndex);
                        master.inventory.GiveItem(ItemIndex.BoostHp, Mathf.RoundToInt((GetTierDef(eliteIndex).healthBoostCoefficient - 1) * 10));
                        master.inventory.GiveItem(ItemIndex.BoostDamage, Mathf.RoundToInt((GetTierDef(eliteIndex).damageBoostCoefficient - 1) * 10));
                    }
                }

                if (args.Count > 3 && Util.TryParseBool(args[3], out bool braindead) && braindead)
                {
                    UnityEngine.Object.Destroy(master.GetComponent <BaseAI>());
                }

                TeamIndex teamIndex = TeamIndex.Monster;
                if (args.Count > 4)
                {
                    StringFinder.TryGetEnumFromPartial(args[4], out teamIndex);
                }

                if (teamIndex >= TeamIndex.None && teamIndex < TeamIndex.Count)
                {
                    master.teamIndex = teamIndex;
                    master.GetBody().teamComponent.teamIndex = teamIndex;
                }
            }
        }