⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clan.c

📁 打魔兽战网的都知道他是什么
💻 C
📖 第 1 页 / 共 3 页
字号:
	conn_push_outqueue(c, rpacket);	packet_del_ref(rpacket);	return 0;    }    if ((account = conn_get_account(c)) && (account_get_clan(account) != NULL || account_get_creating_clan(account) != NULL))    {	bn_byte_set(&rpacket->u.server_w3xp_clan_createreply.check_result, SERVER_W3XP_CLAN_CREATEREPLY_CHECK_EXCEPTION);	bn_byte_set(&rpacket->u.server_w3xp_clan_createreply.friend_count, 0);	conn_push_outqueue(c, rpacket);	packet_del_ref(rpacket);	return 0;    }    bn_byte_set(&rpacket->u.server_w3xp_clan_createreply.check_result, SERVER_W3XP_CLAN_CREATEREPLY_CHECK_OK);    channel = conn_get_channel(c);    if (channel_get_permanent(channel))    {	/* If not in a private channel, retreive number of mutual friend connected */	t_list *flist = account_get_friends(conn_get_account(c));	t_elem const *curr;	t_friend *fr;	LIST_TRAVERSE_CONST(flist, curr)	{	    if ((fr = elem_get_data(curr)) != NULL)	    {		t_account *fr_acc = friend_get_account(fr);		t_clienttag clienttag;		if (fr->mutual 		    && ((conn = connlist_find_connection_by_account(fr_acc)) != NULL) 		    && (conn_get_channel(conn) == channel) 		    && (!account_get_clan(fr_acc)) 		    && (!account_get_creating_clan(fr_acc)) 		    && (clienttag = conn_get_clienttag(conn)) 		    && ((clienttag == CLIENTTAG_WAR3XP_UINT) || (clienttag ==  CLIENTTAG_WARCRAFT3_UINT)) 		    && (username = account_get_name(fr_acc)))		{		    friend_count++;		    packet_append_string(rpacket, username);		}	    }	}    } else    {	/* If in a private channel, retreive all users in the channel */	for (conn = channel_get_first(channel); conn; conn = channel_get_next())	{	    t_account * acc;	    t_clienttag clienttag;	    if ((conn != c)		&& (acc = conn_get_account(conn))		&& (!account_get_clan(acc))		&& (!account_get_creating_clan(acc))		&& (clienttag = conn_get_clienttag(conn))		&& ((clienttag == CLIENTTAG_WAR3XP_UINT) || (clienttag ==  CLIENTTAG_WARCRAFT3_UINT))	        && (username = conn_get_username(conn)))	    {		friend_count++;		packet_append_string(rpacket, username);	    }	}    }    bn_byte_set(&rpacket->u.server_w3xp_clan_createreply.friend_count, friend_count);    conn_push_outqueue(c, rpacket);    packet_del_ref(rpacket);    return 0;}extern int clanmember_on_change_status(t_clanmember * member){    t_packet * rpacket;    if (member == NULL)    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clanmember");	return -1;    }    if (member->clan == NULL)    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clan");	return -1;    }    if ((rpacket = packet_create(packet_class_bnet)) != NULL)    {	char tmpstr[2];	const char *append_str;	packet_set_size(rpacket, sizeof(t_server_w3xp_clanmemberupdate));	packet_set_type(rpacket, SERVER_W3XP_CLANMEMBERUPDATE);	packet_append_string(rpacket, account_get_name(member->memberacc));	tmpstr[0] = member->status;	append_str = clanmember_get_online_status(member, &tmpstr[1]);	packet_append_data(rpacket, tmpstr, 2);	if (append_str)	    packet_append_string(rpacket, append_str);	else	    packet_append_string(rpacket, "");	clan_send_packet_to_online_members(member->clan, rpacket);	packet_del_ref(rpacket);    }    return 0;}extern int clanmember_on_change_status_by_connection(t_connection * conn){    t_packet * rpacket;    t_account *acc;    t_clanmember *member;    if (!(conn))    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL conn");	return -1;    }    if ((acc = conn_get_account(conn)) == NULL)	return -1;    if ((member = account_get_clanmember(acc)) == NULL)	return -1;    if (member->clan == NULL)	return -1;    if ((rpacket = packet_create(packet_class_bnet)) != NULL)    {	char tmpstr[2];	const char *append_str;	packet_set_size(rpacket, sizeof(t_server_w3xp_clanmemberupdate));	packet_set_type(rpacket, SERVER_W3XP_CLANMEMBERUPDATE);	packet_append_string(rpacket, account_get_name(acc));	tmpstr[0] = member->status;	append_str = clanmember_get_online_status_by_connection(conn, &tmpstr[1]);	packet_append_data(rpacket, tmpstr, 2);	if (append_str)	    packet_append_string(rpacket, append_str);	else	    packet_append_string(rpacket, "");	clan_send_packet_to_online_members(member->clan, rpacket);	packet_del_ref(rpacket);    }    return 0;}extern int clan_unload_members(t_clan * clan){    t_elem *curr;    t_clanmember *member;    if (clan->members)    {	LIST_TRAVERSE(clan->members, curr)	{	    if (!(member = elem_get_data(curr)))	    {		eventlog(eventlog_level_error, __FUNCTION__, "found NULL entry in list");		continue;	    }	    list_remove_elem(clan->members, &curr);	    xfree((void *) member);	}	if (list_destroy(clan->members) < 0)	    return -1;	clan->members = NULL;    }    return 0;}extern int clan_remove_all_members(t_clan * clan){    t_elem *curr;    t_clanmember *member;    if (clan->members)    {	LIST_TRAVERSE(clan->members, curr)	{	    if (!(member = elem_get_data(curr)))	    {		eventlog(eventlog_level_error, __FUNCTION__, "found NULL entry in list");		continue;	    }	    if (member->memberacc != NULL)		account_set_clanmember(member->memberacc, NULL);	    list_remove_elem(clan->members, &curr);	    xfree((void *) member);	}	if (list_destroy(clan->members) < 0)	    return -1;	clan->members = NULL;    }    return 0;}extern int clanlist_remove_clan(t_clan * clan){    t_elem * elem;    if (clan == NULL)    {	eventlog(eventlog_level_error, __FUNCTION__, "get NULL clan");	return -1;    }    if (list_remove_data(clanlist_head, clan, &elem) < 0)    {	eventlog(eventlog_level_error, __FUNCTION__, "could not delete clan entry");	return -1;    }    return 0;}extern int clan_remove(int clantag){    return storage->remove_clan(clantag);}extern int clan_save(t_clan * clan){    if (clan->created <= 0)    {	if (now - clan->creation_time > 120)	{	    clanlist_remove_clan(clan);	    clan_destroy(clan);	}	return 0;    }    storage->write_clan(clan);    clan->modified = 0;    return 0;}extern t_list *clanlist(void){    return clanlist_head;}extern int clanlist_add_clan(t_clan * clan){    if (!(clan))    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clan");	return -1;    }    if (!(clan->clanid))	clan->clanid = ++max_clanid;    list_append_data(clanlist_head, clan);    return clan->clanid;}int clanlist_load(void){    // make sure to unload previous clanlist before loading again    if (clanlist_head)	clanlist_unload();    clanlist_head = list_create();    storage->load_clans(_cb_load_clans);    return 0;}extern int clanlist_save(void){    t_elem *curr;    t_clan *clan;    if (clanlist_head)    {	LIST_TRAVERSE(clanlist_head, curr)	{	    if (!(clan = elem_get_data(curr)))	    {		eventlog(eventlog_level_error, __FUNCTION__, "found NULL entry in list");		continue;	    }	    if (clan->modified)		clan_save(clan);	}    }    return 0;}extern int clanlist_unload(void){    t_elem *curr;    t_clan *clan;    if (clanlist_head)    {	LIST_TRAVERSE(clanlist_head, curr)	{	    if (!(clan = elem_get_data(curr)))	    {		eventlog(eventlog_level_error, __FUNCTION__, "found NULL entry in list");		continue;	    }	    if (clan->clanname)		xfree((void *) clan->clanname);	    if (clan->clan_motd)		xfree((void *) clan->clan_motd);	    clan_unload_members(clan);	    xfree((void *) clan);	    list_remove_elem(clanlist_head, &curr);	}	if (list_destroy(clanlist_head) < 0)	    return -1;	clanlist_head = NULL;    }    return 0;}extern t_clan *clanlist_find_clan_by_clanid(int cid){    t_elem *curr;    t_clan *clan;    if (clanlist_head)    {	LIST_TRAVERSE(clanlist_head, curr)	{	    if (!(clan = elem_get_data(curr)))	    {		eventlog(eventlog_level_error, __FUNCTION__, "found NULL entry in list");		continue;	    }	    eventlog(eventlog_level_error, __FUNCTION__, "trace %d", clan->clanid);	    if (clan->created && (clan->clanid == cid))		return clan;	}    }    return NULL;}extern t_clan *clanlist_find_clan_by_clantag(int clantag){    t_elem *curr;    t_clan *clan;    if (clantag == 0)	return NULL;    if (clanlist_head)    {	LIST_TRAVERSE(clanlist_head, curr)	{	    if (!(clan = elem_get_data(curr)))	    {		eventlog(eventlog_level_error, __FUNCTION__, "found NULL entry in list");		continue;	    }	    if (clan->created && (clan->clantag == clantag))		return clan;	}    }    return NULL;}extern t_clanmember *clan_find_member(t_clan * clan, t_account * memberacc){    t_clanmember *member;    t_elem *curr;    if (!(clan))    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clan");	return NULL;    }    if (!(clan->members))    {	eventlog(eventlog_level_error, __FUNCTION__, "found NULL clan->members");	return NULL;    }    LIST_TRAVERSE(clan->members, curr)    {	if (!(member = elem_get_data(curr)))	{	    eventlog(eventlog_level_error, __FUNCTION__, "got NULL element in list");	    return NULL;	}	if (member->memberacc == memberacc)	    return member;    }    return NULL;}extern t_clanmember *clan_find_member_by_name(t_clan * clan, char const *membername){    t_clanmember *member;    t_elem *curr;    if (!(clan))    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clan");	return NULL;    }    if (!(clan->members))    {	eventlog(eventlog_level_error, __FUNCTION__, "found NULL clan->members");	return NULL;    }    LIST_TRAVERSE(clan->members, curr)    {	if (!(member = elem_get_data(curr)))	{	    eventlog(eventlog_level_error, __FUNCTION__, "got NULL element in list");	    return NULL;	}	if (strcasecmp(account_get_name(member->memberacc), membername) == 0)	    return member;    }    return NULL;}extern t_clanmember *clan_find_member_by_uid(t_clan * clan, unsigned int memberuid){    t_clanmember *member;    t_elem *curr;    if (!(clan))    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clan");	return NULL;    }    if (!(clan->members))    {	eventlog(eventlog_level_error, __FUNCTION__, "found NULL clan->members");	return NULL;    }    LIST_TRAVERSE(clan->members, curr)    {	if (!(member = elem_get_data(curr)))	{	    eventlog(eventlog_level_error, __FUNCTION__, "got NULL element in list");	    return NULL;	}	if (account_get_uid(member->memberacc) == memberuid)	    return member;    }    return NULL;}extern t_account *clanmember_get_account(t_clanmember * member){    if (!(member))    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clanmember");	return NULL;    }    return (t_account *) member->memberacc;}extern int clanmember_set_account(t_clanmember * member, t_account * memberacc){    if (!(member))    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clanmember");	return -1;    }    member->memberacc = memberacc;    return 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -