If it's a small number of abilities the user can use (e.g. like the inventory of a point & click game) you can add the player object N instances variables (e.g. abi1..abi9) used as flag for the unique ability.
You should use an boolean for each ability (non/available).
- key ability = abi1=true
- hammer ability = abi2=true
...
The objects/tools representing the ability ingame should have also an ability-ID storing the representing ID (key = 1..N)
Once 'collected/activeted' the represented players ability ID is set to true.
--------------------------------
If you have a lot of abilities ore code it more dynamically you should use an array of abilities and give each ability an ID (1..N).
Add the ability ID to the array if 'collected' or delete the ID if it get lost.
Same approach here:
The objects/tools representing the ability ingame should have also an ability-flag storing the representing ID (key = ID1)
mercuryus