branch sync #2
This commit is contained in:
parent
96a37544fd
commit
4e6256b8cd
39 changed files with 415 additions and 137 deletions
|
|
@ -101,6 +101,8 @@ namespace Server.Commands
|
||||||
else
|
else
|
||||||
newItem.MoveToWorld( from.Location, from.Map );
|
newItem.MoveToWorld( from.Location, from.Map );
|
||||||
|
|
||||||
|
newItem.InvalidateProperties();
|
||||||
|
|
||||||
CommandLogging.WriteLine( from, "{0} {1} duped {2} creating {3}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targ ), CommandLogging.Format( newItem ) );
|
CommandLogging.WriteLine( from, "{0} {1} duped {2} creating {3}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targ ), CommandLogging.Format( newItem ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -121,7 +123,7 @@ namespace Server.Commands
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void CopyProperties( Item dest, Item src )
|
public static void CopyProperties( Item dest, Item src )
|
||||||
{
|
{
|
||||||
PropertyInfo[] props = src.GetType().GetProperties();
|
PropertyInfo[] props = src.GetType().GetProperties();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3324,8 +3324,13 @@ namespace Server.Mobiles
|
||||||
{
|
{
|
||||||
Skills[name].BaseFixedPoint = (int)(val * 10);
|
Skills[name].BaseFixedPoint = (int)(val * 10);
|
||||||
|
|
||||||
if ( Skills[name].Base > Skills[name].Cap )
|
if ( Skills[name].Base > Skills[name].Cap )
|
||||||
|
{
|
||||||
|
if ( Core.SE )
|
||||||
|
this.SkillsCap += ( Skills[name].BaseFixedPoint - Skills[name].CapFixedPoint );
|
||||||
|
|
||||||
Skills[name].Cap = Skills[name].Base;
|
Skills[name].Cap = Skills[name].Base;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetSkill( SkillName name, double min, double max )
|
public void SetSkill( SkillName name, double min, double max )
|
||||||
|
|
@ -3335,8 +3340,13 @@ namespace Server.Mobiles
|
||||||
|
|
||||||
Skills[name].BaseFixedPoint = Utility.RandomMinMax( minFixed, maxFixed );
|
Skills[name].BaseFixedPoint = Utility.RandomMinMax( minFixed, maxFixed );
|
||||||
|
|
||||||
if ( Skills[name].Base > Skills[name].Cap )
|
if ( Skills[name].Base > Skills[name].Cap )
|
||||||
|
{
|
||||||
|
if ( Core.SE )
|
||||||
|
this.SkillsCap += ( Skills[name].BaseFixedPoint - Skills[name].CapFixedPoint );
|
||||||
|
|
||||||
Skills[name].Cap = Skills[name].Base;
|
Skills[name].Cap = Skills[name].Base;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetFameLevel( int level )
|
public void SetFameLevel( int level )
|
||||||
|
|
@ -3990,6 +4000,11 @@ namespace Server.Mobiles
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<DamageStore> GetLootingRights( List<DamageEntry> damageEntries, int hitsMax )
|
public static List<DamageStore> GetLootingRights( List<DamageEntry> damageEntries, int hitsMax )
|
||||||
|
{
|
||||||
|
return GetLootingRights( damageEntries, hitsMax, false );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<DamageStore> GetLootingRights( List<DamageEntry> damageEntries, int hitsMax, bool partyAsIndividual )
|
||||||
{
|
{
|
||||||
List<DamageStore> rights = new List<DamageStore>();
|
List<DamageStore> rights = new List<DamageStore>();
|
||||||
|
|
||||||
|
|
@ -4664,7 +4679,7 @@ namespace Server.Mobiles
|
||||||
return base.CanBeDamaged();
|
return base.CanBeDamaged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool PlayerRangeSensitive{ get{ return true; } }
|
public virtual bool PlayerRangeSensitive{ get{ return (this.CurrentWayPoint == null); } } //If they are following a waypoint, they'll continue to follow it even if players aren't around
|
||||||
|
|
||||||
public override void OnSectorDeactivate()
|
public override void OnSectorDeactivate()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -313,6 +313,12 @@ namespace Server.Engines.Craft
|
||||||
private static Type[][] m_TypesTable = new Type[][]
|
private static Type[][] m_TypesTable = new Type[][]
|
||||||
{
|
{
|
||||||
new Type[]{ typeof( Log ), typeof( Board ) },
|
new Type[]{ typeof( Log ), typeof( Board ) },
|
||||||
|
new Type[]{ typeof( HeartwoodLog ), typeof( HeartwoodBoard ) },
|
||||||
|
new Type[]{ typeof( BloodwoodLog ), typeof( BloodwoodBoard ) },
|
||||||
|
new Type[]{ typeof( FrostwoodLog ), typeof( FrostwoodBoard ) },
|
||||||
|
new Type[]{ typeof( OakLog ), typeof( OakBoard ) },
|
||||||
|
new Type[]{ typeof( AshLog ), typeof( YewBoard ) },
|
||||||
|
new Type[]{ typeof( YewLog ), typeof( YewBoard ) },
|
||||||
new Type[]{ typeof( Leather ), typeof( Hides ) },
|
new Type[]{ typeof( Leather ), typeof( Hides ) },
|
||||||
new Type[]{ typeof( SpinedLeather ), typeof( SpinedHides ) },
|
new Type[]{ typeof( SpinedLeather ), typeof( SpinedHides ) },
|
||||||
new Type[]{ typeof( HornedLeather ), typeof( HornedHides ) },
|
new Type[]{ typeof( HornedLeather ), typeof( HornedHides ) },
|
||||||
|
|
|
||||||
|
|
@ -352,6 +352,18 @@ namespace Server.Engines.Craft
|
||||||
|
|
||||||
MarkOption = true;
|
MarkOption = true;
|
||||||
Repair = Core.AOS;
|
Repair = Core.AOS;
|
||||||
|
|
||||||
|
SetSubRes( typeof( Log ), 1072643 );
|
||||||
|
|
||||||
|
// Add every material you want the player to be able to choose from
|
||||||
|
// This will override the overridable material TODO: Verify the required skill amount
|
||||||
|
AddSubRes( typeof( Log ), 1072643, 00.0, 1044041, 1072652 );
|
||||||
|
AddSubRes( typeof( OakLog ), 1072644, 65.0, 1044041, 1072652 );
|
||||||
|
AddSubRes( typeof( AshLog ), 1072645, 80.0, 1044041, 1072652 );
|
||||||
|
AddSubRes( typeof( YewLog ), 1072646, 95.0, 1044041, 1072652 );
|
||||||
|
AddSubRes( typeof( HeartwoodLog ), 1072647, 100.0, 1044041, 1072652 );
|
||||||
|
AddSubRes( typeof( BloodwoodLog ), 1072648, 100.0, 1044041, 1072652 );
|
||||||
|
AddSubRes( typeof( FrostwoodLog ), 1072649, 100.0, 1044041, 1072652 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -202,7 +202,7 @@ namespace Server.Engines.Craft
|
||||||
AddSpell( typeof( FireballScroll ), Reg.BlackPearl );
|
AddSpell( typeof( FireballScroll ), Reg.BlackPearl );
|
||||||
AddSpell( typeof( MagicLockScroll ), Reg.Bloodmoss, Reg.Garlic, Reg.SulfurousAsh );
|
AddSpell( typeof( MagicLockScroll ), Reg.Bloodmoss, Reg.Garlic, Reg.SulfurousAsh );
|
||||||
AddSpell( typeof( PoisonScroll ), Reg.Nightshade );
|
AddSpell( typeof( PoisonScroll ), Reg.Nightshade );
|
||||||
AddSpell( typeof( TelekinisisScroll ), Reg.Garlic, Reg.SpidersSilk, Reg.SulfurousAsh );
|
AddSpell( typeof( TelekinisisScroll ), Reg.Bloodmoss, Reg.MandrakeRoot );
|
||||||
AddSpell( typeof( TeleportScroll ), Reg.Bloodmoss, Reg.MandrakeRoot );
|
AddSpell( typeof( TeleportScroll ), Reg.Bloodmoss, Reg.MandrakeRoot );
|
||||||
AddSpell( typeof( UnlockScroll ), Reg.Bloodmoss, Reg.SulfurousAsh );
|
AddSpell( typeof( UnlockScroll ), Reg.Bloodmoss, Reg.SulfurousAsh );
|
||||||
AddSpell( typeof( WallOfStoneScroll ), Reg.Bloodmoss, Reg.Garlic );
|
AddSpell( typeof( WallOfStoneScroll ), Reg.Bloodmoss, Reg.Garlic );
|
||||||
|
|
|
||||||
|
|
@ -424,7 +424,9 @@ namespace Server.Factions
|
||||||
else if ( !Guild.NewGuildSystem && guild.Type != GuildType.Regular )
|
else if ( !Guild.NewGuildSystem && guild.Type != GuildType.Regular )
|
||||||
pm.SendLocalizedMessage( 1042161 ); // You cannot join a faction because your guild is an Order or Chaos type.
|
pm.SendLocalizedMessage( 1042161 ); // You cannot join a faction because your guild is an Order or Chaos type.
|
||||||
else if ( !Guild.NewGuildSystem && guild.Enemies != null && guild.Enemies.Count > 0 ) //CAN join w/wars in new system
|
else if ( !Guild.NewGuildSystem && guild.Enemies != null && guild.Enemies.Count > 0 ) //CAN join w/wars in new system
|
||||||
pm.SendLocalizedMessage( 1005056 ); // You cannot join a faction with active Wars
|
pm.SendLocalizedMessage( 1005056 ); // You cannot join a faction with active Wars
|
||||||
|
else if ( Guild.NewGuildSystem && guild.Alliance != null )
|
||||||
|
pm.SendLocalizedMessage( 1080454 ); // Your guild cannot join a faction while in alliance with non-factioned guilds.
|
||||||
else if ( !CanHandleInflux( guild.Members.Count ) )
|
else if ( !CanHandleInflux( guild.Members.Count ) )
|
||||||
pm.SendLocalizedMessage( 1018031 ); // In the interest of faction stability, this faction declines to accept new members for now.
|
pm.SendLocalizedMessage( 1018031 ); // In the interest of faction stability, this faction declines to accept new members for now.
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ namespace Server.Factions
|
||||||
|
|
||||||
private string m_FriendlyName;
|
private string m_FriendlyName;
|
||||||
private string m_Keyword;
|
private string m_Keyword;
|
||||||
|
private string m_Abbreviation;
|
||||||
|
|
||||||
private TextDefinition m_Name;
|
private TextDefinition m_Name;
|
||||||
private TextDefinition m_PropName;
|
private TextDefinition m_PropName;
|
||||||
|
|
@ -46,6 +47,7 @@ namespace Server.Factions
|
||||||
|
|
||||||
public string FriendlyName{ get{ return m_FriendlyName; } }
|
public string FriendlyName{ get{ return m_FriendlyName; } }
|
||||||
public string Keyword{ get{ return m_Keyword; } }
|
public string Keyword{ get{ return m_Keyword; } }
|
||||||
|
public string Abbreviation{ get { return m_Abbreviation; } }
|
||||||
|
|
||||||
public TextDefinition Name{ get{ return m_Name; } }
|
public TextDefinition Name{ get{ return m_Name; } }
|
||||||
public TextDefinition PropName{ get{ return m_PropName; } }
|
public TextDefinition PropName{ get{ return m_PropName; } }
|
||||||
|
|
@ -66,7 +68,7 @@ namespace Server.Factions
|
||||||
public RankDefinition[] Ranks{ get{ return m_Ranks; } }
|
public RankDefinition[] Ranks{ get{ return m_Ranks; } }
|
||||||
public GuardDefinition[] Guards{ get{ return m_Guards; } }
|
public GuardDefinition[] Guards{ get{ return m_Guards; } }
|
||||||
|
|
||||||
public FactionDefinition( int sort, int huePrimary, int hueSecondary, int hueJoin, int hueBroadcast, int warHorseBody, int warHorseItem, string friendlyName, string keyword, TextDefinition name, TextDefinition propName, TextDefinition header, TextDefinition about, TextDefinition cityControl, TextDefinition sigilControl, TextDefinition signupName, TextDefinition factionStoneName, TextDefinition ownerLabel, TextDefinition guardIgnore, TextDefinition guardWarn, TextDefinition guardAttack, StrongholdDefinition stronghold, RankDefinition[] ranks, GuardDefinition[] guards )
|
public FactionDefinition( int sort, int huePrimary, int hueSecondary, int hueJoin, int hueBroadcast, int warHorseBody, int warHorseItem, string friendlyName, string keyword, string abbreviation, TextDefinition name, TextDefinition propName, TextDefinition header, TextDefinition about, TextDefinition cityControl, TextDefinition sigilControl, TextDefinition signupName, TextDefinition factionStoneName, TextDefinition ownerLabel, TextDefinition guardIgnore, TextDefinition guardWarn, TextDefinition guardAttack, StrongholdDefinition stronghold, RankDefinition[] ranks, GuardDefinition[] guards )
|
||||||
{
|
{
|
||||||
m_Sort = sort;
|
m_Sort = sort;
|
||||||
m_HuePrimary = huePrimary;
|
m_HuePrimary = huePrimary;
|
||||||
|
|
@ -77,6 +79,7 @@ namespace Server.Factions
|
||||||
m_WarHorseItem = warHorseItem;
|
m_WarHorseItem = warHorseItem;
|
||||||
m_FriendlyName = friendlyName;
|
m_FriendlyName = friendlyName;
|
||||||
m_Keyword = keyword;
|
m_Keyword = keyword;
|
||||||
|
m_Abbreviation = abbreviation;
|
||||||
m_Name = name;
|
m_Name = name;
|
||||||
m_PropName = propName;
|
m_PropName = propName;
|
||||||
m_Header = header;
|
m_Header = header;
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Server.Factions
|
||||||
1325, // join stone : blue
|
1325, // join stone : blue
|
||||||
1325, // broadcast : blue
|
1325, // broadcast : blue
|
||||||
0x77, 0x3EB1, // war horse
|
0x77, 0x3EB1, // war horse
|
||||||
"Council of Mages", "council",
|
"Council of Mages", "council", "CoM",
|
||||||
new TextDefinition( 1011535, "COUNCIL OF MAGES" ),
|
new TextDefinition( 1011535, "COUNCIL OF MAGES" ),
|
||||||
new TextDefinition( 1060770, "Council of Mages faction" ),
|
new TextDefinition( 1060770, "Council of Mages faction" ),
|
||||||
new TextDefinition( 1011422, "<center>COUNCIL OF MAGES</center>" ),
|
new TextDefinition( 1011422, "<center>COUNCIL OF MAGES</center>" ),
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Server.Factions
|
||||||
1645, // join stone : dark red
|
1645, // join stone : dark red
|
||||||
1645, // broadcast : dark red
|
1645, // broadcast : dark red
|
||||||
0x78, 0x3EAF, // war horse
|
0x78, 0x3EAF, // war horse
|
||||||
"Minax", "minax",
|
"Minax", "minax", "Min",
|
||||||
new TextDefinition( 1011534, "MINAX" ),
|
new TextDefinition( 1011534, "MINAX" ),
|
||||||
new TextDefinition( 1060769, "Minax faction" ),
|
new TextDefinition( 1060769, "Minax faction" ),
|
||||||
new TextDefinition( 1011421, "<center>FOLLOWERS OF MINAX</center>" ),
|
new TextDefinition( 1011421, "<center>FOLLOWERS OF MINAX</center>" ),
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Server.Factions
|
||||||
1109, // join stone : shadow
|
1109, // join stone : shadow
|
||||||
2211, // broadcast : green
|
2211, // broadcast : green
|
||||||
0x79, 0x3EB0, // war horse
|
0x79, 0x3EB0, // war horse
|
||||||
"Shadowlords", "shadow",
|
"Shadowlords", "shadow", "SL",
|
||||||
new TextDefinition( 1011537, "SHADOWLORDS" ),
|
new TextDefinition( 1011537, "SHADOWLORDS" ),
|
||||||
new TextDefinition( 1060772, "Shadowlords faction" ),
|
new TextDefinition( 1060772, "Shadowlords faction" ),
|
||||||
new TextDefinition( 1011424, "<center>SHADES OF DARKNESS</center>" ),
|
new TextDefinition( 1011424, "<center>SHADES OF DARKNESS</center>" ),
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Server.Factions
|
||||||
2214, // join stone : gold
|
2214, // join stone : gold
|
||||||
2125, // broadcast : gold
|
2125, // broadcast : gold
|
||||||
0x76, 0x3EB2, // war horse
|
0x76, 0x3EB2, // war horse
|
||||||
"True Britannians", "true",
|
"True Britannians", "true", "TB",
|
||||||
new TextDefinition( 1011536, "LORD BRITISH" ),
|
new TextDefinition( 1011536, "LORD BRITISH" ),
|
||||||
new TextDefinition( 1060771, "True Britannians faction" ),
|
new TextDefinition( 1060771, "True Britannians faction" ),
|
||||||
new TextDefinition( 1011423, "<center>TRUE BRITANNIANS</center>" ),
|
new TextDefinition( 1011423, "<center>TRUE BRITANNIANS</center>" ),
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,14 @@ namespace Server.Factions
|
||||||
m_Town.RegisterVendor( this );
|
m_Town.RegisterVendor( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool OnMoveOver( Mobile m )
|
||||||
|
{
|
||||||
|
if ( Core.ML )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return base.OnMoveOver( m );
|
||||||
|
}
|
||||||
|
|
||||||
public void Unregister()
|
public void Unregister()
|
||||||
{
|
{
|
||||||
if ( m_Town != null )
|
if ( m_Town != null )
|
||||||
|
|
|
||||||
|
|
@ -88,13 +88,13 @@ namespace Server.Engines.Harvest
|
||||||
|
|
||||||
veins = new HarvestVein[]
|
veins = new HarvestVein[]
|
||||||
{
|
{
|
||||||
new HarvestVein( 58.4, 0.0, res[0], null ), // Ordinary Logs
|
new HarvestVein( 49.0, 0.0, res[0], null ), // Ordinary Logs
|
||||||
new HarvestVein( 30.0, 0.5, res[1], res[0] ), // Oak
|
new HarvestVein( 30.0, 0.5, res[1], res[0] ), // Oak
|
||||||
new HarvestVein( 10.0, 0.5, res[2], res[0] ), // Ash
|
new HarvestVein( 10.0, 0.5, res[2], res[0] ), // Ash
|
||||||
new HarvestVein( 01.0, 0.5, res[3], res[0] ), // Yew
|
new HarvestVein( 05.0, 0.5, res[3], res[0] ), // Yew
|
||||||
new HarvestVein( 00.3, 0.5, res[4], res[0] ), // Heartwood
|
new HarvestVein( 03.0, 0.5, res[4], res[0] ), // Heartwood
|
||||||
new HarvestVein( 00.2, 0.5, res[5], res[0] ), // Bloodwood
|
new HarvestVein( 02.0, 0.5, res[5], res[0] ), // Bloodwood
|
||||||
new HarvestVein( 00.1, 0.5, res[6], res[0] ), // Frostwood
|
new HarvestVein( 01.0, 0.5, res[6], res[0] ), // Frostwood
|
||||||
};
|
};
|
||||||
|
|
||||||
lumber.BonusResources = new BonusHarvestResource[]
|
lumber.BonusResources = new BonusHarvestResource[]
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,8 @@ namespace Server.Mobiles
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual int CreaturesNameCount { get { return m_CreaturesName.Count; } }
|
||||||
|
|
||||||
public override void OnAfterDuped( Item newItem )
|
public override void OnAfterDuped( Item newItem )
|
||||||
{
|
{
|
||||||
Spawner s = newItem as Spawner;
|
Spawner s = newItem as Spawner;
|
||||||
|
|
@ -244,7 +246,7 @@ namespace Server.Mobiles
|
||||||
{
|
{
|
||||||
if ( !m_Running )
|
if ( !m_Running )
|
||||||
{
|
{
|
||||||
if ( m_CreaturesName.Count > 0 )
|
if ( CreaturesNameCount > 0 )
|
||||||
{
|
{
|
||||||
m_Running = true;
|
m_Running = true;
|
||||||
DoTimer();
|
DoTimer();
|
||||||
|
|
@ -346,8 +348,8 @@ namespace Server.Mobiles
|
||||||
|
|
||||||
public void Spawn()
|
public void Spawn()
|
||||||
{
|
{
|
||||||
if ( m_CreaturesName.Count > 0 )
|
if ( CreaturesNameCount > 0 )
|
||||||
Spawn( Utility.Random( m_CreaturesName.Count ) );
|
Spawn( Utility.Random( CreaturesNameCount ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Spawn( string creatureName )
|
public void Spawn( string creatureName )
|
||||||
|
|
@ -362,17 +364,11 @@ namespace Server.Mobiles
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Spawn( int index )
|
protected virtual IEntity CreateSpawnedObject( int index )
|
||||||
{
|
{
|
||||||
Map map = Map;
|
if ( index >= m_CreaturesName.Count )
|
||||||
|
return null;
|
||||||
|
|
||||||
if ( map == null || map == Map.Internal || m_CreaturesName.Count == 0 || index >= m_CreaturesName.Count || Parent != null )
|
|
||||||
return;
|
|
||||||
|
|
||||||
Defrag();
|
|
||||||
|
|
||||||
if ( m_Creatures.Count >= m_Count )
|
|
||||||
return;
|
|
||||||
|
|
||||||
Type type = SpawnerType.GetType( m_CreaturesName[index] );
|
Type type = SpawnerType.GetType( m_CreaturesName[index] );
|
||||||
|
|
||||||
|
|
@ -382,60 +378,81 @@ namespace Server.Mobiles
|
||||||
{
|
{
|
||||||
object o = Activator.CreateInstance( type );
|
object o = Activator.CreateInstance( type );
|
||||||
|
|
||||||
if ( o is Mobile )
|
return ( o as IEntity );
|
||||||
{
|
|
||||||
Mobile m = (Mobile)o;
|
|
||||||
|
|
||||||
m_Creatures.Add( m );
|
|
||||||
|
|
||||||
|
|
||||||
Point3D loc = ( m is BaseVendor ? this.Location : GetSpawnPosition() );
|
|
||||||
|
|
||||||
m.OnBeforeSpawn( loc, map );
|
|
||||||
InvalidateProperties();
|
|
||||||
|
|
||||||
|
|
||||||
m.MoveToWorld( loc, map );
|
|
||||||
|
|
||||||
if ( m is BaseCreature )
|
|
||||||
{
|
|
||||||
BaseCreature c = (BaseCreature)m;
|
|
||||||
|
|
||||||
if( m_WalkingRange >= 0 )
|
|
||||||
c.RangeHome = m_WalkingRange;
|
|
||||||
else
|
|
||||||
c.RangeHome = m_HomeRange;
|
|
||||||
|
|
||||||
c.CurrentWayPoint = m_WayPoint;
|
|
||||||
|
|
||||||
if ( m_Team > 0 )
|
|
||||||
c.Team = m_Team;
|
|
||||||
|
|
||||||
c.Home = this.Location;
|
|
||||||
}
|
|
||||||
|
|
||||||
m.OnAfterSpawn();
|
|
||||||
}
|
|
||||||
else if ( o is Item )
|
|
||||||
{
|
|
||||||
Item item = (Item)o;
|
|
||||||
|
|
||||||
m_Creatures.Add( item );
|
|
||||||
|
|
||||||
Point3D loc = GetSpawnPosition();
|
|
||||||
|
|
||||||
item.OnBeforeSpawn( loc, map );
|
|
||||||
InvalidateProperties();
|
|
||||||
|
|
||||||
item.MoveToWorld( loc, map );
|
|
||||||
|
|
||||||
item.OnAfterSpawn();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Spawn( int index )
|
||||||
|
{
|
||||||
|
Map map = Map;
|
||||||
|
|
||||||
|
if ( map == null || map == Map.Internal || CreaturesNameCount == 0 || index >= CreaturesNameCount || Parent != null )
|
||||||
|
return;
|
||||||
|
|
||||||
|
Defrag();
|
||||||
|
|
||||||
|
if ( m_Creatures.Count >= m_Count )
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
IEntity ent = CreateSpawnedObject( index );
|
||||||
|
|
||||||
|
if ( ent is Mobile )
|
||||||
|
{
|
||||||
|
Mobile m = (Mobile)ent;
|
||||||
|
|
||||||
|
m_Creatures.Add( m );
|
||||||
|
|
||||||
|
|
||||||
|
Point3D loc = ( m is BaseVendor ? this.Location : GetSpawnPosition() );
|
||||||
|
|
||||||
|
m.OnBeforeSpawn( loc, map );
|
||||||
|
InvalidateProperties();
|
||||||
|
|
||||||
|
|
||||||
|
m.MoveToWorld( loc, map );
|
||||||
|
|
||||||
|
if ( m is BaseCreature )
|
||||||
|
{
|
||||||
|
BaseCreature c = (BaseCreature)m;
|
||||||
|
|
||||||
|
if( m_WalkingRange >= 0 )
|
||||||
|
c.RangeHome = m_WalkingRange;
|
||||||
|
else
|
||||||
|
c.RangeHome = m_HomeRange;
|
||||||
|
|
||||||
|
c.CurrentWayPoint = m_WayPoint;
|
||||||
|
|
||||||
|
if ( m_Team > 0 )
|
||||||
|
c.Team = m_Team;
|
||||||
|
|
||||||
|
c.Home = this.Location;
|
||||||
|
}
|
||||||
|
|
||||||
|
m.OnAfterSpawn();
|
||||||
|
}
|
||||||
|
else if ( ent is Item )
|
||||||
|
{
|
||||||
|
Item item = (Item)ent;
|
||||||
|
|
||||||
|
m_Creatures.Add( item );
|
||||||
|
|
||||||
|
Point3D loc = GetSpawnPosition();
|
||||||
|
|
||||||
|
item.OnBeforeSpawn( loc, map );
|
||||||
|
InvalidateProperties();
|
||||||
|
|
||||||
|
item.MoveToWorld( loc, map );
|
||||||
|
|
||||||
|
item.OnAfterSpawn();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Point3D GetSpawnPosition()
|
public Point3D GetSpawnPosition()
|
||||||
|
|
|
||||||
|
|
@ -490,7 +490,8 @@ namespace Server.Gumps
|
||||||
SkillName.Necromancy,
|
SkillName.Necromancy,
|
||||||
SkillName.SpiritSpeak,
|
SkillName.SpiritSpeak,
|
||||||
SkillName.Ninjitsu,
|
SkillName.Ninjitsu,
|
||||||
SkillName.Bushido
|
SkillName.Bushido,
|
||||||
|
SkillName.Spellweaving
|
||||||
} ),
|
} ),
|
||||||
new SkillsGumpGroup( "Miscellaneous", new SkillName[]
|
new SkillsGumpGroup( "Miscellaneous", new SkillName[]
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,18 @@ namespace Server.Items
|
||||||
public virtual int OldDexReq{ get{ return 0; } }
|
public virtual int OldDexReq{ get{ return 0; } }
|
||||||
public virtual int OldIntReq{ get{ return 0; } }
|
public virtual int OldIntReq{ get{ return 0; } }
|
||||||
|
|
||||||
|
public override void OnAfterDuped( Item newItem )
|
||||||
|
{
|
||||||
|
BaseArmor armor = newItem as BaseArmor;
|
||||||
|
|
||||||
|
if ( armor == null )
|
||||||
|
return;
|
||||||
|
|
||||||
|
armor.m_AosAttributes = new AosAttributes( newItem, m_AosAttributes );
|
||||||
|
armor.m_AosArmorAttributes = new AosArmorAttributes( newItem, m_AosArmorAttributes );
|
||||||
|
armor.m_AosSkillBonuses = new AosSkillBonuses( newItem, m_AosSkillBonuses );
|
||||||
|
}
|
||||||
|
|
||||||
[CommandProperty( AccessLevel.GameMaster )]
|
[CommandProperty( AccessLevel.GameMaster )]
|
||||||
public AMA MeditationAllowance
|
public AMA MeditationAllowance
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,9 @@ namespace Server.Items
|
||||||
{
|
{
|
||||||
public class BlueBook : BaseBook
|
public class BlueBook : BaseBook
|
||||||
{
|
{
|
||||||
|
|
||||||
[Constructable]
|
[Constructable]
|
||||||
public BlueBook() : base( 0xFF2 )
|
public BlueBook() : base( 0xFF2, 40, true )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -43,4 +44,4 @@ namespace Server.Items
|
||||||
writer.Write( (int)0 ); // version
|
writer.Write( (int)0 ); // version
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -449,6 +449,19 @@ namespace Server.Items
|
||||||
m_AosResistances = new AosElementAttributes( this );
|
m_AosResistances = new AosElementAttributes( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnAfterDuped( Item newItem )
|
||||||
|
{
|
||||||
|
BaseClothing clothing = newItem as BaseClothing;
|
||||||
|
|
||||||
|
if ( clothing == null )
|
||||||
|
return;
|
||||||
|
|
||||||
|
clothing.m_AosAttributes = new AosAttributes( newItem, m_AosAttributes );
|
||||||
|
clothing.m_AosResistances = new AosElementAttributes( newItem, m_AosResistances );
|
||||||
|
clothing.m_AosSkillBonuses = new AosSkillBonuses( newItem, m_AosSkillBonuses );
|
||||||
|
clothing.m_AosClothingAttributes = new AosArmorAttributes( newItem, m_AosClothingAttributes );
|
||||||
|
}
|
||||||
|
|
||||||
public BaseClothing( Serial serial ) : base( serial )
|
public BaseClothing( Serial serial ) : base( serial )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@ namespace Server.Items
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnAfterDuped( Item newItem )
|
||||||
|
{
|
||||||
|
BaseJewel jewel = newItem as BaseJewel;
|
||||||
|
|
||||||
|
if ( jewel == null )
|
||||||
|
return;
|
||||||
|
|
||||||
|
jewel.m_AosAttributes = new AosAttributes( newItem, m_AosAttributes );
|
||||||
|
jewel.m_AosResistances = new AosElementAttributes( newItem, m_AosResistances );
|
||||||
|
jewel.m_AosSkillBonuses = new AosSkillBonuses( newItem, m_AosSkillBonuses );
|
||||||
|
}
|
||||||
|
|
||||||
public virtual int ArtifactRarity{ get{ return 0; } }
|
public virtual int ArtifactRarity{ get{ return 0; } }
|
||||||
|
|
||||||
public BaseJewel( int itemID, Layer layer ) : base( itemID )
|
public BaseJewel( int itemID, Layer layer ) : base( itemID )
|
||||||
|
|
|
||||||
|
|
@ -43,11 +43,27 @@ namespace Server.Items
|
||||||
|
|
||||||
public static readonly TimeSpan MonsterLootRightSacrifice = TimeSpan.FromMinutes( 2.0 );
|
public static readonly TimeSpan MonsterLootRightSacrifice = TimeSpan.FromMinutes( 2.0 );
|
||||||
|
|
||||||
|
public static readonly TimeSpan InstancedCorpseTime = TimeSpan.FromMinutes( 3.0 );
|
||||||
|
|
||||||
|
[CommandProperty( AccessLevel.GameMaster )]
|
||||||
|
public virtual bool InstancedCorpse
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ( !Core.SE )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return ( DateTime.Now > m_TimeOfDeath + InstancedCorpseTime );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override bool IsDecoContainer
|
public override bool IsDecoContainer
|
||||||
{
|
{
|
||||||
get{ return false; }
|
get{ return false; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Dictionary<Mobile, List<Item>> m_InstancedItems;
|
||||||
|
|
||||||
[CommandProperty( AccessLevel.GameMaster )]
|
[CommandProperty( AccessLevel.GameMaster )]
|
||||||
public DateTime TimeOfDeath
|
public DateTime TimeOfDeath
|
||||||
{
|
{
|
||||||
|
|
@ -268,6 +284,7 @@ namespace Server.Items
|
||||||
public Corpse( Mobile owner, List<Item> equipItems ) : this( owner, null, null, equipItems )
|
public Corpse( Mobile owner, List<Item> equipItems ) : this( owner, null, null, equipItems )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public Corpse( Mobile owner, HairInfo hair, FacialHairInfo facialhair, List<Item> equipItems )
|
public Corpse( Mobile owner, HairInfo hair, FacialHairInfo facialhair, List<Item> equipItems )
|
||||||
: base( 0x2006 )
|
: base( 0x2006 )
|
||||||
{
|
{
|
||||||
|
|
@ -356,6 +373,12 @@ namespace Server.Items
|
||||||
BeginDecay( m_DefaultDecayTime );
|
BeginDecay( m_DefaultDecayTime );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void AssignInstancedLoot()
|
||||||
|
{
|
||||||
|
if ( m_InstancedItems == null )
|
||||||
|
m_InstancedItems = new Dictionary<Mobile, List<Item>>();
|
||||||
|
}
|
||||||
|
|
||||||
public Corpse( Serial serial ) : base( serial )
|
public Corpse( Serial serial ) : base( serial )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -238,7 +238,7 @@ namespace Server.Items
|
||||||
new PMEntry( new Point3D( 1828, 2948,-20), 1012008 ), // Trinsic
|
new PMEntry( new Point3D( 1828, 2948,-20), 1012008 ), // Trinsic
|
||||||
new PMEntry( new Point3D( 643, 2067, 5 ), 1012009 ), // Skara Brae
|
new PMEntry( new Point3D( 643, 2067, 5 ), 1012009 ), // Skara Brae
|
||||||
new PMEntry( new Point3D( 3563, 2139, 34), 1012010 ), // Magincia
|
new PMEntry( new Point3D( 3563, 2139, 34), 1012010 ), // Magincia
|
||||||
new PMEntry( new Point3D( 3763, 2771, 50), 1078098 ) // New Haven
|
new PMEntry( new Point3D( 3450, 2677, 25), 1078098 ) // New Haven
|
||||||
} );
|
} );
|
||||||
|
|
||||||
public static readonly PMList Felucca =
|
public static readonly PMList Felucca =
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ using Server.Gumps;
|
||||||
|
|
||||||
namespace Server.Items
|
namespace Server.Items
|
||||||
{
|
{
|
||||||
|
[FlipableAttribute( 0xA57, 0xA58, 0xA59 )]
|
||||||
public class Bedroll : Item
|
public class Bedroll : Item
|
||||||
{
|
{
|
||||||
[Constructable]
|
[Constructable]
|
||||||
|
|
|
||||||
|
|
@ -412,6 +412,17 @@ namespace Server.Items
|
||||||
Content = content;
|
Content = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnAfterDuped( Item newItem )
|
||||||
|
{
|
||||||
|
Spellbook book = newItem as Spellbook;
|
||||||
|
|
||||||
|
if ( book == null )
|
||||||
|
return;
|
||||||
|
|
||||||
|
book.m_AosAttributes = new AosAttributes( newItem, m_AosAttributes );
|
||||||
|
book.m_AosSkillBonuses = new AosSkillBonuses( newItem, m_AosSkillBonuses );
|
||||||
|
}
|
||||||
|
|
||||||
public override void OnAdded( object parent )
|
public override void OnAdded( object parent )
|
||||||
{
|
{
|
||||||
if ( Core.AOS && parent is Mobile )
|
if ( Core.AOS && parent is Mobile )
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ namespace Server.Items
|
||||||
|
|
||||||
AOS.Damage( defender, attacker, (int)(15.0 * (attacker.Skills[SkillName.Bushido].Value - 50.0) / 70.0 + 10), 100, 0, 0, 0, 0 ); //10-25
|
AOS.Damage( defender, attacker, (int)(15.0 * (attacker.Skills[SkillName.Bushido].Value - 50.0) / 70.0 + 10), 100, 0, 0, 0, 0 ); //10-25
|
||||||
|
|
||||||
defender.Paralyze( TimeSpan.FromSeconds( 3.0 ) );
|
defender.Freeze( TimeSpan.FromSeconds( 2.0 ) );
|
||||||
Server.Items.ParalyzingBlow.BeginImmunity( defender, Server.Items.ParalyzingBlow.FreezeDelayDuration );
|
Server.Items.ParalyzingBlow.BeginImmunity( defender, Server.Items.ParalyzingBlow.FreezeDelayDuration );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -413,6 +413,19 @@ namespace Server.Items
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public override void OnAfterDuped( Item newItem )
|
||||||
|
{
|
||||||
|
BaseWeapon weap = newItem as BaseWeapon;
|
||||||
|
|
||||||
|
if ( weap == null )
|
||||||
|
return;
|
||||||
|
|
||||||
|
weap.m_AosAttributes = new AosAttributes( newItem, m_AosAttributes );
|
||||||
|
weap.m_AosElementDamages = new AosElementAttributes( newItem, m_AosElementDamages );
|
||||||
|
weap.m_AosSkillBonuses = new AosSkillBonuses( newItem, m_AosSkillBonuses );
|
||||||
|
weap.m_AosWeaponAttributes = new AosWeaponAttributes( newItem, m_AosWeaponAttributes );
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void UnscaleDurability()
|
public virtual void UnscaleDurability()
|
||||||
{
|
{
|
||||||
int scale = 100 + GetDurabilityBonus();
|
int scale = 100 + GetDurabilityBonus();
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,11 @@ namespace Server
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AosAttributes( Item owner, AosAttributes other )
|
||||||
|
: base( owner, other )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public AosAttributes( Item owner, GenericReader reader )
|
public AosAttributes( Item owner, GenericReader reader )
|
||||||
: base( owner, reader )
|
: base( owner, reader )
|
||||||
{
|
{
|
||||||
|
|
@ -377,6 +382,11 @@ namespace Server
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AosWeaponAttributes( Item owner, AosWeaponAttributes other )
|
||||||
|
: base( owner, other )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public AosWeaponAttributes( Item owner, GenericReader reader )
|
public AosWeaponAttributes( Item owner, GenericReader reader )
|
||||||
: base( owner, reader )
|
: base( owner, reader )
|
||||||
{
|
{
|
||||||
|
|
@ -514,6 +524,11 @@ namespace Server
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AosArmorAttributes( Item owner, AosArmorAttributes other )
|
||||||
|
: base( owner, other )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public static int GetValue( Mobile m, AosArmorAttribute attribute )
|
public static int GetValue( Mobile m, AosArmorAttribute attribute )
|
||||||
{
|
{
|
||||||
if( !Core.AOS )
|
if( !Core.AOS )
|
||||||
|
|
@ -571,7 +586,7 @@ namespace Server
|
||||||
|
|
||||||
public sealed class AosSkillBonuses : BaseAttributes
|
public sealed class AosSkillBonuses : BaseAttributes
|
||||||
{
|
{
|
||||||
private ArrayList m_Mods;
|
private List<SkillMod> m_Mods;
|
||||||
|
|
||||||
public AosSkillBonuses( Item owner )
|
public AosSkillBonuses( Item owner )
|
||||||
: base( owner )
|
: base( owner )
|
||||||
|
|
@ -583,6 +598,11 @@ namespace Server
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AosSkillBonuses( Item owner, AosSkillBonuses other )
|
||||||
|
: base( owner, other )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void GetProperties( ObjectPropertyList list )
|
public void GetProperties( ObjectPropertyList list )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < 5; ++i )
|
for( int i = 0; i < 5; ++i )
|
||||||
|
|
@ -610,7 +630,7 @@ namespace Server
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( m_Mods == null )
|
if( m_Mods == null )
|
||||||
m_Mods = new ArrayList();
|
m_Mods = new List<SkillMod>();
|
||||||
|
|
||||||
SkillMod sk = new DefaultSkillMod( skill, true, bonus );
|
SkillMod sk = new DefaultSkillMod( skill, true, bonus );
|
||||||
sk.ObeyCap = true;
|
sk.ObeyCap = true;
|
||||||
|
|
@ -625,7 +645,7 @@ namespace Server
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for( int i = 0; i < m_Mods.Count; ++i )
|
for( int i = 0; i < m_Mods.Count; ++i )
|
||||||
((SkillMod)m_Mods[i]).Remove();
|
m_Mods[i].Remove();
|
||||||
|
|
||||||
m_Mods = null;
|
m_Mods = null;
|
||||||
}
|
}
|
||||||
|
|
@ -756,6 +776,11 @@ namespace Server
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AosElementAttributes( Item owner, AosElementAttributes other )
|
||||||
|
: base( owner, other )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public AosElementAttributes( Item owner, GenericReader reader )
|
public AosElementAttributes( Item owner, GenericReader reader )
|
||||||
: base( owner, reader )
|
: base( owner, reader )
|
||||||
{
|
{
|
||||||
|
|
@ -806,6 +831,14 @@ namespace Server
|
||||||
m_Values = m_Empty;
|
m_Values = m_Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BaseAttributes( Item owner, BaseAttributes other )
|
||||||
|
{
|
||||||
|
m_Owner = owner;
|
||||||
|
m_Values = new int[other.m_Values.Length];
|
||||||
|
other.m_Values.CopyTo( m_Values, 0 );
|
||||||
|
m_Names = other.m_Names;
|
||||||
|
}
|
||||||
|
|
||||||
public BaseAttributes( Item owner, GenericReader reader )
|
public BaseAttributes( Item owner, GenericReader reader )
|
||||||
{
|
{
|
||||||
m_Owner = owner;
|
m_Owner = owner;
|
||||||
|
|
|
||||||
|
|
@ -65,17 +65,18 @@ namespace Server.Misc
|
||||||
if( from == null || target == null || from.AccessLevel > AccessLevel.Player || target.AccessLevel > AccessLevel.Player )
|
if( from == null || target == null || from.AccessLevel > AccessLevel.Player || target.AccessLevel > AccessLevel.Player )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
Map map = from.Map;
|
||||||
|
|
||||||
#region Factions
|
#region Factions
|
||||||
Faction targetFaction = Faction.Find( target, true );
|
Faction targetFaction = Faction.Find( target, true );
|
||||||
|
|
||||||
if( targetFaction != null )
|
if( (!Core.ML || map == Faction.Facet) && targetFaction != null )
|
||||||
{
|
{
|
||||||
if( Faction.Find( from, true ) != targetFaction )
|
if( Faction.Find( from, true ) != targetFaction )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Map map = from.Map;
|
|
||||||
|
|
||||||
if( map != null && (map.Rules & MapRules.BeneficialRestrictions) == 0 )
|
if( map != null && (map.Rules & MapRules.BeneficialRestrictions) == 0 )
|
||||||
return true; // In felucca, anything goes
|
return true; // In felucca, anything goes
|
||||||
|
|
|
||||||
|
|
@ -3250,6 +3250,20 @@ namespace Server.Mobiles
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
if ( Core.ML && this.Map == Faction.Facet )
|
||||||
|
{
|
||||||
|
Faction faction = Faction.Find( this );
|
||||||
|
|
||||||
|
if ( faction != null )
|
||||||
|
{
|
||||||
|
string adjunct = String.Format( "[{0}]", faction.Definition.Abbreviation );
|
||||||
|
if ( suffix.Length == 0 )
|
||||||
|
suffix = adjunct;
|
||||||
|
else
|
||||||
|
suffix = String.Concat( suffix, " ", adjunct );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return base.ApplyNameSuffix( suffix );
|
return base.ApplyNameSuffix( suffix );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -200,10 +200,15 @@ namespace Server.Multis
|
||||||
if ( Deleted )
|
if ( Deleted )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if ( Core.ML )
|
||||||
|
new TempNoHousingRegion( this );
|
||||||
|
|
||||||
KillVendors();
|
KillVendors();
|
||||||
Delete();
|
Delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual TimeSpan RestrictedPlacingTime { get { return TimeSpan.FromHours( 1.0 ); } }
|
||||||
|
|
||||||
[CommandProperty( AccessLevel.GameMaster )]
|
[CommandProperty( AccessLevel.GameMaster )]
|
||||||
public virtual double BonusStorageScalar { get { return (Core.ML ? 1.2 : 1.0); } }
|
public virtual double BonusStorageScalar { get { return (Core.ML ? 1.2 : 1.0); } }
|
||||||
|
|
||||||
|
|
@ -3384,6 +3389,8 @@ namespace Server.Multis
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Targets
|
||||||
|
|
||||||
public class LockdownTarget : Target
|
public class LockdownTarget : Target
|
||||||
{
|
{
|
||||||
private bool m_Release;
|
private bool m_Release;
|
||||||
|
|
@ -3648,6 +3655,8 @@ namespace Server.Multis
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
public class SetSecureLevelEntry : ContextMenuEntry
|
public class SetSecureLevelEntry : ContextMenuEntry
|
||||||
{
|
{
|
||||||
private Item m_Item;
|
private Item m_Item;
|
||||||
|
|
@ -3713,4 +3722,20 @@ namespace Server.Multis
|
||||||
Owner.From.SendGump( new SetSecureLevelGump( Owner.From, sec, BaseHouse.FindHouseAt( m_Item ) ) );
|
Owner.From.SendGump( new SetSecureLevelGump( Owner.From, sec, BaseHouse.FindHouseAt( m_Item ) ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class TempNoHousingRegion : BaseRegion
|
||||||
|
{
|
||||||
|
public TempNoHousingRegion( BaseHouse house )
|
||||||
|
: base( null, house.Map, Region.DefaultPriority, house.Region.Area )
|
||||||
|
{
|
||||||
|
Register();
|
||||||
|
|
||||||
|
Timer.DelayCall( house.RestrictedPlacingTime, Unregister );
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool AllowHousing( Mobile from, Point3D p )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -200,6 +200,11 @@ namespace Server.Multis.Deeds
|
||||||
from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area.
|
from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case HousePlacementResult.BadRegionTemp:
|
||||||
|
{
|
||||||
|
from.SendLocalizedMessage( 501270 ); //Lord British has decreed a 'no build' period, thus you cannot build this house at this time.
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -894,32 +894,32 @@ namespace Server.Multis
|
||||||
int cost = newPrice - oldPrice;
|
int cost = newPrice - oldPrice;
|
||||||
|
|
||||||
if ( !this.Deleted ) { // Temporary Fix. We should be booting a client out of customization mode in the delete handler.
|
if ( !this.Deleted ) { // Temporary Fix. We should be booting a client out of customization mode in the delete handler.
|
||||||
if ( from.AccessLevel >= AccessLevel.GameMaster && cost != 0 )
|
if ( from.AccessLevel >= AccessLevel.GameMaster && cost != 0 )
|
||||||
{
|
{
|
||||||
from.SendMessage( "{0} gold would have been {1} your bank if you were not a GM.", cost.ToString(), ((cost > 0 )? "withdrawn from" : "deposited into" ) );
|
from.SendMessage( "{0} gold would have been {1} your bank if you were not a GM.", cost.ToString(), ((cost > 0 )? "withdrawn from" : "deposited into" ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( cost > 0 )
|
if ( cost > 0 )
|
||||||
{
|
{
|
||||||
if ( Banker.Withdraw( from, cost ) )
|
if ( Banker.Withdraw( from, cost ) )
|
||||||
{
|
{
|
||||||
from.SendLocalizedMessage( 1060398, cost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your bank box.
|
from.SendLocalizedMessage( 1060398, cost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your bank box.
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
from.SendLocalizedMessage( 1061903 ); // You cannot commit this house design, because you do not have the necessary funds in your bank box to pay for the upgrade. Please back up your design, obtain the required funds, and commit your design again.
|
from.SendLocalizedMessage( 1061903 ); // You cannot commit this house design, because you do not have the necessary funds in your bank box to pay for the upgrade. Please back up your design, obtain the required funds, and commit your design again.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( cost < 0 )
|
else if ( cost < 0 )
|
||||||
{
|
{
|
||||||
if ( Banker.Deposit( from, -cost ) )
|
if ( Banker.Deposit( from, -cost ) )
|
||||||
from.SendLocalizedMessage( 1060397, ( -cost ).ToString() ); // ~1_AMOUNT~ gold has been deposited into your bank box.
|
from.SendLocalizedMessage( 1060397, ( -cost ).ToString() ); // ~1_AMOUNT~ gold has been deposited into your bank box.
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Client chose to commit current design state
|
/* Client chose to commit current design state
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@ namespace Server.Multis
|
||||||
BadStatic,
|
BadStatic,
|
||||||
BadItem,
|
BadItem,
|
||||||
NoSurface,
|
NoSurface,
|
||||||
BadRegionHidden
|
BadRegionHidden,
|
||||||
|
BadRegionTemp
|
||||||
}
|
}
|
||||||
|
|
||||||
public class HousePlacement
|
public class HousePlacement
|
||||||
|
|
@ -106,6 +107,9 @@ namespace Server.Multis
|
||||||
|
|
||||||
if ( !reg.AllowHousing( from, testPoint ) ) // Cannot place houses in dungeons, towns, treasure map areas etc
|
if ( !reg.AllowHousing( from, testPoint ) ) // Cannot place houses in dungeons, towns, treasure map areas etc
|
||||||
{
|
{
|
||||||
|
if ( reg.IsPartOf( typeof( TempNoHousingRegion ) ) )
|
||||||
|
return HousePlacementResult.BadRegionTemp;
|
||||||
|
|
||||||
if ( reg.IsPartOf( typeof( TreasureRegion ) ) )
|
if ( reg.IsPartOf( typeof( TreasureRegion ) ) )
|
||||||
return HousePlacementResult.BadRegionHidden;
|
return HousePlacementResult.BadRegionHidden;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -423,6 +423,11 @@ namespace Server.Items
|
||||||
from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area.
|
from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case HousePlacementResult.BadRegionTemp:
|
||||||
|
{
|
||||||
|
from.SendLocalizedMessage( 501270 ); //Lord British has decreed a 'no build' period, thus you cannot build this house at this time.
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -511,6 +516,11 @@ namespace Server.Items
|
||||||
from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area.
|
from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case HousePlacementResult.BadRegionTemp:
|
||||||
|
{
|
||||||
|
from.SendLocalizedMessage( 501270 ); //Lord British has decreed a 'no build' period, thus you cannot build this house at this time.
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -82,12 +82,22 @@ namespace Server.SkillHandlers
|
||||||
|
|
||||||
public static void ScaleSkills( BaseCreature bc, double scalar )
|
public static void ScaleSkills( BaseCreature bc, double scalar )
|
||||||
{
|
{
|
||||||
|
int totalCapIncrease = 0;
|
||||||
|
|
||||||
for ( int i = 0; i < bc.Skills.Length; ++i )
|
for ( int i = 0; i < bc.Skills.Length; ++i )
|
||||||
{
|
{
|
||||||
bc.Skills[i].Base *= scalar;
|
bc.Skills[i].Base *= scalar;
|
||||||
if ( bc.Skills[i].Base > 100.0 )
|
|
||||||
|
if ( bc.Skills[i].Base > bc.Skills[i].Cap )
|
||||||
|
{
|
||||||
|
if( Core.SE )
|
||||||
|
totalCapIncrease += ( bc.Skills[i].BaseFixedPoint - bc.Skills[i].CapFixedPoint );
|
||||||
|
|
||||||
bc.Skills[i].Cap = bc.Skills[i].Base;
|
bc.Skills[i].Cap = bc.Skills[i].Base;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bc.SkillsCap += totalCapIncrease; //increase will be 0 if not .SE per above
|
||||||
}
|
}
|
||||||
|
|
||||||
private class InternalTarget : Target
|
private class InternalTarget : Target
|
||||||
|
|
@ -195,21 +205,6 @@ namespace Server.SkillHandlers
|
||||||
from.SendLocalizedMessage( 502801 ); // You can't tame that!
|
from.SendLocalizedMessage( 502801 ); // You can't tame that!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static void AdjustSkillCaps( BaseCreature bc )
|
|
||||||
{
|
|
||||||
int totalCapIncrease = 0;
|
|
||||||
|
|
||||||
for ( int i = 0; i < bc.Skills.Length; ++i )
|
|
||||||
{
|
|
||||||
if( bc.Skills[i].Base > bc.Skills[i].Cap )
|
|
||||||
{
|
|
||||||
totalCapIncrease += (bc.Skills[i].BaseFixedPoint - bc.Skills[i].CapFixedPoint);
|
|
||||||
bc.Skills[i].Cap = bc.Skills[i].Base;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bc.SkillsCap += totalCapIncrease;
|
|
||||||
}
|
|
||||||
|
|
||||||
private class InternalTimer : Timer
|
private class InternalTimer : Timer
|
||||||
{
|
{
|
||||||
|
|
@ -340,9 +335,6 @@ namespace Server.SkillHandlers
|
||||||
|
|
||||||
if ( m_Creature.StatLossAfterTame )
|
if ( m_Creature.StatLossAfterTame )
|
||||||
ScaleStats( m_Creature, 0.50 );
|
ScaleStats( m_Creature, 0.50 );
|
||||||
|
|
||||||
if( Core.SE )
|
|
||||||
AdjustSkillCaps( m_Creature );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( alreadyOwned )
|
if ( alreadyOwned )
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ namespace Server.SkillHandlers
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( from.CheckTargetSkill( SkillName.RemoveTrap, trap, 80.0, 100.0 ) && from.CheckTargetSkill( SkillName.Tinkering, trap, 80.0, 100.0 ) )
|
if ( (Core.ML && isOwner) || (from.CheckTargetSkill( SkillName.RemoveTrap, trap, 80.0, 100.0 ) && from.CheckTargetSkill( SkillName.Tinkering, trap, 80.0, 100.0 )) )
|
||||||
{
|
{
|
||||||
from.PrivateOverheadMessage( MessageType.Regular, trap.MessageHue, trap.DisarmMessage, from.NetState );
|
from.PrivateOverheadMessage( MessageType.Regular, trap.MessageHue, trap.DisarmMessage, from.NetState );
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ using Server.Targeting;
|
||||||
using Server.Engines.PartySystem;
|
using Server.Engines.PartySystem;
|
||||||
using Server.Misc;
|
using Server.Misc;
|
||||||
using Server.Spells.Bushido;
|
using Server.Spells.Bushido;
|
||||||
|
using Server.Spells.Necromancy;
|
||||||
using Server.Spells.Ninjitsu;
|
using Server.Spells.Ninjitsu;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Server.Spells.Seventh;
|
using Server.Spells.Seventh;
|
||||||
|
|
@ -920,7 +921,10 @@ namespace Server.Spells
|
||||||
((BaseCreature)target).AlterSpellDamageFrom( from, ref iDamage );
|
((BaseCreature)target).AlterSpellDamageFrom( from, ref iDamage );
|
||||||
|
|
||||||
WeightOverloading.DFA = dfa;
|
WeightOverloading.DFA = dfa;
|
||||||
AOS.Damage( target, from, iDamage, phys, fire, cold, pois, nrgy );
|
|
||||||
|
int damageGiven = AOS.Damage( target, from, iDamage, phys, fire, cold, pois, nrgy );
|
||||||
|
DoLeech( damageGiven, from, target );
|
||||||
|
|
||||||
WeightOverloading.DFA = DFAlgorithm.Standard;
|
WeightOverloading.DFA = DFAlgorithm.Standard;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -932,6 +936,24 @@ namespace Server.Spells
|
||||||
((BaseCreature)target).OnDamagedBySpell( from );
|
((BaseCreature)target).OnDamagedBySpell( from );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void DoLeech( int damageGiven, Mobile from, Mobile target )
|
||||||
|
{
|
||||||
|
TransformContext context = TransformationSpellHelper.GetContext( from );
|
||||||
|
if ( context != null && context.Type == typeof( WraithFormSpell ) )
|
||||||
|
{
|
||||||
|
int wraithLeech = ( 5 + (int)( ( 15 * from.Skills.SpiritSpeak.Value ) / 100 ) ); // Wraith form gives 5-20% mana leech
|
||||||
|
int manaLeech = AOS.Scale( damageGiven, wraithLeech );
|
||||||
|
if ( manaLeech != 0 )
|
||||||
|
{
|
||||||
|
// Mana leeched by the Wraith Form spell is actually stolen, not just leeched.
|
||||||
|
target.Mana -= manaLeech;
|
||||||
|
from.Mana += manaLeech;
|
||||||
|
from.PlaySound( 0x44D );
|
||||||
|
//from.SendMessage(String.Format("You Leeched {0} Mana", manaLeech));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void Heal( int amount, Mobile target, Mobile from )
|
public static void Heal( int amount, Mobile target, Mobile from )
|
||||||
{
|
{
|
||||||
Heal( amount, target, from, true );
|
Heal( amount, target, from, true );
|
||||||
|
|
@ -1012,7 +1034,10 @@ namespace Server.Spells
|
||||||
((BaseCreature)m_Target).AlterSpellDamageFrom( m_From, ref m_Damage );
|
((BaseCreature)m_Target).AlterSpellDamageFrom( m_From, ref m_Damage );
|
||||||
|
|
||||||
WeightOverloading.DFA = m_DFA;
|
WeightOverloading.DFA = m_DFA;
|
||||||
AOS.Damage( m_Target, m_From, m_Damage, m_Phys, m_Fire, m_Cold, m_Pois, m_Nrgy );
|
|
||||||
|
int damageGiven = AOS.Damage( m_Target, m_From, m_Damage, m_Phys, m_Fire, m_Cold, m_Pois, m_Nrgy );
|
||||||
|
DoLeech( damageGiven, m_From, m_Target );
|
||||||
|
|
||||||
WeightOverloading.DFA = DFAlgorithm.Standard;
|
WeightOverloading.DFA = DFAlgorithm.Standard;
|
||||||
|
|
||||||
if( m_Target is BaseCreature && m_From != null )
|
if( m_Target is BaseCreature && m_From != null )
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,12 @@ namespace Server.Spells.Bushido
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !Caster.CanBeginAction( typeof( Evasion ) ) )
|
||||||
|
{
|
||||||
|
Caster.SendLocalizedMessage( 501789 ); // You must wait before trying again.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,6 +104,9 @@ namespace Server.Spells.Bushido
|
||||||
OnCastSuccessful( Caster );
|
OnCastSuccessful( Caster );
|
||||||
|
|
||||||
BeginEvasion( Caster );
|
BeginEvasion( Caster );
|
||||||
|
|
||||||
|
Caster.BeginAction( typeof( Evasion ) );
|
||||||
|
Timer.DelayCall( TimeSpan.FromSeconds( 20.0 ), delegate { Caster.EndAction( typeof( Evasion ) ); } );
|
||||||
}
|
}
|
||||||
|
|
||||||
FinishSequence();
|
FinishSequence();
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@ namespace Server.Spells.Necromancy
|
||||||
|
|
||||||
Misc.WeightOverloading.DFA = Misc.DFAlgorithm.PainSpike;
|
Misc.WeightOverloading.DFA = Misc.DFAlgorithm.PainSpike;
|
||||||
m.Damage( (int) damage, Caster );
|
m.Damage( (int) damage, Caster );
|
||||||
|
SpellHelper.DoLeech( (int)damage, Caster, m );
|
||||||
Misc.WeightOverloading.DFA = Misc.DFAlgorithm.Standard;
|
Misc.WeightOverloading.DFA = Misc.DFAlgorithm.Standard;
|
||||||
|
|
||||||
//SpellHelper.Damage( this, m, damage, 100, 0, 0, 0, 0, Misc.DFAlgorithm.PainSpike );
|
//SpellHelper.Damage( this, m, damage, 100, 0, 0, 0, 0, Misc.DFAlgorithm.PainSpike );
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Server.Items;
|
using Server.Items;
|
||||||
|
using Server.Mobiles;
|
||||||
|
|
||||||
namespace Server.Spells.Spellweaving
|
namespace Server.Spells.Spellweaving
|
||||||
{
|
{
|
||||||
|
|
@ -29,6 +30,12 @@ namespace Server.Spells.Spellweaving
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( GetArcanists().Count < 2 )
|
||||||
|
{
|
||||||
|
Caster.SendLocalizedMessage( 1080452 ); //There are not enough spellweavers present to create an Arcane Focus.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return base.CheckCast();
|
return base.CheckCast();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -111,7 +118,7 @@ namespace Server.Spells.Spellweaving
|
||||||
//OSI Verified: Even enemies/combatants count
|
//OSI Verified: Even enemies/combatants count
|
||||||
foreach( Mobile m in Caster.GetMobilesInRange( 1 ) ) //Range verified as 1
|
foreach( Mobile m in Caster.GetMobilesInRange( 1 ) ) //Range verified as 1
|
||||||
{
|
{
|
||||||
if( m != Caster && Caster.CanBeBeneficial( m, false ) && Math.Abs( Caster.Skills.Spellweaving.Value - m.Skills.Spellweaving.Value ) <= 20 ) //TODO: OSI check, aggressor/agressed? Visibility?
|
if ( m != Caster && Caster.CanBeBeneficial( m, false ) && Math.Abs( Caster.Skills.Spellweaving.Value - m.Skills.Spellweaving.Value ) <= 20 && !(m is Clone) )
|
||||||
{
|
{
|
||||||
weavers.Add( m );
|
weavers.Add( m );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue