tSetting NumGun to zero now disables the gun shop and all fights, rather than crashing the program. - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit c2314f88663fffce3bfc3ca5a515ac995b6fd639
 (DIR) parent dfed59d770ca0143fd4b3408fcd4a777b7e023ee
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Mon,  8 Apr 2002 13:01:51 +0000
       
       Setting NumGun to zero now disables the gun shop and all fights, rather
       tthan crashing the program.
       
       
       Diffstat:
         M TODO                                |       1 -
         M doc/configfile.html                 |       4 +++-
         M src/serverside.c                    |      21 +++++++++++----------
       
       3 files changed, 14 insertions(+), 12 deletions(-)
       ---
 (DIR) diff --git a/TODO b/TODO
       t@@ -1,7 +1,6 @@
        - Startscreen
        - Track down server memory corruption bug!
        - Implement server option to buy more than one bitch at a time in the Pub.
       -- Fail nicely if NumLocation (etc.) is set to zero
        - Allow customisation of GtkTextView tag colours
        - Impose sensible limits on numbers in Options dialog (e.g. percentages)
          (should also enforce this for config file / server admin)
 (DIR) diff --git a/doc/configfile.html b/doc/configfile.html
       t@@ -368,7 +368,9 @@ normal price distribution (between Drug[x].MinPrice and Drug[x].MaxPrice) by
        <dl>
        <dt><b>NumGun=<i>4</i></b></dt>
        <dd>Configures the game to have <i>4</i> guns available to players at the
       -gun shop.</dd>
       +gun shop. (If you set this to zero, you will be unable to buy guns, you
       +will never be attacked by the cops, and you will be unable to shoot at other
       +players.)</dd>
        
        <dt><b>Gun[<i>3</i>].Name=<i>"Ruger"</i></b></dt>
        <dd>Sets the name of the <i>3rd</i> gun to <i>Ruger</i>.</dd>
 (DIR) diff --git a/src/serverside.c b/src/serverside.c
       t@@ -2225,7 +2225,8 @@ void SendEvent(Player *To)
              }
              break;
            case E_GUNSHOP:
       -      if (To->IsAt + 1 == GunShopLoc && !Sanitized && !WantAntique) {
       +      if (To->IsAt + 1 == GunShopLoc && !Sanitized && NumGun > 0
       +          && !WantAntique) {
                text = dpg_strdup_printf(_("YN^Would you like to visit %tde?"),
                                         Names.GunShopName);
                SendQuestion(NULL, C_ASKGUNSHOP, To, text);
       t@@ -2257,9 +2258,9 @@ void SendEvent(Player *To)
            case E_ARRIVE:
              for (list = FirstServer; list; list = g_slist_next(list)) {
                Play = (Player *)list->data;
       -        if (IsConnectedPlayer(Play) && Play != To &&
       -            Play->IsAt == To->IsAt &&
       -            Play->EventNum == E_NONE && TotalGunsCarried(To) > 0) {
       +        if (IsConnectedPlayer(Play) && Play != To
       +            && NumGun > 0 && Play->IsAt == To->IsAt
       +            && Play->EventNum == E_NONE && TotalGunsCarried(To) > 0) {
                  text = g_strdup_printf(_("%s^%s is already here!^"
                                           "Do you Attack, or Evade?"),
                                         attackquestiontr,
       t@@ -2311,7 +2312,7 @@ int SendCopOffer(Player *To, OfferForce Force)
            return (OfferObject(To, Force == FORCEBITCH));
          } else if (i < 50) {
            return (RandomOffer(To));
       -  } else if (Sanitized || NumCop == 0) {
       +  } else if (Sanitized || NumCop == 0 || NumGun == 0) {
            return 0;
          } else {
            CopsAttackPlayer(To);
       t@@ -2328,8 +2329,8 @@ void CopsAttackPlayer(Player *Play)
          Player *Cops;
          gint CopIndex, NumDeputy, GunIndex;
        
       -  if (NumCop == 0) {
       -    g_warning(_("No cops!"));
       +  if (NumCop == 0 || NumGun == 0) {
       +    g_warning(_("No cops or guns!"));
            return;
          }
        
       t@@ -2618,7 +2619,7 @@ static void CheckCopsIntervene(Player *Play)
          guint ArrayInd;
          Player *Defend;
        
       -  if (!Play || !Play->FightArray || NumCop == 0)
       +  if (!Play || !Play->FightArray || NumCop == 0 || NumGun == 0)
            return;                     /* Sanity check */
        
          if (!Play->Attacking)
       t@@ -3022,7 +3023,7 @@ int OfferObject(Player *To, gboolean ForceBitch)
            SendQuestion(NULL, C_ASKBITCH, To, text);
            g_free(text);
            return 1;
       -  } else if (!Sanitized
       +  } else if (!Sanitized && NumGun > 0
                     && (TotalGunsCarried(To) < To->Bitches.Carried + 2)) {
            ObjNum = brandom(0, NumGun);
            To->Guns[ObjNum].Price = Gun[ObjNum].Price / 10;
       t@@ -3335,7 +3336,7 @@ void BuyObject(Player *From, char *data)
              From->Cash -= amount * From->Drugs[index].Price;
              SendPlayerData(From);
        
       -      if (!Sanitized && NumCop > 0
       +      if (!Sanitized && NumCop > 0 && NumGun > 0
                  && (From->Drugs[index].Price == 0 &&
                      brandom(0, 100) < Location[From->IsAt].PolicePresence)) {
                gchar *text;