Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,82 @@
using System;
using Server.Mobiles;
namespace Server.Engines.Quests
{
public abstract class DynamicTeleporter : Item
{
public DynamicTeleporter()
: this(0x1822, 0x482)
{
}
public DynamicTeleporter(int itemID, int hue)
: base(itemID)
{
this.Movable = false;
this.Hue = hue;
}
public DynamicTeleporter(Serial serial)
: base(serial)
{
}
public override int LabelNumber
{
get
{
return 1049382;
}
}// a magical teleporter
public virtual int NotWorkingMessage
{
get
{
return 500309;
}
}// Nothing Happens.
public abstract bool GetDestination(PlayerMobile player, ref Point3D loc, ref Map map);
public override bool OnMoveOver(Mobile m)
{
PlayerMobile pm = m as PlayerMobile;
if (pm != null)
{
Point3D loc = Point3D.Zero;
Map map = null;
if (this.GetDestination(pm, ref loc, ref map))
{
BaseCreature.TeleportPets(pm, loc, map);
pm.PlaySound(0x1FE);
pm.MoveToWorld(loc, map);
return false;
}
else
{
pm.SendLocalizedMessage(this.NotWorkingMessage);
}
}
return base.OnMoveOver(m);
}
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();
}
}
}

View File

@@ -0,0 +1,200 @@
using System;
using Server.Network;
namespace Server.Items
{
public class EnchantedSextant : Item
{
//TODO: Trammel/Haven
private static readonly Point2D[] m_TrammelBanks = new Point2D[]
{
new Point2D(652, 820),
new Point2D(1813, 2825),
new Point2D(3734, 2149),
new Point2D(2503, 552),
new Point2D(3764, 1317),
new Point2D(587, 2146),
new Point2D(1655, 1606),
new Point2D(1425, 1690),
new Point2D(4471, 1156),
new Point2D(1317, 3773),
new Point2D(2881, 684),
new Point2D(2731, 2192),
new Point2D(3620, 2617),
new Point2D(2880, 3472),
new Point2D(1897, 2684),
new Point2D(5346, 74),
new Point2D(5275, 3977),
new Point2D(5669, 3131)
};
private static readonly Point2D[] m_FeluccaBanks = new Point2D[]
{
new Point2D(652, 820),
new Point2D(1813, 2825),
new Point2D(3734, 2149),
new Point2D(2503, 552),
new Point2D(3764, 1317),
new Point2D(3695, 2511),
new Point2D(587, 2146),
new Point2D(1655, 1606),
new Point2D(1425, 1690),
new Point2D(4471, 1156),
new Point2D(1317, 3773),
new Point2D(2881, 684),
new Point2D(2731, 2192),
new Point2D(2880, 3472),
new Point2D(1897, 2684),
new Point2D(5346, 74),
new Point2D(5275, 3977),
new Point2D(5669, 3131)
};
private static readonly Point2D[] m_IlshenarBanks = new Point2D[]
{
new Point2D(854, 680),
new Point2D(855, 603),
new Point2D(1226, 554),
new Point2D(1610, 556)
};
private static readonly Point2D[] m_MalasBanks = new Point2D[]
{
new Point2D(996, 519),
new Point2D(2048, 1345)
};
private const double m_LongDistance = 300.0;
private const double m_ShortDistance = 5.0;
public override int LabelNumber
{
get
{
return 1046226;
}
}// an enchanted sextant
[Constructable]
public EnchantedSextant()
: base(0x1058)
{
this.Weight = 2.0;
}
public override void OnDoubleClick(Mobile from)
{
if (!from.InRange(this.GetWorldLocation(), 2))
{
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
return;
}
Point2D[] banks;
PMList moongates;
if (from.Map == Map.Trammel)
{
banks = m_TrammelBanks;
moongates = PMList.Trammel;
}
else if (from.Map == Map.Felucca)
{
banks = m_FeluccaBanks;
moongates = PMList.Felucca;
}
else if (from.Map == Map.Ilshenar)
{
#if false
banks = m_IlshenarBanks;
moongates = PMList.Ilshenar;
#else
from.Send(new MessageLocalized(this.Serial, this.ItemID, MessageType.Label, 0x482, 3, 1061684, "", "")); // The magic of the sextant fails...
return;
#endif
}
else if (from.Map == Map.Malas)
{
banks = m_MalasBanks;
moongates = PMList.Malas;
}
else
{
banks = null;
moongates = null;
}
Point3D closestMoongate = Point3D.Zero;
double moongateDistance = double.MaxValue;
if (moongates != null)
{
foreach (PMEntry entry in moongates.Entries)
{
double dist = from.GetDistanceToSqrt(entry.Location);
if (moongateDistance > dist)
{
closestMoongate = entry.Location;
moongateDistance = dist;
}
}
}
Point2D closestBank = Point2D.Zero;
double bankDistance = double.MaxValue;
if (banks != null)
{
foreach (Point2D p in banks)
{
double dist = from.GetDistanceToSqrt(p);
if (bankDistance > dist)
{
closestBank = p;
bankDistance = dist;
}
}
}
int moonMsg;
if (moongateDistance == double.MaxValue)
moonMsg = 1048021; // The sextant fails to find a Moongate nearby.
else if (moongateDistance > m_LongDistance)
moonMsg = 1046449 + (int)from.GetDirectionTo(closestMoongate); // A moongate is * from here
else if (moongateDistance > m_ShortDistance)
moonMsg = 1048010 + (int)from.GetDirectionTo(closestMoongate); // There is a Moongate * of here.
else
moonMsg = 1048018; // You are next to a Moongate at the moment.
from.Send(new MessageLocalized(this.Serial, this.ItemID, MessageType.Label, 0x482, 3, moonMsg, "", ""));
int bankMsg;
if (bankDistance == double.MaxValue)
bankMsg = 1048020; // The sextant fails to find a Bank nearby.
else if (bankDistance > m_LongDistance)
bankMsg = 1046462 + (int)from.GetDirectionTo(closestBank); // A town is * from here
else if (bankDistance > m_ShortDistance)
bankMsg = 1048002 + (int)from.GetDirectionTo(closestBank); // There is a city Bank * of here.
else
bankMsg = 1048019; // You are next to a Bank at the moment.
from.Send(new MessageLocalized(this.Serial, this.ItemID, MessageType.Label, 0x5AA, 3, bankMsg, "", ""));
}
public EnchantedSextant(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();
}
}
}

