示例#1
0
        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);
            }
        }
示例#2
0
        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));
                }
            }
        }
示例#4
0
        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>());
                        }
                    }
                }
            }
        }