Some people have been discussing how to make a bar graph of point scales rather than just straight numbers...thought you might be interested in how I did it for my MUD, and how I incorporated it into my score command. (BTW, the PLR_IMMORT and quickening stuff is for the immortality (aka remort) system in the mud, so if you don't have it (or have something else), you'll probably want to change those parts.) Most of the point values in my mud are changed to longs, so if you still use smaller storage elements you might want to change the %ld fields to %d. Anyway, I'm just including the relevent part here. You also need to add a command 'scorebar' as a do_gen_tog, and add SCMD_SCOREBAR and a field to the messages section of do_gen_tog. And a PRF_ flag. I think that's about it. /* Note, make_bar dirties buf2 */ char *make_bar(long val, long max, long len) { unsigned int i, n; char *pos = buf2; strcpy(pos++, "["); if (val > max) { for (i = 0; i < len; i++) *(pos++) = '*'; strcpy(pos, "]+"); } else { for (i = (val * len) / max, n = 0; n < i; n++) *(pos++) = '*'; while ((n++)<len) *(pos++) = ' '; strcpy(pos, "]"); } return buf2; } ACMD(do_score) { struct time_info_data playing_time; struct time_info_data real_time_passed(time_t t2, time_t t1); sprintf(buf, "You are %s %s (level %ld)%s.\r\n", GET_NAME(ch), GET_TITLE(ch), GET_LEVEL(ch), PLR_FLAGGED(ch, PLR_IMM)?" (Immortal)":""); if (PRF_FLAGGED(ch, PRF_SCOREBAR)) { static char bufs[4][128]; static char bufs2[4][128]; static char bufs3[4][128]; int l, i; sprintf(bufs[0], "[%ld/%ld]", GET_HIT(ch),GET_MAX_HIT(ch)); sprintf(bufs[1], "[%ld/%ld]", GET_MANA(ch), GET_MAX_MANA(ch)); sprintf(bufs[2], "[%ld/%ld]", GET_MOVE(ch), GET_MAX_MOVE(ch)); sprintf(bufs[3], "[%ld/%ld]", GET_QUICK(ch), GET_MAX_QUICK(ch)); l = MAX(MAX(strlen(bufs[0]),strlen(bufs[1])),MAX(strlen(bufs[2]), strlen(bufs[3]))); sprintf(bufs2[0], " Hit: %%%ds ", l); sprintf(bufs2[1], " Mana: %%%ds ", l); sprintf(bufs2[2], "Moves: %%%ds ", l); sprintf(bufs2[3], "Quick: %%%ds ", l); for (i = 0; i < 4; i++) sprintf(bufs3[i], bufs2[i], bufs[i]); sprintf(buf, "%s%s%s\r\n", buf, bufs3[0], make_bar(GET_HIT(ch), GET_MAX_HIT(ch), 50)); sprintf(buf, "%s%s%s\r\n", buf, bufs3[1], make_bar(GET_MANA(ch), GET_MAX_MANA(ch), 50)); sprintf(buf, "%s%s%s\r\n", buf, bufs3[2], make_bar(GET_MOVE(ch), GET_MAX_MOVE(ch), 50)); if (PLR_FLAGGED(ch, PLR_IMM)) sprintf(buf, "%s%s%s\r\n", buf, bufs3[3], make_bar(GET_QUICK(ch), GET_MAX_QUICK(ch), 50)); } else { *buf2 = 0; if (PLR_FLAGGED(ch, PLR_IMM)) sprintf(buf2, " Quickening: [%ld/%ld]", GET_QUICK(ch), GET_MAX_QUICK(ch)); sprintf(buf, "%sHit: [%ld/%ld] Mana: [%ld/%ld] Move: [%ld/%ld]%s\r\n", buf, GET_HIT(ch), GET_MAX_HIT(ch), GET_MANA(ch), GET_MAX_MANA(ch), GET_MOVE(ch), GET_MAX_MOVE(ch), buf2); } --- th rest of your score report goes here
This archive was generated by hypermail 2b30 : 12/07/00 PST