From 8749995750ac1006d91069770d6ad274d0d6479f Mon Sep 17 00:00:00 2001 From: Matthew <22198949+MafewTM@users.noreply.github.com> Date: Sat, 4 Jan 2025 11:05:33 -0500 Subject: [PATCH] feat(server/player): support getting/setting nested metadata --- server/player.lua | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/server/player.lua b/server/player.lua index 0baa6342c..8517bb12f 100644 --- a/server/player.lua +++ b/server/player.lua @@ -1124,9 +1124,23 @@ function SetMetadata(identifier, metadata, value) if not player then return end - local oldValue = player.PlayerData.metadata[metadata] + local oldValue - player.PlayerData.metadata[metadata] = value + if metadata:match('%.') then + local metaTable, metaKey = metadata:match('([^%.]+)%.(.+)') + + if metaKey:match('%.') then + lib.print.error('cannot get nested metadata more than 1 level deep') + end + + oldValue = player.PlayerData.metadata[metaTable][metaKey] + + player.PlayerData.metadata[metaTable][metaKey] = value + else + oldValue = player.PlayerData.metadata[metadata] + + player.PlayerData.metadata[metadata] = value + end UpdatePlayerData(identifier) @@ -1170,7 +1184,17 @@ function GetMetadata(identifier, metadata) if not player then return end - return player.PlayerData.metadata[metadata] + if metadata:match('%.') then + local metaTable, metaKey = metadata:match('([^%.]+)%.(.+)') + + if metaKey:match('%.') then + lib.print.error('cannot get nested metadata more than 1 level deep') + end + + return player.PlayerData.metadata[metaTable][metaKey] + else + return player.PlayerData.metadata[metadata] + end end exports('GetMetadata', GetMetadata)