- Added support for ML mods, as well as quivers. More ML artifacts are added

(http://www.uodemise.com/discussion/showthread.php?t=116685)

- Dog Form HPR rate is tweaked as per OSI
(http://www.uodemise.com/discussion/showthread.php?t=124422)

- Hairstylist gump now works for elves
(http://www.uodemise.com/discussion/showthread.php?t=120199)

- Bless buff icon now will report correct values
(http://www.uodemise.com/discussion/showthread.php?t=123760)

- When stealthing, the step just before a stealth check won't let you lose the stealth status (you can use shadowjump)
(http://www.uodemise.com/discussion/showthread.php?t=121250)

- You can open the blacksmith gump even if far from anvil and forge, but you still need to be near them to craft
(http://www.uodemise.com/discussion/showthread.php?t=122750)
This commit is contained in:
daedalus 2009-11-23 11:20:29 +00:00
parent aff5e22940
commit 30c7232a69
54 changed files with 1363 additions and 149 deletions

View file

@ -40,20 +40,20 @@ namespace Server
public static int Damage( Mobile m, Mobile from, int damage, int phys, int fire, int cold, int pois, int nrgy )
{
return Damage( m, from, damage, false, phys, fire, cold, pois, nrgy, false );
return Damage( m, from, damage, false, phys, fire, cold, pois, nrgy, 0, 0, false, false );
}
public static int Damage( Mobile m, Mobile from, int damage, bool ignoreArmor, int phys, int fire, int cold, int pois, int nrgy )
{
return Damage( m, from, damage, ignoreArmor, phys, fire, cold, pois, nrgy, false );
return Damage( m, from, damage, ignoreArmor, phys, fire, cold, pois, nrgy, 0, 0, false, false );
}
public static int Damage( Mobile m, Mobile from, int damage, int phys, int fire, int cold, int pois, int nrgy, bool keepAlive )
{
return Damage( m, from, damage, false, phys, fire, cold, pois, nrgy, keepAlive );
return Damage( m, from, damage, false, phys, fire, cold, pois, nrgy, 0, 0, keepAlive, false );
}
public static int Damage( Mobile m, Mobile from, int damage, bool ignoreArmor, int phys, int fire, int cold, int pois, int nrgy, bool keepAlive )
public static int Damage( Mobile m, Mobile from, int damage, bool ignoreArmor, int phys, int fire, int cold, int pois, int nrgy, int chaos, int direct, bool keepAlive, bool archer )
{
if( m == null || m.Deleted || !m.Alive || damage <= 0 )
return 0;
@ -72,6 +72,25 @@ namespace Server
Fix( ref cold );
Fix( ref pois );
Fix( ref nrgy );
Fix( ref chaos );
Fix( ref direct );
if ( Core.ML && chaos > 0 )
{
switch ( Utility.Random( 5 ) )
{
case 0: phys += chaos; break;
case 1: fire += chaos; break;
case 2: cold += chaos; break;
case 3: pois += chaos; break;
case 4: nrgy += chaos; break;
}
}
BaseQuiver quiver = null;
if ( archer && from != null )
quiver = from.FindItemOnLayer( Layer.Cloak ) as BaseQuiver;
int totalDamage;
@ -92,16 +111,30 @@ namespace Server
totalDamage /= 10000;
if ( Core.ML )
{
totalDamage += damage * direct / 100;
if ( quiver != null )
totalDamage += totalDamage * quiver.DamageIncrease / 100;
}
if( totalDamage < 1 )
totalDamage = 1;
}
else if( Core.ML && m is PlayerMobile && from is PlayerMobile )
{
if ( quiver != null )
damage += damage * quiver.DamageIncrease / 100;
totalDamage = Math.Min( damage, 35 ); //Direct Damage cap of 35
}
else
{
totalDamage = damage;
if ( Core.ML && quiver != null )
totalDamage += totalDamage * quiver.DamageIncrease / 100;
}
#region Dragon Barding
@ -264,6 +297,13 @@ namespace Server
if( attrs != null )
value += attrs[attribute];
}
else if( obj is BaseQuiver )
{
AosAttributes attrs = ((BaseQuiver)obj).Attributes;
if( attrs != null )
value += attrs[attribute];
}
}
return value;
@ -280,6 +320,40 @@ namespace Server
return "...";
}
public void AddStatBonuses( Mobile to )
{
int strBonus = BonusStr;
int dexBonus = BonusDex;
int intBonus = BonusInt;
if ( strBonus != 0 || dexBonus != 0 || intBonus != 0 )
{
string modName = Owner.Serial.ToString();
if ( strBonus != 0 )
to.AddStatMod( new StatMod( StatType.Str, modName + "Str", strBonus, TimeSpan.Zero ) );
if ( dexBonus != 0 )
to.AddStatMod( new StatMod( StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero ) );
if ( intBonus != 0 )
to.AddStatMod( new StatMod( StatType.Int, modName + "Int", intBonus, TimeSpan.Zero ) );
}
to.CheckStatTimers();
}
public void RemoveStatBonuses( Mobile from )
{
string modName = Owner.Serial.ToString();
from.RemoveStatMod( modName + "Str" );
from.RemoveStatMod( modName + "Dex" );
from.RemoveStatMod( modName + "Int" );
from.CheckStatTimers();
}
[CommandProperty( AccessLevel.GameMaster )]
public int RegenHits { get { return this[AosAttribute.RegenHits]; } set { this[AosAttribute.RegenHits] = value; } }
@ -823,7 +897,9 @@ namespace Server
Fire=0x00000002,
Cold=0x00000004,
Poison=0x00000008,
Energy=0x00000010
Energy=0x00000010,
Chaos=0x00000020,
Direct=0x00000040
}
public sealed class AosElementAttributes : BaseAttributes
@ -868,6 +944,12 @@ namespace Server
[CommandProperty( AccessLevel.GameMaster )]
public int Energy { get { return this[AosElementAttribute.Energy]; } set { this[AosElementAttribute.Energy] = value; } }
[CommandProperty( AccessLevel.GameMaster )]
public int Chaos { get { return this[AosElementAttribute.Chaos]; } set { this[AosElementAttribute.Chaos] = value; } }
[CommandProperty( AccessLevel.GameMaster )]
public int Direct { get { return this[AosElementAttribute.Direct]; } set { this[AosElementAttribute.Direct] = value; } }
}
[PropertyObject]

View file

@ -60,13 +60,6 @@ namespace Server.Misc
if ( (from is BaseCreature && ((BaseCreature)from).IsParagon) || from is Leviathan )
points += 40;
if ( CheckTransform( from, typeof( HorrificBeastSpell ) ) )
points += 20;
if ( CheckAnimal( from, typeof( Dog ) ) || CheckAnimal( from, typeof( Cat ) ) )
points += from.Skills[SkillName.Ninjitsu].Fixed / 300;
//TODO: What's the new increased rate?
if( Core.ML && from.Race == Race.Human ) //Is this affected by the cap?
points += 2;
@ -74,7 +67,13 @@ namespace Server.Misc
points = 0;
if( Core.ML && from is PlayerMobile ) //does racial bonus go before/after?
points = Math.Min ( points, 18 );
points = Math.Min( points, 18 );
if ( CheckTransform( from, typeof( HorrificBeastSpell ) ) )
points += 20;
if ( CheckAnimal( from, typeof( Dog ) ) || CheckAnimal( from, typeof( Cat ) ) )
points += from.Skills[SkillName.Ninjitsu].Fixed / 30;
return TimeSpan.FromSeconds( 1.0 / (0.1 * (1 + points)) );
}

View file

@ -52,6 +52,8 @@ namespace Server.Items
private int m_WeaponColdDamage;
private int m_WeaponPoisonDamage;
private int m_WeaponEnergyDamage;
private int m_WeaponChaosDamage;
private int m_WeaponDirectDamage;
private int m_WeaponDurability;
private int m_WeaponLuck;
private int m_WeaponGoldIncrease;
@ -76,6 +78,8 @@ namespace Server.Items
public int WeaponColdDamage{ get{ return m_WeaponColdDamage; } set{ m_WeaponColdDamage = value; } }
public int WeaponPoisonDamage{ get{ return m_WeaponPoisonDamage; } set{ m_WeaponPoisonDamage = value; } }
public int WeaponEnergyDamage{ get{ return m_WeaponEnergyDamage; } set{ m_WeaponEnergyDamage = value; } }
public int WeaponChaosDamage{ get{ return m_WeaponChaosDamage; } set{ m_WeaponChaosDamage = value; } }
public int WeaponDirectDamage{ get{ return m_WeaponDirectDamage; } set{ m_WeaponDirectDamage = value; } }
public int WeaponDurability{ get{ return m_WeaponDurability; } set{ m_WeaponDurability = value; } }
public int WeaponLuck{ get{ return m_WeaponLuck; } set{ m_WeaponLuck = value; } }
public int WeaponGoldIncrease{ get{ return m_WeaponGoldIncrease; } set{ m_WeaponGoldIncrease = value; } }