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.
This commit is contained in:
PatR
2016-06-16 22:01:27 -07:00
parent 2c8a359feb
commit 1af081edc5
3 changed files with 25 additions and 1 deletions

View File

@@ -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<dir>' 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<foo> to eat a <foo> 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

View File

@@ -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)

View File

@@ -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 */
}