void itemdb_reload(void) { struct s_mapiterator* iter; struct map_session_data* sd; int i; itemdb_save_serials(); // Store lastest serials // clear the previous itemdb data for( i = 0; i < ARRAYLENGTH(itemdb_array); ++i ) if( itemdb_array[i] ) destroy_item_data(itemdb_array[i], 1); itemdb_other->clear(itemdb_other, itemdb_final_sub); memset(itemdb_array, 0, sizeof(itemdb_array)); // read new data itemdb_read(); // readjust itemdb pointer cache for each player iter = mapit_geteachpc(); for( sd = (struct map_session_data*)mapit_first(iter); mapit_exists(iter); sd = (struct map_session_data*)mapit_next(iter) ) { memset(sd->item_delay, 0, sizeof(sd->item_delay)); // reset item delays pc_setinventorydata(sd); } mapit_free(iter); }
static int script_autosave_mapreg(int tid, unsigned int tick, int id, intptr_t data) { if( mapreg_dirty ) script_save_mapreg(); itemdb_save_serials(); return 0; }
void do_final_itemdb(void) { int i; itemdb_save_serials(); // Save serials for( i = 0; i < ARRAYLENGTH(itemdb_array); ++i ) if( itemdb_array[i] ) destroy_item_data(itemdb_array[i], 1); itemdb_other->destroy(itemdb_other, itemdb_final_sub); destroy_item_data(&dummy_item, 0); }