do_odrop

Posted by Ithildin on Sat 18 Sep 2004 06:58 AM — 3 posts, 16,705 views.

USA #0
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?

Canada #1
Well, from what I can see, you probably what a return here:
    if ( ( pObjIndex = get_obj_index( atoi(arg2) ) ) == NULL )

    {

            send_to_char("No object has that vnum.\n\r", ch );

    }


Its probably sending that message, or queueing it to be sent, and then crashing because its NULL later.
USA #2
yea, that was the problem. thanks. it was like 4 in the morning when doing that...heh