- 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]