Very nice and clean format. Thanks for sharing it
BTW, using quest::saylink outside of EVENT_SAY will almost always cause a zone crash, which may be why you were seeing your crashes. I am not really sure what causes the crash, but as long as you keep them inside EVENT_SAY, it isn't an issue.