150 lines
3.7 KiB
C#
150 lines
3.7 KiB
C#
using Server.Items;
|
|
|
|
namespace Server.Mobiles
|
|
{
|
|
[CorpseName("a trapdoor spider corpse")]
|
|
public class TrapdoorSpider : BaseCreature
|
|
{
|
|
public override bool CanStealth { get { return true; } }
|
|
|
|
[Constructable]
|
|
public TrapdoorSpider()
|
|
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
|
{
|
|
Name = "a trapdoor spider";
|
|
Body = 737;
|
|
Hidden = true;
|
|
|
|
SetStr(100, 104);
|
|
SetDex(162, 165);
|
|
SetInt(29, 50);
|
|
|
|
SetHits(125, 144);
|
|
|
|
SetDamage(15, 18);
|
|
|
|
SetDamageType(ResistanceType.Physical, 20);
|
|
SetDamageType(ResistanceType.Poison, 80);
|
|
|
|
SetResistance(ResistanceType.Physical, 0);
|
|
SetResistance(ResistanceType.Fire, 30, 35);
|
|
SetResistance(ResistanceType.Cold, 30, 35);
|
|
SetResistance(ResistanceType.Poison, 40, 45);
|
|
SetResistance(ResistanceType.Energy, 95, 100);
|
|
|
|
SetSkill(SkillName.Anatomy, 2.0, 3.8);
|
|
SetSkill(SkillName.MagicResist, 47.5, 57.9);
|
|
SetSkill(SkillName.Poisoning, 70.5, 73.5);
|
|
SetSkill(SkillName.Tactics, 73.3, 78.9);
|
|
SetSkill(SkillName.Wrestling, 92.5, 94.6);
|
|
SetSkill(SkillName.Hiding, 110.3, 119.9);
|
|
SetSkill(SkillName.Stealth, 110.5, 119.6);
|
|
}
|
|
|
|
public TrapdoorSpider(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void OnDamage(int amount, Mobile from, bool willKill)
|
|
{
|
|
RevealingAction();
|
|
base.OnDamage(amount, from, willKill);
|
|
}
|
|
|
|
public override void OnDamagedBySpell(Mobile from)
|
|
{
|
|
RevealingAction();
|
|
base.OnDamagedBySpell(from);
|
|
}
|
|
|
|
public override int TreasureMapLevel
|
|
{
|
|
get
|
|
{
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
public override void GenerateLoot()
|
|
{
|
|
AddLoot(LootPack.Rich);
|
|
}
|
|
|
|
public override int GetIdleSound()
|
|
{
|
|
return 1605;
|
|
}
|
|
|
|
public override int GetAngerSound()
|
|
{
|
|
return 1602;
|
|
}
|
|
|
|
public override int GetHurtSound()
|
|
{
|
|
return 1604;
|
|
}
|
|
|
|
public override int GetDeathSound()
|
|
{
|
|
return 1603;
|
|
}
|
|
|
|
public override void OnThink()
|
|
{
|
|
|
|
if (!this.Alive || this.Deleted)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!this.Hidden)
|
|
{
|
|
double chance = 0.05;
|
|
|
|
if (this.Hits < 20)
|
|
{
|
|
chance = 0.1;
|
|
}
|
|
|
|
if (this.Poisoned)
|
|
{
|
|
chance = 0.01;
|
|
}
|
|
|
|
if (Utility.RandomDouble() < chance)
|
|
{
|
|
HideSelf();
|
|
}
|
|
base.OnThink();
|
|
}
|
|
}
|
|
|
|
private void HideSelf()
|
|
{
|
|
if (Core.TickCount >= this.NextSkillTime)
|
|
{
|
|
Effects.SendLocationParticles(
|
|
EffectItem.Create(this.Location, this.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
|
|
|
|
this.PlaySound(0x22F);
|
|
this.Hidden = true;
|
|
|
|
this.UseSkill(SkillName.Stealth);
|
|
}
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write(0);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
var version = reader.ReadInt();
|
|
}
|
|
}
|
|
} |