mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-15 05:04:15 +01:00
add support for area instance to SeString.CreateMapLink() (#1490)
* add support for area instance to SeString.CreateMapLink() --------- Co-authored-by: ditzy <ditzy.zy@pm.me>
This commit is contained in:
parent
e12ec0ceff
commit
fdbdf26da6
1 changed files with 56 additions and 6 deletions
|
|
@ -254,10 +254,22 @@ public class SeString
|
|||
/// <param name="rawX">The raw x-coordinate for this link.</param>
|
||||
/// <param name="rawY">The raw y-coordinate for this link..</param>
|
||||
/// <returns>An SeString containing all of the payloads necessary to display a map link in the chat log.</returns>
|
||||
public static SeString CreateMapLink(uint territoryId, uint mapId, int rawX, int rawY)
|
||||
public static SeString CreateMapLink(uint territoryId, uint mapId, int rawX, int rawY) =>
|
||||
CreateMapLinkWithInstance(territoryId, mapId, null, rawX, rawY);
|
||||
|
||||
/// <summary>
|
||||
/// Creates an SeString representing an entire Payload chain that can be used to link a map position in the chat log.
|
||||
/// </summary>
|
||||
/// <param name="territoryId">The id of the TerritoryType for this map link.</param>
|
||||
/// <param name="mapId">The id of the Map for this map link.</param>
|
||||
/// <param name="instance">An optional area instance number to be included in this link.</param>
|
||||
/// <param name="rawX">The raw x-coordinate for this link.</param>
|
||||
/// <param name="rawY">The raw y-coordinate for this link..</param>
|
||||
/// <returns>An SeString containing all of the payloads necessary to display a map link in the chat log.</returns>
|
||||
public static SeString CreateMapLinkWithInstance(uint territoryId, uint mapId, int? instance, int rawX, int rawY)
|
||||
{
|
||||
var mapPayload = new MapLinkPayload(territoryId, mapId, rawX, rawY);
|
||||
var nameString = $"{mapPayload.PlaceName} {mapPayload.CoordinateString}";
|
||||
var nameString = GetMapLinkNameString(mapPayload.PlaceName, instance, mapPayload.CoordinateString);
|
||||
|
||||
var payloads = new List<Payload>(new Payload[]
|
||||
{
|
||||
|
|
@ -280,10 +292,24 @@ public class SeString
|
|||
/// <param name="yCoord">The human-readable y-coordinate for this link.</param>
|
||||
/// <param name="fudgeFactor">An optional offset to account for rounding and truncation errors; it is best to leave this untouched in most cases.</param>
|
||||
/// <returns>An SeString containing all of the payloads necessary to display a map link in the chat log.</returns>
|
||||
public static SeString CreateMapLink(uint territoryId, uint mapId, float xCoord, float yCoord, float fudgeFactor = 0.05f)
|
||||
public static SeString CreateMapLink(
|
||||
uint territoryId, uint mapId, float xCoord, float yCoord, float fudgeFactor = 0.05f) =>
|
||||
CreateMapLinkWithInstance(territoryId, mapId, null, xCoord, yCoord, fudgeFactor);
|
||||
|
||||
/// <summary>
|
||||
/// Creates an SeString representing an entire Payload chain that can be used to link a map position in the chat log.
|
||||
/// </summary>
|
||||
/// <param name="territoryId">The id of the TerritoryType for this map link.</param>
|
||||
/// <param name="mapId">The id of the Map for this map link.</param>
|
||||
/// <param name="instance">An optional area instance number to be included in this link.</param>
|
||||
/// <param name="xCoord">The human-readable x-coordinate for this link.</param>
|
||||
/// <param name="yCoord">The human-readable y-coordinate for this link.</param>
|
||||
/// <param name="fudgeFactor">An optional offset to account for rounding and truncation errors; it is best to leave this untouched in most cases.</param>
|
||||
/// <returns>An SeString containing all of the payloads necessary to display a map link in the chat log.</returns>
|
||||
public static SeString CreateMapLinkWithInstance(uint territoryId, uint mapId, int? instance, float xCoord, float yCoord, float fudgeFactor = 0.05f)
|
||||
{
|
||||
var mapPayload = new MapLinkPayload(territoryId, mapId, xCoord, yCoord, fudgeFactor);
|
||||
var nameString = $"{mapPayload.PlaceName} {mapPayload.CoordinateString}";
|
||||
var nameString = GetMapLinkNameString(mapPayload.PlaceName, instance, mapPayload.CoordinateString);
|
||||
|
||||
var payloads = new List<Payload>(new Payload[]
|
||||
{
|
||||
|
|
@ -306,7 +332,20 @@ public class SeString
|
|||
/// <param name="yCoord">The human-readable y-coordinate for this link.</param>
|
||||
/// <param name="fudgeFactor">An optional offset to account for rounding and truncation errors; it is best to leave this untouched in most cases.</param>
|
||||
/// <returns>An SeString containing all of the payloads necessary to display a map link in the chat log.</returns>
|
||||
public static SeString? CreateMapLink(string placeName, float xCoord, float yCoord, float fudgeFactor = 0.05f)
|
||||
public static SeString? CreateMapLink(string placeName, float xCoord, float yCoord, float fudgeFactor = 0.05f) =>
|
||||
CreateMapLinkWithInstance(placeName, null, xCoord, yCoord, fudgeFactor);
|
||||
|
||||
/// <summary>
|
||||
/// Creates an SeString representing an entire Payload chain that can be used to link a map position in the chat log, matching a specified zone name.
|
||||
/// Returns null if no corresponding PlaceName was found.
|
||||
/// </summary>
|
||||
/// <param name="placeName">The name of the location for this link. This should be exactly the name as seen in a displayed map link in-game for the same zone.</param>
|
||||
/// <param name="instance">An optional area instance number to be included in this link.</param>
|
||||
/// <param name="xCoord">The human-readable x-coordinate for this link.</param>
|
||||
/// <param name="yCoord">The human-readable y-coordinate for this link.</param>
|
||||
/// <param name="fudgeFactor">An optional offset to account for rounding and truncation errors; it is best to leave this untouched in most cases.</param>
|
||||
/// <returns>An SeString containing all of the payloads necessary to display a map link in the chat log.</returns>
|
||||
public static SeString? CreateMapLinkWithInstance(string placeName, int? instance, float xCoord, float yCoord, float fudgeFactor = 0.05f)
|
||||
{
|
||||
var data = Service<DataManager>.Get();
|
||||
|
||||
|
|
@ -321,7 +360,7 @@ public class SeString
|
|||
var map = mapSheet.FirstOrDefault(row => row.PlaceName.Row == place.RowId);
|
||||
if (map != null && map.TerritoryType.Row != 0)
|
||||
{
|
||||
return CreateMapLink(map.TerritoryType.Row, map.RowId, xCoord, yCoord, fudgeFactor);
|
||||
return CreateMapLinkWithInstance(map.TerritoryType.Row, map.RowId, instance, xCoord, yCoord, fudgeFactor);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -329,6 +368,17 @@ public class SeString
|
|||
return null;
|
||||
}
|
||||
|
||||
private static string GetMapLinkNameString(string placeName, int? instance, string coordinateString)
|
||||
{
|
||||
var instanceString = string.Empty;
|
||||
if (instance is > 0 and < 10)
|
||||
{
|
||||
instanceString = (SeIconChar.Instance1 + instance.Value - 1).ToIconString();
|
||||
}
|
||||
|
||||
return $"{placeName}{instanceString} {coordinateString}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an SeString representing an entire payload chain that can be used to link party finder listings in the chat log.
|
||||
/// </summary>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue