On Fri, 17 May 2002, Edward J Glamkowski wrote: >In the help file for prompt there is an auto option to display HMV only >when they are less the 30%. This isn't implemented. Would be nice if it >were imp'ed it in a future release of the stock code, or the reference >removed from the help file. I don't care which way, just so long as they >are consistent :) How's this? Behavior: If PRF_DISP(HP|MANA|MOVE) -> display. IF PRF_DISPAUTO and value < 33% -> display. Which leaves PRF_DISPAUTO | PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE as a useless state since PRF_DISPAUTO is effectively ignored. -- George Greer greerga@circlemud.org Index: comm.c =================================================================== RCS file: /home/circledb/.cvs/circle/src/comm.c,v retrieving revision 1.114 diff -u -p -r1.114 comm.c --- comm.c 2002/04/09 14:31:05 1.114 +++ comm.c 2002/05/18 00:32:38 @@ -995,33 +995,41 @@ char *make_prompt(struct descriptor_data "\r\n[ Return to continue, (q)uit, (r)efresh, (b)ack, or page number (%d/%d) ]", d->showstr_page, d->showstr_count); } else if (STATE(d) == CON_PLAYING && !IS_NPC(d->character)) { - int count; + int count, idx; size_t len = 0; + struct prompt_value_data { + bitvector_t pref; + long cur_value; + long max_value; + const char *format; + } prompt_display[] = { + { 0, GET_INVIS_LEV(d->character), 0, "i%d " }, + { PRF_DISPHP, GET_HIT(d->character), GET_MAX_HIT(d->character), "%dH " }, + { PRF_DISPMANA, GET_MANA(d->character), GET_MAX_MANA(d->character), "%dM " }, + { PRF_DISPMOVE, GET_MOVE(d->character), GET_MAX_MOVE(d->character), "%dV " }, + }; *prompt = '\0'; - if (GET_INVIS_LEV(d->character) && len < sizeof(prompt)) { - count = snprintf(prompt + len, sizeof(prompt) - len, "i%d ", GET_INVIS_LEV(d->character)); - if (count >= 0) - len += count; - } - - if (PRF_FLAGGED(d->character, PRF_DISPHP) && len < sizeof(prompt)) { - count = snprintf(prompt + len, sizeof(prompt) - len, "%dH ", GET_HIT(d->character)); - if (count >= 0) - len += count; - } + for (idx = 0; idx < sizeof(prompt_display) / sizeof(struct prompt_value_data); idx++) { + if (prompt_display[idx].pref) { + if (PRF_FLAGGED(d->character, prompt_display[idx].pref)) + /* Always display. */ ; + else if (PRF_FLAGGED(d->character, PRF_DISPAUTO) && prompt_display[idx].cur_value * 3 < prompt_display[idx].max_value) + /* Under 33%, display. */; + else + continue; + } else if (!prompt_display[idx].cur_value) + continue; - if (PRF_FLAGGED(d->character, PRF_DISPMANA) && len < sizeof(prompt)) { - count = snprintf(prompt + len, sizeof(prompt) - len, "%dM ", GET_MANA(d->character)); - if (count >= 0) + count = snprintf(prompt + len, sizeof(prompt) - len, prompt_display[idx].format, prompt_display[idx].cur_value); + if (count > 0) len += count; - } + else + len = sizeof(prompt); /* -1 return value: old versions of snprintf give when truncating. */ - if (PRF_FLAGGED(d->character, PRF_DISPMOVE) && len < sizeof(prompt)) { - count = snprintf(prompt + len, sizeof(prompt) - len, "%dV ", GET_MOVE(d->character)); - if (count >= 0) - len += count; + if (len >= sizeof(prompt)) + break; } if (len < sizeof(prompt)) Index: act.other.c =================================================================== RCS file: /home/circledb/.cvs/circle/src/act.other.c,v retrieving revision 1.42 diff -u -p -r1.42 act.other.c --- act.other.c 2002/02/01 02:04:17 1.42 +++ act.other.c 2002/05/18 00:31:20 @@ -739,9 +739,16 @@ ACMD(do_display) skip_spaces(&argument); if (!*argument) { - send_to_char(ch, "Usage: prompt { { H | M | V } | all | none }\r\n"); + send_to_char(ch, "Usage: prompt { { H | M | V } | all | auto | none }\r\n"); return; } + + if (!str_cmp(argument, "auto")) { + TOGGLE_BIT(PRF_FLAGS(ch), PRF_DISPAUTO); + send_to_char(ch, "Auto prompt %sabled.\r\n", PRF_FLAGGED(ch, PRF_DISPAUTO) ? "en" : "dis"); + return; + } + if (!str_cmp(argument, "on") || !str_cmp(argument, "all")) SET_BIT(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE); else if (!str_cmp(argument, "off") || !str_cmp(argument, "none")) @@ -761,7 +768,7 @@ ACMD(do_display) SET_BIT(PRF_FLAGS(ch), PRF_DISPMOVE); break; default: - send_to_char(ch, "Usage: prompt { { H | M | V } | all | none }\r\n"); + send_to_char(ch, "Usage: prompt { { H | M | V } | all | auto | none }\r\n"); return; } } -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT