Ejemplo n.º 1
0
// ギルドの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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
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;
}
Ejemplo n.º 5
0
static int guild_expcache_db_final(DBKey key,void *data,va_list ap)
{
	ers_free(expcache_ers, data);
	return 0;
}