public static void Init(AssetBundle expandSharedAssets1)
        {
            // Master round for Custom Secret Floor via Hollow
            GlitchFloorMasterRound = expandSharedAssets1.LoadAsset <GameObject>("Corrupted Master Round");
            SpriteSerializer.AddSpriteToObject(GlitchFloorMasterRound, ExpandPrefabs.EXItemCollection, "glitchround");

            BasicStatPickup CanyonMasterRoundItem = GlitchFloorMasterRound.AddComponent <BasicStatPickup>();
            string          shortDesc             = "Corrupted Chamber";
            string          longDesc = "This weird artifact indicates mastery of... somewhere";

            ItemBuilder.SetupItem(CanyonMasterRoundItem, shortDesc, longDesc, "ex");
            // CanyonMasterRoundItem.quality = PickupObject.ItemQuality.SPECIAL;
            CanyonMasterRoundItem.quality = PickupObject.ItemQuality.EXCLUDED;
            CanyonMasterRoundItem.ItemSpansBaseQualityTiers      = false;
            CanyonMasterRoundItem.additionalMagnificenceModifier = 0;
            CanyonMasterRoundItem.ItemRespectsHeartMagnificence  = true;
            CanyonMasterRoundItem.associatedItemChanceMods       = new LootModData[0];
            CanyonMasterRoundItem.contentSource             = ContentSource.BASE;
            CanyonMasterRoundItem.ShouldBeExcludedFromShops = false;
            CanyonMasterRoundItem.CanBeDropped = true;
            CanyonMasterRoundItem.PreventStartingOwnerFromDropping = false;
            CanyonMasterRoundItem.PersistsOnDeath            = false;
            CanyonMasterRoundItem.RespawnsIfPitfall          = false;
            CanyonMasterRoundItem.PreventSaveSerialization   = false;
            CanyonMasterRoundItem.IgnoredByRat               = false;
            CanyonMasterRoundItem.SaveFlagToSetOnAcquisition = 0;
            // CanyonMasterRoundItem.ForcedPositionInAmmonomicon = 5;
            CanyonMasterRoundItem.UsesCustomCost             = true;
            CanyonMasterRoundItem.CustomCost                 = 90;
            CanyonMasterRoundItem.CanBeSold                  = true;
            CanyonMasterRoundItem.passiveStatModifiers       = new StatModifier[0];
            CanyonMasterRoundItem.ArmorToGainOnInitialPickup = 0;
            CanyonMasterRoundItem.modifiers                  = new List <StatModifier>()
            {
                new StatModifier()
                {
                    statToBoost   = PlayerStats.StatType.Health,
                    modifyType    = StatModifier.ModifyMethod.ADDITIVE,
                    amount        = 1,
                    isMeatBunBuff = false
                }
            };
            CanyonMasterRoundItem.ArmorToGive                     = 0;
            CanyonMasterRoundItem.ModifiesDodgeRoll               = false;
            CanyonMasterRoundItem.DodgeRollTimeMultiplier         = 0.9f;
            CanyonMasterRoundItem.DodgeRollDistanceMultiplier     = 1.25f;
            CanyonMasterRoundItem.AdditionalInvulnerabilityFrames = 0;
            CanyonMasterRoundItem.IsJunk         = false;
            CanyonMasterRoundItem.GivesCurrency  = false;
            CanyonMasterRoundItem.CurrencyToGive = 0;
            CanyonMasterRoundItem.IsMasteryToken = true;
            GtlichFloorMasterRoundID             = CanyonMasterRoundItem.PickupObjectId;

            ExpandShaders.Instance.ApplyGlitchShader(CanyonMasterRoundItem.sprite);
            CanyonMasterRoundItem.sprite.usesOverrideMaterial = true;
        }
