This fixes the wizkit so that if someone wishes for a non-object such as
a trap, not only is no message printed, but we don't try to create anything.

Incidentally, if you have two bad wizkit items in a row, you get told to hit
space to continue, then you can hit space, then the error message for the
second bad item is printed on the same line as the first hit space message.
(I haven't tried to fix that.)
This commit is contained in:
arromdee
2002-03-10 01:00:06 +00:00
parent bab78d03c8
commit 3294d0b818
+16 -27
View File
@@ -1598,12 +1598,13 @@ struct alt_spellings {
* if asking explicitly for "nothing" (or "nil") return no_wish; * if asking explicitly for "nothing" (or "nil") return no_wish;
* if not an object return &zeroobj; if an error (no matching object), * if not an object return &zeroobj; if an error (no matching object),
* return null. * return null.
* If from_user is false, we're reading from the wizkit, nothing was typed in.
*/ */
struct obj * struct obj *
readobjnam(bp, no_wish, noisy) readobjnam(bp, no_wish, from_user)
register char *bp; register char *bp;
struct obj *no_wish; struct obj *no_wish;
boolean noisy; boolean from_user;
{ {
register char *p; register char *p;
register int i; register int i;
@@ -1943,7 +1944,7 @@ boolean noisy;
) cnt=5000; ) cnt=5000;
if (cnt < 1) cnt=1; if (cnt < 1) cnt=1;
#ifndef GOLDOBJ #ifndef GOLDOBJ
if (noisy) if (from_user)
pline("%d gold piece%s.", cnt, plur(cnt)); pline("%d gold piece%s.", cnt, plur(cnt));
u.ugold += cnt; u.ugold += cnt;
flags.botl=1; flags.botl=1;
@@ -2150,7 +2151,7 @@ srch:
/* must come after objects check so wizards can still wish for /* must come after objects check so wizards can still wish for
* trap objects like beartraps * trap objects like beartraps
*/ */
if (wizard) { if (wizard && from_user) {
int trap; int trap;
for (trap = NO_TRAP+1; trap < TRAPNUM; trap++) { for (trap = NO_TRAP+1; trap < TRAPNUM; trap++) {
@@ -2162,8 +2163,7 @@ srch:
if((trap == TRAPDOOR || trap == HOLE) if((trap == TRAPDOOR || trap == HOLE)
&& !Can_fall_thru(&u.uz)) trap = ROCKTRAP; && !Can_fall_thru(&u.uz)) trap = ROCKTRAP;
(void) maketrap(u.ux, u.uy, trap); (void) maketrap(u.ux, u.uy, trap);
if (noisy) pline("%s.", An(tname));
pline("%s.", An(tname));
return(&zeroobj); return(&zeroobj);
} }
} }
@@ -2174,16 +2174,14 @@ srch:
level.flags.nfountains++; level.flags.nfountains++;
if(!strncmpi(bp, "magic ", 6)) if(!strncmpi(bp, "magic ", 6))
levl[u.ux][u.uy].blessedftn = 1; levl[u.ux][u.uy].blessedftn = 1;
if (noisy) pline("A %sfountain.",
pline("A %sfountain.",
levl[u.ux][u.uy].blessedftn ? "magic " : ""); levl[u.ux][u.uy].blessedftn ? "magic " : "");
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
return(&zeroobj); return(&zeroobj);
} }
if(!BSTRCMP(bp, p-6, "throne")) { if(!BSTRCMP(bp, p-6, "throne")) {
levl[u.ux][u.uy].typ = THRONE; levl[u.ux][u.uy].typ = THRONE;
if (noisy) pline("A throne.");
pline("A throne.");
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
return(&zeroobj); return(&zeroobj);
} }
@@ -2191,8 +2189,7 @@ srch:
if(!BSTRCMP(bp, p-4, "sink")) { if(!BSTRCMP(bp, p-4, "sink")) {
levl[u.ux][u.uy].typ = SINK; levl[u.ux][u.uy].typ = SINK;
level.flags.nsinks++; level.flags.nsinks++;
if (noisy) pline("A sink.");
pline("A sink.");
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
return &zeroobj; return &zeroobj;
} }
@@ -2200,8 +2197,7 @@ srch:
if(!BSTRCMP(bp, p-4, "pool")) { if(!BSTRCMP(bp, p-4, "pool")) {
levl[u.ux][u.uy].typ = POOL; levl[u.ux][u.uy].typ = POOL;
del_engr_at(u.ux, u.uy); del_engr_at(u.ux, u.uy);
if (noisy) pline("A pool.");
pline("A pool.");
/* Must manually make kelp! */ /* Must manually make kelp! */
water_damage(level.objects[u.ux][u.uy], FALSE, TRUE); water_damage(level.objects[u.ux][u.uy], FALSE, TRUE);
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
@@ -2210,8 +2206,7 @@ srch:
if (!BSTRCMP(bp, p-4, "lava")) { /* also matches "molten lava" */ if (!BSTRCMP(bp, p-4, "lava")) { /* also matches "molten lava" */
levl[u.ux][u.uy].typ = LAVAPOOL; levl[u.ux][u.uy].typ = LAVAPOOL;
del_engr_at(u.ux, u.uy); del_engr_at(u.ux, u.uy);
if (noisy) pline("A pool of molten lava.");
pline("A pool of molten lava.");
if (!(Levitation || Flying)) (void) lava_effects(); if (!(Levitation || Flying)) (void) lava_effects();
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
return &zeroobj; return &zeroobj;
@@ -2232,24 +2227,21 @@ srch:
else /* -1 - A_CHAOTIC, 0 - A_NEUTRAL, 1 - A_LAWFUL */ else /* -1 - A_CHAOTIC, 0 - A_NEUTRAL, 1 - A_LAWFUL */
al = (!rn2(6)) ? A_NONE : rn2((int)A_LAWFUL+2) - 1; al = (!rn2(6)) ? A_NONE : rn2((int)A_LAWFUL+2) - 1;
levl[u.ux][u.uy].altarmask = Align2amask( al ); levl[u.ux][u.uy].altarmask = Align2amask( al );
if (noisy) pline("%s altar.", An(align_str(al)));
pline("%s altar.", An(align_str(al)));
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
return(&zeroobj); return(&zeroobj);
} }
if(!BSTRCMP(bp, p-5, "grave") || !BSTRCMP(bp, p-9, "headstone")) { if(!BSTRCMP(bp, p-5, "grave") || !BSTRCMP(bp, p-9, "headstone")) {
make_grave(u.ux, u.uy, (char *) 0); make_grave(u.ux, u.uy, (char *) 0);
if (noisy) pline("A grave.");
pline("A grave.");
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
return(&zeroobj); return(&zeroobj);
} }
if(!BSTRCMP(bp, p-4, "tree")) { if(!BSTRCMP(bp, p-4, "tree")) {
levl[u.ux][u.uy].typ = TREE; levl[u.ux][u.uy].typ = TREE;
if (noisy) pline("A tree.");
pline("A tree.");
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
block_point(u.ux, u.uy); block_point(u.ux, u.uy);
return &zeroobj; return &zeroobj;
@@ -2257,8 +2249,7 @@ srch:
if(!BSTRCMP(bp, p-4, "bars")) { if(!BSTRCMP(bp, p-4, "bars")) {
levl[u.ux][u.uy].typ = IRONBARS; levl[u.ux][u.uy].typ = IRONBARS;
if (noisy) pline("Iron bars.");
pline("Iron bars.");
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
return &zeroobj; return &zeroobj;
} }
@@ -2553,9 +2544,7 @@ typfnd:
artifact_exists(otmp, ONAME(otmp), FALSE); artifact_exists(otmp, ONAME(otmp), FALSE);
obfree(otmp, (struct obj *) 0); obfree(otmp, (struct obj *) 0);
otmp = &zeroobj; otmp = &zeroobj;
if (noisy) pline("For a moment, you feel %s in your %s, but it disappears!",
pline(
"For a moment, you feel %s in your %s, but it disappears!",
something, something,
makeplural(body_part(HAND))); makeplural(body_part(HAND)));
} }