ok, i'm writing a command like the one from aurura's obj snippet. i've got it compiling nicely, just crashes when used. here's what i have:
void do_odrop ( CHAR_DATA *ch, char *argument )
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char arg3[MAX_INPUT_LENGTH];
char arg4[MAX_INPUT_LENGTH];
int count, created, level;
OBJ_INDEX_DATA *pObjIndex;
OBJ_DATA *obj;
CHAR_DATA *rch;
AREA_DATA *parea;
ROOM_INDEX_DATA *pRoomIndex;
bool found = FALSE;
argument = one_argument(argument, arg1);
argument = one_argument(argument, arg2);
argument = one_argument(argument, arg3);
argument = one_argument(argument, arg4);
count = atoi( arg2 );
level = atoi (arg4 );
rch = get_char (ch);
if (!authorized (rch, "odrop"))
return;
if (arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' )
{
send_to_char( "Odrop <area> <# objs> <obj vnum> <level>\n\r", ch );
return;
}
for ( parea = area_first; parea; parea = parea->next )
if ( !str_cmp(parea->filename, arg1 ) )
{
found = TRUE;
break;
}
if ( !found )
{
send_to_char("Area not found.\n\r", ch );
return;
}
if (count > 5)
{
send_to_char( "You can only drop 5 items or less.\n\r", ch );
return;
}
if ( ( pObjIndex = get_obj_index( atoi(arg2) ) ) == NULL )
{
send_to_char("No object has that vnum.\n\r", ch );
}
for ( created=0; created < count; created++ )
{
if ( (pRoomIndex = get_room_index(number_range(parea->lvnum, parea->uvnum ))) == NULL )
{
--created;
continue;
}
if (!IS_SET( pRoomIndex->room_flags, ROOM_SAFE))
{
--created;
continue;
}
obj = create_object( pObjIndex, level);
obj_to_char(obj, ch);
}
send_to_char("You have placed your drop.\n\r", ch);
return;
}
it was trying to create obj but making it NULL and crashing.
any thoughts?
|