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

📄 move_server.cc

📁 多人走路RPG服务器 c++ socket
💻 CC
📖 第 1 页 / 共 2 页
字号:
#include <map>#include <string>#include <stdio.h>#include <stdarg.h>#include <unistd.h>using namespace std;#include <listener.h>#include <socket.h>#include "my_server.h"#include "m_GameServer.h"#ifndef PORT#define PORT 4212#endifvoid socketHandler(Socket *, string data);//-----------------------------------------------------------------------------------------------------MyGameRoomServer::MyGameRoomServer(int ms,int mp) {	int i,j;	GameRoomServer::GameRoomServer();	Max_GameServer=ms;	Max_GamePlayer=mp;	for( i = 0; i < MAXMSG; i ++ ) {		m_pMsg[i] = NULL ;	}	for(i=0;i<Max_GameServer;i++) {		m_GameServer[i]=new MyGameServer;		m_GameServer[i]->m_GamePlayer=m_GamePlayer;		m_GameServer[i]->Game_init(i,300);//		//printf("%d \n",i);	}	for(i=0;i<Max_GamePlayer;i++) {		m_GamePlayer[i]=new MyGamePlayer;	}}//-----------------------保存用户int MyGameRoomServer::SavePlayerInfo(int player_id,const char *name) {	char goodstr[4098];	char sql[10240];	MyGamePlayer *u=NULL;	if(player_id!=NONE)	{				u=(MyGamePlayer *)m_GamePlayer[player_id];		u->UserBody.UnDefine_Emend(goodstr);//	//printf("sql coming\n");		sprintf(sql, "update city_online set money=%d,level=%d,exp=%d,hp=%d,mp=%d,sp=%d,body_goods='%s',box_goods='%s' where user_name='%s'", u->UserBody.Money, u->UserBody.Level, u->UserBody.Exp, u->UserBody.HP, u->UserBody.MP, u->UserBody.SP, goodstr, "", u->UserBody.user_name);	//	mysql.DoQuery(sql);	//	//printf("sql here:%s",sql);	}	return 0;}int MyGameRoomServer::CheckPlayerLogin(const char *u_name,const char *u_pass,const char *u_ext) { 	int is_log;	char sql[1024];	is_log=1;	sprintf(sql, "select passwd,nickname from user where name='%s'", u_name);	if(mysql.Query(sql)!=-1){		if(mysql.num_rows>0){			mysql.GetData();			if(strcmp(mysql.row[0],u_pass)==0) is_log=0;//			if(is_log==0 && strchr(mysql.row[1],'|')==0) is_log=1;//			if(is_log==0 && strchr(mysql.row[1],'\\')==0) is_log=1;//			if(is_log==0 && strchr(mysql.row[1],'/')==0) is_log=1;//			if(is_log==0 && strchr(mysql.row[1],'.')==0) is_log=1;		}		mysql.FreeResult();	}	return is_log;	}bool MyGameRoomServer::GmCommand( int p_msg2, char *p_data ) {	//printf("\t\t\t\tGmCommand\n");	switch (p_msg2) {		case MSG_GM_CMD_BULLETIN :					//		发公告			////printf("\t\t\tMSG_GM_CMD_BULLETIN\n");			//printf("\t\t\t\tp_data = %s\n",p_data);			int tt,cc ;			char msg[1024] = "" ;			sscanf(p_data,"%d|%d|%[^|]",&tt,&cc,msg) ;			//printf("\t\t\t tt = %d , cc = %d , msg = %s\n",tt,cc,msg);			for( int i = 0; i < MAXMSG; i ++ ){				if( ! m_pMsg[i] ){					//printf("\t\t\tmsg num = %d\n",i);					m_pMsg[i] = new CMessage( tt,cc,msg ) ;					char sendbuf[512] ;					send_cmd_msg(sendbuf,V_MSG_USERLEVEL,MSG_GM_CMD,MSG_GM_CMD_BULLETIN,"1|1");					break ;				}			}			break ;	}	return true ;}bool MyGameRoomServer::CheckBull() {	return true ;}void MyGameRoomServer::time_process(void){	static int sendtime = 0 ;	if( ++ sendtime >= 80 ){				//		240 is 1 min(240/4=60s) 		system("date");		//printf("\t\t\t-----------	sendtime = %d	 ---------------\n",sendtime) ;		sendtime = 0 ;		for( int i = 0; i < MAXMSG; i ++ ) {			if( m_pMsg[i] != NULL ) {				if( m_pMsg[i]->CheckTime() ) {					char sendbuf[1024],mybuf[1024] ;					char msg[512] ;					m_pMsg[i]->GetMsg(msg) ;					sprintf( mybuf,"0|%s",msg) ;					send_cmd_msg(sendbuf,V_MSG_USERLEVEL,MSG_GM_CMD,MSG_GM_CMD_BULLETIN,mybuf);					//printf("\t\t\t\t\tSendMeg::%s\n",sendbuf);					for( int j = 0; j < Max_GameServer; j ++ ) {	//					if( strcmp(m_GamePlayer[j]->m_name,"")!=0 ){	//						//printf("\t\t\tm_GameServer[0]->send_all2(sendbuf,j)::%d\n",m_GamePlayer[j]->m_room_id);							m_GameServer[j]->send_all(sendbuf,NONE);	//					}					}					if( ! m_pMsg[i]->CheckCount() ){						delete m_pMsg[i] ;						m_pMsg[i] = NULL ;					}				}			}		}	}}Listener *listener;MyGameRoomServer GM(500,400);GoodsObj GoodsDB[Goods_MAX];GoodsWord GoodsWordS[Words_MAX];GoodsShop GoodsShopS[Shop_MAX];DataSQL mysql;int main(int argc, char **argv){	// Create a listener and add a port.	int i,gid;		if ( mysql.ConnectDB("192.168.0.21","online","oncity123","pcb")==-1 ) {		exit(1);	}		system("date");	srand( unsigned(time(NULL)));	GoodsEffect			tmp_effect;	GoodsAtt				tmp_emend;	GoodsAtt				tmp_confine;	//init	/*	m:money	use_flag:can use	give_flag:can give other user	sell_flag:can sell goods	level:level	pattern:物品装备在身上位置	emend:物品属性(魔法。。。。)	confine:装备限制	add_hp/add_mp/add_sp:使用后增加hp/mp...	ext_swf	*/	if(mysql.Query("select id,name,m,use_flag,give_flag,sell_flag,level,pattern,emend,confine,add_hp,add_mp,add_sp,ext_swf from goods where convert='yes'")!=-1){		if(mysql.num_rows){			while(mysql.GetData()){				gid=atoi(mysql.row[0]);				GoodsDB[gid].init(mysql.row);			}		}		mysql.FreeResult();	}else{		exit(1);	}	if(mysql.Query("select id,ahead,after,comeby from goods_code")!=-1){		if(mysql.num_rows){			while(mysql.GetData()){				gid=atoi(mysql.row[0]);				GoodsWordS[gid].id=gid;				strncpy(GoodsWordS[gid].ahead,mysql.row[1],Words_name_size);				strncpy(GoodsWordS[gid].after,mysql.row[2],Words_name_size);				Define_Emend(mysql.row[3],&GoodsWordS[gid].att);			}		}		mysql.FreeResult();	}else{		exit(1);	}	if(mysql.Query("select id,goods_list from shop where convert='yes'")!=-1){		if(mysql.num_rows){			while(mysql.GetData()){				gid=atoi(mysql.row[0]);				GoodsShopS[gid].init(gid,mysql.row[1]);			}		}	}else{		exit(1);	}	listener = new Listener();	listener->addListenPort(PORT);	//printf("Bind %d\n",PORT);		// Process events.	for(;;) {		listener->do_select();		GM.SendAll();		GM.time_process();	}		delete listener;		return 0;}void socketHandler(Socket *socket, string data){	int n;	switch(socket->status())	{		case Socket::New:			socket->setStatus(Socket::Ok); // TODO: move to code that calls handler			break;					case Socket::Close:		case Socket::Closed:						n=GM.FindPlayer_BySocket(socket->fd());			if(n != NONE ) {								// save here				GM.SavePlayerInfo(n,GM.m_GamePlayer[n]->m_name);				GM.PlayerExit(GM.m_GamePlayer[n]->m_name);			}			break;					case Socket::Ok:		////printf("here %s\n",data.c_str());			GM.process(socket,data.c_str());			break;	}}void MyGameRoomServer::my_process(char p_msg1,char p_msg2,char p_msg3,char *p_data,int player_id,int server_n) {	int i,j,k,smiley,money;	int dust_id,mapx,mapy;	int mstate,sstate,shop_id;	char mystate[1024];	int src_pos,src_id,target_pos,target_id;	char buf[4096],buf1[4096],buf_tmp[4096];	src_pos=target_pos=src_id=target_id=NONE;	money=0;	User_Goods_ST newdust;	MyGamePlayer *u=NULL;	if(player_id!=NONE)	u=(MyGamePlayer *)m_GamePlayer[player_id];	MyGameServer *s=NULL;	if(server_n!=NONE) s=(MyGameServer *)m_GameServer[server_n];			//自定义消息处理		/*			case MSG_SAY:				 if( player_id!=NONE && server_n!=NONE) {					sprintf(buf1,"%s: %s",m_GamePlayer[player_id]->m_name,p_data);

⌨️ 快捷键说明

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