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

📄 dragonloginserver2.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "StdAfx.h"

#include "MAIN.H"
#include "Scrp_exe.H"
#include "Citem.h"
#include "dragonloginserver2.h"
#include "map.h"
#include <direct.h>	// 021008 YGI

#include "ServerTable.h"
#include "MailMgr.h"


/////////////////////////////////////////////////////////////////////////////////////////
char *public_bbs;

extern NPCLev_to_Exp NPC_Lev_Ref[]; // CSD-030306
t_mapinfo MapInfo[ MAX_MAP_];

/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////

int CheckHandleByKein( t_packet *p, t_connection c[], int cn )
{
	switch( p->h.header.type )
	{
	case CMD_LOGIN_GET_BOX_ITEM			:	RecvGetBoxItem( p->u.kein.req_login_server_box_open.box_id, p->u.kein.req_login_server_box_open.server_id, cn, c ); break;
	case CMD_PUT_BOX_ITEM				:	ReSendBoxItemEach( &p->u.kein.login_put_box_item ); break;
		
	case CMD_LOGIN_PREACH_NAME			:	RecvPreachName( &p->u.kein.loginserver_preach_name, cn, c ); break;
	case CMD_LOGIN_PREACH_NAME_OK		:	RecvPreachNameOk( +10, &p->u.kein.loginserver_preach_name ); break;
	case CMD_LOGIN_PREACH_NAME_CANCEL	:	RecvPreachNameOk( -10, &p->u.kein.loginserver_preach_name ); break;
	case CMD_LOGIN_EVANGELIST_CREATE	:	UpdateEvaName( p->u.kein.login_sql_evangelist_create.my_name , p->u.kein.login_sql_evangelist_create.eva_name ); break;
	case CMD_LOGIN_EVANGELIST_DELETE	:	UpdateEvaName( p->u.kein.login_sql_evangelist_delete.my_name, "" ); break;
	case CMD_CHECK_NEW_CHAR				:	SendNewCharResult( p->u.kein.check_new_char.name, cn ); break;
		
	case CMD_GET_GOD_TABLE				:	SendGodTable( cn ); break;
	case CMD_CHAR_UPDATE_DATA_BY_KEIN	:	RecvUpdateCharByKein( &p->u.kein.char_update_data ); break;
	case CMD_GET_CHARINFO_BY_KEIN		:	SendGetCharInfoByKein( &p->u.kein.req_chr_info_etc, cn ); break;
	case CMD_SEND_EAR_MESSAGE_OTHER		:	SendEachGameServerForEarMessage( &p->u.kein.login_send_ear_message, cn );	break;	// 庇加富阑 困秦 阿 霸烙 辑滚肺 傈价 秦夯促.
	case CMD_SEND_EAR_MESSAGE_OK		:	RecvEarMessageOk( &p->u.kein.send_ear_message_ok_to_login ); break;
	case CMD_SEND_EAR_MESSAGE_RESULT	:	RecvEarMessageResult( &p->u.kein.send_ear_message_result ); break;
	case CMD_GAME2LOGIN_CHECK_NAME		:	RecvCheckName( p->u.kein.loginserver_to_gameserver_ear_message.name, p->u.kein.loginserver_to_gameserver_ear_message.server_id, cn ); break;		// 备炼眉 喊妨靖
		
	case CMD_GAME2LOGIN_MOVING_ITEM		:	CheckMoveItem( &p->u.kein.moving_item ); break;
	
	case CMD_CHANGE_MAP_DATA1			:
	case CMD_CHANGE_MAP_DATA2			:
	case CMD_CHANGE_MAP_DATA3			:
	case CMD_CHANGE_MAP_DATA4			:
	case CMD_CHANGE_MAP_DATA5			:
	case CMD_CHANGE_MAP_DATA6			:
	case CMD_CHANGE_MAP_DATA7			:
	case CMD_CHANGE_MAP_DATA8			:
	case CMD_CHANGE_MAP_DATA9			:	RecvChangeMapData1( p ); break;
		
	case CMD_ACCESS_JOIN_KEIN			:	RecvChangeLogintableByChangemap( p->u.gs_req_insert_userid.id, p->u.gs_req_insert_userid.mapname, p->u.gs_req_insert_userid.server_id, cn ); break;
	case CMD_IF_DOUBLE_BOX_THEN_DELETE	:	RecvDoubleBoxFind( p->u.kein.game2login_recall_box_item.box_id,p->u.kein.game2login_recall_box_item.server_id, cn ); break;
	case CMD_REQ_FAITH_UP				:	RecvFaithUp( p->u.kein.req_faith_up.name, p->u.kein.req_faith_up.up_point ); break;
		
	case CMD_CALL_PUBLIC_BBS			:	SendPublicBbsEach( p->u.kein.server_id.server_id, cn ); break;
	case CMD_HUNTER_REGIST				:	RecvHunterRegist( &p->u.kein.hunter_regist2 ); break;
	case CMD_GET_HUNTER_LIST			:	RecvGetHunterList( p->u.kein.game_login_hunter_list.list_id, p->u.kein.game_login_hunter_list.server_id, cn); break;
	case CMD_KILL_HUNTER_LIST			:	RecvKillHunter( p->u.kein.kill_hunter_list_login.list_id, p->u.kein.kill_hunter_list_login.hunter_name, p->u.kein.game_login_hunter_list.server_id, cn );break;
		
	case CMD_DELETE_BOX_ITEM			:	DeleteBox( p->u.kein.default_dword ); break;
		
	case CMD_RESET_JOB					:	RecvResetJob( p, cn ); break;
	case CMD_SELECT_NATION				:	RecvSelectNation( p, cn ); break;
	case CMD_EXIST_NAME					:	RecvExistName( p, cn ); break;
	case CMD_ISSAME_MY_NATION			:	RecvExistNameForNation( p, cn ); break;
		
	case CMD_REGIST_CANDIDATE			:	RecvRegistCandidate( p, cn ); break;
	case CMD_IS_THIS_MAN_CANDIDATE		:	isThisManCandidate( p, cn ); break;	// 饶焊 殿废啊瓷茄 某腐磐牢瘤 酒囱瘤
	case CMD_CHECK_VOTE					:	CheckVote( p, cn ); break;
		
	case CMD_SET_VALUE_OF_VOTE			:	GetVoteValue( cn ); break;
	case CMD_VOTE_GAME2LOGIN			:	CheckAndUpdateVote( p, cn ); break;
		
	case CMD_REQ_VOTE_SCORE				:	RecvVoteScore( p, cn ); break;
	case CMD_SEND_ALL_MSG				:	RecvNationMsg( p, cn ); break;
		
	case CMD_YOU_ARE_KING_LOG2LOG		:	SendYouAreKingLog2Client( p->u.kein.default_name, CMD_YOU_ARE_KING_LOG2CLIENT ); break;
	case CMD_YOU_ARE_NO_KING_LOG2LOG	:	SendYouAreKingLog2Client( p->u.kein.default_name, CMD_YOU_ARE_NO_KING_LOG2CLIENT ); break;
		
	case CMD_GUILD_JOIN_SERVER			:	CheckGuildJoin( p, cn ); break;
	case CMD_GUILD_ALL_MSG				:	SendGuildAllMsg( p, cn ); break;
	case CMD_GM_REGIST					:	RecvGmRegist( p ); break;
	case CMD_BBS_ALL					:	RecvReturnGameServer( p ); break;		// 绊措肺 霸烙辑滚肺 葛滴 倒妨拎滚赴促.
	case CMD_REP_STOP_WAR_REFUSAL_TO_LOGIN	:	RecvRepStopWarRefusal( p ); break;	// 绒傈 夸没 芭例
	case CMD_REQ_STOP_WAR_TO_LOGIN			:	RecvReqStopWar( p, cn ); break;	// 绒傈 夸没
	case CMD_REP_STOP_WAR_ACCEPT_TO_LOGIN	:	RecvRepStopWarAccept( p ); break;
		
	case CMD_REQ_SALVATION_MONEY			:	RecvReqSalvationMoney( p, cn ); break;		// 扁何陛 夸没
	case CMD_SALVATION_MONEY				:	RecvInsertSalvation(p, cn ); break;			// 扁何茄吧 历沥
		
	case CMD_EAT_CHOCOLATE					:	RecvEatChocolate( p, cn ); break;
	case CMD_PAY_RUMOR						:	RecvCheckChocolate( p, cn ); break;
	case CMD_OPENSCHOOL_DATA				:	RecvSaveOpenSchoolEvent( p, cn ); break;
		
	case CMD_GUILD_EXIT_COMMAND_GLOBAL		:	RecvExitGiild( p, cn ); break;
		
	case CMD_EAT_CANDY						:	RecvCheckCandy( p ); break;
		
	case CMD_UPDATE_LADDER_SCORE			:	RecvUpdateLadderScore( p ); break;
	case CMD_REQ_RANK_LADDER				:	RecvReqRankLadder( p, cn ); break;
		
		
	case CMD_REQ_SEARCH_RANK_LADDER			:	RecvSearchRankLadder( p, cn ); break;
	case CMD_SAVE_NATION_INFO				:	SaveNationInfo_SQL( &p->u.kein.save_nation_info ); break;
		
		// 抛胶飘 侩 菩哦..
	case CMD_SAVE_GUILD_MARK_IMAGE			:	UpdateGuildMark( 1, p->h.header.size-2, (BYTE *)p->u.kein.send_db_direct_map.data ); break;
		
		// 角力 捞固瘤 历厘 菩哦
	case CMD_REGIST_GUILD_MARK				:	RecvRegistGuildMark( p, cn ); break;
	case CMD_REGIST_GUILD_IMSI				:	RecvRegistGuild_DB( p, cn ); break;
	case CMD_REQ_GUILD_EXPLAIN				:	RecvReqGuildExplain( p, cn ); break;
		
	case CMD_REGIST_GUILD					:	RecvRegistGuild( p, cn ); break;
	case CMD_REQ_GUILD_IMAGE				:	SendGuildImage( p, cn ); break;
		
	case CMD_SAVE_GUILD_MEMBER_LIST			:	RecvSaveGuildMemberList( p ); break;
	case CMD_UPDATE_GUILD_MAIL_ID			:	RecvUpdateGuildMailId( p ); break;
	case CMD_GUILD_MASTER_AND_SUBMASTER		:	RecvGuildMasterAndSubMaster(p, cn ); break;
		
	case CMD_REGIST_GUILD_CHECK				:	RecvRegistGuildCheck( p, cn ); break;
	case CMD_CHECK_SUB_MASTER				:	RecvCheckSubMaster( p, cn ); break;
	case CMD_CHANGE_GUILD_DEGREE			:	RecvChangeGuildDegree( p, cn ); break;
	case CMD_DELETE_GUILD					:	RecvChangeDeleteGuild( p ); break;
		
	case CMD_CHANGE_COLOR					:	RecvChangeColor( p ); break;
	case CMD_CHECK_SALVATION_NAME			:	CheckSalvationName( p, cn ); break;
	case CMD_REFRESH_SALVATION_NAME			:	RecvDeleteSalvation( ); break;
	case CMD_GET_NAME_GUILD_MEMBER_LIST		:	RecvGetNameOfGuildMemberList( p, cn ); break;
	case CMD_GET_GUILD_NOTICE				:	RecvGetGuildNotice( p, cn ); break;
	case CMD_SEND_GUILD_NOTICE				:	RecvRegistGuildNotice( p, cn );break;
		
	case CMD_REGIST_FRIEND					:	RecvRegistFriend( p, cn );break;
	case CMD_GET_FRIEND						:	RecvGetFriend( p, cn ); break;
	case CMD_SERVER_EXIT_GAME				:	RecvLogout( p ); break;
	case CMD_DELETE_FRIEND					:	DeleteFriend( p, cn ); break;
		
	case CMD_CHECK_GUILD_NAME				:	RecvCheckGuildName( p, cn ); break;
	case CMD_CHECK_GUILD_OTHER_CHARACTER	:	RecvCheckGuildOthercharacter( p, cn ); break;
		
	case CMD_ADD_EVENT_ITEM					:	RecvAddEventItem( p, cn ); break;
		
	case CMD_GET_GUILD_ITEM_FIRST			:	RecvGetGuildItemFirst( p, cn ); break;	// 辨靛 酒捞袍 格废
	case CMD_GET_GUILD_ITEM					:	RecvGetGuildItem( p, cn ); break;		// 辨靛 酒捞袍 格废 啊廉坷扁
	case CMD_PUT_GUILD_ITEM					:	RecvPutGuildItem( p ); break;
	case CMD_GET_GUILD_ITEM_MAP				:	RecvGetGuildItemMap( p, cn ); break;		// 角力 酒捞袍阑 啊廉柯促.
		
	case CMD_GET_GUILD_BOX_MONEY			:	RecvGetGuildBoxMoney( p, cn ); break;
	case CMD_CHECK_GUILD_BOX_MONEY			:	RecvCheckGuildBoxMoney( p, cn ); break;
		
	case CMD_ADD_GUILD_BOX_MONEY			:	RecvUpdateGuildBoxMoney(); break;
		
	case CMD_GET_GUILD_ITEM_COUNT			:	RecvGetGuildItemCount( p, cn ); break;
		
	case CMD_CHANGE_GUILD_MASTER			:	RecvChangeGuildMaster( p, cn ); break;
	case CMD_CHANGE_GUILD_MASTER_SUB		:	RecvChangeGuildMasterBySubMaster(p, cn ); break;
	case CMD_REGIST_SUB_GUILD_MASTER		:	RecvRegistSubMaster( p, cn ); break;
	case CMD_GUILD_HOUSE_INFO				:	RecvGuildHouseInfo( p, cn ); break;
	case CMD_CHANGE_GUILDHOUSE_INFO			:	RecvChangeGuildHouseInfo( p, cn ); break;
	case CMD_CHECK_GUILD_HOUSE				:	RecvCheckGuildHouse(); break;		// 窍风俊 茄锅
		
		//021030 YGI
	case CMD_SAVE_AMOUNT_EVENT_NPC_ITEM		:	RecvSaveAmountEventNpcItem( p ); break;
		
		//021107 YGI
	case CMD_CHECK_EVENT_SCRIPT_ITEM		:	RecvCheckEventScriptItem( p, cn ); break;
	case CMD_CHECK_EVENT_MOVE_MAP			:	RecvCheckEventMoveMap( p, cn ); break;
		
	case CMD_SAVE_EVENT_MAPMOVE_NOW			:	RecvSaveEventMapMoveNow( p, cn ); break;
	case CMD_GET_TREASURE_MAP_DETAIL_DB:
		{	// 040105 YGI
			RecvGetTreasureMapAttr( p, cn );
			break;		
		}
	case CMD_SERVER_KILLPC:	break;
		
		
		
		break;
	default	:
		{
			return(-31);
		}
	}
	return 1;
}






