📄 clan.c
字号:
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 + -