bool CMultiplayRules::ClientCommand( CBaseEntity *pEdict, const CCommand &args ) { CBasePlayer *pPlayer = ToBasePlayer( pEdict ); const char *pcmd = args[0]; if ( FStrEq( pcmd, "voicemenu" ) ) { if ( args.ArgC() < 3 ) return true; CBaseMultiplayerPlayer *pMultiPlayerPlayer = dynamic_cast< CBaseMultiplayerPlayer * >( pPlayer ); if ( pMultiPlayerPlayer ) { int iMenu = atoi( args[1] ); int iItem = atoi( args[2] ); VoiceCommand( pMultiPlayerPlayer, iMenu, iItem ); } return true; } else if ( FStrEq( pcmd, "achievement_earned" ) ) { CBaseMultiplayerPlayer *pPlayer = static_cast<CBaseMultiplayerPlayer*>( pEdict ); if ( pPlayer && pPlayer->ShouldAnnounceAchievement() ) { // let's check this came from the client .dll and not the console unsigned short mask = UTIL_GetAchievementEventMask(); int iPlayerID = pPlayer->GetUserID(); int iAchievement = atoi( args[1] ) ^ mask; int code = ( iPlayerID ^ iAchievement ) ^ mask; if ( code == atoi( args[2] ) ) { IGameEvent * event = gameeventmanager->CreateEvent( "achievement_earned" ); if ( event ) { event->SetInt( "player", pEdict->entindex() ); event->SetInt( "achievement", iAchievement ); gameeventmanager->FireEvent( event ); } pPlayer->OnAchievementEarned( iAchievement ); } } return true; } return BaseClass::ClientCommand( pEdict, args ); }