This commit is contained in:
parent
c63a5f13fa
commit
2204d5fb86
86 changed files with 1077 additions and 257 deletions
|
|
@ -235,7 +235,7 @@ namespace Server.Mobiles
|
|||
Timer.DelayCall( TimeSpan.Zero, delegate { Hue = GetHue(); } );
|
||||
|
||||
if( version <= 1 )
|
||||
Timer.DelayCall( TimeSpan.Zero, delegate { InternalItem.Hue = this.Hue; } );
|
||||
Timer.DelayCall( TimeSpan.Zero, delegate { if( InternalItem != null ) { InternalItem.Hue = this.Hue; } } );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,12 +118,26 @@ namespace Server.Mobiles
|
|||
|
||||
public override double GetControlChance( Mobile m, bool useBaseSkill )
|
||||
{
|
||||
double tamingChance = base.GetControlChance( m, useBaseSkill );
|
||||
|
||||
if( tamingChance >= 0.95 )
|
||||
{
|
||||
return tamingChance;
|
||||
}
|
||||
|
||||
double skill = (useBaseSkill? m.Skills.Bushido.Base : m.Skills.Bushido.Value);
|
||||
|
||||
if( skill >= 90.0 )
|
||||
return 1.0;
|
||||
if( skill < 90.0 )
|
||||
{
|
||||
return tamingChance;
|
||||
}
|
||||
|
||||
return base.GetControlChance( m, useBaseSkill );
|
||||
double bushidoChance = ( skill - 30.0 ) / 100;
|
||||
|
||||
if( m.Skills.Bushido.Base >= 120 )
|
||||
bushidoChance += 0.05;
|
||||
|
||||
return bushidoChance > tamingChance ? bushidoChance : tamingChance;
|
||||
}
|
||||
|
||||
public override int TreasureMapLevel { get { return 3; } }
|
||||
|
|
@ -217,7 +231,7 @@ namespace Server.Mobiles
|
|||
Timer.DelayCall( TimeSpan.Zero, delegate { Hue = GetHue(); } );
|
||||
|
||||
if( version <= 1 )
|
||||
Timer.DelayCall( TimeSpan.Zero, delegate { InternalItem.Hue = this.Hue; } );
|
||||
Timer.DelayCall( TimeSpan.Zero, delegate { if( InternalItem != null ) { InternalItem.Hue = this.Hue; } } );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ namespace Server.Mobiles
|
|||
if ( pack != null )
|
||||
pack.Delete();
|
||||
|
||||
pack = new StrongBackpack();
|
||||
pack = new Backpack();
|
||||
pack.Movable = false;
|
||||
|
||||
AddItem( pack );
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ namespace Server.Mobiles
|
|||
|
||||
public override bool BardImmune{ get{ return !Core.SE; } }
|
||||
public override bool Unprovokable{ get{ return Core.SE; } }
|
||||
public override bool Uncalmable{ get{ return Core.SE; } }
|
||||
public override bool AreaPeaceImmune { get { return Core.SE; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override int TreasureMapLevel{ get{ return 1; } }
|
||||
|
||||
|
|
|
|||
|
|
@ -50,8 +50,9 @@ namespace Server.Mobiles
|
|||
AddLoot( LootPack.FilthyRich, 8 );
|
||||
}
|
||||
|
||||
public override bool Unprovokable{ get{ return true; } }
|
||||
public override bool Uncalmable{ get{ return true; } }
|
||||
public override bool BardImmune { get { return !Core.SE; } }
|
||||
public override bool Unprovokable { get { return Core.SE; } }
|
||||
public override bool AreaPeaceImmune { get { return Core.SE; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override int TreasureMapLevel{ get{ return 1; } }
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ namespace Server.Mobiles
|
|||
|
||||
public override bool BardImmune{ get{ return !Core.SE; } }
|
||||
public override bool Unprovokable{ get{ return Core.SE; } }
|
||||
public override bool Uncalmable{ get{ return Core.SE; } }
|
||||
public override bool AreaPeaceImmune { get { return Core.SE; } }
|
||||
public override bool BleedImmune{ get{ return true; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override Poison HitPoison{ get{ return Poison.Lethal; } }
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ namespace Server.Mobiles
|
|||
|
||||
public override bool BardImmune{ get{ return !Core.SE; } }
|
||||
public override bool Unprovokable{ get{ return Core.SE; } }
|
||||
public override bool Uncalmable{ get{ return Core.SE; } }
|
||||
public override bool AreaPeaceImmune { get { return Core.SE; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
|
||||
public override int TreasureMapLevel{ get{ return 1; } }
|
||||
|
|
|
|||
|
|
@ -63,8 +63,9 @@ namespace Server.Mobiles
|
|||
}
|
||||
|
||||
public override bool AutoDispel{ get{ return true; } }
|
||||
public override bool Unprovokable{ get{ return true; } }
|
||||
public override bool Uncalmable{ get{ return true; } }
|
||||
public override bool BardImmune { get { return !Core.SE; } }
|
||||
public override bool Unprovokable { get { return Core.SE; } }
|
||||
public override bool AreaPeaceImmune { get { return Core.SE; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
|
||||
public override int TreasureMapLevel{ get{ return 1; } }
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ namespace Server.Mobiles
|
|||
public override bool AutoDispel{ get{ return true; } }
|
||||
public override bool BardImmune{ get{ return !Core.SE; } }
|
||||
public override bool Unprovokable{ get{ return Core.SE; } }
|
||||
public override bool Uncalmable{ get{ return Core.SE; } }
|
||||
public override bool AreaPeaceImmune { get { return Core.SE; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly); } }
|
||||
|
||||
|
|
|
|||
|
|
@ -167,7 +167,9 @@ namespace Server.Mobiles
|
|||
base.OnThink();
|
||||
}
|
||||
|
||||
public override bool BardImmune{ get{ return true; } }
|
||||
public override bool BardImmune{ get{ return !Core.SE; } }
|
||||
public override bool Unprovokable{ get{ return Core.SE; } }
|
||||
public override bool AreaPeaceImmune{ get{ return Core.SE; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
|
||||
public override int TreasureMapLevel{ get{ return 1; } }
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ namespace Server.Mobiles
|
|||
|
||||
public override bool IsBondable{ get{ return false; } }
|
||||
|
||||
public override FoodType FavoriteFood { get { return FoodType.None; } }
|
||||
|
||||
[Constructable]
|
||||
public Golem() : this( false, 1.0 )
|
||||
{
|
||||
|
|
@ -81,7 +83,7 @@ namespace Server.Mobiles
|
|||
PackItem( new Gears() );
|
||||
}
|
||||
|
||||
ControlSlots = 4;
|
||||
ControlSlots = 3;
|
||||
}
|
||||
|
||||
public override bool DeleteOnRelease{ get{ return true; } }
|
||||
|
|
|
|||
|
|
@ -131,20 +131,40 @@ namespace Server.Mobiles
|
|||
|
||||
List<ResistanceMod> mods = new List<ResistanceMod>();
|
||||
|
||||
if ( defender.PhysicalResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Physical, (defender.PhysicalResistance > 70) ? -70 : -defender.PhysicalResistance ) );
|
||||
if ( Core.ML )
|
||||
{
|
||||
if ( defender.PhysicalResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Physical, defender.PhysicalResistance / 2 ) );
|
||||
|
||||
if ( defender.FireResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Fire, (defender.FireResistance > 70) ? -70 : -defender.FireResistance ) );
|
||||
if ( defender.FireResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Fire, defender.FireResistance / 2 ) );
|
||||
|
||||
if ( defender.ColdResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Cold, (defender.ColdResistance > 70) ? -70 : -defender.ColdResistance ) );
|
||||
if ( defender.ColdResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Cold, defender.ColdResistance / 2 ) );
|
||||
|
||||
if ( defender.PoisonResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Poison, (defender.PoisonResistance > 70) ? -70 : -defender.PoisonResistance ) );
|
||||
if ( defender.PoisonResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Poison, defender.PoisonResistance / 2 ) );
|
||||
|
||||
if ( defender.EnergyResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Energy, (defender.EnergyResistance > 70) ? -70 : -defender.EnergyResistance ) );
|
||||
if ( defender.EnergyResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Energy, defender.EnergyResistance / 2 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( defender.PhysicalResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Physical, (defender.PhysicalResistance > 70) ? -70 : -defender.PhysicalResistance ) );
|
||||
|
||||
if ( defender.FireResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Fire, (defender.FireResistance > 70) ? -70 : -defender.FireResistance ) );
|
||||
|
||||
if ( defender.ColdResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Cold, (defender.ColdResistance > 70) ? -70 : -defender.ColdResistance ) );
|
||||
|
||||
if ( defender.PoisonResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Poison, (defender.PoisonResistance > 70) ? -70 : -defender.PoisonResistance ) );
|
||||
|
||||
if ( defender.EnergyResistance > 0 )
|
||||
mods.Add( new ResistanceMod( ResistanceType.Energy, (defender.EnergyResistance > 70) ? -70 : -defender.EnergyResistance ) );
|
||||
}
|
||||
|
||||
for ( int i = 0; i < mods.Count; ++i )
|
||||
defender.AddResistanceMod( mods[i] );
|
||||
|
|
|
|||
|
|
@ -105,7 +105,22 @@ namespace Server.Mobiles
|
|||
|
||||
private int m_GuildMessageHue, m_AllianceMessageHue;
|
||||
|
||||
private List<Mobile> m_AutoStabled;
|
||||
private List<Mobile> m_AllFollowers;
|
||||
|
||||
#region Getters & Setters
|
||||
public List<Mobile> AutoStabled { get { return m_AutoStabled; } }
|
||||
|
||||
public List<Mobile> AllFollowers
|
||||
{
|
||||
get
|
||||
{
|
||||
if( m_AllFollowers == null )
|
||||
m_AllFollowers = new List<Mobile>();;
|
||||
return m_AllFollowers;
|
||||
}
|
||||
}
|
||||
|
||||
public Server.Guilds.RankDefinition GuildRank
|
||||
{
|
||||
get
|
||||
|
|
@ -516,7 +531,11 @@ namespace Server.Mobiles
|
|||
}
|
||||
|
||||
from.SendGump( new NoticeGump( 1060637, 30720, notice, 0xFFC000, 300, 140, null, null ) );
|
||||
return;
|
||||
}
|
||||
|
||||
if( from is PlayerMobile )
|
||||
((PlayerMobile)from).ClaimAutoStabledPets();
|
||||
}
|
||||
|
||||
private bool m_NoDeltaRecursion;
|
||||
|
|
@ -768,6 +787,8 @@ namespace Server.Mobiles
|
|||
|
||||
private static void OnLogout( LogoutEventArgs e )
|
||||
{
|
||||
if( e.Mobile is PlayerMobile )
|
||||
((PlayerMobile)e.Mobile).AutoStablePets();
|
||||
}
|
||||
|
||||
private static void EventSink_Connected( ConnectedEventArgs e )
|
||||
|
|
@ -989,6 +1010,9 @@ namespace Server.Mobiles
|
|||
strBase = this.Str; //this.Str already includes GetStatOffset/str
|
||||
strOffs = AosAttributes.GetValue( this, AosAttribute.BonusHits );
|
||||
|
||||
if ( Core.ML && strOffs > 25 )
|
||||
strOffs = 25;
|
||||
|
||||
if ( AnimalForm.UnderTransformation( this, typeof( BakeKitsune ) ) || AnimalForm.UnderTransformation( this, typeof( GreyWolf ) ) )
|
||||
strOffs += 20;
|
||||
}
|
||||
|
|
@ -1998,6 +2022,7 @@ namespace Server.Mobiles
|
|||
private TimeSpan m_LongTermElapse;
|
||||
private DateTime m_SessionStart;
|
||||
private DateTime m_LastEscortTime;
|
||||
private DateTime m_LastPetBallTime;
|
||||
private DateTime m_NextSmithBulkOrder;
|
||||
private DateTime m_NextTailorBulkOrder;
|
||||
private DateTime m_SavagePaintExpiration;
|
||||
|
|
@ -2072,8 +2097,17 @@ namespace Server.Mobiles
|
|||
set{ m_LastEscortTime = value; }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public DateTime LastPetBallTime
|
||||
{
|
||||
get{ return m_LastPetBallTime; }
|
||||
set{ m_LastPetBallTime = value; }
|
||||
}
|
||||
|
||||
public PlayerMobile()
|
||||
{
|
||||
m_AutoStabled = new List<Mobile>();
|
||||
|
||||
m_VisList = new List<Mobile>();
|
||||
m_PermaFlags = new List<Mobile>();
|
||||
m_AntiMacroTable = new Hashtable();
|
||||
|
|
@ -2260,6 +2294,9 @@ namespace Server.Mobiles
|
|||
if ( target is BaseCreature && ((BaseCreature)target).InitialInnocent && !((BaseCreature)target).Controlled )
|
||||
return false;
|
||||
|
||||
if ( Core.ML && target is BaseCreature && ((BaseCreature)target).Controlled && this == ((BaseCreature)target).ControlMaster )
|
||||
return false;
|
||||
|
||||
return base.IsHarmfulCriminal( target );
|
||||
}
|
||||
|
||||
|
|
@ -2319,6 +2356,11 @@ namespace Server.Mobiles
|
|||
|
||||
switch ( version )
|
||||
{
|
||||
case 26:
|
||||
{
|
||||
m_AutoStabled = reader.ReadStrongMobileList();
|
||||
goto case 25;
|
||||
}
|
||||
case 25:
|
||||
{
|
||||
int recipeCount = reader.ReadInt();
|
||||
|
|
@ -2520,6 +2562,8 @@ namespace Server.Mobiles
|
|||
}
|
||||
case 0:
|
||||
{
|
||||
if( version < 26 )
|
||||
m_AutoStabled = new List<Mobile>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -2598,7 +2642,9 @@ namespace Server.Mobiles
|
|||
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 25 ); // version
|
||||
writer.Write( (int) 26 ); // version
|
||||
|
||||
writer.Write( m_AutoStabled, true );
|
||||
|
||||
if( m_AcquiredRecipes == null )
|
||||
{
|
||||
|
|
@ -3855,5 +3901,99 @@ namespace Server.Mobiles
|
|||
m_BuffTable = null;
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void AutoStablePets()
|
||||
{
|
||||
if ( Core.SE && AllFollowers.Count > 0 )
|
||||
{
|
||||
for ( int i = 0; i < m_AllFollowers.Count; ++i )
|
||||
{
|
||||
BaseCreature pet = AllFollowers[i] as BaseCreature;
|
||||
|
||||
if ( pet == null || pet.ControlMaster == null || ( pet.Summoned && !Core.ML ) )
|
||||
continue;
|
||||
|
||||
if ( pet is IMount && ((IMount)pet).Rider != null )
|
||||
continue;
|
||||
|
||||
if ( (pet is PackLlama || pet is PackHorse || pet is Beetle || pet is HordeMinionFamiliar) && (pet.Backpack != null && pet.Backpack.Items.Count > 0) )
|
||||
continue;
|
||||
|
||||
if ( !pet.Summoned && !pet.IsBonded )
|
||||
continue;
|
||||
|
||||
pet.ControlTarget = null;
|
||||
pet.ControlOrder = OrderType.Stay;
|
||||
pet.Internalize();
|
||||
|
||||
pet.SetControlMaster( null );
|
||||
pet.SummonMaster = null;
|
||||
|
||||
pet.IsStabled = true;
|
||||
|
||||
pet.Loyalty = BaseCreature.MaxLoyalty; // Wonderfully happy
|
||||
|
||||
Stabled.Add( pet );
|
||||
m_AutoStabled.Add( pet );
|
||||
--i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ClaimAutoStabledPets()
|
||||
{
|
||||
if( !Core.SE || m_AutoStabled.Count <= 0 )
|
||||
return;
|
||||
|
||||
if( !Alive )
|
||||
{
|
||||
SendLocalizedMessage( 1076251 ); // Your pet was unable to join you while you are a ghost. Please re-login once you have ressurected to claim your pets.
|
||||
return;
|
||||
}
|
||||
|
||||
for ( int i = 0; i < m_AutoStabled.Count; ++i )
|
||||
{
|
||||
BaseCreature pet = m_AutoStabled[i] as BaseCreature;
|
||||
|
||||
if ( pet == null || pet.Deleted )
|
||||
{
|
||||
pet.IsStabled = false;
|
||||
m_AutoStabled.RemoveAt( i );
|
||||
if( Stabled.Contains( pet ) )
|
||||
Stabled.Remove( pet );
|
||||
--i;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( (Followers + pet.ControlSlots) <= FollowersMax )
|
||||
{
|
||||
m_AutoStabled.RemoveAt( i );
|
||||
--i;
|
||||
|
||||
pet.SetControlMaster( this );
|
||||
|
||||
if ( pet.Summoned )
|
||||
pet.SummonMaster = this;
|
||||
|
||||
pet.ControlTarget = this;
|
||||
pet.ControlOrder = OrderType.Follow;
|
||||
|
||||
pet.MoveToWorld( Location, Map );
|
||||
|
||||
pet.IsStabled = false;
|
||||
|
||||
pet.Loyalty = BaseCreature.MaxLoyalty; // Wonderfully Happy
|
||||
|
||||
if( Stabled.Contains( pet ) )
|
||||
Stabled.Remove( pet );
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessage( 1049612, pet.Name ); // ~1_NAME~ remained in the stables because you have too many followers.
|
||||
}
|
||||
}
|
||||
|
||||
m_AutoStabled.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -332,7 +332,7 @@ namespace Server.Mobiles
|
|||
{
|
||||
pm.SendLocalizedMessage( 1053004 ); // You must wait about a day before you can gain in compassion again.
|
||||
}
|
||||
else if ( VirtueHelper.Award( pm, VirtueName.Compassion, 200, ref gainedPath ) )
|
||||
else if ( VirtueHelper.Award( pm, VirtueName.Compassion, this.IsPrisoner ? 400 : 200, ref gainedPath ) )
|
||||
{
|
||||
if ( gainedPath )
|
||||
pm.SendLocalizedMessage( 1053005 ); // You have achieved a path in compassion!
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue