private void DupeChest(Chest chest, PlayerController user) { IntVector2 bestRewardLocation = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true); ChestToolbox.ChestTier tier = chest.GetChestTier(); if (tier == ChestToolbox.ChestTier.RAT) { tier = ChestToolbox.ChestTier.RED; } else if (tier == ChestToolbox.ChestTier.TRUTH) { tier = ChestToolbox.ChestTier.BLUE; } ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED; if (chest.IsMimic) { isMimic = ChestToolbox.ThreeStateValue.FORCEYES; } else { isMimic = ChestToolbox.ThreeStateValue.FORCENO; } ChestToolbox.SpawnChestEasy(bestRewardLocation, tier, chest.IsLocked, Chest.GeneralChestType.UNSPECIFIED, isMimic); }
protected override void DoEffect(PlayerController user) { IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); if (!(nearestInteractable is Chest)) { return; } Chest dupeChest = nearestInteractable as Chest; IntVector2 bestRewardLocation = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true); ChestToolbox.ChestTier tier = dupeChest.GetChestTier(); if (tier == ChestToolbox.ChestTier.RAT) { tier = ChestToolbox.ChestTier.RED; } else if (tier == ChestToolbox.ChestTier.TRUTH) { tier = ChestToolbox.ChestTier.BLUE; } ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED; if (dupeChest.IsMimic) { isMimic = ChestToolbox.ThreeStateValue.FORCEYES; } else { isMimic = ChestToolbox.ThreeStateValue.FORCENO; } ChestToolbox.ThreeStateValue isFused = ChestToolbox.ThreeStateValue.UNSPECIFIED; if (dupeChest.GetFuse() != null) { isFused = ChestToolbox.ThreeStateValue.FORCEYES; } else { isFused = ChestToolbox.ThreeStateValue.FORCENO; } Chest spawnedChest = ChestToolbox.SpawnChestEasy(bestRewardLocation, tier, dupeChest.IsLocked, Chest.GeneralChestType.UNSPECIFIED, isMimic, isFused); if (dupeChest.GetComponent <JammedChestBehav>()) { spawnedChest.gameObject.AddComponent <JammedChestBehav>(); } else if (dupeChest.GetComponent <PassedOverForJammedChest>()) { spawnedChest.gameObject.AddComponent <PassedOverForJammedChest>(); } }
private void UpgradeChest(Chest chest, PlayerController user) { ChestToolbox.ChestTier tier = chest.GetChestTier(); ChestToolbox.ChestTier targetTier = ChestToolbox.ChestTier.OTHER; switch (tier) { case ChestToolbox.ChestTier.BROWN: targetTier = ChestToolbox.ChestTier.BLUE; break; case ChestToolbox.ChestTier.BLUE: targetTier = ChestToolbox.ChestTier.GREEN; break; case ChestToolbox.ChestTier.GREEN: targetTier = ChestToolbox.ChestTier.RED; break; case ChestToolbox.ChestTier.RED: targetTier = ChestToolbox.ChestTier.BLACK; break; case ChestToolbox.ChestTier.BLACK: targetTier = ChestToolbox.ChestTier.RAINBOW; break; case ChestToolbox.ChestTier.SYNERGY: targetTier = ChestToolbox.ChestTier.BLACK; break; } ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED; if (chest.IsMimic) { isMimic = ChestToolbox.ThreeStateValue.FORCEYES; } else { isMimic = ChestToolbox.ThreeStateValue.FORCENO; } if (targetTier != ChestToolbox.ChestTier.OTHER) { ChestToolbox.SpawnChestEasy(chest.sprite.WorldBottomLeft.ToIntVector2(), targetTier, chest.IsLocked, Chest.GeneralChestType.UNSPECIFIED, isMimic); } else { GameManager.Instance.RewardManager.SpawnRewardChestAt(chest.sprite.WorldBottomLeft.ToIntVector2()); } user.CurrentRoom.DeregisterInteractable(chest); chest.DeregisterChestOnMinimap(); Destroy(chest.gameObject); }
protected override void DoEffect(PlayerController user) { ChestToolbox.ChestTier chestToSpawn = ChestToolbox.ChestTier.OTHER; switch (MemorisedTier) { case PocketChestTier.BROWN: chestToSpawn = ChestToolbox.ChestTier.BROWN; break; case PocketChestTier.BLUE: chestToSpawn = ChestToolbox.ChestTier.BLUE; break; case PocketChestTier.GREEN: chestToSpawn = ChestToolbox.ChestTier.GREEN; break; case PocketChestTier.RED: chestToSpawn = ChestToolbox.ChestTier.RED; break; case PocketChestTier.BLACK: chestToSpawn = ChestToolbox.ChestTier.BLACK; break; case PocketChestTier.SYNERGY: chestToSpawn = ChestToolbox.ChestTier.SYNERGY; break; case PocketChestTier.RAINBOW: chestToSpawn = ChestToolbox.ChestTier.RAINBOW; break; } if (chestToSpawn != ChestToolbox.ChestTier.OTHER) { IntVector2 bestRewardLocation2 = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true); ChestToolbox.SpawnChestEasy(bestRewardLocation2, chestToSpawn, !(chestToSpawn == ChestToolbox.ChestTier.RAINBOW || chestToSpawn == ChestToolbox.ChestTier.BROWN), Chest.GeneralChestType.UNSPECIFIED); } }
protected override void DoEffect(PlayerController user) { bool hasDeterminedValidFloor = false; if (GameManager.Instance.Dungeon.IsGlitchDungeon) //GLITCHED FLOOR BONUS { IntVector2 bestRewardLocation2 = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true); ChestToolbox.SpawnChestEasy(bestRewardLocation2, ChestToolbox.ChestTier.BLACK, true, Chest.GeneralChestType.UNSPECIFIED); } if (UnityEngine.Random.value <= 0.001f) //RANDOM RARE RAINBOW { IntVector2 bestRewardLocation = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true); ChestToolbox.SpawnChestEasy(bestRewardLocation, ChestToolbox.ChestTier.RAINBOW, false, Chest.GeneralChestType.UNSPECIFIED, ChestToolbox.ThreeStateValue.FORCENO, ChestToolbox.ThreeStateValue.FORCENO); } else { switch (GameManager.Instance.Dungeon.tileIndices.tilesetId) { case GlobalDungeonData.ValidTilesets.CASTLEGEON: //KEEP int pickupID = 224; if (UnityEngine.Random.value <= .50f) { pickupID = 120; } LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(pickupID).gameObject, user); LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(pickupID).gameObject, user); hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.SEWERGEON: //OUBLIETTE for (int i = 0; i < 3; i++) { LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(67).gameObject, user); } hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.JUNGLEGEON: //JUNGLE for (int i = 0; i < 3; i++) { IntVector2 bestRewardLocation = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2); ChestToolbox.SpawnChestEasy(bestRewardLocation, ChestToolbox.ChestTier.BROWN, false, Chest.GeneralChestType.UNSPECIFIED); } hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.GUNGEON: //GUNGEON PROPER for (int i = 0; i < 3; i++) { LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(74).gameObject, user); } hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.CATHEDRALGEON: //ABBEY ChangeStatPermanent(user, PlayerStats.StatType.Health, 2, StatModifier.ModifyMethod.ADDITIVE); ChangeStatPermanent(user, PlayerStats.StatType.Curse, 2, StatModifier.ModifyMethod.ADDITIVE); if (user.characterIdentity == PlayableCharacters.Robot) { LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, user); LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, user); } hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.MINEGEON: //MINES IntVector2 bestRewardLocation2 = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true); ChestToolbox.SpawnChestEasy(bestRewardLocation2, ChestToolbox.ChestTier.RED, false, Chest.GeneralChestType.UNSPECIFIED); hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.RATGEON: //RAT LAIR LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(727).gameObject, user); hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.CATACOMBGEON: // HOLLOW IntVector2 bestRewardLocation3 = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true); Chest spawnedChestRandomHollow = GameManager.Instance.RewardManager.SpawnRewardChestAt(bestRewardLocation3); spawnedChestRandomHollow.RegisterChestOnMinimap(spawnedChestRandomHollow.GetAbsoluteParentRoom()); ChangeStatPermanent(user, PlayerStats.StatType.GlobalPriceMultiplier, 0.8f, StatModifier.ModifyMethod.MULTIPLICATIVE); hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.OFFICEGEON: //R&G DEPT for (int i = 0; i < 2; i++) { IntVector2 bestRewardLocation4 = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2); Chest spawnedChestRNG = GameManager.Instance.RewardManager.SpawnRewardChestAt(bestRewardLocation4); spawnedChestRNG.RegisterChestOnMinimap(spawnedChestRNG.GetAbsoluteParentRoom()); } hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.WESTGEON: //OLD WEST FLOOR (EXPAND) LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(727).gameObject, user); LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(137).gameObject, user); hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.FORGEGEON: //FORGE for (int i = 0; i < 6; i++) { LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, user); } PickupObject itemOfTypeAndQuality = LootEngine.GetItemOfTypeAndQuality <PickupObject>(BraveUtility.RandomElement(BToSItemTiers), GameManager.Instance.RewardManager.GunsLootTable, false); LootEngine.SpawnItem(itemOfTypeAndQuality.gameObject, LastOwner.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false); hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.HELLGEON: //BULLET HELL if (GameManager.IsGunslingerPast) { for (int i = 0; i < 2; i++) { IntVector2 bestRewardLocation5 = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2); ChestToolbox.SpawnChestEasy(bestRewardLocation5, ChestToolbox.ChestTier.BLACK, true, Chest.GeneralChestType.UNSPECIFIED); } ChangeStatPermanent(user, PlayerStats.StatType.Curse, 5, StatModifier.ModifyMethod.ADDITIVE); } else { for (int i = 0; i < 2; i++) { IntVector2 bestRewardLocation4 = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2); Chest randomHellMagChest = GameManager.Instance.RewardManager.SpawnRewardChestAt(bestRewardLocation4); randomHellMagChest.RegisterChestOnMinimap(randomHellMagChest.GetAbsoluteParentRoom()); } for (int i = 0; i < 2; i++) { IntVector2 bestRewardLocation4 = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2); Chest randomHellRandoChest = GameManager.Instance.RewardManager.SpawnTotallyRandomChest(bestRewardLocation4); randomHellRandoChest.RegisterChestOnMinimap(randomHellRandoChest.GetAbsoluteParentRoom()); } ChangeStatPermanent(user, PlayerStats.StatType.Curse, 3, StatModifier.ModifyMethod.ADDITIVE); } hasDeterminedValidFloor = true; break; case GlobalDungeonData.ValidTilesets.BELLYGEON: //BELLY ChangeStatPermanent(user, PlayerStats.StatType.Health, 1, StatModifier.ModifyMethod.ADDITIVE); user.healthHaver.ApplyHealing(100f); if (user.characterIdentity == PlayableCharacters.Robot) { for (int i = 0; i < 5; i++) { LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, user); } } hasDeterminedValidFloor = true; break; } //-----------------------------------------DEFAULT CATCH EFFECT if (!hasDeterminedValidFloor) { LootEngine.SpawnItem(PickupObjectDatabase.GetById(127).gameObject, user.specRigidbody.UnitCenter, Vector2.zero, 1f, false, true, false); } } }
public static void Accept(PlayerController player, GameObject shrine) { if (player.characterIdentity == PlayableCharacters.Robot) { player.healthHaver.Armor -= 2; } else { StatModifier HP = new StatModifier { statToBoost = PlayerStats.StatType.Health, amount = -1f, modifyType = StatModifier.ModifyMethod.ADDITIVE }; player.ownerlessStatModifiers.Add(HP); player.stats.RecalculateStats(player); } foreach (Chest chest in GetAllChests()) { ChestToolbox.ChestTier targetTier = ChestToolbox.ChestTier.OTHER; ChestToolbox.ChestTier curTier = chest.GetChestTier(); switch (curTier) { case ChestToolbox.ChestTier.BROWN: targetTier = ChestToolbox.ChestTier.BLUE; break; case ChestToolbox.ChestTier.BLUE: targetTier = ChestToolbox.ChestTier.GREEN; break; case ChestToolbox.ChestTier.GREEN: if (UnityEngine.Random.value <= 0.75f) { targetTier = ChestToolbox.ChestTier.RED; } else { targetTier = ChestToolbox.ChestTier.SYNERGY; } break; case ChestToolbox.ChestTier.RED: targetTier = ChestToolbox.ChestTier.BLACK; break; case ChestToolbox.ChestTier.BLACK: if (UnityEngine.Random.value <= 0.05f) { targetTier = ChestToolbox.ChestTier.RAINBOW; } else { chest.ForceUnlock(); } break; case ChestToolbox.ChestTier.SYNERGY: if (UnityEngine.Random.value <= 0.5f) { targetTier = ChestToolbox.ChestTier.RED; } else { targetTier = ChestToolbox.ChestTier.BLACK; } break; } ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED; if (chest.IsMimic) { isMimic = ChestToolbox.ThreeStateValue.FORCEYES; } else { isMimic = ChestToolbox.ThreeStateValue.FORCENO; } if (targetTier != ChestToolbox.ChestTier.OTHER) { Chest newChest = ChestToolbox.SpawnChestEasy(chest.sprite.WorldBottomLeft.ToIntVector2(), targetTier, chest.IsLocked, chest.ChestType, isMimic, ChestToolbox.ThreeStateValue.FORCENO); if (chest.GetComponent <JammedChestBehav>()) { newChest.gameObject.AddComponent <JammedChestBehav>(); } player.CurrentRoom.DeregisterInteractable(chest); chest.DeregisterChestOnMinimap(); UnityEngine.Object.Destroy(chest.gameObject); } shrine.GetComponent <CustomShrineController>().numUses++; GameUIRoot.Instance.notificationController.DoCustomNotification( "Kliklok's Blessing", "Chests Upgraded", ShrineFactory.ShrineIconCollection, spriteId, UINotificationController.NotificationColor.SILVER, true, false ); AkSoundEngine.PostEvent("Play_OBJ_shrine_accept_01", shrine); } }