/***************************************************************************
* 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++
*/
#include "os.hpp"
#include "config.hpp"
#include "utils.hpp"
#include "io.hpp"
#include "pcdata.hpp"
PCData::PCData() :
perm_str(13), perm_int(13), perm_wis(13), perm_dex(13), perm_con(13),
mod_str(0), mod_int(0), mod_wis(0), mod_dex(0), mod_con(0), pagelen(20) {
memset(condition, 0, sizeof condition);
memset(learned, 0, sizeof learned);
}
void PCData::set_prime(sh_int prime)
{
switch (prime) {
case APPLY_STR:
perm_str = 16;
break;
case APPLY_INT:
perm_int = 16;
break;
case APPLY_WIS:
perm_wis = 16;
break;
case APPLY_DEX:
perm_dex = 16;
break;
case APPLY_CON:
perm_con = 16;
break;
}
}
std::string PCData::trainable_list(void)
{
std::string str;
if (perm_str < 18)
str.append(" str");
if (perm_int < 18)
str.append(" int");
if (perm_wis < 18)
str.append(" wis");
if (perm_dex < 18)
str.append(" dex");
if (perm_con < 18)
str.append(" con");
return str;
}
void PCData::set_perm(std::string attr, int value)
{
if (!str_cmp (attr, "str")) {
perm_str = value;
} else if (!str_cmp (attr, "int")) {
perm_int = value;
} else if (!str_cmp (attr, "wis")) {
perm_wis = value;
} else if (!str_cmp (attr, "dex")) {
perm_dex = value;
} else if (!str_cmp (attr, "con")) {
perm_con = value;
} else {
bug_printf("Invalid argument to PCData::set_perm: %s", attr.c_str());
}
return;
}
sh_int PCData::get_perm(std::string attr)
{
if (!str_cmp (attr, "str")) {
return perm_str;
} else if (!str_cmp (attr, "int")) {
return perm_int;
} else if (!str_cmp (attr, "wis")) {
return perm_wis;
} else if (!str_cmp (attr, "dex")) {
return perm_dex;
} else if (!str_cmp (attr, "con")) {
return perm_con;
} else {
bug_printf("Invalid argument to PCData::get_perm: %s", attr.c_str());
return 0;
}
}
void PCData::set_mod(std::string attr, int value)
{
if (!str_cmp (attr, "str")) {
mod_str = value;
} else if (!str_cmp (attr, "int")) {
mod_int = value;
} else if (!str_cmp (attr, "wis")) {
mod_wis = value;
} else if (!str_cmp (attr, "dex")) {
mod_dex = value;
} else if (!str_cmp (attr, "con")) {
mod_con = value;
} else {
bug_printf("Invalid argument to PCData::set_mod: %s", attr.c_str());
}
return;
}
sh_int PCData::get_mod(std::string attr)
{
if (!str_cmp (attr, "str")) {
return mod_str;
} else if (!str_cmp (attr, "int")) {
return mod_int;
} else if (!str_cmp (attr, "wis")) {
return mod_wis;
} else if (!str_cmp (attr, "dex")) {
return mod_dex;
} else if (!str_cmp (attr, "con")) {
return mod_con;
} else {
bug_printf("Invalid argument to PCData::get_mod: %s", attr.c_str());
return 0;
}
}
sh_int PCData::get_curr(std::string attr)
{
if (!str_cmp (attr, "str")) {
return perm_str + mod_str;
} else if (!str_cmp (attr, "int")) {
return perm_int + mod_int;
} else if (!str_cmp (attr, "wis")) {
return perm_wis + mod_wis;
} else if (!str_cmp (attr, "dex")) {
return perm_dex + mod_dex;
} else if (!str_cmp (attr, "con")) {
return perm_con + mod_con;
} else {
bug_printf("Invalid argument to PCData::get_perm: %s", attr.c_str());
return 0;
}
}