Crossfire Server, Trunk
knowledge.c File Reference
#include "global.h"
#include <assert.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "sproto.h"
#include "output_file.h"
+ Include dependency graph for knowledge.c:

Go to the source code of this file.

Data Structures

struct  knowledge_item
 
struct  knowledge_player
 
struct  knowledge_type
 

Macros

#define TAG_END   "[/color]"
 
#define TAG_START   "[color=#ff6611]"
 

Typedefs

typedef int(* knowledge_add_item) (struct knowledge_player *current, const char *item, const struct knowledge_type *type)
 
typedef void(* knowledge_attempt) (player *pl, const struct knowledge_item *item)
 
typedef StringBuffer *(* knowledge_can_use_alchemy) (sstring code, const char *item, StringBuffer *buf, int index)
 
typedef void(* knowledge_detail) (const char *code, StringBuffer *buf)
 
typedef int(* knowledge_is_valid_item) (const char *code)
 
typedef struct knowledge_item knowledge_item
 
typedef struct knowledge_player knowledge_player
 
typedef void(* knowledge_summary) (const char *code, StringBuffer *buf)
 
typedef struct knowledge_type knowledge_type
 

Functions

void command_knowledge (object *pl, const char *params)
 
void free_knowledge (void)
 
static void free_knowledge_items (knowledge_player *kp)
 
static void free_knowledge_player (knowledge_player *kp)
 
static int knowledge_add (knowledge_player *current, const char *item, const knowledge_type *kt)
 
void knowledge_add_probe_monster (object *op, object *mon)
 
static void knowledge_alchemy_attempt (player *pl, const knowledge_item *item)
 
static StringBufferknowledge_alchemy_can_use_item (sstring code, const char *item, StringBuffer *buf, int index)
 
static void knowledge_alchemy_detail (const char *value, StringBuffer *buf)
 
static const Faceknowledge_alchemy_face (sstring code)
 
static const recipeknowledge_alchemy_get_recipe (const char *value)
 
static void knowledge_alchemy_summary (const char *value, StringBuffer *buf)
 
static int knowledge_alchemy_validate (const char *item)
 
static void knowledge_display (object *pl, const char *params)
 
static void knowledge_do_attempt (object *pl, const char *params)
 
static void knowledge_do_display (object *pl, const knowledge_type *show_only, const char *search)
 
static const knowledge_typeknowledge_find (const char *type)
 
void knowledge_first_player_save (player *pl)
 
static knowledge_playerknowledge_get_or_create (const player *pl)
 
void knowledge_give (player *pl, const char *marker, const object *book)
 
static int knowledge_god_add (struct knowledge_player *current, const char *item, const struct knowledge_type *type)
 
static void knowledge_god_detail (const char *item, StringBuffer *buf)
 
static const Faceknowledge_god_face (sstring code)
 
static void knowledge_god_summary (const char *item, StringBuffer *buf)
 
static int knowledge_god_validate (const char *item)
 
void knowledge_item_can_be_used_alchemy (object *op, const object *item)
 
static int knowledge_known (const knowledge_player *current, const char *item, const knowledge_type *kt)
 
static void knowledge_message_detail (const char *value, StringBuffer *buf)
 
static const Faceknowledge_message_face (sstring code)
 
static void knowledge_message_summary (const char *value, StringBuffer *buf)
 
static int knowledge_message_validate (const char *item)
 
static int knowledge_monster_add (struct knowledge_player *current, const char *item, const struct knowledge_type *type)
 
static void knowledge_monster_detail (const char *item, StringBuffer *buf)
 
static const Faceknowledge_monster_face (sstring code)
 
static void knowledge_monster_summary (const char *item, StringBuffer *buf)
 
static int knowledge_monster_validate (const char *item)
 
int knowledge_player_knows (const player *pl, const char *knowledge)
 
void knowledge_process_incremental (void)
 
void knowledge_read (player *pl, object *book)
 
static void knowledge_read_player_data (knowledge_player *kp)
 
void knowledge_send_info (socket_struct *ns)
 
void knowledge_send_known (player *pl)
 
static void knowledge_show (object *pl, const char *params)
 
static void knowledge_write_player_data (const knowledge_player *kp)
 

Variables

const typedef Face *(* knowledge_face )(sstring code)
 
static knowledge_playerknowledge_global = NULL
 
static const knowledge_type knowledges []
 

Detailed Description

Handling of player knowledge of various things.

Right now, the following items are considered:

  • alchemy formulea
  • monster information
  • god information (various types, like enemy, resistances, and such)
  • messages in books, from the lib/messages file

Knowledge is specific for a player, and organized in 'items'. One item is a specific formulae or monster, whatever is coded.

Note that some things are done through functions in readable.c, especially item marking.

Knowledge is persistent and without errors. Maybe that could be changed in the future?

Only use non static functions when using this file.

Loading is done on a per-demand basis, writing at each change.

Knowledge is stored in a "player.knowledge" file in the player's directory.

Knowledge relies on key/values. Key is "knowledge_marker", value is specific to the item class considered and must have a left-side part, delimited by a double dot, specifying a type.

The value should be enough to determine a unique formulae or monster etc.

A type is linked to various functions for displaying, checking the key value.

During loading, obsolete items (eg formula changed) are discarded.

If the client has notifications support of at least 2, then knowledge information is sent as needed, incrementally as to not freeze the server.

Todo:
  • make knowledge shareable between players
  • more things to keep trace of

Definition in file knowledge.c.

Macro Definition Documentation

◆ TAG_END

#define TAG_END   "[/color]"

Definition at line 70 of file knowledge.c.

◆ TAG_START

#define TAG_START   "[color=#ff6611]"

Definition at line 69 of file knowledge.c.

Typedef Documentation

◆ knowledge_add_item

typedef int(* knowledge_add_item) (struct knowledge_player *current, const char *item, const struct knowledge_type *type)

Add knowledge information to the player's knowledge.

Parameters
currentwhere to add the information to.
itemwhat to add, format specific to the type.
typepointer of the handler type.
Returns
count of actually added items.

Definition at line 103 of file knowledge.c.

◆ knowledge_attempt

typedef void(* knowledge_attempt) (player *pl, const struct knowledge_item *item)

Attempt an alchemy based on the specified knowledge.

Parameters
plwho attempts the recipe.
itemitem to attempt, must not be NULL.

Definition at line 129 of file knowledge.c.

◆ knowledge_can_use_alchemy

typedef StringBuffer*(* knowledge_can_use_alchemy) (sstring code, const char *item, StringBuffer *buf, int index)

Check if an item can be used for a recipe, and fill the return buffer if it's the case.

Parameters
codeknowledge internal code.
itemitem's name, including title if there is one.
bufwhere to put the results. If NULL a new one can be allocated.
indexthe knowledge index for this item.
Returns
buf, if it was NULL and the recipe uses the item, a new one is allocated.

Definition at line 113 of file knowledge.c.

◆ knowledge_detail

typedef void(* knowledge_detail) (const char *code, StringBuffer *buf)

Function to fill the StringBuffer with a detailed description of an item.

Parameters
codeknowledge internal code.
bufwhere to write the description, must not be NULL.

Definition at line 87 of file knowledge.c.

◆ knowledge_is_valid_item

typedef int(* knowledge_is_valid_item) (const char *code)

Function to check if the specified item is valid.

Parameters
codeknowledge internal code.
Returns
0 if invalid, non 0 if valid.

Definition at line 94 of file knowledge.c.

◆ knowledge_item

One known item for a player.

◆ knowledge_player

Information about a player.

◆ knowledge_summary

typedef void(* knowledge_summary) (const char *code, StringBuffer *buf)

Function to fill the StringBuffer with the short description of an item.

Parameters
codeknowledge internal code.
bufwhere to write the summary, must not be NULL.

Definition at line 80 of file knowledge.c.

◆ knowledge_type

One item type that may be known to the player.

Function Documentation

◆ command_knowledge()

void command_knowledge ( object pl,
const char *  params 
)

Handle the 'knowledge' for a player.

Parameters
plwho is using the command.
paramsadditional parameters.

Definition at line 1210 of file knowledge.c.

References command_help(), knowledge_display(), knowledge_do_attempt(), knowledge_do_display(), knowledge_show(), llevError, LOG(), and roll-o-matic::params.

Referenced by commands_init().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ free_knowledge()

void free_knowledge ( void  )

Free all knowledge data.

Definition at line 1277 of file knowledge.c.

References free_knowledge_player(), knowledge_global, give::next, and knowledge_player::next.

Referenced by cleanup().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ free_knowledge_items()

static void free_knowledge_items ( knowledge_player kp)
static

Free all knowledge items for a player.

Parameters
kpwhat to free.

Definition at line 1249 of file knowledge.c.

References free_string(), say::item, knowledge_player::item_allocated, knowledge_player::item_count, and knowledge_player::items.

Referenced by free_knowledge_player().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ free_knowledge_player()

static void free_knowledge_player ( knowledge_player kp)
static

Totally free a knowledge structure, and its items.

Parameters
kpstructure to free, becomes invalid.

Definition at line 1268 of file knowledge.c.

References free_knowledge_items(), free_string(), and knowledge_player::player_name.

Referenced by free_knowledge(), and knowledge_process_incremental().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_add()

static int knowledge_add ( knowledge_player current,
const char *  item,
const knowledge_type kt 
)
static

Add a knowledge item to a player's store if not found yet.

Parameters
currentwhere to look for the knowledge.
iteminternal value of the item to give, considered atomic.
kthow to handle the knowledge type.
Returns
0 if item was already known, 1 else.

Use malloc instead of calloc here. We're setting all relevant values, anyway.

Definition at line 547 of file knowledge.c.

References add_string(), reputation_trigger_connect::check(), replace::current, and knowledge_known().

Referenced by knowledge_god_add(), and knowledge_monster_add().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_add_probe_monster()

void knowledge_add_probe_monster ( object op,
object mon 
)

Display monster details, then add to a player's knowledge if not already.

Parameters
opplayer asking for details.
monmonster

Definition at line 1525 of file knowledge.c.

References buf, describe_item(), draw_ext_info(), mon, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_EXAMINE, obj::name, NDI_UNIQUE, give::op, rotate-tower::result, stringbuffer_append_printf(), stringbuffer_finish(), and stringbuffer_new().

Referenced by examine_monster().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_alchemy_attempt()

◆ knowledge_alchemy_can_use_item()

static StringBuffer* knowledge_alchemy_can_use_item ( sstring  code,
const char *  item,
StringBuffer buf,
int  index 
)
static

Check if an item can be used for a recipe, and fill the return buffer if it's the case.

Parameters
coderecipe internal code.
itemitem's name, including title if there is one.
bufwhere to put the results. If NULL a new one can be allocated.
indexthe knowledge index for this item.
Returns
buf, if it was null and the recipe uses the item, a new one is allocated.

Definition at line 297 of file knowledge.c.

References archininventory::arch, recipestruct::arch_name, recipestruct::arch_names, buf, npc_dialog::index, recipestruct::ingred, knowledge_alchemy_get_recipe(), give::name, give::next, RANDOM, stringbuffer_append_printf(), stringbuffer_append_string(), stringbuffer_new(), recipestruct::title, and try_find_archetype().

+ Here is the call graph for this function:

◆ knowledge_alchemy_detail()

static void knowledge_alchemy_detail ( const char *  value,
StringBuffer buf 
)
static

Give the full description of the alchemy recpie.

Parameters
valuerecipe internal value.
bufwhere to store the detail.
Todo:
merge with stuff in readable.c

Definition at line 240 of file knowledge.c.

References archininventory::arch, recipestruct::arch_name, recipestruct::arch_names, buf, recipestruct::cauldron, recipestruct::ingred, knowledge_alchemy_get_recipe(), MAX_BUF, give::name, give::next, query_name(), RANDOM, recipestruct::skill, stringbuffer_append_printf(), recipestruct::title, try_find_archetype(), and autojail::value.

+ Here is the call graph for this function:

◆ knowledge_alchemy_face()

static const Face* knowledge_alchemy_face ( sstring  code)
static

Try to get a face for an alchemy recipe.

Parameters
codealchemy code.
Returns
face, NULL if none could be found.

Definition at line 511 of file knowledge.c.

