This commit is contained in:
mark 2009-06-21 06:56:53 +00:00
parent 225e2a25f1
commit 5ce1f041a2
10 changed files with 835 additions and 4 deletions

View file

@ -178,7 +178,7 @@ namespace Server.Mobiles
private int m_iRangePerception; // The view area
private int m_iRangeFight; // The fight distance
private bool m_bDebugAI; // Show debug AI messages
private int m_iTeam; // Monster Team
@ -4436,6 +4436,135 @@ namespace Server.Mobiles
public virtual bool CanBreath { get { return HasBreath && !Summoned; } }
public virtual bool IsDispellable { get { return Summoned && !IsAnimatedDead; } }
#region Healing
public virtual double MinHealDelay { get { return 2.0; } }
public virtual double HealScalar { get { return 1.0; } }
public virtual bool CanHeal { get { return false; } }
public virtual bool CanHealOwner { get { return false; } }
public double MaxHealDelay
{
get
{
if (ControlMaster != null)
{
double max = ControlMaster.Hits / 10;
if (max > 10)
max = 10;
if (max < 1)
max = 1;
return max;
}
else
return 7;
}
}
private DateTime m_NextHealTime = DateTime.Now;
private Timer m_HealTimer = null;
public virtual void HealStart()
{
if (!Alive)
return;
if (CanHeal && Hits != HitsMax)
{
RevealingAction();
double seconds = 10 - Dex / 12;
m_HealTimer = Timer.DelayCall(TimeSpan.FromSeconds(seconds), new TimerStateCallback(Heal_Callback), this);
}
else if (CanHealOwner && ControlMaster != null && ControlMaster.Hits < ControlMaster.HitsMax && InRange(ControlMaster, 2))
{
ControlMaster.RevealingAction();
double seconds = 10 - Dex / 15;
double resDelay = (ControlMaster.Alive ? 0.0 : 5.0);
seconds += resDelay;
ControlMaster.SendLocalizedMessage(1008078, false, Name); // : Attempting to heal you.
m_HealTimer = Timer.DelayCall(TimeSpan.FromSeconds(seconds), new TimerStateCallback(Heal_Callback), ControlMaster);
}
}
private void Heal_Callback(object state)
{
if (state is Mobile)
Heal((Mobile)state);
}
public virtual void Heal(Mobile patient)
{
if (!Alive || !patient.Alive || !InRange(patient, 2))
{
}
else if (patient.Poisoned)
{
double healing = Skills.Healing.Value;
double anatomy = Skills.Anatomy.Value;
double chance = (healing - 30.0) / 50.0 - patient.Poison.Level * 0.1;
if ((healing >= 60.0 && anatomy >= 60.0) && chance > Utility.RandomDouble())
{
if (patient.CurePoison(this))
{
patient.SendLocalizedMessage(1010059); // You have been cured of all poisons.
patient.PlaySound(0x57);
CheckSkill(SkillName.Healing, 0.0, 100.0);
CheckSkill(SkillName.Anatomy, 0.0, 100.0);
}
}
}
else if (BleedAttack.IsBleeding(patient))
{
patient.SendLocalizedMessage(1060167); // The bleeding wounds have healed, you are no longer bleeding!
BleedAttack.EndBleed(patient, true);
patient.PlaySound(0x57);
}
else
{
double healing = Skills.Healing.Value;
double anatomy = Skills.Anatomy.Value;
double chance = (healing + 10.0) / 100.0;
if (chance > Utility.RandomDouble())
{
double min, max;
min = (anatomy / 10.0) + (healing / 6.0) + 4.0;
max = (anatomy / 8.0) + (healing / 3.0) + 4.0;
if (patient == this)
max += 10;
double toHeal = min + (Utility.RandomDouble() * (max - min));
toHeal *= HealScalar;
patient.Heal((int)toHeal);
patient.PlaySound(0x57);
CheckSkill(SkillName.Healing, 0.0, 100.0);
CheckSkill(SkillName.Anatomy, 0.0, 100.0);
}
}
if (m_HealTimer != null)
m_HealTimer.Stop();
m_HealTimer = null;
m_NextHealTime = DateTime.Now + TimeSpan.FromSeconds(MinHealDelay + (Utility.RandomDouble() * MaxHealDelay));
}
#endregion
public virtual void OnThink()
{
if ( EnableRummaging && CanRummageCorpses && !Summoned && !Controlled && DateTime.Now >= m_NextRummageTime )

View file

@ -1058,7 +1058,7 @@ namespace Server.Items
{
double chance = (parry - bushidoNonRacial) / 400.0; // As per OSI, no negitive effect from the Racial stuffs, ie, 120 parry and '0' bushido with humans
if ( chance <= 0 ) // chance shouldn't go below 0
if ( chance < 0 ) // chance shouldn't go below 0
chance = 0;
// Parry/Bushido over 100 grants a 5% bonus.

View file

@ -76,11 +76,11 @@ namespace Server.Items
};
undead.Opposition = new SlayerGroup[]{ humanoid };
undead.Super = new SlayerEntry( SlayerName.Silver, typeof( AncientLich ), typeof( Bogle ), typeof( BoneKnight ), typeof( BoneMagi ),/* typeof( DarkGuardian ), */typeof( DarknightCreeper ), typeof( FleshGolem ), typeof( Ghoul ), typeof( GoreFiend ), typeof( HellSteed ), typeof( LadyOfTheSnow ), typeof( Lich ), typeof( LichLord ), typeof( Mummy ), typeof( Revenant ), typeof( RevenantLion ), typeof( RottingCorpse ), typeof( Shade ), typeof( ShadowKnight ), typeof( SkeletalKnight ), typeof( SkeletalMage ), typeof( SkeletalMount ), typeof( Skeleton ), typeof( Spectre ), typeof( Wraith ), typeof( Zombie ) );
undead.Super = new SlayerEntry( SlayerName.Silver, typeof( AncientLich ), typeof( Bogle ), typeof( BoneKnight ), typeof( BoneMagi ),/* typeof( DarkGuardian ), */typeof( DarknightCreeper ), typeof( FleshGolem ), typeof( Ghoul ), typeof( GoreFiend ), typeof( HellSteed ), typeof( LadyOfTheSnow ), typeof( Lich ), typeof( LichLord ), typeof( Mummy ), typeof( PestilentBandage ), typeof( Revenant ), typeof( RevenantLion ), typeof( RottingCorpse ), typeof( Shade ), typeof( ShadowKnight ), typeof( SkeletalKnight ), typeof( SkeletalMage ), typeof( SkeletalMount ), typeof( Skeleton ), typeof( Spectre ), typeof( Wraith ), typeof( Zombie ) );
undead.Entries = new SlayerEntry[0];
fey.Opposition = new SlayerGroup[]{ abyss };
fey.Super = new SlayerEntry( SlayerName.Fey, typeof( Centaur ), typeof( EtherealWarrior ), typeof( Kirin ), typeof( LordOaks ), typeof( Pixie ), typeof( Silvani ), typeof( Treefellow ), typeof( Unicorn ), typeof( Wisp ) );
fey.Super = new SlayerEntry( SlayerName.Fey, typeof( Centaur ), typeof( EtherealWarrior ), typeof( Kirin ), typeof( LordOaks ), typeof( Pixie ), typeof( Silvani ), typeof( Treefellow ), typeof( Unicorn ), typeof( Wisp ), typeof( MLDryad ), typeof( Satyr ) );
fey.Entries = new SlayerEntry[0];
elemental.Opposition = new SlayerGroup[]{ abyss };

View file

@ -0,0 +1,100 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Server.Items;
using Server.Targeting;
using Server.Engines.Quests;
using Server.Engines.Quests.Haven;
using Server.ContextMenus;
namespace Server.Mobiles
{
public class CorruptedSoul : BaseCreature
{
public override bool DeleteCorpseOnDeath{ get{ return true; } }
[Constructable]
public CorruptedSoul() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, .1, 5 )
{
Name = "a corrupted soul";
Body = 0x3CA;
Hue = 0x453;
SetStr( 102, 115 );
SetDex( 101, 115 );
SetInt( 203, 215 );
SetHits( 61, 69 );
SetDamage( 2, 21 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 61, 74 );
SetResistance( ResistanceType.Fire, 22, 48 );
SetResistance( ResistanceType.Cold, 73, 100 );
SetResistance( ResistanceType.Poison, 0 );
SetResistance( ResistanceType.Energy, 51, 60 );
SetSkill( SkillName.MagicResist, 80.2, 89.4 );
SetSkill( SkillName.Tactics, 81.3-89.9 );
SetSkill( SkillName.Wrestling, 80.1, 88.7 );
Fame = 5000;
Karma = -5000;
// VirtualArmor = 6; Not sure
}
public override bool AlwaysAttackable{ get{ return true; } }
public override bool BleedImmune{ get{ return true; } } // NEED TO VERIFY
// NEED TO VERIFY SOUNDS! Known: No Idle Sound.
/*public override int GetAngerSound()
{
return 0x0;
}*/
public override int GetAttackSound()
{
return 0x233;
}
/*public override int GetDeathSound()
{
return 0x0;
}*/
public override bool AlwaysMurderer{ get{ return true; } }
// TODO: Proper OnDeath Effect
public override bool OnBeforeDeath()
{
if ( !base.OnBeforeDeath() )
return false;
// 1 in 20 chance that a Thread of Fate will appear in the killer's pack
Effects.SendLocationEffect( Location, Map, 0x376A, 10, 1 );
return true;
}
public CorruptedSoul( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,96 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
using Server.Misc;
namespace Server.Mobiles
{
[CorpseName( "a minotaur corpse" )]
public class Minotaur : BaseCreature
{
[Constructable]
public Minotaur() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) // NEED TO CHECK
{
Name = "a minotaur";
Body = 263;
SetStr( 301, 340 );
SetDex( 91, 110 );
SetInt( 31, 50 );
SetHits( 301, 340 );
SetDamage( 5, 8 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 55, 65 );
SetResistance( ResistanceType.Fire, 25, 35 );
SetResistance( ResistanceType.Cold, 30, 40 );
SetResistance( ResistanceType.Poison, 30, 40 );
SetResistance( ResistanceType.Energy, 30, 40 );
SetSkill( SkillName.Meditation, 0 );
SetSkill( SkillName.EvalInt, 0 );
SetSkill( SkillName.Magery, 0 );
SetSkill( SkillName.Poisoning, 0 );
SetSkill( SkillName.Anatomy, 0 );
SetSkill( SkillName.MagicResist, 56.1, 64.0 );
SetSkill( SkillName.Tactics, 93.3, 97.8 );
SetSkill( SkillName.Wrestling, 90.4, 92.1 );
Fame = 5000;
Karma = -5000;
VirtualArmor = 28; // Don't know what it should be
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich ); // Need to verify
}
// Using Tormented Minotaur sounds - Need to veryfy
public override int GetAngerSound()
{
return 0x597;
}
public override int GetIdleSound()
{
return 0x596;
}
public override int GetAttackSound()
{
return 0x599;
}
public override int GetHurtSound()
{
return 0x59a;
}
public override int GetDeathSound()
{
return 0x59c;
}
public Minotaur( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,96 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
using Server.Misc;
namespace Server.Mobiles
{
[CorpseName( "a minotaur corpse" )]
public class MinotaurCaptain : BaseCreature
{
[Constructable]
public MinotaurCaptain() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) // NEED TO CHECK
{
Name = "a minotaur captain";
Body = 280;
SetStr( 401, 425 );
SetDex( 91, 110 );
SetInt( 31, 50 );
SetHits( 401, 440 );
SetDamage( 4, 7 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 65, 75 );
SetResistance( ResistanceType.Fire, 35, 45 );
SetResistance( ResistanceType.Cold, 40, 50 );
SetResistance( ResistanceType.Poison, 40, 50 );
SetResistance( ResistanceType.Energy, 40, 50 );
SetSkill( SkillName.Meditation, 0 );
SetSkill( SkillName.EvalInt, 0 );
SetSkill( SkillName.Magery, 0 );
SetSkill( SkillName.Poisoning, 0 );
SetSkill( SkillName.Anatomy, 0, 6.3 );
SetSkill( SkillName.MagicResist, 66.1, 73.6 );
SetSkill( SkillName.Tactics, 93.0, 109.9 );
SetSkill( SkillName.Wrestling, 92.6, 107.2 );
Fame = 7000;
Karma = -7000;
VirtualArmor = 28; // Don't know what it should be
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich ); // Need to verify
}
// Using Tormented Minotaur sounds - Need to veryfy
public override int GetAngerSound()
{
return 0x597;
}
public override int GetIdleSound()
{
return 0x596;
}
public override int GetAttackSound()
{
return 0x599;
}
public override int GetHurtSound()
{
return 0x59a;
}
public override int GetDeathSound()
{
return 0x59c;
}
public MinotaurCaptain( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,97 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
using Server.Misc;
namespace Server.Mobiles
{
[CorpseName( "a minotaur corpse" )]
public class MinotaurScout : BaseCreature
{
[Constructable]
public MinotaurScout() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) // NEED TO CHECK
{
Name = "a minotaur scout";
Body = 281;
SetStr( 353, 375 );
SetDex( 111, 130 );
SetInt( 34, 50 );
SetHits( 354, 383 );
SetDamage( 4, 7 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 55, 65 );
SetResistance( ResistanceType.Fire, 25, 35 );
SetResistance( ResistanceType.Cold, 30, 40 );
SetResistance( ResistanceType.Poison, 30, 40 );
SetResistance( ResistanceType.Energy, 30, 40 );
//SetSkill( SkillName.Meditation, Unknown );
//SetSkill( SkillName.EvalInt, Unknown );
//SetSkill( SkillName.Magery, Unknown );
//SetSkill( SkillName.Poisoning, Unknown );
SetSkill( SkillName.Anatomy, 0 );
SetSkill( SkillName.MagicResist, 60.6, 67.5 );
SetSkill( SkillName.Tactics, 86.9, 103.6 );
SetSkill( SkillName.Wrestling, 85.6, 104.5 );
Fame = 5000;
Karma = -5000;
VirtualArmor = 28; // Don't know what it should be
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich ); // Need to verify
}
// Using Tormented Minotaur sounds - Need to veryfy
public override int GetAngerSound()
{
return 0x597;
}
public override int GetIdleSound()
{
return 0x596;
}
public override int GetAttackSound()
{
return 0x599;
}
public override int GetHurtSound()
{
return 0x59a;
}
public override int GetDeathSound()
{
return 0x59c;
}
public MinotaurScout( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,153 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
using Server.Misc;
namespace Server.Mobiles
{
[CorpseName("a pestilent bandage corpse")]
public class PestilentBandage : BaseCreature
{
// Neither Stratics nor UOGuide have much description
// beyond being a "Grey Mummy". BodyValue, Sound and
// Hue are all guessed until they can be verified.
// Loot and Fame/Karma are also guesses at this point.
//
// They also apparently have a Poison Attack, which I've stolen from Yamandons.
[Constructable]
public PestilentBandage() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) // NEED TO CHECK
{
Name = "a pestilent bandage";
Body = 154;
Hue = 0x515;
BaseSoundID = 471;
SetStr( 691, 740 );
SetDex( 141, 180 );
SetInt( 51, 80 );
SetHits( 415, 445 );
SetDamage( 4, 7 );
SetDamageType( ResistanceType.Physical, 40 );
SetDamageType( ResistanceType.Cold, 20 );
SetDamageType( ResistanceType.Poison, 40 );
SetResistance( ResistanceType.Physical, 45, 55 );
SetResistance( ResistanceType.Fire, 10, 20 );
SetResistance( ResistanceType.Cold, 50, 60 );
SetResistance( ResistanceType.Poison, 20, 30 );
SetResistance( ResistanceType.Energy, 20, 30 );
SetSkill( SkillName.Poisoning, 0.0, 10.0 );
SetSkill( SkillName.Anatomy, 0 );
SetSkill( SkillName.MagicResist, 75.0, 80.0 );
SetSkill( SkillName.Tactics, 80.0, 85.0 );
SetSkill( SkillName.Wrestling, 70.0, 75.0 );
Fame = 20000;
Karma = -20000;
// VirtualArmor = 28; // Don't know what it should be
PackItem( new Bandage( 5 ) ); // How many?
}
public override void OnDamagedBySpell(Mobile attacker)
{
base.OnDamagedBySpell(attacker);
DoCounter(attacker);
}
public override void OnGotMeleeAttack(Mobile attacker)
{
base.OnGotMeleeAttack(attacker);
DoCounter(attacker);
}
private void DoCounter(Mobile attacker)
{
if (this.Map == null)
return;
if (attacker is BaseCreature && ((BaseCreature)attacker).BardProvoked)
return;
if (0.2 > Utility.RandomDouble())
{
/* Counterattack with Hit Poison Area
* 20-25 damage, unresistable
* Lethal poison, 100% of the time
* Particle effect: Type: "2" From: "0x4061A107" To: "0x0" ItemId: "0x36BD" ItemIdName: "explosion" FromLocation: "(296 615, 17)" ToLocation: "(296 615, 17)" Speed: "1" Duration: "10" FixedDirection: "True" Explode: "False" Hue: "0xA6" RenderMode: "0x0" Effect: "0x1F78" ExplodeEffect: "0x1" ExplodeSound: "0x0" Serial: "0x4061A107" Layer: "255" Unknown: "0x0"
* Doesn't work on provoked monsters
*/
Mobile target = null;
if (attacker is BaseCreature)
{
Mobile m = ((BaseCreature)attacker).GetMaster();
if (m != null)
target = m;
}
if (target == null || !target.InRange(this, 18))
target = attacker;
this.Animate(10, 4, 1, true, false, 0);
ArrayList targets = new ArrayList();
foreach (Mobile m in target.GetMobilesInRange(8))
{
if (m == this || !CanBeHarmful(m))
continue;
if (m is BaseCreature && (((BaseCreature)m).Controlled || ((BaseCreature)m).Summoned || ((BaseCreature)m).Team != this.Team))
targets.Add(m);
else if (m.Player && m.Alive)
targets.Add(m);
}
for (int i = 0; i < targets.Count; ++i)
{
Mobile m = (Mobile)targets[i];
DoHarmful(m);
AOS.Damage(m, this, Utility.RandomMinMax(20, 25), true, 0, 0, 0, 100, 0);
m.FixedParticles(0x36BD, 1, 10, 0x1F78, 0xA6, 0, (EffectLayer)255);
m.ApplyPoison(this, Poison.Lethal);
}
}
}
public override bool CanHeal { get { return true; } }
public override void GenerateLoot()
{
AddLoot( LootPack.Rich ); // Need to verify
}
public PestilentBandage( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,73 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
using Server.Misc;
namespace Server.Mobiles
{
[CorpseName( "a troglodyte corpse" )]
public class Troglodyte : BaseCreature
{
[Constructable]
public Troglodyte() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) // NEED TO CHECK
{
Name = "a troglodyte";
Body = 267;
BaseSoundID = 0x59F;
SetStr( 148, 217 );
SetDex( 91, 120 );
SetInt( 51, 70 );
SetHits( 302, 340 );
SetDamage( 5, 6 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 30, 35 );
SetResistance( ResistanceType.Fire, 20, 30 );
SetResistance( ResistanceType.Cold, 35, 40 );
SetResistance( ResistanceType.Poison, 30, 40 );
SetResistance( ResistanceType.Energy, 30, 40 );
SetSkill( SkillName.Anatomy, 70.5, 94.8 );
SetSkill( SkillName.MagicResist, 51.8, 65.0 );
SetSkill( SkillName.Tactics, 80.4, 94.7 );
SetSkill( SkillName.Wrestling, 70.2, 93.5 );
Fame = 5000;
Karma = -5000;
VirtualArmor = 28; // Don't know what it should be
PackItem( new Bandage( 5 ) ); // How many?
PackItem( new Ribs() );
}
public override bool CanHeal { get { return true; } }
public override void GenerateLoot()
{
AddLoot( LootPack.Rich ); // Need to verify
}
public Troglodyte( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,87 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a dragon corpse" )]
public class GreaterDragon : BaseCreature
{
[Constructable]
public GreaterDragon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.3, 0.5 )
{
Name = "a greater dragon";
Body = Utility.RandomList( 12, 59 );
BaseSoundID = 362;
SetStr( 1025, 1425 );
SetDex( 81, 148 );
SetInt( 475, 675 );
SetHits( 1000, 2000 );
SetStam( 120, 135 );
SetDamage( 5, 6 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 60, 85 );
SetResistance( ResistanceType.Fire, 65, 90 );
SetResistance( ResistanceType.Cold, 40, 55 );
SetResistance( ResistanceType.Poison, 40, 60 );
SetResistance( ResistanceType.Energy, 50, 75 );
SetSkill( SkillName.Meditation, 0 );
SetSkill( SkillName.EvalInt, 110.0, 140.0 );
SetSkill( SkillName.Magery, 110.0, 140.0 );
SetSkill( SkillName.Poisoning, 0 );
SetSkill( SkillName.Anatomy, 0 );
SetSkill( SkillName.MagicResist, 110.0, 140.0 );
SetSkill( SkillName.Tactics, 110.0, 140.0 );
SetSkill( SkillName.Wrestling, 115.0, 145.0 );
Fame = 55000;
Karma = -55000;
VirtualArmor = 60;
Tamable = true;
ControlSlots = 5;
MinTameSkill = 104.7;
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 4 );
AddLoot( LootPack.Gems, 8 );
}
public override bool ReacquireOnMovement{ get{ return !Controlled; } }
public override bool HasBreath{ get{ return true; } } // fire breath enabled
public override bool AutoDispel{ get{ return !Controlled; } }
public override int TreasureMapLevel{ get{ return 5; } }
public override int Meat{ get{ return 19; } }
public override int Hides{ get{ return 20; } }
public override HideType HideType{ get{ return HideType.Barbed; } }
public override int Scales{ get{ return 7; } }
public override ScaleType ScaleType{ get{ return ( Body == 12 ? ScaleType.Yellow : ScaleType.Red ); } }
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
public override bool CanAngerOnTame { get { return true; } }
public GreaterDragon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}