/**************************************************************************/
// chardata.h - header for char_data class
/***************************************************************************
* The Dawn of Time v1.69r (c)1997-2004 Michael Garratt *
* >> A number of people have contributed to the Dawn codebase, with the *
* majority of code written by Michael Garratt - www.dawnoftime.org *
* >> To use this source code, you must fully comply with all the licenses *
* in licenses.txt... In particular, you may not remove this copyright *
* notice. *
***************************************************************************
* >> Original Diku Mud copyright (c)1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, & Katja Nyboe. *
* >> Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* >> ROM 2.4 is copyright 1993-1995 Russ Taylor and has been brought to *
* you by the ROM consortium: Russ Taylor(rtaylor@pacinfo.com), *
* Gabrielle Taylor(gtaylor@pacinfo.com) & Brian Moore(rom@rom.efn.org) *
* >> Oblivion 1.2 is copyright 1996 Wes Wagner *
**************************************************************************/
#ifndef char_data_H
#define char_data_H
struct pload_data;
class intro_data;
class char_data
{
public:
// member functions
// output to character
void print(const char *buf);
void printbw(const char *buf);
void printf(const char *fmt, ...) __mftc_printf_1__;
void printfbw(const char *fmt, ...) __mftc_printf_1__;
void println(const char *buf);
void print_blank_lines(int blank_lines_to_print_to_char);
void printlnbw(const char *buf);
void printlnf(const char *fmt, ...) __mftc_printf_1__;
void printlnfbw(const char *fmt, ...) __mftc_printf_1__;
void wrap(const char *buf);
void wrapf(const char *fmt, ...) __mftc_printf_1__;
void wrapln(const char *buf);
void wraplnf(const char *fmt, ...) __mftc_printf_1__;
void titlebar(const char *header);
void titlebarf(const char *fmt, ...) __mftc_printf_1__;
void olctitlebar(const char *header);
void olctitlebarf(const char *fmt, ...) __mftc_printf_1__;
void print(int seconds, const char *buf);
void printf(int seconds, const char *fmt, ...) __mftc_printf_2__;
void println(int seconds, const char *buf);
void printlnf(int seconds, const char *fmt, ...) __mftc_printf_2__;
void sendpage(const char *txt);
int pdelay(); // the amount print*() text sent to the character is delayed by
void set_pdelay(int seconds); // the amount print*() text sent to the character is delayed by
private:
int m_pdelay; // the amount print*() text sent to the character is delayed by
public:
// skills
int get_skill(int sn); // returns the percentage of skill they have in it
int get_display_skill(int sn); // return the percentage they have out of the max for the class
int get_skill_level(int sn); // returns the level of the skill for the players class
void mpqueue_attached(time_t when);
// void mpqueue_removed(int when);
void mpqueue_dequeue_all(); // dequeue all the queued events involving us
void hit_return_to_continue();
vn_int vnum(); // a safe way to get the vnum from a mob/player
vn_int in_room_vnum(); // a safe way to get the vnum of a room
private:
int npc_skill_level(int sn);
int pc_skill_level(int sn);
public:
int uid; // unique id
DEITY_DATA* deity;
char_data * next;
char_data * next_in_room;
char_data * next_player;
char_data * next_who_list;
char_data * mounted_on;
char_data * ridden_by;
char_data * master;
char_data * leader;
char_data * fighting;
char_data * reply;
char_data * anon_reply;
char_data * retell;
char_data * anon_retell;
char_data * controlling; // who a pc is controlling
char_data * pet;
char_data * mprog_target;
vn_int mprog_remember_room_vnum; // used by premove at this stage
MEM_DATA *memory;
SPEC_FUN *spec_fun;
GAMBLE_FUN *gamble_fun;
mob_index_data *pIndexData;
connection_data *desc;
AFFECT_DATA *affected;
note_data *pnote;
OBJ_DATA *carrying;
OBJ_DATA *on;
ROOM_INDEX_DATA * in_room;
ROOM_INDEX_DATA * was_in_room;
area_data *zone;
pc_data *pcdata;
GEN_DATA *gen_data;
bool valid;
char *name;
long id;
char * remote_ip_copy; // used to detect multilogging
sh_int host_validated;
sh_int version;
sh_int subversion;
char * short_descr;
char * long_descr;
char * description;
char * gprompt;
char * prompt;
char * olcprompt;
char * prefix;
duel_data * duels;
sh_int group;
sh_int helpgroup; // the group number they will help
CClanType *clan;
sh_int clanrank;
CClanType *seeks;
sh_int pksafe; /* 3 pk variables enable automatic pk enforcement */
sh_int pknorecall;
sh_int pkool;
int pkkills;
int pkdefeats;
int pknoquit;
sh_int sex;
sh_int clss;
sh_int race;
sh_int level;
sh_int trust;
int played;
int lines; // lines per page
time_t logon;
int timer;
int idle;
int wait;
int daze;
int hit;
int max_hit;
int mana;
int max_mana;
int move;
int max_move;
long gold;
long silver;
int exp;
long act;
long act2;
long job;
int bounty;
long dyn; // dynamic data - never saved
long comm;
long wiznet[4]; // wiznet stuff
char * wiznet_colour[4]; // wiznet colour coding
long imm_flags;
long res_flags;
long vuln_flags;
unsigned char invis_level;
unsigned char iwizi;
unsigned char olcwizi;
unsigned char owizi;
unsigned char incog_level;
long affected_by;
long affected_by2;
long config;
long config2;
sh_int position;
int practice;
int train;
int carry_weight;
int carry_number;
int saving_throw;
sh_int alliance;
sh_int tendency;
int hitroll;
int damroll;
int armor[4];
int wimpy;
OBJ_DATA *roulette_table;
int roulette_mark;
int roulette_tp;
sh_int roulette_play;
// stats
sh_int perm_stats[MAX_STATS];
sh_int potential_stats[MAX_STATS];
sh_int modifiers[MAX_STATS];
// parts stuff
long form;
long parts;
sh_int size;
char * material;
// mobile stuff
long off_flags;
sh_int damage[3];
sh_int dam_type;
sh_int start_pos;
sh_int default_pos;
sh_int mprog_delay;
int temple;
//arena stuff
int win; //used in score (won)
int lost; //used in score
int pot; //used in the betting
char * challenged;
char * challenger;
int apot; //used in wagers
// critical stuff
int bleeding;
sh_int will_die;
sh_int is_stunned;
// language stuff
language_data *language;
long bank;
ROOM_INDEX_DATA * last_ic_room; // NULL = currently in ic rooms
// subdue system - kalahn - june 97
bool no_xp, subdued;
bool tethered;
bool bucking;
bool autologout; // set in char_update
bool is_trying_sleep;
int subdued_timer; // budget way to wake them
sh_int will;
sh_int wildness;
sh_int state; /* determines if they are
* comatose (will die),
* unconscience,
* semiconscience,
* subdued,
* yielding,
* free
*/
char_data * subduer; // character who has subdue this character
int cautious_about_backstab; // counter which is how long before a mob
// can be backstabbed for
unsigned char last_colour, saved_colour[MAX_SAVED_COLOUR_ARRAY];
unsigned char saved_colour_index;
long last_force; // the tick this char was last forced to do
// something - used to stop wandering within
// 5 ticks of them being forced
// ( = tick_counter on force)
long notenet; // notenet stuff - kalahn
// Dynamic Spell info
int mirage;
sh_int mirage_hours;
// MOB REMEMBER STUFF
char_data * mobmemory;
// WEAPON SPECIALIZATION
sh_int specialization;
// STATIC VNUMS.
vn_int recall_room; // Recall room for player.
vn_int recall_inn_room; // Recall room for player's inn.
// TIMERS.
int expire_recall_inn; // Time the recall inn expires.
char saycolour;
char motecolour;
sh_int track_index;
int duel_challenged;
int duel_decline;
int duel_accept;
int duel_ignore;
int duel_bypass;
int duel_subdues_before_karn_loss;
sh_int remort; // remort the player is currently on
sh_int beginning_remort; // if a number, the player is midstream of remorting
sh_int highest_level_to_do_damage;
intro_data *know; // data containing who they know info
unsigned short know_index; // their index in the know database
char colour_prefix; // character prefixing all colour codes
pload_data *pload; // data about the pload
char_data *ploaded; // character which has been ploaded by this character
private:
int mpqueue_count; // just a basic command for now
bool mxp_enabled;
public: // mxp functions
void mxp_send_init(); // used to send the mxp element tags we are going to use
void record_replayroom_event(const char *txt); // record says and emotes etc
};
#endif