|
Poof Saves (3.0bpl11, version 3) [by Gary Barnett] |
|
|
|
Posted Wednesday, August 12th @ 11:33:27 PM, by George Greer in the Wizard dept.
Updated May 6, 1997. Click the link below to read it or download it.
From: Gary Barnett <gbarnett@polarnet.com>
Subject: Poof saves snippet?
Some of the builder's on my mud might call be re-write happy.. (Who rewrites
the POS_ code? :-) ) .. but have you tried backing up the source, and yanking
poofs entirely and then adding them back in?
This assumes you are using the improved editor patch. If you aren't, stop
reading :-)
0) yank all references to poofs.
1) create two pointers to a string on your character. I used
player_special_data and called them poofin and poofout.
2) create two macros: (utils.h)
#define POOFIN(ch)
((ch)->player_specials->poofin)
#define POOFOUT(ch)
((ch)->player_specials->poofout)
2) If you use the improved editor patch just create a new command and copy
the lines from one of the other places it's used and modify to suit.
Something like this:
ACMD(do_poofset)
{ int poof =0;
if (subcmd == SCMD_POOFIN) poof=1;
if (subcmd == SCMD_POOFOUT) poof=2;
if (!poof) {
send_to_char("Invalid poof set.\r\n",ch);
return;
}
/* set up editor stats */
send_to_char("\x1B[H\x1B[J", ch);
if (poof == 1)
send_to_char("Edit your POOFIN: (/s saves /h for help)\r\n", ch);
else
send_to_char("Edit your POOFOUT: (/s saves /h for help)\r\n", ch);
ch->desc->backstr = NULL;
if (poof == 1) {
if ((ch->player_specials)->poofin) {
send_to_char((ch->player_specials)->poofin, ch);
ch->desc->backstr = str_dup((ch->player_specials)->poofin);
}
ch->desc->str = &ch->player_specials->poofin;
} else {
if ((ch->player_specials)->poofout) {
send_to_char((ch->player_specials)->poofout, ch);
ch->desc->backstr = str_dup((ch->player_specials)->poofout);
}
ch->desc->str = &ch->player_specials->poofout;
}
ch->desc->max_str = MAX_STRING_LENGTH;
ch->desc->mail_to = 0;
act("$n begins editing one of his poofs.", TRUE, ch, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
}
4) create the SCMD_POOFIN and SCMD_POOFOUT defines.. Just use the next
free numbers.
5) create the commands.. poofin and poofout .. use the scmd's to
differentiate... and add the declaration ACMD(do_poofset) -- intepreter.c
6) send the new poofs out in the goto and teleport commands I think. This
works for me:
if (POOFOUT(ch)) {
sprintf(buf, "%s", POOFOUT(ch));
if (buf[strlen(buf)-1] == '\n') buf[strlen(buf)-1] = '\0';
} else
strcpy(buf, "$n disappears.");
act(buf, TRUE, ch, 0, 0, TO_ROOM);
<move the person to the new room here>
if (POOFIN(ch)) {
sprintf(buf, "%s", POOFIN(ch));
if (buf[strlen(buf)-1] == '\n') buf[strlen(buf)-1] = '\0';
} else
strcpy(buf, "$n has arrived.");
act(buf, TRUE, ch, 0, 0, TO_ROOM);
7) free the stuff when you are done with it .. free_char
if (ch->player_specials->poofin)
free(ch->player_specials->poofin);
if (ch->player_specials->poofout)
free(ch->player_specials->poofout);
8) figure out a way to save them. I use ascii pfiles.. This would be a
good time to plug them :-)
9) Add a policy: That the God's name must appear in the darn poof. :-)
If you aren't ready to convert, you might save them in a file in the obj
save dir called poofs or something.. but that's up to you...maybe use the
spares to store the pointers?
ACMD(do_poofs)
{
int poof =0;
if (*argument)
if ((argument[1] == 'i') || (argument[1] == 'I') ) {
send_to_char("Edit your POOFIN: (/s saves /h for help)\r\n", ch);
poof=1;
} else if ((argument[1] == 'o') || (argument[1] == 'O') ) {
send_to_char("Edit your POOFOUT: (/s saves /h for help)\r\n", ch);
poof=2;
}
if (!poof) {
sprintf(buf, "Your POOFIN reads:\r\n\r\n%s\r\n"
"Your POOFOUT reads:\r\n\r\n%s\r\n"
"\r\n"
"To set poofs: Use POOFS IN or POOFS OUT.\r\n",
POOFIN(ch) ? POOFIN(ch) : "You have no POOFIN!\r\n",
POOFOUT(ch) ? POOFOUT(ch) : "You have no POOFOUT!\r\n");
send_to_char(buf, ch);
return;
}
ch->desc->backstr = NULL;
if (poof == 1) {
if ((ch->player_specials)->poofin) {
send_to_char((ch->player_specials)->poofin, ch);
ch->desc->backstr = str_dup((ch->player_specials)->poofin);
}
ch->desc->str = &ch->player_specials->poofin;
} else {
if ((ch->player_specials)->poofout) {
send_to_char((ch->player_specials)->poofout, ch);
ch->desc->backstr = str_dup((ch->player_specials)->poofout);
}
ch->desc->str = &ch->player_specials->poofout;
}
ch->desc->max_str = MAX_STRING_LENGTH;
ch->desc->mail_to = 0;
act("$n begins editing one of $s poofs.", TRUE, ch, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
}
--Mallory
<< Poof Saves (3.0bpl11, version 2) [by Rasdan] | Reply | View as text | Threaded | Poofin/Poofout Saving [by ?] >> |
|
Related Links |
|
|
|
CircleMUD Snippets |
|
|
Note: Not all of these snippets will work perfectly with
your version of code, so be prepared to fix one
or two bugs that may arise, and please let me know
what you needed to do to fix it. Sending a corrected
version is always welcome.
|
Finally, if you wish to use any of the snippets from this
page, you are more than welcome, just mention the
authors in your credits. If you wish to release any
of these snippets to the public on another site,
contact me FIRST.
|
|
|
|
|
|
|