예제 #1
0
        private void SkipStage(SceneExitController self)
        {
            /*I actually dont know what this does
             * //self = explicitSceneExitController.GetComponent<SceneExitController>();
             #if DEBUG
             * Chat.AddMessage("Turbo Edition: " + EquipmentName + " getComponent " + self);
             #endif*/
            //CANNOT DO THIS!!!! Throws an exception on ExitStage.State newState!
            //self = new SceneExitController();

            InstanceTracker.Add(self);
#if DEBUG
            Chat.AddMessage("Turbo Edition: " + EquipmentName + " forced stage skip.");
#endif
            //The game does this so lets do too
            if (NetworkServer.active)
            {
                //SceneExitController.ExitState == SceneExitController.ExitState.Idle;
                self.SetState(SceneExitController.ExitState.Idle);
                self.Begin();
            }
            //If we are grabbing an already existing instance from the game thanks to InstanceTracker.FirstOrNull we are deleting that one
            //should be fine since we are leaving the scene though.
            InstanceTracker.Remove(self);
        }
예제 #2
0
 public void OnDisable()
 {
     InstanceTracker.Remove(this);
     foreach (HUD hud in HUD.readOnlyInstanceList)
     {
         SetHudCountdownEnabled(hud, false);
     }
 }
예제 #3
0
 public void OnDisable()
 {
     InstanceTracker.Remove(this);
 }
예제 #4
0
 // Token: 0x06001E57 RID: 7767 RVA: 0x00082E13 File Offset: 0x00081013
 private void OnDisable()
 {
     InstanceTracker.Remove <ProjectileController>(this);
 }
 public void OnDestroy()
 {
     InstanceTracker.Remove(this);
     rigidBodies.Remove(rigidBody);
 }
예제 #6
0
 // Token: 0x060021B8 RID: 8632 RVA: 0x00091E0C File Offset: 0x0009000C
 private void OnDisable()
 {
     InstanceTracker.Remove <ArenaInfoPanel>(this);
 }
예제 #7
0
        private void ModifyDropList(ItemIndex itemIndex, bool add)
        {
            Run      run      = RoR2.Run.instance;
            ItemDef  itemDef  = ItemCatalog.GetItemDef(itemIndex);
            ItemTier itemTier = itemDef.tier;

            if (itemDef.hidden || itemTier == ItemTier.NoTier)
            {
                return;
            }


            var pickupIndex = PickupCatalog.FindPickupIndex(itemIndex);

            bool runHasItem   = run.availableItems.array[(int)itemIndex];
            bool tier1Has     = run.availableTier1DropList.Contains(pickupIndex);
            bool tier2Has     = run.availableTier2DropList.Contains(pickupIndex);
            bool tier3Has     = run.availableTier3DropList.Contains(pickupIndex);
            bool tierBossHas  = run.availableBossDropList.Contains(pickupIndex);
            bool tierLunarHas = run.availableLunarDropList.Contains(pickupIndex);


            if (add)
            {
                if (!runHasItem)
                {
                    //run.availableItems.array[(int)itemIndex] = true;
                    run.availableItems.Add(itemIndex);
                    switch (itemTier)
                    {
                    case ItemTier.Tier1:
                        if (!tier1Has)
                        {
                            run.availableTier1DropList.Add(pickupIndex);
                        }
                        break;

                    case ItemTier.Tier2:
                        if (!tier2Has)
                        {
                            run.availableTier2DropList.Add(pickupIndex);
                        }
                        break;

                    case ItemTier.Tier3:
                        if (!tier3Has)
                        {
                            run.availableTier3DropList.Add(pickupIndex);
                        }
                        break;

                    case ItemTier.Lunar:
                        if (!tierLunarHas)
                        {
                            run.availableLunarDropList.Add(pickupIndex);
                        }
                        break;

                    case ItemTier.Boss:
                        if (!tierBossHas)
                        {
                            run.availableBossDropList.Add(pickupIndex);
                        }
                        break;
                    }
                }
            }
            else
            {
                if (runHasItem)
                {
                    //run.availableItems.array[(int)itemIndex] = false;
                    run.availableItems.Remove(itemIndex);
                    switch (itemTier)
                    {
                    case ItemTier.Tier1:
                        if (tier1Has)
                        {
                            run.availableTier1DropList.Remove(pickupIndex);
                        }
                        break;

                    case ItemTier.Tier2:
                        if (tier2Has)
                        {
                            run.availableTier2DropList.Remove(pickupIndex);
                        }
                        break;

                    case ItemTier.Tier3:
                        if (tier3Has)
                        {
                            run.availableTier3DropList.Remove(pickupIndex);
                        }
                        break;

                    case ItemTier.Lunar:
                        if (tierLunarHas)
                        {
                            run.availableLunarDropList.Remove(pickupIndex);
                        }
                        break;

                    case ItemTier.Boss:
                        if (tierBossHas)
                        {
                            run.availableBossDropList.Remove(pickupIndex);
                        }
                        break;
                    }
                }
            }
            run.BuildDropTable();
            PickupDropTable.RegenerateAll(run);
            bool tier1Available  = ItemTierAvailable(ItemTier.Tier1);
            bool tier2Available  = ItemTierAvailable(ItemTier.Tier2);
            bool tier3Available  = ItemTierAvailable(ItemTier.Tier3);
            bool noTierAvailable = !tier1Available && !tier2Available && !tier3Available;

            //Debug.Log($"Tier Availability: {tier1Available} {tier2Available} {tier3Available}");

            void DestroyAndSpawnGold(GameObject gameObject, int count = 0)
            {
                if (gameObject)
                {
                    GameObject gameObject9 = UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/BonusMoneyPack"), gameObject.transform.position, UnityEngine.Random.rotation);
                    gameObject9.GetComponent <TeamFilter>().teamIndex = TeamIndex.Player;
                    for (int i = 0; i < count; i++)
                    {
                        NetworkServer.Spawn(gameObject9);
                    }
                    Destroy(gameObject);
                }
            }

            void HandleTerminalBehaviors()
            {
                foreach (var shopTerminalBehavior in InstanceTracker.GetInstancesList <ShopTerminalBehavior>())
                {
                    if (noTierAvailable)
                    {
                        if (shopTerminalBehavior.GetComponent <PurchaseInteraction>().Networkavailable)
                        {
                            DestroyAndSpawnGold(shopTerminalBehavior.gameObject, 3);
                        }
                    }
                    else
                    if (shopTerminalBehavior.pickupIndex == pickupIndex)
                    {
                        shopTerminalBehavior.GenerateNewPickupServer();
                        shopTerminalBehavior.UpdatePickupDisplayAndAnimations();
                    }
                }
            }

            HandleTerminalBehaviors();

            void HandleChestBehaviors()
            {
                List <ChestBehavior> chestBehaviorsToRemove = new List <ChestBehavior>();

                foreach (var chestBehavior in InstanceTracker.GetInstancesList <ChestBehavior>())
                {
                    bool notPurchased = chestBehavior.GetComponent <PurchaseInteraction>().Networkavailable;
                    void DestroyGold()
                    {
                        if (notPurchased)
                        {
                            DestroyAndSpawnGold(chestBehavior.gameObject, 1);
                            chestBehaviorsToRemove.Add(chestBehavior);
                        }
                    }

                    if (noTierAvailable)
                    {
                        DestroyGold();
                    }
                    else
                    {
                        chestBehavior.tier1Chance *= (tier1Available ? 1 : 0);
                        chestBehavior.tier2Chance *= (tier2Available ? 1 : 0);
                        chestBehavior.tier3Chance *= (tier3Available ? 1 : 0);

                        var availableItemTiers = new List <ItemTier>();
                        if (chestBehavior.tier1Chance != 0)
                        {
                            availableItemTiers.Add(ItemTier.Tier1);
                        }
                        if (chestBehavior.tier2Chance != 0)
                        {
                            availableItemTiers.Add(ItemTier.Tier2);
                        }
                        if (chestBehavior.tier3Chance != 0)
                        {
                            availableItemTiers.Add(ItemTier.Tier3);
                        }
                        bool itemTagAvailable = chestBehavior.requiredItemTag == ItemTag.Any ? true : Availability.ItemTagAvailable(availableItemTiers.ToArray(), chestBehavior.requiredItemTag);

                        if (!itemTagAvailable || (chestBehavior.tier1Chance == 0 && chestBehavior.tier2Chance == 0 && chestBehavior.tier3Chance == 0))
                        {
                            DestroyGold();
                        }
                        else
                        {
                            if (chestBehavior.dropPickup == pickupIndex)
                            {
                                chestBehavior.Start();
                            }
                        }
                    }
                }
                if (chestBehaviorsToRemove.Count > 0)
                {
                    foreach (var cb in chestBehaviorsToRemove)
                    {
                        if (cb)
                        {
                            InstanceTracker.Remove(cb);
                        }
                    }
                }
            }

            HandleChestBehaviors();
        }
예제 #8
0
 public static void Track_MultiShopCrontroller_Remove(On.RoR2.MultiShopController.orig_OnDestroy orig, MultiShopController self)
 {
     orig(self);
     InstanceTracker.Remove(self);
 }
예제 #9
0
 public void OnDestroy()
 {
     InstanceTracker.Remove(chestBehavior);
 }
예제 #10
0
 public void OnDisable()
 {
     InstanceTracker.Remove(this); Debug.Log("Destroyed Fake User " + name);
 }
예제 #11
0
 public void OnDestroy()
 {
     InstanceTracker.Remove(this);
 }
예제 #12
0
 public void OnDisable()
 {
     InstanceTracker.Remove <MysticsItemsDuplicatorLocator>(this);
 }
예제 #13
0
 private void OnDisable()
 {
     InstanceTracker.Remove(this);
 }
예제 #14
0
 public void OnDisable()
 {
     InstanceTracker.Remove <MysticsItemsRiftChest>(this);
 }