Maruno, I come bearing an idea.
As I'm sure you're well aware, the Escape Rope does not work as it should compared to the games. It warps the player to a location defined in the EscapeRope Metadata, as opposed to the real games, where it takes you to the last cave entrance you took, assuming you're in a cave. The same is true for Dig as they are essentially the same.
I've though of a better method: Make a new subvariable, say, $PokemonGlobal.EscapPoint, and have a method for modifying this. pbSetEscapePoint would set $PokemonGlobal.EscapPoint to the players current MapID, X coordinate, and Y coordinate. If you want you could also make a command that sets custom mapID and Coordinates, though that seems useless to me.
The EscapePoint value stored int the MetaData would become a simple True/false/nil to determine if the player is allowed to use Escape Rope or Dig there in the first place.
Any thoughts or caveats with this idea?