From 24ced6fcef1a95a2abd0c60b4fe90cbbc3aea268 Mon Sep 17 00:00:00 2001 From: shennetsind Date: Mon, 9 Sep 2013 17:50:58 -0300 Subject: 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 --- src/map/clif.c | 59 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 25 deletions(-) (limited to 'src/map') 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); -- cgit v1.2.3-60-g2f50