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

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

?? d2charfile.c

?? 打魔獸戰(zhàn)網(wǎng)的都知道他是什么
?? C
?? 第 1 頁 / 共 2 頁
字號:
	    }	}	xfree(file);		eventlog(eventlog_level_info,__FUNCTION__,"character %s(*%s) deleted",charname,account);	return 0;}extern int d2char_get_summary(char const * account, char const * charname,t_d2charinfo_summary * charinfo){	t_d2charinfo_file	data;	ASSERT(account,-1);	ASSERT(charname,-1);	ASSERT(charinfo,-1);	if (d2charinfo_load(account, charname, &data)<0) {		eventlog(eventlog_level_error,__FUNCTION__,"error loading character %s(*%s)",charname,account);		return -1;	}	memcpy(charinfo,&data.summary,sizeof(data.summary));	eventlog(eventlog_level_info,__FUNCTION__,"character %s difficulty %d expansion %d hardcore %d dead %d loaded",charname,		d2charinfo_get_difficulty(charinfo), d2charinfo_get_expansion(charinfo),		d2charinfo_get_hardcore(charinfo),d2charinfo_get_dead(charinfo));	return 0;}extern int d2charinfo_load(char const * account, char const * charname, t_d2charinfo_file * data){	char			* file;	int			size, ladder_time;	if (d2char_check_charname(charname)<0) {		eventlog(eventlog_level_error,__FUNCTION__,"got bad character name \"%s\"",charname);		return -1;	}	if (d2char_check_acctname(account)<0) {		eventlog(eventlog_level_error,__FUNCTION__,"got bad account name \"%s\"",account);		return -1;	}	file=xmalloc(strlen(prefs_get_charinfo_dir())+1+strlen(account)+1+strlen(charname)+1);	d2char_get_infofile_name(file,account,charname);	size=sizeof(t_d2charinfo_file);	if (file_read(file,data,&size)<0) {		eventlog(eventlog_level_error,__FUNCTION__,"error loading character file %s",file);		xfree(file);		return -1;	}	if (size!=sizeof(t_d2charinfo_file)) {		eventlog(eventlog_level_error,__FUNCTION__,"got bad charinfo file %s (length %d)",charname,size);		xfree(file);		return -1;	}	d2char_portrait_init(&data->portrait);	if (d2charinfo_check(data) < 0) {		xfree(file);		return -1;	}	if (!(charstatus_get_ladder(bn_int_get(data->summary.charstatus)))) {		bn_byte_set(&data->portrait.ladder, D2CHARINFO_PORTRAIT_PADBYTE);		xfree(file);		return 0;	}	ladder_time = prefs_get_ladder_start_time();	if ((ladder_time > 0) && bn_int_get(data->header.create_time) < ladder_time) {		char			buffer[MAX_SAVEFILE_SIZE];		unsigned int		status_offset;		unsigned char		status;		unsigned int		charstatus;		unsigned int		size;		unsigned int		version;		unsigned int		checksum;		FILE			* fp;		eventlog(eventlog_level_info,__FUNCTION__,"%s(*%s) was created in old ladder season, set to non-ladder", charname, account);		if (!(fp=fopen(file,"wb"))) {			eventlog(eventlog_level_error,__FUNCTION__,"charinfo file \"%s\" does not exist for account \"%s\"",file,account);			xfree(file);			return 0;		}		xfree(file);		charstatus = bn_int_get(data->summary.charstatus);		charstatus_set_ladder(charstatus, 0);		bn_int_set(&data->summary.charstatus, charstatus);		status=bn_byte_get(data->portrait.status);		charstatus_set_ladder(status,0);		bn_byte_set(&data->portrait.status,status);		bn_byte_set(&data->portrait.ladder, D2CHARINFO_PORTRAIT_PADBYTE);		if (fwrite(data,1,sizeof(*data),fp)!=sizeof(*data)) {			eventlog(eventlog_level_error,__FUNCTION__,"error writing charinfo file for character \"%s\" (fwrite: %s)",charname,pstrerror(errno));			fclose(fp);			return 0;}		fclose(fp);		file=xmalloc(strlen(prefs_get_charsave_dir())+1+strlen(charname)+1);		d2char_get_savefile_name(file,charname);		if (!(fp=fopen(file,"rb+"))) {			eventlog(eventlog_level_error,__FUNCTION__,"could not open charsave file \"%s\" for reading and writing (fopen: %s)",file,pstrerror(errno));			xfree(file);			return 0;		}		xfree(file);		size=fread(buffer,1,sizeof(buffer),fp);		if (!feof(fp)) {			eventlog(eventlog_level_error,__FUNCTION__,"error reading charsave file for character \"%s\" (fread: %s)",charname,pstrerror(errno));			fclose(fp);			return 0;		}		version=bn_int_get(buffer+D2CHARSAVE_VERSION_OFFSET);		if (version>=0x5C) {			status_offset=D2CHARSAVE_STATUS_OFFSET_109;		} else {			status_offset=D2CHARSAVE_STATUS_OFFSET;		}		status=bn_byte_get(buffer+status_offset);		charstatus_set_ladder(status,0);		/* FIXME: shouldn't abuse bn_*_set()... what's the best way to do this? */		bn_byte_set((bn_byte *)(buffer+status_offset),status);		if (version>=0x5C) {			checksum=d2charsave_checksum(buffer,size,D2CHARSAVE_CHECKSUM_OFFSET);			bn_int_set((bn_int *)(buffer+D2CHARSAVE_CHECKSUM_OFFSET),checksum);		}		fseek(fp,0,SEEK_SET);		if (fwrite(buffer,1,size,fp)!=size) {			eventlog(eventlog_level_error,__FUNCTION__,"error writing charsave file for character %s (fwrite: %s)",charname,pstrerror(errno));			fclose(fp);			return 0;		}		fclose(fp);	} else {		bn_byte_set(&data->portrait.ladder, 1);		xfree(file);	}	return 0;}extern int d2charinfo_check(t_d2charinfo_file * data){	ASSERT(data,-1);	if (bn_int_get(data->header.magicword) != D2CHARINFO_MAGICWORD) {		eventlog(eventlog_level_error,__FUNCTION__,"info data check failed (header 0x%08X)",bn_int_get(data->header.magicword));		return -1;	}	if (bn_int_get(data->header.version) != D2CHARINFO_VERSION) {		eventlog(eventlog_level_error,__FUNCTION__,"info data check failed (version 0x%08X)",bn_int_get(data->header.version));		return -1;	}	return 0;}extern int d2char_portrait_init(t_d2charinfo_portrait * portrait){	unsigned int		i;	unsigned char	* p;	p=(unsigned char *)portrait;	for (i=0; i<sizeof(t_d2charinfo_portrait); i++) {		if (!p[i]) p[i]=D2CHARINFO_PORTRAIT_PADBYTE;	}	p[i-1]='\0';	return 0;}extern int d2char_get_portrait(char const * account,char const * charname, t_d2charinfo_portrait * portrait){	t_d2charinfo_file	data;	ASSERT(charname,-1);	ASSERT(account,-1);	ASSERT(portrait,-1);	if (d2charinfo_load(account, charname, &data)<0) {		eventlog(eventlog_level_error,__FUNCTION__,"error loading character %s(*%s)",charname,account);		return -1;	}	strcpy((char *)portrait,(char *)&data.portrait);	return 0;}extern int d2char_check_charname(char const * name){	unsigned int	i;	unsigned char	ch;		if (!name) return -1;	if (!isalpha((int)name[0])) return -1;	for (i=1; i<=MAX_CHARNAME_LEN; i++) {		ch=name[i];		if (ch=='\0') break;		if (isalpha(ch)) continue;		if (ch=='-') continue;		if (ch=='_') continue;		if (ch=='.') continue;		return -1;	}	if (i >= MIN_NAME_LEN || i<= MAX_CHARNAME_LEN) return 0;	return -1;}extern int d2char_check_acctname(char const * name){	unsigned int	i;	unsigned char	ch;		if (!name) return -1;	if (!isalnum((int)name[0])) return -1;	for (i=1; i<=MAX_CHARNAME_LEN; i++) {		ch=name[i];		if (ch=='\0') break;		if (isalnum(ch)) continue;		if (strchr(prefs_get_d2cs_account_allowed_symbols(),ch)) continue;		return -1;	}	if (i >= MIN_NAME_LEN || i<= MAX_ACCTNAME_LEN) return 0;	return -1;}extern int d2char_get_savefile_name(char * filename, char const * charname){	char	tmpchar[MAX_CHARNAME_LEN];	ASSERT(filename,-1);	ASSERT(charname,-1);	strncpy(tmpchar,charname,sizeof(tmpchar));	tmpchar[sizeof(tmpchar)-1]='\0';	strtolower(tmpchar);	sprintf(filename,"%s/%s",prefs_get_charsave_dir(),tmpchar);	return 0;}extern int d2char_get_bak_savefile_name(char * filename, char const * charname){	char	tmpchar[MAX_CHARNAME_LEN];	ASSERT(filename,-1);	ASSERT(charname,-1);	strncpy(tmpchar,charname,sizeof(tmpchar));	tmpchar[sizeof(tmpchar)-1]='\0';	strtolower(tmpchar);	sprintf(filename,"%s/%s",prefs_get_bak_charsave_dir(),tmpchar);	return 0;}extern int d2char_get_infodir_name(char * filename, char const * account){	char	tmpacct[MAX_ACCTNAME_LEN];	ASSERT(filename,-1);	ASSERT(account,-1);	strncpy(tmpacct,account,sizeof(tmpacct));	tmpacct[sizeof(tmpacct)-1]='\0';	strtolower(tmpacct);	sprintf(filename,"%s/%s",prefs_get_charinfo_dir(),tmpacct);	return 0;}extern int d2char_get_infofile_name(char * filename, char const * account, char const * charname){	char	tmpchar[MAX_CHARNAME_LEN];	char	tmpacct[MAX_ACCTNAME_LEN];	ASSERT(filename,-1);	ASSERT(account,-1);	ASSERT(charname,-1);	strncpy(tmpchar,charname,sizeof(tmpchar));	tmpchar[sizeof(tmpchar)-1]='\0';	strtolower(tmpchar);	strncpy(tmpacct,account,sizeof(tmpacct));	tmpchar[sizeof(tmpacct)-1]='\0';	strtolower(tmpacct);	sprintf(filename,"%s/%s/%s",prefs_get_charinfo_dir(),tmpacct,tmpchar);	return 0;}extern int d2char_get_bak_infofile_name(char * filename, char const * account, char const * charname){	char	tmpchar[MAX_CHARNAME_LEN];	char	tmpacct[MAX_ACCTNAME_LEN];	ASSERT(filename,-1);	ASSERT(account,-1);	ASSERT(charname,-1);	strncpy(tmpchar,charname,sizeof(tmpchar));	tmpchar[sizeof(tmpchar)-1]='\0';	strtolower(tmpchar);	strncpy(tmpacct,account,sizeof(tmpacct));	tmpchar[sizeof(tmpacct)-1]='\0';	strtolower(tmpacct);	sprintf(filename,"%s/%s/%s",prefs_get_bak_charinfo_dir(),tmpacct,tmpchar);	return 0;}extern unsigned int d2charinfo_get_ladder(t_d2charinfo_summary const * charinfo){	ASSERT(charinfo,0);	return charstatus_get_ladder(bn_int_get(charinfo->charstatus));}extern unsigned int d2charinfo_get_expansion(t_d2charinfo_summary const * charinfo){	ASSERT(charinfo,0);	return charstatus_get_expansion(bn_int_get(charinfo->charstatus));}extern unsigned int d2charinfo_get_level(t_d2charinfo_summary const * charinfo){	ASSERT(charinfo,0);	return bn_int_get(charinfo->charlevel);}extern unsigned int d2charinfo_get_class(t_d2charinfo_summary const * charinfo){	ASSERT(charinfo,0);	return bn_int_get(charinfo->charclass);}extern unsigned int d2charinfo_get_hardcore(t_d2charinfo_summary const * charinfo){	ASSERT(charinfo,0);	return charstatus_get_hardcore(bn_int_get(charinfo->charstatus));}extern unsigned int d2charinfo_get_dead(t_d2charinfo_summary const * charinfo){	ASSERT(charinfo,0);	return charstatus_get_dead(bn_int_get(charinfo->charstatus));}extern unsigned int d2charinfo_get_difficulty(t_d2charinfo_summary const * charinfo){	unsigned int	difficulty;	ASSERT(charinfo,0);	if (d2charinfo_get_expansion(charinfo)) {		difficulty=charstatus_get_difficulty_expansion(bn_int_get(charinfo->charstatus));	} else {		difficulty=charstatus_get_difficulty(bn_int_get(charinfo->charstatus));	}	if (difficulty>2) difficulty=2;	return difficulty;}/* those functions should move to util.c */extern int file_read(char const * filename, void * data, unsigned int * size){	FILE		* fp;	unsigned int	n;	ASSERT(filename,-1);	ASSERT(data,-1);	ASSERT(size,-1);	if (!(fp=fopen(filename,"rb"))) {		eventlog(eventlog_level_error,__FUNCTION__,"could not open file \"%s\" for reading (fopen: %s)",filename,pstrerror(errno));		return -1;	}		fseek(fp,0,SEEK_END); /* FIXME: check return value */	n=ftell(fp);	n=min(*size,n);	rewind(fp); /* FIXME: check return value */		if (fread(data,1,n,fp)!=n) {		eventlog(eventlog_level_error,__FUNCTION__,"error reading file \"%s\" (fread: %s)",filename,pstrerror(errno));		fclose(fp);		return -1;	}	if (fclose(fp)<0) {		eventlog(eventlog_level_error,__FUNCTION__,"could not close file \"%s\" after reading (fclose: %s)",filename,pstrerror(errno));		return -1;	}	*size=n;	return 0;}extern int file_write(char const * filename, void * data, unsigned int size){	FILE		* fp;	ASSERT(filename,-1);	ASSERT(data,-1);	ASSERT(size,-1);	if (!(fp=fopen(filename,"wb"))) {		eventlog(eventlog_level_error,__FUNCTION__,"could not open file \"%s\" for writing (fopen: %s)",filename,pstrerror(errno));		return -1;	}	if (fwrite(data,1,size,fp)!=size) {		eventlog(eventlog_level_error,__FUNCTION__,"error writing file \"%s\" (fwrite: %s)",filename,pstrerror(errno));		fclose(fp);		return -1;	}	if (fclose(fp)<0) {		eventlog(eventlog_level_error,__FUNCTION__,"could not close file \"%s\" after writing (fclose: %s)",filename,pstrerror(errno));		return -1;	}	return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩视频在线观看一区二区三区 | 亚洲6080在线| 国产98色在线|日韩| 欧美日韩成人高清| 亚洲男人的天堂在线aⅴ视频| 国产在线国偷精品产拍免费yy| 91成人在线免费观看| 国产午夜精品久久久久久久| 免费看日韩精品| 欧美日韩在线不卡| 亚洲免费在线看| 成人18视频日本| 国产午夜精品久久久久久久| 久热成人在线视频| 欧美美女视频在线观看| 一区二区三区精品在线| 99国产麻豆精品| 国产精品国产a| 丁香一区二区三区| 精品欧美乱码久久久久久1区2区 | 国产精品欧美精品| 国产成人在线电影| 精品久久99ma| 美女网站视频久久| 日韩女优电影在线观看| 日韩成人dvd| 在线电影院国产精品| 亚洲一区二区三区四区的| 91丨porny丨国产| 亚洲男人的天堂在线aⅴ视频| 91在线高清观看| 亚洲欧洲另类国产综合| 不卡区在线中文字幕| 国产精品色噜噜| 成人激情动漫在线观看| 国产精品毛片久久久久久久| 国产成人精品亚洲午夜麻豆| 久久综合狠狠综合久久综合88 | 久久99精品国产麻豆不卡| 日韩欧美成人午夜| 九色综合国产一区二区三区| 国产日韩av一区| 国产精品白丝jk黑袜喷水| 久久九九全国免费| 成人av网址在线| 亚洲视频香蕉人妖| 日本久久电影网| 天堂一区二区在线| 日韩一区二区三区在线视频| 精品一区二区国语对白| 国产亚洲精品免费| 成人激情午夜影院| 亚洲精品视频在线观看免费| 在线观看免费成人| 日韩av在线播放中文字幕| 26uuu色噜噜精品一区二区| 国产成人免费视频网站| 中文字幕一区二| 欧美性一二三区| 蜜臀久久久久久久| 国产无人区一区二区三区| 91在线观看美女| 三级一区在线视频先锋| 精品国产自在久精品国产| 国产精品18久久久久久久久 | 亚洲欧洲精品一区二区精品久久久 | 成人黄页毛片网站| 亚洲另类中文字| 欧美一区二区三区男人的天堂| 精品一区二区三区的国产在线播放 | 欧洲国产伦久久久久久久| 日韩电影在线一区| 久久精品一区二区三区不卡| av亚洲精华国产精华| 午夜视频在线观看一区| 精品福利av导航| 91在线免费视频观看| 视频在线在亚洲| 国产无一区二区| 欧美性受xxxx黑人xyx性爽| 久久国产精品露脸对白| 国产精品国产三级国产| 91精品国产综合久久久久久漫画| 国产精品综合网| 亚洲国产综合色| 国产亚洲欧美一区在线观看| 日本精品视频一区二区三区| 蜜桃一区二区三区四区| 国产精品国产三级国产普通话三级 | 国产丶欧美丶日本不卡视频| 一区二区三区在线看| 精品裸体舞一区二区三区| 91丨九色丨尤物| 韩国成人在线视频| 一区二区三区四区精品在线视频| 日韩精品影音先锋| 在线免费观看日韩欧美| 国产很黄免费观看久久| 亚洲成在人线免费| 国产精品免费免费| 欧美一级二级三级蜜桃| av在线播放成人| 极品少妇xxxx偷拍精品少妇| 亚洲伊人色欲综合网| 国产午夜三级一区二区三| 欧洲精品视频在线观看| 国产成人免费9x9x人网站视频| 亚洲超丰满肉感bbw| 国产欧美视频在线观看| 91精选在线观看| 91年精品国产| 国产成人免费高清| 麻豆精品国产91久久久久久| 亚洲一区二区美女| 国产精品美女一区二区| 精品av综合导航| 欧美精品乱人伦久久久久久| 91视频观看免费| 国内精品久久久久影院薰衣草| 亚洲成人av电影在线| 亚洲人成小说网站色在线 | 欧美精品一区视频| 337p亚洲精品色噜噜| 色久综合一二码| av在线一区二区三区| 国产精品自在欧美一区| 97精品视频在线观看自产线路二| 国产毛片精品视频| 日韩高清在线观看| 亚洲第一久久影院| 国产精品国产三级国产普通话蜜臀| 精品sm在线观看| 日韩欧美综合在线| 91麻豆精品久久久久蜜臀| 在线观看日韩毛片| 色狠狠av一区二区三区| proumb性欧美在线观看| 国产激情视频一区二区三区欧美 | 日韩av电影免费观看高清完整版 | 蜜桃av一区二区| 日日夜夜精品视频免费| 亚洲国产美女搞黄色| 中文字幕一区二区三区不卡在线 | 欧美日韩国产另类一区| 日本乱人伦aⅴ精品| 99在线精品一区二区三区| 不卡的电视剧免费网站有什么| 国产一区二区三区电影在线观看| 久久99久久久久| 天天色 色综合| 亚洲图片自拍偷拍| 亚洲一区二区三区四区在线 | www久久精品| 久久综合狠狠综合久久激情| 精品精品欲导航| 久久久久久麻豆| 国产女主播一区| 国产日本一区二区| 国产精品欧美经典| 亚洲欧洲综合另类| 一区二区三区欧美视频| 亚洲综合视频网| 亚洲成av人**亚洲成av**| 偷拍与自拍一区| 日本不卡的三区四区五区| 麻豆精品新av中文字幕| 激情文学综合丁香| 成人网在线免费视频| 国产iv一区二区三区| 丁香激情综合五月| 成人av在线一区二区| 色综合久久久久| 欧美亚洲图片小说| 3atv一区二区三区| ww亚洲ww在线观看国产| 国产亚洲欧美在线| 亚洲国产精品v| 亚洲图片激情小说| 亚洲一区二区三区影院| 日韩主播视频在线| 久久66热偷产精品| 成人激情黄色小说| 欧美色手机在线观看| 欧美日韩一区久久| 欧美一级在线免费| 日韩精品最新网址| 欧美激情综合网| 国产日韩欧美麻豆| 国产一区二区不卡老阿姨| 国产91丝袜在线播放| 91色porny在线视频| 欧美精品丝袜中出| 7777精品伊人久久久大香线蕉经典版下载| 欧美一区二区视频网站| 久久日韩粉嫩一区二区三区| 国产精品久久久久婷婷二区次| 亚洲视频在线一区观看| 亚洲一区二区黄色| 免费人成网站在线观看欧美高清| 国产一区二区三区在线观看免费视频 |