private static IEnumerator ToilEnemyDupe(AIActor AIActor) { yield return(null); string guid = AIActor.EnemyGuid; var enemyPrefab = EnemyDatabase.GetOrLoadByGuid(guid); AIActor aiactor = AIActor.Spawn(enemyPrefab, AIActor.gameActor.CenterPosition.ToIntVector2(VectorConversions.Floor), AIActor.GetAbsoluteParentRoom(), true, AIActor.AwakenAnimationType.Default, true); HasBeenAffectedByCurrentChallenge challengitude = aiactor.gameObject.AddComponent <HasBeenAffectedByCurrentChallenge>(); challengitude.linkedOther = AIActor; HasBeenAffectedByCurrentChallenge challengitude2 = AIActor.gameObject.AddComponent <HasBeenAffectedByCurrentChallenge>(); challengitude2.linkedOther = aiactor; aiactor.procedurallyOutlined = true; AIActor.procedurallyOutlined = true; aiactor.IsWorthShootingAt = AIActor.IsWorthShootingAt; aiactor.IgnoreForRoomClear = AIActor.IgnoreForRoomClear; aiactor.AssignedCurrencyToDrop = AIActor.AssignedCurrencyToDrop; aiactor.AdditionalSafeItemDrops = AIActor.AdditionalSafeItemDrops; aiactor.AdditionalSimpleItemDrops = AIActor.AdditionalSimpleItemDrops; aiactor.CanTargetEnemies = AIActor.CanTargetEnemies; aiactor.CanTargetPlayers = AIActor.CanTargetPlayers; if (AIActor.IsInReinforcementLayer) { aiactor.HandleReinforcementFallIntoRoom(0f); } if (AIActor.GetComponent <KillOnRoomClear>() != null) { KillOnRoomClear kill = aiactor.gameObject.GetOrAddComponent <KillOnRoomClear>(); kill.overrideDeathAnim = AIActor.GetComponent <KillOnRoomClear>().overrideDeathAnim; kill.preventExplodeOnDeath = AIActor.GetComponent <KillOnRoomClear>().preventExplodeOnDeath; } if (aiactor.EnemyGuid == "22fc2c2c45fb47cf9fb5f7b043a70122") { aiactor.CollisionDamage = 0f; aiactor.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.PlayerHitBox)); aiactor.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.Projectile)); } else if (aiactor.EnemyGuid == "249db525a9464e5282d02162c88e0357") { if (aiactor.gameObject.GetComponent <SpawnEnemyOnDeath>()) { UnityEngine.Object.Destroy(aiactor.gameObject.GetComponent <SpawnEnemyOnDeath>()); } } else if (EasyEnemyTypeLists.VanillaMimics.Contains(aiactor.EnemyGuid)) { if (AIActor.AdditionalSafeItemDrops != null && aiactor.AdditionalSafeItemDrops != null) { List <PickupObject> newDrops = new List <PickupObject>(); PickupObject.ItemQuality qual = PickupObject.ItemQuality.D; int itemsToReAdd = 0; for (int i = (aiactor.AdditionalSafeItemDrops.Count - 1); i >= 0; i--) { if (!BabyGoodChanceKin.lootIDlist.Contains(aiactor.AdditionalSafeItemDrops[i].PickupObjectId)) { qual = aiactor.AdditionalSafeItemDrops[i].quality; itemsToReAdd++; } else { newDrops.Add(PickupObjectDatabase.GetById(aiactor.AdditionalSafeItemDrops[i].PickupObjectId)); } } if (itemsToReAdd > 0) { for (int i = 0; i < itemsToReAdd; i++) { PickupObject item = LootEngine.GetItemOfTypeAndQuality <PassiveItem>(qual, null, false); if (UnityEngine.Random.value <= 0.5f) { item = LootEngine.GetItemOfTypeAndQuality <Gun>(qual, null, false); } newDrops.Add(item); } aiactor.AdditionalSafeItemDrops = newDrops; } } } GameManager.Instance.StartCoroutine(Shrimk(aiactor)); GameManager.Instance.StartCoroutine(Shrimk(AIActor)); aiactor.specRigidbody.Reinitialize(); yield break; }
public static void AIActorPostSpawn(AIActor AIActor) { if (CurrentChallenge == ChallengeType.WHAT_ARMY) { bool isParachuting = (AIActor.gameObject.transform.parent != null && AIActor.gameObject.transform.parent.gameObject.name.Contains("EX_Parachute")); if (AIActor && AIActor.healthHaver && !AIActor.healthHaver.IsBoss && !AIActor.healthHaver.IsSubboss && !AIActor.IsSecretlyTheMineFlayer()) { if (AIActor.gameObject.GetComponent <HasBeenAffectedByCurrentChallenge>() == null && AIActor.gameObject.GetComponent <CompanionController>() == null && !isParachuting) { float proc = 1; if (AIActor.GetAbsoluteParentRoom().area.PrototypeRoomCategory == PrototypeDungeonRoom.RoomCategory.BOSS && AIActor.GetAbsoluteParentRoom().RoomContainsMineFlayer()) { proc = 0.2f; } if (UnityEngine.Random.value <= proc) { List <string> ChaosPalette = GenerateChaosPalette(); string guid = BraveUtility.RandomElement(ChaosPalette); var enemyPrefab = EnemyDatabase.GetOrLoadByGuid(guid); AIActor aiactor = AIActor.Spawn(enemyPrefab, AIActor.gameActor.CenterPosition.ToIntVector2(VectorConversions.Floor), AIActor.GetAbsoluteParentRoom(), true, AIActor.AwakenAnimationType.Default, true); aiactor.gameObject.AddComponent <HasBeenAffectedByCurrentChallenge>(); aiactor.AssignedCurrencyToDrop = AIActor.AssignedCurrencyToDrop; aiactor.AdditionalSafeItemDrops = AIActor.AdditionalSafeItemDrops; aiactor.AdditionalSimpleItemDrops = AIActor.AdditionalSimpleItemDrops; aiactor.CanTargetEnemies = AIActor.CanTargetEnemies; aiactor.CanTargetPlayers = AIActor.CanTargetPlayers; if (aiactor.EnemyGuid == "556e9f2a10f9411cb9dbfd61e0e0f1e1") { aiactor.HandleReinforcementFallIntoRoom(0f); } else if (AIActor.IsInReinforcementLayer) { aiactor.invisibleUntilAwaken = true; aiactor.specRigidbody.CollideWithOthers = false; aiactor.IsGone = true; aiactor.HandleReinforcementFallIntoRoom(0f); } if (aiactor.EnemyGuid == "22fc2c2c45fb47cf9fb5f7b043a70122") { aiactor.CollisionDamage = 0f; } if (AIActor.GetComponent <ExplodeOnDeath>() != null) { UnityEngine.Object.Destroy(AIActor.GetComponent <ExplodeOnDeath>()); } AIActor.EraseFromExistence(true); } } } } else if (CurrentChallenge == ChallengeType.TOIL_AND_TROUBLE) { if (AIActor && AIActor.healthHaver && !AIActor.healthHaver.IsBoss && !AIActor.healthHaver.IsSubboss && !AIActor.IsSecretlyTheMineFlayer()) { if (AIActor.GetComponent <CompanionController>() == null && AIActor.GetComponent <HasBeenAffectedByCurrentChallenge>() == null && AIActor.GetComponent <DisplacedImageController>() == null && AIActor.GetComponent <WitchsBrew.HasBeenDoubledByWitchsBrew>() == null && AIActor.GetComponent <MirrorImageController>() == null) { GameManager.Instance.StartCoroutine(ToilEnemyDupe(AIActor)); } } else if (AIActor && AIActor.healthHaver && (AIActor.healthHaver.IsBoss || AIActor.healthHaver.IsSubboss) && !AIActor.IsSecretlyTheMineFlayer()) { if (AIActor.GetComponent <HasBeenAffectedByCurrentChallenge>() == null) { if (ValidDoubleableBosses.Contains(AIActor.EnemyGuid)) { string guid = AIActor.EnemyGuid; var enemyPrefab = EnemyDatabase.GetOrLoadByGuid(guid); AIActor aiactor = AIActor.Spawn(enemyPrefab, AIActor.gameActor.CenterPosition.ToIntVector2(VectorConversions.Floor), AIActor.GetAbsoluteParentRoom(), true, AIActor.AwakenAnimationType.Default, true); HasBeenAffectedByCurrentChallenge challengitude = aiactor.gameObject.AddComponent <HasBeenAffectedByCurrentChallenge>(); challengitude.linkedOther = AIActor; HasBeenAffectedByCurrentChallenge challengitude2 = AIActor.gameObject.AddComponent <HasBeenAffectedByCurrentChallenge>(); challengitude2.linkedOther = aiactor; aiactor.AssignedCurrencyToDrop = AIActor.AssignedCurrencyToDrop; aiactor.AdditionalSafeItemDrops = AIActor.AdditionalSafeItemDrops; aiactor.AdditionalSimpleItemDrops = AIActor.AdditionalSimpleItemDrops; if (AIActor.GetComponent <BroController>()) { aiactor.gameObject.GetOrAddComponent <BroController>(); } float actorOrigHP = AIActor.healthHaver.GetMaxHealth(); float actorNewHP = aiactor.healthHaver.GetMaxHealth(); AIActor.healthHaver.SetHealthMaximum(actorOrigHP * 0.5f); AIActor.healthHaver.ForceSetCurrentHealth(actorOrigHP * 0.5f); aiactor.healthHaver.SetHealthMaximum(actorNewHP * 0.5f); aiactor.healthHaver.ForceSetCurrentHealth(actorNewHP * 0.5f); } else { float actorHP = AIActor.healthHaver.GetMaxHealth(); AIActor.healthHaver.SetHealthMaximum(actorHP * 1.5f); AIActor.healthHaver.ForceSetCurrentHealth(actorHP * 1.5f); } } } } }