From: Gary Barnett 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); 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