181 lines
4.5 KiB
C#
181 lines
4.5 KiB
C#
using System;
|
|
using Server.Network;
|
|
using Server;
|
|
using Server.Mobiles;
|
|
using Server.Regions;
|
|
|
|
namespace Server.Misc
|
|
{
|
|
public class FoodDecayTimer : Timer
|
|
{
|
|
public static void Initialize()
|
|
{
|
|
new FoodDecayTimer().Start();
|
|
}
|
|
|
|
public FoodDecayTimer() : base( TimeSpan.FromMinutes( 5 ), TimeSpan.FromMinutes( 5 ) )
|
|
{
|
|
Priority = TimerPriority.OneMinute;
|
|
}
|
|
|
|
protected override void OnTick()
|
|
{
|
|
FoodDecay();
|
|
}
|
|
|
|
public static void FoodDecay()
|
|
{
|
|
foreach ( NetState state in NetState.Instances )
|
|
{
|
|
HungerDecay( state.Mobile );
|
|
}
|
|
}
|
|
|
|
public static void HungerDecay( Mobile m )
|
|
{
|
|
if ( m != null && m is PlayerMobile && !(m.AccessLevel > AccessLevel.Player) && !(m.Region is InnRegion) )
|
|
{
|
|
if ( m.Hunger >= 1 )
|
|
{
|
|
m.Hunger -= 1;
|
|
if ( m.Hunger == 75 )
|
|
m.SendMessage( "Your stomach gives a slight rumble." );
|
|
else if ( m.Hunger == 50 )
|
|
m.SendMessage( "You are starting to feel hungry." );
|
|
else if ( m.Hunger == 25 )
|
|
m.SendMessage( "You are getting extremely hungry. You should eat soon!" );
|
|
}
|
|
|
|
if ( m.Thirst >= 1 )
|
|
{
|
|
m.Thirst -= 1;
|
|
if ( m.Thirst == 75 )
|
|
m.SendMessage( "Your mouth feels a little dry." );
|
|
else if ( m.Thirst == 50 )
|
|
m.SendMessage( "You are starting to feel thirsty." );
|
|
else if ( m.Thirst == 25 )
|
|
m.SendMessage( "You are getting extremely thirsty. You should drink soon!" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class EatDecayTimer : Timer
|
|
{
|
|
public static void Initialize()
|
|
{
|
|
new EatDecayTimer().Start();
|
|
}
|
|
|
|
public EatDecayTimer() : base( TimeSpan.FromSeconds( 11.0 ), TimeSpan.FromSeconds( 11.0 ) )
|
|
{
|
|
Priority = TimerPriority.OneSecond;
|
|
}
|
|
|
|
protected override void OnTick()
|
|
{
|
|
EatDecay();
|
|
}
|
|
|
|
public static void EatDecay()
|
|
{
|
|
foreach ( NetState state in NetState.Instances )
|
|
{
|
|
EatDecaying( state.Mobile );
|
|
}
|
|
}
|
|
|
|
public static void EatDecaying( Mobile m )
|
|
{
|
|
if ( m is PlayerMobile && m.Alive )
|
|
{
|
|
// Starvation penalties begin when stats fall below 25
|
|
if ( m.Hunger < 25 || m.Thirst < 25 )
|
|
{
|
|
if ( m.Hunger < 25 )
|
|
{
|
|
int hits = 0;
|
|
|
|
if ( m.Hunger >= 20 ) hits = 2;
|
|
else if ( m.Hunger >= 15 ) hits = 3;
|
|
else if ( m.Hunger >= 10 ) hits = 4;
|
|
else if ( m.Hunger >= 5 ) hits = 5;
|
|
else
|
|
{
|
|
hits = 6;
|
|
m.SendMessage( "You are starving to death!" );
|
|
m.LocalOverheadMessage(MessageType.Emote, 1150, true, "I am so hungry!");
|
|
}
|
|
|
|
if ( m.Hits < hits )
|
|
hits = m.Hits - 1;
|
|
|
|
if ( hits > 0 )
|
|
m.Hits -= hits;
|
|
|
|
if ( m.Hunger < 15 && m.Hunger > 0 )
|
|
{
|
|
if ( Utility.RandomBool() ) m.SendMessage( "You are getting very hungry!" );
|
|
if ( Utility.RandomMinMax(1,5) == 1 ) m.LocalOverheadMessage(MessageType.Emote, 1150, true, "I am getting hungry!");
|
|
}
|
|
}
|
|
|
|
if ( m.Thirst < 25 )
|
|
{
|
|
if ( m.Thirst >= 20 ) m.Stam -= 2;
|
|
else if ( m.Thirst >= 15 ) m.Stam -= 3;
|
|
else if ( m.Thirst >= 10 ) m.Stam -= 4;
|
|
else if ( m.Thirst >= 5 ) m.Stam -= 5;
|
|
else
|
|
{
|
|
m.Stam -= 6;
|
|
m.SendMessage( "You are exhausted from thirst!" );
|
|
m.LocalOverheadMessage(MessageType.Emote, 1150, true, "I am so thirsty!");
|
|
}
|
|
|
|
if ( m.Thirst < 15 && m.Thirst > 0 )
|
|
{
|
|
if ( Utility.RandomBool() ) m.SendMessage( "You are getting exhausted from thirst!" );
|
|
if ( Utility.RandomMinMax(1,5) == 1 ) m.LocalOverheadMessage(MessageType.Emote, 1150, true, "I am getting thirsty!");
|
|
}
|
|
|
|
if ( m.Stam < 0 )
|
|
m.Stam = 0;
|
|
}
|
|
|
|
int test = m.Thirst;
|
|
if ( m.Hunger < m.Thirst )
|
|
test = m.Hunger;
|
|
|
|
if ( test >= 20 ) m.Mana -= 2;
|
|
else if ( test >= 15 ) m.Mana -= 3;
|
|
else if ( test >= 10 ) m.Mana -= 4;
|
|
else if ( test >= 5 ) m.Mana -= 5;
|
|
else m.Mana -= 6;
|
|
|
|
if ( m.Mana < 0 )
|
|
m.Mana = 0;
|
|
}
|
|
else
|
|
{
|
|
// Well-Fed Regeneration starts when stats are 75 or higher
|
|
if ( m.Hunger >= 75 && m.Hits < m.HitsMax )
|
|
{
|
|
int hpRegen = (int)(2 * Server.Misc.Settings.HitPoints());
|
|
m.Hits += hpRegen;
|
|
}
|
|
|
|
if ( m.Thirst >= 75 && m.Stam < m.StamMax )
|
|
{
|
|
m.Stam += 2;
|
|
}
|
|
|
|
if ( m.Hunger >= 75 && m.Thirst >= 75 && m.Mana < m.ManaMax )
|
|
{
|
|
m.Mana += 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|