This commit is contained in:
commit
47711d616e
2644 changed files with 479454 additions and 0 deletions
69
Scripts/Mobiles/Animals/Bears/BlackBear.cs
Normal file
69
Scripts/Mobiles/Animals/Bears/BlackBear.cs
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a bear corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Bear" )]
|
||||
public class BlackBear : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public BlackBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a black bear";
|
||||
Body = 211;
|
||||
BaseSoundID = 0xA3;
|
||||
|
||||
SetStr( 76, 100 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 11, 14 );
|
||||
|
||||
SetHits( 46, 60 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4, 10 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Cold, 10, 15 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 20.1, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 40.1, 60.0 );
|
||||
SetSkill( SkillName.Wrestling, 40.1, 60.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 24;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 35.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.Meat | FoodType.FruitsAndVegies; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Bear; } }
|
||||
|
||||
public BlackBear( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
68
Scripts/Mobiles/Animals/Bears/BrownBear.cs
Normal file
68
Scripts/Mobiles/Animals/Bears/BrownBear.cs
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a bear corpse" )]
|
||||
public class BrownBear : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public BrownBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a brown bear";
|
||||
Body = 167;
|
||||
BaseSoundID = 0xA3;
|
||||
|
||||
SetStr( 76, 100 );
|
||||
SetDex( 26, 45 );
|
||||
SetInt( 23, 47 );
|
||||
|
||||
SetHits( 46, 60 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 6, 12 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 30 );
|
||||
SetResistance( ResistanceType.Cold, 15, 20 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 35.0 );
|
||||
SetSkill( SkillName.Tactics, 40.1, 60.0 );
|
||||
SetSkill( SkillName.Wrestling, 40.1, 60.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 24;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 41.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.FruitsAndVegies | FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Bear; } }
|
||||
|
||||
public BrownBear( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
70
Scripts/Mobiles/Animals/Bears/GrizzlyBear.cs
Normal file
70
Scripts/Mobiles/Animals/Bears/GrizzlyBear.cs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a grizzly bear corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Grizzlybear" )]
|
||||
public class GrizzlyBear : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public GrizzlyBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a grizzly bear";
|
||||
Body = 212;
|
||||
BaseSoundID = 0xA3;
|
||||
|
||||
SetStr( 126, 155 );
|
||||
SetDex( 81, 105 );
|
||||
SetInt( 16, 40 );
|
||||
|
||||
SetHits( 76, 93 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 8, 13 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 25, 35 );
|
||||
SetResistance( ResistanceType.Cold, 15, 25 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
SetResistance( ResistanceType.Energy, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 70.1, 100.0 );
|
||||
SetSkill( SkillName.Wrestling, 45.1, 70.0 );
|
||||
|
||||
Fame = 1000;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 24;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 59.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 2; } }
|
||||
public override int Hides{ get{ return 16; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.FruitsAndVegies | FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Bear; } }
|
||||
|
||||
public GrizzlyBear( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
70
Scripts/Mobiles/Animals/Bears/PolarBear.cs
Normal file
70
Scripts/Mobiles/Animals/Bears/PolarBear.cs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a polar bear corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Polarbear" )]
|
||||
public class PolarBear : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public PolarBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a polar bear";
|
||||
Body = 213;
|
||||
BaseSoundID = 0xA3;
|
||||
|
||||
SetStr( 116, 140 );
|
||||
SetDex( 81, 105 );
|
||||
SetInt( 26, 50 );
|
||||
|
||||
SetHits( 70, 84 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 7, 12 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 25, 35 );
|
||||
SetResistance( ResistanceType.Cold, 60, 80 );
|
||||
SetResistance( ResistanceType.Poison, 15, 25 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 45.1, 60.0 );
|
||||
SetSkill( SkillName.Tactics, 60.1, 90.0 );
|
||||
SetSkill( SkillName.Wrestling, 45.1, 70.0 );
|
||||
|
||||
Fame = 1500;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 18;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 35.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 2; } }
|
||||
public override int Hides{ get{ return 16; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.FruitsAndVegies | FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Bear; } }
|
||||
|
||||
public PolarBear( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
67
Scripts/Mobiles/Animals/Birds/Chicken.cs
Normal file
67
Scripts/Mobiles/Animals/Birds/Chicken.cs
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a chicken corpse" )]
|
||||
public class Chicken : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Chicken() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a chicken";
|
||||
Body = 0xD0;
|
||||
BaseSoundID = 0x6E;
|
||||
|
||||
SetStr( 5 );
|
||||
SetDex( 15 );
|
||||
SetInt( 5 );
|
||||
|
||||
SetHits( 3 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 1, 5 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 4.0 );
|
||||
SetSkill( SkillName.Tactics, 5.0 );
|
||||
SetSkill( SkillName.Wrestling, 5.0 );
|
||||
|
||||
Fame = 150;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 2;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -0.9;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override MeatType MeatType{ get{ return MeatType.Bird; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.GrainsAndHay; } }
|
||||
|
||||
public override int Feathers{ get{ return 25; } }
|
||||
|
||||
public Chicken(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
86
Scripts/Mobiles/Animals/Birds/Crane.cs
Normal file
86
Scripts/Mobiles/Animals/Birds/Crane.cs
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a crane corpse" )]
|
||||
public class Crane : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Crane() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a crane";
|
||||
Body = 254;
|
||||
BaseSoundID = 0x4D7;
|
||||
|
||||
SetStr( 26, 35 );
|
||||
SetDex( 16, 25 );
|
||||
SetInt( 11, 15 );
|
||||
|
||||
SetHits( 26, 35 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 1 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 5 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 4.1, 5.0 );
|
||||
SetSkill( SkillName.Tactics, 10.1, 11.0 );
|
||||
SetSkill( SkillName.Wrestling, 10.1, 11.0 );
|
||||
|
||||
Fame = 0;
|
||||
Karma = 200;
|
||||
|
||||
VirtualArmor = 5;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Feathers{ get{ return 25; } }
|
||||
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x4D9;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x4D8;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x4D7;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x4DA;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x4D6;
|
||||
}
|
||||
|
||||
public Crane(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Scripts/Mobiles/Animals/Birds/Eagle.cs
Normal file
71
Scripts/Mobiles/Animals/Birds/Eagle.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "an eagle corpse" )]
|
||||
public class Eagle : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Eagle() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "an eagle";
|
||||
Body = 5;
|
||||
BaseSoundID = 0x2EE;
|
||||
|
||||
SetStr( 31, 47 );
|
||||
SetDex( 36, 60 );
|
||||
SetInt( 8, 20 );
|
||||
|
||||
SetHits( 20, 27 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 10 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 10, 15 );
|
||||
SetResistance( ResistanceType.Cold, 20, 25 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
SetResistance( ResistanceType.Energy, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.3, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 18.1, 37.0 );
|
||||
SetSkill( SkillName.Wrestling, 20.1, 30.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 22;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 17.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override MeatType MeatType{ get{ return MeatType.Bird; } }
|
||||
public override int Feathers{ get{ return 36; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Fish; } }
|
||||
|
||||
public Eagle(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
73
Scripts/Mobiles/Animals/Birds/Phoenix.cs
Normal file
73
Scripts/Mobiles/Animals/Birds/Phoenix.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a phoenix corpse" )]
|
||||
public class Phoenix : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Phoenix() : base( AIType.AI_Mage, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a phoenix";
|
||||
Body = 5;
|
||||
Hue = 0x674;
|
||||
BaseSoundID = 0x8F;
|
||||
|
||||
SetStr( 504, 700 );
|
||||
SetDex( 202, 300 );
|
||||
SetInt( 504, 700 );
|
||||
|
||||
SetHits( 340, 383 );
|
||||
|
||||
SetDamage( 25 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 50 );
|
||||
SetDamageType( ResistanceType.Fire, 50 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 45, 55 );
|
||||
SetResistance( ResistanceType.Fire, 60, 70 );
|
||||
SetResistance( ResistanceType.Poison, 25, 35 );
|
||||
SetResistance( ResistanceType.Energy, 40, 50 );
|
||||
|
||||
SetSkill( SkillName.EvalInt, 90.2, 100.0 );
|
||||
SetSkill( SkillName.Magery, 90.2, 100.0 );
|
||||
SetSkill( SkillName.Meditation, 75.1, 100.0 );
|
||||
SetSkill( SkillName.MagicResist, 86.0, 135.0 );
|
||||
SetSkill( SkillName.Tactics, 80.1, 90.0 );
|
||||
SetSkill( SkillName.Wrestling, 90.1, 100.0 );
|
||||
|
||||
Fame = 15000;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 60;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.FilthyRich );
|
||||
AddLoot( LootPack.Rich );
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override MeatType MeatType{ get{ return MeatType.Bird; } }
|
||||
public override int Feathers{ get{ return 36; } }
|
||||
|
||||
public Phoenix( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
72
Scripts/Mobiles/Animals/Canines/DireWolf.cs
Normal file
72
Scripts/Mobiles/Animals/Canines/DireWolf.cs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a dire wolf corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Direwolf" )]
|
||||
public class DireWolf : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public DireWolf() : base( AIType.AI_Melee,FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a dire wolf";
|
||||
Body = 23;
|
||||
BaseSoundID = 0xE5;
|
||||
|
||||
SetStr( 96, 120 );
|
||||
SetDex( 81, 105 );
|
||||
SetInt( 36, 60 );
|
||||
|
||||
SetHits( 58, 72 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 11, 17 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 10, 20 );
|
||||
SetResistance( ResistanceType.Cold, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 57.6, 75.0 );
|
||||
SetSkill( SkillName.Tactics, 50.1, 70.0 );
|
||||
SetSkill( SkillName.Wrestling, 60.1, 80.0 );
|
||||
|
||||
Fame = 2500;
|
||||
Karma = -2500;
|
||||
|
||||
VirtualArmor = 22;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 83.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 7; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Canine; } }
|
||||
|
||||
public DireWolf(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Scripts/Mobiles/Animals/Canines/GreyWolf.cs
Normal file
71
Scripts/Mobiles/Animals/Canines/GreyWolf.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a grey wolf corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Greywolf" )]
|
||||
public class GreyWolf : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public GreyWolf() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a grey wolf";
|
||||
Body = Utility.RandomList( 25, 27 );
|
||||
BaseSoundID = 0xE5;
|
||||
|
||||
SetStr( 56, 80 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 31, 55 );
|
||||
|
||||
SetHits( 34, 48 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 7 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
SetResistance( ResistanceType.Fire, 10, 15 );
|
||||
SetResistance( ResistanceType.Cold, 20, 25 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 20.1, 35.0 );
|
||||
SetSkill( SkillName.Tactics, 45.1, 60.0 );
|
||||
SetSkill( SkillName.Wrestling, 45.1, 60.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 16;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 53.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 6; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Canine; } }
|
||||
|
||||
public GreyWolf(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Scripts/Mobiles/Animals/Canines/TimberWolf.cs
Normal file
71
Scripts/Mobiles/Animals/Canines/TimberWolf.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a timber wolf corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Timberwolf" )]
|
||||
public class TimberWolf : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public TimberWolf() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a timber wolf";
|
||||
Body = 225;
|
||||
BaseSoundID = 0xE5;
|
||||
|
||||
SetStr( 56, 80 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 11, 25 );
|
||||
|
||||
SetHits( 34, 48 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 9 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 10, 15 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
SetResistance( ResistanceType.Energy, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 27.6, 45.0 );
|
||||
SetSkill( SkillName.Tactics, 30.1, 50.0 );
|
||||
SetSkill( SkillName.Wrestling, 40.1, 60.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 16;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 23.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 5; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Canine; } }
|
||||
|
||||
public TimberWolf(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Scripts/Mobiles/Animals/Canines/WhiteWolf.cs
Normal file
71
Scripts/Mobiles/Animals/Canines/WhiteWolf.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a white wolf corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Whitewolf" )]
|
||||
public class WhiteWolf : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public WhiteWolf() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a white wolf";
|
||||
Body = Utility.RandomList( 34, 37 );
|
||||
BaseSoundID = 0xE5;
|
||||
|
||||
SetStr( 56, 80 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 31, 55 );
|
||||
|
||||
SetHits( 34, 48 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 7 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
SetResistance( ResistanceType.Fire, 10, 15 );
|
||||
SetResistance( ResistanceType.Cold, 20, 25 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 20.1, 35.0 );
|
||||
SetSkill( SkillName.Tactics, 45.1, 60.0 );
|
||||
SetSkill( SkillName.Wrestling, 45.1, 60.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 16;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 65.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 6; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Canine; } }
|
||||
|
||||
public WhiteWolf( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
70
Scripts/Mobiles/Animals/Cows/Bull.cs
Normal file
70
Scripts/Mobiles/Animals/Cows/Bull.cs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a bull corpse" )]
|
||||
public class Bull : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Bull() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a bull";
|
||||
Body = Utility.RandomList( 0xE8, 0xE9 );
|
||||
BaseSoundID = 0x64;
|
||||
|
||||
if ( 0.5 >= Utility.RandomDouble() )
|
||||
Hue = 0x901;
|
||||
|
||||
SetStr( 77, 111 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 47, 75 );
|
||||
|
||||
SetHits( 50, 64 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4, 9 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 25, 30 );
|
||||
SetResistance( ResistanceType.Cold, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 17.6, 25.0 );
|
||||
SetSkill( SkillName.Tactics, 67.6, 85.0 );
|
||||
SetSkill( SkillName.Wrestling, 40.1, 57.5 );
|
||||
|
||||
Fame = 600;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 28;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 71.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 10; } }
|
||||
public override int Hides{ get{ return 15; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.GrainsAndHay; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Bull; } }
|
||||
|
||||
public Bull(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
90
Scripts/Mobiles/Animals/Cows/Cow.cs
Normal file
90
Scripts/Mobiles/Animals/Cows/Cow.cs
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a cow corpse" )]
|
||||
public class Cow : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Cow() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a cow";
|
||||
Body = Utility.RandomList( 0xD8, 0xE7 );
|
||||
BaseSoundID = 0x78;
|
||||
|
||||
SetStr( 30 );
|
||||
SetDex( 15 );
|
||||
SetInt( 5 );
|
||||
|
||||
SetHits( 18 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 4 );
|
||||
|
||||
SetDamage( 1, 4 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 5.5 );
|
||||
SetSkill( SkillName.Tactics, 5.5 );
|
||||
SetSkill( SkillName.Wrestling, 5.5 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 10;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 11.1;
|
||||
|
||||
if ( Core.AOS && Utility.Random( 1000 ) == 0 ) // 0.1% chance to have mad cows
|
||||
FightMode = FightMode.Closest;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 8; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
base.OnDoubleClick( from );
|
||||
|
||||
int random = Utility.Random( 100 );
|
||||
|
||||
if ( random < 5 )
|
||||
Tip();
|
||||
else if ( random < 20 )
|
||||
PlaySound( 120 );
|
||||
else if ( random < 40 )
|
||||
PlaySound( 121 );
|
||||
}
|
||||
|
||||
public void Tip()
|
||||
{
|
||||
PlaySound( 121 );
|
||||
Animate( 8, 0, 3, true, false, 0 );
|
||||
}
|
||||
|
||||
public Cow(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
69
Scripts/Mobiles/Animals/Felines/Cougar.cs
Normal file
69
Scripts/Mobiles/Animals/Felines/Cougar.cs
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a cougar corpse" )]
|
||||
public class Cougar : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Cougar() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a cougar";
|
||||
Body = 63;
|
||||
BaseSoundID = 0x73;
|
||||
|
||||
SetStr( 56, 80 );
|
||||
SetDex( 66, 85 );
|
||||
SetInt( 26, 50 );
|
||||
|
||||
SetHits( 34, 48 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4, 10 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 10, 15 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 45.1, 60.0 );
|
||||
SetSkill( SkillName.Wrestling, 45.1, 60.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 16;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 41.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Feline; } }
|
||||
|
||||
public Cougar(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
77
Scripts/Mobiles/Animals/Felines/HellCat.cs
Normal file
77
Scripts/Mobiles/Animals/Felines/HellCat.cs
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a hell cat corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Hellcat" )]
|
||||
public class HellCat : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public HellCat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a hell cat";
|
||||
Body = 0xC9;
|
||||
Hue = Utility.RandomList( 0x647, 0x650, 0x659, 0x662, 0x66B, 0x674);
|
||||
BaseSoundID = 0x69;
|
||||
|
||||
SetStr( 51, 100 );
|
||||
SetDex( 52, 150 );
|
||||
SetInt( 13, 85 );
|
||||
|
||||
SetHits( 48, 67 );
|
||||
|
||||
SetDamage( 6, 12 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 40 );
|
||||
SetDamageType( ResistanceType.Fire, 60 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 25, 35 );
|
||||
SetResistance( ResistanceType.Fire, 80, 90 );
|
||||
SetResistance( ResistanceType.Energy, 15, 20 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 45.1, 60.0 );
|
||||
SetSkill( SkillName.Tactics, 40.1, 55.0 );
|
||||
SetSkill( SkillName.Wrestling, 30.1, 40.0 );
|
||||
|
||||
Fame = 1000;
|
||||
Karma = -1000;
|
||||
|
||||
VirtualArmor = 30;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 71.1;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Meager );
|
||||
}
|
||||
|
||||
public override bool HasBreath{ get{ return true; } } // fire breath enabled
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Feline; } }
|
||||
|
||||
public HellCat(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
70
Scripts/Mobiles/Animals/Felines/Panther.cs
Normal file
70
Scripts/Mobiles/Animals/Felines/Panther.cs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a panther corpse" )]
|
||||
public class Panther : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Panther() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a panther";
|
||||
Body = 0xD6;
|
||||
Hue = 0x901;
|
||||
BaseSoundID = 0x462;
|
||||
|
||||
SetStr( 61, 85 );
|
||||
SetDex( 86, 105 );
|
||||
SetInt( 26, 50 );
|
||||
|
||||
SetHits( 37, 51 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4, 12 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 10, 15 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 50.1, 65.0 );
|
||||
SetSkill( SkillName.Wrestling, 50.1, 65.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 16;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 53.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Fish; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Feline; } }
|
||||
|
||||
public Panther(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
75
Scripts/Mobiles/Animals/Felines/PredatorHellCat.cs
Normal file
75
Scripts/Mobiles/Animals/Felines/PredatorHellCat.cs
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a hell cat corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Preditorhellcat" )]
|
||||
public class PredatorHellCat : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public PredatorHellCat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a hell cat";
|
||||
Body = 127;
|
||||
BaseSoundID = 0xBA;
|
||||
|
||||
SetStr( 161, 185 );
|
||||
SetDex( 96, 115 );
|
||||
SetInt( 76, 100 );
|
||||
|
||||
SetHits( 97, 131 );
|
||||
|
||||
SetDamage( 5, 17 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 75 );
|
||||
SetDamageType( ResistanceType.Fire, 25 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 25, 35 );
|
||||
SetResistance( ResistanceType.Fire, 30, 40 );
|
||||
SetResistance( ResistanceType.Energy, 5, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 75.1, 90.0 );
|
||||
SetSkill( SkillName.Tactics, 50.1, 65.0 );
|
||||
SetSkill( SkillName.Wrestling, 50.1, 65.0 );
|
||||
|
||||
Fame = 2500;
|
||||
Karma = -2500;
|
||||
|
||||
VirtualArmor = 30;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 89.1;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Average );
|
||||
}
|
||||
|
||||
public override bool HasBreath{ get{ return true; } } // fire breath enabled
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Feline; } }
|
||||
|
||||
public PredatorHellCat(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Scripts/Mobiles/Animals/Felines/SnowLeopard.cs
Normal file
71
Scripts/Mobiles/Animals/Felines/SnowLeopard.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a leopard corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Snowleopard" )]
|
||||
public class SnowLeopard : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public SnowLeopard() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a snow leopard";
|
||||
Body = Utility.RandomList( 64, 65 );
|
||||
BaseSoundID = 0x73;
|
||||
|
||||
SetStr( 56, 80 );
|
||||
SetDex( 66, 85 );
|
||||
SetInt( 26, 50 );
|
||||
|
||||
SetHits( 34, 48 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 9 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 30, 40 );
|
||||
SetResistance( ResistanceType.Poison, 10, 20 );
|
||||
SetResistance( ResistanceType.Energy, 20, 30 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 35.0 );
|
||||
SetSkill( SkillName.Tactics, 45.1, 60.0 );
|
||||
SetSkill( SkillName.Wrestling, 40.1, 50.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 24;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 53.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 8; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Fish; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Feline; } }
|
||||
|
||||
public SnowLeopard(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
66
Scripts/Mobiles/Animals/Misc/Boar.cs
Normal file
66
Scripts/Mobiles/Animals/Misc/Boar.cs
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a pig corpse" )]
|
||||
public class Boar : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Boar() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a boar";
|
||||
Body = 0x122;
|
||||
BaseSoundID = 0xC4;
|
||||
|
||||
SetStr( 25 );
|
||||
SetDex( 15 );
|
||||
SetInt( 5 );
|
||||
|
||||
SetHits( 15 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 6 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 10, 15 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 9.0 );
|
||||
SetSkill( SkillName.Tactics, 9.0 );
|
||||
SetSkill( SkillName.Wrestling, 9.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 10;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 29.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 2; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Boar(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
72
Scripts/Mobiles/Animals/Misc/BullFrog.cs
Normal file
72
Scripts/Mobiles/Animals/Misc/BullFrog.cs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a bull frog corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Bullfrog" )]
|
||||
public class BullFrog : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public BullFrog() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a bull frog";
|
||||
Body = 81;
|
||||
Hue = Utility.RandomList( 0x5AC,0x5A3,0x59A,0x591,0x588,0x57F );
|
||||
BaseSoundID = 0x266;
|
||||
|
||||
SetStr( 46, 70 );
|
||||
SetDex( 6, 25 );
|
||||
SetInt( 11, 20 );
|
||||
|
||||
SetHits( 28, 42 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 2 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 40.1, 60.0 );
|
||||
SetSkill( SkillName.Wrestling, 40.1, 60.0 );
|
||||
|
||||
Fame = 350;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 6;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 23.1;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Poor );
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 4; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.Meat; } }
|
||||
|
||||
public BullFrog(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
88
Scripts/Mobiles/Animals/Misc/Dolphin.cs
Normal file
88
Scripts/Mobiles/Animals/Misc/Dolphin.cs
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a dolphin corpse" )]
|
||||
public class Dolphin : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Dolphin()
|
||||
: base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a dolphin";
|
||||
Body = 0x97;
|
||||
BaseSoundID = 0x8A;
|
||||
|
||||
SetStr( 21, 49 );
|
||||
SetDex( 66, 85 );
|
||||
SetInt( 96, 110 );
|
||||
|
||||
SetHits( 15, 27 );
|
||||
|
||||
SetDamage( 3, 6 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
SetResistance( ResistanceType.Fire, 70, 80 );
|
||||
SetResistance( ResistanceType.Cold, 25, 30 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
|
||||
SetSkill( SkillName.Tactics, 19.2, 29.0 );
|
||||
SetSkill( SkillName.Wrestling, 19.2, 29.0 );
|
||||
|
||||
Fame = 500;
|
||||
Karma = 2000;
|
||||
|
||||
VirtualArmor = 16;
|
||||
CanSwim = true;
|
||||
CantWalk = true;
|
||||
}
|
||||
|
||||
public override int Meat { get { return 1; } }
|
||||
|
||||
public Dolphin( Serial serial )
|
||||
: base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
if( from.AccessLevel >= AccessLevel.GameMaster )
|
||||
Jump();
|
||||
}
|
||||
|
||||
public virtual void Jump()
|
||||
{
|
||||
if( Utility.RandomBool() )
|
||||
Animate( 3, 16, 1, true, false, 0 );
|
||||
else
|
||||
Animate( 4, 20, 1, true, false, 0 );
|
||||
}
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
if( Utility.RandomDouble() < .005 ) // slim chance to jump
|
||||
Jump();
|
||||
|
||||
base.OnThink();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
90
Scripts/Mobiles/Animals/Misc/Gaman.cs
Normal file
90
Scripts/Mobiles/Animals/Misc/Gaman.cs
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a gaman corpse" )]
|
||||
public class Gaman : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Gaman() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a gaman";
|
||||
Body = 248;
|
||||
|
||||
SetStr( 146, 175 );
|
||||
SetDex( 111, 150 );
|
||||
SetInt( 46, 60 );
|
||||
|
||||
SetHits( 131, 160 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 6, 11 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 50, 70 );
|
||||
SetResistance( ResistanceType.Fire, 30, 50 );
|
||||
SetResistance( ResistanceType.Cold, 30, 50 );
|
||||
SetResistance( ResistanceType.Poison, 40, 60 );
|
||||
SetResistance( ResistanceType.Energy, 30, 50 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 37.6, 42.5 );
|
||||
SetSkill( SkillName.Tactics, 70.6, 83.0 );
|
||||
SetSkill( SkillName.Wrestling, 50.1, 57.5 );
|
||||
|
||||
Fame = 2000;
|
||||
Karma = -2000;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 68.7;
|
||||
}
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x4F8;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x4F7;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x4F6;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x4F9;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x4F5;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 10; } }
|
||||
public override int Hides{ get{ return 15; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.GrainsAndHay; } }
|
||||
|
||||
public Gaman( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
73
Scripts/Mobiles/Animals/Misc/GiantToad.cs
Normal file
73
Scripts/Mobiles/Animals/Misc/GiantToad.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a giant toad corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Gianttoad" )]
|
||||
public class GiantToad : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public GiantToad() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a giant toad";
|
||||
Body = 80;
|
||||
BaseSoundID = 0x26B;
|
||||
|
||||
SetStr( 76, 100 );
|
||||
SetDex( 6, 25 );
|
||||
SetInt( 11, 20 );
|
||||
|
||||
SetHits( 46, 60 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 17 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Energy, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 40.1, 60.0 );
|
||||
SetSkill( SkillName.Wrestling, 40.1, 60.0 );
|
||||
|
||||
Fame = 750;
|
||||
Karma = -750;
|
||||
|
||||
VirtualArmor = 24;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 77.1;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Poor );
|
||||
}
|
||||
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.Meat; } }
|
||||
|
||||
public GiantToad(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
65
Scripts/Mobiles/Animals/Misc/Goat.cs
Normal file
65
Scripts/Mobiles/Animals/Misc/Goat.cs
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a goat corpse" )]
|
||||
public class Goat : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Goat() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a goat";
|
||||
Body = 0xD1;
|
||||
BaseSoundID = 0x99;
|
||||
|
||||
SetStr( 19 );
|
||||
SetDex( 15 );
|
||||
SetInt( 5 );
|
||||
|
||||
SetHits( 12 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 4 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 5.0 );
|
||||
SetSkill( SkillName.Tactics, 5.0 );
|
||||
SetSkill( SkillName.Wrestling, 5.0 );
|
||||
|
||||
Fame = 150;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 10;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 11.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 2; } }
|
||||
public override int Hides{ get{ return 8; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.GrainsAndHay | FoodType.FruitsAndVegies; } }
|
||||
|
||||
public Goat(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
67
Scripts/Mobiles/Animals/Misc/Gorilla.cs
Normal file
67
Scripts/Mobiles/Animals/Misc/Gorilla.cs
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a gorilla corpse" )]
|
||||
public class Gorilla : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Gorilla() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a gorilla";
|
||||
Body = 0x1D;
|
||||
BaseSoundID = 0x9E;
|
||||
|
||||
SetStr( 53, 95 );
|
||||
SetDex( 36, 55 );
|
||||
SetInt( 36, 60 );
|
||||
|
||||
SetHits( 38, 51 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4, 10 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 45.1, 60.0 );
|
||||
SetSkill( SkillName.Tactics, 43.3, 58.0 );
|
||||
SetSkill( SkillName.Wrestling, 43.3, 58.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 20;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -18.9;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 6; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Gorilla(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
81
Scripts/Mobiles/Animals/Misc/GreatHart.cs
Normal file
81
Scripts/Mobiles/Animals/Misc/GreatHart.cs
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a deer corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Greathart" )]
|
||||
public class GreatHart : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public GreatHart() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a great hart";
|
||||
Body = 0xEA;
|
||||
|
||||
SetStr( 41, 71 );
|
||||
SetDex( 47, 77 );
|
||||
SetInt( 27, 57 );
|
||||
|
||||
SetHits( 27, 41 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 9 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Cold, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 26.8, 44.5 );
|
||||
SetSkill( SkillName.Tactics, 29.8, 47.5 );
|
||||
SetSkill( SkillName.Wrestling, 29.8, 47.5 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 24;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 59.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 6; } }
|
||||
public override int Hides{ get{ return 15; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public GreatHart(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x82;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x83;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x84;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
80
Scripts/Mobiles/Animals/Misc/Hind.cs
Normal file
80
Scripts/Mobiles/Animals/Misc/Hind.cs
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a deer corpse" )]
|
||||
public class Hind : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Hind() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a hind";
|
||||
Body = 0xED;
|
||||
|
||||
SetStr( 21, 51 );
|
||||
SetDex( 47, 77 );
|
||||
SetInt( 17, 47 );
|
||||
|
||||
SetHits( 15, 29 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 15 );
|
||||
SetResistance( ResistanceType.Cold, 5 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.0 );
|
||||
SetSkill( SkillName.Tactics, 19.0 );
|
||||
SetSkill( SkillName.Wrestling, 26.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 8;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 23.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 5; } }
|
||||
public override int Hides{ get{ return 8; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Hind(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x82;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x83;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x84;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
65
Scripts/Mobiles/Animals/Misc/Llama.cs
Normal file
65
Scripts/Mobiles/Animals/Misc/Llama.cs
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a llama corpse" )]
|
||||
public class Llama : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Llama() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a llama";
|
||||
Body = 0xDC;
|
||||
BaseSoundID = 0x3F3;
|
||||
|
||||
SetStr( 21, 49 );
|
||||
SetDex( 36, 55 );
|
||||
SetInt( 16, 30 );
|
||||
|
||||
SetHits( 15, 27 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 5 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
|
||||
SetSkill( SkillName.Tactics, 19.2, 29.0 );
|
||||
SetSkill( SkillName.Wrestling, 19.2, 29.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 16;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 35.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Llama(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
69
Scripts/Mobiles/Animals/Misc/MountainGoat.cs
Normal file
69
Scripts/Mobiles/Animals/Misc/MountainGoat.cs
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a mountain goat corpse" )]
|
||||
public class MountainGoat : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public MountainGoat() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a mountain goat";
|
||||
Body = 88;
|
||||
BaseSoundID = 0x99;
|
||||
|
||||
SetStr( 22, 64 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 16, 30 );
|
||||
|
||||
SetHits( 20, 33 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 7 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 10, 20 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 10, 20 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 29.3, 44.0 );
|
||||
SetSkill( SkillName.Wrestling, 29.3, 44.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 10;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -0.9;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 2; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.GrainsAndHay | FoodType.FruitsAndVegies; } }
|
||||
|
||||
public MountainGoat(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
222
Scripts/Mobiles/Animals/Misc/PackHorse.cs
Normal file
222
Scripts/Mobiles/Animals/Misc/PackHorse.cs
Normal file
|
|
@ -0,0 +1,222 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Server.Mobiles;
|
||||
using Server.Items;
|
||||
using Server.ContextMenus;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a horse corpse" )]
|
||||
public class PackHorse : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public PackHorse() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a pack horse";
|
||||
Body = 291;
|
||||
BaseSoundID = 0xA8;
|
||||
|
||||
SetStr( 44, 120 );
|
||||
SetDex( 36, 55 );
|
||||
SetInt( 6, 10 );
|
||||
|
||||
SetHits( 61, 80 );
|
||||
SetStam( 81, 100 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 11 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 10, 15 );
|
||||
SetResistance( ResistanceType.Cold, 20, 25 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 29.3, 44.0 );
|
||||
SetSkill( SkillName.Wrestling, 29.3, 44.0 );
|
||||
|
||||
Fame = 0;
|
||||
Karma = 200;
|
||||
|
||||
VirtualArmor = 16;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 11.1;
|
||||
|
||||
Container pack = Backpack;
|
||||
|
||||
if ( pack != null )
|
||||
pack.Delete();
|
||||
|
||||
pack = new StrongBackpack();
|
||||
pack.Movable = false;
|
||||
|
||||
AddItem( pack );
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 3; } }
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public PackHorse( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
#region Pack Animal Methods
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
if ( !base.OnBeforeDeath() )
|
||||
return false;
|
||||
|
||||
PackAnimal.CombineBackpacks( this );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override DeathMoveResult GetInventoryMoveResultFor( Item item )
|
||||
{
|
||||
return DeathMoveResult.MoveToCorpse;
|
||||
}
|
||||
|
||||
public override bool IsSnoop( Mobile from )
|
||||
{
|
||||
if ( PackAnimal.CheckAccess( this, from ) )
|
||||
return false;
|
||||
|
||||
return base.IsSnoop( from );
|
||||
}
|
||||
|
||||
public override bool OnDragDrop( Mobile from, Item item )
|
||||
{
|
||||
if ( CheckFeed( from, item ) )
|
||||
return true;
|
||||
|
||||
if ( PackAnimal.CheckAccess( this, from ) )
|
||||
{
|
||||
AddToBackpack( item );
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.OnDragDrop( from, item );
|
||||
}
|
||||
|
||||
public override bool CheckNonlocalDrop( Mobile from, Item item, Item target )
|
||||
{
|
||||
return PackAnimal.CheckAccess( this, from );
|
||||
}
|
||||
|
||||
public override bool CheckNonlocalLift( Mobile from, Item item )
|
||||
{
|
||||
return PackAnimal.CheckAccess( this, from );
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
PackAnimal.TryPackOpen( this, from );
|
||||
}
|
||||
|
||||
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
|
||||
{
|
||||
base.GetContextMenuEntries( from, list );
|
||||
|
||||
PackAnimal.GetContextMenuEntries( this, from, list );
|
||||
}
|
||||
#endregion
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class PackAnimalBackpackEntry : ContextMenuEntry
|
||||
{
|
||||
private BaseCreature m_Animal;
|
||||
private Mobile m_From;
|
||||
|
||||
public PackAnimalBackpackEntry( BaseCreature animal, Mobile from ) : base( 6145, 3 )
|
||||
{
|
||||
m_Animal = animal;
|
||||
m_From = from;
|
||||
|
||||
if ( animal.IsDeadPet )
|
||||
Enabled = false;
|
||||
}
|
||||
|
||||
public override void OnClick()
|
||||
{
|
||||
PackAnimal.TryPackOpen( m_Animal, m_From );
|
||||
}
|
||||
}
|
||||
|
||||
public class PackAnimal
|
||||
{
|
||||
public static void GetContextMenuEntries( BaseCreature animal, Mobile from, List<ContextMenuEntry> list )
|
||||
{
|
||||
if ( CheckAccess( animal, from ) )
|
||||
list.Add( new PackAnimalBackpackEntry( animal, from ) );
|
||||
}
|
||||
|
||||
public static bool CheckAccess( BaseCreature animal, Mobile from )
|
||||
{
|
||||
if ( from == animal || from.AccessLevel >= AccessLevel.GameMaster )
|
||||
return true;
|
||||
|
||||
if ( from.Alive && animal.Controlled && !animal.IsDeadPet && (from == animal.ControlMaster || from == animal.SummonMaster) )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void CombineBackpacks( BaseCreature animal )
|
||||
{
|
||||
if ( Core.AOS )
|
||||
return;
|
||||
|
||||
//if ( animal.IsBonded || animal.IsDeadPet )
|
||||
// return;
|
||||
|
||||
Container pack = animal.Backpack;
|
||||
|
||||
if ( pack != null )
|
||||
{
|
||||
Container newPack = new Backpack();
|
||||
|
||||
for ( int i = pack.Items.Count - 1; i >= 0; --i )
|
||||
{
|
||||
if ( i >= pack.Items.Count )
|
||||
continue;
|
||||
|
||||
newPack.DropItem( pack.Items[i] );
|
||||
}
|
||||
|
||||
pack.DropItem( newPack );
|
||||
}
|
||||
}
|
||||
|
||||
public static void TryPackOpen( BaseCreature animal, Mobile from )
|
||||
{
|
||||
if ( animal.IsDeadPet )
|
||||
return;
|
||||
|
||||
Container item = animal.Backpack;
|
||||
|
||||
if ( item != null )
|
||||
from.Use( item );
|
||||
}
|
||||
}
|
||||
}
|
||||
143
Scripts/Mobiles/Animals/Misc/PackLlama.cs
Normal file
143
Scripts/Mobiles/Animals/Misc/PackLlama.cs
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server.Mobiles;
|
||||
using Server.Items;
|
||||
using Server.ContextMenus;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a llama corpse")]
|
||||
public class PackLlama : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public PackLlama() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a pack llama";
|
||||
Body = 292;
|
||||
BaseSoundID = 0x3F3;
|
||||
|
||||
SetStr( 52, 80 );
|
||||
SetDex( 36, 55 );
|
||||
SetInt( 16, 30 );
|
||||
|
||||
SetHits( 50 );
|
||||
SetStam( 86, 105 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 2, 6 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 25, 35 );
|
||||
SetResistance( ResistanceType.Fire, 10, 15 );
|
||||
SetResistance( ResistanceType.Cold, 10, 15 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
|
||||
SetSkill( SkillName.Tactics, 19.2, 29.0 );
|
||||
SetSkill( SkillName.Wrestling, 19.2, 29.0 );
|
||||
|
||||
Fame = 0;
|
||||
Karma = 200;
|
||||
|
||||
VirtualArmor = 16;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 11.1;
|
||||
|
||||
Container pack = Backpack;
|
||||
|
||||
if ( pack != null )
|
||||
pack.Delete();
|
||||
|
||||
pack = new StrongBackpack();
|
||||
pack.Movable = false;
|
||||
|
||||
AddItem( pack );
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public PackLlama( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
#region Pack Animal Methods
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
if ( !base.OnBeforeDeath() )
|
||||
return false;
|
||||
|
||||
PackAnimal.CombineBackpacks( this );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override DeathMoveResult GetInventoryMoveResultFor( Item item )
|
||||
{
|
||||
return DeathMoveResult.MoveToCorpse;
|
||||
}
|
||||
|
||||
public override bool IsSnoop( Mobile from )
|
||||
{
|
||||
if ( PackAnimal.CheckAccess( this, from ) )
|
||||
return false;
|
||||
|
||||
return base.IsSnoop( from );
|
||||
}
|
||||
|
||||
public override bool OnDragDrop( Mobile from, Item item )
|
||||
{
|
||||
if ( CheckFeed( from, item ) )
|
||||
return true;
|
||||
|
||||
if ( PackAnimal.CheckAccess( this, from ) )
|
||||
{
|
||||
AddToBackpack( item );
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.OnDragDrop( from, item );
|
||||
}
|
||||
|
||||
public override bool CheckNonlocalDrop( Mobile from, Item item, Item target )
|
||||
{
|
||||
return PackAnimal.CheckAccess( this, from );
|
||||
}
|
||||
|
||||
public override bool CheckNonlocalLift( Mobile from, Item item )
|
||||
{
|
||||
return PackAnimal.CheckAccess( this, from );
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
PackAnimal.TryPackOpen( this, from );
|
||||
}
|
||||
|
||||
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
|
||||
{
|
||||
base.GetContextMenuEntries( from, list );
|
||||
|
||||
PackAnimal.GetContextMenuEntries( this, from, list );
|
||||
}
|
||||
#endregion
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
64
Scripts/Mobiles/Animals/Misc/Pig.cs
Normal file
64
Scripts/Mobiles/Animals/Misc/Pig.cs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a pig corpse" )]
|
||||
public class Pig : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Pig() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a pig";
|
||||
Body = 0xCB;
|
||||
BaseSoundID = 0xC4;
|
||||
|
||||
SetStr( 20 );
|
||||
SetDex( 20 );
|
||||
SetInt( 5 );
|
||||
|
||||
SetHits( 12 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 2, 4 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 5.0 );
|
||||
SetSkill( SkillName.Tactics, 5.0 );
|
||||
SetSkill( SkillName.Wrestling, 5.0 );
|
||||
|
||||
Fame = 150;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 12;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 11.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Pig(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
111
Scripts/Mobiles/Animals/Misc/Sheep.cs
Normal file
111
Scripts/Mobiles/Animals/Misc/Sheep.cs
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a sheep corpse" )]
|
||||
public class Sheep : BaseCreature, ICarvable
|
||||
{
|
||||
private DateTime m_NextWoolTime;
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public DateTime NextWoolTime
|
||||
{
|
||||
get{ return m_NextWoolTime; }
|
||||
set{ m_NextWoolTime = value; Body = ( DateTime.Now >= m_NextWoolTime ) ? 0xCF : 0xDF; }
|
||||
}
|
||||
|
||||
public void Carve( Mobile from, Item item )
|
||||
{
|
||||
if ( DateTime.Now < m_NextWoolTime )
|
||||
{
|
||||
// This sheep is not yet ready to be shorn.
|
||||
PrivateOverheadMessage( MessageType.Regular, 0x3B2, 500449, from.NetState );
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendLocalizedMessage( 500452 ); // You place the gathered wool into your backpack.
|
||||
from.AddToBackpack( new Wool( Map == Map.Felucca ? 2 : 1 ) );
|
||||
|
||||
NextWoolTime = DateTime.Now + TimeSpan.FromHours( 3.0 ); // TODO: Proper time delay
|
||||
}
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
base.OnThink();
|
||||
Body = ( DateTime.Now >= m_NextWoolTime ) ? 0xCF : 0xDF;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Sheep() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a sheep";
|
||||
Body = 0xCF;
|
||||
BaseSoundID = 0xD6;
|
||||
|
||||
SetStr( 19 );
|
||||
SetDex( 25 );
|
||||
SetInt( 5 );
|
||||
|
||||
SetHits( 12 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 2 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 5.0 );
|
||||
SetSkill( SkillName.Tactics, 6.0 );
|
||||
SetSkill( SkillName.Wrestling, 5.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 6;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 11.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 3; } }
|
||||
public override MeatType MeatType{ get{ return MeatType.LambLeg; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public override int Wool{ get{ return (Body == 0xCF ? 3 : 0); } }
|
||||
|
||||
public Sheep( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 1 );
|
||||
|
||||
writer.WriteDeltaTime( m_NextWoolTime );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
NextWoolTime = reader.ReadDeltaTime();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
69
Scripts/Mobiles/Animals/Misc/Walrus.cs
Normal file
69
Scripts/Mobiles/Animals/Misc/Walrus.cs
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a walrus corpse" )]
|
||||
public class Walrus : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Walrus() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a walrus";
|
||||
Body = 0xDD;
|
||||
BaseSoundID = 0xE0;
|
||||
|
||||
SetStr( 21, 29 );
|
||||
SetDex( 46, 55 );
|
||||
SetInt( 16, 20 );
|
||||
|
||||
SetHits( 14, 17 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4, 10 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 20, 25 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
SetResistance( ResistanceType.Energy, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
|
||||
SetSkill( SkillName.Tactics, 19.2, 29.0 );
|
||||
SetSkill( SkillName.Wrestling, 19.2, 29.0 );
|
||||
|
||||
Fame = 150;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 18;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 35.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish; } }
|
||||
|
||||
public Walrus(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
458
Scripts/Mobiles/Animals/Mounts/BaseMount.cs
Normal file
458
Scripts/Mobiles/Animals/Mounts/BaseMount.cs
Normal file
|
|
@ -0,0 +1,458 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public abstract class BaseMount : BaseCreature, IMount
|
||||
{
|
||||
private Mobile m_Rider;
|
||||
private Item m_InternalItem;
|
||||
private DateTime m_NextMountAbility;
|
||||
|
||||
public virtual TimeSpan MountAbilityDelay { get { return TimeSpan.Zero; } }
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public DateTime NextMountAbility
|
||||
{
|
||||
get { return m_NextMountAbility; }
|
||||
set { m_NextMountAbility = value; }
|
||||
}
|
||||
|
||||
public virtual bool AllowMaleRider{ get{ return true; } }
|
||||
public virtual bool AllowFemaleRider{ get{ return true; } }
|
||||
|
||||
public BaseMount( string name, int bodyID, int itemID, AIType aiType, FightMode fightMode, int rangePerception, int rangeFight, double activeSpeed, double passiveSpeed ) : base ( aiType, fightMode, rangePerception, rangeFight, activeSpeed, passiveSpeed )
|
||||
{
|
||||
Name = name;
|
||||
Body = bodyID;
|
||||
|
||||
m_InternalItem = new MountItem( this, itemID );
|
||||
}
|
||||
|
||||
public BaseMount( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 1 ); // version
|
||||
|
||||
writer.Write( m_NextMountAbility );
|
||||
|
||||
writer.Write( m_Rider );
|
||||
writer.Write( m_InternalItem );
|
||||
}
|
||||
|
||||
[Hue, CommandProperty( AccessLevel.GameMaster )]
|
||||
public override int Hue
|
||||
{
|
||||
get
|
||||
{
|
||||
return base.Hue;
|
||||
}
|
||||
set
|
||||
{
|
||||
base.Hue = value;
|
||||
|
||||
if ( m_InternalItem != null )
|
||||
m_InternalItem.Hue = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
Rider = null;
|
||||
|
||||
return base.OnBeforeDeath();
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
{
|
||||
if ( m_InternalItem != null )
|
||||
m_InternalItem.Delete();
|
||||
|
||||
m_InternalItem = null;
|
||||
|
||||
base.OnAfterDelete();
|
||||
}
|
||||
|
||||
public override void OnDelete()
|
||||
{
|
||||
Rider = null;
|
||||
|
||||
base.OnDelete();
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
m_NextMountAbility = reader.ReadDateTime();
|
||||
goto case 0;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
m_Rider = reader.ReadMobile();
|
||||
m_InternalItem = reader.ReadItem();
|
||||
|
||||
if ( m_InternalItem == null )
|
||||
Delete();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void OnDisallowedRider( Mobile m )
|
||||
{
|
||||
m.SendMessage( "You may not ride this creature." );
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
if ( IsDeadPet )
|
||||
return;
|
||||
|
||||
if ( from.IsBodyMod && !from.Body.IsHuman )
|
||||
{
|
||||
if ( Core.AOS ) // You cannot ride a mount in your current form.
|
||||
PrivateOverheadMessage( Network.MessageType.Regular, 0x3B2, 1062061, from.NetState );
|
||||
else
|
||||
from.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed.
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !CheckMountAllowed( from, true ) )
|
||||
return;
|
||||
|
||||
if ( from.Mounted )
|
||||
{
|
||||
from.SendLocalizedMessage( 1005583 ); // Please dismount first.
|
||||
return;
|
||||
}
|
||||
|
||||
if ( from.Female ? !AllowFemaleRider : !AllowMaleRider )
|
||||
{
|
||||
OnDisallowedRider( from );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !Multis.DesignContext.Check( from ) )
|
||||
return;
|
||||
|
||||
if ( from.HasTrade )
|
||||
{
|
||||
from.SendLocalizedMessage( 1042317, "", 0x41 ); // You may not ride at this time
|
||||
return;
|
||||
}
|
||||
|
||||
if ( from.InRange( this, 1 ) )
|
||||
{
|
||||
bool canAccess = ( from.AccessLevel >= AccessLevel.GameMaster )
|
||||
|| ( Controlled && ControlMaster == from )
|
||||
|| ( Summoned && SummonMaster == from );
|
||||
|
||||
if ( canAccess )
|
||||
{
|
||||
if ( this.Poisoned )
|
||||
PrivateOverheadMessage( Network.MessageType.Regular, 0x3B2, 1049692, from.NetState ); // This mount is too ill to ride.
|
||||
else
|
||||
Rider = from;
|
||||
}
|
||||
else if ( !Controlled && !Summoned )
|
||||
{
|
||||
// That mount does not look broken! You would have to tame it to ride it.
|
||||
PrivateOverheadMessage( Network.MessageType.Regular, 0x3B2, 501263, from.NetState );
|
||||
}
|
||||
else
|
||||
{
|
||||
// This isn't your mount; it refuses to let you ride.
|
||||
PrivateOverheadMessage( Network.MessageType.Regular, 0x3B2, 501264, from.NetState );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage( 500206 ); // That is too far away to ride.
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public int ItemID
|
||||
{
|
||||
get
|
||||
{
|
||||
if ( m_InternalItem != null )
|
||||
return m_InternalItem.ItemID;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
set
|
||||
{
|
||||
if ( m_InternalItem != null )
|
||||
m_InternalItem.ItemID = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Dismount( Mobile m )
|
||||
{
|
||||
IMount mount = m.Mount;
|
||||
|
||||
if ( mount != null )
|
||||
mount.Rider = null;
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public Mobile Rider
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Rider;
|
||||
}
|
||||
set
|
||||
{
|
||||
if ( m_Rider != value )
|
||||
{
|
||||
if ( value == null )
|
||||
{
|
||||
Point3D loc = m_Rider.Location;
|
||||
Map map = m_Rider.Map;
|
||||
|
||||
if ( map == null || map == Map.Internal )
|
||||
{
|
||||
loc = m_Rider.LogoutLocation;
|
||||
map = m_Rider.LogoutMap;
|
||||
}
|
||||
|
||||
Direction = m_Rider.Direction;
|
||||
Location = loc;
|
||||
Map = map;
|
||||
|
||||
if ( m_InternalItem != null )
|
||||
m_InternalItem.Internalize();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_Rider != null )
|
||||
Dismount( m_Rider );
|
||||
|
||||
Dismount( value );
|
||||
|
||||
if ( m_InternalItem != null )
|
||||
value.AddItem( m_InternalItem );
|
||||
|
||||
value.Direction = this.Direction;
|
||||
|
||||
Internalize();
|
||||
}
|
||||
|
||||
m_Rider = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class BlockEntry
|
||||
{
|
||||
public BlockMountType m_Type;
|
||||
public DateTime m_Expiration;
|
||||
|
||||
public bool IsExpired{ get{ return ( DateTime.Now >= m_Expiration ); } }
|
||||
|
||||
public BlockEntry( BlockMountType type, DateTime expiration )
|
||||
{
|
||||
m_Type = type;
|
||||
m_Expiration = expiration;
|
||||
}
|
||||
}
|
||||
|
||||
private static Hashtable m_Table = new Hashtable();
|
||||
|
||||
public static void SetMountPrevention( Mobile mob, BlockMountType type, TimeSpan duration )
|
||||
{
|
||||
if ( mob == null )
|
||||
return;
|
||||
|
||||
DateTime expiration = DateTime.Now + duration;
|
||||
|
||||
BlockEntry entry = m_Table[mob] as BlockEntry;
|
||||
|
||||
if ( entry != null )
|
||||
{
|
||||
entry.m_Type = type;
|
||||
entry.m_Expiration = expiration;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Table[mob] = entry = new BlockEntry( type, expiration );
|
||||
}
|
||||
}
|
||||
|
||||
public static void ClearMountPrevention( Mobile mob )
|
||||
{
|
||||
if ( mob != null )
|
||||
m_Table.Remove( mob );
|
||||
}
|
||||
|
||||
public static BlockMountType GetMountPrevention( Mobile mob )
|
||||
{
|
||||
if ( mob == null )
|
||||
return BlockMountType.None;
|
||||
|
||||
BlockEntry entry = m_Table[mob] as BlockEntry;
|
||||
|
||||
if ( entry == null )
|
||||
return BlockMountType.None;
|
||||
|
||||
if ( entry.IsExpired )
|
||||
{
|
||||
m_Table.Remove( mob );
|
||||
return BlockMountType.None;
|
||||
}
|
||||
|
||||
return entry.m_Type;
|
||||
}
|
||||
|
||||
public static bool CheckMountAllowed( Mobile mob, bool message )
|
||||
{
|
||||
BlockMountType type = GetMountPrevention( mob );
|
||||
|
||||
if ( type == BlockMountType.None )
|
||||
return true;
|
||||
|
||||
if ( message )
|
||||
{
|
||||
switch ( type )
|
||||
{
|
||||
case BlockMountType.Dazed:
|
||||
{
|
||||
mob.SendLocalizedMessage( 1040024 ); // You are still too dazed from being knocked off your mount to ride!
|
||||
break;
|
||||
}
|
||||
case BlockMountType.BolaRecovery:
|
||||
{
|
||||
mob.SendLocalizedMessage( 1062910 ); // You cannot mount while recovering from a bola throw.
|
||||
break;
|
||||
}
|
||||
case BlockMountType.DismountRecovery:
|
||||
{
|
||||
mob.SendLocalizedMessage( 1070859 ); // You cannot mount while recovering from a dismount special maneuver.
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual void OnRiderDamaged( int amount, Mobile from, bool willKill )
|
||||
{
|
||||
if( m_Rider == null )
|
||||
return;
|
||||
|
||||
Mobile attacker = from;
|
||||
if( attacker == null )
|
||||
attacker = m_Rider.FindMostRecentDamager( true );
|
||||
|
||||
if( !(attacker == this || attacker == m_Rider || willKill || DateTime.Now < m_NextMountAbility) )
|
||||
{
|
||||
if( DoMountAbility( amount, from ) )
|
||||
m_NextMountAbility = DateTime.Now + MountAbilityDelay;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool DoMountAbility( int damage, Mobile attacker )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public class MountItem : Item, IMountItem
|
||||
{
|
||||
private BaseMount m_Mount;
|
||||
|
||||
public MountItem( BaseMount mount, int itemID ) : base( itemID )
|
||||
{
|
||||
Layer = Layer.Mount;
|
||||
Movable = false;
|
||||
|
||||
m_Mount = mount;
|
||||
}
|
||||
|
||||
public MountItem( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
{
|
||||
if ( m_Mount != null )
|
||||
m_Mount.Delete();
|
||||
|
||||
m_Mount = null;
|
||||
|
||||
base.OnAfterDelete();
|
||||
}
|
||||
|
||||
public override DeathMoveResult OnParentDeath(Mobile parent)
|
||||
{
|
||||
if ( m_Mount != null )
|
||||
m_Mount.Rider = null;
|
||||
|
||||
return DeathMoveResult.RemainEquiped;
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
|
||||
writer.Write( m_Mount );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
m_Mount = reader.ReadMobile() as BaseMount;
|
||||
|
||||
if ( m_Mount == null )
|
||||
Delete();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public IMount Mount
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Mount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum BlockMountType
|
||||
{
|
||||
None = -1,
|
||||
Dazed,
|
||||
BolaRecovery,
|
||||
DismountRecovery
|
||||
}
|
||||
}
|
||||
165
Scripts/Mobiles/Animals/Mounts/Beetle.cs
Normal file
165
Scripts/Mobiles/Animals/Mounts/Beetle.cs
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.ContextMenus;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a giant beetle corpse" )]
|
||||
public class Beetle : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public Beetle() : this( "a giant beetle" )
|
||||
{
|
||||
}
|
||||
|
||||
public override bool SubdueBeforeTame{ get{ return true; } } // Must be beaten into submission
|
||||
|
||||
[Constructable]
|
||||
public Beetle( string name ) : base( name, 0x317, 0x3EBC, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
SetStr( 300 );
|
||||
SetDex( 100 );
|
||||
SetInt( 500 );
|
||||
|
||||
SetHits( 200 );
|
||||
|
||||
SetDamage( 7, 20 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 30, 40 );
|
||||
SetResistance( ResistanceType.Fire, 20, 30 );
|
||||
SetResistance( ResistanceType.Cold, 20, 30 );
|
||||
SetResistance( ResistanceType.Poison, 20, 30 );
|
||||
SetResistance( ResistanceType.Energy, 20, 30 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 80.0 );
|
||||
SetSkill( SkillName.Tactics, 100.0 );
|
||||
SetSkill( SkillName.Wrestling, 100.0 );
|
||||
|
||||
Fame = 4000;
|
||||
Karma = -4000;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 3;
|
||||
MinTameSkill = 29.1;
|
||||
|
||||
Container pack = Backpack;
|
||||
|
||||
if ( pack != null )
|
||||
pack.Delete();
|
||||
|
||||
pack = new StrongBackpack();
|
||||
pack.Movable = false;
|
||||
|
||||
AddItem( pack );
|
||||
}
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x21D;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x21D;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x162;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x163;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x21D;
|
||||
}
|
||||
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
|
||||
// TODO: Speed boost when hit by magic.
|
||||
|
||||
public Beetle( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
#region Pack Animal Methods
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
if ( !base.OnBeforeDeath() )
|
||||
return false;
|
||||
|
||||
PackAnimal.CombineBackpacks( this );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override DeathMoveResult GetInventoryMoveResultFor( Item item )
|
||||
{
|
||||
return DeathMoveResult.MoveToCorpse;
|
||||
}
|
||||
|
||||
public override bool IsSnoop( Mobile from )
|
||||
{
|
||||
if ( PackAnimal.CheckAccess( this, from ) )
|
||||
return false;
|
||||
|
||||
return base.IsSnoop( from );
|
||||
}
|
||||
|
||||
public override bool OnDragDrop( Mobile from, Item item )
|
||||
{
|
||||
if ( CheckFeed( from, item ) )
|
||||
return true;
|
||||
|
||||
if ( PackAnimal.CheckAccess( this, from ) )
|
||||
{
|
||||
AddToBackpack( item );
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.OnDragDrop( from, item );
|
||||
}
|
||||
|
||||
public override bool CheckNonlocalDrop( Mobile from, Item item, Item target )
|
||||
{
|
||||
return PackAnimal.CheckAccess( this, from );
|
||||
}
|
||||
|
||||
public override bool CheckNonlocalLift( Mobile from, Item item )
|
||||
{
|
||||
return PackAnimal.CheckAccess( this, from );
|
||||
}
|
||||
|
||||
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
|
||||
{
|
||||
base.GetContextMenuEntries( from, list );
|
||||
|
||||
PackAnimal.GetContextMenuEntries( this, from, list );
|
||||
}
|
||||
#endregion
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
67
Scripts/Mobiles/Animals/Mounts/DesertOstard.cs
Normal file
67
Scripts/Mobiles/Animals/Mounts/DesertOstard.cs
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "an ostard corpse" )]
|
||||
public class DesertOstard : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public DesertOstard() : this( "a desert ostard" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public DesertOstard( string name ) : base( name, 0xD2, 0x3EA3, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
BaseSoundID = 0x270;
|
||||
|
||||
SetStr( 94, 170 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 6, 10 );
|
||||
|
||||
SetHits( 71, 88 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 11 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
SetResistance( ResistanceType.Fire, 5, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 25.3, 40.0 );
|
||||
SetSkill( SkillName.Wrestling, 29.3, 44.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 29.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 3; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Ostard; } }
|
||||
|
||||
public DesertOstard( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
677
Scripts/Mobiles/Animals/Mounts/Ethereals.cs
Normal file
677
Scripts/Mobiles/Animals/Mounts/Ethereals.cs
Normal file
|
|
@ -0,0 +1,677 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
using Server.Items;
|
||||
using Server.Spells;
|
||||
using Server.Engines.VeteranRewards;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class EtherealMount : Item, IMount, IMountItem, Engines.VeteranRewards.IRewardItem
|
||||
{
|
||||
private int m_MountedID;
|
||||
private int m_RegularID;
|
||||
private Mobile m_Rider;
|
||||
private bool m_IsRewardItem;
|
||||
private bool m_IsDonationItem;
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool IsRewardItem
|
||||
{
|
||||
get{ return m_IsRewardItem; }
|
||||
set{ m_IsRewardItem = value; }
|
||||
}
|
||||
|
||||
public override double DefaultWeight
|
||||
{
|
||||
get { return 1.0; }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster, AccessLevel.Administrator )]
|
||||
public bool IsDonationItem
|
||||
{
|
||||
get { return m_IsDonationItem; }
|
||||
set { m_IsDonationItem = value; InvalidateProperties(); }
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public EtherealMount( int itemID, int mountID ) : base( itemID )
|
||||
{
|
||||
m_MountedID = mountID;
|
||||
m_RegularID = itemID;
|
||||
m_Rider = null;
|
||||
|
||||
Layer = Layer.Invalid;
|
||||
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public override void GetProperties( ObjectPropertyList list )
|
||||
{
|
||||
base.GetProperties( list );
|
||||
|
||||
if( m_IsDonationItem )
|
||||
{
|
||||
list.Add( "Donation Ethereal" );
|
||||
list.Add( "7.5 sec slower cast time if not a 9mo. Veteran" );
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public int MountedID
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_MountedID;
|
||||
}
|
||||
set
|
||||
{
|
||||
if ( m_MountedID != value )
|
||||
{
|
||||
m_MountedID = value;
|
||||
|
||||
if ( m_Rider != null )
|
||||
ItemID = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public int RegularID
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_RegularID;
|
||||
}
|
||||
set
|
||||
{
|
||||
if ( m_RegularID != value )
|
||||
{
|
||||
m_RegularID = value;
|
||||
|
||||
if ( m_Rider == null )
|
||||
ItemID = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public EtherealMount( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override bool DisplayLootType{ get{ return false; } }
|
||||
|
||||
public virtual int FollowerSlots{ get{ return 1; } }
|
||||
|
||||
public void RemoveFollowers()
|
||||
{
|
||||
if ( m_Rider != null )
|
||||
m_Rider.Followers -= FollowerSlots;
|
||||
|
||||
if ( m_Rider != null && m_Rider.Followers < 0 )
|
||||
m_Rider.Followers = 0;
|
||||
}
|
||||
|
||||
public void AddFollowers()
|
||||
{
|
||||
if ( m_Rider != null )
|
||||
m_Rider.Followers += FollowerSlots;
|
||||
}
|
||||
|
||||
public virtual bool Validate( Mobile from )
|
||||
{
|
||||
if ( !IsChildOf( from.Backpack ) )
|
||||
{
|
||||
from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
|
||||
return false;
|
||||
}
|
||||
else if ( m_IsRewardItem && !Engines.VeteranRewards.RewardSystem.CheckIsUsableBy( from, this, null ) )
|
||||
{
|
||||
// CheckIsUsableBy sends the message
|
||||
return false;
|
||||
}
|
||||
else if ( !BaseMount.CheckMountAllowed( from, true ) )
|
||||
{
|
||||
// CheckMountAllowed sends the message
|
||||
return false;
|
||||
}
|
||||
else if ( from.Mounted )
|
||||
{
|
||||
from.SendLocalizedMessage( 1005583 ); // Please dismount first.
|
||||
return false;
|
||||
}
|
||||
else if ( from.IsBodyMod && !from.Body.IsHuman )
|
||||
{
|
||||
from.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed.
|
||||
return false;
|
||||
}
|
||||
else if ( from.HasTrade )
|
||||
{
|
||||
from.SendLocalizedMessage( 1042317, "", 0x41 ); // You may not ride at this time
|
||||
return false;
|
||||
}
|
||||
else if ( (from.Followers + FollowerSlots) > from.FollowersMax )
|
||||
{
|
||||
from.SendLocalizedMessage( 1049679 ); // You have too many followers to summon your mount.
|
||||
return false;
|
||||
}
|
||||
else if ( !Multis.DesignContext.Check( from ) )
|
||||
{
|
||||
// Check sends the message
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
if ( Validate( from ) )
|
||||
new EtherealSpell( this, from ).Cast();
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 3 ); // version
|
||||
|
||||
writer.Write( m_IsDonationItem );
|
||||
writer.Write( (bool) m_IsRewardItem );
|
||||
|
||||
writer.Write( (int)m_MountedID );
|
||||
writer.Write( (int)m_RegularID );
|
||||
writer.Write( m_Rider );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
LootType = LootType.Blessed;
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 3:
|
||||
{
|
||||
m_IsDonationItem = reader.ReadBool();
|
||||
goto case 2;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
m_IsRewardItem = reader.ReadBool();
|
||||
goto case 0;
|
||||
}
|
||||
case 1: reader.ReadInt(); goto case 0;
|
||||
case 0:
|
||||
{
|
||||
m_MountedID = reader.ReadInt();
|
||||
m_RegularID = reader.ReadInt();
|
||||
m_Rider = reader.ReadMobile();
|
||||
|
||||
if ( m_MountedID == 0x3EA2 )
|
||||
m_MountedID = 0x3EAA;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
AddFollowers();
|
||||
|
||||
if ( version < 3 && Weight == 0 )
|
||||
Weight = -1;
|
||||
}
|
||||
|
||||
public override DeathMoveResult OnParentDeath( Mobile parent )
|
||||
{
|
||||
Rider = null;//get off, move to pack
|
||||
|
||||
return DeathMoveResult.RemainEquiped;
|
||||
}
|
||||
|
||||
public static void Dismount( Mobile m )
|
||||
{
|
||||
IMount mount = m.Mount;
|
||||
|
||||
if ( mount != null )
|
||||
mount.Rider = null;
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public Mobile Rider
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Rider;
|
||||
}
|
||||
set
|
||||
{
|
||||
if ( value != m_Rider )
|
||||
{
|
||||
if ( value == null )
|
||||
{
|
||||
Internalize();
|
||||
UnmountMe();
|
||||
|
||||
RemoveFollowers();
|
||||
m_Rider = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_Rider != null )
|
||||
Dismount( m_Rider );
|
||||
|
||||
Dismount( value );
|
||||
|
||||
RemoveFollowers();
|
||||
m_Rider = value;
|
||||
AddFollowers();
|
||||
|
||||
MountMe();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void UnmountMe()
|
||||
{
|
||||
Container bp = m_Rider.Backpack;
|
||||
|
||||
ItemID = m_RegularID;
|
||||
Layer = Layer.Invalid;
|
||||
Movable = true;
|
||||
|
||||
if ( Hue == 0x4001 )
|
||||
Hue = 0;
|
||||
|
||||
if ( bp != null )
|
||||
{
|
||||
bp.DropItem( this );
|
||||
}
|
||||
else
|
||||
{
|
||||
Point3D loc = m_Rider.Location;
|
||||
Map map = m_Rider.Map;
|
||||
|
||||
if ( map == null || map == Map.Internal )
|
||||
{
|
||||
loc = m_Rider.LogoutLocation;
|
||||
map = m_Rider.LogoutMap;
|
||||
}
|
||||
|
||||
MoveToWorld( loc, map );
|
||||
}
|
||||
}
|
||||
|
||||
public void MountMe()
|
||||
{
|
||||
ItemID = m_MountedID;
|
||||
Layer = Layer.Mount;
|
||||
Movable = false;
|
||||
|
||||
if ( Hue == 0 )
|
||||
Hue = 0x4001;
|
||||
|
||||
ProcessDelta();
|
||||
m_Rider.ProcessDelta();
|
||||
m_Rider.EquipItem( this );
|
||||
m_Rider.ProcessDelta();
|
||||
ProcessDelta();
|
||||
}
|
||||
|
||||
public IMount Mount
|
||||
{
|
||||
get
|
||||
{
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public static void StopMounting( Mobile mob )
|
||||
{
|
||||
if ( mob.Spell is EtherealSpell )
|
||||
((EtherealSpell)mob.Spell).Stop();
|
||||
}
|
||||
|
||||
public void OnRiderDamaged( int amount, Mobile from, bool willKill )
|
||||
{
|
||||
}
|
||||
|
||||
private class EtherealSpell : Spell
|
||||
{
|
||||
private static SpellInfo m_Info = new SpellInfo( "Ethereal Mount", "", SpellCircle.Second, 230 );
|
||||
|
||||
private EtherealMount m_Mount;
|
||||
private Mobile m_Rider;
|
||||
|
||||
public EtherealSpell( EtherealMount mount, Mobile rider ) : base( rider, null, m_Info )
|
||||
{
|
||||
m_Rider = rider;
|
||||
m_Mount = mount;
|
||||
}
|
||||
|
||||
public override bool ClearHandsOnCast{ get{ return false; } }
|
||||
public override bool RevealOnCast{ get{ return false; } }
|
||||
|
||||
public override TimeSpan GetCastRecovery()
|
||||
{
|
||||
return TimeSpan.Zero;
|
||||
}
|
||||
|
||||
public override TimeSpan GetCastDelay()
|
||||
{
|
||||
return TimeSpan.FromSeconds( ( (m_Mount.IsDonationItem && RewardSystem.GetRewardLevel( m_Rider ) < 3 )? 12.5 : 5.0 ) );
|
||||
}
|
||||
|
||||
public override int GetMana()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override bool ConsumeReagents()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool CheckFizzle()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool m_Stop;
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
m_Stop = true;
|
||||
Disturb( DisturbType.Hurt, false, false );
|
||||
}
|
||||
|
||||
public override bool CheckDisturb( DisturbType type, bool checkFirst, bool resistable )
|
||||
{
|
||||
if ( type == DisturbType.EquipRequest || type == DisturbType.UseRequest/* || type == DisturbType.Hurt*/ )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void DoHurtFizzle()
|
||||
{
|
||||
if ( !m_Stop )
|
||||
base.DoHurtFizzle();
|
||||
}
|
||||
|
||||
public override void DoFizzle()
|
||||
{
|
||||
if ( !m_Stop )
|
||||
base.DoFizzle();
|
||||
}
|
||||
|
||||
public override void OnDisturb( DisturbType type, bool message )
|
||||
{
|
||||
if ( message && !m_Stop )
|
||||
Caster.SendLocalizedMessage( 1049455 ); // You have been disrupted while attempting to summon your ethereal mount!
|
||||
|
||||
//m_Mount.UnmountMe();
|
||||
}
|
||||
|
||||
public override void OnCast()
|
||||
{
|
||||
if ( !m_Mount.Deleted && m_Mount.Rider == null && m_Mount.Validate( m_Rider ) )
|
||||
m_Mount.Rider = m_Rider;
|
||||
|
||||
FinishSequence();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class EtherealHorse : EtherealMount
|
||||
{
|
||||
public override int LabelNumber{ get{ return 1041298; } } // Ethereal Horse Statuette
|
||||
|
||||
[Constructable]
|
||||
public EtherealHorse() : base( 0x20DD, 0x3EAA )
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealHorse( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( Name == "an ethereal horse" )
|
||||
Name = null;
|
||||
|
||||
if ( ItemID == 0x2124 )
|
||||
ItemID = 0x20DD;
|
||||
}
|
||||
}
|
||||
|
||||
public class EtherealLlama : EtherealMount
|
||||
{
|
||||
public override int LabelNumber{ get{ return 1041300; } } // Ethereal Llama Statuette
|
||||
|
||||
[Constructable]
|
||||
public EtherealLlama() : base( 0x20F6, 0x3EAB )
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealLlama( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( Name == "an ethereal llama" )
|
||||
Name = null;
|
||||
}
|
||||
}
|
||||
|
||||
public class EtherealOstard : EtherealMount
|
||||
{
|
||||
public override int LabelNumber{ get{ return 1041299; } } // Ethereal Ostard Statuette
|
||||
|
||||
[Constructable]
|
||||
public EtherealOstard() : base( 0x2135, 0x3EAC )
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealOstard( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( Name == "an ethereal ostard" )
|
||||
Name = null;
|
||||
}
|
||||
}
|
||||
|
||||
public class EtherealRidgeback : EtherealMount
|
||||
{
|
||||
public override int LabelNumber{ get{ return 1049747; } } // Ethereal Ridgeback Statuette
|
||||
|
||||
[Constructable]
|
||||
public EtherealRidgeback() : base( 0x2615, 0x3E9A )
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealRidgeback( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( Name == "an ethereal ridgeback" )
|
||||
Name = null;
|
||||
}
|
||||
}
|
||||
|
||||
public class EtherealUnicorn : EtherealMount
|
||||
{
|
||||
public override int LabelNumber{ get{ return 1049745; } } // Ethereal Unicorn Statuette
|
||||
|
||||
[Constructable]
|
||||
public EtherealUnicorn() : base( 0x25CE, 0x3E9B )
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealUnicorn( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( Name == "an ethereal unicorn" )
|
||||
Name = null;
|
||||
}
|
||||
}
|
||||
|
||||
public class EtherealBeetle : EtherealMount
|
||||
{
|
||||
public override int LabelNumber{ get{ return 1049748; } } // Ethereal Beetle Statuette
|
||||
|
||||
[Constructable]
|
||||
public EtherealBeetle() : base( 0x260F, 0x3E97 )
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealBeetle( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( Name == "an ethereal beetle" )
|
||||
Name = null;
|
||||
}
|
||||
}
|
||||
|
||||
public class EtherealKirin : EtherealMount
|
||||
{
|
||||
public override int LabelNumber{ get{ return 1049746; } } // Ethereal Ki-Rin Statuette
|
||||
|
||||
[Constructable]
|
||||
public EtherealKirin() : base( 0x25A0, 0x3E9C )
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealKirin( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( Name == "an ethereal kirin" )
|
||||
Name = null;
|
||||
}
|
||||
}
|
||||
|
||||
public class EtherealSwampDragon : EtherealMount
|
||||
{
|
||||
public override int LabelNumber{ get{ return 1049749; } } // Ethereal Swamp Dragon Statuette
|
||||
|
||||
[Constructable]
|
||||
public EtherealSwampDragon() : base( 0x2619, 0x3E98 )
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealSwampDragon( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( Name == "an ethereal swamp dragon" )
|
||||
Name = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
80
Scripts/Mobiles/Animals/Mounts/FireSteed.cs
Normal file
80
Scripts/Mobiles/Animals/Mounts/FireSteed.cs
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a fire steed corpse" )]
|
||||
public class FireSteed : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public FireSteed() : this( "a fire steed" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public FireSteed( string name ) : base( name, 0xBE, 0x3E9E, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
BaseSoundID = 0xA8;
|
||||
|
||||
SetStr( 376, 400 );
|
||||
SetDex( 91, 120 );
|
||||
SetInt( 291, 300 );
|
||||
|
||||
SetHits( 226, 240 );
|
||||
|
||||
SetDamage( 11, 30 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 20 );
|
||||
SetDamageType( ResistanceType.Fire, 80 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 30, 40 );
|
||||
SetResistance( ResistanceType.Fire, 70, 80 );
|
||||
SetResistance( ResistanceType.Cold, 20, 30 );
|
||||
SetResistance( ResistanceType.Poison, 30, 40 );
|
||||
SetResistance( ResistanceType.Energy, 30, 40 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 100.0, 120.0 );
|
||||
SetSkill( SkillName.Tactics, 100.0 );
|
||||
SetSkill( SkillName.Wrestling, 100.0 );
|
||||
|
||||
Fame = 20000;
|
||||
Karma = -20000;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 2;
|
||||
MinTameSkill = 106.0;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
PackItem( new SulfurousAsh( Utility.RandomMinMax( 151, 300 ) ) );
|
||||
PackItem( new Ruby( Utility.RandomMinMax( 16, 30 ) ) );
|
||||
}
|
||||
|
||||
public override bool HasBreath{ get{ return true; } } // fire breath enabled
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Daemon | PackInstinct.Equine; } }
|
||||
|
||||
public FireSteed( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( BaseSoundID <= 0 )
|
||||
BaseSoundID = 0xA8;
|
||||
}
|
||||
}
|
||||
}
|
||||
68
Scripts/Mobiles/Animals/Mounts/ForestOstard.cs
Normal file
68
Scripts/Mobiles/Animals/Mounts/ForestOstard.cs
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "an ostard corpse" )]
|
||||
public class ForestOstard : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public ForestOstard() : this( "a forest ostard" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public ForestOstard( string name ) : base( name, 0xDB, 0x3EA5, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Hue = Utility.RandomSlimeHue() | 0x8000;
|
||||
|
||||
BaseSoundID = 0x270;
|
||||
|
||||
SetStr( 94, 170 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 6, 10 );
|
||||
|
||||
SetHits( 71, 88 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 8, 14 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 27.1, 32.0 );
|
||||
SetSkill( SkillName.Tactics, 29.3, 44.0 );
|
||||
SetSkill( SkillName.Wrestling, 29.3, 44.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = 0;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 29.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 3; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Ostard; } }
|
||||
|
||||
public ForestOstard( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Scripts/Mobiles/Animals/Mounts/FrenziedOstard.cs
Normal file
71
Scripts/Mobiles/Animals/Mounts/FrenziedOstard.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "an ostard corpse" )]
|
||||
public class FrenziedOstard : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public FrenziedOstard() : this( "a frenzied ostard" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public FrenziedOstard( string name ) : base( name, 0xDA, 0x3EA4, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Hue = Utility.RandomHairHue() | 0x8000;
|
||||
|
||||
BaseSoundID = 0x275;
|
||||
|
||||
SetStr( 94, 170 );
|
||||
SetDex( 96, 115 );
|
||||
SetInt( 6, 10 );
|
||||
|
||||
SetHits( 71, 110 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 11, 17 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 25, 30 );
|
||||
SetResistance( ResistanceType.Fire, 10, 15 );
|
||||
SetResistance( ResistanceType.Poison, 20, 25 );
|
||||
SetResistance( ResistanceType.Energy, 20, 25 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 75.1, 80.0 );
|
||||
SetSkill( SkillName.Tactics, 79.3, 94.0 );
|
||||
SetSkill( SkillName.Wrestling, 79.3, 94.0 );
|
||||
|
||||
Fame = 1500;
|
||||
Karma = -1500;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 77.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 3; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Fish | FoodType.Eggs | FoodType.FruitsAndVegies; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Ostard; } }
|
||||
|
||||
public FrenziedOstard( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
61
Scripts/Mobiles/Animals/Mounts/HellSteed.cs
Normal file
61
Scripts/Mobiles/Animals/Mounts/HellSteed.cs
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a hellsteed corpse" )]
|
||||
public class HellSteed : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public HellSteed() : this( "a hellsteed" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public HellSteed( string name ) : base( name, 793, 0x3EBB, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
SetStr( 201, 210 );
|
||||
SetDex( 101, 110 );
|
||||
SetInt( 101, 115 );
|
||||
|
||||
SetHits( 201, 220 );
|
||||
|
||||
SetDamage( 20, 24 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 25 );
|
||||
SetDamageType( ResistanceType.Fire, 75 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 60, 70 );
|
||||
SetResistance( ResistanceType.Fire, 90 );
|
||||
SetResistance( ResistanceType.Poison, 100 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 90.1, 110.0 );
|
||||
SetSkill( SkillName.Tactics, 50.0 );
|
||||
SetSkill( SkillName.Wrestling, 90.1, 110.0 );
|
||||
|
||||
Fame = 0;
|
||||
Karma = 0;
|
||||
}
|
||||
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
// TODO: "This creature can breath chaos."
|
||||
|
||||
public HellSteed( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
175
Scripts/Mobiles/Animals/Mounts/Hiryu.cs
Normal file
175
Scripts/Mobiles/Animals/Mounts/Hiryu.cs
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a hiryu corpse" )]
|
||||
public class Hiryu : BaseMount
|
||||
{
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
return WeaponAbility.Dismount;
|
||||
}
|
||||
|
||||
public override bool StatLossAfterTame{ get{ return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Hiryu() : base( "a hiryu", 243, 0x3E94, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
if ( 0.05 > Utility.RandomDouble() )
|
||||
Hue = Utility.RandomList( 0x32, 0x37, 0x3C, 0x3D, 0x123, 0x294, 0x295, 0x47F, 0x482, 0x487, 0x48D, 0x490, 0x495, 0x55C, 0x8A0, 0x899, 0x89F ) | 0x8000;
|
||||
|
||||
SetStr( 1201, 1410 );
|
||||
SetDex( 171, 270 );
|
||||
SetInt( 301, 325 );
|
||||
|
||||
SetHits( 901, 1100 );
|
||||
SetMana( 60 );
|
||||
|
||||
SetDamage( 20, 30 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 55, 70 );
|
||||
SetResistance( ResistanceType.Fire, 70, 90 );
|
||||
SetResistance( ResistanceType.Cold, 15, 25 );
|
||||
SetResistance( ResistanceType.Poison, 40, 50 );
|
||||
SetResistance( ResistanceType.Energy, 40, 50 );
|
||||
|
||||
SetSkill( SkillName.Anatomy, 75.1, 80.0 );
|
||||
SetSkill( SkillName.MagicResist, 85.1, 100.0 );
|
||||
SetSkill( SkillName.Tactics, 100.1, 110.0 );
|
||||
SetSkill( SkillName.Wrestling, 100.1, 120.0 );
|
||||
|
||||
Fame = 18000;
|
||||
Karma = -18000;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 4;
|
||||
MinTameSkill = 98.7;
|
||||
|
||||
if ( Utility.RandomDouble() < .33 )
|
||||
PackItem( Engines.Plants.Seed.RandomBonsaiSeed() );
|
||||
}
|
||||
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x4FE;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x4FD;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x4FC;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x4FF;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x4FB;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.FilthyRich, 3 );
|
||||
AddLoot( LootPack.Gems, 4 );
|
||||
}
|
||||
|
||||
public override int TreasureMapLevel{ get{ return 5; } }
|
||||
public override int Meat{ get{ return 16; } }
|
||||
public override int Hides{ get{ return 60; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override bool CanAngerOnTame { get { return true; } }
|
||||
|
||||
public override void OnGaveMeleeAttack( Mobile defender )
|
||||
{
|
||||
base.OnGaveMeleeAttack( defender );
|
||||
|
||||
if ( 0.1 > Utility.RandomDouble() )
|
||||
{
|
||||
/* Grasping Claw
|
||||
* Start cliloc: 1070836
|
||||
* Effect: Physical resistance -15% for 5 seconds
|
||||
* End cliloc: 1070838
|
||||
* Effect: Type: "3" - From: "0x57D4F5B" (player) - To: "0x0" - ItemId: "0x37B9" - ItemIdName: "glow" - FromLocation: "(1149 808, 32)" - ToLocation: "(1149 808, 32)" - Speed: "10" - Duration: "5" - FixedDirection: "True" - Explode: "False"
|
||||
*/
|
||||
|
||||
ExpireTimer timer = (ExpireTimer)m_Table[defender];
|
||||
|
||||
if ( timer != null )
|
||||
{
|
||||
timer.DoExpire();
|
||||
defender.SendLocalizedMessage( 1070837 ); // The creature lands another blow in your weakened state.
|
||||
}
|
||||
else
|
||||
defender.SendLocalizedMessage( 1070836 ); // The blow from the creature's claws has made you more susceptible to physical attacks.
|
||||
|
||||
int effect = -(defender.PhysicalResistance * 15 / 100);
|
||||
|
||||
ResistanceMod mod = new ResistanceMod( ResistanceType.Physical, effect );
|
||||
|
||||
defender.FixedEffect( 0x37B9, 10, 5 );
|
||||
defender.AddResistanceMod( mod );
|
||||
|
||||
timer = new ExpireTimer( defender, mod, TimeSpan.FromSeconds( 5.0 ) );
|
||||
timer.Start();
|
||||
m_Table[defender] = timer;
|
||||
}
|
||||
}
|
||||
|
||||
private static Hashtable m_Table = new Hashtable();
|
||||
|
||||
private class ExpireTimer : Timer
|
||||
{
|
||||
private Mobile m_Mobile;
|
||||
private ResistanceMod m_Mod;
|
||||
|
||||
public ExpireTimer( Mobile m, ResistanceMod mod, TimeSpan delay ) : base( delay )
|
||||
{
|
||||
m_Mobile = m;
|
||||
m_Mod = mod;
|
||||
Priority = TimerPriority.TwoFiftyMS;
|
||||
}
|
||||
|
||||
public void DoExpire()
|
||||
{
|
||||
m_Mobile.RemoveResistanceMod( m_Mod );
|
||||
Stop();
|
||||
m_Table.Remove( m_Mobile );
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
m_Mobile.SendLocalizedMessage( 1070838 ); // Your resistance to physical attacks has returned.
|
||||
DoExpire();
|
||||
}
|
||||
}
|
||||
|
||||
public Hiryu( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
79
Scripts/Mobiles/Animals/Mounts/Horse.cs
Normal file
79
Scripts/Mobiles/Animals/Mounts/Horse.cs
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a horse corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.BrownHorse", "Server.Mobiles.DirtyHorse", "Server.Mobiles.GrayHorse", "Server.Mobiles.TanHorse" )]
|
||||
public class Horse : BaseMount
|
||||
{
|
||||
private static int[] m_IDs = new int[]
|
||||
{
|
||||
0xC8, 0x3E9F,
|
||||
0xE2, 0x3EA0,
|
||||
0xE4, 0x3EA1,
|
||||
0xCC, 0x3EA2
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public Horse() : this( "a horse" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Horse( string name ) : base( name, 0xE2, 0x3EA0, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
int random = Utility.Random( 4 );
|
||||
|
||||
Body = m_IDs[random * 2];
|
||||
ItemID = m_IDs[random * 2 + 1];
|
||||
BaseSoundID = 0xA8;
|
||||
|
||||
SetStr( 22, 98 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 6, 10 );
|
||||
|
||||
SetHits( 28, 45 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 4 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 29.3, 44.0 );
|
||||
SetSkill( SkillName.Wrestling, 29.3, 44.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 300;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 29.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 3; } }
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Horse( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
124
Scripts/Mobiles/Animals/Mounts/Kirin.cs
Normal file
124
Scripts/Mobiles/Animals/Mounts/Kirin.cs
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a ki-rin corpse" )]
|
||||
public class Kirin : BaseMount
|
||||
{
|
||||
public override bool AllowFemaleRider{ get{ return false; } }
|
||||
public override bool AllowFemaleTamer{ get{ return false; } }
|
||||
|
||||
public override bool InitialInnocent{ get{ return true; } }
|
||||
|
||||
public override TimeSpan MountAbilityDelay { get { return TimeSpan.FromHours( 1.0 ); } }
|
||||
|
||||
public override void OnDisallowedRider( Mobile m )
|
||||
{
|
||||
m.SendLocalizedMessage( 1042319 ); // The Ki-Rin refuses your attempts to mount it.
|
||||
}
|
||||
|
||||
public override bool DoMountAbility( int damage, Mobile attacker )
|
||||
{
|
||||
if( Rider == null || attacker == null ) //sanity
|
||||
return false;
|
||||
|
||||
if( (Rider.Hits - damage) < 30 && Rider.Map == attacker.Map && Rider.InRange( attacker, 18 ) ) //Range and map checked here instead of other base fuction because of abiliites that don't need to check this
|
||||
{
|
||||
attacker.BoltEffect( 0 );
|
||||
// 35~100 damage, unresistable, by the Ki-rin.
|
||||
attacker.Damage( Utility.RandomMinMax( 35, 100 ), this, false ); //Don't inform mount about this damage, Still unsure wether or not it's flagged as the mount doing damage or the player. If changed to player, without the extra bool it'd be an infinite loop
|
||||
|
||||
Rider.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1042534 ); // Your mount calls down the forces of nature on your opponent.
|
||||
Rider.FixedParticles( 0, 0, 0, 0x13A7, EffectLayer.Waist );
|
||||
Rider.PlaySound( 0xA9 ); // Ki-rin's whinny.
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Kirin() : this( "a ki-rin" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Kirin( string name ) : base( name, 132, 0x3EAD, AIType.AI_Mage, FightMode.Evil, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
BaseSoundID = 0x3C5;
|
||||
|
||||
SetStr( 296, 325 );
|
||||
SetDex( 86, 105 );
|
||||
SetInt( 186, 225 );
|
||||
|
||||
SetHits( 191, 210 );
|
||||
|
||||
SetDamage( 16, 22 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 70 );
|
||||
SetDamageType( ResistanceType.Fire, 10 );
|
||||
SetDamageType( ResistanceType.Cold, 10 );
|
||||
SetDamageType( ResistanceType.Energy, 10 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 55, 65 );
|
||||
SetResistance( ResistanceType.Fire, 35, 45 );
|
||||
SetResistance( ResistanceType.Cold, 25, 35 );
|
||||
SetResistance( ResistanceType.Poison, 25, 35 );
|
||||
SetResistance( ResistanceType.Energy, 25, 35 );
|
||||
|
||||
SetSkill( SkillName.EvalInt, 80.1, 90.0 );
|
||||
SetSkill( SkillName.Magery, 60.4, 100.0 );
|
||||
SetSkill( SkillName.Meditation, 90.1, 100.0 );
|
||||
SetSkill( SkillName.MagicResist, 85.3, 100.0 );
|
||||
SetSkill( SkillName.Tactics, 20.1, 22.5 );
|
||||
SetSkill( SkillName.Wrestling, 80.5, 92.5 );
|
||||
|
||||
Fame = 9000;
|
||||
Karma = 9000;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 2;
|
||||
MinTameSkill = 95.1;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Rich );
|
||||
AddLoot( LootPack.LowScrolls );
|
||||
AddLoot( LootPack.Potions );
|
||||
}
|
||||
|
||||
public override OppositionGroup OppositionGroup
|
||||
{
|
||||
get{ return OppositionGroup.FeyAndUndead; }
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 3; } }
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override HideType HideType{ get{ return HideType.Horned; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Kirin( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 1 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( version == 0 )
|
||||
AI = AIType.AI_Mage;
|
||||
}
|
||||
}
|
||||
}
|
||||
183
Scripts/Mobiles/Animals/Mounts/LesserHiryu.cs
Normal file
183
Scripts/Mobiles/Animals/Mounts/LesserHiryu.cs
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a hiryu corpse" )]
|
||||
public class LesserHiryu : BaseMount
|
||||
{
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
return WeaponAbility.Dismount;
|
||||
}
|
||||
|
||||
public override bool StatLossAfterTame{ get{ return true; } }
|
||||
|
||||
[Constructable]
|
||||
public LesserHiryu() : base( "a lesser hiryu", 243, 0x3E94, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
if ( 0.05 > Utility.RandomDouble() )
|
||||
Hue = Utility.RandomList( 0x32, 0x37, 0x3C, 0x3D, 0x123, 0x294, 0x295, 0x47F, 0x482, 0x487, 0x48D, 0x490, 0x495, 0x55C, 0x8A0, 0x899, 0x89F ) | 0x8000;
|
||||
|
||||
SetStr( 301, 410 );
|
||||
SetDex( 171, 270 );
|
||||
SetInt( 301, 325 );
|
||||
|
||||
SetHits( 401, 600 );
|
||||
SetMana( 60 );
|
||||
|
||||
SetDamage( 18, 23 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 45, 70 );
|
||||
SetResistance( ResistanceType.Fire, 60, 80 );
|
||||
SetResistance( ResistanceType.Cold, 5, 15 );
|
||||
SetResistance( ResistanceType.Poison, 30, 40 );
|
||||
SetResistance( ResistanceType.Energy, 30, 40 );
|
||||
|
||||
SetSkill( SkillName.Anatomy, 75.1, 80.0 );
|
||||
SetSkill( SkillName.MagicResist, 85.1, 100.0 );
|
||||
SetSkill( SkillName.Tactics, 100.1, 110.0 );
|
||||
SetSkill( SkillName.Wrestling, 100.1, 120.0 );
|
||||
|
||||
Fame = 18000;
|
||||
Karma = -18000;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 3;
|
||||
MinTameSkill = 98.7;
|
||||
|
||||
if ( Utility.RandomDouble() < .33 )
|
||||
PackItem( Engines.Plants.Seed.RandomBonsaiSeed() );
|
||||
}
|
||||
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x4FE;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x4FD;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x4FC;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x4FF;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x4FB;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.FilthyRich, 2 );
|
||||
AddLoot( LootPack.Gems, 4 );
|
||||
}
|
||||
|
||||
public override double GetControlChance( Mobile m )
|
||||
{
|
||||
if ( m.Skills.Bushido.Value >= 90.0 )
|
||||
return 1.0;
|
||||
|
||||
return base.GetControlChance( m );
|
||||
}
|
||||
|
||||
public override int TreasureMapLevel{ get{ return 3; } }
|
||||
public override int Meat{ get{ return 16; } }
|
||||
public override int Hides{ get{ return 60; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override bool CanAngerOnTame { get { return true; } }
|
||||
|
||||
public override void OnGaveMeleeAttack( Mobile defender )
|
||||
{
|
||||
base.OnGaveMeleeAttack( defender );
|
||||
|
||||
if ( 0.1 > Utility.RandomDouble() )
|
||||
{
|
||||
/* Grasping Claw
|
||||
* Start cliloc: 1070836
|
||||
* Effect: Physical resistance -15% for 5 seconds
|
||||
* End cliloc: 1070838
|
||||
* Effect: Type: "3" - From: "0x57D4F5B" (player) - To: "0x0" - ItemId: "0x37B9" - ItemIdName: "glow" - FromLocation: "(1149 808, 32)" - ToLocation: "(1149 808, 32)" - Speed: "10" - Duration: "5" - FixedDirection: "True" - Explode: "False"
|
||||
*/
|
||||
|
||||
ExpireTimer timer = (ExpireTimer)m_Table[defender];
|
||||
|
||||
if ( timer != null )
|
||||
{
|
||||
timer.DoExpire();
|
||||
defender.SendLocalizedMessage( 1070837 ); // The creature lands another blow in your weakened state.
|
||||
}
|
||||
else
|
||||
defender.SendLocalizedMessage( 1070836 ); // The blow from the creature's claws has made you more susceptible to physical attacks.
|
||||
|
||||
int effect = -(defender.PhysicalResistance * 15 / 100);
|
||||
|
||||
ResistanceMod mod = new ResistanceMod( ResistanceType.Physical, effect );
|
||||
|
||||
defender.FixedEffect( 0x37B9, 10, 5 );
|
||||
defender.AddResistanceMod( mod );
|
||||
|
||||
timer = new ExpireTimer( defender, mod, TimeSpan.FromSeconds( 5.0 ) );
|
||||
timer.Start();
|
||||
m_Table[defender] = timer;
|
||||
}
|
||||
}
|
||||
|
||||
private static Hashtable m_Table = new Hashtable();
|
||||
|
||||
private class ExpireTimer : Timer
|
||||
{
|
||||
private Mobile m_Mobile;
|
||||
private ResistanceMod m_Mod;
|
||||
|
||||
public ExpireTimer( Mobile m, ResistanceMod mod, TimeSpan delay ) : base( delay )
|
||||
{
|
||||
m_Mobile = m;
|
||||
m_Mod = mod;
|
||||
Priority = TimerPriority.TwoFiftyMS;
|
||||
}
|
||||
|
||||
public void DoExpire()
|
||||
{
|
||||
m_Mobile.RemoveResistanceMod( m_Mod );
|
||||
Stop();
|
||||
m_Table.Remove( m_Mobile );
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
m_Mobile.SendLocalizedMessage( 1070838 ); // Your resistance to physical attacks has returned.
|
||||
DoExpire();
|
||||
}
|
||||
}
|
||||
|
||||
public LesserHiryu( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
123
Scripts/Mobiles/Animals/Mounts/Nightmare.cs
Normal file
123
Scripts/Mobiles/Animals/Mounts/Nightmare.cs
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a nightmare corpse" )]
|
||||
public class Nightmare : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public Nightmare() : this( "a nightmare" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Nightmare( string name ) : base( name, 0x74, 0x3EA7, AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
BaseSoundID = 0xA8;
|
||||
|
||||
SetStr( 496, 525 );
|
||||
SetDex( 86, 105 );
|
||||
SetInt( 86, 125 );
|
||||
|
||||
SetHits( 298, 315 );
|
||||
|
||||
SetDamage( 16, 22 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 40 );
|
||||
SetDamageType( ResistanceType.Fire, 40 );
|
||||
SetDamageType( ResistanceType.Energy, 20 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 55, 65 );
|
||||
SetResistance( ResistanceType.Fire, 30, 40 );
|
||||
SetResistance( ResistanceType.Cold, 30, 40 );
|
||||
SetResistance( ResistanceType.Poison, 30, 40 );
|
||||
SetResistance( ResistanceType.Energy, 20, 30 );
|
||||
|
||||
SetSkill( SkillName.EvalInt, 10.4, 50.0 );
|
||||
SetSkill( SkillName.Magery, 10.4, 50.0 );
|
||||
SetSkill( SkillName.MagicResist, 85.3, 100.0 );
|
||||
SetSkill( SkillName.Tactics, 97.6, 100.0 );
|
||||
SetSkill( SkillName.Wrestling, 80.5, 92.5 );
|
||||
|
||||
Fame = 14000;
|
||||
Karma = -14000;
|
||||
|
||||
VirtualArmor = 60;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 2;
|
||||
MinTameSkill = 95.1;
|
||||
|
||||
switch ( Utility.Random( 3 ) )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
BodyValue = 116;
|
||||
ItemID = 16039;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
BodyValue = 178;
|
||||
ItemID = 16041;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
BodyValue = 179;
|
||||
ItemID = 16055;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
PackItem( new SulfurousAsh( Utility.RandomMinMax( 3, 5 ) ) );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Rich );
|
||||
AddLoot( LootPack.Average );
|
||||
AddLoot( LootPack.LowScrolls );
|
||||
AddLoot( LootPack.Potions );
|
||||
}
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
if ( !Controlled )
|
||||
return 0x16A;
|
||||
|
||||
return base.GetAngerSound();
|
||||
}
|
||||
|
||||
public override bool HasBreath{ get{ return true; } } // fire breath enabled
|
||||
public override int Meat{ get{ return 5; } }
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override HideType HideType{ get{ return HideType.Barbed; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override bool CanAngerOnTame { get { return true; } }
|
||||
|
||||
public Nightmare( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( BaseSoundID == 0x16A )
|
||||
BaseSoundID = 0xA8;
|
||||
}
|
||||
}
|
||||
}
|
||||
70
Scripts/Mobiles/Animals/Mounts/RidableLlama.cs
Normal file
70
Scripts/Mobiles/Animals/Mounts/RidableLlama.cs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a llama corpse" )]
|
||||
public class RidableLlama : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public RidableLlama() : this( "a ridable llama" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public RidableLlama( string name ) : base( name, 0xDC, 0x3EA6, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
BaseSoundID = 0x3F3;
|
||||
|
||||
SetStr( 21, 49 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 16, 30 );
|
||||
|
||||
SetHits( 15, 27 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 5 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 10, 15 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
SetResistance( ResistanceType.Energy, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
|
||||
SetSkill( SkillName.Tactics, 19.2, 29.0 );
|
||||
SetSkill( SkillName.Wrestling, 19.2, 29.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 29.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public RidableLlama( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
76
Scripts/Mobiles/Animals/Mounts/Ridgeback.cs
Normal file
76
Scripts/Mobiles/Animals/Mounts/Ridgeback.cs
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a ridgeback corpse" )]
|
||||
public class Ridgeback : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public Ridgeback() : this( "a ridgeback" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Ridgeback( string name ) : base( name, 187, 0x3EBA, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
BaseSoundID = 0x3F3;
|
||||
|
||||
SetStr( 58, 100 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 16, 30 );
|
||||
|
||||
SetHits( 41, 54 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 5 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 25 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
SetResistance( ResistanceType.Energy, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.3, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 29.3, 44.0 );
|
||||
SetSkill( SkillName.Wrestling, 35.1, 45.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 83.1;
|
||||
}
|
||||
|
||||
public override double GetControlChance( Mobile m )
|
||||
{
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Ridgeback( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
76
Scripts/Mobiles/Animals/Mounts/SavageRidgeback.cs
Normal file
76
Scripts/Mobiles/Animals/Mounts/SavageRidgeback.cs
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a savage ridgeback corpse" )]
|
||||
public class SavageRidgeback : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public SavageRidgeback() : this( "a savage ridgeback" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SavageRidgeback( string name ) : base( name, 188, 0x3EB8, AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
BaseSoundID = 0x3F3;
|
||||
|
||||
SetStr( 58, 100 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 16, 30 );
|
||||
|
||||
SetHits( 41, 54 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 3, 5 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
SetResistance( ResistanceType.Fire, 10, 15 );
|
||||
SetResistance( ResistanceType.Cold, 15, 20 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.3, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 29.3, 44.0 );
|
||||
SetSkill( SkillName.Wrestling, 35.1, 45.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 83.1;
|
||||
}
|
||||
|
||||
public override double GetControlChance( Mobile m )
|
||||
{
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public SavageRidgeback( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
73
Scripts/Mobiles/Animals/Mounts/ScaledSwampDragon.cs
Normal file
73
Scripts/Mobiles/Animals/Mounts/ScaledSwampDragon.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a swamp dragon corpse" )]
|
||||
public class ScaledSwampDragon : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public ScaledSwampDragon() : this( "a swamp dragon" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public ScaledSwampDragon( string name ) : base( name, 0x31F, 0x3EBE, AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
SetStr( 201, 300 );
|
||||
SetDex( 66, 85 );
|
||||
SetInt( 61, 100 );
|
||||
|
||||
SetHits( 121, 180 );
|
||||
|
||||
SetDamage( 3, 4 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 75 );
|
||||
SetDamageType( ResistanceType.Poison, 25 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 35, 40 );
|
||||
SetResistance( ResistanceType.Fire, 20, 30 );
|
||||
SetResistance( ResistanceType.Cold, 20, 40 );
|
||||
SetResistance( ResistanceType.Poison, 20, 30 );
|
||||
SetResistance( ResistanceType.Energy, 30, 40 );
|
||||
|
||||
SetSkill( SkillName.Anatomy, 45.1, 55.0 );
|
||||
SetSkill( SkillName.MagicResist, 45.1, 55.0 );
|
||||
SetSkill( SkillName.Tactics, 45.1, 55.0 );
|
||||
SetSkill( SkillName.Wrestling, 45.1, 55.0 );
|
||||
|
||||
Fame = 2000;
|
||||
Karma = -2000;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 93.9;
|
||||
}
|
||||
|
||||
public override double GetControlChance( Mobile m )
|
||||
{
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
public override bool AutoDispel{ get{ return !Controlled; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
|
||||
public ScaledSwampDragon( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
41
Scripts/Mobiles/Animals/Mounts/SeaHorse.cs
Normal file
41
Scripts/Mobiles/Animals/Mounts/SeaHorse.cs
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a sea horse corpse" )]
|
||||
public class SeaHorse : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public SeaHorse() : this( "a sea horse" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SeaHorse( string name ) : base( name, 0x90, 0x3EB3, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
InitStats( Utility.Random( 50, 30 ), Utility.Random( 50, 30 ), 10 );
|
||||
Skills[SkillName.MagicResist].Base = 25.0 + (Utility.RandomDouble() * 5.0);
|
||||
Skills[SkillName.Wrestling].Base = 35.0 + (Utility.RandomDouble() * 10.0);
|
||||
Skills[SkillName.Tactics].Base = 30.0 + (Utility.RandomDouble() * 15.0);
|
||||
}
|
||||
|
||||
public SeaHorse( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
45
Scripts/Mobiles/Animals/Mounts/SilverSteed.cs
Normal file
45
Scripts/Mobiles/Animals/Mounts/SilverSteed.cs
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a silver steed corpse" )]
|
||||
public class SilverSteed : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public SilverSteed() : this( "a silver steed" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SilverSteed( string name ) : base( name, 0x75, 0x3EA8, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
InitStats( Utility.Random( 50, 30 ), Utility.Random( 50, 30 ), 10 );
|
||||
Skills[SkillName.MagicResist].Base = 25.0 + (Utility.RandomDouble() * 5.0);
|
||||
Skills[SkillName.Wrestling].Base = 35.0 + (Utility.RandomDouble() * 10.0);
|
||||
Skills[SkillName.Tactics].Base = 30.0 + (Utility.RandomDouble() * 15.0);
|
||||
|
||||
ControlSlots = 1;
|
||||
Tamable = true;
|
||||
MinTameSkill = 103.1;
|
||||
}
|
||||
|
||||
public SilverSteed( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
73
Scripts/Mobiles/Animals/Mounts/SkeletalMount.cs
Normal file
73
Scripts/Mobiles/Animals/Mounts/SkeletalMount.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "an undead horse corpse" )]
|
||||
public class SkeletalMount : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public SkeletalMount() : this( "a skeletal steed" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SkeletalMount( string name ) : base( name, 793, 0x3EBB, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
SetStr( 91, 100 );
|
||||
SetDex( 46, 55 );
|
||||
SetInt( 46, 60 );
|
||||
|
||||
SetHits( 41, 50 );
|
||||
|
||||
SetDamage( 5, 12 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 50 );
|
||||
SetDamageType( ResistanceType.Cold, 50 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 50, 60 );
|
||||
SetResistance( ResistanceType.Cold, 90, 95 );
|
||||
SetResistance( ResistanceType.Poison, 100 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 95.1, 100.0 );
|
||||
SetSkill( SkillName.Tactics, 50.0 );
|
||||
SetSkill( SkillName.Wrestling, 70.1, 80.0 );
|
||||
|
||||
Fame = 0;
|
||||
Karma = 0;
|
||||
}
|
||||
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
|
||||
public SkeletalMount( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 1 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch( version )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
Name = "a skeletal steed";
|
||||
Tamable = false;
|
||||
MinTameSkill = 0.0;
|
||||
ControlSlots = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
210
Scripts/Mobiles/Animals/Mounts/SwampDragon.cs
Normal file
210
Scripts/Mobiles/Animals/Mounts/SwampDragon.cs
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a swamp dragon corpse" )]
|
||||
public class SwampDragon : BaseMount
|
||||
{
|
||||
private bool m_BardingExceptional;
|
||||
private Mobile m_BardingCrafter;
|
||||
private int m_BardingHP;
|
||||
private bool m_HasBarding;
|
||||
private CraftResource m_BardingResource;
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public Mobile BardingCrafter
|
||||
{
|
||||
get{ return m_BardingCrafter; }
|
||||
set{ m_BardingCrafter = value; InvalidateProperties(); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool BardingExceptional
|
||||
{
|
||||
get{ return m_BardingExceptional; }
|
||||
set{ m_BardingExceptional = value; InvalidateProperties(); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public int BardingHP
|
||||
{
|
||||
get{ return m_BardingHP; }
|
||||
set{ m_BardingHP = value; InvalidateProperties(); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool HasBarding
|
||||
{
|
||||
get{ return m_HasBarding; }
|
||||
set
|
||||
{
|
||||
m_HasBarding = value;
|
||||
|
||||
if ( m_HasBarding )
|
||||
{
|
||||
Hue = CraftResources.GetHue( m_BardingResource );
|
||||
BodyValue = 0x31F;
|
||||
ItemID = 0x3EBE;
|
||||
}
|
||||
else
|
||||
{
|
||||
Hue = 0x851;
|
||||
BodyValue = 0x31A;
|
||||
ItemID = 0x3EBD;
|
||||
}
|
||||
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public CraftResource BardingResource
|
||||
{
|
||||
get{ return m_BardingResource; }
|
||||
set
|
||||
{
|
||||
m_BardingResource = value;
|
||||
|
||||
if ( m_HasBarding )
|
||||
Hue = CraftResources.GetHue( value );
|
||||
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public int BardingMaxHP
|
||||
{
|
||||
get{ return m_BardingExceptional ? 2500 : 1000; }
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SwampDragon() : this( "a swamp dragon" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SwampDragon( string name ) : base( name, 0x31A, 0x3EBD, AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
BaseSoundID = 0x16A;
|
||||
|
||||
SetStr( 201, 300 );
|
||||
SetDex( 66, 85 );
|
||||
SetInt( 61, 100 );
|
||||
|
||||
SetHits( 121, 180 );
|
||||
|
||||
SetDamage( 3, 4 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 75 );
|
||||
SetDamageType( ResistanceType.Poison, 25 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 35, 40 );
|
||||
SetResistance( ResistanceType.Fire, 20, 30 );
|
||||
SetResistance( ResistanceType.Cold, 20, 40 );
|
||||
SetResistance( ResistanceType.Poison, 20, 30 );
|
||||
SetResistance( ResistanceType.Energy, 30, 40 );
|
||||
|
||||
SetSkill( SkillName.Anatomy, 45.1, 55.0 );
|
||||
SetSkill( SkillName.MagicResist, 45.1, 55.0 );
|
||||
SetSkill( SkillName.Tactics, 45.1, 55.0 );
|
||||
SetSkill( SkillName.Wrestling, 45.1, 55.0 );
|
||||
|
||||
Fame = 2000;
|
||||
Karma = -2000;
|
||||
|
||||
Hue = 0x851;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 93.9;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x2CE;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x2CC;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x2D1;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x2C8;
|
||||
}
|
||||
|
||||
public override double GetControlChance( Mobile m )
|
||||
{
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
public override bool ReacquireOnMovement{ get{ return true; } }
|
||||
public override bool AutoDispel{ get{ return !Controlled; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override int Meat{ get{ return 19; } }
|
||||
public override int Hides{ get{ return 20; } }
|
||||
public override int Scales{ get{ return 5; } }
|
||||
public override ScaleType ScaleType{ get{ return ScaleType.Green; } }
|
||||
public override bool CanAngerOnTame { get { return true; } }
|
||||
|
||||
public SwampDragon( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void GetProperties( ObjectPropertyList list )
|
||||
{
|
||||
base.GetProperties( list );
|
||||
|
||||
if ( m_HasBarding && m_BardingExceptional && m_BardingCrafter != null )
|
||||
list.Add( 1060853, m_BardingCrafter.Name ); // armor exceptionally crafted by ~1_val~
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 1 ); // version
|
||||
|
||||
writer.Write( (bool) m_BardingExceptional );
|
||||
writer.Write( (Mobile) m_BardingCrafter );
|
||||
writer.Write( (bool) m_HasBarding );
|
||||
writer.Write( (int) m_BardingHP );
|
||||
writer.Write( (int) m_BardingResource );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
m_BardingExceptional = reader.ReadBool();
|
||||
m_BardingCrafter = reader.ReadMobile();
|
||||
m_HasBarding = reader.ReadBool();
|
||||
m_BardingHP = reader.ReadInt();
|
||||
m_BardingResource = (CraftResource) reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( Hue == 0 && !m_HasBarding )
|
||||
Hue = 0x851;
|
||||
|
||||
if ( BaseSoundID == -1 )
|
||||
BaseSoundID = 0x16A;
|
||||
}
|
||||
}
|
||||
}
|
||||
132
Scripts/Mobiles/Animals/Mounts/Unicorn.cs
Normal file
132
Scripts/Mobiles/Animals/Mounts/Unicorn.cs
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a unicorn corpse" )]
|
||||
public class Unicorn : BaseMount
|
||||
{
|
||||
public override bool AllowMaleRider{ get{ return false; } }
|
||||
public override bool AllowMaleTamer{ get{ return false; } }
|
||||
|
||||
public override bool InitialInnocent{ get{ return true; } }
|
||||
|
||||
public override TimeSpan MountAbilityDelay { get { return TimeSpan.FromHours( 1.0 ); } }
|
||||
|
||||
public override void OnDisallowedRider( Mobile m )
|
||||
{
|
||||
m.SendLocalizedMessage( 1042318 ); // The unicorn refuses to allow you to ride it.
|
||||
}
|
||||
|
||||
public override bool DoMountAbility( int damage, Mobile attacker )
|
||||
{
|
||||
if( Rider == null || attacker == null ) //sanity
|
||||
return false;
|
||||
|
||||
if( Rider.Poisoned && ((Rider.Hits - damage) < 40) )
|
||||
{
|
||||
Poison p = Rider.Poison;
|
||||
|
||||
if( p != null )
|
||||
{
|
||||
int chanceToCure = 10000 + (int)(this.Skills[SkillName.Magery].Value * 75) - ((p.Level + 1) * (Core.AOS ? (p.Level < 4 ? 3300 : 3100) : 1750));
|
||||
chanceToCure /= 100;
|
||||
|
||||
if( chanceToCure > Utility.Random( 100 ) )
|
||||
{
|
||||
if( Rider.CurePoison( this ) ) //TODO: Confirm if mount is the one flagged for curing it or the rider is
|
||||
{
|
||||
Rider.LocalOverheadMessage( Server.Network.MessageType.Regular, 0x3B2, true, "Your mount senses you are in danger and aids you with magic." );
|
||||
Rider.FixedParticles( 0x373A, 10, 15, 5012, EffectLayer.Waist );
|
||||
Rider.PlaySound( 0x1E0 ); // Cure spell effect.
|
||||
Rider.PlaySound( 0xA9 ); // Unicorn's whinny.
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Unicorn() : this( "a unicorn" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Unicorn( string name ) : base( name, 0x7A, 0x3EB4, AIType.AI_Mage, FightMode.Evil, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
BaseSoundID = 0x4BC;
|
||||
|
||||
SetStr( 296, 325 );
|
||||
SetDex( 96, 115 );
|
||||
SetInt( 186, 225 );
|
||||
|
||||
SetHits( 191, 210 );
|
||||
|
||||
SetDamage( 16, 22 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 75 );
|
||||
SetDamageType( ResistanceType.Energy, 25 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 55, 65 );
|
||||
SetResistance( ResistanceType.Fire, 25, 40 );
|
||||
SetResistance( ResistanceType.Cold, 25, 40 );
|
||||
SetResistance( ResistanceType.Poison, 55, 65 );
|
||||
SetResistance( ResistanceType.Energy, 25, 40 );
|
||||
|
||||
SetSkill( SkillName.EvalInt, 80.1, 90.0 );
|
||||
SetSkill( SkillName.Magery, 60.2, 80.0 );
|
||||
SetSkill( SkillName.Meditation, 50.1, 60.0 );
|
||||
SetSkill( SkillName.MagicResist, 75.3, 90.0 );
|
||||
SetSkill( SkillName.Tactics, 20.1, 22.5 );
|
||||
SetSkill( SkillName.Wrestling, 80.5, 92.5 );
|
||||
|
||||
Fame = 9000;
|
||||
Karma = 9000;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 2;
|
||||
MinTameSkill = 95.1;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Rich );
|
||||
AddLoot( LootPack.LowScrolls );
|
||||
AddLoot( LootPack.Potions );
|
||||
}
|
||||
|
||||
public override OppositionGroup OppositionGroup
|
||||
{
|
||||
get{ return OppositionGroup.FeyAndUndead; }
|
||||
}
|
||||
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override int Meat{ get{ return 3; } }
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override HideType HideType{ get{ return HideType.Horned; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Unicorn( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
65
Scripts/Mobiles/Animals/Mounts/War Horses/BaseWarHorse.cs
Normal file
65
Scripts/Mobiles/Animals/Mounts/War Horses/BaseWarHorse.cs
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a war horse corpse" )]
|
||||
public abstract class BaseWarHorse : BaseMount
|
||||
{
|
||||
public BaseWarHorse( int bodyID, int itemID, AIType aiType, FightMode fightMode, int rangePerception, int rangeFight, double activeSpeed, double passiveSpeed ) : base ( "a war horse", bodyID, itemID, aiType, fightMode, rangePerception, rangeFight, activeSpeed, passiveSpeed )
|
||||
{
|
||||
BaseSoundID = 0xA8;
|
||||
|
||||
InitStats( Utility.Random( 300, 100 ), 125, 60 );
|
||||
|
||||
SetStr( 400 );
|
||||
SetDex( 125 );
|
||||
SetInt( 51, 55 );
|
||||
|
||||
SetHits( 240 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 8 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 40, 50 );
|
||||
SetResistance( ResistanceType.Fire, 30, 40 );
|
||||
SetResistance( ResistanceType.Cold, 30, 40 );
|
||||
SetResistance( ResistanceType.Poison, 30, 40 );
|
||||
SetResistance( ResistanceType.Energy, 30, 40 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 29.3, 44.0 );
|
||||
SetSkill( SkillName.Wrestling, 29.3, 44.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 300;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 29.1;
|
||||
}
|
||||
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public BaseWarHorse( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
31
Scripts/Mobiles/Animals/Mounts/War Horses/CoMWarHorse.cs
Normal file
31
Scripts/Mobiles/Animals/Mounts/War Horses/CoMWarHorse.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class CoMWarHorse : BaseWarHorse
|
||||
{
|
||||
[Constructable]
|
||||
public CoMWarHorse() : base( 0x77, 0x3EB1, AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
}
|
||||
|
||||
public CoMWarHorse( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
31
Scripts/Mobiles/Animals/Mounts/War Horses/MinaxWarHorse.cs
Normal file
31
Scripts/Mobiles/Animals/Mounts/War Horses/MinaxWarHorse.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class MinaxWarHorse : BaseWarHorse
|
||||
{
|
||||
[Constructable]
|
||||
public MinaxWarHorse() : base( 0x78, 0x3EAF, AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
}
|
||||
|
||||
public MinaxWarHorse( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
31
Scripts/Mobiles/Animals/Mounts/War Horses/SLWarHorse.cs
Normal file
31
Scripts/Mobiles/Animals/Mounts/War Horses/SLWarHorse.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class SLWarHorse : BaseWarHorse
|
||||
{
|
||||
[Constructable]
|
||||
public SLWarHorse() : base( 0x79, 0x3EB0, AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
}
|
||||
|
||||
public SLWarHorse( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
31
Scripts/Mobiles/Animals/Mounts/War Horses/TBWarHorse.cs
Normal file
31
Scripts/Mobiles/Animals/Mounts/War Horses/TBWarHorse.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class TBWarHorse : BaseWarHorse
|
||||
{
|
||||
[Constructable]
|
||||
public TBWarHorse() : base( 0x76, 0x3EB2, AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
}
|
||||
|
||||
public TBWarHorse( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
72
Scripts/Mobiles/Animals/Reptiles/Alligator.cs
Normal file
72
Scripts/Mobiles/Animals/Reptiles/Alligator.cs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "an alligator corpse" )]
|
||||
public class Alligator : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Alligator() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "an alligator";
|
||||
Body = 0xCA;
|
||||
BaseSoundID = 660;
|
||||
|
||||
SetStr( 76, 100 );
|
||||
SetDex( 6, 25 );
|
||||
SetInt( 11, 20 );
|
||||
|
||||
SetHits( 46, 60 );
|
||||
SetStam( 46, 65 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 15 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 25, 35 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 40.1, 60.0 );
|
||||
SetSkill( SkillName.Wrestling, 40.1, 60.0 );
|
||||
|
||||
Fame = 600;
|
||||
Karma = -600;
|
||||
|
||||
VirtualArmor = 30;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 47.1;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Fish; } }
|
||||
|
||||
public Alligator(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();
|
||||
|
||||
if ( BaseSoundID == 0x5A )
|
||||
BaseSoundID = 660;
|
||||
}
|
||||
}
|
||||
}
|
||||
86
Scripts/Mobiles/Animals/Reptiles/GiantSerpent.cs
Normal file
86
Scripts/Mobiles/Animals/Reptiles/GiantSerpent.cs
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a giant serpent corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Serpant" )]
|
||||
public class GiantSerpent : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public GiantSerpent() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a giant serpent";
|
||||
Body = 0x15;
|
||||
Hue = Utility.RandomSnakeHue();
|
||||
BaseSoundID = 219;
|
||||
|
||||
SetStr( 186, 215 );
|
||||
SetDex( 56, 80 );
|
||||
SetInt( 66, 85 );
|
||||
|
||||
SetHits( 112, 129 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 7, 17 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 40 );
|
||||
SetDamageType( ResistanceType.Poison, 60 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 30, 35 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 10, 20 );
|
||||
SetResistance( ResistanceType.Poison, 70, 90 );
|
||||
SetResistance( ResistanceType.Energy, 10, 20 );
|
||||
|
||||
SetSkill( SkillName.Poisoning, 70.1, 100.0 );
|
||||
SetSkill( SkillName.MagicResist, 25.1, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 65.1, 70.0 );
|
||||
SetSkill( SkillName.Wrestling, 60.1, 80.0 );
|
||||
|
||||
Fame = 2500;
|
||||
Karma = -2500;
|
||||
|
||||
VirtualArmor = 32;
|
||||
|
||||
PackItem( new Bone() );
|
||||
// TODO: Body parts
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Average );
|
||||
}
|
||||
|
||||
public override Poison PoisonImmune{ get{ return Poison.Greater; } }
|
||||
public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly); } }
|
||||
|
||||
public override bool DeathAdderCharmable{ get{ return true; } }
|
||||
|
||||
public override int Meat{ get{ return 4; } }
|
||||
public override int Hides{ get{ return 15; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
|
||||
public GiantSerpent(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();
|
||||
|
||||
if ( BaseSoundID == -1 )
|
||||
BaseSoundID = 219;
|
||||
}
|
||||
}
|
||||
}
|
||||
97
Scripts/Mobiles/Animals/Reptiles/IceSerpent.cs
Normal file
97
Scripts/Mobiles/Animals/Reptiles/IceSerpent.cs
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "an ice serpent corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Iceserpant" )]
|
||||
public class IceSerpent : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public IceSerpent() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a giant ice serpent";
|
||||
Body = 89;
|
||||
BaseSoundID = 219;
|
||||
|
||||
SetStr( 216, 245 );
|
||||
SetDex( 26, 50 );
|
||||
SetInt( 66, 85 );
|
||||
|
||||
SetHits( 130, 147 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 7, 17 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 10 );
|
||||
SetDamageType( ResistanceType.Cold, 90 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 30, 35 );
|
||||
SetResistance( ResistanceType.Cold, 80, 90 );
|
||||
SetResistance( ResistanceType.Poison, 15, 25 );
|
||||
SetResistance( ResistanceType.Energy, 10, 20 );
|
||||
|
||||
SetSkill( SkillName.Anatomy, 27.5, 50.0 );
|
||||
SetSkill( SkillName.MagicResist, 25.1, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 75.1, 80.0 );
|
||||
SetSkill( SkillName.Wrestling, 60.1, 80.0 );
|
||||
|
||||
Fame = 3500;
|
||||
Karma = -3500;
|
||||
|
||||
VirtualArmor = 32;
|
||||
|
||||
PackItem( Loot.RandomArmorOrShieldOrWeapon() );
|
||||
|
||||
switch ( Utility.Random( 10 ))
|
||||
{
|
||||
case 0: PackItem( new LeftArm() ); break;
|
||||
case 1: PackItem( new RightArm() ); break;
|
||||
case 2: PackItem( new Torso() ); break;
|
||||
case 3: PackItem( new Bone() ); break;
|
||||
case 4: PackItem( new RibCage() ); break;
|
||||
case 5: PackItem( new RibCage() ); break;
|
||||
case 6: PackItem( new BonePile() ); break;
|
||||
case 7: PackItem( new BonePile() ); break;
|
||||
case 8: PackItem( new BonePile() ); break;
|
||||
case 9: PackItem( new BonePile() ); break;
|
||||
}
|
||||
|
||||
if ( 0.025 > Utility.RandomDouble() )
|
||||
PackItem( new GlacialStaff() );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Meager );
|
||||
}
|
||||
|
||||
public override bool DeathAdderCharmable{ get{ return true; } }
|
||||
|
||||
public override int Meat{ get{ return 4; } }
|
||||
public override int Hides{ get{ return 15; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
|
||||
public IceSerpent(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();
|
||||
|
||||
if ( BaseSoundID == -1 )
|
||||
BaseSoundID = 219;
|
||||
}
|
||||
}
|
||||
}
|
||||
72
Scripts/Mobiles/Animals/Reptiles/IceSnake.cs
Normal file
72
Scripts/Mobiles/Animals/Reptiles/IceSnake.cs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "an ice snake corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Icesnake" )]
|
||||
public class IceSnake : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public IceSnake() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "an ice snake";
|
||||
Body = 52;
|
||||
Hue = 0x480;
|
||||
BaseSoundID = 0xDB;
|
||||
|
||||
SetStr( 42, 54 );
|
||||
SetDex( 36, 45 );
|
||||
SetInt( 26, 30 );
|
||||
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4, 12 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 25 );
|
||||
SetDamageType( ResistanceType.Cold, 25 );
|
||||
SetDamageType( ResistanceType.Poison, 50 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Cold, 80, 90 );
|
||||
SetResistance( ResistanceType.Poison, 60, 70 );
|
||||
SetResistance( ResistanceType.Energy, 30, 40 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
|
||||
SetSkill( SkillName.Tactics, 39.3, 54.0 );
|
||||
SetSkill( SkillName.Wrestling, 39.3, 54.0 );
|
||||
|
||||
Fame = 900;
|
||||
Karma = -900;
|
||||
|
||||
VirtualArmor = 30;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Meager );
|
||||
}
|
||||
|
||||
public override bool DeathAdderCharmable{ get{ return true; } }
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
|
||||
public IceSnake(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
78
Scripts/Mobiles/Animals/Reptiles/LavaLizard.cs
Normal file
78
Scripts/Mobiles/Animals/Reptiles/LavaLizard.cs
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a lava lizard corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Lavalizard" )]
|
||||
public class LavaLizard : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public LavaLizard() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a lava lizard";
|
||||
Body = 0xCE;
|
||||
Hue = Utility.RandomList( 0x647, 0x650, 0x659, 0x662, 0x66B, 0x674 );
|
||||
BaseSoundID = 0x5A;
|
||||
|
||||
SetStr( 126, 150 );
|
||||
SetDex( 56, 75 );
|
||||
SetInt( 11, 20 );
|
||||
|
||||
SetHits( 76, 90 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 6, 24 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 35, 45 );
|
||||
SetResistance( ResistanceType.Fire, 30, 45 );
|
||||
SetResistance( ResistanceType.Poison, 25, 35 );
|
||||
SetResistance( ResistanceType.Energy, 25, 35 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 55.1, 70.0 );
|
||||
SetSkill( SkillName.Tactics, 60.1, 80.0 );
|
||||
SetSkill( SkillName.Wrestling, 60.1, 80.0 );
|
||||
|
||||
Fame = 3000;
|
||||
Karma = -3000;
|
||||
|
||||
VirtualArmor = 40;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 80.7;
|
||||
|
||||
PackItem( new SulfurousAsh( Utility.Random( 4, 10 ) ) );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Meager );
|
||||
}
|
||||
|
||||
public override bool HasBreath{ get{ return true; } } // fire breath enabled
|
||||
public override int Hides{ get{ return 12; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
|
||||
public LavaLizard(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
83
Scripts/Mobiles/Animals/Reptiles/LavaSerpent.cs
Normal file
83
Scripts/Mobiles/Animals/Reptiles/LavaSerpent.cs
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a lava serpent corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Lavaserpant" )]
|
||||
public class LavaSerpent : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public LavaSerpent() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a lava serpent";
|
||||
Body = 90;
|
||||
BaseSoundID = 219;
|
||||
|
||||
SetStr( 386, 415 );
|
||||
SetDex( 56, 80 );
|
||||
SetInt( 66, 85 );
|
||||
|
||||
SetHits( 232, 249 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 10, 22 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 20 );
|
||||
SetDamageType( ResistanceType.Fire, 80 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 35, 45 );
|
||||
SetResistance( ResistanceType.Fire, 70, 80 );
|
||||
SetResistance( ResistanceType.Poison, 30, 40 );
|
||||
SetResistance( ResistanceType.Energy, 10, 20 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.3, 70.0 );
|
||||
SetSkill( SkillName.Tactics, 65.1, 70.0 );
|
||||
SetSkill( SkillName.Wrestling, 60.1, 80.0 );
|
||||
|
||||
Fame = 4500;
|
||||
Karma = -4500;
|
||||
|
||||
VirtualArmor = 40;
|
||||
|
||||
PackItem( new SulfurousAsh( 3 ) );
|
||||
PackItem( new Bone() );
|
||||
// TODO: body parts, armour
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Average );
|
||||
}
|
||||
|
||||
public override bool DeathAdderCharmable{ get{ return true; } }
|
||||
|
||||
public override bool HasBreath{ get{ return true; } } // fire breath enabled
|
||||
public override int Meat{ get{ return 4; } }
|
||||
public override int Hides{ get{ return 15; } }
|
||||
public override HideType HideType{ get{ return HideType.Spined; } }
|
||||
|
||||
public LavaSerpent(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();
|
||||
|
||||
if ( BaseSoundID == -1 )
|
||||
BaseSoundID = 219;
|
||||
}
|
||||
}
|
||||
}
|
||||
75
Scripts/Mobiles/Animals/Reptiles/LavaSnake.cs
Normal file
75
Scripts/Mobiles/Animals/Reptiles/LavaSnake.cs
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a lava snake corpse")]
|
||||
[TypeAlias( "Server.Mobiles.Lavasnake" )]
|
||||
public class LavaSnake : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public LavaSnake() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a lava snake";
|
||||
Body = 52;
|
||||
Hue = Utility.RandomList( 0x647, 0x650, 0x659, 0x662, 0x66B, 0x674 );
|
||||
BaseSoundID = 0xDB;
|
||||
|
||||
SetStr( 43, 55 );
|
||||
SetDex( 16, 25 );
|
||||
SetInt( 6, 10 );
|
||||
|
||||
SetHits( 28, 32 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 8 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Fire, 30, 40 );
|
||||
SetResistance( ResistanceType.Poison, 20, 30 );
|
||||
SetResistance( ResistanceType.Energy, 10, 20 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
|
||||
SetSkill( SkillName.Tactics, 19.3, 34.0 );
|
||||
SetSkill( SkillName.Wrestling, 19.3, 34.0 );
|
||||
|
||||
Fame = 600;
|
||||
Karma = -600;
|
||||
|
||||
VirtualArmor = 24;
|
||||
|
||||
PackItem( new SulfurousAsh() );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Poor );
|
||||
}
|
||||
|
||||
public override bool DeathAdderCharmable{ get{ return true; } }
|
||||
|
||||
public override bool HasBreath{ get{ return true; } } // fire breath enabled
|
||||
public override int Meat{ get{ return 1; } }
|
||||
|
||||
public LavaSnake(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
82
Scripts/Mobiles/Animals/Reptiles/SilverSerpent.cs
Normal file
82
Scripts/Mobiles/Animals/Reptiles/SilverSerpent.cs
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
using Server.Factions;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a silver serpent corpse")]
|
||||
[TypeAlias( "Server.Mobiles.Silverserpant" )]
|
||||
public class SilverSerpent : BaseCreature
|
||||
{
|
||||
public override Faction FactionAllegiance { get { return TrueBritannians.Instance; } }
|
||||
public override Ethics.Ethic EthicAllegiance { get { return Ethics.Ethic.Hero; } }
|
||||
|
||||
[Constructable]
|
||||
public SilverSerpent() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Body = 92;
|
||||
Name = "a silver serpent";
|
||||
BaseSoundID = 219;
|
||||
|
||||
SetStr( 161, 360 );
|
||||
SetDex( 151, 300 );
|
||||
SetInt( 21, 40 );
|
||||
|
||||
SetHits( 97, 216 );
|
||||
|
||||
SetDamage( 5, 21 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 50 );
|
||||
SetDamageType( ResistanceType.Poison, 50 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 35, 45 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Cold, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 100 );
|
||||
SetResistance( ResistanceType.Energy, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.Poisoning, 90.1, 100.0 );
|
||||
SetSkill( SkillName.MagicResist, 95.1, 100.0 );
|
||||
SetSkill( SkillName.Tactics, 80.1, 95.0 );
|
||||
SetSkill( SkillName.Wrestling, 85.1, 100.0 );
|
||||
|
||||
Fame = 7000;
|
||||
Karma = -7000;
|
||||
|
||||
VirtualArmor = 40;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Average );
|
||||
AddLoot( LootPack.Gems, 2 );
|
||||
}
|
||||
|
||||
public override bool DeathAdderCharmable{ get{ return true; } }
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override Poison HitPoison{ get{ return Poison.Lethal; } }
|
||||
|
||||
public SilverSerpent(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();
|
||||
|
||||
if ( BaseSoundID == -1 )
|
||||
BaseSoundID = 219;
|
||||
}
|
||||
}
|
||||
}
|
||||
72
Scripts/Mobiles/Animals/Reptiles/Snake.cs
Normal file
72
Scripts/Mobiles/Animals/Reptiles/Snake.cs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a snake corpse" )]
|
||||
public class Snake : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Snake() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a snake";
|
||||
Body = 52;
|
||||
Hue = Utility.RandomSnakeHue();
|
||||
BaseSoundID = 0xDB;
|
||||
|
||||
SetStr( 22, 34 );
|
||||
SetDex( 16, 25 );
|
||||
SetInt( 6, 10 );
|
||||
|
||||
SetHits( 15, 19 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 4 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
SetResistance( ResistanceType.Poison, 20, 30 );
|
||||
|
||||
SetSkill( SkillName.Poisoning, 50.1, 70.0 );
|
||||
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
|
||||
SetSkill( SkillName.Tactics, 19.3, 34.0 );
|
||||
SetSkill( SkillName.Wrestling, 19.3, 34.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = -300;
|
||||
|
||||
VirtualArmor = 16;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 59.1;
|
||||
}
|
||||
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lesser; } }
|
||||
public override Poison HitPoison{ get{ return Poison.Lesser; } }
|
||||
|
||||
public override bool DeathAdderCharmable{ get{ return true; } }
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Eggs; } }
|
||||
|
||||
public Snake(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
73
Scripts/Mobiles/Animals/Rodents/GiantRat.cs
Normal file
73
Scripts/Mobiles/Animals/Rodents/GiantRat.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a giant rat corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Giantrat" )]
|
||||
public class GiantRat : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public GiantRat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a giant rat";
|
||||
Body = 0xD7;
|
||||
BaseSoundID = 0x188;
|
||||
|
||||
SetStr( 32, 74 );
|
||||
SetDex( 46, 65 );
|
||||
SetInt( 16, 30 );
|
||||
|
||||
SetHits( 26, 39 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4, 8 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 20 );
|
||||
SetResistance( ResistanceType.Fire, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 25, 35 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 25.1, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 29.3, 44.0 );
|
||||
SetSkill( SkillName.Wrestling, 29.3, 44.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = -300;
|
||||
|
||||
VirtualArmor = 18;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 29.1;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Poor );
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 6; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.Meat | FoodType.FruitsAndVegies | FoodType.Eggs; } }
|
||||
|
||||
public GiantRat(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
81
Scripts/Mobiles/Animals/Rodents/JackRabbit.cs
Normal file
81
Scripts/Mobiles/Animals/Rodents/JackRabbit.cs
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a jack rabbit corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Jackrabbit" )]
|
||||
public class JackRabbit : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public JackRabbit() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a jack rabbit";
|
||||
Body = 0xCD;
|
||||
Hue = 0x1BB;
|
||||
|
||||
SetStr( 15 );
|
||||
SetDex( 25 );
|
||||
SetInt( 5 );
|
||||
|
||||
SetHits( 9 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 2 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 2, 5 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 5.0 );
|
||||
SetSkill( SkillName.Tactics, 5.0 );
|
||||
SetSkill( SkillName.Wrestling, 5.0 );
|
||||
|
||||
Fame = 150;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 4;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -18.9;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 1; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies; } }
|
||||
|
||||
public JackRabbit(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0xC9;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0xCA;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0xCB;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
82
Scripts/Mobiles/Animals/Rodents/Rabbit.cs
Normal file
82
Scripts/Mobiles/Animals/Rodents/Rabbit.cs
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a hare corpse" )]
|
||||
public class Rabbit : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Rabbit() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a rabbit";
|
||||
Body = 205;
|
||||
|
||||
if ( 0.5 >= Utility.RandomDouble() )
|
||||
Hue = Utility.RandomAnimalHue();
|
||||
|
||||
SetStr( 6, 10 );
|
||||
SetDex( 26, 38 );
|
||||
SetInt( 6, 14 );
|
||||
|
||||
SetHits( 4, 6 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 5.0 );
|
||||
SetSkill( SkillName.Tactics, 5.0 );
|
||||
SetSkill( SkillName.Wrestling, 5.0 );
|
||||
|
||||
Fame = 150;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 6;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -18.9;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 1; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies; } }
|
||||
|
||||
public Rabbit(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0xC9;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0xCA;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0xCB;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Scripts/Mobiles/Animals/Rodents/SewerRat.cs
Normal file
71
Scripts/Mobiles/Animals/Rodents/SewerRat.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a sewer rat corpse" )]
|
||||
public class Sewerrat : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Sewerrat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a sewer rat";
|
||||
Body = 238;
|
||||
BaseSoundID = 0xCC;
|
||||
|
||||
SetStr( 9 );
|
||||
SetDex( 25 );
|
||||
SetInt( 6, 10 );
|
||||
|
||||
SetHits( 6 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 2 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 15, 25 );
|
||||
SetResistance( ResistanceType.Energy, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 5.0 );
|
||||
SetSkill( SkillName.Tactics, 5.0 );
|
||||
SetSkill( SkillName.Wrestling, 5.0 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = -300;
|
||||
|
||||
VirtualArmor = 6;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -0.9;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Poor );
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Eggs | FoodType.FruitsAndVegies; } }
|
||||
|
||||
public Sewerrat(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Scripts/Mobiles/Animals/Slimes/Jwilson.cs
Normal file
71
Scripts/Mobiles/Animals/Slimes/Jwilson.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a jwilson corpse" )]
|
||||
public class Jwilson : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Jwilson() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Hue = Utility.RandomList(0x89C,0x8A2,0x8A8,0x8AE);
|
||||
this.Body = 0x33;
|
||||
this.Name = ("a jwilson");
|
||||
this.VirtualArmor = 8;
|
||||
|
||||
this.InitStats(Utility.Random(22,13),Utility.Random(16,6),Utility.Random(16,5));
|
||||
|
||||
this.Skills[SkillName.Wrestling].Base = Utility.Random(24,17);
|
||||
this.Skills[SkillName.Tactics].Base = Utility.Random(18,14);
|
||||
this.Skills[SkillName.MagicResist].Base = Utility.Random(15,6);
|
||||
this.Skills[SkillName.Poisoning].Base = Utility.Random(31,20);
|
||||
|
||||
this.Fame = Utility.Random(0,1249);
|
||||
this.Karma = Utility.Random(0,-624);
|
||||
}
|
||||
|
||||
public Jwilson(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x1C8;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x1C9;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x1CA;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x1CB;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x1CC;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
73
Scripts/Mobiles/Animals/Town Critters/(UO 3D Only) Parrot.cs
Normal file
73
Scripts/Mobiles/Animals/Town Critters/(UO 3D Only) Parrot.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a parrot corpse")]
|
||||
public class Parrot : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Parrot() : base(AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
this.Body = 831;
|
||||
this.Name = ("a parrot");
|
||||
this.VirtualArmor = Utility.Random(0,6);
|
||||
|
||||
this.InitStats((10),Utility.Random(25,16),(10));
|
||||
|
||||
this.Skills[SkillName.Wrestling].Base = (6);
|
||||
this.Skills[SkillName.Tactics].Base = (6);
|
||||
this.Skills[SkillName.MagicResist].Base = (5);
|
||||
|
||||
this.Fame = Utility.Random(0,1249);
|
||||
this.Karma = Utility.Random(0,-624);
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 0.0;
|
||||
}
|
||||
|
||||
public Parrot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x1B;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x1C;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x1D;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x1E;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x1F;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
139
Scripts/Mobiles/Animals/Town Critters/Bird.cs
Normal file
139
Scripts/Mobiles/Animals/Town Critters/Bird.cs
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Misc;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a bird corpse" )]
|
||||
public class Bird : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Bird() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
if ( Utility.RandomBool() )
|
||||
{
|
||||
Hue = 0x901;
|
||||
|
||||
switch ( Utility.Random( 3 ) )
|
||||
{
|
||||
case 0: Name = "a crow"; break;
|
||||
case 2: Name = "a raven"; break;
|
||||
case 1: Name = "a magpie"; break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Hue = Utility.RandomBirdHue();
|
||||
Name = NameList.RandomName( "bird" );
|
||||
}
|
||||
|
||||
Body = 6;
|
||||
BaseSoundID = 0x1B;
|
||||
|
||||
VirtualArmor = Utility.RandomMinMax( 0, 6 );
|
||||
|
||||
SetStr( 10 );
|
||||
SetDex( 25, 35 );
|
||||
SetInt( 10 );
|
||||
|
||||
SetDamage( 0 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetSkill( SkillName.Wrestling, 4.2, 6.4 );
|
||||
SetSkill( SkillName.Tactics, 4.0, 6.0 );
|
||||
SetSkill( SkillName.MagicResist, 4.0, 5.0 );
|
||||
|
||||
SetFameLevel( 1 );
|
||||
SetKarmaLevel( 0 );
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -6.9;
|
||||
}
|
||||
|
||||
public override MeatType MeatType{ get{ return MeatType.Bird; } }
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Feathers{ get{ return 25; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Bird( 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();
|
||||
|
||||
if ( Hue == 0 )
|
||||
Hue = Utility.RandomBirdHue();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName( "a bird corpse" )]
|
||||
public class TropicalBird : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public TropicalBird() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Hue = Utility.RandomBirdHue();
|
||||
Name = "a tropical bird";
|
||||
|
||||
Body = 6;
|
||||
BaseSoundID = 0xBF;
|
||||
|
||||
VirtualArmor = Utility.RandomMinMax( 0, 6 );
|
||||
|
||||
SetStr( 10 );
|
||||
SetDex( 25, 35 );
|
||||
SetInt( 10 );
|
||||
|
||||
SetDamage( 0 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetSkill( SkillName.Wrestling, 4.2, 6.4 );
|
||||
SetSkill( SkillName.Tactics, 4.0, 6.0 );
|
||||
SetSkill( SkillName.MagicResist, 4.0, 5.0 );
|
||||
|
||||
SetFameLevel( 1 );
|
||||
SetKarmaLevel( 0 );
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -6.9;
|
||||
}
|
||||
|
||||
public override MeatType MeatType{ get{ return MeatType.Bird; } }
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Feathers{ get{ return 25; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
|
||||
|
||||
public TropicalBird( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
67
Scripts/Mobiles/Animals/Town Critters/Cat.cs
Normal file
67
Scripts/Mobiles/Animals/Town Critters/Cat.cs
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a cat corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Housecat" )]
|
||||
public class Cat : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Cat() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a cat";
|
||||
Body = 0xC9;
|
||||
Hue = Utility.RandomAnimalHue();
|
||||
BaseSoundID = 0x69;
|
||||
|
||||
SetStr( 9 );
|
||||
SetDex( 35 );
|
||||
SetInt( 5 );
|
||||
|
||||
SetHits( 6 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 5.0 );
|
||||
SetSkill( SkillName.Tactics, 4.0 );
|
||||
SetSkill( SkillName.Wrestling, 5.0 );
|
||||
|
||||
Fame = 0;
|
||||
Karma = 150;
|
||||
|
||||
VirtualArmor = 8;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -0.9;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Fish; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Feline; } }
|
||||
|
||||
public Cat(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
66
Scripts/Mobiles/Animals/Town Critters/Dog.cs
Normal file
66
Scripts/Mobiles/Animals/Town Critters/Dog.cs
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a dog corpse" )]
|
||||
public class Dog : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Dog() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a dog";
|
||||
Body = 0xD9;
|
||||
Hue = Utility.RandomAnimalHue();
|
||||
BaseSoundID = 0x85;
|
||||
|
||||
SetStr( 27, 37 );
|
||||
SetDex( 28, 43 );
|
||||
SetInt( 29, 37 );
|
||||
|
||||
SetHits( 17, 22 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 4, 7 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 22.1, 47.0 );
|
||||
SetSkill( SkillName.Tactics, 19.2, 31.0 );
|
||||
SetSkill( SkillName.Wrestling, 19.2, 31.0 );
|
||||
|
||||
Fame = 0;
|
||||
Karma = 300;
|
||||
|
||||
VirtualArmor = 12;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -15.3;
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Canine; } }
|
||||
|
||||
public Dog(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
70
Scripts/Mobiles/Animals/Town Critters/Rat.cs
Normal file
70
Scripts/Mobiles/Animals/Town Critters/Rat.cs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a rat corpse" )]
|
||||
public class Rat : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Rat() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a rat";
|
||||
Body = 238;
|
||||
BaseSoundID = 0xCC;
|
||||
|
||||
SetStr( 9 );
|
||||
SetDex( 35 );
|
||||
SetInt( 5 );
|
||||
|
||||
SetHits( 6 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 2 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 4.0 );
|
||||
SetSkill( SkillName.Tactics, 4.0 );
|
||||
SetSkill( SkillName.Wrestling, 4.0 );
|
||||
|
||||
Fame = 150;
|
||||
Karma = -150;
|
||||
|
||||
VirtualArmor = 6;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = -0.9;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Poor );
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Fish | FoodType.Eggs | FoodType.GrainsAndHay; } }
|
||||
|
||||
public Rat(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
148
Scripts/Mobiles/Familiars/BaseFamiliar.cs
Normal file
148
Scripts/Mobiles/Familiars/BaseFamiliar.cs
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.ContextMenus;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public abstract class BaseFamiliar : BaseCreature
|
||||
{
|
||||
public BaseFamiliar() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
}
|
||||
|
||||
public override bool BardImmune{ get{ return true; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override bool Commandable{ get{ return false; } }
|
||||
|
||||
private bool m_LastHidden;
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
base.OnThink();
|
||||
|
||||
Mobile master = ControlMaster;
|
||||
|
||||
if ( master == null )
|
||||
return;
|
||||
|
||||
if ( master.Deleted || master.Map != this.Map || !InRange( master.Location, 20 ) )
|
||||
{
|
||||
DropPackContents();
|
||||
EndRelease( null );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( m_LastHidden != master.Hidden )
|
||||
Hidden = m_LastHidden = master.Hidden;
|
||||
|
||||
Mobile toAttack = null;
|
||||
|
||||
if ( !Hidden )
|
||||
{
|
||||
toAttack = master.Combatant;
|
||||
|
||||
if ( toAttack == this )
|
||||
toAttack = master;
|
||||
else if ( toAttack == null )
|
||||
toAttack = this.Combatant;
|
||||
}
|
||||
|
||||
if ( Combatant != toAttack )
|
||||
Combatant = null;
|
||||
|
||||
if ( toAttack == null )
|
||||
{
|
||||
if ( ControlTarget != master || ControlOrder != OrderType.Follow )
|
||||
{
|
||||
ControlTarget = master;
|
||||
ControlOrder = OrderType.Follow;
|
||||
}
|
||||
}
|
||||
else if ( ControlTarget != toAttack || ControlOrder != OrderType.Attack )
|
||||
{
|
||||
ControlTarget = toAttack;
|
||||
ControlOrder = OrderType.Attack;
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
|
||||
{
|
||||
base.GetContextMenuEntries( from, list );
|
||||
|
||||
if ( from.Alive && Controlled && from == ControlMaster && from.InRange( this, 14 ) )
|
||||
list.Add( new ReleaseEntry( from, this ) );
|
||||
}
|
||||
|
||||
public virtual void BeginRelease( Mobile from )
|
||||
{
|
||||
if ( !Deleted && Controlled && from == ControlMaster && from.CheckAlive() )
|
||||
EndRelease( from );
|
||||
}
|
||||
|
||||
public virtual void EndRelease( Mobile from )
|
||||
{
|
||||
if ( from == null || (!Deleted && Controlled && from == ControlMaster && from.CheckAlive()) )
|
||||
{
|
||||
Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x3728, 1, 13, 2100, 3, 5042, 0 );
|
||||
PlaySound( 0x201 );
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void DropPackContents()
|
||||
{
|
||||
Map map = this.Map;
|
||||
Container pack = this.Backpack;
|
||||
|
||||
if ( map != null && map != Map.Internal && pack != null )
|
||||
{
|
||||
List<Item> list = new List<Item>( pack.Items );
|
||||
|
||||
for ( int i = 0; i < list.Count; ++i )
|
||||
list[i].MoveToWorld( Location, map );
|
||||
}
|
||||
}
|
||||
|
||||
public BaseFamiliar( 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();
|
||||
|
||||
DropPackContents();
|
||||
Delete();
|
||||
}
|
||||
|
||||
private class ReleaseEntry : ContextMenuEntry
|
||||
{
|
||||
private Mobile m_From;
|
||||
private BaseFamiliar m_Familiar;
|
||||
|
||||
public ReleaseEntry( Mobile from, BaseFamiliar familiar ) : base( 6118, 14 )
|
||||
{
|
||||
m_From = from;
|
||||
m_Familiar = familiar;
|
||||
}
|
||||
|
||||
public override void OnClick()
|
||||
{
|
||||
if ( !m_Familiar.Deleted && m_Familiar.Controlled && m_From == m_Familiar.ControlMaster && m_From.CheckAlive() )
|
||||
m_Familiar.BeginRelease( m_From );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
82
Scripts/Mobiles/Familiars/DarkWolf.cs
Normal file
82
Scripts/Mobiles/Familiars/DarkWolf.cs
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a dark wolf corpse" )]
|
||||
public class DarkWolfFamiliar : BaseFamiliar
|
||||
{
|
||||
public DarkWolfFamiliar()
|
||||
{
|
||||
Name = "a dark wolf";
|
||||
Body = 99;
|
||||
Hue = 0x901;
|
||||
BaseSoundID = 0xE5;
|
||||
|
||||
SetStr( 100 );
|
||||
SetDex( 90 );
|
||||
SetInt( 90 );
|
||||
|
||||
SetHits( 60 );
|
||||
SetStam( 90 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 10 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 40, 50 );
|
||||
SetResistance( ResistanceType.Fire, 25, 40 );
|
||||
SetResistance( ResistanceType.Cold, 25, 40 );
|
||||
SetResistance( ResistanceType.Poison, 25, 40 );
|
||||
SetResistance( ResistanceType.Energy, 25, 40 );
|
||||
|
||||
SetSkill( SkillName.Wrestling, 85.1, 90.0 );
|
||||
SetSkill( SkillName.Tactics, 50.0 );
|
||||
|
||||
ControlSlots = 1;
|
||||
}
|
||||
|
||||
private DateTime m_NextRestore;
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
base.OnThink();
|
||||
|
||||
if ( DateTime.Now < m_NextRestore )
|
||||
return;
|
||||
|
||||
m_NextRestore = DateTime.Now + TimeSpan.FromSeconds( 2.0 );
|
||||
|
||||
Mobile caster = ControlMaster;
|
||||
|
||||
if ( caster == null )
|
||||
caster = SummonMaster;
|
||||
|
||||
if ( caster != null )
|
||||
++caster.Stam;
|
||||
}
|
||||
|
||||
public DarkWolfFamiliar( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
58
Scripts/Mobiles/Familiars/DeathAdder.cs
Normal file
58
Scripts/Mobiles/Familiars/DeathAdder.cs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a death adder corpse" )]
|
||||
public class DeathAdder : BaseFamiliar
|
||||
{
|
||||
public DeathAdder()
|
||||
{
|
||||
Name = "a death adder";
|
||||
Body = 0x15;
|
||||
Hue = 0x455;
|
||||
BaseSoundID = 219;
|
||||
|
||||
SetStr( 70 );
|
||||
SetDex( 150 );
|
||||
SetInt( 100 );
|
||||
|
||||
SetHits( 50 );
|
||||
SetStam( 150 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 1, 4 );
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 10 );
|
||||
SetResistance( ResistanceType.Poison, 100 );
|
||||
|
||||
SetSkill( SkillName.Wrestling, 90.0 );
|
||||
SetSkill( SkillName.Tactics, 50.0 );
|
||||
SetSkill( SkillName.MagicResist, 100.0 );
|
||||
SetSkill( SkillName.Poisoning, 150.0 );
|
||||
|
||||
ControlSlots = 1;
|
||||
}
|
||||
|
||||
public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly); } }
|
||||
|
||||
public DeathAdder( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.WriteEncodedInt( 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadEncodedInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
199
Scripts/Mobiles/Familiars/HordeMinion.cs
Normal file
199
Scripts/Mobiles/Familiars/HordeMinion.cs
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
using Server.ContextMenus;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a horde minion corpse" )]
|
||||
public class HordeMinionFamiliar : BaseFamiliar
|
||||
{
|
||||
public HordeMinionFamiliar()
|
||||
{
|
||||
Name = "a horde minion";
|
||||
Body = 776;
|
||||
BaseSoundID = 0x39D;
|
||||
|
||||
SetStr( 100 );
|
||||
SetDex( 110 );
|
||||
SetInt( 100 );
|
||||
|
||||
SetHits( 70 );
|
||||
SetStam( 110 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 10 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 50, 60 );
|
||||
SetResistance( ResistanceType.Fire, 50, 55 );
|
||||
SetResistance( ResistanceType.Poison, 25, 30 );
|
||||
SetResistance( ResistanceType.Energy, 25, 30 );
|
||||
|
||||
SetSkill( SkillName.Wrestling, 70.1, 75.0 );
|
||||
SetSkill( SkillName.Tactics, 50.0 );
|
||||
|
||||
ControlSlots = 1;
|
||||
|
||||
Container pack = Backpack;
|
||||
|
||||
if ( pack != null )
|
||||
pack.Delete();
|
||||
|
||||
pack = new StrongBackpack();
|
||||
pack.Movable = false;
|
||||
|
||||
AddItem( pack );
|
||||
}
|
||||
|
||||
private DateTime m_NextPickup;
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
base.OnThink();
|
||||
|
||||
if ( DateTime.Now < m_NextPickup )
|
||||
return;
|
||||
|
||||
m_NextPickup = DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 5, 10 ) );
|
||||
|
||||
Container pack = this.Backpack;
|
||||
|
||||
if ( pack == null )
|
||||
return;
|
||||
|
||||
ArrayList list = new ArrayList();
|
||||
|
||||
foreach ( Item item in this.GetItemsInRange( 2 ) )
|
||||
{
|
||||
if ( item.Movable && item.Stackable )
|
||||
list.Add( item );
|
||||
}
|
||||
|
||||
int pickedUp = 0;
|
||||
|
||||
for ( int i = 0; i < list.Count; ++i )
|
||||
{
|
||||
Item item = (Item)list[i];
|
||||
|
||||
if ( !pack.CheckHold( this, item, false, true ) )
|
||||
return;
|
||||
|
||||
bool rejected;
|
||||
LRReason reject;
|
||||
|
||||
NextActionTime = DateTime.Now;
|
||||
|
||||
Lift( item, item.Amount, out rejected, out reject );
|
||||
|
||||
if ( rejected )
|
||||
continue;
|
||||
|
||||
Drop( this, Point3D.Zero );
|
||||
|
||||
if ( ++pickedUp == 3 )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void ConfirmRelease_Callback( Mobile from, bool okay, object state )
|
||||
{
|
||||
if ( okay )
|
||||
EndRelease( from );
|
||||
}
|
||||
|
||||
public override void BeginRelease( Mobile from )
|
||||
{
|
||||
Container pack = this.Backpack;
|
||||
|
||||
if ( pack != null && pack.Items.Count > 0 )
|
||||
from.SendGump( new WarningGump( 1060635, 30720, 1061672, 32512, 420, 280, new WarningGumpCallback( ConfirmRelease_Callback ), null ) );
|
||||
else
|
||||
EndRelease( from );
|
||||
}
|
||||
|
||||
#region Pack Animal Methods
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
if ( !base.OnBeforeDeath() )
|
||||
return false;
|
||||
|
||||
PackAnimal.CombineBackpacks( this );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override DeathMoveResult GetInventoryMoveResultFor( Item item )
|
||||
{
|
||||
return DeathMoveResult.MoveToCorpse;
|
||||
}
|
||||
|
||||
public override bool IsSnoop( Mobile from )
|
||||
{
|
||||
if ( PackAnimal.CheckAccess( this, from ) )
|
||||
return false;
|
||||
|
||||
return base.IsSnoop( from );
|
||||
}
|
||||
|
||||
public override bool OnDragDrop( Mobile from, Item item )
|
||||
{
|
||||
if ( CheckFeed( from, item ) )
|
||||
return true;
|
||||
|
||||
if ( PackAnimal.CheckAccess( this, from ) )
|
||||
{
|
||||
AddToBackpack( item );
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.OnDragDrop( from, item );
|
||||
}
|
||||
|
||||
public override bool CheckNonlocalDrop( Mobile from, Item item, Item target )
|
||||
{
|
||||
return PackAnimal.CheckAccess( this, from );
|
||||
}
|
||||
|
||||
public override bool CheckNonlocalLift( Mobile from, Item item )
|
||||
{
|
||||
return PackAnimal.CheckAccess( this, from );
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
PackAnimal.TryPackOpen( this, from );
|
||||
}
|
||||
|
||||
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
|
||||
{
|
||||
base.GetContextMenuEntries( from, list );
|
||||
|
||||
PackAnimal.GetContextMenuEntries( this, from, list );
|
||||
}
|
||||
#endregion
|
||||
|
||||
public HordeMinionFamiliar( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
116
Scripts/Mobiles/Familiars/ShadowWisp.cs
Normal file
116
Scripts/Mobiles/Familiars/ShadowWisp.cs
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a shadow wisp corpse" )]
|
||||
public class ShadowWispFamiliar : BaseFamiliar
|
||||
{
|
||||
public ShadowWispFamiliar()
|
||||
{
|
||||
Name = "a shadow wisp";
|
||||
Body = 165;
|
||||
Hue = 0x901;
|
||||
BaseSoundID = 466;
|
||||
|
||||
SetStr( 50 );
|
||||
SetDex( 60 );
|
||||
SetInt( 100 );
|
||||
|
||||
SetHits( 50 );
|
||||
SetStam( 60 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 10 );
|
||||
|
||||
SetDamageType( ResistanceType.Energy, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 10, 15 );
|
||||
SetResistance( ResistanceType.Fire, 10, 15 );
|
||||
SetResistance( ResistanceType.Cold, 10, 15 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
SetResistance( ResistanceType.Energy, 99 );
|
||||
|
||||
SetSkill( SkillName.Wrestling, 40.0 );
|
||||
SetSkill( SkillName.Tactics, 40.0 );
|
||||
|
||||
ControlSlots = 1;
|
||||
}
|
||||
|
||||
private DateTime m_NextFlare;
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
base.OnThink();
|
||||
|
||||
if ( DateTime.Now < m_NextFlare )
|
||||
return;
|
||||
|
||||
m_NextFlare = DateTime.Now + TimeSpan.FromSeconds( 5.0 + (25.0 * Utility.RandomDouble()) );
|
||||
|
||||
this.FixedEffect( 0x37C4, 1, 12, 1109, 6 );
|
||||
this.PlaySound( 0x1D3 );
|
||||
|
||||
Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), new TimerCallback( Flare ) );
|
||||
}
|
||||
|
||||
private void Flare()
|
||||
{
|
||||
Mobile caster = this.ControlMaster;
|
||||
|
||||
if ( caster == null )
|
||||
caster = this.SummonMaster;
|
||||
|
||||
if ( caster == null )
|
||||
return;
|
||||
|
||||
ArrayList list = new ArrayList();
|
||||
|
||||
foreach ( Mobile m in this.GetMobilesInRange( 5 ) )
|
||||
{
|
||||
if ( m.Player && m.Alive && !m.IsDeadBondedPet && m.Karma <= 0 )
|
||||
list.Add( m );
|
||||
}
|
||||
|
||||
for ( int i = 0; i < list.Count; ++i )
|
||||
{
|
||||
Mobile m = (Mobile)list[i];
|
||||
bool friendly = true;
|
||||
|
||||
for ( int j = 0; friendly && j < caster.Aggressors.Count; ++j )
|
||||
friendly = ( caster.Aggressors[j].Attacker != m );
|
||||
|
||||
for ( int j = 0; friendly && j < caster.Aggressed.Count; ++j )
|
||||
friendly = ( caster.Aggressed[j].Defender != m );
|
||||
|
||||
if ( friendly )
|
||||
{
|
||||
m.FixedEffect( 0x37C4, 1, 12, 1109, 3 ); // At player
|
||||
m.Mana += 1 - (m.Karma / 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ShadowWispFamiliar( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
61
Scripts/Mobiles/Familiars/VampireBat.cs
Normal file
61
Scripts/Mobiles/Familiars/VampireBat.cs
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a vampire bat corpse" )]
|
||||
public class VampireBatFamiliar : BaseFamiliar
|
||||
{
|
||||
public VampireBatFamiliar()
|
||||
{
|
||||
Name = "a vampire bat";
|
||||
Body = 317;
|
||||
BaseSoundID = 0x270;
|
||||
|
||||
SetStr( 120 );
|
||||
SetDex( 120 );
|
||||
SetInt( 100 );
|
||||
|
||||
SetHits( 90 );
|
||||
SetStam( 120 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 10 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 10, 15 );
|
||||
SetResistance( ResistanceType.Fire, 10, 15 );
|
||||
SetResistance( ResistanceType.Cold, 10, 15 );
|
||||
SetResistance( ResistanceType.Poison, 10, 15 );
|
||||
SetResistance( ResistanceType.Energy, 10, 15 );
|
||||
|
||||
SetSkill( SkillName.Wrestling, 95.1, 100.0 );
|
||||
SetSkill( SkillName.Tactics, 50.0 );
|
||||
|
||||
ControlSlots = 1;
|
||||
}
|
||||
|
||||
public VampireBatFamiliar( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
397
Scripts/Mobiles/Guards/ArcherGuard.cs
Normal file
397
Scripts/Mobiles/Guards/ArcherGuard.cs
Normal file
|
|
@ -0,0 +1,397 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server.Misc;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class ArcherGuard : BaseGuard
|
||||
{
|
||||
private Timer m_AttackTimer, m_IdleTimer;
|
||||
|
||||
private Mobile m_Focus;
|
||||
|
||||
[Constructable]
|
||||
public ArcherGuard() : this( null )
|
||||
{
|
||||
}
|
||||
|
||||
public ArcherGuard( Mobile target ) : base( target )
|
||||
{
|
||||
InitStats( 100, 125, 25 );
|
||||
Title = "the guard";
|
||||
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
|
||||
if ( Female = Utility.RandomBool() )
|
||||
{
|
||||
Body = 0x191;
|
||||
Name = NameList.RandomName( "female" );
|
||||
}
|
||||
else
|
||||
{
|
||||
Body = 0x190;
|
||||
Name = NameList.RandomName( "male" );
|
||||
}
|
||||
|
||||
new Horse().Rider = this;
|
||||
|
||||
AddItem( new StuddedChest() );
|
||||
AddItem( new StuddedArms() );
|
||||
AddItem( new StuddedGloves() );
|
||||
AddItem( new StuddedGorget() );
|
||||
AddItem( new StuddedLegs() );
|
||||
AddItem( new Boots() );
|
||||
AddItem( new SkullCap() );
|
||||
|
||||
Bow bow = new Bow();
|
||||
|
||||
bow.Movable = false;
|
||||
bow.Crafter = this;
|
||||
bow.Quality = WeaponQuality.Exceptional;
|
||||
|
||||
AddItem( bow );
|
||||
|
||||
Container pack = new Backpack();
|
||||
|
||||
pack.Movable = false;
|
||||
|
||||
Arrow arrows = new Arrow( 250 );
|
||||
|
||||
arrows.LootType = LootType.Newbied;
|
||||
|
||||
pack.DropItem( arrows );
|
||||
pack.DropItem( new Gold( 10, 25 ) );
|
||||
|
||||
AddItem( pack );
|
||||
|
||||
Skills[SkillName.Anatomy].Base = 120.0;
|
||||
Skills[SkillName.Tactics].Base = 120.0;
|
||||
Skills[SkillName.Archery].Base = 120.0;
|
||||
Skills[SkillName.MagicResist].Base = 120.0;
|
||||
Skills[SkillName.DetectHidden].Base = 100.0;
|
||||
|
||||
this.NextCombatTime = DateTime.Now + TimeSpan.FromSeconds( 0.5 );
|
||||
this.Focus = target;
|
||||
}
|
||||
|
||||
public ArcherGuard( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
if ( m_Focus != null && m_Focus.Alive )
|
||||
new AvengeTimer( m_Focus ).Start(); // If a guard dies, three more guards will spawn
|
||||
|
||||
return base.OnBeforeDeath();
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public override Mobile Focus
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Focus;
|
||||
}
|
||||
set
|
||||
{
|
||||
if ( Deleted )
|
||||
return;
|
||||
|
||||
Mobile oldFocus = m_Focus;
|
||||
|
||||
if ( oldFocus != value )
|
||||
{
|
||||
m_Focus = value;
|
||||
|
||||
if ( value != null )
|
||||
this.AggressiveAction( value );
|
||||
|
||||
Combatant = value;
|
||||
|
||||
if ( oldFocus != null && !oldFocus.Alive )
|
||||
Say( "Thou hast suffered thy punishment, scoundrel." );
|
||||
|
||||
if ( value != null )
|
||||
Say( 500131 ); // Thou wilt regret thine actions, swine!
|
||||
|
||||
if ( m_AttackTimer != null )
|
||||
{
|
||||
m_AttackTimer.Stop();
|
||||
m_AttackTimer = null;
|
||||
}
|
||||
|
||||
if ( m_IdleTimer != null )
|
||||
{
|
||||
m_IdleTimer.Stop();
|
||||
m_IdleTimer = null;
|
||||
}
|
||||
|
||||
if ( m_Focus != null )
|
||||
{
|
||||
m_AttackTimer = new AttackTimer( this );
|
||||
m_AttackTimer.Start();
|
||||
((AttackTimer)m_AttackTimer).DoOnTick();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_IdleTimer = new IdleTimer( this );
|
||||
m_IdleTimer.Start();
|
||||
}
|
||||
}
|
||||
else if ( m_Focus == null && m_IdleTimer == null )
|
||||
{
|
||||
m_IdleTimer = new IdleTimer( this );
|
||||
m_IdleTimer.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
|
||||
writer.Write( m_Focus );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
m_Focus = reader.ReadMobile();
|
||||
|
||||
if ( m_Focus != null )
|
||||
{
|
||||
m_AttackTimer = new AttackTimer( this );
|
||||
m_AttackTimer.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_IdleTimer = new IdleTimer( this );
|
||||
m_IdleTimer.Start();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
{
|
||||
if ( m_AttackTimer != null )
|
||||
{
|
||||
m_AttackTimer.Stop();
|
||||
m_AttackTimer = null;
|
||||
}
|
||||
|
||||
if ( m_IdleTimer != null )
|
||||
{
|
||||
m_IdleTimer.Stop();
|
||||
m_IdleTimer = null;
|
||||
}
|
||||
|
||||
base.OnAfterDelete();
|
||||
}
|
||||
|
||||
private class AvengeTimer : Timer
|
||||
{
|
||||
private Mobile m_Focus;
|
||||
|
||||
public AvengeTimer( Mobile focus ) : base( TimeSpan.FromSeconds( 2.5 ), TimeSpan.FromSeconds( 1.0 ), 3 ) // After 2.5 seconds, one guard will spawn every 1.0 second, three times
|
||||
{
|
||||
m_Focus = focus;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
BaseGuard.Spawn( m_Focus, m_Focus, 1, true );
|
||||
}
|
||||
}
|
||||
|
||||
private class AttackTimer : Timer
|
||||
{
|
||||
private ArcherGuard m_Owner;
|
||||
// private bool m_Shooting;
|
||||
|
||||
public AttackTimer( ArcherGuard owner ) : base( TimeSpan.FromSeconds( 0.25 ), TimeSpan.FromSeconds( 0.1 ) )
|
||||
{
|
||||
m_Owner = owner;
|
||||
}
|
||||
|
||||
public void DoOnTick()
|
||||
{
|
||||
OnTick();
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if ( m_Owner.Deleted )
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
m_Owner.Criminal = false;
|
||||
m_Owner.Kills = 0;
|
||||
m_Owner.Stam = m_Owner.StamMax;
|
||||
|
||||
Mobile target = m_Owner.Focus;
|
||||
|
||||
if ( target != null && (target.Deleted || !target.Alive || !m_Owner.CanBeHarmful( target )) )
|
||||
{
|
||||
m_Owner.Focus = null;
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
else if ( m_Owner.Weapon is Fists )
|
||||
{
|
||||
m_Owner.Kill();
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( target != null && m_Owner.Combatant != target )
|
||||
m_Owner.Combatant = target;
|
||||
|
||||
if ( target == null )
|
||||
{
|
||||
Stop();
|
||||
}
|
||||
else
|
||||
{// <instakill>
|
||||
TeleportTo( target );
|
||||
target.BoltEffect( 0 );
|
||||
|
||||
if ( target is BaseCreature )
|
||||
((BaseCreature)target).NoKillAwards = true;
|
||||
|
||||
target.Damage( target.HitsMax, m_Owner );
|
||||
target.Kill(); // just in case, maybe Damage is overriden on some shard
|
||||
|
||||
if ( target.Corpse != null && !target.Player )
|
||||
target.Corpse.Delete();
|
||||
|
||||
m_Owner.Focus = null;
|
||||
Stop();
|
||||
}// </instakill>
|
||||
/*else if ( !m_Owner.InRange( target, 20 ) )
|
||||
{
|
||||
m_Shooting = false;
|
||||
m_Owner.Focus = null;
|
||||
}
|
||||
else if ( !m_Owner.InLOS( target ) )
|
||||
{
|
||||
m_Shooting = false;
|
||||
TeleportTo( target );
|
||||
}
|
||||
else if ( !m_Owner.CanSee( target ) )
|
||||
{
|
||||
m_Shooting = false;
|
||||
|
||||
if ( !m_Owner.InRange( target, 2 ) )
|
||||
{
|
||||
if ( !m_Owner.Move( m_Owner.GetDirectionTo( target ) | Direction.Running ) && OutOfMaxDistance( target ) )
|
||||
TeleportTo( target );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !m_Owner.UseSkill( SkillName.DetectHidden ) && Utility.Random( 50 ) == 0 )
|
||||
m_Owner.Say( "Reveal!" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_Shooting && (TimeToSpare() || OutOfMaxDistance( target )) )
|
||||
m_Shooting = false;
|
||||
else if ( !m_Shooting && InMinDistance( target ) )
|
||||
m_Shooting = true;
|
||||
|
||||
if ( !m_Shooting )
|
||||
{
|
||||
if ( m_Owner.InRange( target, 1 ) )
|
||||
{
|
||||
if ( !m_Owner.Move( (Direction)(m_Owner.GetDirectionTo( target ) - 4) | Direction.Running ) && OutOfMaxDistance( target ) ) // Too close, move away
|
||||
TeleportTo( target );
|
||||
}
|
||||
else if ( !m_Owner.InRange( target, 2 ) )
|
||||
{
|
||||
if ( !m_Owner.Move( m_Owner.GetDirectionTo( target ) | Direction.Running ) && OutOfMaxDistance( target ) )
|
||||
TeleportTo( target );
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
private bool TimeToSpare()
|
||||
{
|
||||
return (m_Owner.NextCombatTime - DateTime.Now) > TimeSpan.FromSeconds( 1.0 );
|
||||
}
|
||||
|
||||
private bool OutOfMaxDistance( Mobile target )
|
||||
{
|
||||
return !m_Owner.InRange( target, m_Owner.Weapon.MaxRange );
|
||||
}
|
||||
|
||||
private bool InMinDistance( Mobile target )
|
||||
{
|
||||
return m_Owner.InRange( target, 4 );
|
||||
}
|
||||
|
||||
private void TeleportTo( Mobile target )
|
||||
{
|
||||
Point3D from = m_Owner.Location;
|
||||
Point3D to = target.Location;
|
||||
|
||||
m_Owner.Location = to;
|
||||
|
||||
Effects.SendLocationParticles( EffectItem.Create( from, m_Owner.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 2023 );
|
||||
Effects.SendLocationParticles( EffectItem.Create( to, m_Owner.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 5023 );
|
||||
|
||||
m_Owner.PlaySound( 0x1FE );
|
||||
}
|
||||
}
|
||||
|
||||
private class IdleTimer : Timer
|
||||
{
|
||||
private ArcherGuard m_Owner;
|
||||
private int m_Stage;
|
||||
|
||||
public IdleTimer( ArcherGuard owner ) : base( TimeSpan.FromSeconds( 2.0 ), TimeSpan.FromSeconds( 2.5 ) )
|
||||
{
|
||||
m_Owner = owner;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if ( m_Owner.Deleted )
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( (m_Stage++ % 4) == 0 || !m_Owner.Move( m_Owner.Direction ) )
|
||||
m_Owner.Direction = (Direction)Utility.Random( 8 );
|
||||
|
||||
if ( m_Stage > 16 )
|
||||
{
|
||||
Effects.SendLocationParticles( EffectItem.Create( m_Owner.Location, m_Owner.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 2023 );
|
||||
m_Owner.PlaySound( 0x1FE );
|
||||
|
||||
m_Owner.Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
86
Scripts/Mobiles/Guards/BaseGuard.cs
Normal file
86
Scripts/Mobiles/Guards/BaseGuard.cs
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server.Misc;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public abstract class BaseGuard : Mobile
|
||||
{
|
||||
public static void Spawn( Mobile caller, Mobile target )
|
||||
{
|
||||
Spawn( caller, target, 1, false );
|
||||
}
|
||||
|
||||
public static void Spawn( Mobile caller, Mobile target, int amount, bool onlyAdditional )
|
||||
{
|
||||
if ( target == null || target.Deleted )
|
||||
return;
|
||||
|
||||
foreach ( Mobile m in target.GetMobilesInRange( 15 ) )
|
||||
{
|
||||
if ( m is BaseGuard )
|
||||
{
|
||||
BaseGuard g = (BaseGuard)m;
|
||||
|
||||
if ( g.Focus == null ) // idling
|
||||
{
|
||||
g.Focus = target;
|
||||
|
||||
--amount;
|
||||
}
|
||||
else if ( g.Focus == target && !onlyAdditional )
|
||||
{
|
||||
--amount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while ( amount-- > 0 )
|
||||
caller.Region.MakeGuard( target );
|
||||
}
|
||||
|
||||
public BaseGuard( Mobile target )
|
||||
{
|
||||
if ( target != null )
|
||||
{
|
||||
Location = target.Location;
|
||||
Map = target.Map;
|
||||
|
||||
Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 5023 );
|
||||
}
|
||||
}
|
||||
|
||||
public BaseGuard( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 2023 );
|
||||
|
||||
PlaySound( 0x1FE );
|
||||
|
||||
Delete();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public abstract Mobile Focus{ get; set; }
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
369
Scripts/Mobiles/Guards/WarriorGuard.cs
Normal file
369
Scripts/Mobiles/Guards/WarriorGuard.cs
Normal file
|
|
@ -0,0 +1,369 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server.Misc;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Targeting;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class WarriorGuard : BaseGuard
|
||||
{
|
||||
private Timer m_AttackTimer, m_IdleTimer;
|
||||
|
||||
private Mobile m_Focus;
|
||||
|
||||
[Constructable]
|
||||
public WarriorGuard() : this( null )
|
||||
{
|
||||
}
|
||||
|
||||
public WarriorGuard( Mobile target ) : base( target )
|
||||
{
|
||||
InitStats( 1000, 1000, 1000 );
|
||||
Title = "the guard";
|
||||
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
|
||||
if ( Female = Utility.RandomBool() )
|
||||
{
|
||||
Body = 0x191;
|
||||
Name = NameList.RandomName( "female" );
|
||||
|
||||
switch( Utility.Random( 2 ) )
|
||||
{
|
||||
case 0: AddItem( new LeatherSkirt() ); break;
|
||||
case 1: AddItem( new LeatherShorts() ); break;
|
||||
}
|
||||
|
||||
switch( Utility.Random( 5 ) )
|
||||
{
|
||||
case 0: AddItem( new FemaleLeatherChest() ); break;
|
||||
case 1: AddItem( new FemaleStuddedChest() ); break;
|
||||
case 2: AddItem( new LeatherBustierArms() ); break;
|
||||
case 3: AddItem( new StuddedBustierArms() ); break;
|
||||
case 4: AddItem( new FemalePlateChest() ); break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Body = 0x190;
|
||||
Name = NameList.RandomName( "male" );
|
||||
|
||||
AddItem( new PlateChest() );
|
||||
AddItem( new PlateArms() );
|
||||
AddItem( new PlateLegs() );
|
||||
|
||||
switch( Utility.Random( 3 ) )
|
||||
{
|
||||
case 0: AddItem( new Doublet( Utility.RandomNondyedHue() ) ); break;
|
||||
case 1: AddItem( new Tunic( Utility.RandomNondyedHue() ) ); break;
|
||||
case 2: AddItem( new BodySash( Utility.RandomNondyedHue() ) ); break;
|
||||
}
|
||||
}
|
||||
Utility.AssignRandomHair( this );
|
||||
|
||||
if( Utility.RandomBool() )
|
||||
Utility.AssignRandomFacialHair( this, HairHue );
|
||||
|
||||
Halberd weapon = new Halberd();
|
||||
|
||||
weapon.Movable = false;
|
||||
weapon.Crafter = this;
|
||||
weapon.Quality = WeaponQuality.Exceptional;
|
||||
|
||||
AddItem( weapon );
|
||||
|
||||
Container pack = new Backpack();
|
||||
|
||||
pack.Movable = false;
|
||||
|
||||
pack.DropItem( new Gold( 10, 25 ) );
|
||||
|
||||
AddItem( pack );
|
||||
|
||||
Skills[SkillName.Anatomy].Base = 120.0;
|
||||
Skills[SkillName.Tactics].Base = 120.0;
|
||||
Skills[SkillName.Swords].Base = 120.0;
|
||||
Skills[SkillName.MagicResist].Base = 120.0;
|
||||
Skills[SkillName.DetectHidden].Base = 100.0;
|
||||
|
||||
this.NextCombatTime = DateTime.Now + TimeSpan.FromSeconds( 0.5 );
|
||||
this.Focus = target;
|
||||
}
|
||||
|
||||
public WarriorGuard( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
if ( m_Focus != null && m_Focus.Alive )
|
||||
new AvengeTimer( m_Focus ).Start(); // If a guard dies, three more guards will spawn
|
||||
|
||||
return base.OnBeforeDeath();
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public override Mobile Focus
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Focus;
|
||||
}
|
||||
set
|
||||
{
|
||||
if ( Deleted )
|
||||
return;
|
||||
|
||||
Mobile oldFocus = m_Focus;
|
||||
|
||||
if ( oldFocus != value )
|
||||
{
|
||||
m_Focus = value;
|
||||
|
||||
if ( value != null )
|
||||
this.AggressiveAction( value );
|
||||
|
||||
Combatant = value;
|
||||
|
||||
if ( oldFocus != null && !oldFocus.Alive )
|
||||
Say( "Thou hast suffered thy punishment, scoundrel." );
|
||||
|
||||
if ( value != null )
|
||||
Say( 500131 ); // Thou wilt regret thine actions, swine!
|
||||
|
||||
if ( m_AttackTimer != null )
|
||||
{
|
||||
m_AttackTimer.Stop();
|
||||
m_AttackTimer = null;
|
||||
}
|
||||
|
||||
if ( m_IdleTimer != null )
|
||||
{
|
||||
m_IdleTimer.Stop();
|
||||
m_IdleTimer = null;
|
||||
}
|
||||
|
||||
if ( m_Focus != null )
|
||||
{
|
||||
m_AttackTimer = new AttackTimer( this );
|
||||
m_AttackTimer.Start();
|
||||
((AttackTimer)m_AttackTimer).DoOnTick();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_IdleTimer = new IdleTimer( this );
|
||||
m_IdleTimer.Start();
|
||||
}
|
||||
}
|
||||
else if ( m_Focus == null && m_IdleTimer == null )
|
||||
{
|
||||
m_IdleTimer = new IdleTimer( this );
|
||||
m_IdleTimer.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
|
||||
writer.Write( m_Focus );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
m_Focus = reader.ReadMobile();
|
||||
|
||||
if ( m_Focus != null )
|
||||
{
|
||||
m_AttackTimer = new AttackTimer( this );
|
||||
m_AttackTimer.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_IdleTimer = new IdleTimer( this );
|
||||
m_IdleTimer.Start();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
{
|
||||
if ( m_AttackTimer != null )
|
||||
{
|
||||
m_AttackTimer.Stop();
|
||||
m_AttackTimer = null;
|
||||
}
|
||||
|
||||
if ( m_IdleTimer != null )
|
||||
{
|
||||
m_IdleTimer.Stop();
|
||||
m_IdleTimer = null;
|
||||
}
|
||||
|
||||
base.OnAfterDelete();
|
||||
}
|
||||
|
||||
private class AvengeTimer : Timer
|
||||
{
|
||||
private Mobile m_Focus;
|
||||
|
||||
public AvengeTimer( Mobile focus ) : base( TimeSpan.FromSeconds( 2.5 ), TimeSpan.FromSeconds( 1.0 ), 3 )
|
||||
{
|
||||
m_Focus = focus;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
BaseGuard.Spawn( m_Focus, m_Focus, 1, true );
|
||||
}
|
||||
}
|
||||
|
||||
private class AttackTimer : Timer
|
||||
{
|
||||
private WarriorGuard m_Owner;
|
||||
|
||||
public AttackTimer( WarriorGuard owner ) : base( TimeSpan.FromSeconds( 0.25 ), TimeSpan.FromSeconds( 0.1 ) )
|
||||
{
|
||||
m_Owner = owner;
|
||||
}
|
||||
|
||||
public void DoOnTick()
|
||||
{
|
||||
OnTick();
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if ( m_Owner.Deleted )
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
m_Owner.Criminal = false;
|
||||
m_Owner.Kills = 0;
|
||||
m_Owner.Stam = m_Owner.StamMax;
|
||||
|
||||
Mobile target = m_Owner.Focus;
|
||||
|
||||
if ( target != null && (target.Deleted || !target.Alive || !m_Owner.CanBeHarmful( target )) )
|
||||
{
|
||||
m_Owner.Focus = null;
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
else if ( m_Owner.Weapon is Fists )
|
||||
{
|
||||
m_Owner.Kill();
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( target != null && m_Owner.Combatant != target )
|
||||
m_Owner.Combatant = target;
|
||||
|
||||
if ( target == null )
|
||||
{
|
||||
Stop();
|
||||
}
|
||||
else
|
||||
{// <instakill>
|
||||
TeleportTo( target );
|
||||
target.BoltEffect( 0 );
|
||||
|
||||
if ( target is BaseCreature )
|
||||
((BaseCreature)target).NoKillAwards = true;
|
||||
|
||||
target.Damage( target.HitsMax, m_Owner );
|
||||
target.Kill(); // just in case, maybe Damage is overriden on some shard
|
||||
|
||||
if ( target.Corpse != null && !target.Player )
|
||||
target.Corpse.Delete();
|
||||
|
||||
m_Owner.Focus = null;
|
||||
Stop();
|
||||
}// </instakill>
|
||||
/*else if ( !m_Owner.InRange( target, 20 ) )
|
||||
{
|
||||
m_Owner.Focus = null;
|
||||
}
|
||||
else if ( !m_Owner.InRange( target, 10 ) || !m_Owner.InLOS( target ) )
|
||||
{
|
||||
TeleportTo( target );
|
||||
}
|
||||
else if ( !m_Owner.InRange( target, 1 ) )
|
||||
{
|
||||
if ( !m_Owner.Move( m_Owner.GetDirectionTo( target ) | Direction.Running ) )
|
||||
TeleportTo( target );
|
||||
}
|
||||
else if ( !m_Owner.CanSee( target ) )
|
||||
{
|
||||
if ( !m_Owner.UseSkill( SkillName.DetectHidden ) && Utility.Random( 50 ) == 0 )
|
||||
m_Owner.Say( "Reveal!" );
|
||||
}*/
|
||||
}
|
||||
|
||||
private void TeleportTo( Mobile target )
|
||||
{
|
||||
Point3D from = m_Owner.Location;
|
||||
Point3D to = target.Location;
|
||||
|
||||
m_Owner.Location = to;
|
||||
|
||||
Effects.SendLocationParticles( EffectItem.Create( from, m_Owner.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 2023 );
|
||||
Effects.SendLocationParticles( EffectItem.Create( to, m_Owner.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 5023 );
|
||||
|
||||
m_Owner.PlaySound( 0x1FE );
|
||||
}
|
||||
}
|
||||
|
||||
private class IdleTimer : Timer
|
||||
{
|
||||
private WarriorGuard m_Owner;
|
||||
private int m_Stage;
|
||||
|
||||
public IdleTimer( WarriorGuard owner ) : base( TimeSpan.FromSeconds( 2.0 ), TimeSpan.FromSeconds( 2.5 ) )
|
||||
{
|
||||
m_Owner = owner;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if ( m_Owner.Deleted )
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( (m_Stage++ % 4) == 0 || !m_Owner.Move( m_Owner.Direction ) )
|
||||
m_Owner.Direction = (Direction)Utility.Random( 8 );
|
||||
|
||||
if ( m_Stage > 16 )
|
||||
{
|
||||
Effects.SendLocationParticles( EffectItem.Create( m_Owner.Location, m_Owner.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 2023 );
|
||||
m_Owner.PlaySound( 0x1FE );
|
||||
|
||||
m_Owner.Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
166
Scripts/Mobiles/Healers/BaseHealer.cs
Normal file
166
Scripts/Mobiles/Healers/BaseHealer.cs
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Misc;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public abstract class BaseHealer : BaseVendor
|
||||
{
|
||||
private ArrayList m_SBInfos = new ArrayList();
|
||||
protected override ArrayList SBInfos{ get { return m_SBInfos; } }
|
||||
|
||||
public override bool IsActiveVendor{ get{ return false; } }
|
||||
public override bool IsInvulnerable{ get{ return false; } }
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
}
|
||||
|
||||
public BaseHealer() : base( null )
|
||||
{
|
||||
if ( !IsInvulnerable )
|
||||
{
|
||||
AI = AIType.AI_Mage;
|
||||
ActiveSpeed = 0.2;
|
||||
PassiveSpeed = 0.8;
|
||||
RangePerception = BaseCreature.DefaultRangePerception;
|
||||
FightMode = FightMode.Aggressor;
|
||||
}
|
||||
|
||||
SpeechHue = 0;
|
||||
|
||||
SetStr( 304, 400 );
|
||||
SetDex( 102, 150 );
|
||||
SetInt( 204, 300 );
|
||||
|
||||
SetDamage( 10, 23 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 40, 50 );
|
||||
SetResistance( ResistanceType.Fire, 40, 50 );
|
||||
SetResistance( ResistanceType.Cold, 40, 50 );
|
||||
SetResistance( ResistanceType.Poison, 40, 50 );
|
||||
SetResistance( ResistanceType.Energy, 40, 50 );
|
||||
|
||||
SetSkill( SkillName.Anatomy, 75.0, 97.5 );
|
||||
SetSkill( SkillName.EvalInt, 82.0, 100.0 );
|
||||
SetSkill( SkillName.Healing, 75.0, 97.5 );
|
||||
SetSkill( SkillName.Magery, 82.0, 100.0 );
|
||||
SetSkill( SkillName.MagicResist, 82.0, 100.0 );
|
||||
SetSkill( SkillName.Tactics, 82.0, 100.0 );
|
||||
|
||||
Fame = 1000;
|
||||
Karma = 10000;
|
||||
|
||||
PackItem( new Bandage( Utility.RandomMinMax( 5, 10 ) ) );
|
||||
PackItem( new HealPotion() );
|
||||
PackItem( new CurePotion() );
|
||||
}
|
||||
|
||||
public override VendorShoeType ShoeType{ get{ return VendorShoeType.Sandals; } }
|
||||
|
||||
public virtual int GetRobeColor()
|
||||
{
|
||||
return Utility.RandomYellowHue();
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
AddItem( new Robe( GetRobeColor() ) );
|
||||
}
|
||||
|
||||
public virtual bool HealsYoungPlayers{ get{ return true; } }
|
||||
|
||||
public virtual bool CheckResurrect( Mobile m )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
private DateTime m_NextResurrect;
|
||||
private static TimeSpan ResurrectDelay = TimeSpan.FromSeconds( 2.0 );
|
||||
|
||||
public virtual void OfferResurrection( Mobile m )
|
||||
{
|
||||
Direction = GetDirectionTo( m );
|
||||
Say( 501224 ); // Thou hast strayed from the path of virtue, but thou still deservest a second chance.
|
||||
|
||||
m.PlaySound( 0x214 );
|
||||
m.FixedEffect( 0x376A, 10, 16 );
|
||||
|
||||
m.CloseGump( typeof( ResurrectGump ) );
|
||||
m.SendGump( new ResurrectGump( m, ResurrectMessage.Healer ) );
|
||||
}
|
||||
|
||||
public virtual void OfferHeal( PlayerMobile m )
|
||||
{
|
||||
Direction = GetDirectionTo( m );
|
||||
|
||||
if ( m.CheckYoungHealTime() )
|
||||
{
|
||||
Say( 501229 ); // You look like you need some healing my child.
|
||||
|
||||
m.PlaySound( 0x1F2 );
|
||||
m.FixedEffect( 0x376A, 9, 32 );
|
||||
|
||||
m.Hits = m.HitsMax;
|
||||
}
|
||||
else
|
||||
{
|
||||
Say( 501228 ); // I can do no more for you at this time.
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnMovement( Mobile m, Point3D oldLocation )
|
||||
{
|
||||
if ( !m.Frozen && DateTime.Now >= m_NextResurrect && InRange( m, 4 ) && !InRange( oldLocation, 4 ) && InLOS( m ) )
|
||||
{
|
||||
if ( !m.Alive )
|
||||
{
|
||||
m_NextResurrect = DateTime.Now + ResurrectDelay;
|
||||
|
||||
if ( m.Map == null || !m.Map.CanFit( m.Location, 16, false, false ) )
|
||||
{
|
||||
m.SendLocalizedMessage( 502391 ); // Thou can not be resurrected there!
|
||||
}
|
||||
else if ( CheckResurrect( m ) )
|
||||
{
|
||||
OfferResurrection( m );
|
||||
}
|
||||
}
|
||||
else if ( this.HealsYoungPlayers && m.Hits < m.HitsMax && m is PlayerMobile && ((PlayerMobile)m).Young )
|
||||
{
|
||||
OfferHeal( (PlayerMobile) m );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public BaseHealer( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
if ( !IsInvulnerable )
|
||||
{
|
||||
AI = AIType.AI_Mage;
|
||||
ActiveSpeed = 0.2;
|
||||
PassiveSpeed = 0.8;
|
||||
RangePerception = BaseCreature.DefaultRangePerception;
|
||||
FightMode = FightMode.Aggressor;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
64
Scripts/Mobiles/Healers/EvilHealer.cs
Normal file
64
Scripts/Mobiles/Healers/EvilHealer.cs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class EvilHealer : BaseHealer
|
||||
{
|
||||
public override bool CanTeach{ get{ return true; } }
|
||||
|
||||
public override bool CheckTeach( SkillName skill, Mobile from )
|
||||
{
|
||||
if ( !base.CheckTeach( skill, from ) )
|
||||
return false;
|
||||
|
||||
return ( skill == SkillName.Forensics )
|
||||
|| ( skill == SkillName.Healing )
|
||||
|| ( skill == SkillName.SpiritSpeak )
|
||||
|| ( skill == SkillName.Swords );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public EvilHealer()
|
||||
{
|
||||
Title = "the healer";
|
||||
|
||||
Karma = -10000;
|
||||
|
||||
SetSkill( SkillName.Forensics, 80.0, 100.0 );
|
||||
SetSkill( SkillName.SpiritSpeak, 80.0, 100.0 );
|
||||
SetSkill( SkillName.Swords, 80.0, 100.0 );
|
||||
}
|
||||
|
||||
public override bool AlwaysMurderer{ get{ return true; } }
|
||||
public override bool IsActiveVendor{ get{ return true; } }
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
SBInfos.Add( new SBHealer() );
|
||||
}
|
||||
|
||||
public override bool CheckResurrect( Mobile m )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public EvilHealer( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
65
Scripts/Mobiles/Healers/EvilWanderingHealer.cs
Normal file
65
Scripts/Mobiles/Healers/EvilWanderingHealer.cs
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class EvilWanderingHealer : BaseHealer
|
||||
{
|
||||
public override bool CanTeach{ get{ return true; } }
|
||||
|
||||
public override bool CheckTeach( SkillName skill, Mobile from )
|
||||
{
|
||||
if ( !base.CheckTeach( skill, from ) )
|
||||
return false;
|
||||
|
||||
return ( skill == SkillName.Anatomy )
|
||||
|| ( skill == SkillName.Camping )
|
||||
|| ( skill == SkillName.Forensics )
|
||||
|| ( skill == SkillName.Healing )
|
||||
|| ( skill == SkillName.SpiritSpeak );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public EvilWanderingHealer()
|
||||
{
|
||||
Title = ( Core.AOS ) ? "the Priest Of Mondain" : "the evil wandering healer";
|
||||
Karma = -10000;
|
||||
|
||||
AddItem( new GnarledStaff() );
|
||||
|
||||
SetSkill( SkillName.Camping, 80.0, 100.0 );
|
||||
SetSkill( SkillName.Forensics, 80.0, 100.0 );
|
||||
SetSkill( SkillName.SpiritSpeak, 80.0, 100.0 );
|
||||
}
|
||||
|
||||
public override bool AlwaysMurderer{ get{ return true; } }
|
||||
public override bool ClickTitle{ get{ return false; } } // Do not display title in OnSingleClick
|
||||
|
||||
public override bool CheckResurrect( Mobile m )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public EvilWanderingHealer( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 1 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( version < 1 && Title == "the wandering healer" && Core.AOS )
|
||||
Title = "the priest of Mondain";
|
||||
}
|
||||
}
|
||||
}
|
||||
80
Scripts/Mobiles/Healers/FortuneTeller.cs
Normal file
80
Scripts/Mobiles/Healers/FortuneTeller.cs
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class FortuneTeller : BaseHealer
|
||||
{
|
||||
public override bool CanTeach{ get{ return true; } }
|
||||
|
||||
public override bool CheckTeach( SkillName skill, Mobile from )
|
||||
{
|
||||
if ( !base.CheckTeach( skill, from ) )
|
||||
return false;
|
||||
|
||||
return ( skill == SkillName.Anatomy )
|
||||
|| ( skill == SkillName.Healing )
|
||||
|| ( skill == SkillName.Forensics )
|
||||
|| ( skill == SkillName.SpiritSpeak );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public FortuneTeller()
|
||||
{
|
||||
Title = "the fortune teller";
|
||||
|
||||
SetSkill( SkillName.Anatomy, 85.0, 100.0 );
|
||||
SetSkill( SkillName.Healing, 90.0, 100.0 );
|
||||
SetSkill( SkillName.Forensics, 75.0, 98.0 );
|
||||
SetSkill( SkillName.SpiritSpeak, 65.0, 88.0 );
|
||||
}
|
||||
|
||||
public override bool IsActiveVendor{ get{ return true; } }
|
||||
public override bool IsInvulnerable{ get{ return true; } }
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
SBInfos.Add( new SBMage() );
|
||||
SBInfos.Add( new SBFortuneTeller() );
|
||||
}
|
||||
|
||||
public override int GetRobeColor()
|
||||
{
|
||||
return RandomBrightHue();
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
switch ( Utility.Random( 3 ) )
|
||||
{
|
||||
case 0: AddItem( new SkullCap( RandomBrightHue() ) ); break;
|
||||
case 1: AddItem( new WizardsHat( RandomBrightHue() ) ); break;
|
||||
case 2: AddItem( new Bandana( RandomBrightHue() ) ); break;
|
||||
}
|
||||
|
||||
AddItem( new Spellbook() );
|
||||
}
|
||||
|
||||
public FortuneTeller( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
79
Scripts/Mobiles/Healers/Healer.cs
Normal file
79
Scripts/Mobiles/Healers/Healer.cs
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class Healer : BaseHealer
|
||||
{
|
||||
public override bool CanTeach{ get{ return true; } }
|
||||
|
||||
public override bool CheckTeach( SkillName skill, Mobile from )
|
||||
{
|
||||
if ( !base.CheckTeach( skill, from ) )
|
||||
return false;
|
||||
|
||||
return ( skill == SkillName.Forensics )
|
||||
|| ( skill == SkillName.Healing )
|
||||
|| ( skill == SkillName.SpiritSpeak )
|
||||
|| ( skill == SkillName.Swords );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Healer()
|
||||
{
|
||||
Title = "the healer";
|
||||
|
||||
if ( !Core.AOS )
|
||||
NameHue = 0x35;
|
||||
|
||||
SetSkill( SkillName.Forensics, 80.0, 100.0 );
|
||||
SetSkill( SkillName.SpiritSpeak, 80.0, 100.0 );
|
||||
SetSkill( SkillName.Swords, 80.0, 100.0 );
|
||||
}
|
||||
|
||||
public override bool IsActiveVendor{ get{ return true; } }
|
||||
public override bool IsInvulnerable{ get{ return true; } }
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
SBInfos.Add( new SBHealer() );
|
||||
}
|
||||
|
||||
public override bool CheckResurrect( Mobile m )
|
||||
{
|
||||
if ( m.Criminal )
|
||||
{
|
||||
Say( 501222 ); // Thou art a criminal. I shall not resurrect thee.
|
||||
return false;
|
||||
}
|
||||
else if ( m.Kills >= 5 )
|
||||
{
|
||||
Say( 501223 ); // Thou'rt not a decent and good person. I shall not resurrect thee.
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public Healer( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if ( Core.AOS && NameHue == 0x35 )
|
||||
NameHue = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
85
Scripts/Mobiles/Healers/PricedHealer.cs
Normal file
85
Scripts/Mobiles/Healers/PricedHealer.cs
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class PricedHealer : BaseHealer
|
||||
{
|
||||
private int m_Price;
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public int Price
|
||||
{
|
||||
get{ return m_Price; }
|
||||
set{ m_Price = value; }
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public PricedHealer() : this( 5000 )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public PricedHealer( int price )
|
||||
{
|
||||
m_Price = price;
|
||||
|
||||
if ( !Core.AOS )
|
||||
NameHue = 0x35;
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable{ get{ return true; } }
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
}
|
||||
|
||||
public override bool HealsYoungPlayers{ get{ return false; } }
|
||||
|
||||
public override void OfferResurrection( Mobile m )
|
||||
{
|
||||
Direction = GetDirectionTo( m );
|
||||
|
||||
m.PlaySound( 0x214 );
|
||||
m.FixedEffect( 0x376A, 10, 16 );
|
||||
|
||||
m.CloseGump( typeof( ResurrectGump ) );
|
||||
m.SendGump( new ResurrectGump( m, this, m_Price ) );
|
||||
}
|
||||
|
||||
public override bool CheckResurrect( Mobile m )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public PricedHealer( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
|
||||
writer.Write( (int) m_Price );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
m_Price = reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Scripts/Mobiles/Healers/WanderingHealer.cs
Normal file
71
Scripts/Mobiles/Healers/WanderingHealer.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class WanderingHealer : BaseHealer
|
||||
{
|
||||
public override bool CanTeach{ get{ return true; } }
|
||||
|
||||
public override bool CheckTeach( SkillName skill, Mobile from )
|
||||
{
|
||||
if ( !base.CheckTeach( skill, from ) )
|
||||
return false;
|
||||
|
||||
return ( skill == SkillName.Anatomy )
|
||||
|| ( skill == SkillName.Camping )
|
||||
|| ( skill == SkillName.Forensics )
|
||||
|| ( skill == SkillName.Healing )
|
||||
|| ( skill == SkillName.SpiritSpeak );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public WanderingHealer()
|
||||
{
|
||||
Title = "the wandering healer";
|
||||
|
||||
AddItem( new GnarledStaff() );
|
||||
|
||||
SetSkill( SkillName.Camping, 80.0, 100.0 );
|
||||
SetSkill( SkillName.Forensics, 80.0, 100.0 );
|
||||
SetSkill( SkillName.SpiritSpeak, 80.0, 100.0 );
|
||||
}
|
||||
|
||||
public override bool ClickTitle{ get{ return false; } } // Do not display title in OnSingleClick
|
||||
|
||||
public override bool CheckResurrect( Mobile m )
|
||||
{
|
||||
if ( m.Criminal )
|
||||
{
|
||||
Say( 501222 ); // Thou art a criminal. I shall not resurrect thee.
|
||||
return false;
|
||||
}
|
||||
else if ( m.Kills >= 5 )
|
||||
{
|
||||
Say( 501223 ); // Thou'rt not a decent and good person. I shall not resurrect thee.
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public WanderingHealer( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
92
Scripts/Mobiles/Monsters/AOS/AbysmalHorror.cs
Normal file
92
Scripts/Mobiles/Monsters/AOS/AbysmalHorror.cs
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "an abyssmal horror corpse" )]
|
||||
public class AbysmalHorror : BaseCreature
|
||||
{
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
return Utility.RandomBool() ? WeaponAbility.MortalStrike : WeaponAbility.WhirlwindAttack;
|
||||
}
|
||||
|
||||
public override bool IgnoreYoungProtection { get { return Core.ML; } }
|
||||
|
||||
[Constructable]
|
||||
public AbysmalHorror() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "an abyssmal horror";
|
||||
Body = 312;
|
||||
BaseSoundID = 0x451;
|
||||
|
||||
SetStr( 401, 420 );
|
||||
SetDex( 81, 90 );
|
||||
SetInt( 401, 420 );
|
||||
|
||||
SetHits( 6000 );
|
||||
|
||||
SetDamage( 13, 17 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 50 );
|
||||
SetDamageType( ResistanceType.Poison, 50 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 30, 35 );
|
||||
SetResistance( ResistanceType.Fire, 100 );
|
||||
SetResistance( ResistanceType.Cold, 50, 55 );
|
||||
SetResistance( ResistanceType.Poison, 60, 65 );
|
||||
SetResistance( ResistanceType.Energy, 77, 80 );
|
||||
|
||||
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 );
|
||||
|
||||
Fame = 26000;
|
||||
Karma = -26000;
|
||||
|
||||
VirtualArmor = 54;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.UltraRich, 2 );
|
||||
}
|
||||
|
||||
public override void OnDeath( Container c )
|
||||
{
|
||||
base.OnDeath( c );
|
||||
|
||||
if ( !Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance( this ) )
|
||||
DemonKnight.DistributeArtifact( this );
|
||||
}
|
||||
|
||||
public override bool BardImmune{ get{ return !Core.SE; } }
|
||||
public override bool Unprovokable{ get{ return Core.SE; } }
|
||||
public override bool Uncalmable{ get{ return Core.SE; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override int TreasureMapLevel{ get{ return 1; } }
|
||||
|
||||
public AbysmalHorror( 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();
|
||||
|
||||
if ( BaseSoundID == 357 )
|
||||
BaseSoundID = 0x451;
|
||||
}
|
||||
}
|
||||
}
|
||||
74
Scripts/Mobiles/Monsters/AOS/BoneDemon.cs
Normal file
74
Scripts/Mobiles/Monsters/AOS/BoneDemon.cs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a bone demon corpse" )]
|
||||
public class BoneDemon : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public BoneDemon() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a bone demon";
|
||||
Body = 308;
|
||||
BaseSoundID = 0x48D;
|
||||
|
||||
SetStr( 1000 );
|
||||
SetDex( 151, 175 );
|
||||
SetInt( 171, 220 );
|
||||
|
||||
SetHits( 3600 );
|
||||
|
||||
SetDamage( 34, 36 );
|
||||
|
||||
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 );
|
||||
|
||||
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;
|
||||
|
||||
VirtualArmor = 44;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.FilthyRich, 8 );
|
||||
}
|
||||
|
||||
public override bool Unprovokable{ get{ return true; } }
|
||||
public override bool Uncalmable{ get{ return true; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override int TreasureMapLevel{ get{ return 1; } }
|
||||
|
||||
public BoneDemon( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
78
Scripts/Mobiles/Monsters/AOS/CrystalElemental.cs
Normal file
78
Scripts/Mobiles/Monsters/AOS/CrystalElemental.cs
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a crystal elemental corpse" )]
|
||||
public class CrystalElemental : BaseCreature
|
||||
{
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
return WeaponAbility.BleedAttack;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public CrystalElemental() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a crystal elemental";
|
||||
Body = 300;
|
||||
BaseSoundID = 278;
|
||||
|
||||
SetStr( 136, 160 );
|
||||
SetDex( 51, 65 );
|
||||
SetInt( 86, 110 );
|
||||
|
||||
SetHits( 150 );
|
||||
|
||||
SetDamage( 10, 15 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 80 );
|
||||
SetDamageType( ResistanceType.Energy, 20 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 50, 60 );
|
||||
SetResistance( ResistanceType.Fire, 40, 50 );
|
||||
SetResistance( ResistanceType.Cold, 40, 50 );
|
||||
SetResistance( ResistanceType.Poison, 100 );
|
||||
SetResistance( ResistanceType.Energy, 55, 70 );
|
||||
|
||||
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 );
|
||||
|
||||
Fame = 6500;
|
||||
Karma = -6500;
|
||||
|
||||
VirtualArmor = 54;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Rich );
|
||||
AddLoot( LootPack.Average );
|
||||
}
|
||||
|
||||
public override bool BleedImmune{ get{ return true; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
|
||||
public override int TreasureMapLevel{ get{ return 1; } }
|
||||
|
||||
public CrystalElemental( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue