summaryrefslogtreecommitdiff
path: root/src/map/itemdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/itemdb.c')
-rw-r--r--src/map/itemdb.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index 56b1182b7..ddae6b38a 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -228,7 +228,16 @@ static void* create_item_data(DBKey key, va_list args) {
*/
struct item_data* itemdb_load(int nameid)
{
- return idb_ensure(item_db,nameid,create_item_data);
+ struct item_data *id = idb_ensure(item_db,nameid,create_item_data);
+ if (id == &dummy_item)
+ { //Remove dummy_item, replace by real data.
+ DBKey key;
+ key.i = nameid;
+ idb_remove(item_db,nameid);
+ id = create_item_data(key, NULL);
+ idb_put(item_db,nameid,id);
+ }
+ return id;
}
static void* return_dummy_data(DBKey key, va_list args) {
@@ -1193,7 +1202,7 @@ static int itemdb_final_sub (DBKey key,void *data,va_list ap)
void itemdb_reload(void)
{
// free up all item scripts first
- item_db->clear(item_db, itemdb_final_sub, 0);
+ item_db->foreach(item_db, itemdb_final_sub, 0);
itemdb_read();
}