public MalasTravelGump(Mobile from, int page, int x, int y, MalasTravelMap travelmap, int detail, string message) : base(x, y) { m_Page = page; m_From = from; m_TravelMap = travelmap; m_Detail = detail; bool GM = m_From.AccessLevel >= AccessLevel.GameMaster; GumpButtonType Reply = GumpButtonType.Reply; if (m_TravelMap == null) return; if (m_TravelMap.Entries == null || m_TravelMap.Entries.Count <= 0) { m_TravelMap.Entries = m_TravelMap.GetDefaultEntries(); } if (m_TravelMap.Entries == null || m_TravelMap.Entries.Count <= 0) { from.SendMessage("No entries were found on this map."); m_From.CloseGump(typeof(MalasTravelGump)); return; } AddPage(0); AddBackground(0, 0, 600, 460, 3600); // Grey Stone Background AddBackground(20, 20, 560, 420, 3000); // Paper Background AddBackground(36, 28, 387, 387, 2620); // Black Background behind map switch (m_Page) { case 1: // Malas Locations AddImage(38, 30, 0x15DC); break; } AddImage(34, 26, 0x15DF); // Border around the map AddLabel(206, 417, 0, MapPages[m_Page]); foreach (MapTravelEntry entry in m_TravelMap.Entries) { bool found = entry.Discovered; bool open = entry.Unlocked; if (entry.MapIndex == m_Page && (found || GM)) { AddButton(entry.XposButton, entry.YposButton, 1210, 1209, entry.Index, Reply, 0); AddLabel(entry.XposLabel, entry.YposLabel, open ? 0x480 : found ? 0x40 : 0x20, entry.Name); } } if (m_Detail > 0) { MapTravelEntry entry = m_TravelMap.GetEntry(m_Detail); AddLabel(433, 64, 0, entry.Name); AddLabel(433, 84, 0, string.Format("X: {0}", entry.Destination.X)); AddLabel(433, 104, 0, string.Format("Y: {0}", entry.Destination.Y)); AddLabel(433, 124, 0, string.Format("Z: {0}", entry.Destination.Z)); AddLabel(433, 144, 0, string.Format("Map: {0}", entry.Map)); AddLabel(433, 164, entry.Unlocked ? 0x2A5 : 0x14D, string.Format("Status: {0}", entry.Unlocked ? "Unlocked" : "Locked")); if (entry.Unlocked || GM) { AddButton(434, 204, 4006, 4007, entry.Index + 10000, Reply, 0); // Teleport Now AddLabel(480, 204, 0x2A5, "Teleport Now"); } if (!entry.Unlocked && (entry.Discovered || GM)) { if (m_From.Map == entry.Map) { AddButton(434, 244, 4027, 4028, entry.Index + 30000, Reply, 0); // Explore This AddLabel(480, 244, 0x2A5, "Explore This"); } } } if (message.Length > 0) { AddHtml(434, 284, 120, 170, message, false, false); } AddButton(561, 21, 22153, 22155, 4, Reply, 0); // Help Button }
public override void OnDoubleClick(Mobile from) { Container pack = from.Backpack; if (pack == null) { return; } if (Parent != pack) { from.SendMessage("That must be in your pack to use it."); return; } if (from.Map != MapSource) { from.SendMessage("You must be in {0} to use this map fragment.", MapSource.Name); return; } MalasTravelMap map = pack.FindItemByType <MalasTravelMap>(); if (map == null) { from.SendMessage("You must have a Malas Travel Map in your pack to use this map fragment."); return; } if (UnSet) { List <MapTravelEntry> entries = new List <MapTravelEntry>(); foreach (MapTravelEntry entry in map.Entries) { if (entry.Map == MapSource && !entry.Discovered) { entries.Add(entry); // Add Locked entries that match the Map source } } if (entries.Count > 0) // If one or more was found... { int token = Utility.Random(entries.Count); m_Index = entries[token].Index; // Pick a random entry and store the Index } else { from.SendMessage("All locations on this map have been discovered."); } } if (m_Index > 0) { if (map.GetEntry(m_Index).Discovered) { from.SendMessage("You have already discovered this location: {0}.", map.GetEntry(m_Index).Name); } map.GetEntry(m_Index).Discovered = true; // Mark the location as discovered (but not unlocked) from.SendMessage("You note the location of the {0}: {1} for future reference.", MapNames[map.GetEntry(m_Index).MapIndex], map.GetEntry(m_Index).Name); from.SendMessage("The fragment crumbles to dust in your hands."); Delete(); } }
public MalasTravelGump(Mobile from, int page, int x, int y, MalasTravelMap travelmap, int detail, string message) : base(x, y) { m_Page = page; m_From = from; m_TravelMap = travelmap; m_Detail = detail; bool GM = m_From.AccessLevel >= AccessLevel.GameMaster; GumpButtonType Reply = GumpButtonType.Reply; if (m_TravelMap == null) { return; } if (m_TravelMap.Entries == null || m_TravelMap.Entries.Count <= 0) { m_TravelMap.Entries = m_TravelMap.GetDefaultEntries(); } if (m_TravelMap.Entries == null || m_TravelMap.Entries.Count <= 0) { from.SendMessage("No entries were found on this map."); m_From.CloseGump(typeof(MalasTravelGump)); return; } AddPage(0); AddBackground(0, 0, 600, 460, 3600); // Grey Stone Background AddBackground(20, 20, 560, 420, 3000); // Paper Background AddBackground(36, 28, 387, 387, 2620); // Black Background behind map switch (m_Page) { case 1: // Malas Locations AddImage(38, 30, 0x15DC); break; } AddImage(34, 26, 0x15DF); // Border around the map AddLabel(206, 417, 0, MapPages[m_Page]); foreach (MapTravelEntry entry in m_TravelMap.Entries) { bool found = entry.Discovered; bool open = entry.Unlocked; if (entry.MapIndex == m_Page && (found || GM)) { AddButton(entry.XposButton, entry.YposButton, 1210, 1209, entry.Index, Reply, 0); AddLabel(entry.XposLabel, entry.YposLabel, open ? 0x480 : found ? 0x40 : 0x20, entry.Name); } } if (m_Detail > 0) { MapTravelEntry entry = m_TravelMap.GetEntry(m_Detail); AddLabel(433, 64, 0, entry.Name); AddLabel(433, 84, 0, string.Format("X: {0}", entry.Destination.X)); AddLabel(433, 104, 0, string.Format("Y: {0}", entry.Destination.Y)); AddLabel(433, 124, 0, string.Format("Z: {0}", entry.Destination.Z)); AddLabel(433, 144, 0, string.Format("Map: {0}", entry.Map)); AddLabel(433, 164, entry.Unlocked ? 0x2A5 : 0x14D, string.Format("Status: {0}", entry.Unlocked ? "Unlocked" : "Locked")); if (entry.Unlocked || GM) { AddButton(434, 204, 4006, 4007, entry.Index + 10000, Reply, 0); // Teleport Now AddLabel(480, 204, 0x2A5, "Teleport Now"); } if (!entry.Unlocked && (entry.Discovered || GM)) { if (m_From.Map == entry.Map) { AddButton(434, 244, 4027, 4028, entry.Index + 30000, Reply, 0); // Explore This AddLabel(480, 244, 0x2A5, "Explore This"); } } } if (message.Length > 0) { AddHtml(434, 284, 120, 170, message, false, false); } AddButton(561, 21, 22153, 22155, 4, Reply, 0); // Help Button }
public override void OnResponse(NetState sender, RelayInfo info) { m_From.CloseGump(typeof(MalasTravelGump)); int id = info.ButtonID; Point3D p; Map map; if (id < 100) { if (id == 4) { m_From.SendGump(new MalasTravelGump(m_From, m_Page, X, Y, m_TravelMap)); m_From.SendGump(new MapTravelHelp(X, Y)); } } else if (id < 10000) { m_From.SendGump(new MalasTravelGump(m_From, m_Page, X, Y, m_TravelMap, id)); } else if (id < 20000) { // Here begins the teleport string message = ""; try { id -= 10000; bool NonGM = m_From.AccessLevel < AccessLevel.GameMaster; MapTravelEntry entry = m_TravelMap.GetEntry(id); if (entry == null) { return; } p = entry.Destination; map = entry.Map; if (MapTravelHelp.CanTravel(m_From, map, p) && (entry.Unlocked || !NonGM) && m_TravelMap.Parent == m_From.Backpack) { if (NonGM && CHARGE) // Do not charge GMs - they might complain... { Container pack = m_From.Backpack; if (pack == null || (pack.ConsumeTotal(payTypes, payAmounts) > 0)) { if (pack == null) { message = "Your pack is null???"; } else { message = string.Format("Using the map to teleport costs {0}.", PAYTHIS); } m_From.SendGump(new MalasTravelGump(m_From, m_Page, X, Y, m_TravelMap, m_Detail, message)); return; } // Payment was successful if we reach here ... } m_From.MoveToWorld(p, map); message = string.Format("{0} have been moved to X:{1}, Y:{2}, Z:{3}, Map: {4}", CHARGE ? "You paid " + PAYTHIS + " and" : "You", p.X, p.Y, p.Z, map); } } catch { message = string.Format("Teleport failed."); } m_From.SendGump(new MalasTravelGump(m_From, m_Page, X, Y, m_TravelMap, m_Detail, message)); } else if (id >= 30000 && id < 40000) { id -= 30000; MapTravelEntry entry = m_TravelMap.GetEntry(id); if (entry == null) { return; } p = entry.Destination; map = entry.Map; string message = ""; if (map != m_From.Map) { message = "You must be on the same map to Explore there."; } else { if (m_From.InRange(p, 7)) { entry.Unlocked = true; entry.Discovered = true; // We do this in case a GM unlocked the location before it was discovered. message = string.Format("You have unlocked a new location: {0}.", entry.Name); } else { int distance = (int)m_From.GetDistanceToSqrt(p); message = string.Format("That location is still approximately {0} paces to the {1}.", distance, MapTravelHelp.GetDirection(m_From, p)); } } m_From.SendGump(new MalasTravelGump(m_From, m_Page, X, Y, m_TravelMap, m_Detail, message)); } }