struct item_data* itemdb_searchname(const char *str) { struct item_data *item = NULL; numdb_foreach(item_db,itemdb_searchname_sub,str,&item); return item; }
int mercdb_txt_sync(void) { FILE *fp; int lock; if( !merc_db ) return 1; if( (fp = lock_fopen(merc_txt, &lock)) == NULL ) { printf("mercdb_txt_sync: can't write [%s] !!! data is lost !!!\n", merc_txt); return 1; } numdb_foreach(merc_db, mercdb_txt_sync_sub, fp); lock_fclose(fp, merc_txt, &lock); #ifdef TXT_JOURNAL if( merc_journal_enable ) { // コミットしたのでジャーナルを新規作成する journal_final( &merc_journal ); journal_create( &merc_journal, sizeof(struct mmo_mercstatus), merc_journal_cache, merc_journal_file ); } #endif return 0; }
int storagedb_txt_sync(void) { FILE *fp; int lock; if( !storage_db ) return 1; if( (fp = lock_fopen(storage_txt, &lock)) == NULL ) { printf("storagedb_txt_sync: can't write [%s] !!! data is lost !!!\n", storage_txt); return 1; } numdb_foreach(storage_db, storagedb_txt_sync_sub, fp); lock_fclose(fp, storage_txt, &lock); #ifdef TXT_JOURNAL if( storage_journal_enable ) { // コミットしたのでジャーナルを新規作成する journal_final( &storage_journal ); journal_create( &storage_journal, sizeof(struct storage), storage_journal_cache, storage_journal_file ); } #endif return 0; }
struct party* party_searchname(char *str) { struct party *p = NULL; numdb_foreach(party_db, party_searchname_sub, str, &p); return p; }
void itemdb_debug_txt(void) { FILE *fp = fopen("itemdebug.txt","wt"); if(fp) { numdb_foreach(item_db,itemdb_debug_sub,fp); fclose(fp); } }
/*========================================== * id_db内の全てにfuncを実行 *------------------------------------------ */ int map_foreachiddb(int (*func)(void*,void*,va_list),...) { va_list ap; va_start(ap,func); numdb_foreach(id_db,func,ap); va_end(ap); return 0; }
/*========================================== * Saves all scdata to the given filename. *------------------------------------------ */ void inter_status_save() { FILE *fp; int lock; if ((fp = lock_fopen(scdata_txt, &lock)) == NULL) { ShowError("int_status: impossivel escrever [%s] !!! arquivo corrompido !!!\n", scdata_txt); return; } numdb_foreach(scdata_db, inter_status_save_sub, fp); lock_fclose(fp,scdata_txt, &lock); }
// パーティーデータのセーブ int inter_party_save() { FILE *fp; if( (fp=fopen(party_txt,"w"))==NULL ){ printf("int_party: cant write [%s] !!! data is lost !!!\n",party_txt); return 1; } numdb_foreach(party_db,inter_party_save_sub,fp); fclose(fp); // printf("int_party: %s saved.\n",party_txt); return 0; }
//--------------------------------------------------------- // 倉庫データを書き込む int inter_storage_save() { FILE *fp; int lock; if( (fp=lock_fopen(storage_txt,&lock))==NULL ){ ShowError("int_storage: cant write [%s] !!! data is lost !!!\n",storage_txt); return 1; } numdb_foreach(storage_db,inter_storage_save_sub,fp); lock_fclose(fp,storage_txt,&lock); // printf("int_storage: %s saved.\n",storage_txt); return 0; }
// パーティーデータのセーブ int inter_party_save() { FILE *fp; int lock; if( (fp=lock_fopen(party_txt,&lock))==NULL ){ printf("int_party: cant write [%s] !!! data is lost !!!\n",party_txt); return 1; } numdb_foreach(party_db,inter_party_save_sub,fp); // fprintf(fp,"%d\t%%newid%%\n",party_newid); lock_fclose(fp,party_txt,&lock); // printf("int_party: %s saved.\n",party_txt); return 0; }
int check_ttl_wisdata() { unsigned long tick = gettick(); int i; do { wis_delnum = 0; numdb_foreach(wis_db, check_ttl_wisdata_sub, tick); for(i = 0; i < wis_delnum; i++) { struct WisData *wd = (struct WisData*)numdb_search(wis_db, wis_dellist[i]); ShowWarning("inter: wis data id=%d time out : from %s to %s\n", wd->id, wd->src, wd->dst); // removed. not send information after a timeout. Just no answer for the player //mapif_wis_end(wd, 1); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target numdb_erase(wis_db, wd->id); aFree(wd); } } while(wis_delnum >= WISDELLIST_MAX); return 0; }
// 位置やHP通知 int party_send_xy_timer(int tid,unsigned int tick,int id,int data) { numdb_foreach(party_db,party_send_xy_timer_sub,tick); return 0; }
/*========================================== * @idsearch *------------------------------------------ */ int itemdb_idsearch(const int fd, const char *str, int (*func)(void*, void*, va_list)) { return numdb_foreach(item_db, func, str, fd); }
// �L�����̋������Ȃ����`�F�b�N void party_check_conflict(int party_id, int account_id, char *nick) { numdb_foreach(party_db, party_check_conflict_sub, party_id, account_id, nick); return; }
void itemdb_reload(void) { // free up all item scripts first numdb_foreach(item_db, itemdb_final_sub, 0); itemdb_read(); }