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

📄 dragonloginserver2.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		strcpy( packet.u.kein.login_to_gameserver_ear_message.message, p->message );
		packet.u.kein.login_to_gameserver_ear_message.game_server = connections[game_server].server_check;
	}
	packet.h.header.size = sizeof( k_login_to_gameserver_ear_message ) - 200 + strlen( p->message );
	g_pServerTable->BroadCastToEveryServer( (char *)&packet, (sizeof(t_header)+packet.h.header.size ), SERVER_TYPE_MAP );
}

void RecvEarMessageOk( k_send_ear_message_ok_to_login *p )		// 绢恫 霸烙辑滚俊辑 己傍利栏肺 皋矫瘤甫 焊陈促绰 雀脚
{
	if( !p->gameserver_port ) return;
	for(int i = 0; i < LOGIN_MAX_CONNECTIONS; i ++)		
	{
		if( connections[i].server_check == p->gameserver_port )
		{
			t_packet packet;
			packet.h.header.type = CMD_SEND_EAR_MESSAGE_OK;
			{
				packet.u.kein.loginserver_to_gameserver_ear_message.server_id = p->server_id;
				strcpy( packet.u.kein.loginserver_to_gameserver_ear_message.name, p->name );
			}
			packet.h.header.size = sizeof( k_loginserver_to_gameserver_ear_message );
			//			QueuePacket( connections, p->gameserver_port, &packet, 1 );
			QueuePacket( connections, i, &packet, 1 );
			break;
		}
	}
}

void RecvEarMessageResult( k_send_ear_message_result *p )
{
	t_packet packet;
	packet.h.header.type = CMD_LOGIN2GAME_EAR_MESSAGE_RESULT;
	{
		packet.u.kein.login2game_ear_message_result.send_server_id = p->send_server_id;
		packet.u.kein.login2game_ear_message_result.ret = p->ret;
	}
	packet.h.header.size = sizeof( k_login2game_ear_message_result );
	
	for(int i = 0; i < LOGIN_MAX_CONNECTIONS; i ++)
	{
		if(connections[i].server_check == p->send_game_server )
		{
			QueuePacket( connections, i, &packet, 1 );
			return;
		}
	}
}

void RecvCheckName( char *name, short int server_id, short int cn )
{
	int ret_type;
	if( CheckName_SQL( name ) ) {ret_type = CMD_THEREIS_CHARNAME ;}
	else {ret_type = CMD_THEREIS_NO_CHARNAME;}
	
	t_packet packet;
	packet.h.header.type = CMD_GAME2LOGIN_CHECK_NAME;
	{
		packet.u.kein.login2game_ear_message_result.send_server_id= server_id;
		packet.u.kein.login2game_ear_message_result.ret = ret_type;
	}
	packet.h.header.size = sizeof( k_login2game_ear_message_result );
	QueuePacket( connections, cn, &packet, 1 );
}


void CheckMoveItem( k_moving_item *p )
{
	char *pos_type[20] = { "HAND", "INV", "EQUIP", "QUICK", "BANK", "BOX", "MAKE", "OTHER_CH", "CHARACTER", "GROUND", "USE", "BUY", "SELL", "DELETE", "EXCHANGE" };
	
	FILE *fp;
	char temp[MAX_PATH];
	sprintf( temp, ".\\logout_item\\%s_酒捞袍捞悼.txt", p->name );
	fp = fopen( temp, "at+" );
	if( !fp ) return;
	
	CItem *t = ItemUnit( p->item );
	if( !t ) 
	{
		fclose( fp );
		return;
	}
	
	if( t->GetRbutton() == DIVIDE_ITEM )
		fprintf( fp, "酒捞袍:%s, 荐樊:%9ld, 困摹:[%8s] ===> 困摹:[%8s]     捣:[%8ld]\n", t->GetHanName(), p->item.attr[IATTR_MUCH], pos_type[p->source_type], pos_type[p->dest_type], p->money );
	else
	{
		WORD dur_curr, dur_max;
		GetItemDuration( p->item, dur_curr, dur_max );
		fprintf( fp, "酒捞袍:%s, Dur :%4d/%4d, 困摹:[%8s] ===> 困摹:[%8s]     捣:[%8ld]\n", t->GetHanName(), dur_curr, dur_max, pos_type[p->source_type], pos_type[p->dest_type], p->money );
	}
	
	fclose( fp );
}

void RecvGuildMailTitle( int guild_code, short int server_id, short int game_id )
{
	k_guild_mail mail[12] = {0, };
	
	int max = GetGuildMailTitle(guild_code, mail );
	if( max > 0 )
	{
		t_packet packet;
		packet.h.header.type = CMD_REP_RECV_GUILD_MAIL_TITLE;
		{
			packet.u.kein.login_to_game_mail_title.server_id = server_id;
		}
		for( int i=0; i<max; i++ )
		{
			packet.u.kein.login_to_game_guild_mail_title.degree = mail[i].degree;
			packet.u.kein.login_to_game_guild_mail_title.mail_id = mail[i].mail_id;
			packet.u.kein.login_to_game_guild_mail_title.mail_year = mail[i].year;
			packet.u.kein.login_to_game_guild_mail_title.mail_month = mail[i].month;
			packet.u.kein.login_to_game_guild_mail_title.mail_day = mail[i].day;
			strcpy( packet.u.kein.login_to_game_guild_mail_title.mail_name, mail[i].send_name );
			strcpy( packet.u.kein.login_to_game_guild_mail_title.mail_title, mail[i].mail_title );
			
			packet.h.header.size = sizeof( k_login_to_game_guild_mail_title ) - 60 + strlen( mail[i].mail_title );
			QueuePacket( connections, game_id, &packet, 1 );
		}
	}
}

// 020808 YGI --------------------------

extern CServerTable*	g_pServerTable;
void RecvChangeMapData1( t_packet *pPacket )
{
	// CMD_CHANGE_MAP_DATA1
	for(int i = 0; i < LOGIN_MAX_CONNECTIONS; i ++)
	{
		if(connections[i].server_check == pPacket->u.kein.change_map1.game_port )
		{
			QueuePacket( connections, i, pPacket, 1 );
			return;
		}
	}
}


// 010218
void RecvChangeLogintableByChangemap( char *user_id, char *map_name, short int server_id, short int cn )
{
	if( ::UpdateLogintablebyChangeMap( user_id, map_name ))
	{
		t_packet tp;
		tp.h.header.type = CMD_JOINABLE;
		tp.u.ls_joinable.server_id = server_id;
		tp.h.header.size = sizeof( t_ls_joinable );
		
		::QueuePacket( connections, cn, &tp, 1 );
	}
}


void ReSendBoxItemEach( k_login_put_box_item *box )
{
	PutBoxItem_SQL( box->box_id, box->para, &box->item  );
	
	/*	t_packet p;
	p.h.header.type = CMD_RECALL_BOX_ITEM;
	p.u.kein.login_put_box_item = *box;
	p.h.header.size = sizeof( k_login_put_box_item );
	
	  
		for(int i = 0; i < LOGIN_MAX_CONNECTIONS; i ++)
		{
		if( connections[i].socket && connections[i].server_check )
		{
		QueuePacket( connections, i, &p, 1 );
		}
}*/
}


// 傈档茄荤恩捞 霸烙 辑滚俊 乐绰瘤 眉农秦辑 努扼捞攫飘肺 焊郴霖促.
void RecvFaithUp( char *name, short int point )
{
	t_packet p;
	p.h.header.type = CMD_REQ_FAITH_UP;
	strcpy( p.u.kein.req_faith_up.name, name );
	p.u.kein.req_faith_up.up_point = point;
	p.h.header.size = sizeof( k_req_faith_up );
	
	g_pServerTable->BroadCastToEveryServer( (char *)&p, (sizeof(t_header)+p.h.header.size ), SERVER_TYPE_MAP );
}

void SendOhMyParty( char *my_name, char *party_name )
{
	t_packet p;
	p.h.header.type = CMD_OH_MY_PARTY;
	
	strcpy( p.u.kein.oh_my_party.my_name, my_name );
	strcpy( p.u.kein.oh_my_party.party_name, party_name );
	
	p.h.header.size = sizeof( k_oh_my_party );
	g_pServerTable->BroadCastToEveryServer( (char *)&p, (sizeof(t_header)+p.h.header.size ), SERVER_TYPE_MAP );
	
}


//////////////////////////////////////////////////////////
//	傍瘤 荤亲阑 叼厚俊辑 佬绢辑 傈眉肺 谎妨霖促.

void SendLoginToGameServerMessage( int type, char *szTemp )
{
	if( !szTemp ) return;
	t_packet p;
	int len=strlen( szTemp );
	int max = (len / 512)+1;
	
	p.h.header.type = type;
	for( int i=0; i<max; i++ )
	{
		char *temp = szTemp+512*i;
		strncpy( p.u.kein.server_text_default.text, temp ,512 );
		p.u.kein.server_text_default.len = len;
		
		p.h.header.size = sizeof( k_server_text_default );
		g_pServerTable->BroadCastToEveryServer( (char *)&p, (sizeof(t_header)+p.h.header.size ), SERVER_TYPE_MAP );
	}
}

void SendPublicBbs()
{
	GetPublicBbs( &public_bbs );
	SendLoginToGameServerMessage( CMD_LOGIN_TO_GAME_PUBLIC_BBS, public_bbs );
}

void SendLearnedItem( t_connection c[], short int cn )	
{
	t_packet packet;
	
	packet.h.header.type = CMD_SEND_LEARN_ITEM_INDEX;
	{
		packet.u.kein.server_learn_item.item_count = c[cn].chrlst.ItemMax;
		memcpy( packet.u.kein.server_learn_item.item, c[ cn].chrlst.Item,	sizeof( short int ) * c[cn].chrlst.ItemMax );
	}
	packet.h.header.size = sizeof( k_server_learn_item );
	QueuePacket( c, cn, &packet, 1);
}

void SendPublicBbsEach( short int server_id, short int game_id )
{
	GetPublicBbs( &public_bbs );
	if( !public_bbs  ) return;
	
	t_packet p;
	int len=strlen( public_bbs  );
	int max = (len / 512)+1;
	
	p.h.header.type = CMD_CALL_PUBLIC_BBS_ONLY_ONE;
	for( int i=0; i<max; i++ )
	{
		char *temp = public_bbs +512*i;
		strncpy( p.u.kein.server_text_only_one.text, temp ,512 );
		p.u.kein.server_text_only_one.len = len;
		p.u.kein.server_text_only_one.server_id = server_id;
		
		p.h.header.size = sizeof( k_server_text_only_one );
		QueuePacket( connections, game_id, &p, 1 );
	}
}

void RecvHunterRegist( k_hunter_regist2 *p )
{
	int ret = InsertHunterList( p->target_name, p->regist_name, p->money, p->text );
}

void RecvGetHunterList( int list_id, short int server_id, short int game_id)
{
	k_hunter_list list;
	int ret = GetHunterList( list_id, &list, 1 );		// 酒捞叼 官肺 关狼 郴侩阑 啊廉柯促.
	if( ret != 1 ) return;
	
	t_packet p;
	p.h.header.type = CMD_SEND_HUNTER_LIST;
	p.u.kein.login_game_hunter_list.server_id = server_id;
	p.u.kein.login_game_hunter_list.list = list;
	p.h.header.size = sizeof( k_login_game_hunter_list )-1000+(strlen(list.text ));
	QueuePacket( connections, game_id, &p, 1 );
}

void RecvKillHunter( int list_id, char *hunter_name, short int server_id, short int game_id )
{
	t_packet p;
	k_hunter_list list;
	int ret = GetHunterList( list_id, &list, 0 );		// 酒捞叼肺 撅技胶 茄促.
	if( ret != 1 || !list.index )		// 孽府巩俊 角菩沁芭唱 府胶飘狼 牢郸胶啊 绝阑 版快 
	{
		p.h.header.type = CMD_KILL_HUNTER_LIST_CANCEL;
		p.u.kein.server_id.server_id = server_id;
		p.h.header.size = sizeof( k_server_id );
		QueuePacket( connections, game_id, &p, 1 );
	}
	else 
	{
		DeleteHunterList( list_id );		// 郴侩阑 昏力茄促.
		// 霸烙辑滚肺 捣窍绊 郴侩阑 焊郴霖促.	// 贸府茄 荤恩俊霸 沥焊甫 焊郴霖促.
		p.h.header.type = CMD_KILL_HUNTER_LIST_OK;
		//			strcpy( p.u.kein.send_kill_hunter_list.target_name, list.target_name);
		//			strcpy( p.u.kein.send_kill_hunter_list.regist_name, list.regist_name);
		p.u.kein.send_kill_hunter_list.money = list.money;
		p.u.kein.send_kill_hunter_list.server_id = server_id;
		p.h.header.size = sizeof( k_send_kill_hunter_list );
		QueuePacket( connections, game_id, &p, 1 );
		
		// 搬苞甫 泅惑裹 扒 荤恩俊霸 皋老肺 舅妨 霖促.
		EatRearWhiteChar( list.regist_name );
		EatRearWhiteChar( list.target_name);
		k_game_to_login_send_mail result;
		//< CSD-030324
		char ini_from[20];
		char ini_title[60];
		char ini_body[1000];

		ini_from[0] = 0;
		ini_title[0] = 0;
		ini_body[0] = 0;

// thai YGI
		if(GetPrivateProfileString("hunter_mail","from","",ini_from,20,MapServerConfigFileName) > 0)
		{
			GetPrivateProfileString("hunter_mail","title","",ini_title,60,MapServerConfigFileName);
			GetPrivateProfileString("hunter_mail","body","",ini_body,1000,MapServerConfigFileName);
		}

		if( ini_from[0] && ini_title[0] && ini_body[0] )
		{
			strcpy( result.send_name, ini_from ); 
			strcpy( result.uni.recv_name, list.regist_name );
			strcpy( result.title, ini_title );
			sprintf( result.body, ini_body, list.target_name, hunter_name, list.target_name, list.regist_name, list.money );
		}
		else
		{		
			if(LocalMgr.IsAbleNation(CHINA))//021007 lsw
			{
				strcpy( result.send_name, "佣兵军团" ); 
				strcpy( result.uni.recv_name, list.regist_name );
				strcpy( result.title, "[公告] 抓到通缉犯!" );
				sprintf( result.body, 	"抓到了您想抓的悬赏犯 '%s'。\n"
					"[%s] 抓到了 '%s',所以得到了 %s 设定的悬赏金 %d。\n"
					"以后我们佣兵军团还是会尽力捉拿悬赏犯。"
					, list.target_name, hunter_name, list.target_name, list.regist_name, list.money );
				
			}
			else if(LocalMgr.IsAbleNation(TAIWAN|HONGKONG))//021007 lsw
			{
				strcpy( result.send_name, "赌

⌨️ 快捷键说明

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