public GameClient Regen(TimeSpan elapsedTime) { if (Aisling.Con > Aisling.ExpLevel + 1) { HpRegenTimer.Delay = TimeSpan.FromMilliseconds(ServerContextBase.Config.RegenRate / 2); } if (Aisling.Wis > Aisling.ExpLevel + 1) { MpRegenTimer.Delay = TimeSpan.FromMilliseconds(ServerContextBase.Config.RegenRate / 2); } if (!HpRegenTimer.Disabled) { HpRegenTimer.Update(elapsedTime); } if (!MpRegenTimer.Disabled) { MpRegenTimer.Update(elapsedTime); } if (HpRegenTimer.Elapsed && !HpRegenTimer.Disabled) { HpRegenTimer.Reset(); var hpRegenSeed = (Aisling.Con - Aisling.ExpLevel).Clamp(0, 10) * 0.01; var hpRegenAmount = Aisling.MaximumHp * (hpRegenSeed + 0.10); hpRegenAmount += hpRegenAmount / 100 * (1 + Aisling.Regen); Aisling.CurrentHp = (Aisling.CurrentHp + (int)hpRegenAmount).Clamp(0, Aisling.MaximumHp); SendStats(StatusFlags.StructB); } if (MpRegenTimer.Elapsed && !MpRegenTimer.Disabled) { MpRegenTimer.Reset(); var mpRegenSeed = (Aisling.Wis - Aisling.ExpLevel).Clamp(0, 10) * 0.01; var mpRegenAmount = Aisling.MaximumMp * (mpRegenSeed + 0.10); mpRegenAmount += mpRegenAmount / 100 * (3 + Aisling.Regen); Aisling.CurrentMp = (Aisling.CurrentMp + (int)mpRegenAmount).Clamp(0, Aisling.MaximumMp); SendStats(StatusFlags.StructB); } return(this); }
private void Regeneration(TimeSpan elapsedTime) { if (HpRegenTimer == null) { return; } if (MpRegenTimer == null) { return; } var hpChanged = false; var mpChanged = false; if (Aisling.CurrentHp <= 0) { Aisling.CurrentHp = 0; hpChanged = true; } HpRegenTimer.Update(elapsedTime); MpRegenTimer.Update(elapsedTime); #region Hp Regen if (HpRegenTimer.Elapsed) { HpRegenTimer.Reset(); if (!HpRegenTimer.Disabled && Aisling.LoggedIn) { if (Aisling.CurrentHp < Aisling.MaximumHp) { hpChanged = true; var hpRegenSeed = (Math.Abs(Aisling.Con - Aisling.ExpLevel)).Clamp(0, 10) * 0.01; var hpRegenAmount = Aisling.MaximumHp * (hpRegenSeed + 0.10); Aisling.CurrentHp = (Aisling.CurrentHp + (int)hpRegenAmount).Clamp(0, Aisling.MaximumHp); } } } #endregion #region Mp Regen if (MpRegenTimer.Elapsed) { MpRegenTimer.Reset(); if (!MpRegenTimer.Disabled && Aisling.LoggedIn) { if (Aisling.CurrentMp < Aisling.MaximumMp) { mpChanged = true; var mpRegenSeed = (Math.Abs(Aisling.Wis - Aisling.ExpLevel)).Clamp(0, 10) * 0.01; var mpRegenAmount = Aisling.MaximumMp * (mpRegenSeed + 0.10); Aisling.CurrentMp = (Aisling.CurrentMp + (int)mpRegenAmount).Clamp(0, Aisling.MaximumMp); } } } #endregion if (!IsDead()) { if (!Aisling.LoggedIn) { return; } if (hpChanged || mpChanged) { Send(new ServerFormat08(Aisling, StatusFlags.StructB)); } } }
private void Regeneration(TimeSpan elapsedTime) { if (HpRegenTimer == null) { return; } if (MpRegenTimer == null) { return; } var hpChanged = false; var mpChanged = false; if (Aisling.CurrentHp <= 0) { Aisling.CurrentHp = 0; hpChanged = true; } var HpregenRate = 200 / Aisling.Con * ServerContext.Config.RegenRate * 100 / 100 * 1000; var MpregenRate = 200 / Aisling.Wis * ServerContext.Config.RegenRate * 100 / 100 * 1000; if (Aisling.Con > Aisling.ExpLevel + 10) { HpRegenTimer.Delay = TimeSpan.FromMilliseconds((1000 + HpregenRate) / 2); } if (Aisling.Wis > Aisling.ExpLevel + 10) { MpRegenTimer.Delay = TimeSpan.FromMilliseconds((1000 + MpregenRate) / 2); } if (!HpRegenTimer.Disabled) { HpRegenTimer.Update(elapsedTime); } if (!MpRegenTimer.Disabled) { MpRegenTimer.Update(elapsedTime); } #region Hp Regen if (HpRegenTimer.Elapsed) { HpRegenTimer.Reset(); if (Aisling.CurrentHp < Aisling.MaximumHp) { hpChanged = true; var hpRegenSeed = (Aisling.Con - Aisling.ExpLevel).Clamp(0, 10) * 0.01; var hpRegenAmount = Aisling.MaximumHp * (hpRegenSeed + 0.10); Aisling.CurrentHp = (Aisling.CurrentHp + (int)hpRegenAmount).Clamp(0, Aisling.MaximumHp); } } #endregion #region Mp Regen if (MpRegenTimer.Elapsed) { MpRegenTimer.Reset(); if (Aisling.CurrentMp < Aisling.MaximumMp) { mpChanged = true; var mpRegenSeed = (Aisling.Wis - Aisling.ExpLevel).Clamp(0, 10) * 0.01; var mpRegenAmount = Aisling.MaximumMp * (mpRegenSeed + 0.10); Aisling.CurrentMp = (Aisling.CurrentMp + (int)mpRegenAmount).Clamp(0, Aisling.MaximumMp); } } #endregion if (!IsDead() && Aisling?.CurrentHp > 0) { if (!Aisling.LoggedIn) { return; } if (hpChanged || mpChanged) { Send(new ServerFormat08(Aisling, StatusFlags.StructB)); } } }