Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
@@ -0,0 +1,310 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Targeting;
|
||||
using Server.Items;
|
||||
using Server.Network;
|
||||
using Server.Mobiles;
|
||||
using Server.Spells;
|
||||
using Server.Spells.Fifth;
|
||||
|
||||
namespace Server.ACC.CSS.Systems.Ancient
|
||||
{
|
||||
public class AncientPeerSpell : AncientSpell
|
||||
{
|
||||
private static SpellInfo m_Info = new SpellInfo(
|
||||
"Peer", "Vas Wis",
|
||||
221,
|
||||
9002,
|
||||
Reagent.MandrakeRoot,
|
||||
Reagent.Nightshade
|
||||
);
|
||||
|
||||
public override SpellCircle Circle
|
||||
{
|
||||
get { return SpellCircle.Third; }
|
||||
}
|
||||
|
||||
private int m_OldBody;
|
||||
private Souless m_Fake;
|
||||
public ArrayList m_PeerMod;
|
||||
|
||||
public AncientPeerSpell(Mobile caster, Item scroll)
|
||||
: base(caster, scroll, m_Info)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnCast()
|
||||
{
|
||||
if (!CheckSequence())
|
||||
return;
|
||||
else if (Caster.Mounted)
|
||||
{
|
||||
Caster.SendLocalizedMessage(1042561); //Please dismount first.
|
||||
}
|
||||
else if (!Caster.CanBeginAction(typeof(AncientPeerSpell)))
|
||||
{
|
||||
Caster.SendLocalizedMessage(1005559); // This spell is already in effect.
|
||||
}
|
||||
else if (Server.Spells.TransformationSpellHelper.UnderTransformation(Caster))
|
||||
{
|
||||
Caster.SendMessage("Your eyes stay firmly inside your body.");
|
||||
}
|
||||
else if (Caster.BodyMod == 183 || Caster.BodyMod == 184)
|
||||
{
|
||||
Caster.SendMessage("Your eyes stay firmly inside your body.");
|
||||
}
|
||||
else if (!Caster.CanBeginAction(typeof(IncognitoSpell)) || Caster.IsBodyMod)
|
||||
{
|
||||
DoFizzle();
|
||||
}
|
||||
else if (CheckSequence())
|
||||
{
|
||||
if (Caster.BeginAction(typeof(AncientPeerSpell)))
|
||||
{
|
||||
if (this.Scroll != null)
|
||||
Scroll.Consume();
|
||||
Caster.PlaySound(0x2DF);
|
||||
|
||||
Caster.SendMessage("Your sight leaves your body.");
|
||||
|
||||
Souless dg = new Souless(this);
|
||||
|
||||
dg.Body = Caster.Body;
|
||||
|
||||
dg.Hue = Caster.Hue;
|
||||
dg.Name = Caster.Name;
|
||||
dg.SpeechHue = Caster.SpeechHue;
|
||||
dg.Fame = Caster.Fame;
|
||||
dg.Karma = Caster.Karma;
|
||||
dg.EmoteHue = Caster.EmoteHue;
|
||||
dg.Title = Caster.Title;
|
||||
dg.Criminal = (Caster.Criminal);
|
||||
dg.AccessLevel = Caster.AccessLevel;
|
||||
dg.Str = Caster.Str;
|
||||
dg.Int = Caster.Int;
|
||||
dg.Hits = Caster.Hits;
|
||||
dg.Dex = Caster.Dex;
|
||||
dg.Mana = Caster.Mana;
|
||||
dg.Stam = Caster.Stam;
|
||||
|
||||
dg.VirtualArmor = (Caster.VirtualArmor);
|
||||
dg.SetSkill(SkillName.Wrestling, Caster.Skills[SkillName.Wrestling].Value);
|
||||
dg.SetSkill(SkillName.Tactics, Caster.Skills[SkillName.Tactics].Value);
|
||||
dg.SetSkill(SkillName.Anatomy, Caster.Skills[SkillName.Anatomy].Value);
|
||||
|
||||
dg.SetSkill(SkillName.Magery, Caster.Skills[SkillName.Magery].Value);
|
||||
dg.SetSkill(SkillName.MagicResist, Caster.Skills[SkillName.MagicResist].Value);
|
||||
dg.SetSkill(SkillName.Meditation, Caster.Skills[SkillName.Meditation].Value);
|
||||
dg.SetSkill(SkillName.EvalInt, Caster.Skills[SkillName.EvalInt].Value);
|
||||
|
||||
dg.SetSkill(SkillName.Archery, Caster.Skills[SkillName.Archery].Value);
|
||||
dg.SetSkill(SkillName.Macing, Caster.Skills[SkillName.Macing].Value);
|
||||
dg.SetSkill(SkillName.Swords, Caster.Skills[SkillName.Swords].Value);
|
||||
dg.SetSkill(SkillName.Fencing, Caster.Skills[SkillName.Fencing].Value);
|
||||
dg.SetSkill(SkillName.Lumberjacking, Caster.Skills[SkillName.Lumberjacking].Value);
|
||||
dg.SetSkill(SkillName.Alchemy, Caster.Skills[SkillName.Alchemy].Value);
|
||||
dg.SetSkill(SkillName.Parry, Caster.Skills[SkillName.Parry].Value);
|
||||
dg.SetSkill(SkillName.Focus, Caster.Skills[SkillName.Focus].Value);
|
||||
dg.SetSkill(SkillName.Necromancy, Caster.Skills[SkillName.Necromancy].Value);
|
||||
dg.SetSkill(SkillName.Chivalry, Caster.Skills[SkillName.Chivalry].Value);
|
||||
dg.SetSkill(SkillName.ArmsLore, Caster.Skills[SkillName.ArmsLore].Value);
|
||||
dg.SetSkill(SkillName.Poisoning, Caster.Skills[SkillName.Poisoning].Value);
|
||||
dg.SetSkill(SkillName.SpiritSpeak, Caster.Skills[SkillName.SpiritSpeak].Value);
|
||||
dg.SetSkill(SkillName.Stealing, Caster.Skills[SkillName.Stealing].Value);
|
||||
dg.SetSkill(SkillName.Inscribe, Caster.Skills[SkillName.Inscribe].Value);
|
||||
dg.Kills = (Caster.Kills);
|
||||
|
||||
m_PeerMod = new ArrayList();
|
||||
double loss = (0 - Caster.Skills[SkillName.AnimalTaming].Base);
|
||||
SkillMod sk = new DefaultSkillMod(SkillName.AnimalTaming, true, loss);
|
||||
Caster.AddSkillMod(sk);
|
||||
m_PeerMod.Add(sk);
|
||||
double loss1 = (0 - Caster.Skills[SkillName.AnimalLore].Base);
|
||||
SkillMod sk1 = new DefaultSkillMod(SkillName.AnimalLore, true, loss1);// Druidry
|
||||
Caster.AddSkillMod(sk1);
|
||||
m_PeerMod.Add(sk1);
|
||||
|
||||
double loss3 = (0 - Caster.Skills[SkillName.Necromancy].Base);
|
||||
SkillMod sk3 = new DefaultSkillMod(SkillName.Necromancy, true, loss3);
|
||||
Caster.AddSkillMod(sk3);
|
||||
m_PeerMod.Add(sk3);
|
||||
double loss4 = (0 - Caster.Skills[SkillName.TasteID].Base);
|
||||
SkillMod sk4 = new DefaultSkillMod(SkillName.TasteID, true, loss4);
|
||||
Caster.AddSkillMod(sk4);
|
||||
m_PeerMod.Add(sk4);
|
||||
// Clear Items
|
||||
RemoveFromAllLayers(dg);
|
||||
|
||||
// Then copy
|
||||
CopyFromLayer(Caster, dg, Layer.FirstValid);
|
||||
CopyFromLayer(Caster, dg, Layer.OneHanded);
|
||||
CopyFromLayer(Caster, dg, Layer.TwoHanded);
|
||||
CopyFromLayer(Caster, dg, Layer.Shoes);
|
||||
CopyFromLayer(Caster, dg, Layer.Pants);
|
||||
CopyFromLayer(Caster, dg, Layer.Shirt);
|
||||
CopyFromLayer(Caster, dg, Layer.Helm);
|
||||
CopyFromLayer(Caster, dg, Layer.Gloves);
|
||||
CopyFromLayer(Caster, dg, Layer.Ring);
|
||||
CopyFromLayer(Caster, dg, Layer.Talisman);
|
||||
CopyFromLayer(Caster, dg, Layer.Neck);
|
||||
CopyFromLayer(Caster, dg, Layer.Hair);
|
||||
CopyFromLayer(Caster, dg, Layer.Waist);
|
||||
CopyFromLayer(Caster, dg, Layer.InnerTorso);
|
||||
CopyFromLayer(Caster, dg, Layer.Bracelet);
|
||||
//CopyFromLayer(Caster, dg, Layer.Unused_xF);
|
||||
CopyFromLayer(Caster, dg, Layer.FacialHair);
|
||||
CopyFromLayer(Caster, dg, Layer.MiddleTorso);
|
||||
CopyFromLayer(Caster, dg, Layer.Earrings);
|
||||
CopyFromLayer(Caster, dg, Layer.Arms);
|
||||
CopyFromLayer(Caster, dg, Layer.Cloak);
|
||||
CopyFromLayer(Caster, dg, Layer.Backpack);
|
||||
CopyFromLayer(Caster, dg, Layer.OuterTorso);
|
||||
CopyFromLayer(Caster, dg, Layer.OuterLegs);
|
||||
CopyFromLayer(Caster, dg, Layer.InnerLegs);
|
||||
CopyFromLayer(Caster, dg, Layer.LastUserValid);
|
||||
CopyFromLayer(Caster, dg, Layer.Mount);
|
||||
|
||||
dg.Owner = Caster;
|
||||
dg.OldBody = m_OldBody;
|
||||
m_Fake = dg;
|
||||
dg.Map = Caster.Map;
|
||||
dg.Location = Caster.Location;
|
||||
BaseArmor.ValidateMobile(Caster);
|
||||
m_OldBody = Caster.Body;
|
||||
Caster.BodyValue = 903;
|
||||
Caster.Blessed = true;
|
||||
StopTimer(Caster);
|
||||
|
||||
Timer t = new InternalTimer(Caster, m_OldBody, m_Fake, this);
|
||||
|
||||
m_Timers[Caster] = t;
|
||||
|
||||
t.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
Caster.SendLocalizedMessage(1005559); // This spell is already in effect.
|
||||
}
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
}
|
||||
|
||||
private void CopyFromLayer(Mobile from, Mobile mimic, Layer layer)
|
||||
{
|
||||
if (mimic.FindItemOnLayer(layer) != null && mimic.FindItemOnLayer(layer).LootType != LootType.Blessed)
|
||||
mimic.FindItemOnLayer(layer).LootType = LootType.Newbied;
|
||||
}
|
||||
|
||||
private void DeleteFromLayer(Mobile from, Layer layer)
|
||||
{
|
||||
if (from.FindItemOnLayer(layer) != null)
|
||||
from.RemoveItem(from.FindItemOnLayer(layer));
|
||||
}
|
||||
|
||||
private void RemoveFromAllLayers(Mobile from)
|
||||
{
|
||||
DeleteFromLayer(from, Layer.FirstValid);
|
||||
DeleteFromLayer(from, Layer.OneHanded);
|
||||
DeleteFromLayer(from, Layer.TwoHanded);
|
||||
DeleteFromLayer(from, Layer.Shoes);
|
||||
DeleteFromLayer(from, Layer.Pants);
|
||||
DeleteFromLayer(from, Layer.Shirt);
|
||||
DeleteFromLayer(from, Layer.Helm);
|
||||
DeleteFromLayer(from, Layer.Gloves);
|
||||
DeleteFromLayer(from, Layer.Ring);
|
||||
DeleteFromLayer(from, Layer.Talisman);
|
||||
DeleteFromLayer(from, Layer.Neck);
|
||||
DeleteFromLayer(from, Layer.Hair);
|
||||
DeleteFromLayer(from, Layer.Waist);
|
||||
DeleteFromLayer(from, Layer.InnerTorso);
|
||||
DeleteFromLayer(from, Layer.Bracelet);
|
||||
//DeleteFromLayer(from, Layer.Unused_xF);
|
||||
DeleteFromLayer(from, Layer.FacialHair);
|
||||
DeleteFromLayer(from, Layer.MiddleTorso);
|
||||
DeleteFromLayer(from, Layer.Earrings);
|
||||
DeleteFromLayer(from, Layer.Arms);
|
||||
DeleteFromLayer(from, Layer.Cloak);
|
||||
DeleteFromLayer(from, Layer.Backpack);
|
||||
DeleteFromLayer(from, Layer.OuterTorso);
|
||||
DeleteFromLayer(from, Layer.OuterLegs);
|
||||
DeleteFromLayer(from, Layer.InnerLegs);
|
||||
DeleteFromLayer(from, Layer.LastUserValid);
|
||||
DeleteFromLayer(from, Layer.Mount);
|
||||
}
|
||||
|
||||
public void RemovePeerMod()
|
||||
{
|
||||
if (m_PeerMod == null)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < m_PeerMod.Count; ++i)
|
||||
((SkillMod)m_PeerMod[i]).Remove();
|
||||
m_PeerMod = null;
|
||||
}
|
||||
private static Hashtable m_Timers = new Hashtable();
|
||||
|
||||
public static bool StopTimer(Mobile m)
|
||||
{
|
||||
Timer t = (Timer)m_Timers[m];
|
||||
|
||||
if (t != null)
|
||||
{
|
||||
t.Stop();
|
||||
m_Timers.Remove(m);
|
||||
}
|
||||
|
||||
return (t != null);
|
||||
}
|
||||
|
||||
private class InternalTimer : Timer
|
||||
{
|
||||
private Mobile m_Owner;
|
||||
private int m_OldBody;
|
||||
private Souless fake;
|
||||
private Point3D loc;
|
||||
private AncientPeerSpell m_spell;
|
||||
public InternalTimer(Mobile owner, int body, Souless m_Fake, AncientPeerSpell spell)
|
||||
: base(TimeSpan.FromSeconds(0))
|
||||
{
|
||||
m_Owner = owner;
|
||||
m_OldBody = body;
|
||||
fake = m_Fake;
|
||||
m_spell = spell;
|
||||
|
||||
int val = (int)owner.Skills[SkillName.Magery].Value;
|
||||
|
||||
if (val > 100)
|
||||
val = 100;
|
||||
double loss2 = (0 - m_Owner.Skills[SkillName.Magery].Base);
|
||||
SkillMod sk2 = new DefaultSkillMod(SkillName.Magery, true, loss2);
|
||||
m_Owner.AddSkillMod(sk2);
|
||||
m_spell.m_PeerMod.Add(sk2);
|
||||
|
||||
Delay = TimeSpan.FromSeconds(val);
|
||||
Priority = TimerPriority.TwoFiftyMS;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if (!m_Owner.CanBeginAction(typeof(AncientPeerSpell)))
|
||||
{
|
||||
if (fake != null && !fake.Deleted)
|
||||
{
|
||||
loc = new Point3D(fake.X, fake.Y, fake.Z);
|
||||
m_Owner.Location = loc;
|
||||
m_Owner.Blessed = fake.Blessed;
|
||||
fake.Delete();
|
||||
|
||||
}
|
||||
m_Owner.BodyValue = m_OldBody;
|
||||
m_spell.RemovePeerMod();
|
||||
m_Owner.EndAction(typeof(AncientPeerSpell));
|
||||
|
||||
BaseArmor.ValidateMobile(m_Owner);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user