20 #define WANT_UNARMED_SKILLS 45 void map_info(
object *op,
const char *search) {
51 i18n(op,
"Current time is: %02ld:%02ld:%02ld."),
52 (sec%86400)/3600, (sec%3600)/60, sec%60);
55 i18n(op,
"[fixed]Path Pl PlM IM TO Dif Reset"));
58 if (*search !=
'\0' && strstr(m->
path, search) == NULL)
62 if (strlen(m->
path) <= 18) {
63 strcpy(map_path, m->
path);
69 i18n(op,
"[fixed]%-18.18s %2d %2d %1d %4d %2d %02d:%02d:%02d"),
91 if (*params ==
'\0' || (!strcmp(params,
""))) {
93 i18n(op,
"Your current language is set to: English."));
95 i18n(op,
"Available languages:"));
103 if (language == -1) {
105 i18n(op,
"Unknown language."));
112 i18n(op,
"Your current language is set to English."));
135 i18n(op,
"The first column is the name of the body location."));
138 i18n(op,
"The second column is how many of those locations your body has."));
141 i18n(op,
"The third column is how many slots in that location are available."));
149 i18n(op,
"[fixed]%-30s %5d %5d"),
155 i18n(op,
"You are not allowed to wear armor."));
158 i18n(op,
"You are not allowed to use weapons."));
205 int nrm = 0, mapmem = 0, anr, anims, sum_alloc = 0, sum_used = 0, i, tlnr, alnr;
226 for (m =
first_map, nrofmaps = 0; m != NULL; m = m->
next, nrofmaps++)
233 i18n(op,
"Sizeof: object=%d player=%d map=%d"),
237 i18n(op,
"[fixed]%4d used objects: %8d"),
238 ob_used, i = (ob_used*
sizeof(
object)));
243 i18n(op,
"[fixed]%4d free objects: %8d"),
244 ob_free, i = (ob_free*
sizeof(
object)));
247 i18n(op,
"[fixed]%4d active objects: %8d"),
252 i18n(op,
"[fixed]%4d players: %8d"),
253 players, i = (players*
sizeof(
player)));
259 i18n(op,
"[fixed]%4d maps allocated: %8d"),
260 nrofmaps, i = (nrofmaps*
sizeof(
mapstruct)));
266 i18n(op,
"[fixed]%4d maps in memory: %8d"),
273 i18n(op,
"[fixed]%4d archetypes: %8d"),
280 i18n(op,
"[fixed]%4d animations: %8d"),
281 anims, i = (anims*
sizeof(
uint16_t)));
287 i18n(op,
"[fixed]%4d treasurelists %8d"),
294 i18n(op,
"[fixed]%4ld treasures %8d"),
301 i18n(op,
"[fixed]%4ld artifacts %8d"),
308 i18n(op,
"[fixed]%4ld artifacts strngs %8d"),
315 i18n(op,
"[fixed]%4d artifactlists %8d"),
322 i18n(op,
"[fixed]Total space allocated:%8d"),
326 i18n(op,
"[fixed]Total space used: %8d"),
353 i18n(op,
"You are in %s.\n%s"),
375 i18n(op,
"players:%d difficulty:%d size:%dx%d start:%dx%d timeout %d"),
385 #ifdef DEBUG_MALLOC_LEVEL 394 void command_malloc_verify(
object *op,
char *parms) {
395 extern int malloc_verify(
void);
397 if (!malloc_verify())
399 i18n(op,
"Heap is corrupted."));
402 i18n(op,
"Heap checks out OK."));
431 if (pl->
ob->
map != NULL)
437 if (reg->
parent != NULL) {
441 LOG(
llevError,
"command_whereabouts() Region %s with no longname has no parent\n", reg->
name);
445 i18n(op,
"In the world currently there are:"));
450 i18n(op,
"%u players in %s"),
488 int num_players = 0, num_wiz = 0, num_afk = 0, num_bot = 0;
497 if (pl->
ob->
map == NULL)
504 if (party && pl->
party != party)
512 i18n(op,
"who failed - out of memory!"));
515 sprintf(chars[num_players-1].namebuf,
"%s", pl->
ob->
name);
530 if (reg == NULL && party == NULL)
532 i18n(op,
"Total Players (%d) -- WIZ(%d) AFK(%d) BOT(%d)"),
533 num_players, num_wiz, num_afk, num_bot);
534 else if (party == NULL)
536 i18n(op,
"Total Players in %s (%d) -- WIZ(%d) AFK(%d) BOT(%d)"),
540 i18n(op,
"Total Players in party %s (%d) -- WIZ(%d) AFK(%d) BOT(%d)"),
541 party->
partyname, num_players, num_wiz, num_afk, num_bot);
543 qsort(chars, num_players,
sizeof(
chars_names), (
int (*)(
const void *,
const void *))
name_cmp);
544 for (i = 0; i < num_players; i++)
579 strcpy(outbuf,
"[fixed]");
582 LOG(
llevError,
"display_who_entry(): I was passed a null player\n");
585 for (i = 0; i <= strlen(format); i++) {
586 if (format[i] ==
'%') {
589 strcat(outbuf, tmpbuf);
590 }
else if (format[i] ==
'_') {
593 snprintf(tmpbuf,
sizeof(tmpbuf),
"%c", format[i]);
594 strcat(outbuf, tmpbuf);
710 i18n(op,
"You are no longer AFK"));
714 i18n(op,
"You are now AFK"));
833 if (*params ==
'\0' || !sscanf(params,
"%d", &i)) {
835 i18n(op,
"Global debug level is %d."),
841 i18n(op,
"Debug level set to %d."),
867 i18n(op,
"You will now walk through walls."));
871 i18n(op,
"You will now be stopped by walls."));
897 i18n(op,
"You can now cast spells anywhere."));
901 i18n(op,
"You now cannot cast spells in no-magic areas."));
1017 if (*params ==
'\0' || !sscanf(params,
"%d", &i)) {
1019 i18n(op,
"Set listen to what (presently %d)?"),
1025 i18n(op,
"Verbose level should be positive."));
1030 i18n(op,
"Your verbose level is now %d."),
1064 i18n(pl,
"[fixed]\nStat Nat/Real/Max"));
1067 i18n(pl,
"[fixed]Str %2d/ %3d/%3d"),
1070 i18n(pl,
"[fixed]Dex %2d/ %3d/%3d"),
1073 i18n(pl,
"[fixed]Con %2d/ %3d/%3d"),
1076 i18n(pl,
"[fixed]Int %2d/ %3d/%3d"),
1079 i18n(pl,
"[fixed]Wis %2d/ %3d/%3d"),
1082 i18n(pl,
"[fixed]Pow %2d/ %3d/%3d"),
1085 i18n(pl,
"[fixed]Cha %2d/ %3d/%3d"),
1088 i18n(pl,
"\nAttack Mode: %s"),
1094 if (weap_speed < 0.0f)
1096 if (weap_speed > 1.0f)
1104 i18n(pl,
"\n\nDam/Sec: %4d"), (int)(dps + 0.5f));
1116 hours = minutes / 60;
1117 minutes = minutes % 60;
1120 "You have played this character for %u ticks, which amounts " 1121 "to %d hours and %d minutes.",
1155 t = buf+strlen(buf);
1156 if ((dir =
opendir(buf)) != NULL) {
1157 const struct dirent *entry;
1159 while ((entry =
readdir(dir)) != NULL) {
1161 if (!((entry->
d_name[0] ==
'.' && entry->
d_name[1] ==
'\0')
1162 || (entry->
d_name[0] ==
'.' && entry->
d_name[1] ==
'.' && entry->
d_name[2] ==
'\0'))) {
1165 strcpy(t, entry->
d_name);
1166 if (stat(buf, &st) == 0) {
1171 struct tm *tm = localtime(&st.st_mtime);
1174 i18n(op,
"[fixed]%s\t%04d %02d %02d %02d %02d %02d"),
1200 static const char *
const types[] = {
1206 if (*params ==
'\0') {
1208 i18n(op,
"applymode is set to %s"),
1213 if (!strcmp(params,
"nochoice"))
1215 else if (!strcmp(params,
"never"))
1217 else if (!strcmp(params,
"always"))
1221 i18n(op,
"applymode: Unknown options %s, valid options are nochoice, never, always"),
1226 i18n(op,
"applymode%s set to %s"),
1241 static const char *
const types[] = {
1258 if (*params ==
'\0') {
1260 i18n(op,
"bowmode is set to %s"),
1266 if (!strcmp(params, types[i])) {
1273 snprintf(buf,
sizeof(buf),
"bowmode: Unknown options %s, valid options are:", params);
1276 strcat(buf, types[i]);
1286 i18n(op,
"bowmode%s set to %s"),
1304 if (*params ==
'\0') {
1306 "unarmed skill is set to %s",
1319 "You do not know any such skill called %s",
1323 for (i = 0; i <
sizeof(unarmed_skills); i++)
1324 if (skill->
subtype == unarmed_skills[i])
1326 if (i ==
sizeof(unarmed_skills)) {
1328 "%s is not an unarmed skill!",
1343 "unarmed skill is now set to %s",
1358 static const char *
const types[] = {
1365 if (*params ==
'\0') {
1367 i18n(op,
"petmode is set to %s"),
1372 if (!strcmp(params,
"normal"))
1374 else if (!strcmp(params,
"sad"))
1376 else if (!strcmp(params,
"defend"))
1378 else if (!strcmp(params,
"arena"))
1382 i18n(op,
"petmode: Unknown options %s, valid options are normal, sad (seek and destroy), defend, arena"),
1387 i18n(op,
"petmode%s set to %s"),
1402 int counter = 0, target = 0;
1403 int have_shown_pet = 0;
1404 if (*params !=
'\0')
1405 target = atoi(params);
1408 object *ob = obl->
ob;
1417 i18n(op,
"%d %s - level %d"),
1419 }
else if (!have_shown_pet && ++counter == target) {
1421 i18n(op,
"[fixed]level %d %s"),
1424 i18n(op,
"[fixed]%d/%d HP, %d/%d SP"),
1429 i18n(op,
"[fixed]Str %d"),
1432 i18n(op,
"[fixed]Dex %d"),
1435 i18n(op,
"[fixed]Con %d"),
1438 i18n(op,
"[fixed]Int %d"),
1441 i18n(op,
"[fixed]Wis %d"),
1444 i18n(op,
"[fixed]Cha %d"),
1447 i18n(op,
"[fixed]Pow %d"),
1450 i18n(op,
"[fixed]wc %d damage %d ac %d"),
1458 i18n(op,
"You have no pets."));
1459 else if (target != 0 && have_shown_pet == 0)
1461 i18n(op,
"No such pet."));
1474 static const char *
const types[] = {
1480 if (*params ==
'\0') {
1482 i18n(op,
"usekeys is set to %s"),
1487 if (!strcmp(params,
"inventory"))
1489 else if (!strcmp(params,
"keyrings"))
1491 else if (!strcmp(params,
"containers"))
1495 i18n(op,
"usekeys: Unknown option %s, valid options are inventory, keyrings, containers"),
1500 i18n(op,
"usekeys%s set to %s"),
1523 i18n(op,
"[fixed]%-20s %+5d"),
1535 i18n(op,
"\nNatural skin resistances:"));
1537 for (attack = 0; attack <
NROFATTACKS; attack++) {
1564 const char *language;
1567 snprintf(suffix,
sizeof(suffix),
".%s", language);
1573 i18n(op,
" Wiz commands:"));
1579 i18n(op,
" Misc help:"));
1585 i18n(op,
" Commands:"));
1588 if (!(dirp =
opendir(filename)))
1597 && (namelen == 1 || de->
d_name[1] ==
'.'))
1599 if (strstr(de->
d_name, suffix)) {
1600 strcat(line, strtok(de->
d_name,
"."));
1629 i18n(op,
" Wiz commands:"));
1636 i18n(op,
" Communication commands:"));
1643 i18n(op,
" Commands:"));
1648 for (i = 0; i < size; i++) {
1649 strcat(line, ap[i].
name);
1670 if (stat(path, &st) == 0 &&
S_ISREG(st.st_mode)) {
1674 if (strcmp(language,
"en")) {
1676 if (stat(path, &st) == 0 &&
S_ISREG(st.st_mode)) {
1685 if (stat(path, &st) == 0 &&
S_ISREG(st.st_mode)) {
1688 if (strcmp(language,
"en")) {
1690 if (stat(path, &st) == 0 &&
S_ISREG(st.st_mode)) {
1710 const char *language;
1715 if (*params ==
'\0') {
1717 if ((fp = fopen(filename,
"r")) == NULL) {
1718 LOG(
llevError,
"Cannot open help file %s: %s\n", filename, strerror(errno));
1721 while (fgets(line,
MAX_BUF, fp)) {
1723 len = strlen(line)-1;
1724 if (line[len] ==
'\n')
1735 if (!strcmp(params,
"topics")) {
1746 if (!strcmp(params,
"commands")) {
1760 if (strchr(params,
'.') || strchr(params,
' ') || strchr(params,
'/')) {
1762 i18n(op,
"Illegal characters in '%s'"),
1771 i18n(op,
"No help available on '%s'"),
1779 if ((fp = fopen(filename,
"r")) == NULL) {
1780 LOG(
llevError,
"Cannot open help file %s: %s\n", filename, strerror(errno));
1785 i18n(op,
"Help about '%s'"),
1788 while (fgets(line,
MAX_BUF, fp)) {
1790 len = strlen(line)-1;
1791 if (line[len] ==
'\n')
1811 if (sscanf(line,
"%d", &i))
1852 i18n(op,
"Quitting will delete your character.\nAre you sure you want to delete your character (y/n):"));
1869 i18n(op,
"Sounds are turned off."));
1873 i18n(op,
"The sounds are enabled."));
1908 if (pwd_len <= 1 || pwd_len > 17) {
1913 i18n(op,
"Password changed cancelled."));
1926 i18n(op,
"You are not allowed to play."));
1934 i18n(op,
"The passwords did not match."));
1941 i18n(op,
"\nWelcome, Brave New Warrior!\n"));
1950 i18n(op,
"You entered the wrong current password."));
1963 i18n(op,
"Please confirm your new password, or blank to cancel:"));
1971 i18n(op,
"The new passwords don't match!"));
1974 i18n(op,
"Password changed."));
2002 i18n(op,
"You cannot change your title."));
2009 i18n(op,
"Dragons cannot change titles."));
2013 if (*params ==
'\0') {
2017 snprintf(buf,
sizeof(buf),
i18n(op,
"Your title is '%s'."), tmp);
2021 if (strcmp(params,
"clear") == 0 || strcmp(params,
"default") == 0) {
2024 i18n(op,
"Your title is the default title."));
2027 i18n(op,
"Title set to default."));
2032 if ((
int)strlen(params) >=
MAX_NAME) {
2034 i18n(op,
"Title too long."));
2051 i18n(op,
"You can not save on unholy ground."));
2054 i18n(op,
"You don't deserve to save yet."));
2058 i18n(op,
"You have been saved."));
2061 i18n(op,
"SAVE FAILED!"));
2076 i18n(op,
"You will not attack other players."));
2079 i18n(op,
"You will attack other players."));
2093 if (*params ==
'\0' || !sscanf(params,
"%d", &i)) {
2095 i18n(op,
"Your current wimpy level is %d."),
2100 if (i < 0 || i > 100) {
2102 i18n(op,
"Wimpy level should be between 1 and 100."),
2108 i18n(op,
"Your new wimpy level is %d."),
2122 if (*params ==
'\0')
2129 i18n(op,
"You are braced."));
2132 i18n(op,
"Not braced."));
2147 int counter = 0, removecount = 0;
2149 if (*params ==
'\0') {
2152 i18n(op,
"Your pets have been killed."));
2154 int target = atoi(params);
2156 object *ob = obl->
ob;
2159 if (++counter == target || (target == 0 && !
strcasecmp(ob->
name, params))) {
2167 if (removecount != 0)
2169 i18n(op,
"Killed %d pets."),
2173 i18n(op,
"Couldn't find any suitable pets to kill."));
2195 i18n(pl,
"passwd is maintained for older clients that do not support the account system. Please use the 'Password' button in your character selection screen to change your password."));
2210 int count = 0, proba;
2215 sstring trace, ttool, tspeed, race, tool, slevel, sexp;
2239 if (!trace || strcmp(trace,
"") == 0 || !ttool || strcmp(ttool,
"") == 0 || !tspeed || strcmp(tspeed,
"") == 0) {
2246 while (item && count < 10) {
2254 if (race && (!slevel || !sexp)) {
2255 LOG(
llevError,
"do_harvest: item %s without harvest_[level|exp]\n", inv->
name);
2258 if (race == trace && (!tool || tool == ttool))
2259 found[count++] = inv;
2268 inv = found[
rndm(0, count-1)];
2273 level = atoi(slevel);
2276 speed = atof(tspeed);
2278 speed = -speed*pl->
speed;
2283 if (level > skill->
level+10) {
2288 if (level >= skill->
level)
2290 proba = 10+skill->
level-level;
2291 else if (skill->
level <= level+10)
2292 proba = 10+(skill->
level-level)*2;
#define MSG_TYPE_COMMAND_MAPS
void draw_ext_info_format(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *format,...)
void command_petmode(object *op, const char *params)
void command_save(object *op, const char *params)
void command_afk(object *op, const char *params)
#define NUM_BODY_LOCATIONS
void command_malloc(object *op, const char *params)
void command_help(object *op, const char *params)
#define ST_GET_PARTY_PASSWORD
void display_who_entry(object *op, player *pl, const char *format)
void command_unarmed_skill(object *op, const char *params)
void command_who(object *op, const char *params)
command_array_struct Commands[]
const int WizCommandsSize
void roll_again(object *op)
int64_t level_exp(int level, double expmul)
int check_name(player *me, const char *name)
void command_wizpass(object *op, const char *params)
void command_maps(object *op, const char *params)
bool check_password(const char *typed, const char *crypted)
region * get_region_by_name(const char *region_name)
#define MSG_TYPE_COMMAND_CONFIG
void player_get_title(const struct pl *pl, char *buf, size_t bufsize)
EXTERN int num_animations
void command_motd(object *op, const char *params)
char who_wiz_format[MAX_BUF]
int region_is_child_of_region(const region *child, const region *r)
uint32_t map_size(mapstruct *m)
EXTERN objectlink * first_friendly_object
void object_copy_with_inv(const object *src_ob, object *dest_ob)
void command_dumpallobjects(object *op, const char *params)
int save_player(object *op, int flag)
void free_string(sstring str)
signed long object_sum_weight(object *op)
void command_brace(object *op, const char *params)
const char * object_get_value(const object *op, const char *const key)
#define ST_CHANGE_PASSWORD_CONFIRM
void command_kill_pets(object *op, const char *params)
struct treasureliststruct * next
short freearr_x[SIZEOFFREE]
#define ST_CONFIRM_PASSWORD
int object_count_active(void)
region * get_region_by_map(mapstruct *m)
DIR * opendir(const char *)
void command_dumpallmaps(object *op, const char *params)
void command_dumpmap(object *op, const char *params)
void dump_all_archetypes(void)
void command_resistances(object *op, const char *params)
int checkbanned(const char *login, const char *host)
void object_dump_all(void)
#define ST_CHANGE_PASSWORD_NEW
player * find_player(const char *plname)
body_locations_struct body_locations[NUM_BODY_LOCATIONS]
void remove_friendly_object(object *op)
uint32_t get_weight_limit(int stat)
#define MSG_TYPE_COMMAND_STATISTICS
void pets_terminate_all(object *owner)
void draw_ext_info(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *message)
void command_whereami(object *op, const char *params)
const int CommunicationCommandSize
void command_debug(object *op, const char *params)
#define MAP_WHEN_RESET(m)
region * get_region_from_string(const char *name)
void command_dumpfriendlyobjects(object *op, const char *params)
short freearr_y[SIZEOFFREE]
void hiscore_display(object *op, int max, const char *match)
void get_name(object *op)
void current_region_info(object *op)
#define MSG_TYPE_ADMIN_DM
int rndm(int min, int max)
void command_printlos(object *op, const char *params)
const char * get_region_longname(const region *r)
void command_fix_me(object *op, const char *params)
int player_has_own_title(const struct pl *pl)
struct obj * chosen_skill
int object_set_value(object *op, const char *key, const char *value, int add_key)
void object_free_drop_inventory(object *ob)
object * object_insert_in_map_at(object *op, mapstruct *m, object *originator, int flag, int x, int y)
struct artifactliststruct * next
object * object_new(void)
void player_set_own_title(struct pl *pl, const char *title)
object * object_insert_in_ob(object *op, object *where)
void send_query(socket_struct *ns, uint8_t flags, const char *text)
void command_players(object *op, const char *params)
#define MSG_TYPE_COMMAND_ERROR
void command_wizcast(object *op, const char *params)
void command_passwd(object *pl, const char *params)
static bool IS_PLAYER(object *op)
void get_password(object *op)
int is_dragon_pl(const object *op)
void receive_player_password(object *op)
void player_set_state(player *pl, uint8_t state)
void command_rules(object *op, const char *params)
void command_applymode(object *op, const char *params)
int object_count_free(void)
void do_harvest(object *pl, int dir, object *skill)
void command_mapinfo(object *op, const char *params)
static void show_commands(object *op, int what)
#define CS_QUERY_SINGLECHAR
#define MSG_TYPE_COMMAND_WHO
EXTERN const char *const change_resist_msg[NROFATTACKS]
EXTERN Animations * animations
char * ss_dump_table(int what, char *buf, size_t size)
#define MSG_TYPE_SKILL_FAILURE
void command_hiscore(object *op, const char *params)
EXTERN treasurelist * first_treasurelist
void time_info(object *op)
char d_name[_MAX_FNAME+1]
void command_listen(object *op, const char *params)
unsigned __int64 uint64_t
struct regiondef * parent
void command_whereabouts(object *op, const char *params)
#define QUERY_FLAG(xyz, p)
#define MSG_TYPE_ADMIN_VERSION
#define CLEAR_FLAG(xyz, p)
EXTERN artifactlist * first_artifactlist
EXTERN const char *const attacktype_desc[NROFATTACKS]
void change_exp(object *op, int64_t exp, const char *skill_name, int flag)
void command_language(object *op, const char *params)
void command_news(object *op, const char *params)
void dump_map(const mapstruct *m)
command_array_struct WizCommands[]
void command_body(object *op, const char *params)
int players_on_map(mapstruct *m, int show_all)
void command_wimpy(object *op, const char *params)
void command_sound(object *op, const char *params)
int16_t resist[NROFATTACKS]
EXTERN long nrofartifacts
EXTERN long nrofallowedstr
void command_showpets(object *op, const char *params)
void command_ssdumptable(object *op, const char *params)
int8_t body_info[NUM_BODY_LOCATIONS]
void print_los(object *op)
#define FREE_AND_COPY(sv, nv)
#define MSG_TYPE_COMMAND_MALLOC
static void malloc_info(object *op)
void command_time(object *op, const char *params)
void command_statistics(object *pl, const char *params)
sstring i18n_get_language_code(int language)
void command_title(object *op, const char *params)
void check_login(object *op, int check_pass)
void command_strings(object *op, const char *params)
void arch_info(object *op)
#define MSG_TYPE_COMMAND_INFO
struct dirent * readdir(DIR *)
void command_peaceful(object *op, const char *params)
command_array_struct CommunicationCommands[]
#define ST_CHANGE_PASSWORD_OLD
void ss_dump_statistics(char *buf, size_t size)
static void help_topics(object *op, int what)
int object_count_used(void)
void send_news(const object *op)
#define MSG_TYPE_COMMAND_BODY
void send_rules(const object *op)
sstring add_string(const char *str)
const char * get_name_of_region_for_map(const mapstruct *m)
EXTERN player * first_player
void get_who_escape_code_value(char *return_val, int size, const char letter, player *pl)
#define GET_MAP_OB(M, X, Y)
int strcasecmp(const char *s1, const char *s2)
int i18n_find_language_by_code(const char *code)
int get_map_flags(mapstruct *oldmap, mapstruct **newmap, int16_t x, int16_t y, int16_t *nx, int16_t *ny)
void LOG(LogLevel logLevel, const char *format,...)
#define CS_QUERY_HIDEINPUT
void receive_player_name(object *op)
EXTERN region * first_region
void command_archs(object *op, const char *params)
int object_find_free_spot(const object *ob, mapstruct *m, int x, int y, int start, int stop)
void command_dumpallarchetypes(object *op, const char *params)
void map_info(object *op, const char *search)
void dump_friendly_objects(void)
void command_quit(object *op, const char *params)
int random_roll(int min, int max, const object *op, int goodbad)
void command_usekeys(object *op, const char *params)
void command_bowmode(object *op, const char *params)
object * object_find_by_type_and_arch_name(const object *who, int type, const char *name)
int onoff_value(const char *line)
const char * unarmed_skill
char const * newhash(char const *password)
void fix_object(object *op)
const char * i18n(const object *who, const char *code)
void list_players(object *op, region *reg, partylist *party)
EXTERN mapstruct * first_map
EXTERN archetype * first_archetype
object * find_skill_by_name(object *who, const char *name)
void command_version(object *op, const char *params)
object * object_get_owner(object *op)
static int find_help_file(const char *name, const char *language, int wiz, char *path, int length)
#define FOR_INV_PREPARE(op_, it_)
void object_remove(object *op)
const char * get_region_msg(const region *r)
void i18n_list_languages(object *who)
int8_t body_used[NUM_BODY_LOCATIONS]
int atnr_is_dragon_enabled(int attacknr)
void current_map_info(object *op)
static int name_cmp(const chars_names *c1, const chars_names *c2)
void display_motd(const object *op)
EXTERN long nroftreasures