Refactor KnownAvatar into helper methods

Extract avatar lookup logic from KnownAvatar into three methods: SyncAvatarsHashMap (sync local avatar map), KnownAvatarUUID (check by UUID via UUIDNameReply), and KnownAvatarName (check by display name via AvatarPickerReply). Reworked KnownAvatar to call SyncAvatarsHashMap and then validate using the new helpers, returning false for UUID.Zero and avoiding the previous always-true outcome. Preserves event subscription/teardown and timeout waits while clarifying visibility (protected helpers, public KnownAvatar) and cleaning up callback logic.
This commit is contained in:
Madpeter 2026-02-05 22:18:20 +00:00
parent d77a7f0f62
commit 27d5e29487

View file

@ -607,7 +607,7 @@ namespace SecondBotEvents.Services
* lookup the avatar
*/
public bool KnownAvatar(string name, UUID avatarId)
protected void SyncAvatarsHashMap()
{
int currentHash = GetClient().Network.CurrentSim.ObjectsAvatars.GetHashCode();
if (currentHash != ObjectsAvatarsHash)
@ -619,10 +619,14 @@ namespace SecondBotEvents.Services
AddAvatar(A.ID, A.Name);
}
}
if (avatarId != UUID.Zero)
}
protected bool KnownAvatarUUID(UUID avatarId)
{
if(avatarsName2Key.ContainsValue(avatarId) == false)
if (avatarsName2Key.ContainsValue(avatarId) == true)
{
return true;
}
bool hasReply = false;
AutoResetEvent fetchEvent = new(false);
void callback(object sender, UUIDNameReplyEventArgs e)
@ -643,15 +647,21 @@ namespace SecondBotEvents.Services
GetClient().Avatars.UUIDNameReply -= callback;
return hasReply;
}
return true;
protected bool KnownAvatarName(string name)
{
if (name == null)
{
return false;
}
string[] bits = name.Split(' ');
if (bits.Length == 1)
{
name += " Resident";
}
if (avatarsName2Key.ContainsKey(name) == false)
if (avatarsName2Key.ContainsKey(name) == true)
{
return true;
}
UUID wantedReplyID = UUID.SecureRandom();
bool hasReply = false;
@ -677,8 +687,24 @@ namespace SecondBotEvents.Services
GetClient().Avatars.AvatarPickerReply -= callback;
return hasReply;
}
public bool KnownAvatar(string name, UUID avatarId)
{
SyncAvatarsHashMap();
if (avatarId == UUID.Zero)
{
return false;
}
if(KnownAvatarUUID(avatarId) == true)
{
return true;
}
if(KnownAvatarName(name) == true)
{
return true;
}
return false;
}
public void GetAvatarNames(List<UUID> avatars)
{