/*
 * Code type: fix
 * Code base: Rom 2.4b6
 * Multi-file: no
 * Level: novice (yet it took me this long to finally just do it, hehe)
 * Author: Vorlin
 * Date: 11/5/02
 *
 * Disclaimer: I've just done this now and put a minor amount of claim to
 * it although I'm sure it's been done elsewhere. If you see a better way
 * to do this, whether it's through a function or something, please let me
 * know as I'm trying to better things in stock rom just for practice.
 *
 * Instructions: replace do_outfit with this version. You'll see the checks
 * that prevent a newbie from 'outfit;rem all;outfit;rem all;...'. The obj = NULL
 * is me being paranoid although cleanup is done. Please keep credits intact if 
 * used. Thanks.
 */

/* 
   equips a character - checks for inventory before equipping but only
   after the object is created --Vorlin
 */
void do_outfit ( CHAR_DATA *ch, char *argument )
{
    OBJ_DATA *obj;
    int i,sn,vnum;
    char buf[MAX_STRING_LENGTH];

    if (ch->level > 5 || IS_NPC(ch))
    {
        send_to_char("Find it yourself!\n\r",ch);
        return;
    }

    /* Bug fix for outfit --Vorlin */
    if (ch->carry_number + 4 > can_carry_n(ch)) {
        send_to_char
            ("You're carrying too much, try dropping some items.\n\r", ch);
        return;
    }

    if ((obj = get_eq_char(ch, WEAR_LIGHT)) == NULL)
    {
        obj = create_object( get_obj_index(OBJ_VNUM_SCHOOL_BANNER), 0 );

        if (get_obj_carry(ch, obj->name, ch) == NULL) {
                obj->cost = 0;
                obj_to_char( obj, ch );
                equip_char( ch, obj, WEAR_LIGHT );
        } else {
                obj = NULL;
        }
    }

    if ((obj = get_eq_char(ch, WEAR_BODY)) == NULL)
    {
        obj = create_object( get_obj_index(OBJ_VNUM_SCHOOL_VEST), 0 );

        if (get_obj_carry(ch, obj->name, ch) == NULL) {
                obj->cost = 0;
                obj_to_char( obj, ch );
                equip_char( ch, obj, WEAR_BODY );
        } else {
                obj = NULL;
        }
    }

    /* do the weapon thing */
    if ((obj = get_eq_char(ch,WEAR_WIELD)) == NULL)
    {
        sn = 0;
        vnum = OBJ_VNUM_SCHOOL_SWORD; /* just in case! */

        for (i = 0; weapon_table[i].name != NULL; i++)
        {
            if (ch->pcdata->learned[sn] <
                ch->pcdata->learned[*weapon_table[i].gsn])
            {
                sn = *weapon_table[i].gsn;
                vnum = weapon_table[i].vnum;
            }
        }

        obj = create_object(get_obj_index(vnum),0);

        if (get_obj_carry(ch, obj->name, ch) == NULL) {
                obj_to_char(obj,ch);
                equip_char(ch,obj,WEAR_WIELD);
        } else {
                obj = NULL;
        }
    }

    if (((obj = get_eq_char(ch,WEAR_WIELD)) == NULL
    ||   !IS_WEAPON_STAT(obj,WEAPON_TWO_HANDS))
    &&  (obj = get_eq_char( ch, WEAR_SHIELD ) ) == NULL )
    {
        obj = create_object( get_obj_index(OBJ_VNUM_SCHOOL_SHIELD), 0 );

        if (get_obj_carry(ch, obj->name, ch) == NULL) {
                obj->cost = 0;
                obj_to_char( obj, ch );
                equip_char( ch, obj, WEAR_SHIELD );
        } else {
                obj = NULL;
        }
    }

    sprintf(buf, "The gods of `&%s`` have equipped you.\n\r", MUD_NAME);
    send_to_char(buf, ch);
}