Hi Mayhem,
in level 5, you also need to do a full check on the quest and insert "if" statements so that indeed you trigger events when it's necessary, that's the best advice I can give given what you are describing, I do that all the time. You start with a very straight forward "reaction", and then you insert states in between the flow to take more decision and build a fsm that starts taking in account more and more properties of your game.
The player prefs are good for simply data, I would not recommand you use that to host all your quests, and I have ticked a new task for arrayMaker next update to allow for serializing array content which will make things easier. Also the dontdestroy feature if mandatory here, have a gameObject hosting the arrays and hash hosting your quests and questbook set to survive loading, and each level can then query that gameObject to know exactly the state of the game and react properly and differently.
Bye,
Jean