PennMUSH Incorp 182p3
authorRick Bird <nveid@bender.theari.com>
Fri, 25 Mar 2011 19:10:19 +0000 (15:10 -0400)
committerRick Bird <nveid@bender.theari.com>
Fri, 25 Mar 2011 19:10:19 +0000 (15:10 -0400)
  If we should fail to clear a semaphore attribute for some
  reason (e.g., it's the branch of an attribute tree), reset
  the semaphore count on the attribute to 0. Patch by Javelin.

src/cque.c

index ffa1e809748d231bf34ff72da2fbe73a77ecddc7..48e534353966351cd5c1425ef6860c113a0f77fb 100644 (file)
@@ -167,10 +167,13 @@ add_to_generic(dbref player, int am, const char *name, int flags)
   if (a)
     num = parse_integer(atr_value(a));
   num += am;
-  if (num) {
-    sprintf(buff, "%d", num);
-    (void) atr_add(player, name, buff, GOD, flags);
-  } else {
+  /* We set the attribute's value to 0 even if we're going to clear
+   * it later, because clearing it may fail (perhaps someone's also
+   * foolishly using it as a branch in an attribute tree)
+   */
+  sprintf(buff, "%d", num);
+  (void) atr_add(player, name, buff, GOD, flags);
+  if (!num) {
     (void) atr_clr(player, name, GOD);
   }
   return (num);