?? mclient.c
字號:
#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 + -