Example #2
0
        //HandleDarkSoulsReset_CR
        //HandleSkullTrigger
        //PassiveItem.Pickup
        //ResetToFactorySettings
        //CoopResurrectInternal
        //HandleCloneEffect
        //TriggerDarkSoulsReset
        //CheckCost
        //ApplyCost
        //BasicStatPickup.Pickup

        public static void BasicStatPickupPickupHook(BasicStatPickup self, PlayerController player)
        {
            FieldInfo _pickedUp        = typeof(BasicStatPickup).GetField("m_pickedUp", BindingFlags.NonPublic | BindingFlags.Instance);
            FieldInfo _pickedUpThisRun = typeof(BasicStatPickup).GetField("m_pickedUpThisRun", BindingFlags.NonPublic | BindingFlags.Instance);

            if ((bool)_pickedUp.GetValue(self))
            {
                return;
            }
            if (self.ArmorToGive > 0 && !(bool)_pickedUpThisRun.GetValue(self))
            {
                player.healthHaver.Armor += (float)self.ArmorToGive;
            }
            else if (!(bool)_pickedUpThisRun.GetValue(self) && self.IsMasteryToken && player.AllowZeroHealthState && player.ForceZeroHealthState)
            {
                player.healthHaver.Armor += 1f;
            }
            if (self.ModifiesDodgeRoll)
            {
                player.rollStats.rollDistanceMultiplier          *= self.DodgeRollDistanceMultiplier;
                player.rollStats.rollTimeMultiplier              *= self.DodgeRollTimeMultiplier;
                player.rollStats.additionalInvulnerabilityFrames += self.AdditionalInvulnerabilityFrames;
            }
            if (!(bool)_pickedUpThisRun.GetValue(self) && self.IsJunk && player.AllowZeroHealthState && player.ForceZeroHealthState)
            {
                StatModifier statModifier = new StatModifier();
                statModifier.statToBoost = PlayerStats.StatType.Damage;
                statModifier.amount      = 0.05f;
                statModifier.modifyType  = StatModifier.ModifyMethod.ADDITIVE;
                player.ownerlessStatModifiers.Add(statModifier);
                player.stats.RecalculateStats(player, false, false);
            }
            if (!(bool)_pickedUpThisRun.GetValue(self) && self.GivesCurrency)
            {
                player.carriedConsumables.Currency += self.CurrencyToGive;
            }
            if (!(bool)_pickedUpThisRun.GetValue(self) && player.AllowZeroHealthState && player.ForceZeroHealthState)
            {
                for (int i = 0; i < self.modifiers.Count; i++)
                {
                    if (self.modifiers[i].statToBoost == PlayerStats.StatType.Health && self.modifiers[i].amount > 0f)
                    {
                        int amountToDrop = Mathf.FloorToInt(self.modifiers[i].amount * (float)UnityEngine.Random.Range(GameManager.Instance.RewardManager.RobotMinCurrencyPerHealthItem, GameManager.Instance.RewardManager.RobotMaxCurrencyPerHealthItem + 1));
                        LootEngine.SpawnCurrency(player.CenterPosition, amountToDrop, false);
                    }
                }
            }
            self.Pickup(player);
        }
 public static void PickupHook(Action <BasicStatPickup, PlayerController> orig, BasicStatPickup self, PlayerController player)
 {
     if (self.IsJunk)
     {
         bool pickedUpThisRun = (bool)(typeof(BasicStatPickup).GetField("m_pickedUpThisRun", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(self));
         bool hasRecycleItem  = false;
         foreach (var item in player.passiveItems)
         {
             if (item is RecycleItem)
             {
                 hasRecycleItem = true;
             }
         }
         if (!pickedUpThisRun && hasRecycleItem)
         {
             StatModifier statModifier = new StatModifier();
             statModifier.statToBoost = PlayerStats.StatType.Damage;
             statModifier.amount      = 0.05f;
             statModifier.modifyType  = StatModifier.ModifyMethod.ADDITIVE;
             player.ownerlessStatModifiers.Add(statModifier);
             player.stats.RecalculateStats(player, false, false);
         }
         self.IsJunk = false;
         orig(self, player);
         self.IsJunk = true;
     }
     else
     {
         orig(self, player);
     }
 }