// ギルドのEXPキャッシュをinter鯖にフラッシュする int guild_payexp_timer_sub(DBKey dataid, void *data, va_list ap) { int i; struct guild_expcache *c; struct guild *g; c = (struct guild_expcache *)data; if ( (g = guild_search(c->guild_id)) == NULL || (i = guild_getindex(g, c->account_id, c->char_id)) < 0 ) { ers_free(expcache_ers, data); return 0; } if (g->member[i].exp > UINT64_MAX - c->exp) g->member[i].exp = UINT64_MAX; else g->member[i].exp+= c->exp; intif_guild_change_memberinfo(g->guild_id,c->account_id,c->char_id, GMI_EXP,&g->member[i].exp,sizeof(g->member[i].exp)); c->exp=0; ers_free(expcache_ers, data); return 0; }
int auth_db_final(DBKey k,void *d,va_list ap) { struct auth_node *node=(struct auth_node*)d; if (node->char_dat) aFree(node->char_dat); if (node->sd) aFree(node->sd); ers_free(auth_db_ers, node); return 0; }
/** * @see DBApply */ int auth_db_final(DBKey key, DBData *data, va_list ap) { struct auth_node *node = db_data2ptr(data); if (node->char_dat) aFree(node->char_dat); if (node->sd) aFree(node->sd); ers_free(auth_db_ers, node); return 0; }
bool chrif_auth_delete(int account_id, int char_id, enum sd_state state) { struct auth_node *node; if ((node=chrif_auth_check(account_id, char_id, state))) { int fd = node->sd?node->sd->fd:node->fd; if (session[fd] && session[fd]->session_data == node->sd) session[fd]->session_data = NULL; if (node->char_dat) aFree(node->char_dat); if (node->sd) aFree(node->sd); ers_free(auth_db_ers, node); idb_remove(auth_db,account_id); return true; } return false; }
static int guild_expcache_db_final(DBKey key,void *data,va_list ap) { ers_free(expcache_ers, data); return 0; }