@@ -46,7 +46,12 @@ function API.data.assign(player, dataId)
4646 playerToDataId [player ] = dataId
4747 dataIdToPlayer [dataId ] = player
4848
49+ local principals = Storage .dataToPrincipal .getAll (dataId )
50+ for i = 1 , # principals do
51+ Utils .addDataPrincipal (dataId , principals [i ])
52+ end
4953 Utils .addPlayerPrincipal (player , Utils .getDataAceName (dataId ))
54+
5055 if resource == nil then
5156 print ((' Player %s (User ID %s) was auto-assigned Data ID %s' )
5257 :format (player , userId , dataId ))
@@ -72,7 +77,13 @@ function API.data.unassign(player)
7277
7378 playerToDataId [source ] = nil
7479 dataIdToPlayer [dataId ] = nil
80+
7581 Utils .removePlayerPrincipal (player , Utils .getDataAceName (dataId ))
82+ local principals = Storage .dataToPrincipal .getAll (dataId )
83+ for i = 1 , # principals do
84+ Utils .removeDataPrincipal (dataId , principals [i ])
85+ end
86+
7687 print ((' Player %s (User ID %s) was unassigned Data ID %s' )
7788 :format (player , API .users .get (player ), dataId ))
7889 TriggerEvent (' d4_playerdata:dataUnassigned' , player , dataId )
@@ -143,6 +154,42 @@ function API.data.migrate(dataId, newUserId)
143154 return true
144155end
145156
157+ --- @param dataId integer
158+ --- @param principal string
159+ --- @return boolean success
160+ function API .data .addPrincipal (dataId , principal )
161+ if Storage .dataToPrincipal .exists (dataId , principal ) then
162+ return false
163+ end
164+
165+ Storage .dataToPrincipal .set (dataId , principal )
166+ FlushResourceKvp ()
167+
168+ if API .data .getPlayer (dataId ) ~= nil then
169+ Utils .addDataPrincipal (dataId , principal )
170+ end
171+
172+ return true
173+ end
174+
175+ --- @param dataId integer
176+ --- @param principal string
177+ --- @return boolean success
178+ function API .data .removePrincipal (dataId , principal )
179+ if not Storage .dataToPrincipal .exists (dataId , principal ) then
180+ return false
181+ end
182+
183+ Storage .dataToPrincipal .delete (dataId , principal )
184+ FlushResourceKvp ()
185+
186+ if API .data .getPlayer (dataId ) ~= nil then
187+ Utils .removeUserPrincipal (dataId , principal )
188+ end
189+
190+ return true
191+ end
192+
146193--- @param player unknown
147194--- @return integer ? dataId
148195function API .data .autoAssign (player )
@@ -197,3 +244,5 @@ exports('unassignDataId', API.data.unassign)
197244exports (' createDataId' , API .data .create )
198245exports (' deleteDataId' , API .data .delete )
199246exports (' migrateDataId' , API .data .migrate )
247+ exports (' addDataIdPrincipal' , API .data .addPrincipal )
248+ exports (' removeDataIdPrincipal' , API .data .removePrincipal )
0 commit comments