Added send_cannot_edit, removed LVL_FREEZE, and fixed fight_messages. --Rumble

This commit is contained in:
Rumble 2007-03-04 20:18:13 +00:00
parent f2bb44ceb1
commit 42377c319a
37 changed files with 6212 additions and 7018 deletions

21
FAQ
View file

@ -223,14 +223,21 @@ notably it cannot be used to make money in ANY way, the original developers'
names must be in the login screen and that the credits command always presents
the same information, etc.
tbaMUD's vision is to provide the MUDding community a stable and functional
codebase that includes an in-depth World and help files that makes it ready
to be molded into a custom MUD by its coders and builders. We also provide
multiple resources to allow for feedback, contribution, and the sharing of
ideas within the MUDding community to ensure constant development and
improvements.
TbaMUD is highly developed from the programming side, but highly UNdeveloped
on the game-playing side. So, if you're looking for a huge MUD with billions
of spells, skills, classes, and races, tbaMUD will probably disappoint you
severely. TbaMUD still has only the 4 original Diku classes, the original
spells, and the original skills. On the other hand, if you're looking for a
highly stable, well-developed, well-organized "blank slate" MUD on which you
can put your OWN ideas for spells, skills, and classes, then tbaMUD is what
what you are looking for."
on the game-playing side. So, if you're looking for a huge MUD with billions
of spells, skills, classes, and races, tbaMUD will disappoint you. TbaMUD still
has only the 4 original Diku classes, the original spells, and the original
skills. On the other hand, if you're looking for a highly stable, developed,
organized, and well documented "blank slate" MUD on which you can put your OWN
ideas for spells, skills, and classes, then tbaMUD is what what you are looking
for.
1.5. What is the history of tbaMUD?

View file

@ -1,11 +1,34 @@
tbaMUD is currently being developed by The Builder Academy. If you need any
help or find any bugs please stop by: builderacademy.net 9091
TbaMUD is currently being developed by The Builder Academy. If you need any
help, find any bugs, or have ideas for improvement please stop by TBA.
Rumble
The Builder Academy
builderacademy.net 9091
tbaMUD 3.52
[Mar 04 2007] - Rumble
Fixed fight_messages not displaying (thanks Rhade).
Removed LVL_FREEZE and set ban/freeze to LVL_GRGOD.
Added send_cannot_edit function (thanks Rhade).
[Feb 26 2007] - Rumble
updated CYGWIN.README, FAQ, and README
Added in game changelog command (thanks Rhade).
Moved do_file to act.wizard.c.
Alphabetized Makefile.in, yeah I'm anal like that.
Clarified licheck so people know to enter Q to accept the license and quit.
[Feb 25 2007] - Rumble
Fixed oat and wat (thanks Rhade).
Numerous social fixes (thanks Rhade, Fizban, and Amber).
Removed do_insult.
Cleaned up hedit formatting and fixed possible bug from editing a help file
you can't view (thanks Rhade).
Fixed cast ' ' so it won't cast armor (thanks Rhade).
tbaMUD 3.51
- Removed the extra space when you have no title (thanks Rhade).
- Added "Top of File" to the do_file command (thanks Rhade).
- Removed socials from wizhelp.
- Changed zlist with no arg to list zones.
- Removed socials from wizhelp (thanks Rhade).
- Changed zlist with no arg to list zones (thanks Rhade).
- Wiznet can now be seen while in OLC, again (thanks Fizban).
- Removed MOBprograms.
- Added ALL_PERMISSIONS so anyone with OLC can have access to the entire World.
@ -91,7 +114,7 @@ tbaMUD 3.51
helpfile and an immortal helpfile.
- Fixed hindex to check help entry level.
- Added house saving call to do_saveall.
CircleMUD 3.5
- New do_who by Rhade.
- Core files generated with unique time stamp.
@ -258,8 +281,9 @@ CircleMUD 3.5
- Added vnum and TRIG tags to everything, showvnums toggles it on/off.
- Added keyword seperation when statting extra desc. [desk] [notes papers]
- Added buildwalk and dig.
Release history:
Version 3.52 release: April, 2007
Version 3.51 release: February, 2007
Version 3.5 release: December, 2006
Version 3.1 (yes, no beta pl): November 18, 2002

View file

@ -1,80 +1,73 @@
The README.Cygwin that comes with CircleMUD is outdated. Below is current and
works as of December 2006.
Compiling CircleMUD
under Microsoft Windows using CygWin
CircleMUD 3.1 compiles under Cygwin without needing any special modifications.
This free pseudo-Unix environment for Windows includes the "bash" shell, "gcc"
family of compilers, and a full set of programs and libraries for Windows users
to compile and run programs from source code intended for Unix. It can be
downloaded from: http://cygwin.com/
Compiling Circle under Cygwin is basically the same as it would be under
another form of Unix:
1) Download from: http://cygwin.com/setup.exe
Select open.
Install from Internet
Select "just me" "dos"
Choose a mirror site.
Leave selected package as default.
Select the following from devel: autoconf, gcc, make, and patchutils
Click Next.
Install, follow prompts.
2) Download and uncompress the latest version of CircleMUD. TBA is now
recommending everyone use CWG (CircleMUD With Goodies) Buddha since it comes
pre-packaged with many important features like OLC and Trigedit. Join the
forum and download Buddha at: http://cwg.lazuras.org/ The forums will
also be a great resource for any problems that come up. Once you download
and uncompress Buddha (I use winRAR) read through the /doc directory.
3) Start the Cygwin "bash" shell by double clicking the Cygwin Icon. This will
open a telnet looking window that mimics a *nix server where you can run the
MUD. Go to the directory where you extracted CircleMUD by using the "cd" change
directory command and "dir" directory listing to find the correct files. For
example "C:\circle". "cd c:/circle" "dir" in the listed files you should see
one called configure. DO NOT go into the SRC directory yet.
4) Run the configure script by typing "./configure". This will automatically
detect what programs and library functions are available, and create the
files "Makefile" and "conf.h" based on the results.
If you get complaints from bash that it will not run the configure script
either because it cannot find it or because it claims the file is not
an executable, you can also try "sh configure", "sh ./configure",
"bash configure" and "bash ./configure" until one of them works.
5) NOW change to the /circle/src directory "cd src", and type "make", and watch
CircleMUD and the additional utilies included in the Circle distribution
automatically being compiled and placed in /circle/bin.
6) Go back to /circle, and run the MUD either directly by typing
"bin/circle", or by using the "./autorun &" script.
7) Start a telnet program. Open a connection to your own machine "localhost"
on port 4000. You should see the MUD's login screen welcoming you. The
first person to login will be promoted to IMP.
If you have problems, read this document again. Most of the questions received
in email or which are posted to USENET newsgroups are answered in this file, or
in other documents included in the CircleMUD distribution. If you are still
having problems and you're *sure* that your question is not answered in this
document or in one of the others files in the /circle/doc directory, try
reading the through the CircleMUD website at: http://www.circlemud.org
It really can not be stressed enough: READ EVERYTHING.
Credit where credit is due:
Some parts of this document have been derived or outright copied from other
files in the CircleMUD distribution by:
Jeremy Elson
David Goldstein
Tony Robbins
George Greer
Rumble
Rumble@@builderacademy.net
The Builder Academy
builderacademy.net 9091
Compiling tbaMUD
under Microsoft Windows using CygWin
tbaMUD compiles under Cygwin without needing any special modifications.
This free pseudo-Unix environment for Windows includes the "bash" shell, "gcc"
family of compilers, and a full set of programs and libraries for Windows users
to compile and run programs from source code intended for Unix. It can be
downloaded from: http://cygwin.com/
Compiling tbaMUD under Cygwin is basically the same as it would be under
another form of Unix:
1) Download from: http://cygwin.com/setup.exe
Select open.
Install from Internet
Select "just me" "dos"
Choose a mirror site.
Leave selected package as default.
Select the following from devel: autoconf, gcc, make, and patchutils
Click Next.
Install, follow prompts.
2) Download and uncompress the latest version of tbaMUD:
http://cwg.lazuras.org/modules.php?name=Downloads&d_op=viewdownload&cid=16
Join the forums as they will be a great resource for any problems that you
encounter. Once you download and uncompress tbaMUD (I use winRAR) read
through the /doc directory.
3) Start the Cygwin "bash" shell by double clicking the Cygwin Icon. This will
open a telnet looking window that mimics a *nix server where you can run the
MUD. Go to the directory where you extracted tbaMUD by using the "cd" change
directory command and "dir" directory listing to find the correct files. For
example "C:\tbaMUD". "cd c:/tbaMUD" "dir" in the listed files you should see
one called configure. DO NOT go into the SRC directory yet.
4) Run the configure script by typing "./configure". This will automatically
detect what programs and library functions are available, and create the
files "Makefile" and "conf.h" based on the results.
If you get complaints from bash that it will not run the configure script
either because it cannot find it or because it claims the file is not
an executable, you can also try "sh configure", "sh ./configure",
"bash configure" and "bash ./configure" until one of them works.
5) NOW change to the /tbaMUD/src directory "cd src", and type "make", and watch
tbaMUD and the additional utilities included in the tbaMUD distribution
automatically being compiled and placed in /tbaMUD/bin.
6) Go back to /tbaMUD, and run the MUD either directly by typing
"bin/tbaMUD", or by using the "./autorun &" script.
7) Start a telnet program. Open a connection to your own machine "localhost"
on port 4000. You should see the MUD's login screen welcoming you. The
first person to login will be promoted to IMP.
If you have problems, read this document again. Most of the questions received
in email or which are posted to USENET newsgroups are answered in this file, or
in other documents included in the tbaMUD distribution. If you are still
having problems and you're *sure* that your question is not answered in this
document or in one of the others files in the /tbaMUD/doc directory, try
reading the forums at http://cwg.lazuras.org/ or stop by TBA for assistance.
It really can not be stressed enough: READ EVERYTHING.
Credit where credit is due:
Some parts of this document have been derived or outright copied from other
files by: Jeremy Elson, David Goldstein, Tony Robbins, and George Greer
Rumble
Rumble@builderacademy.net
The Builder Academy
builderacademy.net 9091

File diff suppressed because it is too large Load diff

View file

@ -24,28 +24,27 @@ CFLAGS = @CFLAGS@ $(MYFLAGS) $(PROFILE)
LIBS = @LIBS@ @CRYPTLIB@ @NETLIB@
OBJFILES = act.comm.o act.informative.o act.item.o act.movement.o \
act.offensive.o act.other.o act.social.o act.wizard.o alias.o ban.o \
boards.o castle.o cedit.o class.o comm.o config.o constants.o db.o \
fight.o genmob.o genobj.o genolc.o genshp.o genwld.o genzon.o graph.o \
handler.o house.o improved-edit.o interpreter.o limits.o magic.o mail.o \
medit.o mobact.o modify.o oasis.o oasis_copy.o oasis_delete.o \
oasis_list.o objsave.o oedit.o random.o redit.o sedit.o \
shop.o spec_assign.o spec_procs.o spell_parser.o spells.o tedit.o \
utils.o weather.o zedit.o bsd-snprintf.o \
dg_comm.o dg_db_scripts.o dg_event.o dg_handler.o dg_mobcmd.o \
dg_misc.o dg_objcmd.o dg_scripts.o dg_triggers.o dg_wldcmd.o dg_olc.o \
dg_variables.o \
context_help.o hedit.o aedit.o zmalloc.o players.o
act.offensive.o act.other.o act.social.o act.wizard.o aedit.o alias.o \
ban.o boards.o bsd-snprintf.o castle.o cedit.o class.o comm.o config.o \
constants.o dg_comm.o dg_db_scripts.o dg_event.o dg_handler.o dg_misc.o \
dg_mobcmd.o dg_objcmd.o dg_olc.o dg_scripts.o dg_triggers.o \
dg_variables.o dg_wldcmd.o db.o context_help.o fight.o genmob.o \
genobj.o genolc.o genshp.o genwld.o genzon.o graph.o handler.o hedit.o \
house.o improved-edit.o interpreter.o limits.o magic.o mail.o medit.o \
mobact.o modify.o oasis.o oasis_copy.o oasis_delete.o oasis_list.o \
objsave.o oedit.o players.o random.o redit.o sedit.o shop.o \
spec_assign.o spec_procs.o spell_parser.o spells.o tedit.o utils.o \
weather.o zedit.o zmalloc.o
CXREF_FILES = act.comm.c act.informative.c act.item.c act.movement.c \
act.offensive.c act.other.c act.social.c act.wizard.c alias.c ban.c \
boards.c castle.c cedit.c class.c comm.c config.c constants.c db.c \
fight.c genmob.c genobj.c genolc.c genshp.c genwld.c genzon.c graph.c \
handler.c house.c improved-edit.c interpreter.c limits.c magic.c mail.c \
medit.c mobact.c modify.c oasis.c oasis_copy.c oasis_delete.c \
oasis_list.c objsave.c oedit.c olc.c random.c redit.c sedit.c \
shop.c spec_assign.c spec_procs.c spell_parser.c spells.c tedit.c \
utils.c weather.c zedit.c hedit.c bsd-snprintf.c players.c
act.offensive.c act.other.c act.social.c act.wizard.c alias.c \
ban.o boards.c bsd-snprintf.c castle.c cedit.c class.c comm.c config.c \
constants.c db.c fight.c genmob.c genobj.c genolc.c genshp.c genwld.c \
genzon.c graph.c handler.c hedit.c house.c improved-edit.c \
interpreter.c limits.c magic.c mail.c medit.c mobact.c modify.c oasis.c \
oasis_copy.c oasis_delete.c oasis_list.c objsave.c oedit.c olc.c \
players.c random.c redit.c sedit.c shop.c spec_assign.c spec_procs.c \
spell_parser.c spells.c tedit.c utils.c weather.c zedit.c
default: all

View file

@ -1922,7 +1922,7 @@ ACMD(do_toggle)
}
if (((tp = search_block(arg2, types, FALSE)) == -1)) {
send_to_char(ch, "Usage: color { Off | Normal | On }\r\n");
send_to_char(ch, "Usage: toggle color { Off | Normal | On }\r\n");
return;
}
REMOVE_BIT(PRF_FLAGS(ch), PRF_COLOR_1 | PRF_COLOR_2);
@ -1936,7 +1936,7 @@ ACMD(do_toggle)
return;
}
if (((tp = search_block(arg2, types, FALSE)) == -1)) {
send_to_char(ch, "Usage: syslog { Off | Brief | Normal | On }\r\n");
send_to_char(ch, "Usage: toggle syslog { Off | Brief | Normal | On }\r\n");
return;
}
REMOVE_BIT(PRF_FLAGS(ch), PRF_LOG1 | PRF_LOG2);

View file

@ -462,9 +462,10 @@ int perform_drop(struct char_data *ch, struct obj_data *obj,
if ((mode == SCMD_DROP) && !drop_wtrigger(obj, ch))
return 0;
if (OBJ_FLAGGED(obj, ITEM_NODROP)) {
if (OBJ_FLAGGED(obj, ITEM_NODROP) && !PRF_FLAGGED(ch, PRF_NOHASSLE)) {
snprintf(buf, sizeof(buf), "You can't %s $p, it must be CURSED!", sname);
act(buf, FALSE, ch, obj, 0, TO_CHAR);
return (0);
}
snprintf(buf, sizeof(buf), "You %s $p.%s", sname, VANISH(mode));
@ -1166,8 +1167,6 @@ ACMD(do_pour)
weight_change_object(to_obj, amount); /* Add weight */
}
void wear_message(struct char_data *ch, struct obj_data *obj, int where)
{
const char *wear_messages[][2] = {
@ -1230,8 +1229,6 @@ void wear_message(struct char_data *ch, struct obj_data *obj, int where)
act(wear_messages[where][1], FALSE, ch, obj, 0, TO_CHAR);
}
void perform_wear(struct char_data *ch, struct obj_data *obj, int where)
{
/*
@ -1293,8 +1290,6 @@ void perform_wear(struct char_data *ch, struct obj_data *obj, int where)
equip_char(ch, obj, where);
}
int find_eq_pos(struct char_data *ch, struct obj_data *obj, char *arg)
{
int where = -1;
@ -1340,8 +1335,6 @@ int find_eq_pos(struct char_data *ch, struct obj_data *obj, char *arg)
return (where);
}
ACMD(do_wear)
{
char arg1[MAX_INPUT_LENGTH];
@ -1401,8 +1394,6 @@ ACMD(do_wear)
}
}
ACMD(do_wield)
{
char arg[MAX_INPUT_LENGTH];
@ -1424,8 +1415,6 @@ ACMD(do_wield)
}
}
ACMD(do_grab)
{
char arg[MAX_INPUT_LENGTH];
@ -1451,21 +1440,17 @@ ACMD(do_grab)
}
}
void perform_remove(struct char_data *ch, int pos)
{
struct obj_data *obj;
if (!(obj = GET_EQ(ch, pos)))
log("SYSERR: perform_remove: bad pos %d passed.", pos);
/* SYSERR_DESC:
* This error occurs when perform_remove() is passed a bad 'pos'
* (location) to remove an object from.
*/
else if (OBJ_FLAGGED(obj, ITEM_NODROP))
/* This error occurs when perform_remove() is passed a bad 'pos'
* (location) to remove an object from. */
else if (OBJ_FLAGGED(obj, ITEM_NODROP) && !PRF_FLAGGED(ch, PRF_NOHASSLE))
act("You can't remove $p, it must be CURSED!", FALSE, ch, obj, 0, TO_CHAR);
else if (IS_CARRYING_N(ch) >= CAN_CARRY_N(ch))
else if (IS_CARRYING_N(ch) >= CAN_CARRY_N(ch)&& !PRF_FLAGGED(ch, PRF_NOHASSLE))
act("$p: you can't carry that many items!", FALSE, ch, obj, 0, TO_CHAR);
else {
if (!remove_otrigger(obj, ch))
@ -1477,8 +1462,6 @@ void perform_remove(struct char_data *ch, int pos)
}
}
ACMD(do_remove)
{
char arg[MAX_INPUT_LENGTH];

View file

@ -58,7 +58,6 @@ ACMD(do_use);
ACMD(do_display);
ACMD(do_gen_tog);
ACMD(do_gen_write);
ACMD(do_file);
ACMD(do_quit)
{
@ -412,7 +411,7 @@ ACMD(do_group)
}
if (ch->master) {
act("You can not enroll group members without being head of a group.",
act("You cannot enroll group members without being head of a group.",
FALSE, ch, 0, 0, TO_CHAR);
return;
}
@ -931,104 +930,3 @@ ACMD(do_gen_tog)
return;
}
ACMD(do_file)
{
FILE *req_file;
int cur_line = 0, num_lines = 0, req_lines = 0, i, j, l;
char field[MAX_INPUT_LENGTH], value[MAX_INPUT_LENGTH], line[READ_SIZE];
char buf[MAX_STRING_LENGTH];
size_t len = 0, nlen;
struct file_struct {
char *cmd;
char level;
char *file;
} fields[] = {
{ "bugs", LVL_BUILDER, "../lib/misc/bugs"},
{ "typos", LVL_BUILDER , "../lib/misc/typos"},
{ "ideas", LVL_BUILDER, "../lib/misc/ideas"},
{ "xnames", LVL_BUILDER, "../lib/misc/xnames"},
{ "levels", LVL_BUILDER, "../log/levels" },
{ "rip", LVL_BUILDER, "../log/rip" },
{ "players", LVL_BUILDER, "../log/newplayers" },
{ "rentgone", LVL_BUILDER, "../log/rentgone" },
{ "errors", LVL_BUILDER, "../log/errors" },
{ "godcmds", LVL_BUILDER, "../log/godcmds" },
{ "syslog", LVL_BUILDER, "../syslog" },
{ "crash", LVL_BUILDER, "../syslog.CRASH" },
{ "help", LVL_BUILDER, "../log/help" },
{ "\n", 0, "\n" }
};
skip_spaces(&argument);
if (!*argument) {
send_to_char(ch, "USAGE: file <option> <num lines>\r\n\r\nFile options:\r\n");
for (j = 0, i = 0; fields[i].level; i++)
if (fields[i].level <= GET_LEVEL(ch))
send_to_char(ch, "%-15s%s\r\n", fields[i].cmd, fields[i].file);
return;
}
two_arguments(argument, field, value);
for (l = 0; *(fields[l].cmd) != '\n'; l++)
if (!strncmp(field, fields[l].cmd, strlen(field)))
break;
if(*(fields[l].cmd) == '\n') {
send_to_char(ch, "That is not a valid option!\r\n");
return;
}
if (GET_LEVEL(ch) < fields[l].level) {
send_to_char(ch, "You are not godly enough to view that file!\r\n");
return;
}
if(!*value)
req_lines = 15; /* default is the last 15 lines */
else
req_lines = atoi(value);
if (!(req_file=fopen(fields[l].file,"r"))) {
mudlog(BRF, LVL_IMPL, TRUE,
"SYSERR: Error opening file %s using 'file' command.",
fields[l].file);
return;
}
get_line(req_file, line);
while (!feof(req_file)) {
num_lines++;
get_line(req_file,line);
}
rewind(req_file);
req_lines = MIN(MIN(req_lines, num_lines),150);
len = snprintf(buf, sizeof(buf), "Last %d lines of %s:\r\n", req_lines, fields[l].file);
if (req_lines == num_lines)
len += snprintf(buf + len, sizeof(buf) - len, "Top of file.\r\n");
get_line(req_file,line);
while (!feof(req_file)) {
cur_line++;
if(cur_line > (num_lines - req_lines)) {
nlen = snprintf(buf + len, sizeof(buf) - len, "%s\r\n", line);
if (len + nlen >= sizeof(buf) || nlen < 0)
break;
len += nlen;
}
get_line(req_file,line);
}
fclose(req_file);
if (len >= sizeof(buf)) {
const char *overflow = "\r\n**OVERFLOW**\r\n";
strcpy(buf + sizeof(buf) - strlen(overflow) - 1, overflow); /* strcpy: OK */
}
page_string(ch->desc, buf, 1);
}

View file

@ -2113,7 +2113,7 @@ ACMD(do_force)
if (!(vict = get_char_vis(ch, arg, NULL, FIND_CHAR_WORLD)))
send_to_char(ch, "%s", CONFIG_NOPERSON);
else if (!IS_NPC(vict) && GET_LEVEL(ch) < LVL_GOD)
send_to_char(ch, "You can not force players.\r\n");
send_to_char(ch, "Only level GOD and above can force players.\r\n");
else if (!IS_NPC(vict) && GET_LEVEL(ch) <= GET_LEVEL(vict))
send_to_char(ch, "No, no, no!\r\n");
else {
@ -2726,7 +2726,7 @@ ACMD(do_show)
{ "dex", LVL_BUILDER, BOTH, NUMBER },
{ "drunk", LVL_BUILDER, BOTH, MISC },
{ "exp", LVL_GOD, BOTH, NUMBER },
{ "frozen", LVL_FREEZE, PC, BINARY }, /* 15 */
{ "frozen", LVL_GRGOD, PC, BINARY }, /* 15 */
{ "gold", LVL_BUILDER, BOTH, NUMBER },
{ "height", LVL_BUILDER, BOTH, NUMBER },
{ "hit", LVL_BUILDER, BOTH, NUMBER },
@ -3029,7 +3029,7 @@ int perform_set(struct char_data *ch, struct char_data *vict, int mode, char *va
else if (is_abbrev(val_arg, "off"))
GET_OLC_ZONE(vict) = NOWHERE;
else if (!is_number(val_arg)) {
send_to_char(ch, "Value must be either 'aedit', 'hedit', 'off' or a zone number.\r\n");
send_to_char(ch, "Value must be a zone number, 'aedit', 'hedit', 'off' or 'all'.\r\n");
return (0);
} else
GET_OLC_ZONE(vict) = atoi(val_arg);
@ -4116,3 +4116,164 @@ ACMD(do_zpurge)
mudlog(NRM, MAX(LVL_GRGOD, GET_INVIS_LEV(ch)), TRUE, "(GC) %s purged entire world.", GET_NAME(ch));
}
}
ACMD(do_file)
{
FILE *req_file;
int cur_line = 0, num_lines = 0, req_lines = 0, i, j, l;
char field[MAX_INPUT_LENGTH], value[MAX_INPUT_LENGTH], line[READ_SIZE];
char buf[MAX_STRING_LENGTH];
size_t len = 0, nlen;
struct file_struct {
char *cmd;
char level;
char *file;
} fields[] = {
{ "bugs", LVL_GOD, "../lib/misc/bugs"},
{ "typos", LVL_GOD, "../lib/misc/typos"},
{ "ideas", LVL_GOD, "../lib/misc/ideas"},
{ "xnames", LVL_GOD, "../lib/misc/xnames"},
{ "levels", LVL_GOD, "../log/levels" },
{ "rip", LVL_GOD, "../log/rip" },
{ "players", LVL_GOD, "../log/newplayers" },
{ "rentgone", LVL_GOD, "../log/rentgone" },
{ "errors", LVL_GOD, "../log/errors" },
{ "godcmds", LVL_GOD, "../log/godcmds" },
{ "syslog", LVL_GOD, "../syslog" },
{ "crash", LVL_GOD, "../syslog.CRASH" },
{ "help", LVL_GOD, "../log/help" },
{ "\n", 0, "\n" }
};
skip_spaces(&argument);
if (!*argument) {
send_to_char(ch, "USAGE: file <option> <num lines>\r\n\r\nFile options:\r\n");
for (j = 0, i = 0; fields[i].level; i++)
if (fields[i].level <= GET_LEVEL(ch))
send_to_char(ch, "%-15s%s\r\n", fields[i].cmd, fields[i].file);
return;
}
two_arguments(argument, field, value);
for (l = 0; *(fields[l].cmd) != '\n'; l++)
if (!strncmp(field, fields[l].cmd, strlen(field)))
break;
if(*(fields[l].cmd) == '\n') {
send_to_char(ch, "That is not a valid option!\r\n");
return;
}
if (GET_LEVEL(ch) < fields[l].level) {
send_to_char(ch, "You are not godly enough to view that file!\r\n");
return;
}
if(!*value)
req_lines = 15; /* default is the last 15 lines */
else
req_lines = atoi(value);
if (!(req_file=fopen(fields[l].file,"r"))) {
mudlog(BRF, LVL_IMPL, TRUE,
"SYSERR: Error opening file %s using 'file' command.",
fields[l].file);
return;
}
get_line(req_file, line);
while (!feof(req_file)) {
num_lines++;
get_line(req_file,line);
}
rewind(req_file);
req_lines = MIN(MIN(req_lines, num_lines),150);
len = snprintf(buf, sizeof(buf), "Last %d lines of %s:\r\n", req_lines, fields[l].file);
if (req_lines == num_lines)
len += snprintf(buf + len, sizeof(buf) - len, "Top of file.\r\n");
get_line(req_file,line);
while (!feof(req_file)) {
cur_line++;
if(cur_line > (num_lines - req_lines)) {
nlen = snprintf(buf + len, sizeof(buf) - len, "%s\r\n", line);
if (len + nlen >= sizeof(buf) || nlen < 0)
break;
len += nlen;
}
get_line(req_file,line);
}
fclose(req_file);
if (len >= sizeof(buf)) {
const char *overflow = "\r\n**OVERFLOW**\r\n";
strcpy(buf + sizeof(buf) - strlen(overflow) - 1, overflow); /* strcpy: OK */
}
page_string(ch->desc, buf, 1);
}
ACMD(do_changelog)
{
time_t rawtime;
char tmstr[MAX_INPUT_LENGTH], line[READ_SIZE], last_buf[READ_SIZE],
buf[READ_SIZE];
FILE *fl, *new;
skip_spaces(&argument);
if (!*argument) {
send_to_char(ch, "Usage: changelog <change>\r\n");
return;
}
sprintf(buf, "%s.bak", CHANGE_LOG_FILE);
if (rename(CHANGE_LOG_FILE, buf)) {
mudlog(BRF, LVL_IMPL, TRUE,
"SYSERR: Error making backup changelog file (%s)", buf);
return;
}
if (!(fl = fopen(buf, "r"))) {
mudlog(BRF, LVL_IMPL, TRUE,
"SYSERR: Error opening backup changelog file (%s)", buf);
return;
}
if (!(new = fopen(CHANGE_LOG_FILE, "w"))) {
mudlog(BRF, LVL_IMPL, TRUE,
"SYSERR: Error opening new changelog file (%s)", CHANGE_LOG_FILE);
return;
}
while (get_line(fl, line)) {
if (*line != '[')
fprintf(new, "%s\n", line);
else {
strcpy(last_buf, line);
break;
}
}
rawtime = time(0);
strftime(tmstr, sizeof(tmstr), "%b %d %Y", localtime(&rawtime));
sprintf(buf, "[%s] - %s", tmstr, GET_NAME(ch));
fprintf(new, "%s\n", buf);
fprintf(new, " %s\n", argument);
if (strcmp(buf, last_buf))
fprintf(new, "%s\n", line);
while (get_line(fl, line))
fprintf(new, "%s\n", line);
fclose(fl);
fclose(new);
send_to_char(ch, "Change added.\r\n");
}

View file

@ -357,7 +357,7 @@ void aedit_parse(struct descriptor_data * d, char *arg) {
break;
default:
write_to_output(d, "Invalid choice!\r\n"
"Do you wish to save this action internally? ");
"Do you wish to save your changes? ");
break;
}
return; /* end of AEDIT_CONFIRM_SAVESTRING */
@ -418,7 +418,7 @@ void aedit_parse(struct descriptor_data * d, char *arg) {
switch (*arg) {
case 'q': case 'Q':
if (OLC_VAL(d)) { /* Something was modified */
write_to_output(d, "Do you wish to save this action internally? ");
write_to_output(d, "Do you wish to save your changes? ");
OLC_MODE(d) = AEDIT_CONFIRM_SAVESTRING;
}
else cleanup_olc(d, CLEANUP_ALL);

View file

@ -67,7 +67,7 @@ Be sure to also change NUM_OF_BOARDS in board.h
struct board_info_type board_info[NUM_OF_BOARDS] = {
{3099, 0, 0, LVL_GOD, LIB_ETC "board.mortal", 0},
{3098, LVL_IMMORT, LVL_IMMORT, LVL_GRGOD, LIB_ETC "board.immortal", 0},
{3097, LVL_IMMORT, LVL_FREEZE, LVL_IMPL, LIB_ETC "board.freeze", 0},
{3097, LVL_IMMORT, LVL_GRGOD, LVL_IMPL, LIB_ETC "board.freeze", 0},
{3096, 0, 0, LVL_IMMORT, LIB_ETC "board.social", 0},
{1226, 0, 0, LVL_IMPL, LIB_ETC "board.builder", 0},
{1227, 0, 0, LVL_IMPL, LIB_ETC "board.staff", 0},

View file

@ -810,7 +810,7 @@ void cedit_parse(struct descriptor_data *d, char *arg)
return;
default :
write_to_output(d, "\r\nThat is an invalid choice!\r\n");
write_to_output(d, "Do you wish to save the configuration? (y/n) : ");
write_to_output(d, "Do you wish to save your changes? (y/n) : ");
return;
}
@ -850,7 +850,7 @@ void cedit_parse(struct descriptor_data *d, char *arg)
case 'q':
case 'Q':
write_to_output(d, "Do you wish to save the configuration? (y/n) : ");
write_to_output(d, "Do you wish to save your changes? (y/n) : ");
OLC_MODE(d) = CEDIT_CONFIRM_SAVESTRING;
break;

View file

@ -377,74 +377,74 @@ ACMD(do_reboot)
if (file_to_string_alloc(GREETINGS_FILE, &GREETINGS) == 0)
prune_crlf(GREETINGS);
if (file_to_string_alloc(WIZLIST_FILE, &wizlist) < 0)
send_to_char(ch, "Can not read wizlist\r\n");
send_to_char(ch, "Cannot read wizlist\r\n");
if (file_to_string_alloc(IMMLIST_FILE, &immlist) < 0)
send_to_char(ch, "Can not read immlist\r\n");
send_to_char(ch, "Cannot read immlist\r\n");
if (file_to_string_alloc(NEWS_FILE, &news) < 0)
send_to_char(ch, "Can not read news\r\n");
send_to_char(ch, "Cannot read news\r\n");
if (file_to_string_alloc(CREDITS_FILE, &credits) < 0)
send_to_char(ch, "Can not read credits\r\n");
send_to_char(ch, "Cannot read credits\r\n");
if (file_to_string_alloc(MOTD_FILE, &motd) < 0)
send_to_char(ch, "Can not read motd\r\n");
send_to_char(ch, "Cannot read motd\r\n");
if (file_to_string_alloc(IMOTD_FILE, &imotd) < 0)
send_to_char(ch, "Can not read imotd\r\n");
send_to_char(ch, "Cannot read imotd\r\n");
if (file_to_string_alloc(HELP_PAGE_FILE, &help) < 0)
send_to_char(ch, "Can not read help front page\r\n");
send_to_char(ch, "Cannot read help front page\r\n");
if (file_to_string_alloc(IHELP_PAGE_FILE, &ihelp) < 0)
send_to_char(ch, "Can not read help front page\r\n");
send_to_char(ch, "Cannot read help front page\r\n");
if (file_to_string_alloc(INFO_FILE, &info) < 0)
send_to_char(ch, "Can not read info file\r\n");
send_to_char(ch, "Cannot read info file\r\n");
if (file_to_string_alloc(POLICIES_FILE, &policies) < 0)
send_to_char(ch, "Can not read policies\r\n");
send_to_char(ch, "Cannot read policies\r\n");
if (file_to_string_alloc(HANDBOOK_FILE, &handbook) < 0)
send_to_char(ch, "Can not read handbook\r\n");
send_to_char(ch, "Cannot read handbook\r\n");
if (file_to_string_alloc(BACKGROUND_FILE, &background) < 0)
send_to_char(ch, "Can not read background\r\n");
send_to_char(ch, "Cannot read background\r\n");
if (help_table) {
free_help_table();
index_boot(DB_BOOT_HLP);
}
} else if (!str_cmp(arg, "wizlist")) {
if (file_to_string_alloc(WIZLIST_FILE, &wizlist) < 0)
send_to_char(ch, "Can not read wizlist\r\n");
send_to_char(ch, "Cannot read wizlist\r\n");
} else if (!str_cmp(arg, "immlist")) {
if (file_to_string_alloc(IMMLIST_FILE, &immlist) < 0)
send_to_char(ch, "Can not read immlist\r\n");
send_to_char(ch, "Cannot read immlist\r\n");
} else if (!str_cmp(arg, "news")) {
if (file_to_string_alloc(NEWS_FILE, &news) < 0)
send_to_char(ch, "Can not read news\r\n");
send_to_char(ch, "Cannot read news\r\n");
} else if (!str_cmp(arg, "credits")) {
if (file_to_string_alloc(CREDITS_FILE, &credits) < 0)
send_to_char(ch, "Can not read credits\r\n");
send_to_char(ch, "Cannot read credits\r\n");
} else if (!str_cmp(arg, "motd")) {
if (file_to_string_alloc(MOTD_FILE, &motd) < 0)
send_to_char(ch, "Can not read motd\r\n");
send_to_char(ch, "Cannot read motd\r\n");
} else if (!str_cmp(arg, "imotd")) {
if (file_to_string_alloc(IMOTD_FILE, &imotd) < 0)
send_to_char(ch, "Can not read imotd\r\n");
send_to_char(ch, "Cannot read imotd\r\n");
} else if (!str_cmp(arg, "help")) {
if (file_to_string_alloc(HELP_PAGE_FILE, &help) < 0)
send_to_char(ch, "Can not read help front page\r\n");
send_to_char(ch, "Cannot read help front page\r\n");
} else if (!str_cmp(arg, "ihelp")) {
if (file_to_string_alloc(IHELP_PAGE_FILE, &ihelp) < 0)
send_to_char(ch, "Can not read help front page\r\n");
if (file_to_string_alloc(IHELP_PAGE_FILE, &ihelp) < 0)
send_to_char(ch, "Cannot read help front page\r\n");
} else if (!str_cmp(arg, "info")) {
if (file_to_string_alloc(INFO_FILE, &info) < 0)
send_to_char(ch, "Can not read info\r\n");
send_to_char(ch, "Cannot read info\r\n");
} else if (!str_cmp(arg, "policy")) {
if (file_to_string_alloc(POLICIES_FILE, &policies) < 0)
send_to_char(ch, "Can not read policy\r\n");
send_to_char(ch, "Cannot read policy\r\n");
} else if (!str_cmp(arg, "handbook")) {
if (file_to_string_alloc(HANDBOOK_FILE, &handbook) < 0)
send_to_char(ch, "Can not read handbook\r\n");
send_to_char(ch, "Cannot read handbook\r\n");
} else if (!str_cmp(arg, "background")) {
if (file_to_string_alloc(BACKGROUND_FILE, &background) < 0)
send_to_char(ch, "Can not read background\r\n");
send_to_char(ch, "Cannot read background\r\n");
} else if (!str_cmp(arg, "greetings")) {
if (file_to_string_alloc(GREETINGS_FILE, &GREETINGS) == 0)
prune_crlf(GREETINGS);
else
send_to_char(ch, "Can not read greetings.\r\n");
send_to_char(ch, "Cannot read greetings.\r\n");
} else if (!str_cmp(arg, "xhelp")) {
if (help_table) {
free_help_table();

View file

@ -111,6 +111,7 @@
#define BAN_FILE LIB_ETC"badsites" /* for the siteban system */
#define HCONTROL_FILE LIB_ETC"hcontrol" /* for the house system */
#define TIME_FILE LIB_ETC"time" /* for calendar system */
#define CHANGE_LOG_FILE "../changelog" /* for the changelog */
/* new bitvector data for use in player_index_element */
#define PINDEX_DELETED (1 << 0) /* deleted player */

View file

@ -158,8 +158,10 @@ OCMD(do_oecho)
else if ((room = obj_room(obj)) != NOWHERE)
{
if (world[room].people)
sub_write(argument, world[room].people, TRUE, TO_ROOM | TO_CHAR);
if (world[room].people) {
sub_write(argument, world[room].people, TRUE, TO_ROOM);
sub_write(argument, world[room].people, TRUE, TO_CHAR);
}
}
else
@ -603,8 +605,10 @@ OCMD(do_oasound)
if (world[room].dir_option[door] != NULL &&
(world[room].dir_option[door])->to_room != NOWHERE &&
(world[room].dir_option[door])->to_room != room &&
world[(world[room].dir_option[door])->to_room].people)
sub_write(argument, world[(world[room].dir_option[door])->to_room].people, TRUE, TO_ROOM | TO_CHAR);
world[(world[room].dir_option[door])->to_room].people) {
sub_write(argument, world[(world[room].dir_option[door])->to_room].people, TRUE, TO_ROOM);
sub_write(argument, world[(world[room].dir_option[door])->to_room].people, TRUE, TO_CHAR);
}
}
}

View file

@ -92,11 +92,9 @@ ACMD(do_oasis_trigedit)
return;
}
/*
* Everyone but IMPLs can only edit zones they have been assigned.
*/
/* Everyone but IMPLs can only edit zones they have been assigned.*/
if (!can_edit_zone(ch, OLC_ZNUM(d))) {
send_to_char(ch, " You do not have permission to edit zone %d. Try zone %d.\r\n", zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
send_cannot_edit(ch, zone_table[OLC_ZNUM(d)].number);
mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d (allowed zone %d)",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
free(d->olc);
@ -664,7 +662,7 @@ void trigedit_save(struct descriptor_data *d)
remove(buf);
rename(fname, buf);
write_to_output(d, "Saving Index file\r\n");
write_to_output(d, "Trigger saved to disk.\r\n");
trigedit_create_index(zone, "trg");
}

View file

@ -701,7 +701,7 @@ EVENTFUNC(trig_wait_event)
log("Trigger restarted on unknown entity. Vnum: %d", GET_TRIG_VNUM(trig));
log("Type: %s trigger", type==MOB_TRIGGER ? "Mob" : type == OBJ_TRIGGER ? "Obj" : "Room");
log("attached %d places", trig_index[trig->nr]->number);
//script_log("Trigger restart attempt on unknown entity.");
script_log("Trigger restart attempt on unknown entity.");
return 0;
}
}
@ -1569,22 +1569,19 @@ int process_if(char *cond, void *go, struct script_data *sc,
}
/*
* scans for end of if-block.
* returns the line containg 'end', or the last
* line of the trigger if not found.
*/
/* scans for end of if-block. returns the line containg 'end', or the last
line of the trigger if not found. */
struct cmdlist_element *find_end(trig_data *trig, struct cmdlist_element *cl)
{
struct cmdlist_element *c;
char *p;
if (!(cl->next)) { //rryan: if this is the last line, theres no end
if (!(cl->next)) { /* rryan: if this is the last line, theres no end */
script_log("Trigger VNum %d has 'if' without 'end'. (error 1)", GET_TRIG_VNUM(trig));
return cl;
}
for (c = cl->next; c && c->next; c = c?c->next:NULL) {
for (c = cl->next; c; c = c->next) {
for (p = c->cmd; *p && isspace(*p); p++);
if (!strn_cmp("if ", p, 3))
@ -1599,8 +1596,8 @@ struct cmdlist_element *find_end(trig_data *trig, struct cmdlist_element *cl)
}
}
//rryan: we didn't find an end
//script_log("Trigger VNum %d has 'if' without 'end'. (error 3)", GET_TRIG_VNUM(trig));
/* rryan: we didn't find an end */
script_log("Trigger VNum %d has 'if' without 'end'. (error 3)", GET_TRIG_VNUM(trig));
return c;
}
@ -2562,7 +2559,7 @@ int script_driver(void *go_adress, trig_data *trig, int type, int mode)
dg_owner_purged = 0;
for (cl = (mode == TRIG_NEW) ? trig->cmdlist : trig->curr_state;
cl && GET_TRIG_DEPTH(trig); cl = cl ? cl->next : NULL) {
cl && GET_TRIG_DEPTH(trig); cl = cl->next) {
for (p = cl->cmd; *p && isspace(*p); p++);
if (*p == '*') /* comment */

View file

@ -10,7 +10,6 @@
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "utils.h"
#include "comm.h"
@ -81,9 +80,7 @@ struct attack_hit_type attack_hit_text[] =
};
#define IS_WEAPON(type) (((type) >= TYPE_HIT) && ((type) < TYPE_SUFFERING))
/* The Fight related routines */
void appear(struct char_data *ch)
{
if (affected_by_spell(ch, SPELL_INVISIBLE))
@ -98,7 +95,6 @@ void appear(struct char_data *ch)
FALSE, ch, 0, 0, TO_ROOM);
}
int compute_armor_class(struct char_data *ch)
{
int armorclass = GET_AC(ch);
@ -109,7 +105,6 @@ int compute_armor_class(struct char_data *ch)
return (MAX(-100, armorclass)); /* -100 is lowest */
}
void free_messages_type(struct msg_type *msg)
{
if (msg->attacker_msg) free(msg->attacker_msg);
@ -117,7 +112,6 @@ void free_messages_type(struct msg_type *msg)
if (msg->room_msg) free(msg->room_msg);
}
void free_messages(void)
{
int i;
@ -136,7 +130,6 @@ void free_messages(void)
}
}
void load_messages(void)
{
FILE *fl;
@ -155,46 +148,46 @@ void load_messages(void)
fight_messages[i].msg = NULL;
}
fgets(chk, 128, fl);
while (!feof(fl) && (*chk == '\n' || *chk == '*'))
fgets(chk, 128, fl);
while (*chk == 'M') {
fgets(chk, 128, fl);
sscanf(chk, " %d\n", &type);
for (i = 0; (i < MAX_MESSAGES) && (fight_messages[i].a_type != type) &&
(fight_messages[i].a_type); i++);
if (i >= MAX_MESSAGES) {
log("SYSERR: Too many combat messages. Increase MAX_MESSAGES and recompile.");
exit(1);
}
CREATE(messages, struct message_type, 1);
fight_messages[i].number_of_attacks++;
fight_messages[i].a_type = type;
messages->next = fight_messages[i].msg;
fight_messages[i].msg = messages;
messages->die_msg.attacker_msg = fread_action(fl, i);
messages->die_msg.victim_msg = fread_action(fl, i);
messages->die_msg.room_msg = fread_action(fl, i);
messages->miss_msg.attacker_msg = fread_action(fl, i);
messages->miss_msg.victim_msg = fread_action(fl, i);
messages->miss_msg.room_msg = fread_action(fl, i);
messages->hit_msg.attacker_msg = fread_action(fl, i);
messages->hit_msg.victim_msg = fread_action(fl, i);
messages->hit_msg.room_msg = fread_action(fl, i);
messages->god_msg.attacker_msg = fread_action(fl, i);
messages->god_msg.victim_msg = fread_action(fl, i);
messages->god_msg.room_msg = fread_action(fl, i);
while (!feof(fl)) {
fgets(chk, 128, fl);
while (!feof(fl) && (*chk == '\n' || *chk == '*'))
fgets(chk, 128, fl);
}
while (*chk == 'M') {
fgets(chk, 128, fl);
sscanf(chk, " %d\n", &type);
for (i = 0; (i < MAX_MESSAGES) && (fight_messages[i].a_type != type) &&
(fight_messages[i].a_type); i++);
if (i >= MAX_MESSAGES) {
log("SYSERR: Too many combat messages. Increase MAX_MESSAGES and recompile.");
exit(1);
}
CREATE(messages, struct message_type, 1);
fight_messages[i].number_of_attacks++;
fight_messages[i].a_type = type;
messages->next = fight_messages[i].msg;
fight_messages[i].msg = messages;
messages->die_msg.attacker_msg = fread_action(fl, i);
messages->die_msg.victim_msg = fread_action(fl, i);
messages->die_msg.room_msg = fread_action(fl, i);
messages->miss_msg.attacker_msg = fread_action(fl, i);
messages->miss_msg.victim_msg = fread_action(fl, i);
messages->miss_msg.room_msg = fread_action(fl, i);
messages->hit_msg.attacker_msg = fread_action(fl, i);
messages->hit_msg.victim_msg = fread_action(fl, i);
messages->hit_msg.room_msg = fread_action(fl, i);
messages->god_msg.attacker_msg = fread_action(fl, i);
messages->god_msg.victim_msg = fread_action(fl, i);
messages->god_msg.room_msg = fread_action(fl, i);
fgets(chk, 128, fl);
while (!feof(fl) && (*chk == '\n' || *chk == '*'))
fgets(chk, 128, fl);
}
}
fclose(fl);
}
void update_pos(struct char_data *victim)
{
if ((GET_HIT(victim) > 0) && (GET_POS(victim) > POS_STUNNED))
@ -211,7 +204,6 @@ void update_pos(struct char_data *victim)
GET_POS(victim) = POS_STUNNED;
}
void check_killer(struct char_data *ch, struct char_data *vict)
{
if (PLR_FLAGGED(vict, PLR_KILLER) || PLR_FLAGGED(vict, PLR_THIEF))
@ -225,7 +217,6 @@ void check_killer(struct char_data *ch, struct char_data *vict)
GET_NAME(ch), GET_NAME(vict), world[IN_ROOM(vict)].name);
}
/* start one char fighting another (yes, it is horrible, I know... ) */
void set_fighting(struct char_data *ch, struct char_data *vict)
{
@ -250,8 +241,6 @@ void set_fighting(struct char_data *ch, struct char_data *vict)
check_killer(ch, vict);
}
/* remove a char from the list of fighting chars */
void stop_fighting(struct char_data *ch)
{
@ -267,8 +256,6 @@ void stop_fighting(struct char_data *ch)
update_pos(ch);
}
void make_corpse(struct char_data *ch)
{
char buf2[MAX_NAME_LENGTH + 64];
@ -335,19 +322,14 @@ void make_corpse(struct char_data *ch)
obj_to_room(corpse, IN_ROOM(ch));
}
/* When ch kills victim */
void change_alignment(struct char_data *ch, struct char_data *victim)
{
/*
* new alignment change algorithm: if you kill a monster with alignment A,
* you move 1/16th of the way to having alignment -A. Simple and fast.
*/
/* new alignment change algorithm: if you kill a monster with alignment A,
* you move 1/16th of the way to having alignment -A. Simple and fast. */
GET_ALIGNMENT(ch) += (-GET_ALIGNMENT(victim) - GET_ALIGNMENT(ch)) / 16;
}
void death_cry(struct char_data *ch)
{
int door;
@ -359,8 +341,6 @@ void death_cry(struct char_data *ch)
send_to_room(world[IN_ROOM(ch)].dir_option[door]->to_room, "Your blood freezes as you hear someone's death cry.\r\n");
}
void raw_kill(struct char_data * ch, struct char_data * killer)
{
if (FIGHTING(ch))
@ -384,8 +364,6 @@ void raw_kill(struct char_data * ch, struct char_data * killer)
extract_char(ch);
}
void die(struct char_data * ch, struct char_data * killer)
{
gain_exp(ch, -(GET_EXP(ch) / 2));
@ -394,8 +372,6 @@ void die(struct char_data * ch, struct char_data * killer)
raw_kill(ch, killer);
}
void perform_group_gain(struct char_data *ch, int base,
struct char_data *victim)
{
@ -412,7 +388,6 @@ void perform_group_gain(struct char_data *ch, int base,
change_alignment(ch, victim);
}
void group_gain(struct char_data *ch, struct char_data *victim)
{
int tot_members, base, tot_gain;
@ -451,7 +426,6 @@ void group_gain(struct char_data *ch, struct char_data *victim)
perform_group_gain(f->follower, base, victim);
}
void solo_gain(struct char_data *ch, struct char_data *victim)
{
int exp;
@ -475,7 +449,6 @@ void solo_gain(struct char_data *ch, struct char_data *victim)
change_alignment(ch, victim);
}
char *replace_string(const char *str, const char *weapon_singular, const char *weapon_plural)
{
static char buf[256];
@ -503,7 +476,6 @@ char *replace_string(const char *str, const char *weapon_singular, const char *w
return (buf);
}
/* message for doing damage with a weapon */
void dam_message(int dam, struct char_data *ch, struct char_data *victim,
int w_type)
@ -574,7 +546,6 @@ void dam_message(int dam, struct char_data *ch, struct char_data *victim,
}
};
w_type -= TYPE_HIT; /* Change to base of table with text */
if (dam == 0) msgnum = 0;
@ -607,11 +578,8 @@ void dam_message(int dam, struct char_data *ch, struct char_data *victim,
send_to_char(victim, CCNRM(victim, C_CMP));
}
/*
* message for doing damage with a spell or skill
* C3.0: Also used for weapon damage on miss and death blows
*/
/* message for doing damage with a spell or skill. Also used for weapon
* damage on miss and death blows. */
int skill_message(int dam, struct char_data *ch, struct char_data *vict,
int attacktype)
{
@ -679,12 +647,10 @@ int skill_message(int dam, struct char_data *ch, struct char_data *vict,
return (0);
}
/*
* Alert: As of bpl14, this function returns the following codes:
/* This function returns the following codes:
* < 0 Victim died.
* = 0 No damage.
* > 0 How much damage done.
*/
* > 0 How much damage done. */
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype)
{
long local_gold = 0;
@ -760,17 +726,15 @@ int damage(struct char_data *ch, struct char_data *victim, int dam, int attackty
update_pos(victim);
/*
* skill_message sends a message from the messages file in lib/misc.
* dam_message just sends a generic "You hit $n extremely hard.".
/* skill_message sends a message from the messages file in lib/misc.
* dam_message just sends a generic "You hit $n extremely hard.".
* skill_message is preferable to dam_message because it is more
* descriptive.
*
* If we are _not_ attacking with a weapon (i.e. a spell), always use
* skill_message. If we are attacking with a weapon: If this is a miss or a
* death blow, send a skill_message if one exists; if not, default to a
* dam_message. Otherwise, always send a dam_message.
*/
* dam_message. Otherwise, always send a dam_message. */
if (!IS_WEAPON(attacktype))
skill_message(dam, ch, victim, attacktype);
else {
@ -880,14 +844,9 @@ int damage(struct char_data *ch, struct char_data *victim, int dam, int attackty
return (dam);
}
/*
* Calculate the THAC0 of the attacker.
*
* 'victim' currently isn't used but you could use it for special cases like
* weapons that hit evil creatures easier or a weapon that always misses
* attacking an animal.
*/
/* Calculate the THAC0 of the attacker. 'victim' currently isn't used but you
* could use it for special cases like weapons that hit evil creatures easier
* or a weapon that always misses attacking an animal. */
int compute_thaco(struct char_data *ch, struct char_data *victim)
{
int calc_thaco;
@ -904,7 +863,6 @@ int compute_thaco(struct char_data *ch, struct char_data *victim)
return calc_thaco;
}
void hit(struct char_data *ch, struct char_data *victim, int type)
{
struct obj_data *wielded = GET_EQ(ch, WEAR_WIELD);
@ -939,14 +897,11 @@ void hit(struct char_data *ch, struct char_data *victim, int type)
/* roll the die and take your chances... */
diceroll = rand_number(1, 20);
/*
* Decide whether this is a hit or a miss.
*
/* Decide whether this is a hit or a miss.
* Victim asleep = hit, otherwise:
* 1 = Automatic miss.
* 2..19 = Checked vs. AC.
* 20 = Automatic hit.
*/
* 20 = Automatic hit. */
if (diceroll == 20 || !AWAKE(victim))
dam = TRUE;
else if (diceroll == 1)
@ -958,9 +913,8 @@ void hit(struct char_data *ch, struct char_data *victim, int type)
/* the attacker missed the victim */
damage(ch, victim, 0, type == SKILL_BACKSTAB ? SKILL_BACKSTAB : w_type);
else {
/* okay, we know the guy has been hit. now calculate damage. */
/* Start with the damage bonuses: the damroll and strength apply */
/* okay, we know the guy has been hit. now calculate damage.
* Start with the damage bonuses: the damroll and strength apply */
dam = str_app[STRENGTH_APPLY_INDEX(ch)].todam;
dam += GET_DAMROLL(ch);
@ -976,19 +930,15 @@ void hit(struct char_data *ch, struct char_data *victim, int type)
dam += rand_number(0, 2); /* Max 2 bare hand damage for players */
}
/*
* Include a damage multiplier if victim isn't ready to fight:
*
/* Include a damage multiplier if victim isn't ready to fight:
* Position sitting 1.33 x normal
* Position resting 1.66 x normal
* Position sleeping 2.00 x normal
* Position stunned 2.33 x normal
* Position incap 2.66 x normal
* Position mortally 3.00 x normal
*
* Note, this is a hack because it depends on the particular
* values of the POSITION_XXX constants.
*/
* values of the POSITION_XXX constants. */
if (GET_POS(victim) < POS_FIGHTING)
dam *= 1 + (POS_FIGHTING - GET_POS(victim)) / 3;
@ -1005,8 +955,6 @@ void hit(struct char_data *ch, struct char_data *victim, int type)
hitprcnt_mtrigger(victim);
}
/* control the fights going on. Called every 2 seconds from comm.c. */
void perform_violence(void)
{

View file

@ -74,7 +74,7 @@ int save_all(void)
while (save_list) {
if (save_list->type < 0 || save_list->type > SL_MAX) {
if (save_list->type == SL_ACTION) {
log("Actions not saved - can not autosave. Use 'aedit save'.");
log("Actions not saved - cannot autosave. Use 'aedit save'.");
save_list = save_list->next; /* Fatal error, skip this one. */
} else
log("SYSERR: GenOLC: Invalid save type %d in save list.\n", save_list->type);

View file

@ -77,6 +77,7 @@ ACMD(do_backstab);
ACMD(do_ban);
ACMD(do_bash);
ACMD(do_cast);
ACMD(do_changelog);
ACMD(do_commands);
ACMD(do_consider);
ACMD(do_copyover);
@ -279,6 +280,7 @@ cpp_extern const struct command_info cmd_info[] = {
{ "cast" , "c" , POS_SITTING , do_cast , 1, 0 },
{ "cedit" , "cedit" , POS_DEAD , do_oasis , LVL_IMPL, SCMD_OASIS_CEDIT },
{ "changelog", "cha" , POS_DEAD , do_changelog, LVL_IMPL, 0 },
{ "check" , "ch" , POS_STANDING, do_not_here , 1, 0 },
{ "checkload", "checkl" , POS_DEAD , do_checkloadstatus, LVL_GOD, 0 },
{ "close" , "cl" , POS_SITTING , do_gen_door , 0, SCMD_CLOSE },
@ -316,7 +318,7 @@ cpp_extern const struct command_info cmd_info[] = {
{ "file" , "file" , POS_SLEEPING, do_file , LVL_GOD, 0 },
{ "flee" , "fl" , POS_FIGHTING, do_flee , 1, 0 },
{ "follow" , "fol" , POS_RESTING , do_follow , 0, 0 },
{ "freeze" , "freeze" , POS_DEAD , do_wizutil , LVL_FREEZE, SCMD_FREEZE },
{ "freeze" , "freeze" , POS_DEAD , do_wizutil , LVL_GRGOD, SCMD_FREEZE },
{ "get" , "g" , POS_RESTING , do_get , 0, 0 },
{ "gecho" , "gecho" , POS_DEAD , do_gecho , LVL_GOD, 0 },
@ -459,7 +461,7 @@ cpp_extern const struct command_info cmd_info[] = {
{ "taste" , "tas" , POS_RESTING , do_eat , 0, SCMD_TASTE },
{ "teleport" , "tele" , POS_DEAD , do_teleport , LVL_GOD, 0 },
{ "tedit" , "tedit" , POS_DEAD , do_tedit , LVL_GOD, 0 }, /* XXX: Oasisify */
{ "thaw" , "thaw" , POS_DEAD , do_wizutil , LVL_FREEZE, SCMD_THAW },
{ "thaw" , "thaw" , POS_DEAD , do_wizutil , LVL_GRGOD, SCMD_THAW },
{ "title" , "title" , POS_DEAD , do_title , 0, 0 },
{ "time" , "time" , POS_DEAD , do_time , 0, 0 },
{ "toggle" , "toggle" , POS_DEAD , do_toggle , 0, 0 },

View file

@ -37,8 +37,8 @@ char *delete_doubledollar(char *string);
#define argument_interpreter(a, b, c) two_arguments(a, b, c)
/* WARNING: if you have added diagonal directions and have them at the
* beginning of the command list.. change this value to 11 or 15 (depending) */
/* reserve these commands to come straight from the cmd list then start
* beginning of the command list.. change this value to 11 or 15 (depending)
* reserve these commands to come straight from the cmd list then start
* sorting */
#define RESERVE_CMDS 7
@ -52,19 +52,12 @@ struct command_info {
int subcmd;
};
/*
* Necessary for CMD_IS macro. Borland needs the structure defined first
* so it has been moved down here.
*/
/* Necessary for CMD_IS macro. Borland needs the structure defined first
* so it has been moved down here. */
#ifndef __INTERPRETER_C__
extern struct command_info *complete_cmd_info;
#endif
/*
* Alert! Changed from 'struct alias' to 'struct alias_data' in bpl15
* because a Windows 95 compiler gives a warning about it having similiar
* named member.
*/
struct alias_data {
char *alias;
char *replacement;
@ -79,12 +72,8 @@ struct alias_data {
#define ALIAS_VAR_CHAR '$'
#define ALIAS_GLOB_CHAR '*'
/*
* SUBCOMMANDS
* You can define these however you want to, and the definitions of the
* subcommands are independent from function to function.
*/
/* SUBCOMMANDS: You can define these however you want to, and the definitions
* of the subcommands are independent from function to function.*/
/* directions */
#define SCMD_NORTH 1
#define SCMD_EAST 2

View file

@ -2,15 +2,15 @@
cat << EOF
CircleMUD is freeware (it doesn't cost anything), but it is copyrighted
TbaMUD is freeware (it doesn't cost anything), but it is copyrighted
and has a license. You must read and agree to abide by the license before
using CircleMUD.
using tbaMUD.
This message will only appear once (the first time you compile the server),
but is contained in the file doc/license.txt if you'd like to refer back to
it in the future.
Press return to read the license.
Press return to read the license. Press Q to ACCEPT the terms and quit.
EOF
read temp
cat ../doc/license.txt | $1

View file

@ -414,7 +414,8 @@ void postmaster_receive_mail(struct char_data *ch, struct char_data *mailman,
return;
}
while (has_mail(GET_IDNUM(ch))) {
obj = read_object(1, VIRTUAL); /*a pair of wings will work :)*/
obj = create_obj();
obj->item_number = 1;
obj->name = strdup("mail paper letter");
obj->short_description = strdup("a piece of mail");
obj->description = strdup("Someone has left a piece of mail here.");

View file

@ -40,10 +40,7 @@ void medit_disp_mob_flags(struct descriptor_data *d);
void medit_disp_aff_flags(struct descriptor_data *d);
void medit_disp_menu(struct descriptor_data *d);
/*-------------------------------------------------------------------*\
utility functions
\*-------------------------------------------------------------------*/
/* utility functions */
ACMD(do_oasis_medit)
{
int number = NOBODY, save = 0, real_num;
@ -52,9 +49,7 @@ ACMD(do_oasis_medit)
char buf1[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH];
/****************************************************************************/
/** Parse any arguments. **/
/****************************************************************************/
/* Parse any arguments */
buf3 = two_arguments(argument, buf1, buf2);
if (!*buf1) {
@ -85,15 +80,11 @@ ACMD(do_oasis_medit)
}
}
/****************************************************************************/
/** If a numeric argument was given (like a room number), get it. **/
/****************************************************************************/
/* If a numeric argument was given (like a room number), get it. */
if (number == NOBODY)
number = atoi(buf1);
/****************************************************************************/
/** Check that whatever it is isn't already being edited. **/
/****************************************************************************/
/* Check that whatever it is isn't already being edited. */
for (d = descriptor_list; d; d = d->next) {
if (STATE(d) == CON_MEDIT) {
if (d->olc && OLC_NUM(d) == number) {
@ -106,9 +97,7 @@ ACMD(do_oasis_medit)
d = ch->desc;
/****************************************************************************/
/** Give descriptor an OLC structure. **/
/****************************************************************************/
/* Give descriptor an OLC structure. */
if (d->olc) {
mudlog(BRF, LVL_IMMORT, TRUE,
"SYSERR: do_oasis_medit: Player already had olc structure.");
@ -117,9 +106,7 @@ ACMD(do_oasis_medit)
CREATE(d->olc, struct oasis_olc_data, 1);
/****************************************************************************/
/** Find the zone. **/
/****************************************************************************/
/* Find the zone. */
OLC_ZNUM(d) = save ? real_zone(number) : real_zone_by_thing(number);
if (OLC_ZNUM(d) == NOWHERE) {
send_to_char(ch, "Sorry, there is no zone for that number!\r\n");
@ -128,21 +115,17 @@ ACMD(do_oasis_medit)
return;
}
/****************************************************************************/
/** Everyone but IMPLs can only edit zones they have been assigned. **/
/****************************************************************************/
/* Everyone but IMPLs can only edit zones they have been assigned. */
if (!can_edit_zone(ch, OLC_ZNUM(d))) {
send_to_char(ch, " You do not have permission to edit zone %d. Try zone %d.\r\n", zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
send_cannot_edit(ch, zone_table[OLC_ZNUM(d)].number);
mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
free(d->olc);
d->olc = NULL;
return;
}
/****************************************************************************/
/** If save is TRUE, save the mobiles. **/
/****************************************************************************/
/* If save is TRUE, save the mobiles. */
if (save) {
send_to_char(ch, "Saving all mobiles in zone %d.\r\n",
zone_table[OLC_ZNUM(d)].number);
@ -150,14 +133,10 @@ mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
"OLC: %s saves mobile info for zone %d.",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number);
/**************************************************************************/
/** Save the mobiles. **/
/**************************************************************************/
/* Save the mobiles. */
save_mobiles(OLC_ZNUM(d));
/**************************************************************************/
/** Free the olc structure stored in the descriptor. **/
/**************************************************************************/
/* Free the olc structure stored in the descriptor. */
free(d->olc);
d->olc = NULL;
return;
@ -165,10 +144,8 @@ mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
OLC_NUM(d) = number;
/****************************************************************************/
/** If this is a new mobile, setup a new one, otherwise, setup the **/
/** existing mobile. **/
/****************************************************************************/
/* If this is a new mobile, setup a new one, otherwise, setup the
existing mobile. */
if ((real_num = real_mobile(number)) == NOBODY)
medit_setup_new(d);
else
@ -176,10 +153,8 @@ mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
STATE(d) = CON_MEDIT;
/****************************************************************************/
/** Display the OLC messages to the players in the same room as the **/
/** builder and also log it. **/
/****************************************************************************/
/* Display the OLC messages to the players in the same room as the
builder and also log it. */
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
@ -196,17 +171,13 @@ void medit_setup_new(struct descriptor_data *d)
{
struct char_data *mob;
/*
* Allocate a scratch mobile structure.
*/
/* Allocate a scratch mobile structure. */
CREATE(mob, struct char_data, 1);
init_mobile(mob);
GET_MOB_RNUM(mob) = NOBODY;
/*
* Set up some default strings.
*/
/* Set up some default strings. */
GET_ALIAS(mob) = strdup("mob unfinished");
GET_SDESC(mob) = strdup("the unfinished mob");
GET_LDESC(mob) = strdup("An unfinished mob stands here.\r\n");
@ -222,15 +193,11 @@ void medit_setup_new(struct descriptor_data *d)
medit_disp_menu(d);
}
/*-------------------------------------------------------------------*/
void medit_setup_existing(struct descriptor_data *d, int rmob_num)
{
struct char_data *mob;
/*
* Allocate a scratch mobile structure.
*/
/* Allocate a scratch mobile structure. */
CREATE(mob, struct char_data, 1);
copy_mobile(mob, mob_proto + rmob_num);
@ -248,12 +215,7 @@ void medit_setup_existing(struct descriptor_data *d, int rmob_num)
medit_disp_menu(d);
}
/*-------------------------------------------------------------------*/
/*
* Ideally, this function should be in db.c, but I'll put it here for
* portability.
*/
/* Ideally, this function should be in db.c, but I'll put it here for portability. */
void init_mobile(struct char_data *mob)
{
clear_char(mob);
@ -272,11 +234,7 @@ void init_mobile(struct char_data *mob)
mob->player_specials = &dummy_mob;
}
/*-------------------------------------------------------------------*/
/*
* Save new/edited mob to memory.
*/
/* Save new/edited mob to memory. */
void medit_save_internally(struct descriptor_data *d)
{
int i;
@ -291,8 +249,7 @@ void medit_save_internally(struct descriptor_data *d)
return;
}
/* Update triggers */
/* Free old proto list */
/* Update triggers and free old proto list */
if (mob_proto[new_rnum].proto_script &&
mob_proto[new_rnum].proto_script != OLC_SCRIPT(d))
free_proto_script(&mob_proto[new_rnum], MOB_TRIGGER);
@ -317,9 +274,7 @@ void medit_save_internally(struct descriptor_data *d)
if (!i) /* Only renumber on new mobiles. */
return;
/*
* Update keepers in shops being edited and other mobs being edited.
*/
/* Update keepers in shops being edited and other mobs being edited. */
for (dsc = descriptor_list; dsc; dsc = dsc->next) {
if (STATE(dsc) == CON_SEDIT)
S_KEEPER(OLC_SHOP(dsc)) += (S_KEEPER(OLC_SHOP(dsc)) >= new_rnum);
@ -327,9 +282,7 @@ void medit_save_internally(struct descriptor_data *d)
GET_MOB_RNUM(OLC_MOB(dsc)) += (GET_MOB_RNUM(OLC_MOB(dsc)) >= new_rnum);
}
/*
* Update other people in zedit too. From: C.Raehl 4/27/99
*/
/* Update other people in zedit too. From: C.Raehl 4/27/99 */
for (dsc = descriptor_list; dsc; dsc = dsc->next)
if (STATE(dsc) == CON_ZEDIT)
for (i = 0; OLC_ZONE(dsc)->cmd[i].command != 'S'; i++)
@ -338,13 +291,8 @@ void medit_save_internally(struct descriptor_data *d)
OLC_ZONE(dsc)->cmd[i].arg1++;
}
/**************************************************************************
Menu functions
**************************************************************************/
/*
* Display positions. (sitting, standing, etc)
*/
/* Menu functions
Display positions. (sitting, standing, etc) */
void medit_disp_positions(struct descriptor_data *d)
{
int i;
@ -358,9 +306,7 @@ void medit_disp_positions(struct descriptor_data *d)
write_to_output(d, "Enter position number : ");
}
/*
* Display the gender of the mobile.
*/
/* Display the gender of the mobile. */
void medit_disp_sex(struct descriptor_data *d)
{
int i;
@ -374,11 +320,7 @@ void medit_disp_sex(struct descriptor_data *d)
write_to_output(d, "Enter gender number : ");
}
/*-------------------------------------------------------------------*/
/*
* Display attack types menu.
*/
/* Display attack types menu. */
void medit_disp_attack_types(struct descriptor_data *d)
{
int i;
@ -392,11 +334,7 @@ void medit_disp_attack_types(struct descriptor_data *d)
write_to_output(d, "Enter attack type : ");
}
/*-------------------------------------------------------------------*/
/*
* Display mob-flags menu.
*/
/* Display mob-flags menu. */
void medit_disp_mob_flags(struct descriptor_data *d)
{
int i, columns = 0;
@ -413,11 +351,7 @@ void medit_disp_mob_flags(struct descriptor_data *d)
cyn, flags, nrm);
}
/*-------------------------------------------------------------------*/
/*
* Display affection flags menu.
*/
/* Display affection flags menu. */
void medit_disp_aff_flags(struct descriptor_data *d)
{
int i, columns = 0;
@ -434,11 +368,7 @@ void medit_disp_aff_flags(struct descriptor_data *d)
cyn, flags, nrm);
}
/*-------------------------------------------------------------------*/
/*
* Display main menu.
*/
/* Display main menu. */
void medit_disp_menu(struct descriptor_data *d)
{
struct char_data *mob;
@ -506,10 +436,6 @@ void medit_disp_menu(struct descriptor_data *d)
OLC_MODE(d) = MEDIT_MAIN_MENU;
}
/************************************************************************
* The GARGANTAUN event handler *
************************************************************************/
void medit_parse(struct descriptor_data *d, char *arg)
{
int i = -1;
@ -526,18 +452,13 @@ void medit_parse(struct descriptor_data *d, char *arg)
return;
}
switch (OLC_MODE(d)) {
/*-------------------------------------------------------------------*/
case MEDIT_CONFIRM_SAVESTRING:
/*
* Ensure mob has MOB_ISNPC set or things will go pear shaped.
*/
/* Ensure mob has MOB_ISNPC set. */
SET_BIT(MOB_FLAGS(OLC_MOB(d)), MOB_ISNPC);
switch (*arg) {
case 'y':
case 'Y':
/*
* Save the mob in memory and to disk.
*/
/* Save the mob in memory and to disk. */
medit_save_internally(d);
mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE, "OLC: %s edits mob %d", GET_NAME(d->character), OLC_NUM(d));
if (CONFIG_OLC_SAVE) {
@ -557,7 +478,6 @@ void medit_parse(struct descriptor_data *d, char *arg)
}
break;
/*-------------------------------------------------------------------*/
case MEDIT_MAIN_MENU:
i = 0;
switch (*arg) {
@ -700,25 +620,25 @@ void medit_parse(struct descriptor_data *d, char *arg)
else
write_to_output(d, "Oops...\r\n");
return;
/*-------------------------------------------------------------------*/
case OLC_SCRIPT_EDIT:
if (dg_script_edit_parse(d, arg)) return;
break;
/*-------------------------------------------------------------------*/
case MEDIT_KEYWORD:
smash_tilde(arg);
if (GET_ALIAS(OLC_MOB(d)))
free(GET_ALIAS(OLC_MOB(d)));
GET_ALIAS(OLC_MOB(d)) = str_udup(arg);
break;
/*-------------------------------------------------------------------*/
case MEDIT_S_DESC:
smash_tilde(arg);
if (GET_SDESC(OLC_MOB(d)))
free(GET_SDESC(OLC_MOB(d)));
GET_SDESC(OLC_MOB(d)) = str_udup(arg);
break;
/*-------------------------------------------------------------------*/
case MEDIT_L_DESC:
smash_tilde(arg);
if (GET_LDESC(OLC_MOB(d)))
@ -731,7 +651,7 @@ void medit_parse(struct descriptor_data *d, char *arg)
GET_LDESC(OLC_MOB(d)) = strdup("undefined");
break;
/*-------------------------------------------------------------------*/
case MEDIT_D_DESC:
/*
* We should never get here.
@ -740,7 +660,7 @@ void medit_parse(struct descriptor_data *d, char *arg)
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: medit_parse(): Reached D_DESC case!");
write_to_output(d, "Oops...\r\n");
break;
/*-------------------------------------------------------------------*/
case MEDIT_NPC_FLAGS:
if ((i = atoi(arg)) <= 0)
break;
@ -748,7 +668,7 @@ void medit_parse(struct descriptor_data *d, char *arg)
TOGGLE_BIT(MOB_FLAGS(OLC_MOB(d)), 1 << (i - 1));
medit_disp_mob_flags(d);
return;
/*-------------------------------------------------------------------*/
case MEDIT_AFF_FLAGS:
if ((i = atoi(arg)) <= 0)
break;
@ -761,10 +681,7 @@ void medit_parse(struct descriptor_data *d, char *arg)
medit_disp_aff_flags(d);
return;
/*-------------------------------------------------------------------*/
/*
* Numerical responses.
*/
/* Numerical responses. */
case MEDIT_SEX:
GET_SEX(OLC_MOB(d)) = LIMIT(i, 0, NUM_GENDERS - 1);
@ -861,23 +778,16 @@ void medit_parse(struct descriptor_data *d, char *arg)
write_to_output(d, "Please answer 'Y' or 'N': ");
break;
/*-------------------------------------------------------------------*/
default:
/*
* We should never get here.
*/
/* We should never get here. */
cleanup_olc(d, CLEANUP_ALL);
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: medit_parse(): Reached default case!");
write_to_output(d, "Oops...\r\n");
break;
}
/*-------------------------------------------------------------------*/
/*
* END OF CASE
* If we get here, we have probably changed something, and now want to
* return to main menu. Use OLC_VAL as a 'has changed' flag
*/
/* END OF CASE If we get here, we have probably changed something, and now want
to return to main menu. Use OLC_VAL as a 'has changed' flag */
OLC_VAL(d) = TRUE;
medit_disp_menu(d);

View file

@ -426,3 +426,11 @@ int can_edit_zone(struct char_data *ch, zone_rnum rnum)
return (FALSE);
}
void send_cannot_edit(struct char_data *ch, zone_vnum zone)
{
send_to_char(ch, "You do not have permission to edit zone %d.", zone);
if (GET_OLC_ZONE(ch) != NOWHERE)
send_to_char(ch, " Try zone %d.", GET_OLC_ZONE(ch));
send_to_char(ch, "\r\n");
}

View file

@ -7,21 +7,16 @@
#define _OASISOLC 0x206 /* 2.0.6 */
/*
* Used to determine what version of OasisOLC is installed.
*
* Ex: #if _OASISOLC >= OASIS_VERSION(2,0,0)
*/
/* Used to determine what version of OasisOLC is installed.
Ex: #if _OASISOLC >= OASIS_VERSION(2,0,0) */
#define OASIS_VERSION(x,y,z) (((x) << 8 | (y) << 4 | (z))
#define AEDIT_PERMISSION 999 /* arbitrary number higher than max zone vnum*/
#define HEDIT_PERMISSION 888 /* arbitrary number higher then max zone vnum*/
#define ALL_PERMISSION 666 /* arbitrary number higher then max zone vnum*/
/*
* Macros, defines, structs and globals for the OLC suite. You will need
* to adjust these numbers if you ever add more.
*/
/* Macros, defines, structs and globals for the OLC suite. You will need
to adjust these numbers if you ever add more. */
#define NUM_ROOM_FLAGS 16
#define NUM_ROOM_SECTORS 10
@ -41,11 +36,7 @@
#define NUM_SHOP_FLAGS 3
#define NUM_TRADERS 7
/* -------------------------------------------------------------------------- */
/*
* Limit information.
*/
/* Limit information. */
#define MAX_ROOM_NAME 75
#define MAX_MOB_NAME 50
#define MAX_OBJ_NAME 50
@ -68,17 +59,16 @@
#define MAX_MOB_GOLD 100000
#define MAX_MOB_EXP 150000
/* this is one mud year.. */
#define MAX_OBJ_TIMER 1071000
/* this defines how much memory is alloacted for 'bit strings' when
* saving in OLC. Remember to change it if you go for longer bitvectors.
*/
saving in OLC. Remember to change it if you go for longer bitvectors. */
#define BIT_STRING_LENGTH 33
/*
* The data types for miscellaneous functions.
*/
/* The data types for miscellaneous functions. */
#define OASIS_WLD 0
#define OASIS_MOB 1
#define OASIS_OBJ 2
@ -86,22 +76,14 @@
#define OASIS_EXI 4
#define OASIS_CFG 5
/*
* Utilities exported from olc.c.
* -- Umm, shouldn't this say 'from oasis.c' now??? * Mythran
*/
/* Utilities exported from oasis.c. */
void cleanup_olc(struct descriptor_data *d, byte cleanup_type);
void get_char_colors(struct char_data *ch);
void split_argument(char *argument, char *tag);
void send_cannot_edit(struct char_data *ch, zone_vnum zone);
/*
* OLC structures.
*/
/* -------------------------------------------------------------------------- */
/*
* The following defines used to be in config.c.
*/
/* OLC structures. */
/* The following defines used to be in config.c. */
#define NO 0
#define YES 1
@ -127,14 +109,10 @@ struct oasis_olc_data {
struct help_index_element*help; /* Hedit uses this */
};
/*
* Exported globals.
*/
/* Exported globals. */
extern const char *nrm, *grn, *cyn, *yel;
/*
* Descriptor access macros.
*/
/* Descriptor access macros. */
#define OLC(d) ((d)->olc)
#define OLC_MODE(d) (OLC(d)->mode) /* Parse input mode. */
#define OLC_NUM(d) (OLC(d)->number) /* Room/Obj VNUM. */
@ -154,14 +132,10 @@ extern const char *nrm, *grn, *cyn, *yel;
#define OLC_ACTION(d) (OLC(d)->action) /* Action structure */
#define OLC_HELP(d) (OLC(d)->help) /* Hedit structure */
/*
* Other macros.
*/
/* Other macros. */
#define OLC_EXIT(d) (OLC_ROOM(d)->dir_option[OLC_VAL(d)])
/*
* Cleanup types.
*/
/* Cleanup types. */
#define CLEANUP_ALL 1 /* Free the whole lot. */
#define CLEANUP_STRUCTS 2 /* Don't free strings. */
#define CLEANUP_CONFIG 3 /* Used just to send proper message. */
@ -191,9 +165,7 @@ extern const char *nrm, *grn, *cyn, *yel;
#define AEDIT_OBJ_CHAR_FOUND 21
#define AEDIT_OBJ_OTHERS_FOUND 22
/*
* Submodes of OEDIT connectedness.
*/
/* Submodes of OEDIT connectedness. */
#define OEDIT_MAIN_MENU 1
#define OEDIT_KEYWORD 2
#define OEDIT_SHORTDESC 3
@ -222,9 +194,7 @@ extern const char *nrm, *grn, *cyn, *yel;
#define OEDIT_PERM 26
#define OEDIT_DELETE 27
/*
* Submodes of REDIT connectedness.
*/
/* Submodes of REDIT connectedness. */
#define REDIT_MAIN_MENU 1
#define REDIT_NAME 2
#define REDIT_DESC 3
@ -243,9 +213,7 @@ extern const char *nrm, *grn, *cyn, *yel;
#define REDIT_EXTRADESC_DESCRIPTION 16
#define REDIT_DELETE 17
/*
* Submodes of ZEDIT connectedness.
*/
/* Submodes of ZEDIT connectedness. */
#define ZEDIT_MAIN_MENU 0
#define ZEDIT_DELETE_ENTRY 1
#define ZEDIT_NEW_ENTRY 2
@ -265,9 +233,7 @@ extern const char *nrm, *grn, *cyn, *yel;
#define ZEDIT_SARG1 20
#define ZEDIT_SARG2 21
/*
* Submodes of MEDIT connectedness.
*/
/* Submodes of MEDIT connectedness. */
#define MEDIT_MAIN_MENU 0
#define MEDIT_KEYWORD 1
#define MEDIT_S_DESC 2
@ -276,9 +242,8 @@ extern const char *nrm, *grn, *cyn, *yel;
#define MEDIT_NPC_FLAGS 5
#define MEDIT_AFF_FLAGS 6
#define MEDIT_CONFIRM_SAVESTRING 7
/*
* Numerical responses.
*/
/* Numerical responses. */
#define MEDIT_NUMERICAL_RESPONSE 10
#define MEDIT_SEX 11
#define MEDIT_HITROLL 12
@ -298,9 +263,7 @@ extern const char *nrm, *grn, *cyn, *yel;
#define MEDIT_ALIGNMENT 26
#define MEDIT_DELETE 27
/*
* Submodes of SEDIT connectedness.
*/
/* Submodes of SEDIT connectedness. */
#define SEDIT_MAIN_MENU 0
#define SEDIT_CONFIRM_SAVESTRING 1
#define SEDIT_NOITEM1 2
@ -314,9 +277,8 @@ extern const char *nrm, *grn, *cyn, *yel;
#define SEDIT_ROOMS_MENU 12
#define SEDIT_NAMELIST_MENU 13
#define SEDIT_NAMELIST 14
/*
* Numerical responses.
*/
/* Numerical responses. */
#define SEDIT_NUMERICAL_RESPONSE 20
#define SEDIT_OPEN1 21
#define SEDIT_OPEN2 22
@ -334,9 +296,7 @@ extern const char *nrm, *grn, *cyn, *yel;
#define SEDIT_SHOP_FLAGS 35
#define SEDIT_NOTRADE 36
/*
* Submodes of CEDIT connectedness.
*/
/* Submodes of CEDIT connectedness. */
#define CEDIT_MAIN_MENU 0
#define CEDIT_CONFIRM_SAVESTRING 1
#define CEDIT_GAME_OPTIONS_MENU 2
@ -355,9 +315,7 @@ extern const char *nrm, *grn, *cyn, *yel;
#define CEDIT_WELC_MESSG 15
#define CEDIT_START_MESSG 16
/*
* Numerical responses.
*/
/* Numerical responses. */
#define CEDIT_NUMERICAL_RESPONSE 20
#define CEDIT_LEVEL_CAN_SHOUT 21
#define CEDIT_HOLLER_MOVE_COST 22
@ -402,14 +360,9 @@ extern const char *nrm, *grn, *cyn, *yel;
#define HEDIT_LIST 0 /* Define True, for logging help - FUTURE USE */
/* -------------------------------------------------------------------------- */
#ifndef __GENOLC_C__
/*
* Prototypes to keep.
*/
/* Prototypes to keep. */
#ifndef ACMD
#define ACMD(name) \
void name(struct char_data *ch, char *argument, int cmd, int subcmd)

View file

@ -63,7 +63,7 @@ ACMD(do_dig)
zone = world[IN_ROOM(ch)].zone;
if (dir < 0) {
send_to_char(ch, "Can not create an exit to the '%s'.\r\n", sdir);
send_to_char(ch, "You cannot create an exit to the '%s'.\r\n", sdir);
return;
}
/* Make sure that the builder has access to the zone he's in. */
@ -178,7 +178,7 @@ ACMD(do_dig)
* check if we can dig from there to here.
*/
if (W_EXIT(rrnum, rev_dir[dir]))
send_to_char(ch, "Can not dig from %d to here. The target room already has an exit to the %s.\r\n",
send_to_char(ch, "You cannot dig from %d to here. The target room already has an exit to the %s.\r\n",
rvnum, dirs[rev_dir[dir]]);
else {
CREATE(W_EXIT(rrnum, rev_dir[dir]), struct room_direction_data, 1);

View file

@ -53,10 +53,7 @@ void oedit_disp_perm_menu(struct descriptor_data *d);
/* handy macro */
#define S_PRODUCT(s, i) ((s)->producing[(i)])
/*------------------------------------------------------------------------*\
Utility and exported functions
\*------------------------------------------------------------------------*/
/* Utility and exported functions */
ACMD(do_oasis_oedit)
{
int number = NOWHERE, save = 0, real_num;
@ -65,15 +62,11 @@ ACMD(do_oasis_oedit)
char buf1[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH];
/****************************************************************************/
/** Parse any arguments. **/
/****************************************************************************/
/* Parse any arguments. */
buf3 = two_arguments(argument, buf1, buf2);
/****************************************************************************/
/** If there aren't any arguments...well...they can't modify nothing now **/
/** can they? **/
/****************************************************************************/
/* If there aren't any arguments...well...they can't modify nothing now
can they? */
if (!*buf1) {
send_to_char(ch, "Specify an object VNUM to edit.\r\n");
return;
@ -102,15 +95,11 @@ ACMD(do_oasis_oedit)
}
}
/****************************************************************************/
/** If a numeric argument was given, get it. **/
/****************************************************************************/
/* If a numeric argument was given, get it. */
if (number == NOWHERE)
number = atoi(buf1);
/****************************************************************************/
/** Check that whatever it is isn't already being edited. **/
/****************************************************************************/
/* Check that whatever it is isn't already being edited. */
for (d = descriptor_list; d; d = d->next) {
if (STATE(d) == CON_OEDIT) {
if (d->olc && OLC_NUM(d) == number) {
@ -121,14 +110,10 @@ ACMD(do_oasis_oedit)
}
}
/****************************************************************************/
/** Point d to the builder's descriptor (for easier typing later). **/
/****************************************************************************/
/* Point d to the builder's descriptor (for easier typing later). */
d = ch->desc;
/****************************************************************************/
/** Give the descriptor an OLC structure. **/
/****************************************************************************/
/* Give the descriptor an OLC structure. */
if (d->olc) {
mudlog(BRF, LVL_IMMORT, TRUE,
"SYSERR: do_oasis: Player already had olc structure.");
@ -137,40 +122,30 @@ ACMD(do_oasis_oedit)
CREATE(d->olc, struct oasis_olc_data, 1);
/****************************************************************************/
/** Find the zone. **/
/****************************************************************************/
/* Find the zone. */
OLC_ZNUM(d) = save ? real_zone(number) : real_zone_by_thing(number);
if (OLC_ZNUM(d) == NOWHERE) {
send_to_char(ch, "Sorry, there is no zone for that number!\r\n");
/**************************************************************************/
/** Free the descriptor's OLC structure. **/
/**************************************************************************/
/* Free the descriptor's OLC structure. */
free(d->olc);
d->olc = NULL;
return;
}
/****************************************************************************/
/** Everyone but IMPLs can only edit zones they have been assigned. **/
/****************************************************************************/
/* Everyone but IMPLs can only edit zones they have been assigned. */
if (!can_edit_zone(ch, OLC_ZNUM(d))) {
send_to_char(ch, " You do not have permission to edit zone %d. Try zone %d.\r\n", zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
send_cannot_edit(ch, zone_table[OLC_ZNUM(d)].number);
mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
/**************************************************************************/
/** Free the descriptor's OLC structure. **/
/**************************************************************************/
/* Free the descriptor's OLC structure. */
free(d->olc);
d->olc = NULL;
return;
}
/****************************************************************************/
/** If we need to save, save the objects. **/
/****************************************************************************/
/* If we need to save, save the objects. */
if (save) {
send_to_char(ch, "Saving all objects in zone %d.\r\n",
zone_table[OLC_ZNUM(d)].number);
@ -178,14 +153,10 @@ mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
"OLC: %s saves object info for zone %d.", GET_NAME(ch),
zone_table[OLC_ZNUM(d)].number);
/**************************************************************************/
/** Save the objects in this zone. **/
/**************************************************************************/
/* Save the objects in this zone. */
save_objects(OLC_ZNUM(d));
/**************************************************************************/
/** Free the descriptor's OLC structure. **/
/**************************************************************************/
/* Free the descriptor's OLC structure. */
free(d->olc);
d->olc = NULL;
return;
@ -193,10 +164,8 @@ mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
OLC_NUM(d) = number;
/****************************************************************************/
/** If this is a new object, setup a new object, otherwise setup the **/
/** existing object. **/
/****************************************************************************/
/* If this is a new object, setup a new object, otherwise setup the existing
object. */
if ((real_num = real_object(number)) != NOTHING)
oedit_setup_existing(d, real_num);
else
@ -204,15 +173,11 @@ mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
STATE(d) = CON_OEDIT;
/****************************************************************************/
/** Send the OLC message to the players in the same room as the builder. **/
/****************************************************************************/
/* Send the OLC message to the players in the same room as the builder. */
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
/****************************************************************************/
/** Log the OLC message. **/
/****************************************************************************/
/* Log the OLC message. */
mudlog(CMP, LVL_IMMORT, TRUE, "OLC: %s starts editing zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
}
@ -235,37 +200,27 @@ void oedit_setup_new(struct descriptor_data *d)
oedit_disp_menu(d);
}
/*------------------------------------------------------------------------*/
void oedit_setup_existing(struct descriptor_data *d, int real_num)
{
struct obj_data *obj;
/*
* Allocate object in memory.
*/
/* Allocate object in memory. */
CREATE(obj, struct obj_data, 1);
copy_object(obj, &obj_proto[real_num]);
/*
* Attach new object to player's descriptor.
*/
/* Attach new object to player's descriptor. */
OLC_OBJ(d) = obj;
OLC_VAL(d) = 0;
OLC_ITEM_TYPE(d) = OBJ_TRIGGER;
dg_olc_script_copy(d);
/*
* The edited obj must not have a script.
* It will be assigned to the updated obj later, after editing.
*/
/* The edited obj must not have a script. It will be assigned to the updated
obj later, after editing. */
SCRIPT(obj) = NULL;
OLC_OBJ(d)->proto_script = NULL;
oedit_disp_menu(d);
}
/*------------------------------------------------------------------------*/
void oedit_save_internally(struct descriptor_data *d)
{
int i;
@ -280,8 +235,7 @@ void oedit_save_internally(struct descriptor_data *d)
return;
}
/* Update triggers : */
/* Free old proto list */
/* Update triggers and free old proto list */
if (obj_proto[robj_num].proto_script &&
obj_proto[robj_num].proto_script != OLC_SCRIPT(d))
free_proto_script(&obj_proto[robj_num], OBJ_TRIGGER);
@ -305,9 +259,7 @@ void oedit_save_internally(struct descriptor_data *d)
if (!i) /* If it's not a new object, don't renumber. */
return;
/*
* Renumber produce in shops being edited.
*/
/* Renumber produce in shops being edited. */
for (dsc = descriptor_list; dsc; dsc = dsc->next)
if (STATE(dsc) == CON_SEDIT)
for (i = 0; S_PRODUCT(OLC_SHOP(dsc), i) != NOTHING; i++)
@ -336,20 +288,13 @@ void oedit_save_internally(struct descriptor_data *d)
}
}
/*------------------------------------------------------------------------*/
void oedit_save_to_disk(int zone_num)
{
save_objects(zone_num);
}
/**************************************************************************
Menu functions
**************************************************************************/
/*
* For container flags.
*/
/* Menu functions */
/* For container flags. */
void oedit_disp_container_flags_menu(struct descriptor_data *d)
{
char bits[MAX_STRING_LENGTH];
@ -367,9 +312,7 @@ void oedit_disp_container_flags_menu(struct descriptor_data *d)
grn, nrm, grn, nrm, grn, nrm, grn, nrm, cyn, bits, nrm);
}
/*
* For extra descriptions.
*/
/* For extra descriptions. */
void oedit_disp_extradesc_menu(struct descriptor_data *d)
{
struct extra_descr_data *extra_desc = OLC_DESC(d);
@ -390,9 +333,7 @@ void oedit_disp_extradesc_menu(struct descriptor_data *d)
OLC_MODE(d) = OEDIT_EXTRADESC_MENU;
}
/*
* Ask for *which* apply to edit.
*/
/* Ask for *which* apply to edit. */
void oedit_disp_prompt_apply_menu(struct descriptor_data *d)
{
char apply_buf[MAX_STRING_LENGTH];
@ -414,9 +355,7 @@ void oedit_disp_prompt_apply_menu(struct descriptor_data *d)
OLC_MODE(d) = OEDIT_PROMPT_APPLY;
}
/*
* Ask for liquid type.
*/
/* Ask for liquid type. */
void oedit_liquid_type(struct descriptor_data *d)
{
int counter, columns = 0;
@ -432,9 +371,7 @@ void oedit_liquid_type(struct descriptor_data *d)
OLC_MODE(d) = OEDIT_VALUE_3;
}
/*
* The actual apply to set.
*/
/* The actual apply to set. */
void oedit_disp_apply_menu(struct descriptor_data *d)
{
int counter, columns = 0;
@ -450,9 +387,7 @@ void oedit_disp_apply_menu(struct descriptor_data *d)
OLC_MODE(d) = OEDIT_APPLY;
}
/*
* Weapon type.
*/
/* Weapon type. */
void oedit_disp_weapon_menu(struct descriptor_data *d)
{
int counter, columns = 0;
@ -468,9 +403,7 @@ void oedit_disp_weapon_menu(struct descriptor_data *d)
write_to_output(d, "\r\nEnter weapon type : ");
}
/*
* Spell type.
*/
/* Spell type. */
void oedit_disp_spells_menu(struct descriptor_data *d)
{
int counter, columns = 0;
@ -485,9 +418,7 @@ void oedit_disp_spells_menu(struct descriptor_data *d)
write_to_output(d, "\r\n%sEnter spell choice (-1 for none) : ", nrm);
}
/*
* Object value #1
*/
/* Object value #1 */
void oedit_disp_val1_menu(struct descriptor_data *d)
{
OLC_MODE(d) = OEDIT_VALUE_1;
@ -536,9 +467,7 @@ void oedit_disp_val1_menu(struct descriptor_data *d)
}
}
/*
* Object value #2
*/
/* Object value #2 */
void oedit_disp_val2_menu(struct descriptor_data *d)
{
OLC_MODE(d) = OEDIT_VALUE_2;
@ -555,9 +484,7 @@ void oedit_disp_val2_menu(struct descriptor_data *d)
write_to_output(d, "Number of damage dice : ");
break;
case ITEM_FOOD:
/*
* Values 2 and 3 are unused, jump to 4...Odd.
*/
/* Values 2 and 3 are unused, jump to 4...Odd. */
oedit_disp_val4_menu(d);
break;
case ITEM_CONTAINER:
@ -575,9 +502,7 @@ void oedit_disp_val2_menu(struct descriptor_data *d)
}
}
/*
* Object value #3
*/
/* Object value #3 */
void oedit_disp_val3_menu(struct descriptor_data *d)
{
OLC_MODE(d) = OEDIT_VALUE_3;
@ -608,9 +533,7 @@ void oedit_disp_val3_menu(struct descriptor_data *d)
}
}
/*
* Object value #4
*/
/* Object value #4 */
void oedit_disp_val4_menu(struct descriptor_data *d)
{
OLC_MODE(d) = OEDIT_VALUE_4;
@ -634,9 +557,7 @@ void oedit_disp_val4_menu(struct descriptor_data *d)
}
}
/*
* Object type.
*/
/* Object type. */
void oedit_disp_type_menu(struct descriptor_data *d)
{
int counter, columns = 0;
@ -651,9 +572,7 @@ void oedit_disp_type_menu(struct descriptor_data *d)
write_to_output(d, "\r\nEnter object type : ");
}
/*
* Object extra flags.
*/
/* Object extra flags. */
void oedit_disp_extra_menu(struct descriptor_data *d)
{
char bits[MAX_STRING_LENGTH];
@ -672,9 +591,7 @@ void oedit_disp_extra_menu(struct descriptor_data *d)
cyn, bits, nrm);
}
/*
* Object perm flags.
*/
/* Object perm flags. */
void oedit_disp_perm_menu(struct descriptor_data *d)
{
char bits[MAX_STRING_LENGTH];
@ -691,9 +608,7 @@ void oedit_disp_perm_menu(struct descriptor_data *d)
"Enter object perm flag (0 to quit) : ", cyn, bits, nrm);
}
/*
* Object wear flags.
*/
/* Object wear flags. */
void oedit_disp_wear_menu(struct descriptor_data *d)
{
char bits[MAX_STRING_LENGTH];
@ -711,9 +626,7 @@ void oedit_disp_wear_menu(struct descriptor_data *d)
"Enter wear flag, 0 to quit : ", cyn, bits, nrm);
}
/*
* Display main menu.
*/
/* Display main menu. */
void oedit_disp_menu(struct descriptor_data *d)
{
char buf1[MAX_STRING_LENGTH];
@ -724,15 +637,11 @@ void oedit_disp_menu(struct descriptor_data *d)
get_char_colors(d->character);
clear_screen(d);
/*
* Build buffers for first part of menu.
*/
/* Build buffers for first part of menu. */
sprinttype(GET_OBJ_TYPE(obj), item_types, buf1, sizeof(buf1));
sprintbit(GET_OBJ_EXTRA(obj), extra_bits, buf2, sizeof(buf2));
/*
* Build first half of menu.
*/
/* Build first half of menu. */
write_to_output(d,
"-- Item number : [%s%d%s]\r\n"
"%s1%s) Keywords : %s%s\r\n"
@ -750,13 +659,7 @@ void oedit_disp_menu(struct descriptor_data *d)
grn, nrm, cyn, buf1,
grn, nrm, cyn, buf2
);
/*
* Send first half.
*/
/*
* Build second half of menu.
*/
/* Send first half then build second half of menu. */
sprintbit(GET_OBJ_WEAR(obj), wear_bits, buf1, sizeof(buf1));
sprintbit(GET_OBJ_PERM(obj), affected_bits, buf2, sizeof(buf2));
@ -795,10 +698,7 @@ void oedit_disp_menu(struct descriptor_data *d)
OLC_MODE(d) = OEDIT_MAIN_MENU;
}
/***************************************************************************
main loop (of sorts).. basically interpreter throws all input to here
***************************************************************************/
/* main loop (of sorts).. basically interpreter throws all input to here. */
void oedit_parse(struct descriptor_data *d, char *arg)
{
int number, max_val, min_val;
@ -835,9 +735,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
}
case OEDIT_MAIN_MENU:
/*
* Throw us out to whichever edit mode based on user input.
*/
/* Throw us out to whichever edit mode based on user input. */
switch (*arg) {
case 'q':
case 'Q':
@ -902,9 +800,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
break;
case 'c':
case 'C':
/*
* Clear any old values
*/
/* Clear any old values */
GET_OBJ_VAL(OLC_OBJ(d), 0) = 0;
GET_OBJ_VAL(OLC_OBJ(d), 1) = 0;
GET_OBJ_VAL(OLC_OBJ(d), 2) = 0;
@ -918,9 +814,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
break;
case 'e':
case 'E':
/*
* If extra descriptions don't exist.
*/
/* If extra descriptions don't exist. */
if (OLC_OBJ(d)->ex_description == NULL) {
CREATE(OLC_OBJ(d)->ex_description, struct extra_descr_data, 1);
OLC_OBJ(d)->ex_description->next = NULL;
@ -1056,10 +950,6 @@ void oedit_parse(struct descriptor_data *d, char *arg)
return;
case OEDIT_VALUE_1:
/*
* Lucky, I don't need to check any of these for out of range values.
* Hmm, I'm not so sure - Rv
*/
switch (GET_OBJ_TYPE(OLC_OBJ(d))) {
case ITEM_WEAPON:
GET_OBJ_VAL(OLC_OBJ(d), 0) = MIN(MAX(atoi(arg), -50), 50);
@ -1070,15 +960,11 @@ void oedit_parse(struct descriptor_data *d, char *arg)
default:
GET_OBJ_VAL(OLC_OBJ(d), 0) = atoi(arg);
}
/*
* proceed to menu 2
*/
/* proceed to menu 2 */
oedit_disp_val2_menu(d);
return;
case OEDIT_VALUE_2:
/*
* Here, I do need to check for out of range values.
*/
/* Here, I do need to check for out of range values. */
number = atoi(arg);
switch (GET_OBJ_TYPE(OLC_OBJ(d))) {
case ITEM_SCROLL:
@ -1091,10 +977,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
oedit_disp_val3_menu(d);
break;
case ITEM_CONTAINER:
/*
* Needs some special handling since we are dealing with flag values
* here.
*/
/* Needs some special handling since we are dealing with flag values here. */
if (number < 0 || number > 4)
oedit_disp_container_flags_menu(d);
else if (number != 0) {
@ -1117,9 +1000,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
case OEDIT_VALUE_3:
number = atoi(arg);
/*
* Quick'n'easy error checking.
*/
/* Quick'n'easy error checking. */
switch (GET_OBJ_TYPE(OLC_OBJ(d))) {
case ITEM_SCROLL:
case ITEM_POTION:
@ -1250,9 +1131,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
if (OLC_DESC(d)->description)
free(OLC_DESC(d)->description);
/*
* Clean up pointers
*/
/* Clean up pointers */
REMOVE_FROM_LIST(OLC_DESC(d), OLC_OBJ(d)->ex_description, next);
free(OLC_DESC(d));
OLC_DESC(d) = NULL;
@ -1277,9 +1156,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
return;
case 3:
/*
* Only go to the next description if this one is finished.
*/
/* Only go to the next description if this one is finished. */
if (OLC_DESC(d)->keyword && OLC_DESC(d)->description) {
struct extra_descr_data *new_extra;
@ -1319,9 +1196,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
break;
}
/*
* If we get here, we have changed something.
*/
/* If we get here, we have changed something. */
OLC_VAL(d) = 1;
oedit_disp_menu(d);
}

View file

@ -7,7 +7,6 @@
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "utils.h"
#include "comm.h"
@ -32,10 +31,7 @@ void redit_disp_flag_menu(struct descriptor_data *d);
void redit_disp_sector_menu(struct descriptor_data *d);
void redit_disp_menu(struct descriptor_data *d);
/*------------------------------------------------------------------------*\
Utils and exported functions.
\*------------------------------------------------------------------------*/
/* Utils and exported functions. */
ACMD(do_oasis_redit)
{
char *buf3;
@ -74,9 +70,7 @@ ACMD(do_oasis_redit)
}
}
/*
* If a numeric argument was given (like a room number), get it.
*/
/* If a numeric argument was given (like a room number), get it. */
if (number == NOWHERE)
number = atoi(buf1);
@ -114,9 +108,9 @@ ACMD(do_oasis_redit)
/* Make sure the builder is allowed to modify this zone. */
if (!can_edit_zone(ch, OLC_ZNUM(d))) {
send_to_char(ch, " You do not have permission to edit zone %d. Try zone %d.\r\n", zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
send_cannot_edit(ch, zone_table[OLC_ZNUM(d)].number);
mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
free(d->olc);
d->olc = NULL;
@ -165,39 +159,27 @@ void redit_setup_new(struct descriptor_data *d)
OLC_VAL(d) = 0;
}
/*------------------------------------------------------------------------*/
void redit_setup_existing(struct descriptor_data *d, int real_num)
{
struct room_data *room;
int counter;
/*
* Build a copy of the room for editing.
*/
/* Build a copy of the room for editing. */
CREATE(room, struct room_data, 1);
*room = world[real_num];
/*
* Allocate space for all strings.
*/
/* Allocate space for all strings. */
room->name = str_udup(world[real_num].name);
room->description = str_udup(world[real_num].description);
/*
* Exits - We allocate only if necessary.
*/
/* Exits - We allocate only if necessary. */
for (counter = 0; counter < NUM_OF_DIRS; counter++) {
if (world[real_num].dir_option[counter]) {
CREATE(room->dir_option[counter], struct room_direction_data, 1);
/*
* Copy the numbers over.
*/
/* Copy the numbers over. */
*room->dir_option[counter] = *world[real_num].dir_option[counter];
/*
* Allocate the strings.
*/
/* Allocate the strings. */
if (world[real_num].dir_option[counter]->general_description)
room->dir_option[counter]->general_description = strdup(world[real_num].dir_option[counter]->general_description);
if (world[real_num].dir_option[counter]->keyword)
@ -205,9 +187,7 @@ void redit_setup_existing(struct descriptor_data *d, int real_num)
}
}
/*
* Extra descriptions, if necessary.
*/
/* Extra descriptions, if necessary. */
if (world[real_num].ex_description) {
struct extra_descr_data *tdesc, *temp, *temp2;
CREATE(temp, struct extra_descr_data, 1);
@ -225,9 +205,7 @@ void redit_setup_existing(struct descriptor_data *d, int real_num)
}
}
/*
* Attach copy of room to player's descriptor.
*/
/* Attach copy of room to player's descriptor. */
OLC_ROOM(d) = room;
OLC_VAL(d) = 0;
OLC_ITEM_TYPE(d) = WLD_TRIGGER;
@ -239,8 +217,6 @@ void redit_setup_existing(struct descriptor_data *d, int real_num)
redit_disp_menu(d);
}
/*------------------------------------------------------------------------*/
void redit_save_internally(struct descriptor_data *d)
{
int j, room_num, new_room = FALSE;
@ -259,8 +235,7 @@ void redit_save_internally(struct descriptor_data *d)
return;
}
/* Update triggers */
/* Free old proto list */
/* Update triggers and free old proto list */
if (world[room_num].proto_script &&
world[room_num].proto_script != OLC_SCRIPT(d))
free_proto_script(&world[room_num], WLD_TRIGGER);
@ -303,15 +278,11 @@ void redit_save_internally(struct descriptor_data *d)
}
}
/*------------------------------------------------------------------------*/
void redit_save_to_disk(zone_vnum zone_num)
{
save_rooms(zone_num); /* :) */
}
/*------------------------------------------------------------------------*/
void free_room(struct room_data *room)
{
/* Free the strings (Mythran). */
@ -325,13 +296,8 @@ void free_room(struct room_data *room)
free(room); /* XXX ? */
}
/**************************************************************************
Menu functions
**************************************************************************/
/*
* For extra descriptions.
*/
/* Menu functions */
/* For extra descriptions. */
void redit_disp_extradesc_menu(struct descriptor_data *d)
{
struct extra_descr_data *extra_desc = OLC_DESC(d);
@ -352,22 +318,16 @@ void redit_disp_extradesc_menu(struct descriptor_data *d)
OLC_MODE(d) = REDIT_EXTRADESC_MENU;
}
/*
* For exits.
*/
/* For exits. */
void redit_disp_exit_menu(struct descriptor_data *d)
{
char door_buf[24];
/*
* if exit doesn't exist, alloc/create it
*/
/* if exit doesn't exist, alloc/create it */
if (OLC_EXIT(d) == NULL) {
CREATE(OLC_EXIT(d), struct room_direction_data, 1);
OLC_EXIT(d)->to_room = NOWHERE;
}
/*
* Weird door handling!
*/
/* Weird door handling! */
if (IS_SET(OLC_EXIT(d)->exit_info, EX_ISDOOR)) {
if (IS_SET(OLC_EXIT(d)->exit_info, EX_PICKPROOF))
strncpy(door_buf, "Pickproof", sizeof(door_buf)-1);
@ -397,9 +357,7 @@ void redit_disp_exit_menu(struct descriptor_data *d)
OLC_MODE(d) = REDIT_EXIT_MENU;
}
/*
* For exit flags.
*/
/* For exit flags. */
void redit_disp_exit_flag_menu(struct descriptor_data *d)
{
get_char_colors(d->character);
@ -409,9 +367,7 @@ void redit_disp_exit_flag_menu(struct descriptor_data *d)
"Enter choice : ", grn, nrm, grn, nrm, grn, nrm);
}
/*
* For room flags.
*/
/* For room flags. */
void redit_disp_flag_menu(struct descriptor_data *d)
{
char bits[MAX_STRING_LENGTH];
@ -429,9 +385,7 @@ void redit_disp_flag_menu(struct descriptor_data *d)
OLC_MODE(d) = REDIT_FLAGS;
}
/*
* For sector type.
*/
/* For sector type. */
void redit_disp_sector_menu(struct descriptor_data *d)
{
int counter, columns = 0;
@ -445,9 +399,7 @@ void redit_disp_sector_menu(struct descriptor_data *d)
OLC_MODE(d) = REDIT_SECTOR;
}
/*
* The main menu.
*/
/* The main menu. */
void redit_disp_menu(struct descriptor_data *d)
{
char buf1[MAX_STRING_LENGTH];
@ -511,10 +463,7 @@ void redit_disp_menu(struct descriptor_data *d)
OLC_MODE(d) = REDIT_MAIN_MENU;
}
/**************************************************************************
The main loop
**************************************************************************/
/* The main loop*/
void redit_parse(struct descriptor_data *d, char *arg)
{
int number;
@ -532,16 +481,12 @@ void redit_parse(struct descriptor_data *d, char *arg)
write_to_output(d, "Room saved to disk.\r\n");
} else
write_to_output(d, "Room saved to memory.\r\n");
/*
* Do NOT free strings! Just the room structure.
*/
/* Do NOT free strings! Just the room structure. */
cleanup_olc(d, CLEANUP_STRUCTS);
break;
case 'n':
case 'N':
/*
* Free everything up, including strings, etc.
*/
/* Free everything up, including strings, etc. */
cleanup_olc(d, CLEANUP_ALL);
break;
default:
@ -610,9 +555,7 @@ void redit_parse(struct descriptor_data *d, char *arg)
break;
case 'b':
case 'B':
/*
* If the extra description doesn't exist.
*/
/* If the extra description doesn't exist. */
if (!OLC_ROOM(d)->ex_description)
CREATE(OLC_ROOM(d)->ex_description, struct extra_descr_data, 1);
OLC_DESC(d) = OLC_ROOM(d)->ex_description;
@ -652,9 +595,7 @@ void redit_parse(struct descriptor_data *d, char *arg)
break;
case REDIT_DESC:
/*
* We will NEVER get here, we hope.
*/
/* We will NEVER get here, we hope. */
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: Reached REDIT_DESC case in parse_redit().");
write_to_output(d, "Oops, in REDIT_DESC.\r\n");
break;
@ -667,9 +608,7 @@ void redit_parse(struct descriptor_data *d, char *arg)
} else if (number == 0)
break;
else {
/*
* Toggle the bit.
*/
/* Toggle the bit. */
TOGGLE_BIT(OLC_ROOM(d)->room_flags, 1 << (number - 1));
redit_disp_flag_menu(d);
}
@ -744,9 +683,7 @@ void redit_parse(struct descriptor_data *d, char *arg)
return;
case REDIT_EXIT_DESCRIPTION:
/*
* We should NEVER get here, hopefully.
*/
/* We should NEVER get here, hopefully. */
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: Reached REDIT_EXIT_DESC case in parse_redit");
write_to_output(d, "Oops, in REDIT_EXIT_DESCRIPTION.\r\n");
break;
@ -773,15 +710,11 @@ void redit_parse(struct descriptor_data *d, char *arg)
write_to_output(d, "That's not a valid choice!\r\n");
redit_disp_exit_flag_menu(d);
} else {
/*
* Doors are a bit idiotic, don't you think? :) -- I agree. -gg
*/
/* Doors are a bit idiotic, don't you think? :) -- I agree. -gg */
OLC_EXIT(d)->exit_info = (number == 0 ? 0 :
(number == 1 ? EX_ISDOOR :
(number == 2 ? EX_ISDOOR | EX_PICKPROOF : 0)));
/*
* Jump back to the menu system.
*/
/* Jump back to the menu system. */
redit_disp_exit_menu(d);
}
return;
@ -798,10 +731,8 @@ void redit_parse(struct descriptor_data *d, char *arg)
case REDIT_EXTRADESC_MENU:
switch ((number = atoi(arg))) {
case 0:
/*
* If something got left out, delete the extra description
* when backing out to the menu.
*/
/* If something got left out, delete the extra description when backing
out to the menu. */
if (OLC_DESC(d)->keyword == NULL || OLC_DESC(d)->description == NULL) {
struct extra_descr_data *temp;
if (OLC_DESC(d)->keyword)
@ -809,9 +740,7 @@ void redit_parse(struct descriptor_data *d, char *arg)
if (OLC_DESC(d)->description)
free(OLC_DESC(d)->description);
/*
* Clean up pointers.
*/
/* Clean up pointers. */
REMOVE_FROM_LIST(OLC_DESC(d), OLC_ROOM(d)->ex_description, next);
free(OLC_DESC(d));
}
@ -840,9 +769,7 @@ void redit_parse(struct descriptor_data *d, char *arg)
if (OLC_DESC(d)->next)
OLC_DESC(d) = OLC_DESC(d)->next;
else {
/*
* Make new extra description and attach at end.
*/
/* Make new extra description and attach at end. */
CREATE(new_extra, struct extra_descr_data, 1);
OLC_DESC(d)->next = new_extra;
OLC_DESC(d) = new_extra;
@ -872,15 +799,11 @@ void redit_parse(struct descriptor_data *d, char *arg)
break;
default:
/*
* We should never get here.
*/
/* We should never get here. */
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: Reached default case in parse_redit");
break;
}
/*
* If we get this far, something has been changed.
*/
/* If we get this far, something has been changed. */
OLC_VAL(d) = 1;
redit_disp_menu(d);
}

View file

@ -50,10 +50,7 @@ void sedit_save_to_disk(int num)
save_shops(num);
}
/*-------------------------------------------------------------------*\
utility functions
\*-------------------------------------------------------------------*/
/* utility functions */
ACMD(do_oasis_sedit)
{
int number = NOWHERE, save = 0;
@ -63,9 +60,7 @@ ACMD(do_oasis_sedit)
char buf1[MAX_INPUT_LENGTH];
char buf2[MAX_INPUT_LENGTH];
/****************************************************************************/
/** Parse any arguments. **/
/****************************************************************************/
/* Parse any arguments. */
buf3 = two_arguments(argument, buf1, buf2);
if (!*buf1) {
@ -96,15 +91,11 @@ ACMD(do_oasis_sedit)
}
}
/****************************************************************************/
/** If a numeric argument was given, get it. **/
/****************************************************************************/
/* If a numeric argument was given, get it. */
if (number == NOWHERE)
number = atoi(buf1);
/****************************************************************************/
/** Check that the shop isn't already being edited. **/
/****************************************************************************/
/* Check that the shop isn't already being edited. */
for (d = descriptor_list; d; d = d->next) {
if (STATE(d) == CON_SEDIT) {
if (d->olc && OLC_NUM(d) == number) {
@ -115,14 +106,10 @@ ACMD(do_oasis_sedit)
}
}
/****************************************************************************/
/** Point d to the builder's descriptor. **/
/****************************************************************************/
/* Point d to the builder's descriptor. */
d = ch->desc;
/****************************************************************************/
/** Give the descriptor an OLC structure. **/
/****************************************************************************/
/* Give the descriptor an OLC structure. */
if (d->olc) {
mudlog(BRF, LVL_IMMORT, TRUE,
"SYSERR: do_oasis_sedit: Player already had olc structure.");
@ -131,9 +118,7 @@ ACMD(do_oasis_sedit)
CREATE(d->olc, struct oasis_olc_data, 1);
/****************************************************************************/
/** Find the zone. **/
/****************************************************************************/
/* Find the zone. */
OLC_ZNUM(d) = save ? real_zone(number) : real_zone_by_thing(number);
if (OLC_ZNUM(d) == NOWHERE) {
send_to_char(ch, "Sorry, there is no zone for that number!\r\n");
@ -142,15 +127,11 @@ ACMD(do_oasis_sedit)
return;
}
/****************************************************************************/
/** Everyone but IMPLs can only edit zones they have been assigned. **/
/****************************************************************************/
/* Everyone but IMPLs can only edit zones they have been assigned. */
if (!can_edit_zone(ch, OLC_ZNUM(d))) {
send_to_char(ch, " You do not have permission to edit zone %d. Try zone %d.\r\n", zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
send_cannot_edit(ch, zone_table[OLC_ZNUM(d)].number);
/**************************************************************************/
/** Free the OLC structure. **/
/**************************************************************************/
/* Free the OLC structure. */
free(d->olc);
d->olc = NULL;
return;
@ -163,14 +144,10 @@ send_to_char(ch, " You do not have permission to edit zone %d. Try zone %d.\r\n"
"OLC: %s saves shop info for zone %d.",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number);
/**************************************************************************/
/** Save the shops to the shop file. **/
/**************************************************************************/
/* Save the shops to the shop file. */
save_shops(OLC_ZNUM(d));
/**************************************************************************/
/** Free the OLC structure. **/
/**************************************************************************/
/* Free the OLC structure. */
free(d->olc);
d->olc = NULL;
return;
@ -196,21 +173,15 @@ void sedit_setup_new(struct descriptor_data *d)
{
struct shop_data *shop;
/*
* Allocate a scratch shop structure.
*/
/* Allocate a scratch shop structure. */
CREATE(shop, struct shop_data, 1);
/*
* Fill in some default values.
*/
/* Fill in some default values. */
S_KEEPER(shop) = NOBODY;
S_CLOSE1(shop) = 28;
S_BUYPROFIT(shop) = 1.0;
S_SELLPROFIT(shop) = 1.0;
/*
* Add a spice of default strings.
*/
/* Add a spice of default strings. */
S_NOITEM1(shop) = strdup("%s Sorry, I don't stock that item.");
S_NOITEM2(shop) = strdup("%s You don't seem to have that.");
S_NOCASH1(shop) = strdup("%s I can't afford that!");
@ -218,9 +189,7 @@ void sedit_setup_new(struct descriptor_data *d)
S_NOBUY(shop) = strdup("%s I don't trade in such items.");
S_BUY(shop) = strdup("%s That'll be %d coins, thanks.");
S_SELL(shop) = strdup("%s I'll give you %d coins for that.");
/*
* Stir the lists lightly.
*/
/* Stir the lists lightly. */
CREATE(S_PRODUCTS(shop), obj_vnum, 1);
S_PRODUCT(shop, 0) = NOTHING;
@ -231,20 +200,14 @@ void sedit_setup_new(struct descriptor_data *d)
S_BUYTYPE(shop, 0) = NOTHING;
/*
* Presto! A shop.
*/
/* Presto! A shop. */
OLC_SHOP(d) = shop;
sedit_disp_menu(d);
}
/*-------------------------------------------------------------------*/
void sedit_setup_existing(struct descriptor_data *d, int rshop_num)
{
/*
* Create a scratch shop structure.
*/
/* Create a scratch shop structure. */
CREATE(OLC_SHOP(d), struct shop_data, 1);
/* don't waste time trying to free NULL strings -- Welcor */
@ -252,10 +215,7 @@ void sedit_setup_existing(struct descriptor_data *d, int rshop_num)
sedit_disp_menu(d);
}
/**************************************************************************
Menu functions
**************************************************************************/
/* Menu functions */
void sedit_products_menu(struct descriptor_data *d)
{
struct shop_data *shop;
@ -280,8 +240,6 @@ void sedit_products_menu(struct descriptor_data *d)
OLC_MODE(d) = SEDIT_PRODUCTS_MENU;
}
/*-------------------------------------------------------------------*/
void sedit_compact_rooms_menu(struct descriptor_data *d)
{
struct shop_data *shop;
@ -305,8 +263,6 @@ void sedit_compact_rooms_menu(struct descriptor_data *d)
OLC_MODE(d) = SEDIT_ROOMS_MENU;
}
/*-------------------------------------------------------------------*/
void sedit_rooms_menu(struct descriptor_data *d)
{
struct shop_data *shop;
@ -338,8 +294,6 @@ void sedit_rooms_menu(struct descriptor_data *d)
OLC_MODE(d) = SEDIT_ROOMS_MENU;
}
/*-------------------------------------------------------------------*/
void sedit_namelist_menu(struct descriptor_data *d)
{
struct shop_data *shop;
@ -364,8 +318,6 @@ void sedit_namelist_menu(struct descriptor_data *d)
OLC_MODE(d) = SEDIT_NAMELIST_MENU;
}
/*-------------------------------------------------------------------*/
void sedit_shop_flags_menu(struct descriptor_data *d)
{
char bits[MAX_STRING_LENGTH];
@ -383,8 +335,6 @@ void sedit_shop_flags_menu(struct descriptor_data *d)
OLC_MODE(d) = SEDIT_SHOP_FLAGS;
}
/*-------------------------------------------------------------------*/
void sedit_no_trade_menu(struct descriptor_data *d)
{
char bits[MAX_STRING_LENGTH];
@ -402,8 +352,6 @@ void sedit_no_trade_menu(struct descriptor_data *d)
OLC_MODE(d) = SEDIT_NOTRADE;
}
/*-------------------------------------------------------------------*/
void sedit_types_menu(struct descriptor_data *d)
{
struct shop_data *shop;
@ -421,11 +369,7 @@ void sedit_types_menu(struct descriptor_data *d)
OLC_MODE(d) = SEDIT_TYPE_MENU;
}
/*-------------------------------------------------------------------*/
/*
* Display main menu.
*/
/* Display main menu. */
void sedit_disp_menu(struct descriptor_data *d)
{
char buf1[MAX_STRING_LENGTH];
@ -483,10 +427,7 @@ void sedit_disp_menu(struct descriptor_data *d)
OLC_MODE(d) = SEDIT_MAIN_MENU;
}
/**************************************************************************
The GARGANTUAN event handler
**************************************************************************/
/* The GARGANTUAN event handler */
void sedit_parse(struct descriptor_data *d, char *arg)
{
int i;
@ -498,7 +439,6 @@ void sedit_parse(struct descriptor_data *d, char *arg)
}
}
switch (OLC_MODE(d)) {
/*-------------------------------------------------------------------*/
case SEDIT_CONFIRM_SAVESTRING:
switch (*arg) {
case 'y':
@ -525,7 +465,6 @@ void sedit_parse(struct descriptor_data *d, char *arg)
}
break;
/*-------------------------------------------------------------------*/
case SEDIT_MAIN_MENU:
i = 0;
switch (*arg) {
@ -631,7 +570,7 @@ void sedit_parse(struct descriptor_data *d, char *arg)
else
write_to_output(d, "Oops...\r\n");
return;
/*-------------------------------------------------------------------*/
case SEDIT_NAMELIST_MENU:
switch (*arg) {
case 'a':
@ -648,7 +587,7 @@ void sedit_parse(struct descriptor_data *d, char *arg)
break;
}
break;
/*-------------------------------------------------------------------*/
case SEDIT_PRODUCTS_MENU:
switch (*arg) {
case 'a':
@ -666,7 +605,7 @@ void sedit_parse(struct descriptor_data *d, char *arg)
break;
}
break;
/*-------------------------------------------------------------------*/
case SEDIT_ROOMS_MENU:
switch (*arg) {
case 'a':
@ -692,10 +631,8 @@ void sedit_parse(struct descriptor_data *d, char *arg)
break;
}
break;
/*-------------------------------------------------------------------*/
/*
* String edits.
*/
/* String edits. */
case SEDIT_NOITEM1:
if (genolc_checkstring(d, arg))
modify_shop_string(&S_NOITEM1(OLC_SHOP(d)), arg);
@ -735,10 +672,7 @@ void sedit_parse(struct descriptor_data *d, char *arg)
sedit_namelist_menu(d);
return;
/*-------------------------------------------------------------------*/
/*
* Numerical responses.
*/
/* Numerical responses. */
case SEDIT_KEEPER:
i = atoi(arg);
if ((i = atoi(arg)) != -1)
@ -749,9 +683,7 @@ void sedit_parse(struct descriptor_data *d, char *arg)
S_KEEPER(OLC_SHOP(d)) = i;
if (i == -1)
break;
/*
* Fiddle with special procs.
*/
/* Fiddle with special procs. */
S_FUNC(OLC_SHOP(d)) = mob_index[i].func != shop_keeper ? mob_index[i].func : NULL;
mob_index[i].func = shop_keeper;
break;
@ -825,24 +757,16 @@ void sedit_parse(struct descriptor_data *d, char *arg)
}
break;
/*-------------------------------------------------------------------*/
default:
/*
* We should never get here.
*/
/* We should never get here. */
cleanup_olc(d, CLEANUP_ALL);
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: sedit_parse(): Reached default case!");
write_to_output(d, "Oops...\r\n");
break;
}
/*-------------------------------------------------------------------*/
/*
* END OF CASE
* If we get here, we have probably changed something, and now want to
* return to main menu. Use OLC_VAL as a 'has changed' flag.
*/
/* If we get here, we have probably changed something, and now want to return
to main menu. Use OLC_VAL as a 'has changed' flag. */
OLC_VAL(d) = 1;
sedit_disp_menu(d);
}

View file

@ -8,13 +8,10 @@
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. *
************************************************************************ */
/***
* The entire shop rewrite for Circle 3.0 was done by Jeff Fink. Thanks Jeff!
***/
/* The entire shop rewrite for Circle 3.0 was done by Jeff Fink. Thanks Jeff! */
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "comm.h"
#include "handler.h"
@ -81,7 +78,6 @@ int end_read_list(struct shop_buy_data *list, int len, int error);
void read_line(FILE *shop_f, const char *string, void *data);
void destroy_shops(void);
/* config arrays */
const char *operator_str[] = {
"[({",
@ -103,7 +99,6 @@ const char *trade_letters[] = {
"\n"
};
const char *shop_bits[] = {
"WILL_FIGHT",
"USES_BANK",
@ -144,7 +139,6 @@ int is_ok_char(struct char_data *keeper, struct char_data *ch, int shop_nr)
return (TRUE);
}
int is_open(struct char_data *keeper, int shop_nr, int msg)
{
char buf[MAX_INPUT_LENGTH];
@ -165,7 +159,6 @@ int is_open(struct char_data *keeper, int shop_nr, int msg)
return (FALSE);
}
int is_ok(struct char_data *keeper, struct char_data *ch, int shop_nr)
{
if (is_open(keeper, shop_nr, TRUE))
@ -174,13 +167,11 @@ int is_ok(struct char_data *keeper, struct char_data *ch, int shop_nr)
return (FALSE);
}
void push(struct stack_data *stack, int pushval)
{
S_DATA(stack, S_LEN(stack)++) = pushval;
}
int top(struct stack_data *stack)
{
if (S_LEN(stack) > 0)
@ -189,7 +180,6 @@ int top(struct stack_data *stack)
return (-1);
}
int pop(struct stack_data *stack)
{
if (S_LEN(stack) > 0)
@ -200,7 +190,6 @@ int pop(struct stack_data *stack)
}
}
void evaluate_operation(struct stack_data *ops, struct stack_data *vals)
{
int oper;
@ -219,7 +208,6 @@ void evaluate_operation(struct stack_data *ops, struct stack_data *vals)
}
}
int find_oper_num(char token)
{
int oindex;
@ -230,7 +218,6 @@ int find_oper_num(char token)
return (NOTHING);
}
int evaluate_expression(struct obj_data *obj, char *expr)
{
struct stack_data ops, vals;
@ -285,7 +272,6 @@ int evaluate_expression(struct obj_data *obj, char *expr)
return (temp);
}
int trade_with(struct obj_data *item, int shop_nr)
{
int counter;
@ -308,7 +294,6 @@ int trade_with(struct obj_data *item, int shop_nr)
return (OBJECT_NOTOK);
}
int same_obj(struct obj_data *obj1, struct obj_data *obj2)
{
int aindex;
@ -333,7 +318,6 @@ int same_obj(struct obj_data *obj1, struct obj_data *obj2)
return (TRUE);
}
int shop_producing(struct obj_data *item, int shop_nr)
{
int counter;
@ -347,18 +331,16 @@ int shop_producing(struct obj_data *item, int shop_nr)
return (FALSE);
}
int transaction_amt(char *arg)
{
char buf[MAX_INPUT_LENGTH];
char *buywhat;
/*
* If we have two arguments, it means 'buy 5 3', or buy 5 of #3.
* We don't do that if we only have one argument, like 'buy 5', buy #5.
* Code from Andrey Fidrya <andrey@ALEX-UA.COM>
*/
/* If we have two arguments, it means 'buy 5 3', or buy 5 of #3.
We don't do that if we only have one argument, like 'buy 5', buy #5.
Code from Andrey Fidrya <andrey@ALEX-UA.COM> */
buywhat = one_argument(arg, buf);
if (*buywhat && *buf && is_number(buf)) {
strcpy(arg, arg + strlen(buf) + 1); /* strcpy: OK (always smaller) */
@ -367,7 +349,6 @@ int transaction_amt(char *arg)
return (1);
}
char *times_message(struct obj_data *obj, char *name, int num)
{
static char buf[256];
@ -390,9 +371,7 @@ char *times_message(struct obj_data *obj, char *name, int num)
return (buf);
}
struct obj_data *get_slide_obj_vis(struct char_data *ch, char *name,
struct obj_data *list)
struct obj_data *get_slide_obj_vis(struct char_data *ch, char *name, struct obj_data *list)
{
struct obj_data *i, *last_match = NULL;
int j, number;
@ -415,9 +394,7 @@ struct obj_data *get_slide_obj_vis(struct char_data *ch, char *name,
return (NULL);
}
struct obj_data *get_hash_obj_vis(struct char_data *ch, char *name,
struct obj_data *list)
struct obj_data *get_hash_obj_vis(struct char_data *ch, char *name, struct obj_data *list)
{
struct obj_data *loop, *last_obj = NULL;
int qindex;
@ -439,9 +416,7 @@ struct obj_data *get_hash_obj_vis(struct char_data *ch, char *name,
return (NULL);
}
struct obj_data *get_purchase_obj(struct char_data *ch, char *arg,
struct char_data *keeper, int shop_nr, int msg)
struct obj_data *get_purchase_obj(struct char_data *ch, char *arg, struct char_data *keeper, int shop_nr, int msg)
{
char name[MAX_INPUT_LENGTH];
struct obj_data *obj;
@ -469,38 +444,30 @@ struct obj_data *get_purchase_obj(struct char_data *ch, char *arg,
return (obj);
}
/*
* Shop purchase adjustment, based on charisma-difference from buyer to keeper.
*
* for i in `seq 15 -15`; do printf " * %3d: %6.4f\n" $i \
* `echo "scale=4; 1+$i/70" | bc`; done
*
* Shopkeeper higher charisma (markup)
* ^ 15: 1.2142 14: 1.2000 13: 1.1857 12: 1.1714 11: 1.1571
* | 10: 1.1428 9: 1.1285 8: 1.1142 7: 1.1000 6: 1.0857
* | 5: 1.0714 4: 1.0571 3: 1.0428 2: 1.0285 1: 1.0142
* + 0: 1.0000
* | -1: 0.9858 -2: 0.9715 -3: 0.9572 -4: 0.9429 -5: 0.9286
* | -6: 0.9143 -7: 0.9000 -8: 0.8858 -9: 0.8715 -10: 0.8572
* v -11: 0.8429 -12: 0.8286 -13: 0.8143 -14: 0.8000 -15: 0.7858
* Player higher charisma (discount)
*
* Most mobiles have 11 charisma so an 18 charisma player would get a 10%
* discount beyond the basic price. That assumes they put a lot of points
* into charisma, because on the flip side they'd get 11% inflation by
* having a 3.
*/
/* Shop purchase adjustment, based on charisma-difference from buyer to keeper.
for i in `seq 15 -15`; do printf " * %3d: %6.4f\n" $i \
`echo "scale=4; 1+$i/70" | bc`; done
Shopkeeper higher charisma (markup)
^ 15: 1.2142 14: 1.2000 13: 1.1857 12: 1.1714 11: 1.1571
| 10: 1.1428 9: 1.1285 8: 1.1142 7: 1.1000 6: 1.0857
| 5: 1.0714 4: 1.0571 3: 1.0428 2: 1.0285 1: 1.0142
+ 0: 1.0000
| -1: 0.9858 -2: 0.9715 -3: 0.9572 -4: 0.9429 -5: 0.9286
| -6: 0.9143 -7: 0.9000 -8: 0.8858 -9: 0.8715 -10: 0.8572
v -11: 0.8429 -12: 0.8286 -13: 0.8143 -14: 0.8000 -15: 0.7858
Player higher charisma (discount)
Most mobiles have 11 charisma so an 18 charisma player would get a 10%
discount beyond the basic price. That assumes they put a lot of points
into charisma, because on the flip side they'd get 11% inflation by
having a 3. */
int buy_price(struct obj_data *obj, int shop_nr, struct char_data *keeper, struct char_data *buyer)
{
return (int) (GET_OBJ_COST(obj) * SHOP_BUYPROFIT(shop_nr)
* (1 + (GET_CHA(keeper) - GET_CHA(buyer)) / (float)70));
}
/*
* When the shopkeeper is buying, we reverse the discount. Also make sure
* we don't buy for more than we sell for, to prevent infinite money-making.
*/
/* When the shopkeeper is buying, we reverse the discount. Also make sure
we don't buy for more than we sell for, to prevent infinite money-making. */
int sell_price(struct obj_data *obj, int shop_nr, struct char_data *keeper, struct char_data *seller)
{
float sell_cost_modifier = SHOP_SELLPROFIT(shop_nr) * (1 - (GET_CHA(keeper) - GET_CHA(seller)) / (float)70);
@ -512,7 +479,6 @@ int sell_price(struct obj_data *obj, int shop_nr, struct char_data *keeper, stru
return (int) (GET_OBJ_COST(obj) * sell_cost_modifier);
}
void shopping_buy(char *arg, struct char_data *ch, struct char_data *keeper, int shop_nr)
{
char tempstr[MAX_INPUT_LENGTH], tempbuf[MAX_INPUT_LENGTH];
@ -629,7 +595,6 @@ void shopping_buy(char *arg, struct char_data *ch, struct char_data *keeper, int
}
}
struct obj_data *get_selling_obj(struct char_data *ch, char *name, struct char_data *keeper, int shop_nr, int msg)
{
char buf[MAX_INPUT_LENGTH];
@ -670,17 +635,13 @@ struct obj_data *get_selling_obj(struct char_data *ch, char *name, struct char_d
return (NULL);
}
struct obj_data *slide_obj(struct obj_data *obj, struct char_data *keeper,
int shop_nr)
/*
This function is a slight hack! To make sure that duplicate items are
only listed once on the "list", this function groups "identical"
objects together on the shopkeeper's inventory list. The hack involves
knowing how the list is put together, and manipulating the order of
the objects on the list. (But since most of DIKU is not encapsulated,
and information hiding is almost never used, it isn't that big a deal) -JF
*/
/* This function is a slight hack! To make sure that duplicate items are
* only listed once on the "list", this function groups "identical"
* objects together on the shopkeeper's inventory list. The hack involves
* knowing how the list is put together, and manipulating the order of
* the objects on the list. (But since most of DIKU is not encapsulated,
* and information hiding is almost never used, it isn't that big a deal) -JF */
struct obj_data *slide_obj(struct obj_data *obj, struct char_data *keeper, int shop_nr)
{
struct obj_data *loop;
int temp;
@ -710,7 +671,6 @@ struct obj_data *slide_obj(struct obj_data *obj, struct char_data *keeper,
return (obj);
}
void sort_keeper_objs(struct char_data *keeper, int shop_nr)
{
struct obj_data *list = NULL, *temp;
@ -734,7 +694,6 @@ void sort_keeper_objs(struct char_data *keeper, int shop_nr)
}
}
void shopping_sell(char *arg, struct char_data *ch, struct char_data *keeper, int shop_nr)
{
char tempstr[MAX_INPUT_LENGTH], name[MAX_INPUT_LENGTH], tempbuf[MAX_INPUT_LENGTH];
@ -812,7 +771,6 @@ void shopping_sell(char *arg, struct char_data *ch, struct char_data *keeper, in
}
}
void shopping_value(char *arg, struct char_data *ch, struct char_data *keeper, int shop_nr)
{
char buf[MAX_STRING_LENGTH], name[MAX_INPUT_LENGTH];
@ -834,7 +792,6 @@ void shopping_value(char *arg, struct char_data *ch, struct char_data *keeper, i
do_tell(keeper, buf, cmd_tell, 0);
}
char *list_object(struct obj_data *obj, int cnt, int aindex, int shop_nr, struct char_data *keeper, struct char_data *ch)
{
static char result[256];
@ -866,12 +823,12 @@ char *list_object(struct obj_data *obj, int cnt, int aindex, int shop_nr, struct
}
CAP(itemname);
snprintf(result, sizeof(result), " %2d) %9s %-48s %6d\r\n",
aindex, quantity, itemname, buy_price(obj, shop_nr, keeper, ch));
snprintf(result, sizeof(result), " %2d) %9s %-*s %6d\r\n", aindex, quantity,
48 - count_color_chars(itemname), itemname, buy_price(obj, shop_nr, keeper, ch));
return (result);
}
void shopping_list(char *arg, struct char_data *ch, struct char_data *keeper, int shop_nr)
{
char buf[MAX_STRING_LENGTH], name[MAX_INPUT_LENGTH];
@ -924,7 +881,6 @@ void shopping_list(char *arg, struct char_data *ch, struct char_data *keeper, in
}
}
int ok_shop_room(int shop_nr, room_vnum room)
{
int mindex;
@ -935,7 +891,6 @@ int ok_shop_room(int shop_nr, room_vnum room)
return (FALSE);
}
SPECIAL(shop_keeper)
{
struct char_data *keeper = (struct char_data *)me;
@ -989,7 +944,6 @@ SPECIAL(shop_keeper)
return (FALSE);
}
int ok_damage_shopkeeper(struct char_data *ch, struct char_data *victim)
{
int sindex;
@ -1015,7 +969,6 @@ int ok_damage_shopkeeper(struct char_data *ch, struct char_data *victim)
return (TRUE);
}
/* val == obj_vnum and obj_rnum (?) */
int add_to_list(struct shop_buy_data *list, int type, int *len, int *val)
{
@ -1035,7 +988,6 @@ int add_to_list(struct shop_buy_data *list, int type, int *len, int *val)
return (FALSE);
}
int end_read_list(struct shop_buy_data *list, int len, int error)
{
if (error)
@ -1045,7 +997,6 @@ int end_read_list(struct shop_buy_data *list, int len, int error)
return (len);
}
void read_line(FILE *shop_f, const char *string, void *data)
{
char buf[READ_SIZE];
@ -1056,7 +1007,6 @@ void read_line(FILE *shop_f, const char *string, void *data)
}
}
int read_list(FILE *shop_f, struct shop_buy_data *list, int new_format,
int max, int type)
{
@ -1077,7 +1027,6 @@ int read_list(FILE *shop_f, struct shop_buy_data *list, int new_format,
return (end_read_list(list, len, error));
}
/* END_OF inefficient. */
int read_type_list(FILE *shop_f, struct shop_buy_data *list,
int new_format, int max)
@ -1125,7 +1074,6 @@ int read_type_list(FILE *shop_f, struct shop_buy_data *list,
return (end_read_list(list, len, error));
}
char *read_shop_message(int mnum, room_vnum shr, FILE *shop_f, const char *why)
{
int cht, ss = 0, ds = 0, err = 0;
@ -1164,7 +1112,6 @@ char *read_shop_message(int mnum, room_vnum shr, FILE *shop_f, const char *why)
return (tbuf);
}
void boot_the_shops(FILE *shop_f, char *filename, int rec_count)
{
char *buf, buf2[256];
@ -1236,7 +1183,6 @@ void boot_the_shops(FILE *shop_f, char *filename, int rec_count)
}
}
void assign_the_shopkeepers(void)
{
int cindex;
@ -1266,7 +1212,6 @@ void assign_the_shopkeepers(void)
}
}
char *customer_string(int shop_nr, int detailed)
{
int sindex = 0, flag = 1, nlen;
@ -1299,7 +1244,6 @@ char *customer_string(int shop_nr, int detailed)
return (buf);
}
/* END_OF inefficient */
void list_all_shops(struct char_data *ch)
{
@ -1329,17 +1273,16 @@ void list_all_shops(struct char_data *ch)
else
sprintf(buf1, "%6d", mob_index[SHOP_KEEPER(shop_nr)].vnum); /* sprintf: OK (for 'buf1 >= 11', 32-bit int) */
len += snprintf(buf + len, sizeof(buf) - len,
"%3d %6d %6d %s %3.2f %3.2f %s\r\n",
shop_nr + 1, SHOP_NUM(shop_nr), SHOP_ROOM(shop_nr, 0), buf1,
SHOP_SELLPROFIT(shop_nr), SHOP_BUYPROFIT(shop_nr),
customer_string(shop_nr, FALSE));
len += snprintf(buf + len, sizeof(buf) - len,
"%3d %6d %6d %s %3.2f %3.2f %s\r\n",
shop_nr + 1, SHOP_NUM(shop_nr), SHOP_ROOM(shop_nr, 0), buf1,
SHOP_SELLPROFIT(shop_nr), SHOP_BUYPROFIT(shop_nr),
customer_string(shop_nr, FALSE));
}
page_string(ch->desc, buf, TRUE);
}
void list_detailed_shop(struct char_data *ch, int shop_nr)
{
struct char_data *k;
@ -1348,7 +1291,6 @@ void list_detailed_shop(struct char_data *ch, int shop_nr)
send_to_char(ch, "Vnum: [%5d], Rnum: [%5d]\r\n", SHOP_NUM(shop_nr), shop_nr + 1);
send_to_char(ch, "Rooms: ");
column = 12; /* ^^^ strlen ^^^ */
for (sindex = 0; SHOP_ROOM(shop_nr, sindex) != NOWHERE; sindex++) {
@ -1392,10 +1334,8 @@ void list_detailed_shop(struct char_data *ch, int shop_nr)
} else
send_to_char(ch, "<NONE>\r\n");
send_to_char(ch, "Customers: %s\r\n", (ptrsave = customer_string(shop_nr, TRUE)) ? ptrsave : "None");
send_to_char(ch, "Produces: ");
column = 12; /* ^^^ strlen ^^^ */
for (sindex = 0; SHOP_PRODUCT(shop_nr, sindex) != NOTHING; sindex++) {
@ -1458,7 +1398,6 @@ void list_detailed_shop(struct char_data *ch, int shop_nr)
SHOP_SELLPROFIT(shop_nr), SHOP_BUYPROFIT(shop_nr), SHOP_OPEN1(shop_nr),
SHOP_CLOSE1(shop_nr), SHOP_OPEN2(shop_nr), SHOP_CLOSE2(shop_nr));
/* Need a local buffer. */
{
char buf1[128];
@ -1467,7 +1406,6 @@ void list_detailed_shop(struct char_data *ch, int shop_nr)
}
}
void show_shops(struct char_data *ch, char *arg)
{
int shop_nr;
@ -1497,7 +1435,6 @@ void show_shops(struct char_data *ch, char *arg)
}
}
void destroy_shops(void)
{
ssize_t cnt, itr;
@ -1538,7 +1475,6 @@ void destroy_shops(void)
top_shop = -1;
}
int find_shop(int vnum)
{
int bot, mid, top;

View file

@ -228,7 +228,7 @@ ASPELL(spell_charm)
else if (!CONFIG_PK_ALLOWED && !IS_NPC(victim))
send_to_char(ch, "You fail - shouldn't be doing it anyway.\r\n");
else if (circle_follow(victim, ch))
send_to_char(ch, "Sorry, following in circles can not be allowed.\r\n");
send_to_char(ch, "Sorry, following in circles is not allowed.\r\n");
else if (mag_savingthrow(victim, SAVING_PARA, 0))
send_to_char(ch, "Your victim resists!\r\n");
else {

View file

@ -1,41 +1,29 @@
/* ************************************************************************
* File: structs.h Part of CircleMUD *
* Usage: header file for central structures and contstants *
* *
* All rights reserved. See license.doc for complete information. *
* *
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. *
************************************************************************ */
/*
* Intended use of this macro is to allow external packages to work with
* a variety of CircleMUD versions without modifications. For instance,
* an IS_CORPSE() macro was introduced in pl13. Any future code add-ons
* could take into account the CircleMUD version and supply their own
* definition for the macro if used on an older version of CircleMUD.
* You are supposed to compare this with the macro CIRCLEMUD_VERSION()
* in utils.h. See there for usage.
*/
/* Intended use of this macro is to allow external packages to work with a
* variety of CircleMUD versions without modifications. For instance, an
* IS_CORPSE() macro was introduced in pl13. Any future code add-ons could
* take into account the CircleMUD version and supply their own definition for
* the macro if used on an older version of CircleMUD. You are supposed to
* compare this with the macro CIRCLEMUD_VERSION() in utils.h. */
#define _CIRCLEMUD 0x030520 /* Major/Minor/Patchlevel - MMmmPP */
/*
* If you want equipment to be automatically equipped to the same place
* it was when players rented, set the define below to 1.
*/
/* If you want equipment to be automatically equipped to the same place
* it was when players rented, set the define below to 1. */
#define USE_AUTOEQ 1 /* TRUE/FALSE aren't defined yet. */
/* preamble *************************************************************/
/*
* As of bpl20, it should be safe to use unsigned data types for the
* various virtual and real number data types. There really isn't a
* reason to use signed anymore so use the unsigned types and get
* 65,535 objects instead of 32,768.
*
* NOTE: This will likely be unconditionally unsigned later.
*/
/* preamble */
/* As of bpl20, it should be safe to use unsigned data types for the various
* virtual and real number data types. There really isn't a reason to use
* signed anymore so use the unsigned types and get 65,535 objects instead of
* 32,768. NOTE: This will likely be unconditionally unsigned later. */
#define CIRCLE_UNSIGNED_INDEX 1 /* 0 = signed, 1 = unsigned */
#if CIRCLE_UNSIGNED_INDEX
@ -53,10 +41,7 @@
#define SPECIAL(name) \
int (name)(struct char_data *ch, void *me, int cmd, char *argument)
/* room-related defines *************************************************/
/* room-related defines */
/* The cardinal directions: used as index to room_data.dir_option[] */
#define NORTH 0
#define EAST 1
@ -65,7 +50,6 @@
#define UP 4
#define DOWN 5
/* Room flags: used in room_data.room_flags */
/* WARNING: In the world files, NEVER set the bits marked "R" ("Reserved") */
#define ROOM_DARK (1 << 0) /* Dark */
@ -85,14 +69,12 @@
#define ROOM_OLC (1 << 14) /* (R) Modifyable/!compress */
#define ROOM_BFS_MARK (1 << 15) /* (R) breath-first srch mrk */
/* Exit info: used in room_data.dir_option.exit_info */
#define EX_ISDOOR (1 << 0) /* Exit is a door */
#define EX_CLOSED (1 << 1) /* The door is closed */
#define EX_LOCKED (1 << 2) /* The door is locked */
#define EX_PICKPROOF (1 << 3) /* Lock can't be picked */
/* Sector types: used in room_data.sector_type */
#define SECT_INSIDE 0 /* Indoors */
#define SECT_CITY 1 /* In a city */
@ -105,10 +87,7 @@
#define SECT_FLYING 8 /* Wheee! */
#define SECT_UNDERWATER 9 /* Underwater */
/* char and mob-related defines *****************************************/
/* char and mob-related defines */
/* PC classes */
#define CLASS_UNDEFINED (-1)
#define CLASS_MAGIC_USER 0
@ -126,13 +105,11 @@
#define CLASS_DRAGON 4
#define CLASS_GIANT 5
/* Sex */
#define SEX_NEUTRAL 0
#define SEX_MALE 1
#define SEX_FEMALE 2
/* Positions */
#define POS_DEAD 0 /* dead */
#define POS_MORTALLYW 1 /* mortally wounded */
@ -144,7 +121,6 @@
#define POS_FIGHTING 7 /* fighting */
#define POS_STANDING 8 /* standing */
/* Player flags: used by char_data.char_specials.act */
#define PLR_KILLER (1 << 0) /* Player is a player-killer */
#define PLR_THIEF (1 << 1) /* Player is a player-thief */
@ -164,7 +140,6 @@
#define PLR_CRYO (1 << 15) /* Player is cryo-saved (purge prog) */
#define PLR_NOTDEADYET (1 << 16) /* (R) Player being extracted. */
/* Mobile flags: used by char_data.char_specials.act */
#define MOB_SPEC (1 << 0) /* Mob has a callable spec-proc */
#define MOB_SENTINEL (1 << 1) /* Mob should not move */
@ -186,7 +161,6 @@
#define MOB_NOBLIND (1 << 17) /* Mob can't be blinded */
#define MOB_NOTDEADYET (1 << 18) /* (R) Mob being extracted. */
/* Preference flags: used by char_data.player_specials.pref */
#define PRF_BRIEF (1 << 0) /* Room descs won't normally be shown */
#define PRF_COMPACT (1 << 1) /* No extra CRLF pair before prompts */
@ -245,7 +219,6 @@
#define AFF_UNUSED20 (1 << 20) /* Room for future expansion */
#define AFF_CHARM (1 << 21) /* Char is charmed */
/* Modes of connectedness: used by descriptor_data.state */
#define CON_PLAYING 0 /* Playing - Nominal state */
#define CON_CLOSE 1 /* User disconnect, remove character. */
@ -300,10 +273,7 @@
#define NUM_WEARS 18 /* This must be the # of eq positions!! */
/* object-related defines ********************************************/
/* object-related defines */
/* Item types: used by obj_data.obj_flags.type_flag */
#define ITEM_LIGHT 1 /* Item is a light source */
#define ITEM_SCROLL 2 /* Item is a scroll */
@ -329,7 +299,6 @@
#define ITEM_BOAT 22 /* Item is a boat */
#define ITEM_FOUNTAIN 23 /* Item is a fountain */
/* Take/Wear flags: used by obj_data.obj_flags.wear_flags */
#define ITEM_WEAR_TAKE (1 << 0) /* Item can be taken */
#define ITEM_WEAR_FINGER (1 << 1) /* Can be worn on finger */
@ -347,7 +316,6 @@
#define ITEM_WEAR_WIELD (1 << 13) /* Can be wielded */
#define ITEM_WEAR_HOLD (1 << 14) /* Can be held */
/* Extra object flags: used by obj_data.obj_flags.extra_flags */
#define ITEM_GLOW (1 << 0) /* Item is glowing */
#define ITEM_HUM (1 << 1) /* Item is humming */
@ -367,7 +335,6 @@
#define ITEM_ANTI_WARRIOR (1 << 15) /* Not usable by warriors */
#define ITEM_NOSELL (1 << 16) /* Shopkeepers won't touch it */
/* Modifier constants used with obj affects ('A' fields) */
#define APPLY_NONE 0 /* No effect */
#define APPLY_STR 1 /* Apply to strength */
@ -395,14 +362,12 @@
#define APPLY_SAVING_BREATH 23 /* Apply to save throw: breath */
#define APPLY_SAVING_SPELL 24 /* Apply to save throw: spells */
/* Container flags - value[1] */
#define CONT_CLOSEABLE (1 << 0) /* Container can be closed */
#define CONT_PICKPROOF (1 << 1) /* Container is pickproof */
#define CONT_CLOSED (1 << 2) /* Container is closed */
#define CONT_LOCKED (1 << 3) /* Container is locked */
/* Some different kind of liquids for use in values of drink containers */
#define LIQ_WATER 0
#define LIQ_BEER 1
@ -421,30 +386,24 @@
#define LIQ_SALTWATER 14
#define LIQ_CLEARWATER 15
/* other miscellaneous defines *******************************************/
/* other miscellaneous defines */
/* Player conditions */
#define DRUNK 0
#define HUNGER 1
#define THIRST 2
/* Sun state for weather_data */
#define SUN_DARK 0
#define SUN_RISE 1
#define SUN_LIGHT 2
#define SUN_SET 3
/* Sky conditions for weather_data */
#define SKY_CLOUDLESS 0
#define SKY_CLOUDY 1
#define SKY_RAINING 2
#define SKY_LIGHTNING 3
/* Rent codes */
#define RENT_UNDEF 0
#define RENT_CRASH 1
@ -453,19 +412,14 @@
#define RENT_FORCED 4
#define RENT_TIMEDOUT 5
/* other #defined constants **********************************************/
/*
* **DO**NOT** blindly change the number of levels in your MUD merely by
/* other #defined constants */
/* **DO**NOT** blindly change the number of levels in your MUD merely by
* changing these numbers and without changing the rest of the code to match.
* Other changes throughout the code are required. See coding.doc for
* details.
* Other changes throughout the code are required. See coding.doc for details.
*
* LVL_IMPL should always be the HIGHEST possible immortal level, and
* LVL_IMMORT should always be the LOWEST immortal level. The number of
* mortal levels will always be LVL_IMMORT - 1.
*/
* mortal levels will always be LVL_IMMORT - 1. */
#define LVL_IMPL 34
#define LVL_GRGOD 33
#define LVL_GOD 32
@ -474,20 +428,15 @@
/* Builders that have access to the saveall command */
#define LVL_BUILDER LVL_IMMORT
/* Level of the 'freeze' command */
#define LVL_FREEZE LVL_GRGOD
#define NUM_OF_DIRS 6 /* number of directions in a room (nsewud) */
#define MAGIC_NUMBER (0x06) /* Arbitrary number that won't be in a string */
/*
* OPT_USEC determines how many commands will be processed by the MUD per
/* OPT_USEC determines how many commands will be processed by the MUD per
* second and how frequently it does socket I/O. A low setting will cause
* actions to be executed more frequently but will increase overhead due to
* more cycling to check. A high setting (e.g. 1 Hz) may upset your players
* as actions (such as large speedwalking chains) take longer to be executed.
* You shouldn't need to adjust this.
*/
* You shouldn't need to adjust this. */
#define OPT_USEC 100000 /* 10 passes per second */
#define PASSES_PER_SEC (1000000 / OPT_USEC)
#define RL_SEC * PASSES_PER_SEC
@ -532,10 +481,7 @@
/* define the largest set of commands for a trigger */
#define MAX_CMD_LENGTH 16384 /* 16k should be plenty and then some */
/**********************************************************************
* Structures *
**********************************************************************/
/* Structures */
typedef signed char sbyte;
typedef unsigned char ubyte;
typedef signed short int sh_int;
@ -564,15 +510,10 @@ typedef IDXTYPE zone_rnum;
typedef IDXTYPE shop_rnum;
typedef IDXTYPE trig_rnum;
/*
* Bitvector type for 32 bit unsigned long bitvectors.
* 'unsigned long long' will give you at least 64 bits if you have GCC.
*
* Since we don't want to break the pfiles, you'll have to search throughout
* the code for "bitvector_t" and change them yourself if you'd like this
* extra flexibility.
*/
/* Bitvector type for 32 bit unsigned long bitvectors. 'unsigned long long'
* will give you at least 64 bits if you have GCC. You'll have to search
* throughout the code for "bitvector_t" and change them yourself if you'd
* like this extra flexibility. */
typedef unsigned long int bitvector_t;
/* Extra description: used in objects, mobiles, and rooms */
@ -582,9 +523,7 @@ struct extra_descr_data {
struct extra_descr_data *next; /* Next in list */
};
/* object-related structures ******************************************/
/* object-related structures */
#define NUM_OBJ_VAL_POSITIONS 4
/* object flags; used in obj_data */
struct obj_flag_data {
@ -600,15 +539,13 @@ struct obj_flag_data {
long /*bitvector_t*/ bitvector; /* To set chars bits */
};
/* Used in obj_file_elem *DO*NOT*CHANGE* */
struct obj_affected_type {
byte location; /* Which ability to change (APPLY_XXX) */
sbyte modifier; /* How much it changes by */
};
/* ================== Memory Structure for Objects ================== */
/* Memory Structure for Objects */
struct obj_data {
obj_rnum item_number; /* Where in data-base */
room_rnum in_room; /* In what room -1 when conta/carr */
@ -635,11 +572,8 @@ struct obj_data {
struct obj_data *next_content; /* For 'contains' lists */
struct obj_data *next; /* For the object list */
};
/* ======================================================================= */
/* ====================== File Element for Objects ======================= */
/* BEWARE: Changing it will ruin rent files */
/* File Element for Objects BEWARE: Changing it will ruin rent files */
struct obj_file_elem {
obj_vnum item_number;
@ -654,7 +588,6 @@ struct obj_file_elem {
struct obj_affected_type affected[MAX_OBJ_AFFECT];
};
/* header block for rent files. BEWARE: Changing it will ruin rent files */
struct rent_info {
int time;
@ -672,14 +605,10 @@ struct rent_info {
int spare6;
int spare7;
};
/* ======================================================================= */
/* room-related structures ************************************************/
/* room-related structures */
struct room_direction_data {
char *general_description; /* When look DIR. */
char *general_description; /* When look DIR. */
char *keyword; /* for open/close */
@ -688,8 +617,7 @@ struct room_direction_data {
room_rnum to_room; /* Where direction leads (NOWHERE) */
};
/* ================== Memory Structure for room ======================= */
/* Memory Structure for room */
struct room_data {
room_vnum number; /* Rooms number (vnum) */
zone_rnum zone; /* Room zone (for resetting) */
@ -709,12 +637,8 @@ struct room_data {
struct obj_data *contents; /* List of items in room */
struct char_data *people; /* List of NPC / PC in room */
};
/* ====================================================================== */
/* char-related structures ************************************************/
/* char-related structures */
/* memory structure for characters */
struct memory_rec_struct {
long id;
@ -723,15 +647,13 @@ struct memory_rec_struct {
typedef struct memory_rec_struct memory_rec;
/* This structure is purely intended to be an easy way to transfer */
/* and return information about time (real or mudwise). */
/* This structure is purely intended to be an easy way to transfer and return
* information about time (real or mudwise). */
struct time_info_data {
int hours, day, month;
sh_int year;
};
/* These data contain information about a players time data */
struct time_data {
time_t birth; /* This represents the characters age */
@ -739,10 +661,9 @@ struct time_data {
int played; /* This is the total accumulated time played in secs */
};
/* The pclean_criteria_data is set up in config.c and used in db.c to
determine the conditions which will cause a player character to be
deleted from disk if the automagic pwipe system is enabled (see config.c).
*/
/* The pclean_criteria_data is set up in config.c and used in db.c to determine
* the conditions which will cause a player character to be deleted from disk
* if the automagic pwipe system is enabled (see config.c). */
struct pclean_criteria_data {
int level; /* max level for this time limit */
int days; /* time limit in days */
@ -765,7 +686,6 @@ struct char_player_data {
ubyte height; /* PC / NPC's height */
};
/* Char's abilities. */
struct char_ability_data {
sbyte str;
@ -777,7 +697,6 @@ struct char_ability_data {
sbyte cha;
};
/* Char's points. */
struct char_point_data {
sh_int mana;
@ -796,11 +715,8 @@ struct char_point_data {
sbyte damroll; /* Any bonus or penalty to the damage roll */
};
/*
* char_special_data_saved: specials which both a PC and an NPC have in
* common, but which must be saved to the players file for PC's.
*/
/* char_special_data_saved: specials which both a PC and an NPC have in
* common, but which must be saved to the players file for PC's. */
struct char_special_data_saved {
int alignment; /* +-1000 for alignments */
long idnum; /* player's idnum; -1 for mobiles */
@ -811,7 +727,6 @@ struct char_special_data_saved {
sh_int apply_saving_throw[5]; /* Saving throw (Bonuses) */
};
/* Special playing constants shared by PCs and NPCs which aren't in pfile */
struct char_special_data {
struct char_data *fighting; /* Opponent */
@ -843,11 +758,9 @@ struct player_special_data_saved {
int olc_zone;
};
/*
* Specials needed only by PCs, not NPCs. Space for this structure is
/* Specials needed only by PCs, not NPCs. Space for this structure is
* not allocated in memory for NPCs, but it is for PCs and the portion
* of it labelled 'saved' is saved in the players file.
*/
* of it labelled 'saved' is saved in the players file. */
struct player_special_data {
struct player_special_data_saved saved;
@ -860,7 +773,6 @@ struct player_special_data {
char *host; /* player host */
};
/* Specials used by NPCs, not PCs */
struct mob_special_data {
memory_rec *memory; /* List of attackers to remember */
@ -870,7 +782,6 @@ struct mob_special_data {
byte damsizedice; /* The size of the damage dice's */
};
/* An affect structure. */
struct affected_type {
sh_int type; /* The type of spell that caused this */
@ -882,15 +793,13 @@ struct affected_type {
struct affected_type *next;
};
/* Structure used for chars following other chars */
struct follow_type {
struct char_data *follower;
struct follow_type *next;
};
/* ================== Structure for player/non-player ===================== */
/* Structure for player/non-player */
struct char_data {
int pfilepos; /* playerfile pos */
mob_rnum nr; /* Mob's rnum */
@ -926,17 +835,14 @@ struct char_data {
long pref; /* unique session id */
};
/* ====================================================================== */
/* descriptor-related structures ******************************************/
/* descriptor-related structures */
struct txt_block {
char *text;
int aliased;
struct txt_block *next;
};
struct txt_q {
struct txt_block *head;
struct txt_block *tail;
@ -978,9 +884,7 @@ struct descriptor_data {
struct oasis_olc_data *olc; /* OLC info */
};
/* other miscellaneous structures ***************************************/
/* other miscellaneous structures */
struct msg_type {
char *attacker_msg; /* message to attacker */
char *victim_msg; /* message to victim */
@ -1047,14 +951,12 @@ struct dex_skill_type {
sh_int hide;
};
struct dex_app_type {
sh_int reaction;
sh_int miss_att;
sh_int defensive;
};
struct str_app_type {
sh_int tohit; /* To Hit (THAC0) Bonus/Penalty */
sh_int todam; /* Damage Bonus/Penalty */
@ -1062,23 +964,19 @@ struct str_app_type {
sh_int wield_w; /* Maximum weight that can be wielded */
};
struct wis_app_type {
byte bonus; /* how many practices player gains per lev */
};
struct int_app_type {
byte learn; /* how many % a player learns a spell/skill */
};
struct con_app_type {
sh_int hitp;
sh_int shock;
};
struct weather_data {
int pressure; /* How is the pressure ( Mb ) */
int change; /* How fast and what way does it change. */
@ -1086,12 +984,8 @@ struct weather_data {
int sunlight; /* And how much sun. */
};
/*
* Element in monster and object index-tables.
*
* NOTE: Assumes sizeof(mob_vnum) >= sizeof(obj_vnum)
*/
/* Element in monster and object index-tables.
NOTE: Assumes sizeof(mob_vnum) >= sizeof(obj_vnum) */
struct index_data {
mob_vnum vnum; /* virtual number of this mob/obj */
int number; /* number of existing units of this mob/obj */
@ -1113,15 +1007,10 @@ struct guild_info_type {
int direction;
};
/*
* Config structs
*
*/
/* Config structs */
/*
* The game configuration structure used for configurating the game play
* variables.
*/
/* The game configuration structure used for configurating the game play
variables. */
struct game_data {
int pk_allowed; /* Is player killing allowed? */
int pt_allowed; /* Is player thieving allowed? */
@ -1145,11 +1034,7 @@ struct game_data {
char *NOEFFECT; /* 'Nothing seems to happen.' */
};
/*
* The rent and crashsave options.
*/
/* The rent and crashsave options. */
struct crash_save_data {
int free_rent; /* Should the MUD allow rent for free? */
int max_obj_save; /* Max items players can rent. */
@ -1160,10 +1045,7 @@ struct crash_save_data {
int rent_file_timeout; /* Lifetime of normal rent files in days*/
};
/*
* The room numbers.
*/
/* The room numbers. */
struct room_numbers {
room_vnum mortal_start_room; /* vnum of room that mortals enter at. */
room_vnum immort_start_room; /* vnum of room that immorts enter at. */
@ -1173,10 +1055,7 @@ struct room_numbers {
room_vnum donation_room_3; /* vnum of donation room #3. */
};
/*
* The game operational constants.
*/
/* The game operational constants. */
struct game_operation {
ush_int DFLT_PORT; /* The default port to run the game. */
char *DFLT_IP; /* Bind to all interfaces. */
@ -1194,17 +1073,13 @@ struct game_operation {
char *START_MESSG; /* The start msg for new characters. */
};
/*
* The Autowizard options.
*/
/* The Autowizard options. */
struct autowiz_data {
int use_autowiz; /* Use the autowiz feature? */
int min_wizlist_lev; /* Minimun level to show on wizlist. */
};
/*
* The main configuration structure;
*/
/* The main configuration structure; */
struct config_data {
char *CONFFILE; /* config file path */
struct game_data play; /* play related config */

View file

@ -211,10 +211,7 @@ void update_pos(struct char_data *victim);
#define ROOM_FLAGS(loc) (world[(loc)].room_flags)
#define SPELL_ROUTINES(spl) (spell_info[spl].routines)
/*
* See http://www.circlemud.org/~greerga/todo/todo.009 to eliminate MOB_ISNPC.
* IS_MOB() acts as a VALID_MOB_RNUM()-like function.
*/
/* IS_MOB() acts as a VALID_MOB_RNUM()-like function.*/
#define IS_NPC(ch) (IS_SET(MOB_FLAGS(ch), MOB_ISNPC))
#define IS_MOB(ch) (IS_NPC(ch) && GET_MOB_RNUM(ch) <= top_of_mobt && \
GET_MOB_RNUM(ch) != NOBODY)

View file

@ -17,11 +17,7 @@
#include "oasis.h"
#include "dg_scripts.h"
/*-------------------------------------------------------------------*/
/*
* Nasty internal macros to clean up the code.
*/
/* Nasty internal macros to clean up the code. */
#define MYCMD (OLC_ZONE(d)->cmd[subcmd])
#define OLC_CMD(d) (OLC_ZONE(d)->cmd[OLC_VAL(d)])
#define MAX_DUPLICATES 100
@ -38,8 +34,6 @@ void zedit_disp_arg1(struct descriptor_data *d);
void zedit_disp_arg2(struct descriptor_data *d);
void zedit_disp_arg3(struct descriptor_data *d);
/*-------------------------------------------------------------------*/
ACMD(do_oasis_zedit)
{
int number = NOWHERE, save = 0, real_num;
@ -48,14 +42,10 @@ ACMD(do_oasis_zedit)
char buf1[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH];
/****************************************************************************/
/** Parse any arguments. **/
/****************************************************************************/
/* Parse any arguments. */
buf3 = two_arguments(argument, buf1, buf2);
/****************************************************************************/
/** If no argument was given, use the zone the builder is standing in. **/
/****************************************************************************/
/* If no argument was given, use the zone the builder is standing in. */
if (!*buf1)
number = GET_ROOM_VNUM(IN_ROOM(ch));
else if (!isdigit(*buf1)) {
@ -94,15 +84,11 @@ ACMD(do_oasis_zedit)
bottom = atoi(sbot);
top = atoi(stop);
/**********************************************************************/
/** Setup the new zone (displays the menu to the builder). **/
/**********************************************************************/
/* Setup the new zone (displays the menu to the builder). */
zedit_new_zone(ch, number, bottom, top);
}
/************************************************************************/
/** Done now, exit the function. **/
/************************************************************************/
/* Done now, exit the function. */
return;
} else {
@ -111,15 +97,11 @@ ACMD(do_oasis_zedit)
}
}
/****************************************************************************/
/** If a numeric argumentwas given, retrieve it. **/
/****************************************************************************/
/* If a numeric argumentwas given, retrieve it. */
if (number == NOWHERE)
number = atoi(buf1);
/****************************************************************************/
/** Check that nobody is currently editing this zone. **/
/****************************************************************************/
/* Check that nobody is currently editing this zone. */
for (d = descriptor_list; d; d = d->next) {
if (STATE(d) == CON_ZEDIT) {
if (d->olc && OLC_NUM(d) == number) {
@ -130,14 +112,10 @@ ACMD(do_oasis_zedit)
}
}
/****************************************************************************/
/** Store the builder's descriptor in d. **/
/****************************************************************************/
/* Store the builder's descriptor in d. */
d = ch->desc;
/****************************************************************************/
/** Give the builder's descriptor an OLC structure. **/
/****************************************************************************/
/* Give the builder's descriptor an OLC structure. */
if (d->olc) {
mudlog(BRF, LVL_IMMORT, TRUE, "SYSERR: do_oasis_zedit: Player already "
"had olc structure.");
@ -146,36 +124,28 @@ ACMD(do_oasis_zedit)
CREATE(d->olc, struct oasis_olc_data, 1);
/****************************************************************************/
/** Find the zone. **/
/****************************************************************************/
/* Find the zone. */
OLC_ZNUM(d) = save ? real_zone(number) : real_zone_by_thing(number);
if (OLC_ZNUM(d) == NOWHERE) {
send_to_char(ch, "Sorry, there is no zone for that number!\r\n");
/**************************************************************************/
/** Free the descriptor's OLC structure. **/
/**************************************************************************/
/* Free the descriptor's OLC structure. */
free(d->olc);
d->olc = NULL;
return;
}
/****************************************************************************/
/** Everyone but IMPLs can only edit zones they have been assigned. **/
/****************************************************************************/
/* Everyone but IMPLs can only edit zones they have been assigned. */
if (!can_edit_zone(ch, OLC_ZNUM(d))) {
send_to_char(ch, " You do not have permission to edit zone %d. Try zone %d.\r\n", zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
send_cannot_edit(ch, zone_table[OLC_ZNUM(d)].number);
mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
free(d->olc);
d->olc = NULL;
return;
}
/****************************************************************************/
/** If we need to save, then save the zone. **/
/****************************************************************************/
/* If we need to save, then save the zone. */
if (save) {
send_to_char(ch, "Saving all zone information for zone %d.\r\n",
zone_table[OLC_ZNUM(d)].number);
@ -183,14 +153,10 @@ mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
"OLC: %s saves zone information for zone %d.", GET_NAME(ch),
zone_table[OLC_ZNUM(d)].number);
/**************************************************************************/
/** Save the zone information to the zone file. **/
/**************************************************************************/
/* Save the zone information to the zone file. */
save_zone(OLC_ZNUM(d));
/**************************************************************************/
/** Free the descriptor's OLC structure. **/
/**************************************************************************/
/* Free the descriptor's OLC structure. */
free(d->olc);
d->olc = NULL;
return;
@ -201,9 +167,7 @@ mudlog(BRF, LVL_IMPL, TRUE, "OLC: %s tried to edit zone %d allowed zone %d",
if ((real_num = real_room(number)) == NOWHERE) {
write_to_output(d, "That room does not exist.\r\n");
/**************************************************************************/
/** Free the descriptor's OLC structure. **/
/**************************************************************************/
/* Free the descriptor's OLC structure. */
free(d->olc);
d->olc = NULL;
return;
@ -224,14 +188,10 @@ void zedit_setup(struct descriptor_data *d, int room_num)
struct zone_data *zone;
int subcmd = 0, count = 0, cmd_room = NOWHERE;
/*
* Allocate one scratch zone structure.
*/
/* Allocate one scratch zone structure. */
CREATE(zone, struct zone_data, 1);
/*
* Copy all the zone header information over.
*/
/* Copy all the zone header information over. */
zone->name = strdup(zone_table[OLC_ZNUM(d)].name);
if (zone_table[OLC_ZNUM(d)].builders)
zone->builders = strdup(zone_table[OLC_ZNUM(d)].builders);
@ -239,21 +199,15 @@ void zedit_setup(struct descriptor_data *d, int room_num)
zone->bot = zone_table[OLC_ZNUM(d)].bot;
zone->top = zone_table[OLC_ZNUM(d)].top;
zone->reset_mode = zone_table[OLC_ZNUM(d)].reset_mode;
/*
* The remaining fields are used as a 'has been modified' flag
*/
/* The remaining fields are used as a 'has been modified' flag */
zone->number = 0; /* Header information has changed. */
zone->age = 0; /* The commands have changed. */
/*
* Start the reset command list with a terminator.
*/
/* Start the reset command list with a terminator. */
CREATE(zone->cmd, struct reset_com, 1);
zone->cmd[0].command = 'S';
/*
* Add all entries in zone_table that relate to this room.
*/
/* Add all entries in zone_table that relate to this room. */
while (ZCMD(OLC_ZNUM(d), subcmd).command != 'S') {
switch (ZCMD(OLC_ZNUM(d), subcmd).command) {
case 'M':
@ -283,11 +237,7 @@ void zedit_setup(struct descriptor_data *d, int room_num)
zedit_disp_menu(d);
}
/*-------------------------------------------------------------------*/
/*
* Create a new zone.
*/
/* Create a new zone. */
void zedit_new_zone(struct char_data *ch, zone_vnum vzone_num, room_vnum bottom, room_vnum top)
{
int result;
@ -322,12 +272,8 @@ void zedit_new_zone(struct char_data *ch, zone_vnum vzone_num, room_vnum bottom,
write_to_output(ch->desc, "Zone created successfully.\r\n");
}
/*-------------------------------------------------------------------*/
/*
* Save all the information in the player's temporary buffer back into
* the current zone table.
*/
/* Save all the information in the player's temporary buffer back into
* the current zone table. */
void zedit_save_internally(struct descriptor_data *d)
{
int mobloaded = FALSE,
@ -342,19 +288,15 @@ void zedit_save_internally(struct descriptor_data *d)
remove_room_zone_commands(OLC_ZNUM(d), room_num);
/*
* Now add all the entries in the players descriptor list
*/
/* Now add all the entries in the players descriptor list */
for (subcmd = 0; MYCMD.command != 'S'; subcmd++) {
/*
* Since Circle does not keep track of what rooms the 'G', 'E', and
/* Since Circle does not keep track of what rooms the 'G', 'E', and
* 'P' commands are exitted in, but OasisOLC groups zone commands
* by rooms, this creates interesting problems when builders use these
* commands without loading a mob or object first. This fix prevents such
* commands from being saved and 'wandering' through the zone command
* list looking for mobs/objects to latch onto.
* C.Raehl 4/27/99
*/
* C.Raehl 4/27/99 */
switch (MYCMD.command) {
/* Possible fail cases. */
case 'G':
@ -382,9 +324,7 @@ void zedit_save_internally(struct descriptor_data *d)
add_cmd_to_list(&(zone_table[OLC_ZNUM(d)].cmd), &MYCMD, subcmd);
}
/*
* Finally, if zone headers have been changed, copy over
*/
/* Finally, if zone headers have been changed, copy over */
if (OLC_ZONE(d)->number) {
free(zone_table[OLC_ZNUM(d)].name);
free(zone_table[OLC_ZNUM(d)].builders);
@ -399,37 +339,24 @@ void zedit_save_internally(struct descriptor_data *d)
add_to_save_list(zone_table[OLC_ZNUM(d)].number, SL_ZON);
}
/*-------------------------------------------------------------------*/
void zedit_save_to_disk(int zone)
{
save_zone(zone);
}
/*-------------------------------------------------------------------*/
/*
* Error check user input and then setup change
*/
/* Error check user input and then setup change */
int start_change_command(struct descriptor_data *d, int pos)
{
if (pos < 0 || pos >= count_commands(OLC_ZONE(d)->cmd))
return 0;
/*
* Ok, let's get editing.
*/
/* Ok, let's get editing. */
OLC_VAL(d) = pos;
return 1;
}
/**************************************************************************
Menu functions
**************************************************************************/
/*
* the main menu
*/
/* Menu functions */
/* the main menu */
void zedit_disp_menu(struct descriptor_data *d)
{
int subcmd = 0, room, counter = 0;
@ -438,9 +365,7 @@ void zedit_disp_menu(struct descriptor_data *d)
clear_screen(d);
room = real_room(OLC_NUM(d));
/*
* Menu header
*/
/* Menu header */
send_to_char(d->character,
"Room number: %s%d%s Room zone: %s%d\r\n"
"%s1%s) Builders : %s%s\r\n"
@ -464,13 +389,9 @@ void zedit_disp_menu(struct descriptor_data *d)
nrm
);
/*
* Print the commands for this room into display buffer.
*/
/* Print the commands for this room into display buffer. */
while (MYCMD.command != 'S') {
/*
* Translate what the command means.
*/
/* Translate what the command means. */
write_to_output(d, "%s%d - %s", nrm, counter++, yel);
switch (MYCMD.command) {
case 'M':
@ -554,9 +475,7 @@ void zedit_disp_menu(struct descriptor_data *d)
write_to_output(d, "\r\n");
subcmd++;
}
/*
* Finish off menu
*/
/* Finish off menu */
write_to_output(d,
"%s%d - <END OF LIST>\r\n"
"%sN%s) Insert new command.\r\n"
@ -569,11 +488,7 @@ void zedit_disp_menu(struct descriptor_data *d)
OLC_MODE(d) = ZEDIT_MAIN_MENU;
}
/*-------------------------------------------------------------------*/
/*
* Print the command type menu and setup response catch.
*/
/* Print the command type menu and setup response catch. */
void zedit_disp_comtype(struct descriptor_data *d)
{
get_char_colors(d->character);
@ -593,12 +508,8 @@ void zedit_disp_comtype(struct descriptor_data *d)
OLC_MODE(d) = ZEDIT_COMMAND_TYPE;
}
/*-------------------------------------------------------------------*/
/*
* Print the appropriate message for the command type for arg1 and set
* up the input catch clause
*/
/* Print the appropriate message for the command type for arg1 and set
up the input catch clause */
void zedit_disp_arg1(struct descriptor_data *d)
{
write_to_output(d, "\r\n");
@ -617,9 +528,7 @@ void zedit_disp_arg1(struct descriptor_data *d)
break;
case 'D':
case 'R':
/*
* Arg1 for these is the room number, skip to arg2
*/
/* Arg1 for these is the room number, skip to arg2 */
OLC_CMD(d).arg1 = real_room(OLC_NUM(d));
zedit_disp_arg2(d);
break;
@ -629,9 +538,7 @@ void zedit_disp_arg1(struct descriptor_data *d)
OLC_MODE(d) = ZEDIT_ARG1;
break;
default:
/*
* We should never get here.
*/
/* We should never get here. */
cleanup_olc(d, CLEANUP_ALL);
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_disp_arg1(): Help!");
write_to_output(d, "Oops...\r\n");
@ -639,12 +546,8 @@ void zedit_disp_arg1(struct descriptor_data *d)
}
}
/*-------------------------------------------------------------------*/
/*
* Print the appropriate message for the command type for arg2 and set
* up the input catch clause.
*/
/* Print the appropriate message for the command type for arg2 and set
up the input catch clause. */
void zedit_disp_arg2(struct descriptor_data *d)
{
int i;
@ -675,9 +578,7 @@ void zedit_disp_arg2(struct descriptor_data *d)
write_to_output(d, "Global's context (0 for none) : ");
break;
default:
/*
* We should never get here, but just in case...
*/
/* We should never get here, but just in case. */
cleanup_olc(d, CLEANUP_ALL);
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_disp_arg2(): Help!");
write_to_output(d, "Oops...\r\n");
@ -686,12 +587,8 @@ void zedit_disp_arg2(struct descriptor_data *d)
OLC_MODE(d) = ZEDIT_ARG2;
}
/*-------------------------------------------------------------------*/
/*
* Print the appropriate message for the command type for arg3 and set
* up the input catch clause.
*/
/* Print the appropriate message for the command type for arg3 and set
up the input catch clause. */
void zedit_disp_arg3(struct descriptor_data *d)
{
int i = 0;
@ -727,9 +624,7 @@ void zedit_disp_arg3(struct descriptor_data *d)
case 'R':
case 'G':
default:
/*
* We should never get here, just in case.
*/
/* We should never get here, just in case. */
cleanup_olc(d, CLEANUP_ALL);
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_disp_arg3(): Help!");
write_to_output(d, "Oops...\r\n");
@ -738,23 +633,17 @@ void zedit_disp_arg3(struct descriptor_data *d)
OLC_MODE(d) = ZEDIT_ARG3;
}
/**************************************************************************
The GARGANTAUN event handler
**************************************************************************/
/* The event handler */
void zedit_parse(struct descriptor_data *d, char *arg)
{
int pos, i = 0;
switch (OLC_MODE(d)) {
/*-------------------------------------------------------------------*/
case ZEDIT_CONFIRM_SAVESTRING:
switch (*arg) {
case 'y':
case 'Y':
/*
* Save the zone in memory, hiding invisible people.
*/
/* Save the zone in memory, hiding invisible people. */
zedit_save_internally(d);
if (CONFIG_OLC_SAVE) {
write_to_output(d, "Saving zone info to disk.\r\n");
@ -770,19 +659,18 @@ void zedit_parse(struct descriptor_data *d, char *arg)
break;
default:
write_to_output(d, "Invalid choice!\r\n");
write_to_output(d, "Do you wish to save the zone info? : ");
write_to_output(d, "Do you wish to save your changes? : ");
break;
}
break;
/* End of ZEDIT_CONFIRM_SAVESTRING */
/*-------------------------------------------------------------------*/
case ZEDIT_MAIN_MENU:
switch (*arg) {
case 'q':
case 'Q':
if (OLC_ZONE(d)->age || OLC_ZONE(d)->number) {
write_to_output(d, "Do you wish to save the changes to the zone info? (y/n) : ");
write_to_output(d, "Do you wish to save your changes? (y/n) : ");
OLC_MODE(d) = ZEDIT_CONFIRM_SAVESTRING;
} else {
write_to_output(d, "No changes made.\r\n");
@ -791,9 +679,7 @@ void zedit_parse(struct descriptor_data *d, char *arg)
break;
case 'n':
case 'N':
/*
* New entry.
*/
/* New entry. */
if (OLC_ZONE(d)->cmd[0].command == 'S') {
/* first command */
if (new_command(OLC_ZONE(d), 0) && start_change_command(d, 0)) {
@ -807,40 +693,30 @@ void zedit_parse(struct descriptor_data *d, char *arg)
break;
case 'e':
case 'E':
/*
* Change an entry.
*/
/* Change an entry. */
write_to_output(d, "Which command do you wish to change? : ");
OLC_MODE(d) = ZEDIT_CHANGE_ENTRY;
break;
case 'd':
case 'D':
/*
* Delete an entry.
*/
/* Delete an entry. */
write_to_output(d, "Which command do you wish to delete? : ");
OLC_MODE(d) = ZEDIT_DELETE_ENTRY;
break;
case 'z':
case 'Z':
/*
* Edit zone name.
*/
/* Edit zone name. */
write_to_output(d, "Enter new zone name : ");
OLC_MODE(d) = ZEDIT_ZONE_NAME;
break;
case '1':
/*
* Edit zone builders.
*/
/* Edit zone builders. */
write_to_output(d, "Enter new builders list : ");
OLC_MODE(d) = ZEDIT_ZONE_BUILDERS;
break;
case 'b':
case 'B':
/*
* Edit bottom of zone.
*/
/* Edit bottom of zone. */
if (GET_LEVEL(d->character) < LVL_IMPL)
zedit_disp_menu(d);
else {
@ -850,9 +726,7 @@ void zedit_parse(struct descriptor_data *d, char *arg)
break;
case 't':
case 'T':
/*
* Edit top of zone.
*/
/* Edit top of zone. */
if (GET_LEVEL(d->character) < LVL_IMPL)
zedit_disp_menu(d);
else {
@ -862,17 +736,13 @@ void zedit_parse(struct descriptor_data *d, char *arg)
break;
case 'l':
case 'L':
/*
* Edit zone lifespan.
*/
/* Edit zone lifespan. */
write_to_output(d, "Enter new zone lifespan : ");
OLC_MODE(d) = ZEDIT_ZONE_LIFE;
break;
case 'r':
case 'R':
/*
* Edit zone reset mode.
*/
/* Edit zone reset mode. */
write_to_output(d, "\r\n"
"0) Never reset\r\n"
"1) Reset only when no players in zone\r\n"
@ -887,11 +757,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
break;
/* End of ZEDIT_MAIN_MENU */
/*-------------------------------------------------------------------*/
case ZEDIT_NEW_ENTRY:
/*
* Get the line number and insert the new line.
*/
/* Get the line number and insert the new line. */
pos = atoi(arg);
if (isdigit(*arg) && new_command(OLC_ZONE(d), pos)) {
if (start_change_command(d, pos)) {
@ -902,11 +769,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
zedit_disp_menu(d);
break;
/*-------------------------------------------------------------------*/
case ZEDIT_DELETE_ENTRY:
/*
* Get the line number and delete the line.
*/
/* Get the line number and delete the line. */
pos = atoi(arg);
if (isdigit(*arg)) {
delete_zone_command(OLC_ZONE(d), pos);
@ -915,15 +779,9 @@ void zedit_parse(struct descriptor_data *d, char *arg)
zedit_disp_menu(d);
break;
/*-------------------------------------------------------------------*/
case ZEDIT_CHANGE_ENTRY:
/*
* Parse the input for which line to edit, and goto next quiz.
*/
/*
* Abort edit, and return to main menu
* - idea from Mark Garringer zizazat@hotmail.com
*/
/* Parse the input for which line to edit, and goto next quiz. Abort edit,
and return to main menu idea from Mark Garringer zizazat@hotmail.com */
if (toupper(*arg) == 'A') {
if (OLC_CMD(d).command == 'N') {
OLC_CMD(d).command = '*';
@ -940,12 +798,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
zedit_disp_menu(d);
break;
/*-------------------------------------------------------------------*/
case ZEDIT_COMMAND_TYPE:
/*
* Parse the input for which type of command this is, and goto next
* quiz.
*/
/* Parse the input for which type of command this is, and goto next quiz. */
OLC_CMD(d).command = toupper(*arg);
if (!OLC_CMD(d).command || (strchr("MOPEDGRTV", OLC_CMD(d).command) == NULL)) {
write_to_output(d, "Invalid choice, try again : ");
@ -965,11 +819,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
}
break;
/*-------------------------------------------------------------------*/
case ZEDIT_IF_FLAG:
/*
* Parse the input for the if flag, and goto next quiz.
*/
/* Parse the input for the if flag, and goto next quiz. */
switch (*arg) {
case 'y':
case 'Y':
@ -986,11 +837,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
zedit_disp_arg1(d);
break;
/*-------------------------------------------------------------------*/
case ZEDIT_ARG1:
/*
* Parse the input for arg1, and goto next quiz.
*/
/* Parse the input for arg1, and goto next quiz. */
if (!isdigit(*arg)) {
write_to_output(d, "Must be a numeric value, try again : ");
return;
@ -1025,9 +873,7 @@ void zedit_parse(struct descriptor_data *d, char *arg)
case 'D':
case 'R':
default:
/*
* We should never get here.
*/
/* We should never get here. */
cleanup_olc(d, CLEANUP_ALL);
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_parse(): case ARG1: Ack!");
write_to_output(d, "Oops...\r\n");
@ -1035,11 +881,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
}
break;
/*-------------------------------------------------------------------*/
case ZEDIT_ARG2:
/*
* Parse the input for arg2, and goto next quiz.
*/
/* Parse the input for arg2, and goto next quiz. */
if (!isdigit(*arg)) {
write_to_output(d, "Must be a numeric value, try again : ");
return;
@ -1076,9 +919,7 @@ void zedit_parse(struct descriptor_data *d, char *arg)
break;
case 'D':
pos = atoi(arg);
/*
* Count directions.
*/
/* Count directions. */
if (pos < 0 || pos > NUM_OF_DIRS)
write_to_output(d, "Try again : ");
else {
@ -1094,9 +935,7 @@ void zedit_parse(struct descriptor_data *d, char *arg)
write_to_output(d, "That object does not exist, try again : ");
break;
default:
/*
* We should never get here, but just in case...
*/
/* We should never get here, but just in case. */
cleanup_olc(d, CLEANUP_ALL);
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_parse(): case ARG2: Ack!");
write_to_output(d, "Oops...\r\n");
@ -1104,11 +943,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
}
break;
/*-------------------------------------------------------------------*/
case ZEDIT_ARG3:
/*
* Parse the input for arg3, and go back to main menu.
*/
/* Parse the input for arg3, and go back to main menu. */
if (!isdigit(*arg)) {
write_to_output(d, "Must be a numeric value, try again : ");
return;
@ -1116,10 +952,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
switch (OLC_CMD(d).command) {
case 'E':
pos = atoi(arg);
/*
* Count number of wear positions. We could use NUM_WEARS, this is
* more reliable.
*/
/* Count number of wear positions. We could use NUM_WEARS, this is
more reliable. */
while (*equipment_types[i] != '\n')
i++;
if (pos < 0 || pos > i)
@ -1152,9 +986,7 @@ void zedit_parse(struct descriptor_data *d, char *arg)
case 'T':
case 'V':
default:
/*
* We should never get here, but just in case...
*/
/* We should never get here, but just in case. */
cleanup_olc(d, CLEANUP_ALL);
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_parse(): case ARG3: Ack!");
write_to_output(d, "Oops...\r\n");
@ -1162,7 +994,6 @@ void zedit_parse(struct descriptor_data *d, char *arg)
}
break;
/*-------------------------------------------------------------------*/
case ZEDIT_SARG1:
if (strlen(arg)) {
OLC_CMD(d).sarg1 = strdup(arg);
@ -1172,7 +1003,6 @@ void zedit_parse(struct descriptor_data *d, char *arg)
write_to_output(d, "Must have some name to assign : ");
break;
/*-------------------------------------------------------------------*/
case ZEDIT_SARG2:
if (strlen(arg)) {
OLC_CMD(d).sarg2 = strdup(arg);
@ -1181,11 +1011,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
write_to_output(d, "Must have some value to set it to :");
break;
/*-------------------------------------------------------------------*/
case ZEDIT_ZONE_NAME:
/*
* Add new name and return to main menu.
*/
/* Add new name and return to main menu. */
if (genolc_checkstring(d, arg)) {
if (OLC_ZONE(d)->name)
free(OLC_ZONE(d)->name);
@ -1197,11 +1024,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
zedit_disp_menu(d);
break;
/*-------------------------------------------------------------------*/
case ZEDIT_ZONE_BUILDERS:
/*
* Add new builders list and return to main menu.
*/
/* Add new builders list and return to main menu. */
if (genolc_checkstring(d, arg)) {
if (OLC_ZONE(d)->builders)
free(OLC_ZONE(d)->builders);
@ -1213,11 +1037,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
zedit_disp_menu(d);
break;
/*-------------------------------------------------------------------*/
case ZEDIT_ZONE_RESET:
/*
* Parse and add new reset_mode and return to main menu.
*/
/* Parse and add new reset_mode and return to main menu. */
pos = atoi(arg);
if (!isdigit(*arg) || pos < 0 || pos > 2)
write_to_output(d, "Try again (0-2) : ");
@ -1228,11 +1049,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
}
break;
/*-------------------------------------------------------------------*/
case ZEDIT_ZONE_LIFE:
/*
* Parse and add new lifespan and return to main menu.
*/
/* Parse and add new lifespan and return to main menu. */
pos = atoi(arg);
if (!isdigit(*arg) || pos < 0 || pos > 240)
write_to_output(d, "Try again (0-240) : ");
@ -1243,11 +1061,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
}
break;
/*-------------------------------------------------------------------*/
case ZEDIT_ZONE_BOT:
/*
* Parse and add new bottom room in zone and return to main menu.
*/
/* Parse and add new bottom room in zone and return to main menu. */
if (OLC_ZNUM(d) == 0)
OLC_ZONE(d)->bot = LIMIT(atoi(arg), 0, OLC_ZONE(d)->top);
else
@ -1256,11 +1071,8 @@ void zedit_parse(struct descriptor_data *d, char *arg)
zedit_disp_menu(d);
break;
/*-------------------------------------------------------------------*/
case ZEDIT_ZONE_TOP:
/*
* Parse and add new top room in zone and return to main menu.
*/
/* Parse and add new top room in zone and return to main menu. */
if (OLC_ZNUM(d) == top_of_zone_table)
OLC_ZONE(d)->top = LIMIT(atoi(arg), genolc_zonep_bottom(OLC_ZONE(d)), 32000);
else
@ -1269,18 +1081,11 @@ void zedit_parse(struct descriptor_data *d, char *arg)
zedit_disp_menu(d);
break;
/*-------------------------------------------------------------------*/
default:
/*
* We should never get here, but just in case...
*/
/* We should never get here, but just in case... */
cleanup_olc(d, CLEANUP_ALL);
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_parse(): Reached default case!");
write_to_output(d, "Oops...\r\n");
break;
}
}
/******************************************************************************/
/** End of parse_zedit() **/
/******************************************************************************/

View file

@ -1,18 +1,13 @@
/*
** Zmalloc, a simple memory-allocation monitor.
/** Zmalloc, a simple memory-allocation monitor.
**
** Version 2. added detection for writing off the end or beginning
** of buffers, freeing the same block multiple times. Also now use the
** env variable to set the name of a file to write output to.
**
**
** Copyright 1996,1998,1999,2000 Eric Murray, ericm@lne.com
**
** You may make free use of this code but please give me credit.
**
**
** Documentation: http://www.lne.com/ericm/zmalloc
**
** $Id: zmalloc.c,v 1.3 2000/06/26 18:38:53 ericm Exp $
** $Log: zmalloc.c,v $
** Revision 1.3 2000/06/26 18:38:53 ericm
@ -25,10 +20,7 @@
** use env variable to set output to stdin, stdout, file
**
** Revision 1.1 1998/05/25 16:31:35 ericm
** Initial revision
**
**
*/
** Initial revision */
/* local functions */
void zfree_special (int *, char *, int);

View file

@ -1,21 +1,13 @@
/*
** Zmalloc, a simple memory-allocation monitor.
/* Zmalloc, a simple memory-allocation monitor.
**
** Copyright 1996 Eric Murray, ericm@lne.com
**
** You may make free use of this code but please give me credit.
**
**
** Documentation: http://www.lne.com/ericm/zmalloc
**
** $Id: zmalloc.h,v 1.1 1998/05/25 16:31:35 ericm Exp $
** $Log: zmalloc.h,v $
** Revision 1.1 1998/05/25 16:31:35 ericm
** Initial revision
**
**
*/
** Initial revision */
#ifndef ZMALLOC_H
#define ZMALLOC_H
@ -32,4 +24,3 @@ char *zstrdup(const char*, char*, int);
#define strdup(x) zstrdup((x), __FILE__, __LINE__)
#endif /* ZMALLOC_H */