Hey using the EQEmu::Any isn't hard, in the code there are some good examples of it (mostly in the lua parser).
In terms of how to pre-load quests we basically have QuestParserCollection now find the script's filenames to load based on quest ids and which files are available. Then passing it to one of these implemented by your parser implementation of these functions:
Code:
virtual void LoadNPCScript(std::string filename, int npc_id);
virtual void LoadGlobalNPCScript(std::string filename);
virtual void LoadPlayerScript(std::string filename);
virtual void LoadGlobalPlayerScript(std::string filename);
virtual void LoadItemScript(std::string filename, ItemInst *item);
virtual void LoadSpellScript(std::string filename, uint32 spell_id);
virtual void LoadEncounterScript(std::string filename, std::string encounter_name);
How you dispatch events is up to you. Perl and lua don't specifically give the underlying quest ids to the events but they do have specific quest ids and if they wanted they *could* pass them.
It sounds like you might have significant hurdles trying to update to the newer interface which is kind of unfortunate but it was important to standardize it when we added lua so we could have multiple parsers working well.
If you have more questions or concerns I'll check back from time to time.