References knowledge_alchemy_get_recipe(), llevError, LOG(), and recipe_get_face().

+ Here is the call graph for this function:

◆ knowledge_alchemy_get_recipe()

static const recipe* knowledge_alchemy_get_recipe ( const char *  value)
static

Get a recipe from the internal code.

Parameters
valuecode to get value for.
Returns
recipe, NULL if not found.

Definition at line 172 of file knowledge.c.

References disinfect::count, get_formulalist(), recipestruct::index, npc_dialog::index, recipeliststruct::items, recipestruct::next, recipestruct::title, and autojail::value.

Referenced by knowledge_alchemy_attempt(), knowledge_alchemy_can_use_item(), knowledge_alchemy_detail(), knowledge_alchemy_face(), knowledge_alchemy_summary(), and knowledge_alchemy_validate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_alchemy_summary()

static void knowledge_alchemy_summary ( const char *  value,
StringBuffer buf 
)
static

Give the title of the alchemy recpie.

Parameters
valuerecipe internal value.
bufwhere to put the information.
Todo:
merge with stuff in readable.c

Definition at line 210 of file knowledge.c.

References archininventory::arch, recipestruct::arch_name, recipestruct::arch_names, buf, knowledge_alchemy_get_recipe(), RANDOM, stringbuffer_append_printf(), recipestruct::title, try_find_archetype(), and autojail::value.

+ Here is the call graph for this function:

◆ knowledge_alchemy_validate()

static int knowledge_alchemy_validate ( const char *  item)
static

Check if an alchemy recipe is still ok.

Parameters
itemwhat to check for
Returns
0 if non valid, 1 else.

Definition at line 285 of file knowledge.c.

References knowledge_alchemy_get_recipe().

+ Here is the call graph for this function:

◆ knowledge_display()

static void knowledge_display ( object pl,
const char *  params 
)
static

Display all a player's knowledge.

Parameters
plwho to display knowledge of.
paramsadditionnal parameters.

Definition at line 1130 of file knowledge.c.

References draw_ext_info(), draw_ext_info_format(), knowledge_do_display(), knowledges, MSG_TYPE_CLIENT_NOTICE, MSG_TYPE_MISC, give::name, NDI_UNIQUE, roll-o-matic::params, is_valid_types_gen::type, and knowledge_type::type.

Referenced by command_knowledge().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_do_attempt()

static void knowledge_do_attempt ( object pl,
const char *  params 
)
static

Player attempts something on a knowledge, get item and try it.

Parameters
plwho is trying.
paramscommand parameters.

Definition at line 1186 of file knowledge.c.

References disinfect::count, draw_ext_info(), say::item, knowledge_player::item_count, knowledge_player::items, knowledge_get_or_create(), MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_INFO, NDI_UNIQUE, and roll-o-matic::params.

Referenced by command_knowledge().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_do_display()

static void knowledge_do_display ( object pl,
const knowledge_type show_only,
const char *  search 
)
static

Actually display knowledge list.

Parameters
plwho to display to.
show_onlyif not NULL, only display this knowledge type.
searchif not NULL, only display items having the summary or detail contain the string. Must be either NULL or a non empty string.

Definition at line 1065 of file knowledge.c.

References draw_ext_info(), draw_ext_info_format(), hall_of_fame::header, say::item, knowledge_player::item_count, knowledge_player::items, knowledge_get_or_create(), MSG_TYPE_CLIENT_NOTICE, MSG_TYPE_MISC, knowledge_type::name, NDI_UNIQUE, stringbuffer_finish(), stringbuffer_new(), and knowledge_type::type.

Referenced by command_knowledge(), and knowledge_display().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_find()

static const knowledge_type* knowledge_find ( const char *  type)
static

Find a knowledge handler from its type.

Parameters
typeinternal type name.
Returns
handler, NULL if not found.

Definition at line 864 of file knowledge.c.

References knowledges, and is_valid_types_gen::type.

Referenced by knowledge_give(), knowledge_player_knows(), and knowledge_read_player_data().

+ Here is the caller graph for this function:

◆ knowledge_first_player_save()

void knowledge_first_player_save ( player pl)

Ensure the knowledge state is correctly saved for the player. This function should only be called once, when the player's save directory is created. All other knowledge functions save the state automatically, but save can only happen when the player directory exists.

Parameters
plwho to save the state for.

Definition at line 1420 of file knowledge.c.

References knowledge_global, knowledge_write_player_data(), obj::name, knowledge_player::next, pl::ob, and knowledge_player::player_name.

Referenced by save_player().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_get_or_create()

static knowledge_player* knowledge_get_or_create ( const player pl)
static

Find or create the knowledge store for a player. Will load data if required. fatal() will be called if memory failure.

Parameters
plwho to find data for.
Returns
data store, never NULL.

Definition at line 965 of file knowledge.c.

References add_refcount(), fatal(), knowledge_global, knowledge_read_player_data(), obj::name, knowledge_player::next, socket_struct::notifications, pl::ob, OUT_OF_MEMORY, knowledge_player::player_name, knowledge_player::sent_up_to, and pl::socket.

Referenced by knowledge_do_attempt(), knowledge_do_display(), knowledge_give(), knowledge_item_can_be_used_alchemy(), knowledge_player_knows(), knowledge_send_known(), and knowledge_show().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_give()

void knowledge_give ( player pl,
const char *  marker,
const object book 
)

Give a knowledge item from its code.

Parameters
plwho to give the knowldge to.
markerknowledge's code.
bookoptional item containing the knowledge code.

Definition at line 993 of file knowledge.c.

References replace::current, draw_ext_info_format(), fatal(), pl::has_directory, knowledge_find(), knowledge_get_or_create(), knowledge_write_player_data(), llevError, LOG(), MSG_TYPE_CLIENT_NOTICE, MSG_TYPE_MISC, obj::name, NDI_UNIQUE, pl::ob, OUT_OF_MEMORY, TAG_END, TAG_START, and is_valid_types_gen::type.

Referenced by cfapi_player_knowledge(), and knowledge_read().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_god_add()

static int knowledge_god_add ( struct knowledge_player current,
const char *  item,
const struct knowledge_type type 
)
static

Add god information to the player's knowledge, handling the multiple monster case.

Parameters
currentwhere to add the information to.
itemgod to add, a dot separating the exact knowledge.
typepointer of the monster type.
Returns
count of actually added items.

Definition at line 725 of file knowledge.c.

References buf, reputation_trigger_connect::check(), replace::current, free_string(), knowledge_add(), llevError, LOG(), rotate-tower::result, strdup_local, stringbuffer_append_printf(), stringbuffer_finish_shared(), stringbuffer_new(), and is_valid_types_gen::type.

+ Here is the call graph for this function:

◆ knowledge_god_detail()

static void knowledge_god_detail ( const char *  item,
StringBuffer buf 
)
static

Describe in detail a god.

Parameters
itemknowledge item for the god (object name and what is known).
bufwhere to put the description.
Todo:
merge with stuff in readable.c

Definition at line 674 of file knowledge.c.

References buf, archt::clone, describe_god(), find_archetype_by_object_name(), llevError, LOG(), and strdup_local.

+ Here is the call graph for this function:

◆ knowledge_god_face()

static const Face* knowledge_god_face ( sstring  code)
static

Get the face for a god.

Parameters
codegod's code.
Returns
face, NULL if invalid.

Definition at line 771 of file knowledge.c.

References buf, archt::clone, obj::face, MAX_BUF, tolower, and try_find_archetype().

+ Here is the call graph for this function:

◆ knowledge_god_summary()

static void knowledge_god_summary ( const char *  item,
StringBuffer buf 
)
static

God information summary.

Parameters
itemknowledge item.
bufwhere to put the information.
Todo:
merge with stuff in readable.c

Definition at line 658 of file knowledge.c.

References buf, strdup_local, and stringbuffer_append_printf().

+ Here is the call graph for this function:

◆ knowledge_god_validate()

static int knowledge_god_validate ( const char *  item)
static

Check if a god knowledge item is still valid.

Parameters
itemmonster to check
Returns
0 if invalid, 1 if valid.

Definition at line 703 of file knowledge.c.

References find_archetype_by_object_name(), llevError, LOG(), and strdup_local.

+ Here is the call graph for this function:

◆ knowledge_item_can_be_used_alchemy()

void knowledge_item_can_be_used_alchemy ( object op,
const object item 
)

Displays known alchemy recipes an item can be used in.

Parameters
opwho to display recipes for.
itemwhat to check formulae for.

Definition at line 1331 of file knowledge.c.

References buf, draw_ext_info(), knowledge_item::handler, knowledge_item::item, knowledge_player::item_count, knowledge_player::items, knowledge_get_or_create(), MAX_BUF, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_EXAMINE, give::name, NDI_UNIQUE, give::op, PLAYER, rotate-tower::result, stringbuffer_append_string(), stringbuffer_finish(), and knowledge_type::use_alchemy.

Referenced by examine().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_known()

static int knowledge_known ( const knowledge_player current,
const char *  item,
const knowledge_type kt 
)
static

Check whether a player already knows a knowledge item or not.

Parameters
currentplayer to check.
itemwhat to check for.
ktthe knowledge type for item.
Returns
0 if item is known, 1 else.

Definition at line 529 of file knowledge.c.

References replace::current, and knowledge_type::type.

Referenced by knowledge_add(), and knowledge_player_knows().

+ Here is the caller graph for this function:

◆ knowledge_message_detail()

static void knowledge_message_detail ( const char *  value,
StringBuffer buf 
)
static

Give the full description of a message.

Parameters
valuemessage internal value.
bufwhere to store the detail.
Todo:
merge with stuff in readable.c

Definition at line 815 of file knowledge.c.

References buf, get_message_body(), get_message_from_identifier(), navar-midane_pickup::msg, stringbuffer_append_printf(), and autojail::value.

+ Here is the call graph for this function:

◆ knowledge_message_face()

static const Face* knowledge_message_face ( sstring  code)
static

Get the face for a message.

Parameters
codemessage's code.
Returns
face, NULL if invalid.

Definition at line 839 of file knowledge.c.

References get_message_face(), get_message_from_identifier(), and navar-midane_pickup::msg.

+ Here is the call graph for this function:

◆ knowledge_message_summary()

static void knowledge_message_summary ( const char *  value,
StringBuffer buf 
)
static

Give the title of a message.

Parameters
valuemessage internal value.
bufwhere to put the information.
Todo:
merge with stuff in readable.c

Definition at line 799 of file knowledge.c.

References buf, get_message_from_identifier(), get_message_title(), navar-midane_pickup::msg, stringbuffer_append_printf(), and autojail::value.

+ Here is the call graph for this function:

◆ knowledge_message_validate()

static int knowledge_message_validate ( const char *  item)
static

Check if a message is still valid.

Parameters
itemwhat to check for
Returns
0 if non valid, 1 else.

Definition at line 830 of file knowledge.c.

References get_message_from_identifier().

+ Here is the call graph for this function:

◆ knowledge_monster_add()

static int knowledge_monster_add ( struct knowledge_player current,
const char *  item,
const struct knowledge_type type 
)
static

Add monster information to the player's knowledge, handling the multiple monster case.

Parameters
currentwhere to add the information to.
itemmonster to add, can be separated by dots for multiple ones.
typepointer of the monster type.
Returns
count of actually added items.

Definition at line 621 of file knowledge.c.

References replace::current, knowledge_add(), strdup_local, and is_valid_types_gen::type.

+ Here is the call graph for this function:

◆ knowledge_monster_detail()

static void knowledge_monster_detail ( const char *  item,
StringBuffer buf 
)
static

Describe in detail a monster.

Parameters
itemknowledge item for the monster (archetype name).
bufwhere to put the description.
Todo:
merge with stuff in readable.c

Definition at line 592 of file knowledge.c.

References buf, archt::clone, describe_item(), obj::name, stringbuffer_append_printf(), and try_find_archetype().

+ Here is the call graph for this function:

◆ knowledge_monster_face()

static const Face* knowledge_monster_face ( sstring  code)
static

Get the face for a monster.

Parameters
codemonster's code.
Returns
face, NULL if invalid.

Definition at line 643 of file knowledge.c.

References blank_face, archt::clone, obj::face, and try_find_archetype().

+ Here is the call graph for this function:

◆ knowledge_monster_summary()

static void knowledge_monster_summary ( const char *  item,
StringBuffer buf 
)
static

Monster information summary.

Parameters
itemknowledge item.
bufwhere to put the information.
Todo:
merge with stuff in readable.c

Definition at line 578 of file knowledge.c.

References buf, archt::clone, obj::name, stringbuffer_append_printf(), and try_find_archetype().

+ Here is the call graph for this function:

◆ knowledge_monster_validate()

static int knowledge_monster_validate ( const char *  item)
static

Check if a monster knowledge item is still valid.

Parameters
itemmonster to check
Returns
0 if invalid, 1 if valid.

Definition at line 607 of file knowledge.c.

References archt::clone, archt::head, MONSTER_EXCLUDE_FROM_READABLE_KEY, object_get_value(), try_find_archetype(), and obj::type.

+ Here is the call graph for this function:

◆ knowledge_player_knows()

int knowledge_player_knows ( const player pl,
const char *  knowledge 
)

Determines whether a player knows a specific knowledge or not.

Parameters
plwho to check knowledge for.
knowledgewhat to check for, in format "type:(type specific value)".
Returns
0 if item is known, 1 else.

Definition at line 1295 of file knowledge.c.

References replace::current, giveknowledge::knowledge, knowledge_find(), knowledge_get_or_create(), knowledge_known(), llevError, LOG(), MAX_BUF, strlcpy(), and is_valid_types_gen::type.

Referenced by cfapi_player_knowledge().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_process_incremental()

◆ knowledge_read()

void knowledge_read ( player pl,
object book 
)

Player is reading a book, give knowledge if needed, warn player, and such.

Parameters
plwho is reading.
bookwhat is read.

Definition at line 1053 of file knowledge.c.

References knowledge_give(), object_get_value(), and sstring.

Referenced by apply_sign(), and book_type_apply().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_read_player_data()

static void knowledge_read_player_data ( knowledge_player kp)
static

Read all knowledge data for a player from disk, discarding invalid data.

Parameters
kpplayer structure to load data into.

Definition at line 910 of file knowledge.c.

References add_string(), mad_mage_user::file, say::item, knowledge_player::item_allocated, knowledge_player::item_count, knowledge_player::items, knowledge_find(), llevDebug, llevError, Settings::localdir, LOG(), MAX_BUF, knowledge_player::player_name, Settings::playerdir, settings, and is_valid_types_gen::type.

Referenced by knowledge_get_or_create().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_send_info()

void knowledge_send_info ( socket_struct ns)

Send the reply_info for 'knowledge_info'.

Parameters
nssocket to send information to.

Definition at line 1371 of file knowledge.c.

References knowledge_type::attempt_alchemy, esrv_send_face(), socket_struct::faces_sent, knowledges, give::name, NS_FACESENT_FACE, Face::number, Send_With_Handling(), SockList_AddPrintf(), SockList_AddString(), SockList_Init(), SockList_Term(), try_find_face(), is_valid_types_gen::type, and knowledge_type::type.

Referenced by request_info_cmd().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_send_known()

void knowledge_send_known ( player pl)

Send initial known knowledge to player, if requested.

Parameters
plwho to send knowledge for.

Definition at line 1400 of file knowledge.c.

References knowledge_get_or_create(), socket_struct::notifications, knowledge_player::sent_up_to, and pl::socket.

Referenced by check_login().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_show()

static void knowledge_show ( object pl,
const char *  params 
)
static

Show the details of a knowledge item.

Parameters
plwho is asking for details.
paramsadditional parameters, should contain the knowledge item number.

Definition at line 1160 of file knowledge.c.

References buf, disinfect::count, draw_ext_info(), say::item, knowledge_player::item_count, knowledge_player::items, knowledge_get_or_create(), MSG_TYPE_CLIENT_NOTICE, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_INFO, MSG_TYPE_MISC, NDI_UNIQUE, roll-o-matic::params, stringbuffer_finish(), and stringbuffer_new().

Referenced by command_knowledge().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ knowledge_write_player_data()

static void knowledge_write_player_data ( const knowledge_player kp)
static

Store all knowledge data for a player to disk.

Parameters
kpplayer data to store.
Todo:
rename/backup, stuff like that

Definition at line 879 of file knowledge.c.

References draw_ext_info(), mad_mage_user::file, say::item, knowledge_player::item_count, knowledge_player::items, Settings::localdir, MAX_BUF, MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_LOADSAVE, NDI_ALL_DMS, NDI_UNIQUE, of_close(), of_open(), knowledge_player::player_name, Settings::playerdir, and settings.

Referenced by knowledge_first_player_save(), and knowledge_give().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ knowledge_face

const typedef Face*(* knowledge_face) (sstring code)

Get the face for a knowledge item.

Parameters
codeknowledge internal code.
Returns
face number, NULL for invalid.

Definition at line 120 of file knowledge.c.

◆ knowledge_global

knowledge_player* knowledge_global = NULL
static

All known loaded knowledge for a player.

Definition at line 164 of file knowledge.c.

Referenced by free_knowledge(), knowledge_first_player_save(), knowledge_get_or_create(), and knowledge_process_incremental().

◆ knowledges

const knowledge_type knowledges[]
static
Initial value:
= {
{ "message", knowledge_message_summary, knowledge_message_detail, knowledge_message_validate, knowledge_add, "messages", NULL, NULL, "knowledge_messages.111", knowledge_message_face },
{ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
}

All handled knowledge items.

Definition at line 850 of file knowledge.c.

Referenced by knowledge_display(), knowledge_find(), and knowledge_send_info().

knowledge_alchemy_validate
static int knowledge_alchemy_validate(const char *item)
Definition: knowledge.c:285
knowledge_message_summary
static void knowledge_message_summary(const char *value, StringBuffer *buf)
Definition: knowledge.c:799
knowledge_monster_summary
static void knowledge_monster_summary(const char *item, StringBuffer *buf)
Definition: knowledge.c:578
knowledge_monster_face
static const Face * knowledge_monster_face(sstring code)
Definition: knowledge.c:643
knowledge_god_validate
static int knowledge_god_validate(const char *item)
Definition: knowledge.c:703
knowledge_god_detail
static void knowledge_god_detail(const char *item, StringBuffer *buf)
Definition: knowledge.c:674
knowledge_god_summary
static void knowledge_god_summary(const char *item, StringBuffer *buf)
Definition: knowledge.c:658
knowledge_monster_detail
static void knowledge_monster_detail(const char *item, StringBuffer *buf)
Definition: knowledge.c:592
knowledge_god_add
static int knowledge_god_add(struct knowledge_player *current, const char *item, const struct knowledge_type *type)
Definition: knowledge.c:725
knowledge_alchemy_detail
static void knowledge_alchemy_detail(const char *value, StringBuffer *buf)
Definition: knowledge.c:240
knowledge_monster_validate
static int knowledge_monster_validate(const char *item)
Definition: knowledge.c:607
knowledge_alchemy_attempt
static void knowledge_alchemy_attempt(player *pl, const knowledge_item *item)
Definition: knowledge.c:350
knowledge_alchemy_can_use_item
static StringBuffer * knowledge_alchemy_can_use_item(sstring code, const char *item, StringBuffer *buf, int index)
Definition: knowledge.c:297
knowledge_message_validate
static int knowledge_message_validate(const char *item)
Definition: knowledge.c:830
knowledge_alchemy_summary
static void knowledge_alchemy_summary(const char *value, StringBuffer *buf)
Definition: knowledge.c:210
knowledge_message_detail
static void knowledge_message_detail(const char *value, StringBuffer *buf)
Definition: knowledge.c:815
knowledge_message_face
static const Face * knowledge_message_face(sstring code)
Definition: knowledge.c:839
knowledge_alchemy_face
static const Face * knowledge_alchemy_face(sstring code)
Definition: knowledge.c:511
knowledge_monster_add
static int knowledge_monster_add(struct knowledge_player *current, const char *item, const struct knowledge_type *type)
Definition: knowledge.c:621
knowledge_god_face
static const Face * knowledge_god_face(sstring code)
Definition: knowledge.c:771
knowledge_add
static int knowledge_add(knowledge_player *current, const char *item, const knowledge_type *kt)
Definition: knowledge.c:547