Follow-up to the gargoyle Throwing work (#2510/#2512/#2514). Ports two Stygian Abyss creatures from ServUO so two of the throwing artifacts finally have a real OSI drop source instead of being `[add`-only. ## Changes - **`Raptor`** and **`StoneSlith`** — ported stat-for-stat from ServUO. They **spawn automatically**: `Distribution/Data/Spawns/post-uoml/termur/TerMur.json` already contained Raptor/StoneSlith spawner entries referencing these class names, so no spawn-file edits were needed. - **`RaptorClaw`** (Boomerang-based) and **`StoneSlithClaw`** (Cyclone-based) artifacts, dropped from each creature's `OnDeath` at ServUO's 0.5% rate (uncontrolled only). - StoneSlith retains its `GraspingClaw` monster ability; both use `BleedAttack`. ## ModernUO idioms Default range perception (16) / fight range, derived `GetSpeeds` (no `SetSpeed`), `[SerializationGenerator(0)]` codegen, collection-expression arrays. ## Documented omissions vs ServUO Flagged as TODO in-code — all are content missing from ModernUO, not silent drops: Raptor's friend-spawn timer + its 25% `AncientPotteryFragments` drop; StoneSlith's `TailSwipe`, `DragonBlood`, and `SlithEye`/`TatteredAncientScroll`/`AncientPotteryFragments` drops; plus `HideType.Horned/Spined` and `PackInstinct.Ostard` (no ModernUO equivalents yet). ## Not included The other three throwing artifacts (Storm Caller, Banshee's Call, Wind of Corruption) drop from renowned/boss creatures via a `BaseRenowned` artifact-list system that doesn't exist in ModernUO yet — a separate, larger effort. AbyssReaver stays with the (deferred) Into-the-Void quest. Verified: server builds clean; throwing suite 14/14.
35 lines
1.5 KiB
C#
35 lines
1.5 KiB
C#
using System;
|
|
|
|
namespace Server.Mobiles;
|
|
|
|
public class TailSwipe : MonsterAbilitySingleTarget
|
|
{
|
|
public override MonsterAbilityType AbilityType => MonsterAbilityType.TailSwipe;
|
|
public override MonsterAbilityTrigger AbilityTrigger => MonsterAbilityTrigger.GiveMeleeDamage;
|
|
public override double ChanceToTrigger => 0.3;
|
|
|
|
// ServUO's SpecialAbility base cooldown; TailSwipe does not override it.
|
|
public override TimeSpan MinTriggerCooldown => TimeSpan.FromSeconds(30);
|
|
public override TimeSpan MaxTriggerCooldown => TimeSpan.FromSeconds(30);
|
|
|
|
protected override void OnTarget(MonsterAbilityTrigger trigger, BaseCreature source, Mobile defender)
|
|
{
|
|
source.DoHarmful(defender);
|
|
|
|
defender.PlaySound(0x204);
|
|
defender.FixedEffect(0x376A, 6, 1);
|
|
|
|
// OSI/Stratics reports roughly a 90% stun / 10% confuse split (ServUO's even 50/50 is incorrect).
|
|
if (Utility.RandomDouble() < 0.10)
|
|
{
|
|
defender.SendLocalizedMessage(1112555); // You're left confused as the creature's tail catches you right in the face!
|
|
defender.AddStatMod(new StatMod(StatType.Dex, "[TailSwipe] Dex", -20, TimeSpan.FromSeconds(5.0)));
|
|
defender.AddStatMod(new StatMod(StatType.Int, "[TailSwipe] Int", -20, TimeSpan.FromSeconds(5.0)));
|
|
}
|
|
else
|
|
{
|
|
defender.SendLocalizedMessage(1112554); // You're stunned as the creature's tail knocks the wind out of you.
|
|
defender.Paralyze(TimeSpan.FromSeconds(3.0));
|
|
}
|
|
}
|
|
}
|