// protectVars.cpp : Defines the entry point for the DLL application. // #include "bzfsAPI.h" #include #include #include BZ_GET_PLUGIN_VERSION std::list varsToProtect; std::list initialValues; std::list initialPerms; std::list::iterator i; std::list::iterator j; class Protector : public bz_EventHandler { public: virtual void process ( bz_EventData /**eventData*/ ) { if (i == varsToProtect.end()) { i = varsToProtect.begin(); j = initialValues.begin(); } if (bz_getBZDBString(i->c_str()) != *j || bz_getBZDBItemPerms(i->c_str()) != BZ_BZDBPERM_CLIENT) bz_setBZDBString(i->c_str(), j->c_str(), BZ_BZDBPERM_CLIENT); i++; j++; } } Protector protector; BZF_PLUGIN_CALL int bz_Load ( const char* commandLine ) { bz_debugMessage(4,"protectVars plugin loaded"); std::ifstream config(commandLine); std::string varName; while (config >> varName) { varsToProtect.push_back(varName); bz_setBZDBString(varName.c_str(), bz_getBZDBString(varName.c_str()).c_str(), BZ_BZDBPERM_CLIENT); initialValues.push_back(bz_getBZDBString(varName.c_str()).c_str()); initialPerms.push_back(bz_getBZDBItemPerms(varName.c_str())); } i = varsToProtect.begin(); j = initialValues.begin(); bz_registerEvent(bz_eTickEvent, &protector); return 0; } BZF_PLUGIN_CALL int bz_Unload ( void ) { bz_removeEvent(bz_eTickEvent, &protector); j = initialValues.begin(); std::list::iterator k = initialPerms.begin(); for (i = varsToProtect.begin(); i != varsToProtect.end(); i++) { bz_setBZDBString(i->c_str(), j->c_str(), *k); j++; k++; } bz_debugMessage(4,"protectVars plugin unloaded"); return 0; } // Local Variables: *** // mode:C++ *** // tab-width: 8 *** // c-basic-offset: 2 *** // indent-tabs-mode: t *** // End: *** // ex: shiftwidth=2 tabstop=8