ackfuss-4.4.1/
ackfuss-4.4.1/board/
ackfuss-4.4.1/help/k/
ackfuss-4.4.1/help/n/
ackfuss-4.4.1/help/s/
ackfuss-4.4.1/help/u/
ackfuss-4.4.1/help/v/
ackfuss-4.4.1/help/x/
ackfuss-4.4.1/help/y/
ackfuss-4.4.1/help/z/
ackfuss-4.4.1/src/areaconvert/
ackfuss-4.4.1/src/areaconvert/h/
/*
 * Copyright Matt Goff (Kline) 2009
 * If you use my code, please give credit where it is due.
 * Support provided at www.ackmud.net
 */

#include "include.h"
#include "ack431.h"
#include "ackfuss.h"
#include "flags.h"

#define VERS "AreaConvert 1.0"
#define SPACER "--------------------------------------------------"

#define TYPE_NONE   -1
#define TYPE_ACK431  0
#define TYPE_ACKFUSS 1

#define MAX_BITSET    256
#define MAX_EXIT      6
#define MAX_OBJ_VALUE 10
#define MAX_TRADE     5

#define I_BIT(var,bit) (var & bit)
#define S_BIT(var,bit) (var |= bit)
#define R_BIT(var,bit) (var &= ~bit)

void display_help     ( void );
void cleanup_outfile  ( string filename );

bool infile_init      ( string filename, ifstream &file );
bool outfile_init     ( string filename, ofstream &file );
bool typein_init      ( string name, int &type );
bool typeout_init     ( string name, int &type );

void process_infile   ( ifstream &file, int type );
void process_outfile  ( ofstream &file, int typein, int typeout );
void shutdown_cleanup ( void );

int str2int           ( string &str );
string int2str        ( int i );

class DeleteObject
{
 public:
  template <typename T> void operator() (const T* ptr) const { delete ptr; };
};

class affect_data
{
 public:
  int int_location_in;
  int int_location_out;
  int modifier;
};

class area_data
{
 public:
  string filename;
  string name;
  string owner;
  string can_read;
  string can_write;
  string keyword;
  string level_label;
  string reset_msg;
  string flags_found;

  bitset<MAX_BITSET> bitset_flags_in;
  bitset<MAX_BITSET> bitset_flags_out;
  int int_flags_in;
  int int_flags_out;
  int min_vnum;
  int max_vnum;
  int min_level;
  int max_level;
  int reset_rate;
  int revision;
};

class exit_data
{
 public:
  string description;
  string keyword;

  bitset<MAX_BITSET> bitset_flags_in;
  bitset<MAX_BITSET> bitset_flags_out;
  int int_flags_in;
  int int_flags_out;
  int key;
  int vnum;
};

class extra_data
{
 public:
  string keyword;
  string description;
};

class room_data
{
 public:
  room_data()  { for( short i = 0; i < MAX_EXIT; i++ ) exit[i] = NULL; };
  ~room_data() { for( short i = 0; i < MAX_EXIT; i++ ) if(exit[i]) delete exit[i]; for_each(extra_list.begin(),extra_list.end(),DeleteObject()); };
  string name;
  string description;

  list<extra_data *> extra_list;
  bitset<MAX_BITSET> bitset_flags_in;
  bitset<MAX_BITSET> bitset_flags_out;
  int vnum;
  int int_flags_in;
  int int_flags_out;
  int sector;
  exit_data *exit[MAX_EXIT];
};

class npc_data
{
 public:
  string player_name;
  string short_descr;
  string long_descr;
  string description;

  bitset<MAX_BITSET> bitset_act_flags_out;
  int affected_by;
  int alignment;
  int level;
  int sex;
  int ac_mod;
  int hr_mod;
  int dr_mod;
  int pclass;
  int clan;
  int position;
  int race;
  int skills;
  int cast;
  int def;
  int strong_magic;
  int weak_magic;
  int race_mod;
  int power_skill;
  int power_cast;
  int resist;
  int suscept;
  int int_act_flags_in;
  int vnum;
};

class obj_data
{
 public:
  obj_data()  { int i = 0; int_item_apply_out = 0; for( i = 0; i < MAX_OBJ_VALUE; i++ ) value[i] = 0; };
  ~obj_data() { for_each(apply_list.begin(),apply_list.end(),DeleteObject()); for_each(extra_list.begin(),extra_list.end(),DeleteObject()); };
  string name;
  string short_descr;
  string long_descr;

  list<affect_data *> apply_list;
  list<extra_data *> extra_list;
  bitset<MAX_BITSET> bitset_extra_flags_out;
  bitset<MAX_BITSET> bitset_wear_flags_out;
  int type;
  int int_extra_flags_in;
  int int_wear_flags_in;
  int int_item_apply_in;
  int int_item_apply_out;
  int value[MAX_OBJ_VALUE];
  int weight;
  int level;
  int vnum;
};

class shop_data
{
 public:
  shop_data() { int i = 0; for( i = 0; i < MAX_TRADE; i++ ) buy_type[i] = 0; }
  int buy_type[MAX_TRADE];
  int hour_close;
  int hour_open;
  int keeper;
  int prof_buy;
  int prof_sell;
};

class reset_data
{
 public:
  string command;
  string notes;

  int arg1;
  int arg2;
  int arg3;
  int count;
};