From: Fionn Colvin <fcolvin@metz.une.edu.au>
Ok, I changed my percent line to:
percent = (100 * current) / total
You might want to fire up old gdb and do something like the following:
b <function name>
run
(when you hit the break point...)
step (keep steping until you hit the line above)
print current
print total
step
print percent
That should give you some better feel for what's happening around
this point... have fun... gdb's your friend.
Another thing to check is whether you're using the right values or
if you're sending the same number for str/dex/con...
The if (total...) current == ... block also seems fishy to me. What's
so special about total == 200? and why assume 100 - <negative current>
will give a good result (a negative current would end up as 100 +
abs(current) in what you have... (you might just do a simple MAX(0, current)
and keep negatives out.)
-- Billy H. Chan bhchan@po.eecs.berkeley.edu bhchan@csua.berkeley.edu
CogSci/CompSci http://www.csua.berkeley.edu/~bhchan ResumeInside
APPENDED IS THE FUNCTION:
char *see_good(int current, int total)
{
int percent;
static char word[256];
if ((total == 200) && (current < 0))
current = 100 - current;
if (total < 1)
total = 1;
percent = (current * 100) / total;
if (percent < 1)
percent = 1;
if (percent >= 100)
strcpy(word, "supreme");
else if (percent >= 90)
strcpy(word, "excellent");
else if (percent >= 80)
strcpy(word, "very good");
else if (percent >= 70)
strcpy(word, "good");
else if (percent >= 60)
strcpy(word, "above average");
else if (percent >= 50)
strcpy(word, "average");
else if (percent >= 40)
strcpy(word, "below average");
else if (percent >= 30)
strcpy(word, "fair");
else if (percent >= 20)
strcpy(word, "poor");
else if (percent >= 10)
strcpy(word, "bad");
else
strcpy(word, "pathetic");
return (word);
}
ACMD(do_score)
{
/* struct time_info_data playing_time;
struct time_info_data real_time_passed(time_t t2, time_t t1); */
sprintf(buf, " Name: %s\r\n", GET_NAME(ch));
sprintf(buf, "%s Title: %s\r\n", buf, GET_TITLE(ch));
sprintf(buf, "%s\r\n", buf);
sprintf(buf, "%s Race: %s\r\n", buf, RACE_ABBR(ch));
sprintf(buf, "%s Level: %d Class: %s\r\n",
buf, GET_LEVEL(ch), CLASS_ABBR(ch));
sprintf(buf, "%s Hit Points: %d(%d) Mana: %d(%d) Moves: %d(%d)\r\n",
buf, GET_HIT(ch), GET_MAX_HIT(ch), GET_MANA(ch), GET_MAX_MANA(ch),
GET_MOVE(ch), GET_MAX_MOVE(ch));
sprintf(buf, "%s Age: %d years old. Height: %d'' Weight: %d lbs\r\n",
buf, GET_AGE(ch), GET_HEIGHT(ch), GET_WEIGHT(ch));
sprintf(buf, "%s Str: %s/%d Dex: %s Con: %s\r\n",
buf, see_good(GET_STR(ch), 25), GET_ADD(ch), see_good(GET_DEX(ch), 25), see_good(GET_CON(ch), 25));
sprintf(buf, "%s Int: %d Wis: %d Cha: %d\r\n",
buf, GET_INT(ch), GET_WIS(ch), GET_CHA(ch));
sprintf(buf, "%s AC: %d Hit Roll: %d Damage Roll: %d\r\n",
buf, GET_AC(ch), GET_HITROLL(ch), GET_DAMROLL(ch));
Thanks in advance
Fionn
This archive was generated by hypermail 2b30 : 12/18/00 PST