viewing paste Unknown #5847 | C

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
/*==========================================
 * countitem(nameID)
 *  returns number of items in inventory
 *==========================================
 * countitem2(nameID,Identified,Refine,Attribute,Card0,Card1,Card2,Card3)   [Lupus]
 *  returns number of items that meet the conditions
 *------------------------------------------*/
BUILDIN_FUNC(countitem)
{
    int nameid, i;
    int count = 0;
    struct item_data* id = NULL;
    struct script_data* data;
 
    TBL_PC* sd = script_rid2sd(st);
    if (!sd) {
        script_pushint(st,0);
        return 0;
    }
 
    data = script_getdata(st,2);
    get_val(st, data);  // convert into value in case of a variable
 
    if( data_isstring(data) ) // item name
        id = itemdb_searchname(conv_str(st, data));
    else // item id
        id = itemdb_exists(conv_num(st, data));
 
    if( id == NULL ) {
        ShowError("buildin_countitem: Invalid item '%s'.\n", script_getstr(st,2));  // returns string, regardless of what it was
        script_pushint(st,0);
        return 1;
    }
 
    nameid = id->nameid;
 
    if(!strcmpi(script_getfuncname(st),"countitem")) {
        for(i = 0; i < MAX_INVENTORY; i++)
            if(sd->status.inventory[i].nameid == nameid)
                count += sd->status.inventory[i].amount;
    } else {
        int iden, ref, attr, c1, c2, c3, c4;
        iden = script_getnum(st,3);
        ref  = script_getnum(st,4);
        attr = script_getnum(st,5);
        c1 = (short)script_getnum(st,6);
        c2 = (short)script_getnum(st,7);
        c3 = (short)script_getnum(st,8);
        c4 = (short)script_getnum(st,9);
 
        for(i = 0; i < MAX_INVENTORY; i++)
            if (sd->status.inventory[i].nameid > 0 && sd->inventory_data[i] != NULL &&
                sd->status.inventory[i].amount > 0 && sd->status.inventory[i].nameid == nameid &&
                sd->status.inventory[i].identify == iden && sd->status.inventory[i].refine == ref &&
                sd->status.inventory[i].attribute == attr && sd->status.inventory[i].card[0] == c1 &&
                sd->status.inventory[i].card[1] == c2 && sd->status.inventory[i].card[2] == c3 &&
                sd->status.inventory[i].card[3] == c4
            )
                count += sd->status.inventory[i].amount;
    }
 
    script_pushint(st,count);
    return 0;
}
Viewed 548 times, submitted by Guest.