View File

@@ -0,0 +1,228 @@
using System;
using Server.Items;
namespace Server.Engines.Quests
{
public class HornOfRetreat : Item
{
private Point3D m_DestLoc;
private Map m_DestMap;
private int m_Charges;
private Timer m_PlayTimer;
[Constructable]
public HornOfRetreat()
: base(0xFC4)
{
this.Hue = 0x482;
this.Weight = 1.0;
this.Charges = 10;
}
public HornOfRetreat(Serial serial)
: base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public Point3D DestLoc
{
get
{
return this.m_DestLoc;
}
set
{
this.m_DestLoc = value;
}
}
[CommandProperty(AccessLevel.GameMaster)]
public Map DestMap
{
get
{
return this.m_DestMap;
}
set
{
this.m_DestMap = value;
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int Charges
{
get
{
return this.m_Charges;
}
set
{
this.m_Charges = value;
this.InvalidateProperties();
}
}
public override int LabelNumber
{
get
{
return 1049117;
}
}// Horn of Retreat
public virtual bool ValidateUse(Mobile from)
{
return true;
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1060741, this.m_Charges.ToString()); // charges: ~1_val~
}
public override void OnDoubleClick(Mobile from)
{
if (this.IsChildOf(from.Backpack))
{
if (!this.ValidateUse(from))
{
this.SendLocalizedMessageTo(from, 500309); // Nothing Happens.
}
else if (Core.ML && from.Map != Map.Trammel && from.Map != Map.Malas)
{
from.SendLocalizedMessage(1076154); // You can only use this in Trammel and Malas.
}
else if (this.m_PlayTimer != null)
{
this.SendLocalizedMessageTo(from, 1042144); // This is currently in use.
}
else if (this.Charges > 0)
{
from.Animate(34, 7, 1, true, false, 0);
from.PlaySound(0xFF);
from.SendLocalizedMessage(1049115); // You play the horn and a sense of peace overcomes you...
--this.Charges;
this.m_PlayTimer = Timer.DelayCall(TimeSpan.FromSeconds(5.0), new TimerStateCallback(PlayTimer_Callback), from);
}
else
{
this.SendLocalizedMessageTo(from, 1042544); // This item is out of charges.
}
}
else
{
this.SendLocalizedMessageTo(from, 1042001); // That must be in your pack for you to use it.
}
}
public virtual void PlayTimer_Callback(object state)
{
Mobile from = (Mobile)state;
this.m_PlayTimer = null;
HornOfRetreatMoongate gate = new HornOfRetreatMoongate(this.DestLoc, this.DestMap, from, this.Hue);
gate.MoveToWorld(from.Location, from.Map);
from.PlaySound(0x20E);
gate.SendLocalizedMessageTo(from, 1049102, from.Name); // Quickly ~1_NAME~! Onward through the gate!
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.Write(this.m_DestLoc);
writer.Write(this.m_DestMap);
writer.Write(this.m_Charges);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch ( version )
{
case 0:
{
this.m_DestLoc = reader.ReadPoint3D();
this.m_DestMap = reader.ReadMap();
this.m_Charges = reader.ReadInt();
break;
}
}
}
}
public class HornOfRetreatMoongate : Moongate
{
private readonly Mobile m_Caster;
public HornOfRetreatMoongate(Point3D destLoc, Map destMap, Mobile caster, int hue)
{
this.m_Caster = caster;
this.Target = destLoc;
this.TargetMap = destMap;
this.Hue = hue;
this.Light = LightType.Circle300;
this.Dispellable = false;
Timer.DelayCall(TimeSpan.FromSeconds(10.0), new TimerCallback(Delete));
}
public HornOfRetreatMoongate(Serial serial)
: base(serial)
{
}
public override int LabelNumber
{
get
{
return 1049114;
}
}// Sanctuary Gate
public override void BeginConfirmation(Mobile from)
{
this.EndConfirmation(from);
}
public override void UseGate(Mobile m)
{
if (m.Region.IsPartOf<Regions.Jail>())
{
m.SendLocalizedMessage(1114345); // You'll need a better jailbreak plan than that!
}
else if (m == this.m_Caster)
{
base.UseGate(m);
this.Delete();
}
}
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();
}
}
}

