Program Checks

This stops a prog from firing if one is already running:
if progactive(self.gid,ch.gid) then return end

This stops a program from firing if the player is not in the room:
if self == nil or ch == nil or self.room.key ~= ch.room.key then return end