All pastes #47931 Raw Edit

Stuff

public text v1 · immutable
#47931 ·published 2006-04-03 01:40 UTC
rendered paste body
// protectVars.cpp : Defines the entry point for the DLL application.
//

#include "bzfsAPI.h"
#include <fstream>
#include <string>
#include <list>

BZ_GET_PLUGIN_VERSION

std::list<std::string> varsToProtect;
std::list<std::string> initialValues;
std::list<int> initialPerms;

std::list<std::string>::iterator i;
std::list<std::string>::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<int>::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