// Token: 0x06001009 RID: 4105 RVA: 0x00050060 File Offset: 0x0004E260 public void UsePotion() { ProcChainMask procChainMask = default(ProcChainMask); procChainMask.AddProc(ProcType.LunarPotionActivation); this.Heal(this.potionReserve, procChainMask, true); }
// Token: 0x06001025 RID: 4133 RVA: 0x00051244 File Offset: 0x0004F444 private void FixedUpdate() { this.timer -= Time.fixedDeltaTime; if (this.timer <= 0f) { this.timer = 0.2f; if (this.reserve > 0f) { float num = Mathf.Min(this.healthComponent.fullHealth * this.healthFractionToRestorePerSecond * 0.2f, this.reserve); this.reserve -= num; ProcChainMask procChainMask = default(ProcChainMask); procChainMask.AddProc(ProcType.RepeatHeal); this.healthComponent.Heal(num, procChainMask, true); } } }
// Token: 0x06001008 RID: 4104 RVA: 0x0004FE58 File Offset: 0x0004E058 public float Heal(float amount, ProcChainMask procChainMask, bool nonRegen = true) { if (!NetworkServer.active) { Debug.LogWarning("[Server] function 'System.Single RoR2.HealthComponent::Heal(System.Single, RoR2.ProcChainMask, System.Boolean)' called on client"); return(0f); } if (!this.alive || amount <= 0f) { return(0f); } float num = this.health; CharacterMaster characterMaster = null; Inventory inventory = null; bool flag = false; if (this.body) { if (this.body.HasBuff(BuffIndex.RepairMode)) { amount *= 3f; } characterMaster = this.body.master; if (characterMaster) { inventory = characterMaster.inventory; if (inventory && inventory.currentEquipmentIndex == EquipmentIndex.LunarPotion && !procChainMask.HasProc(ProcType.LunarPotionActivation)) { this.potionReserve += amount; return(amount); } if (nonRegen && !procChainMask.HasProc(ProcType.CritHeal) && Util.CheckRoll(this.body.critHeal, characterMaster)) { procChainMask.AddProc(ProcType.CritHeal); flag = true; } } } if (flag) { amount *= 2f; } if (this.increaseHealingCount > 0) { amount *= 1f + (float)this.increaseHealingCount; } if (nonRegen && this.repeatHealComponent && !procChainMask.HasProc(ProcType.RepeatHeal)) { this.repeatHealComponent.healthFractionToRestorePerSecond = 0.1f / (float)this.repeatHealCount; this.repeatHealComponent.AddReserve(amount * (float)(1 + this.repeatHealCount), this.fullHealth); return(0f); } this.Networkhealth = Mathf.Min(this.health + amount, this.fullHealth); if (nonRegen) { HealthComponent.SendHeal(base.gameObject, amount, flag); if (inventory && !procChainMask.HasProc(ProcType.HealNova)) { int itemCount = inventory.GetItemCount(ItemIndex.NovaOnHeal); if (itemCount > 0) { this.devilOrbHealPool = Mathf.Min(this.devilOrbHealPool + amount * (float)itemCount, this.fullCombinedHealth); } } } if (flag) { GlobalEventManager.instance.OnCrit(this.body, characterMaster, amount / this.fullHealth * 10f, procChainMask); } if (nonRegen) { Action <HealthComponent, float> action = HealthComponent.onCharacterHealServer; if (action != null) { action(this, amount); } } return(this.health - num); }