Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
@@ -0,0 +1,499 @@
|
||||
#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 CorruptedCrystalPortal : Item, ISecurable
|
||||
{
|
||||
public override int LabelNumber { get { return 1150074; } } // Corrupted 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 CorruptedCrystalPortal()
|
||||
: base(0x468A)
|
||||
{
|
||||
Hue = 2601;
|
||||
Weight = 1.0;
|
||||
Movable = true;
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public CorruptedCrystalPortal(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 CorruptedCrystalPortalGump(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))
|
||||
{
|
||||
OnTeleport(e.Mobile, loc, map);
|
||||
}
|
||||
}
|
||||
|
||||
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 = 0x468A;
|
||||
Hue = 2601;
|
||||
}
|
||||
}
|
||||
|
||||
public static void ResolveDest(Mobile m, string name, ref Point3D loc, ref Map map)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(name))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (name.Trim().ToLower())
|
||||
{
|
||||
case "dungeon covetous":
|
||||
{
|
||||
loc = new Point3D( 2498, 921, 0 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon deceit":
|
||||
{
|
||||
loc = new Point3D( 4111, 434, 5 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon despise":
|
||||
{
|
||||
loc = new Point3D( 1301, 1080, 0 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon destard":
|
||||
{
|
||||
loc = new Point3D( 1176, 2640, 2 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon ice":
|
||||
{
|
||||
loc = new Point3D( 1999, 81, 4 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon fire":
|
||||
{
|
||||
loc = new Point3D( 2923, 3409, 8 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon hythloth":
|
||||
{
|
||||
loc = new Point3D( 4721, 3824, 0 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon orc":
|
||||
{
|
||||
loc = new Point3D( 1017, 1429, 0 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon shame":
|
||||
{
|
||||
loc = new Point3D( 511, 1565, 0 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon wrong":
|
||||
{
|
||||
loc = new Point3D( 2043, 238, 10 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon wind":
|
||||
{
|
||||
loc = new Point3D( 1361, 895, 0 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon doom":
|
||||
{
|
||||
loc = new Point3D( 2368, 1267, -85 );
|
||||
map = Map.Malas;
|
||||
}
|
||||
break;
|
||||
|
||||
// is this the right citadel? uoguide.com says it is
|
||||
case "dungeon citadel":
|
||||
{
|
||||
loc = new Point3D( 1345, 769, 19 );
|
||||
map = Map.Tokuno;
|
||||
}
|
||||
break;
|
||||
case "dungeon fandancer":
|
||||
{
|
||||
loc = new Point3D( 970, 222, 23 );
|
||||
map = Map.Tokuno;
|
||||
}
|
||||
break;
|
||||
case "dungeon mines":
|
||||
{
|
||||
loc = new Point3D( 257, 786, 63 );
|
||||
map = Map.Tokuno;
|
||||
}
|
||||
break;
|
||||
case "dungeon bedlam":
|
||||
{
|
||||
loc = new Point3D( 2068, 1372, -75 );
|
||||
map = Map.Malas;
|
||||
}
|
||||
break;
|
||||
case "dungeon labyrinth":
|
||||
{
|
||||
loc = new Point3D( 1732, 975, -75 );
|
||||
map = Map.Malas;
|
||||
}
|
||||
break;
|
||||
case "dungeon prism":
|
||||
{
|
||||
loc = new Point3D(3786, 1095, 18);
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon sanctuary":
|
||||
{
|
||||
loc = new Point3D(761, 1644, 0);
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon palace":
|
||||
{
|
||||
loc = new Point3D(5624, 3040, 13);
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon grove":
|
||||
{
|
||||
loc = new Point3D(580, 1655, 0);
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon caves":
|
||||
{
|
||||
loc = new Point3D(1717, 2991, 0);
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon blackthorn":
|
||||
{
|
||||
loc = new Point3D(1482, 1474, 0);
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon underworld":
|
||||
{
|
||||
loc = new Point3D( 4195, 3263, 5 );
|
||||
map = Map.Trammel;
|
||||
}
|
||||
break;
|
||||
case "dungeon abyss":
|
||||
{
|
||||
PlayerMobile pm = m as PlayerMobile;
|
||||
|
||||
if (!pm.AbyssEntry)
|
||||
{
|
||||
m.SendLocalizedMessage(1112226);
|
||||
break;
|
||||
}
|
||||
|
||||
loc = new Point3D( 946, 71, 72 );
|
||||
map = Map.TerMur;
|
||||
}
|
||||
break;
|
||||
// fel
|
||||
case "fel dungeon covetous":
|
||||
{
|
||||
loc = new Point3D( 2498, 921, 0 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon deceit":
|
||||
{
|
||||
loc = new Point3D( 4111, 434, 5 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon despise":
|
||||
{
|
||||
loc = new Point3D( 1301, 1080, 0 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon destard":
|
||||
{
|
||||
loc = new Point3D( 1176, 2640, 2 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon fire":
|
||||
{
|
||||
loc = new Point3D( 2923, 3409, 8 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon hythloth":
|
||||
{
|
||||
loc = new Point3D( 4721, 3824, 0 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon ice":
|
||||
{
|
||||
loc = new Point3D( 1999, 81, 4 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon orc":
|
||||
{
|
||||
loc = new Point3D( 1017, 1429, 0 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon shame":
|
||||
{
|
||||
loc = new Point3D( 511, 1565, 0 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon wrong":
|
||||
{
|
||||
loc = new Point3D( 2043, 238, 10 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon wind":
|
||||
{
|
||||
loc = new Point3D( 1361, 895, 0 );
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon prism":
|
||||
{
|
||||
loc = new Point3D(3786, 1095, 18);
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon sanctuary":
|
||||
{
|
||||
loc = new Point3D(761, 1644, 0);
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon palace":
|
||||
{
|
||||
loc = new Point3D(5624, 3040, 13);
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon grove":
|
||||
{
|
||||
loc = new Point3D(580, 1655, 0);
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon caves":
|
||||
{
|
||||
loc = new Point3D(1717, 2991, 0);
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
case "fel dungeon blackthorn":
|
||||
{
|
||||
loc = new Point3D(1520, 1418, 15);
|
||||
map = Map.Felucca;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
namespace Server.Gumps
|
||||
{
|
||||
public class CorruptedCrystalPortalGump : Gump
|
||||
{
|
||||
public override int GetTypeID()
|
||||
{
|
||||
return 0x237B;
|
||||
}
|
||||
|
||||
public CorruptedCrystalPortalGump(Mobile from)
|
||||
: base(25, 25)
|
||||
{
|
||||
from.CloseGump(typeof(CorruptedCrystalPortalGump));
|
||||
|
||||
AddImage(0, 0, 0x1FE);
|
||||
AddPage(1);
|
||||
AddHtmlLocalized(40, 30, 150, 48, 1150074, 0, false, false); // Corrupted Crystal Portal
|
||||
AddHtmlLocalized(40, 160, 150, 16, 1113300, 0, false, false); // by
|
||||
AddHtmlLocalized(40, 180, 150, 32, 1113299, 0, false, false); // <center>(unknown)</center>
|
||||
AddHtmlLocalized(230, 30, 145, 160, 1150076, 0, false, false); // This corrupted portal allows you to teleport directly to a dungeon.<br><br>For
|
||||
// Trammel ruleset, say "dungeon" followed by the name of the dungeon (e.g. "dungeon shame").
|
||||
|
||||
AddLabel(250, 200, 0, "1"); // todo: get
|
||||
|
||||
AddButton(356, 0, 0x200, 0x200, 0, GumpButtonType.Page, 2);
|
||||
|
||||
AddPage(2);
|
||||
|
||||
AddHtmlLocalized(40, 35, 150, 160, 1150077, 0, false, false); // For Felucca, say "fel" then same rules as above. So "fel dungeon shame".
|
||||
|
||||
AddHtmlLocalized(230, 30, 145, 160, 1150075, 0, false, false); // DUNGEON NAMES:<br>covetous, deceit, despise, destard, ice, fire, hythloth,
|
||||
// orc, shame, wrong, wind, doom, citadel, fandancer, mines, bedlam, labyrinth,
|
||||
//underworld, abyss, grove, caves, palace, prism,
|
||||
|
||||
AddLabel(90, 200, 0, "2"); // toto: get
|
||||
AddLabel(250, 200, 0, "3"); // todo : get
|
||||
|
||||
AddButton(0, 0, 0x1FF, 0x1FF, 0, GumpButtonType.Page, 1);
|
||||
AddButton(356, 0, 0x200, 0x200, 0, GumpButtonType.Page, 3);
|
||||
|
||||
AddPage(3);
|
||||
|
||||
AddHtmlLocalized(40, 35, 150, 160, 1155586, 0, false, false); // sanctuary, blackthorn.
|
||||
AddHtmlLocalized(230, 30, 145, 160, 1150078, 0, false, false); // The same teleportation rules apply regarding criminal flagging, weight, etc.
|
||||
|
||||
AddLabel(90, 200, 0, "4"); // todo: get
|
||||
AddLabel(250, 200, 0, "5"); // todo: get
|
||||
|
||||
AddButton(0, 0, 0x1FF, 0x1FF, 0, GumpButtonType.Page, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
694
Scripts/Services/VeteranRewards/CrystalPortals/CrystalPortal.cs
Normal file
694
Scripts/Services/VeteranRewards/CrystalPortals/CrystalPortal.cs
Normal file
@@ -0,0 +1,694 @@
|
||||
#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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
namespace Server.Gumps
|
||||
{
|
||||
public class CrystalPortalGump : Gump
|
||||
{
|
||||
public override int GetTypeID()
|
||||
{
|
||||
return 0x237B;
|
||||
}
|
||||
|
||||
public CrystalPortalGump(Mobile from)
|
||||
: base(245, 200)
|
||||
{
|
||||
from.CloseGump(typeof(CrystalPortalGump));
|
||||
|
||||
AddImage(0, 0, 0x1FE);
|
||||
AddPage(1);
|
||||
AddHtmlLocalized(40, 30, 150, 48, 1113945, 0, false, false); // Crystal Portal
|
||||
AddHtmlLocalized(40, 160, 150, 16, 1113300, 0, false, false); // by
|
||||
AddHtmlLocalized(40, 180, 150, 32, 1113299, 0, false, false); // <center>(unknown)</center>
|
||||
AddHtmlLocalized(230, 30, 145, 160, 1113946, 0, false, false); // This crystal portal allows you to teleport directly to a bank
|
||||
// or a moongate.<br><br>For Trammel ruleset, say the city's name
|
||||
// followed by "mint" (e.g. "minoc mint"). For a
|
||||
|
||||
AddLabel(250, 200, 0, "1"); // todo: get
|
||||
|
||||
AddButton(356, 0, 0x200, 0x200, 0, GumpButtonType.Page, 2);
|
||||
|
||||
AddPage(2);
|
||||
|
||||
AddHtmlLocalized(40, 35, 150, 160, 1113947, 0, false, false); // moongate, say the gate's name and "moongate" (eg. "minoc moongate").
|
||||
// <br><br>For Felucca, say "fel" then same rules as above. So "fel minoc mint"
|
||||
// or "fel minoc moongate".
|
||||
|
||||
AddHtmlLocalized(230, 30, 145, 160, 1113948, 0, false, false); // CITY NAMES:<br>britain, bucs, cove, delucia, haven, jhelom, magincia, minoc,
|
||||
// moonglow, nujelm, ocllo, papua, serpent, skara, trinsic, vesper, wind, yew, luna,
|
||||
// umbra, zento, termur, ilshenar
|
||||
|
||||
AddLabel(90, 200, 0, "2"); // toto: get
|
||||
AddLabel(250, 200, 0, "3"); // todo : get
|
||||
|
||||
AddButton(0, 0, 0x1FF, 0x1FF, 0, GumpButtonType.Page, 1);
|
||||
AddButton(356, 0, 0x200, 0x200, 0, GumpButtonType.Page, 3);
|
||||
|
||||
AddPage(3);
|
||||
|
||||
AddHtmlLocalized(40, 35, 150, 160, 1113949, 0, false, false); // MOONGATE NAMES<br>moonglow, britain, jhelom, yew, minoc, trinsic, skara,
|
||||
// magincia, haven, bucs, vesper, compassion, honesty, honor, humility, justice,
|
||||
// sacrifice, spirituality, valor, chaos,
|
||||
|
||||
AddHtmlLocalized(230, 30, 145, 160, 1113950, 0, false, false); // luna, umbra, isamu, makoto, homare, termur, eodon<br><br><br>The same teleportation
|
||||
// rules apply regarding criminal flagging, weight, etc.
|
||||
|
||||
AddLabel(90, 200, 0, "4"); // todo: get
|
||||
AddLabel(250, 200, 0, "5"); // todo: get
|
||||
|
||||
AddButton(0, 0, 0x1FF, 0x1FF, 0, GumpButtonType.Page, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user