Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
 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());
     }
 }
Esempio n. 3
0
        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);
                }
            }
        }