#include #include "bzfsAPI.h" BZ_GET_PLUGIN_VERSION class spooferHandler : public bz_CustomSlashCommandHandler { public: virtual bool handle(int playerID, bzApiString command, bzApiString message, bzAPIStringList *params); }; spooferHandler spoof; BZF_PLUGIN_CALL int bz_Load ( const char* /*commandLine*/ ) { bz_debugMessage(4,"spoof plugin loaded"); bz_registerCustomSlashCommand("spoof", &spoof); bz_registerCustomSlashCommand("aspoof", &spoof); return 0; } BZF_PLUGIN_CALL int bz_Unload ( void ) { bz_debugMessage(4,"spoof plugin unloaded"); bz_removeCustomSlashCommand("spoof"); bz_removeCustomSlashCommand("aspoof"); return 0; } bool spooferHandler::handle(int playerID, bzApiString command, bzApiString message, bzAPIStringList *params) { int paramSize = params->size(); if (bz_hasPerm(playerID, "spoof") || bz_hasPerm(playerID, "aspoof")) { if (paramSize == 0 || paramSize == 1) { bz_sendTextMessage(BZ_SERVER, playerID, "Spoofer Usage: "); return true; } } else { bz_sendTextMessagef(BZ_SERVER, playerID, "Spoofer: You do not have permission to use the %s command.", command.c_str()); return true; } int slot = atoi(params->get(0).c_str()); std::string spoofedMessage; for (unsigned int i = 1; i < params->size(); i++) { spoofedMessage += params->get(i).c_str(); if (!(i == params->size() - 1)) // so we don't stick a whitespace on the end spoofedMessage += " "; // add a whitespace between each chat text parameter } bzAPIIntList *playerList = bz_newIntList(); bz_getPlayerIndexList(playerList); bz_PlayerRecord *data = bz_getPlayerByIndex(playerList->get(playerID)); std::string playerName = data->callsign.c_str(); bz_freePlayerRecord(data); if (slot == 0 && params->get(0) == "0") { // Fix for int check and for slot # itself (slot 0) if (command == "spoof" && bz_hasPerm(playerID, "spoof")) { // Normal spoof or aspoof? bz_sendTextMessagef(BZ_SERVER, eAdministrators, "Spoofer: %s spoofed slot %d.", playerName.c_str(), slot); } bz_sendTextMessage(slot, BZ_ALLUSERS, spoofedMessage.c_str()); } else if (slot != 0) { // All other slot numbers if (command == "spoof" && bz_hasPerm(playerID, "spoof")) { // Normal spoof or aspoof? bz_sendTextMessagef(BZ_SERVER, eAdministrators, "Spoofer: %s spoofed slot %d.", playerName.c_str(), slot); } bz_sendTextMessage(slot, BZ_ALLUSERS, spoofedMessage.c_str()); } else { bz_sendTextMessage(BZ_SERVER, playerID, "Spoofer Usage: "); return true; } return true; }