Fixes code according to modern code style. Fixes a few expression bugs.

This commit is contained in:
Kamron Batman 2018-09-15 09:58:51 -07:00
parent 89eea25e5f
commit 970fd563b2
3324 changed files with 441118 additions and 433755 deletions

View file

@ -2,87 +2,91 @@ using Server.Items;
namespace Server.Mobiles
{
public class AbysmalHorror : BaseCreature
{
public override string CorpseName => "an abysmal horror corpse";
public override WeaponAbility GetWeaponAbility() => Utility.RandomBool() ? WeaponAbility.MortalStrike : WeaponAbility.WhirlwindAttack;
public class AbysmalHorror : BaseCreature
{
[Constructible]
public AbysmalHorror() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 312;
BaseSoundID = 0x451;
public override bool IgnoreYoungProtection => Core.ML;
SetStr(401, 420);
SetDex(81, 90);
SetInt(401, 420);
public override string DefaultName => "an abysmal horror";
SetHits(6000);
[Constructible]
public AbysmalHorror() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 312;
BaseSoundID = 0x451;
SetDamage(13, 17);
SetStr( 401, 420 );
SetDex( 81, 90 );
SetInt( 401, 420 );
SetDamageType(ResistanceType.Physical, 50);
SetDamageType(ResistanceType.Poison, 50);
SetHits( 6000 );
SetResistance(ResistanceType.Physical, 30, 35);
SetResistance(ResistanceType.Fire, 100);
SetResistance(ResistanceType.Cold, 50, 55);
SetResistance(ResistanceType.Poison, 60, 65);
SetResistance(ResistanceType.Energy, 77, 80);
SetDamage( 13, 17 );
SetSkill(SkillName.EvalInt, 200.0);
SetSkill(SkillName.Magery, 112.6, 117.5);
SetSkill(SkillName.Meditation, 200.0);
SetSkill(SkillName.MagicResist, 117.6, 120.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 84.1, 88.0);
SetDamageType( ResistanceType.Physical, 50 );
SetDamageType( ResistanceType.Poison, 50 );
Fame = 26000;
Karma = -26000;
SetResistance( ResistanceType.Physical, 30, 35 );
SetResistance( ResistanceType.Fire, 100 );
SetResistance( ResistanceType.Cold, 50, 55 );
SetResistance( ResistanceType.Poison, 60, 65 );
SetResistance( ResistanceType.Energy, 77, 80 );
VirtualArmor = 54;
}
SetSkill( SkillName.EvalInt, 200.0 );
SetSkill( SkillName.Magery, 112.6, 117.5 );
SetSkill( SkillName.Meditation, 200.0 );
SetSkill( SkillName.MagicResist, 117.6, 120.0 );
SetSkill( SkillName.Tactics, 100.0 );
SetSkill( SkillName.Wrestling, 84.1, 88.0 );
public AbysmalHorror(Serial serial) : base(serial)
{
}
Fame = 26000;
Karma = -26000;
public override string CorpseName => "an abysmal horror corpse";
VirtualArmor = 54;
}
public override bool IgnoreYoungProtection => Core.ML;
public override void GenerateLoot()
{
AddLoot( LootPack.UltraRich, 2 );
}
public override string DefaultName => "an abysmal horror";
public override void OnDeath( Container c )
{
base.OnDeath( c );
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => 1;
if ( !Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance( this ) )
DemonKnight.DistributeArtifact( this );
}
public override WeaponAbility GetWeaponAbility()
{
return Utility.RandomBool() ? WeaponAbility.MortalStrike : WeaponAbility.WhirlwindAttack;
}
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => 1;
public override void GenerateLoot()
{
AddLoot(LootPack.UltraRich, 2);
}
public AbysmalHorror( Serial serial ) : base( serial )
{
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
if (!Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance(this))
DemonKnight.DistributeArtifact(this);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
if ( BaseSoundID == 357 )
BaseSoundID = 0x451;
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (BaseSoundID == 357)
BaseSoundID = 0x451;
}
}
}

View file

@ -1,72 +1,72 @@
namespace Server.Mobiles
{
public class BoneDemon : BaseCreature
{
public override string CorpseName => "a bone demon corpse";
public override string DefaultName => "a bone demon";
public class BoneDemon : BaseCreature
{
[Constructible]
public BoneDemon() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 308;
BaseSoundID = 0x48D;
[Constructible]
public BoneDemon() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 308;
BaseSoundID = 0x48D;
SetStr(1000);
SetDex(151, 175);
SetInt(171, 220);
SetStr( 1000 );
SetDex( 151, 175 );
SetInt( 171, 220 );
SetHits(3600);
SetHits( 3600 );
SetDamage(34, 36);
SetDamage( 34, 36 );
SetDamageType(ResistanceType.Physical, 50);
SetDamageType(ResistanceType.Cold, 50);
SetDamageType( ResistanceType.Physical, 50 );
SetDamageType( ResistanceType.Cold, 50 );
SetResistance(ResistanceType.Physical, 75);
SetResistance(ResistanceType.Fire, 60);
SetResistance(ResistanceType.Cold, 90);
SetResistance(ResistanceType.Poison, 100);
SetResistance(ResistanceType.Energy, 60);
SetResistance( ResistanceType.Physical, 75 );
SetResistance( ResistanceType.Fire, 60 );
SetResistance( ResistanceType.Cold, 90 );
SetResistance( ResistanceType.Poison, 100 );
SetResistance( ResistanceType.Energy, 60 );
SetSkill(SkillName.DetectHidden, 80.0);
SetSkill(SkillName.EvalInt, 77.6, 87.5);
SetSkill(SkillName.Magery, 77.6, 87.5);
SetSkill(SkillName.Meditation, 100.0);
SetSkill(SkillName.MagicResist, 50.1, 75.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 100.0);
SetSkill( SkillName.DetectHidden, 80.0 );
SetSkill( SkillName.EvalInt, 77.6, 87.5 );
SetSkill( SkillName.Magery, 77.6, 87.5 );
SetSkill( SkillName.Meditation, 100.0 );
SetSkill( SkillName.MagicResist, 50.1, 75.0 );
SetSkill( SkillName.Tactics, 100.0 );
SetSkill( SkillName.Wrestling, 100.0 );
Fame = 20000;
Karma = -20000;
Fame = 20000;
Karma = -20000;
VirtualArmor = 44;
}
VirtualArmor = 44;
}
public BoneDemon(Serial serial) : base(serial)
{
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 8 );
}
public override string CorpseName => "a bone demon corpse";
public override string DefaultName => "a bone demon";
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => 1;
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => 1;
public BoneDemon( Serial serial ) : base( serial )
{
}
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 8);
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,73 +2,77 @@ using Server.Items;
namespace Server.Mobiles
{
public class CrystalElemental : BaseCreature
{
public override string CorpseName => "a crystal elemental corpse";
public override WeaponAbility GetWeaponAbility() => WeaponAbility.BleedAttack;
public class CrystalElemental : BaseCreature
{
[Constructible]
public CrystalElemental() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 300;
BaseSoundID = 278;
public override string DefaultName => "a crystal elemental";
SetStr(136, 160);
SetDex(51, 65);
SetInt(86, 110);
[Constructible]
public CrystalElemental() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 300;
BaseSoundID = 278;
SetHits(150);
SetStr( 136, 160 );
SetDex( 51, 65 );
SetInt( 86, 110 );
SetDamage(10, 15);
SetHits( 150 );
SetDamageType(ResistanceType.Physical, 80);
SetDamageType(ResistanceType.Energy, 20);
SetDamage( 10, 15 );
SetResistance(ResistanceType.Physical, 50, 60);
SetResistance(ResistanceType.Fire, 40, 50);
SetResistance(ResistanceType.Cold, 40, 50);
SetResistance(ResistanceType.Poison, 100);
SetResistance(ResistanceType.Energy, 55, 70);
SetDamageType( ResistanceType.Physical, 80 );
SetDamageType( ResistanceType.Energy, 20 );
SetSkill(SkillName.EvalInt, 70.1, 75.0);
SetSkill(SkillName.Magery, 70.1, 75.0);
SetSkill(SkillName.Meditation, 65.1, 75.0);
SetSkill(SkillName.MagicResist, 80.1, 90.0);
SetSkill(SkillName.Tactics, 75.1, 85.0);
SetSkill(SkillName.Wrestling, 65.1, 75.0);
SetResistance( ResistanceType.Physical, 50, 60 );
SetResistance( ResistanceType.Fire, 40, 50 );
SetResistance( ResistanceType.Cold, 40, 50 );
SetResistance( ResistanceType.Poison, 100 );
SetResistance( ResistanceType.Energy, 55, 70 );
Fame = 6500;
Karma = -6500;
SetSkill( SkillName.EvalInt, 70.1, 75.0 );
SetSkill( SkillName.Magery, 70.1, 75.0 );
SetSkill( SkillName.Meditation, 65.1, 75.0 );
SetSkill( SkillName.MagicResist, 80.1, 90.0 );
SetSkill( SkillName.Tactics, 75.1, 85.0 );
SetSkill( SkillName.Wrestling, 65.1, 75.0 );
VirtualArmor = 54;
}
Fame = 6500;
Karma = -6500;
public CrystalElemental(Serial serial) : base(serial)
{
}
VirtualArmor = 54;
}
public override string CorpseName => "a crystal elemental corpse";
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
AddLoot( LootPack.Average );
}
public override string DefaultName => "a crystal elemental";
public override bool BleedImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => 1;
public override bool BleedImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => 1;
public CrystalElemental( Serial serial ) : base( serial )
{
}
public override WeaponAbility GetWeaponAbility()
{
return WeaponAbility.BleedAttack;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
AddLoot(LootPack.Average);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,91 +2,91 @@ using Server.Items;
namespace Server.Mobiles
{
public class DarknightCreeper : BaseCreature
{
public override string CorpseName => "a darknight creeper corpse";
public override bool IgnoreYoungProtection => Core.ML;
public class DarknightCreeper : BaseCreature
{
[Constructible]
public DarknightCreeper() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Name = NameList.RandomName("darknight creeper");
Body = 313;
BaseSoundID = 0xE0;
[Constructible]
public DarknightCreeper() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = NameList.RandomName( "darknight creeper" );
Body = 313;
BaseSoundID = 0xE0;
SetStr(301, 330);
SetDex(101, 110);
SetInt(301, 330);
SetStr( 301, 330 );
SetDex( 101, 110 );
SetInt( 301, 330 );
SetHits(4000);
SetHits( 4000 );
SetDamage(22, 26);
SetDamage( 22, 26 );
SetDamageType(ResistanceType.Physical, 85);
SetDamageType(ResistanceType.Poison, 15);
SetDamageType( ResistanceType.Physical, 85 );
SetDamageType( ResistanceType.Poison, 15 );
SetResistance(ResistanceType.Physical, 60);
SetResistance(ResistanceType.Fire, 60);
SetResistance(ResistanceType.Cold, 100);
SetResistance(ResistanceType.Poison, 90);
SetResistance(ResistanceType.Energy, 75);
SetResistance( ResistanceType.Physical, 60 );
SetResistance( ResistanceType.Fire, 60 );
SetResistance( ResistanceType.Cold, 100 );
SetResistance( ResistanceType.Poison, 90 );
SetResistance( ResistanceType.Energy, 75 );
SetSkill(SkillName.DetectHidden, 80.0);
SetSkill(SkillName.EvalInt, 118.1, 120.0);
SetSkill(SkillName.Magery, 112.6, 120.0);
SetSkill(SkillName.Meditation, 150.0);
SetSkill(SkillName.Poisoning, 120.0);
SetSkill(SkillName.MagicResist, 90.1, 90.9);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 90.1, 90.9);
SetSkill(SkillName.Necromancy, 120.1, 130.0);
SetSkill(SkillName.SpiritSpeak, 120.1, 130.0);
SetSkill( SkillName.DetectHidden, 80.0 );
SetSkill( SkillName.EvalInt, 118.1, 120.0 );
SetSkill( SkillName.Magery, 112.6, 120.0 );
SetSkill( SkillName.Meditation, 150.0 );
SetSkill( SkillName.Poisoning, 120.0 );
SetSkill( SkillName.MagicResist, 90.1, 90.9 );
SetSkill( SkillName.Tactics, 100.0 );
SetSkill( SkillName.Wrestling, 90.1, 90.9 );
SetSkill( SkillName.Necromancy, 120.1, 130.0 );
SetSkill( SkillName.SpiritSpeak, 120.1, 130.0 );
Fame = 22000;
Karma = -22000;
Fame = 22000;
Karma = -22000;
VirtualArmor = 34;
}
VirtualArmor = 34;
}
public DarknightCreeper(Serial serial) : base(serial)
{
}
public override void GenerateLoot()
{
AddLoot( LootPack.UltraRich, 2 );
}
public override string CorpseName => "a darknight creeper corpse";
public override bool IgnoreYoungProtection => Core.ML;
public override void OnDeath( Container c )
{
base.OnDeath( c );
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override bool BleedImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override Poison HitPoison => Poison.Lethal;
if ( !Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance( this ) )
DemonKnight.DistributeArtifact( this );
}
public override int TreasureMapLevel => 1;
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override bool BleedImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override Poison HitPoison => Poison.Lethal;
public override void GenerateLoot()
{
AddLoot(LootPack.UltraRich, 2);
}
public override int TreasureMapLevel => 1;
public override void OnDeath(Container c)
{
base.OnDeath(c);
public DarknightCreeper( Serial serial ) : base( serial )
{
}
if (!Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance(this))
DemonKnight.DistributeArtifact(this);
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if ( BaseSoundID == 471 )
BaseSoundID = 0xE0;
}
}
}
if (BaseSoundID == 471)
BaseSoundID = 0xE0;
}
}
}

View file

@ -4,287 +4,288 @@ using Server.Items;
namespace Server.Mobiles
{
public class DemonKnight : BaseCreature
{
public override string CorpseName => "a demon knight corpse";
public override bool IgnoreYoungProtection => Core.ML;
public class DemonKnight : BaseCreature
{
private static bool m_InHere;
public static Type[] ArtifactRarity10 { get; } =
{
typeof( LegacyOfTheDreadLord ),
typeof( TheTaskmaster )
};
[Constructible]
public DemonKnight() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Name = NameList.RandomName("demon knight");
Title = "the Dark Father";
Body = 318;
BaseSoundID = 0x165;
public static Type[] ArtifactRarity11 { get; } =
{
typeof( TheDragonSlayer ),
typeof( ArmorOfFortune ),
typeof( GauntletsOfNobility ),
typeof( HelmOfInsight ),
typeof( HolyKnightsBreastplate ),
typeof( JackalsCollar ),
typeof( LeggingsOfBane ),
typeof( MidnightBracers ),
typeof( OrnateCrownOfTheHarrower ),
typeof( ShadowDancerLeggings ),
typeof( TunicOfFire ),
typeof( VoiceOfTheFallenKing ),
typeof( BraceletOfHealth ),
typeof( OrnamentOfTheMagician ),
typeof( RingOfTheElements ),
typeof( RingOfTheVile ),
typeof( Aegis ),
typeof( ArcaneShield ),
typeof( AxeOfTheHeavens ),
typeof( BladeOfInsanity ),
typeof( BoneCrusher ),
typeof( BreathOfTheDead ),
typeof( Frostbringer ),
typeof( SerpentsFang ),
typeof( StaffOfTheMagi ),
typeof( TheBeserkersMaul ),
typeof( TheDryadBow ),
typeof( DivineCountenance ),
typeof( HatOfTheMagi ),
typeof( HuntersHeaddress ),
typeof( SpiritOfTheTotem )
};
SetStr(500);
SetDex(100);
SetInt(1000);
public static Item CreateRandomArtifact()
{
if ( !Core.AOS )
return null;
SetHits(30000);
SetMana(5000);
int count = ( ArtifactRarity10.Length * 5 ) + ( ArtifactRarity11.Length * 4 );
int random = Utility.Random( count );
Type type;
SetDamage(17, 21);
if ( random < ( ArtifactRarity10.Length * 5 ) )
{
type = ArtifactRarity10[random / 5];
}
else
{
random -= ArtifactRarity10.Length * 5;
type = ArtifactRarity11[random / 4];
}
SetDamageType(ResistanceType.Physical, 20);
SetDamageType(ResistanceType.Fire, 20);
SetDamageType(ResistanceType.Cold, 20);
SetDamageType(ResistanceType.Poison, 20);
SetDamageType(ResistanceType.Energy, 20);
return Loot.Construct( type );
}
SetResistance(ResistanceType.Physical, 30);
SetResistance(ResistanceType.Fire, 30);
SetResistance(ResistanceType.Cold, 30);
SetResistance(ResistanceType.Poison, 30);
SetResistance(ResistanceType.Energy, 30);
public static Mobile FindRandomPlayer( BaseCreature creature )
{
List<DamageStore> rights = GetLootingRights( creature.DamageEntries, creature.HitsMax );
SetSkill(SkillName.Necromancy, 120, 120.0);
SetSkill(SkillName.SpiritSpeak, 120.0, 120.0);
for ( int i = rights.Count - 1; i >= 0; --i )
{
DamageStore ds = rights[i];
SetSkill(SkillName.DetectHidden, 80.0);
SetSkill(SkillName.EvalInt, 100.0);
SetSkill(SkillName.Magery, 100.0);
SetSkill(SkillName.Meditation, 120.0);
SetSkill(SkillName.MagicResist, 150.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 120.0);
if ( !ds.m_HasRight )
rights.RemoveAt( i );
}
Fame = 28000;
Karma = -28000;
if ( rights.Count > 0 )
return rights[Utility.Random( rights.Count )].m_Mobile;
VirtualArmor = 64;
}
return null;
}
public DemonKnight(Serial serial) : base(serial)
{
}
public static void DistributeArtifact( BaseCreature creature )
{
DistributeArtifact( creature, CreateRandomArtifact() );
}
public override string CorpseName => "a demon knight corpse";
public override bool IgnoreYoungProtection => Core.ML;
public static void DistributeArtifact( BaseCreature creature, Item artifact )
{
DistributeArtifact( FindRandomPlayer( creature ), artifact );
}
public static Type[] ArtifactRarity10{ get; } =
{
typeof(LegacyOfTheDreadLord),
typeof(TheTaskmaster)
};
public static void DistributeArtifact( Mobile to )
{
DistributeArtifact( to, CreateRandomArtifact() );
}
public static Type[] ArtifactRarity11{ get; } =
{
typeof(TheDragonSlayer),
typeof(ArmorOfFortune),
typeof(GauntletsOfNobility),
typeof(HelmOfInsight),
typeof(HolyKnightsBreastplate),
typeof(JackalsCollar),
typeof(LeggingsOfBane),
typeof(MidnightBracers),
typeof(OrnateCrownOfTheHarrower),
typeof(ShadowDancerLeggings),
typeof(TunicOfFire),
typeof(VoiceOfTheFallenKing),
typeof(BraceletOfHealth),
typeof(OrnamentOfTheMagician),
typeof(RingOfTheElements),
typeof(RingOfTheVile),
typeof(Aegis),
typeof(ArcaneShield),
typeof(AxeOfTheHeavens),
typeof(BladeOfInsanity),
typeof(BoneCrusher),
typeof(BreathOfTheDead),
typeof(Frostbringer),
typeof(SerpentsFang),
typeof(StaffOfTheMagi),
typeof(TheBeserkersMaul),
typeof(TheDryadBow),
typeof(DivineCountenance),
typeof(HatOfTheMagi),
typeof(HuntersHeaddress),
typeof(SpiritOfTheTotem)
};
public static void DistributeArtifact( Mobile to, Item artifact )
{
if ( to == null || artifact == null )
return;
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
Container pack = to.Backpack;
public override int TreasureMapLevel => 1;
if ( pack == null || !pack.TryDropItem( to, artifact, false ) )
to.BankBox.DropItem( artifact );
public static Item CreateRandomArtifact()
{
if (!Core.AOS)
return null;
to.SendLocalizedMessage( 1062317 ); // For your valor in combating the fallen beast, a special artifact has been bestowed on you.
}
int count = ArtifactRarity10.Length * 5 + ArtifactRarity11.Length * 4;
int random = Utility.Random(count);
Type type;
public static int GetArtifactChance( Mobile boss )
{
if ( !Core.AOS )
return 0;
if (random < ArtifactRarity10.Length * 5)
{
type = ArtifactRarity10[random / 5];
}
else
{
random -= ArtifactRarity10.Length * 5;
type = ArtifactRarity11[random / 4];
}
int luck = LootPack.GetLuckChanceForKiller( boss );
int chance;
return Loot.Construct(type);
}
if ( boss is DemonKnight )
chance = 1500 + (luck / 5);
else
chance = 750 + (luck / 10);
public static Mobile FindRandomPlayer(BaseCreature creature)
{
List<DamageStore> rights = GetLootingRights(creature.DamageEntries, creature.HitsMax);
return chance;
}
for (int i = rights.Count - 1; i >= 0; --i)
{
DamageStore ds = rights[i];
public static bool CheckArtifactChance( Mobile boss )
{
return GetArtifactChance( boss ) > Utility.Random( 100000 );
}
if (!ds.m_HasRight)
rights.RemoveAt(i);
}
public override WeaponAbility GetWeaponAbility()
{
switch ( Utility.Random( 3 ) )
{
default:
case 0: return WeaponAbility.DoubleStrike;
case 1: return WeaponAbility.WhirlwindAttack;
case 2: return WeaponAbility.CrushingBlow;
}
}
if (rights.Count > 0)
return rights[Utility.Random(rights.Count)].m_Mobile;
public override void OnDeath( Container c )
{
base.OnDeath( c );
return null;
}
if ( !Summoned && !NoKillAwards && CheckArtifactChance( this ) )
DistributeArtifact( this );
}
public static void DistributeArtifact(BaseCreature creature)
{
DistributeArtifact(creature, CreateRandomArtifact());
}
[Constructible]
public DemonKnight() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = NameList.RandomName( "demon knight" );
Title = "the Dark Father";
Body = 318;
BaseSoundID = 0x165;
public static void DistributeArtifact(BaseCreature creature, Item artifact)
{
DistributeArtifact(FindRandomPlayer(creature), artifact);
}
SetStr( 500 );
SetDex( 100 );
SetInt( 1000 );
public static void DistributeArtifact(Mobile to)
{
DistributeArtifact(to, CreateRandomArtifact());
}
SetHits( 30000 );
SetMana( 5000 );
public static void DistributeArtifact(Mobile to, Item artifact)
{
if (to == null || artifact == null)
return;
SetDamage( 17, 21 );
Container pack = to.Backpack;
SetDamageType( ResistanceType.Physical, 20 );
SetDamageType( ResistanceType.Fire, 20 );
SetDamageType( ResistanceType.Cold, 20 );
SetDamageType( ResistanceType.Poison, 20 );
SetDamageType( ResistanceType.Energy, 20 );
if (pack == null || !pack.TryDropItem(to, artifact, false))
to.BankBox.DropItem(artifact);
SetResistance( ResistanceType.Physical, 30 );
SetResistance( ResistanceType.Fire, 30 );
SetResistance( ResistanceType.Cold, 30 );
SetResistance( ResistanceType.Poison, 30 );
SetResistance( ResistanceType.Energy, 30 );
to.SendLocalizedMessage(
1062317); // For your valor in combating the fallen beast, a special artifact has been bestowed on you.
}
SetSkill( SkillName.Necromancy, 120, 120.0 );
SetSkill( SkillName.SpiritSpeak, 120.0, 120.0 );
public static int GetArtifactChance(Mobile boss)
{
if (!Core.AOS)
return 0;
SetSkill( SkillName.DetectHidden, 80.0 );
SetSkill( SkillName.EvalInt, 100.0 );
SetSkill( SkillName.Magery, 100.0 );
SetSkill( SkillName.Meditation, 120.0 );
SetSkill( SkillName.MagicResist, 150.0 );
SetSkill( SkillName.Tactics, 100.0 );
SetSkill( SkillName.Wrestling, 120.0 );
int luck = LootPack.GetLuckChanceForKiller(boss);
int chance;
Fame = 28000;
Karma = -28000;
if (boss is DemonKnight)
chance = 1500 + luck / 5;
else
chance = 750 + luck / 10;
VirtualArmor = 64;
}
return chance;
}
public override void GenerateLoot()
{
AddLoot( LootPack.SuperBoss, 2 );
AddLoot( LootPack.HighScrolls, Utility.RandomMinMax( 6, 60 ) );
}
public static bool CheckArtifactChance(Mobile boss)
{
return GetArtifactChance(boss) > Utility.Random(100000);
}
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
public override WeaponAbility GetWeaponAbility()
{
switch (Utility.Random(3))
{
default:
case 0: return WeaponAbility.DoubleStrike;
case 1: return WeaponAbility.WhirlwindAttack;
case 2: return WeaponAbility.CrushingBlow;
}
}
public override int TreasureMapLevel => 1;
public override void OnDeath(Container c)
{
base.OnDeath(c);
private static bool m_InHere;
if (!Summoned && !NoKillAwards && CheckArtifactChance(this))
DistributeArtifact(this);
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
if ( from != null && from != this && !m_InHere )
{
m_InHere = true;
AOS.Damage( from, this, Utility.RandomMinMax( 8, 20 ), 100, 0, 0, 0, 0 );
public override void GenerateLoot()
{
AddLoot(LootPack.SuperBoss, 2);
AddLoot(LootPack.HighScrolls, Utility.RandomMinMax(6, 60));
}
MovingEffect( from, 0xECA, 10, 0, false, false, 0, 0 );
PlaySound( 0x491 );
public override void OnDamage(int amount, Mobile from, bool willKill)
{
if (from != null && from != this && !m_InHere)
{
m_InHere = true;
AOS.Damage(from, this, Utility.RandomMinMax(8, 20), 100, 0, 0, 0, 0);
if ( 0.05 > Utility.RandomDouble() )
Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( CreateBones_Callback ), from );
MovingEffect(from, 0xECA, 10, 0, false, false, 0, 0);
PlaySound(0x491);
m_InHere = false;
}
}
if (0.05 > Utility.RandomDouble())
Timer.DelayCall(TimeSpan.FromSeconds(1.0), new TimerStateCallback(CreateBones_Callback), from);
public virtual void CreateBones_Callback( object state )
{
Mobile from = (Mobile)state;
Map map = from.Map;
m_InHere = false;
}
}
if ( map == null )
return;
public virtual void CreateBones_Callback(object state)
{
Mobile from = (Mobile)state;
Map map = from.Map;
int count = Utility.RandomMinMax( 1, 3 );
if (map == null)
return;
for ( int i = 0; i < count; ++i )
{
int x = from.X + Utility.RandomMinMax( -1, 1 );
int y = from.Y + Utility.RandomMinMax( -1, 1 );
int z = from.Z;
int count = Utility.RandomMinMax(1, 3);
if ( !map.CanFit( x, y, z, 16, false, true ) )
{
z = map.GetAverageZ( x, y );
for (int i = 0; i < count; ++i)
{
int x = from.X + Utility.RandomMinMax(-1, 1);
int y = from.Y + Utility.RandomMinMax(-1, 1);
int z = from.Z;
if ( z == from.Z || !map.CanFit( x, y, z, 16, false, true ) )
continue;
}
if (!map.CanFit(x, y, z, 16, false, true))
{
z = map.GetAverageZ(x, y);
UnholyBone bone = new UnholyBone
{
Hue = 0,
Name = "unholy bones",
ItemID = Utility.Random(0xECA, 9),
};
if (z == from.Z || !map.CanFit(x, y, z, 16, false, true))
continue;
}
bone.MoveToWorld( new Point3D( x, y, z ), map );
}
}
UnholyBone bone = new UnholyBone
{
Hue = 0,
Name = "unholy bones",
ItemID = Utility.Random(0xECA, 9)
};
public DemonKnight( Serial serial ) : base( serial )
{
}
bone.MoveToWorld(new Point3D(x, y, z), map);
}
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,72 +1,72 @@
namespace Server.Mobiles
{
public class Devourer : BaseCreature
{
public override string CorpseName => "a devourer of souls corpse";
public override string DefaultName => "a devourer of souls";
public class Devourer : BaseCreature
{
[Constructible]
public Devourer() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 303;
BaseSoundID = 357;
[Constructible]
public Devourer() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 303;
BaseSoundID = 357;
SetStr(801, 950);
SetDex(126, 175);
SetInt(201, 250);
SetStr( 801, 950 );
SetDex( 126, 175 );
SetInt( 201, 250 );
SetHits(650);
SetHits( 650 );
SetDamage(22, 26);
SetDamage( 22, 26 );
SetDamageType(ResistanceType.Physical, 60);
SetDamageType(ResistanceType.Cold, 20);
SetDamageType(ResistanceType.Energy, 20);
SetDamageType( ResistanceType.Physical, 60 );
SetDamageType( ResistanceType.Cold, 20 );
SetDamageType( ResistanceType.Energy, 20 );
SetResistance(ResistanceType.Physical, 45, 55);
SetResistance(ResistanceType.Fire, 25, 35);
SetResistance(ResistanceType.Cold, 15, 25);
SetResistance(ResistanceType.Poison, 60, 70);
SetResistance(ResistanceType.Energy, 40, 50);
SetResistance( ResistanceType.Physical, 45, 55 );
SetResistance( ResistanceType.Fire, 25, 35 );
SetResistance( ResistanceType.Cold, 15, 25 );
SetResistance( ResistanceType.Poison, 60, 70 );
SetResistance( ResistanceType.Energy, 40, 50 );
SetSkill(SkillName.EvalInt, 90.1, 100.0);
SetSkill(SkillName.Magery, 90.1, 100.0);
SetSkill(SkillName.Meditation, 90.1, 100.0);
SetSkill(SkillName.MagicResist, 90.1, 105.0);
SetSkill(SkillName.Tactics, 75.1, 85.0);
SetSkill(SkillName.Wrestling, 80.1, 100.0);
SetSkill( SkillName.EvalInt, 90.1, 100.0 );
SetSkill( SkillName.Magery, 90.1, 100.0 );
SetSkill( SkillName.Meditation, 90.1, 100.0 );
SetSkill( SkillName.MagicResist, 90.1, 105.0 );
SetSkill( SkillName.Tactics, 75.1, 85.0 );
SetSkill( SkillName.Wrestling, 80.1, 100.0 );
Fame = 9500;
Karma = -9500;
Fame = 9500;
Karma = -9500;
VirtualArmor = 44;
VirtualArmor = 44;
PackNecroReg(24, 45);
}
PackNecroReg( 24, 45 );
}
public Devourer(Serial serial) : base(serial)
{
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 2 );
}
public override string CorpseName => "a devourer of souls corpse";
public override string DefaultName => "a devourer of souls";
public override Poison PoisonImmune => Poison.Lethal;
public override Poison PoisonImmune => Poison.Lethal;
public override int Meat => 3;
public override int Meat => 3;
public Devourer( Serial serial ) : base( serial )
{
}
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 2);
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,67 +2,71 @@ using Server.Items;
namespace Server.Mobiles
{
public class FleshGolem : BaseCreature
{
public override string CorpseName => "a flesh golem corpse";
public override WeaponAbility GetWeaponAbility() => WeaponAbility.BleedAttack;
public class FleshGolem : BaseCreature
{
[Constructible]
public FleshGolem() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 304;
BaseSoundID = 684;
public override string DefaultName => "a flesh golem";
SetStr(176, 200);
SetDex(51, 75);
SetInt(46, 70);
[Constructible]
public FleshGolem() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 304;
BaseSoundID = 684;
SetHits(106, 120);
SetStr( 176, 200 );
SetDex( 51, 75 );
SetInt( 46, 70 );
SetDamage(18, 22);
SetHits( 106, 120 );
SetDamageType(ResistanceType.Physical, 100);
SetDamage( 18, 22 );
SetResistance(ResistanceType.Physical, 50, 60);
SetResistance(ResistanceType.Fire, 25, 35);
SetResistance(ResistanceType.Cold, 15, 25);
SetResistance(ResistanceType.Poison, 60, 70);
SetResistance(ResistanceType.Energy, 30, 40);
SetDamageType( ResistanceType.Physical, 100 );
SetSkill(SkillName.MagicResist, 50.1, 75.0);
SetSkill(SkillName.Tactics, 55.1, 80.0);
SetSkill(SkillName.Wrestling, 60.1, 70.0);
SetResistance( ResistanceType.Physical, 50, 60 );
SetResistance( ResistanceType.Fire, 25, 35 );
SetResistance( ResistanceType.Cold, 15, 25 );
SetResistance( ResistanceType.Poison, 60, 70 );
SetResistance( ResistanceType.Energy, 30, 40 );
Fame = 1000;
Karma = -1800;
SetSkill( SkillName.MagicResist, 50.1, 75.0 );
SetSkill( SkillName.Tactics, 55.1, 80.0 );
SetSkill( SkillName.Wrestling, 60.1, 70.0 );
VirtualArmor = 34;
}
Fame = 1000;
Karma = -1800;
public FleshGolem(Serial serial) : base(serial)
{
}
VirtualArmor = 34;
}
public override string CorpseName => "a flesh golem corpse";
public override void GenerateLoot()
{
AddLoot( LootPack.Average );
}
public override string DefaultName => "a flesh golem";
public override bool BleedImmune => true;
public override int TreasureMapLevel => 1;
public override bool BleedImmune => true;
public override int TreasureMapLevel => 1;
public FleshGolem( Serial serial ) : base( serial )
{
}
public override WeaponAbility GetWeaponAbility()
{
return WeaponAbility.BleedAttack;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void GenerateLoot()
{
AddLoot(LootPack.Average);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,112 +2,116 @@ using Server.Items;
namespace Server.Mobiles
{
public class FleshRenderer : BaseCreature
{
public override string CorpseName => "a fleshrenderer corpse";
public override WeaponAbility GetWeaponAbility() => Utility.RandomBool() ? WeaponAbility.Dismount : WeaponAbility.ParalyzingBlow;
public class FleshRenderer : BaseCreature
{
[Constructible]
public FleshRenderer() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 315;
public override bool IgnoreYoungProtection => Core.ML;
SetStr(401, 460);
SetDex(201, 210);
SetInt(221, 260);
public override string DefaultName => "a fleshrenderer";
SetHits(4500);
[Constructible]
public FleshRenderer() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 315;
SetDamage(16, 20);
SetStr( 401, 460 );
SetDex( 201, 210 );
SetInt( 221, 260 );
SetDamageType(ResistanceType.Physical, 80);
SetDamageType(ResistanceType.Poison, 20);
SetHits( 4500 );
SetResistance(ResistanceType.Physical, 80, 90);
SetResistance(ResistanceType.Fire, 50, 60);
SetResistance(ResistanceType.Cold, 50, 60);
SetResistance(ResistanceType.Poison, 100);
SetResistance(ResistanceType.Energy, 70, 80);
SetDamage( 16, 20 );
SetSkill(SkillName.DetectHidden, 80.0);
SetSkill(SkillName.MagicResist, 155.1, 160.0);
SetSkill(SkillName.Meditation, 100.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 90.1, 100.0);
SetDamageType( ResistanceType.Physical, 80 );
SetDamageType( ResistanceType.Poison, 20 );
Fame = 23000;
Karma = -23000;
SetResistance( ResistanceType.Physical, 80, 90 );
SetResistance( ResistanceType.Fire, 50, 60 );
SetResistance( ResistanceType.Cold, 50, 60 );
SetResistance( ResistanceType.Poison, 100 );
SetResistance( ResistanceType.Energy, 70, 80 );
VirtualArmor = 24;
}
SetSkill( SkillName.DetectHidden, 80.0 );
SetSkill( SkillName.MagicResist, 155.1, 160.0 );
SetSkill( SkillName.Meditation, 100.0 );
SetSkill( SkillName.Tactics, 100.0 );
SetSkill( SkillName.Wrestling, 90.1, 100.0 );
public FleshRenderer(Serial serial) : base(serial)
{
}
Fame = 23000;
Karma = -23000;
public override string CorpseName => "a fleshrenderer corpse";
VirtualArmor = 24;
}
public override bool IgnoreYoungProtection => Core.ML;
public override void GenerateLoot()
{
AddLoot( LootPack.UltraRich, 2 );
}
public override string DefaultName => "a fleshrenderer";
public override void OnDeath( Container c )
{
base.OnDeath( c );
public override bool AutoDispel => true;
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
if ( !Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance( this ) )
DemonKnight.DistributeArtifact( this );
}
public override int TreasureMapLevel => 1;
public override bool AutoDispel => true;
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
public override WeaponAbility GetWeaponAbility()
{
return Utility.RandomBool() ? WeaponAbility.Dismount : WeaponAbility.ParalyzingBlow;
}
public override int TreasureMapLevel => 1;
public override void GenerateLoot()
{
AddLoot(LootPack.UltraRich, 2);
}
public override int GetAttackSound()
{
return 0x34C;
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
public override int GetHurtSound()
{
return 0x354;
}
if (!Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance(this))
DemonKnight.DistributeArtifact(this);
}
public override int GetAngerSound()
{
return 0x34C;
}
public override int GetAttackSound()
{
return 0x34C;
}
public override int GetIdleSound()
{
return 0x34C;
}
public override int GetHurtSound()
{
return 0x354;
}
public override int GetDeathSound()
{
return 0x354;
}
public override int GetAngerSound()
{
return 0x34C;
}
public FleshRenderer( Serial serial ) : base( serial )
{
}
public override int GetIdleSound()
{
return 0x34C;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override int GetDeathSound()
{
return 0x354;
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
if ( BaseSoundID == 660 )
BaseSoundID = -1;
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (BaseSoundID == 660)
BaseSoundID = -1;
}
}
}

View file

@ -2,68 +2,72 @@ using Server.Items;
namespace Server.Mobiles
{
public class Gibberling : BaseCreature
{
public override string CorpseName => "a gibberling corpse";
public override WeaponAbility GetWeaponAbility() => WeaponAbility.Dismount;
public class Gibberling : BaseCreature
{
[Constructible]
public Gibberling() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 307;
BaseSoundID = 422;
public override string DefaultName => "a gibberling";
SetStr(141, 165);
SetDex(101, 125);
SetInt(56, 80);
[Constructible]
public Gibberling() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 307;
BaseSoundID = 422;
SetHits(85, 99);
SetStr( 141, 165 );
SetDex( 101, 125 );
SetInt( 56, 80 );
SetDamage(12, 17);
SetHits( 85, 99 );
SetDamageType(ResistanceType.Physical, 0);
SetDamageType(ResistanceType.Fire, 40);
SetDamageType(ResistanceType.Energy, 60);
SetDamage( 12, 17 );
SetResistance(ResistanceType.Physical, 45, 55);
SetResistance(ResistanceType.Fire, 25, 35);
SetResistance(ResistanceType.Cold, 25, 35);
SetResistance(ResistanceType.Poison, 10, 20);
SetResistance(ResistanceType.Energy, 30, 40);
SetDamageType( ResistanceType.Physical, 0 );
SetDamageType( ResistanceType.Fire, 40 );
SetDamageType( ResistanceType.Energy, 60 );
SetSkill(SkillName.MagicResist, 45.1, 70.0);
SetSkill(SkillName.Tactics, 67.6, 92.5);
SetSkill(SkillName.Wrestling, 60.1, 80.0);
SetResistance( ResistanceType.Physical, 45, 55 );
SetResistance( ResistanceType.Fire, 25, 35 );
SetResistance( ResistanceType.Cold, 25, 35 );
SetResistance( ResistanceType.Poison, 10, 20 );
SetResistance( ResistanceType.Energy, 30, 40 );
Fame = 1500;
Karma = -1500;
SetSkill( SkillName.MagicResist, 45.1, 70.0 );
SetSkill( SkillName.Tactics, 67.6, 92.5 );
SetSkill( SkillName.Wrestling, 60.1, 80.0 );
VirtualArmor = 27;
}
Fame = 1500;
Karma = -1500;
public Gibberling(Serial serial) : base(serial)
{
}
VirtualArmor = 27;
}
public override string CorpseName => "a gibberling corpse";
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
}
public override string DefaultName => "a gibberling";
public override int TreasureMapLevel => 1;
public override int TreasureMapLevel => 1;
public Gibberling( Serial serial ) : base( serial )
{
}
public override WeaponAbility GetWeaponAbility()
{
return WeaponAbility.Dismount;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void GenerateLoot()
{
AddLoot(LootPack.Meager);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,69 +1,69 @@
namespace Server.Mobiles
{
public class GoreFiend : BaseCreature
{
public override string CorpseName => "a gore fiend corpse";
public override string DefaultName => "a gore fiend";
public class GoreFiend : BaseCreature
{
[Constructible]
public GoreFiend() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 305;
BaseSoundID = 224;
[Constructible]
public GoreFiend() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 305;
BaseSoundID = 224;
SetStr(161, 185);
SetDex(41, 65);
SetInt(46, 70);
SetStr( 161, 185 );
SetDex( 41, 65 );
SetInt( 46, 70 );
SetHits(97, 111);
SetHits( 97, 111 );
SetDamage(15, 21);
SetDamage( 15, 21 );
SetDamageType(ResistanceType.Physical, 85);
SetDamageType(ResistanceType.Poison, 15);
SetDamageType( ResistanceType.Physical, 85 );
SetDamageType( ResistanceType.Poison, 15 );
SetResistance(ResistanceType.Physical, 35, 45);
SetResistance(ResistanceType.Fire, 25, 35);
SetResistance(ResistanceType.Cold, 15, 25);
SetResistance(ResistanceType.Poison, 5, 15);
SetResistance(ResistanceType.Energy, 30, 40);
SetResistance( ResistanceType.Physical, 35, 45 );
SetResistance( ResistanceType.Fire, 25, 35 );
SetResistance( ResistanceType.Cold, 15, 25 );
SetResistance( ResistanceType.Poison, 5, 15 );
SetResistance( ResistanceType.Energy, 30, 40 );
SetSkill(SkillName.MagicResist, 40.1, 55.0);
SetSkill(SkillName.Tactics, 45.1, 70.0);
SetSkill(SkillName.Wrestling, 50.1, 70.0);
SetSkill( SkillName.MagicResist, 40.1, 55.0 );
SetSkill( SkillName.Tactics, 45.1, 70.0 );
SetSkill( SkillName.Wrestling, 50.1, 70.0 );
Fame = 1500;
Karma = -1500;
Fame = 1500;
Karma = -1500;
VirtualArmor = 24;
}
VirtualArmor = 24;
}
public GoreFiend(Serial serial) : base(serial)
{
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average );
}
public override string CorpseName => "a gore fiend corpse";
public override string DefaultName => "a gore fiend";
public override int GetDeathSound()
{
return 1218;
}
public override bool BleedImmune => true;
public override bool BleedImmune => true;
public override void GenerateLoot()
{
AddLoot(LootPack.Average);
}
public GoreFiend( Serial serial ) : base( serial )
{
}
public override int GetDeathSound()
{
return 1218;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,88 +2,92 @@ using Server.Items;
namespace Server.Mobiles
{
public class Impaler : BaseCreature
{
public override string CorpseName => "an impaler corpse";
public override WeaponAbility GetWeaponAbility() => Utility.RandomBool() ? WeaponAbility.MortalStrike : WeaponAbility.BleedAttack;
public class Impaler : BaseCreature
{
[Constructible]
public Impaler() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Name = NameList.RandomName("impaler");
Body = 306;
BaseSoundID = 0x2A7;
public override bool IgnoreYoungProtection => Core.ML;
SetStr(190);
SetDex(45);
SetInt(190);
[Constructible]
public Impaler() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = NameList.RandomName( "impaler" );
Body = 306;
BaseSoundID = 0x2A7;
SetHits(5000);
SetStr( 190 );
SetDex( 45 );
SetInt( 190 );
SetDamage(31, 35);
SetHits( 5000 );
SetDamageType(ResistanceType.Physical, 100);
SetDamage( 31, 35 );
SetResistance(ResistanceType.Physical, 90);
SetResistance(ResistanceType.Fire, 60);
SetResistance(ResistanceType.Cold, 75);
SetResistance(ResistanceType.Poison, 60);
SetResistance(ResistanceType.Energy, 100);
SetDamageType( ResistanceType.Physical, 100 );
SetSkill(SkillName.DetectHidden, 80.0);
SetSkill(SkillName.Meditation, 120.0);
SetSkill(SkillName.Poisoning, 160.0);
SetSkill(SkillName.MagicResist, 100.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 80.0);
SetResistance( ResistanceType.Physical, 90 );
SetResistance( ResistanceType.Fire, 60 );
SetResistance( ResistanceType.Cold, 75 );
SetResistance( ResistanceType.Poison, 60 );
SetResistance( ResistanceType.Energy, 100 );
Fame = 24000;
Karma = -24000;
SetSkill( SkillName.DetectHidden, 80.0 );
SetSkill( SkillName.Meditation, 120.0 );
SetSkill( SkillName.Poisoning, 160.0 );
SetSkill( SkillName.MagicResist, 100.0 );
SetSkill( SkillName.Tactics, 100.0 );
SetSkill( SkillName.Wrestling, 80.0 );
VirtualArmor = 49;
}
Fame = 24000;
Karma = -24000;
public Impaler(Serial serial) : base(serial)
{
}
VirtualArmor = 49;
}
public override string CorpseName => "an impaler corpse";
public override void GenerateLoot()
{
AddLoot( LootPack.UltraRich, 2 );
}
public override bool IgnoreYoungProtection => Core.ML;
public override void OnDeath( Container c )
{
base.OnDeath( c );
public override bool AutoDispel => true;
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
public override Poison HitPoison => 0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly;
if ( !Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance( this ) )
DemonKnight.DistributeArtifact( this );
}
public override int TreasureMapLevel => 1;
public override bool AutoDispel => true;
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
public override Poison HitPoison => (0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly);
public override WeaponAbility GetWeaponAbility()
{
return Utility.RandomBool() ? WeaponAbility.MortalStrike : WeaponAbility.BleedAttack;
}
public override int TreasureMapLevel => 1;
public override void GenerateLoot()
{
AddLoot(LootPack.UltraRich, 2);
}
public Impaler( Serial serial ) : base( serial )
{
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
if (!Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance(this))
DemonKnight.DistributeArtifact(this);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
if ( BaseSoundID == 1200 )
BaseSoundID = 0x2A7;
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (BaseSoundID == 1200)
BaseSoundID = 0x2A7;
}
}
}

View file

@ -1,63 +1,63 @@
namespace Server.Mobiles
{
public class MoundOfMaggots : BaseCreature
{
public override string CorpseName => "a maggoty corpse";
public override string DefaultName => "a mound of maggots";
public class MoundOfMaggots : BaseCreature
{
[Constructible]
public MoundOfMaggots() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 319;
BaseSoundID = 898;
[Constructible]
public MoundOfMaggots() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 319;
BaseSoundID = 898;
SetStr(61, 70);
SetDex(61, 70);
SetInt(10);
SetStr( 61, 70 );
SetDex( 61, 70 );
SetInt( 10 );
SetMana(0);
SetMana( 0 );
SetDamage(3, 9);
SetDamage( 3, 9 );
SetDamageType(ResistanceType.Physical, 50);
SetDamageType(ResistanceType.Poison, 50);
SetDamageType( ResistanceType.Physical, 50 );
SetDamageType( ResistanceType.Poison, 50 );
SetResistance(ResistanceType.Physical, 90);
SetResistance(ResistanceType.Poison, 100);
SetResistance( ResistanceType.Physical, 90 );
SetResistance( ResistanceType.Poison, 100 );
SetSkill(SkillName.Tactics, 50.0);
SetSkill(SkillName.Wrestling, 50.1, 60.0);
SetSkill( SkillName.Tactics, 50.0 );
SetSkill( SkillName.Wrestling, 50.1, 60.0 );
Fame = 1000;
Karma = -1000;
Fame = 1000;
Karma = -1000;
VirtualArmor = 24;
}
VirtualArmor = 24;
}
public MoundOfMaggots(Serial serial) : base(serial)
{
}
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
AddLoot( LootPack.Gems );
}
public override string CorpseName => "a maggoty corpse";
public override string DefaultName => "a mound of maggots";
public override Poison PoisonImmune => Poison.Lethal;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => 1;
public override int TreasureMapLevel => 1;
public MoundOfMaggots( Serial serial ) : base( serial )
{
}
public override void GenerateLoot()
{
AddLoot(LootPack.Meager);
AddLoot(LootPack.Gems);
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,70 +2,74 @@ using Server.Items;
namespace Server.Mobiles
{
public class PatchworkSkeleton : BaseCreature
{
public override string CorpseName => "a patchwork skeletal corpse";
public override WeaponAbility GetWeaponAbility() => WeaponAbility.Dismount;
public class PatchworkSkeleton : BaseCreature
{
[Constructible]
public PatchworkSkeleton() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 309;
BaseSoundID = 0x48D;
public override string DefaultName => "a patchwork skeleton";
SetStr(96, 120);
SetDex(71, 95);
SetInt(16, 40);
[Constructible]
public PatchworkSkeleton() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 309;
BaseSoundID = 0x48D;
SetHits(58, 72);
SetStr( 96, 120 );
SetDex( 71, 95 );
SetInt( 16, 40 );
SetDamage(18, 22);
SetHits( 58, 72 );
SetDamageType(ResistanceType.Physical, 85);
SetDamageType(ResistanceType.Cold, 15);
SetDamage( 18, 22 );
SetResistance(ResistanceType.Physical, 55, 65);
SetResistance(ResistanceType.Fire, 50, 60);
SetResistance(ResistanceType.Cold, 70, 80);
SetResistance(ResistanceType.Poison, 100);
SetResistance(ResistanceType.Energy, 40, 50);
SetDamageType( ResistanceType.Physical, 85 );
SetDamageType( ResistanceType.Cold, 15 );
SetSkill(SkillName.MagicResist, 70.1, 95.0);
SetSkill(SkillName.Tactics, 55.1, 80.0);
SetSkill(SkillName.Wrestling, 50.1, 70.0);
SetResistance( ResistanceType.Physical, 55, 65 );
SetResistance( ResistanceType.Fire, 50, 60 );
SetResistance( ResistanceType.Cold, 70, 80 );
SetResistance( ResistanceType.Poison, 100 );
SetResistance( ResistanceType.Energy, 40, 50 );
Fame = 500;
Karma = -500;
SetSkill( SkillName.MagicResist, 70.1, 95.0 );
SetSkill( SkillName.Tactics, 55.1, 80.0 );
SetSkill( SkillName.Wrestling, 50.1, 70.0 );
VirtualArmor = 54;
}
Fame = 500;
Karma = -500;
public PatchworkSkeleton(Serial serial) : base(serial)
{
}
VirtualArmor = 54;
}
public override string CorpseName => "a patchwork skeletal corpse";
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
}
public override string DefaultName => "a patchwork skeleton";
public override bool BleedImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override bool BleedImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => 1;
public override int TreasureMapLevel => 1;
public PatchworkSkeleton( Serial serial ) : base( serial )
{
}
public override WeaponAbility GetWeaponAbility()
{
return WeaponAbility.Dismount;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void GenerateLoot()
{
AddLoot(LootPack.Meager);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,64 +2,68 @@ using Server.Items;
namespace Server.Mobiles
{
public class Ravager : BaseCreature
{
public override string CorpseName => "a ravager corpse";
public override WeaponAbility GetWeaponAbility() => Utility.RandomBool() ? WeaponAbility.Dismount : WeaponAbility.CrushingBlow;
public class Ravager : BaseCreature
{
[Constructible]
public Ravager() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 314;
BaseSoundID = 357;
public override string DefaultName => "a ravager";
SetStr(251, 275);
SetDex(101, 125);
SetInt(66, 90);
[Constructible]
public Ravager() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 314;
BaseSoundID = 357;
SetHits(161, 175);
SetStr( 251, 275 );
SetDex( 101, 125 );
SetInt( 66, 90 );
SetDamage(15, 20);
SetHits( 161, 175 );
SetDamageType(ResistanceType.Physical, 100);
SetDamage( 15, 20 );
SetResistance(ResistanceType.Physical, 50, 60);
SetResistance(ResistanceType.Fire, 50, 60);
SetResistance(ResistanceType.Cold, 60, 70);
SetResistance(ResistanceType.Poison, 30, 40);
SetResistance(ResistanceType.Energy, 20, 30);
SetDamageType( ResistanceType.Physical, 100 );
SetSkill(SkillName.MagicResist, 50.1, 75.0);
SetSkill(SkillName.Tactics, 75.1, 100.0);
SetSkill(SkillName.Wrestling, 70.1, 90.0);
SetResistance( ResistanceType.Physical, 50, 60 );
SetResistance( ResistanceType.Fire, 50, 60 );
SetResistance( ResistanceType.Cold, 60, 70 );
SetResistance( ResistanceType.Poison, 30, 40 );
SetResistance( ResistanceType.Energy, 20, 30 );
Fame = 3500;
Karma = -3500;
SetSkill( SkillName.MagicResist, 50.1, 75.0 );
SetSkill( SkillName.Tactics, 75.1, 100.0 );
SetSkill( SkillName.Wrestling, 70.1, 90.0 );
VirtualArmor = 54;
}
Fame = 3500;
Karma = -3500;
public Ravager(Serial serial) : base(serial)
{
}
VirtualArmor = 54;
}
public override string CorpseName => "a ravager corpse";
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
}
public override string DefaultName => "a ravager";
public Ravager( Serial serial ) : base( serial )
{
}
public override WeaponAbility GetWeaponAbility()
{
return Utility.RandomBool() ? WeaponAbility.Dismount : WeaponAbility.CrushingBlow;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -4,178 +4,181 @@ using Server.Targeting;
namespace Server.Mobiles
{
public class Revenant : BaseCreature
{
private Mobile m_Target;
private DateTime m_ExpireTime;
public class Revenant : BaseCreature
{
private DateTime m_ExpireTime;
private Mobile m_Target;
public override void DisplayPaperdollTo( Mobile to )
{
// Do nothing
}
public Revenant(Mobile caster, Mobile target, TimeSpan duration) : base(AIType.AI_Melee, FightMode.Closest, 10, 1,
0.18, 0.36)
{
Body = 400;
Hue = 1;
// TODO: Sound values?
public override Mobile ConstantFocus => m_Target;
public override bool NoHouseRestrictions => true;
double scalar = caster.Skills[SkillName.SpiritSpeak].Value * 0.01;
public override double DispelDifficulty => 80.0;
public override double DispelFocus => 20.0;
m_Target = target;
m_ExpireTime = DateTime.UtcNow + duration;
public override string DefaultName => "a revenant";
SetStr(200);
SetDex(150);
SetInt(150);
public Revenant( Mobile caster, Mobile target, TimeSpan duration ) : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.18, 0.36 )
{
Body = 400;
Hue = 1;
// TODO: Sound values?
SetDamage(16, 17);
double scalar = caster.Skills[SkillName.SpiritSpeak].Value * 0.01;
// Bestiary says 50 phys 50 cold, animal lore says differently
SetDamageType(ResistanceType.Physical, 100);
m_Target = target;
m_ExpireTime = DateTime.UtcNow + duration;
SetSkill(SkillName.MagicResist, 100.0 * scalar); // magic resist is absolute value of spiritspeak
SetSkill(SkillName.Tactics, 100.0); // always 100
SetSkill(SkillName.Swords,
100.0 * scalar); // not displayed in animal lore but tests clearly show this is influenced
SetSkill(SkillName.DetectHidden, 75.0 * scalar);
SetStr( 200 );
SetDex( 150 );
SetInt( 150 );
scalar /= 1.2;
SetDamage( 16, 17 );
SetResistance(ResistanceType.Physical, 40 + (int)(20 * scalar), 50 + (int)(20 * scalar));
SetResistance(ResistanceType.Cold, 40 + (int)(20 * scalar), 50 + (int)(20 * scalar));
SetResistance(ResistanceType.Fire, (int)(20 * scalar));
SetResistance(ResistanceType.Poison, 100);
SetResistance(ResistanceType.Energy, 40 + (int)(20 * scalar), 50 + (int)(20 * scalar));
// Bestiary says 50 phys 50 cold, animal lore says differently
SetDamageType( ResistanceType.Physical, 100 );
Fame = 0;
Karma = 0;
SetSkill( SkillName.MagicResist, 100.0 * scalar ); // magic resist is absolute value of spiritspeak
SetSkill( SkillName.Tactics, 100.0 ); // always 100
SetSkill( SkillName.Swords, 100.0 * scalar ); // not displayed in animal lore but tests clearly show this is influenced
SetSkill( SkillName.DetectHidden, 75.0 * scalar );
ControlSlots = 3;
scalar /= 1.2;
VirtualArmor = 32;
SetResistance( ResistanceType.Physical, 40 + (int)(20 * scalar), 50 + (int)(20 * scalar) );
SetResistance( ResistanceType.Cold, 40 + (int)(20 * scalar), 50 + (int)(20 * scalar) );
SetResistance( ResistanceType.Fire, (int)(20 * scalar) );
SetResistance( ResistanceType.Poison, 100 );
SetResistance( ResistanceType.Energy, 40 + (int)(20 * scalar), 50 + (int)(20 * scalar) );
Item shroud = new DeathShroud();
Fame = 0;
Karma = 0;
shroud.Hue = 0x455;
ControlSlots = 3;
shroud.Movable = false;
VirtualArmor = 32;
AddItem(shroud);
Item shroud = new DeathShroud();
Halberd weapon = new Halberd();
shroud.Hue = 0x455;
weapon.Hue = 1;
weapon.Movable = false;
shroud.Movable = false;
AddItem(weapon);
}
AddItem( shroud );
public Revenant(Serial serial) : base(serial)
{
}
Halberd weapon = new Halberd();
public override Mobile ConstantFocus => m_Target;
public override bool NoHouseRestrictions => true;
weapon.Hue = 1;
weapon.Movable = false;
public override double DispelDifficulty => 80.0;
public override double DispelFocus => 20.0;
AddItem( weapon );
}
public override string DefaultName => "a revenant";
public override bool AlwaysMurderer => true;
public override bool AlwaysMurderer => true;
public override bool BleedImmune => true;
public override bool BardImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override bool BleedImmune => true;
public override bool BardImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override void OnThink()
{
if ( !m_Target.Alive || DateTime.UtcNow > m_ExpireTime )
{
Kill();
return;
}
public override void DisplayPaperdollTo(Mobile to)
{
// Do nothing
}
if ( Map != m_Target.Map || !InRange( m_Target, 15 ) )
{
Map fromMap = Map;
Point3D from = Location;
public override void OnThink()
{
if (!m_Target.Alive || DateTime.UtcNow > m_ExpireTime)
{
Kill();
return;
}
Map toMap = m_Target.Map;
Point3D to = m_Target.Location;
if (Map != m_Target.Map || !InRange(m_Target, 15))
{
Map fromMap = Map;
Point3D from = Location;
if ( toMap != null )
{
for ( int i = 0; i < 5; ++i )
{
Point3D loc = new Point3D( to.X - 4 + Utility.Random( 9 ), to.Y - 4 + Utility.Random( 9 ), to.Z );
Map toMap = m_Target.Map;
Point3D to = m_Target.Location;
if ( toMap.CanSpawnMobile( loc ) )
{
to = loc;
break;
}
if (toMap != null)
for (int i = 0; i < 5; ++i)
{
Point3D loc = new Point3D(to.X - 4 + Utility.Random(9), to.Y - 4 + Utility.Random(9), to.Z);
loc.Z = toMap.GetAverageZ( loc.X, loc.Y );
if (toMap.CanSpawnMobile(loc))
{
to = loc;
break;
}
if ( toMap.CanSpawnMobile( loc ) )
{
to = loc;
break;
}
}
}
loc.Z = toMap.GetAverageZ(loc.X, loc.Y);
Map = toMap;
Location = to;
if (toMap.CanSpawnMobile(loc))
{
to = loc;
break;
}
}
ProcessDelta();
Map = toMap;
Location = to;
Effects.SendLocationParticles( EffectItem.Create( from, fromMap, EffectItem.DefaultDuration ), 0x3728, 1, 13, 37, 7, 5023, 0 );
FixedParticles( 0x3728, 1, 13, 5023, 37, 7, EffectLayer.Waist );
ProcessDelta();
PlaySound( 0x37D );
}
Effects.SendLocationParticles(EffectItem.Create(from, fromMap, EffectItem.DefaultDuration), 0x3728, 1, 13,
37, 7, 5023, 0);
FixedParticles(0x3728, 1, 13, 5023, 37, 7, EffectLayer.Waist);
if (m_Target.Hidden && InRange(m_Target, 3) && Core.TickCount - NextSkillTime >= 0 && UseSkill(SkillName.DetectHidden))
{
Target targ = Target;
PlaySound(0x37D);
}
targ?.Invoke( this, this );
}
if (m_Target.Hidden && InRange(m_Target, 3) && Core.TickCount - NextSkillTime >= 0 &&
UseSkill(SkillName.DetectHidden))
{
Target targ = Target;
Combatant = m_Target;
FocusMob = m_Target;
targ?.Invoke(this, this);
}
if ( AIObject != null )
AIObject.Action = ActionType.Combat;
Combatant = m_Target;
FocusMob = m_Target;
base.OnThink();
}
if (AIObject != null)
AIObject.Action = ActionType.Combat;
public override bool OnBeforeDeath()
{
Effects.PlaySound( Location, Map, 0x10B );
Effects.SendLocationParticles( EffectItem.Create( Location, Map, TimeSpan.FromSeconds( 10.0 ) ), 0x37CC, 1, 50, 2101, 7, 9909, 0 );
base.OnThink();
}
Delete();
return false;
}
public override bool OnBeforeDeath()
{
Effects.PlaySound(Location, Map, 0x10B);
Effects.SendLocationParticles(EffectItem.Create(Location, Map, TimeSpan.FromSeconds(10.0)), 0x37CC, 1, 50, 2101,
7, 9909, 0);
public Revenant( Serial serial ) : base( serial )
{
}
Delete();
return false;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write( (int) 0 );
}
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
int version = reader.ReadInt();
Delete();
}
}
}
Delete();
}
}
}

View file

@ -3,186 +3,191 @@ using Server.Items;
namespace Server.Mobiles
{
public class ShadowKnight : BaseCreature
{
public override string CorpseName => "a shadow knight corpse";
public override WeaponAbility GetWeaponAbility() => Utility.RandomBool() ? WeaponAbility.ConcussionBlow : WeaponAbility.CrushingBlow;
public class ShadowKnight : BaseCreature
{
private bool m_HasTeleportedAway;
public override bool IgnoreYoungProtection => Core.ML;
private Timer m_SoundTimer;
[Constructible]
public ShadowKnight() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = NameList.RandomName( "shadow knight" );
Title = "the Shadow Knight";
Body = 311;
[Constructible]
public ShadowKnight() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Name = NameList.RandomName("shadow knight");
Title = "the Shadow Knight";
Body = 311;
SetStr( 250 );
SetDex( 100 );
SetInt( 100 );
SetStr(250);
SetDex(100);
SetInt(100);
SetHits( 2000 );
SetHits(2000);
SetDamage( 20, 30 );
SetDamage(20, 30);
SetDamageType( ResistanceType.Physical, 60 );
SetDamageType( ResistanceType.Cold, 40 );
SetDamageType(ResistanceType.Physical, 60);
SetDamageType(ResistanceType.Cold, 40);
SetResistance( ResistanceType.Physical, 90 );
SetResistance( ResistanceType.Fire, 65 );
SetResistance( ResistanceType.Cold, 75 );
SetResistance( ResistanceType.Poison, 75 );
SetResistance( ResistanceType.Energy, 55 );
SetResistance(ResistanceType.Physical, 90);
SetResistance(ResistanceType.Fire, 65);
SetResistance(ResistanceType.Cold, 75);
SetResistance(ResistanceType.Poison, 75);
SetResistance(ResistanceType.Energy, 55);
SetSkill( SkillName.Chivalry, 120.0 );
SetSkill( SkillName.DetectHidden, 80.0 );
SetSkill( SkillName.EvalInt, 100.0 );
SetSkill( SkillName.Magery, 100.0 );
SetSkill( SkillName.Meditation, 100.0 );
SetSkill( SkillName.MagicResist, 120.0 );
SetSkill( SkillName.Tactics, 100.0 );
SetSkill( SkillName.Wrestling, 100.0 );
SetSkill(SkillName.Chivalry, 120.0);
SetSkill(SkillName.DetectHidden, 80.0);
SetSkill(SkillName.EvalInt, 100.0);
SetSkill(SkillName.Magery, 100.0);
SetSkill(SkillName.Meditation, 100.0);
SetSkill(SkillName.MagicResist, 120.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 100.0);
Fame = 25000;
Karma = -25000;
Fame = 25000;
Karma = -25000;
VirtualArmor = 54;
}
VirtualArmor = 54;
}
public override void GenerateLoot()
{
AddLoot( LootPack.UltraRich, 2 );
}
public ShadowKnight(Serial serial) : base(serial)
{
}
public override OppositionGroup OppositionGroup => OppositionGroup.FeyAndUndead;
public override string CorpseName => "a shadow knight corpse";
public override void OnDeath( Container c )
{
base.OnDeath( c );
public override bool IgnoreYoungProtection => Core.ML;
if ( !Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance( this ) )
DemonKnight.DistributeArtifact( this );
}
public override OppositionGroup OppositionGroup => OppositionGroup.FeyAndUndead;
public override int GetIdleSound()
{
return 0x2CE;
}
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
public override int GetDeathSound()
{
return 0x2C1;
}
public override int TreasureMapLevel => 1;
public override int GetHurtSound()
{
return 0x2D1;
}
public override WeaponAbility GetWeaponAbility()
{
return Utility.RandomBool() ? WeaponAbility.ConcussionBlow : WeaponAbility.CrushingBlow;
}
public override int GetAttackSound()
{
return 0x2C8;
}
public override void GenerateLoot()
{
AddLoot(LootPack.UltraRich, 2);
}
private Timer m_SoundTimer;
private bool m_HasTeleportedAway;
public override void OnDeath(Container c)
{
base.OnDeath(c);
public override void OnCombatantChange()
{
base.OnCombatantChange();
if (!Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance(this))
DemonKnight.DistributeArtifact(this);
}
if ( Hidden && Combatant != null )
Combatant = null;
}
public override int GetIdleSound()
{
return 0x2CE;
}
public virtual void SendTrackingSound()
{
if ( Hidden )
{
Effects.PlaySound( Location, Map, 0x2C8 );
Combatant = null;
}
else
{
Frozen = false;
public override int GetDeathSound()
{
return 0x2C1;
}
m_SoundTimer?.Stop();
public override int GetHurtSound()
{
return 0x2D1;
}
m_SoundTimer = null;
}
}
public override int GetAttackSound()
{
return 0x2C8;
}
public override void OnThink()
{
if ( !m_HasTeleportedAway && Hits < (HitsMax / 2) )
{
Map map = Map;
public override void OnCombatantChange()
{
base.OnCombatantChange();
if ( map != null )
{
// try 10 times to find a teleport spot
for ( int i = 0; i < 10; ++i )
{
int x = X + (Utility.RandomMinMax( 5, 10 ) * (Utility.RandomBool() ? 1 : -1));
int y = Y + (Utility.RandomMinMax( 5, 10 ) * (Utility.RandomBool() ? 1 : -1));
int z = Z;
if (Hidden && Combatant != null)
Combatant = null;
}
if ( !map.CanFit( x, y, z, 16, false, false ) )
continue;
public virtual void SendTrackingSound()
{
if (Hidden)
{
Effects.PlaySound(Location, Map, 0x2C8);
Combatant = null;
}
else
{
Frozen = false;
Point3D from = Location;
Point3D to = new Point3D( x, y, z );
m_SoundTimer?.Stop();
if ( !InLOS( to ) )
continue;
m_SoundTimer = null;
}
}
Location = to;
ProcessDelta();
Hidden = true;
Combatant = null;
public override void OnThink()
{
if (!m_HasTeleportedAway && Hits < HitsMax / 2)
{
Map map = Map;
Effects.SendLocationParticles( EffectItem.Create( from, map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 2023 );
Effects.SendLocationParticles( EffectItem.Create( to, map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 5023 );
if (map != null)
for (int i = 0; i < 10; ++i)
{
int x = X + Utility.RandomMinMax(5, 10) * (Utility.RandomBool() ? 1 : -1);
int y = Y + Utility.RandomMinMax(5, 10) * (Utility.RandomBool() ? 1 : -1);
int z = Z;
Effects.PlaySound( to, map, 0x1FE );
if (!map.CanFit(x, y, z, 16, false, false))
continue;
m_HasTeleportedAway = true;
m_SoundTimer = Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), TimeSpan.FromSeconds( 2.5 ), SendTrackingSound );
Point3D from = Location;
Point3D to = new Point3D(x, y, z);
Frozen = true;
if (!InLOS(to))
continue;
break;
}
}
}
Location = to;
ProcessDelta();
Hidden = true;
Combatant = null;
base.OnThink();
}
Effects.SendLocationParticles(EffectItem.Create(from, map, EffectItem.DefaultDuration), 0x3728, 10,
10, 2023);
Effects.SendLocationParticles(EffectItem.Create(to, map, EffectItem.DefaultDuration), 0x3728, 10, 10,
5023);
public override bool BardImmune => !Core.SE;
public override bool Unprovokable => Core.SE;
public override bool AreaPeaceImmune => Core.SE;
public override Poison PoisonImmune => Poison.Lethal;
Effects.PlaySound(to, map, 0x1FE);
public override int TreasureMapLevel => 1;
m_HasTeleportedAway = true;
m_SoundTimer = Timer.DelayCall(TimeSpan.FromSeconds(5.0), TimeSpan.FromSeconds(2.5),
SendTrackingSound);
public ShadowKnight( Serial serial ) : base( serial )
{
}
Frozen = true;
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
break;
}
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
base.OnThink();
}
if ( BaseSoundID == 357 )
BaseSoundID = -1;
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (BaseSoundID == 357)
BaseSoundID = -1;
}
}
}

View file

@ -1,65 +1,65 @@
namespace Server.Mobiles
{
public class SkitteringHopper : BaseCreature
{
public override string CorpseName => "a skittering hopper corpse";
public override string DefaultName => "a skittering hopper";
public class SkitteringHopper : BaseCreature
{
[Constructible]
public SkitteringHopper() : base(AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4)
{
Body = 302;
BaseSoundID = 959;
[Constructible]
public SkitteringHopper() : base( AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Body = 302;
BaseSoundID = 959;
SetStr(41, 65);
SetDex(91, 115);
SetInt(26, 50);
SetStr( 41, 65 );
SetDex( 91, 115 );
SetInt( 26, 50 );
SetHits(31, 45);
SetHits( 31, 45 );
SetDamage(3, 5);
SetDamage( 3, 5 );
SetDamageType(ResistanceType.Physical, 100);
SetDamageType( ResistanceType.Physical, 100 );
SetResistance(ResistanceType.Physical, 5, 10);
SetResistance(ResistanceType.Cold, 10, 20);
SetResistance(ResistanceType.Energy, 5, 10);
SetResistance( ResistanceType.Physical, 5, 10 );
SetResistance( ResistanceType.Cold, 10, 20 );
SetResistance( ResistanceType.Energy, 5, 10 );
SetSkill(SkillName.MagicResist, 30.1, 45.0);
SetSkill(SkillName.Tactics, 45.1, 70.0);
SetSkill(SkillName.Wrestling, 40.1, 60.0);
SetSkill( SkillName.MagicResist, 30.1, 45.0 );
SetSkill( SkillName.Tactics, 45.1, 70.0 );
SetSkill( SkillName.Wrestling, 40.1, 60.0 );
Fame = 300;
Karma = 0;
Fame = 300;
Karma = 0;
Tamable = true;
ControlSlots = 1;
MinTameSkill = -12.9;
Tamable = true;
ControlSlots = 1;
MinTameSkill = -12.9;
VirtualArmor = 12;
}
VirtualArmor = 12;
}
public SkitteringHopper(Serial serial) : base(serial)
{
}
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
}
public override string CorpseName => "a skittering hopper corpse";
public override string DefaultName => "a skittering hopper";
public override int TreasureMapLevel => 1;
public override int TreasureMapLevel => 1;
public SkitteringHopper( Serial serial ) : base( serial )
{
}
public override void GenerateLoot()
{
AddLoot(LootPack.Meager);
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,85 +2,89 @@ using Server.Items;
namespace Server.Mobiles
{
public class Treefellow : BaseCreature
{
public override string CorpseName => "a treefellow corpse";
public override WeaponAbility GetWeaponAbility() => WeaponAbility.Dismount;
public class Treefellow : BaseCreature
{
[Constructible]
public Treefellow() : base(AIType.AI_Melee, FightMode.Evil, 10, 1, 0.2, 0.4)
{
Body = 301;
public override string DefaultName => "a treefellow";
SetStr(196, 220);
SetDex(31, 55);
SetInt(66, 90);
[Constructible]
public Treefellow() : base( AIType.AI_Melee, FightMode.Evil, 10, 1, 0.2, 0.4 )
{
Body = 301;
SetHits(118, 132);
SetStr( 196, 220 );
SetDex( 31, 55 );
SetInt( 66, 90 );
SetDamage(12, 16);
SetHits( 118, 132 );
SetDamageType(ResistanceType.Physical, 100);
SetDamage( 12, 16 );
SetResistance(ResistanceType.Physical, 20, 25);
SetResistance(ResistanceType.Cold, 50, 60);
SetResistance(ResistanceType.Poison, 30, 35);
SetResistance(ResistanceType.Energy, 20, 30);
SetDamageType( ResistanceType.Physical, 100 );
SetSkill(SkillName.MagicResist, 40.1, 55.0);
SetSkill(SkillName.Tactics, 65.1, 90.0);
SetSkill(SkillName.Wrestling, 65.1, 85.0);
SetResistance( ResistanceType.Physical, 20, 25 );
SetResistance( ResistanceType.Cold, 50, 60 );
SetResistance( ResistanceType.Poison, 30, 35 );
SetResistance( ResistanceType.Energy, 20, 30 );
Fame = 500;
Karma = 1500;
SetSkill( SkillName.MagicResist, 40.1, 55.0 );
SetSkill( SkillName.Tactics, 65.1, 90.0 );
SetSkill( SkillName.Wrestling, 65.1, 85.0 );
VirtualArmor = 24;
PackItem(new Log(Utility.RandomMinMax(23, 34)));
}
Fame = 500;
Karma = 1500;
public Treefellow(Serial serial) : base(serial)
{
}
VirtualArmor = 24;
PackItem( new Log( Utility.RandomMinMax( 23, 34 ) ) );
}
public override string CorpseName => "a treefellow corpse";
public override OppositionGroup OppositionGroup => OppositionGroup.FeyAndUndead;
public override string DefaultName => "a treefellow";
public override int GetIdleSound()
{
return 443;
}
public override OppositionGroup OppositionGroup => OppositionGroup.FeyAndUndead;
public override int GetDeathSound()
{
return 31;
}
public override bool BleedImmune => true;
public override int GetAttackSound()
{
return 672;
}
public override WeaponAbility GetWeaponAbility()
{
return WeaponAbility.Dismount;
}
public override bool BleedImmune => true;
public override int GetIdleSound()
{
return 443;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average );
}
public override int GetDeathSound()
{
return 31;
}
public Treefellow( Serial serial ) : base( serial )
{
}
public override int GetAttackSound()
{
return 672;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void GenerateLoot()
{
AddLoot(LootPack.Average);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
if ( BaseSoundID == 442 )
BaseSoundID = -1;
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (BaseSoundID == 442)
BaseSoundID = -1;
}
}
}

View file

@ -1,67 +1,67 @@
namespace Server.Mobiles
{
public class VampireBat : BaseCreature
{
public override string CorpseName => "a vampire bat corpse";
public override string DefaultName => "a vampire bat";
public class VampireBat : BaseCreature
{
[Constructible]
public VampireBat() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 317;
BaseSoundID = 0x270;
[Constructible]
public VampireBat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 317;
BaseSoundID = 0x270;
SetStr(91, 110);
SetDex(91, 115);
SetInt(26, 50);
SetStr( 91, 110 );
SetDex( 91, 115 );
SetInt( 26, 50 );
SetHits(55, 66);
SetHits( 55, 66 );
SetDamage(7, 9);
SetDamage( 7, 9 );
SetDamageType(ResistanceType.Physical, 80);
SetDamageType(ResistanceType.Poison, 20);
SetDamageType( ResistanceType.Physical, 80 );
SetDamageType( ResistanceType.Poison, 20 );
SetResistance(ResistanceType.Physical, 35, 45);
SetResistance(ResistanceType.Fire, 15, 25);
SetResistance(ResistanceType.Cold, 15, 25);
SetResistance(ResistanceType.Poison, 60, 70);
SetResistance(ResistanceType.Energy, 40, 50);
SetResistance( ResistanceType.Physical, 35, 45 );
SetResistance( ResistanceType.Fire, 15, 25 );
SetResistance( ResistanceType.Cold, 15, 25 );
SetResistance( ResistanceType.Poison, 60, 70 );
SetResistance( ResistanceType.Energy, 40, 50 );
SetSkill(SkillName.MagicResist, 70.1, 95.0);
SetSkill(SkillName.Tactics, 55.1, 80.0);
SetSkill(SkillName.Wrestling, 30.1, 55.0);
SetSkill( SkillName.MagicResist, 70.1, 95.0 );
SetSkill( SkillName.Tactics, 55.1, 80.0 );
SetSkill( SkillName.Wrestling, 30.1, 55.0 );
Fame = 1000;
Karma = -1000;
Fame = 1000;
Karma = -1000;
VirtualArmor = 14;
}
VirtualArmor = 14;
}
public VampireBat(Serial serial) : base(serial)
{
}
public override void GenerateLoot()
{
AddLoot( LootPack.Poor );
}
public override string CorpseName => "a vampire bat corpse";
public override string DefaultName => "a vampire bat";
public override int GetIdleSound()
{
return 0x29B;
}
public override void GenerateLoot()
{
AddLoot(LootPack.Poor);
}
public VampireBat( Serial serial ) : base( serial )
{
}
public override int GetIdleSound()
{
return 0x29B;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,68 +2,72 @@ using Server.Items;
namespace Server.Mobiles
{
public class WailingBanshee : BaseCreature
{
public override string CorpseName => "a wailing banshee corpse";
public override WeaponAbility GetWeaponAbility() => WeaponAbility.MortalStrike;
public class WailingBanshee : BaseCreature
{
[Constructible]
public WailingBanshee() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 310;
BaseSoundID = 0x482;
public override string DefaultName => "a wailing banshee";
SetStr(126, 150);
SetDex(76, 100);
SetInt(86, 110);
[Constructible]
public WailingBanshee() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 310;
BaseSoundID = 0x482;
SetHits(76, 90);
SetStr( 126, 150 );
SetDex( 76, 100 );
SetInt( 86, 110 );
SetDamage(10, 14);
SetHits( 76, 90 );
SetDamageType(ResistanceType.Physical, 20);
SetDamageType(ResistanceType.Cold, 60);
SetDamageType(ResistanceType.Poison, 20);
SetDamage( 10, 14 );
SetResistance(ResistanceType.Physical, 50, 60);
SetResistance(ResistanceType.Fire, 25, 30);
SetResistance(ResistanceType.Cold, 70, 80);
SetResistance(ResistanceType.Poison, 30, 40);
SetResistance(ResistanceType.Energy, 40, 50);
SetDamageType( ResistanceType.Physical, 20 );
SetDamageType( ResistanceType.Cold, 60 );
SetDamageType( ResistanceType.Poison, 20 );
SetSkill(SkillName.MagicResist, 70.1, 95.0);
SetSkill(SkillName.Tactics, 45.1, 70.0);
SetSkill(SkillName.Wrestling, 50.1, 70.0);
SetResistance( ResistanceType.Physical, 50, 60 );
SetResistance( ResistanceType.Fire, 25, 30 );
SetResistance( ResistanceType.Cold, 70, 80 );
SetResistance( ResistanceType.Poison, 30, 40 );
SetResistance( ResistanceType.Energy, 40, 50 );
Fame = 1500;
Karma = -1500;
SetSkill( SkillName.MagicResist, 70.1, 95.0 );
SetSkill( SkillName.Tactics, 45.1, 70.0 );
SetSkill( SkillName.Wrestling, 50.1, 70.0 );
VirtualArmor = 19;
}
Fame = 1500;
Karma = -1500;
public WailingBanshee(Serial serial) : base(serial)
{
}
VirtualArmor = 19;
}
public override string CorpseName => "a wailing banshee corpse";
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
}
public override string DefaultName => "a wailing banshee";
public override bool BleedImmune => true;
public override bool BleedImmune => true;
public WailingBanshee( Serial serial ) : base( serial )
{
}
public override WeaponAbility GetWeaponAbility()
{
return WeaponAbility.MortalStrike;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void GenerateLoot()
{
AddLoot(LootPack.Meager);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -2,76 +2,76 @@ using Server.Items;
namespace Server.Mobiles
{
public class WandererOfTheVoid : BaseCreature
{
public override string CorpseName => "a wanderer of the void corpse";
public override string DefaultName => "a wanderer of the void";
public class WandererOfTheVoid : BaseCreature
{
[Constructible]
public WandererOfTheVoid() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 316;
BaseSoundID = 377;
[Constructible]
public WandererOfTheVoid() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 316;
BaseSoundID = 377;
SetStr(111, 200);
SetDex(101, 125);
SetInt(301, 390);
SetStr( 111, 200 );
SetDex( 101, 125 );
SetInt( 301, 390 );
SetHits(351, 400);
SetHits( 351, 400 );
SetDamage(11, 13);
SetDamage( 11, 13 );
SetDamageType(ResistanceType.Physical, 0);
SetDamageType(ResistanceType.Cold, 15);
SetDamageType(ResistanceType.Energy, 85);
SetDamageType( ResistanceType.Physical, 0 );
SetDamageType( ResistanceType.Cold, 15 );
SetDamageType( ResistanceType.Energy, 85 );
SetResistance(ResistanceType.Physical, 40, 50);
SetResistance(ResistanceType.Fire, 15, 25);
SetResistance(ResistanceType.Cold, 40, 50);
SetResistance(ResistanceType.Poison, 50, 75);
SetResistance(ResistanceType.Energy, 40, 50);
SetResistance( ResistanceType.Physical, 40, 50 );
SetResistance( ResistanceType.Fire, 15, 25 );
SetResistance( ResistanceType.Cold, 40, 50 );
SetResistance( ResistanceType.Poison, 50, 75 );
SetResistance( ResistanceType.Energy, 40, 50 );
SetSkill(SkillName.EvalInt, 60.1, 70.0);
SetSkill(SkillName.Magery, 60.1, 70.0);
SetSkill(SkillName.Meditation, 60.1, 70.0);
SetSkill(SkillName.MagicResist, 50.1, 75.0);
SetSkill(SkillName.Tactics, 60.1, 70.0);
SetSkill(SkillName.Wrestling, 60.1, 70.0);
SetSkill( SkillName.EvalInt, 60.1, 70.0 );
SetSkill( SkillName.Magery, 60.1, 70.0 );
SetSkill( SkillName.Meditation, 60.1, 70.0 );
SetSkill( SkillName.MagicResist, 50.1, 75.0 );
SetSkill( SkillName.Tactics, 60.1, 70.0 );
SetSkill( SkillName.Wrestling, 60.1, 70.0 );
Fame = 20000;
Karma = -20000;
Fame = 20000;
Karma = -20000;
VirtualArmor = 44;
VirtualArmor = 44;
int count = Utility.RandomMinMax(2, 3);
int count = Utility.RandomMinMax( 2, 3 );
for (int i = 0; i < count; ++i)
PackItem(new TreasureMap(3, Map.Trammel));
}
for ( int i = 0; i < count; ++i )
PackItem( new TreasureMap( 3, Map.Trammel ) );
}
public WandererOfTheVoid(Serial serial) : base(serial)
{
}
public override bool BleedImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => Core.AOS ? 4 : 1;
public override string CorpseName => "a wanderer of the void corpse";
public override string DefaultName => "a wanderer of the void";
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich );
}
public override bool BleedImmune => true;
public override Poison PoisonImmune => Poison.Lethal;
public override int TreasureMapLevel => Core.AOS ? 4 : 1;
public WandererOfTheVoid( Serial serial ) : base( serial )
{
}
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich);
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}