it looks as though it's because Client::OnDisconnect (which is where the parsing of that event happens) is only called if the client is a GM.
Code:
void Client::Handle_OP_Camp(const EQApplicationPacket *app) {
#ifdef BOTS
// This block is necessary to clean up any bot objects owned by a Client
Bot::BotHealRotationsClear(this);
Bot::BotOrderCampAll(this);
#endif
if(IsLFP())
worldserver.StopLFP(CharacterID());
if (GetGM())
{
OnDisconnect(true);
return;
}
camp_timer.Start(29000,true);
return;
}
i'm not sure if the original intent of the event was to catch anything except for sudden disconnects.