Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
253
Scripts/Mobiles/Summons/SummonedPaladin.cs
Normal file
253
Scripts/Mobiles/Summons/SummonedPaladin.cs
Normal file
@@ -0,0 +1,253 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.Quests.Necro
|
||||
{
|
||||
public class SummonedPaladin : BaseCreature
|
||||
{
|
||||
private PlayerMobile m_Necromancer;
|
||||
private bool m_ToDelete;
|
||||
public SummonedPaladin(PlayerMobile necromancer)
|
||||
: base(AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
this.m_Necromancer = necromancer;
|
||||
|
||||
this.InitStats(45, 30, 5);
|
||||
this.Title = "the Paladin";
|
||||
|
||||
this.Hue = 0x83F3;
|
||||
|
||||
this.Female = false;
|
||||
this.Body = 0x190;
|
||||
this.Name = NameList.RandomName("male");
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
Utility.AssignRandomFacialHair(this, false);
|
||||
|
||||
this.FacialHairHue = this.HairHue;
|
||||
|
||||
this.AddItem(new Boots(0x1));
|
||||
this.AddItem(new ChainChest());
|
||||
this.AddItem(new ChainLegs());
|
||||
this.AddItem(new RingmailArms());
|
||||
this.AddItem(new PlateHelm());
|
||||
this.AddItem(new PlateGloves());
|
||||
this.AddItem(new PlateGorget());
|
||||
|
||||
this.AddItem(new Cloak(0xCF));
|
||||
|
||||
this.AddItem(new ThinLongsword());
|
||||
|
||||
this.SetSkill(SkillName.Swords, 50.0);
|
||||
this.SetSkill(SkillName.Tactics, 50.0);
|
||||
|
||||
this.PackGold(500);
|
||||
}
|
||||
|
||||
public SummonedPaladin(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool ClickTitle
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public override bool PlayerRangeSensitive
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public static void BeginSummon(PlayerMobile player)
|
||||
{
|
||||
new SummonTimer(player).Start();
|
||||
}
|
||||
|
||||
public override bool IsHarmfulCriminal(IDamageable target)
|
||||
{
|
||||
if (target is Mobile && (Mobile)target == this.m_Necromancer)
|
||||
return false;
|
||||
|
||||
return base.IsHarmfulCriminal(target);
|
||||
}
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
if (!this.m_ToDelete && !this.Frozen)
|
||||
{
|
||||
if (this.m_Necromancer == null || this.m_Necromancer.Deleted || this.m_Necromancer.Map == Map.Internal)
|
||||
{
|
||||
this.Delete();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.Combatant != this.m_Necromancer)
|
||||
this.Combatant = this.m_Necromancer;
|
||||
|
||||
if (!this.m_Necromancer.Alive)
|
||||
{
|
||||
QuestSystem qs = this.m_Necromancer.Quest;
|
||||
|
||||
if (qs is DarkTidesQuest && qs.FindObjective(typeof(FindMardothEndObjective)) == null)
|
||||
qs.AddObjective(new FindMardothEndObjective(false));
|
||||
|
||||
this.Say(1060139, this.m_Necromancer.Name); // You have made my work easy for me, ~1_NAME~. My task here is done.
|
||||
|
||||
this.m_ToDelete = true;
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(5.0), new TimerCallback(Delete));
|
||||
}
|
||||
else if (this.m_Necromancer.Map != this.Map || this.GetDistanceToSqrt(this.m_Necromancer) > this.RangePerception + 1)
|
||||
{
|
||||
Effects.SendLocationParticles(EffectItem.Create(this.Location, this.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
|
||||
Effects.SendLocationParticles(EffectItem.Create(this.m_Necromancer.Location, this.m_Necromancer.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023);
|
||||
|
||||
this.Map = this.m_Necromancer.Map;
|
||||
this.Location = this.m_Necromancer.Location;
|
||||
|
||||
this.PlaySound(0x1FE);
|
||||
|
||||
this.Say(1060140); // You cannot escape me, knave of evil!
|
||||
}
|
||||
}
|
||||
|
||||
base.OnThink();
|
||||
}
|
||||
|
||||
public override void OnDeath(Container c)
|
||||
{
|
||||
base.OnDeath(c);
|
||||
|
||||
QuestSystem qs = this.m_Necromancer.Quest;
|
||||
|
||||
if (qs is DarkTidesQuest && qs.FindObjective(typeof(FindMardothEndObjective)) == null)
|
||||
qs.AddObjective(new FindMardothEndObjective(true));
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
|
||||
writer.Write((Mobile)this.m_Necromancer);
|
||||
writer.Write((bool)this.m_ToDelete);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
this.m_Necromancer = reader.ReadMobile() as PlayerMobile;
|
||||
this.m_ToDelete = reader.ReadBool();
|
||||
|
||||
if (this.m_ToDelete)
|
||||
this.Delete();
|
||||
}
|
||||
|
||||
private class SummonTimer : Timer
|
||||
{
|
||||
private readonly PlayerMobile m_Player;
|
||||
private SummonedPaladin m_Paladin;
|
||||
private int m_Step;
|
||||
public SummonTimer(PlayerMobile player)
|
||||
: base(TimeSpan.FromSeconds(4.0))
|
||||
{
|
||||
this.Priority = TimerPriority.FiftyMS;
|
||||
|
||||
this.m_Player = player;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if (this.m_Player.Deleted)
|
||||
{
|
||||
if (this.m_Step > 0)
|
||||
this.m_Paladin.Delete();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.m_Step > 0 && this.m_Paladin.Deleted)
|
||||
return;
|
||||
|
||||
if (this.m_Step == 0)
|
||||
{
|
||||
SummonedPaladinMoongate moongate = new SummonedPaladinMoongate();
|
||||
moongate.MoveToWorld(new Point3D(2091, 1348, -90), Map.Malas);
|
||||
|
||||
Effects.PlaySound(moongate.Location, moongate.Map, 0x20E);
|
||||
|
||||
this.m_Paladin = new SummonedPaladin(this.m_Player);
|
||||
this.m_Paladin.Frozen = true;
|
||||
|
||||
this.m_Paladin.Location = moongate.Location;
|
||||
this.m_Paladin.Map = moongate.Map;
|
||||
|
||||
this.Delay = TimeSpan.FromSeconds(2.0);
|
||||
this.Start();
|
||||
}
|
||||
else if (this.m_Step == 1)
|
||||
{
|
||||
this.m_Paladin.Direction = this.m_Paladin.GetDirectionTo(this.m_Player);
|
||||
this.m_Paladin.Say(1060122); // STOP WICKED ONE!
|
||||
|
||||
this.Delay = TimeSpan.FromSeconds(3.0);
|
||||
this.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.m_Paladin.Frozen = false;
|
||||
|
||||
this.m_Paladin.Say(1060123); // I will slay you before I allow you to complete your evil rites!
|
||||
|
||||
this.m_Paladin.Combatant = this.m_Player;
|
||||
}
|
||||
|
||||
this.m_Step++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SummonedPaladinMoongate : Item
|
||||
{
|
||||
public SummonedPaladinMoongate()
|
||||
: base(0xF6C)
|
||||
{
|
||||
this.Movable = false;
|
||||
this.Hue = 0x482;
|
||||
this.Light = LightType.Circle300;
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(10.0), new TimerCallback(Delete));
|
||||
}
|
||||
|
||||
public SummonedPaladinMoongate(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
this.Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user