/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.diku' as well the Merc *
* license in 'license.merc'. In particular, you may not remove either *
* of these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/*
MurkMUD++ - A Windows compatible, C++ compatible Merc 2.2 Mud.
\author Jon A. Lambert
\date 08/30/2006
\version 1.4
\remarks
This source code copyright (C) 2005, 2006 by Jon A. Lambert
All rights reserved.
Use governed by the MurkMUD++ public license found in license.murk++
*/
#ifndef CHARACTER_HPP
#define CHARACTER_HPP
#include "baseobject.hpp"
/*
* One character (PC or NPC).
*/
class Character : public BaseObject {
public:
Character *master;
Character *leader;
Character *fighting;
Character *reply;
SPEC_FUN *spec_fun;
MobPrototype *pIndexData;
Descriptor *desc;
std::list<Affect *> affected;
Note *pnote;
std::list<Object *> carrying;
Room *in_room;
Room *was_in_room;
PCData *pcdata;
std::string long_descr;
std::string prompt;
sh_int sex;
sh_int klass;
sh_int race;
int level;
sh_int trust;
bool wizbit;
int played;
time_t logon;
time_t save_time;
time_t last_note;
sh_int timer;
int wait;
int hit;
int max_hit;
int mana;
int max_mana;
int move;
int max_move;
int gold;
int exp;
int actflags;
int affected_by;
sh_int position;
sh_int practice;
sh_int carry_weight;
sh_int carry_number;
sh_int saving_throw;
sh_int alignment;
sh_int hitroll;
sh_int damroll;
sh_int armor;
sh_int wimpy;
sh_int deaf;
MobProgramActList *mpact; /* Used by MOBprogram */
int mpactnum; /* Used by MOBprogram */
Character();
~Character();
#define CMD_DECL
#include "cmd_list.hpp"
void do_mpstat(std::string argument);
void do_mpasound(std::string argument);
void do_mpkill(std::string argument);
void do_mpjunk(std::string argument);
void do_mpechoaround(std::string argument);
void do_mpechoat(std::string argument);
void do_mpecho(std::string argument);
void do_mpmload(std::string argument);
void do_mpoload(std::string argument);
void do_mppurge(std::string argument);
void do_mpgoto(std::string argument);
void do_mpat(std::string argument);
void do_mptransfer(std::string argument);
void do_mpforce(std::string argument);
#define SPELL_DECL
#include "spell_list.hpp"
bool is_npc();
bool is_awake();
bool is_good();
bool is_evil();
bool is_neutral();
bool is_affected(int flg);
int get_ac();
int get_hitroll();
int get_damroll();
int get_curr_str();
int get_curr_int();
int get_curr_wis();
int get_curr_dex();
int get_curr_con();
int get_age();
int can_carry_n();
int can_carry_w();
int get_trust();
bool is_immortal();
bool is_hero();
int is_outside();
void wait_state(int npulse);
int mana_cost(int sn);
bool saves_spell (int lvl);
std::string describe_to (Character* looker);
Object * get_eq_char (int iWear);
void affect_modify (Affect * paf, bool fAdd);
bool can_see (Character * victim);
bool can_see_obj (Object * obj);
void unequip_char (Object * obj);
void char_from_room ();
void char_to_room (Room * pRoomIndex);
void send_to_char (const std::string & txt);
void interpret (std::string argument);
bool check_social (const std::string & command, const std::string & argument);
void set_title (const std::string & title);
bool is_switched ();
void advance_level ();
bool mp_commands ();
void gain_exp(int gain);
int hit_gain ();
int mana_gain ();
int move_gain ();
void add_follower (Character * master);
void stop_follower();
void die_follower();
void update_pos ();
void set_fighting (Character * victim);
bool check_blind ();
bool has_key (int key);
void affect_to_char (Affect * paf);
void affect_remove (Affect * paf);
void affect_strip (int sn);
bool has_affect (int sn);
void affect_join (Affect * paf);
bool remove_obj (int iWear, bool fReplace);
void wear_obj (Object * obj, bool fReplace);
void equip_char (Object * obj, int iWear);
void act (const std::string & format, const void *arg1, const void *arg2, int type);
bool can_drop_obj (Object * obj);
Object * get_obj_wear (const std::string & argument);
Object * get_obj_carry (const std::string & argument);
Object * get_obj_here (const std::string & argument);
void fwrite_char (std::ofstream & fp);
void append_file (const char *file, const std::string & str);
Character * get_char_room (const std::string & argument);
Character * get_char_world (const std::string & argument);
Object * get_obj_list (const std::string & argument, std::list<Object *> & list);
Object * get_obj_world (const std::string & argument);
void save_char_obj ();
void fread_char (std::ifstream & fp);
void gain_condition (int iCond, int value);
void stop_fighting (bool fBoth);
int find_door (const std::string & arg);
void get_obj (Object * obj, Object * container);
void extract_char (bool fPull);
void extract_char_old (bool fPull);
void stop_idling ();
void show_list_to_char (std::list<Object *> & list, bool fShort, bool fShowNothing);
void show_char_to_char_0 (Character * victim);
void show_char_to_char_1 (Character * victim);
void show_char_to_char (std::list<Character *> & list);
void move_char (int door);
bool is_gagged(std::string & nm);
};
#endif // CHARACTER_HPP