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);
        }
Ejemplo n.º 2
0
        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));
                }
            }
        }
Ejemplo n.º 3
0
        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));
                }
            }
        }