From 1af081edc5b8891369393fadddac345a0ff252c4 Mon Sep 17 00:00:00 2001 From: PatR Date: Thu, 16 Jun 2016 22:01:27 -0700 Subject: [PATCH] fix #H4388 - wishing conduct inconsistency Make wishing for an artifact and not getting it because it already exists break never-wished-for-artifact conduct. The wish was made even if the result wasn't what the player wanted. --- doc/fixes36.1 | 3 +++ src/cmd.c | 20 ++++++++++++++++++++ src/objnam.c | 3 ++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 37ea2262c..6affc4c59 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -296,6 +296,9 @@ don't give "you cannot pass through the bars" when travel is testing possible if blind and no gloves, using 'm' to move and then 'e' could be used to locate cockatrice corpse without fatal touching (by declining to eat) it's cannabilism for a were to eat a corpse +conduct: wishing for an artifact and not getting it because it already exists + counts as wishing for an artifact, just like when not getting it + becuase of quest restrictions or too many artifacts in play does Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository diff --git a/src/cmd.c b/src/cmd.c index aaecc80f6..4feb9bf94 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -2634,6 +2634,26 @@ int final; } else { Sprintf(buf, "used %ld wish%s", u.uconduct.wishes, (u.uconduct.wishes > 1L) ? "es" : ""); + if (u.uconduct.wisharti) { + /* if wisharti == wishes + * 1 wish (for an artifact) + * 2 wishes (both for artifacts) + * N wishes (all for artifacts) + * else (N is at least 2 in order to get here; M < N) + * N wishes (1 for an artifact) + * N wishes (M for artifacts) + */ + if (u.uconduct.wisharti == u.uconduct.wishes) + Sprintf(eos(buf), " (%s", + (u.uconduct.wisharti > 2L) ? "all " + : (u.uconduct.wisharti == 2L) ? "both " : ""); + else + Sprintf(eos(buf), " (%ld ", u.uconduct.wisharti); + + Sprintf(eos(buf), "for %s)", + (u.uconduct.wisharti == 1L) ? "an artifact" + : "artifacts"); + } you_have_X(buf); if (!u.uconduct.wisharti) diff --git a/src/objnam.c b/src/objnam.c index 2d07b6ab4..6caa583b7 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -3570,7 +3570,8 @@ typfnd: } otmp = oname(otmp, name); - if (otmp->oartifact) { + /* name==aname => wished for artifact (otmp->oartifact => got it) */ + if (otmp->oartifact || name == aname) { otmp->quan = 1L; u.uconduct.wisharti++; /* KMH, conduct */ } -- 2.40.0