Here's how I hook Round_Start / Round_End in Metamod using AlertMessage (For counter-strike anyway)
PHP Code:
//======================================================================
void AlertMessage_Post(ALERT_TYPE atype, char *szFmt, ...) {
if(atype != at_logged)
RETURN_META(MRES_IGNORED);
va_list argptr;
static char string[1024];
va_start(argptr, szFmt);
vsprintf(string, szFmt, argptr);
va_end(argptr);
if (FStrEq(string, "World triggered \"Round_Start\"\n"))
// stuff to do on Round_Start event
else if (FStrEq(string, "World triggered \"Round_End\"\n"))
// stuff to do on Round_End event
RETURN_META(MRES_IGNORED);
}
//======================================================================
Probably not the most efficient way, as I'm still learning c++ / hlsdk, but it works fairly well for my needs.
Round_Start is fired when the round actually starts (after freezetime), not at player spawn
Round_End is fired as soon as an objective is completed (bomb detonate / defuse), not sure about hostage maps though.