#define PAX(ch) \
  if (ROOM_FLAGGED( (ch)->in_room, ROOM_PEACEFUL)) { \
    send_to_char("This room just has such a peaceful, easy feeling...\r\n", (ch));\
    return;\
  } 

void perform_disarm( struct char_data *ch, struct char_data *vict, int prob )
{
  struct obj_data *obj;
  
  PAX(ch);
  if (!pk_allowed)
  {
    if (!IS_NPC(vict))
    {
      send_to_char( "No puedes desarmar a otros players.\r\n", ch );
      return;
    }
  }
  
  if (GET_EQ(vict, WEAR_WIELD))
  {
    if (GET_LEVEL(vict) >= LVL_IMMORT && GET_LEVEL(ch) < LVL_IMPL)
    {
       send_to_char( "No... a EL nop.\r\n", ch );
       return;
    }
    if (GET_POS(vict) > POS_STUNNED && !FIGHTING(vict)) {
      set_fighting(vict, ch);
      if (MOB_FLAGGED(vict, MOB_MEMORY) && !IS_NPC(ch) &&
	  (GET_LEVEL(ch) < LVL_IMMORT))
	remember(vict, ch);
    }
    if (prob)
    {
      obj = unequip_char(vict, WEAR_WIELD);
      obj_to_room( obj, ch->in_room);
      send_to_char(CCRED(vict, C_CMP), vict );
      act( "$N te ha desarmado!", FALSE, vict, 0, ch, TO_CHAR );
      send_to_char(CCNRM(vict, C_CMP), vict );
      act( "$N ha desarmado a $n y $p vuela por los aires!", FALSE, vict, obj, ch, TO_ROOM );
      act( "Desarmas a $N y $p vuela por los aires!", FALSE, ch, obj, vict, TO_CHAR );
    }
    else
    {
      act("Fallas en tu intento!", FALSE, ch, 0, 0, TO_CHAR );
    }
  }
  else
  {
    send_to_char( "Pero si no tiene ningun arma!\r\n", ch );
  }
}


ACMD(do_disarm)
{
  struct char_data *vict;
  int percent, prob;

  one_argument(argument, arg);
  

  if (!(vict = get_char_room_vis(ch, arg))) {
    if (FIGHTING(ch)) {
      vict = FIGHTING(ch);
    } else {
      send_to_char("Desarmar a quien?\r\n", ch);
      return;
    }
  }
  if (vict == ch) {
    send_to_char("Beh.. por que no pruebas con REMOVE?\r\n", ch);
    return;
  }
  if (!GET_EQ(ch, WEAR_WIELD)) {
    send_to_char("Necesitas esgrimir un arma para que puedas desarmar a alguien.\r\n", ch);
    return;
  }
  percent = number(1, 101);	/* 101% is a complete failure */
  prob = GET_SKILL(ch, SKILL_DISARM);
  prob >>= 1;

  if (percent > prob) {
    perform_disarm(ch, vict, FALSE);
  } else {
    perform_disarm(ch, vict, TRUE);
    WAIT_STATE(vict, PULSE_VIOLENCE);
  }
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
}

    Source: geocities.com/timessquare/castle/4515

               ( geocities.com/timessquare/castle)                   ( geocities.com/timessquare)