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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? int_party.c

?? 最新的仙鏡傳說服務器C語言源碼
?? C
字號:
#include "inter.h"
#include "int_party.h"
#include "mmo.h"
#include "char.h"
#include "socket.h"
#include "db.h"
#include "lock.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char party_txt[1024]="save/party.txt";

static struct dbt *party_db;
static int party_newid=100;

int mapif_party_broken(int party_id,int flag);
int party_check_empty(struct party *p);
int mapif_parse_PartyLeave(int fd,int party_id,int account_id);

// 僷乕僥傿僨乕僞偺暥帤楍傊偺曄姺
int inter_party_tostr(char *str,struct party *p)
{
	int i,len;
	len=sprintf(str,"%d\t%s\t%d,%d\t",
		p->party_id,p->name,p->exp,p->item);
	for(i=0;i<MAX_PARTY;i++){
		struct party_member *m = &p->member[i];
		len+=sprintf(str+len,"%d,%d\t%s\t",
			m->account_id,m->leader,
			((m->account_id>0)?m->name:"NoMember"));
	}
	return 0;
}
// 僷乕僥傿僨乕僞偺暥帤楍偐傜偺曄姺
int inter_party_fromstr(char *str,struct party *p)
{
	int i,j,s;
	int tmp_int[16];
	char tmp_str[256];
	
	memset(p,0,sizeof(struct party));
	
//	printf("sscanf party main info\n");
	s=sscanf(str,"%d\t%[^\t]\t%d,%d\t",&tmp_int[0],
		tmp_str,&tmp_int[1],&tmp_int[2]);
	if(s!=4)
		return 1;
	
	p->party_id=tmp_int[0];
	strcpy(p->name,tmp_str);
	p->exp=tmp_int[1];
	p->item=tmp_int[2];	
//	printf("%d [%s] %d %d\n",tmp_int[0],tmp_str[0],tmp_int[1],tmp_int[2]);
	
	for(j=0;j<3 && str!=NULL;j++)
		str=strchr(str+1,'\t');
	
	for(i=0;i<MAX_PARTY;i++){
		struct party_member *m = &p->member[i];
		if(str==NULL)
			return 1;
//		printf("sscanf party member info %d\n",i);

		s=sscanf(str+1,"%d,%d\t%[^\t]\t",
			&tmp_int[0],&tmp_int[1],tmp_str);
		if(s!=3)
			return 1;
		
		m->account_id=tmp_int[0];
		m->leader=tmp_int[1];
		strncpy(m->name,tmp_str,sizeof(m->name));
//		printf(" %d %d [%s]\n",tmp_int[0],tmp_int[1],tmp_str);
		
		
		for(j=0;j<2 && str!=NULL;j++)
			str=strchr(str+1,'\t');
	}
	return 0;
}

// 僷乕僥傿僨乕僞偺儘乕僪
int inter_party_init()
{
	char line[8192];
	struct party *p;
	FILE *fp;
	int c=0;
	
	party_db=numdb_init();
	
	if( (fp=fopen(party_txt,"r"))==NULL )
		return 1;
	while(fgets(line,sizeof(line),fp)){
		int i,j=0;
		if( sscanf(line,"%d\t%%newid%%\n%n",&i,&j)==1 && j>0 && party_newid<=i){
			party_newid=i;
			continue;
		}
	
		p=calloc(sizeof(struct party), 1);
		if(p==NULL){
			printf("int_party: out of memory!\n");
			exit(0);
		}
		memset(p,0,sizeof(struct party));
		if(inter_party_fromstr(line,p)==0 && p->party_id>0){
			if( p->party_id >= party_newid)
				party_newid=p->party_id+1;
			numdb_insert(party_db,p->party_id,p);
			party_check_empty(p);
		}
		else{
			printf("int_party: broken data [%s] line %d\n",party_txt,c+1);
			free(p);
		}
		c++;
	}
	fclose(fp);
//	printf("int_party: %s read done (%d parties)\n",party_txt,c);
	return 0;
}

// 僷乕僥傿乕僨乕僞偺僙乕僽梡
int inter_party_save_sub(void *key,void *data,va_list ap)
{
	char line[8192];
	FILE *fp;
	inter_party_tostr(line,(struct party *)data);
	fp=va_arg(ap,FILE *);
	fprintf(fp,"%s" RETCODE,line);
	return 0;
}
// 僷乕僥傿乕僨乕僞偺僙乕僽
int inter_party_save()
{
	FILE *fp;
	int  lock;
	if( (fp=lock_fopen(party_txt,&lock))==NULL ){
		printf("int_party: cant write [%s] !!! data is lost !!!\n",party_txt);
		return 1;
	}
	numdb_foreach(party_db,inter_party_save_sub,fp);
//	fprintf(fp,"%d\t%%newid%%\n",party_newid);
	lock_fclose(fp,party_txt,&lock);
//	printf("int_party: %s saved.\n",party_txt);
	return 0;
}
// 僷乕僥傿柤専嶕梡
int search_partyname_sub(void *key,void *data,va_list ap)
{
	struct party *p=(struct party *)data,**dst;
	char *str;
	str=va_arg(ap,char *);
	dst=va_arg(ap,struct party **);
	if(strcmpi(p->name,str)==0)
		*dst=p;
	return 0;
}
// 僷乕僥傿柤専嶕
struct party* search_partyname(char *str)
{
	struct party *p=NULL;
	numdb_foreach(party_db,search_partyname_sub,str,&p);
	return p;
}

// EXP岞暯暘攝偱偒傞偐僠僃僢僋
int party_check_exp_share(struct party *p)
{
	int i;
	int maxlv=0,minlv=0x7fffffff;
	for(i=0;i<MAX_PARTY;i++){
		int lv=p->member[i].lv;
		if( p->member[i].online ){
			if( lv < minlv ) minlv=lv;
			if( maxlv < lv ) maxlv=lv;
		}
	}
	return (maxlv==0 || maxlv-minlv<=party_share_level);
}
// 僷乕僥傿偑嬻偐偳偆偐僠僃僢僋
int party_check_empty(struct party *p)
{
	int i;
//	printf("party check empty %08X\n",(int)p);
	for(i=0;i<MAX_PARTY;i++){
//		printf("%d acc=%d\n",i,p->member[i].account_id);
		if(p->member[i].account_id>0){
			return 0;
		}
	}
		// 扤傕偄側偄偺偱夝嶶
	mapif_party_broken(p->party_id,0);
	numdb_erase(party_db,p->party_id);
	free(p);
	return 1;
}

// 僉儍儔偺嫞崌偑側偄偐僠僃僢僋梡
int party_check_conflict_sub(void *key,void *data,va_list ap)
{
	struct party *p=(struct party *)data;
	int party_id,account_id,i;
	char *nick;
	
	party_id=va_arg(ap,int);
	account_id=va_arg(ap,int);
	nick=va_arg(ap,char *);
	
	if( p->party_id==party_id)	// 杮棃偺強懏側偺偱栤戣側偟
		return 0;
	
	for(i=0;i<MAX_PARTY;i++){
		if(p->member[i].account_id==account_id && strcmp(p->member[i].name,nick)==0){
			// 暿偺僷乕僥傿偵婾偺強懏僨乕僞偑偁傞偺偱扙戅
			printf("int_party: party conflict! %d %d %d\n",account_id,party_id,p->party_id);
			mapif_parse_PartyLeave(-1,p->party_id,account_id);
		}
	}
	
	return 0;
}
// 僉儍儔偺嫞崌偑側偄偐僠僃僢僋
int party_check_conflict(int party_id,int account_id,char *nick)
{
	numdb_foreach(party_db,party_check_conflict_sub,party_id,account_id,nick);
	return 0;
}

//-------------------------------------------------------------------
// map server傊偺捠怣

// 僷乕僥傿嶌惉壜斲
int mapif_party_created(int fd,int account_id,struct party *p)
{
	WFIFOW(fd,0)=0x3820;
	WFIFOL(fd,2)=account_id;
	if(p!=NULL){
		WFIFOB(fd,6)=0;
		WFIFOL(fd,7)=p->party_id;
		memcpy(WFIFOP(fd,11),p->name,24);
		printf("int_party: created! %d %s\n",p->party_id,p->name);
	}else{
		WFIFOB(fd,6)=1;
		WFIFOL(fd,7)=0;
		memcpy(WFIFOP(fd,11),"error",24);
	}
	WFIFOSET(fd,35);
	return 0;
}

