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; }
//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); } }