----- Original Message -----
From: "Ray Campbell" <thrawn@COX.NET>
> I decided to go the AFF2 route after many failed attempts at adding
> 128 bits to my heavily modified, now pl19 code base. This question
> is posed pertaining to ASCII pfiles and the saving of the AFF2 flags
> to the file. I copied all instances of AFF, in db.c (I believe this
> is the only place that handles setting up the pfiles?) My code
> compiles just fine, but the AFF2 flags aren't actually working.
> No weird crashes are happening, it just won't affect the character.
The bug is below - all tags must be 4 chars - "Aff2 " is 5 chars long.
> --snip--
>
> case 'A':
> if(!strcmp(tag, "Ac "))
> GET_AC(ch) = num;
> else if(!strcmp(tag, "Act "))
> PLR_FLAGS(ch) = num;
> else if(!strcmp(tag, "Aff "))
> AFF_FLAGS(ch) = asciiflag_conv(line);
- else if (!strcmp(tag, "Aff2 "))
+ else if (!strcmp(tag, "Aff2")) /* all tags are 4 chars */
> AFF2_FLAGS(ch) = asciiflag_conv(line);
> else if(!strcmp(tag, "Affs")) {
> i = 0;
> do {
> fbgetline(fl, line);
> sscanf(line, "%d %d %d %d %d %d",
> &num, &num2, &num3, &num4, &num5, &num6);
> if(num > 0) {
> af.type = num;
> af.duration = num2;
> af.modifier = num3;
> af.location = num4;
> af.bitvector = num5;
> af.bitvector2 = num6;
> affect_to_char(ch, &af);
> i++;
> }
> } while (num != 0);
> } else if(!strcmp(tag, "Alin"))
> --snip--
> above, num6 was added with the af.bitvector2 in db.c, to me this seemed
> like the obvious place where it was setting up the structure of what to
> write in the pfile. Again, I just followed all instances of AFF. Does
> anyone see a problem with the above.
Not as long as you make sure to set af.bitvector2 to 0 when initialising.
> One thing I was unsure of, is if that I had to actually make all
> new af.xxx structures, for the new aff2 flags. It appeared that just
> adding a .bitvector2 to struct affected_type in structs.h should do
> the trick. Perhaps i'm wrong?
No, not at all. This is the obvious way to do it.
> My other question, and this I believe is what is making the actuall
> AFF2 flag not stick to the character to begin with is this in utils.c:
<snip of sprintbit func>
NO, don't change sprintbit(). Sprintbit is called throughout the code,
when a bitvector needs to be output as text - 'stat' comes to mind.
What you need to do is call sprintbits(). Difference:
char bitbuf[50];
const char *test[] = {
"testbit1",
"testbit2",
"testbit3",
"\n"
};
sprintbits(5, bitbuf);
printf("%s\r\n", bitbuf);
sprintbit(5, test, bitbuf);
printf("%s\r\n", bitbuf);
gives the output:
ac
testbit1 testbit3
So you wish to call sprintbits() like this when saving:
if(AFF2_FLAGS(ch) != PFDEF_AFF2FLAGS) {
sprintbits(AFF2_FLAGS(ch), bits);
fbprintf(fl, "Aff2: %s\n", bits);
}
Note no space between Aff2 and : .
> I do believe, perhaps, if this second hurdle is conqoured, than the
> first will work, for if it actually ever sets the bit, it might actually
> save the thing.
If you look in your pfiles, what format has it saved AFF2 flags in ?
Welcor
--
+---------------------------------------------------------------+
| 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