I wouldn't mind helping out on the server side, although I'm busy for the next week or so trying to push an Android app out the door at my current job...
Looking through the code, I'd bet that your crash probably comes from your very conservative use of memory when it comes to strings. Things like make me nervous:
char *buffer = (char*)malloc(1 + 4*2 + strlen(weapon.ToCStr()));
int length = sprintf(buffer, "%c%d:%d:%s", WSPacket_PlayerDeath, victim, attacker, STRING(weapon));
Don't forget, this plugin is running on a server that's using hundreds of megabytes of memory. Don't hesitate to allocate 1k here in order to prevent a buffer overflow. Better yet, find out if Valve has their own blessed string class that you should be using to prevent this sort of thing, or see if you can use the string class in the standard library (http://www.cplusplus.com/reference/string/string/) and call c_str() whenever needed.