the current invisibility system uses a scale from one to one hundred, I suggest a system that uses bitflags, you could do, for example:
#define INVISIBILITY_TRAPS 1
#define INVISIBILITY_TREASURE 2
(more bitflags)
/obj/item.../dangersense
name = "Potion of dangersense"
/obj/item.../dangersense/on_use(mob)
mob.see_invisible |= INVISIBILITY_TRAPS
/obj/item.../treasuresense
name = "Potion of treasuresense"
/obj/item.../treasuresense/on_use(mob)
mob.see_invisible |= INVISIBILITY_TREASURE
This works interchangably, only other way to do it is through images, and like I said, that's a whole different can of worms.
I'm still on the fence about the groups concept. I didn't like the syntax I saw for it before, and I'm unclear on how I'd implement it. Assuming I could get those two aspects resolved, I'm otherwise not opposed to it.