Annotation of 43BSDReno/games/hack/hack.fix, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.