Ok here is what I did for multi backstab and a circle skill.
First backstab

IN class.c assign what class you want to have this aka thief ect.

IN spell_parser.c add  "track",		
                       "second stab", 
                       "third stab", /* 140 */
                       "fourth stab",
                    
in the list after the last skill (in stock mud it is track) around line 169
                      

and then at end of file after skillo(SKILL_TRACK); add

                       skillo(SKILL_SECOND_STAB);
                       skillo(SKILL_THIRD_STAB);
                       skillo(SKILL_FOURTH_STAB);

IN spells.h after  #define SKILL_TRACK 140

                        #define SKILL_SECOND_STAB       141 /* Second stab    */
                        #define SKILL_THIRD_STAB	    142 /* Third stab     */
                        #define SKILL_FOURTH_STAB	    143 /* fourth stab    */

IN offensive.c replace do_backstab with this:



ACMD(do_backstab)
{
  struct char_data *vict;
  int percent, prob, apr;
  one_argument(argument, buf);
  

  if (!(vict = get_char_room_vis(ch, buf))) {
    send_to_char("Backstab who?\r\n", ch);
    return;
  }
  if (vict == ch) {
    send_to_char("How can you sneak up on yourself?\r\n", ch);
    return;
  }
  if (!GET_EQ(ch, WEAR_WIELD)) {
    send_to_char("You need to wield a weapon to make it a success.\r\n", ch);
    return;
  }
  if (GET_OBJ_VAL(GET_EQ(ch, WEAR_WIELD), 3) != TYPE_PIERCE - TYPE_HIT) {
    send_to_char("Only piercing weapons can be used for backstabbing.\r\n", ch);
    return;
  }
  if (FIGHTING(vict)) {
    send_to_char("You can't backstab a fighting person -- they're too alert!\r\n", ch);
    return;
  }

  if (MOB_FLAGGED(vict, MOB_AWARE)) {
    act("You notice $N lunging at you!", FALSE, vict, 0, ch, TO_CHAR);
    act("$e notices you lunging at $m!", FALSE, vict, 0, ch, TO_VICT);
    act("$n notices $N lunging at $m!", FALSE, vict, 0, ch, TO_NOTVICT);
    hit(vict, ch, TYPE_UNDEFINED);
    return;
  }

  percent = number(1, 101);	/* 101% is a complete failure */
  prob = GET_SKILL(ch, SKILL_BACKSTAB);
  apr = 0;


/****************************************************
                   Multiple Attacks Per Round (apr) Patch
                      Copyright 1996, by Daniel Koepke
his ideas on multihit inspited this so he should also
get credit as it is kinda his idea. :-)

*******************************************************/
  if (AWAKE(vict) && (percent > prob))
    damage(ch, vict, 0, SKILL_BACKSTAB);
  else
       if (GET_SKILL(ch, SKILL_SECOND_STAB) >= number(1, 101)) {
		 apr++;  
		 if (GET_SKILL(ch, SKILL_THIRD_STAB) >= number(1, 101)){
			 apr++;
			 if (GET_SKILL(ch, SKILL_FOURTH_STAB) >= number(1, 101)){
				 apr++;

				 }
			 }
	   }

      apr = MAX(-1, MIN(apr, 6));
  
     if (apr >= 0) {
       for (; apr >= 0 && (percent < prob); apr--)


    hit(ch, vict, SKILL_BACKSTAB);

	 }
}



/***********************************************************************************/
Now for circle add circle in all the files(class.c spell_parser.c spells.h)
like you did above for backstab. 
and in fight.c
find:
          /* the attacker missed the victim */
	  if (type == SKILL_BACKSTAB){
      damage(ch, victim, 0, SKILL_BACKSTAB);
	  }
    else
      damage(ch, victim, 0, w_type);
  } else {

and change to:
                   /* the attacker missed the victim */
	  if (type == SKILL_BACKSTAB){
      damage(ch, victim, 0, SKILL_BACKSTAB);
	  }
	  else if (type == SKILL_CIRCLE){
      damage(ch, victim, 0, SKILL_CIRCLE);
	  }
    else
      damage(ch, victim, 0, w_type);
  } else {

Then find:
              /* at least 1 hp damage min per hit */
    dam = MAX(1, dam);

    if (type == SKILL_BACKSTAB) {
      dam *= backstab_mult(GET_LEVEL(ch));
      damage(ch, victim, dam, SKILL_BACKSTAB);
    } else
      damage(ch, victim, dam, w_type);
  }
  
 and change to:
                    /* at least 1 hp damage min per hit */
    dam = MAX(1, dam);

    if (type == SKILL_BACKSTAB) {
      dam *= backstab_mult(GET_LEVEL(ch));
      damage(ch, victim, dam, SKILL_BACKSTAB);
	}
	else if (type == SKILL_CIRCLE) {
      dam *= backstab_mult(GET_LEVEL(ch)) * 2;
      damage(ch, victim, dam, SKILL_CIRCLE);
    } else
      damage(ch, victim, dam, w_type);
  }
  

and now circle which is a rework of backstab
add this to the bottom of offensive.c


ACMD(do_circle)
{
  struct char_data *vict;
  int percent, prob;
  one_argument(argument, buf);
  

  if (!(vict = get_char_room_vis(ch, buf))) {
    send_to_char("Circle who?\r\n", ch);
    return;
  }
  if (vict == ch) {
    send_to_char("How can circle yourself?\r\n", ch);
    return;
  }
  if (!GET_EQ(ch, WEAR_WIELD)) {
    send_to_char("You need to wield a weapon to successfully circle someone.\r\n", ch);
    return;
  }
  if (GET_OBJ_VAL(GET_EQ(ch, WEAR_WIELD), 3) != TYPE_PIERCE - TYPE_HIT) {
    send_to_char("Only piercing weapons can be used for circling.\r\n", ch);
    return;
  }

  percent = number(1, 101);	/* 101% is a complete failure */
  prob = GET_SKILL(ch, SKILL_CIRCLE);
 
  if (AWAKE(vict) && (percent > prob))
    damage(ch, vict, 0, SKILL_CIRCLE);
  else
    hit(ch, vict, SKILL_CIRCLE);

 WAIT_STATE(ch, PULSE_VIOLENCE * 2); 

}

And finally open messages file in lib/misc and 
write damage message for the circle skill using
the number from spells.h(use backstab as example)
this must be done to get fight message


* Circle
M
 XXX <-this would be the define number from spells.h
$N makes a strange sound but is suddenly very silent as you place $p in $S back.
Suddenly $n stabs you in the back, R.I.P....
$n places $p in the back of $N, resulting in some strange noises, a lot of blood, and a corpse.
$N quickly avoids your circle and you nearly cut your own finger!
$n tries to circle you, but you avoid $m!
$n tries to circle $N but nearly cuts $s own finger!
$N Screams out in agony as you circle around place $p in $S back!
Suddenly $n circles and stabs you in the back!
$n places $p in the back of $N, resulting in some strange noises and some blood!
$N sends you a look that makes you forget all about circling.
$n tries to circle you, but changes $s mind.
$n tries to circle $N, but changes $s mind.


Snoking
reach me at bfellows@silvernet.net
hope this works for you i like it
also I AM NOT RESPONSIBLE FOR ANYTHING THAT MAY HAPPEN IF YOU USE THIS!            