// 僷乕僥傿忣曬尒偮偐傜偢
int mapif_party_noinfo(int fd,int party_id)
{
	WFIFOW(fd,0)=0x3821;
	WFIFOW(fd,2)=8;
	WFIFOL(fd,4)=party_id;
	WFIFOSET(fd,8);
	printf("int_party: info not found %d\n",party_id);
	return 0;
}
// 僷乕僥傿忣曬傑偲傔憲傝
int mapif_party_info(int fd,struct party *p)
{
	unsigned char buf[1024];
	WBUFW(buf,0)=0x3821;
	memcpy(buf+4,p,sizeof(struct party));
	WBUFW(buf,2)=4+sizeof(struct party);
	if(fd<0)
		mapif_sendall(buf,WBUFW(buf,2));
	else
		mapif_send(fd,buf,WBUFW(buf,2));
//	printf("int_party: info %d %s\n",p->party_id,p->name);
	return 0;
}
// 僷乕僥傿儊儞僶捛壛壜斲
int mapif_party_memberadded(int fd,int party_id,int account_id,int flag)
{
	WFIFOW(fd,0)=0x3822;
	WFIFOL(fd,2)=party_id;
	WFIFOL(fd,6)=account_id;
	WFIFOB(fd,10)=flag;
	WFIFOSET(fd,11);
	return 0;
}
// 僷乕僥傿愝掕曄峏捠抦
int mapif_party_optionchanged(int fd,struct party *p,int account_id,int flag)
{
	unsigned char buf[16];
	WBUFW(buf,0)=0x3823;
	WBUFL(buf,2)=p->party_id;
	WBUFL(buf,6)=account_id;
	WBUFW(buf,10)=p->exp;
	WBUFW(buf,12)=p->item;
	WBUFB(buf,14)=flag;
	if(flag==0)
		mapif_sendall(buf,15);
	else
		mapif_send(fd,buf,15);
	printf("int_party: option changed %d %d %d %d %d\n",p->party_id,account_id,p->exp,p->item,flag);
	return 0;
}
// 僷乕僥傿扙戅捠抦
int mapif_party_leaved(int party_id,int account_id,char *name)
{
	unsigned char buf[64];
	WBUFW(buf,0)=0x3824;
	WBUFL(buf,2)=party_id;
	WBUFL(buf,6)=account_id;
	memcpy(WBUFP(buf,10),name,24);
	mapif_sendall(buf,34);
	printf("int_party: party leaved %d %d %s\n",party_id,account_id,name);
	return 0;
}
// 僷乕僥傿儅僢僾峏怴捠抦
int mapif_party_membermoved(struct party *p,int idx)
{
	unsigned char buf[32];
	WBUFW(buf,0)=0x3825;
	WBUFL(buf,2)=p->party_id;
	WBUFL(buf,6)=p->member[idx].account_id;
	memcpy(WBUFP(buf,10),p->member[idx].map,16);
	WBUFB(buf,26)=p->member[idx].online;
	WBUFW(buf,27)=p->member[idx].lv;
	mapif_sendall(buf,29);
	return 0;
}
// 僷乕僥傿夝嶶捠抦
int mapif_party_broken(int party_id,int flag)
{
	unsigned char buf[16];
	WBUFW(buf,0)=0x3826;
	WBUFL(buf,2)=party_id;
	WBUFB(buf,6)=flag;
	mapif_sendall(buf,7);
	printf("int_party: broken %d\n",party_id);
	return 0;
}
// 僷乕僥傿撪敪尵
int mapif_party_message(int party_id,int account_id,char *mes,int len)
{
	unsigned char buf[512];
	WBUFW(buf,0)=0x3827;
	WBUFW(buf,2)=len+12;
	WBUFL(buf,4)=party_id;
	WBUFL(buf,8)=account_id;
	memcpy(WBUFP(buf,12),mes,len);
	mapif_sendall(buf,len+12);
	return 0;
}

//-------------------------------------------------------------------
// map server偐傜偺捠怣


// 僷乕僥傿
int mapif_parse_CreateParty(int fd,int account_id,char *name,char *nick,char *map,int lv)
{
	struct party *p;
	int i;
	
	for(i=0;i<24 && name[i];i++){
		if( !(name[i]&0xe0) || name[i]==0x7f){
			printf("int_party: illeagal party name [%s]\n",name);
			mapif_party_created(fd,account_id,NULL);
			return 0;
		}
	}

	if( (p=search_partyname(name))!=NULL){
		printf("int_party: same name party exists [%s]\n",name);
		mapif_party_created(fd,account_id,NULL);
		return 0;
	}
	p=calloc(sizeof(struct party), 1);
	if(p==NULL){
		printf("int_party: out of memory !\n");
		mapif_party_created(fd,account_id,NULL);
		return 0;
	}
	memset(p,0,sizeof(struct party));
	p->party_id=party_newid++;
	memcpy(p->name,name,24);
	p->exp=0;
	p->item=0;
	p->member[0].account_id=account_id;
	memcpy(p->member[0].name,nick,24);
	memcpy(p->member[0].map,map,16);
	p->member[0].leader=1;
	p->member[0].online=1;
	p->member[0].lv=lv;
	
	numdb_insert(party_db,p->party_id,p);
	
	mapif_party_created(fd,account_id,p);
	mapif_party_info(fd,p);
	
	return 0;
}
// 僷乕僥傿忣曬梫媮
int mapif_parse_PartyInfo(int fd,int party_id)
{
	struct party *p;
	p=numdb_search(party_db,party_id);
	if(p!=NULL)
		mapif_party_info(fd,p);
	else
		mapif_party_noinfo(fd,party_id);
	return 0;
}
// 僷乕僥傿捛壛梫媮
int mapif_parse_PartyAddMember(int fd,int party_id,int account_id,char *nick,char *map,int lv)
{
	struct party *p;
	int i;
	p=numdb_search(party_db,party_id);
	if(p==NULL){
		mapif_party_memberadded(fd,party_id,account_id,1);
		return 0;
	}
	
	for(i=0;i<MAX_PARTY;i++){
		if(p->member[i].account_id==0){
			int flag=0;
			
			p->member[i].account_id=account_id;
			memcpy(p->member[i].name,nick,24);
			memcpy(p->member[i].map,map,16);
			p->member[i].leader=0;
			p->member[i].online=1;
			p->member[i].lv=lv;
			mapif_party_memberadded(fd,party_id,account_id,0);
			mapif_party_info(-1,p);

			if( p->exp>0 && !party_check_exp_share(p) ){
				p->exp=0;
				flag=0x01;
			}
			if(flag)
				mapif_party_optionchanged(fd,p,0,0);
			return 0;
		}
	}
	mapif_party_memberadded(fd,party_id,account_id,1);
	return 0;
}
// 僷乕僥傿乕愝掕曄峏梫媮
int mapif_parse_PartyChangeOption(int fd,int party_id,int account_id,int exp,int item)
{
	struct party *p;
	int flag=0;
	p=numdb_search(party_db,party_id);
	if(p==NULL){
		return 0;
	}
	
	p->exp=exp;
	if( exp>0 && !party_check_exp_share(p) ){
		flag|=0x01;
		p->exp=0;
	}
	
	p->item=item;

	mapif_party_optionchanged(fd,p,account_id,flag);
	return 0;
}
// 僷乕僥傿扙戅梫媮
int mapif_parse_PartyLeave(int fd,int party_id,int account_id)
{
	struct party *p=NULL;
	p=numdb_search(party_db,party_id);
	if(p!=NULL){
		int i;
		for(i=0;i<MAX_PARTY;i++){
			if(p->member[i].account_id==account_id){
				mapif_party_leaved(party_id,account_id,p->member[i].name);
				
				memset(&p->member[i],0,sizeof(struct party_member));
				if( party_check_empty(p)==0 )
					mapif_party_info(-1,p);// 傑偩恖偑偄傞偺偱僨乕僞憲怣
				else
					inter_party_save();	// 夝嶶偟偨偺偱僙乕僽
				return 0;
			}
		}
	}
	return 0;
}
// 僷乕僥傿儅僢僾峏怴梫媮
int mapif_parse_PartyChangeMap(int fd,int party_id,int account_id,char *map,int online,int lv)
{
	struct party *p;
	int i;
	p=numdb_search(party_db,party_id);
	if(p==NULL){
		return 0;
	}
	for(i=0;i<MAX_PARTY;i++){
		if(p->member[i].account_id==account_id){
			int flag=0;
			
			memcpy(p->member[i].map,map,16);
			p->member[i].online=online;
			p->member[i].lv=lv;
			mapif_party_membermoved(p,i);

			if( p->exp>0 && !party_check_exp_share(p) ){
				p->exp=0;
				flag=1;
			}
			if(flag)
				mapif_party_optionchanged(fd,p,0,0);
			break;
		}
	}
	if(online==0)	// 扤偐偑儘僌傾僂僩偡傞偛偲偵僙乕僽
		inter_party_save();
	return 0;
}
// 僷乕僥傿夝嶶梫媮
int mapif_parse_BreakParty(int fd,int party_id)
{
	struct party *p;
	p=numdb_search(party_db,party_id);
	if(p==NULL){
		return 0;
	}
	numdb_erase(party_db,party_id);
	mapif_party_broken(fd,party_id);
	return 0;
}
// 僷乕僥傿儊僢僙乕僕憲怣
int mapif_parse_PartyMessage(int fd,int party_id,int account_id,char *mes,int len)
{
	return mapif_party_message(party_id,account_id,mes,len);
}
// 僷乕僥傿僠僃僢僋梫媮
int mapif_parse_PartyCheck(int fd,int party_id,int account_id,char *nick)
{
	return party_check_conflict(party_id,account_id,nick);
}

