亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? clan.c

?? 打魔獸戰(zhàn)網(wǎng)的都知道他是什么
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */#define CLAN_INTERNAL_ACCESS#include "common/setup_before.h"#include <stdio.h>#ifdef HAVE_STDDEF_H# include <stddef.h>#else# ifndef NULL#  define NULL ((void *)0)# endif#endif#ifdef STDC_HEADERS# include <stdlib.h>#else# ifdef HAVE_MALLOC_H#  include <malloc.h># endif#endif#ifdef HAVE_STRING_H# include <string.h>#else# ifdef HAVE_STRINGS_H#  include <strings.h># endif#endif#include "compat/strrchr.h"#include "compat/strdup.h"#include "compat/strcasecmp.h"#include "compat/strncasecmp.h"#include "compat/pdir.h"#include <errno.h>#include "compat/strerror.h"#ifdef TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h>#else# ifdef HAVE_SYS_TIME_H#  include <sys/time.h># else#  include <time.h># endif#endif#ifdef HAVE_SYS_TYPES_H# include <sys/types.h>#endif#include "common/eventlog.h"#include "common/packet.h"#include "common/bnet_protocol.h"#include "common/tag.h"#include "common/util.h"#include "common/bnettime.h"#include "common/eventlog.h"#include "common/list.h"#include "common/proginfo.h"#include "common/bn_type.h"#include "common/xalloc.h"#include "connection.h"#include "anongame.h"#include "prefs.h"#include "friends.h"#include "game.h"#include "clan.h"#include "account.h"#include "channel.h"#include "anongame.h"#include "storage.h"#include "server.h"#include "compat/uint.h"#include "common/setup_after.h"static t_list *clanlist_head = NULL;int max_clanid = 0;/* callback function for storage use */static int _cb_load_clans(void *clan){    if (clanlist_add_clan(clan) < 0)    {	eventlog(eventlog_level_error, __FUNCTION__, "failed to add clan to clanlist");	return -1;    }    if (((t_clan *) clan)->clanid > max_clanid)	max_clanid = ((t_clan *) clan)->clanid;    return 0;}/*** Packet Management*/extern int clan_send_packet_to_online_members(t_clan * clan, t_packet * packet){    t_elem *curr;    if (!clan)    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clan");	return -1;    }    if (!packet)    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL packet");	return -1;    }    LIST_TRAVERSE(clan->members, curr)    {	t_clanmember *	member;	t_clienttag	clienttag;	t_connection *	conn;		if (!(member = elem_get_data(curr)))	{		eventlog(eventlog_level_error,__FUNCTION__,"got NULL elem in list");		continue;	}	if (!(conn = clanmember_get_conn(member)))		continue;				// not online			if (!(clienttag = conn_get_clienttag(conn)))	{		eventlog(eventlog_level_error,__FUNCTION__,"conn has NULL clienttag");		continue;	}	if ((clienttag !=  CLIENTTAG_WARCRAFT3_UINT ) && (clienttag != CLIENTTAG_WAR3XP_UINT))		continue;				// online but wrong client			conn_push_outqueue(conn, packet);    }    return 0;}extern int clan_send_status_window_on_create(t_clan * clan){    t_packet * rpacket;    t_elem *curr;    if (!(clan))    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clan");	return -1;    }    if ((rpacket = packet_create(packet_class_bnet)))    {	char channelname[10];	if (clan->clantag)	    sprintf(channelname, "Clan %c%c%c%c", (clan->clantag >> 24), (clan->clantag >> 16) & 0xff, (clan->clantag >> 8) & 0xff, clan->clantag & 0xff);	else	{	    sprintf(channelname, "Clans");	    eventlog(eventlog_level_error,__FUNCTION__,"clan has NULL clantag");	}	    	packet_set_size(rpacket, sizeof(t_server_w3xp_clan_clanack));	packet_set_type(rpacket, SERVER_W3XP_CLAN_CLANACK);	bn_byte_set(&rpacket->u.server_w3xp_clan_clanack.unknow1, 0);	bn_int_set(&rpacket->u.server_w3xp_clan_clanack.clantag, clan->clantag);		LIST_TRAVERSE(clan->members, curr)	{	    t_clanmember *	member;	    t_clienttag 	clienttag;	    t_connection *	conn;	    	    if (!(member = elem_get_data(curr)))	    {	    	eventlog(eventlog_level_error,__FUNCTION__,"got NULL elem in list");		continue;	    }	    if (!(conn = clanmember_get_conn(member)))	    	continue;			// not online;			    if (!(clienttag = conn_get_clienttag(conn)))	    {		eventlog(eventlog_level_error,__FUNCTION__,"conn has NULL clienttag");		continue;	    }	    if ((clienttag != CLIENTTAG_WARCRAFT3_UINT) && (clienttag != CLIENTTAG_WAR3XP_UINT))	    	continue;			// online but wrong client			    if (conn_get_channel(conn))	    {	        conn_update_w3_playerinfo(conn);	        channel_set_userflags(conn);	        if (conn_set_channel(conn, channelname) < 0)		    conn_set_channel(conn, CHANNEL_NAME_BANNED);	/* should not fail */	    }	    bn_byte_set(&rpacket->u.server_w3xp_clan_clanack.status, member->status);	    conn_push_outqueue(conn, rpacket);	}	packet_del_ref(rpacket);    }    return 0;}extern int clan_close_status_window_on_disband(t_clan * clan){    t_packet * rpacket;    t_elem *curr;    if (!(clan))    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL clan");	return -1;    }    if ((rpacket = packet_create(packet_class_bnet)))    {	packet_set_size(rpacket, sizeof(t_server_w3xp_clanquitnotify));	packet_set_type(rpacket, SERVER_W3XP_CLANQUITNOTIFY);	bn_byte_set(&rpacket->u.server_w3xp_clan_clanack.status, SERVER_W3XP_CLANQUITNOTIFY_STATUS_REMOVED_FROM_CLAN);	LIST_TRAVERSE(clan->members, curr)	{	    t_clanmember *	member;	    t_clienttag 	clienttag;	    t_connection *	conn;	    	    if (!(member = elem_get_data(curr)))	    {	    	eventlog(eventlog_level_error,__FUNCTION__,"got NULL elem in list");		continue;	    }	    if (!(conn = clanmember_get_conn(member)))	    	continue;			// not online;			    if (!(clienttag = conn_get_clienttag(conn)))	    {		eventlog(eventlog_level_error,__FUNCTION__,"conn has NULL clienttag");		continue;	    }	    if ((clienttag != CLIENTTAG_WARCRAFT3_UINT) && (clienttag != CLIENTTAG_WAR3XP_UINT))	    	continue;			// online but wrong client			    conn_push_outqueue(conn, rpacket);	    conn_update_w3_playerinfo(conn);	}	packet_del_ref(rpacket);    }    return 0;}extern int clan_send_status_window(t_connection * c){    t_packet * rpacket;    t_account *acc;    t_clanmember *member;    t_clienttag clienttag;    t_clan * clan;    if (!(acc = conn_get_account(c)))	return 0;    if (!(member = account_get_clanmember(acc)))    	return 0;    if (!(clan = member->clan))    {	eventlog(eventlog_level_error,__FUNCTION__,"member has NULL clan");	return -1;    }    if (!(clan->clantag))    {	eventlog(eventlog_level_error,__FUNCTION__,"clan has NULL clantag");	return -1;    }        if (!(clienttag = conn_get_clienttag(c)))    {	eventlog(eventlog_level_error,__FUNCTION__,"conn has NULL clienttag");	return -1;    }        if ((clienttag != CLIENTTAG_WARCRAFT3_UINT) && (clienttag != CLIENTTAG_WAR3XP_UINT))    	return 0;	    if ((rpacket = packet_create(packet_class_bnet)))    {	    packet_set_size(rpacket, sizeof(t_server_w3xp_clan_clanack));	    packet_set_type(rpacket, SERVER_W3XP_CLAN_CLANACK);	    bn_byte_set(&rpacket->u.server_w3xp_clan_clanack.unknow1, 0);	    bn_int_set(&rpacket->u.server_w3xp_clan_clanack.clantag, member->clan->clantag);	    bn_byte_set(&rpacket->u.server_w3xp_clan_clanack.status, member->status);	    conn_push_outqueue(c, rpacket);	    packet_del_ref(rpacket);    }    return 0;}extern int clan_close_status_window(t_connection * c){    t_packet * rpacket;    t_clienttag clienttag;    if (!(clienttag = conn_get_clienttag(c)))    {    	eventlog(eventlog_level_error,__FUNCTION__,"conn has NULL clienttag");	return -1;    }        if ((clienttag != CLIENTTAG_WARCRAFT3_UINT) && (clienttag != CLIENTTAG_WAR3XP_UINT))    	return 0;	    if ((rpacket = packet_create(packet_class_bnet)))    {	packet_set_size(rpacket, sizeof(t_server_w3xp_clanquitnotify));	packet_set_type(rpacket, SERVER_W3XP_CLANQUITNOTIFY);	bn_byte_set(&rpacket->u.server_w3xp_clanquitnotify.status, SERVER_W3XP_CLANQUITNOTIFY_STATUS_REMOVED_FROM_CLAN);	conn_push_outqueue(c, rpacket);	packet_del_ref(rpacket);    }    return 0;}extern int clan_send_memberlist(t_connection * c, t_packet const *const packet){    t_packet * rpacket;    t_elem *curr;    char const *username;    t_clanmember *member;    t_clan *clan;    t_account *account;    int count = 0;    char tmpstr[2];    const char *append_str;    if (!(account = conn_get_account(c)))	return -1;    if (!(clan = account_get_clan(account)))	return -1;    if ((rpacket = packet_create(packet_class_bnet)))    {    	t_account * memberacc;		packet_set_size(rpacket, sizeof(t_server_w3xp_clanmemberlist_reply));	packet_set_type(rpacket, SERVER_W3XP_CLANMEMBERLIST_REPLY);	bn_int_set(&rpacket->u.server_w3xp_clanmemberlist_reply.count, 	           bn_int_get(packet->u.client_w3xp_clanmemberlist_req.count));	LIST_TRAVERSE(clan->members, curr)	{	    if (!(member = elem_get_data(curr)))	    {		eventlog(eventlog_level_error, __FUNCTION__, "got NULL element in list");		continue;	    }	    if (!(memberacc = member->memberacc))	    {		eventlog(eventlog_level_error,__FUNCTION__,"member has NULL account");		continue;	    }	    username = account_get_name(memberacc);	    packet_append_string(rpacket, username);	    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, "");	    count++;	}	bn_byte_set(&rpacket->u.server_w3xp_clanmemberlist_reply.member_count, count);	conn_push_outqueue(c, rpacket);	packet_del_ref(rpacket);	return 0;    }    return -1;}extern int clan_save_motd_chg(t_connection * c, t_packet const *const packet){    t_account *account;    char const *motd;    int offset;    t_clan *clan;    if ((account = conn_get_account(c)) == NULL)	return -1;    if ((clan = account_get_clan(account)) == NULL)	return -1;    offset = sizeof(packet->u.client_w3xp_clan_motdchg);    motd = packet_get_str_const(packet, offset, 25);    eventlog(eventlog_level_trace, __FUNCTION__, "[%d] got W3XP_CLAN_MOTDCHG packet : %s", conn_get_socket(c), motd);    if (clan_set_motd(clan, motd) != 0)    {	eventlog(eventlog_level_error, __FUNCTION__, "Failed to set clan motd.");	return -1;    }    clan->modified = 1;    return 0;}extern int clan_send_motd_reply(t_connection * c, t_packet const *const packet){    t_packet * rpacket;    t_account *account;    t_clan *clan;    if ((account = conn_get_account(c)) == NULL)	return -1;    if ((clan = account_get_clan(account)) == NULL)	return -1;    if (clan->clan_motd == NULL)    {	eventlog(eventlog_level_error, __FUNCTION__, "Failed to get clan motd.");	return -1;    }    if ((rpacket = packet_create(packet_class_bnet)))    {	packet_set_size(rpacket, sizeof(t_server_w3xp_clan_motdreply));	packet_set_type(rpacket, SERVER_W3XP_CLAN_MOTDREPLY);	bn_int_set(&rpacket->u.server_w3xp_clan_motdreply.count, bn_int_get(packet->u.client_w3xp_clan_motdreq.count));	bn_int_set(&rpacket->u.server_w3xp_clan_motdreply.unknow1, SERVER_W3XP_CLAN_MOTDREPLY_UNKNOW1);	packet_append_string(rpacket, clan->clan_motd);	conn_push_outqueue(c, rpacket);	packet_del_ref(rpacket);    }    return 0;}/*** String / Function Management*/extern int clan_get_possible_member(t_connection * c, t_packet const *const packet){    t_packet * rpacket;    t_channel *channel;    t_connection *conn;    char const *username;    t_account * account;    int friend_count = 0;    int clantag;    clantag = bn_int_get(packet->u.client_w3xp_clan_createreq.clantag);    if ((rpacket = packet_create(packet_class_bnet)) == NULL)    {	return -1;    }    packet_set_size(rpacket, sizeof(t_server_w3xp_clan_createreply));    packet_set_type(rpacket, SERVER_W3XP_CLAN_CREATEREPLY);    bn_int_set(&rpacket->u.server_w3xp_clan_createreply.count, bn_int_get(packet->u.client_w3xp_clan_createreq.count));    if (clanlist_find_clan_by_clantag(clantag) != NULL)    {	bn_byte_set(&rpacket->u.server_w3xp_clan_createreply.check_result, SERVER_W3XP_CLAN_CREATEREPLY_CHECK_ALLREADY_IN_USE);	bn_byte_set(&rpacket->u.server_w3xp_clan_createreply.friend_count, 0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久免费| 日韩美女久久久| 成人黄色在线网站| 午夜一区二区三区视频| 欧美精品日韩一本| 色狠狠av一区二区三区| gogo大胆日本视频一区| 成人a级免费电影| 91精品国产91综合久久蜜臀| 制服视频三区第一页精品| 欧美日韩小视频| 欧美无人高清视频在线观看| 欧美亚洲动漫另类| 欧美极品少妇xxxxⅹ高跟鞋 | 视频一区视频二区中文字幕| 亚洲一区电影777| 亚洲成人激情综合网| 99视频国产精品| 国产欧美日韩一区二区三区在线观看| 国产视频在线观看一区二区三区| 中日韩av电影| 亚洲精品乱码久久久久久日本蜜臀| 伊人夜夜躁av伊人久久| 成人国产精品免费网站| 久久久久久久综合日本| 国产一区二区三区免费播放| 国产精品夜夜嗨| 欧洲生活片亚洲生活在线观看| 欧美日韩一级黄| 亚洲精品福利视频网站| 色综合久久久久综合体| 日韩精品一区二区三区蜜臀| 国产日产欧美一区二区三区| 国内精品国产成人国产三级粉色| 99国产欧美另类久久久精品| 日韩欧美高清dvd碟片| 蜜桃一区二区三区在线观看| 成人短视频下载| 国产精品麻豆一区二区| 91一区二区在线观看| 欧美不卡一区二区三区四区| 亚洲色图一区二区三区| 99re这里只有精品6| 亚洲美女屁股眼交3| 韩国女主播成人在线观看| 欧美电视剧在线观看完整版| 狠狠色狠狠色综合系列| 欧美韩日一区二区三区四区| 成人蜜臀av电影| 日韩午夜电影av| 亚洲一区二区三区不卡国产欧美| 欧美怡红院视频| 丝袜美腿亚洲色图| 精品国产精品网麻豆系列| 午夜视频一区在线观看| 日韩写真欧美这视频| 国产米奇在线777精品观看| 欧美极品少妇xxxxⅹ高跟鞋| 91黄色免费版| 性做久久久久久久久| 日韩情涩欧美日韩视频| 国产精品18久久久久| 欧美日韩精品专区| 亚洲三级电影网站| 欧美日韩欧美一区二区| 九一久久久久久| 欧美一卡二卡三卡| 成人综合婷婷国产精品久久| 亚洲精品日韩一| 欧美mv日韩mv国产网站| av在线不卡网| 日本不卡一区二区| 99国产精品一区| 日韩电影免费一区| 国产精品国模大尺度视频| 国产精品原创巨作av| 亚洲精品午夜久久久| 精品久久久久久久久久久久包黑料 | 欧美三级电影网站| 国产精品一区二区无线| 亚洲国产成人精品视频| 欧美色视频一区| 国精产品一区一区三区mba视频 | 国内精品视频666| 亚洲卡通欧美制服中文| xfplay精品久久| 粉嫩aⅴ一区二区三区四区五区| 欧美电影免费观看高清完整版在线| 不卡的电视剧免费网站有什么| 日韩成人av影视| 亚洲另类中文字| 国产网站一区二区| 欧美一级黄色录像| 欧美日韩国产首页在线观看| av在线不卡网| 国产99久久久国产精品免费看| 日本视频一区二区三区| 伊人开心综合网| 中文字幕一区二区三区av| 欧美在线观看18| 99视频精品在线| 高清国产一区二区| 国产精品自拍网站| 久草这里只有精品视频| 日欧美一区二区| 天天做天天摸天天爽国产一区| 亚洲蜜臀av乱码久久精品| 一区视频在线播放| 中文欧美字幕免费| 国产日产精品一区| 久久久久久久免费视频了| 久久久久久**毛片大全| 久久久久久久久岛国免费| 久久久亚洲精品石原莉奈| 26uuu精品一区二区| 精品成人一区二区三区| 日韩精品一区二区三区视频在线观看| 91精品综合久久久久久| 欧美精品乱码久久久久久| 欧美少妇bbb| 在线播放中文一区| 欧美精品一卡两卡| 日韩一区国产二区欧美三区| 欧美mv日韩mv亚洲| 国产亚洲一区二区三区四区| 日本一区二区免费在线观看视频| 国产欧美日韩综合精品一区二区| 国产丝袜在线精品| 中文字幕中文字幕一区| 亚洲女子a中天字幕| 亚洲一级二级三级在线免费观看| 亚洲成人精品一区| 久久成人免费网| 亚洲一区二区三区视频在线| 三级精品在线观看| 久久99精品国产.久久久久| 国产伦精品一区二区三区免费| 成人精品视频网站| 色先锋资源久久综合| 欧美日韩视频在线一区二区| 日韩欧美亚洲国产另类| 国产亚洲精品中文字幕| 日韩理论片一区二区| 性做久久久久久久免费看| 韩国三级中文字幕hd久久精品| 成人午夜电影久久影院| 91免费版pro下载短视频| 欧美日韩国产综合一区二区| www成人在线观看| 亚洲视频中文字幕| 首页综合国产亚洲丝袜| 国产伦精品一区二区三区视频青涩| 99久久精品国产一区二区三区| 精品视频123区在线观看| 久久九九全国免费| 一级精品视频在线观看宜春院| 中文字幕日韩精品一区| 亚洲国产成人av| 粉嫩高潮美女一区二区三区| 欧美性色黄大片| 欧美韩国日本不卡| 男女男精品网站| 色综合天天综合网天天看片| 成人app在线| 欧美精品三级在线观看| 中文字幕欧美日本乱码一线二线| 五月激情综合婷婷| k8久久久一区二区三区| 日韩一区二区免费高清| 亚洲美女电影在线| 国产在线一区二区| 欧美喷水一区二区| 综合欧美亚洲日本| 国产在线一区观看| 日韩色在线观看| 亚洲超碰97人人做人人爱| 成人午夜大片免费观看| 久久综合一区二区| 婷婷激情综合网| 色哟哟国产精品| 亚洲欧洲av另类| 丁香亚洲综合激情啪啪综合| 日韩午夜激情电影| 免费人成网站在线观看欧美高清| 91福利在线免费观看| 国产三级欧美三级日产三级99 | 欧美一区二区三区的| 亚洲一区二区三区影院| 色狠狠一区二区三区香蕉| 国产精品私人影院| 成人综合在线观看| 国产欧美视频一区二区| 国产成人三级在线观看| www久久精品| 韩国成人在线视频| 久久先锋资源网| 狠狠色狠狠色综合| 久久久国产精华| 成人午夜电影小说| 国产精品久久久久桃色tv|