> void do_slay( CHAR_DATA *ch, char *argument )
> {
>     CHAR_DATA *victim;
>     char arg[MAX_INPUT_LENGTH];
>     char buf[MSL];
> 
>     one_argument( argument, arg );
>     if ( arg[0] == '\0' )
>     {
>         send_to_char( "Slay whom?\n\r", ch );
>         return;
>     }
> 
>     if ( ( victim = get_char_room( ch, arg ) ) == NULL )
>     {
>         send_to_char( "They aren't here.\n\r", ch );
>         return;
>     }
> 
>     if (ch->pcdata->pslay ==NULL)
>     {
>         send_to_char("You must atleast set one of your slay
> arguments!\n\r",ch);
>         return;
>     }

Why not checking for all slay arguments to be set?

>     if ( ch == victim )
>     {
>         send_to_char( "Suicide is a mortal sin.\n\r", ch );
>         return;
>     }
> 
>     if (IS_IMMORTAL(victim))
>     {
>         send_to_char( "Slaying another immortal would be
> useless.\n\r",ch);
>         return;
>     }
> 
>     if ( !IS_NPC(victim) && victim->level >= get_trust(ch) )
>     {
>         send_to_char( "You failed.\n\r", ch );
>         return;
>     }

If slay is only for immortals, this second check isn't needed since
it would never occur.

>         if (ch->pcdata->pslay ||
>         ch->pcdata->pslay2 ||
>         ch->pcdata->pslay3 == NULL)

so pslay should be non-NULL, pslay2 should be non-NULL and pslay3
should be NULL? Also, they all should be non-NULL, not one of them
(&& instead of ||), otherwise the output of the sprintf()'s is
weird.

>         {
>              sprintf(buf, "%s\n\r", ch->pcdata->pslay);
>              act(buf, ch, NULL, victim, TO_CHAR );
>              sprintf(buf, "%s\n\r", ch->pcdata->pslay2);
>              act(buf, ch, NULL, victim, TO_VICT );
>              sprintf(buf, "%s\n\r", ch->pcdata->pslay3);
>              act(buf, ch, NULL, victim, TO_NOTVICT );
>          raw_kill( victim);
>         return;
>         }
>         else
>         act( "{1You slay $M in cold blood!{x",  ch, NULL, victim, TO_CHAR
> );
>         act( "{1$n slays you in cold blood!{x", ch, NULL, victim, TO_VICT
> );
>         act( "{1$n slays $N in cold blood!{x",  ch, NULL, victim,
> TO_NOTVICT );
>         raw_kill( victim );
>         return;
> }
> 
> next: add these commands
> 
> void do_pslay( CHAR_DATA *ch, char *argument )
> {
>     char buf[MAX_STRING_LENGTH];
> 
>     if ( !IS_NPC(ch) )
>     {
>         smash_tilde( argument );
> 
>         if (argument[0] == '\0')
>         {
>             sprintf(buf,"Your poofslay To You is:
> %s\n\r",ch->pcdata->pslay);
>             send_to_char(buf,ch);
>             return;
>         }
> 
>         free_string( ch->pcdata->pslay );
>         ch->pcdata->pslay = str_dup( argument );
> 
>         sprintf(buf,"Your poofslay To Them is now:
> %s\n\r",ch->pcdata->pslay);
>         send_to_char(buf,ch);
>     }
>     return;
> }
> 
> void do_pslay2( CHAR_DATA *ch, char *argument )
> {
>     char buf[MAX_STRING_LENGTH];
> 
>     if ( !IS_NPC(ch) )
>     {
>         smash_tilde( argument );
>         if (argument[0] == '\0')
>         {
>             sprintf(buf,"Your poofslay To the one your slaying is:
> %s\n\r",ch->pcdata->pslay2);
>             send_to_char(buf,ch);
>             return;
>         }
> 
>         free_string( ch->pcdata->pslay2 );
>         ch->pcdata->pslay2 = str_dup( argument );
> 
>         sprintf(buf,"Your poofslay to the one your slaying is:
> %s\n\r",ch->pcdata->pslay2);
>         send_to_char(buf,ch);
>     }
>     return;
> }
> 
> void do_pslay3( CHAR_DATA *ch, char *argument )
> {
>     char buf[MAX_STRING_LENGTH];
> 
>     if ( !IS_NPC(ch) )
>     {
>         smash_tilde( argument );
> 
>         if (argument[0] == '\0')
>         {
>             sprintf(buf,"Your poofslay to people in the room is:
> %s\n\r",ch->pcdata->pslay3);
>             send_to_char(buf,ch);
>             return;
>         }
> 
>         free_string( ch->pcdata->pslay3 );
>         ch->pcdata->pslay3 = str_dup( argument );
> 
>         sprintf(buf,"Your poofslay to people in the room is now:
> %s\n\r",ch->pcdata->pslay3);
>         send_to_char(buf,ch);
>     }
>     return;
> }
> 
> /*Replaces 3 commands for for lack of string management*/
> void do_poofslay( CHAR_DATA *ch,char *argument)
> {
>     char arg[MAX_INPUT_LENGTH];
>     char buf[MAX_STRING_LENGTH];
> 
>     argument = one_argument(argument,arg);
> 
>     if ( arg[0] == '\0' )
>     {
>         sprintf(buf,"Your poofslay To You is: %s\n\r",ch->pcdata->pslay);
>             send_to_char(buf,ch);
>         sprintf(buf,"Your poofslay To The person your slaying:
> %s\n\r",ch->pcdata->pslay2);
>             send_to_char(buf,ch);
>         sprintf(buf,"Your poofslay To people in the room:
> %s\n\r",ch->pcdata->pslay3);
>             send_to_char(buf,ch);
>         return;
>     }
>     if (!str_prefix(arg,"1"))
>     {
>         do_function(ch, &do_pslay, argument);
>         return;
>     }

Why are you not sending the "1" to the function as an argument?
Yes, then it wouldn't be a do_function() anymore, but it would save
you a duplication of code (triplication in this case)

>     if (!str_prefix(arg,"2"))
>     {
>         do_function(ch, &do_pslay2, argument);
>         return;
>     }
> 
>     if (!str_prefix(arg,"3"))
>     {
>         do_function(ch, &do_pslay3, argument);
>         return;
>     }
>             do_function(ch, &do_poofslay, "");
> }

> next: open up merc.h and find pc_data struct
> and add somewhere in that mess:
> 
>     char *              pslay;
>     char *              pslay2;
>     char *              pslay3;

What is wrong with char *pslay[3]?

I'm missing the allocation and deallocation of it in the new_pcdata()
and free_pcdata().

For a free lunch:

void set_pslay( CHAR_DATA *ch, int number, char *argument ) {
    char buf[MAX_STRING_LENGTH];

    smash_tilde( argument );
    free_string(ch->pcdata->pslay[number]);
    ch->pcdata->pslay[number]=str_dup(argument);
}

void do_poofslay( CHAR_DATA *ch,char *argument)
{
    char arg[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    int number;

    argument = one_argument(argument,arg);
 
    if ( arg[0] == '\0' ) {
        sprintf(buf,"Your poofslay To You is: %s\n\r",ch->pcdata->pslay);
        send_to_char(buf,ch);
        sprintf(buf,"Your poofslay To The person your slaying: 
%s\n\r",ch->pcdata->pslay2);
        send_to_char(buf,ch);
        sprintf(buf,"Your poofslay To people in the room: 
%s\n\r",ch->pcdata->pslay3);
        send_to_char(buf,ch);
        return;
    }

    if (!is_number(arg)) {
        send_to_char("usage: poofslay <number> <text>\n\r",ch);
        return;
    }

    number=atoi(arg);
    if (number<0 || number>2) {
        send_to_char("usahe: poofslay <number> <text>\n\r",ch);
        return;
    }
    set_pslay(ch,number,argument);
    send_to_char("The slay to ",ch);
    switch (number) {
    case 0: send_to_char("you ",ch);break;
    case 1: send_to_char("them ",ch);break;
    case 2: send_to_char("room ",ch);break;
    }
    send_to_char("is set to ",ch);
    send_to_char(argument,ch);
}

Edwin

-- 
Edwin Groothuis      |           Personal website: http://www.MavEtJu.org
[EMAIL PROTECTED]    |        Interested in MUDs? Visit Fatal Dimensions:
bash$ :(){ :|:&};:   |                    http://www.FatalDimensions.org/

Reply via email to