/* Anywhere */

void do_pk(CHAR_DATA *ch, char *argument)
{
   char buf2[MAX_STRING_LENGTH];
                 
   if (ch->pcdata->confirm_pk)
   {
        if (argument[0] != '\0')
        {
            send_to_char("PK readiness status removed.\n\r",ch);
            ch->pcdata->confirm_pk = FALSE;
            return;
        }
        else
        {
            if (IS_SET(ch->act,PLR_PROKILLER)) return;
            SET_BIT(ch->act,PLR_PROKILLER);
   
            act("{R$n glows briefly with a red aura, you get the feeling
you should keep your distance.{x",ch,NULL,NULL,TO_ROOM);
            send_to_char("{RYou are now a Player Killer, good luck, you'll
need it.\n\r{x", ch);
            sprintf(buf2, "%s has become a player killer!", ch->name);
            do_sendinfo(ch, buf2);
            return;
        }
    }

    if (argument[0] != '\0')
    {
        send_to_char("Just type pk. No argument.\n\r",ch);
        return;
    }
            
    send_to_char("Type pk again to confirm this command.\n\r",ch);
    send_to_char("WARNING: this command is virtually
irreversible.\n\r",ch);
    send_to_char("If you don't know what pk is for read help pk, DON'T
type this command again.\n\r",ch);
    send_to_char("Typing pk with an argument will undo pk readiness
status.\n\r",
        ch);
    ch->pcdata->confirm_pk = TRUE;
}

Now if you want to keep a running tab on how many kills a char is keeping
add this stuff

/* Merc.h, under char *   bamfin; */

    int                 pk_deaths;
    int                 pk_kills;

/* Merc.h, under confirm delete;   */

    bool                confirm_pk;

/* Merc.h, under handler.c */

void    pk_extract_char args( ( CHAR_DATA *ch, bool fPull ) );

/* Merc.h, under PLR_ flags */

#define PLR_PROKILLER   (xx)

/* Fight.c at the top with the other voids */

void    pk_kill         args( ( CHAR_DATA *victim ) );

/* Fight.c, right b4 the wiznet prints the char's death, add this...*/

        if (!IS_NPC(ch) && !IS_NPC(victim))
        {
                ch->pcdata->pk_kills++;
                sprintf(buf, "You now have %d pk kills{x\n\r",
ch->pcdata->pk_kills);
                send_to_char(buf, ch);
        }

        if (!IS_NPC(victim) && !IS_NPC(ch))
        {
                victim->pcdata->pk_deaths++;
                sprintf(buf, "You now have %d pk deaths{x\n\r",
victim->pcdata->pk_deaths);
                send_to_char(buf, victim);
        }


/* Fight.c in the player doing the killing part */

        /* player doing the killing */
        else
        {   
        
            if (IS_SET(victim->in_room->room_flags,ROOM_SAFE))
            {
                send_to_char("Not in this room.\n\r", ch);
                return TRUE;
            }
            
            if (!IS_SET(ch->act, PLR_PROKILLER))
            {
                send_to_char("You must be {RPK{x if you want to kill
players.\n\r",ch);
                return TRUE;
            }
        
            if (!IS_SET(victim->act, PLR_PROKILLER) && victim->level < 6)
            {
                send_to_char("You can only attack other {RPK{x
people.\n\r",ch);
                return TRUE;
            }
            
            
            if ((ch->level > victim->level + 30))
            {
                send_to_char("Pick on someone your own size.\n\r",ch);
                return TRUE;
            }
            
        }
    }
    return FALSE;
}

/* Fight.c, down a couple lines */

        /* player doing the killing */
        else
        {
    
    
            if (!IS_SET(ch->act,PLR_PROKILLER))
                return TRUE;
            
            if (IS_SET(victim->act,PLR_PROKILLER))
                return FALSE;
        
            if (!IS_SET(victim->act,PLR_PROKILLER))
                return TRUE;
            
            if (ch->level > victim->level + 30)
                return TRUE;
        }       
            
    }
    return FALSE;
}        

/* Save.c */

        fprintf( fp, "PKdi %d\n", ch->pcdata->pk_deaths);
        fprintf( fp, "PKki %d\n", ch->pcdata->pk_kills);


/* Save.c */

            KEY( "PKdi",        ch->pcdata->pk_deaths,  fread_number( fp )
);
            KEY( "PKki",        ch->pcdata->pk_kills,   fread_number( fp )
);

/* Also make sure you save the other stuff if you want to, and you might
want to make a pardon for pk, or whatever (grin). Also you will probably
want to add a thing to act_info.c to show on your do_who, for a pk flag.
If you have any questions just contact me at tim_hoye@hotmail.com or stop
in at the home of this code at Destiny Mud, mudnet.net port 7000 */