#W# Initial Commit: Avatars Conquest
This commit is contained in:
commit
5df497787a
7510 changed files with 416048 additions and 0 deletions
130
Scripts/Misc/RegenRates.cs
Normal file
130
Scripts/Misc/RegenRates.cs
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Spells;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Misc
|
||||
{
|
||||
public class RegenRates
|
||||
{
|
||||
[CallPriority( 10 )]
|
||||
public static void Configure()
|
||||
{
|
||||
Mobile.DefaultHitsRate = TimeSpan.FromSeconds( 11.0 );
|
||||
Mobile.DefaultStamRate = TimeSpan.FromSeconds( 7.0 );
|
||||
Mobile.DefaultManaRate = TimeSpan.FromSeconds( 7.0 );
|
||||
|
||||
Mobile.ManaRegenRateHandler = new RegenRateHandler( Mobile_ManaRegenRate );
|
||||
}
|
||||
|
||||
private static void CheckBonusSkill( Mobile m, int cur, int max, SkillName skill )
|
||||
{
|
||||
if ( !m.Alive )
|
||||
return;
|
||||
|
||||
double n = (double)cur / max;
|
||||
double v = Math.Sqrt( m.Skills[skill].Value * 0.005 );
|
||||
|
||||
n *= (1.0 - v);
|
||||
n += v;
|
||||
|
||||
m.CheckSkill( skill, n );
|
||||
}
|
||||
|
||||
private static TimeSpan Mobile_HitsRegenRate( Mobile from )
|
||||
{
|
||||
int points = 0;
|
||||
|
||||
if ( from is BaseCreature )
|
||||
points += 4;
|
||||
|
||||
if ( from is BaseCreature && from is Leviathan )
|
||||
points += 40;
|
||||
|
||||
if ( points < 0 )
|
||||
points = 0;
|
||||
|
||||
return TimeSpan.FromSeconds( 1.0 / (0.1 * (1 + points)) );
|
||||
}
|
||||
|
||||
private static TimeSpan Mobile_StamRegenRate( Mobile from )
|
||||
{
|
||||
if ( from.Skills == null )
|
||||
return Mobile.DefaultStamRate;
|
||||
|
||||
int points = 0;
|
||||
|
||||
if( from is BaseCreature && from is Leviathan )
|
||||
points += 40;
|
||||
|
||||
if ( points < -1 )
|
||||
points = -1;
|
||||
|
||||
return TimeSpan.FromSeconds( 1.0 / (0.1 * (2 + points)) );
|
||||
}
|
||||
|
||||
private static TimeSpan Mobile_ManaRegenRate( Mobile from )
|
||||
{
|
||||
if ( from.Skills == null )
|
||||
return Mobile.DefaultManaRate;
|
||||
|
||||
if ( !from.Meditating )
|
||||
CheckBonusSkill( from, from.Mana, from.ManaMax, SkillName.Meditation );
|
||||
|
||||
double rate;
|
||||
double armorPenalty = GetArmorOffset( from );
|
||||
|
||||
double medPoints = (from.Int + from.Skills[SkillName.Meditation].Value) * 0.5;
|
||||
|
||||
if ( medPoints <= 0 )
|
||||
rate = 7.0;
|
||||
else if ( medPoints <= 100 )
|
||||
rate = 7.0 - (239*medPoints/2400) + (19*medPoints*medPoints/48000);
|
||||
else if ( medPoints < 120 )
|
||||
rate = 1.0;
|
||||
else
|
||||
rate = 0.75;
|
||||
|
||||
rate += armorPenalty;
|
||||
|
||||
if ( from.Meditating )
|
||||
rate *= 0.5;
|
||||
|
||||
if ( rate < 0.5 )
|
||||
rate = 0.5;
|
||||
else if ( rate > 7.0 )
|
||||
rate = 7.0;
|
||||
|
||||
return TimeSpan.FromSeconds( rate );
|
||||
}
|
||||
|
||||
public static double GetArmorOffset( Mobile from )
|
||||
{
|
||||
double rating = GetArmorMeditationValue( from.ShieldArmor as BaseArmor );
|
||||
|
||||
if ( from.NeckArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.NeckArmor as BaseArmor ); }
|
||||
if ( from.HandArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.HandArmor as BaseArmor ); }
|
||||
if ( from.HeadArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.HeadArmor as BaseArmor ); }
|
||||
if ( from.ArmsArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.ArmsArmor as BaseArmor ); }
|
||||
if ( from.LegsArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.LegsArmor as BaseArmor ); }
|
||||
if ( from.ChestArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.ChestArmor as BaseArmor ); }
|
||||
|
||||
return rating / 4;
|
||||
}
|
||||
|
||||
private static double GetArmorMeditationValue( BaseArmor ar )
|
||||
{
|
||||
if ( ar == null )
|
||||
return 0.0;
|
||||
|
||||
switch ( ar.MeditationAllowance )
|
||||
{
|
||||
default:
|
||||
case ArmorMeditationAllowance.None: return ar.BaseArmorRatingScaled;
|
||||
case ArmorMeditationAllowance.Half: return ar.BaseArmorRatingScaled / 2.0;
|
||||
case ArmorMeditationAllowance.All: return 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue