Notice: Any messages purporting to come from this site telling you that your password has expired, or that you need to verify your details, confirm your email, resolve issues, making threats, or asking for money, are
spam. We do not email users with any such messages. If you have lost your password you can obtain a new one by using the
password reset link.
Due to spam on this forum, all posts now need moderator approval.
Entire forum
➜ SMAUG
➜ SMAUG coding
➜ Saving spells with slots rather than sn's
|
Saving spells with slots rather than sn's
|
It is now over 60 days since the last post. This thread is closed.
Refresh page
Pages: 1
2
3
| Posted by
| Orik
USA (182 posts) Bio
|
| Date
| Reply #30 on Tue 03 Jul 2007 09:25 PM (UTC) Amended on Tue 03 Jul 2007 10:25 PM (UTC) by Orik
|
| Message
| Ok, it successfully reads and writes the spells, now my problem lies in my do_memorize function. I mem heal, save and quit. Log back in and check pfile, heal is still in pfile as memorized. I use the command memorize and it shows that I have memmed no spells. I save and then check pfile again and it shows no memorized spells.
Here's part of my memorize function. I'm guessing I have to figure out how to call it to read words like in the save.c section:
do_memorize
for (level = 9; level > 0; level--)
{
marker = FALSE;
for (sn = 1; sn < MAX_SKILL; sn++)
{
if ( !skill_table[sn] || skill_table[sn]->spell_level != level )
continue;
total = 0;
for (i = 0; i < MAX_MEM_SPELLS; i++)
{
if ((ch->pcdata->memorized[ i] != 0)
&& (ch->pcdata->memorized[ i] == sn))
{
total++;
none = 0;
}
}
if (total == 0)
continue;
if (marker)
{
if (total < 2)
sprintf(buf, "%s %s\r\n", buf, skill_table[sn]->name);
else
sprintf(buf, "%s %s (x%d)\r\n",buf, skill_table[sn]->name, total);
}
else
{
if (total < 2)
sprintf(buf, "%s (level %2d) %s\r\n", buf, skill_table[sn]->spell_level,
skill_table[sn]->name);
else
sprintf(buf, "%s (level %2d) %s (x%d)\r\n",buf, skill_table[sn]->spell_level,
skill_table[sn]->name, total);
marker = TRUE;
}
}
}
if (none)
sprintf(buf, "%sNone.\r\n\r\n", buf);
else
//sprintf(buf, "%s\r\n", buf);
strcat(buf, "\r\n");
send_to_char(buf, ch);
if (ch->pcdata->memorizing[0] != 0)
{
mudstrlcpy(buf, "", MAX_STRING_LENGTH);
strcat(buf, "And you are currently memorizing the following spells:\r\n");
time_memming = ch->mem_time;
for (i = 0; i < MAX_MEM_SPELLS; i++)
{
if (ch->pcdata->memorizing[ i] != 0)
{
sprintf(buf, "%s %4d seconds (%2d) %s.\r\n",
buf,
time_memming,
skill_table[ch->pcdata->memorizing[ i]]->spell_level,
skill_table[ch->pcdata->memorizing[ i]]->name);
I'm guessing it has to do with the for loops and memorized[ i] parts needing to be called by skill_table[sn]->name again. | | Top |
|
| Posted by
| Orik
USA (182 posts) Bio
|
| Date
| Reply #31 on Tue 03 Jul 2007 09:43 PM (UTC) |
| Message
| Maybe I didn't quite fully fix the fread and fwrite.
I log in, mem heal
save
log out
log back in
check pfile, everything is in there
type mem, nothing in memorize function
save
check pfile, no memorized spells anymore
mem heal again
cast heal on self and it works just fine.
So there's still something wrong with it not reading the sn correctly to show the spell. | | Top |
|
| Posted by
| David Haley
USA (3,881 posts) Bio
|
| Date
| Reply #32 on Tue 03 Jul 2007 10:14 PM (UTC) |
| Message
| | Woah, something really weird happened to your indenting there. :-P It's pretty hard to read when it goes all over the place like that... |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | | Top |
|
| Posted by
| Orik
USA (182 posts) Bio
|
| Date
| Reply #33 on Tue 03 Jul 2007 10:19 PM (UTC) Amended on Tue 03 Jul 2007 10:46 PM (UTC) by Orik
|
| Message
| Here's fwrite_char:
for (j = 0; j < MAX_MEM_SPELLS; j++)
{
int sn = ch->memorized[j];
if( skill_table[sn]->name != 0)
fprintf(fp, "Memorized '%s'\n", skill_table[sn]->name );
}
for (j = 0; j < MAX_MEM_SPELLS; j++)
{
int sn = ch->memorizing[j];
if( skill_table[sn]->name != 0)
fprintf(fp, "Memorizing '%s'\n", skill_table[sn]->name );
}
Here's my fread code:
if( !strcmp( word, "Memorized" ) )
{
int sn;
sn = bsearch_skill_exact( fread_word( fp ), gsn_first_spell, gsn_first_skill - 1 );
if(sn < 0 )
bug ("%s", "Fread_char: unknown spell." );
fMatch = TRUE;
break;
}
if( !strcmp( word, "Memorizing" ) )
{
int sn;
sn = bsearch_skill_exact( fread_word( fp ), gsn_first_spell, gsn_first_skill - 1 );
if(sn < 0 )
bug ("%s", "Fread_char: unknown spell." );
fMatch = TRUE;
break;
}
| | Top |
|
| Posted by
| Orik
USA (182 posts) Bio
|
| Date
| Reply #34 on Tue 03 Jul 2007 10:26 PM (UTC) |
| Message
| | There, tried to make it better to read. Hope that helps. | | Top |
|
| Posted by
| David Haley
USA (3,881 posts) Bio
|
| Date
| Reply #35 on Tue 03 Jul 2007 10:32 PM (UTC) |
| Message
| Ah, much better, thank you.
You know, it occurs to me that you are writing our "Memorized:" with a colon, but I don't think the colons are skipped when you read in the data -- I could be wrong about that, I really don't remember. It might be worth trying to write without the colon and see what happens. |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | | Top |
|
| Posted by
| Orik
USA (182 posts) Bio
|
| Date
| Reply #36 on Tue 03 Jul 2007 10:36 PM (UTC) Amended on Tue 03 Jul 2007 10:59 PM (UTC) by Orik
|
| Message
| actually, I do have them without the colons in my code. So that's not the problem.
********EXIT***********
Could the problem be that I'm not setting the sn to ch->pcdata->memorized[i] in the fread portion? | | Top |
|
| Posted by
| David Haley
USA (3,881 posts) Bio
|
| Date
| Reply #37 on Wed 04 Jul 2007 01:23 AM (UTC) |
| Message
| | Well, yes, you would have to update the memorized array with the skill you just read... :-) |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | | Top |
|
| Posted by
| Orik
USA (182 posts) Bio
|
| Date
| Reply #38 on Wed 04 Jul 2007 01:34 AM (UTC) Amended on Wed 04 Jul 2007 01:36 AM (UTC) by Orik
|
| Message
| I came up with this:
if( !strcmp( word, "Memorized" ) )
{
int sn, j, i;
j = fread_number(fp);
sn = bsearch_skill_exact( fread_word( fp ), gsn_first_spell, gsn_first_skill - 1 );
if(sn < 0 )
bug ("%s", "Fread_char: unknown spell." );
ch->pcdata->memorized[ i] = sn;
fMatch = TRUE;
break;
}
if( !strcmp( word, "Memorizing" ) )
{
int sn, j, i;
j = fread_number(fp);
sn = bsearch_skill_exact( fread_word( fp ), gsn_first_spell, gsn_first_skill - 1 );
if(sn < 0 )
bug ("%s", "Fread_char: unknown spell." );
ch->pcdata->memorizing[ i] = sn;
fMatch = TRUE;
break;
}
Which it doesn't really work that well. It will remember the last spell I memorized. I mem spells, they all mem just fine, I save and log off, log back in and I have the last spell I memed in my memory.
How do I update the memorized array? What's the array? It is this right:
memorizing [ i ]
or
memorized [ i ]
How would I update it? | | Top |
|
| Posted by
| David Haley
USA (3,881 posts) Bio
|
| Date
| Reply #39 on Wed 04 Jul 2007 01:41 AM (UTC) |
| Message
| There are a few problems here. You're using the variable i, but you never set it to anything, nor do you ever update it. You will want to initialize it to zero somewhere, and every time you make an assignment you want to update it.
But since you have memorized and memorizing, you actually need two variables. I suggest calling them something other than i, like numMemorized. |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | | Top |
|
| Posted by
| Orik
USA (182 posts) Bio
|
| Date
| Reply #40 on Wed 04 Jul 2007 02:59 AM (UTC) |
| Message
| Ok, so I have it working...I believe.
What I did was, since I was counting the j in the fwrite I set it as the value in the fread. Then I changed the i to a j and since it was counting for every memed spell already, I just used that.
So far, I've been troubleshooting it, but it seems to be working. FINALLY!!! heh. | | Top |
|
| Posted by
| Orik
USA (182 posts) Bio
|
| Date
| Reply #41 on Wed 04 Jul 2007 03:33 AM (UTC) Amended on Wed 04 Jul 2007 03:50 AM (UTC) by Orik
|
| Message
| Good news, it works. Bad news is somehow, I have no idea how, sset save skill table doesn't save through reboot or hotboot now. I tried it on my backup that i made before I switched spell memorization. It worked fine through reboot and hotboot.
I see that's it's saving in the class file, but when I hotboot/reboot, the level goes back up to 101 as if I never saved it. It shows minlevel in skills.dat as the level that I chose it, but it doesn't change in slookup.
i did a diff on tables.c, skills.c and save.c.
SKills.c had onthing, tables.c had nothing, save.c just had the changes to spell memorization.
bah, I thought I had it, now this is going to stump me.
*******EDIT*******
I just put those four changes into my backup folder and now everything works fine. For what I can tell anyways :) | | Top |
|
| Posted by
| Gadush
(92 posts) Bio
|
| Date
| Reply #42 on Thu 05 Jul 2007 06:16 PM (UTC) |
| Message
| Been watching this with interest -- glad you have it figured out.
Any chance you might be willing to post your memorization system as a snippet? I've looked about for memorization for Smaug with no success.
Either way, glad you got it working.
Regards,
Gadush | | Top |
|
The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).
To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.
129,507 views.
This is page 3, subject is 3 pages long:
1
2
3
It is now over 60 days since the last post. This thread is closed.
Refresh page
top