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))
337 "You are no longer hidden from other players");
340 "%s has entered the game.", op->
name);
357 "The Dungeon Master has arrived!");
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?",
442 "%s is not a player - can not change its god",
470 if ((*params ==
'\0' || !strcmp(pl->
ob->
name, params)) && pl->
ob != op) {
483 "%s is kicked out of the game.",
528 if (*params ==
'\0') {
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));
553 fprintf(banishfile,
"*@%s\n", pl->
socket.
host);
563 "%s banishes %s from the land!",
594 "Overlay save error!");
597 "Current map has been saved as an overlay.");
613 if (!stat(filename, &stats))
616 "Overlay successfully removed.");
619 "Overlay couldn't be removed.");
622 "No overlay for current map.");
636 if (*params ==
'\0') {
638 "Usage: toggle_shout <player>.");
650 "You have been muzzled by the DM!");
663 "You are allowed to shout and chat again.");
665 "You remove %s's muzzle.",
678 if (strlen(params) == 0) {
686 }
else if (strcmp(params,
"cancel") == 0) {
697 }
else if (strncmp(params,
"now", 3) == 0) {
705 int minutes = atoi(params);
707 if (minutes > 0 && minutes <= 720) {
710 "Server will shut down in %d minutes.", minutes);
712 LOG(
llevInfo,
"Server shutdown initiated by %s in %d minutes.\n", op->
name, minutes);
716 "Please specify a reasonable time in minutes.");
733 if (*params ==
'\0') {
735 "Go to what level?");
757 if (*params ==
'\0') {
759 "Usage: freeze [ticks] <player>.");
763 ticks = atoi(params);
765 while ((isdigit(*params) || isspace(*params)) && *params != 0)
769 "Usage: freeze [ticks] <player>.");
780 "You have been frozen by the DM!");
783 "You freeze %s for %d ticks",
815 if (cur == who->
map && x == who->
x && y == who->
y)
835 if (*params ==
'\0') {
837 "Usage: arrest <player>.");
848 "Can't jail player, there is no map to hold them");
854 "Can't jail player, map loading issue or already in jail's position");
860 "You have been arrested.");
882 if (*params ==
'\0') {
884 "Usage: summon <player>.");
895 "Can not find a free spot to place summoned player.");
906 "You are summoned.");
929 if (*params ==
'\0') {
931 "Usage: teleport <player>.");
938 "No such player or ambiguous name.");
945 "Can not find a free spot to teleport to.");
957 "You see a portal open.");
959 "You teleport to %s",
990 int magic,
set_magic = 0, set_nrof = 0, gotquote, gotspace;
992 char *cp, *bp, *bp2, *bp3, *endline, cpy[
MAX_BUF];
999 if (*params ==
'\0') {
1001 "Usage: create [nr] [magic] <archetype> [ of <artifact>] [variable_to_patch setting]");
1008 endline = bp+strlen(bp);
1010 if (sscanf(bp,
"%u ", &nrof)) {
1011 if ((bp = strchr(cpy,
' ')) == NULL) {
1013 "Usage: create [nr] [magic] <archetype> [ of <artifact>] [variable_to_patch setting]");
1020 if (sscanf(bp,
"%d ", &magic)) {
1021 if ((bp = strchr(bp,
' ')) == NULL) {
1023 "Usage: create [nr] [magic] <archetype> [ of <artifact>] [variable_to_patch setting]");
1030 if ((cp = strstr(bp,
" of ")) != NULL) {
1034 for (bp2 = bp; *bp2; bp2++) {
1044 "No such archetype.");
1049 char spell_name[
MAX_BUF], *fsp = NULL;
1062 fsp = strchr(spell_name,
' ');
1070 bp2 = cp+strlen(spell_name)+1;
1083 "No artifact list for type %d\n",
1092 }
while (art != NULL);
1095 "No such artifact ([%d] of %s)",
1099 LOG(
llevDebug,
"%s creates: (%d) (%d) (%s) of (%s)\n", op->
name, set_nrof ? nrof : 0, set_magic ? magic : 0, bp, cp);
1106 "Unable to find spell %s for object that needs it, or it is of wrong type",
1113 "Unable to find spell %s for object that needs it, or it is of wrong type",
1143 while (*bp2 && bp2 <= endline) {
1147 for (bp3 = bp2; *bp3 && gotspace < 2 && gotquote < 2; bp3++) {
1161 }
else if (*bp3 ==
' ') {
1171 if (gotspace == 2 || gotquote == 2) {
1174 }
else if (*bp3 ==
'\0')
1177 if ((gotquote && gotquote != 2)
1178 || (gotspace != 2 && gotquote != 2)) {
1187 "Malformed create line: %s",
1196 "Unknown variable %s",
1232 for (i = 0; i < (set_nrof ? nrof : 1); i++) {
1234 object *prev = NULL, *head = NULL, *dup;
1236 for (atmp = at; atmp != NULL; atmp = atmp->
more) {
1252 dup->x = op->
x+dup->arch->clone.x;
1253 dup->y = op->
y+dup->arch->clone.y;
1264 object *check = head;
1271 check = check->
more;
1275 if (head->x < size_x || head->y < size_y) {
1279 "Object too big to insert in map, or wrong position.");
1288 check = check->
more;
1330 if (*params ==
'\0') {
1337 "Inventory of what object (nr)?");
1384 "Object is marked original");
1401 "Aggression turned OFF");
1406 "Aggression turned ON");
1429 if (*params !=
'\0') {
1430 if (sscanf(params,
"%d", &i))
1432 else if (sscanf(params,
"%s", buf))
1435 if (victim == NULL) {
1437 "Patch what object (nr)?");
1443 "As insane as you are, I cannot allow you to possess yourself.");
1463 if (i == 1 || i == 6 || i == 8 || i == 9)
1484 const char *arg, *arg2;
1496 "Patch what values?");
1500 if ((arg2 = strchr(arg,
' ')))
1506 "Unknown variable %s",
1530 "Remove what object (nr)?");
1536 "Unable to remove a player!");
1545 "%s is already removed!",
1556 if (tmp->
speed != 0) {
1578 "Free what object (nr)?");
1589 "Warning: item was not removed, will do so now.");
1607 object *skillob = NULL;
1611 if ((*params ==
'\0')
1613 || ((q = sscanf(params,
"%s %d %[^\r\n]", buf, &i, skill)) < 2)) {
1615 "Usage: addexp player quantity [skill].");
1633 "Unable to find skill %s in %s",
1663 if (*params ==
'\0' || !sscanf(params,
"%d", &i)) {
1665 "Current speed is %d",
1673 "The speed is changed to %d.",
1693 if (*params ==
'\0') {
1707 "[Fixed]Statistics for %s:", pl->
ob->
name);
1710 "[fixed]Str : %-2d H.P. : %-4d MAX : %d",
1714 "[fixed]Dex : %-2d S.P. : %-4d MAX : %d",
1718 "[fixed]Con : %-2d AC : %-4d WC : %d",
1722 "[fixed]Int : %-2d Damage : %d",
1726 "[fixed]Wis : %-2d EXP : %"FMT64,
1730 "[fixed]Pow : %-2d Grace : %d",
1734 "[fixed]Cha : %-2d Food : %d",
1748 char thing[20], thing2[20];
1756 || sscanf(params,
"%s %s %d", thing, thing2, &iii) != 3
1757 || thing[0] ==
'\0') {
1763 if (thing2[0] ==
'\0') {
1765 "You can't change that.");
1771 "Illegal range of stat.\n");
1776 if (!strcmp(pl->
ob->
name, thing)) {
1779 if (!strcmp(
"str", thing2))
1781 if (!strcmp(
"dex", thing2))
1783 if (!strcmp(
"con", thing2))
1785 if (!strcmp(
"wis", thing2))
1787 if (!strcmp(
"cha", thing2))
1789 if (!strcmp(
"int", thing2))
1791 if (!strcmp(
"pow", thing2))
1794 "%s has been altered.",
1815 object *dummy = NULL, *tmp = NULL;
1817 const char *space, *confirmation = NULL;
1820 if (*params ==
'\0') {
1826 space = strchr(params,
' ');
1827 if (space != NULL) {
1828 confirmation = params;
1833 if (strcmp(params,
".") == 0) {
1847 if (strcmp(params,
".") == 0 && m->
unique) {
1850 "Cannot reset a unique player map while on it. Use " 1851 "'reset full-reset %s' while standing somewhere else.",
1856 if (strncmp(
"full-reset", confirmation, strlen(
"full-reset"))) {
1868 "You need to disembark first.");
1876 LOG(
llevError,
"Tried to swap out map which was not in memory.\n");
1885 if (strncmp(m->
path,
"/random/", 8) == 0) {
1895 "You cannot reset a random map when inside it.");
1913 int playercount = 0;
1924 "Reset failed, error code: %d.", res);
1927 "Reset failed, couldn't swap map, the following players are on it:");
1929 if (pl->
ob->
map == m && pl->
ob != op) {
1937 "hmm, I don't see any other players on this map, something else is the problem.");
1971 if (confirmation == NULL) {
1974 "Use 'reset full-reset %s' to fully reset the map.", params);
1999 "The Dungeon Master is gone..");
2024 static int checkdm(
object *op,
const char *pl_name,
const char *pl_passwd,
const char *pl_host) {
2027 char line_buf[160], name[160], passwd[160], host[160];
2029 #ifdef RESTRICTIVE_DM 2030 *pl_name = op->
name ? op->
name :
"*";
2034 if ((dmfile = fopen(buf,
"r")) == NULL) {
2039 while (fgets(line_buf, 160, dmfile) != NULL) {
2040 if (line_buf[0] ==
'#')
2042 if (sscanf(line_buf,
"%[^:]:%[^:]:%s\n", name, passwd, host) != 3) {
2043 LOG(
llevError,
"Warning - malformed dm file entry: %s\n", line_buf);
2044 }
else if ((!strcmp(name,
"*") || (pl_name && !strcmp(pl_name, name)))
2045 && (!strcmp(passwd,
"*") || !strcmp(passwd, pl_passwd))
2046 && (!strcmp(host,
"*") || !strcmp(host, pl_host))) {
2075 "You are already the Dungeon Master!");
2085 "Ok, you are the Dungeon Master!");
2098 "The Dungeon Master has arrived!");
2104 "Sorry Pal, I don't think so.");
2137 "You turn invisible.");
2162 size_t spell_name_length;
2171 if (strncmp(ar->
name,
"spelldirect_", 12) == 0)
2174 if (strcmp(ar->
clone.
name, spell_name) != 0)
2177 if (found != NULL) {
2178 if (!conflict_found) {
2181 "More than one archetype matches the spell name %s:",
2205 spell_name_length = strlen(spell_name);
2212 if (strncmp(ar->
name,
"spelldirect_", 12) == 0)
2215 if (strncmp(ar->
clone.
name, spell_name, spell_name_length) != 0)
2218 if (found != NULL) {
2219 if (!conflict_found) {
2222 "More than one spell matches %s:",
2247 "The spell %s does not exist.",
2265 if (op->
contr == NULL || *params ==
'\0') {
2267 "Which spell do you want to learn?");
2278 "You already know the spell %s.",
2323 if (op->
contr == NULL || *params ==
'\0') {
2325 "Which spell do you want to forget?");
2330 if (spell == NULL) {
2332 "You do not know the spell %s.",
2365 if (*params ==
'\0') {
2367 "Load which plugin?");
2372 strcat(buf,
"/plugins/");
2373 strcat(buf, params);
2378 "Plugin %s successfully loaded.",
2382 "Could not load plugin %s.",
2397 if (*params ==
'\0') {
2399 "Remove which plugin?");
2406 "Plugin %s successfully removed.",
2410 "Could not remove plugin %s.",
2475 "Item stack contents:");
2486 " %d : (lost item: %d)",
2502 "Item stack cleared.");
2525 object *left, *right;
2528 int left_from, right_from;
2533 "Compare to what item?");
2545 "Compare what item?");
2550 "Item difference:");
2563 "(Note: first item taken from undertop)");
2573 if (*diff ==
'\0') {
2589 object *left, *right, *inserted;
2590 int left_from, right_from;
2596 "Insert into what object?");
2608 "Insert what item?");
2623 "(Note: item to insert into taken from undertop)");
2630 if (left == right) {
2632 "Can't insert an object into itself!");
2638 "Can't insert a player into something!");
2646 if (inserted != right)
2653 "Inserted %s in %s",
2668 int maps_used = 0, mapmem = 0, objects_used = 0, x, y;
2670 for (mp = styles; mp != NULL; mp = mp->
next) {
2682 "[fixed]Style maps loaded: %d",
2685 "[fixed]Memory used, not");
2687 "[fixed]including objects: %d",
2690 "[fixed]Style objects: %d",
2693 "[fixed]Mem for objects: %lu",
2694 (
unsigned long)(objects_used*
sizeof(
object)));
2708 if (*params ==
'\0') {
2721 if (other == op->
contr) {
2752 if (op && op->
below) {
#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)
#define NUM_BODY_LOCATIONS
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 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)
struct treasureliststruct * randomitems
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)
#define FREE_OBJ_NO_DESTROY_CALLBACK
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)
struct archt * other_arch
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)
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
#define FLAG_UNAGGRESSIVE
#define MSG_TYPE_ADMIN_PLAYER
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)
int execute_global_event(int eventcode,...)
void command_banish(object *op, const char *params)
archetype * find_archetype_by_object_name(const char *name)
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)
#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)
archetype * try_find_archetype(const char *name)
#define QUERY_FLAG(xyz, p)
#define CLEAR_FLAG(xyz, p)
void clear_los(object *op)
#define MSG_TYPE_COMMAND_DEBUG
void plugins_display_list(object *op)
int player_arrest(object *who)
void give_artifact_abilities(object *op, const object *artifact)
object * object_create_arch(archetype *at)
void command_listplugins(object *op, const char *params)
void command_help(object *op, const char *params)
static void unhide(object *op)
static void set_magic(int difficulty, object *op, int max_magic, int flags)
void inventory(object *op, object *inv)
void calc_perm_exp(object *op)
void command_invisible(object *op, const char *params)
int save_map(mapstruct *m, int flag)
int need_identify(const object *op)
uint8_t permanent_exp_ratio
int8_t body_info[NUM_BODY_LOCATIONS]
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)
void object_free2(object *ob, int flags)
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)
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)
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)
EXTERN archetype * first_archetype
object * find_skill_by_name(object *who, const char *name)
object * arch_to_object(archetype *at)
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)
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