public static void EquipSosigWeapon(Sosig sosig, GameObject weaponPrefab, TNHModifier_AIDifficulty difficulty) { SosigWeapon weapon = UnityEngine.Object.Instantiate(weaponPrefab, sosig.transform.position + Vector3.up * 0.1f, sosig.transform.rotation).GetComponent <SosigWeapon>(); weapon.SetAutoDestroy(true); weapon.O.SpawnLockable = false; TNHTweakerLogger.Log("TNHTWEAKER -- Equipping sosig weapon: " + weapon.gameObject.name, TNHTweakerLogger.LogType.TNH); //Equip the sosig weapon to the sosig sosig.ForceEquip(weapon); weapon.SetAmmoClamping(true); if (difficulty == TNHModifier_AIDifficulty.Arcade) { weapon.FlightVelocityMultiplier = 0.3f; } }
public static Sosig SpawnEnemy(SosigTemplate template, CustomCharacter character, Vector3 spawnLocation, Quaternion spawnRotation, TNHModifier_AIDifficulty difficulty, int IFF, bool isAssault, Vector3 pointOfInterest, bool allowAllWeapons) { if (character.ForceAllAgentWeapons) { allowAllWeapons = true; } TNHTweakerLogger.Log("TNHTWEAKER -- Spawning sosig: " + template.SosigEnemyID, TNHTweakerLogger.LogType.TNH); //Create the sosig object GameObject sosigPrefab = UnityEngine.Object.Instantiate(IM.OD[template.SosigPrefabs.GetRandom <string>()].GetGameObject(), spawnLocation, spawnRotation); Sosig sosigComponent = sosigPrefab.GetComponentInChildren <Sosig>(); //Fill out the sosigs config based on the difficulty SosigConfig config; if (difficulty == TNHModifier_AIDifficulty.Arcade && template.ConfigsEasy.Count > 0) { config = template.ConfigsEasy.GetRandom <SosigConfig>(); } else if (template.Configs.Count > 0) { config = template.Configs.GetRandom <SosigConfig>(); } else { TNHTweakerLogger.LogError("TNHTweaker -- Sosig did not have normal difficulty config when playing on normal difficulty! Not spawning this enemy!"); return(null); } sosigComponent.Configure(config.GetConfigTemplate()); sosigComponent.SetIFF(IFF); //Setup the sosigs inventory sosigComponent.Inventory.Init(); sosigComponent.Inventory.FillAllAmmo(); sosigComponent.InitHands(); //Equip the sosigs weapons if (template.WeaponOptions.Count > 0) { GameObject weaponPrefab = IM.OD[template.WeaponOptions.GetRandom <string>()].GetGameObject(); EquipSosigWeapon(sosigComponent, weaponPrefab, difficulty); } if (template.WeaponOptionsSecondary.Count > 0 && allowAllWeapons && template.SecondaryChance >= UnityEngine.Random.value) { GameObject weaponPrefab = IM.OD[template.WeaponOptionsSecondary.GetRandom <string>()].GetGameObject(); EquipSosigWeapon(sosigComponent, weaponPrefab, difficulty); } if (template.WeaponOptionsTertiary.Count > 0 && allowAllWeapons && template.TertiaryChance >= UnityEngine.Random.value) { GameObject weaponPrefab = IM.OD[template.WeaponOptionsTertiary.GetRandom <string>()].GetGameObject(); EquipSosigWeapon(sosigComponent, weaponPrefab, difficulty); } //Equip clothing to the sosig OutfitConfig outfitConfig = template.OutfitConfigs.GetRandom <OutfitConfig>(); if (outfitConfig.Chance_Headwear >= UnityEngine.Random.value) { EquipSosigClothing(outfitConfig.Headwear, sosigComponent.Links[0], outfitConfig.ForceWearAllHead); } if (outfitConfig.Chance_Facewear >= UnityEngine.Random.value) { EquipSosigClothing(outfitConfig.Facewear, sosigComponent.Links[0], outfitConfig.ForceWearAllFace); } if (outfitConfig.Chance_Eyewear >= UnityEngine.Random.value) { EquipSosigClothing(outfitConfig.Eyewear, sosigComponent.Links[0], outfitConfig.ForceWearAllEye); } if (outfitConfig.Chance_Torsowear >= UnityEngine.Random.value) { EquipSosigClothing(outfitConfig.Torsowear, sosigComponent.Links[1], outfitConfig.ForceWearAllTorso); } if (outfitConfig.Chance_Pantswear >= UnityEngine.Random.value) { EquipSosigClothing(outfitConfig.Pantswear, sosigComponent.Links[2], outfitConfig.ForceWearAllPants); } if (outfitConfig.Chance_Pantswear_Lower >= UnityEngine.Random.value) { EquipSosigClothing(outfitConfig.Pantswear_Lower, sosigComponent.Links[3], outfitConfig.ForceWearAllPantsLower); } if (outfitConfig.Chance_Backpacks >= UnityEngine.Random.value) { EquipSosigClothing(outfitConfig.Backpacks, sosigComponent.Links[1], outfitConfig.ForceWearAllBackpacks); } //Setup the sosigs orders if (isAssault) { sosigComponent.CurrentOrder = Sosig.SosigOrder.Assault; sosigComponent.FallbackOrder = Sosig.SosigOrder.Assault; sosigComponent.CommandAssaultPoint(pointOfInterest); } else { sosigComponent.CurrentOrder = Sosig.SosigOrder.Wander; sosigComponent.FallbackOrder = Sosig.SosigOrder.Wander; sosigComponent.CommandGuardPoint(pointOfInterest, true); sosigComponent.SetDominantGuardDirection(UnityEngine.Random.onUnitSphere); } sosigComponent.SetGuardInvestigateDistanceThreshold(25f); //Handle sosig dropping custom loot if (UnityEngine.Random.value < template.DroppedLootChance && template.DroppedObjectPool != null) { SosigLinkLootWrapper component = sosigComponent.Links[2].gameObject.AddComponent <SosigLinkLootWrapper>(); component.shouldDropOnCleanup = !character.DisableCleanupSosigDrops; component.group = template.DroppedObjectPool; } return(sosigComponent); }
public static Sosig SpawnEnemy(SosigTemplate template, CustomCharacter character, Transform spawnLocation, TNHModifier_AIDifficulty difficulty, int IFF, bool isAssault, Vector3 pointOfInterest, bool allowAllWeapons) { return(SpawnEnemy(template, character, spawnLocation.position, spawnLocation.rotation, difficulty, IFF, isAssault, pointOfInterest, allowAllWeapons)); }