示例#1
0
        protected override void OnPickup(PlayerController player)
        {
            WeightedGameObject item = new WeightedGameObject
            {
                pickupId                = Lacon2.Lacon2ID,
                weight                  = 0f,
                rawGameObject           = ETGMod.Databases.Items["LaCon Mk.2"].gameObject,
                forceDuplicatesPossible = false
            };
            bool flag = player.HasPickupID(Lacon1.Lacon1ID);

            if (flag)
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Remove(item);
            }
            WeightedGameObject item1 = new WeightedGameObject
            {
                pickupId                = Lacon3.Lacon3ID,
                weight                  = 0f,
                rawGameObject           = ETGMod.Databases.Items["LaCon Mk.3"].gameObject,
                forceDuplicatesPossible = false
            };
            bool a = player.HasPickupID(Lacon1.Lacon1ID);

            if (a)
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Remove(item1);
            }
            WeightedGameObject item2 = new WeightedGameObject
            {
                pickupId                = Lacon4.Lacon4ID,
                weight                  = 0f,
                rawGameObject           = ETGMod.Databases.Items["LaCon Mk.4"].gameObject,
                forceDuplicatesPossible = false
            };
            bool b = player.HasPickupID(Lacon1.Lacon1ID);

            if (b)
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Remove(item2);
            }
            WeightedGameObject item3 = new WeightedGameObject
            {
                pickupId                = Lacon5.Lacon5ID,
                weight                  = 0f,
                rawGameObject           = ETGMod.Databases.Items["LaCon Mk.5"].gameObject,
                forceDuplicatesPossible = false
            };
            bool br = player.HasPickupID(Lacon1.Lacon1ID);

            if (br)
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Remove(item3);
            }
            base.OnPickup(player);
        }
示例#2
0
        public static WeightedGameObject FindWeightedGameObjectInCollection(this WeightedGameObjectCollection collection, PickupObject po)
        {
            WeightedGameObject go = collection.FindWeightedGameObjectInCollection(po.PickupObjectId);

            if (go == null)
            {
                go = collection.FindWeightedGameObjectInCollection(po.gameObject);
            }
            return(go);
        }
示例#3
0
 /// <summary>
 /// Disposes all breach shop hooks, removes all added items from shop tables and nulls shop tables
 /// </summary>
 public static void Unload()
 {
     if (!m_loaded)
     {
         return;
     }
     if (baseShopAddedItems != null)
     {
         for (int i = 0; i < baseShopAddedItems.Keys.Count; i++)
         {
             WeightedGameObjectCollection collection = baseShopAddedItems.Keys.ToList()[i];
             if (collection != null && baseShopAddedItems[collection] != null)
             {
                 for (int j = 0; j < baseShopAddedItems[collection].Count; j++)
                 {
                     WeightedGameObject wgo = baseShopAddedItems[collection][j];
                     if (wgo != null && collection.elements.Contains(wgo))
                     {
                         collection.elements.Remove(wgo);
                     }
                 }
             }
         }
         baseShopAddedItems.Clear();
         baseShopAddedItems = null;
     }
     if (metaShopAddedTiers != null)
     {
         for (int i = 0; i < metaShopAddedTiers.Count; i++)
         {
             MetaShopTier tier = metaShopAddedTiers[i];
             if (tier != null && BaseMetaShopController.metaShopTiers.Contains(tier))
             {
                 BaseMetaShopController.metaShopTiers.Remove(tier);
             }
         }
         metaShopAddedTiers.Clear();
         metaShopAddedTiers = null;
     }
     BaseMetaShopController = null;
     TrorcMetaShopItems     = null;
     GooptonMetaShopItems   = null;
     DougMetaShopItems      = null;
     pickupObjectEncounterableHook?.Dispose();
     baseShopSetupHook?.Dispose();
     metaShopSetupHook?.Dispose();
     metaShopCurrentTierHook?.Dispose();
     metaShopProximateTierHook?.Dispose();
     m_loaded = false;
 }
示例#4
0
        public static void RemovePickupFromLootTables(this PickupObject po)
        {
            WeightedGameObject go1 = GameManager.Instance.RewardManager.GunsLootTable.defaultItemDrops.FindWeightedGameObjectInCollection(po);

            if (go1 != null)
            {
                GameManager.Instance.RewardManager.GunsLootTable.defaultItemDrops.elements.Remove(go1);
            }
            WeightedGameObject go2 = GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.FindWeightedGameObjectInCollection(po);

            if (go2 != null)
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Remove(go2);
            }
        }
示例#5
0
        public override void Pickup(PlayerController player)
        {
            base.Pickup(player);
            WeightedGameObject Object1 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Dragun Wing"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Dragun Wing"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object2 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Dragun Claw"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Dragun Claw"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object3 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Dragun Skull"].PickupObjectId,
                weight                  = 1.8f,
                rawGameObject           = ETGMod.Databases.Items["Dragun Skull"].gameObject,
                forceDuplicatesPossible = false
            };

            if (!player.HasPickupID(ETGMod.Databases.Items["Dragun Wing"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object1);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Dragun Claw"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object2);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Dragun Skull"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object3);
            }
            this.m_fireImmunity = new DamageTypeModifier();
            this.m_fireImmunity.damageMultiplier = 0f;
            this.m_fireImmunity.damageType       = CoreDamageTypes.Fire;
            player.healthHaver.damageTypeModifiers.Add(this.m_fireImmunity);
            player.OnReceivedDamage += this.FireBurst;
            if (player.HasPickupID(ETGMod.Databases.Items["Dragun Skull"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Dragun Wing"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Dragun Claw"].PickupObjectId) && !player.HasPickupID(ETGMod.Databases.Items["spirit_of_the_dragun"].PickupObjectId))
            {
                AkSoundEngine.PostEvent("Play_VO_dragun_death_01", gameObject);
                player.inventory.AddGunToInventory((ETGMod.Databases.Items["spirit_of_the_dragun"] as Gun), true);
            }
        }
示例#6
0
 private static void RegisterBaseShopControllerAddedItem(WeightedGameObject obj, WeightedGameObjectCollection collection)
 {
     if (baseShopAddedItems == null)
     {
         baseShopAddedItems = new Dictionary <WeightedGameObjectCollection, List <WeightedGameObject> >();
     }
     if (!baseShopAddedItems.ContainsKey(collection))
     {
         baseShopAddedItems.Add(collection, new List <WeightedGameObject>());
     }
     if (baseShopAddedItems[collection] == null)
     {
         baseShopAddedItems[collection] = new List <WeightedGameObject>();
     }
     baseShopAddedItems[collection].Add(obj);
 }
示例#7
0
        private static void SpawnChests(RoomHandler r)//, Chest chest)
        {
            Chest chest = new Chest();

            chest = GameManager.Instance.RewardManager.A_Chest;
            WeightedGameObject wGameObject = new WeightedGameObject();

            wGameObject.rawGameObject = chest.gameObject;
            WeightedGameObjectCollection wGameObjectCollection = new WeightedGameObjectCollection();

            wGameObjectCollection.Add(wGameObject);

            Chest spawnedChest = GameManager.Instance.RewardManager.SpawnTotallyRandomChest(r.GetBestRewardLocation(new IntVector2(2, 1), Dungeonator.RoomHandler.RewardLocationStyle.PlayerCenter, true));

            spawnedChest.ForceUnlock();
            spawnedChest.overrideMimicChance = 0f;
        }
示例#8
0
        protected override void OnPickup(PlayerController player)
        {
            WeightedGameObject item = new WeightedGameObject
            {
                pickupId                = Death.DeathID,
                weight                  = 1.33f,
                rawGameObject           = ETGMod.Databases.Items["Death"].gameObject,
                forceDuplicatesPossible = false
            };
            bool flag = !player.HasPickupID(Death.DeathID);

            if (flag)
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(item);
            }
            base.OnPickup(player);
        }
示例#9
0
        public override void Pickup(PlayerController player)
        {
            base.Pickup(player);
            WeightedGameObject Object1 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Dragun Wing"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Dragun Wing"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object2 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Dragun Claw"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Dragun Claw"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object3 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Dragun Heart"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Dragun Heart"].gameObject,
                forceDuplicatesPossible = false
            };

            if (!player.HasPickupID(ETGMod.Databases.Items["Dragun Wing"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object1);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Dragun Claw"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object2);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Dragun Heart"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object3);
            }
            player.OnPreFireProjectileModifier = (Func <Gun, Projectile, Projectile>)Delegate.Combine(player.OnPreFireProjectileModifier, new Func <Gun, Projectile, Projectile>(this.HandlePreFireProjectileModification));
            if (player.HasPickupID(ETGMod.Databases.Items["Dragun Heart"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Dragun Wing"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Dragun Claw"].PickupObjectId) && !player.HasPickupID(ETGMod.Databases.Items["spirit_of_the_dragun"].PickupObjectId))
            {
                AkSoundEngine.PostEvent("Play_VO_dragun_death_01", gameObject);
                player.inventory.AddGunToInventory((ETGMod.Databases.Items["spirit_of_the_dragun"] as Gun), true);
            }
        }
示例#10
0
        public override void Pickup(PlayerController player)
        {
            base.Pickup(player);
            player.OnKilledEnemy += this.OnKill;
            WeightedGameObject Object1 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Dragun Heart"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Dragun Heart"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object2 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Dragun Claw"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Dragun Claw"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object3 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Dragun Skull"].PickupObjectId,
                weight                  = 1.8f,
                rawGameObject           = ETGMod.Databases.Items["Dragun Skull"].gameObject,
                forceDuplicatesPossible = false
            };

            if (!player.HasPickupID(ETGMod.Databases.Items["Dragun Heart"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object1);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Dragun Claw"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object2);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Dragun Skull"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object3);
            }
            if (player.HasPickupID(ETGMod.Databases.Items["Dragun Heart"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Dragun Skull"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Dragun Claw"].PickupObjectId) && !player.HasPickupID(ETGMod.Databases.Items["spirit_of_the_dragun"].PickupObjectId))
            {
                AkSoundEngine.PostEvent("Play_VO_dragun_death_01", gameObject);
                player.inventory.AddGunToInventory((ETGMod.Databases.Items["spirit_of_the_dragun"] as Gun), true);
            }
        }
示例#11
0
        public override void Pickup(PlayerController player)
        {
            player.OnEnteredCombat = (Action)Delegate.Combine(player.OnEnteredCombat, new Action(this.MarkEnemies));
            WeightedGameObject Object1 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Primal Saltpeter"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Primal Saltpeter"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object2 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Primal Charcoal"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Primal Charcoal"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object3 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Primal Nitric Acid"].PickupObjectId,
                weight                  = 1.8f,
                rawGameObject           = ETGMod.Databases.Items["Primal Nitric Acid"].gameObject,
                forceDuplicatesPossible = false
            };

            if (!player.HasPickupID(ETGMod.Databases.Items["Primal Saltpeter"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object1);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Primal Charcoal"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object2);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Primal Nitric Acid"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object3);
            }
            if (player.HasPickupID(ETGMod.Databases.Items["Primal Saltpeter"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Primal Nitric Acid"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Primal Charcoal"].PickupObjectId) && !player.HasPickupID(ETGMod.Databases.Items["True Gunpowder"].PickupObjectId))
            {
                LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(ETGMod.Databases.Items["True Gunpowder"].PickupObjectId).gameObject, player);
            }
            base.Pickup(player);
        }
示例#12
0
        public override void Pickup(PlayerController player)
        {
            player.OnReloadedGun += DustCloud;
            WeightedGameObject Object1 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Primal Sulfur"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Primal Sulfur"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object2 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Primal Saltpeter"].PickupObjectId,
                weight                  = 1.7f,
                rawGameObject           = ETGMod.Databases.Items["Primal Saltpeter"].gameObject,
                forceDuplicatesPossible = false
            };
            WeightedGameObject Object3 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Primal Nitric Acid"].PickupObjectId,
                weight                  = 1.8f,
                rawGameObject           = ETGMod.Databases.Items["Primal Nitric Acid"].gameObject,
                forceDuplicatesPossible = false
            };

            if (!player.HasPickupID(ETGMod.Databases.Items["Primal Sulfur"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object1);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Primal Saltpeter"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object2);
            }
            if (!player.HasPickupID(ETGMod.Databases.Items["Primal Nitric Acid"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object3);
            }
            if (player.HasPickupID(ETGMod.Databases.Items["Primal Saltpeter"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Primal Nitric Acid"].PickupObjectId) && player.HasPickupID(ETGMod.Databases.Items["Primal Sulfur"].PickupObjectId) && !player.HasPickupID(ETGMod.Databases.Items["True Gunpowder"].PickupObjectId))
            {
                LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(ETGMod.Databases.Items["True Gunpowder"].PickupObjectId).gameObject, player);
            }
            base.Pickup(player);
        }
        protected override void OnPickup(GameActor owner)
        {
            PlayerController   player  = this.gun.CurrentOwner as PlayerController;
            WeightedGameObject Object1 = new WeightedGameObject
            {
                pickupId                = ETGMod.Databases.Items["Mozambique"].PickupObjectId,
                weight                  = 1.8f,
                rawGameObject           = ETGMod.Databases.Items["Mozambique"].gameObject,
                forceDuplicatesPossible = false,
            };

            if (!player.HasPickupID(ETGMod.Databases.Items["Mozambique"].PickupObjectId))
            {
                GameManager.Instance.RewardManager.ItemsLootTable.defaultItemDrops.elements.Add(Object1);
            }
            if (this.Player != null && this.Player.CharacterUsesRandomGuns)
            {
                this.gun.LoseAmmo(1);
                this.Player.ChangeToRandomGun();
            }
            base.OnPickup(owner);
        }
        public void TeleportToGlitchRoom()
        {
            try {
                PlayerController primaryPlayer   = GameManager.Instance.PrimaryPlayer;
                PlayerController secondaryPlayer = GameManager.Instance.SecondaryPlayer;
                Dungeon          dungeon         = GameManager.Instance.Dungeon;

                ChaosRoomRandomizer roomRandomizer = new ChaosRoomRandomizer();

                int SelectedRoomIndex       = UnityEngine.Random.Range(0, roomRandomizer.MasterRoomArray.Length);
                int SelectedCombatRoomIndex = UnityEngine.Random.Range(0, ChaosPrefabs.CustomRoomTable.includedRooms.elements.Count);

                if (BraveUtility.RandomBool())
                {
                    SelectedPrototypeDungeonRoom = Instantiate(roomRandomizer.MasterRoomArray[SelectedRoomIndex]);
                }
                else
                {
                    SelectedPrototypeDungeonRoom = Instantiate(ChaosPrefabs.CustomRoomTable.includedRooms.elements[SelectedCombatRoomIndex].room);
                }
                Destroy(roomRandomizer);
                // roomRandomizer = null;

                if (SelectedPrototypeDungeonRoom == null)
                {
                    Invoke("TentacleRelease", 1f);
                    Invoke("TentacleShowPlayer", 1.45f);
                    Invoke("Unfreeze", 2f);
                    return;
                }

                if (SelectedPrototypeDungeonRoom.category == PrototypeDungeonRoom.RoomCategory.SECRET)
                {
                    SelectedPrototypeDungeonRoom.category = PrototypeDungeonRoom.RoomCategory.NORMAL;
                }

                SelectedPrototypeDungeonRoom.name = ("Glitched " + SelectedPrototypeDungeonRoom.name);

                GlitchRoom = ChaosUtility.Instance.AddCustomRuntimeRoom(SelectedPrototypeDungeonRoom);

                // Spawn Rainbow chest. This room doesn't spawn NPC it seems.(unless player hasn't unlocked it yet? Not likely. Most would have unlocked this one by now)
                if (GlitchRoom.GetRoomName().ToLower().EndsWith("earlymetashopcell"))
                {
                    IntVector2         SpecialChestLocation = new IntVector2(10, 14);
                    WeightedGameObject wChestObject         = new WeightedGameObject();
                    Chest RainbowChest = GameManager.Instance.RewardManager.Rainbow_Chest;
                    wChestObject.rawGameObject = RainbowChest.gameObject;
                    WeightedGameObjectCollection wChestObjectCollection = new WeightedGameObjectCollection();
                    wChestObjectCollection.Add(wChestObject);
                    Chest PlacableChest = GlitchRoom.SpawnRoomRewardChest(wChestObjectCollection, (SpecialChestLocation + GlitchRoom.area.basePosition));
                }

                primaryPlayer.EscapeRoom(PlayerController.EscapeSealedRoomStyle.TELEPORTER, true, GlitchRoom);
                primaryPlayer.WarpFollowersToPlayer();
                Invoke("TentacleRelease", 1f);
                Invoke("TentacleShowPlayer", 1.45f);
                Invoke("Unfreeze", 2f);

                if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER)
                {
                    GameManager.Instance.GetOtherPlayer(secondaryPlayer).ReuniteWithOtherPlayer(primaryPlayer, false);
                }
            } catch (Exception ex) {
                if (ChaosConsole.debugMimicFlag)
                {
                    ETGModConsole.Log("[DEBUG] Error! Exception occured while attempting to generate glitch room!", false);
                    ETGModConsole.Log(ex.Message, false);
                    ETGModConsole.Log(ex.Source, false);
                    ETGModConsole.Log(ex.StackTrace, false);
                    ETGModConsole.Log(ex.TargetSite.ToString(), false);
                    Debug.LogException(ex);
                }
                Invoke("TentacleRelease", 1f);
                Invoke("TentacleShowPlayer", 1.45f);
                Invoke("Unfreeze", 2f);
                return;
            }
            return;
        }
示例#15
0
    void SpawnChest(string[] args)
    {
        if (!ArgCount(args, 1, 2))
        {
            return;
        }
        Dungeonator.RoomHandler currentRoom = GameManager.Instance.PrimaryPlayer.CurrentRoom;
        Chest  chest;
        bool   glitched = false;
        string name     = args[0].ToLower();

        switch (name)
        {
        case "brown":
        case "d":
            chest = GameManager.Instance.RewardManager.D_Chest;
            break;

        case "blue":
        case "c":
            chest = GameManager.Instance.RewardManager.C_Chest;
            break;

        case "green":
        case "b":
            chest = GameManager.Instance.RewardManager.B_Chest;
            break;

        case "red":
        case "a":
            chest = GameManager.Instance.RewardManager.A_Chest;
            break;

        case "black":
        case "s":
            chest = GameManager.Instance.RewardManager.S_Chest;
            break;

        case "rainbow":
        case "r":
            chest = GameManager.Instance.RewardManager.Rainbow_Chest;
            break;

        case "glitched":
        case "g":
            chest    = GameManager.Instance.RewardManager.B_Chest;
            glitched = true;
            break;

        default:
            Log("Chest type " + args[0] + " doesn't exist! Valid types: brown, blue, green, red, black, rainbow");
            return;
        }
        WeightedGameObject wGameObject = new WeightedGameObject();

        wGameObject.rawGameObject = chest.gameObject;
        WeightedGameObjectCollection wGameObjectCollection = new WeightedGameObjectCollection();

        wGameObjectCollection.Add(wGameObject);
        int   count           = 1;
        float origMimicChance = chest.overrideMimicChance;

        chest.overrideMimicChance = 0f;
        if (args.Length > 1)
        {
            bool success = int.TryParse(args[1], out count);
            if (!success)
            {
                Log("Second argument must be an integer (number)");
                return;
            }
        }
        for (int i = 0; i < count; i++)
        {
            Chest spawnedChest = currentRoom.SpawnRoomRewardChest(wGameObjectCollection, currentRoom.GetBestRewardLocation(new IntVector2(2, 1), Dungeonator.RoomHandler.RewardLocationStyle.PlayerCenter, true));
            spawnedChest.ForceUnlock();
            if (glitched)
            {
                spawnedChest.BecomeGlitchChest();
            }
        }
        chest.overrideMimicChance = origMimicChance;
    }
示例#16
0
        private void SpawnObjects(GameObject[] selectedObjects)
        {
            ObjectPrefabSpawnCount = selectedObjects.Length;
            if (ObjectPrefabSpawnCount < 0 | selectedObjects == null)
            {
                if (ExpandSettings.debugMode)
                {
                    ETGModConsole.Log("[DEBUG] ERROR: Object array is empty or null! Nothing to spawn!");
                }
                return;
            }
            IntVector2 pos = specRigidbody.UnitCenter.ToIntVector2(VectorConversions.Floor);

            if (aiActor.IsFalling && !allowSpawnOverPit)
            {
                return;
            }
            if (GameManager.Instance.Dungeon.CellIsPit(specRigidbody.UnitCenter.ToVector3ZUp(0f)) && !allowSpawnOverPit)
            {
                return;
            }
            RoomHandler roomFromPosition     = GameManager.Instance.Dungeon.GetRoomFromPosition(pos);
            List <SpeculativeRigidbody> list = new List <SpeculativeRigidbody>();

            list.Add(specRigidbody);
            Vector2 unitBottomLeft = specRigidbody.UnitBottomLeft;

            for (int i = 0; i < ObjectPrefabSpawnCount; i++)
            {
                if (objectsToSpawn == null)
                {
                    return;
                }
                GameObject SelectedObject = selectedObjects[i];
                if (spawnRatCorpse)
                {
                    SelectedObject = ExpandPrefabs.RatCorpseNPC;
                }
                GameObject SpawnedObject = null;
                if (!usesExternalObjectArray)
                {
                    if (spawnRatCorpse)
                    {
                        SpawnedObject = Instantiate(SelectedObject, (specRigidbody.GetUnitCenter(ColliderType.HitBox) - new Vector2(0.6f, 0.6f)).ToVector3ZUp(), Quaternion.identity);
                    }
                    else if (SelectedObject.GetComponent <Chest>() != null)
                    {
                        if (GameManager.Instance.Dungeon.GetRoomFromPosition(aiActor.transform.PositionVector2().ToIntVector2()) != null)
                        {
                            // RoomHandler currentRoom = aiActor.GetAbsoluteParentRoom();
                            RoomHandler        currentRoom  = GameManager.Instance.Dungeon.GetRoomFromPosition(aiActor.transform.PositionVector2().ToIntVector2());
                            Chest              TruthChest   = SelectedObject.GetComponent <Chest>();
                            WeightedGameObject wChestObject = new WeightedGameObject();
                            wChestObject.rawGameObject = SelectedObject;
                            WeightedGameObjectCollection wChestObjectCollection = new WeightedGameObjectCollection();
                            wChestObjectCollection.Add(wChestObject);
                            Chest PlacedTruthChest = currentRoom.SpawnRoomRewardChest(wChestObjectCollection, aiActor.transform.PositionVector2().ToIntVector2());
                            SpawnedObject = PlacedTruthChest.gameObject;
                        }
                    }
                    else
                    {
                        SpawnedObject = Instantiate(SelectedObject, specRigidbody.UnitCenter.ToIntVector2(VectorConversions.Floor).ToVector3(), Quaternion.identity);
                    }
                    if (SpawnedObject == null)
                    {
                        return;
                    }
                }

                if (SpawnedObject == null)
                {
                    return;
                }

                if (ExpandSettings.debugMode)
                {
                    ETGModConsole.Log("About to Spawn an object after death.");
                    ETGModConsole.Log("Object: " + SpawnedObject.name);
                    ETGModConsole.Log("AIActor:" + aiActor.GetActorName());
                }

                float RandomIntervalFloat       = UnityEngine.Random.Range(0.02f, 0.06f);
                float RandomDispFloat           = UnityEngine.Random.Range(0.1f, 0.16f);
                float RandomDispIntensityFloat  = UnityEngine.Random.Range(0.1f, 0.4f);
                float RandomColorProbFloat      = UnityEngine.Random.Range(0.05f, 0.2f);
                float RandomColorIntensityFloat = UnityEngine.Random.Range(0.1f, 0.25f);

                if (!spawnRatCorpse)
                {
                    if (SpawnedObject.GetComponent <tk2dBaseSprite>() != null)
                    {
                        ExpandShaders.Instance.ApplyGlitchShader(SpawnedObject.GetComponent <tk2dBaseSprite>(), true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorProbFloat);
                    }
                    else if (SpawnedObject.GetComponentInChildren <tk2dBaseSprite>() != null && SpawnedObject.GetComponent <Chest>() == null)
                    {
                        ExpandShaders.Instance.ApplyGlitchShader(SpawnedObject.GetComponentInChildren <tk2dBaseSprite>(), true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorProbFloat);
                    }
                }
                if (SpawnedObject != null)
                {
                    if (!usesExternalObjectArray && SpawnedObject.GetComponent <MysteryMimicManController>() != null)
                    {
                        Destroy(SpawnedObject.GetComponent <MysteryMimicManController>());
                    }

                    if (!usesExternalObjectArray && SpawnedObject.GetComponent <TalkDoerLite>() != null)
                    {
                        TalkDoerLite talkdoerComponent = SpawnedObject.GetComponent <TalkDoerLite>();
                        talkdoerComponent.SpeaksGleepGlorpenese = true;
                        talkdoerComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(talkdoerComponent);
                        if (SpawnedObject.name == ExpandPrefabs.RatCorpseNPC.name && !usesExternalObjectArray)
                        {
                            talkdoerComponent.transform.position.XY().GetAbsoluteRoom().TransferInteractableOwnershipToDungeon(talkdoerComponent);
                        }
                        else if (spawnRatCorpse)
                        {
                            talkdoerComponent.transform.position.XY().GetAbsoluteRoom().TransferInteractableOwnershipToDungeon(talkdoerComponent);
                        }
                        if (SpawnedObject.name.StartsWith(ExpandPrefabs.RatCorpseNPC.name))
                        {
                            talkdoerComponent.playmakerFsm.SetState("Set Mode");
                            // ExpandUtility.AddHealthHaver(talkdoerComponent.gameObject, 60, flashesOnDamage: false, exploderSpawnsItem: ratCorpseSpawnsItemOnExplosion);
                            ExpandUtility.GenerateHealthHaver(talkdoerComponent.gameObject, 60, flashesOnDamage: false, exploderSpawnsItem: ratCorpseSpawnsItemOnExplosion, isCorruptedObject: false, isRatNPC: true);
                            if (ratCorpseSpawnsKey)
                            {
                                HealthHaver ratCorpseHealthHaver = talkdoerComponent.gameObject.GetComponent <HealthHaver>();
                                ratCorpseHealthHaver.gameObject.AddComponent <ExpandSpawnGlitchObjectOnDeath>();
                                ExpandSpawnGlitchObjectOnDeath ratCorpseObjectSpawnOnDeath = ratCorpseHealthHaver.gameObject.GetComponent <ExpandSpawnGlitchObjectOnDeath>();
                                ratCorpseObjectSpawnOnDeath.spawnRatKey = true;
                            }
                        }
                    }

                    if (!usesExternalObjectArray && SpawnedObject.GetComponentInChildren <KickableObject>() != null && SpawnedObject.GetComponent <TalkDoerLite>() == null)
                    {
                        KickableObject kickableObjectComponent = SpawnedObject.GetComponentInChildren <KickableObject>();
                        kickableObjectComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(kickableObjectComponent);
                        kickableObjectComponent.ConfigureOnPlacement(kickableObjectComponent.transform.position.XY().GetAbsoluteRoom());
                    }

                    if (!usesExternalObjectArray && SpawnedObject.GetComponent <FlippableCover>() != null)
                    {
                        FlippableCover tableComponent = SpawnedObject.GetComponent <FlippableCover>();
                        tableComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(tableComponent);
                        tableComponent.ConfigureOnPlacement(tableComponent.transform.position.XY().GetAbsoluteRoom());
                        SpawnedObject.AddComponent <ExpandKickableObject>();
                        ExpandKickableObject chaosKickableComponent = SpawnedObject.GetComponent <ExpandKickableObject>();
                        chaosKickableComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(chaosKickableComponent);
                    }

                    if (!usesExternalObjectArray && SpawnedObject.GetComponent <NoteDoer>() != null)
                    {
                        NoteDoer noteComponent = SpawnedObject.GetComponent <NoteDoer>();
                        noteComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(noteComponent);
                        noteComponent.alreadyLocalized     = true;
                        noteComponent.useAdditionalStrings = false;
                        noteComponent.stringKey            = ("Here lies " + aiActor.GetActorName() + "\nHe was annoying anyways....");
                    }

                    /*if (!usesExternalObjectArray && SpawnedObject.GetComponent<HeartDispenser>() != null) {
                     *  HeartDispenser heartDispenserComponent = SpawnedObject.GetComponent<HeartDispenser>();
                     *  heartDispenserComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(heartDispenserComponent);
                     * }*/

                    if (SpawnedObject.GetComponentInChildren <SpeculativeRigidbody>() != null &&
                        SpawnedObject.GetComponentInChildren <KickableObject>() == null &&
                        SpawnedObject.GetComponent <TrapController>() == null &&
                        SpawnedObject.GetComponent <FlippableCover>() == null &&
                        SpawnedObject.GetComponent <Chest>() == null &&
                        SelectedObject.name != "NPC_ResourcefulRat_Beaten" &&
                        !usesExternalObjectArray)
                    {
                        SpeculativeRigidbody SpawnedObjectRigidBody = SpawnedObject.GetComponentInChildren <SpeculativeRigidbody>();
                        SpawnedObjectRigidBody.PrimaryPixelCollider.Enabled = false;
                        SpawnedObjectRigidBody.HitboxPixelCollider.Enabled  = false;
                        SpawnedObjectRigidBody.CollideWithOthers            = false;
                    }
                }

                if (SpawnedObject.GetComponentInChildren <SpeculativeRigidbody>() != null && SpawnedObject.name.ToLower().StartsWith("Table"))
                {
                    try {
                        SpeculativeRigidbody objectSpecRigidBody = SpawnedObject.GetComponentInChildren <SpeculativeRigidbody>();
                        objectSpecRigidBody.Initialize();
                        Vector2 a      = unitBottomLeft - (objectSpecRigidBody.UnitBottomLeft - SpawnedObject.transform.position.XY());
                        Vector2 vector = a + new Vector2(Mathf.Max(0f, specRigidbody.UnitDimensions.x - objectSpecRigidBody.UnitDimensions.x), 0f);
                        SpawnedObject.transform.position = Vector2.Lerp(a, vector, (ObjectPrefabSpawnCount != 1) ? i / (ObjectPrefabSpawnCount - 1f) : 0f);
                        objectSpecRigidBody.Reinitialize();
                        a      -= new Vector2(PhysicsEngine.PixelToUnit(extraPixelWidth), 0f);
                        vector += new Vector2(PhysicsEngine.PixelToUnit(extraPixelWidth), 0f);
                        Vector2       a2            = Vector2.Lerp(a, vector, (ObjectPrefabSpawnCount != 1) ? i / (ObjectPrefabSpawnCount - 1f) : 0.5f);
                        IntVector2    intVector     = PhysicsEngine.UnitToPixel(a2 - SpawnedObject.transform.position.XY());
                        CollisionData collisionData = null;
                        if (PhysicsEngine.Instance.RigidbodyCastWithIgnores(objectSpecRigidBody, intVector, out collisionData, true, true, null, false, list.ToArray()))
                        {
                            intVector = collisionData.NewPixelsToMove;
                        }
                        CollisionData.Pool.Free(ref collisionData);
                        SpawnedObject.transform.position += PhysicsEngine.PixelToUnit(intVector).ToVector3ZUp(1f);
                        objectSpecRigidBody.Reinitialize();
                        list.Add(objectSpecRigidBody);
                    } catch (Exception ex) {
                        if (ExpandSettings.debugMode)
                        {
                            ETGModConsole.Log("[DEBUG]: Warning: Exception caught while setting up rigid body settings in ChaosSpawnGlitchedObjectONDeath!");
                            Debug.Log("Warning: Exception caught while setting up rigid body settings in ChaosSpawnGlitchedObjectONDeath!");
                            Debug.LogException(ex);
                        }
                    }
                }
            }
            if (list.Count > 0)
            {
                for (int j = 0; j < list.Count; j++)
                {
                    for (int k = 0; k < list.Count; k++)
                    {
                        if (j != k)
                        {
                            list[j].RegisterGhostCollisionException(list[k]);
                        }
                    }
                }
            }
        }