public void SpawnMaidenRainbowLoot(HealthHaver target) { if (target.healthHaver.IsDead) { return; } int randomTierSelectionNumber = UnityEngine.Random.Range(1, 100); if (randomTierSelectionNumber <= 35) { //Spawn junk or a glass guon stone if (UnityEngine.Random.value > .50f) { //Junk LootEngine.SpawnItem(PickupObjectDatabase.GetById(127).gameObject, target.specRigidbody.UnitCenter, Vector2.zero, 1f, false, true, false); } else { //Glass Guon LootEngine.SpawnItem(PickupObjectDatabase.GetById(565).gameObject, target.specRigidbody.UnitCenter, Vector2.zero, 1f, false, true, false); } } else if (randomTierSelectionNumber <= 67) { //Spawn a Half Heart LootEngine.SpawnHealth(target.specRigidbody.UnitCenter, 1, null); } else if (randomTierSelectionNumber <= 87) { //Spawn a piece of Armour LootEngine.SpawnItem(PickupObjectDatabase.GetById(120).gameObject, target.specRigidbody.UnitCenter, Vector2.zero, 1f, false, true, false); } else if (randomTierSelectionNumber <= 96) { //Spawn a full heart LootEngine.SpawnHealth(target.specRigidbody.UnitCenter, 2, null); } else if (randomTierSelectionNumber <= 100) { //spawn LootEngine.SpawnBowlerNote(GameManager.Instance.RewardManager.BowlerNoteBoss, target.specRigidbody.UnitCenter, target.aiActor.ParentRoom, true); } }
public static void OnPostOpenBullshit(Action <Chest, List <Transform> > orig, Chest self, List <Transform> transrights) { try { List <DebrisObject> list = new List <DebrisObject>(); bool isRainbowRun = GameStatsManager.Instance.IsRainbowRun; Type chesttype = typeof(Chest); FieldInfo _forceDropOkayForRainbowRun = chesttype.GetField("m_forceDropOkayForRainbowRun", BindingFlags.NonPublic | BindingFlags.Instance); if (isRainbowRun && !self.IsRainbowChest && !(bool)_forceDropOkayForRainbowRun.GetValue(self)) { Vector2 a; if (self.spawnTransform != null) { a = self.spawnTransform.position; } else { Bounds bounds = self.sprite.GetBounds(); a = self.transform.position + bounds.extents; } FieldInfo _room = chesttype.GetField("m_room", BindingFlags.NonPublic | BindingFlags.Instance); LootEngine.SpawnBowlerNote(GameManager.Instance.RewardManager.BowlerNoteChest, a + new Vector2(-0.5f, -2.25f), (RoomHandler)_room.GetValue(self), true); } else { for (int i = 0; i < self.contents.Count; i++) { List <DebrisObject> list2 = LootEngine.SpewLoot(new List <GameObject> { self.contents[i].gameObject }, transrights[i].position); list.AddRange(list2); for (int j = 0; j < list2.Count; j++) { if (list2[j]) { list2[j].PreventFallingInPits = true; } if (!(list2[j].GetComponent <Gun>() != null)) { if (!(list2[j].GetComponent <CurrencyPickup>() != null)) { if (list2[j].specRigidbody != null) { list2[j].specRigidbody.CollideWithOthers = false; DebrisObject debrisObject = list2[j]; MethodInfo _BecomeViableItem = chesttype.GetMethod("BecomeViableItem", BindingFlags.NonPublic | BindingFlags.Instance); debrisObject.OnTouchedGround += (Action <DebrisObject>)_BecomeViableItem.Invoke(self, new object[] { debrisObject }); } } } } } } if (self.IsRainbowChest && isRainbowRun && self.transform.position.GetAbsoluteRoom() == GameManager.Instance.Dungeon.data.Entrance) { MethodInfo _HandleRainbowRunLootProcessing = chesttype.GetMethod("HandleRainbowRunLootProcessing", BindingFlags.NonPublic | BindingFlags.Instance); GameManager.Instance.Dungeon.StartCoroutine((IEnumerator)_HandleRainbowRunLootProcessing.Invoke(self, new object[] { list })); } if (god.ContainsKey(self)) { List <Tuple <int, int> > choices = god[self]; foreach (Tuple <int, int> choice in choices) { DebrisObject firstItem = GetItemFromListByID(list, choice.First); DebrisObject secondItem = GetItemFromListByID(list, choice.Second); if (firstItem && secondItem) { GameManager.Instance.Dungeon.StartCoroutine(ItemChoiceCoroutine(firstItem, secondItem)); } } } } catch (Exception error) { ETGModConsole.Log(error.ToString()); } }
public static void CurseRoomRewardMethod(Action <RoomHandler> orig, RoomHandler self) { bool harderlotj = JammedSquire.NoHarderLotJ; if (harderlotj) { orig(self); } else { orig(self); FloorRewardData currentRewardData = GameManager.Instance.RewardManager.CurrentRewardData; LootEngine.AmmoDropType ammoDropType = LootEngine.AmmoDropType.DEFAULT_AMMO; bool flag = LootEngine.DoAmmoClipCheck(currentRewardData, out ammoDropType); string path = (ammoDropType != LootEngine.AmmoDropType.SPREAD_AMMO) ? "Ammo_Pickup" : "Ammo_Pickup_Spread"; float value = UnityEngine.Random.value; float num = currentRewardData.ChestSystem_ChestChanceLowerBound; //float num2 = GameManager.Instance.PrimaryPlayer.stats.GetStatValue(PlayerStats.StatType.Coolness) / 100f; float num3 = (GameManager.Instance.PrimaryPlayer.stats.GetStatValue(PlayerStats.StatType.Curse) / 250f); if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { num3 += GameManager.Instance.SecondaryPlayer.stats.GetStatValue(PlayerStats.StatType.Curse) / 250f; } if (PassiveItem.IsFlagSetAtAll(typeof(ChamberOfEvilItem))) { num3 *= 1.25f; } num = Mathf.Clamp(num + GameManager.Instance.PrimaryPlayer.AdditionalChestSpawnChance, currentRewardData.ChestSystem_ChestChanceLowerBound, currentRewardData.ChestSystem_ChestChanceUpperBound) + num3; bool flag2 = currentRewardData.SingleItemRewardTable != null; bool flag3 = false; float num4 = 0.1f; if (!RoomHandler.HasGivenRoomChestRewardThisRun && MetaInjectionData.ForceEarlyChest) { flag3 = true; } if (flag3) { if (!RoomHandler.HasGivenRoomChestRewardThisRun && (GameManager.Instance.CurrentFloor == 1 || GameManager.Instance.CurrentFloor == -1)) { flag2 = false; num += num4; if (GameManager.Instance.PrimaryPlayer && GameManager.Instance.PrimaryPlayer.NumRoomsCleared > 4) { num = 1f; } } if (!RoomHandler.HasGivenRoomChestRewardThisRun && self.distanceFromEntrance < RoomHandler.NumberOfRoomsToPreventChestSpawning) { GameManager.Instance.Dungeon.InformRoomCleared(false, false); return; } } BraveUtility.Log("Current chest spawn chance: " + num, Color.yellow, BraveUtility.LogVerbosity.IMPORTANT); if (value > num) { if (flag) { IntVector2 bestRewardLocation = self.GetBestRewardLocation(new IntVector2(1, 1), RoomHandler.RewardLocationStyle.CameraCenter, true); LootEngine.SpawnItem((GameObject)BraveResources.Load(path, ".prefab"), bestRewardLocation.ToVector3(), Vector2.up, 1f, true, true, false); } GameManager.Instance.Dungeon.InformRoomCleared(false, false); return; } if (flag2) { float num5 = currentRewardData.PercentOfRoomClearRewardsThatAreChests; if (PassiveItem.IsFlagSetAtAll(typeof(AmazingChestAheadItem))) { num5 *= 2f; num5 = Mathf.Max(0.5f, num5); } flag2 = (UnityEngine.Random.value > num5); } if (flag2) { float num6 = (GameManager.Instance.CurrentGameType != GameManager.GameType.COOP_2_PLAYER) ? GameManager.Instance.RewardManager.SinglePlayerPickupIncrementModifier : GameManager.Instance.RewardManager.CoopPickupIncrementModifier; GameObject gameObject; if (UnityEngine.Random.value < 1f / num6) { gameObject = currentRewardData.SingleItemRewardTable.SelectByWeight(false); } else { gameObject = ((UnityEngine.Random.value >= 0.9f) ? GameManager.Instance.RewardManager.FullHeartPrefab.gameObject : GameManager.Instance.RewardManager.HalfHeartPrefab.gameObject); } UnityEngine.Debug.Log(gameObject.name + "SPAWNED"); DebrisObject debrisObject = LootEngine.SpawnItem(gameObject, self.GetBestRewardLocation(new IntVector2(1, 1), RoomHandler.RewardLocationStyle.CameraCenter, true).ToVector3() + new Vector3(0.25f, 0f, 0f), Vector2.up, 1f, true, true, false); Exploder.DoRadialPush(debrisObject.sprite.WorldCenter.ToVector3ZUp(debrisObject.sprite.WorldCenter.y), 8f, 3f); AkSoundEngine.PostEvent("Play_OBJ_item_spawn_01", debrisObject.gameObject); GameManager.Instance.Dungeon.InformRoomCleared(true, false); } else { IntVector2 bestRewardLocation = self.GetBestRewardLocation(new IntVector2(2, 1), RoomHandler.RewardLocationStyle.CameraCenter, true); bool isRainbowRun = GameStatsManager.Instance.IsRainbowRun; if (isRainbowRun) { LootEngine.SpawnBowlerNote(GameManager.Instance.RewardManager.BowlerNoteChest, bestRewardLocation.ToCenterVector2(), self, true); RoomHandler.HasGivenRoomChestRewardThisRun = true; } else { Chest exists = self.SpawnRoomRewardChest(null, bestRewardLocation); if (exists) { RoomHandler.HasGivenRoomChestRewardThisRun = true; } } GameManager.Instance.Dungeon.InformRoomCleared(true, true); } if (flag) { IntVector2 bestRewardLocation = self.GetBestRewardLocation(new IntVector2(1, 1), RoomHandler.RewardLocationStyle.CameraCenter, true); LootEngine.DelayedSpawnItem(1f, (GameObject)BraveResources.Load(path, ".prefab"), bestRewardLocation.ToVector3() + new Vector3(0.25f, 0f, 0f), Vector2.up, 1f, true, true, false); } } }