This commit is contained in:
parent
2204d5fb86
commit
03fc95bfb7
105 changed files with 9135 additions and 161 deletions
|
|
@ -55,6 +55,8 @@ namespace Server.Mobiles
|
|||
list.Add( "Donation Ethereal" );
|
||||
list.Add( "7.5 sec slower cast time if not a 9mo. Veteran" );
|
||||
}
|
||||
if ( Core.ML && m_IsRewardItem )
|
||||
list.Add( RewardSystem.GetRewardYearLabel( this, new object[]{ } ) ); // X Year Veteran Reward
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
|
|
@ -701,6 +703,63 @@ namespace Server.Mobiles
|
|||
}
|
||||
}
|
||||
|
||||
public class RideablePolarBear : EtherealMount
|
||||
{
|
||||
public override int LabelNumber { get { return 1076159; } } // Rideable Polar Bear
|
||||
public override int EtherealHue { get { return 0; } }
|
||||
|
||||
[Constructable]
|
||||
public RideablePolarBear() : base( 0x20E1, 0x3EC5 )
|
||||
{
|
||||
}
|
||||
|
||||
public RideablePolarBear( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.WriteEncodedInt( 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadEncodedInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class EtherealCuSidhe : EtherealMount
|
||||
{
|
||||
public override int LabelNumber { get { return 1080386; } } // Ethereal Cu Sidhe Statuette
|
||||
|
||||
[Constructable]
|
||||
public EtherealCuSidhe() : base( 0x2D96, 0x3E91 )
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealCuSidhe( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.WriteEncodedInt( 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadEncodedInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class ChargerOfTheFallen : EtherealMount
|
||||
{
|
||||
public override int LabelNumber { get { return 1074816; } } // Charger of the Fallen Statuette
|
||||
|
|
|
|||
|
|
@ -1,17 +1,28 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Engines.CannedEvil;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("corpse of Ilhenir")]
|
||||
public class Ilhenir : BaseCreature
|
||||
public class Ilhenir : BaseChampion
|
||||
{
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Pain; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { typeof( ANecromancerShroud ),
|
||||
typeof( LieutenantOfTheBritannianRoyalGuard ),
|
||||
typeof( OblivionsNeedle ),
|
||||
typeof( TheRobeOfBritanniaAri ) }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( MonsterStatuette ) }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { MonsterStatuetteType.PlagueBeast,
|
||||
MonsterStatuetteType.RedDeath }; } }
|
||||
|
||||
// Based off of the Bone Demon, since Stratics and UOGuide are lacking in info. Many things guessed for now.
|
||||
[Constructable]
|
||||
public Ilhenir()
|
||||
: base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
public Ilhenir() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "Ilhenir";
|
||||
Title = "the Stained";
|
||||
|
|
@ -23,7 +34,7 @@ namespace Server.Mobiles
|
|||
|
||||
SetHits( 9000 );
|
||||
|
||||
SetDamage(4, 6);
|
||||
SetDamage(21, 28);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 60);
|
||||
SetDamageType(ResistanceType.Fire, 20);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server.Engines.CannedEvil;
|
||||
using Server.Items;
|
||||
using Server.Targeting;
|
||||
using Server.Misc;
|
||||
|
|
@ -7,10 +8,22 @@ using Server.Misc;
|
|||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a minotaur corpse" )]
|
||||
public class Meraktus : BaseCreature
|
||||
public class Meraktus : BaseChampion
|
||||
{
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Pain; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { typeof( Subdue ) }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( ArtifactLargeVase ),
|
||||
typeof( ArtifactVase ),
|
||||
typeof( MinotaurStatueDeed ) }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { }; } }
|
||||
|
||||
public override bool NoGoodies{ get{ return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Meraktus() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) // NEED TO CHECK
|
||||
public Meraktus() : base( AIType.AI_Melee )
|
||||
{
|
||||
Name = "Meraktus";
|
||||
Title = "the Tormented";
|
||||
|
|
@ -22,7 +35,7 @@ namespace Server.Mobiles
|
|||
|
||||
SetHits( 4100, 4200 );
|
||||
|
||||
SetDamage( 3, 5 );
|
||||
SetDamage( 16, 30 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
|
|
|
|||
|
|
@ -1,16 +1,25 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Engines.CannedEvil;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class Twaulo : BaseCreature
|
||||
public class Twaulo : BaseChampion
|
||||
{
|
||||
// COMPLETELY guessed beyond stats. Stats/skills come from Stratics and UOGuide. No idea what the special attacks should be.
|
||||
// Based on Silvani, due to them both using Blue creatures.
|
||||
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Pain; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { typeof( Quell ) }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { typeof( TheMostKnowledgePerson ), typeof( OblivionsNeedle ) }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( Pier ), typeof( MonsterStatuette ) }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { MonsterStatuetteType.DreadHorn }; } }
|
||||
|
||||
[Constructable]
|
||||
public Twaulo()
|
||||
: base(AIType.AI_Archer, FightMode.Evil, 18, 1, 0.1, 0.2)
|
||||
public Twaulo() : base(AIType.AI_Archer, FightMode.Evil)
|
||||
{
|
||||
Name = "Twaulo";
|
||||
Title = "of the Glade";
|
||||
|
|
@ -23,7 +32,7 @@ namespace Server.Mobiles
|
|||
|
||||
SetHits( 7500 );
|
||||
|
||||
SetDamage( 3, 4 );
|
||||
SetDamage( 19, 24 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
|
|
@ -33,13 +42,12 @@ namespace Server.Mobiles
|
|||
SetResistance( ResistanceType.Poison, 50, 60 );
|
||||
SetResistance( ResistanceType.Energy, 50, 60 );
|
||||
|
||||
SetSkill( SkillName.Archery, 85.0, 100 ); // Guestimate
|
||||
SetSkill( SkillName.EvalInt, 0 ); // Per Stratics?!?
|
||||
SetSkill( SkillName.Magery, 0 ); // Per Stratics?!?
|
||||
SetSkill( SkillName.Meditation, 0 ); // Per Stratics?!?
|
||||
SetSkill( SkillName.MagicResist, 0 ); // Per Stratics?!?
|
||||
SetSkill( SkillName.Tactics, 85.0, 100 ); // Stratics says 0?!?
|
||||
SetSkill( SkillName.Wrestling, 0 ); // Per Stratics?!?
|
||||
//Lacking OSI information skills are based on Centaurs and scaled up the way other champs are.
|
||||
SetSkill( SkillName.Anatomy, 115.1, 135.0 );
|
||||
SetSkill( SkillName.Archery, 100.0 );
|
||||
SetSkill( SkillName.MagicResist, 100.5, 150.0 );
|
||||
SetSkill( SkillName.Tactics, 100.0 );
|
||||
SetSkill( SkillName.Wrestling, 100.0 );
|
||||
|
||||
Fame = 50000;
|
||||
Karma = 50000;
|
||||
|
|
@ -64,65 +72,6 @@ namespace Server.Mobiles
|
|||
public override Poison PoisonImmune{ get{ return Poison.Regular; } }
|
||||
public override int TreasureMapLevel{ get{ return 5; } }
|
||||
|
||||
public void SpawnPixies( Mobile target )
|
||||
{
|
||||
Map map = this.Map;
|
||||
|
||||
if ( map == null )
|
||||
return;
|
||||
|
||||
int newPixies = Utility.RandomMinMax( 3, 6 );
|
||||
|
||||
for ( int i = 0; i < newPixies; ++i )
|
||||
{
|
||||
Pixie pixie = new Pixie();
|
||||
|
||||
pixie.Team = this.Team;
|
||||
pixie.FightMode = FightMode.Closest;
|
||||
|
||||
bool validLocation = false;
|
||||
Point3D loc = this.Location;
|
||||
|
||||
for ( int j = 0; !validLocation && j < 10; ++j )
|
||||
{
|
||||
int x = X + Utility.Random( 3 ) - 1;
|
||||
int y = Y + Utility.Random( 3 ) - 1;
|
||||
int z = map.GetAverageZ( x, y );
|
||||
|
||||
if ( validLocation = map.CanFit( x, y, this.Z, 16, false, false ) )
|
||||
loc = new Point3D( x, y, Z );
|
||||
else if ( validLocation = map.CanFit( x, y, z, 16, false, false ) )
|
||||
loc = new Point3D( x, y, z );
|
||||
}
|
||||
|
||||
pixie.MoveToWorld( loc, map );
|
||||
pixie.Combatant = target;
|
||||
}
|
||||
}
|
||||
|
||||
public override void AlterDamageScalarFrom( Mobile caster, ref double scalar )
|
||||
{
|
||||
if ( 0.1 >= Utility.RandomDouble() )
|
||||
SpawnPixies( caster );
|
||||
}
|
||||
|
||||
public override void OnGaveMeleeAttack( Mobile defender )
|
||||
{
|
||||
base.OnGaveMeleeAttack( defender );
|
||||
|
||||
defender.Damage( Utility.Random( 20, 10 ), this );
|
||||
defender.Stam -= Utility.Random( 20, 10 );
|
||||
defender.Mana -= Utility.Random( 20, 10 );
|
||||
}
|
||||
|
||||
public override void OnGotMeleeAttack( Mobile attacker )
|
||||
{
|
||||
base.OnGotMeleeAttack( attacker );
|
||||
|
||||
if ( 0.1 >= Utility.RandomDouble() )
|
||||
SpawnPixies( attacker );
|
||||
}
|
||||
|
||||
public Twaulo( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,19 +32,20 @@ namespace Server.Mobiles
|
|||
public enum PlayerFlag // First 16 bits are reserved for default-distro use, start custom flags at 0x00010000
|
||||
{
|
||||
None = 0x00000000,
|
||||
Glassblowing = 0x00000001,
|
||||
Glassblowing = 0x00000001,
|
||||
Masonry = 0x00000002,
|
||||
SandMining = 0x00000004,
|
||||
StoneMining = 0x00000008,
|
||||
ToggleMiningStone = 0x00000010,
|
||||
ToggleMiningStone = 0x00000010,
|
||||
KarmaLocked = 0x00000020,
|
||||
AutoRenewInsurance = 0x00000040,
|
||||
UseOwnFilter = 0x00000080,
|
||||
PublicMyRunUO = 0x00000100,
|
||||
PagingSquelched = 0x00000200,
|
||||
AutoRenewInsurance = 0x00000040,
|
||||
UseOwnFilter = 0x00000080,
|
||||
PublicMyRunUO = 0x00000100,
|
||||
PagingSquelched = 0x00000200,
|
||||
Young = 0x00000400,
|
||||
AcceptGuildInvites = 0x00000800,
|
||||
DisplayChampionTitle= 0x00001000
|
||||
AcceptGuildInvites = 0x00000800,
|
||||
DisplayChampionTitle = 0x00001000,
|
||||
HasStatReward = 0x00002000
|
||||
}
|
||||
|
||||
public enum NpcGuild
|
||||
|
|
@ -291,8 +292,23 @@ namespace Server.Mobiles
|
|||
get{ return GetFlag( PlayerFlag.AcceptGuildInvites ); }
|
||||
set{ SetFlag( PlayerFlag.AcceptGuildInvites, value ); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool HasStatReward
|
||||
{
|
||||
get{ return GetFlag( PlayerFlag.HasStatReward ); }
|
||||
set{ SetFlag( PlayerFlag.HasStatReward, value ); }
|
||||
}
|
||||
#endregion
|
||||
|
||||
private DateTime m_AnkhNextUse;
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public DateTime AnkhNextUse
|
||||
{
|
||||
get{ return m_AnkhNextUse; }
|
||||
set{ m_AnkhNextUse = value; }
|
||||
}
|
||||
|
||||
public static Direction GetDirection4( Point3D from, Point3D to )
|
||||
{
|
||||
|
|
@ -2356,9 +2372,16 @@ namespace Server.Mobiles
|
|||
|
||||
switch ( version )
|
||||
{
|
||||
case 26:
|
||||
case 27:
|
||||
{
|
||||
m_AnkhNextUse = reader.ReadDateTime();
|
||||
|
||||
goto case 26;
|
||||
}
|
||||
case 26:
|
||||
{
|
||||
m_AutoStabled = reader.ReadStrongMobileList();
|
||||
|
||||
goto case 25;
|
||||
}
|
||||
case 25:
|
||||
|
|
@ -2642,8 +2665,9 @@ namespace Server.Mobiles
|
|||
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 26 ); // version
|
||||
writer.Write( (int) 27 ); // version
|
||||
|
||||
writer.Write( (DateTime) m_AnkhNextUse );
|
||||
writer.Write( m_AutoStabled, true );
|
||||
|
||||
if( m_AcquiredRecipes == null )
|
||||
|
|
@ -2785,6 +2809,9 @@ namespace Server.Mobiles
|
|||
|
||||
public override bool CanSee( Mobile m )
|
||||
{
|
||||
if ( m is CharacterStatue )
|
||||
((CharacterStatue) m).OnRequestedAnimation( this );
|
||||
|
||||
if ( m is PlayerMobile && ((PlayerMobile)m).m_VisList.Contains( this ) )
|
||||
return true;
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,15 @@ namespace Server.Mobiles
|
|||
{
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Greed; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { typeof( FangOfRactus ) }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { typeof( EmbroideredOakLeafCloak ),
|
||||
typeof( DjinnisRing ),
|
||||
typeof( DetectiveBoots ),
|
||||
typeof( GuantletsOfAnger ) }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( SwampTile ), typeof( MonsterStatuette ) }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { MonsterStatuetteType.Slime }; } }
|
||||
|
||||
[Constructable]
|
||||
public Barracoon() : base( AIType.AI_Melee )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -23,6 +23,13 @@ namespace Server.Mobiles
|
|||
|
||||
public abstract ChampionSkullType SkullType{ get; }
|
||||
|
||||
public abstract Type[] UniqueList{ get; }
|
||||
public abstract Type[] SharedList{ get; }
|
||||
public abstract Type[] DecorativeList{ get; }
|
||||
public abstract MonsterStatuetteType[] StatueTypes{ get; }
|
||||
|
||||
public virtual bool NoGoodies{ get{ return false; } }
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
|
@ -37,6 +44,38 @@ namespace Server.Mobiles
|
|||
int version = reader.ReadInt();
|
||||
}
|
||||
|
||||
public Item GetArtifact()
|
||||
{
|
||||
double random = Utility.RandomDouble();
|
||||
if ( 0.05 >= random )
|
||||
return CreateArtifact( UniqueList );
|
||||
else if ( 0.15 >= random )
|
||||
return CreateArtifact( SharedList );
|
||||
else if ( 0.30 >= random )
|
||||
return CreateArtifact( DecorativeList );
|
||||
return null;
|
||||
}
|
||||
|
||||
public Item CreateArtifact( Type[] list )
|
||||
{
|
||||
if( list.Length == 0 )
|
||||
return null;
|
||||
|
||||
int random = Utility.Random( list.Length );
|
||||
|
||||
Type type = list[random];
|
||||
|
||||
Item artifact = Loot.Construct( type );
|
||||
|
||||
if( artifact is MonsterStatuette && StatueTypes.Length > 0 )
|
||||
{
|
||||
((MonsterStatuette)artifact).Type = StatueTypes[Utility.Random( StatueTypes.Length )];
|
||||
((MonsterStatuette)artifact).LootType = LootType.Regular;
|
||||
}
|
||||
|
||||
return artifact;
|
||||
}
|
||||
|
||||
private PowerScroll CreateRandomPowerScroll()
|
||||
{
|
||||
int level;
|
||||
|
|
@ -175,6 +214,9 @@ namespace Server.Mobiles
|
|||
{
|
||||
GivePowerScrolls();
|
||||
|
||||
if( NoGoodies )
|
||||
return base.OnBeforeDeath();
|
||||
|
||||
Map map = this.Map;
|
||||
|
||||
if ( map != null )
|
||||
|
|
|
|||
|
|
@ -9,6 +9,10 @@ namespace Server.Mobiles
|
|||
{
|
||||
public class Harrower : BaseCreature
|
||||
{
|
||||
public Type[] UniqueList{ get{ return new Type[] { typeof( AcidProofRobe ) }; } }
|
||||
public Type[] SharedList{ get{ return new Type[] { typeof( TheRobeOfBritanniaAri ) }; } }
|
||||
public Type[] DecorativeList{ get{ return new Type[] { typeof( EvilIdolSkull ), typeof( SkullPole ) }; } }
|
||||
|
||||
private bool m_TrueForm;
|
||||
private Item m_GateItem;
|
||||
private List<HarrowerTentacles> m_Tentacles;
|
||||
|
|
@ -361,16 +365,23 @@ namespace Server.Mobiles
|
|||
}
|
||||
}
|
||||
|
||||
m_DamageEntries = new Dictionary<Mobile, int>();
|
||||
|
||||
for ( int i = 0; i < m_Tentacles.Count; ++i )
|
||||
{
|
||||
Mobile m = m_Tentacles[i];
|
||||
|
||||
if ( !m.Deleted )
|
||||
m.Kill();
|
||||
|
||||
RegisterDamageTo( m );
|
||||
}
|
||||
|
||||
m_Tentacles.Clear();
|
||||
|
||||
RegisterDamageTo( this );
|
||||
AwardArtifact( GetArtifact() );
|
||||
|
||||
if ( m_GateItem != null )
|
||||
m_GateItem.Delete();
|
||||
}
|
||||
|
|
@ -384,6 +395,115 @@ namespace Server.Mobiles
|
|||
}
|
||||
}
|
||||
|
||||
Dictionary<Mobile, int> m_DamageEntries;
|
||||
|
||||
public virtual void RegisterDamageTo( Mobile m )
|
||||
{
|
||||
if( m == null )
|
||||
return;
|
||||
|
||||
foreach( DamageEntry de in m.DamageEntries )
|
||||
{
|
||||
Mobile damager = de.Damager;
|
||||
|
||||
Mobile master = damager.GetDamageMaster( m );
|
||||
|
||||
if( master != null )
|
||||
damager = master;
|
||||
|
||||
RegisterDamage( damager, de.DamageGiven );
|
||||
}
|
||||
}
|
||||
|
||||
public void RegisterDamage( Mobile from, int amount )
|
||||
{
|
||||
if( from == null || !from.Player )
|
||||
return;
|
||||
|
||||
if( m_DamageEntries.ContainsKey( from ) )
|
||||
m_DamageEntries[from] += amount;
|
||||
else
|
||||
m_DamageEntries.Add( from, amount );
|
||||
|
||||
from.SendMessage(String.Format("Total Damage: {0}", m_DamageEntries[from]) );
|
||||
}
|
||||
|
||||
public void AwardArtifact( Item artifact )
|
||||
{
|
||||
if (artifact == null )
|
||||
return;
|
||||
|
||||
int totalDamage = 0;
|
||||
|
||||
Dictionary<Mobile, int> validEntries = new Dictionary<Mobile, int>();
|
||||
|
||||
foreach (KeyValuePair<Mobile, int> kvp in m_DamageEntries)
|
||||
{
|
||||
if( IsEligable( kvp.Key, artifact ) )
|
||||
{
|
||||
validEntries.Add( kvp.Key, kvp.Value );
|
||||
totalDamage += kvp.Value;
|
||||
}
|
||||
}
|
||||
|
||||
int randomDamage = Utility.RandomMinMax( 1, totalDamage );
|
||||
|
||||
totalDamage = 0;
|
||||
|
||||
foreach (KeyValuePair<Mobile, int> kvp in m_DamageEntries)
|
||||
{
|
||||
totalDamage += kvp.Value;
|
||||
|
||||
if( totalDamage > randomDamage )
|
||||
{
|
||||
GiveArtifact( kvp.Key, artifact );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void GiveArtifact( Mobile to, Item artifact )
|
||||
{
|
||||
if ( to == null || artifact == null )
|
||||
return;
|
||||
|
||||
Container pack = to.Backpack;
|
||||
|
||||
if ( pack == null || !pack.TryDropItem( to, artifact, false ) )
|
||||
artifact.Delete();
|
||||
else
|
||||
to.SendLocalizedMessage( 1062317 ); // For your valor in combating the fallen beast, a special artifact has been bestowed on you.
|
||||
}
|
||||
|
||||
public bool IsEligable( Mobile m, Item Artifact )
|
||||
{
|
||||
return m.Player && m.Alive && m.InRange( Location, 32 ) && m.Backpack != null && m.Backpack.CheckHold( m, Artifact, false );
|
||||
}
|
||||
|
||||
public Item GetArtifact()
|
||||
{
|
||||
double random = Utility.RandomDouble();
|
||||
if ( 0.05 >= random )
|
||||
return CreateArtifact( UniqueList );
|
||||
else if ( 0.15 >= random )
|
||||
return CreateArtifact( SharedList );
|
||||
else if ( 0.30 >= random )
|
||||
return CreateArtifact( DecorativeList );
|
||||
return null;
|
||||
}
|
||||
|
||||
public Item CreateArtifact( Type[] list )
|
||||
{
|
||||
if( list.Length == 0 )
|
||||
return null;
|
||||
|
||||
int random = Utility.Random( list.Length );
|
||||
|
||||
Type type = list[random];
|
||||
|
||||
return Loot.Construct( type );
|
||||
}
|
||||
|
||||
private class TeleportTimer : Timer
|
||||
{
|
||||
private Mobile m_Owner;
|
||||
|
|
|
|||
|
|
@ -12,6 +12,19 @@ namespace Server.Mobiles
|
|||
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Enlightenment; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { typeof( OrcChieftainHelm ) }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { typeof( RoyalGuardSurvivalKnife ),
|
||||
typeof( DjinnisRing ),
|
||||
typeof( LieutenantOfTheBritannianRoyalGuard ),
|
||||
typeof( SamaritanRobe ),
|
||||
typeof( DetectiveBoots ),
|
||||
typeof( TheMostKnowledgePerson ) }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( WaterTile ),
|
||||
typeof( WindSpirit ),
|
||||
typeof( Pier ), }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { }; } }
|
||||
|
||||
[Constructable]
|
||||
public LordOaks() : base( AIType.AI_Mage, FightMode.Evil )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,6 +9,12 @@ namespace Server.Mobiles
|
|||
{
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Venom; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { typeof( Calm ) }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { typeof( OblivionsNeedle ), typeof( ANecromancerShroud ) }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( Web ), typeof( MonsterStatuette ) }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { MonsterStatuetteType.Spider }; } }
|
||||
|
||||
[Constructable]
|
||||
public Mephitis() : base( AIType.AI_Melee )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,6 +10,14 @@ namespace Server.Mobiles
|
|||
{
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Death; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { typeof( ShroudOfDeciet ) }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { typeof( ANecromancerShroud ),
|
||||
typeof( DetectiveBoots ),
|
||||
typeof( CaptainJohnsHat ) }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( WallBlood ), typeof( TatteredAncientMummyWrapping ) }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { }; } }
|
||||
|
||||
[Constructable]
|
||||
public Neira() : base( AIType.AI_Mage )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -11,6 +11,17 @@ namespace Server.Mobiles
|
|||
{
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Power; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { typeof( CrownOfTalKeesh ) }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { typeof( TheMostKnowledgePerson ),
|
||||
typeof( BraveKnightOfTheBritannia ),
|
||||
typeof( LieutenantOfTheBritannianRoyalGuard ) }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( LavaTile ),
|
||||
typeof( MonsterStatuette ),
|
||||
typeof( MonsterStatuette ) }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { MonsterStatuetteType.OphidianArchMage,
|
||||
MonsterStatuetteType.OphidianWarrior }; } }
|
||||
|
||||
[Constructable]
|
||||
public Rikktor() : base( AIType.AI_Melee )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,6 +9,12 @@ namespace Server.Mobiles
|
|||
{
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Pain; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { typeof( GladiatorsCollar ) }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { typeof( LieutenantOfTheBritannianRoyalGuard ) }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( LavaTile ), typeof( DemonSkull ) }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { }; } }
|
||||
|
||||
[Constructable]
|
||||
public Semidar() : base( AIType.AI_Mage )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,6 +10,15 @@ namespace Server.Mobiles
|
|||
{
|
||||
public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Power; } }
|
||||
|
||||
public override Type[] UniqueList{ get{ return new Type[] { typeof( Pacify ) }; } }
|
||||
public override Type[] SharedList{ get{ return new Type[] { typeof( BraveKnightOfTheBritannia ),
|
||||
typeof( DetectiveBoots ),
|
||||
typeof( EmbroideredOakLeafCloak ),
|
||||
typeof( LieutenantOfTheBritannianRoyalGuard ) }; } }
|
||||
public override Type[] DecorativeList{ get{ return new Type[] { typeof( Futon ), typeof( SwampTile ) }; } }
|
||||
|
||||
public override MonsterStatuetteType[] StatueTypes{ get{ return new MonsterStatuetteType[] { }; } }
|
||||
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
return WeaponAbility.DoubleStrike;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.ContextMenus;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
|
|
@ -33,5 +36,50 @@ namespace Server.Mobiles
|
|||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
|
||||
public override void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
|
||||
{
|
||||
if ( Core.ML && from.Alive )
|
||||
{
|
||||
RechargeEntry entry = new RechargeEntry( from, this );
|
||||
|
||||
if ( WeaponEngravingTool.Find( from ) == null )
|
||||
entry.Enabled = false;
|
||||
|
||||
list.Add( entry );
|
||||
}
|
||||
|
||||
base.AddCustomContextEntries( from, list );
|
||||
}
|
||||
|
||||
private class RechargeEntry : ContextMenuEntry
|
||||
{
|
||||
private Mobile m_From;
|
||||
private Mobile m_Vendor;
|
||||
|
||||
public RechargeEntry( Mobile from, Mobile vendor ) : base( 6271, 6 )
|
||||
{
|
||||
m_From = from;
|
||||
m_Vendor = vendor;
|
||||
}
|
||||
|
||||
public override void OnClick()
|
||||
{
|
||||
if ( !Core.ML || m_Vendor == null || m_Vendor.Deleted )
|
||||
return;
|
||||
|
||||
WeaponEngravingTool tool = WeaponEngravingTool.Find( m_From );
|
||||
|
||||
if ( tool != null && tool.UsesRemaining <= 0 )
|
||||
{
|
||||
if ( Banker.GetBalance( m_From ) >= 100000 )
|
||||
m_From.SendGump( new WeaponEngravingTool.ConfirmGump( tool, m_Vendor ) );
|
||||
else
|
||||
m_Vendor.Say( 1076167 ); // You need a 100,000 gold and a blue diamond to recharge the weapon engraver.
|
||||
}
|
||||
else
|
||||
m_Vendor.Say( 1076164 ); // I can only help with this if you are carrying an engraving tool that needs repair.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue