On Thu, 21 May 1998, Christoffer Lundberg wrote:
I don't normally answer these, since it's one of the first things you'd
learn if you took a C class or spent a couple bucks for a used C book, but
in the interest of preventing more reposts...
> act.informative.c: In function `look_at_vmap_room':
> act.informative.c:920: warning: int format, pointer arg (arg 4)
This means a printf, sprintf, fprintf (etc) funciton is being told to look
for an integer, and you're passing it a pointer.
> const char *symbol[] = {
> "&Gf&n",
> "&gF&n",
> "&ym&n",
> "&KM&n",
> "&B~&n",
> "&k#&n",
> "&YD&n",
> "&r#&n",
> "&WC&n",
> "&WV&n",
> "\n"
> };
These are pointers (aka strings, aka char arrays).
> sprintf(buf, "%s%c%c%c%c%c\r\n", buf, symbol[vmap1[y+2][x-2]],
> symbol[vmap1[y+2][x-1]],
> symbol[vmap1[y+2][x]],
> symbol[vmap1[y+2][x+1]],
> symbol[vmap1[y+2][x+2]]);
%c is the format code for a char variable (not int, and definitely not
char *). Change the %c's to %s's.
Here's my version of the same function. This was written for a mud that
didn't have any form of inline color at the time, so I didn't use a symbol
array. If that were added (with a second dimension for night symbols)
this would probably be a drop-in replacement that would be easier to work
with. You can easily adjust the amount of viewable terrain for different
weather effects, or give imms more visibility, etc.
void show_map(struct char_data * ch)
{
int x, y;
char map[2048];
int range, lit = FALSE;
if(weather_info.sunlight == SUN_DARK)
range = 1;
else {
range = 3;
lit = TRUE;
}
*map = '\0';
for(y = ch->worldy - range; y <= ch->worldy + range; y++) {
sprintf(map, "%s%s", map, lit ? " " : " ");
for(x = ch->worldx - range; x <= ch->worldx + range; x++) {
if(x < 0 || y < 0 || x > 199 || y > 199)
sprintf(map, "%s ", map);
else if(x == ch->worldx && y == ch->worldy)
sprintf(map, "%s%s%s*", map, lit ? CCBOLD(ch, C_NRM) :
CCNRM(ch, C_NRM), CCWHT(ch, C_NRM));
else {
switch (world_map[x][y]) {
case VNUM_PLAINS:
sprintf(map, "%s%s%s,", map, lit ? CCBOLD(ch, C_NRM) :
CCNRM(ch, C_NRM), CCGRN(ch, C_NRM));
break;
case VNUM_DESERT:
sprintf(map, "%s%s%s.", map, lit ? CCBOLD(ch, C_NRM) :
CCNRM(ch, C_NRM), CCYEL(ch, C_NRM));
break;
case VNUM_MOUNTAIN:
sprintf(map, "%s%s%s^", map, lit ? CCBOLD(ch, C_NRM) :
CCNRM(ch, C_NRM), CCMAG(ch, C_NRM));
break;
case VNUM_FOREST:
sprintf(map, "%s%s%sT", map, lit ? CCBOLD(ch, C_NRM) :
CCNRM(ch, C_NRM), CCGRN(ch, C_NRM));
break;
case VNUM_ROAD:
sprintf(map, "%s%s%s+", map, lit ? CCBOLD(ch, C_NRM) :
CCNRM(ch, C_NRM), CCCYN(ch, C_NRM));
break;
case VNUM_WATER:
sprintf(map, "%s%s%s~", map, lit ? CCBOLD(ch, C_NRM) :
CCNRM(ch, C_NRM), CCBLU(ch, C_NRM));
break;
default:
sprintf(map, "%s%s%s#", map, lit ? CCBOLD(ch, C_NRM) :
CCNRM(ch, C_NRM), CCRED(ch, C_NRM));
}
}
}
sprintf(map, "%s%s\r\n", map, CCNRM(ch, C_NRM));
}
send_to_char(map, ch);
}
Sam
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST