Example #1
0
        static bool Prefix()
        {
            ulong worldtime = GameManager.Instance.World.GetWorldTime();

            if (worldtime % 500 == 0)
            {
                enemyCountEnum = EnumUtils.Parse <EnumGameStats>("EnemyCount");
                int enemycount = GameStats.GetInt(enemyCountEnum);
                int entities = 0, npc = 0;
                if (enemycount * 1.1 >= maxzombies)
                {
                    Debug.LogWarning("EnemyCount: " + enemycount);
                    Debug.LogWarning("Maxspawn: " + maxzombies);
                    Debug.LogWarning("Attempting to clear biome entities...");
                    for (int i = 0; i < GameManager.Instance.World.Entities.list.Count; i++)
                    {
                        EntityAlive entityalive = GameManager.Instance.World.Entities.list[i] as EntityAlive;
                        if (entityalive.GetSpawnerSource() == EnumSpawnerSource.Biome && (entityalive is EntityZombie || entityalive is EntityEnemyAnimal))
                        {
                            entityalive.MarkToUnload();
                            entities++;
                        }
                    }
                    if ((enemycount - entities) * 1.1 >= maxzombies)
                    {
                        Debug.LogWarning("Entity amount still too high.\n Attempting to clear all hostile entities but sleepers...");
                        for (int i = 0; i < GameManager.Instance.World.Entities.list.Count; i++)
                        {
                            EntityAlive entityalive = GameManager.Instance.World.Entities.list[i] as EntityAlive;
                            if ((entityalive is EntityZombie || entityalive is EntityEnemyAnimal) && !entityalive.IsSleeping)
                            {
                                entityalive.MarkToUnload();
                                entities++;
                            }
                        }
                    }
                    if ((enemycount - entities) * 1.1 >= maxzombies)
                    {
                        Debug.LogError("Severe entity amounts.\n Attempting to clear all entities...");
                        for (int i = 0; i < GameManager.Instance.World.Entities.list.Count; i++)
                        {
                            EntityAlive entityalive = GameManager.Instance.World.Entities.list[i] as EntityAlive;
                            if (!(entityalive is EntityNPC))
                            {
                                entityalive.MarkToUnload();
                                entities++;
                            }
                        }
                    }
                    if ((enemycount - entities) * 1.1 >= maxzombies)
                    {
                        Debug.LogError("Severe entity amounts.\n Attempting to clear all NPC entities...");
                        for (int i = 0; i < GameManager.Instance.World.Entities.list.Count; i++)
                        {
                            EntityAlive entityalive = GameManager.Instance.World.Entities.list[i] as EntityAlive;
                            if (entityalive is EntityNPC)
                            {
                                entityalive.MarkToUnload();
                                entities++;
                                npc++;
                            }
                        }
                    }
                    if (entities != 0)
                    {
                        Debug.Log("Unloaded " + entities + " entities");
                    }
                    if (npc != 0)
                    {
                        Debug.LogWarning("Unloaded " + npc + " NPCs");
                    }
                }
            }
            return(true);
        }