From: stu <sprice@ihug.co.nz>
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 <object> flags <flag> [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