This commit is contained in:
parent
7ad00dceac
commit
0b4c3b15d9
41 changed files with 976 additions and 144 deletions
31
Scripts/Engines/Harvest/Core/BonusHarvestResource.cs
Normal file
31
Scripts/Engines/Harvest/Core/BonusHarvestResource.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
using System;
|
||||
|
||||
namespace Server.Engines.Harvest
|
||||
{
|
||||
public class BonusHarvestResource
|
||||
{
|
||||
private Type m_Type;
|
||||
private double m_ReqSkill, m_Chance;
|
||||
private TextDefinition m_SuccessMessage;
|
||||
|
||||
public Type Type { get { return m_Type; } set { m_Type = value; } }
|
||||
public double ReqSkill { get { return m_ReqSkill; } set { m_ReqSkill = value; } }
|
||||
public double Chance { get { return m_Chance; } set { m_Chance = value; } }
|
||||
|
||||
public TextDefinition SuccessMessage { get { return m_SuccessMessage; } }
|
||||
|
||||
public void SendSuccessTo( Mobile m )
|
||||
{
|
||||
TextDefinition.SendMessageTo( m, m_SuccessMessage );
|
||||
}
|
||||
|
||||
public BonusHarvestResource( double reqSkill, double chance, TextDefinition message, Type type )
|
||||
{
|
||||
m_ReqSkill = reqSkill;
|
||||
|
||||
m_Chance = chance;
|
||||
m_Type = type;
|
||||
m_SuccessMessage = message;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,13 @@ namespace Server.Engines.Harvest
|
|||
private DateTime m_NextRespawn;
|
||||
private HarvestVein m_Vein, m_DefaultVein;
|
||||
|
||||
HarvestDefinition m_Definition;
|
||||
|
||||
public HarvestDefinition Definition
|
||||
{
|
||||
get { return m_Definition; }
|
||||
}
|
||||
|
||||
public int Current
|
||||
{
|
||||
get
|
||||
|
|
@ -46,23 +53,31 @@ namespace Server.Engines.Harvest
|
|||
return;
|
||||
|
||||
m_Current = m_Maximum;
|
||||
m_Vein = m_DefaultVein;
|
||||
|
||||
if ( m_Definition.RandomizeVeins )
|
||||
{
|
||||
m_Vein = m_Definition.GetVeinFrom( Utility.RandomDouble() );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Vein = m_DefaultVein;
|
||||
}
|
||||
}
|
||||
|
||||
public void Consume( HarvestDefinition def, int amount, Mobile from )
|
||||
public void Consume( int amount, Mobile from )
|
||||
{
|
||||
CheckRespawn();
|
||||
|
||||
if ( m_Current == m_Maximum )
|
||||
{
|
||||
double min = def.MinRespawn.TotalMinutes;
|
||||
double max = def.MaxRespawn.TotalMinutes;
|
||||
double min = m_Definition.MinRespawn.TotalMinutes;
|
||||
double max = m_Definition.MaxRespawn.TotalMinutes;
|
||||
double rnd = Utility.RandomDouble();
|
||||
|
||||
m_Current = m_Maximum - amount;
|
||||
|
||||
double minutes = min + (rnd * (max - min));
|
||||
if( def.RaceBonus && from.Race == Race.Elf ) //def.RaceBonus = Core.ML
|
||||
if ( m_Definition.RaceBonus && from.Race == Race.Elf ) //def.RaceBonus = Core.ML
|
||||
minutes *= .75; //25% off the time.
|
||||
|
||||
m_NextRespawn = DateTime.Now + TimeSpan.FromMinutes( minutes );
|
||||
|
|
@ -82,6 +97,8 @@ namespace Server.Engines.Harvest
|
|||
m_Current = m_Maximum;
|
||||
m_DefaultVein = defaultVein;
|
||||
m_Vein = m_DefaultVein;
|
||||
|
||||
m_Definition = def;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -22,7 +22,9 @@ namespace Server.Engines.Harvest
|
|||
private object m_NoResourcesMessage, m_OutOfRangeMessage, m_TimedOutOfRangeMessage, m_DoubleHarvestMessage, m_FailMessage, m_PackFullMessage, m_ToolBrokeMessage;
|
||||
private HarvestResource[] m_Resources;
|
||||
private HarvestVein[] m_Veins;
|
||||
private BonusHarvestResource[] m_BonusResources;
|
||||
private bool m_RaceBonus;
|
||||
private bool m_RandomizeVeins;
|
||||
|
||||
public int BankWidth{ get{ return m_BankWidth; } set{ m_BankWidth = value; } }
|
||||
public int BankHeight{ get{ return m_BankHeight; } set{ m_BankHeight = value; } }
|
||||
|
|
@ -51,7 +53,9 @@ namespace Server.Engines.Harvest
|
|||
public object ToolBrokeMessage{ get{ return m_ToolBrokeMessage; } set{ m_ToolBrokeMessage = value; } }
|
||||
public HarvestResource[] Resources{ get{ return m_Resources; } set{ m_Resources = value; } }
|
||||
public HarvestVein[] Veins{ get{ return m_Veins; } set{ m_Veins = value; } }
|
||||
public BonusHarvestResource[] BonusResources{ get { return m_BonusResources; } set { m_BonusResources = value; } }
|
||||
public bool RaceBonus { get { return m_RaceBonus; } set { m_RaceBonus = value; } }
|
||||
public bool RandomizeVeins { get { return m_RandomizeVeins; } set { m_RandomizeVeins = value; } }
|
||||
|
||||
private Dictionary<Map, Dictionary<Point2D, HarvestBank>> m_BanksByMap;
|
||||
|
||||
|
|
@ -94,8 +98,27 @@ namespace Server.Engines.Harvest
|
|||
if ( m_Veins.Length == 1 )
|
||||
return m_Veins[0];
|
||||
|
||||
Random random = new Random( (x*17)+(y*11)+(map.MapID * 3) );
|
||||
double randomValue = random.NextDouble() * 100;
|
||||
double randomValue;
|
||||
|
||||
if ( m_RandomizeVeins )
|
||||
{
|
||||
randomValue = Utility.RandomDouble();
|
||||
}
|
||||
else
|
||||
{
|
||||
Random random = new Random( ( x * 17 ) + ( y * 11 ) + ( map.MapID * 3 ) );
|
||||
randomValue = random.NextDouble();
|
||||
}
|
||||
|
||||
return GetVeinFrom( randomValue );
|
||||
}
|
||||
|
||||
public HarvestVein GetVeinFrom( double randomValue )
|
||||
{
|
||||
if ( m_Veins.Length == 1 )
|
||||
return m_Veins[0];
|
||||
|
||||
randomValue *= 100;
|
||||
|
||||
for ( int i = 0; i < m_Veins.Length; ++i )
|
||||
{
|
||||
|
|
@ -108,6 +131,24 @@ namespace Server.Engines.Harvest
|
|||
return null;
|
||||
}
|
||||
|
||||
public BonusHarvestResource GetBonusResource()
|
||||
{
|
||||
if ( m_BonusResources == null )
|
||||
return null;
|
||||
|
||||
double randomValue = Utility.RandomDouble() * 100;
|
||||
|
||||
for ( int i = 0; i < m_BonusResources.Length; ++i )
|
||||
{
|
||||
if ( randomValue <= m_BonusResources[i].Chance )
|
||||
return m_BonusResources[i];
|
||||
|
||||
randomValue -= m_BonusResources[i].Chance;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public HarvestDefinition()
|
||||
{
|
||||
m_BanksByMap = new Dictionary<Map, Dictionary<Point2D, HarvestBank>>();
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ namespace Server.Engines.Harvest
|
|||
item.Amount = amount;
|
||||
}
|
||||
|
||||
bank.Consume( def, item.Amount, from );
|
||||
bank.Consume( item.Amount, from );
|
||||
|
||||
if ( Give( from, item, def.PlaceAtFeetIfFull ) )
|
||||
{
|
||||
|
|
@ -198,6 +198,22 @@ namespace Server.Engines.Harvest
|
|||
item.Delete();
|
||||
}
|
||||
|
||||
BonusHarvestResource bonus = def.GetBonusResource();
|
||||
|
||||
if ( bonus != null && bonus.Type != null && skillBase >= bonus.ReqSkill )
|
||||
{
|
||||
Item bonusItem = Construct( bonus.Type, from );
|
||||
|
||||
if ( Give( from, bonusItem, true ) ) //Bonuses always allow placing at feet, even if pack is full irregrdless of def
|
||||
{
|
||||
bonus.SendSuccessTo( from );
|
||||
}
|
||||
else
|
||||
{
|
||||
item.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
if ( tool is IUsesRemaining )
|
||||
{
|
||||
IUsesRemaining toolWithUses = (IUsesRemaining)tool;
|
||||
|
|
@ -266,14 +282,14 @@ namespace Server.Engines.Harvest
|
|||
if ( map == null )
|
||||
return false;
|
||||
|
||||
ArrayList atFeet = new ArrayList();
|
||||
List<Item> atFeet = new List<Item>();
|
||||
|
||||
foreach ( Item obj in m.GetItemsInRange( 0 ) )
|
||||
atFeet.Add( obj );
|
||||
|
||||
for ( int i = 0; i < atFeet.Count; ++i )
|
||||
{
|
||||
Item check = (Item)atFeet[i];
|
||||
Item check = atFeet[i];
|
||||
|
||||
if ( check.StackWith( m, item, false ) )
|
||||
return true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue