⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mclient.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>#include <string.h>#include <strings.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/time.h>#include <sys/stat.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <netdb.h>#include <errno.h>#include "autil.h"#include "util.h"#include "net.h"#include "char.h"#include "char_base.h"#include "mclient.h"#include "log.h"#include "handletime.h"#include "chatmagic.h"#ifdef _RECAL_ASK_PLAYER			// WON 要求人物资料#include "saacproto_cli.h"#endif#ifdef _M_SERVER#define SEPARATOR ";"#ifdef _GSERVER_RUNTIME    BOOL gserver_runtime_starttime0_flag = TRUE;    time_t gserver_runtime_starttime0;#endif//Mserver NETProcint mproto_ClientDispatchMessage(int fd,char* data){	int func,fieldcount;	char raw[65500];	strcpy(PersonalKey, MSPERSIONALKEY);	util_DecodeMessage(raw,data);	util_SplitMessage(raw,SEPARATOR);	if (!util_GetFunctionFromSlice(&func, &fieldcount)) {		logHack(fd,HACK_GETFUNCFAIL);		return -1;	}		if (func==MPROTO_QUE_RECV) {		int checksum=0, checksumrecv;		int userfdid;		char ans[65500],uid[4096];		checksum += util_destring(2,uid);		checksum += util_deint(3, &userfdid);		checksum += util_destring(4, ans);		util_deint(5, &checksumrecv);		if (checksum!=checksumrecv) {			util_DiscardMessage();			logHack(fd, HACK_CHECKSUMERROR);			return -1;		}		mproto_Que_Recv(fd,uid,userfdid, ans);		util_DiscardMessage();		return 0;	}	if( func == MPROTO_MESSAGE_RECV )	{		int checksum=0, checksumrecv;		int userfdid;		char ans[65500],uid[4096];		checksum += util_destring(2,uid);		checksum += util_deint(3, &userfdid);		checksum += util_destring(4, ans);		util_deint(5, &checksumrecv);		if (checksum!=checksumrecv) {			util_DiscardMessage();			logHack(fd, HACK_CHECKSUMERROR);			return -1;		}		mproto_Message_Recv(fd,uid,userfdid, ans);		util_DiscardMessage();		return 0;	}	if (func==MPROTO_HELLO_RECV) {    	util_DiscardMessage();		return 0;	}	if (func == MPROTO_NOTALK_RECV) {		int checksum=0, checksumrecv=0;		int userfdid,ntime;		char uid[4096];		checksum = util_destring(2,uid);		checksum += util_deint(3, &userfdid);		checksum += util_deint(4, &ntime);		util_deint(5, &checksumrecv);		print("notalk here1 sum=%d,recv=%d\n",checksum,checksumrecv);		if (checksum!=checksumrecv) {			util_DiscardMessage();			logHack(fd, HACK_CHECKSUMERROR);			return -1;		}		print("notalk here2\n");		mproto_NoTalk_Recv(fd,uid,userfdid, ntime);		util_DiscardMessage();		return 0;			}#ifdef _GM_WARP_PLAYER				// WON 传送玩家	if (func == MPROTO_WARP_RECV) {		int checksum=0, checksumrecv=0;		int userfdid,floor,x,y;		char uid[4096];		checksum = util_destring(2,uid);		checksum += util_deint(3, &userfdid);		checksum += util_deint(4, &floor);		checksum += util_deint(5, &x);		checksum += util_deint(6, &y);		util_deint(7, &checksumrecv);		if (checksum!=checksumrecv) {			util_DiscardMessage();			logHack(fd, HACK_CHECKSUMERROR);			return -1;		}		mproto_WARP_Recv(fd, uid, userfdid, floor, x, y);		util_DiscardMessage();		return 0;			}#endif#ifdef _RECAL_ASK_PLAYER			// WON 要求人物资料	// 线上人物资料	if (func == MPROTO_RECALL_PLAYER_RECV) {		int checksum=0, checksumrecv=0, backup_flag=0;		int userfdid, char_num, date, GmCliId;		char uid[4096], id[20];		checksum = util_destring(2,uid);		checksum += util_deint(3, &userfdid);		checksum += util_deint(4, &GmCliId);				checksum += util_destring(5,id);		checksum += util_deint(6, &char_num);		checksum += util_deint(7, &date);		checksum += util_deint(8, &backup_flag);				util_deint(9, &checksumrecv);		if (checksum!=checksumrecv) {			util_DiscardMessage();			logHack(fd, HACK_CHECKSUMERROR);			return -1;		}		mproto_RECALL_ASK_PLAYER_Recv(fd, uid, userfdid, GmCliId, id, char_num, date, backup_flag);		util_DiscardMessage();		return 0;			}	// 备份人物资料	if (func == MPROTO_RECALL_BACKUP_RECV) {		int checksum=0, checksumrecv=0;		int userfdid, char_num, date, GmCliId, backup_flag;		char uid[4096], id[20], char_data[1024];		checksum = util_destring(2, uid);		checksum += util_deint(3, &userfdid);		checksum += util_deint(4, &GmCliId);				checksum += util_destring(5,id);		checksum += util_deint(6, &char_num);		checksum += util_deint(7, &date);		checksum += util_destring(8, char_data);		checksum += util_deint(9, &backup_flag);					util_deint(10, &checksumrecv);		if (checksum!=checksumrecv) {			util_DiscardMessage();			logHack(fd, HACK_CHECKSUMERROR);			return -1;		}		mproto_RECALL_BACKUP_PLAYER_Recv(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, backup_flag);				util_DiscardMessage();		return 0;			}#endif	if( func == MPROTO_WAEIKICK_RECV )	{		int checksum=0, checksumrecv=0, userfdid;		char uid[4096];		checksum = util_destring(2,uid);		checksum += util_deint(3, &userfdid);		util_deint(4, &checksumrecv);		if (checksum!=checksumrecv) {			util_DiscardMessage();			logHack(fd, HACK_CHECKSUMERROR);			return -1;		}		mproto_WaeiKick_Recv( fd, uid, userfdid);		util_DiscardMessage();		return 0;	}	if( func == MPROTO_JAIL_RECV )	{		int checksum=0, checksumrecv=0, userfdid;		char uid[4096];		checksum = util_destring(2,uid);		checksum += util_deint(3, &userfdid);		util_deint(4, &checksumrecv);		if (checksum!=checksumrecv) {			util_DiscardMessage();			logHack(fd, HACK_CHECKSUMERROR);			return -1;		}		mproto_Jail_Recv( fd, uid, userfdid);		util_DiscardMessage();		return 0;	}	if (func == MPROTO_GMTALK_RECV) {		int checksum=0,checksumrecv=0;		int ntime;		char uid[4096],data[65530];		checksum = util_destring(2,uid);		checksum += util_deint(3,&ntime);		checksum += util_destring(4,data);		util_deint(5,&checksumrecv);                if (checksum!=checksumrecv) {                        util_DiscardMessage();                        logHack(fd, HACK_CHECKSUMERROR);                        return -1;                }		mproto_GMTalk_Recv(fd,uid,ntime,data);                util_DiscardMessage();                return 0;	}#ifdef _RECAL_SERVER_OFF			// WON MSERVER 关闭 GS		if (func == MPROTO_RECALL_SERVER_OFF_RECV) {		int checksum=0,checksumrecv=0;		char msg[10];				struct tm *newtime;		time_t long_time;		int MIN=0, HOUR=0, SEC=0;		time( &long_time );		newtime = localtime( &long_time ); 			HOUR=newtime->tm_hour;		MIN=newtime->tm_min;				SEC=newtime->tm_sec;				checksum = util_destring(2,msg);		util_deint(3,&checksumrecv);        		if (checksum!=checksumrecv) {			util_DiscardMessage();            logHack(fd, HACK_CHECKSUMERROR);            return -1;        }				// 关机		if( strcmp(msg, "OFF") == 0){			print("\n\n\n\n\n GM server shoutdown GS !!  (%d:%d:%d)\n\n\n\n\n", HOUR, MIN, SEC);			system( "~/gmsvstop.sh" );        }		util_DiscardMessage();		return 0;	}#endif	util_DiscardMessage();	return 0;}//GM回覆问题void mproto_Que_Recv(int fd,char* uid,int userfdid,char* ans){	int fd_charaindex;	char sGM[256];	int clifd=getfdFromFdid(userfdid);	if  (clifd == -1) return ;	if (ans == NULL || uid==NULL) return;     	sprintf(sGM,"GM[%s]为你解答如下:",uid);    	fd_charaindex = CONNECT_getCharaindex( clifd );	if (!CHAR_CHECKINDEX(fd_charaindex)) return;	CHAR_talkToCli(fd_charaindex, -1, sGM, CHAR_COLORYELLOW);	CHAR_talkToCli(fd_charaindex, -1, ans, CHAR_COLORWHITE);	return;}//GM讯息void mproto_Message_Recv(int fd,char* uid,int userfdid,char* ans){	int fd_charaindex;	char sGM[256];	int clifd=getfdFromFdid(userfdid);	if  (clifd == -1)	return ;	if (ans == NULL || uid==NULL)	return; 	if( !strcmp( uid, "无") )	{		sprintf( sGM, "%s", ans);	}else{		sprintf( sGM, "GM[%s]讯息:%s", uid, ans);	}    fd_charaindex = CONNECT_getCharaindex( clifd );	if (!CHAR_CHECKINDEX(fd_charaindex)) return;	CHAR_talkToCli(fd_charaindex, -1, sGM, CHAR_COLORRED);	return;}//GM禁言void mproto_NoTalk_Recv(int fd,char* uid,int userfdid,int nTime){	int fd_charaindex;	int clifd=getfdFromFdid(userfdid);	print("clifd =%d\n",clifd);	if (clifd == -1) return ;	if (uid == NULL ) return ;	fd_charaindex=CONNECT_getCharaindex(clifd);	if (!CHAR_CHECKINDEX(fd_charaindex)) return;	CHAR_setInt( fd_charaindex,CHAR_SILENT, nTime );	CHAR_setWorkInt( fd_charaindex, CHAR_WORKLOGINTIME, (int)NowTime.tv_sec );	CHAR_talkToCli( fd_charaindex, -1, "由於捣乱,被GM禁言10到30分钟", CHAR_COLORYELLOW);	CHAR_setWorkInt(fd_charaindex, CHAR_WORKTALKCOUNT, 0 );}#ifdef _GM_WARP_PLAYER				// WON 传送玩家void mproto_WARP_Recv(int fd,char* uid,int userfdid,int floor, int x, int y){	int fd_charaindex;	int clifd=getfdFromFdid(userfdid);	print("clifd =%d\n",clifd);	if (clifd == -1) return ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -