|
5 | 5 | using Dalamud.Interface; |
6 | 6 | using Dalamud.Interface.Utility; |
7 | 7 | using Dalamud.Interface.Utility.Raii; |
| 8 | +using Dalamud.Memory; |
8 | 9 | using Dalamud.Utility; |
9 | 10 | using FFXIVClientStructs.FFXIV.Client.UI; |
10 | 11 | using FFXIVClientStructs.FFXIV.Client.UI.Agent; |
@@ -410,22 +411,41 @@ private unsafe void DrawLayersContextMenu() { |
410 | 411 | if (!contextMenu) return; |
411 | 412 |
|
412 | 413 | var currentMap = Service.DataManager.GetExcelSheet<Map>()!.GetRow(AgentMap.Instance()->SelectedMapId); |
| 414 | + if (currentMap is null) return; |
413 | 415 |
|
414 | | - var layers = Service.DataManager.GetExcelSheet<Map>()! |
415 | | - .Where(eachMap => eachMap.PlaceName.Row == currentMap!.PlaceName.Row) |
416 | | - .Where(eachMap => eachMap.MapIndex != 0) |
417 | | - .OrderBy(eachMap => eachMap.MapIndex) |
418 | | - .ToList(); |
| 416 | + // If this is a region map |
| 417 | + if (currentMap.Hierarchy is 3) { |
| 418 | + foreach (var marker in AgentMap.Instance()->MapMarkers) { |
| 419 | + if (!DrawHelpers.IsRegionIcon(marker.MapMarker.IconId)) continue; |
419 | 420 |
|
420 | | - if (layers.Count is 0) { |
421 | | - ImGui.Text("No layers for this map"); |
| 421 | + var label = MemoryHelper.ReadStringNullTerminated((nint)marker.MapMarker.Subtext); |
| 422 | + |
| 423 | + if (ImGui.MenuItem(label)) { |
| 424 | + System.IntegrationsController.OpenMap(marker.DataKey); |
| 425 | + System.SystemConfig.FollowPlayer = false; |
| 426 | + System.MapRenderer.DrawOffset = Vector2.Zero; |
| 427 | + } |
| 428 | + } |
422 | 429 | } |
423 | 430 |
|
424 | | - foreach (var layer in layers) { |
425 | | - if (ImGui.MenuItem(layer.PlaceNameSub.Value?.Name ?? "Unable to Parse Name", "", AgentMap.Instance()->SelectedMapId == layer.RowId)) { |
426 | | - System.IntegrationsController.OpenMap(layer.RowId); |
427 | | - System.SystemConfig.FollowPlayer = false; |
428 | | - System.MapRenderer.DrawOffset = Vector2.Zero; |
| 431 | + // Any other map |
| 432 | + else { |
| 433 | + var layers = Service.DataManager.GetExcelSheet<Map>()! |
| 434 | + .Where(eachMap => eachMap.PlaceName.Row == currentMap.PlaceName.Row) |
| 435 | + .Where(eachMap => eachMap.MapIndex != 0) |
| 436 | + .OrderBy(eachMap => eachMap.MapIndex) |
| 437 | + .ToList(); |
| 438 | + |
| 439 | + if (layers.Count is 0) { |
| 440 | + ImGui.Text("No layers for this map"); |
| 441 | + } |
| 442 | + |
| 443 | + foreach (var layer in layers) { |
| 444 | + if (ImGui.MenuItem(layer.PlaceNameSub.Value?.Name ?? "Unable to Parse Name", "", AgentMap.Instance()->SelectedMapId == layer.RowId)) { |
| 445 | + System.IntegrationsController.OpenMap(layer.RowId); |
| 446 | + System.SystemConfig.FollowPlayer = false; |
| 447 | + System.MapRenderer.DrawOffset = Vector2.Zero; |
| 448 | + } |
429 | 449 | } |
430 | 450 | } |
431 | 451 | } |
|
0 commit comments