extern player_array player_list;
extern mob_array mob_list;
/*
* CREATURE CLASS AND DERIVED SUB-CLASSES
*/
class Char_Data : public Thing_Data
{
public:
char_data* next_on_obj;
char_data* next_list;
char_data* mount;
char_data* rider;
char_data* reply;
char_data* fighting;
descr_data* descr;
species_data* species;
event_data active;
command_queue cmd_queue;
char_data* leader;
char_array followers;
char_array seen_by;
char_array known_by;
char_array aggressive;
exit_array seen_exits;
affect_array leech_list;
affect_array affected;
content_array wearing;
cast_data* cast;
reset_data* reset;
link_data* link;
pc_data* pcdata;
share_data* shdata;
enemy_data* enemy;
shop_data* pShop;
cast_data* prepare;
obj_data* pos_obj;
char* pet_name;
int played;
int timer;
room_data* was_in_room;
room_data* in_room;
time_t logon;
time_t save_time;
int hit;
int base_hit;
int mana;
int base_mana;
int move;
int base_move;
int mod_hit;
int mod_move;
int mod_mana;
int max_hit;
int max_move;
int max_mana;
int mod_str;
int mod_int;
int mod_wis;
int mod_dex;
int mod_con;
int mod_resist [ MAX_RESIST ];
int mod_armor;
int affected_by [ AFFECT_INTS ];
int status;
int exp;
int hitroll;
int damroll;
int move_regen;
int mana_regen;
int hit_regen;
int room_position;
int sex;
Char_Data( );
virtual ~Char_Data( );
/* BASE */
int Type ( ) { return CHAR_DATA; }
void Extract ( );
/* NAME/KEYWORDS */
const char* Keywords ( char_data* );
const char* Name ( char_data* = NULL, int = 1, bool = FALSE );
const char* Seen_Name ( char_data*, int = 1, bool = FALSE );
const char* Long_Name ( char_data*, int = 1 );
const char* Show ( char_data*, int = 1 );
const char* real_name ( );
const char* Location ( content_array* = NULL );
void Look_At ( char_data* );
const char* Him_Her ( char_data* = NULL );
const char* His_Her ( char_data* = NULL );
const char* He_She ( char_data* = NULL );
/* PROPERTIES */
bool Can_See ( bool = FALSE );
bool Seen ( char_data* );
bool look_same ( thing_data*, thing_data* );
bool look_same ( obj_data*, obj_data* );
bool look_same ( char_data*, char_data* );
bool Is_Valid ( ) { return valid == CHAR_DATA; }
bool In_Game ( );
void To ( content_array* );
void To ( thing_data* );
thing_data* From ( int = 1 );
virtual int Size ( ) = 0;
int Weight ( int = -1 );
int Empty_Weight ( int = -1 );
int Capacity ( );
int Empty_Capacity ( );
/* AFFECTS */
bool Sees_Invis ( );
bool Sees_Hidden ( );
bool detects_good ( );
bool detects_evil ( );
/* STATS */
int Strength ( );
int Intelligence ( );
int Wisdom ( );
int Dexterity ( );
int Constitution ( );
float Hitroll ( obj_data* );
float Damroll ( obj_data* );
int Hit_Regen ( );
int Move_Regen ( );
int Mana_Regen ( );
virtual float Mean_Hp ( ) = 0;
virtual float Mean_Mana ( ) = 0;
virtual float Mean_Move ( ) = 0;
/* OTHER */
bool can_float ( );
bool can_swim ( );
bool can_breath_underwater ( );
bool can_fly ( );
bool Can_Move ( exit_data* );
bool can_buy ( obj_data*, char_data* );
bool can_edit ( obj_clss_data* );
bool can_edit ( species_data* );
bool check_skill ( int );
bool save_vs_poison ( int );
bool Recognizes ( char_data* );
bool Befriended ( char_data* );
bool Befriended ( pfile_data* );
bool Ignoring ( char_data* );
bool Filtering ( char_data* );
virtual bool Accept_Msg ( char_data* ) = 0;
obj_data* Wearing ( int, int = -1 );
int Save_Magic ( );
int Save_Fire ( );
int Save_Cold ( );
int Save_Mind ( );
int Save_Shock ( );
int Save_Acid ( );
int Save_Poison ( );
int can_carry_n ( );
int can_carry_w ( );
int get_burden ( );
int get_skill ( int );
time_t time_played ( );
void improve_skill ( int );
};
/*
* PLAYER DATA
*/
class Reput_Data
{
public:
int nation [ MAX_NATION ];
int alignment [ MAX_ALIGNMENT ];
int blood;
int gold;
int magic;
Reput_Data( ) {
blood = 0;
gold = 0;
magic = 0;
vzero( nation, MAX_NATION );
vzero( alignment, MAX_ALIGNMENT );
}
};
class Player_Data : public Char_Data
{
public:
char_data* switched;
char_data* familiar;
int base_age;
int bank;
int prayer;
int gossip_pts;
int whistle;
int timezone;
int wizinvis;
int noteboard;
note_data* note_edit;
int iflag [ 2 ];
alias_array alias;
content_array locker;
content_array junked;
obj_array save_list;
reput_data reputation;
tell_data* chant;
tell_data* say;
tell_data* yell;
tell_data* shout;
tell_data* tell;
tell_data* gtell;
tell_data* chat;
tell_data* gossip;
tell_data* ctell;
tell_data* whisper;
tell_data* atalk;
tell_data* to;
Player_Data( char* );
virtual ~Player_Data( );
int Type ( ) { return PLAYER_DATA; }
bool Is_Valid ( ) { return valid == PLAYER_DATA; }
int Age ( );
const char* Location ( content_array* = NULL );
int Size ( );
int Light ( int );
float Mean_Hp ( );
float Mean_Mana ( );
float Mean_Move ( );
bool Accept_Msg ( char_data* );
};
/*
* WIZARD CLASS
*/
class Wizard_Data : public player_data
{
public:
action_data* action_edit;
player_data* player_edit;
exit_data* exit_edit;
extra_data* adata_edit;
extra_data* mpdata_edit;
extra_data* opdata_edit;
extra_data* oextra_edit;
extra_data* room_edit;
mprog_data* mprog_edit;
obj_clss_data* obj_edit;
oprog_data* oprog_edit;
quest_data* quest_edit;
species_data* mob_edit;
int custom_edit;
int rtable_edit;
int list_edit;
int table_edit [ 2 ];
int permission [ 2 ];
int office;
char* bamfin;
char* bamfout;
char* level_title;
tell_data* build_chan;
tell_data* imm_talk;
tell_data* god_talk;
tell_data* avatar;
Wizard_Data( char* );
virtual ~Wizard_Data( );
virtual int Type ( ) { return WIZARD_DATA; }
bool Is_Valid ( ) { return valid == WIZARD_DATA; }
bool See_Account ( pfile_data* );
};
/*
* MOB CLASS
*/
class Mob_Data : public Char_Data
{
public:
mob_data* prev;
trainer_data* pTrainer;
Mob_Data( ) {
record_new( sizeof( Mob_Data ), MEM_MOBS );
pTrainer = NULL;
valid = MOB_DATA;
mob_list += this;
}
~Mob_Data( ) {
record_delete( sizeof( Mob_Data ), MEM_MOBS );
mob_list -= this;
}
int Type ( ) { return MOB_DATA; }
bool Is_Valid ( ) { return valid == MOB_DATA; }
int Size ( );
int Light ( int );
float Mean_Hp ( );
float Mean_Mana ( );
float Mean_Move ( );
bool Accept_Msg ( char_data* );
};
/*
* DESCRIPTION DATA
*/
class Descr_Data
{
public:
char* name;
char* keywords;
char* singular;
char* long_s;
char* adj_s;
char* prefix_s;
char* plural;
char* long_p;
char* adj_p;
char* prefix_p;
char* complete;
Descr_Data( );
~Descr_Data( );
};
/*
* SHARE_DATA
*/
class Share_Data
{
public:
int strength;
int intelligence;
int wisdom;
int dexterity;
int constitution;
int level;
int alignment;
int race;
int kills;
int deaths;
int fame;
int resist [ MAX_RESIST ];
int skill [ MAX_SKILL ];
Share_Data( );
~Share_Data( );
};
/*
* SUPPORT FUNCTIONS
*/
inline time_t char_data :: time_played( )
{
return current_time-logon+played;
};