View File

@@ -0,0 +1,127 @@
using System;
using Server.Mobiles;
namespace Server.Engines.Quests
{
public abstract class QuestItem : Item
{
public QuestItem(int itemID)
: base(itemID)
{
}
public QuestItem(Serial serial)
: base(serial)
{
}
public virtual bool Accepted
{
get
{
return this.Deleted;
}
}
public abstract bool CanDrop(PlayerMobile pm);
public override bool DropToWorld(Mobile from, Point3D p)
{
bool ret = base.DropToWorld(from, p);
if (ret && !this.Accepted && this.Parent != from.Backpack)
{
if (from.IsStaff())
{
return true;
}
else if (!(from is PlayerMobile) || this.CanDrop((PlayerMobile)from))
{
return true;
}
else
{
from.SendLocalizedMessage(1049343); // You can only drop quest items into the top-most level of your backpack while you still need them for your quest.
return false;
}
}
else
{
return ret;
}
}
public override bool DropToMobile(Mobile from, Mobile target, Point3D p)
{
bool ret = base.DropToMobile(from, target, p);
if (ret && !this.Accepted && this.Parent != from.Backpack)
{
if (from.IsStaff())
{
return true;
}
else if (!(from is PlayerMobile) || this.CanDrop((PlayerMobile)from))
{
return true;
}
else
{
from.SendLocalizedMessage(1049344); // You decide against trading the item. You still need it for your quest.
return false;
}
}
else
{
return ret;
}
}
public override bool DropToItem(Mobile from, Item target, Point3D p)
{
bool ret = base.DropToItem(from, target, p);
if (ret && !this.Accepted && this.Parent != from.Backpack)
{
if (from.IsStaff())
{
return true;
}
else if (!(from is PlayerMobile) || this.CanDrop((PlayerMobile)from))
{
return true;
}
else
{
from.SendLocalizedMessage(1049343); // You can only drop quest items into the top-most level of your backpack while you still need them for your quest.
return false;
}
}
else
{
return ret;
}
}
public override DeathMoveResult OnParentDeath(Mobile parent)
{
if (parent is PlayerMobile && !this.CanDrop((PlayerMobile)parent))
return DeathMoveResult.MoveToBackpack;
else
return base.OnParentDeath(parent);
}
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();
}
}
}