/* all i ask for this snippet is credit in the help file.
something like History and lookhist by taka taka@ghostmud.com
that would be enough credit for me.
As always it is nice to know someone uses my snip you could email
me if you like but not required.
*/
Add this in Interp.h
DECLARE_DO_FUN( do_history );
DECLARE_DO_FUN( do_lookhist );
Add this to Interp.C
{ "history", do_history, POS_SLEEPING, 0, LOG_NORMAL, 1 },
{ "lookhist", do_lookhist, POS_SLEEPING, 0, LOG_NORMAL, 1 },
In Save.c
Find void fwrite_char( CHAR_DATA *ch, FILE *fp )
and add this inside it
if (ch->pcdata->history[0] != '\0' )
fprintf( fp, "Hist %s~\n", ch->pcdata->history );
Find bool load_char_obj( DESCRIPTOR_DATA *d, char *name )
and add this in the initialize area
ch->pcdata->history = str_dup( "" );
Find void fread_char( CHAR_DATA *ch, FILE *fp )
and add under CASE 'H':
KEYS( "Hist", ch->pcdata->history, fread_string( fp ) );
In MERC.H add this in the pcdata structure
char * history;
Add this to the bottom of act_info.c
/*
* Allows PC to make and store a history.
* by TAKA
* (c) 1999 TAKA of the Ghost Dancer MUD Project
*/
void do_history( CHAR_DATA *ch, char *argument )
{
char buf[MSL], arg[MIL];
if ( argument[0] != '\0' )
{
buf[0] = '\0';
smash_tilde( argument );
if (argument[0] == '-')
{
int len;
bool found = FALSE;
if (ch->pcdata->history == NULL || ch->pcdata->history[0] == '\0')
{
send_to_char("No lines left to remove.\n\r",ch);
return;
}
strcpy(buf,ch->pcdata->history);
for (len = strlen(buf); len > 0; len--)
{
if (buf[len] == '\r')
{
if (!found) /* back it up */
{
if (len > 0)
len--;
found = TRUE;
}
else /* found the second one */
{
buf[len + 1] = '\0';
free_string(ch->pcdata->history);
ch->pcdata->history = str_dup(buf);
send_to_char( "Your history is:\n\r", ch );
page_to_char( ch->pcdata->history ? ch->pcdata->history :
"(None).\n\r", ch );
return;
}
}
}
buf[0] = '\0';
free_string(ch->pcdata->history);
ch->pcdata->history = str_dup(buf);
send_to_char("{RHistory cleared.{x\n\r",ch);
return;
}
if ( argument[0] == '+' )
{
if ( ch->pcdata->history != NULL )
strcat( buf, ch->pcdata->history );
argument++;
while ( isspace(*argument) )
argument++;
}
argument = one_argument( argument, arg );
smash_tilde( argument );
if ( !str_cmp( arg, "write") )
{
if ( argument[0] == '\0' )
string_append( ch, &ch->pcdata->history );
return;
}
if ( strlen(buf) >= 4096)
{
send_to_char( "History too long.\n\r", ch );
return;
}
strcat( buf, argument );
strcat( buf, "\n\r" );
free_string( ch->pcdata->history );
ch->pcdata->history = str_dup( buf );
}
send_to_char( "Your history is:\n\r", ch );
page_to_char( ch->pcdata->history ? ch->pcdata->history : "(None).\n\r", ch );
return;
}
void do_lookhist( CHAR_DATA *ch, char *argument )
{
char arg1[MIL];
CHAR_DATA *victim;
argument = one_argument (argument, arg1);
if (arg1[0] == '\0')
{
stc ("{rWhos history do you want to read?{x\n\r", ch);
return;
}
if ((victim = get_char_world (ch, arg1)) == NULL)
{
stc ("{rThey aren't here.{x\n\r", ch);
return;
}
stc( "Thier history is:\n\r", ch );
page_to_char( victim->pcdata->history ? victim->pcdata->history : "(None).\n\r", ch );
return;
}
Put in HELP.ARE
-1 HISTORY LOOKHIST~
Syntax: history <text>
Syntax: history + <text>
Syntax: history - <text>
Syntax: history write
This {GHISTORY{x command works exactly the same way as the description command.
The History command will allow you to enter a detailed history or background
for your character. It can be up to twice the size of your description.
Using the {C+ sign{x will add lines of text to your history and using the {C- sign{x
will remove lines of text from your history. The history command by itself will
show you your current history.
To view any other players history, use the lookhist command.
Syntax: LOOKHIST <player>
Looks at the history of another player.
History and LookHistory by Taka
taka@ghostmud.com
~