Go to the documentation of this file.
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;
214 if (sscanf(*
params,
"%d", &item_tag)) {
242 if (sscanf(*
params,
"$%d", &item_position)) {
255 "No such stack item %d!",
265 "Stack item %d was removed.",
276 if (!strncmp(*
params,
"me", 2)) {
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.",
424 "Usage: set_god player god");
432 "Set whose god - can not find object %s?",
443 "%s is not a player - can not change its god",
483 "%s is kicked out of the game.",
485 strcpy(
op->contr->killer,
"left");
530 "Usage: banish <player>.");
540 if ((banishfile = fopen(
buf,
"a")) == NULL) {
543 "Could not find banish_file.");
552 fprintf(banishfile,
"# %s (%s) banned by %s at %s\n",
pl->
ob->
name,
pl->
socket.
host,
op->name, ctime(&now));
563 "%s banishes %s from the land!",
595 "Overlay save error!");
598 "Current map has been saved as an overlay.");
618 "Overlay successfully removed.");
621 "Overlay couldn't be removed.");
624 "No overlay for current map.");
640 "Usage: toggle_shout <player>.");
652 "You have been muzzled by the DM!");
664 "You are allowed to shout and chat again.");
666 "You remove %s's muzzle.",
679 if (strlen(
params) == 0) {
693 }
else if (strcmp(
params,
"cancel") == 0) {
697 LOG(
llevInfo,
"Server shutdown cancelled by %s.\n",
op->name);
703 }
else if (strncmp(
params,
"now", 3) == 0) {
709 LOG(
llevInfo,
"Server shutdown initiated by %s.\n",
op->name);
710 }
else if (strcmp(
params,
"idle") == 0) {
716 LOG(
llevInfo,
"Server idle shutdown scheduled by %s.\n",
op->name);
719 int minutes = atoi(
params);
721 if (minutes > 0 && minutes <= 720) {
724 "Server will shut down in %d minutes.", minutes);
727 LOG(
llevInfo,
"Server shutdown scheduled in %d minutes by %s.\n", minutes,
op->name);
731 "Please specify a reasonable time in minutes.");
750 "Go to what level?");
771 "Usage: freeze [ticks] <player>.");
781 "Usage: freeze [ticks] <player>.");
792 "You have been frozen by the DM!");
795 "You freeze %s for %d ticks",
849 "Usage: arrest <player>.");
860 "Can't jail player, there is no map to hold them");
866 "Can't jail player, map loading issue or already in jail's position");
872 "You have been arrested.");
896 "Usage: summon <player>.");
907 "Can not find a free spot to place summoned player.");
918 "You are summoned.");
943 "Usage: teleport <player>.");
950 "No such player or ambiguous name.");
957 "Can not find a free spot to teleport to.");
967 if (!
op->contr->hidden)
969 "You see a portal open.");
971 "You teleport to %s",
1002 int magic,
set_magic = 0, set_nrof = 0, gotquote, gotspace;
1004 char *cp, *bp, *bp2, *bp3, *endline, cpy[
MAX_BUF];
1013 "Usage: create [nr] [magic] <archetype> [ of <artifact>] [variable_to_patch setting]");
1020 endline = bp+strlen(bp);
1022 if (sscanf(bp,
"%u ", &nrof)) {
1023 if ((bp = strchr(cpy,
' ')) == NULL) {
1025 "Usage: create [nr] [magic] <archetype> [ of <artifact>] [variable_to_patch setting]");
1032 if (sscanf(bp,
"%d ", &magic)) {
1033 if ((bp = strchr(bp,
' ')) == NULL) {
1035 "Usage: create [nr] [magic] <archetype> [ of <artifact>] [variable_to_patch setting]");
1040 LOG(
llevDebug,
"%s creates: (%d) (%d) %s\n",
op->name, nrof, magic, bp);
1042 if ((cp = strstr(bp,
" of ")) != NULL) {
1046 for (bp2 = bp; *bp2; bp2++) {
1056 "No such archetype.");
1061 char spell_name[
MAX_BUF], *fsp = NULL;
1074 fsp = strchr(spell_name,
' ');
1082 bp2 = cp+strlen(spell_name)+1;
1095 "No artifact list for type %d\n",
1104 }
while (art != NULL);
1107 "No such artifact ([%d] of %s)",
1111 LOG(
llevDebug,
"%s creates: (%d) (%d) (%s) of (%s)\n",
op->name, set_nrof ? nrof : 0,
set_magic ? magic : 0, bp, cp);
1118 "Unable to find spell %s for object that needs it, or it is of wrong type",
1125 "Unable to find spell %s for object that needs it, or it is of wrong type",
1154 while (*bp2 && bp2 <= endline) {
1158 for (bp3 = bp2; *bp3 && gotspace < 2 && gotquote < 2; bp3++) {
1172 }
else if (*bp3 ==
' ') {
1182 if (gotspace == 2 || gotquote == 2) {
1185 }
else if (*bp3 ==
'\0')
1188 if ((gotquote && gotquote != 2)
1189 || (gotspace != 2 && gotquote != 2)) {
1198 "Malformed create line: %s",
1207 "Unknown variable %s",
1212 tmp->name,
tmp->count, bp2);
1243 for (i = 0; i < (set_nrof ? nrof : 1); i++) {
1245 object *prev = NULL, *head = NULL, *dup;
1247 for (atmp = at; atmp != NULL; atmp = atmp->
more) {
1263 dup->x =
op->x+dup->arch->clone.x;
1264 dup->y =
op->y+dup->arch->clone.y;
1275 object *
check = head;
1290 "Object too big to insert in map, or wrong position.");
1348 "Inventory of what object (nr)?");
1395 "Object is marked original");
1413 "Aggression turned OFF");
1418 "Aggression turned ON");
1442 if (sscanf(
params,
"%d", &i))
1449 "Patch what object (nr)?");
1455 "As insane as you are, I cannot allow you to possess yourself.");
1475 if (i == 1 || i == 6 || i == 8 || i == 9)
1476 victim->body_info[i] = 2;
1478 victim->body_info[i] = 1;
1496 const char *arg, *arg2;
1508 "Patch what values?");
1512 if ((arg2 = strchr(arg,
' ')))
1518 "Unknown variable %s",
1523 tmp->name,
tmp->count, arg, arg2);
1567 "Remove what object (nr)?");
1573 "Unable to remove a player!");
1582 "%s is already removed!",
1593 if (
tmp->speed != 0) {
1615 "Free what object (nr)?");
1626 "Warning: item was not removed, will do so now.");
1636 if (sscanf(
params,
"%s %[^\n]", account_name, newpw) != 2) {
1638 "Usage: accountpasswd ACCOUNT PASSWORD");
1646 "Updated account password.");
1650 "Invalid characters in new password.");
1654 "Invalid characters in new password.");
1658 "Error changing password.");
1674 object *skillob = NULL;
1680 || ((
q = sscanf(
params,
"%s %d %[^\r\n]",
buf, &i, skill)) < 2)) {
1682 "Usage: addexp player quantity [skill].");
1700 "Unable to find skill %s in %s",
1732 "Current speed is %d",
1740 "The speed is changed to %d.",
1774 "[Fixed]Statistics for %s:",
pl->
ob->
name);
1777 "[fixed]Str : %-2d H.P. : %-4d MAX : %d",
1781 "[fixed]Dex : %-2d S.P. : %-4d MAX : %d",
1785 "[fixed]Con : %-2d AC : %-4d WC : %d",
1789 "[fixed]Int : %-2d Damage : %d",
1793 "[fixed]Wis : %-2d EXP : %"FMT64,
1797 "[fixed]Pow : %-2d Grace : %d",
1801 "[fixed]Cha : %-2d Food : %d",
1815 char thing[20], thing2[20];
1823 || sscanf(
params,
"%s %s %d", thing, thing2, &iii) != 3
1824 || thing[0] ==
'\0') {
1830 if (thing2[0] ==
'\0') {
1832 "You can't change that.");
1838 "Illegal range of stat.\n");
1843 if (!strcmp(
pl->
ob->
name, thing)) {
1846 if (!strcmp(
"str", thing2))
1848 if (!strcmp(
"dex", thing2))
1850 if (!strcmp(
"con", thing2))
1852 if (!strcmp(
"wis", thing2))
1854 if (!strcmp(
"cha", thing2))
1856 if (!strcmp(
"int", thing2))
1858 if (!strcmp(
"pow", thing2))
1861 "%s has been altered.",
1882 object *dummy = NULL, *
tmp = NULL;
1884 const char *space, *confirmation = NULL;
1893 space = strchr(
params,
' ');
1894 if (space != NULL) {
1900 if (strcmp(
params,
".") == 0) {
1914 if (
m->unique && (
op->map ==
m)) {
1917 "Cannot reset a unique player map while on it. Use "
1918 "'reset full-reset %s' while standing somewhere else.",
1923 if (strncmp(
"full-reset", confirmation, strlen(
"full-reset"))) {
1933 if ((
op->contr &&
op->contr->transport) && (
op->map ==
m)) {
1935 "You need to disembark first.");
1943 LOG(
llevError,
"Tried to swap out map which was not in memory.\n");
1952 if (strncmp(
m->path,
"/random/", 8) == 0) {
1962 "You cannot reset a random map when inside it.");
1991 "Reset failed, error code: %d.",
res);
1994 "Reset failed, couldn't swap map, the following players are on it:");
2004 "hmm, I don't see any other players on this map, something else is the problem.");
2038 if (confirmation == NULL) {
2041 "Use 'reset full-reset %s' to fully reset the map.",
params);
2061 if (
op->contr->hidden) {
2065 "The Dungeon Master is gone...");
2090 static int checkdm(
object *
op,
const char *pl_name,
const char *pl_passwd,
const char *pl_host) {
2093 char line_buf[160],
name[160], passwd[160], host[160];
2095 #ifdef RESTRICTIVE_DM
2096 *pl_name =
op->name ?
op->name :
"*";
2102 if ((dmfile = fopen(
buf,
"r")) == NULL) {
2107 while (fgets(line_buf, 160, dmfile) != NULL) {
2109 if (line_buf[0] ==
'#' || line_buf[0] ==
'\n')
2111 if (sscanf(line_buf,
"%[^:]:%[^:]:%s\n",
name, passwd, host) != 3) {
2112 LOG(
llevError,
"Warning - malformed dm file entry: %s\n", line_buf);
2113 }
else if ((!strcmp(
name,
"*") || (pl_name && !strcmp(pl_name,
name)))
2114 && (!strcmp(passwd,
"*") || !strcmp(passwd, pl_passwd))
2115 && (!strcmp(host,
"*") || !strcmp(host, pl_host))) {
2144 "You are already the Dungeon Master!");
2154 "Ok, you are the Dungeon Master!");
2166 "The Dungeon Master has arrived!");
2172 "Sorry Pal, I don't think so.");
2202 op->invisible += 100;
2205 "You turn invisible.");
2230 size_t spell_name_length;
2239 if (strncmp(ar->
name,
"spelldirect_", 12) == 0)
2242 if (strcmp(ar->
clone.
name, spell_name) != 0)
2245 if (
found != NULL) {
2246 if (!conflict_found) {
2249 "More than one archetype matches the spell name %s:",
2273 spell_name_length = strlen(spell_name);
2281 if (strncmp(ar->
name,
"spelldirect_", 12) == 0)
2284 if (strncmp(ar->
clone.
name, spell_name, spell_name_length) != 0)
2287 if (
found != NULL) {
2288 if (!conflict_found) {
2291 "More than one spell matches %s:",
2316 "The spell %s does not exist.",
2334 if (
op->contr == NULL || *
params ==
'\0') {
2336 "Which spell do you want to learn?");
2347 "You already know the spell %s.",
2392 if (
op->contr == NULL || *
params ==
'\0') {
2394 "Which spell do you want to forget?");
2399 if (spell == NULL) {
2401 "You do not know the spell %s.",
2437 "Load which plugin?");
2441 snprintf(
buf,
sizeof(
buf), LIBDIR
"/plugins/%s",
params);
2446 "Plugin %s successfully loaded.",
2450 "Could not load plugin %s.",
2467 "Remove which plugin?");
2474 "Plugin %s successfully removed.",
2479 "Could not remove plugin %s.",
2546 "Item stack contents:");
2557 " %d : (lost item: %d)",
2572 op->contr->stack_position = 0;
2574 "Item stack cleared.");
2597 object *left, *right;
2600 int left_from, right_from;
2605 "Compare to what item?");
2617 "Compare what item?");
2622 "Item difference:");
2631 if (
op->contr->stack_position > 1) {
2635 "(Note: first item taken from undertop)");
2645 if (*diff ==
'\0') {
2661 object *left, *right, *inserted;
2662 int left_from, right_from;
2668 "Insert into what object?");
2680 "Insert what item?");
2691 if (
op->contr->stack_position > 1) {
2695 "(Note: item to insert into taken from undertop)");
2702 if (left == right) {
2704 "Can't insert an object into itself!");
2710 "Can't insert a player into something!");
2718 if (inserted != right)
2725 "Inserted %s in %s",
2740 int maps_used = 0, mapmem = 0, objects_used = 0,
x,
y;
2743 for (mp =
styles; mp != NULL; mp = mp->
next) {
2755 "[fixed]Style maps loaded: %d",
2758 "[fixed]Memory used, not");
2760 "[fixed]including objects: %d",
2763 "[fixed]Style objects: %d",
2766 "[fixed]Mem for objects: %lu",
2767 (
unsigned long)(objects_used*
sizeof(
object)));
2787 if (
op->contr->followed_player != NULL) {
2799 if (other ==
op->contr) {
2809 "You can only follow members in the same party.");
2820 if (
op->contr->followed_player)
2863 if (
op &&
op->below) {
2878 if (
op &&
op->above) {
#define FREE_OBJ_NO_DESTROY_CALLBACK
void command_stack_clear(object *op, const char *params)
void object_free(object *ob, int flags)
sstring add_string(const char *str)
void command_invisible(object *op, const char *params)
void object_remove(object *op)
StringBuffer * stringbuffer_new(void)
void object_set_enemy(object *op, object *enemy)
#define NUM_BODY_LOCATIONS
#define MSG_TYPE_COMMAND_SUCCESS
void command_stack_push(object *op, const char *params)
void give_artifact_abilities(object *op, const object *artifact)
#define MSG_TYPE_ADMIN_PLAYER
socket_struct * init_sockets
void object_update(object *op, int action)
void set_tick_duration(long t)
#define QUERY_FLAG(xyz, p)
static int checkdm(object *op, const char *pl_name, const char *pl_passwd, const char *pl_host)
int plugins_remove_plugin(const char *id)
int plugins_init_plugin(const char *libfile)
archetype * get_next_archetype(archetype *current)
void do_learn_spell(object *op, object *spell, int special_prayer)
void flush_old_maps(void)
int out_of_map(mapstruct *m, int x, int y)
void esrv_new_player(player *pl, uint32_t weight)
uint8_t permanent_exp_ratio
object * object_new(void)
void esrv_send_inventory(object *pl, object *op)
void command_purge_quest_definitions(object *op, const char *param)
#define FLAG_OBJ_ORIGINAL
void get_ob_diff(StringBuffer *sb, const object *op, const object *op2)
void do_dump(object *who, object *what)
void command_remove(object *op, const char *params)
static object * find_object_both(const char *params)
void command_skills(object *op, const char *params)
static void command_learn_spell_or_prayer(object *op, const char *params, int special_prayer)
char * path_combine_and_normalize(const char *src, const char *dst, char *path, size_t size)
struct artifactstruct * items
bool can_follow(object *op, player *other)
void command_addexp(object *op, const char *params)
static player * get_other_player_from_name(object *op, const char *name)
void command_toggle_shout(object *op, const char *params)
void command_recollect(object *op, const char *params)
void plugins_display_list(object *op)
int get_rangevector(object *op1, const object *op2, rv_vector *retval, int flags)
static void command_kick2(object *op, const char *params)
#define MSG_TYPE_COMMAND_ERROR
void create_treasure(treasurelist *t, object *op, int flag, int difficulty, int tries)
int set_variable(object *op, const char *buf)
void command_forget_spell(object *op, const char *params)
struct treasureliststruct * randomitems
void hiscore_check(object *op, int quiet)
void command_listplugins(object *op, const char *params)
void command_dm(object *op, const char *params)
void command_teleport(object *op, const char *params)
short freearr_x[SIZEOFFREE]
short freearr_y[SIZEOFFREE]
const object * find_god(const char *name)
#define SAVE_MODE_OVERLAY
static void dm_stack_pop(player *pl)
void command_loadtest(object *op, const char *params)
void calc_perm_exp(object *op)
void command_style_map_info(object *op, const char *params)
#define MSG_TYPE_ADMIN_DM
#define MSG_TYPE_COMMAND_DEBUG
void command_setgod(object *op, const char *params)
uint8_t spell_encumbrance
static event_registration m
static void reset_faces_sent(struct socket_struct *socket)
void command_unloadplugin(object *op, const char *params)
void command_dumpbelow(object *op, const char *params)
void command_hide(object *op, const char *params)
void command_patch(object *op, const char *params)
int is_identifiable_type(const object *op)
artifactlist * find_artifactlist(int type)
uint8_t death_penalty_ratio
void object_copy(const object *src_ob, object *dest_ob)
void query_name(const object *op, char *buf, size_t size)
uint16_t set_friendly_fire
void command_overlay_save(object *op, const char *params)
void object_dump(const object *op, StringBuffer *sb)
#define MSG_TYPE_COMMAND_DM
void command_kick(object *op, const char *params)
struct artifactstruct * next
object * lookup_spell_by_name(object *op, const char *spname)
void command_accountpasswd(object *op, const char *params)
EXTERN player * first_player
void do_goto(object *op, const char *name, int x, int y)
void command_help(object *op, const char *params)
void fix_object(object *op)
void command_follow(object *op, const char *params)
void show_skills(object *op, const char *search)
object * object_create_arch(archetype *at)
char * stringbuffer_finish(StringBuffer *sb)
void command_create(object *op, const char *params)
struct archt * other_arch
void command_stack_pop(object *op, const char *params)
void command_possess(object *op, const char *params)
#define FLAG_UNAGGRESSIVE
void object_give_identified_properties(object *op)
void command_settings(object *op, const char *ignored)
void command_nowiz(object *op, const char *params)
void command_arrest(object *op, const char *params)
static void set_magic(int difficulty, object *op, int max_magic, int flags)
void command_loadplugin(object *op, const char *params)
int become_follower(object *op, const object *new_god)
uint8_t death_penalty_level
void command_speed(object *op, const char *params)
void create_overlay_pathname(const char *name, char *buf, size_t size)
object * find_skill_by_name(object *who, const char *name)
size_t strlcpy(char *dst, const char *src, size_t size)
void clear_los(player *pl)
void monster_check_apply_all(object *monster)
#define FREE_AND_CLEAR_STR(xyz)
int save_map(mapstruct *m, int flag)
uint8_t spell_failure_effects
#define MSG_TYPE_COMMAND_FAILURE
#define FOR_MAP_PREPARE(map_, mx_, my_, it_)
void command_insert_into(object *op, const char *params)
int allow_denied_spells_writing
void player_lvl_adj(object *who, object *op)
int swap_map(mapstruct *map)
void command_stats(object *op, const char *params)
void command_inventory(object *op, const char *params)
void command_freeze(object *op, const char *params)
object * object_find_by_tag_global(tag_t i)
archetype * find_archetype_by_object_name(const char *name)
void command_diff(object *op, const char *params)
object * get_jail_exit(object *op)
void command_goto(object *op, const char *params)
void command_reset(object *op, const char *params)
int64_t check_exp_adjust(const object *op, int64_t exp)
void LOG(LogLevel logLevel, const char *format,...)
void enter_exit(object *op, object *exit_ob)
void command_mon_aggr(object *op, const char *params)
object * check_spell_known(object *op, const char *name)
struct shutdown_s shutdown_state
int object_find_free_spot(const object *ob, mapstruct *m, int x, int y, int start, int stop)
void esrv_update_item(int flags, object *pl, object *op)
static void do_wizard_hide(object *op, int silent_dm)
#define CLEAR_FLAG(xyz, p)
void command_learn_spell(object *op, const char *params)
object * object_insert_in_ob(object *op, object *where)
player * find_player_partial_name(const char *plname)
int account_change_password(const char *account_name, const char *current_password, const char *new_password)
void object_update_speed(object *op)
object * object_find_by_name_global(const char *str)
object * arch_to_object(archetype *at)
uint32_t map_size(mapstruct *m)
#define MSG_TYPE_COMMAND_MAPS
static object * get_dm_object(player *pl, const char **params, int *from)
int save_player(object *op, int flag)
void command_shutdown(object *op, const char *params)
object * object_insert_in_map_at(object *op, mapstruct *m, object *originator, int flag, int x, int y)
static void dm_stack_push(player *pl, tag_t item)
void draw_ext_info(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *message)
void object_free_drop_inventory(object *ob)
#define MSG_TYPE_COMMUNICATION_PARTY
archetype * try_find_archetype(const char *name)
static object * dm_stack_peek(player *pl)
void inventory(object *op, object *inv)
static int do_wizard_dm(object *op, const char *params, int silent)
void do_forget_spell(object *op, const char *spell)
void do_some_living(object *op)
void command_free(object *op, const char *params)
void set_abs_magic(object *op, int magic)
void command_banish(object *op, const char *params)
void assets_collect(const char *datadir, int what)
uint8_t no_player_stealing
void command_learn_special_prayer(object *op, const char *params)
void command_dumpabove(object *op, const char *params)
#define MSG_TYPE_COMMUNICATION
void command_dump(object *op, const char *params)
void command_overlay_reset(object *op, const char *params)
int legal_artifact_combination(const object *op, const artifact *art)
void command_stack_list(object *op, const char *params)
uint8_t create_home_portals
static void unhide(object *op)
void command_abil(object *op, const char *params)
static object * get_spell_by_name(object *op, const char *spell_name)
void command_dmhide(object *op, const char *params)
void command_purge_quest(object *op, const char *param)
#define SAVE_ERROR_PLAYER
void draw_ext_info_format(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *format,...)
void update_los(object *op)
void events_execute_global_event(int eventcode,...)
int player_arrest(object *who)
void command_summon(object *op, const char *params)
mapstruct * has_been_loaded(const char *name)
void map_remove_unique_files(const mapstruct *map)