Re: [NEWBIE]Poofin/poofout

From: Mike Stilson (mike@velgarian.sytes.net)
Date: 09/02/02


On Mon, Sep 02, 2002 at 12:10:19PM +0200, Peter d wrote:
>Hi!
>How do i make the poofins and poofouts saveable?
>what files and functions need to be modified?

I'd SWEAR this has been covered before... but since it took about 3
minutes, here:  Note: This will ruin your rentfiles (amounting to a
pwipe), and enlarge them by MAX_POOFLEN*2 for each entry.

(I'm assuming you're still using binary pfiles, since last I checked,
ascii pfiles saved poofs)

Posting this here since I don't really think it's enough work to put on
the ftp site.  This is against stock bpl21, not really stress-tested,
YMMV.

diff -Nupr src/act.wizard.c src.w/act.wizard.c
--- src/act.wizard.c    Tue Apr  9 10:12:15 2002
+++ src.w/act.wizard.c  Mon Sep  2 08:22:16 2002
@@ -1405,23 +1405,23 @@ ACMD(do_gecho)

 ACMD(do_poofset)
 {
-  char **msg;
+  char *msg;

   switch (subcmd) {
-  case SCMD_POOFIN:    msg = &(POOFIN(ch));    break;
-  case SCMD_POOFOUT:   msg = &(POOFOUT(ch));   break;
+  case SCMD_POOFIN:    msg = (POOFIN(ch));    break;
+  case SCMD_POOFOUT:   msg = (POOFOUT(ch));   break;
   default:    return;
   }

   skip_spaces(&argument);

   if (*msg)
-    free(*msg);
+    *msg = '\0';

   if (!*argument)
-    *msg = NULL;
+    *msg = '\0';
   else
-    *msg = strdup(argument);
+    snprintf(msg, MAX_POOFLEN, "%s", argument);

   send_to_char(ch, "%s", OK);
 }
diff -Nupr src/db.c src.w/db.c
--- src/db.c    Tue Apr  9 10:12:15 2002
+++ src.w/db.c  Mon Sep  2 08:24:16 2002
@@ -2235,8 +2235,6 @@ void store_to_char(struct char_file_u *s
   ch->points = st->points;
   ch->char_specials.saved = st->char_specials_saved;
   ch->player_specials->saved = st->player_specials_saved;
-  POOFIN(ch) = NULL;
-  POOFOUT(ch) = NULL;
   GET_LAST_TELL(ch) = NOBODY;

   if (ch->points.max_mana < 100)
@@ -2786,6 +2784,8 @@ void init_char(struct char_data *ch)
     GET_COND(ch, i) = (GET_LEVEL(ch) == LVL_IMPL ? -1 : 24);

   GET_LOADROOM(ch) = NOWHERE;
+  snprintf(POOFIN(ch), MAX_POOFLEN, "poofs in.");
+  snprintf(POOFOUT(ch), MAX_POOFLEN, "poofs out.");
 }


diff -Nupr src/structs.h src.w/structs.h
--- src/structs.h       Sun Apr 14 14:24:24 2002
+++ src.w/structs.h     Mon Sep  2 08:22:16 2002
@@ -812,9 +812,12 @@ struct char_special_data {
  * in your new code.  They will automatically be transferred from the
  * playerfile into memory when players log in.
  */
+#define MAX_POOFLEN 80
 struct player_special_data_saved {
    byte skills[MAX_SKILLS+1];  /* array of skills plus skill 0         */
    byte PADDING0;              /* used to be spells_to_learn           */
+   char poofin[MAX_POOFLEN];
+   char poofout[MAX_POOFLEN];
    bool talks[MAX_TONGUE];     /* PC s Tongues 0 for NPC               */
    int wimp_level;             /* Below this # of hit points, flee!    */
    byte freeze_level;          /* Level of god who froze char, if any  */
diff -Nupr src/utils.h src.w/utils.h
--- src/utils.h Tue Apr  9 09:09:55 2002
+++ src.w/utils.h       Mon Sep  2 08:22:16 2002
@@ -318,8 +318,8 @@ void        update_pos(struct char_data *victim
 #define GET_FREEZE_LEV(ch)     CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.freeze_level))
 #define GET_BAD_PWS(ch)                CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.bad_pws))
 #define GET_TALK(ch, i)                CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.talks[i]))
-#define POOFIN(ch)             CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->poofin))
-#define POOFOUT(ch)            CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->poofout))
+#define POOFIN(ch)             CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.poofin))
+#define POOFOUT(ch)            CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.poofout))
 #define GET_LAST_OLC_TARG(ch)  CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->last_olc_targ))
 #define GET_LAST_OLC_MODE(ch)  CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->last_olc_mode))
 #define GET_ALIASES(ch)                CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->aliases))

--
   +---------------------------------------------------------------+
   | 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