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

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

?? chrif.c

?? 最新的仙鏡傳說服務器C語言源碼
?? C
字號:
// $Id: chrif.c,v 1.6 2003/06/29 05:52:56 lemit Exp $
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#include "socket.h"
#include "timer.h"
#include "map.h"
#include "battle.h"
#include "chrif.h"
#include "clif.h"
#include "intif.h"
#include "npc.h"
#include "pc.h"

#ifdef MEMWATCH
#include "memwatch.h"
#endif

static const int packet_len_table[0x20]={
	60, 3,-1, 3,14,-1, 7, 6,		// 2af8-2aff
	 6,-1,10, 7,-1,41,40, 0,		// 2b00-2b07
	 6,30,-1,10, 9, 7, 0, 0,		// 2b08-2b0f
	-1,-1, 0, 0, 0, 0, 0, 0,		// 2b10-2b17
};

int char_fd;
static char char_ip_str[16];
static int char_ip;
static int char_port = 6121;
static char userid[24],passwd[24];
static int chrif_state;

// 愝掕僼傽僀儖撉傒崬傒娭學
/*==========================================
 *
 *------------------------------------------
 */
void chrif_setuserid(char *id)
{
	memcpy(userid,id,24);
}

/*==========================================
 *
 *------------------------------------------
 */
void chrif_setpasswd(char *pwd)
{
	memcpy(passwd,pwd,24);
}

/*==========================================
 *
 *------------------------------------------
 */
void chrif_setip(char *ip)
{
	memcpy(char_ip_str,ip,16);
	char_ip=inet_addr(char_ip_str);
}

/*==========================================
 *
 *------------------------------------------
 */
void chrif_setport(int port)
{
	char_port=port;
}

/*==========================================
 *
 *------------------------------------------
 */
int chrif_isconnect(void)
{
	return chrif_state==2;
}

/*==========================================
 *
 *------------------------------------------
 */
int chrif_save(struct map_session_data *sd)
{
	if(char_fd<0)
		return -1;

	pc_makesavestatus(sd);

	WFIFOW(char_fd,0)=0x2b01;
	WFIFOW(char_fd,2)=sizeof(sd->status)+12;
	WFIFOL(char_fd,4)=sd->bl.id;
	WFIFOL(char_fd,8)=sd->char_id;
	memcpy(WFIFOP(char_fd,12),&sd->status,sizeof(sd->status));
	WFIFOSET(char_fd,WFIFOW(char_fd,2));
	return 0;
}

/*==========================================
 *
 *------------------------------------------
 */
int chrif_connect(int fd)
{
	WFIFOW(fd,0)=0x2af8;
	memcpy(WFIFOP(fd,2),userid,24);
	memcpy(WFIFOP(fd,26),passwd,24);
	WFIFOL(fd,50)=0;
	WFIFOL(fd,54)=clif_getip();
	WFIFOL(fd,58)=clif_getport();
	WFIFOSET(fd,60);

	return 0;
}

/*==========================================
 * 儅僢僾憲怣
 *------------------------------------------
 */
int chrif_sendmap(int fd)
{
	int i;

	WFIFOW(fd,0)=0x2afa;
	for(i=0;i<map_num;i++)
		memcpy(WFIFOP(fd,4+i*16),map[i].name,16);
	WFIFOW(fd,2)=4+i*16;
	WFIFOSET(fd,WFIFOW(fd,2));

	return 0;
}
/*==========================================
 * 儅僢僾庴怣
 *------------------------------------------
 */
