This commit is contained in:
2025-12-16 06:31:29 +09:00
parent bdfcf254a8
commit 4444a88746
32 changed files with 1204 additions and 464 deletions

View File

@@ -230,7 +230,12 @@ public sealed class ActorObjectService : IHostedService, IDisposable
if (descriptor.ObjectKind == DalamudObjectKind.Player &&
!string.IsNullOrEmpty(descriptor.HashedContentId))
{
var liveHash = DalamudUtilService.GetHashedCIDFromPlayerPointer(descriptor.Address);
if (!TryGetLivePlayerHash(descriptor, out var liveHash))
{
UntrackGameObject(descriptor.Address);
return false;
}
if (!string.Equals(liveHash, descriptor.HashedContentId, StringComparison.Ordinal))
{
UntrackGameObject(descriptor.Address);
@@ -241,6 +246,16 @@ public sealed class ActorObjectService : IHostedService, IDisposable
return true;
}
private bool TryGetLivePlayerHash(ActorDescriptor descriptor, out string liveHash)
{
liveHash = string.Empty;
if (_objectTable.CreateObjectReference(descriptor.Address) is not IPlayerCharacter playerCharacter)
return false;
return DalamudUtilService.TryGetHashedCID(playerCharacter, out liveHash);
}
public void RefreshTrackedActors(bool force = false)
{
var now = DateTime.UtcNow;
@@ -425,8 +440,10 @@ public sealed class ActorObjectService : IHostedService, IDisposable
bool isLocal = _objectTable.LocalPlayer?.Address == address;
string hashedCid = string.Empty;
IPlayerCharacter? resolvedPlayer = null;
if (_objectTable.CreateObjectReference(address) is IPlayerCharacter playerCharacter)
{
resolvedPlayer = playerCharacter;
name = playerCharacter.Name.TextValue ?? string.Empty;
objectIndex = playerCharacter.ObjectIndex;
isInGpose = objectIndex >= 200;
@@ -439,7 +456,10 @@ public sealed class ActorObjectService : IHostedService, IDisposable
if (objectKind == DalamudObjectKind.Player)
{
hashedCid = DalamudUtilService.GetHashedCIDFromPlayerPointer(address);
if (resolvedPlayer == null || !DalamudUtilService.TryGetHashedCID(resolvedPlayer, out hashedCid))
{
hashedCid = DalamudUtilService.GetHashedCIDFromPlayerPointer(address);
}
}
var (ownedKind, ownerEntityId) = DetermineOwnedKind(gameObject, objectKind, isLocal);