This commit is contained in:
mark 2009-06-29 12:29:09 +00:00
parent 2204d5fb86
commit 03fc95bfb7
105 changed files with 9135 additions and 161 deletions

View file

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

View file

@ -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);

View file

@ -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 );

View file

@ -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 )
{
}

View file

@ -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;

View file

@ -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 )
{

View file

@ -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 )

View file

@ -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;

View file

@ -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 )
{

View file

@ -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 )
{

View file

@ -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 )
{

View file

@ -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 )
{

View file

@ -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 )
{

View file

@ -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;

View file

@ -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.
}
}
}
}