int chrif_recvmap(int fd)
{
	int i,j,ip,port;
	unsigned char *p=(unsigned char *)&ip;
	
	if(chrif_state<2)	// 傑偩弨旛拞
		return -1;
	
	ip=RFIFOL(fd,4);
	port=RFIFOW(fd,8);
	for(i=12,j=0;i<RFIFOW(fd,2);i+=16,j++){
		map_setipport(RFIFOP(fd,i),ip,port);
//		if(battle_config.etc_log)
//			printf("recv map %d %s\n",j,RFIFOP(fd,i));
	}
	if(battle_config.etc_log)
		printf("recv map on %d.%d.%d.%d:%d (%d maps)\n",p[0],p[1],p[2],p[3],port,j);

	return 0;
}
/*==========================================
 * 儅僢僾嶪娫堏摦偺偨傔偺僨乕僞弨旛梫媮
 *------------------------------------------
 */
int chrif_changemapserver(struct map_session_data *sd,char *name,int x,int y,int ip,short port)
{
	WFIFOW(char_fd,0)=0x2b05;
	WFIFOL(char_fd,2)=sd->bl.id;
	WFIFOL(char_fd,6)=sd->login_id1;
	WFIFOL(char_fd,10)=sd->status.char_id;
	memcpy(WFIFOP(char_fd,14),name,16);
	WFIFOW(char_fd,30)=x;
	WFIFOW(char_fd,32)=y;
	WFIFOL(char_fd,34)=ip;
	WFIFOL(char_fd,38)=port;
	WFIFOB(char_fd,40)=sd->status.sex;
	WFIFOSET(char_fd,41);
	return 0;
}
/*==========================================
 * 儅僢僾嶪娫堏摦ack
 *------------------------------------------
 */
int chrif_changemapserverack(int fd)
{
	struct map_session_data *sd=map_id2sd(RFIFOL(fd,2));
	if(sd==NULL || sd->status.char_id!=RFIFOL(fd,10) )
		return -1;
	if(RFIFOL(fd,6)==1){
		if(battle_config.error_log)
			printf("map server change failed.\n");
		pc_authfail(sd->fd);
		return 0;
	}
	clif_changemapserver(sd,RFIFOP(fd,14),RFIFOW(fd,30),RFIFOW(fd,32),
		RFIFOL(fd,34),RFIFOW(fd,38));
	return 0;
}
/*==========================================
 *
 *------------------------------------------
 */
int chrif_connectack(int fd)
{
	if(RFIFOB(fd,2)){
		printf("chrif : connect char server failed %d\n",RFIFOB(fd,2));
		exit(1);
	}
	chrif_state = 1;

	chrif_sendmap(fd);

	printf("chrif: OnCharIfInit event done. (%d events)\n",
		npc_event_doall("OnCharIfInit") );
	printf("chrif: OnInterIfInit event done. (%d events)\n",
		npc_event_doall("OnInterIfInit") );
	
	// <Agit> Run Event [AgitInit]
//	printf("NPC_Event:[OnAgitInit] do (%d) events (Agit Initialize).\n", npc_event_doall("OnAgitInit"));

	return 0;
}

/*==========================================
 * 
 *------------------------------------------
 */
int chrif_sendmapack(int fd)
{
	if(RFIFOB(fd,2)){
		printf("chrif : send map list to char server failed %d\n",RFIFOB(fd,2));
		exit(1);
	}
	chrif_state = 2;

	return 0;
}

/*==========================================
 *
 *------------------------------------------
 */
int chrif_authreq(struct map_session_data *sd)
{
	WFIFOW(char_fd,0) = 0x2afc;
	WFIFOL(char_fd,2) = sd->bl.id;
	WFIFOL(char_fd,6) = sd->char_id;
	WFIFOL(char_fd,10)= sd->login_id1;
	WFIFOSET(char_fd,14);

	return 0;
}

/*==========================================
 *
 *------------------------------------------
 */
int chrif_charselectreq(struct map_session_data *sd)
{
	WFIFOW(char_fd,0)=0x2b02;
	WFIFOL(char_fd,2)=sd->bl.id;
	WFIFOL(char_fd,6)=sd->login_id1;
	WFIFOSET(char_fd,10);
	return 0;
}

/*==========================================
 * 僉儍儔柤栤偄崌傢偣
 *------------------------------------------
 */
int chrif_searchcharid(int char_id)
{
	WFIFOW(char_fd,0)=0x2b08;
	WFIFOL(char_fd,2)=char_id;
	WFIFOSET(char_fd,6);
	return 0;
}
/*==========================================
 * GM偵曄壔梫媮
 *------------------------------------------
 */
int chrif_changegm(int id,const char *pass,int len)
{
	WFIFOW(char_fd,0)=0x2b0a;
	WFIFOW(char_fd,2)=len+8;
	WFIFOL(char_fd,4)=id;
	memcpy(WFIFOP(char_fd,8),pass,len);
//	if(battle_config.etc_log)
//		printf("chrif_changegm: %d %s %d\n",WFIFOL(char_fd,4),WFIFOP(char_fd,8),WFIFOW(char_fd,2));
	WFIFOSET(char_fd,len+8);
	return 0;
}
/*==========================================
 * 惈暿曄壔梫媮
 *------------------------------------------
 */
int chrif_changesex(int id,int sex)
{
	WFIFOW(char_fd,0)=0x2b0c;
	WFIFOW(char_fd,2)=9;
	WFIFOL(char_fd,4)=id;
	WFIFOB(char_fd,8)=sex;
	printf("chrif : sended 0x2b0c\n");
	WFIFOSET(char_fd,9);
	return 0;
}
/*==========================================
 * GM偵曄壔廔椆
 *------------------------------------------
 */
int chrif_changedgm(int fd)
{
	int oldacc,newacc;
	oldacc=RFIFOL(fd,2);
	newacc=RFIFOL(fd,6);
	if(battle_config.etc_log)
		printf("chrif_changedgm %d -> %d\n",oldacc,newacc);
	if(newacc>0){
		struct map_session_data *sd=map_id2sd(oldacc);
		if(sd!=NULL){	// GM曄峏偵傛傞嫮惂愗抐
			clif_displaymessage(sd->fd,"GM曄峏惉岟丅嵞愙懕偟偰壓偝偄丅");
			clif_setwaitclose(sd->fd);
		}
	}else{
		struct map_session_data *sd=map_id2sd(oldacc);
		if(sd!=NULL){
			clif_displaymessage(sd->fd,"GM曄峏幐攕");
		}
	}
	return 0;
}
/*==========================================
 * 惈暿曄壔廔椆
 *------------------------------------------
 */
int chrif_changedsex(int fd)
{
	int acc;
	struct map_session_data *sd;
	acc=RFIFOL(fd,2);
	if(battle_config.etc_log)
		printf("chrif_changedsex %d \n",acc);
	sd=map_id2sd(acc);
	if(acc>0){
		if(sd!=NULL){	// 曄峏偵傛傞嫮惂愗抐
			clif_setwaitclose(sd->fd);			
		}
	}else{
		if(sd!=NULL){
			printf("chrif_changedsex failed\n");
		}
	}
	return 0;
}
/*==========================================
 * 傾僇僂儞僩曄悢曐懚梫媮
 *------------------------------------------
 */
int chrif_saveaccountreg2(struct map_session_data *sd)
{
	int p,j;
	for(p=8,j=0;j<sd->status.account_reg2_num;j++){
		struct global_reg *reg=&sd->status.account_reg2[j];
		if(reg->str[0] && reg->value!=0){
			memcpy(WFIFOP(char_fd,p),reg->str,32);
			WFIFOL(char_fd,p+32)=reg->value;
			p+=36;
		}
	}
	WFIFOW(char_fd,0)=0x2b10;
	WFIFOW(char_fd,2)=p;
	WFIFOL(char_fd,4)=sd->bl.id;
	WFIFOSET(char_fd,p);
	return 0;
}
/*==========================================
 * 傾僇僂儞僩曄悢捠抦
 *------------------------------------------
 */
int chrif_accountreg2(int fd)
{
	int j,p;
	struct map_session_data *sd;
	if( (sd=map_id2sd(RFIFOL(fd,4)))==NULL )
		return 1;
	
	for(p=8,j=0;p<RFIFOW(fd,2) && j<ACCOUNT_REG2_NUM;p+=36,j++){
		memcpy(sd->status.account_reg2[j].str,RFIFOP(fd,p),32);
		sd->status.account_reg2[j].value=RFIFOL(fd,p+32);
	}
	sd->status.account_reg2_num=j;
//	printf("chrif: accountreg2\n");
	return 0;
}

/*==========================================
 *
 *------------------------------------------
 */
int chrif_parse(int fd)
{
	int packet_len,cmd;

	if(session[fd]->eof){
		if(fd==char_fd)
			char_fd=-1;
		close(fd);
		delete_session(fd);
		return 0;
	}
	while(RFIFOREST(fd)>=2){
		cmd = RFIFOW(fd,0);
		if(cmd<0x2af8 || cmd>=0x2af8+(sizeof(packet_len_table)/sizeof(packet_len_table[0])) ||
		   packet_len_table[cmd-0x2af8]==0){
		   
		   	int r=intif_parse(fd);// intif偵搉偡
		   
			if( r==1 )	continue;	// intif偱張棟偟偨
			if( r==2 )	return 0;	// intif偱張棟偟偨偑丄僨乕僞偑懌傝側偄
			
			close(fd);	// intif偱張棟偱偒側偐偭偨
			session[fd]->eof = 1;
			return 0;
		}
		packet_len = packet_len_table[cmd-0x2af8];
		if(packet_len==-1){
			if(RFIFOREST(fd)<4)
				return 0;
			packet_len = RFIFOW(fd,2);
		}
		if(RFIFOREST(fd)<packet_len)
			return 0;

		switch(cmd){
		case 0x2af9: chrif_connectack(fd); break;
		case 0x2afb: chrif_sendmapack(fd); break;
		case 0x2afd: pc_authok(RFIFOL(fd,4),(struct mmo_charstatus*)RFIFOP(fd,12)); break;
		case 0x2afe: pc_authfail(RFIFOL(fd,4)); break;
		case 0x2b00: map_setusers(RFIFOL(fd,2)); break;
		case 0x2b03: clif_charselectok(RFIFOL(fd,2)); break;
		case 0x2b04: chrif_recvmap(fd); break;
		case 0x2b06: chrif_changemapserverack(fd); break;
		case 0x2b09: map_addchariddb(RFIFOL(fd,2),RFIFOP(fd,6)); break;
		case 0x2b0b: chrif_changedgm(fd); break;
		case 0x2b0d: chrif_changedsex(fd); break;
		case 0x2b11: chrif_accountreg2(fd); break;

		default:
			if(battle_config.error_log)
				printf("chrif_parse : unknown packet %d %d\n",fd,RFIFOW(fd,0));
			close(fd);
			session[fd]->eof=1;
			return 0;
		}
		RFIFOSKIP(fd,packet_len);
	}
	return 0;
}

/*==========================================
 *
 *------------------------------------------
 */
// timer娭悢
// 崱偙偺map嶪偵宷偑偭偰偄傞僋儔僀傾儞僩恖悢傪char嶪傊憲傞
int send_users_tochar(int tid,unsigned int tick,int id,int data)
{
	if(char_fd<=0 || session[char_fd]==NULL)
		return 0;

	WFIFOW(char_fd,0)=0x2aff;
	WFIFOL(char_fd,2)=clif_countusers();
	WFIFOSET(char_fd,6);

	return 0;
}

/*==========================================
 *
 *------------------------------------------
 */
// timer娭悢
// char嶪偲偺愙懕傪妋擣偟丄傕偟愗傟偰偄偨傜嵞搙愙懕偡傞
int check_connect_char_server(int tid,unsigned int tick,int id,int data)
{
	if(char_fd<=0 || session[char_fd]==NULL){
		chrif_state = 0;
		char_fd=make_connection(char_ip,char_port);
		session[char_fd]->func_parse=chrif_parse;
		realloc_fifo(char_fd,FIFOSIZE_SERVERLINK,FIFOSIZE_SERVERLINK);	

		chrif_connect(char_fd);
	}
	return 0;
}

/*==========================================
 *
 *------------------------------------------
 */
int do_init_chrif(void)
{
	add_timer_func_list(check_connect_char_server,"check_connect_char_server");
	add_timer_func_list(send_users_tochar,"send_users_tochar");
	add_timer_interval(gettick()+1000,check_connect_char_server,0,0,10*1000);
	add_timer_interval(gettick()+1000,send_users_tochar,0,0,5*1000);

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人听书哪个软件好| 亚洲精品美腿丝袜| 蜜臀av亚洲一区中文字幕| 久久美女艺术照精彩视频福利播放 | 欧美一区二区三区在线看| 一区二区在线电影| 91麻豆精品国产91久久久久 | 午夜a成v人精品| 国产亚洲视频系列| 欧美乱妇一区二区三区不卡视频 | 日韩成人av影视| 国产精品视频观看| 中文字幕高清一区| 久久久噜噜噜久噜久久综合| 一本到不卡精品视频在线观看| 不卡视频免费播放| 成人毛片老司机大片| 欧美日韩国产大片| 欧美日韩一区二区在线观看视频| 国产成人久久精品77777最新版本| 国产欧美一区二区精品忘忧草 | 91麻豆精品国产自产在线观看一区 | 国产精品1024| 国产乱人伦精品一区二区在线观看 | 精品美女一区二区| 精品日韩av一区二区| 欧美mv日韩mv| 亚洲欧美综合色| 亚洲美女视频一区| 午夜视频在线观看一区二区| 亚洲一区二区三区三| 丝袜诱惑制服诱惑色一区在线观看| 久久99精品久久久久久国产越南| 国产制服丝袜一区| 成人黄色在线看| 欧美日韩国产高清一区二区三区| 日韩精品一区二区三区中文精品 | 欧美一区二区三区公司| 欧美成人性福生活免费看| 国产欧美日韩亚州综合 | 天天av天天翘天天综合网 | 国产日韩欧美不卡在线| 亚洲综合区在线| 精品一二三四在线| 色综合久久久久| 久久综合久久综合九色| 亚洲综合视频在线观看| 国产另类ts人妖一区二区| 欧美主播一区二区三区美女| 欧美不卡一区二区三区| 亚洲激情男女视频| 成人污污视频在线观看| 欧美大片顶级少妇| 亚洲影院免费观看| 91蝌蚪porny九色| 亚洲精品乱码久久久久久日本蜜臀| 国产一区二区精品在线观看| 69精品人人人人| 亚洲gay无套男同| 日本精品一区二区三区高清 | 亚洲成人动漫精品| 欧美伊人精品成人久久综合97 | 91精品办公室少妇高潮对白| 亚洲欧洲精品一区二区精品久久久| 国内精品伊人久久久久影院对白| 制服丝袜在线91| 久久av资源网| 国产精品乱人伦中文| 国产一区二区精品久久91| 日韩欧美国产一二三区| 成人午夜在线免费| 亚洲色图丝袜美腿| 欧美三级乱人伦电影| 美女在线观看视频一区二区| 欧美精品一区在线观看| 成人激情午夜影院| 尤物在线观看一区| 精品黑人一区二区三区久久| 成人综合在线网站| 日韩精品一二三区| 中文字幕高清不卡| 欧美一区二区三区视频| 色综合天天天天做夜夜夜夜做| 国产精品丝袜在线| 91麻豆精品国产自产在线 | 国产精品夜夜爽| 亚洲成a人在线观看| 亚洲国产一区二区a毛片| 日韩天堂在线观看| 91在线国产观看| 狠狠网亚洲精品| 日韩高清不卡一区二区| 亚洲女爱视频在线| 精品国产髙清在线看国产毛片| 91麻豆精品国产综合久久久久久| 国v精品久久久网| 久久精品二区亚洲w码| 日韩 欧美一区二区三区| 亚洲免费三区一区二区| 亚洲一区二区三区影院| 亚洲在线一区二区三区| 成人欧美一区二区三区小说| 久久日一线二线三线suv| 日韩欧美亚洲一区二区| 91精品国产高清一区二区三区蜜臀| 99re6这里只有精品视频在线观看| 精品一区二区三区久久久| 日韩制服丝袜先锋影音| 97精品国产露脸对白| 国产精品18久久久久| 国产馆精品极品| 99久久777色| 欧美乱妇一区二区三区不卡视频| 欧美日本韩国一区二区三区视频| 欧美成人三级电影在线| 波多野结衣中文一区| 欧美亚洲国产怡红院影院| 色综合久久天天综合网| 欧美日韩综合在线免费观看| 欧美巨大另类极品videosbest| 精品久久久久久久久久久久包黑料 | 亚洲成人黄色影院| 色欧美乱欧美15图片| 久久久综合视频| 五月综合激情婷婷六月色窝| 成人av电影免费观看| 欧美电视剧免费全集观看| 中文字幕一区三区| 久久精品理论片| 在线观看日韩毛片| 国产精品国产精品国产专区不蜜 | 国产又黄又大久久| 欧美日本在线观看| 亚洲欧美日韩一区| 国产69精品久久久久777| 欧美一区二区私人影院日本| 中文字幕一区二区三区色视频| 蜜桃精品视频在线观看| 色综合网色综合| 中文字幕乱码亚洲精品一区| 麻豆国产精品视频| 91精品国产91热久久久做人人| 亚洲尤物在线视频观看| 色综合夜色一区| 亚洲三级久久久| 91在线视频免费91| 亚洲欧美一区二区在线观看| 不卡一区在线观看| 国产日产欧美一区二区视频| 国产精品白丝jk黑袜喷水| 国产精品欧美久久久久无广告| 国产成人8x视频一区二区| 久久免费美女视频| 国产jizzjizz一区二区| 国产精品成人一区二区艾草| 99精品桃花视频在线观看| 又紧又大又爽精品一区二区| 欧美午夜电影在线播放| 久久精品国产亚洲一区二区三区| 欧美电影免费观看高清完整版在线 | 久久嫩草精品久久久久| av激情综合网| 国产一区二区视频在线| 亚洲天堂2014| 日韩美女一区二区三区四区| 国产91丝袜在线观看| 亚洲综合一区二区三区| 日韩欧美www| 91丨porny丨在线| 国产一区二区三区黄视频| 亚洲精品国产无天堂网2021| 欧美成人午夜电影| 欧美午夜精品一区二区蜜桃| 国产乱码精品1区2区3区| 亚洲国产精品一区二区久久恐怖片| 精品噜噜噜噜久久久久久久久试看 | 3atv在线一区二区三区| 成人av电影观看| 国产露脸91国语对白| 日韩国产在线一| 亚洲r级在线视频| 一片黄亚洲嫩模| 国产精品国产三级国产有无不卡| 精品毛片乱码1区2区3区| 欧美系列日韩一区| 欧美性大战xxxxx久久久| 91丝袜国产在线播放| 国产成人夜色高潮福利影视| 麻豆91在线播放免费| 视频一区二区中文字幕| 丝袜美腿亚洲色图| 青青草成人在线观看| 天堂资源在线中文精品| 三级一区在线视频先锋| 水蜜桃久久夜色精品一区的特点 | 一区二区视频免费在线观看| 日韩美女啊v在线免费观看| 亚洲精品成人a在线观看| 夜夜夜精品看看| 亚洲高清三级视频|