Files
abysmal-isle/Scripts/Services/Seasonal Events/TreasuresOfKhaldun/Creatures/CultistAmbusher.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

203 lines
6.2 KiB
C#

#region References
using Server.Items;
using Server.Misc;
using Server.Targeting;
using System;
#endregion
namespace Server.Mobiles
{
[CorpseName("an inhuman corpse")]
public class CultistAmbusher : BaseCreature
{
[Constructable]
public CultistAmbusher()
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Name = "Cultist Ambusher";
Body = 0x190;
Hue = 2500;
BaseSoundID = 0x45A;
SetStr(150, 200);
SetDex(150);
SetInt(25, 44);
SetHits(500, 1000);
SetDamage(8, 18);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 10, 20);
SetResistance(ResistanceType.Fire, 10, 20);
SetResistance(ResistanceType.Cold, 10, 20);
SetResistance(ResistanceType.Poison, 10, 20);
SetResistance(ResistanceType.Energy, 10, 20);
SetSkill(SkillName.Fencing, 100.0, 120.0);
SetSkill(SkillName.Macing, 100.0, 120.0);
SetSkill(SkillName.MagicResist, 100.0, 120.0);
SetSkill(SkillName.Swords, 100.0, 120.0);
SetSkill(SkillName.Tactics, 100.0, 120.0);
SetSkill(SkillName.Archery, 100.0, 120.0);
SetSkill(SkillName.Parry, 100.0, 120.0);
SetSkill(SkillName.Tactics, 100.0, 120.0);
Fame = 8000;
Karma = -8000;
switch (Utility.Random(3))
{
case 0:
{
SetWearable(new RingmailChest(), 1510);
SetWearable(new ChainLegs(), 1345);
SetWearable(new Sandals(), 1345);
SetWearable(new LeatherNinjaHood(), 1345);
SetWearable(new LeatherGloves(), 1345);
SetWearable(new LeatherArms(), 1345);
break;
}
case 1:
{
SetWearable(new Robe(2306));
SetWearable(new BearMask(2683));
break;
}
case 2:
{
SetWearable(new Shirt(676));
SetWearable(new RingmailLegs());
SetWearable(new StuddedArms());
SetWearable(new StuddedGloves());
break;
}
case 3:
{
SetWearable(new SkullCap(2406));
SetWearable(new JinBaori(1001));
SetWearable(new Shirt());
SetWearable(new ShortPants(902));
break;
}
}
switch (Utility.Random(2))
{
case 0:
{
SetWearable(Loot.Construct(new Type[] { typeof(Kryss), typeof(Spear), typeof(ShortSpear), typeof(Lance), typeof(Pike), typeof(WarMace), typeof(Mace), typeof(WarHammer), typeof(WarAxe) }));
break;
}
case 1:
{
SetWearable(Loot.Construct(new Type[] { typeof(Yumi), typeof(Crossbow), typeof(RepeatingCrossbow), typeof(HeavyCrossbow) }));
RangeFight = 7;
AI = AIType.AI_Archer;
break;
}
}
}
public override void OnBeforeDamage(Mobile from, ref int totalDamage, Server.DamageType type)
{
if (Region.IsPartOf("Khaldun") && IsChampionSpawn && !Caddellite.CheckDamage(from, type))
{
totalDamage = 0;
}
base.OnBeforeDamage(from, ref totalDamage, type);
}
public override void OnGotMeleeAttack(Mobile attacker)
{
base.OnGotMeleeAttack(attacker);
if (Map != null && AI == AIType.AI_Archer && 0.4 >= Utility.RandomDouble())
{
Point3D p = FindLocation(Map, Location, 10);
Effects.SendLocationParticles(EffectItem.Create(Location, Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
Location = p;
Effects.SendLocationParticles(EffectItem.Create(p, Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023);
PlaySound(0x1FE);
}
}
private Point3D FindLocation(Map map, Point3D center, int range)
{
int cx = center.X;
int cy = center.Y;
for (int i = 0; i < 20; ++i)
{
int x = cx + Utility.Random(range * 2) - range;
int y = cy + Utility.Random(range * 2) - range;
if ((cx - x) * (cx - x) + (cy - y) * (cy - y) > range * range)
continue;
int z = map.GetAverageZ(x, y);
if (!map.CanFit(x, y, z, 6, false, false))
continue;
int topZ = z;
foreach (Item item in map.GetItemsInRange(new Point3D(x, y, z), 0))
{
topZ = Math.Max(topZ, item.Z + item.ItemData.CalcHeight);
}
return new Point3D(x, y, topZ);
}
return center;
}
public override bool AlwaysMurderer { get { return true; } }
public override bool ShowFameTitle { get { return false; } }
public CultistAmbusher(Serial serial)
: base(serial)
{
}
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
}
public override WeaponAbility GetWeaponAbility()
{
BaseWeapon wep = Weapon as BaseWeapon;
if (wep != null && !(wep is Fists))
{
if (Utility.RandomDouble() > 0.5)
return wep.PrimaryAbility;
return wep.SecondaryAbility;
}
return null;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}