long bribe(struct monst *mtmp) { char buf[BUFSZ]; long offer; long umoney = money_cnt(invent); getlin("How much will you offer?", buf); if (sscanf(buf, "%ld", &offer) != 1) offer = 0L; /* Michael Paddon -- fix for negative offer to monster */ /* JAR880815 - */ if (offer < 0L) { pline("You try to shortchange %s, but fumble.", mon_nam(mtmp)); return 0L; } else if (offer == 0L) { pline("You refuse."); return 0L; } else if (offer >= umoney) { pline("You give %s all your gold.", mon_nam(mtmp)); offer = umoney; } else { pline("You give %s %ld %s.", mon_nam(mtmp), offer, currency(offer)); } money2mon(mtmp, offer); iflags.botl = 1; return offer; }
long bribe(struct monst *mtmp) { const char *buf; long offer; long umoney = money_cnt(invent); buf = getlin("How much will you offer?", FALSE); if (sscanf(buf, "%ld", &offer) != 1) offer = 0L; /* Michael Paddon -- fix for negative offer to monster */ /* JAR880815 - */ if (offer < 0L) { pline("You try to shortchange %s, but fumble.", mon_nam(mtmp)); return 0L; } else if (offer == 0L) { pline("You refuse."); return 0L; } else if (umoney == 0L) { pline("You open your purse, but realize you have no gold."); return 0L; } else if (offer >= umoney) { pline("You give %s all your gold.", mon_nam(mtmp)); offer = umoney; } else { pline("You give %s %ld %s.", mon_nam(mtmp), offer, currency(offer)); } money2mon(mtmp, offer); return offer; }
int doconsult(struct monst *oracl) { int umoney = money_cnt(invent); int u_pay, minor_cost = 50, major_cost = 500 + 50 * u.ulevel; int add_xpts; char qbuf[QBUFSZ]; multi = 0; if (!oracl) { pline("There is no one here to consult."); return 0; } else if (!oracl->mpeaceful) { pline("%s is in no mood for consultations.", Monnam(oracl)); return 0; } else if (!umoney) { pline("You have no money."); return 0; } sprintf(qbuf, "\"Wilt thou settle for a minor consultation?\" (%d %s)", minor_cost, currency(minor_cost)); switch (ynq(qbuf)) { default: case 'q': return 0; case 'y': if (umoney < minor_cost) { pline("You don't even have enough money for that!"); return 0; } u_pay = minor_cost; break; case 'n': if (umoney <= minor_cost || /* don't even ask */ (oracle_cnt == 1 || oracle_flg < 0)) return 0; sprintf(qbuf, "\"Then dost thou desire a major one?\" (%d %s)", major_cost, currency(major_cost)); if (yn(qbuf) != 'y') return 0; u_pay = (umoney < major_cost ? umoney : major_cost); break; } money2mon(oracl, u_pay); iflags.botl = 1; add_xpts = 0; /* first oracle of each type gives experience points */ if (u_pay == minor_cost) { outrumor(1, BY_ORACLE); if (!u.uevent.minor_oracle) add_xpts = u_pay / (u.uevent.major_oracle ? 25 : 10); /* 5 pts if very 1st, or 2 pts if major already done */ u.uevent.minor_oracle = TRUE; } else { boolean cheapskate = u_pay < major_cost; outoracle(cheapskate, TRUE); if (!cheapskate && !u.uevent.major_oracle) add_xpts = u_pay / (u.uevent.minor_oracle ? 25 : 10); /* ~100 pts if very 1st, ~40 pts if minor already done */ u.uevent.major_oracle = TRUE; historic_event(FALSE, "received advice from The Oracle."); exercise(A_WIS, !cheapskate); } if (add_xpts) { more_experienced(add_xpts, u_pay / 50); newexplevel(); } return 1; }
int doconsult(struct monst *oracl) { int umoney = money_cnt(invent); int u_pay, minor_cost = 50, major_cost = 500 + 50 * u.ulevel; int add_xpts; const char *qbuf; /* TODO: Do we want this? The purpose seems to be specifically to prevent repeating an Oracle donation. */ action_completed(); if (!oracl) { pline("There is no one here to consult."); return 0; } else if (!oracl->mpeaceful) { pline("%s is not in the mood for conversation (believe it or not...)", Monnam(oracl)); return 0; } else if (!umoney) { pline("You have no money. There's no free lunch in wireless... and in being an oracle!"); return 0; } qbuf = msgprintf("\"Would you mind talking for a little bit?\" (%d %s)", minor_cost, currency(minor_cost)); switch (ynq(qbuf)) { default: case 'q': return 0; case 'y': if (umoney < minor_cost) { pline("You don't even have enough money for that! There's no free lunch in wireless... and in being an oracle!"); return 0; } u_pay = minor_cost; break; case 'n': if (umoney <= minor_cost || /* don't even ask */ (oracle_cnt == 1 || oracle_flg < 0)) return 0; qbuf = msgprintf("\"Oh! You'd like to sit and talk for a _long_ while?\" (%d %s)", major_cost, currency(major_cost)); if (yn(qbuf) != 'y') return 0; u_pay = (umoney < major_cost ? umoney : major_cost); break; } money2mon(oracl, u_pay); add_xpts = 0; /* first oracle of each type gives experience points */ if (u_pay == minor_cost) { outrumor(1, BY_ORACLE); if (!u.uevent.minor_oracle) add_xpts = u_pay / (u.uevent.major_oracle ? 25 : 10); /* 5 pts if very 1st, or 2 pts if major already done */ u.uevent.minor_oracle = TRUE; } else { boolean cheapskate = u_pay < major_cost; outoracle(cheapskate, TRUE); if (!cheapskate && !u.uevent.major_oracle) add_xpts = u_pay / (u.uevent.minor_oracle ? 25 : 10); /* ~100 pts if very 1st, ~40 pts if minor already done */ u.uevent.major_oracle = TRUE; historic_event(FALSE, "received advice from The Oracle."); exercise(A_WIS, !cheapskate); } if (add_xpts) { more_experienced(add_xpts, u_pay / 50); newexplevel(); } return 1; }