/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
void RecvGetBoxItem( DWORD box_id, short int server_id, short int gameserver_id, t_connection c[] )
{
	t_packet packet = {0, };
	
	packet.h.header.type = CMD_LOGIN_GET_BOX_ITEM ;
	{
		packet.u.kein.login_server_box_open.server_id = server_id;
		for( int i=0; i<MAX_BOX_ITEM; i++ )
		{
			int ret = GetBoxItem_SQL( box_id, i, &packet.u.kein.login_server_box_open.box_item[i] );		// 蔼 啊瘤败坷 角菩甫 秦档 傈价秦拎具 茄促.
		}
		packet.u.kein.login_server_box_open.box_id= box_id;
		//AccessBoxData( box_id );
	}
	packet.h.header.size = sizeof( k_login_server_box_open );
	QueuePacket( c, gameserver_id, &packet, 1 );
}

void RecvDoubleBoxFind( DWORD box_id, short int server_id, short int gameserver_id )
{
	t_packet packet;
	packet.h.header.type = CMD_IF_DOUBLE_BOX_THEN_DELETE ;		// 度鞍篮 冠胶啊 乐绰 版快 窍唱甫 瘤况滚赴促.
	packet.u.kein.game2login_recall_box_item.box_id= box_id;	
	packet.u.kein.game2login_recall_box_item.server_id= server_id;	
	packet.h.header.size = sizeof( k_game2login_recall_box_item );
	
	g_pServerTable->BroadCastToEveryServer( (char *)&packet, (sizeof(t_header)+packet.h.header.size ), SERVER_TYPE_MAP );
}

