diff -BENbdpru old/doc/OasisOLC.Changes new/doc/OasisOLC.Changes
--- old/doc/OasisOLC.Changes 2003-07-28 19:37:24.000000000 +0000
+++ new/doc/OasisOLC.Changes 2003-07-28 19:38:00.000000000 +0000
@@ -1,12 +1,27 @@
- --==** OasisOLC Version 2.0.4 For CircleMUD Version 3.1 **==-
-
-[Current Additions]
-* RLIST command. Lists all rooms in a given zone.
-* (D) command in redit. Allows the builder to delete the room from memory.
-* Added a builders list for zones.
+ --==** OasisOLC Version 2.0.5 For CircleMUD Version 3.1 **==-
-[Current Modifications]
-* Maintenance Release:
+* Maintenance Release 2.0.5:
+ Upped version number to 2.0.5
+ Now can_edit_zone() works as advertised--reversed TRUE/FALSE
+ Rlist no longer displays exits to rooms that don't exist
+ Rlist shows exits even if low/high arguments aren't provided
+ Merged in some can_edit_zone() checks from DG Scripts
+ Combined ACMD(do_oasis_[morsz]list) into ACMD(do_oasis_list)
+ Made unaffect work when an object has been edited then removed
+ Added a links command for displaying exits from a zone
+ Added checks for CONFIG_AUTO_SAVE in [morsz]edit_parse()
+ Turn on smash_tilde() by default
+ Added smash_tilde() calls in MEDIT_(ALIAS|S_DESC|L_DESC) cases
+ REMOVE_BIT AFF_(CHARM|POISON|GROUP|SLEEP) in MEDIT_AFF_FLAGS case
+ Added an abort option to oedit
+ Fixed bounds checking in the OEDIT_TYPE case
+ Limit oedit weapon modifiers to +/-50 and dice to 50
+ Check more out of range oedit values for scrolls and potions
+ Don't allow assigning shop_keeper specproc in sedit_parse()
+ Call zedit_save_to_disk() from zedit_new_zone()
+ Various int to rnum fixes throughout gen(mob|obj|wld).c
+ Cedit no longer accumulates MENU WELC_MESSG START_MESSG newlines
+* Maintenance Release 2.0.4:
Upped version number to 2.0.4
Added empty builder field to lib/world/zon/*.zon
Moved Oasis docfiles into doc/
@@ -17,31 +32,34 @@
Repaired a bunch of potential format string exploits
Added missing can_edit check to zedit
Fixed free_strings() crash for rooms with multiple ex_description
- Now can_edit_zone() works as advertised--reversed TRUE/FALSE
* Alterations by Welcor:
Upped version number to 2.0.3 (I think the new additions warrant it)
- oasis-ified tedit (a bit) and made d->olc a struct oasis_olc_data * instead of void *
+ oasis-ified tedit (a bit) and made d->olc a struct oasis_olc_data *
+ instead of void *
All olc files: Dependency on global buffers removed.
All olc files: ->in_room -> IN_ROOM() change.
All files (olc files + comm.c): update to circle 3.1
- All olc files: removed some buffers, changed to write_to_output and send_to_char
- db.c, db.h: Changed config_info to a static variable (to save some malloc/free'ing)
- structs.h: Embedded substructs in config_data struct instead of using pointers (same reason)
+ All olc files: removed some buffers, changed to write_to_output and
+ send_to_char
+ db.c, db.h: Changed config_info to a static variable (to save some
+ malloc/free'ing)
+ structs.h: Embedded substructs in config_data struct instead of using
+ pointers (same reason)
utils.h: Added macros to configure options.
All olc files: Removed some outdated comments.
- oasis_copy.c: Fixed serious buffer size error in do_dig and cleaned the code up.
- All olc files: Added support for unsigned IDXTYPE by removing checks for <0 and ==-1
+ oasis_copy.c: Fixed serious buffer size error in do_dig and cleaned the
+ code up.
+ All olc files: Added support for unsigned IDXTYPE by removing checks for
+ <0 and ==-1
comm.c: Added support for auto prompt. (hey, the bit was there...)
-* BugFix
- zedit.
+* BugFix zedit.
Modified the message to the user from "Zone create successfully\r\n" to
"Zone created successfully.\r\n".
-* BugFix (Not really)
- save
+* BugFix (Not really) save
Added a check to make sure the zone is in the save_list before calling
remove_from_save_list. This was a problem because everytime a builder
saved his/her zone, but it wasn't in the save list, an error was sent
to the log file, erraneous.
-
-[Old Additions and Modifications]
-* None to date.
+* RLIST command. Lists all rooms in a given zone.
+* (D) command in redit. Allows the builder to delete the room from memory.
+* Added a builders list for zones.
diff -BENbdpru old/doc/OasisOLC.html new/doc/OasisOLC.html
--- old/doc/OasisOLC.html 2003-07-28 19:37:24.000000000 +0000
+++ new/doc/OasisOLC.html 2003-07-28 19:38:00.000000000 +0000
@@ -1,6 +1,6 @@
- OasisOLC v2.0.4
+ OasisOLC v2.0.5
diff -BENbdpru old/src/Makefile.in new/src/Makefile.in
--- old/src/Makefile.in 2003-07-28 19:37:24.000000000 +0000
+++ new/src/Makefile.in 2003-07-28 19:38:00.000000000 +0000
@@ -25,23 +25,23 @@ 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 olc.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
+ boards.o castle.o class.o comm.o config.o constants.o db.o fight.o \
+ graph.o handler.o house.o interpreter.o limits.o magic.o mail.o \
+ mobact.o modify.o objsave.o olc.o random.o shop.o spec_assign.o \
+ spec_procs.o spell_parser.o spells.o utils.o weather.o \
+ bsd-snprintf.o cedit.o genmob.o genobj.o genolc.o genshp.o genwld.o \
+ genzon.o improved-edit.o medit.o oasis.o oasis_copy.o oasis_delete.o \
+ oasis_list.o oedit.o redit.o sedit.o tedit.o zedit.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.o oasis_delete.c \
- oasis_list.o 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 bsd-snprintf.c
+ boards.c castle.c class.c comm.c config.c constants.c db.c fight.c \
+ graph.c handler.c house.c interpreter.c limits.c magic.c mail.c \
+ mobact.c modify.c objsave.c olc.c random.c shop.c spec_assign.c \
+ spec_procs.c spell_parser.c spells.c utils.c weather.c \
+ bsd-snprintf.c cedit.c genmob.c genobj.c genolc.c genshp.c genwld.c \
+ genzon.c improved-edit.c medit.c oasis.c oasis_copy.c oasis_delete.c \
+ oasis_list.c oedit.c redit.c sedit.c tedit.c zedit.c
default: all
diff -BENbdpru old/src/act.wizard.c new/src/act.wizard.c
--- old/src/act.wizard.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/act.wizard.c 2003-07-28 19:38:00.000000000 +0000
@@ -1852,9 +1852,10 @@ ACMD(do_wizutil)
act("A sudden fireball conjured from nowhere thaws $n!", FALSE, vict, 0, 0, TO_ROOM);
break;
case SCMD_UNAFFECT:
- if (vict->affected) {
+ if (vict->affected || AFF_FLAGS(vict)) {
while (vict->affected)
affect_remove(vict, vict->affected);
+ AFF_FLAGS(vict) = 0;
send_to_char(vict, "There is a brief flash of light!\r\nYou feel slightly different.\r\n");
send_to_char(ch, "All spells removed.\r\n");
} else {
diff -BENbdpru old/src/cedit.c new/src/cedit.c
--- old/src/cedit.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/cedit.c 2003-07-28 19:38:00.000000000 +0000
@@ -519,14 +519,15 @@ int save_config( sh_int nowhere )
strip_cr(buf);
fprintf(fl, "* The entrance/exit menu.\n"
- "MENU = \n%s\n~\n\n", buf);
+ "MENU = \n%s~\n\n", buf);
}
if (CONFIG_WELC_MESSG) {
strcpy(buf, CONFIG_WELC_MESSG);
strip_cr(buf);
- fprintf(fl, "* The welcome message.\nWELC_MESSG = \n%s\n~\n\n", buf);
+ fprintf(fl, "* The welcome message.\n"
+ "WELC_MESSG = \n%s~\n\n", buf);
}
if (CONFIG_START_MESSG) {
@@ -534,7 +535,7 @@ int save_config( sh_int nowhere )
strip_cr(buf);
fprintf(fl, "* NEWBIE start message.\n"
- "START_MESSG = \n%s\n~\n\n", buf);
+ "START_MESSG = \n%s~\n\n", buf);
}
fprintf(fl, "\n\n\n* [ Autowiz Options ]\n");
@@ -789,6 +790,10 @@ void cedit_parse(struct descriptor_data
mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE,
"OLC: %s modifies the game configuration.", GET_NAME(d->character));
cleanup_olc(d, CLEANUP_CONFIG);
+ if (CONFIG_AUTO_SAVE) {
+ cedit_save_to_disk();
+ write_to_output(d, "Game configuration saved to disk.\r\n");
+ } else
write_to_output(d, "Game configuration saved to memory.\r\n");
return;
case 'n':
@@ -798,7 +803,7 @@ void cedit_parse(struct descriptor_data
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 internally? (y/n) : ");
+ write_to_output(d, "Do you wish to save the configuration? (y/n) : ");
return;
}
@@ -838,7 +843,7 @@ void cedit_parse(struct descriptor_data
case 'q':
case 'Q':
- write_to_output(d, "Do you wish to save the configuration internally? (y/n) : ");
+ write_to_output(d, "Do you wish to save the configuration? (y/n) : ");
OLC_MODE(d) = CEDIT_CONFIRM_SAVESTRING;
break;
diff -BENbdpru old/src/constants.c new/src/constants.c
--- old/src/constants.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/constants.c 2003-07-28 19:38:00.000000000 +0000
@@ -18,7 +18,7 @@ cpp_extern const char *circlemud_version
"CircleMUD, version 3.1";
cpp_extern const char *oasisolc_version =
- "OasisOLC 2.0.4";
+ "OasisOLC 2.0.5";
/* strings corresponding to ordinals/bitvectors in structs.h ***********/
diff -BENbdpru old/src/genmob.c new/src/genmob.c
--- old/src/genmob.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/genmob.c 2003-07-28 19:38:00.000000000 +0000
@@ -36,6 +36,8 @@ extern struct char_data *character_list;
extern struct char_data *mob_proto;
extern struct index_data *mob_index;
+extern void smash_tilde(char *str);
+
int add_mobile(struct char_data *mob, mob_vnum vnum)
{
int rnum, i, found = FALSE, shop, cmd_no;
@@ -53,7 +55,7 @@ int add_mobile(struct char_data *mob, mo
add_to_save_list(zone_table[real_zone_by_thing(vnum)].number, SL_MOB);
log("GenOLC: add_mobile: Updated existing mobile #%d.", vnum);
- return TRUE;
+ return rnum;
}
RECREATE(mob_proto, struct char_data, top_of_mobt + 2);
@@ -246,7 +248,7 @@ int free_mobile_strings(struct char_data
*/
int free_mobile(struct char_data *mob)
{
- int i;
+ mob_rnum i;
if (mob == NULL)
return FALSE;
@@ -261,11 +263,14 @@ int free_mobile(struct char_data *mob)
free(mob->player.name);
if (mob->player.title && mob->player.title != mob_proto[i].player.title)
free(mob->player.title);
- if (mob->player.short_descr && mob->player.short_descr != mob_proto[i].player.short_descr)
+ if (mob->player.short_descr &&
+ mob->player.short_descr != mob_proto[i].player.short_descr)
free(mob->player.short_descr);
- if (mob->player.long_descr && mob->player.long_descr != mob_proto[i].player.long_descr)
+ if (mob->player.long_descr &&
+ mob->player.long_descr != mob_proto[i].player.long_descr)
free(mob->player.long_descr);
- if (mob->player.description && mob->player.description != mob_proto[i].player.description)
+ if (mob->player.description &&
+ mob->player.description != mob_proto[i].player.description)
free(mob->player.description);
}
while (mob->affected)
@@ -289,14 +294,16 @@ int save_mobiles(zone_rnum rznum)
#else
if (rznum < 0 || rznum > top_of_zone_table) {
#endif
- log("SYSERR: GenOLC: save_mobiles: Invalid real zone number %d. (0-%d)", rznum, top_of_zone_table);
+ log("SYSERR: GenOLC: save_mobiles: Invalid real zone number %d. (0-%d)",
+ rznum, top_of_zone_table);
return FALSE;
}
vznum = zone_table[rznum].number;
snprintf(mobfname, sizeof(mobfname), "%s%d.new", MOB_PREFIX, vznum);
if ((mobfd = fopen(mobfname, "w")) == NULL) {
- mudlog(BRF, LVL_GOD, TRUE, "SYSERR: GenOLC: Cannot open mob file for writing.");
+ mudlog(BRF, LVL_GOD, TRUE,
+ "SYSERR: GenOLC: Cannot open mob file for writing.");
return FALSE;
}
diff -BENbdpru old/src/genobj.c new/src/genobj.c
--- old/src/genobj.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/genobj.c 2003-07-28 19:38:00.000000000 +0000
@@ -156,9 +156,9 @@ int adjust_objects(obj_rnum refpt)
* Function handle the insertion of an object within the prototype framework. Note that this does not adjust internal values
* of other objects, use add_object() for that.
*/
-int insert_object(struct obj_data *obj, obj_vnum ovnum)
+obj_rnum insert_object(struct obj_data *obj, obj_vnum ovnum)
{
- int i;
+ obj_rnum i;
top_of_objt++;
RECREATE(obj_index, struct index_data, top_of_objt + 1);
@@ -186,7 +186,7 @@ int insert_object(struct obj_data *obj,
/* ------------------------------------------------------------------------------------------------------------------------------ */
-int index_object(struct obj_data *obj, obj_vnum ovnum, obj_rnum ornum)
+obj_rnum index_object(struct obj_data *obj, obj_vnum ovnum, obj_rnum ornum)
{
#if CIRCLE_UNSIGNED_INDEX
if (obj == NULL || ovnum < 0 || ornum == NOTHING || ornum > top_of_objt)
diff -BENbdpru old/src/genobj.h new/src/genobj.h
--- old/src/genobj.h 2003-07-28 19:37:24.000000000 +0000
+++ new/src/genobj.h 2003-07-28 19:38:00.000000000 +0000
@@ -11,9 +11,9 @@ void free_object_strings_proto(struct ob
int copy_object(struct obj_data *to, struct obj_data *from);
int copy_object_preserve(struct obj_data *to, struct obj_data *from);
int save_objects(zone_rnum vznum);
-int insert_object(struct obj_data *obj, obj_vnum ovnum);
+obj_rnum insert_object(struct obj_data *obj, obj_vnum ovnum);
int adjust_objects(obj_rnum refpt);
-int index_object(struct obj_data *obj, obj_vnum ovnum, obj_rnum ornum);
+obj_rnum index_object(struct obj_data *obj, obj_vnum ovnum, obj_rnum ornum);
int update_objects(struct obj_data *refobj);
obj_rnum add_object(struct obj_data *, obj_vnum ovnum);
diff -BENbdpru old/src/genwld.c new/src/genwld.c
--- old/src/genwld.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/genwld.c 2003-07-28 19:38:00.000000000 +0000
@@ -33,7 +33,8 @@ room_rnum add_room(struct room_data *roo
{
struct char_data *tch;
struct obj_data *tobj;
- int i, j, found = FALSE;
+ int j, found = FALSE;
+ room_rnum i;
if (room == NULL)
return NOWHERE;
@@ -126,7 +127,8 @@ room_rnum add_room(struct room_data *roo
int delete_room(room_rnum rnum)
{
- int i, j;
+ room_rnum i;
+ int j;
struct char_data *ppl, *next_ppl;
struct obj_data *obj, *next_obj;
struct room_data *room;
diff -BENbdpru old/src/interpreter.c new/src/interpreter.c
--- old/src/interpreter.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/interpreter.c 2003-07-28 19:38:00.000000000 +0000
@@ -354,6 +354,7 @@ cpp_extern const struct command_info cmd
{ "levels" , POS_DEAD , do_levels , 0, 0 },
{ "list" , POS_STANDING, do_not_here , 0, 0 },
{ "lick" , POS_RESTING , do_action , 0, 0 },
+ { "links" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_LINKS },
{ "lock" , POS_SITTING , do_gen_door , 0, SCMD_LOCK },
{ "load" , POS_DEAD , do_load , LVL_GOD, 0 },
{ "love" , POS_RESTING , do_action , 0, 0 },
diff -BENbdpru old/src/interpreter.h new/src/interpreter.h
--- old/src/interpreter.h 2003-07-28 19:37:24.000000000 +0000
+++ new/src/interpreter.h 2003-07-28 19:38:00.000000000 +0000
@@ -222,3 +222,4 @@ struct alias_data {
#define SCMD_OASIS_OLIST 10
#define SCMD_OASIS_SLIST 11
#define SCMD_OASIS_ZLIST 12
+#define SCMD_OASIS_LINKS 13
diff -BENbdpru old/src/medit.c new/src/medit.c
--- old/src/medit.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/medit.c 2003-07-28 19:38:00.000000000 +0000
@@ -39,6 +39,11 @@ extern struct descriptor_data *descripto
extern const char *mobprog_types[];
#endif
+/*
+ * External function prototypes/
+ */
+extern void smash_tilde(char *str);
+
/*-------------------------------------------------------------------*/
/*
@@ -640,9 +645,14 @@ void medit_parse(struct descriptor_data
/*
* Save the mob in memory and to disk.
*/
- write_to_output(d, "Saving mobile to memory.\r\n");
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));
+ 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_AUTO_SAVE) {
+ medit_save_to_disk(zone_table[real_zone_by_thing(OLC_NUM(d))].number);
+ write_to_output(d, "Mobile saved to disk.\r\n");
+ } else
+ write_to_output(d, "Mobile saved to memory.\r\n");
/* FALL THROUGH */
case 'n':
case 'N':
@@ -797,18 +807,21 @@ void medit_parse(struct descriptor_data
return;
/*-------------------------------------------------------------------*/
case MEDIT_ALIAS:
+ 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)))
free(GET_LDESC(OLC_MOB(d)));
if (arg && *arg) {
@@ -852,6 +865,9 @@ void medit_parse(struct descriptor_data
break;
else if (i <= NUM_AFF_FLAGS)
TOGGLE_BIT(AFF_FLAGS(OLC_MOB(d)), 1 << (i - 1));
+ /* Remove unwanted bits right away. */
+ REMOVE_BIT(AFF_FLAGS(OLC_MOB(d)),
+ AFF_CHARM | AFF_POISON | AFF_GROUP | AFF_SLEEP);
medit_disp_aff_flags(d);
return;
/*-------------------------------------------------------------------*/
diff -BENbdpru old/src/modify.c new/src/modify.c
--- old/src/modify.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/modify.c 2003-07-28 19:38:00.000000000 +0000
@@ -75,7 +75,7 @@ int length[] =
*/
void smash_tilde(char *str)
{
-#if 0
+#if 1
/*
* Erase any ~'s inserted by people in the editor. This prevents anyone
* using online creation from causing parse errors in the world files.
diff -BENbdpru old/src/oasis.c new/src/oasis.c
--- old/src/oasis.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/oasis.c 2003-07-28 19:38:00.000000000 +0000
@@ -129,27 +129,20 @@ ACMD(do_oasis)
break;
case SCMD_OASIS_RLIST:
- do_oasis_rlist(ch, argument, cmd, subcmd);
- break;
-
case SCMD_OASIS_MLIST:
- do_oasis_mlist(ch, argument, cmd, subcmd);
- break;
-
case SCMD_OASIS_OLIST:
- do_oasis_olist(ch, argument, cmd, subcmd);
- break;
-
case SCMD_OASIS_SLIST:
- do_oasis_slist(ch, argument, cmd, subcmd);
+ case SCMD_OASIS_ZLIST:
+ do_oasis_list(ch, argument, cmd, subcmd);
break;
- case SCMD_OASIS_ZLIST:
- do_oasis_zlist(ch, argument, cmd, subcmd);
+ case SCMD_OASIS_LINKS:
+ do_oasis_links(ch, argument, cmd, subcmd);
break;
default:
- log("SYSERR: (OLC) Invalid subcmd passed to do_oasis, subcmd - (%d)", subcmd);
+ log("SYSERR: (OLC) Invalid subcmd passed to do_oasis, subcmd - (%d)",
+ subcmd);
return;
}
@@ -335,11 +328,29 @@ void free_config(struct config_data *dat
/******************************************************************************/
int can_edit_zone(struct char_data *ch, zone_rnum rnum)
{
+ /* no access if called with bad arguments */
+ if (!ch->desc || IS_NPC(ch) || rnum == NOWHERE)
+ return FALSE;
+
+ /* always access if ch is high enough level */
if (GET_LEVEL(ch) >= LVL_IMPL)
return (TRUE);
+ /* always access if a player have helped build the zone in the first place */
if (is_name(GET_NAME(ch), zone_table[rnum].builders))
return (TRUE);
+ /* no access if you haven't been assigned a zone */
+ if (GET_OLC_ZONE(ch) == NOWHERE)
+ return FALSE;
+
+ /* no access if you're not at least LVL_BUILDER */
+ if (GET_LEVEL(ch) < LVL_BUILDER)
+ return FALSE;
+
+ /* always access if you're assigned to this zone */
+ if (real_zone(GET_OLC_ZONE(ch)) == rnum)
+ return TRUE;
+
return (FALSE);
}
diff -BENbdpru old/src/oasis.h new/src/oasis.h
--- old/src/oasis.h 2003-07-28 19:37:24.000000000 +0000
+++ new/src/oasis.h 2003-07-28 19:38:00.000000000 +0000
@@ -383,6 +383,8 @@ extern const char *nrm, *grn, *cyn, *yel
*/
void clear_screen(struct descriptor_data *);
ACMD(do_oasis);
+ACMD(do_oasis_list);
+ACMD(do_oasis_links);
/*
* Prototypes, to be moved later.
@@ -405,7 +407,6 @@ void medit_disp_menu(struct descriptor_d
void medit_parse(struct descriptor_data *d, char *arg);
void medit_string_cleanup(struct descriptor_data *d, int terminator);
ACMD(do_oasis_medit);
-ACMD(do_oasis_mlist);
void oedit_setup_new(struct descriptor_data *d);
void oedit_setup_existing(struct descriptor_data *d, int real_num);
@@ -430,7 +431,6 @@ void oedit_parse(struct descriptor_data
void oedit_disp_perm_menu(struct descriptor_data *d);
void oedit_string_cleanup(struct descriptor_data *d, int terminator);
ACMD(do_oasis_oedit);
-ACMD(do_oasis_olist);
void redit_string_cleanup(struct descriptor_data *d, int terminator);
void redit_setup_new(struct descriptor_data *d);
@@ -446,7 +446,6 @@ void redit_disp_menu(struct descriptor_d
void redit_parse(struct descriptor_data *d, char *arg);
void free_room(struct room_data *room);
ACMD(do_oasis_redit);
-ACMD(do_oasis_rlist);
void sedit_setup_new(struct descriptor_data *d);
void sedit_setup_existing(struct descriptor_data *d, int rshop_num);
@@ -462,7 +461,6 @@ void sedit_types_menu(struct descriptor_
void sedit_disp_menu(struct descriptor_data *d);
void sedit_parse(struct descriptor_data *d, char *arg);
ACMD(do_oasis_sedit);
-ACMD(do_oasis_slist);
void zedit_setup(struct descriptor_data *d, int room_num);
void zedit_new_zone(struct char_data *ch, zone_vnum vzone_num, room_vnum bottom, room_vnum top);
@@ -476,7 +474,6 @@ void zedit_disp_arg2(struct descriptor_d
void zedit_disp_arg3(struct descriptor_data *d);
void zedit_parse(struct descriptor_data *d, char *arg);
ACMD(do_oasis_zedit);
-ACMD(do_oasis_zlist);
void cedit_setup(struct descriptor_data *d);
void cedit_parse(struct descriptor_data *d, char *arg);
diff -BENbdpru old/src/oasis_list.c new/src/oasis_list.c
--- old/src/oasis_list.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/oasis_list.c 2003-07-28 19:38:00.000000000 +0000
@@ -42,63 +42,26 @@ void print_zone(struct char_data *ch, zo
/******************************************************************************/
/** Ingame Commands **/
/******************************************************************************/
-ACMD(do_oasis_rlist)
+ACMD(do_oasis_list)
{
- zone_rnum rzone;
+ zone_rnum rzone = NOWHERE;
room_rnum vmin = NOWHERE;
room_rnum vmax = NOWHERE;
char smin[MAX_INPUT_LENGTH];
char smax[MAX_INPUT_LENGTH];
- /****************************************************************************/
- /** Split the arguments into smin and smax. **/
- /****************************************************************************/
two_arguments(argument, smin, smax);
- if (!*smin || *smin == '.') {
- rzone = world[IN_ROOM(ch)].zone;
-
- list_rooms(ch, rzone, NOWHERE, NOWHERE);
-
- } else if (!*smax) {
- rzone = real_zone(atoi(smin));
-
- if (rzone == NOWHERE) {
- send_to_char(ch, "Sorry, there's no zone with that number\r\n");
+ if (subcmd == SCMD_OASIS_ZLIST) { /* special case */
+ if (smin && *smin && is_number(smin))
+ print_zone(ch, atoi(smin));
+ else
+ list_zones(ch);
return;
}
- list_rooms(ch, rzone, NOWHERE, NOWHERE);
-
- } else {
- /****************************************************************************/
- /** Listing by min vnum / max vnum. Retrieve the numeric values. **/
- /****************************************************************************/
- vmin = atoi(smin);
- vmax = atoi(smax);
-
- list_rooms(ch, NOWHERE, vmin, vmax);
- }
-}
-
-ACMD(do_oasis_mlist)
-{
- zone_rnum rzone;
- room_rnum vmin = NOWHERE;
- room_rnum vmax = NOWHERE;
- char smin[MAX_INPUT_LENGTH];
- char smax[MAX_INPUT_LENGTH];
-
- /****************************************************************************/
- /** Split the arguments into smin and smax. **/
- /****************************************************************************/
- two_arguments(argument, smin, smax);
-
if (!*smin || *smin == '.') {
rzone = world[IN_ROOM(ch)].zone;
-
- list_mobiles(ch, rzone, NOWHERE, NOWHERE);
-
} else if (!*smax) {
rzone = real_zone(atoi(smin));
@@ -106,109 +69,78 @@ ACMD(do_oasis_mlist)
send_to_char(ch, "Sorry, there's no zone with that number\r\n");
return;
}
-
- list_mobiles(ch, rzone, NOWHERE, NOWHERE);
-
} else {
- /****************************************************************************/
/** Listing by min vnum / max vnum. Retrieve the numeric values. **/
- /****************************************************************************/
vmin = atoi(smin);
vmax = atoi(smax);
- list_mobiles(ch, NOWHERE, vmin, vmax);
- }
-}
-
-ACMD(do_oasis_olist)
-{
- zone_rnum rzone;
- room_rnum vmin = NOWHERE;
- room_rnum vmax = NOWHERE;
- char smin[MAX_INPUT_LENGTH];
- char smax[MAX_INPUT_LENGTH];
-
- /****************************************************************************/
- /** Split the arguments into smin and smax. **/
- /****************************************************************************/
- two_arguments(argument, smin, smax);
-
- if (!*smin || *smin == '.') {
- rzone = world[IN_ROOM(ch)].zone;
-
- list_objects(ch, rzone, NOWHERE, NOWHERE);
-
- } else if (!*smax) {
- rzone = real_zone(atoi(smin));
-
- if (rzone == NOWHERE) {
- send_to_char(ch, "Sorry, there's no zone with that number\r\n");
+ if (vmin > vmax) {
+ send_to_char(ch, "List from %d to %d - Aren't we funny today!\r\n",
+ vmin, vmax);
return;
}
+ }
- list_objects(ch, rzone, NOWHERE, NOWHERE);
-
- } else {
- /****************************************************************************/
- /** Listing by min vnum / max vnum. Retrieve the numeric values. **/
- /****************************************************************************/
- vmin = atoi(smin);
- vmax = atoi(smax);
-
- list_objects(ch, NOWHERE, vmin, vmax);
+ switch (subcmd) {
+ case SCMD_OASIS_MLIST: list_mobiles(ch, rzone, vmin, vmax); break;
+ case SCMD_OASIS_OLIST: list_objects(ch, rzone, vmin, vmax); break;
+ case SCMD_OASIS_RLIST: list_rooms(ch, rzone, vmin, vmax); break;
+ case SCMD_OASIS_SLIST: list_shops(ch, rzone, vmin, vmax); break;
+ default:
+ send_to_char(ch, "You can't list that!\r\n");
+ mudlog(BRF, LVL_IMMORT, TRUE,
+ "SYSERR: do_oasis_list: Unknown list option: %d", subcmd);
}
}
-ACMD(do_oasis_slist)
+ACMD(do_oasis_links)
{
- zone_rnum rzone;
- room_rnum vmin = NOWHERE;
- room_rnum vmax = NOWHERE;
- char smin[MAX_INPUT_LENGTH];
- char smax[MAX_INPUT_LENGTH];
-
- /****************************************************************************/
- /** Split the arguments into smin and smax. **/
- /****************************************************************************/
- two_arguments(argument, smin, smax);
-
- if (!*smin || *smin == '.') {
- rzone = world[IN_ROOM(ch)].zone;
-
- list_shops(ch, rzone, NOWHERE, NOWHERE);
+ zone_rnum zrnum;
+ zone_vnum zvnum;
+ room_rnum nr, to_room;
+ int first, last, j;
+ char arg[MAX_INPUT_LENGTH];
- } else if (!*smax) {
- rzone = real_zone(atoi(smin));
+ skip_spaces(&argument);
+ one_argument(argument, arg);
- /**************************************************************************/
- /** Make sure the zone exists. **/
- /**************************************************************************/
- if (rzone == NOWHERE) {
- send_to_char(ch, "Sorry, there's no zone with that number\r\n");
+ if (!arg || !*arg) {
+ send_to_char(ch,
+ "Syntax: links ('.' for zone you are standing in)\r\n");
return;
}
- list_shops(ch, rzone, NOWHERE, NOWHERE);
-
+ if (!strcmp(arg, ".")) {
+ zrnum = world[IN_ROOM(ch)].zone;
+ zvnum = zone_table[zrnum].number;
} else {
- /****************************************************************************/
- /** Listing by min vnum / max vnum. Retrieve the numeric values. **/
- /****************************************************************************/
- vmin = atoi(smin);
- vmax = atoi(smax);
+ zvnum = atoi(arg);
+ zrnum = real_zone(zvnum);
+ }
- list_shops(ch, NOWHERE, vmin, vmax);
+ if (zrnum == NOWHERE || zvnum == NOWHERE) {
+ send_to_char(ch, "No zone was found with that number.\n\r");
+ return;
}
-}
+ last = zone_table[zrnum].top;
+ first = zone_table[zrnum].bot;
-ACMD(do_oasis_zlist)
-{
- skip_spaces(&argument);
- if (argument && *argument && is_number(argument))
- print_zone(ch, atoi(argument));
- else
- list_zones(ch);
+ send_to_char(ch, "Zone %d is linked to the following zones:\r\n", zvnum);
+ for (nr = 0; nr <= top_of_world && (GET_ROOM_VNUM(nr) <= last); nr++) {
+ if (GET_ROOM_VNUM(nr) >= first) {
+ for (j = 0; j < NUM_OF_DIRS; j++) {
+ if (world[nr].dir_option[j]) {
+ to_room = world[nr].dir_option[j]->to_room;
+ if (to_room != NOWHERE && (zrnum != world[to_room].zone))
+ send_to_char(ch, "%3d %-30s at %5d (%-5s) ---> %5d\r\n",
+ zone_table[world[to_room].zone].number,
+ zone_table[world[to_room].zone].name,
+ GET_ROOM_VNUM(nr), dirs[j], world[to_room].number);
+ }
+ }
+ }
+ }
}
@@ -272,11 +204,10 @@ void list_rooms(struct char_data *ch, zo
counter, QGRN, world[i].number, QNRM, QCYN, world[i].name, QNRM);
for (j = 0; j < NUM_OF_DIRS; j++) {
- if (W_EXIT(i, j) == NULL)
- continue;
-
- if (world[W_EXIT(i, j)->to_room].zone != rnum)
- send_to_char(ch, "(%s%d%s)", QYEL, world[W_EXIT(i, j)->to_room].number, QNRM);
+ if (W_EXIT(i, j) != NULL &&
+ W_EXIT(i, j)->to_room != NOWHERE)
+ send_to_char(ch, "(%s%d%s)",
+ QYEL, world[W_EXIT(i, j)->to_room].number, QNRM);
}
diff -BENbdpru old/src/oedit.c new/src/oedit.c
--- old/src/oedit.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/oedit.c 2003-07-28 19:38:00.000000000 +0000
@@ -762,17 +762,26 @@ void oedit_parse(struct descriptor_data
switch (*arg) {
case 'y':
case 'Y':
- write_to_output(d, "Saving object to memory.\r\n");
oedit_save_internally(d);
- mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE, "OLC: %s edits obj %d", GET_NAME(d->character), OLC_NUM(d));
+ mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE,
+ "OLC: %s edits obj %d", GET_NAME(d->character), OLC_NUM(d));
+ if (CONFIG_AUTO_SAVE) {
+ oedit_save_to_disk(real_zone_by_thing(OLC_NUM(d)));
+ write_to_output(d, "Object saved to disk.\r\n");
+ } else
+ write_to_output(d, "Object saved to memory.\r\n");
/* Fall through. */
case 'n':
case 'N':
cleanup_olc(d, CLEANUP_ALL);
return;
+ case 'a': /* abort quit */
+ case 'A':
+ oedit_disp_menu(d);
+ return;
default:
write_to_output(d, "Invalid choice!\r\n");
- write_to_output(d, "Do you wish to save this object internally?\r\n");
+ write_to_output(d, "Do you wish to save this object?\r\n");
return;
}
@@ -784,7 +793,7 @@ void oedit_parse(struct descriptor_data
case 'q':
case 'Q':
if (OLC_VAL(d)) { /* Something has been modified. */
- write_to_output(d, "Do you wish to save this object internally? : ");
+ write_to_output(d, "Do you wish to save this object? : ");
OLC_MODE(d) = OEDIT_CONFIRM_SAVESTRING;
} else
cleanup_olc(d, CLEANUP_ALL);
@@ -851,6 +860,7 @@ void oedit_parse(struct descriptor_data
GET_OBJ_VAL(OLC_OBJ(d), 1) = 0;
GET_OBJ_VAL(OLC_OBJ(d), 2) = 0;
GET_OBJ_VAL(OLC_OBJ(d), 3) = 0;
+ OLC_VAL(d) = 1;
oedit_disp_val1_menu(d);
break;
case 'd':
@@ -918,6 +928,9 @@ void oedit_parse(struct descriptor_data
return;
} else
GET_OBJ_TYPE(OLC_OBJ(d)) = number;
+ /* what's the boundschecking worth if we don't do this ? -- Welcor */
+ GET_OBJ_VAL(OLC_OBJ(d), 0) = GET_OBJ_VAL(OLC_OBJ(d), 1) =
+ GET_OBJ_VAL(OLC_OBJ(d), 2) = GET_OBJ_VAL(OLC_OBJ(d), 3) = 0;
break;
case OEDIT_EXTRAS:
@@ -980,7 +993,13 @@ void oedit_parse(struct descriptor_data
* 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);
+ break;
+ default:
GET_OBJ_VAL(OLC_OBJ(d), 0) = atoi(arg);
+ }
/*
* proceed to menu 2
*/
@@ -996,10 +1015,11 @@ void oedit_parse(struct descriptor_data
case ITEM_POTION:
if (number < 0 || number >= NUM_SPELLS)
oedit_disp_val2_menu(d);
- else {
+ else if (number == 0)
+ GET_OBJ_VAL(OLC_OBJ(d), 1) = -1;
+ else
GET_OBJ_VAL(OLC_OBJ(d), 1) = number;
oedit_disp_val3_menu(d);
- }
break;
case ITEM_CONTAINER:
/*
@@ -1015,6 +1035,11 @@ void oedit_parse(struct descriptor_data
} else
oedit_disp_val3_menu(d);
break;
+ case ITEM_WEAPON:
+ /* 50 dice must be enough -- Welcor */
+ GET_OBJ_VAL(OLC_OBJ(d), 1) = MIN(MAX(number, 1), 50);
+ oedit_disp_val3_menu(d);
+ break;
default:
GET_OBJ_VAL(OLC_OBJ(d), 1) = number;
@@ -1030,6 +1055,11 @@ void oedit_parse(struct descriptor_data
switch (GET_OBJ_TYPE(OLC_OBJ(d))) {
case ITEM_SCROLL:
case ITEM_POTION:
+ if (number == 0) {
+ GET_OBJ_VAL(OLC_OBJ(d), 2) = -1;
+ oedit_disp_val3_menu(d);
+ return;
+ }
min_val = -1;
max_val = NUM_SPELLS - 1;
break;
@@ -1064,6 +1094,10 @@ void oedit_parse(struct descriptor_data
switch (GET_OBJ_TYPE(OLC_OBJ(d))) {
case ITEM_SCROLL:
case ITEM_POTION:
+ if (number == 0) {
+ GET_OBJ_VAL(OLC_OBJ(d), 3) = -1;
+ return;
+ }
min_val = -1;
max_val = NUM_SPELLS - 1;
break;
diff -BENbdpru old/src/redit.c new/src/redit.c
--- old/src/redit.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/redit.c 2003-07-28 19:38:00.000000000 +0000
@@ -501,12 +501,17 @@ void redit_parse(struct descriptor_data
case 'y':
case 'Y':
redit_save_internally(d);
- mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE, "OLC: %s edits room %d.", GET_NAME(d->character), OLC_NUM(d));
+ mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE,
+ "OLC: %s edits room %d.", GET_NAME(d->character), OLC_NUM(d));
+ if (CONFIG_AUTO_SAVE) {
+ redit_save_to_disk(real_zone_by_thing(OLC_NUM(d)));
+ 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.
*/
cleanup_olc(d, CLEANUP_STRUCTS);
- write_to_output(d, "Room saved to memory.\r\n");
break;
case 'n':
case 'N':
@@ -516,7 +521,8 @@ void redit_parse(struct descriptor_data
cleanup_olc(d, CLEANUP_ALL);
break;
default:
- write_to_output(d, "Invalid choice!\r\nDo you wish to save this room internally? : ");
+ write_to_output(d,
+ "Invalid choice!\r\nDo you wish to save this room? : ");
break;
}
return;
@@ -526,7 +532,7 @@ void redit_parse(struct descriptor_data
case 'q':
case 'Q':
if (OLC_VAL(d)) { /* Something has been modified. */
- write_to_output(d, "Do you wish to save this room internally? : ");
+ write_to_output(d, "Do you wish to save this room? : ");
OLC_MODE(d) = REDIT_CONFIRM_SAVESTRING;
} else
cleanup_olc(d, CLEANUP_ALL);
diff -BENbdpru old/src/sedit.c new/src/sedit.c
--- old/src/sedit.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/sedit.c 2003-07-28 19:38:00.000000000 +0000
@@ -498,11 +498,14 @@ void sedit_parse(struct descriptor_data
switch (*arg) {
case 'y':
case 'Y':
- write_to_output(d, "Saving shop to memory.\r\n");
sedit_save_internally(d);
mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE,
- "OLC: %s edits shop %d", GET_NAME(d->character),
- OLC_NUM(d));
+ "OLC: %s edits shop %d", GET_NAME(d->character), OLC_NUM(d));
+ if (CONFIG_AUTO_SAVE) {
+ sedit_save_to_disk(real_zone_by_thing(OLC_NUM(d)));
+ write_to_output(d, "Shop saved to disk.\r\n");
+ } else
+ write_to_output(d, "Shop saved to memory.\r\n");
cleanup_olc(d, CLEANUP_STRUCTS);
return;
case 'n':
@@ -742,7 +745,8 @@ void sedit_parse(struct descriptor_data
/*
* Fiddle with special procs.
*/
- S_FUNC(OLC_SHOP(d)) = mob_index[i].func;
+ S_FUNC(OLC_SHOP(d)) =
+ mob_index[i].func != shop_keeper ? mob_index[i].func : NULL;
mob_index[i].func = shop_keeper;
break;
case SEDIT_OPEN1:
diff -BENbdpru old/src/zedit.c new/src/zedit.c
--- old/src/zedit.c 2003-07-28 19:37:24.000000000 +0000
+++ new/src/zedit.c 2003-07-28 19:38:00.000000000 +0000
@@ -312,7 +312,10 @@ void zedit_new_zone(struct char_data *ch
}
}
- mudlog(BRF, MAX(LVL_BUILDER, GET_INVIS_LEV(ch)), TRUE, "OLC: %s creates new zone #%d", GET_NAME(ch), vzone_num);
+ zedit_save_to_disk(result); /* save to disk .. */
+
+ mudlog(BRF, MAX(LVL_BUILDER, GET_INVIS_LEV(ch)), TRUE,
+ "OLC: %s creates new zone #%d", GET_NAME(ch), vzone_num);
write_to_output(ch->desc, "Zone created successfully.\r\n");
}
@@ -721,10 +724,15 @@ void zedit_parse(struct descriptor_data
/*
* Save the zone in memory, hiding invisible people.
*/
- write_to_output(d, "Saving zone info in memory.\r\n");
zedit_save_internally(d);
+ if (CONFIG_AUTO_SAVE) {
+ write_to_output(d, "Saving zone info to disk.\r\n");
+ zedit_save_to_disk(OLC_ZNUM(d));
+ } else
+ write_to_output(d, "Saving zone info in memory.\r\n");
- mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE, "OLC: %s edits zone info for room %d.", GET_NAME(d->character), OLC_NUM(d));
+ mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE,
+ "OLC: %s edits zone info for room %d.", GET_NAME(d->character), OLC_NUM(d));
/* FALL THROUGH */
case 'n':
case 'N':