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

695 lines
14 KiB
C#

#region References
using System;
using System.Collections.Generic;
using Server.Factions;
using Server.Gumps;
using Server.Misc;
using Server.Mobiles;
using Server.Network;
using Server.Spells;
using Server.Multis;
using Server.ContextMenus;
#endregion
namespace Server.Items
{
public class CrystalPortal : Item, ISecurable
{
public override int LabelNumber { get { return 1113945; } } // Crystal Portal
private SecureLevel m_Level;
[CommandProperty(AccessLevel.GameMaster)]
public SecureLevel Level
{
get { return m_Level; }
set { m_Level = value; }
}
public override bool HandlesOnSpeech { get { return true; } }
[Constructable]
public CrystalPortal()
: base(0x468B)
{
Weight = 5.0;
Movable = true;
LootType = LootType.Blessed;
}
public CrystalPortal(Serial serial)
: base(serial)
{ }
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
{
base.GetContextMenuEntries(from, list);
SetSecureLevelEntry.AddTo(from, this, list);
}
public virtual bool ValidateUse(Mobile m, bool message)
{
BaseHouse house = BaseHouse.FindHouseAt(this);
if (house == null || !IsLockedDown)
{
if (message)
{
m.SendMessage("This must be locked down in a house to use!");
}
return false;
}
if (!house.HasSecureAccess(m, m_Level))
{
if (message)
{
m.SendLocalizedMessage(503301, "", 0x22); // You don't have permission to do that.
}
return false;
}
if (Sigil.ExistsOn(m))
{
if (message)
{
m.SendLocalizedMessage(1061632); // You can't do that while carrying the sigil.
}
return false;
}
if (WeightOverloading.IsOverloaded(m))
{
if (message)
{
m.SendLocalizedMessage(502359, "", 0x22); // Thou art too encumbered to move.
}
return false;
}
if (m.Criminal)
{
if (message)
{
m.SendLocalizedMessage(1005561, "", 0x22); // Thou'rt a criminal and cannot escape so easily.
}
return false;
}
if (SpellHelper.CheckCombat(m))
{
if (message)
{
m.SendLocalizedMessage(1005564, "", 0x22); // Wouldst thou flee during the heat of battle??
}
return false;
}
if (m.Spell != null)
{
if (message)
{
m.SendLocalizedMessage(1049616); // You are too busy to do that at the moment.
}
return false;
}
if (Server.Engines.CityLoyalty.CityTradeSystem.HasTrade(m))
{
if (message)
{
m.SendLocalizedMessage(1151733); // You cannot do that while carrying a Trade Order.
}
return false;
}
return true;
}
public override void OnDoubleClick(Mobile m)
{
if (!m.InRange(Location, 3))
{
m.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
return;
}
if (ValidateUse(m, true))
{
m.SendGump(new CrystalPortalGump(m));
}
}
public virtual void OnTeleport(Mobile m, Point3D loc, Map map)
{
if (m == null || loc == Point3D.Zero || map == null || map == Map.Internal)
{
return;
}
Effects.SendLocationEffect(m.Location, m.Map, 0x3728, 10, 10);
Effects.PlaySound(m.Location, m.Map, 0x1FE);
BaseCreature.TeleportPets(m, loc, map);
m.MoveToWorld(loc, map);
Effects.SendLocationEffect(m.Location, m.Map, 0x3728, 10, 10);
Effects.PlaySound(m.Location, m.Map, 0x1FE);
}
public override void OnSpeech(SpeechEventArgs e)
{
if (e.Handled || e.Blocked || !e.Mobile.InRange(Location, 2))
{
return;
}
Point3D loc = Point3D.Zero;
Map map = null;
ResolveDest(e.Mobile, e.Speech.Trim(), ref loc, ref map);
if (loc == Point3D.Zero || map == null || map == Map.Internal || (Siege.SiegeShard && map == Map.Trammel))
{
return;
}
if (SpellHelper.RestrictRedTravel && !Siege.SiegeShard && e.Mobile.Murderer && map != Map.Felucca)
{
e.Mobile.SendLocalizedMessage(1019004); // You are not allowed to travel there.
return;
}
e.Handled = true;
if (ValidateUse(e.Mobile, true))
{
if (SpellHelper.CheckTravel(e.Mobile, map, loc, TravelCheckType.RecallTo))
{
OnTeleport(e.Mobile, loc, map);
}
else
{
e.Mobile.LocalOverheadMessage(MessageType.Regular, 0x4F1, 502360); // You cannot teleport into that area.
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.WriteEncodedInt((int)m_Level);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Level = (SecureLevel)reader.ReadEncodedInt();
if (version < 1)
{
ItemID = 0x468B;
Hue = 0;
Weight = 5.0;
}
}
public static void ResolveDest(Mobile from, string name, ref Point3D loc, ref Map map)
{
if (String.IsNullOrWhiteSpace(name))
{
return;
}
switch (name.Trim().ToLower())
{
// tram banks
case "britain mint":
{
loc = new Point3D(1434, 1699, 2);
map = Map.Trammel;
}
break;
case "bucs mint":
{
loc = new Point3D(2724, 2192, 0);
map = Map.Trammel;
}
break;
case "cove mint":
{
loc = new Point3D(2238, 1195, 0);
map = Map.Trammel;
}
break;
case "delucia mint":
{
loc = new Point3D(5274, 3991, 37);
map = Map.Trammel;
}
break;
//osi lists new haven listed as simply 'haven'. probably because there's no bank in 'old haven'
case "haven mint":
{
loc = new Point3D(3500, 2571, 14);
map = Map.Trammel;
}
break;
case "jhelom mint":
{
loc = new Point3D(1417, 3821, 0);
map = Map.Trammel;
}
break;
case "magincia mint":
{
loc = new Point3D(3728, 2164, 20);
map = Map.Trammel;
}
break;
case "minoc mint":
{
loc = new Point3D(2498, 561, 0);
map = Map.Trammel;
}
break;
case "moonglow mint":
{
loc = new Point3D(4471, 1177, 0);
map = Map.Trammel;
}
break;
case "nujelm mint":
{
loc = new Point3D(3770, 1308, 0);
map = Map.Trammel;
}
break;
case "papua mint":
{
loc = new Point3D(5675, 3144, 12);
map = Map.Trammel;
}
break;
case "serpent mint":
{
loc = new Point3D(2895, 3479, 15);
map = Map.Trammel;
}
break;
case "skara mint":
{
loc = new Point3D(596, 2138, 0);
map = Map.Trammel;
}
break;
case "trinsic mint":
{
loc = new Point3D(1823, 2821, 0);
map = Map.Trammel;
}
break;
case "vesper mint":
{
loc = new Point3D(2899, 676, 0);
map = Map.Trammel;
}
break;
case "wind mint":
{
loc = new Point3D(5345, 93, 15);
map = Map.Trammel;
}
break;
case "luna mint":
{
loc = new Point3D(1015, 527, -65);
map = Map.Malas;
}
break;
case "zento mint":
{
loc = new Point3D(741, 1261, 30);
map = Map.Tokuno;
}
break;
case "ilshenar mint":
{
loc = new Point3D(1232, 557, -19);
map = Map.Ilshenar;
}
break;
case "yew mint":
{
loc = new Point3D(643, 858, 0);
map = Map.Trammel;
}
break;
// fel banks
case "fel papua mint":
{
loc = new Point3D(5675, 3144, 12);
map = Map.Felucca;
}
break;
case "fel delucia mint":
{
loc = new Point3D(5274, 3991, 37);
map = Map.Felucca;
}
break;
case "fel britain mint":
{
loc = new Point3D(1434, 1699, 2);
map = Map.Felucca;
}
break;
case "fel bucs mint":
{
loc = new Point3D(2724, 2192, 0);
map = Map.Felucca;
}
break;
case "fel cove mint":
{
loc = new Point3D(2238, 1195, 0);
map = Map.Felucca;
}
break;
case "fel ocllo mint":
{
loc = new Point3D(3687, 2523, 0);
map = Map.Felucca;
}
break;
case "fel jhelom mint":
{
loc = new Point3D(1417, 3821, 0);
map = Map.Felucca;
}
break;
case "fel magincia mint":
{
loc = new Point3D(3728, 2164, 20);
map = Map.Felucca;
}
break;
case "fel minoc mint":
{
loc = new Point3D(2498, 561, 0);
map = Map.Felucca;
}
break;
case "fel moonglow mint":
{
loc = new Point3D(4471, 1177, 0);
map = Map.Felucca;
}
break;
case "fel nujelm mint":
{
loc = new Point3D(3770, 1308, 0);
map = Map.Felucca;
}
break;
case "fel serpent mint":
{
loc = new Point3D(2895, 3479, 15);
map = Map.Felucca;
}
break;
case "fel skara mint":
{
loc = new Point3D(596, 2138, 0);
map = Map.Felucca;
}
break;
case "fel trinsic mint":
{
loc = new Point3D(1823, 2821, 0);
map = Map.Felucca;
}
break;
case "fel vesper mint":
{
loc = new Point3D(2899, 676, 0);
map = Map.Felucca;
}
break;
case "fel wind mint":
{
loc = new Point3D(1361, 895, 0);
map = Map.Felucca;
}
break;
case "fel yew mint":
{
loc = new Point3D(643, 858, 0);
map = Map.Felucca;
}
break;
// tram moongates
case "britain moongate":
{
loc = new Point3D(1336, 1997, 5);
map = Map.Trammel;
}
break;
case "haven moongate":
{
loc = new Point3D(3763, 2771, 50);
map = Map.Trammel;
}
break;
case "jhelom moongate":
{
loc = new Point3D(1495, 3773, 0);
map = Map.Trammel;
}
break;
case "magincia moongate":
{
loc = new Point3D(3563, 2139, 34);
map = Map.Trammel;
}
break;
case "minoc moongate":
{
loc = new Point3D(2701, 692, 5);
map = Map.Trammel;
}
break;
case "moonglow moongate":
{
loc = new Point3D(4467, 1283, 5);
map = Map.Trammel;
}
break;
case "skara moongate":
{
loc = new Point3D(643, 2067, 5);
map = Map.Trammel;
}
break;
case "trinsic moongate":
{
loc = new Point3D(1828, 2948, -20);
map = Map.Trammel;
}
break;
// vesper doesn't have it's own moongate, it shares one with minoc.
// but osi has an entry for one, clilocs confirm this.
case "vesper moongate":
{
loc = new Point3D(2701, 692, 5);
map = Map.Trammel;
}
break;
// yew moongate not included in osi, but i'm adding it.
case "yew moongate":
{
loc = new Point3D(771, 752, 5);
map = Map.Trammel;
}
break;
case "compassion moongate":
{
loc = new Point3D(1215, 467, -13);
map = Map.Ilshenar;
}
break;
case "honesty moongate":
{
loc = new Point3D(722, 1366, -60);
map = Map.Ilshenar;
}
break;
case "honor moongate":
{
loc = new Point3D(744, 724, -28);
map = Map.Ilshenar;
}
break;
case "humility moongate":
{
loc = new Point3D(281, 1016, 0);
map = Map.Ilshenar;
}
break;
case "justice moongate":
{
loc = new Point3D(987, 1011, -32);
map = Map.Ilshenar;
}
break;
case "sacrifice moongate":
{
loc = new Point3D(1174, 1286, -30);
map = Map.Ilshenar;
}
break;
case "spirituality moongate":
{
loc = new Point3D(1532, 1340, -3);
map = Map.Ilshenar;
}
break;
case "valor moongate":
{
loc = new Point3D(528, 216, -45);
map = Map.Ilshenar;
}
break;
case "chaos moongate":
{
loc = new Point3D(1721, 218, 96);
map = Map.Ilshenar;
}
break;
case "luna moongate":
{
loc = new Point3D(1015, 527, -65);
map = Map.Malas;
}
break;
case "umbra moongate":
{
loc = new Point3D(1997, 1386, -85);
map = Map.Malas;
}
break;
case "termur moongate":
{
loc = new Point3D(851, 3526, 0);
map = Map.TerMur;
}
break;
case "isamu moongate":
{
loc = new Point3D(1169, 998, 41);
map = Map.Tokuno;
}
break;
case "makoto moongate":
{
loc = new Point3D(802, 1204, 25);
map = Map.Tokuno;
}
break;
case "homare moongate":
{
loc = new Point3D(270, 628, 15);
map = Map.Tokuno;
}
break;
// fel moongates
case "fel britain moongate":
{
loc = new Point3D(1336, 1997, 5);
map = Map.Felucca;
}
break;
case "fel bucs moongate":
{
loc = new Point3D(2711, 2234, 0);
map = Map.Felucca;
}
break;
case "fel jhelom moongate":
{
loc = new Point3D(1495, 3773, 0);
map = Map.Felucca;
}
break;
case "fel magincia moongate":
{
loc = new Point3D(3563, 2139, 34);
map = Map.Felucca;
}
break;
case "fel minoc moongate":
{
loc = new Point3D(2701, 692, 5);
map = Map.Felucca;
}
break;
case "fel moonglow moongate":
{
loc = new Point3D(4467, 1283, 5);
map = Map.Felucca;
}
break;
case "fel skara moongate":
{
loc = new Point3D(643, 2067, 5);
map = Map.Felucca;
}
break;
case "fel trinsic moongate":
{
loc = new Point3D(1828, 2948, -20);
map = Map.Felucca;
}
break;
case "fel yew moongate":
{
loc = new Point3D(771, 752, 5);
map = Map.Felucca;
}
break;
case "fel vesper moongate":
{
loc = new Point3D(2701, 692, 5);
map = Map.Felucca;
}
break;
}
}
}
}