// map server 偐傜偺捠怣
// 丒侾僷働僢僩偺傒夝愅偡傞偙偲
// 丒僷働僢僩挿僨乕僞偼inter.c偵僙僢僩偟偰偍偔偙偲
// 丒僷働僢僩挿僠僃僢僋傗丄RFIFOSKIP偼屇傃弌偟尦偱峴傢傟傞偺偱峴偭偰偼側傜側偄
// 丒僄儔乕側傜0(false)丄偦偆偱側偄側傜1(true)傪偐偊偝側偗傟偽側傜側偄
int inter_party_parse_frommap(int fd)
{
	switch(RFIFOW(fd,0)){
	case 0x3020: mapif_parse_CreateParty(fd,RFIFOL(fd,2),RFIFOP(fd,6),RFIFOP(fd,30),RFIFOP(fd,54),RFIFOW(fd,70)); break;
	case 0x3021: mapif_parse_PartyInfo(fd,RFIFOL(fd,2)); break;
	case 0x3022: mapif_parse_PartyAddMember(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOP(fd,34),RFIFOW(fd,50)); break;
	case 0x3023: mapif_parse_PartyChangeOption(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOW(fd,10),RFIFOW(fd,12)); break;
	case 0x3024: mapif_parse_PartyLeave(fd,RFIFOL(fd,2),RFIFOL(fd,6)); break;
	case 0x3025: mapif_parse_PartyChangeMap(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOB(fd,26),RFIFOW(fd,27)); break;
	case 0x3026: mapif_parse_BreakParty(fd,RFIFOL(fd,2)); break;
	case 0x3027: mapif_parse_PartyMessage(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12),RFIFOW(fd,2)-12); break;
	case 0x3028: mapif_parse_PartyCheck(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10)); break;
	default:
		return 0;
	}
	return 1;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人aa视频在线观看| 日韩视频在线一区二区| 欧美日韩午夜在线视频| 日韩欧美你懂的| 国产精品久久久久久久久晋中| 一区二区三区国产精品| 国产精品资源网站| 欧美天天综合网| 国产欧美精品在线观看| 首页国产欧美久久| 91麻豆国产自产在线观看| 欧美成va人片在线观看| 夜夜夜精品看看| 成人午夜在线视频| 日韩免费观看高清完整版| 亚洲精品免费在线| 成人性色生活片免费看爆迷你毛片| 欧美二区三区91| 日韩和欧美一区二区三区| 国产91精品免费| 日韩一区二区三区视频| 亚洲综合精品久久| eeuss鲁片一区二区三区| 精品国产一区二区亚洲人成毛片 | 亚洲超碰精品一区二区| 成人美女视频在线看| 久久久精品2019中文字幕之3| 天天色天天操综合| 欧美日韩一区二区三区高清| 亚洲日本va在线观看| 不卡一卡二卡三乱码免费网站| 亚洲精品在线观看网站| 激情综合色播激情啊| 欧美精品一区视频| 韩国精品久久久| 久久一二三国产| 国产精品一区在线| 久久亚洲影视婷婷| 国产精品白丝jk白祙喷水网站| 久久人人超碰精品| 成人免费视频国产在线观看| 中文字幕av一区二区三区高| 国产一区二区主播在线| 国产亚洲女人久久久久毛片| 国产一区二区三区免费看| 久久亚洲二区三区| 成人黄色在线网站| 中文字幕一区二区不卡| 91女厕偷拍女厕偷拍高清| 亚洲伦理在线免费看| 欧美性感一区二区三区| 日韩国产精品久久| 欧美一级免费大片| 国产一区二区0| 国产精品久久久久四虎| 久久综合色一综合色88| 国产黄色91视频| 国产精品国模大尺度视频| av资源站一区| 亚洲一区二区在线观看视频| 欧美一级久久久| 国产麻豆精品视频| 亚洲另类一区二区| 3atv一区二区三区| 岛国av在线一区| 亚洲国产视频一区二区| 欧美一区二区黄| 波多野结衣中文字幕一区二区三区| 亚洲精品一二三区| 日韩欧美aaaaaa| 99精品在线免费| 图片区日韩欧美亚洲| www国产精品av| 一本色道亚洲精品aⅴ| 日韩av不卡一区二区| 欧美激情一区二区三区| 欧美日韩精品一区二区三区| 国内一区二区视频| 一个色在线综合| 26uuu国产在线精品一区二区| 欧美制服丝袜第一页| 久久99精品久久久久久久久久久久 | 国产精品一区二区久激情瑜伽 | 国产清纯白嫩初高生在线观看91 | 亚洲最大成人综合| 久久先锋影音av| 欧美成人乱码一区二区三区| 在线一区二区三区做爰视频网站| 美女视频网站久久| 亚洲老妇xxxxxx| 久久奇米777| 日韩欧美精品三级| 91国产精品成人| 国产99久久久国产精品免费看| 性感美女极品91精品| 国产精品国产三级国产aⅴ原创| 91精品久久久久久久91蜜桃| 色婷婷综合久久久久中文一区二区| 精品一区二区日韩| 婷婷国产在线综合| 亚洲综合免费观看高清完整版| 国产精品乱码一区二区三区软件| 欧美一区二区免费视频| 欧美精品v日韩精品v韩国精品v| av成人老司机| k8久久久一区二区三区 | 天堂久久久久va久久久久| 最新热久久免费视频| 国产欧美日韩三区| 欧美电视剧在线看免费| 欧美一区二区三区免费在线看| 色吊一区二区三区| 91老司机福利 在线| 成人18精品视频| 高清成人免费视频| 国v精品久久久网| 国产乱国产乱300精品| 精品在线你懂的| 久久成人久久爱| 久久99精品一区二区三区三区| 免费观看日韩av| 国内精品国产成人| 国产91丝袜在线播放九色| 国产99久久久精品| av激情综合网| 色综合久久中文综合久久牛| 在线区一区二视频| 欧美日韩一区二区不卡| 欧美日韩精品免费观看视频| 欧美日韩三级一区| 宅男在线国产精品| 精品久久久久一区| 国产日韩一级二级三级| 中文字幕一区二区三中文字幕| 一区二区在线看| 亚洲va天堂va国产va久| 琪琪久久久久日韩精品| 国产在线精品一区二区 | 麻豆国产一区二区| 国产精品综合一区二区三区| 成人看片黄a免费看在线| 91小宝寻花一区二区三区| 欧美图片一区二区三区| 精品av综合导航| 国产精品国产三级国产aⅴ中文| 亚洲宅男天堂在线观看无病毒| 日韩影院免费视频| 国产成人在线色| 日本电影欧美片| 欧美丰满少妇xxxbbb| 国产日韩欧美精品综合| 国产精品国产a级| 日韩成人午夜精品| 成人午夜私人影院| 欧美日韩成人在线一区| 国产三级一区二区三区| 亚洲最色的网站| 国产99久久久精品| 欧美色倩网站大全免费| 国产亚洲欧美日韩日本| 午夜精品久久久久久久久 | 久久99深爱久久99精品| 成人久久视频在线观看| 91精品国产免费| **欧美大码日韩| 六月婷婷色综合| 欧美写真视频网站| 中文字幕欧美激情一区| 日韩av不卡在线观看| 99国产欧美久久久精品| 精品国产伦理网| 亚洲一区av在线| 成人网页在线观看| 日韩精品中午字幕| 亚洲一级在线观看| 成人h动漫精品一区二区| 日韩视频免费观看高清完整版在线观看 | 丰满岳乱妇一区二区三区| 欧美色综合网站| 国产精品久久久久7777按摩| 国内精品久久久久影院色 | 美女视频黄频大全不卡视频在线播放| 粉嫩aⅴ一区二区三区四区五区| 制服丝袜av成人在线看| 亚洲国产美女搞黄色| 成人高清免费观看| 亚洲精品一区二区三区蜜桃下载| 午夜伊人狠狠久久| 91欧美一区二区| 国产精品久久久久久久久动漫 | 国产亚洲一二三区| 美国十次综合导航| 91精品国产综合久久久蜜臀粉嫩 | 国产精品一区二区黑丝| 日韩一区二区三区免费看| 午夜一区二区三区视频| 欧洲精品视频在线观看| 一区二区三区四区精品在线视频| 成人丝袜高跟foot| 国产欧美一区在线|