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); }
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); }
/// <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; }
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); } }
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); } }
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); }
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; }
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); }
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); } }
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); } }
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); }
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; }
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; }
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]); } } } } }