This code donated by LordROM:

ok here is what you need to have aff2 working properly on a ROM2.4 mud:
merc.h:
------

add this to char_data and also to mob_index_data: 

long affected2_by; 

add this after the same thing but IS_AFFECTED (will look simular): 

#define IS_AFFECTED2(ch, sn)    (IS_SET((ch)->affected2_by, (sn)))

right after affect_bit_name add:

char *  affect2_bit_name args( ( int vector ) );

then add the following after your AFF_ flags:
/*
 * Bits for 'affected2_by'.
 * Used in #MOBILES.
 */
your flags go here... you can use #define AFF_.. no need for AFF2
and finally add #define TO_AFFECTS2     6
to the where definitions..

handler.c:
----------
in void affect_check right after the case TO_AFFECTS check add:
                case TO_AFFECTS2:
                    SET_BIT(ch->affected2_by, vector);
                    break;
keep checking all function that has TO_AFFECTS and add a check for 
TO_AFFECTS2.
right after the function affect_bit_name add:
/*
 * Return ascii name of an affect bit vector.
 */                 
char *affect2_bit_name( int vector )
{
    static char buf[512];
    buf[0] = '\0';
/* your flag declarations here */
/* if (vector & AFF_TEST_FLAG) strcat(buf, " test_flag"); */
    return ( buf[0] != '\0' ) ? buf+1 : "none";
}
after doing and modifying all the affect checks we finally move to act_wiz.c:

act_wiz.c:
----------
in do_mstat right after if (affected_by) check add:
    if (affected2_by)
    {
         sprintf(buf, "Also affected by %s\n\r",
            affect2_bit_name(victim->affected2_by) );
        add_buf(buffer,buf);
    }


that is it, whenever u wanna add a new aff2 flag add it to merc.h then 
make sure your magic2.c calls IS_AFFECTED2 example:
void spell_test_spell( int sn, int level, CHAR_DATA *ch, void *vo, int target)
{
       CHAR_DATA *victim = (CHAR_DATA *) vo;
       AFFECT_DATA af;
       
       if (IS_AFFECTED2(victim, AFF_TEST_FLAG) )
       {
          if (victim == ch)
           send_to_char("You can already sense a test flag in you.\n\r",ch);
          else
           act("$N can already sense a test flag.",ch, NULL, victim, TO_CHAR);
          return;
       }
    af.where     = TO_AFFECTS2;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.modifier  = 0;
    af.location  = APPLY_NONE;
    af.bitvector = AFF_TEST_FLAG;
   affect_to_char( victim, &af );
    send_to_char( "Your eyes flickers.\n\r", victim );
    if ( ch != victim )
        send_to_char( "Ok.\n\r", ch );
    return;
}
    
That is all you need, if there is a problem, feel free to email me back..

Lordrom
------
new-world.mclv.net 4000
Nevermore Mud