/***************************************************************************
* 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. *
* *
* Ack 2.2 improvements copyright (C) 1994 by Stephen Dooley *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* _/ _/_/_/ _/ _/ _/ ACK! MUD is modified *
* _/_/ _/ _/ _/ _/ Merc2.0/2.1/2.2 code *
* _/ _/ _/ _/_/ _/ (c)Stephen Zepp 1998 *
* _/_/_/_/ _/ _/ _/ Version #: 4.3 *
* _/ _/ _/_/_/ _/ _/ _/ *
* *
* *
* 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. *
***************************************************************************/
/***************************************************************************
* _/_/_/_/ _/ _/ _/_/_/_/ _/_/_/_/ AckFUSS is modified ACK!MUD 4.3.1 *
* _/ _/ _/ _/ _/ copyright Matt Goff (Kline) 2008 *
* _/_/ _/ _/ _/_/_/_/ _/_/_/_/ *
* _/ _/ _/ _/ _/ Support for this code is provided *
* _/ _/_/_/_/ _/_/_/_/ _/_/_/_/ at www.ackmud.net -- check it out!*
***************************************************************************/
#include <bitset>
#define DEC_ACK_H
#ifndef DEC_CONFIG_H
#include "h/config.h"
#endif
#ifndef DEC_GLOBALS_H
#include "globals.h"
#endif
#ifdef IMC
#ifndef DEC_IMC_H
#include "h/imc.h"
#endif
#endif
#ifndef DEC_LISTS_H
#include "lists.h"
#endif
#ifndef DEC_MQUEST_H
#include "h/mquest.h"
#endif
#ifndef DEC_STRFUNS_H
#include "h/strfuns.h"
#endif
#ifndef DEC_TYPEDEFS_H
#include "h/typedefs.h"
#endif
#ifndef DEC_UTILS_H
#include "h/utils.h"
#endif
struct DeleteObject
{
template <typename T>
void operator() (const T* ptr) const { delete ptr; };
};
class generic_list
{
public:
generic_list();
~generic_list();
void *data;
};
class board_data
{
public:
board_data();
~board_data();
int vnum;
MESSAGE_DATA *first_message;
MESSAGE_DATA *last_message;
int min_read_lev;
int min_write_lev;
int expiry_time;
int clan;
};
class disabled_data
{
public:
disabled_data();
~disabled_data();
struct cmd_type const *command;
char *disabled_by;
short level;
};
class message_data
{
public:
message_data();
~message_data();
bool is_free;
MESSAGE_DATA *next;
MESSAGE_DATA *prev; /* Only used in save_board */
BOARD_DATA *board;
time_t datetime;
char *author;
char *title;
char *message;
};
/*
* color look-up table structure thingy.
*/
struct color_type
{
char *name; /* eg, gossip, say, look */
int index; /* unique index */
};
struct ansi_type
{
char *name;
char *value; /* escape sequence, or whatever */
int index;
char letter;
int stlen;
};
#define color_NORMAL "\033[0m"
struct dl_list
{
bool is_free;
DL_LIST *next;
DL_LIST *prev;
void *this_one;
};
/*
* Site ban structure.
*/
class ban_data
{
public:
ban_data();
~ban_data();
char *name;
char *banned_by;
bool newbie;
};
class brand_data
{
public:
brand_data();
~brand_data();
char *branded;
char *branded_by;
char *dt_stamp;
char *message;
char *priority;
};
class buf_data_struct
{
public:
buf_data_struct();
~buf_data_struct();
bool is_free;
BUF_DATA_STRUCT *next;
BUF_DATA_STRUCT *prev;
CHAR_DATA *ch;
char **dest;
char *buf;
RET_FUN *returnfunc;
MESSAGE_DATA *returnparm;
int old_char_pos;
};
struct time_info_data
{
int hour;
int day;
int month;
int year;
int moon;
};
struct weather_data
{
int mmhg;
int change;
int sky;
int sunlight;
int moon_phase;
int moon_loc;
bool phase_changed;
};
struct member_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
CHAR_DATA *this_member;
MEMBER_DATA *next;
MEMBER_DATA *prev;
};
class mark_data
{
public:
mark_data();
~mark_data();
int room_vnum;
char *message;
char *author;
short duration;
short type; /* VAMP, WOLF */
};
struct council_data
{
char *council_name;
MEMBER_DATA *first_member;
MEMBER_DATA *last_member;
bool quorum;
short council_time;
};
/*
* Descriptor (channel) structure.
*/
class descriptor_data
{
public:
descriptor_data();
~descriptor_data();
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
DESCRIPTOR_DATA *next;
DESCRIPTOR_DATA *prev;
DESCRIPTOR_DATA *snoop_by;
CHAR_DATA *character;
CHAR_DATA *original;
char *host;
short descriptor;
short connected;
bool fcommand;
char inbuf[4 * MAX_INPUT_LENGTH];
char incomm[MAX_INPUT_LENGTH];
char inlast[MAX_INPUT_LENGTH];
short repeat;
char *showstr_head;
char *showstr_point;
char *outbuf;
int outsize;
int outtop;
unsigned int remote_port; /* 'Pair Port' ? -S- */
int check; /* For new players */
int flags;
int childpid; /* Child process id */
time_t timeout;
};
#define DESC_FLAG_PASSTHROUGH 1 /* Used when data is being passed to */
/*
* Another prog.
*/
struct family_name_type
{
char *name;
short clan_enemy;
};
struct politics_data_type
{
short diplomacy[MAX_CLAN][MAX_CLAN];
bool daily_negotiate_table[MAX_CLAN][MAX_CLAN];
long int treasury[MAX_CLAN];
bool end_current_state[MAX_CLAN][MAX_CLAN];
};
struct stance_app_type
{
char *name;
short ac_mod;
short dr_mod;
short hr_mod;
float speed_mod;
};
/*
* Attribute bonus structures.
*/
struct str_app_type
{
short tohit;
short todam;
short carry;
short wield;
};
struct int_app_type
{
short learn;
short spell_mod;
short mana_regen;
};
struct wis_app_type
{
short practice;
short spell_save;
};
struct dex_app_type
{
short defensive;
};
struct con_app_type
{
short hitp;
short shock;
};
/*
* Shop types.
*/
class shop_data
{
public:
shop_data();
~shop_data();
short buy_type[MAX_TRADE]; /* Item types shop will buy */
short close_hour; /* First closing hour */
int keeper; /* Vnum of shop keeper mob */
short open_hour; /* First opening hour */
short profit_buy; /* Cost multiplier for buying */
short profit_sell; /* Cost multiplier for selling */
};
/*
* Per-class stuff.
*/
struct class_type
{
char who_name[4]; /* Three-letter name for 'who' */
char *class_name; /* Full name */
short attr_prime; /* Prime attribute */
char *attr; /* Prime */
int guild; /* Vnum of guild room */
short skill_adept; /* Maximum skill level */
short thac0_00; /* Thac0 for level 0 */
short thac0_32; /* Thac0 for level 32 */
short hp_min; /* Min hp gained on leveling */
short hp_max; /* Max hp gained on leveling */
bool fMana; /* Class gains mana on level */
char *skill1; /* Auto-learnt skill if any */
};
struct race_type
{
char race_name[4]; /* Three letter name for race */
char *race_title; /* Full race name */
short recall; /* Race's recall location */
int race_room; /* vnum of race-only room */
short race_str; /* max_str to use for race */
short race_int;
short race_wis;
short race_dex;
short race_con;
int race_flags; /* flags for the various racial stuff */
bool wear_locs[MAX_WEAR]; /* on/off for each wear loc */
int classes; /* Number of classes for race */
short limit[MAX_CLASS]; /* Max for each class */
char *comment; /* comments shown for new players */
char *skill1;
int strong_realms;
int weak_realms;
int resist_realms;
int suscept_realms;
bool player_allowed;
bool has_money;
};
struct clan_type
{
char *clan_name; /* The name of the Clan */
char *clan_abbr; /* Abbrev. name - FIVE CHARS */
short donat_room; /* clan donation */
short clan_room; /* Clan-only room */
char *leader; /* Clan leader */
char *enemies; /* Enemies (if any) */
int eq[MAX_CLAN_EQ]; /* vnums of objects to load */
};
/*
* Data structure for notes.
*/
class note_data
{
public:
note_data();
~note_data();
char *date;
time_t date_stamp;
char *sender;
char *subject;
char *text;
char *to_list;
};
/*
* An affect.
*/
class affect_data
{
public:
affect_data();
~affect_data();
int bitvector;
CHAR_DATA *caster;
short duration;
bool is_free;
int level;
short location;
short modifier;
AFFECT_DATA *next;
AFFECT_DATA *prev;
short type;
};
class room_affect_data
{
public:
room_affect_data();
~room_affect_data();
bool is_free;
ROOM_AFFECT_DATA *next;
ROOM_AFFECT_DATA *prev;
short duration;
short level;
int type;
int bitvector;
int applies_spell; /* what spell is cast on a ch by the room..a sn */
short modifier;
short location;
CHAR_DATA *caster;
};
/*
* A kill structure (indexed by level).
*/
struct kill_data
{
short number;
short killed;
};
class magic_shield
{
public:
magic_shield();
~magic_shield();
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
MAGIC_SHIELD *next;
MAGIC_SHIELD *prev;
short type; /* what kind is it? Electric, Fire, etc... */
bool harmful; /* does the shield damage the attacker? */
short attack_dam; /* then hurt the attacker ;) */
short percent; /* percent of damage it absorbs per attack */
short hits; /* Shield hitpoints */
int sn;
char *absorb_message_room;
char *absorb_message_victim;
char *absorb_message_self;
char *name;
char *wearoff_room;
char *wearoff_self;
};
/*
* Prototype for a mob.
* This is the in-memory version of #MOBILES.
*/
class mob_index_data
{
public:
mob_index_data();
~mob_index_data();
std::bitset<MAX_BITSET> act;
short ac_mod;
int affected_by;
short alignment;
AREA_DATA *area;
int cast;
short clan;
int def;
char *description;
short dr_mod;
short hr_mod;
int hunt_flags;
bool is_free;
short killed;
short learned[MAX_SKILL];
short level;
char *long_descr;
MOB_INDEX_DATA *next;
char *player_name;
short position;
SHOP_DATA *pShop;
short p_class;
short race;
int race_mods;
int resist;
short sex;
char *short_descr;
int skills;
SPEC_FUN *spec_fun;
float speed[MAX_SPEED];
int strong_magic;
int suscept;
char *target;
int vnum;
int weak_magic;
};
/*
* One character (PC or NPC).
*/
class char_data
{
public:
char_data();
~char_data();
std::bitset<MAX_BITSET> act;
int act_build; /* for setting what ya editing */
short ac_mod; /* ac modifier */
int adept_level;
int affected_by;
short alignment;
short armor;
int balance; /* Amount of gold (if any) in bank */
MONEY_TYPE *bank_money;
int build_vnum; /* the current vnum for w-y-e */
short carry_number;
float carry_weight;
int cast;
short clan; /* need to convert from pcdata to this */
BRAND_DATA *current_brand;
short damroll;
int def;
std::bitset<MAX_BITSET> deaf;
short death_cnt;
DESCRIPTOR_DATA *desc;
char *description;
short dr_mod; /* damroll modifier */
int exp;
short extract_timer; /* same as object timer, only use for charmies */
CHAR_DATA *fighting;
AFFECT_DATA *first_affect;
OBJ_DATA *first_carry;
AFFECT_DATA *first_saved_aff;
MAGIC_SHIELD *first_shield;
int gold;
int hit;
short hitroll;
short hr_mod; /* hitroll modifier */
CHAR_DATA *hunting; /* For hunting PC's/mobs */
int hunt_flags; /* Action flags */
CHAR_DATA *hunt_for; /* Employer (crs, mercs) */
ROOM_INDEX_DATA *hunt_home; /* Return to after hunting */
OBJ_DATA *hunt_obj; /* Looking for objects */
short incog; /* Same as above except for incognito --Flar */
short invis; /* For wizinvis imms - lvl invis to */
int intell_exp;
ROOM_INDEX_DATA *in_room;
bool is_free;
bool is_quitting;
AFFECT_DATA *last_affect;
OBJ_DATA *last_carry;
time_t last_note;
AFFECT_DATA *last_saved_aff;
MAGIC_SHIELD *last_shield;
CHAR_DATA *leader;
short level; /* For m/c this = max of levels */
short login_sex;
time_t logon;
char *long_descr;
char *long_descr_orig;
int lvl[MAX_CLASS]; /* Holds details for m/c levels */
int lvl2[MAX_CLASS]; /* for remort (if any) */
int mana;
CHAR_DATA *master;
int max_hit;
int max_mana;
int max_move;
MONEY_TYPE *money;
int move;
char *name;
CHAR_DATA *next_in_room;
bool npc; /* For NPC's, no more flag */
NPC_DATA *npcdata;
short num_followers;
CHAR_DATA *old_body; /* = descriptor->original */
char *old_prompt; /* used to hold prompt when writing */
PC_DATA *pcdata;
int played;
NOTE_DATA *pnote;
int poly_level;
short position;
short practice;
CHAR_DATA *prev_in_room;
char *prompt;
short p_class;
short race;
int race_mods;
CHAR_DATA *reply;
CHAR_DATA *rider;
CHAR_DATA *riding;
time_t save_time;
short saving_throw;
char *searching; /* For PC's that quit */
int sentence; /* For new legal system */
short sex;
OBJ_DATA *sitting; /* What they're resting or sleeping on */
float speed[MAX_SPEED];
int stance;
short stance_ac_mod;
short stance_dr_mod;
short stance_hr_mod;
short stun_timer;
bool switched; /* = not isnull(descriptor->original) */
char *target; /* last ch to attack */
short timer;
short trust;
bool using_named_door;
short wait;
ROOM_INDEX_DATA *was_in_room;
short wimpy;
bool wizbit;
};
/*
* Data which only NPC's have.
*/
class npc_data
{
public:
npc_data();
~npc_data();
NPC_GROUP_DATA *ngroup;
MOB_INDEX_DATA *pIndexData;
RESET_DATA *reset;
int resist;
char *short_descr;
int skills;
SPEC_FUN *spec_fun;
int strong_magic;
int suscept;
int weak_magic;
};
/*
* Data which only PC's have.
*/
class pc_data
{
public:
pc_data();
~pc_data();
char *alias[MAX_ALIASES];
char *alias_name[MAX_ALIASES];
char *assist_msg;
char *bamfin;
char *bamfout;
short condition[MAX_COND];
int color[MAX_COLOR];
char dimcol;
char *email_address;
short failures; /* Failed logins */
char *header; /* filename for helpedit */
char hicol;
char *host; /* Used to tell PC last login site */
int hp_from_gain; /* same for hitpoints */
char *ignore_list[MAX_IGNORES]; /* Ignore this person */
#ifdef IMC
IMC_CHARDATA *imcchardata;
#endif
bool is_free;
char *lastlogin;
short learned[MAX_SKILL];
char *load_msg;
int mana_from_gain; /* saves non-item oriented mana total */
short max_con;
short max_dex;
short max_int;
short max_str;
short max_wis;
char *message; /* helpedit file contents */
short mod_con;
short mod_dex;
short mod_int;
short mod_str;
short mod_wis;
std::bitset<MAX_BITSET> monitor; /* Imm channel monitoring */
int move_from_gain;
short movement; /* Quick movement */
PC_DATA *next;
short order[MAX_CLASS]; /* Class Order */
short pagelen;
char *pedit_state;
char *pedit_string[MAX_PEDIT];
short perm_con;
short perm_dex;
short perm_int;
short perm_str;
short perm_wis;
PC_DATA *prev;
char *pwd;
QUEST_INFO *quest_info;
short quest_points;
int recall_vnum;
RECORD_DATA *records; /* kill/damage/etc records */
char *room_enter;
char *room_exit;
short ruler_rank;
SUPER_DATA *super; /* struct for supers: vamp, wolves, hunters */
short term_columns;
short term_rows;
char *title;
bool valid_email;
char *who_name; /* To show on who name */
};
struct liq_type
{
char *liq_name;
char *liq_color;
short liq_affect[3];
};
/*
* Extra description data for a room or object.
*/
class extra_descr_data
{
public:
extra_descr_data();
~extra_descr_data();
char *description; /* What to see */
char *keyword; /* Keyword in look/examine */
bool is_free;
EXTRA_DESCR_DATA *next;
EXTRA_DESCR_DATA *prev;
};
struct trigger_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
TRIGGER_DATA *next;
TRIGGER_DATA *prev;
char *message; /* properly formatted act format string to use in a TO_ROOM */
int trigger; /* command used on object */
int event; /* trigger function index to be called */
int data; /* data used in the event call..vnum, spell index, etc. */
int register_data; /* for storing generic info */
int on_value; /* for conditional triggers..happens when register is higher than
* on_value */
int at_vnum; /* for at another room triggers. event will happen there */
bool force_message; /* Always does an act message, in addition to trigger */
char *spell_name;
};
class obj_index_data
{
public:
obj_index_data();
~obj_index_data();
AREA_DATA *area;
short durability;
std::bitset<MAX_BITSET> extra_flags;
AFFECT_DATA *first_apply;
EXTRA_DESCR_DATA *first_exdesc;
TRIGGER_DATA *first_trigger;
bool is_free;
int item_apply;
int item_type;
AFFECT_DATA *last_apply;
EXTRA_DESCR_DATA *last_exdesc;
TRIGGER_DATA *last_trigger;
short level;
char *long_descr;
short max_durability;
char *name;
OBJ_INDEX_DATA *next;
OBJ_FUN *obj_fun;
char *owner;
char *short_descr;
float speed;
int value[MAX_OBJ_VALUE];
int vnum;
std::bitset<MAX_BITSET> wear_flags;
short weight;
};
/*
* One object.
*/
class obj_data
{
public:
obj_data();
~obj_data();
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
OBJ_DATA *next_in_carry_list; /* carry list is the list on a char, or in a container */
OBJ_DATA *prev_in_carry_list;
OBJ_DATA *first_in_carry_list;
OBJ_DATA *last_in_carry_list;
OBJ_DATA *next_in_room;
OBJ_DATA *prev_in_room;
OBJ_DATA *first_in_room;
OBJ_DATA *last_in_room;
OBJ_DATA *first_content;
OBJ_DATA *last_content;
OBJ_DATA *next_content;
OBJ_DATA *prev_content;
OBJ_DATA *in_obj;
OBJ_FUN *obj_fun;
CHAR_DATA *carried_by;
EXTRA_DESCR_DATA *first_exdesc;
EXTRA_DESCR_DATA *last_exdesc;
AFFECT_DATA *first_apply;
AFFECT_DATA *last_apply;
OBJ_INDEX_DATA *pIndexData;
ROOM_INDEX_DATA *in_room;
char *owner;
char *name;
char *short_descr;
char *long_descr;
int item_type;
std::bitset<MAX_BITSET> extra_flags;
std::bitset<MAX_BITSET> wear_flags;
int item_apply;
int wear_loc;
short weight;
int cost;
short level;
short timer;
int value[MAX_OBJ_VALUE];
short durability;
short max_durability;
MONEY_TYPE *money;
float speed;
RESET_DATA *reset;
};
/*
* Exit data.
*/
class exit_data
{
public:
exit_data();
~exit_data();
char *description;
std::bitset<MAX_BITSET> exit_info;
bool is_free;
short key;
char *keyword;
EXIT_DATA *next;
ROOM_INDEX_DATA *to_room;
int vnum;
};
/*
* Reset commands:
* '*': comment
* 'M': read a mobile
* 'O': read an object
* 'P': put object in object
* 'G': give object to mobile
* 'E': equip object to mobile
* 'D': set state of door
* 'R': randomize room exits
* 'S': stop (end of list)
*/
/*
* Area-reset definition.
*/
class reset_data
{
public:
reset_data();
~reset_data();
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
RESET_DATA *next;
RESET_DATA *prev;
char command;
short arg1;
short arg2;
short arg3;
char *notes;
short count;
};
/*
* Area definition.
*/
/*
* Npc Interaction stuff Zen
*/
struct queued_interact_list
{
bool is_free;
QUEUED_INTERACT_LIST *next;
QUEUED_INTERACT_LIST *prev;
CHAR_DATA *mob;
};
struct influence_list
{
bool is_free;
INFLUENCE_LIST *next;
INFLUENCE_LIST *prev;
INFLUENCE_DATA *this_one;
};
struct control_list
{
bool is_free;
CONTROL_LIST *next;
CONTROL_LIST *prev;
CONTROL_DATA *this_one;
};
struct ruler_list
{
bool is_free;
RULER_LIST *next;
RULER_LIST *prev;
RULER_DATA *this_one;
};
struct control_data
{
bool is_free;
char *keyword;
AREA_DATA *area;
RULER_DATA *ruler; /* what entity controls the area */
INFLUENCE_LIST *first_influence; /* what current influences are for the area */
INFLUENCE_LIST *last_influence;
INTERACT_DATA *first_interact; /* tells the mobs what to do */
INTERACT_DATA *last_interact;
};
struct influence_data
{
bool is_free;
RULER_DATA *actor;
int influence;
};
struct interact_data
{
bool is_free;
INTERACT_DATA *next;
INTERACT_DATA *prev;
int type;
int min_value;
int max_value;
int action;
char *say;
CHAR_DATA *target;
};
#define RULER_NONE BIT_0
#define RULER_SOLO BIT_1
#define RULER_GROUP BIT_2
#define RULER_MALE BIT_3
#define RULER_FEMALE BIT_4
#define RULER_NEUTRAL BIT_5
struct ruler_data
{
bool is_free;
RULER_DATA *next;
RULER_DATA *prev;
char *name;
short ruler_rank;
char *affiliation_name;
short affiliation_index;
char *keywords;
short flags;
CONTROL_LIST *first_control;
CONTROL_LIST *last_control;
};
class area_data
{
public:
area_data();
~area_data();
short age;
short area_num;
char *can_read;
char *can_write;
CONTROL_DATA *control;
char *filename;
std::bitset<MAX_BITSET> flags;
BUILD_DATA_LIST *first_area_mobile;
BUILD_DATA_LIST *first_area_object;
BUILD_DATA_LIST *first_area_room;
BUILD_DATA_LIST *first_area_shop;
RESET_DATA *first_reset;
int gold;
char *keyword;
BUILD_DATA_LIST *last_area_mobile;
BUILD_DATA_LIST *last_area_object;
BUILD_DATA_LIST *last_area_room;
BUILD_DATA_LIST *last_area_shop;
RESET_DATA *last_reset;
char *level_label;
short max_level;
int max_vnum;
bool modified;
short min_level;
int min_vnum;
char *name;
char *owner;
std::list<CHAR_DATA *> player_list;
char *reset_msg;
short reset_rate;
};
/*
* Room type.
*/
class room_index_data
{
public:
room_index_data();
~room_index_data();
int affected_by;
AREA_DATA *area;
char *description;
EXIT_DATA *exit[MAX_DIR];
OBJ_DATA *first_content;
EXTRA_DESCR_DATA *first_exdesc;
CHAR_DATA *first_person;
ROOM_AFFECT_DATA *first_room_affect;
BUILD_DATA_LIST *first_room_reset;
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
OBJ_DATA *last_content;
EXTRA_DESCR_DATA *last_exdesc;
CHAR_DATA *last_person;
ROOM_AFFECT_DATA *last_room_affect;
BUILD_DATA_LIST *last_room_reset;
short light;
std::list<MARK_DATA *> mark_list;
char *name;
ROOM_INDEX_DATA *next;
std::bitset<MAX_BITSET> room_flags;
short sector_type;
MONEY_TYPE *treasure;
int vnum;
};
/* Big MAG mod */
/* Area building stuff */
class build_data_list /* Used for storing area file data. */
{
public:
build_data_list();
~build_data_list();
bool is_free;
BUILD_DATA_LIST *next;
BUILD_DATA_LIST *prev;
void *data;
};
struct lookup_type
{
char *text;
unsigned long int value;
int cost; /* if == NO_USE, only creators can set. */
};
class npc_group_data
{
public:
npc_group_data();
~npc_group_data();
char *enemies;
DL_LIST *first_follower;
bool is_free;
char *last_fighting;
DL_LIST *last_follower;
CHAR_DATA *leader;
char *needs;
NPC_GROUP_DATA *next;
NPC_GROUP_DATA *prev;
ROOM_INDEX_DATA *seek_room;
short state;
char *wants;
};
/*
* Skills include spells as a particular case.
*/
struct skill_type
{
short flag1; /* mort or remort? */
short flag2; /* normal and/or vamp? */
char *name; /* Name of skill */
short skill_level[MAX_CLASS]; /* Level needed by class */
SPELL_FUN *spell_fun; /* Spell pointer (for spells) */
short target; /* Legal targets */
short minimum_position; /* Position for caster / user */
short *pgsn; /* Pointer to associated gsn */
short slot; /* Slot for #OBJECT loading */
short min_mana; /* Minimum mana used */
short beats; /* Waiting time after use */
char *noun_damage; /* Damage message */
char *msg_off; /* Wear off message */
char *room_off; /* Wear off msg TO_ROOM */
};
/*
* Structure for a command in the command lookup table.
*/
struct cmd_type
{
char *const name;
DO_FUN *do_fun;
short position;
short level;
short log;
short type; /*added by Aeria for do_commands */
short show; /*added by Aeria for do_commands */
bool ghost_cmd;
};
/*
* Structure for a social in the socials table.
*/
struct social_type
{
char *name;
char *char_no_arg;
char *others_no_arg;
char *char_found;
char *others_found;
char *vict_found;
char *char_auto;
char *others_auto;
};
/* Kline */
struct chanhistory
{
time_t time[30][MAX_HISTORY];
char message[30][MAX_HISTORY][MAX_STRING_LENGTH]; /* 30 channels, each with MAX_HISTORY, length of MSL */
char aname[30][MAX_HISTORY][128]; /* To track area, for yell */
int cbit[30][MAX_HISTORY]; /* To track which clan, family, tribe, or race */
};
class record_data
{
public:
record_data();
~record_data();
int crusade;
int mdam_amt;
short mdam_gsn;
int pdam_amt;
short pdam_gsn;
int pd;
int pk;
int md;
int mk;
int mquest_c;
int mquest_f;
int qp;
int qp_tot;
};
class super_data
{
public:
super_data();
~super_data();
short bloodline;
int energy; /* rage, blood, or focus */
int energy_max;
short exp;
short generation;
int level;
int skills_learned; /* total # skills known */
int skills_max; /* total # skills may learn; based on gen, etc */
int pracs;
};
struct sysdata_type
{
short build_obj_ac;
short build_obj_dr;
short build_obj_hp;
short build_obj_hr;
short build_obj_mp;
short build_obj_mv;
short build_obj_svs;
short damcap;
float expmult;
short killperlev;
float mob_ac;
float mob_dr;
float mob_hp;
float mob_hr;
float mob_mp;
float mob_mv;
float mob_svs;
char *playtesters;
short pulse;
bool shownumbers;
bool w_lock;
};
class fight_data
{
public:
fight_data();
~fight_data();
bool is_free;
FIGHT_DATA *next;
FIGHT_DATA *prev;
CHAR_DATA *ch;
};
class quest_info
{
public:
quest_info();
~quest_info();
short amount[QUEST_MAX_DATA];
bool is_questing;
bool quest_complete;
bool quest_hint[QUEST_MAX_DATA];
int quest_item_vnum[QUEST_MAX_DATA];
int quest_mob_vnum[QUEST_MAX_DATA];
int quest_reward[QUEST_MAX_REWARD];
short quest_type;
short time_left;
short wait_time;
};
struct h_queue
{
struct h_queue *next;
ROOM_INDEX_DATA *room;
short dir;
};
struct clutch_type
{
int command_number;
bool destroy; /* Destory object once clutched? */
CLUTCH_FUN *func_name; /* The name of the function.... */
};
struct eq_type
{
char *const name;
float ac;
float dr;
float hp;
float hr;
float mp;
float mv;
float svs;
};
/*
* Our function prototypes.
* One big lump ... this is every function in Merc.
*/
#define CD CHAR_DATA
#define MID MOB_INDEX_DATA
#define OD OBJ_DATA
#define OID OBJ_INDEX_DATA
#define RID ROOM_INDEX_DATA
#define SF SPEC_FUN
#define OBF OBJ_FUN
/* interp.c */
void interpret args( ( CHAR_DATA * ch, char *argument ) );
bool IS_SWITCHED args( ( CHAR_DATA * ch ) );
bool check_social args( ( CHAR_DATA * ch, char *command, char *argument ) );
bool check_disabled args( ( const struct cmd_type *command ) );
void comlog args( ( CHAR_DATA * ch, bool cleanup, int cmd, char *args ) );
/* macros.c */
short get_remort_level args( ( CHAR_DATA * ch ) );
short get_psuedo_level args( ( CHAR_DATA * ch ) );
bool ok_to_use args( ( CHAR_DATA * ch, int value ) );
bool check_level_use args( ( CHAR_DATA * ch, int level ) );
int exp_to_level args( ( CHAR_DATA * ch, int p_class, int index ) );
int exp_for_mobile args( ( int level, CHAR_DATA * mob ) );
int exp_mob_base args( ( int level ) );
int skill_table_lookup args( ( CHAR_DATA * ch, int sn, int return_type ) );
bool is_remort args( ( CHAR_DATA * ch ) );
bool is_adept args( ( CHAR_DATA * ch ) );
int exp_to_level_vamp args( ( int level ) );
int exp_to_level_adept args( ( CHAR_DATA * ch ) );
void reset_gain_stats args( ( CHAR_DATA * ch ) );
int exp_to_level_wolf args( ( int level ) );
int get_item_value args( ( OBJ_DATA * obj ) );
/*-------*\
) quest.c (
\*-------*/
void quest_inform args( ( void ) );
void quest_complete args( ( CHAR_DATA * ch ) );
void quest_cancel args( ( void ) );
void generate_auto_quest args( ( void ) );
void crusade_reward args( ( CHAR_DATA *ch ) );
/*------*\
) save.c (
\*------*/
void save_char_obj args( ( CHAR_DATA * ch ) );
bool load_char_obj args( ( DESCRIPTOR_DATA * d, char *name, bool system_call ) );
void save_corpses args( ( void ) );
void fread_corpse args( ( FILE * fp ) );
void save_marks args( ( void ) );
void save_bans args( ( void ) );
char *initial args( ( const char *str ) );
/*---------*\
) special.c (
\*---------*/
SF *spec_lookup args( ( const char *name ) );
char *rev_spec_lookup args( ( SPEC_FUN *func ) );
void print_spec_lookup args( ( char *buf ) );
/* social-edit.c */
void load_social_table args( ( void ) );
/*---------*\
) obj_fun.c (
\*---------*/
OBF *obj_fun_lookup args( ( const char *name ) );
char *rev_obj_fun_lookup args( ( OBJ_FUN *func ) );
void print_obj_fun_lookup args( ( char *buf ) );
/*---------*\
) trigger.c (
\*---------*/
void trigger_handler args( ( CHAR_DATA * ch, OBJ_DATA * obj, int trigger ) );
/*--------*\
) update.c# (
\*--------*/
void advance_level args( ( CHAR_DATA * ch, int p_class, bool show, bool remort ) );
void gain_exp args( ( CHAR_DATA * ch, int gain ) );
void gain_bloodlust args( ( CHAR_DATA * ch, int value ) );
void gain_condition args( ( CHAR_DATA * ch, int iCond, int value ) );
void update_handler args( ( void ) );
bool check_rewield args( ( CHAR_DATA * ch ) );
bool check_re_equip args( ( CHAR_DATA * ch ) );
void auction_update args( ( void ) );
void check_vamp args( ( CHAR_DATA * ch ) );
int move_gain args( ( CHAR_DATA * ch ) );
/* write.c */
void write_start args( ( char **dest, RET_FUN *retfunc, void *retparm, CHAR_DATA * ch ) );
void write_interpret args( ( CHAR_DATA * ch, char *argument ) );
/* hunt.c */
void hunt_victim args( ( CHAR_DATA * ch ) );
void unhunt args( ( CHAR_DATA * ch ) );
int make_hunt args( ( CHAR_DATA * ch, CHAR_DATA * victim ) );
void hunt_obj args( ( CHAR_DATA * ch ) );
bool make_move args( ( CHAR_DATA * ch, int vnum ) );
char *find_path args( ( int, int, CHAR_DATA *, int, int, int ) );
bool mob_hunt args( ( CHAR_DATA * mob ) );
void char_hunt args( ( CHAR_DATA * ch ) );
bool set_hunt args( ( CHAR_DATA * ch, CHAR_DATA * fch, CHAR_DATA * vch, OBJ_DATA * vobj, int set_flags, int rem_flags ) );
void end_hunt args( ( CHAR_DATA * ch ) );
short h_find_dir args(( ROOM_INDEX_DATA * room, ROOM_INDEX_DATA * target, int h_flags ));
void hunt_move args(( CHAR_DATA * mob, short dir ));
void h_clear args(( void ));
/*
* update.c
*/
void init_alarm_handler args( ( void ) );
void alarm_update args( ( void ) );
/*
* Rulers
*
*/
void save_rulers args( ( void ) );
void load_rulers args( ( void ) );
const char *get_ruler_title args( ( int ruler_rank, int sex ) );
/*
* sysdat.c
*/
void load_sysdata args( ( void ) );
void save_sysdata args( ( void ) );
#undef CD
#undef MID
#undef OD
#undef OID
#undef RID
#undef SF
#undef OBF