From: stu Subject: complete guide to adding new object flags :) Warning long message :) umm well i made my extra object flags called extra_flags2 :) int extra_flags2 in the structure one object and object index data etc define all the extra bits etc.. #define ITEM_ANTI_NEWCLASS BV00 etc add the stuff in act_obj.c i think it is to see whether a class can wear this or not in build.c i added this char * const o_flags2 [] = { "antiwarlock","antipaladin","antininja","rare","antiaugurer","antiranger","a ntimortal","r8","r9","r10" ,"r11","r12","r13","r14","r15","r16","r17","r18","r19","r20","r21","r22","r23" ,"r24","r25","r26","r27","r28","r29","r30","r31" }; int get_oflag2( char *flag ) { int x; for ( x = 0; x < 32; x++ ) if ( !str_cmp( flag, o_flags2[x] ) ) return x; return -1; } in oset.. if ( !str_cmp( arg2, "flags2" ) ) { if ( !can_omodify( ch, obj ) ) return; if ( !argument || argument[0] == '\0' ) { send_to_char( "Usage: oset flags [flag]...\n\r", ch ); return; } while ( argument[0] != '\0' ) { argument = one_argument( argument, arg3 ); value = get_oflag2( arg3 ); value2 = get_oflag( arg3 ); if ( value < 0 || value > 31 ) { ch_printf( ch, "Unknown flag: %s\n\r", arg3 ); return; } else { TOGGLE_BIT(obj->extra_flags2, 1 << value); if ( 1 << value2 == ITEM_PROTOTYPE ) obj->pIndexData->extra_flags2 = obj->extra_flags2; } } if ( IS_OBJ_STAT( obj, ITEM_PROTOTYPE ) ) obj->pIndexData->extra_flags2 = obj->extra_flags2; return; } in... handler.c char *extra_bit_name2( int extra_flags2 ) { static char buf[512]; buf[0] = '\0'; if ( extra_flags2 & ITEM_ANTI_WARLOCK ) strcat( buf, " anti-warlock" ); if ( extra_flags2 & ITEM_ANTI_PALADIN ) strcat( buf, " anti-paladin" ); if ( extra_flags2 & ITEM_ANTI_NINJA ) strcat( buf, " anti-ninja" ); if ( extra_flags2 & ITEM_RARE ) strcat( buf, " rare" ); if ( extra_flags2 & ITEM_ANTI_AUGURER ) strcat( buf, " anti-augurer" ); if ( extra_flags2 & ITEM_ANTI_RANGER ) strcat( buf, " anti-ranger" ); if ( extra_flags2 & ITEM_ANTI_MORTAL ) strcat( buf, " anti-mortal"); return ( buf[0] != '\0' ) ? buf+1 : "none"; } in void clean_obj( OBJ_INDEX_DATA *obj ) obj->extra_flags2 = 0; in clone_object clone->extra_flags2 = obj->extra_flags2; in group_object && obj1->extra_flags2 == obj2->extra_flags2 in db.c in create_object obj->extra_flags2 = pObjIndex->extra_flags2; im make_object pObjIndex->extra_flags2 = 0; in load_objects... x1=x2=x3=x4=x5=0; sscanf( ln, "%d %d %d %d %d", &x1, &x2, &x3, &x4 , &x5); pObjIndex->item_type = x1; pObjIndex->extra_flags = x2; pObjIndex->extra_flags2 = x3; pObjIndex->wear_flags = x4; pObjIndex->layers = x5; ok but heres the thing... dont change this loading part first.. cause if u do it will look for data in the area files that dont exist.. so go back to build.c add something like this if ( pObjIndex->layers ) fprintf( fpout, "%d %d %d %d %d\n", pObjIndex->item_type, pObjIndex->extra_flags, pObjIndex->extra_flags2, pObjIndex->wear_flags, pObjIndex->layers ); else fprintf( fpout, "%d %d %d %d\n", pObjIndex->item_type, pObjIndex->extra_flags, pObjIndex->extra_flags2, pObjIndex->wear_flags ); then compile it... compile it without changing db.c to read the extra data field yet ok now u wanna go thru and foldarea on every area u have.. this will write out the extra field for extra_flags2... u may wanna backup the areas first incase ok after u have resaved every area. halt the mud, edit db.c to above to read in the new data now it will be read and writing to the areas.. then u gotta edit save.c to write the new data to chrs, pretty easy.. umm and u prolly wanna add stuff to ostat in act_wiz.c so u can see the new fields etc i also added stuff to the identify spell so they could see the new flags.. I think i covered everything :) umm hope that helped... write back if u have any probs.. stu