From 0502f98050c310349a7abd929d61a44193f37c25 Mon Sep 17 00:00:00 2001 From: Chuck Thier Date: Thu, 2 Jul 2026 21:40:11 -0500 Subject: [PATCH] feat: Adds Spectral Spellbinder for Old Haven (#2453) --- .../Server.Mobiles.Spellbinder.v0.json | 4 ++ .../Monsters/Humanoid/Magic/Spellbinder.cs | 65 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 Projects/UOContent/Migrations/Server.Mobiles.Spellbinder.v0.json create mode 100644 Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/Spellbinder.cs diff --git a/Projects/UOContent/Migrations/Server.Mobiles.Spellbinder.v0.json b/Projects/UOContent/Migrations/Server.Mobiles.Spellbinder.v0.json new file mode 100644 index 000000000..a072037a3 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Mobiles.Spellbinder.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Mobiles.Spellbinder" +} \ No newline at end of file diff --git a/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/Spellbinder.cs b/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/Spellbinder.cs new file mode 100644 index 000000000..3bde9178b --- /dev/null +++ b/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/Spellbinder.cs @@ -0,0 +1,65 @@ +using ModernUO.Serialization; +using Server.Spells; + + +namespace Server.Mobiles; + +[SerializationGenerator(0)] +public partial class Spellbinder : BaseCreature +{ + [Constructible] + public Spellbinder() : base(AIType.AI_Mage, FightMode.Aggressor) + { + Body = Utility.RandomList(26, 50, 56); + BaseSoundID = 0x482; + + SetStr(46, 70); + SetDex(47, 65); + SetInt(187, 210); + + SetHits(36, 50); + + SetDamage(3, 6); + + SetDamageType(ResistanceType.Physical, 50); + SetDamageType(ResistanceType.Cold, 50); + + SetResistance(ResistanceType.Physical, 25, 30); + SetResistance(ResistanceType.Cold, 15, 25); + SetResistance(ResistanceType.Poison, 10, 20); + + SetSkill(SkillName.MagicResist, 35.1, 50.0); + SetSkill(SkillName.Tactics, 35.1, 50.0); + SetSkill(SkillName.Wrestling, 35.1, 45.0); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 28; + } + + protected override BaseAI ForcedAI => new SpellbinderAI(this); + + public override string CorpseName => "a ghostly corpse"; + public override string DefaultName => "a spectral spellbinder"; + + public override bool BleedImmune => true; + + public override OppositionGroup OppositionGroup => OppositionGroup.FeyAndUndead; + + public override Poison PoisonImmune => Poison.Regular; + + public override void GenerateLoot() + { + AddLoot(LootPack.Meager); + PackItem(Loot.RandomWeapon()); + } + + public class SpellbinderAI : MageAI{ + public SpellbinderAI(BaseCreature m) : base(m) + { + } + + public override Spell GetRandomDamageSpell() => GetRandomCurseSpell(); + } +}