viewing paste ra_inv2stor | 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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
/*==========================================
 * inv2stor,item_id,item_nb,attribute,refine,identify,c0,c1,c2,c3{,charid} [Lighta]
 * interface pour pour la fonction de storage storage_storageadd
 * transferant un item de l'inventaire au storage
 * return
 *  -1 : invalid item
 *   0 : fail
 *   1 : success
 *------------------------------------------*/
BUILDIN_FUNC(inv2stor) {
        TBL_PC * sd = ((script_hasdata(st, 11)) ? map_id2sd(script_getnum(st, 11)) : script_rid2sd(st));
        int i, j, ok=0;
        struct item_data* item_data;
        struct item tmp_it;
        int item_id = script_getnum(st, 2);
        int item_nb = script_getnum(st, 3);
        int item_add=0;
 
        nullpo_ret(sd);
 
        if ((item_data = itemdb_exists(item_id)) != NULL) {
                tmp_it.nameid = item_data->nameid;
                tmp_it.identify = script_getnum(st, 4);
                tmp_it.refine = script_getnum(st, 5);
                tmp_it.attribute = script_getnum(st, 6);
                tmp_it.card[0] = script_getnum(st, 7);
                tmp_it.card[1] = script_getnum(st, 8);
                tmp_it.card[2] = script_getnum(st, 9);
                tmp_it.card[3] = script_getnum(st, 10);
 
                if(!itemdb_isstackable2(item_data)){
                        item_add = 1;
                }
                else
                        item_add = item_nb;
                for(j=0; j<item_nb; j+=item_add){
                        ARR_FIND(0, MAX_INVENTORY, i, ((&sd->status.inventory[i] != NULL)
                                && compare_item(&sd->status.inventory[i], &tmp_it, 1)));
                        if (i < MAX_INVENTORY) ok = storage_storageadd(sd, i, item_add);
                }
                script_pushint(st, ok);
                storage_storageclose(sd);
                return ok;
        }
        script_pushint(st, -1);
        return 0;
}
 
/* =========================================
 * getStorageItem2 <item id>,<amount>,,<refine>,<attribut>,<c1>,<c2>,<c3>,<c3>{,<account ID>};
 * getStorageItem2 "<item name>",<amount>,,<refine>,<attribut>,<c1>,<c2>,<c3>,<c3>{,<account ID>};
 *  [Lighta]
 * ----------------------------------------- */
BUILDIN_FUNC(getstorageitem2){
        TBL_PC * sd;
        int nameid=0,amount,i;
        int ref,attr,c1,c2,c3,c4;
        struct script_data *data;
        struct item_data * item_data;
        struct item item_tmp;
 
        data=script_getdata(st,2);
        amount=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);
 
        if( script_hasdata(st,10) )
                sd=map_id2sd(script_getnum(st,10)); // <Account ID>
        else
                sd=script_rid2sd(st); // Attached player
 
        if( sd == NULL ) // no target
                return 0;
 
        item_data = script_data2nameid(st,data);
        if(item_data != NULL && sd != NULL){
                item_data=itemdb_exists(nameid);
                if (item_data == NULL)
                        return -1;
                if(item_data->type==IT_WEAPON || item_data->type==IT_ARMOR){
                        if(ref > MAX_REFINE) ref = MAX_REFINE;
                }
                else if(item_data->type==IT_PETEGG) {
                        ref = 0;
                }
                else {
                        ref = attr = 0;
                }
                memset(&item_tmp,0,sizeof(item_tmp));
                item_tmp.nameid=nameid;
                item_tmp.identify = 1;
                item_tmp.refine=ref;
                item_tmp.attribute=attr;
                item_tmp.card[0]=(short)c1;
                item_tmp.card[1]=(short)c2;
                item_tmp.card[2]=(short)c3;
                item_tmp.card[3]=(short)c4;
 
                if(amount <= 0 || (!itemdb_isstackable2(item_data) && amount > 10) || (itemdb_isstackable2(item_data) && amount > MAX_AMOUNT))
                        amount = 1;
                if(!itemdb_isstackable2(item_data) && amount > 1){
                        for(i = 0; i < amount; i++)
                                storage_additem2(sd,&item_tmp,amount);
                } else {
                        storage_additem2(sd,&item_tmp,amount);
                        clif_storageclose(sd);
                        sd->state.storage_flag = 0;
                }
                log_pick_pc(sd, LOG_TYPE_NPC, amount, &item_tmp);
        }
        return 0;
}
Viewed 394 times, submitted by lighta.