diff --git a/Changelog.txt b/Changelog.txt index e3a203d4cb..f31222fe33 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,6 @@ Date Added 12/24 + * Fixed item-dup bug in storage and cart [MouseJstr] * @skilltree was looking outside of the particular class of the char to see if they could do a skill [MouseJstr] * Fixed a calc_skill_tree bug where too many skills were diff --git a/Dev/bugs.txt b/Dev/bugs.txt index ec45649b5d..36409cbe46 100644 --- a/Dev/bugs.txt +++ b/Dev/bugs.txt @@ -55,17 +55,14 @@ Assigned: N/A Progress: 0% Problem: Item duping bug in storage... -Assigned: N/A -Progress: 0% +Assigned: MouseJstr +Progress: 100% Let's say you have 200 arrows and 100 Rosiotti arrow, you'll put 100 and 50 in storage And you should end when you log back in with 100 of each on you and 100 and 50 in storage Gain 50 Repeat - Lupus: heh i fixid similiar bug in DELITEM script command. i think it's the same bug in other function - so i'm in charge - Problem: ~40+ players connected.. and soon can't re-connect, they can enter password, but never see "select character" screen. Assigned: N/A Progress: 0% @@ -150,5 +147,5 @@ Progress: 0% Problem: When you have UNNAMED Arrows and Named Arrows in the storage and take some arrows then it change amount of other items. It happens because server doesn't recognize Named and Unnamed Stockable items (Elemental Gems, Iron, Steel, Holy Water, Arrows) -Assigned: N/A -Progress: 0% +Assigned: MouseJstr +Progress: 100% diff --git a/src/map/map.c b/src/map/map.c index 0150926d72..55718a37dd 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -2476,3 +2476,15 @@ int do_init(int argc, char *argv[]) { return 0; } + +int compare_item(struct item *a, struct item *b) { + return ( + (a->nameid == b->nameid) && + (a->identify == b->identify) && + (a->refine == b->refine) && + (a->attribute == b->attribute) && + (a->card[0] == b->card[0]) && + (a->card[1] == b->card[1]) && + (a->card[2] == b->card[2]) && + (a->card[3] == b->card[3])); +} diff --git a/src/map/map.h b/src/map/map.h index 1c95653414..9d8a0b1940 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -695,6 +695,7 @@ void map_deliddb(struct block_list *bl); int map_foreachiddb(int (*)(void*,void*,va_list),...); void map_addnickdb(struct map_session_data *); struct map_session_data * map_nick2sd(char*); +int compare_item(struct item *a, struct item *b); // gat関連 int map_getcell(int,int,int); diff --git a/src/map/pc.c b/src/map/pc.c index 896a905fbc..897b968619 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -3213,9 +3213,7 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount) if(!itemdb_isequip2(data)){ // ? 備品ではないので、?所有品なら個?のみ?化させる for(i=0;istatus.inventory[i].nameid == item_data->nameid && - sd->status.inventory[i].card[0] == item_data->card[0] && sd->status.inventory[i].card[1] == item_data->card[1] && - sd->status.inventory[i].card[2] == item_data->card[2] && sd->status.inventory[i].card[3] == item_data->card[3]) { + if(compare_item(&sd->status.inventory[i], item_data)) { if(sd->status.inventory[i].amount+amount > MAX_AMOUNT) return 5; sd->status.inventory[i].amount+=amount; @@ -3450,9 +3448,7 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun if(!itemdb_isequip2(data)){ // ? 備品ではないので、?所有品なら個?のみ?化させる for(i=0;istatus.cart[i].nameid==item_data->nameid && - sd->status.cart[i].card[0] == item_data->card[0] && sd->status.cart[i].card[1] == item_data->card[1] && - sd->status.cart[i].card[2] == item_data->card[2] && sd->status.cart[i].card[3] == item_data->card[3]){ + if(compare_item(&sd->status.cart[i], item_data)) { if(sd->status.cart[i].amount+amount > MAX_AMOUNT) return 1; sd->status.cart[i].amount+=amount; diff --git a/src/map/storage.c b/src/map/storage.c index eb9da15396..bc97b13902 100644 --- a/src/map/storage.c +++ b/src/map/storage.c @@ -144,12 +144,7 @@ int storage_additem(struct map_session_data *sd,struct storage *stor,struct item if(!itemdb_isequip2(data)){ // 装備品ではないので、既所有品なら個数のみ変化させる for(i=0;istorage[i].nameid == item_data->nameid && - stor->storage[i].identify == item_data->identify && - stor->storage[i].refine == item_data->refine && - stor->storage[i].attribute == item_data->attribute && - stor->storage[i].card[0] == item_data->card[0] && stor->storage[i].card[1] == item_data->card[1] && - stor->storage[i].card[2] == item_data->card[2] && stor->storage[i].card[3] == item_data->card[3]){ + if( compare_item (&stor->storage[i], item_data)) { if(stor->storage[i].amount+amount > MAX_AMOUNT) return 1; stor->storage[i].amount+=amount; @@ -434,9 +429,7 @@ int guild_storage_additem(struct map_session_data *sd,struct guild_storage *stor if(!itemdb_isequip2(data)){ // 装備品ではないので、既所有品なら個数のみ変化させる for(i=0;istorage[i].nameid == item_data->nameid && - stor->storage[i].card[0] == item_data->card[0] && stor->storage[i].card[1] == item_data->card[1] && - stor->storage[i].card[2] == item_data->card[2] && stor->storage[i].card[3] == item_data->card[3]){ + if(compare_item(&stor->storage[i], item_data)) { if(stor->storage[i].amount+amount > MAX_AMOUNT) return 1; stor->storage[i].amount+=amount;