diff options
author | shennetsind <ind@henn.et> | 2013-07-11 14:30:58 -0300 |
---|---|---|
committer | shennetsind <ind@henn.et> | 2013-07-11 14:30:58 -0300 |
commit | e3761a81ba4c941ba04a2b6b1f161a6e1402ebe9 (patch) | |
tree | 2621afd903332e09ff8459796c2a01c935ae4eb2 /src/map/pc.c | |
parent | 1708b62c12693cf55cdb97092ec7ec6692e8e272 (diff) | |
download | hercules-e3761a81ba4c941ba04a2b6b1f161a6e1402ebe9.tar.gz hercules-e3761a81ba4c941ba04a2b6b1f161a6e1402ebe9.tar.bz2 hercules-e3761a81ba4c941ba04a2b6b1f161a6e1402ebe9.tar.xz hercules-e3761a81ba4c941ba04a2b6b1f161a6e1402ebe9.zip |
Fix to Bug #7434
Fixing a ancient bug where placing a item from inventory to cart when cart is full would render such item un-clickable, same for when doing so from storage to cart.
Special Thanks to Yommy for all the data, jTynne for bringing this up.
http://hercules.ws/board/tracker/issue-7434-weightinability-to-click-item-issue/
Signed-off-by: shennetsind <ind@henn.et>
Diffstat (limited to 'src/map/pc.c')
-rw-r--r-- | src/map/pc.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/map/pc.c b/src/map/pc.c index 87e80c264..0bd593930 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -4432,7 +4432,7 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun if( !itemdb_cancartstore(item_data, pc->get_group_level(sd)) ) { // Check item trade restrictions [Skotlex] clif->message (sd->fd, msg_txt(264)); - return 1; + return 1;/* TODO: there is no official response to this? */ } if( (w = data->weight*amount) + sd->cart_weight > sd->cart_weight_max ) @@ -4450,7 +4450,7 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun if( i < MAX_CART ) {// item already in cart, stack it if( amount > MAX_AMOUNT - sd->status.cart[i].amount || ( data->stack.cart && amount > data->stack.amount - sd->status.cart[i].amount ) ) - return 1; // no room + return 2; // no room sd->status.cart[i].amount+=amount; clif->cart_additem(sd,i,amount,0); @@ -4459,7 +4459,7 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun {// item not stackable or not present, add it ARR_FIND( 0, MAX_CART, i, sd->status.cart[i].nameid == 0 ); if( i == MAX_CART ) - return 1; // no room + return 2; // no room memcpy(&sd->status.cart[i],item_data,sizeof(sd->status.cart[0])); sd->status.cart[i].amount=amount; @@ -4513,6 +4513,7 @@ int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type,e_log_ int pc_putitemtocart(struct map_session_data *sd,int idx,int amount) { struct item *item_data; + int flag; nullpo_ret(sd); @@ -4524,10 +4525,10 @@ int pc_putitemtocart(struct map_session_data *sd,int idx,int amount) if( item_data->nameid == 0 || amount < 1 || item_data->amount < amount || sd->state.vending ) return 1; - if( pc->cart_additem(sd,item_data,amount,LOG_TYPE_NONE) == 0 ) + if( (flag = pc->cart_additem(sd,item_data,amount,LOG_TYPE_NONE)) == 0 ) return pc->delitem(sd,idx,amount,0,5,LOG_TYPE_NONE); - return 1; + return flag; } /*========================================== @@ -4569,11 +4570,11 @@ int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount) if(item_data->nameid==0 || amount < 1 || item_data->amount<amount || sd->state.vending ) return 1; + if((flag = pc->additem(sd,item_data,amount,LOG_TYPE_NONE)) == 0) return pc->cart_delitem(sd,idx,amount,0,LOG_TYPE_NONE); - clif->additem(sd,0,0,flag); - return 1; + return flag; } /*========================================== |