private bool DetermineCanMakeNPC(AIActor target) { CustomEnemyTagsSystem tags = target.gameObject.GetComponent <CustomEnemyTagsSystem>(); if (tags != null && tags.isGundertaleFriendly == true) { return(false); } if (!target.healthHaver.IsBoss) { Gun gundertale = this.gun.CurrentOwner.CurrentGun; if (gundertale && gundertale == this.gun && gundertale.CurrentAmmo > 0 && gundertale.ClipShotsRemaining > 0) { gundertale.CurrentAmmo -= 1; gundertale.ClipShotsRemaining -= 1; return(true); } else { return(false); } } else { return(false); } }
private void MakeEnemyNPC(AIActor enemy) { HandleSpawnLoot(enemy); var CurrentRoom = enemy.transform.position.GetAbsoluteRoom(); UnityEngine.Object.Instantiate <GameObject>(EasyVFXDatabase.GundetaleSpareVFX, (enemy.sprite.WorldTopCenter + new Vector2(0, 0.25f)), Quaternion.identity); if (enemy.GetComponent <KillOnRoomUnseal>()) { UnityEngine.Object.Destroy(enemy.GetComponent <KillOnRoomUnseal>()); } CurrentRoom.DeregisterEnemy(enemy); CustomEnemyTagsSystem tags = enemy.gameObject.GetOrAddComponent <CustomEnemyTagsSystem>(); enemy.gameActor.DeleteOwnedBullets(); if (tags != null) { tags.isGundertaleFriendly = true; } if (enemy.specRigidbody) { UnityEngine.Object.Destroy(enemy.specRigidbody); } if (enemy.behaviorSpeculator) { UnityEngine.Object.Destroy(enemy.behaviorSpeculator); } if (enemy.healthHaver) { enemy.healthHaver.IsVulnerable = false; enemy.healthHaver.bossHealthBar = HealthHaver.BossBarType.None; enemy.healthHaver.EndBossState(false); } if (enemy.aiAnimator) { enemy.aiAnimator.PlayUntilCancelled("idle", false, null, -1f, false); } //GameUIBossHealthController bossUI = enemy.GetComponent<GameUIBossHealthController>() }
public void ProjectileHitEnemy(float damage, bool fatal, HealthHaver enemy) { CustomEnemyTagsSystem tags = enemy.gameObject.GetComponent <CustomEnemyTagsSystem>(); if (tags != null && tags.ignoreForGoodMimic == true) { return; } if (enemy != null && enemy.aiActor != null && ((fatal && !enemy.IsBoss) || (enemy.IsBoss && canChangeToBossWeapon))) { int GunID = -1; if (enemy.aiActor.aiShooter != null && enemy.aiActor.aiShooter.CurrentGun != null) { if (SpecialOverrideGuns.ContainsKey(enemy.aiActor.EnemyGuid)) { GunID = SpecialOverrideGuns[enemy.aiActor.EnemyGuid]; } else { GunID = enemy.aiActor.aiShooter.CurrentGun.PickupObjectId; } } else if (Entries.ContainsKey(enemy.aiActor.EnemyGuid)) { GunID = Entries[enemy.aiActor.EnemyGuid]; } if (GunID > 0) { if (enemy.IsBoss) { canChangeToBossWeapon = false; Invoke("ResetBossWeaponCooldown", 2.5f); } TransformToTargetGunSpecial((PickupObjectDatabase.GetById(GunID) as Gun)); } } }
private IEnumerator DoEnemySpawn(string enemyGuid, IntVector2 position, bool isJammed, bool isDisplaced) { //ETGModConsole.Log("DoEnemySpawn triggered"); yield return(new WaitForSeconds(1f)); try { if (Owner.IsInCombat) { var enemyToSpawn = EnemyDatabase.GetOrLoadByGuid(enemyGuid); Instantiate <GameObject>(EasyVFXDatabase.BloodiedScarfPoofVFX, position.ToVector3(), Quaternion.identity); AIActor TargetActor = AIActor.Spawn(enemyToSpawn, position, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(position), true, AIActor.AwakenAnimationType.Default, true); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); CustomEnemyTagsSystem tags = TargetActor.gameObject.GetOrAddComponent <CustomEnemyTagsSystem>(); tags.isKalibersEyeMinion = true; tags.ignoreForGoodMimic = true; CompanionController orAddComponent = TargetActor.gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(Owner); TargetActor.OverrideHitEnemies = true; TargetActor.CollisionDamage = 0.5f; TargetActor.CollisionDamageTypes |= CoreDamageTypes.Electric; if (isJammed == true) { TargetActor.BecomeBlackPhantom(); } CompanionisedEnemyBulletModifiers companionisedBullets = TargetActor.gameObject.GetOrAddComponent <CompanionisedEnemyBulletModifiers>(); companionisedBullets.jammedDamageMultiplier = 2f; companionisedBullets.TintBullets = true; companionisedBullets.TintColor = ExtendedColours.honeyYellow; companionisedBullets.baseBulletDamage = 10f; companionisedBullets.scaleSpeed = true; companionisedBullets.scaleDamage = true; companionisedBullets.scaleSize = false; companionisedBullets.doPostProcess = false; companionisedBullets.enemyOwner = Owner; TargetActor.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); TargetActor.gameObject.AddComponent <KillOnRoomClear>(); if (isDisplaced) { DisplacedImageController displacedness = TargetActor.gameObject.AddComponent <DisplacedImageController>(); displacedness.Init(); } if (EasyEnemyTypeLists.MultiPhaseEnemies.Contains(TargetActor.EnemyGuid) || EasyEnemyTypeLists.EnemiesWithInvulnerablePhases.Contains(TargetActor.EnemyGuid)) { EraseFromExistenceOnRoomClear destroyTrickyEnemy = TargetActor.gameObject.AddComponent <EraseFromExistenceOnRoomClear>(); destroyTrickyEnemy.Delay = 1f; } TargetActor.IsHarmlessEnemy = true; TargetActor.RegisterOverrideColor(Color.grey, "Ressurection"); TargetActor.IgnoreForRoomClear = true; if (TargetActor.gameObject.GetComponent <SpawnEnemyOnDeath>()) { Destroy(TargetActor.gameObject.GetComponent <SpawnEnemyOnDeath>()); } } } catch (Exception e) { ETGModConsole.Log(e.Message); ETGModConsole.Log(e.StackTrace); } yield break; }
private void DisplacedImageSpawnHook(Action <DisplaceBehavior> orig, DisplaceBehavior sourceBehaviour) { orig(sourceBehaviour); AIActor attkOwner = sourceBehaviour.GetAttackBehaviourOwner(); if (attkOwner != null) { if (attkOwner.GetComponent <CustomEnemyTagsSystem>() != null && attkOwner.GetComponent <CustomEnemyTagsSystem>().isKalibersEyeMinion) { AIActor image = OMITBReflectionHelpers.ReflectGetField <AIActor>(typeof(DisplaceBehavior), "m_image", sourceBehaviour); if (image != null) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(image.specRigidbody, null, false); CustomEnemyTagsSystem tags = image.gameObject.GetOrAddComponent <CustomEnemyTagsSystem>(); tags.isKalibersEyeMinion = true; tags.ignoreForGoodMimic = true; if (attkOwner.CompanionOwner != null) { CompanionController orAddComponent = image.gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(attkOwner.CompanionOwner); } image.OverrideHitEnemies = true; image.CollisionDamage = 0.5f; image.CollisionDamageTypes |= CoreDamageTypes.Electric; CompanionisedEnemyBulletModifiers companionisedBullets = image.gameObject.GetOrAddComponent <CompanionisedEnemyBulletModifiers>(); companionisedBullets.jammedDamageMultiplier = 2f; companionisedBullets.TintBullets = true; companionisedBullets.TintColor = ExtendedColours.honeyYellow; companionisedBullets.baseBulletDamage = 10f; companionisedBullets.scaleSpeed = true; companionisedBullets.scaleDamage = true; companionisedBullets.scaleSize = false; companionisedBullets.doPostProcess = false; if (attkOwner.CompanionOwner != null) { companionisedBullets.enemyOwner = attkOwner.CompanionOwner; } image.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); image.gameObject.AddComponent <KillOnRoomClear>(); if (EasyEnemyTypeLists.MultiPhaseEnemies.Contains(image.EnemyGuid) || EasyEnemyTypeLists.EnemiesWithInvulnerablePhases.Contains(image.EnemyGuid)) { EraseFromExistenceOnRoomClear destroyTrickyEnemy = image.gameObject.AddComponent <EraseFromExistenceOnRoomClear>(); destroyTrickyEnemy.Delay = 1f; } image.IsHarmlessEnemy = true; image.RegisterOverrideColor(Color.grey, "Ressurection"); image.IgnoreForRoomClear = true; if (image.gameObject.GetComponent <SpawnEnemyOnDeath>()) { UnityEngine.Object.Destroy(image.gameObject.GetComponent <SpawnEnemyOnDeath>()); } } } } }