Crossfire Server, Trunk
|
#include <assert.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "global.h"
#include "sproto.h"
#include "living.h"
Go to the source code of this file.
Macros | |
#define | ADD_EXP(exptotal, exp) do { exptotal += exp; if (exptotal > MAX_EXPERIENCE) exptotal = MAX_EXPERIENCE; } while (0) |
#define | ADD_TOTALEXP(exptotal, exp) do { exptotal += exp; if (exptotal > MAX_TOTAL_EXPERIENCE) exptotal = MAX_TOTAL_EXPERIENCE; } while(0) |
#define | DIFF_MSG(flag, subtype1, subtype2, msg1, msg2) draw_ext_info(NDI_UNIQUE, 0, op, MSG_TYPE_ATTRIBUTE, (flag > 0) ? subtype1 : subtype2, (flag > 0) ? msg1 : msg2); |
#define | FLOAT_CON_BONUS 0 |
#define | FLOAT_DEX_BONUS 1 |
#define | FLOAT_GRACE_BONUS 3 |
#define | FLOAT_SP_BONUS 2 |
#define | INT_CHA_BONUS 4 |
#define | INT_CLERIC_CHANCE 2 |
#define | INT_DAM_BONUS 6 |
#define | INT_DEX_BONUS 5 |
#define | INT_FEAR_BONUS 0 |
#define | INT_LEARN_SPELL 3 |
#define | INT_THAC0_BONUS 7 |
#define | INT_TURN_BONUS 1 |
#define | INT_WEIGHT_LIMIT 8 |
#define | MAX_EXPERIENCE levels[settings.max_level] |
#define | MAX_SAVE_LEVEL 110 |
#define | NUM_FLOAT_BONUSES 4 |
#define | NUM_INT_BONUSES 9 |
Functions | |
static void | add_player_exp (object *op, int64_t exp, const char *skill_name, int flag) |
void | add_statbonus (object *op) |
int | allowed_class (const object *op) |
void | apply_death_exp_penalty (object *op) |
void | calc_perm_exp (object *op) |
int | change_abil (object *op, object *tmp) |
void | change_attr_value (living *stats, int attr, int8_t value) |
void | change_exp (object *op, int64_t exp, const char *skill_name, int flag) |
void | change_luck (object *op, int value) |
int64_t | check_exp_adjust (const object *op, int64_t exp) |
int64_t | check_exp_loss (const object *op, int64_t exp) |
void | check_stat_bounds (living *stats, int8_t min_stat, int8_t max_stat) |
int | did_make_save (const object *op, int level, int bonus) |
static void | dragon_level_gain (object *who) |
void | drain_specific_stat (object *op, int deplete_stats) |
void | drain_stat (object *op) |
int | exp_level (int64_t exp) |
object * | find_applied_skill_by_name (const object *op, const char *name) |
void | fix_object (object *op) |
static void | fix_player (object *op, int *ac, int *wc, const object *grace_obj, const object *mana_obj, const object *wc_obj, int weapon_speed, float added_speed) |
int8_t | get_attr_value (const living *stats, int attr) |
int | get_cha_bonus (int stat) |
int | get_cleric_chance (int stat) |
static float | get_con_bonus (int stat) |
int | get_dam_bonus (int stat) |
int | get_dex_bonus (int stat) |
int | get_fear_bonus (int stat) |
static float | get_grace_bonus (int stat) |
static size_t | get_index (int stat, size_t max_index) |
int | get_learn_spell (int stat) |
static float | get_sp_bonus (int stat) |
float | get_speed_bonus (int stat) |
int | get_thaco_bonus (int stat) |
int | get_turn_bonus (int stat) |
uint32_t | get_weight_limit (int stat) |
object * | give_skill_by_name (object *op, const char *skill_name) |
void | init_stats () |
int64_t | level_exp (int level, double expmul) |
static int | load_table_float (float **bonuses, FILE *fp, char *bonus_name) |
static int | load_table_int (int **bonuses, FILE *fp, char *bonus_name) |
void | player_lvl_adj (object *who, object *op) |
int | remove_depletion (object *op, int level) |
void | remove_statbonus (object *op) |
void | set_attr_value (living *stats, int attr, int8_t value) |
void | set_dragon_name (object *pl, const object *abil, const object *skin) |
void | share_exp (object *op, int64_t exp, const char *skill, int flag) |
static void | subtract_player_exp (object *op, int64_t exp, const char *skill, int flag) |
Variables | |
const char *const | attacks [NROFATTACKS] |
const char *const | drain_msg [NUM_STATS] |
static const char * | float_bonus_names [NUM_FLOAT_BONUSES] |
static float * | float_bonuses [NUM_FLOAT_BONUSES] |
const char *const | gain_msg [NUM_STATS] |
static const char * | int_bonus_names [NUM_INT_BONUSES] |
static int * | int_bonuses [NUM_INT_BONUSES] |
int64_t * | levels |
const char *const | lose_msg [NUM_STATS] |
const char *const | restore_msg [NUM_STATS] |
static const int | savethrow [MAX_SAVE_LEVEL+1] |
const char *const | short_stat_name [NUM_STATS] |
const char *const | statname [NUM_STATS] |
Functions related to attributes, weight, experience, which concern only living things.
Definition in file living.cpp.
#define ADD_EXP | ( | exptotal, | |
exp | |||
) | do { exptotal += exp; if (exptotal > MAX_EXPERIENCE) exptotal = MAX_EXPERIENCE; } while (0) |
Handy little macro that adds exp and keeps it within bounds. Since we are now using 64 bit values, I'm not all concerned about overflow issues with exptotal wrapping. exptotal is typically op->exp, or op->total_exp
Definition at line 41 of file living.cpp.
#define ADD_TOTALEXP | ( | exptotal, | |
exp | |||
) | do { exptotal += exp; if (exptotal > MAX_TOTAL_EXPERIENCE) exptotal = MAX_TOTAL_EXPERIENCE; } while(0) |
Definition at line 42 of file living.cpp.
#define DIFF_MSG | ( | flag, | |
subtype1, | |||
subtype2, | |||
msg1, | |||
msg2 | |||
) | draw_ext_info(NDI_UNIQUE, 0, op, MSG_TYPE_ATTRIBUTE, (flag > 0) ? subtype1 : subtype2, (flag > 0) ? msg1 : msg2); |
Rather than having a whole bunch of if (flag) draw.. else _draw, make this macro to clean those up. Not usuable outside change_abil function since some of the values passed to draw_ext_info are hardcoded.
Definition at line 369 of file living.cpp.
#define FLOAT_CON_BONUS 0 |
This is basically same as above, but for bonuses in which we store the value as a float.
Definition at line 85 of file living.cpp.
#define FLOAT_DEX_BONUS 1 |
Definition at line 86 of file living.cpp.
#define FLOAT_GRACE_BONUS 3 |
Definition at line 88 of file living.cpp.
#define FLOAT_SP_BONUS 2 |
Definition at line 87 of file living.cpp.
#define INT_CHA_BONUS 4 |
Definition at line 62 of file living.cpp.
#define INT_CLERIC_CHANCE 2 |
Definition at line 60 of file living.cpp.
#define INT_DAM_BONUS 6 |
Definition at line 64 of file living.cpp.
#define INT_DEX_BONUS 5 |
Definition at line 63 of file living.cpp.
#define INT_FEAR_BONUS 0 |
The definitions below are indexes into the bonuses[] array. Rather than have a bunch of different variables, it is easier to just have a single array - all access to these is done through the get_cha_...() function in any case - making it an array makes processing simpler.
The INT_ prefix is to note the type of array the bonus goes into (vs FLOAT) - it is unfortunately that it is also the name of one of the stats.
The NUM_BONUSES is how many bonuses they are (size of the array), so is equal to last value +1.
Definition at line 58 of file living.cpp.
#define INT_LEARN_SPELL 3 |
Definition at line 61 of file living.cpp.
#define INT_THAC0_BONUS 7 |
Definition at line 65 of file living.cpp.
#define INT_TURN_BONUS 1 |
Definition at line 59 of file living.cpp.
#define INT_WEIGHT_LIMIT 8 |
Definition at line 66 of file living.cpp.
#define MAX_EXPERIENCE levels[settings.max_level] |
Definition at line 99 of file living.cpp.
#define MAX_SAVE_LEVEL 110 |
Definition at line 103 of file living.cpp.
#define NUM_FLOAT_BONUSES 4 |
Definition at line 89 of file living.cpp.
#define NUM_INT_BONUSES 9 |
Definition at line 67 of file living.cpp.
|
static |
Add experience to a player - exp should only be positive. Updates permanent exp for the skill we are adding to.
op | object we add exp to. |
exp | experience to gain. Can be 0, but not that useful to call in that case... |
skill_name | skill to add exp to. Can be NULL, in which case exp increases the players general total, but not any particular skill. |
flag | what to do if the player doesn't have the skill. Combination of SK_EXP_xxx flags. |
Definition at line 1967 of file living.cpp.
References ADD_EXP, ADD_TOTALEXP, calc_perm_exp(), living::exp, object::expmul, find_applied_skill_by_name(), give_skill_by_name(), object::level, levels, Settings::max_level, give::op, Settings::permanent_exp_ratio, player_lvl_adj(), settings, SK_EXP_ADD_SKILL, SK_EXP_NONE, SKILL, object::stats, and object::total_exp.
Referenced by change_exp().
void add_statbonus | ( | object * | op | ) |
Adds stat-bonuses given by the class which the player has chosen.
op | object which must be a player with contr not NULL. |
Definition at line 868 of file living.cpp.
References give::op.
Referenced by apply_race_and_class(), key_change_class(), and key_roll_stat().
int allowed_class | ( | const object * | op | ) |
Returns true if the given player is a legal class. The function to add and remove class-bonuses to the stats doesn't check if the stat becomes negative, thus this function merely checks that all stats are 1 or more, and returns false otherwise.
op | object to check. |
Definition at line 1657 of file living.cpp.
References give::op.
Referenced by apply_race_and_class(), and key_change_class().
void apply_death_exp_penalty | ( | object * | op | ) |
Applies a death penalty experience, the size of this is defined by the settings death_penalty_percentage and death_penalty_levels, and by the amount of permenent experience, whichever gives the lowest loss.
op | victim of the penalty. Must not be NULL. |
Definition at line 2240 of file living.cpp.
References check_exp_loss(), Settings::death_penalty_level, Settings::death_penalty_ratio, FOR_INV_FINISH, FOR_INV_PREPARE, levels, MAX, MIN, give::op, player_lvl_adj(), settings, SKILL, and Ice::tmp.
Referenced by kill_player_not_permadeath().
void calc_perm_exp | ( | object * | op | ) |
Ensure that the permanent experience requirements in an exp object are met. This really just checks 'op to make sure the perm_exp value is within proper range. Note that the checking of what is passed through has been reduced. Since there is now a proper field for perm_exp, this can now work on a much larger set of objects.
op | object to check. |
Definition at line 1910 of file living.cpp.
References MAX_EXPERIENCE, give::op, Settings::permanent_exp_ratio, and settings.
Referenced by add_player_exp(), and command_addexp().
Permanently alters an object's stats/flags based on another object.
Definition at line 394 of file living.cpp.
References add_string(), AT_CONFUSION, ATNR_PHYSICAL, BOW, change_attr_value(), change_resist_msg, check_stat_bounds(), CLEAR_FLAG, DIFF_MSG, draw_ext_info(), draw_ext_info_format(), fix_object(), FLAG_APPLIED, FLAG_BLIND, FLAG_LIFESAVE, FLAG_MAKE_INVIS, FLAG_REFL_MISSILE, FLAG_REFL_SPELL, FLAG_SEE_IN_DARK, FLAG_STEALTH, FLAG_UNDEAD, FLAG_WIZ, FLAG_XRAYS, free_string(), gain_msg, get_attr_value(), lose_msg, Settings::max_stat, MIN_STAT, MOVE_FLY_HIGH, MOVE_FLY_LOW, MOVE_SWIM, object::move_type, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_ATTACKTYPE_GAIN, MSG_TYPE_ATTRIBUTE_ATTACKTYPE_LOSS, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_END, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_START, MSG_TYPE_ATTRIBUTE_GOOD_EFFECT_END, MSG_TYPE_ATTRIBUTE_GOOD_EFFECT_START, MSG_TYPE_ATTRIBUTE_MOVE, MSG_TYPE_ATTRIBUTE_PROTECTION_GAIN, MSG_TYPE_ATTRIBUTE_PROTECTION_LOSS, MSG_TYPE_ATTRIBUTE_RACE, MSG_TYPE_ATTRIBUTE_STAT_GAIN, MSG_TYPE_ATTRIBUTE_STAT_LOSS, NDI_BLUE, NDI_UNIQUE, NROFATTACKS, NUM_STATS, object_check_move_on(), give::op, PLAYER, POTION, QUERY_FLAG, object::resist, set_attr_value(), SET_FLAG, settings, SKILL, and Ice::tmp.
Referenced by apply_special(), become_follower(), blind_living(), blindness_type_process(), cast_bless(), cast_change_ability(), cast_curse(), cfapi_object_change_abil(), create_aura(), eat_special_food(), potion_type_apply(), remove_force(), swap_random_stats(), and unapply_special().
void change_attr_value | ( | living * | stats, |
int | attr, | ||
int8_t | value | ||
) |
Like set_attr_value(), but instead the value (which can be negative) is added to the specified stat.
stats | item to modify. Must not be NULL. |
attr | attribute to change. |
value | delta (can be positive). |
Definition at line 264 of file living.cpp.
References living::Cha, CHARISMA, living::Con, CONSTITUTION, living::Dex, DEXTERITY, living::Int, INTELLIGENCE, llevError, LOG(), living::Pow, POWER, living::Str, STRENGTH, autojail::value, living::Wis, and WISDOM.
Referenced by add_abilities(), alchemy_failure_effect(), apply_changes_to_player(), change_abil(), drain_specific_stat(), fix_object(), and kill_player_not_permadeath().
void change_exp | ( | object * | op, |
int64_t | exp, | ||
const char * | skill_name, | ||
int | flag | ||
) |
Changes experience to a player/monster. This does bounds checking to make sure we don't overflow the max exp.
The exp passed is typically not modified much by this function - it is assumed the caller has modified the exp as needed. skill_name is the skill that should get the exp added. flag is what to do if player doesn't have the skill. these last two values are only used for players.
op | victim to alter. |
exp | experience to gain (positive) or lose (negative). |
skill_name | skill to change. Can be NULL. |
flag |
|
Definition at line 2175 of file living.cpp.
References add_player_exp(), ADD_TOTALEXP, FABS, FLAG_ALIVE, level_exp(), llevError, LOG(), MAX_EXPERIENCE, give::op, PLAYER, QUERY_FLAG, subtract_player_exp(), and WEAPON.
Referenced by attempt_do_alchemy(), book_type_apply(), cfapi_object_change_exp(), cure_disease(), do_harvest(), do_hidden_move(), do_skill(), examine_autoidentify(), god_examines_priest(), hit_with_drain(), peacemaker_type_process(), scroll_type_apply(), sell_item(), share_exp(), shop_pay_unpaid_callback(), spellbook_type_apply(), and try_leave_cult().
void change_luck | ( | object * | op, |
int | value | ||
) |
Alter the object's luck.
op | object to altar. |
value | delta to apply. 0 indicates timeout (moves luck towards 0), otherwise change the luck of the object via an applied bad_luck object in inventory. |
Definition at line 796 of file living.cpp.
References arch_present_in_ob(), arch_to_object(), FABS, find_archetype(), FLAG_APPLIED, object_insert_in_ob(), give::op, RANDOM, SET_FLAG, Ice::tmp, and autojail::value.
Referenced by fix_luck(), and kill_object().
int64_t check_exp_adjust | ( | const object * | op, |
int64_t | exp | ||
) |
Returns the maximum experience the object can gain or lose.
op | object which will be the victim. |
exp | experience to gain or lose. |
Definition at line 2098 of file living.cpp.
References check_exp_loss(), MAX_EXPERIENCE, MIN, and give::op.
Referenced by command_addexp().
int64_t check_exp_loss | ( | const object * | op, |
int64_t | exp | ||
) |
This function checks to make sure that object 'op' can lose 'exp' experience. It basically makes adjustments based on permanent exp and the like. This function should always be used for losing experience - the 'exp' value passed should be positive - this is the amount that should get subtract from the player.
op | object from which to subtract. |
exp | experience to lose. |
Definition at line 2073 of file living.cpp.
References give::op, PERM_EXP, PERM_EXP_MAX_LOSS_RATIO, Settings::permanent_exp_ratio, and settings.
Referenced by apply_death_exp_penalty(), check_exp_adjust(), kill_object(), and subtract_player_exp().
void check_stat_bounds | ( | living * | stats, |
int8_t | min_stat, | ||
int8_t | max_stat | ||
) |
Ensures that all stats (str/dex/con/wis/cha/int) are within the passed in range of min_stat and max_stat. Often, the caller will pass in MIN_STAT and MAX_STAT, but in case of force objects or temporary calculations, we want things outside the range (force objects may have negative stats, but we don't want them too negative)
stats | attributes to check. |
min_stat | lowest the stat can be |
max_stat | highest the stat can be |
Definition at line 354 of file living.cpp.
References get_attr_value(), NUM_STATS, and set_attr_value().
Referenced by change_abil(), do_symptoms(), fix_object(), fix_player(), and kill_player_not_permadeath().
int did_make_save | ( | const object * | op, |
int | level, | ||
int | bonus | ||
) |
This function takes an object (monster/player, op), and determines if it makes a basic save throw by looking at the save_throw table.
op | potential victim. |
level | the effective level to make the save at |
bonus | any plus/bonus (typically based on resistance to particular attacktype). |
Definition at line 2289 of file living.cpp.
References MAX_SAVE_LEVEL, give::op, PREFER_HIGH, random_roll(), and savethrow.
Referenced by flee_player(), hit_player(), hit_with_one_attacktype(), mood_change(), and polymorph_living().
|
static |
This function is called when a dragon-player gains an overall level. Here, the dragon might gain new abilities or change the ability-focus.
who | dragon's object. |
Definition at line 1724 of file living.cpp.
References atnr_is_dragon_enabled(), change_resist_msg, dragon_ability_gain(), draw_ext_info_format(), living::exp, FORCE, object::last_eat, object::level, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_RACE, NDI_BLUE, NDI_UNIQUE, object_find_by_type_and_arch_name(), object::resist, set_dragon_name(), object::stats, and autojail::who.
Referenced by player_lvl_adj().
void drain_specific_stat | ( | object * | op, |
int | deplete_stats | ||
) |
Drain a specified stat from op.
op | victim to drain. |
deplete_stats | statistic to drain. |
Definition at line 728 of file living.cpp.
References ARCH_DEPLETION, arch_present_in_ob(), arch_to_object(), change_attr_value(), drain_msg, draw_ext_info(), find_archetype(), fix_object(), FLAG_APPLIED, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_STAT_LOSS, NDI_UNIQUE, object_insert_in_ob(), give::op, SET_FLAG, and Ice::tmp.
Referenced by cfapi_object_drain(), drain_stat(), and write_scroll().
void drain_stat | ( | object * | op | ) |
Drains a random stat from op. Stat draining by Vick 930307 (Feeling evil, I made it work as well now. -Frank 8)
op | object to drain. |
Definition at line 716 of file living.cpp.
References drain_specific_stat(), NUM_STATS, give::op, and RANDOM.
Referenced by hit_with_one_attacktype(), and potion_type_apply().
int exp_level | ( | int64_t | exp | ) |
Returns the level for a given exp.
exp | experince points to look up in the level table |
Definition at line 1893 of file living.cpp.
References level, levels, Settings::max_level, and settings.
Referenced by show_skills().
Find a skill by name using the last_skill_ob list. Assume last_skill_ob was correctly updated before.
This is defined here rather than server/skill_util.c because things defined in libserver.a are not available when libcommon.a is linked.
Definition at line 1928 of file living.cpp.
References FLAG_REMOVED, llevDebug, llevError, LOG(), MAX_SKILLS, give::name, give::op, and QUERY_FLAG.
Referenced by add_player_exp(), caster_level(), and kill_object().
void fix_object | ( | object * | op | ) |
Updates all abilities given by applied objects in the inventory of the given object.
This functions starts from base values (archetype or player object) and then adjusts them according to what the player/monster has equipped.
Note that a player always has stats reset to their initial value.
July 95 - inserted stuff to handle new skills/exp system - b.t. spell system split, grace points now added to system –peterm
November 2006: max armor speed is always taken into account, no exception.
op | object to reset. |
Definition at line 1132 of file living.cpp.
References curse_on_apply::ac, add_refcount(), AMULET, ARCH_DEPLETION, ARMOUR, ARMOUR_SPEED, AT_PHYSICAL, ATNR_PHYSICAL, BOOTS, BOW, BRACERS, change_attr_value(), check_stat_bounds(), CLEAR_FLAG, CLOAK, CLOSE_CON, CONTAINER, DISEASE, fix_player(), FLAG_APPLIED, FLAG_BLIND, FLAG_CONFUSED, FLAG_LIFESAVE, FLAG_MAKE_INVIS, FLAG_MONSTER, FLAG_PROBE, FLAG_READY_WEAPON, FLAG_REFL_MISSILE, FLAG_REFL_SPELL, FLAG_SEE_IN_DARK, FLAG_STEALTH, FLAG_UNDEAD, FLAG_USE_ARMOUR, FLAG_WIZ, FLAG_XRAYS, FOR_INV_FINISH, FOR_INV_PREPARE, FORCE, free_string(), get_attr_value(), GIRDLE, GLOVES, HELMET, if(), make_face_from_files::int, IS_COMBAT_SKILL, IS_GRACE_SKILL, IS_MANA_SKILL, object::level, llevDebug, llevInfo, LOG(), MAX, say::max, Settings::max_level, Settings::max_stat, MIN_ACTIVE_SPEED, MOVE_FLY_HIGH, MOVE_FLY_LOW, MOVE_WALK, NROFATTACKS, NUM_BODY_LOCATIONS, NUM_STATS, object_update_speed(), give::op, PLAYER, POTION, POTION_RESIST_EFFECT, QUERY_FLAG, range_bow, range_misc, range_skill, RING, ROD, set_attr_value(), SET_FLAG, settings, SHIELD, SK_PRAYING, SKILL, SKILL_TOOL, Settings::spell_encumbrance, SYMPTOM, Ice::tmp, TRUE, autojail::value, WAND, WEAPON, and WEAPON_SPEED.
Referenced by animate_weapon(), apply_race_and_class(), apply_special(), blind_living(), blindness_type_process(), cast_curse(), cfapi_object_fix(), cfapi_object_set_property(), change_abil(), check_login(), command_abil(), command_brace(), command_drop(), command_dropall(), command_fix_me(), command_possess(), command_search_items(), command_take(), converter_type_apply(), create_aura(), do_light(), do_skill(), do_symptoms(), do_turn(), dragon_eat_flesh(), drain_specific_stat(), drop_object(), eat_special_food(), examine_monster(), fire_bow(), fix_weight(), hit_with_one_attacktype(), improve_armour(), improve_weapon_stat(), key_change_class(), kill_player_not_permadeath(), monster_check_apply_all(), monsterFight(), object_decrease_nrof(), object_insert_in_ob(), object_remove(), pay_for_amount(), pay_for_item(), pick_up_object(), player_changer_type_process(), player_lvl_adj(), poison_living(), poisoning_type_process(), potion_type_apply(), put_object_in_sack(), remove_depletion(), remove_force(), remove_symptoms(), roll_stats(), save_life(), slow_living_by(), START_TEST(), stop_jump(), swap_random_stats(), swap_stat(), and unapply_special().
|
static |
Complement to fix_object() for player. Figure out the players sp/mana/hp totals. Also do encumberance and various speeds.
op | object being fixed, must not be NULL. |
ac | current ac, may be adjusted. |
wc | current wc, may be adjusted. |
grace_obj | praying skill, can be NULL. |
mana_obj | spell-casting skill, can be NULL. |
wc_obj | applied combat skill, can be NULL. |
weapon_speed | current weapon's speed. |
added_speed | speed bonus from items. |
Definition at line 897 of file living.cpp.
References curse_on_apply::ac, BASE_WEAPON_SPEED, check_stat_bounds(), esrv_update_spells(), FREE_PLAYER_LOAD_PERCENT, get_con_bonus(), get_dam_bonus(), get_dex_bonus(), get_grace_bonus(), get_sp_bonus(), get_speed_bonus(), get_thaco_bonus(), get_weight_limit(), if(), make_face_from_files::int, object::level, MAX_PLAYER_SPEED, Settings::max_stat, MIN_PLAYER_SPEED, MIN_STAT, object_get_value(), give::op, PLAYER, Settings::search_items, and settings.
Referenced by fix_object().
int8_t get_attr_value | ( | const living * | stats, |
int | attr | ||
) |
Gets the value of a stat.
stats | item from which to get stat. |
attr | attribute to get. |
Definition at line 313 of file living.cpp.
References living::Cha, CHARISMA, living::Con, CONSTITUTION, living::Dex, DEXTERITY, living::Int, INTELLIGENCE, living::Pow, POWER, living::Str, STRENGTH, living::Wis, and WISDOM.
Referenced by add_abilities(), apply_changes_to_player(), apply_race_and_class(), calc_item_power(), cast_change_ability(), change_abil(), check_race_and_class(), check_stat_bounds(), create_player_cmd(), describe_item(), do_symptoms(), eat_special_food(), fix_object(), is_magical(), kill_player_not_permadeath(), monster_get_weapon_quality(), perceive_self(), remove_depletion(), ring_desc(), set_ring_bonus(), swap_random_stats(), and swap_stat().
int get_cha_bonus | ( | int | stat | ) |
Definition at line 2357 of file living.cpp.
References get_index(), int_bonuses, INT_CHA_BONUS, Settings::max_stat, and settings.
int get_cleric_chance | ( | int | stat | ) |
Definition at line 2377 of file living.cpp.
References get_index(), int_bonuses, INT_CLERIC_CHANCE, Settings::max_stat, and settings.
Referenced by cast_spell().
|
static |
Definition at line 2397 of file living.cpp.
References float_bonuses, FLOAT_CON_BONUS, get_index(), Settings::max_stat, and settings.
Referenced by fix_player().
int get_dam_bonus | ( | int | stat | ) |
Definition at line 2385 of file living.cpp.
References get_index(), int_bonuses, INT_DAM_BONUS, Settings::max_stat, and settings.
Referenced by do_throw(), fire_bow(), and fix_player().
int get_dex_bonus | ( | int | stat | ) |
Definition at line 2361 of file living.cpp.
References get_index(), int_bonuses, INT_DEX_BONUS, Settings::max_stat, and settings.
Referenced by do_throw(), fire_bow(), and fix_player().
int get_fear_bonus | ( | int | stat | ) |
Definition at line 2393 of file living.cpp.
References get_index(), int_bonuses, INT_FEAR_BONUS, Settings::max_stat, and settings.
Referenced by cast_cone().
|
static |
Definition at line 2405 of file living.cpp.
References float_bonuses, FLOAT_GRACE_BONUS, get_index(), Settings::max_stat, and settings.
Referenced by fix_player().
|
static |
Limits a stat value to [0..max_index
].
stat | index of the stat to get. |
max_index | the maximum index (inclusive). |
Definition at line 2417 of file living.cpp.
References npc_dialog::index, and MIN.
Referenced by get_cha_bonus(), get_cleric_chance(), get_con_bonus(), get_dam_bonus(), get_dex_bonus(), get_fear_bonus(), get_grace_bonus(), get_learn_spell(), get_sp_bonus(), get_speed_bonus(), get_thaco_bonus(), get_turn_bonus(), and get_weight_limit().
int get_learn_spell | ( | int | stat | ) |
Definition at line 2373 of file living.cpp.
References get_index(), int_bonuses, INT_LEARN_SPELL, Settings::max_stat, and settings.
Referenced by learn_skill(), and spellbook_type_apply().
|
static |
Definition at line 2401 of file living.cpp.
References float_bonuses, FLOAT_SP_BONUS, get_index(), Settings::max_stat, and settings.
Referenced by fix_player().
float get_speed_bonus | ( | int | stat | ) |
Definition at line 2389 of file living.cpp.
References float_bonuses, FLOAT_DEX_BONUS, get_index(), Settings::max_stat, and settings.
Referenced by do_throw(), and fix_player().
int get_thaco_bonus | ( | int | stat | ) |
Definition at line 2365 of file living.cpp.
References get_index(), int_bonuses, INT_THAC0_BONUS, Settings::max_stat, and settings.
Referenced by do_throw(), fire_bow(), and fix_player().
int get_turn_bonus | ( | int | stat | ) |
Definition at line 2381 of file living.cpp.
References get_index(), int_bonuses, INT_TURN_BONUS, Settings::max_stat, and settings.
Referenced by cast_cone(), and hit_with_one_attacktype().
uint32_t get_weight_limit | ( | int | stat | ) |
Definition at line 2369 of file living.cpp.
References get_index(), int_bonuses, INT_WEIGHT_LIMIT, Settings::max_stat, and settings.
Referenced by converter_type_apply(), do_harvest(), do_throw(), esrv_update_stats(), fix_player(), monster_check_pickup(), object_can_pick(), and pick_up_object().
Given the skill name skill_name, we find the skill archetype/object, set appropriate values, and insert it into the object (op) that is passed.
We return the skill - this makes it easier for calling functions that want to do something with it immediately.
op | object to which to give the skill. Must not be NULL. |
skill_name | skill to give. Must not be NULL. |
Definition at line 1784 of file living.cpp.
References arch_to_object(), CLEAR_FLAG, living::exp, FLAG_CAN_USE_SKILL, get_archetype_by_skill_name(), object::level, link_player_skills(), llevError, LOG(), object_insert_in_ob(), give::op, SKILL, and object::stats.
Referenced by add_player_exp(), adjust_skill_tool(), become_follower(), cfapi_object_give_skill(), do_skill(), food_type_apply(), and learn_skill().
void init_stats | ( | ) |
This loads statistic bonus/penalties from the stat_bonus file. Any error is fatal, as system needs working bonuses.
Definition at line 2591 of file living.cpp.
References buf, Settings::confdir, report::error(), float_bonus_names, float_bonuses, int_bonus_names, int_bonuses, llevError, load_table_float(), load_table_int(), LOG(), MAX_BUF, Settings::max_stat, MIN_STAT, NUM_FLOAT_BONUSES, NUM_INT_BONUSES, and settings.
Referenced by cctk_init_std_archetypes(), and init_library().
int64_t level_exp | ( | int | level, |
double | expmul | ||
) |
Returns how much experience is needed for a player to become the given level. level should really never exceed max_level
level | level player wants to reach |
expmul | penality/bonus for experience. |
Definition at line 1881 of file living.cpp.
References level, levels, Settings::max_level, and settings.
Referenced by calculate_difficulty(), change_exp(), command_statistics(), place_monsters(), player_lvl_adj(), and show_skills().
|
static |
This loads up a stat table from the file - basically, it keeps processing until it gets the closing brace.
bonuses | an array will be allocated and the bonus put into this allocated array. |
fp | File to load the data from. |
bonus_name | Used purely for error messages to make it easier to identify where in the file an error is. |
Definition at line 2521 of file living.cpp.
References buf, llevError, LOG(), MAX_BUF, Settings::max_stat, and settings.
Referenced by init_stats().
|
static |
This loads up a stat table from the file - basically, it keeps processing until it gets the closing brace.
bonuses | an array will be allocated and the bonus put into this allocated array. |
fp | File to load the data from. |
bonus_name | Used purely for error messages to make it easier to identify where in the file an error is. |
Definition at line 2445 of file living.cpp.
References buf, llevError, LOG(), MAX_BUF, Settings::max_stat, and settings.
Referenced by init_stats().
For the new exp system. we are concerned with whether the player gets more hp, sp and new levels. Note this this function should only be called for players. Monsters don't really gain levels
Will tell the player about changed levels. A single call will handle mutiple level changes to one object from one effect. The only difference between this and the recursive version is this cannot handle a level that both increases and decreases simultaneously.
who | player, must not be NULL. |
op | what we are checking to gain the level (eg, skill), can be NULL. |
Definition at line 1826 of file living.cpp.
References buf, die_roll(), dragon_level_gain(), draw_ext_info(), fix_object(), is_dragon_pl(), level_exp(), MAX_BUF, Settings::max_level, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_LEVEL_GAIN, MSG_TYPE_ATTRIBUTE_LEVEL_LOSS, NDI_RED, NDI_UNIQUE, give::op, PLAYER, PREFER_HIGH, settings, and autojail::who.
Referenced by add_player_exp(), apply_death_exp_penalty(), command_addexp(), and subtract_player_exp().
int remove_depletion | ( | object * | op, |
int | level | ||
) |
Remove depletion from op, if present, and warn player of such restorations.
op | who to remove depletion from. |
level | maximum depletion level to remove, if -1 no maximum. |
Definition at line 755 of file living.cpp.
References ARCH_DEPLETION, arch_present_in_ob(), disinfect::count, draw_ext_info(), find_archetype(), fix_object(), get_attr_value(), MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_END, NDI_UNIQUE, NUM_STATS, object_free_drop_inventory(), object_remove(), give::op, restore_msg, and object::stats.
Referenced by cfapi_object_remove_depletion(), god_intervention(), and potion_type_apply().
void remove_statbonus | ( | object * | op | ) |
Subtracts stat-bonuses given by the class which the player has chosen.
op | object which must be a player with contr not NULL. |
Definition at line 845 of file living.cpp.
References give::op.
Referenced by key_change_class().
void set_attr_value | ( | living * | stats, |
int | attr, | ||
int8_t | value | ||
) |
Sets Str/Dex/con/Wis/Cha/Int/Pow in stats to value, depending on what attr is (STR to POW).
stats | item to modify. Must not be NULL. |
attr | attribute to change. |
value | new value. |
Definition at line 218 of file living.cpp.
References living::Cha, CHARISMA, living::Con, CONSTITUTION, living::Dex, DEXTERITY, living::Int, INTELLIGENCE, living::Pow, POWER, living::Str, STRENGTH, autojail::value, living::Wis, and WISDOM.
Referenced by apply_changes_to_player(), apply_race_and_class(), cast_change_ability(), change_abil(), check_race_and_class(), check_stat_bounds(), create_player_cmd(), do_symptoms(), eat_special_food(), fix_object(), set_ring_bonus(), swap_random_stats(), and swap_stat().
Set the new dragon name after gaining levels or changing ability focus (later this can be extended to eventually change the player's face and animation)
Note that the title is written to 'own_title' in the player struct. This should be changed to 'ext_title' as soon as clients support this! Please, anyone, write support for 'ext_title'.
pl | player's object to change. |
abil | dragon's innate abilities. |
skin | dragon's skin. |
Definition at line 1684 of file living.cpp.
References atnr_is_dragon_enabled(), attacks, living::exp, make_face_from_files::int, NROFATTACKS, altar_valkyrie::pl, player_set_dragon_title(), object::resist, and object::stats.
Referenced by check_login(), and dragon_level_gain().
void share_exp | ( | object * | op, |
int64_t | exp, | ||
const char * | skill, | ||
int | flag | ||
) |
Gives experience to a player/monster, sharing it with party if applicable. This does bounds checking to make sure we don't overflow the max exp.
The exp passed is typically not modified much by this function - it is assumed the caller has modified the exp as needed.
This is merely a wrapper for change_exp().
op | victim to alter. |
exp | experience to gain (positive) or lose (negative). |
skill | skill to change. Can be NULL. |
flag |
|
Definition at line 2319 of file living.cpp.
References change_exp(), disinfect::count, first_player, on_same_map(), give::op, altar_valkyrie::pl, PLAYER, and SK_EXP_TOTAL.
Referenced by kill_object(), and mood_change().
|
static |
Subtracts experience from player.
Eg, if we figure the player is losing 10% of his total exp, what happens is he loses 10% from all his skills. Note that if permanent exp is used, player may not in fact lose as much as listed. Eg, if player has gotten reduced to the point where everything is at the minimum perm exp, he would lose nothing.
op | victim we want to substract from |
exp | value to substract. Should be positive. |
skill | skill to substract exp from. Can be NULL. |
flag | if SK_SUBTRACT_SKILL_EXP and skill is set, only subtract from the matching skill. Otherwise, this subtracts a portion from all skills the player has. |
Definition at line 2127 of file living.cpp.
References check_exp_loss(), FOR_INV_FINISH, FOR_INV_PREPARE, give::op, player_lvl_adj(), SK_SUBTRACT_SKILL_EXP, SKILL, and Ice::tmp.
Referenced by change_exp().
const char* const attacks[NROFATTACKS] |
Attack type names.
Definition at line 129 of file living.cpp.
Referenced by CREScriptEngine::CREScriptEngine(), describe_attacktype(), did_make_save_item(), and set_dragon_name().
const char* const drain_msg[NUM_STATS] |
Message when a player is drained of a stat.
Definition at line 139 of file living.cpp.
Referenced by drain_specific_stat(), and kill_player_not_permadeath().
|
static |
Definition at line 91 of file living.cpp.
Referenced by init_stats().
|
static |
Definition at line 90 of file living.cpp.
Referenced by get_con_bonus(), get_grace_bonus(), get_sp_bonus(), get_speed_bonus(), and init_stats().
const char* const gain_msg[NUM_STATS] |
Message when a player increases permanently a stat.
Definition at line 161 of file living.cpp.
Referenced by change_abil().
|
static |
Following array corresponds to the defines above, but are the text names as found in the file. In this way, processing of file is simpler.
Definition at line 75 of file living.cpp.
Referenced by init_stats().
|
static |
Definition at line 69 of file living.cpp.
Referenced by get_cha_bonus(), get_cleric_chance(), get_dam_bonus(), get_dex_bonus(), get_fear_bonus(), get_learn_spell(), get_thaco_bonus(), get_turn_bonus(), get_weight_limit(), and init_stats().
int64_t* levels |
Number of levels for which we have experience.
Definition at line 26 of file exp.cpp.
Referenced by add_player_exp(), apply_death_exp_penalty(), CREExperienceWindow::CREExperienceWindow(), dump_experience(), exp_level(), free_experience(), init_experience(), level_exp(), perceive_self(), send_exp_table(), and spellsTable().
const char* const lose_msg[NUM_STATS] |
Message when a player decreases permanently a stat.
Definition at line 172 of file living.cpp.
Referenced by change_abil(), and kill_player_not_permadeath().
const char* const restore_msg[NUM_STATS] |
Message when a player has a stat restored.
Definition at line 150 of file living.cpp.
Referenced by remove_depletion().
|
static |
Probability to avoid something.
This no longer needs to be changed anytime the number of levels is increased - rather, did_make_save() will do the right thing and always use range within this table. for safety, savethrow should not be accessed directly anymore, and instead did_make_save() should be used instead.
Definition at line 113 of file living.cpp.
Referenced by did_make_save().
const char* const short_stat_name[NUM_STATS] |
Short name of stats.
Definition at line 194 of file living.cpp.
Referenced by create_player_cmd(), describe_item(), key_roll_stat(), ring_desc(), send_new_char_info(), and swap_stat().
const char* const statname[NUM_STATS] |
Name of stats.
Definition at line 183 of file living.cpp.
Referenced by improve_weapon_stat(), and perceive_self().