void RecvPreachName( k_loginserver_preach_name *data,  short int gameserver_id, t_connection c[] )
{
	int ret;
	t_packet packet = {0, };
	
	if( CheckName_SQL( data->name ) )
	{
		int believe, faith;
		ret = GetBelieveAndFaith_SQL( believe, faith, data->name );
		if( ret )
		{
			if( believe == data->believe_god ) packet.u.kein.loginserver_preach_name_result.result = 1;		// 己傍
			else packet.u.kein.loginserver_preach_name_result.result = 3; // 弊 荤恩篮 弊 脚傈俊 殿废登绢 乐瘤 臼促.
		}
		else packet.u.kein.loginserver_preach_name_result.result = 4;		// 孽府巩捞 角青捞 救 等惑怕
	}
	else
		packet.u.kein.loginserver_preach_name_result.result = 2;	// 弊繁 荤恩 绝促.
	
	packet.h.header.type = CMD_LOGIN_PREACH_NAME ;
	{
		packet.u.kein.loginserver_preach_name_result.server_id= data->server_id;
		//		packet.u.kein.loginserver_preach_name_result.result= data->server_id;
		packet.u.kein.loginserver_preach_name_result.believe_god= data->believe_god;
		sprintf( packet.u.kein.loginserver_preach_name_result.name ,data->name );
	}
	packet.h.header.size = sizeof( k_loginserver_preach_name_result);
	QueuePacket( c, gameserver_id, &packet, 1 );
}

void RecvPreachNameOk( int plus, k_loginserver_preach_name *data )		// 傈档茄 荤恩 脚居缴 棵妨林扁
{
	int ret;
	int faith, believe;
	
	ret = GetBelieveAndFaith_SQL( believe, faith, data->name );
	if( ret )
	{
		if( believe == data->believe_god ) 
		{
			faith += plus; // 歹秦林绰 扁夯 荐摹
			if( faith > 1000 ) faith = 1000;
			if( faith < 0 ) faith = 0 ;
			UpdateFaith_SQL( (short int )faith, data->name );
		}
	}
	return;
}

void SendNewCharResult( char *name, short int cn )	
{
	int is_new;
	int ret;
	
	ret = GetCharNew( is_new, name );
	
	t_packet packet;
	if( is_new || ret == 0)							// 1篮 备 某腐磐, 0篮 货肺款 某腐磐
		packet.h.header.type = CMD_CHECK_NEW_CHAR_NOT;
	else 
		packet.h.header.type = CMD_CHECK_NEW_CHAR_OK;
	
	packet.h.header.size = 0;
	QueuePacket( connections, cn, &packet, 1 );
}

void SendGodTable( short int cn )
{
	t_packet packet;
	
	packet.h.header.type = CMD_GET_GOD_TABLE ;
	packet.h.header.size = sizeof( k_get_god_table );
	{
		for( int i=0; i<MAX_GOD; i++ )
		{
			int ret;
			ret = GetGodMeetingTime( packet.u.kein.get_god_table.day,  
				packet.u.kein.get_god_table.month,
				packet.u.kein.get_god_table.year, i );
			
			if( ret ) QueuePacket( connections, cn, &packet, 1 );
		}
	}
}

void RecvUpdateCharByKein( k_char_update_data *p )
{
	UpdateCharStatusByKein( p );
}

void SendGetCharInfoByKein( k_req_chr_info_etc *p, short int cn )
{
	k_get_char_info t;
	
	GetCharDataStatusByKein( &t, p->name );
	
	t_packet packet;
	packet.h.header.type = CMD_GET_CHARINFO_BY_KEIN;
	{
		strcpy( packet.u.kein.get_char_info.name, p->name );	// 030923 HK YGI
		packet.u.kein.get_char_info.server_id		= p->server_id;
		packet.u.kein.get_char_info.believe_god		= t.believe_god;
		packet.u.kein.get_char_info.faith			= t.faith;
		packet.u.kein.get_char_info.god_cast_level	= t.god_cast_level;
	}
	
	packet.h.header.size = sizeof( k_get_char_info );
	QueuePacket( connections, cn, &packet, 1 );
}

void SendEachGameServerForEarMessage( k_login_send_ear_message *p, short int game_server )
{
	if( !CheckName_SQL( p->recv_name ) ) return;		// 弊繁 仇 粮犁窍瘤 臼澜.
	
	t_packet packet;
	packet.h.header.type = CMD_SEND_EAR_MESSAGE_OTHER;
	{
		packet.u.kein.login_to_gameserver_ear_message.server_id = p->server_id;
		packet.u.kein.login_to_gameserver_ear_message.nation = p->nation;
		strcpy( packet.u.kein.login_to_gameserver_ear_message.recv_name, p->recv_name );
		strcpy( packet.u.kein.login_to_gameserver_ear_message.send_name, p->send_name );

⌨️ 快捷键说明

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