diff options
author | shennetsind <ind@henn.et> | 2013-09-09 17:50:58 -0300 |
---|---|---|
committer | shennetsind <ind@henn.et> | 2013-09-09 17:50:58 -0300 |
commit | 24ced6fcef1a95a2abd0c60b4fe90cbbc3aea268 (patch) | |
tree | f8c81547351c116b141910e49433311a6dbf876f | |
parent | ae850bdefd7d9ecfecdb20d6e5803896fad00dfd (diff) | |
download | hercules-24ced6fcef1a95a2abd0c60b4fe90cbbc3aea268.tar.gz hercules-24ced6fcef1a95a2abd0c60b4fe90cbbc3aea268.tar.bz2 hercules-24ced6fcef1a95a2abd0c60b4fe90cbbc3aea268.tar.xz hercules-24ced6fcef1a95a2abd0c60b4fe90cbbc3aea268.zip |
Fixed Bug #7631
having an empty category in the cash shop would lead to the item list duplicating itself on every map change (client fault), added a warning when parsing the file with a empty category, and the creation of a dummy apple to that category (priced at 999).
Special Thanks to Tepoo for all the information.
http://hercules.ws/board/tracker/issue-7631-cashshop-itemslist-increases-by-every-warpmapchange/
Signed-off-by: shennetsind <ind@henn.et>
-rw-r--r-- | src/map/clif.c | 59 |
1 files changed, 34 insertions, 25 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 218e088f1..4ad4f266b 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -17165,36 +17165,45 @@ void clif_cashshop_db(void) { if( (cat = config_setting_get_member(cats, entry_name)) != NULL ) { int item_count = config_setting_length(cat); - for(k = 0; k < item_count; k++) { - config_setting_t *entry = config_setting_get_elem(cat,k); - const char *name = config_setting_name(entry); - int price = config_setting_get_int(entry); - struct item_data * data = NULL; + if( item_count == 0 ) { + ShowWarning("cashshop_db: category '%s' is empty! adding dull apple!\n", entry_name); + RECREATE(clif->cs.data[i], struct hCSData *, ++clif->cs.item_count[i]); + CREATE(clif->cs.data[i][ clif->cs.item_count[i] - 1 ], struct hCSData , 1); - if( price < 1 ) { - ShowWarning("cashshop_db: unsupported price '%d' for entry named '%s' in category '%s'\n", price, name, entry_name); - continue; - } - - if( name[0] == 'I' && name[1] == 'D' && strlen(name) <= 7 ) { - if( !( data = itemdb->exists(atoi(name+2))) ) { - ShowWarning("cashshop_db: unknown item id '%s' in category '%s'\n", name+2, entry_name); + clif->cs.data[i][ clif->cs.item_count[i] - 1 ]->id = 512; + clif->cs.data[i][ clif->cs.item_count[i] - 1 ]->price = 999; + } else { + for(k = 0; k < item_count; k++) { + config_setting_t *entry = config_setting_get_elem(cat,k); + const char *name = config_setting_name(entry); + int price = config_setting_get_int(entry); + struct item_data * data = NULL; + + if( price < 1 ) { + ShowWarning("cashshop_db: unsupported price '%d' for entry named '%s' in category '%s'\n", price, name, entry_name); continue; } - } else { - if( !( data = itemdb->search_name(name) ) ) { - ShowWarning("cashshop_db: unknown item name '%s' in category '%s'\n", name, entry_name); - continue; + + if( name[0] == 'I' && name[1] == 'D' && strlen(name) <= 7 ) { + if( !( data = itemdb->exists(atoi(name+2))) ) { + ShowWarning("cashshop_db: unknown item id '%s' in category '%s'\n", name+2, entry_name); + continue; + } + } else { + if( !( data = itemdb->search_name(name) ) ) { + ShowWarning("cashshop_db: unknown item name '%s' in category '%s'\n", name, entry_name); + continue; + } } + + + RECREATE(clif->cs.data[i], struct hCSData *, ++clif->cs.item_count[i]); + CREATE(clif->cs.data[i][ clif->cs.item_count[i] - 1 ], struct hCSData , 1); + + clif->cs.data[i][ clif->cs.item_count[i] - 1 ]->id = data->nameid; + clif->cs.data[i][ clif->cs.item_count[i] - 1 ]->price = price; + item_count_t++; } - - - RECREATE(clif->cs.data[i], struct hCSData *, ++clif->cs.item_count[i]); - CREATE(clif->cs.data[i][ clif->cs.item_count[i] - 1 ], struct hCSData , 1); - - clif->cs.data[i][ clif->cs.item_count[i] - 1 ]->id = data->nameid; - clif->cs.data[i][ clif->cs.item_count[i] - 1 ]->price = price; - item_count_t++; } } else { ShowError("cashshop_db: category '%s' (%d) not found!!\n",entry_name,i); |