Add %<attribute>
authorAri Johnson <ari@theari.com>
Mon, 28 Dec 2009 19:02:51 +0000 (19:02 +0000)
committerAri Johnson <ari@theari.com>
Fri, 22 May 2009 15:04:49 +0000 (15:04 +0000)
(cherry picked from commit b06860b7c9fd01166a3c54ad890f6dfbeed9dca0)

game/txt/changes/0.73p2
src/parse.c

index 70a6a4621096c28c1b780707ac00a1deb40f0fee..8fb2eea45cdc4eb21c7489d8a8a341ea1e99eb25 100644 (file)
@@ -7,6 +7,9 @@ CobraMUSH Version 0.73p2
   Version 0.73p2 is a maintenance release of version 0.73.
   It is the second maintenance release in that series.
 
+  Major changes:
+    * Implement attribute value access by %<name> [AEJ]
+
   Fixes:
     * Add 'Command' lock to list of exemptions to Pass_Locks power [AEJ]
 
index 157276eb365037203e56633cad85e6c70415299a..df5be49dc28d6510d1aaba1ab90e315b7ec21415 100644 (file)
@@ -736,6 +736,19 @@ process_expression(char *buff, char **bp, char const **str,
        safe_chr(savec, buff, bp);
        (*str)++;
        switch (savec) {
+        case '<':
+          savec = **str;
+          if (!savec)
+            goto exit_sequence;
+          for (savec = **str; savec && savec != '>'; savec = **str) {
+            safe_chr(savec, buff, bp);
+            (*str)++;
+          }
+          if(!savec)
+            goto exit_sequence;
+          safe_chr(savec, buff, bp);
+          (*str)++;
+          break;
        case 'Q':
        case 'q':
           savec = **str;
@@ -893,6 +906,29 @@ process_expression(char *buff, char **bp, char const **str,
            gender = get_gender(enactor);
          safe_str(poss[gender], buff, bp);
          break;
+        case '<':
+         if (!**str)
+           goto exit_sequence;
+          {
+            const char *tmp;
+            char atrname[BUFFER_LEN];
+            ATTR *atr;
+
+            for(tmp = *str; *tmp && *tmp != '>'; tmp++)
+              ;
+            if(!*tmp || tmp == *str) {
+              (*str)--;
+              goto exit_sequence;
+            }
+            strncpy(atrname, *str, tmp - *str);
+            atrname[tmp - *str] = '\0';
+
+            atr = atr_get(executor, strupper(atrname));
+            if(atr)
+              safe_str(atr_value(atr), buff, bp);
+            *str = tmp + 1;
+          }
+          break;
        case 'Q':
        case 'q':               /* temporary storage */
          nextc = **str;