xavier 2010-11-18 18:58:01 +00:00
parent a603b2c82d
commit 6a221f4e10
4 changed files with 28 additions and 14 deletions

View file

@ -151,13 +151,12 @@ namespace Server.Items
public static int EnhancePotions( Mobile m ) public static int EnhancePotions( Mobile m )
{ {
int EP = AosAttributes.GetValue( m, AosAttribute.EnhancePotions ); int EP = AosAttributes.GetValue( m, AosAttribute.EnhancePotions );
int skillBonus = m.Skills.Alchemy.Fixed / 330 * 10;
int cap = 50 + m.Skills.Alchemy.Fixed / 330 * 10; if ( Core.ML && EP > 50 && m.AccessLevel <= AccessLevel.Player )
EP = 50;
if ( Core.ML && EP > cap && m.AccessLevel <= AccessLevel.Player ) return ( EP + skillBonus );
EP = cap;
return EP;
} }
public static TimeSpan Scale( Mobile m, TimeSpan v ) public static TimeSpan Scale( Mobile m, TimeSpan v )

View file

@ -16,7 +16,8 @@ namespace Server.Items
private static bool LeveledExplosion = false; // Should explosion potions explode other nearby potions? private static bool LeveledExplosion = false; // Should explosion potions explode other nearby potions?
private static bool InstantExplosion = false; // Should explosion potions explode on impact? private static bool InstantExplosion = false; // Should explosion potions explode on impact?
private const int ExplosionRange = 2; // How long is the blast radius? private static bool RelativeLocation = false; // Is the explosion target location relative for mobiles?
private const int ExplosionRange = 2; // How long is the blast radius?
public BaseExplosionPotion( PotionEffect effect ) : base( 0xF0D, effect ) public BaseExplosionPotion( PotionEffect effect ) : base( 0xF0D, effect )
{ {
@ -89,7 +90,11 @@ namespace Server.Items
if ( m_Timer == null ) if ( m_Timer == null )
{ {
from.SendLocalizedMessage( 500236 ); // You should throw it now! from.SendLocalizedMessage( 500236 ); // You should throw it now!
m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 0.75 ), TimeSpan.FromSeconds( 1.0 ), 4, new TimerStateCallback( Detonate_OnTick ), new object[]{ from, 3 } );
if( Core.ML )
m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.25 ), 5, new TimerStateCallback( Detonate_OnTick ), new object[]{ from, 3 } ); // 3.6 seconds explosion delay
else
m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 0.75 ), TimeSpan.FromSeconds( 1.0 ), 4, new TimerStateCallback( Detonate_OnTick ), new object[]{ from, 3 } ); // 2.6 seconds explosion delay
} }
} }
@ -195,10 +200,15 @@ namespace Server.Items
IEntity to; IEntity to;
if ( p is Mobile ) to = new Entity( Serial.Zero, new Point3D( p ), map );
to = (Mobile)p;
else if( p is Mobile )
to = new Entity( Serial.Zero, new Point3D( p ), map ); {
if( !RelativeLocation ) // explosion location = current mob location.
p = ((Mobile)p).Location;
else
to = (Mobile)p;
}
Effects.SendMovingEffect( from, to, m_Potion.ItemID & 0x3FFF, 7, 0, false, false, m_Potion.Hue, 0 ); Effects.SendMovingEffect( from, to, m_Potion.ItemID & 0x3FFF, 7, 0, false, false, m_Potion.Hue, 0 );

View file

@ -285,7 +285,7 @@ namespace Server.Misc
if ( Core.ML && master != null ) if ( Core.ML && master != null )
{ {
if( source == master && CheckAggressor( target.Aggressors, source ) ) if ( ( source == master && CheckAggressor( target.Aggressors, source ) ) || ( CheckAggressor( source.Aggressors, bc ) ) )
return Notoriety.CanBeAttacked; return Notoriety.CanBeAttacked;
else else
return MobileNotoriety( source, master ); return MobileNotoriety( source, master );
@ -352,8 +352,9 @@ namespace Server.Misc
BaseCreature bc = (BaseCreature)source; BaseCreature bc = (BaseCreature)source;
Mobile master = bc.GetMaster(); Mobile master = bc.GetMaster();
if( master != null && CheckAggressor( master.Aggressors, target ) ) if( master != null )
return Notoriety.CanBeAttacked; if( CheckAggressor( master.Aggressors, target ) || MobileNotoriety( master, target ) == Notoriety.CanBeAttacked )
return Notoriety.CanBeAttacked;
} }
return Notoriety.Innocent; return Notoriety.Innocent;

View file

@ -3065,6 +3065,10 @@ namespace Server.Mobiles
{ {
base.AggressiveAction( aggressor, criminal ); base.AggressiveAction( aggressor, criminal );
if ( this.ControlMaster != null )
if ( NotorietyHandlers.CheckAggressor( this.ControlMaster.Aggressors, aggressor ) )
aggressor.Aggressors.Add( AggressorInfo.Create( this, aggressor, true ) );
OrderType ct = m_ControlOrder; OrderType ct = m_ControlOrder;
if ( m_AI != null ) if ( m_AI != null )