Ok, examples...
So... you want dragons in your shard to do five firebreaths at once ocasionally.
That is the distro code for a Dragon.
This is after configuring it for multiple firebreathing.
What does each thing mean?
public override bool DoesMultiFirebreathing { get { return true; } }
This will enable the multiple firebreathing ability.
public override double MultiFirebreathingChance { get { return 0.4; } }
This will set a chance of 40% to use multiple firebreaths (if the chance is not hit, then the normal firebreathing style will be used).
public override int BreathDamagePercent { get { return 80; } }
This basically works as a scalar. The more you reduce it, the less damage a firebreath does, I added this considering that multiple firebreaths will be thougher
public override int BreathMaxTargets { get { return 5; } }
This will determine how many targets we will hit with our multiple firebreath
public override int BreathMaxRange { get { return 5; } }
This will determine the max tile range to check for hitting with firebreaths.
//public override bool HasBreath{ get{ return true; } } // fire breath enabled
Actually you could just leave this on, but I wanted to add that if you don't have it, it will work anyways, because baseclass defaults HasBreath to 'DoesMultiFirebreathing'.
Note that firebreaths won't hit a single target twice.
This was a old script that was given to me i don't take credit for this..
So... you want dragons in your shard to do five firebreaths at once ocasionally.
Code:
Code (text):
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a dragon corpse" )]
public class Dragon : BaseCreature
{
[Constructable]
public Dragon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a dragon";
Body = Utility.RandomList( 12, 59 );
BaseSoundID = 362;
SetStr( 796, 825 );
SetDex( 86, 105 );
SetInt( 436, 475 );
SetHits( 478, 495 );
SetDamage( 16, 22 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 55, 65 );
SetResistance( ResistanceType.Fire, 60, 70 );
SetResistance( ResistanceType.Cold, 30, 40 );
SetResistance( ResistanceType.Poison, 25, 35 );
SetResistance( ResistanceType.Energy, 35, 45 );
SetSkill( SkillName.EvalInt, 30.1, 40.0 );
SetSkill( SkillName.Magery, 30.1, 40.0 );
SetSkill( SkillName.MagicResist, 99.1, 100.0 );
SetSkill( SkillName.Tactics, 97.6, 100.0 );
SetSkill( SkillName.Wrestling, 90.1, 92.5 );
Fame = 15000;
Karma = -15000;
VirtualArmor = 60;
Tamable = true;
ControlSlots = 3;
MinTameSkill = 93.9;
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 2 );
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 4; } }
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 Dragon( 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();
}
}
}
Code:
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a dragon corpse" )]
public class Dragon : [color=green]BaseSpecialCreature[/color]
{[color=green]
public override bool DoesMultiFirebreathing { get { return true; } }
public override double MultiFirebreathingChance { get { return 0.4; } }
public override int BreathDamagePercent { get { return 80; } }
public override int BreathMaxTargets { get { return 5; } }
public override int BreathMaxRange { get { return 5; } }
[/color]
[Constructable]
public Dragon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a dragon";
Body = Utility.RandomList( 12, 59 );
BaseSoundID = 362;
SetStr( 796, 825 );
SetDex( 86, 105 );
SetInt( 436, 475 );
SetHits( 478, 495 );
SetDamage( 16, 22 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 55, 65 );
SetResistance( ResistanceType.Fire, 60, 70 );
SetResistance( ResistanceType.Cold, 30, 40 );
SetResistance( ResistanceType.Poison, 25, 35 );
SetResistance( ResistanceType.Energy, 35, 45 );
SetSkill( SkillName.EvalInt, 30.1, 40.0 );
SetSkill( SkillName.Magery, 30.1, 40.0 );
SetSkill( SkillName.MagicResist, 99.1, 100.0 );
SetSkill( SkillName.Tactics, 97.6, 100.0 );
SetSkill( SkillName.Wrestling, 90.1, 92.5 );
Fame = 15000;
Karma = -15000;
VirtualArmor = 60;
Tamable = true;
ControlSlots = 3;
MinTameSkill = 93.9;
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 2 );
AddLoot( LootPack.Gems, 8 );
}
public override bool ReacquireOnMovement{ get{ return !Controlled; } }
[color=green]//[/color]public override bool HasBreath{ get{ return true; } } // fire breath enabled
public override bool AutoDispel{ get{ return !Controlled; } }
public override int TreasureMapLevel{ get{ return 4; } }
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 Dragon( 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();
}
}
}
What does each thing mean?
Code:
public class Dragon : [color=green]BaseSpecialCreature[/color]
This will allow you to use the special abilities I've developed, and packed them into a single class, you will still be able to use BaseCreature (90% of NPC Mobiles inherit from this class) as normal, because BaseSpecialCreature inherits from it.
public override bool DoesMultiFirebreathing { get { return true; } }
This will enable the multiple firebreathing ability.
public override double MultiFirebreathingChance { get { return 0.4; } }
This will set a chance of 40% to use multiple firebreaths (if the chance is not hit, then the normal firebreathing style will be used).
public override int BreathDamagePercent { get { return 80; } }
This basically works as a scalar. The more you reduce it, the less damage a firebreath does, I added this considering that multiple firebreaths will be thougher
public override int BreathMaxTargets { get { return 5; } }
This will determine how many targets we will hit with our multiple firebreath
public override int BreathMaxRange { get { return 5; } }
This will determine the max tile range to check for hitting with firebreaths.
//public override bool HasBreath{ get{ return true; } } // fire breath enabled
Actually you could just leave this on, but I wanted to add that if you don't have it, it will work anyways, because baseclass defaults HasBreath to 'DoesMultiFirebreathing'.
Note that firebreaths won't hit a single target twice.
This was a old script that was given to me i don't take credit for this..