public static void DropEnemy(string[] _enemyguid)
        {   //method used for debugging, not used in regular settings
            int count = EnemyDatabase.Instance.Entries.Count;

            ETGModConsole.Log(string.Format("There are : {0} in Database", count.ToString()));
            bool re = false;

            ETGModConsole.Log("Removing: " + _enemyguid[0] + " from database");

            for (int i = 0; i < count; i++)
            {
                EnemyDatabaseEntry enemyDatabaseEntry = EnemyDatabase.Instance.Entries[i];

                if (enemyDatabaseEntry != null && enemyDatabaseEntry.myGuid == _enemyguid[0])

                {
                    ETGModConsole.Log("Found: " + _enemyguid[0] + " in database");
                    EnemyDatabase.Instance.Entries.Remove(enemyDatabaseEntry);
                    ETGModConsole.Log("Removed: " + _enemyguid[0] + " from database");
                    re = true;
                    break;
                }
            }

            if (re == false)
            {
                ETGModConsole.Log(_enemyguid[0] + " Not found in database");
            }
        }
Esempio n. 2
0
        public static void AddEnemyToDatabase(GameObject EnemyPrefab, string EnemyGUID, bool isInBossTab = false, bool IsNormalEnemy = true, bool AddToMTGSpawnPool = true)
        {
            EnemyDatabaseEntry item = new EnemyDatabaseEntry
            {
                myGuid          = EnemyGUID,
                placeableWidth  = 2,
                placeableHeight = 2,
                isNormalEnemy   = IsNormalEnemy,
                path            = EnemyGUID,
                isInBossTab     = isInBossTab,
                encounterGuid   = EnemyGUID
            };

            EnemyDatabase.Instance.Entries.Add(item);
            SpecialResources.resources.Add(EnemyGUID, EnemyPrefab);
            EncounterDatabaseEntry encounterDatabaseEntry = new EncounterDatabaseEntry(EnemyPrefab.GetComponent <AIActor>().encounterTrackable)
            {
                path   = EnemyGUID,
                myGuid = EnemyPrefab.GetComponent <AIActor>().encounterTrackable.EncounterGuid
            };

            EncounterDatabase.Instance.Entries.Add(encounterDatabaseEntry);
            if (AddToMTGSpawnPool && !string.IsNullOrEmpty(EnemyPrefab.GetComponent <AIActor>().ActorName))
            {
                string EnemyName = "spapi:" + EnemyPrefab.GetComponent <AIActor>().ActorName.Replace(" ", "_").Replace("(", "_").Replace(")", string.Empty).ToLower();
                if (!Game.Enemies.ContainsID(EnemyName))
                {
                    Game.Enemies.Add(EnemyName, EnemyPrefab.GetComponent <AIActor>());
                }
            }
        }
Esempio n. 3
0
        // Token: 0x060000BF RID: 191 RVA: 0x000087B8 File Offset: 0x000069B8
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize)
        {
            bool       flag = CompanionBuilder.companionDictionary.ContainsKey(guid);
            GameObject result;

            if (flag)
            {
                ETGModConsole.Log("CompanionBuilder: Tried to create two companion prefabs with the same GUID!", false);
                result = null;
            }
            else
            {
                GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(CompanionBuilder.behaviorSpeculatorPrefab);
                gameObject.name = name;
                tk2dSprite component = SpriteBuilder.SpriteFromResource(defaultSpritePath, gameObject, false).GetComponent <tk2dSprite>();
                component.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = false;
                gameObject.AddComponent <tk2dSpriteAnimator>();
                gameObject.AddComponent <AIAnimator>();
                HealthHaver healthHaver = gameObject.AddComponent <HealthHaver>();
                healthHaver.RegisterBodySprite(component, false, 0);
                healthHaver.PreventAllDamage = true;
                healthHaver.SetHealthMaximum(15000f, null, false);
                healthHaver.FullHeal();
                AIActor aiactor = gameObject.AddComponent <AIActor>();
                aiactor.State     = AIActor.ActorState.Normal;
                aiactor.EnemyGuid = guid;
                BehaviorSpeculator component2 = gameObject.GetComponent <BehaviorSpeculator>();
                component2.MovementBehaviors = new List <MovementBehaviorBase>();
                component2.AttackBehaviors   = new List <AttackBehaviorBase>();
                component2.TargetBehaviors   = new List <TargetBehaviorBase>();
                component2.OverrideBehaviors = new List <OverrideBehaviorBase>();
                component2.OtherBehaviors    = new List <BehaviorBase>();
                EnemyDatabaseEntry item = new EnemyDatabaseEntry
                {
                    myGuid          = guid,
                    placeableWidth  = 2,
                    placeableHeight = 2,
                    isNormalEnemy   = false
                };
                EnemyDatabase.Instance.Entries.Add(item);
                CompanionBuilder.companionDictionary.Add(guid, gameObject);
                UnityEngine.Object.DontDestroyOnLoad(gameObject);
                FakePrefab.MarkAsFakePrefab(gameObject);
                gameObject.SetActive(false);
                result = gameObject;
            }
            return(result);
        }
Esempio n. 4
0
        public static void EnemyDatabaseChecker()
        {
            int count = EnemyDatabase.Instance.Entries.Count;

            ETGModConsole.Log(string.Format("There are : {0} in Database", count.ToString()));
            //bool flag = false;
            //bool flag_prefabActor = false;

            Debug.Log("[RANDOMIZER] Start EnemyDatabase");

            for (int i = 0; i < count; i++)
            {
                EnemyDatabaseEntry enemyDatabaseEntry = EnemyDatabase.Instance.Entries[i];

                if (enemyDatabaseEntry != null)
                //if (enemyDatabaseEntry != null && enemyDatabaseEntry.name.Equals(_name[0], StringComparison.OrdinalIgnoreCase))
                {
                    string enemyGuid = enemyDatabaseEntry.myGuid;
                    if (EnemyDatabase.GetOrLoadByGuid(enemyGuid) != null)
                    {
                        AIActor prefabActor = EnemyDatabase.GetOrLoadByGuid(enemyGuid);
                        if (prefabActor.healthHaver != null)
                        {
                            HealthHaver health = prefabActor.healthHaver;
                            Debug.Log(string.Format("{0}: {1} NormalEnemy: {2}, Boss: {3}, SubBoss{4} ", enemyGuid, prefabActor.ActorName, prefabActor.IsNormalEnemy, health.IsBoss, health.IsSubboss));
                        }
                        else
                        {
                            Debug.Log(string.Format("{0}: No HealthHaver Found!!!, {1} NormalEnemy: {2}", enemyGuid, prefabActor.ActorName, prefabActor.IsNormalEnemy));
                        }
                    }
                    else
                    {
                        Debug.Log(string.Format("{0}: No PrefabActorFound!!!", enemyGuid));
                        //flag_prefabActor = true;
                    }
                }
            }
            Debug.Log("[RANDOMIZER] End EnemyDatabase");
        }
Esempio n. 5
0
        public static void AddEnemyToDatabase(GameObject EnemyPrefab, string EnemyGUID)
        {
            EnemyDatabaseEntry item = new EnemyDatabaseEntry
            {
                myGuid          = EnemyGUID,
                placeableWidth  = 2,
                placeableHeight = 2,
                isNormalEnemy   = true,
                path            = EnemyGUID,
                isInBossTab     = false,
                encounterGuid   = EnemyGUID
            };

            EnemyDatabase.Instance.Entries.Add(item);
            EncounterDatabaseEntry encounterDatabaseEntry = new EncounterDatabaseEntry(EnemyPrefab.GetComponent <AIActor>().encounterTrackable)
            {
                path   = EnemyGUID,
                myGuid = EnemyPrefab.GetComponent <AIActor>().encounterTrackable.EncounterGuid
            };

            EncounterDatabase.Instance.Entries.Add(encounterDatabaseEntry);
        }
Esempio n. 6
0
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize)
        {
            if (CompanionBuilder.companionDictionary.ContainsKey(guid))
            {
                ETGModConsole.Log("CompanionBuilder: Tried to create two companion prefabs with the same GUID!");
                return(null);
            }
            var prefab = GameObject.Instantiate(behaviorSpeculatorPrefab);

            prefab.name = name;

            //setup misc components
            var sprite = SpriteBuilder.SpriteFromResource(defaultSpritePath, prefab).GetComponent <tk2dSprite>();

            sprite.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = false;
            prefab.AddComponent <tk2dSpriteAnimator>();
            prefab.AddComponent <AIAnimator>();


            //setup health haver
            var healthHaver = prefab.AddComponent <HealthHaver>();

            healthHaver.RegisterBodySprite(sprite);
            healthHaver.PreventAllDamage = true;
            healthHaver.SetHealthMaximum(15000);
            healthHaver.FullHeal();

            //setup AI Actor
            var aiActor = prefab.AddComponent <AIActor>();

            aiActor.State     = AIActor.ActorState.Normal;
            aiActor.EnemyGuid = guid;

            //setup behavior speculator
            var bs = prefab.GetComponent <BehaviorSpeculator>();

            bs.MovementBehaviors = new List <MovementBehaviorBase>();
            bs.AttackBehaviors   = new List <AttackBehaviorBase>();
            bs.TargetBehaviors   = new List <TargetBehaviorBase>();
            bs.OverrideBehaviors = new List <OverrideBehaviorBase>();
            bs.OtherBehaviors    = new List <BehaviorBase>();

            //Add to enemy database
            EnemyDatabaseEntry enemyDatabaseEntry = new EnemyDatabaseEntry()
            {
                myGuid          = guid,
                placeableWidth  = 2,
                placeableHeight = 2,
                isNormalEnemy   = false
            };

            EnemyDatabase.Instance.Entries.Add(enemyDatabaseEntry);
            CompanionBuilder.companionDictionary.Add(guid, prefab);


            //finalize
            GameObject.DontDestroyOnLoad(prefab);
            FakePrefab.MarkAsFakePrefab(prefab);
            prefab.SetActive(false);

            return(prefab);
        }
Esempio n. 7
0
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize, bool HasAiShooter, bool UsesAttackGroup = false)
        {
            if (BossBuilder.Dictionary.ContainsKey(guid))
            {
                ETGModConsole.Log("BossBuilder: Yea something went wrong. Complain to Neighborino about it.");
                return(null);
            }
            var prefab = GameObject.Instantiate(behaviorSpeculatorPrefab);

            prefab.name = name;

            //setup misc components
            var sprite = SpriteBuilder.SpriteFromResource(defaultSpritePath, prefab).GetComponent <tk2dSprite>();

            sprite.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = true;
            prefab.AddComponent <tk2dSpriteAnimator>();
            prefab.AddComponent <AIAnimator>();
            PickupObject item = PickupObjectDatabase.GetById(291);
            //setup knockback
            var knockback = prefab.AddComponent <KnockbackDoer>();

            knockback.weight = 1;
            SpriteBuilder.AddSpriteToCollection("FrostAndGunfireItems/Resources/roomimic_bosscard", SpriteBuilder.ammonomiconCollection);



            //setup health haver
            var healthHaver = prefab.AddComponent <HealthHaver>();

            healthHaver.RegisterBodySprite(sprite);
            healthHaver.PreventAllDamage = false;
            healthHaver.SetHealthMaximum(15000);
            healthHaver.FullHeal();


            //setup AI Actor
            var aiActor = prefab.AddComponent <AIActor>();

            aiActor.State     = AIActor.ActorState.Normal;
            aiActor.EnemyGuid = guid;
            aiActor.HasShadow = false;

            //setup behavior speculator
            var bs = prefab.GetComponent <BehaviorSpeculator>();

            bs.MovementBehaviors = new List <MovementBehaviorBase>();
            bs.TargetBehaviors   = new List <TargetBehaviorBase>();
            bs.OverrideBehaviors = new List <OverrideBehaviorBase>();
            bs.OtherBehaviors    = new List <BehaviorBase>();
            bs.AttackBehaviorGroup.AttackBehaviors = new List <AttackBehaviorGroup.AttackGroupItem>();
            if (HasAiShooter)
            {
                var actor = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5");
                behaviorSpeculatorPrefab = GameObject.Instantiate(actor.gameObject);
                foreach (Transform child in behaviorSpeculatorPrefab.transform)
                {
                    if (child != behaviorSpeculatorPrefab.transform)
                    {
                        GameObject.DestroyImmediate(child);
                    }
                }

                foreach (var comp in behaviorSpeculatorPrefab.GetComponents <Component>())
                {
                    if (comp.GetType() != typeof(BehaviorSpeculator))
                    {
                        GameObject.DestroyImmediate(comp);
                    }
                }

                GameObject.DontDestroyOnLoad(behaviorSpeculatorPrefab);
                FakePrefab.MarkAsFakePrefab(behaviorSpeculatorPrefab);
                behaviorSpeculatorPrefab.SetActive(false);
            }
            else
            {
                AIBulletBank aibulletBank = prefab.AddComponent <AIBulletBank>();
            }

            //Add to enemy database
            EnemyDatabaseEntry enemyDatabaseEntry = new EnemyDatabaseEntry
            {
                myGuid          = guid,
                placeableWidth  = 2,
                placeableHeight = 2,
                isNormalEnemy   = true,
                path            = guid,
                isInBossTab     = true,
                encounterGuid   = guid,
            };

            EnemyDatabase.Instance.Entries.Add(enemyDatabaseEntry);
            BossBuilder.Dictionary.Add(guid, prefab);
            //finalize
            GameObject.DontDestroyOnLoad(prefab);
            FakePrefab.MarkAsFakePrefab(prefab);
            prefab.SetActive(false);

            return(prefab);
        }
Esempio n. 8
0
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize, bool HasAiShooter, bool UsesAttackGroup = false)
        {
            if (HasAiShooter)
            {
                var actor = EnemyDatabase.GetOrLoadByGuid("3cadf10c489b461f9fb8814abc1a09c1");
                behaviorSpeculatorPrefab = GameObject.Instantiate(actor.gameObject);
                foreach (Transform child in behaviorSpeculatorPrefab.transform)
                {
                    if (child != behaviorSpeculatorPrefab.transform)
                    {
                        GameObject.DestroyImmediate(child);
                    }
                }
                foreach (var comp in behaviorSpeculatorPrefab.GetComponents <Component>())
                {
                    if (comp.GetType() != typeof(BehaviorSpeculator))
                    {
                        GameObject.DestroyImmediate(comp);
                    }
                }
                GameObject.DontDestroyOnLoad(behaviorSpeculatorPrefab);
                FakePrefab.MarkAsFakePrefab(behaviorSpeculatorPrefab);
                behaviorSpeculatorPrefab.SetActive(false);
            }
            if (EnemyBuilder.Dictionary.ContainsKey(guid))
            {
                ETGModConsole.Log("EnemyBuilder: Yea something went wrong. Complain to Neighborino about it.");
                return(null);
            }
            var prefab = GameObject.Instantiate(behaviorSpeculatorPrefab);

            prefab.name = name;

            //setup misc components
            var sprite = SpriteBuilder.SpriteFromResource(defaultSpritePath, prefab).GetComponent <tk2dSprite>();

            sprite.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = true;
            prefab.AddComponent <tk2dSpriteAnimator>();
            prefab.AddComponent <AIAnimator>();

            //setup knockback
            var knockback = prefab.AddComponent <KnockbackDoer>();

            knockback.weight = 1;

            //setup health haver
            var healthHaver = prefab.AddComponent <HealthHaver>();

            healthHaver.RegisterBodySprite(sprite);
            healthHaver.PreventAllDamage = false;
            healthHaver.SetHealthMaximum(15000);
            healthHaver.FullHeal();

            //setup AI Actor
            var aiActor = prefab.AddComponent <AIActor>();

            aiActor.State            = AIActor.ActorState.Normal;
            aiActor.EnemyGuid        = guid;
            aiActor.CanTargetPlayers = true;
            aiActor.HasShadow        = false;
            aiActor.specRigidbody.CollideWithOthers  = true;
            aiActor.specRigidbody.CollideWithTileMap = true;
            aiActor.specRigidbody.PixelColliders.Clear();
            aiActor.specRigidbody.PixelColliders.Add(new PixelCollider

            {
                ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                CollisionLayer         = CollisionLayer.EnemyCollider,
                IsTrigger = false,
                BagleUseFirstFrameOnly = false,
                SpecifyBagelFrame      = string.Empty,
                BagelColliderNumber    = 0,
                ManualOffsetX          = 0,
                ManualOffsetY          = 0,
                ManualWidth            = 15,
                ManualHeight           = 17,
                ManualDiameter         = 0,
                ManualLeftX            = 0,
                ManualLeftY            = 0,
                ManualRightX           = 0,
                ManualRightY           = 0
            });
            aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
            {
                ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                CollisionLayer         = CollisionLayer.EnemyHitBox,
                IsTrigger = false,
                BagleUseFirstFrameOnly = false,
                SpecifyBagelFrame      = string.Empty,
                BagelColliderNumber    = 0,
                ManualOffsetX          = 0,
                ManualOffsetY          = 0,
                ManualWidth            = 15,
                ManualHeight           = 17,
                ManualDiameter         = 0,
                ManualLeftX            = 0,
                ManualLeftY            = 0,
                ManualRightX           = 0,
                ManualRightY           = 0,
            });
            aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").CorpseObject;
            aiActor.PreventBlackPhantom = false;
            //setup behavior speculator
            var bs = prefab.GetComponent <BehaviorSpeculator>();

            prefab.AddComponent <Tint>();
            bs.MovementBehaviors = new List <MovementBehaviorBase>();
            bs.TargetBehaviors   = new List <TargetBehaviorBase>();
            bs.OverrideBehaviors = new List <OverrideBehaviorBase>();
            bs.OtherBehaviors    = new List <BehaviorBase>();
            if (UsesAttackGroup)
            {
                bs.AttackBehaviorGroup.AttackBehaviors = new List <AttackBehaviorGroup.AttackGroupItem>();
            }
            else
            {
                bs.AttackBehaviors = new List <AttackBehaviorBase>();
            }
            //allows enemies to be tinted
            prefab.AddComponent <AIBulletBank>();
            //Add to enemy database
            EnemyDatabaseEntry enemyDatabaseEntry = new EnemyDatabaseEntry()
            {
                myGuid          = guid,
                placeableWidth  = 2,
                placeableHeight = 2,
                isNormalEnemy   = true
            };

            EnemyDatabase.Instance.Entries.Add(enemyDatabaseEntry);
            EnemyBuilder.Dictionary.Add(guid, prefab);
            //finalize
            GameObject.DontDestroyOnLoad(prefab);
            FakePrefab.MarkAsFakePrefab(prefab);
            prefab.SetActive(false);

            return(prefab);
        }
        public static void Create_Databases()
        {
            for (int i = 0; i < EnemyDatabase.Instance.Entries.Count(); i++)
            {
                EnemyDatabaseEntry EnemyDatabaseEntry = EnemyDatabase.Instance.Entries[i];
                string             enemyGuid          = EnemyDatabaseEntry.myGuid;

                if (!RemoveEnemyDatabase.Contains(enemyGuid))
                {
                    try
                    {
                        AIActor prefabActor = EnemyDatabase.GetOrLoadByGuid(enemyGuid);


                        if (prefabActor.healthHaver.IsBoss | prefabActor.healthHaver.IsSubboss)
                        {
                            BossOnlyDatabase.Add(enemyGuid);
                        }


                        if (prefabActor.IsNormalEnemy && prefabActor.IsWorthShootingAt && prefabActor.CanTargetPlayers && prefabActor.healthHaver.CanCurrentlyBeKilled && !prefabActor.IsMimicEnemy &&
                            !prefabActor.IgnoreForRoomClear && !prefabActor.IsHarmlessEnemy)
                        {
                            BossRoomAllEnemies.Add(enemyGuid);
                        }

                        if (prefabActor.IsNormalEnemy && !prefabActor.healthHaver.IsBoss && !prefabActor.healthHaver.IsSubboss)
                        {
                            ClearOnlyDatabase_NoBosses.Add(enemyGuid);
                        }

                        if (prefabActor.IsNormalEnemy && prefabActor.IsWorthShootingAt && prefabActor.CanTargetPlayers && prefabActor.healthHaver.CanCurrentlyBeKilled && !prefabActor.IsMimicEnemy &&
                            !prefabActor.IgnoreForRoomClear && !prefabActor.IsHarmlessEnemy && !prefabActor.healthHaver.IsBoss && !prefabActor.healthHaver.IsSubboss)
                        {
                            BossRoomRegularEnemiesOnly.Add(enemyGuid);
                        }

                        if (prefabActor.IsHarmlessEnemy)
                        {
                            HarmlessEnemyDatabase.Add(enemyGuid);
                        }


                        All_Database.Add(enemyGuid);
                    }

                    catch
                    {
                        Debug.Log("Error in loading to database: " + enemyGuid);
                        throw;
                    }
                }
            }

            SpecificEnemyDatabase.Add("0d3f7c641557426fbac8596b61c9fb45"); //lord_of_the_jammed
            SpecificEnemyDatabase.Add("5d045744405d4438b371eb5ed3e2cdb2"); //bishop
            SpecificEnemyDatabase.Add("ce2d2a0dced0444fb751b262ec6af08a"); //DrWolf
            SpecificEnemyDatabase.Add("640238ba85dd4e94b3d6f68888e6ecb8"); //robocop
            SpecificEnemyDatabase.Add("e456b66ed3664a4cb590eab3a8ff3814"); //babygood mimic
            SpecificEnemyDatabase.Add("5fa8c86a65234b538cd022f726af2aea"); //bulletman
            SpecificEnemyDatabase.Add("998807b57e454f00a63d67883fcf90d6"); //turret

            SpecificEnemyDatabase.Add("6450d20137994881aff0ddd13e3d40c8"); //mimic
            SpecificEnemyDatabase.Add("abfb454340294a0992f4173d6e5898a8"); //mimic
            SpecificEnemyDatabase.Add("ac9d345575444c9a8d11b799e8719be0"); //mimic
            SpecificEnemyDatabase.Add("d8fd592b184b4ac9a3be217bc70912a2"); //mimic
            SpecificEnemyDatabase.Add("d8d651e3484f471ba8a2daa4bf535ce6"); //mimic
            SpecificEnemyDatabase.Add("2ebf8ef6728648089babb507dec4edb7"); //mimic
            SpecificEnemyDatabase.Add("796a7ed4ad804984859088fc91672c7f"); //mimic


            for (int i = 0; i < SpecificEnemyDatabase.Count; i++)
            {
                RemovefromBossRoomDatabase.Add(SpecificEnemyDatabase[i]);
            }

            RemovefromBossRoomDatabase.Add("3e98ccecf7334ff2800188c417e67c15"); //killithid
            RemovefromBossRoomDatabase.Add("45192ff6d6cb43ed8f1a874ab6bef316"); //misfirebeast
            RemovefromBossRoomDatabase.Add("2ccaa1b7ae10457396a1796decda9cf6"); //agunim
            RemovefromBossRoomDatabase.Add("39dca963ae2b4688b016089d926308ab"); //cannon
            RemovefromBossRoomDatabase.Add("0ff278534abb4fbaaa65d3f638003648"); //popcorn
            RemovefromBossRoomDatabase.Add("0d3f7c641557426fbac8596b61c9fb45"); //hollowpoint
            RemovefromBossRoomDatabase.Add("dc3cd41623d447aeba77c77c99598426"); //other worldy terror (marine past)
        }