(linenum→info "unix/slp.c:2238")

bsd-games/2.17/hack/hack.fix

    1: $NetBSD: hack.fix,v 1.3 2001/09/16 16:34:25 wiz Exp $
    2: 
    3: /***** unido:net.games.hack / ab /  7:23 pm  Sep 13, 1985*/
    4: 
    5: Recently hack (1.0.3) crashed with core dumps during some good games.
    6: The crashes occurred in the onbill-routine. After investigating the core
    7: dump I found that the shopkeeper's bill was still to be paid.  Normaly
    8: if you leave a shop the bill will be cleared and onbill() would not
    9: check it. But under certain conditions you can leave a shop without
   10: clearing the bill. The conditions are:
   11: 
   12:      1. You have to rob a shop in order to make the shopkeeper
   13:         follow you.
   14: 
   15:      2. After leaving the shop being followed by the shopkeeper
   16:         you must return to the shop...
   17: 
   18:      3. ...and then leave the unguarded shop again.
   19:         - The shopkeeper mustn't be present!
   20: 
   21: If you climb the stairs to the previous level, chances are that your
   22: bill now contains much more items than allowed. If so the next call to
   23: onbill() will dump the core.
   24: 
   25: Following is a context diff to fix the bug. Actually just the last hunk
   26: does the fix [it deletes two lines which have been inserted in 1.0.3],
   27: but I think the other fix was intended by the now deleted lines.
   28: 
   29:         Andreas
   30: 
   31: --
   32: Andreas Bormann                 ab@unido.UUCP
   33: University of Dortmund          N 51 29' 05"   E 07 24' 42"
   34: West Germany
   35: 
   36: ------ the diff follows:
   37: 
   38: *** hack.shk.c.orig     Sun Aug  4 12:07:51 1985
   39: --- hack.shk.c  Fri Sep 13 14:29:52 1985
   40: ***************
   41: *** 133,139
   42:         /* Did we just leave a shop? */
   43:         if(u.uinshop &&
   44:             (u.uinshop != roomno + 1 || shlevel != dlevel || !shopkeeper)) {
   45: -               u.uinshop = 0;
   46:                 if(shopkeeper) {
   47:                     if(ESHK(shopkeeper)->billct) {
   48:                         pline("Somehow you escaped the shop without paying!");
   49: 
   50: --- 133,138 -----
   51:         /* Did we just leave a shop? */
   52:         if(u.uinshop &&
   53:             (u.uinshop != roomno + 1 || shlevel != dlevel || !shopkeeper)) {
   54:                 if(shopkeeper) {
   55:                     if(ESHK(shopkeeper)->billct) {
   56:                         if(inroom(shopkeeper->mx, shopkeeper->my) 
   57: ***************
   58: *** 136,142
   59:                 u.uinshop = 0;
   60:                 if(shopkeeper) {
   61:                     if(ESHK(shopkeeper)->billct) {
   62: !                       pline("Somehow you escaped the shop without paying!");
   63:                         addupbill();
   64:                         pline("You stole for a total worth of %ld zorkmids.",
   65:                                 total);
   66: 
   67: --- 135,143 -----
   68:             (u.uinshop != roomno + 1 || shlevel != dlevel || !shopkeeper)) {
   69:                 if(shopkeeper) {
   70:                     if(ESHK(shopkeeper)->billct) {
   71: !                       if(inroom(shopkeeper->mx, shopkeeper->my) 
   72: !                           == u.uinshop - 1)      /* ab@unido */
   73: !                           pline("Somehow you escaped the shop without paying!");
   74:                         addupbill();
   75:                         pline("You stole for a total worth of %ld zorkmids.",
   76:                                 total);
   77: ***************
   78: *** 149,154
   79:                     shopkeeper = 0;
   80:                     shlevel = 0;
   81:                 }
   82:         }
   83:   
   84:         /* Did we just enter a zoo of some kind? */
   85: 
   86: --- 150,156 -----
   87:                     shopkeeper = 0;
   88:                     shlevel = 0;
   89:                 }
   90: +               u.uinshop = 0;
   91:         }
   92:   
   93:         /* Did we just enter a zoo of some kind? */
   94: ***************
   95: *** 183,190
   96:                 findshk(roomno);
   97:             if(!shopkeeper) {
   98:                 rooms[roomno].rtype = 0;
   99: -               u.uinshop = 0;
  100: -           } else if(inroom(shopkeeper->mx, shopkeeper->my) != roomno) {
  101:                 u.uinshop = 0;
  102:             } else if(!u.uinshop){
  103:                 if(!ESHK(shopkeeper)->visitct ||
  104: 
  105: --- 185,190 -----
  106:                 findshk(roomno);
  107:             if(!shopkeeper) {
  108:                 rooms[roomno].rtype = 0;
  109:                 u.uinshop = 0;
  110:             } else if(!u.uinshop){
  111:                 if(!ESHK(shopkeeper)->visitct ||
  112: /* ---------- */
  113: 
  114: 
  115: 
Syntax (Markdown)