![]() |
Crossfire Server, Trunk
1.75.0
|
#include "global.h"
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "sproto.h"
Go to the source code of this file.
Macros | |
#define | EOL_SIZE (sizeof("\n")-1) |
Functions | |
int | adjust_dir (int dir, int destination_dir) |
Adjusts a given direction by +/-1 towards a destination direction. More... | |
void | decay_objects (mapstruct *m) |
Decay and destroy persihable items in a map. More... | |
StringBuffer * | describe_attacktype (const char *attack, int value, StringBuffer *buf) |
Describe the specified attack type. More... | |
StringBuffer * | describe_spellpath_attenuation (const char *attenuation, int value, StringBuffer *buf) |
Describe the specified path attenuation. More... | |
int | die_roll (int num, int size, const object *op, int goodbad) |
Roll a number of dice (2d3, 4d6). More... | |
void | fatal (enum fatal_error err) |
fatal() is meant to be called whenever a fatal signal is intercepted. More... | |
void | free_charlinks (linked_char *lc) |
Frees a link structure and its next items. More... | |
int | get_random_dir (void) |
Returns a random direction (1..8). More... | |
int | get_randomized_dir (int dir) |
Returns a random direction (1..8) similar to a given direction. More... | |
int | ihypot (int a, int b) |
Rough estimate of hypot(a, b). More... | |
int | isqrt (int n) |
Compute the square root. More... | |
void | make_list_like (char *input) |
Taking a string as an argument, mutate it into a string that looks like a list. More... | |
materialtype_t * | name_to_material (const char *name) |
Convert materialname to materialtype_t. More... | |
int | random_roll (int min, int max, const object *op, int goodbad) |
Roll a random number between min and max. More... | |
int64_t | random_roll64 (int64_t min, int64_t max, const object *op, int goodbad) |
This is a 64 bit version of random_roll() above. More... | |
void | replace (const char *src, const char *key, const char *replacement, char *result, size_t resultsize) |
Replace in string src all occurrences of key by replacement. More... | |
void | replace_unprintable_chars (char *buf) |
Replaces any unprintable character in the given buffer with a space. More... | |
int | rndm (int min, int max) |
Returns a number between min and max. More... | |
void | set_materialname (object *op) |
Set the material name and type for an item, if not set. More... | |
size_t | split_string (char *str, char *array[], size_t array_size, char sep) |
Splits a string delimited by passed in sep value into characters into an array of strings. More... | |
void | strip_endline (char *buf) |
Removes endline from buffer (modified in place). More... | |
void | transmute_materialname (object *op, const object *change) |
When doing transmutation of objects, we have to recheck the resistances, as some that did not apply previously, may apply now. More... | |
General convenience functions for crossfire.
The random functions here take luck into account when rolling random dice or numbers. This function has less of an impact the larger the difference becomes in the random numbers. IE, the effect is lessened on a 1-1000 roll, vs a 1-6 roll. This can be used by crafty programmers, to specifically disable luck in certain rolls, simply by making the numbers larger (ie, 1d1000 > 500 vs 1d6 > 3)
Definition in file utils.cpp.
int adjust_dir | ( | int | dir, |
int | destination_dir | ||
) |
Adjusts a given direction by +/-1 towards a destination direction.
dir | the direction to adjust |
destination_dir | the destination direction to adjust towards |
Definition at line 426 of file utils.cpp.
References absdir(), destination_dir, and rndm().
Referenced by move_ball_spell(), and move_missile().
void decay_objects | ( | mapstruct * | m | ) |
Decay and destroy persihable items in a map.
Definition at line 175 of file utils.cpp.
References CLOAK, FLAG_IS_FLOOR, FLAG_OBJ_ORIGINAL, FLAG_OVERLAY_FLOOR, FLAG_UNIQUE, FLAG_UNPAID, FOOD, FOR_MAP_FINISH, FOR_MAP_PREPARE, GIRDLE, GLOVES, IS_ARMOR, IS_LIVE, IS_SHIELD, IS_WEAPON, m, M_ADAMANT, M_BONE, M_CLOTH, M_GLASS, M_ICE, M_IRON, M_LEATHER, M_LIQUID, M_ORGANIC, M_PAPER, M_SOFT_METAL, M_STONE, M_WOOD, MAP_HEIGHT, MAP_WIDTH, object_free_drop_inventory(), object_remove(), QUERY_FLAG, and rndm().
Referenced by ready_map_name().
StringBuffer* describe_attacktype | ( | const char * | attack, |
int | value, | ||
StringBuffer * | buf | ||
) |
Describe the specified attack type.
attack | string describing the attack ("Clawing", and such). |
value | attack type to describe. |
buf | where to describe, can be NULL. |
Definition at line 538 of file utils.cpp.
References attacks, buf, NROFATTACKS, stringbuffer_append_printf(), stringbuffer_append_string(), and stringbuffer_new().
Referenced by describe_item(), and describe_monster().
StringBuffer* describe_spellpath_attenuation | ( | const char * | attenuation, |
int | value, | ||
StringBuffer * | buf | ||
) |
Describe the specified path attenuation.
attenuation | string describing if "Attenued", "Denied", "Repelled", may be NULL. |
value | path value to describe. |
buf | where to describe, can be NULL. |
Definition at line 507 of file utils.cpp.
References buf, NRSPELLPATHS, spellpathnames, stringbuffer_append_printf(), stringbuffer_append_string(), and stringbuffer_new().
Referenced by describe_god(), describe_item(), describe_monster(), ring_desc(), and stringbuffer_append_spelldesc().
int die_roll | ( | int | num, |
int | size, | ||
const object * | op, | ||
int | goodbad | ||
) |
Roll a number of dice (2d3, 4d6).
Uses op to determine luck, If goodbad is non-zero, luck increases the roll, if zero, it decreases. Generally, op should be the player/caster/hitter requesting the roll, not the recipient (ie, the poor slob getting hit). The args are num D size (ie 4d6) [garbled 20010916]
Definition at line 122 of file utils.cpp.
References llevError, LOG(), living::luck, MAX, MIN, PLAYER, RANDOM, object::stats, and object::type.
Referenced by attempt_hide(), attempt_pick_lock(), attempt_steal(), fire_swarm(), identify_object_with_skill(), pets_summon_object(), pick_arrow_target(), player_lvl_adj(), scroll_type_apply(), and spellbook_type_apply().
void fatal | ( | enum fatal_error | err | ) |
fatal() is meant to be called whenever a fatal signal is intercepted.
It will call the emergency_save and the clean_tmp_files functions.
Definition at line 590 of file utils.cpp.
References clean_tmp_files(), emergency_save(), Settings::fatal_hook, logfile, and settings.
Referenced by account_alloc(), add_to_tar(), allocate_map(), assets_pack(), bufferreader_create(), bufferreader_init_for_length(), build_stringlist(), check_generators(), do_each_skill(), do_module(), ensure_available_characters(), expand_objects(), get_archetype_struct(), get_client_spell_state(), get_empty_artifact(), get_empty_artifactlist(), get_empty_book(), get_empty_booklist(), get_empty_formula(), get_empty_mat(), get_empty_treasure(), get_linked_map(), get_new_quest_state(), get_objectlink(), get_objectlinkpt(), get_or_create_quest(), get_or_create_state(), get_player(), get_player_archetype(), get_region_struct(), i18n_init(), init_dynamic(), init_experience(), init_formulae(), init_library(), init_listening_socket(), init_recipelist(), init_regions(), init_server(), knowledge_get_or_create(), knowledge_give(), PngLoader::load(), MessageLoader::load(), TreasureLoader::loadTreasure(), minheap_init(), monster_compute_path(), new_connection(), new_shared_string(), object_new(), parse_dialog_information(), parse_shop_string(), player_get_delayed_buffer(), quest_create_condition(), quest_create_step(), re_init(), set_player_socket(), shop_inventory_type_apply(), SockList_Ensure(), stringbuffer_ensure(), and stringbuffer_new().
void free_charlinks | ( | linked_char * | lc | ) |
Frees a link structure and its next items.
lc | item to free. Pointer is free()d too, so becomes invalid. |
Definition at line 616 of file utils.cpp.
References free_charlinks(), and linked_char::next.
Referenced by free_charlinks(), and send_account_players().
int get_random_dir | ( | void | ) |
Returns a random direction (1..8).
Definition at line 400 of file utils.cpp.
References rndm().
Referenced by move_firewall(), move_player_mover(), move_swarm_spell(), and pets_move().
int get_randomized_dir | ( | int | dir | ) |
Returns a random direction (1..8) similar to a given direction.
dir | the exact direction |
Definition at line 412 of file utils.cpp.
References absdir(), and RANDOM.
Referenced by face_player(), monster_cast_spell(), monster_move(), monster_use_bow(), monster_use_range(), monster_use_scroll(), monster_use_skill(), and move_player().
int ihypot | ( | int | a, |
int | b | ||
) |
Rough estimate of hypot(a, b).
Based on stack overflow: https://stackoverflow.com/questions/3506404/fast-hypotenuse-algorithm-for-embedded-processor
Definition at line 570 of file utils.cpp.
References a().
Referenced by expand_lighted_sight(), get_rangevector(), map_light_on(), and play_sound_map().
int isqrt | ( | int | n | ) |
Compute the square root.
This is now a wrapper around sqrt().
Definition at line 562 of file utils.cpp.
Referenced by fix_flesh_item(), get_rangevector_from_mapcoord(), pick_lock(), spell_failure(), and value_limit().
void make_list_like | ( | char * | input | ) |
Taking a string as an argument, mutate it into a string that looks like a list.
A 'list' for the purposes here is a string of items, separated by commas, except for the last entry, which has an 'and' before it, and a full stop (period) after it.
This function will also strip all trailing non alphanumeric characters.
It does not insert an oxford comma.
input | string to transform. Will be overwritten. Must be long enough to contain the modified string. |
Definition at line 368 of file utils.cpp.
References MAX_BUF.
Referenced by can_pay(), and shop_describe().
materialtype_t* name_to_material | ( | const char * | name | ) |
Convert materialname to materialtype_t.
name | material name to get. |
Definition at line 248 of file utils.cpp.
References materials, and name.
Referenced by animate_weapon(), object_get_materialtype(), and transmute_materialname().
int random_roll | ( | int | min, |
int | max, | ||
const object * | op, | ||
int | goodbad | ||
) |
Roll a random number between min and max.
Uses op to determine luck, and if goodbad is non-zero, luck increases the roll, if zero, it decreases.
Generally, op should be the player/caster/hitter requesting the roll, not the recipient (ie, the poor slob getting hit). [garbled 20010916]
Definition at line 42 of file utils.cpp.
References llevError, LOG(), living::luck, MAX, MIN, PLAYER, RANDOM, object::stats, and object::type.
Referenced by alchemy_failure_effect(), apply_check_personalized_blessings(), attack_ob_simple(), attempt_do_alchemy(), attempt_steal(), become_follower(), cast_detection(), cast_heal(), cast_smite_spell(), cast_spell(), charge_mana_effect(), cure_disease(), deathstrike_living(), did_make_save(), do_harvest(), do_hidden_move(), do_symptoms(), flee_player(), gate_type_process(), god_examines_priest(), god_intervention(), hit_with_drain(), hit_with_one_attacktype(), infect_object(), kill_player_not_permadeath(), learn_skill(), mood_change(), pets_summon_object(), potion_type_apply(), pray_at_altar(), push_ob(), recharge(), roll_ob(), scroll_failure(), singing(), slow_living(), spellbook_type_apply(), trap_disarm(), trap_see(), try_leave_cult(), use_oratory(), and write_scroll().
int64_t random_roll64 | ( | int64_t | min, |
int64_t | max, | ||
const object * | op, | ||
int | goodbad | ||
) |
This is a 64 bit version of random_roll() above.
This is needed for exp loss calculations for players changing religions.
Definition at line 77 of file utils.cpp.
References FMT64, llevError, LOG(), living::luck, MAX, MIN, PLAYER, RANDOM, object::stats, and object::type.
Referenced by try_leave_cult().
void replace | ( | const char * | src, |
const char * | key, | ||
const char * | replacement, | ||
char * | result, | ||
size_t | resultsize | ||
) |
Replace in string src all occurrences of key by replacement.
The resulting string is put into result; at most resultsize characters (including the terminating null character) will be written to result.
Definition at line 327 of file utils.cpp.
References strlcpy().
Referenced by compilePython(), enter_fixed_template_map(), and enter_random_template_map().
void replace_unprintable_chars | ( | char * | buf | ) |
Replaces any unprintable character in the given buffer with a space.
buf | the buffer to modify |
Definition at line 447 of file utils.cpp.
References buf.
Referenced by party_form(), party_set_password(), and player_set_own_title().
int rndm | ( | int | min, |
int | max | ||
) |
Returns a number between min and max.
It is suggested one use these functions rather than RANDOM()%, as it would appear that a number of off-by-one-errors exist due to improper use of %. This should also prevent SIGFPE.
Definition at line 162 of file utils.cpp.
References RANDOM.
Referenced by adjust_dir(), adjust_product(), alchemy_failure_effect(), alchemy_object(), apply_changes_to_player(), attack_message(), attack_ob_simple(), cancellation(), cast_change_ability(), cast_spell(), cast_wonder(), cauldron_sound(), check_spell_knockback(), choose_cult_monster(), command_cointoss(), common_process_projectile(), common_trap_type_process(), compute_price_variation_with_bargaining(), counterspell(), decay_objects(), deep_swamp_type_process(), determine_holy_arch(), did_make_save_item(), do_harvest(), do_item_conversion(), find_recipe(), fix_generated_item(), fix_stopped_arrow(), forklightning(), generate_monster(), generate_monster_arch(), generate_monster_inv(), get_random_dir(), hit_player(), hit_with_one_attacktype(), identify_object_with_skill(), level_for_item(), move_ball_spell(), move_bolt(), move_creator(), move_swarm_spell(), peacemaker_type_process(), place_monsters(), polymorph(), polymorph_item(), polymorph_living(), races_get_random_monster(), reflwall(), resurrection_fails(), save_throw_object(), scroll_type_apply(), shuffle_attack(), spellbook_type_apply(), swap_map(), swap_random_stats(), transmute_item_to_flower(), and trap_adjust().
void set_materialname | ( | object * | op | ) |
Set the material name and type for an item, if not set.
op | item to set the material for. |
Definition at line 297 of file utils.cpp.
References add_string(), object::material, object::materialname, and materials.
Referenced by check_loaded_object(), fix_generated_item(), and object_get_materialtype().
size_t split_string | ( | char * | str, |
char * | array[], | ||
size_t | array_size, | ||
char | sep | ||
) |
Splits a string delimited by passed in sep value into characters into an array of strings.
str | the string to be split; will be modified |
array | the string array; will be filled with pointers into str |
array_size | the number of elements in array; if str contains more fields excess fields are not split but included into the last element |
sep | separator to use. |
array_size
Definition at line 473 of file utils.cpp.
Referenced by account_char_load_from_file(), accounts_load(), assets_pack(), get_score(), FacesetLoader::load(), PngLoader::load(), load_bells(), load_citylife(), map_info(), read_map_log(), and spell_consume_items().
void strip_endline | ( | char * | buf | ) |
Removes endline from buffer (modified in place).
Definition at line 314 of file utils.cpp.
Referenced by parse_shop_string(), and send_news().
When doing transmutation of objects, we have to recheck the resistances, as some that did not apply previously, may apply now.
Only works on armors.
Definition at line 263 of file utils.cpp.
References object::arch, CLOAK, GIRDLE, GLOVES, IS_ARMOR, IS_SHIELD, llevError, LOG(), object::materialname, materialtype_t::mod, object::name, archetype::name, name_to_material(), NROFATTACKS, object::resist, and object::type.
Referenced by cfapi_object_transmute(), and make_item_from_recipe().