I'll use the "requireType" property, with default value of questProgress (retro-compatibility), and use the requireID and value if they exist, otherwise fall back to name splitting (retro-compatibility again).
requireType will be parsed by the enum itself (so will the toString() ). I'm amazed I didn't know about enum.valueOf() and enum.toString()...... :cry: :gun:
I'll also make it so that phraseID can be a script, that may or may not display a message with replies etc... like for a riddle to solve or password that the player has to give. Simple case would be for key to be locked on quest progress, and script can reward you with the required quest progress (hidden quest). Even being blocked by a key area could trigger quest progress and other rewards...