>From: Ben Merton <ben@ADVENTEC.COM.AU>
>Subject: [CIRCLE] Autoexits problem
>Date: Sun, 8 Sep 2002 09:18:14 +1000
>Having some problems with autoexit, was hoping you guys could help. I'm
>running circle30bpl19, ascii pfiles, olc etc..
>
>The problem: just say for arguments sake that you have exits to the north,
>east and south... it will be displayed as:
>
>Exits: North, East, South.
>
>However if you have exits to the east and west, it will be displayed as:
>
>Exits: East West.
>
>The comma between east and west is gone... I have attached the related code
>below so you can see what I'm talking about..
>
>It is my belief that in the case of "east west" it is running sprintf(buf,
>"%s &c%s", buf, capdirs[door]); instead of sprintf(buf, "%s,", buf); but i
>cant see why this is occuring.
>
>Any assistance on this matter would be greatly appreciated, if there is any
>further information I can provide please contact me.
>
>Thanks, Ben
>
>-- SNIPPET --
>const char *capdirs[] = {
> "North",
> "East",
> "South",
> "West",
> "Up",
> "Down",
> "\n"
>};
>
>void do_auto_exits(struct char_data * ch)
>{
> int door;
> bool flag = FALSE;
>
> *buf = '\0';
>
> for (door = 0; door < NUM_OF_DIRS; door++)
> if (EXIT(ch, door) && EXIT(ch, door)->to_room != NOWHERE) {
> if (flag) {
> sprintf(buf, "%s,", buf);
> }
> flag = TRUE;
> if (IS_SET(EXIT(ch, door)->exit_info, EX_CLOSED)) {
> sprintf(buf, "%s &c%s(Closed)", buf, capdirs[door]);
> } else {
> sprintf(buf, "%s &c%s", buf, capdirs[door]);
> }
> } else {
> flag = FALSE;
> }
> sprintf(buf2, "&cExits:%s.&n\r\n", ((*buf) ? buf : "&c None"));
>
>-- END SNIPPET --
Your problem is simple. Your flag variable is causing problems and, is
actually, quite useless. Here, I'll rewrite your code:
void do_auto_exits(struct char_data * ch)
{
int door;
*buf = '\0';
for (door = 0; door < NUM_OF_DIRS; door++)
if (EXIT(ch, door) && EXIT(ch, door)->to_room != NOWHERE) {
if (IS_SET(EXIT(ch, door)->exit_info, EX_CLOSED))
sprintf(buf + strlen(buf), " %s(Closed),", capdirs[door]);
else
sprintf(buf + strlen(buf), " %s,", capdirs[door]);
}
sprintf(buf2, "&cExits:%s.&n\r\n", ((*buf) ? buf : " None"));
---- End Snippet ----
How clean does that look? Your color code in there is pointless as well.
Just have it in there at the last line. Shortens the buffer a bit too.
_________________________________________________________________
MSN Photos is the easiest way to share and print your photos:
http://photos.msn.com/support/worldwide.aspx
--
+---------------------------------------------------------------+
| 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