Files
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

302 lines
7.6 KiB
C#

using System;
using System.Collections.Generic;
using Server;
using Server.Mobiles;
using Server.Items;
namespace Server.Engines.Quests.RitualQuest
{
public class Prugyilonus : MondainQuester
{
public static Prugyilonus Instance { get; set; }
public static void Initialize()
{
if (Core.SA && Instance == null)
{
Instance = new Prugyilonus();
Instance.MoveToWorld(new Point3D(750, 3344, 61), Map.TerMur);
}
}
public override Type[] Quests { get { return new Type[] { typeof(ScalesOfADreamSerpentQuest) }; } }
public Prugyilonus()
: base("Prugyilonus", "the Advisor to the Queen")
{
}
public override void InitBody()
{
InitStats(100, 100, 25);
Race = Race.Gargoyle;
CantWalk = true;
Hue = 34547;
HairItemID = Race.RandomHair(false);
HairHue = Race.RandomHairHue();
}
public override void InitOutfit()
{
SetWearable(new GargishFancyRobe(), 1345);
}
public Prugyilonus(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
reader.ReadInt(); // version
if (Core.SA)
{
Instance = this;
}
else
{
Delete();
}
}
}
public class Bexil : MondainQuester
{
public override Type[] Quests { get { return new Type[] { typeof(CatchMeIfYouCanQuest) }; } }
public static Bexil Instance { get; set; }
public static void Initialize()
{
if(Core.SA && Instance == null)
{
Instance = new Bexil();
Instance.MoveToWorld(new Point3D(662, 3819, -43), Map.TerMur);
}
}
public override void OnDoubleClick(Mobile m)
{
if (m.Backpack.GetAmount(typeof(DreamSerpentScale)) == 0)
{
base.OnDoubleClick(m);
}
else
{
SayTo(m, 1151355, 0x3B2); // You may not obtain more than one of this item.
SayTo(m, 1080107, 0x3B2); // I'm sorry, I have nothing for you at this time.
}
}
public Bexil()
: base("Bexil", "the Dream Serpent")
{
}
public override void InitBody()
{
InitStats(100, 100, 25);
Body = 0xCE;
Hue = 2069;
CantWalk = true;
}
public Bexil(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
reader.ReadInt(); // version
if (Core.SA)
{
Instance = this;
}
else
{
Delete();
}
}
}
public class BexilPunchingBag : BaseCreature
{
public override bool InitialInnocent { get { return true; } }
private Dictionary<Mobile, int> _Table = new Dictionary<Mobile, int>();
private DateTime _NextTeleport;
public BexilPunchingBag()
: base(AIType.AI_Animal, FightMode.None, 10, 1, 0.4, 0.8)
{
Name = "Bexil";
Title = "the Dream Serpent";
Body = 0xCE;
Hue = 1976;
BaseSoundID = 0x5A;
SetHits(1000000);
}
private IDamageable _Combatant;
public override IDamageable Combatant
{
get { return _Combatant; }
set { _Combatant = value; }
}
public override void OnThink()
{
base.OnThink();
if (Combatant is Mobile && _NextTeleport < DateTime.UtcNow)
{
var map = Map;
var c = (Mobile)Combatant;
Point3D p;
do
{
int x = X + Utility.RandomMinMax(-10, 10);
int y = Y + Utility.RandomMinMax(-10, 10);
p = new Point3D(x, y, map.GetAverageZ(x, y));
}
while (!map.CanSpawnMobile(p.X, p.Y, map.GetAverageZ(p.X, p.Y)) || !Region.Find(p, map).IsPartOf<CatchMeIfYouCanQuest.BexilRegion>());
Effects.SendLocationParticles(EffectItem.Create(Location, map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
MoveToWorld(p, map);
Effects.SendLocationParticles(EffectItem.Create(Location, map, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023);
_NextTeleport = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(1, 3));
}
}
public override int Damage(int amount, Mobile from, bool informMount, bool checkDisrupt)
{
if (from is PlayerMobile)
{
var quest = QuestHelper.GetQuest<CatchMeIfYouCanQuest>((PlayerMobile)from);
if (quest != null)
{
quest.Objectives[0].Update(this);
if (quest.Completed)
{
DreamSerpentCharm.CompleteQuest(from);
}
}
}
return 0;
}
public override void Delete()
{
var bex = new BexilPunchingBag();
bex.MoveToWorld(new Point3D(403, 3391, 38), Map.TerMur);
base.Delete();
}
public BexilPunchingBag(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
reader.ReadInt(); // version
if (!Core.SA)
{
Delete();
}
}
}
public class Grubbix : MondainQuester
{
public override Type[] Quests { get { return new Type[] { typeof(FilthyLifeStealersQuest) }; } }
public static Grubbix Instance { get; set; }
public static void Initialize()
{
if (Core.SA && Instance == null)
{
Instance = new Grubbix();
Instance.MoveToWorld(new Point3D(1106, 3138, -43), Map.TerMur);
}
}
public Grubbix()
: base("Grubbix", "the Soulbinder")
{
}
public override void InitBody()
{
CantWalk = true;
InitStats(100, 100, 25);
Body = 0x100;
Hue = 2076;
}
public Grubbix(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
reader.ReadInt(); // version
if (Core.SA)
{
Instance = this;
}
else
{
Delete();
}
}
}
}