Added check if context user is in range or in object table.
This commit is contained in:
@@ -90,6 +90,10 @@ internal class ContextMenu : IHostedService
|
|||||||
if (string.IsNullOrEmpty(target.TargetName) || target.TargetObjectId == 0 || target.TargetHomeWorld.RowId == 0)
|
if (string.IsNullOrEmpty(target.TargetName) || target.TargetObjectId == 0 || target.TargetHomeWorld.RowId == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
IPlayerCharacter? targetData = GetPlayerFromObjectTable(target);
|
||||||
|
if (targetData == null || targetData.Address == IntPtr.Zero)
|
||||||
|
return;
|
||||||
|
|
||||||
var world = GetWorld(target.TargetHomeWorld.RowId);
|
var world = GetWorld(target.TargetHomeWorld.RowId);
|
||||||
if (!IsWorldValid(world))
|
if (!IsWorldValid(world))
|
||||||
return;
|
return;
|
||||||
@@ -100,7 +104,7 @@ internal class ContextMenu : IHostedService
|
|||||||
PrefixChar = 'L',
|
PrefixChar = 'L',
|
||||||
UseDefaultPrefix = false,
|
UseDefaultPrefix = false,
|
||||||
PrefixColor = 708,
|
PrefixColor = 708,
|
||||||
OnClicked = async _ => await HandleSelection(args)
|
OnClicked = async _ => await HandleSelection(args).ConfigureAwait(false)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,11 +119,7 @@ internal class ContextMenu : IHostedService
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var targetData = _objectTable
|
IPlayerCharacter? targetData = GetPlayerFromObjectTable(target);
|
||||||
.OfType<IPlayerCharacter>()
|
|
||||||
.FirstOrDefault(p =>
|
|
||||||
string.Equals(p.Name.TextValue, target.TargetName, StringComparison.OrdinalIgnoreCase) &&
|
|
||||||
p.HomeWorld.RowId == target.TargetHomeWorld.RowId);
|
|
||||||
|
|
||||||
if (targetData == null || targetData.Address == IntPtr.Zero)
|
if (targetData == null || targetData.Address == IntPtr.Zero)
|
||||||
{
|
{
|
||||||
@@ -139,6 +139,15 @@ internal class ContextMenu : IHostedService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IPlayerCharacter? GetPlayerFromObjectTable(MenuTargetDefault target)
|
||||||
|
{
|
||||||
|
return _objectTable
|
||||||
|
.OfType<IPlayerCharacter>()
|
||||||
|
.FirstOrDefault(p =>
|
||||||
|
string.Equals(p.Name.TextValue, target.TargetName, StringComparison.OrdinalIgnoreCase) &&
|
||||||
|
p.HomeWorld.RowId == target.TargetHomeWorld.RowId);
|
||||||
|
}
|
||||||
|
|
||||||
private World GetWorld(uint worldId)
|
private World GetWorld(uint worldId)
|
||||||
{
|
{
|
||||||
var sheet = _gameData.GetExcelSheet<World>()!;
|
var sheet = _gameData.GetExcelSheet<World>()!;
|
||||||
@@ -162,6 +171,7 @@ internal class ContextMenu : IHostedService
|
|||||||
|
|
||||||
return luminaWorlds.FirstOrDefault(x => x.RowId == worldId);
|
return luminaWorlds.FirstOrDefault(x => x.RowId == worldId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsChineseJapaneseKoreanString(string text) => text.All(IsChineseJapaneseKoreanCharacter);
|
private static bool IsChineseJapaneseKoreanString(string text) => text.All(IsChineseJapaneseKoreanCharacter);
|
||||||
|
|
||||||
private static bool IsChineseJapaneseKoreanCharacter(char c) => (c >= 0x4E00 && c <= 0x9FFF);
|
private static bool IsChineseJapaneseKoreanCharacter(char c) => (c >= 0x4E00 && c <= 0x9FFF);
|
||||||
|
|||||||
Reference in New Issue
Block a user