77 "You can't do that to yourself.");
82 "That player is in no state for that right now.");
103 "Popped item from stack, %d left.",
131 "Stacked item was removed!");
163 "Item stacked as %d.",
196 int item_tag, item_position;
202 if (**params ==
'\0') {
210 while (**params ==
' ')
214 if (sscanf(*params,
"%d", &item_tag)) {
216 while (isdigit(**params))
220 while (**params ==
' ')
242 if (sscanf(*params,
"$%d", &item_position)) {
246 while (isdigit(**params))
248 while (**params ==
' ')
255 "No such stack item %d!",
265 "Stack item %d was removed.",
276 if (!strncmp(*params,
"me", 2)) {
283 while (**params ==
' ')
310 "loadtest will stress server through teleporting at different map places. " 311 "Use at your own risk. Very long loop used so server may have to be reset. " 312 "type loadtest TRUE to run");
318 if (strncmp(params,
"TRUE", 4))
333 op->contr->hidden = 0;
337 "You are no longer hidden from other players");
340 "%s has entered the game.", op->name);
352 if (op->contr->hidden) {
357 "The Dungeon Master has arrived!");
360 op->contr->hidden = 1;
362 "Other players will no longer see you.");
367 "The Dungeon Master is gone..");
371 "%s leaves the game.",
402 if (params[0] ==
'#')
421 if (*params ==
'\0' || !(str = strchr(params,
' '))) {
423 "Usage: set_god player god");
431 "Set whose god - can not find object %s?",
440 if (ob->type != PLAYER) {
442 "%s is not a player - can not change its god",
470 if ((*params ==
'\0' || !strcmp(pl->
ob->name, params)) && pl->
ob != op) {
482 "%s is kicked out of the game.",
484 strcpy(op->contr->killer,
"left");
527 if (*params ==
'\0') {
529 "Usage: banish <player>.");
539 if ((banishfile = fopen(buf,
"a")) == NULL) {
542 "Could not find banish_file.");
551 fprintf(banishfile,
"# %s (%s) banned by %s at %s\n", pl->
ob->name, pl->
socket.
host, op->name, ctime(&now));
552 fprintf(banishfile,
"*@%s\n", pl->
socket.
host);
562 "%s banishes %s from the land!",
563 op->name, pl->
ob->name);
593 "Overlay save error!");
596 "Current map has been saved as an overlay.");
612 if (!stat(filename, &stats))
615 "Overlay successfully removed.");
618 "Overlay couldn't be removed.");
621 "No overlay for current map.");
635 if (*params ==
'\0') {
637 "Usage: toggle_shout <player>.");
645 if (pl->
ob->contr->no_shout == 0) {
646 pl->
ob->contr->no_shout = 1;
649 "You have been muzzled by the DM!");
659 pl->
ob->contr->no_shout = 0;
661 "You are allowed to shout and chat again.");
663 "You remove %s's muzzle.",
676 if (strlen(params) == 0) {
684 }
else if (strcmp(params,
"cancel") == 0) {
690 LOG(
llevInfo,
"Server shutdown cancelled by %s.\n", op->name);
695 }
else if (strncmp(params,
"now", 3) == 0) {
700 LOG(
llevInfo,
"Server shutdown initiated by %s.\n", op->name);
703 int minutes = atoi(params);
705 if (minutes > 0 && minutes <= 720) {
708 "Server will shut down in %d minutes.", minutes);
710 LOG(
llevInfo,
"Server shutdown initiated by %s in %d minutes.\n", op->name, minutes);
714 "Please specify a reasonable time in minutes.");
731 if (*params ==
'\0') {
733 "Go to what level?");
752 if (*params ==
'\0') {
754 "Usage: freeze [ticks] <player>.");
758 ticks = atoi(params);
760 while ((isdigit(*params) || isspace(*params)) && *params != 0)
764 "Usage: freeze [ticks] <player>.");
775 "You have been frozen by the DM!");
778 "You freeze %s for %d ticks",
779 pl->
ob->name, ticks);
781 pl->
ob->speed_left = -(pl->
ob->speed*ticks);
797 if (who->type != PLAYER)
810 if (cur == who->map && x == who->x && y == who->y)
830 if (*params ==
'\0') {
832 "Usage: arrest <player>.");
843 "Can't jail player, there is no map to hold them");
849 "Can't jail player, map loading issue or already in jail's position");
855 "You have been arrested.");
859 LOG(
llevInfo,
"Player %s arrested by %s\n", pl->
ob->name, op->name);
877 if (*params ==
'\0') {
879 "Usage: summon <player>.");
890 "Can not find a free spot to place summoned player.");
901 "You are summoned.");
924 if (*params ==
'\0') {
926 "Usage: teleport <player>.");
933 "No such player or ambiguous name.");
940 "Can not find a free spot to teleport to.");
950 if (!op->contr->hidden)
952 "You see a portal open.");
954 "You teleport to %s",
985 int magic,
set_magic = 0, set_nrof = 0, gotquote, gotspace;
987 char *cp, *bp, *bp2, *bp3, *endline, cpy[
MAX_BUF];
988 archetype *at, *at_spell = NULL;
994 if (*params ==
'\0') {
996 "Usage: create [nr] [magic] <archetype> [ of <artifact>] [variable_to_patch setting]");
1003 endline = bp+strlen(bp);
1005 if (sscanf(bp,
"%u ", &nrof)) {
1006 if ((bp = strchr(cpy,
' ')) == NULL) {
1008 "Usage: create [nr] [magic] <archetype> [ of <artifact>] [variable_to_patch setting]");
1013 LOG(
llevDebug,
"%s creates: (%u) %s\n", op->name, nrof, bp);
1015 if (sscanf(bp,
"%d ", &magic)) {
1016 if ((bp = strchr(bp,
' ')) == NULL) {
1018 "Usage: create [nr] [magic] <archetype> [ of <artifact>] [variable_to_patch setting]");
1023 LOG(
llevDebug,
"%s creates: (%d) (%d) %s\n", op->name, nrof, magic, bp);
1025 if ((cp = strstr(bp,
" of ")) != NULL) {
1029 for (bp2 = bp; *bp2; bp2++) {
1039 "No such archetype.");
1044 char spell_name[
MAX_BUF], *fsp = NULL;
1053 if (!at_spell || at_spell->clone.type != SPELL)
1055 if (!at_spell || at_spell->clone.type != SPELL) {
1057 fsp = strchr(spell_name,
' ');
1064 if (at_spell && at_spell->clone.type == SPELL)
1065 bp2 = cp+strlen(spell_name)+1;
1078 "No artifact list for type %d\n",
1087 }
while (art != NULL);
1090 "No such artifact ([%d] of %s)",
1091 at->clone.type, cp);
1094 LOG(
llevDebug,
"%s creates: (%d) (%d) (%s) of (%s)\n", op->name, set_nrof ? nrof : 0, set_magic ? magic : 0, bp, cp);
1099 if ((at->clone.type == ROD || at->clone.type == POTION) && !at_spell && (!art || !art->
item->other_arch)) {
1101 "Unable to find spell %s for object that needs it, or it is of wrong type",
1105 if ((at->clone.type == WAND || at->clone.type == SCROLL || at->clone.type == SPELLBOOK)
1108 "Unable to find spell %s for object that needs it, or it is of wrong type",
1138 while (*bp2 && bp2 <= endline) {
1142 for (bp3 = bp2; *bp3 && gotspace < 2 && gotquote < 2; bp3++) {
1156 }
else if (*bp3 ==
' ') {
1166 if (gotspace == 2 || gotquote == 2) {
1169 }
else if (*bp3 ==
'\0')
1172 if ((gotquote && gotquote != 2)
1173 || (gotspace != 2 && gotquote != 2)) {
1182 "Malformed create line: %s",
1191 "Unknown variable %s",
1196 tmp->name, tmp->count, bp2);
1200 if (at->clone.nrof) {
1207 if (at->clone.randomitems != NULL && !at_spell) {
1208 create_treasure(at->clone.randomitems, tmp, 0, op->map->difficulty, 0);
1227 for (i = 0; i < (set_nrof ? nrof : 1); i++) {
1229 object *prev = NULL, *head = NULL, *dup;
1231 for (atmp = at; atmp != NULL; atmp = atmp->more) {
1247 dup->x = op->x+dup->arch->clone.x;
1248 dup->y = op->y+dup->arch->clone.y;
1259 object *check = head;
1264 size_x =
MAX(size_x, check->arch->clone.x);
1265 size_y =
MAX(size_y, check->arch->clone.y);
1266 check = check->more;
1269 if (
out_of_map(op->map, head->x+size_x, head->y+size_y)) {
1270 if (head->x < size_x || head->y < size_y) {
1274 "Object too big to insert in map, or wrong position.");
1283 check = check->more;
1297 if (at->clone.randomitems != NULL && !at_spell) {
1298 create_treasure(at->clone.randomitems, head, 0, op->map->difficulty, 0);
1325 if (*params ==
'\0') {
1332 "Inventory of what object (nr)?");
1379 "Object is marked original");
1396 "Aggression turned OFF");
1401 "Aggression turned ON");
1424 if (*params !=
'\0') {
1425 if (sscanf(params,
"%d", &i))
1427 else if (sscanf(params,
"%s", buf))
1430 if (victim == NULL) {
1432 "Patch what object (nr)?");
1438 "As insane as you are, I cannot allow you to possess yourself.");
1446 victim->type = PLAYER;
1457 for (i = 0; i < NUM_BODY_LOCATIONS; i++)
1458 if (i == 1 || i == 6 || i == 8 || i == 9)
1459 victim->body_info[i] = 2;
1461 victim->body_info[i] = 1;
1479 const char *arg, *arg2;
1491 "Patch what values?");
1495 if ((arg2 = strchr(arg,
' ')))
1501 "Unknown variable %s",
1506 tmp->name, tmp->count, arg, arg2);
1525 "Remove what object (nr)?");
1529 if (tmp->type == PLAYER) {
1531 "Unable to remove a player!");
1540 "%s is already removed!",
1551 if (tmp->speed != 0) {
1573 "Free what object (nr)?");
1584 "Warning: item was not removed, will do so now.");
1602 object *skillob = NULL;
1606 if ((*params ==
'\0')
1608 || ((q = sscanf(params,
"%s %d %[^\r\n]", buf, &i, skill)) < 2)) {
1610 "Usage: addexp player quantity [skill].");
1628 "Unable to find skill %s in %s",
1634 skillob->stats.exp += i;
1639 pl->
ob->stats.exp += i;
1658 if (*params ==
'\0' || !sscanf(params,
"%d", &i)) {
1660 "Current speed is %d",
1668 "The speed is changed to %d.",
1688 if (*params ==
'\0') {
1702 "[Fixed]Statistics for %s:", pl->
ob->name);
1705 "[fixed]Str : %-2d H.P. : %-4d MAX : %d",
1706 pl->
ob->stats.Str, pl->
ob->stats.hp, pl->
ob->stats.maxhp);
1709 "[fixed]Dex : %-2d S.P. : %-4d MAX : %d",
1710 pl->
ob->stats.Dex, pl->
ob->stats.sp, pl->
ob->stats.maxsp);
1713 "[fixed]Con : %-2d AC : %-4d WC : %d",
1714 pl->
ob->stats.Con, pl->
ob->stats.ac, pl->
ob->stats.wc);
1717 "[fixed]Int : %-2d Damage : %d",
1718 pl->
ob->stats.Int, pl->
ob->stats.dam);
1721 "[fixed]Wis : %-2d EXP : %"FMT64,
1722 pl->
ob->stats.Wis, pl->
ob->stats.exp);
1725 "[fixed]Pow : %-2d Grace : %d",
1726 pl->
ob->stats.Pow, pl->
ob->stats.grace);
1729 "[fixed]Cha : %-2d Food : %d",
1730 pl->
ob->stats.Cha, pl->
ob->stats.food);
1743 char thing[20], thing2[20];
1751 || sscanf(params,
"%s %s %d", thing, thing2, &iii) != 3
1752 || thing[0] ==
'\0') {
1758 if (thing2[0] ==
'\0') {
1760 "You can't change that.");
1766 "Illegal range of stat.\n");
1771 if (!strcmp(pl->
ob->name, thing)) {
1774 if (!strcmp(
"str", thing2))
1776 if (!strcmp(
"dex", thing2))
1778 if (!strcmp(
"con", thing2))
1780 if (!strcmp(
"wis", thing2))
1782 if (!strcmp(
"cha", thing2))
1784 if (!strcmp(
"int", thing2))
1786 if (!strcmp(
"pow", thing2))
1789 "%s has been altered.",
1810 object *dummy = NULL, *tmp = NULL;
1812 const char *space, *confirmation = NULL;
1815 if (*params ==
'\0') {
1821 space = strchr(params,
' ');
1822 if (space != NULL) {
1823 confirmation = params;
1828 if (strcmp(params,
".") == 0) {
1829 strlcpy(path, op->map->path,
sizeof(path));
1842 if (m->
unique && (op->map == m)) {
1845 "Cannot reset a unique player map while on it. Use " 1846 "'reset full-reset %s' while standing somewhere else.",
1851 if (strncmp(
"full-reset", confirmation, strlen(
"full-reset"))) {
1861 if ((op->contr && op->contr->transport) && (op->map == m)) {
1863 "You need to disembark first.");
1871 LOG(
llevError,
"Tried to swap out map which was not in memory.\n");
1880 if (strncmp(m->
path,
"/random/", 8) == 0) {
1890 "You cannot reset a random map when inside it.");
1908 int playercount = 0;
1919 "Reset failed, error code: %d.", res);
1922 "Reset failed, couldn't swap map, the following players are on it:");
1924 if (pl->
ob->map == m && pl->
ob != op) {
1932 "hmm, I don't see any other players on this map, something else is the problem.");
1966 if (confirmation == NULL) {
1969 "Use 'reset full-reset %s' to fully reset the map.", params);
1985 if (op->contr->followed_player)
1990 if (op->contr->hidden) {
1994 "The Dungeon Master is gone..");
2019 static int checkdm(
object *op,
const char *pl_name,
const char *pl_passwd,
const char *pl_host) {
2022 char line_buf[160], name[160], passwd[160], host[160];
2024 #ifdef RESTRICTIVE_DM 2025 *pl_name = op->name ? op->name :
"*";
2029 if ((dmfile = fopen(buf,
"r")) == NULL) {
2034 while (fgets(line_buf, 160, dmfile) != NULL) {
2036 if (line_buf[0] ==
'#' || line_buf[0] ==
'\n')
2038 if (sscanf(line_buf,
"%[^:]:%[^:]:%s\n", name, passwd, host) != 3) {
2039 LOG(
llevError,
"Warning - malformed dm file entry: %s\n", line_buf);
2040 }
else if ((!strcmp(name,
"*") || (pl_name && !strcmp(pl_name, name)))
2041 && (!strcmp(passwd,
"*") || !strcmp(passwd, pl_passwd))
2042 && (!strcmp(host,
"*") || !strcmp(host, pl_host))) {
2071 "You are already the Dungeon Master!");
2075 if (
checkdm(op, op->name, (*params !=
'\0' ? params :
"*"), op->contr->socket.host)) {
2081 "Ok, you are the Dungeon Master!");
2089 op->contr->write_buf[0] =
'\0';
2094 "The Dungeon Master has arrived!");
2100 "Sorry Pal, I don't think so.");
2101 op->contr->write_buf[0] =
'\0';
2130 op->invisible += 100;
2133 "You turn invisible.");
2158 size_t spell_name_length;
2164 if (ar->clone.type != SPELL)
2167 if (strncmp(ar->name,
"spelldirect_", 12) == 0)
2170 if (strcmp(ar->clone.name, spell_name) != 0)
2173 if (found != NULL) {
2174 if (!conflict_found) {
2177 "More than one archetype matches the spell name %s:",
2201 spell_name_length = strlen(spell_name);
2206 if (ar->clone.type != SPELL)
2209 if (strncmp(ar->name,
"spelldirect_", 12) == 0)
2212 if (strncmp(ar->clone.name, spell_name, spell_name_length) != 0)
2215 if (found != NULL) {
2216 if (!conflict_found) {
2219 "More than one spell matches %s:",
2244 "The spell %s does not exist.",
2262 if (op->contr == NULL || *params ==
'\0') {
2264 "Which spell do you want to learn?");
2275 "You already know the spell %s.",
2320 if (op->contr == NULL || *params ==
'\0') {
2322 "Which spell do you want to forget?");
2327 if (spell == NULL) {
2329 "You do not know the spell %s.",
2362 if (*params ==
'\0') {
2364 "Load which plugin?");
2371 LOG(
llevInfo,
"DM %s loaded plugin %s\n", op->name, params);
2373 "Plugin %s successfully loaded.",
2377 "Could not load plugin %s.",
2392 if (*params ==
'\0') {
2394 "Remove which plugin?");
2399 LOG(
llevInfo,
"DM %s unloaded plugin %s\n", op->name, params);
2401 "Plugin %s successfully removed.",
2405 "Could not remove plugin %s.",
2470 "Item stack contents:");
2477 item, display->name, display->count);
2481 " %d : (lost item: %d)",
2495 op->contr->stack_position = 0;
2497 "Item stack cleared.");
2520 object *left, *right;
2523 int left_from, right_from;
2528 "Compare to what item?");
2540 "Compare what item?");
2545 "Item difference:");
2554 if (op->contr->stack_position > 1) {
2558 "(Note: first item taken from undertop)");
2568 if (*diff ==
'\0') {
2584 object *left, *right, *inserted;
2585 int left_from, right_from;
2591 "Insert into what object?");
2603 "Insert what item?");
2614 if (op->contr->stack_position > 1) {
2618 "(Note: item to insert into taken from undertop)");
2625 if (left == right) {
2627 "Can't insert an object into itself!");
2631 if (right->type == PLAYER) {
2633 "Can't insert a player into something!");
2640 if (left->type == PLAYER) {
2641 if (inserted != right)
2648 "Inserted %s in %s",
2663 int maps_used = 0, mapmem = 0, objects_used = 0, x, y;
2665 for (mp = styles; mp != NULL; mp = mp->
next) {
2677 "[fixed]Style maps loaded: %d",
2680 "[fixed]Memory used, not");
2682 "[fixed]including objects: %d",
2685 "[fixed]Style objects: %d",
2688 "[fixed]Mem for objects: %lu",
2689 (
unsigned long)(objects_used*
sizeof(
object)));
2703 if (*params ==
'\0') {
2704 if (op->contr->followed_player != NULL) {
2716 if (other == op->contr) {
2721 if (op->contr->followed_player)
2724 op->contr->followed_player =
add_string(other->
ob->name);
2761 if (op && op->below) {
2775 if (op && op->above) {
#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_unloadplugin(object *op, const char *params)
void command_patch(object *op, const char *params)
object * lookup_spell_by_name(object *op, const char *spname)
void command_diff(object *op, const char *params)
void command_dumpbelow(object *op, const char *params)
void show_skills(object *op, const char *search)
uint8_t create_home_portals
void command_forget_spell(object *op, const char *params)
void command_dm(object *op, const char *params)
int64_t check_exp_adjust(const object *op, int64_t exp)
void object_free(object *ob, int flags)
void enter_exit(object *op, object *exit_ob)
void command_loadtest(object *op, const char *params)
static object * get_dm_object(player *pl, const char **params, int *from)
object * check_spell_known(object *op, const char *name)
void free_quest_definitions(void)
void command_shutdown(object *op, const char *params)
uint8_t spell_encumbrance
void object_give_identified_properties(object *op)
void do_forget_spell(object *op, const char *spell)
const artifactlist * find_artifactlist(int type)
static int do_wizard_dm(object *op, const char *params, int silent)
uint8_t death_penalty_level
void command_hide(object *op, const char *params)
void do_some_living(object *op)
void command_learn_spell(object *op, const char *params)
uint32_t map_size(mapstruct *m)
void command_follow(object *op, const char *params)
void command_dump(object *op, const char *params)
struct artifactstruct * items
void command_learn_special_prayer(object *op, const char *params)
void command_stack_pop(object *op, const char *params)
void command_kick(object *op, const char *params)
int save_player(object *op, int flag)
StringBuffer * stringbuffer_new(void)
void command_overlay_reset(object *op, const char *params)
void command_stack_list(object *op, const char *params)
void esrv_update_item(int flags, object *pl, object *op)
void command_abil(object *op, const char *params)
short freearr_x[SIZEOFFREE]
void command_dmhide(object *op, const char *params)
void esrv_send_inventory(object *pl, object *op)
void command_speed(object *op, const char *params)
void command_summon(object *op, const char *params)
void command_create(object *op, const char *params)
void command_possess(object *op, const char *params)
void object_update(object *op, int action)
uint8_t death_penalty_ratio
const object * find_god(const char *name)
void command_insert_into(object *op, const char *params)
int swap_map(mapstruct *map)
void command_freeze(object *op, const char *params)
void draw_ext_info(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *message)
void command_purge_quest(object *op, const char *param)
object * get_jail_exit(object *op)
void command_inventory(object *op, const char *params)
archetype * try_find_archetype(const char *name)
void events_execute_global_event(int eventcode,...)
short freearr_y[SIZEOFFREE]
#define FLAG_KNOWN_MAGICAL
void create_treasure(treasurelist *t, object *op, int flag, int difficulty, int tries)
#define MSG_TYPE_ADMIN_DM
void command_mon_aggr(object *op, const char *params)
void object_free_drop_inventory(object *ob)
void esrv_new_player(player *pl, uint32_t weight)
int set_variable(object *op, const char *buf)
object * object_insert_in_map_at(object *op, mapstruct *m, object *originator, int flag, int x, int y)
void flush_old_maps(void)
void player_lvl_adj(object *who, object *op)
void object_dump(const object *op, StringBuffer *sb)
int legal_artifact_combination(const object *op, const artifact *art)
static void do_wizard_hide(object *op, int silent_dm)
object * object_new(void)
#define FLAG_OBJ_ORIGINAL
object * object_find_by_tag_global(tag_t i)
object * object_insert_in_ob(object *op, object *where)
#define MSG_TYPE_COMMAND_SUCCESS
#define MSG_TYPE_COMMAND_ERROR
object * arch_to_object(archetype *at)
#define FLAG_UNAGGRESSIVE
#define MSG_TYPE_ADMIN_PLAYER
void clear_los(player *pl)
void monster_check_apply_all(object *monster)
int plugins_init_plugin(const char *libfile)
static int checkdm(object *op, const char *pl_name, const char *pl_passwd, const char *pl_host)
static void dm_stack_push(player *pl, tag_t item)
char * path_combine_and_normalize(const char *src, const char *dst, char *path, size_t size)
void set_max_time(long t)
static object * dm_stack_peek(player *pl)
void command_free(object *op, const char *params)
void command_addexp(object *op, const char *params)
void command_banish(object *op, const char *params)
static void command_kick2(object *op, const char *params)
void hiscore_check(object *op, int quiet)
object * object_find_by_name_global(const char *str)
void do_learn_spell(object *op, object *spell, int special_prayer)
int plugins_remove_plugin(const char *id)
archetype * get_next_archetype(archetype *current)
#define FREE_AND_CLEAR_STR(xyz)
void command_setgod(object *op, const char *params)
static object * get_spell_by_name(object *op, const char *spell_name)
#define QUERY_FLAG(xyz, p)
#define CLEAR_FLAG(xyz, p)
#define MSG_TYPE_COMMAND_DEBUG
void plugins_display_list(object *op)
void command_dumpabove(object *op, const char *params)
int player_arrest(object *who)
void give_artifact_abilities(object *op, const object *artifact)
void command_listplugins(object *op, const char *params)
void command_help(object *op, const char *params)
static void unhide(object *op)
static void do_dump(object *who, object *what)
static void set_magic(int difficulty, object *op, int max_magic, int flags)
void inventory(object *op, object *inv)
object * object_create_arch(archetype *at)
void calc_perm_exp(object *op)
void command_invisible(object *op, const char *params)
int save_map(mapstruct *m, int flag)
uint8_t permanent_exp_ratio
uint16_t set_friendly_fire
int become_follower(object *op, const object *new_god)
mapstruct * has_been_loaded(const char *name)
uint8_t no_player_stealing
void command_overlay_save(object *op, const char *params)
void command_stack_clear(object *op, const char *params)
void object_set_enemy(object *op, object *enemy)
void command_purge_quest_definitions(object *op, const char *param)
int out_of_map(mapstruct *m, int x, int y)
void command_nowiz(object *op, const char *params)
void command_loadplugin(object *op, const char *params)
void command_stack_push(object *op, const char *params)
void command_arrest(object *op, const char *params)
void update_los(object *op)
sstring add_string(const char *str)
EXTERN player * first_player
void command_skills(object *op, const char *params)
archetype * find_archetype_by_object_name(const char *name)
void object_copy(const object *src_ob, object *dest_ob)
void LOG(LogLevel logLevel, const char *format,...)
#define FOR_MAP_PREPARE(map_, mx_, my_, it_)
static player * get_other_player_from_name(object *op, const char *name)
void set_abs_magic(object *op, int magic)
int object_find_free_spot(const object *ob, mapstruct *m, int x, int y, int start, int stop)
void command_settings(object *op, const char *ignored)
void query_name(const object *op, char *buf, size_t size)
int allow_denied_spells_writing
void create_overlay_pathname(const char *name, char *buf, size_t size)
int is_identifiable_type(const object *op)
void get_ob_diff(StringBuffer *sb, const object *op, const object *op2)
void command_stats(object *op, const char *params)
void command_goto(object *op, const char *params)
void map_remove_unique_files(const mapstruct *map)
#define SAVE_ERROR_PLAYER
void do_goto(object *op, const char *name, int x, int y)
uint8_t spell_failure_effects
void command_remove(object *op, const char *params)
void fix_object(object *op)
const char * i18n(const object *who, const char *code)
player * find_player_partial_name(const char *plname)
void command_reset(object *op, const char *params)
static object * find_object_both(const char *params)
object * find_skill_by_name(object *who, const char *name)
void object_update_speed(object *op)
void command_teleport(object *op, const char *params)
static void command_learn_spell_or_prayer(object *op, const char *params, int special_prayer)
#define SAVE_MODE_OVERLAY
char * stringbuffer_finish(StringBuffer *sb)
size_t strlcpy(char *dst, const char *src, size_t size)
void command_toggle_shout(object *op, const char *params)
static void dm_stack_pop(player *pl)
void object_remove(object *op)
void command_style_map_info(object *op, const char *params)
struct artifactstruct * next
#define MSG_TYPE_COMMAND_DM