/*
* 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;
};