rendered paste body#include "bzfsAPI.h"
#include <string>
#include <sstream>
BZ_GET_PLUGIN_VERSION
class AdminListener : public bz_EventHandler {
public:
virtual void process( bz_EventData *eventData );
};
AdminListener adminListener;
BZF_PLUGIN_CALL int bz_Load( const char* ) {
bz_debugMessage(4,"adminListener plugin loaded");
bz_registerEvent( bz_eChatMessageEvent, &adminListener );
return 0;
}
BZF_PLUGIN_CALL int bz_Unload( void ) {
bz_debugMessage(4,"adminListener plugin unloaded");
bz_removeEvent( bz_eChatMessageEvent, &adminListener );
return 0;
}
void AdminListener::process( bz_EventData *eventData ) {
bz_ChatEventData *messageEvent = (bz_ChatEventData*) eventData;
std::ostringstream oss;
oss << messageEvent->team;
oss << " from player ";
oss << messageEvent->from;
oss << " to player ";
oss << messageEvent->to;
if( messageEvent->team == eRogueTeam ||
messageEvent->team == eRedTeam ||
messageEvent->team == eGreenTeam ||
messageEvent->team == eBlueTeam ||
messageEvent->team == ePurpleTeam ||
messageEvent->team == eHunterTeam ) {
bz_PlayerRecord *sender =
bz_getPlayerByIndex( messageEvent->from );
if( ! sender ) return;
std::string senderCallsign = (sender->callsign).c_str();
bz_freePlayerRecord( sender );
bzAPIIntList *playerList = bz_newIntList();
bz_getPlayerIndexList( playerList );
std::string message =
std::string( "[Player to team] " ) +
senderCallsign +
std::string( ": " ) +
std::string( (messageEvent->message).c_str() );
for( unsigned int i = 0; i < playerList->size(); i++ ) {
bz_PlayerRecord *player = bz_getPlayerByIndex( i );
if( ! player ) return;
if( player->admin &&
player->team == eObservers ) {
bz_sendTextMessage( i, i, message.c_str() );
}
bz_freePlayerRecord( player );
}
} else if( messageEvent->to >= 0 && messageEvent->from >= 0) {
// Send to admins if it is a PM sent from a non-admin
// to a non-admin
bz_PlayerRecord *sender =
bz_getPlayerByIndex( messageEvent->from );
bz_PlayerRecord *receiver =
bz_getPlayerByIndex( messageEvent->to );
if( ! sender || ! receiver ) return;
if( sender->admin || receiver->admin ) return;
std::string messageString =
std::string("[") +
sender->callsign.c_str() +
"->" +
receiver->callsign.c_str() +
"] " +
messageEvent->message.c_str();
bz_freePlayerRecord( sender );
bz_freePlayerRecord( receiver );
bzAPIIntList *playerList = bz_newIntList();
bz_getPlayerIndexList( playerList );
for( unsigned int i = 0; i < playerList->size(); i++ ) {
bz_PlayerRecord *player = bz_getPlayerByIndex( i );
if( !player ) return;
if( player->admin &&
player->team == eObservers ) {
bz_sendTextMessage( i, i,
messageString.c_str() );
}
bz_freePlayerRecord( player );
}
}
}