Yes, you don't need the array. You can easily get an array of all IDs used by using hash.keys which would then return all IDs that are currently active. When removing them from the hash, you need to use hash.delete(ID) to make sure you remove it completely (so it doesn't happen that you use hash[ID] and get a nil value because there's a nil value actually stored corresponding to that key).
From a first look at your code you only need to change "@recharge_artifacts.include?(id)" to "@rechargeing_artifacts.has_key?(id)" and remove all other lines that use @recharge_artifacts.
BTW, it's "recharging", not "rechargeing". xD
EDIT:
return artifacts.include?(id) ? @recharge_artifacts.include?(id) ? false : true : false
This is kind of redunant as the results of those methods already do return boolean values. It's also confusing a bit because of a double condition. This is better:
return (artifacts.include?(id) && !@recharge_artifacts.include?(id))
I also suggest the use of parenthesis ( () brackets) to distinguish better what part of the line is used in which condition. In your original line it would look like this:
return (artifacts.include?(id) ? (@recharge_artifacts.include?(id) ? false : true) : false)