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

📄 dragonloginserver.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			{
				break;
			}// 1: 抗傈 某腐磐	0: 货肺款 某腐磐
		}
		else 
		{
			break;
		}

		if( !CheckIsRealName( connections[cn].id, packet->u.client_connect_info.name ) )
		{
			break;
		}

		// 010301 khs  probide to hacking..
		memset(c[cn].name, 0, NM_LENGTH);
		strcpy(c[cn].name, packet->u.client_connect_info.name);

		StartMap		= packet->u.client_connect_info.startmap;	
		StartPosition	= packet->u.client_connect_info.startposition;
		
		if( StartMap < 0 || StartMap > 1 )				StartMap = 0;

		if( StartPosition == 99 ) 
		{			
		}			
		else if( StartPosition < 1 || StartPosition > 20 )
		{
			StartPosition = 1;
		}
					
		c[cn].chrlst.startmap		= StartMap;
		c[cn].chrlst.startposition	= StartPosition;
						
		memset(packet, 0, sizeof(t_packet));
		int ret = GetCharDB_SQL(c, cn);
		if( ret )		
		{				
			CheckStartMap( c, cn, StartPosition );		// 1004 YGI
			ret = GetCharGameDB_SQL(c,cn);
		}
		if( c[cn].chrlst.Hp == 0 )
		{	
			c[cn].chrlst.bAlive		= DEAD_; 
			c[cn].chrlst.Condition	= CON_DEATH;
			c[cn].chrlst.viewtype	= VIEWTYPE_GHOST_;
		}	
		else 
		{	
			c[cn].chrlst.bAlive 	= ALIVE_;
			c[cn].chrlst.Condition	= CON_NORMAL;
			c[cn].chrlst.viewtype	= VIEWTYPE_NORMAL_;
		}		
			
		if( c[cn].chrlst.startposition != 99 ) // 盔贰狼 困摹俊 甸绢埃促. 
		{	
			strcpy( c[cn].mapname, StartMapPosition[ StartMap][ StartPosition ] );
			strcpy( c[cn].chrlst.MapName, StartMapPosition[ StartMap][ StartPosition ] );
		}	
			
		if(ret == 1)
		{	
			//< CSD-030324
			extern void CheckNewGuildCode( CHARLIST *ch );
			CheckNewGuildCode( &c[cn].chrlst );
			//> CSD-030324
			packet->h.header.type = CMD_USER_DB;
			{
				PutPacketCharDB( c, cn, packet );
			}
			packet->h.header.size = sizeof(t_server_user_db_data);
			if(!QueuePacket(c, cn, packet, 1)) break;
		}	
		else // Invalid DB
		{	
			::MyLog(1, "Invalid DB [%s]", c[cn].name);

			packet->h.header.type = CMD_INVALID_DB;
			packet->h.header.size = 0;
			QueuePacket(c, cn, packet, 1);
			break;				
		}					
		break;				
	}
							
	case CMD_CHR_ITEM_INFO_0 :
		{					
			//------------------------------------------------------------
			// Send Char Binary Data
			//------------------------------------------------------------
			get_BinaryData_from_Chr_Info(	(UCHAR *)c[cn].chrlst.Ws, 
											(UCHAR *)c[cn].chrlst.Ps, 
											(UCHAR *)c[cn].chrlst.Skill, 
											(UCHAR *)c[cn].chrlst.skillexp, 
											(UCHAR *)c[cn].chrlst.tac_skillEXP, 
											(UCHAR *)var[c[cn].chrlst.server_id], 						
											(UCHAR *)c[cn].chrlst.inv, 
											(UCHAR *)c[cn].chrlst.equip, 
											(UCHAR *)c[cn].chrlst.quick, 
											(UCHAR *)c[cn].chrlst.party, 
											(UCHAR *)c[cn].chrlst.relation, 
											(UCHAR *)c[cn].chrlst.employment, 
											(UCHAR *)c[cn].chrlst.Item, 
											c[cn].id, c[cn].name ) ;
//			PutEventItem( 1, &c[cn] );		// 捞亥飘侩 酒捞袍 持绢 林扁	// BBD 040308	Map辑滚啊 林扁肺 沁澜
			SendItemQuick( c, cn ); 

			// 付过阑 硅快瘤 臼绊 葛电 付过阑 荤侩窍妨搁 捞镑俊辑  Ws/Ps甫 Setting秦林搁 等促. 
			for( int i = 0 ; i < 1000 ; i ++)
			{
				if( c[cn].chrlst.Item[i] == 0) break;
			}
			c[cn].chrlst.ItemMax = i;
			SendLearnedItem( c, cn );		// 0730 YGI										
			break;			
		}					
								
	case CMD_CHR_ITEM_INFO_1 : SendItemEquip( c, cn ); break;
	case CMD_CHR_ITEM_INFO_2 : SendItemInventory( packet->u.client_item_inv.count, c, cn ); break;
			
	case CMD_CHAR_INFO_MAGIC : SendCharInfoMagic( c, cn ); break;
	case CMD_CHAR_INFO_SKILL : 
		{
			SendCharInfoSkill( c, cn ); 
			::MyLog(0, "Send [%s]Info to [%s]", c[cn].name, c[cn].id);
		}break;
			
	case CMD_CHAR_INFO_TAC_SKILL_EXP : SendCharInfotac_skillEXP( c, cn ); break;
				
	case CMD_CONNECT_INFO1 :	
		{
			char *map_name = 0;
			int ret = 0;
			if( c[cn].chrlst.startposition == 99 )
			{
				ret = GetMapName_SQL( c, cn); // 001126 KHS
				if( ret == 1 ) map_name = c[cn].mapname;
			}
			else
			{
				map_name = StartMapPosition[ c[cn].chrlst.startmap][c[cn].chrlst.startposition];
			}

			if( map_name )
			{
				ret = 0;
				int port = MapPort( map_name );
				if( port )
				{
					ret = 1;
					packet->u.kein.server_connect_info_kein.data1.port = port;
					ret += CheckEventObject( map_name, &packet->u.kein.server_connect_info_kein.u.data3);
					ret += CheckEventSound( map_name, &packet->u.kein.server_connect_info_kein.u.data3);
				}
			}

			if( ret )
			{	
				//-----------------------------------------------------------------
				//-----------------------------------------------------------------
				packet->h.header.type = CMD_CONNECT_INFO;
				packet->h.header.size = sizeof(t_server_connect_info);
				if( ret == 4 ) // object + sound
				{
					packet->h.header.size += sizeof(k_event_object_sound);
				}
				else if( ret == 3 )		// sound
				{
					packet->h.header.size += sizeof(k_event_sound);
					int sound_no = packet->u.kein.server_connect_info_kein.u.data3.sound_no;
					packet->u.kein.server_connect_info_kein.u.data4.sound_no = sound_no;
				}
				else if( ret == 2 )		// object
				{
					packet->h.header.size += sizeof(k_event_object);
				}
				packet->u.server_connect_info.startposition = c[cn].chrlst.startposition;
				if(!QueuePacket(c, cn, packet, 1))
				{
					break;
				}
			
				//-----------------------------------------------------------------
				c[cn].state = CONNECT_JOIN;
			}
			else // Invalid DB
			{
				::MyLog(0, "Invalid User DB [%s]", c[cn].name);

				packet->h.header.type = CMD_INVALID_DB;
				packet->h.header.size = 0;
				QueuePacket(c, cn, packet, 1);
				break;
			}	
			break;
		}
			
	case CMD_CREATE_CHAR :
	{		
		int ret = CreateChar_SQL(c, cn, packet);
		if(ret == 1)
		{	
			packet->h.header.type = CMD_ACCEPT_CREATE;
			packet->h.header.size = 1;
			packet->u.data[0]= 0 ;
			QueuePacket(c, cn, packet, 1);
			
			::MyLog( 0, "%s (ID:%s) is Generated !", c[cn].id, c[cn].chrlst.Name );
			break;
		}	
		else
		{	
			int is_delete = 1;
			switch( ret )
			{
			case -100 : ::MyLog( 0, "Fail:Character Generation ( Already character %s, ID:%s :%d)", packet->u.client_create_char.name, c[cn].id, ret );
						RecvHackingUser( c[cn].id, packet->u.client_create_char.name, 20009, " ", "Not his Char" );
						is_delete = 0;		// 瘤快瘤 臼绰促.
				break;
			case -30 : ::MyLog( 0, "Fail : Try to make Character but NO ID in chr_log_info ( %s, ID:%s )", packet->u.client_create_char.name, c[cn].id );
				break;
			default  : ::MyLog( 0, "Fail : Character Generation( %s, ID:%s :%d)", packet->u.client_create_char.name, c[cn].id, ret );
				break;
			}

			if(is_delete) 
			{
				delete_char_create_fail( packet->u.client_create_char.name );
			}
		
			packet->h.header.type = CMD_INVALID_DB;
			packet->h.header.size = 1;
			packet->u.data[0]= 0 ;
			QueuePacket(c, cn, packet, 1);

			break;
		}	
		break;
	}		
	case CMD_DELETE_CHAR :
	{	
		const char* szName = packet->u.client_delete_char.szName;
		int ret = DeleteChar_SQL( c[cn].id, szName ,packet->u.client_delete_char.szSecretKeyCode );
		if(ret == 1)
		{	
			MyLog( LOG_NORMAL, "Success : Character Deleted (%s, ID:%s)", szName, c[cn].id );
			RecvHackingUser( c[cn].id, szName, HACKING_DELETE_CHAR_NORMAL_, c[cn].ip_address, "Character Deleted !! Normally.." );
									
			packet->h.header.type = CMD_ACCEPT_DELETE;
			packet->h.header.size = 1;
			packet->u.data[0]= 0 ;
			QueuePacket(c, cn, packet, 1);
			break;
		}	
		else
		{		
			MyLog( LOG_NORMAL, "Delete Fail !");
			
			packet->h.header.type = CMD_INVALID_DB;
			packet->h.header.size = 1;
			packet->u.data[0]= 0 ;
			QueuePacket(c, cn, packet, 1);
			break;
		}		
			
		break;
	}		
	case CMD_ISTHERE_CHARNAME : RecvIsThereCharName( cn, packet->u.client_isthere_charname.name );
		break;
			
	case CMD_CHECK_BETA_TEST : CheckBetaIdTest( cn, packet->u.kein.beta_check_id.id ); break;
	
	case  CMD_SPECIAL_ITEM		:
		RecvUpdateSpecial( &(packet->u.server_special_item)  );					break;
	
	case  CMD_UPDATE_CHAR_DB:	
		{
			int iRet = RecvUpdateCharDB( &(packet->u.update_char_db)  );					
			if(iRet != 1)
			{
				MyLog(0,"RecvUpdateCharDB Failed");
			}
		}break;
	case  CMD_UPDATE_BINARY_DATA0	:	
		{
			int iRet = RecvUpdateBinaryData( &(packet->u.server_update_binary_data0)  );	
			if(iRet != 1)
			{
				MyLog(0,"RecvUpdateBinaryData Failed");
			}
		}break;
	case  CMD_UPDATE_BINARY_DATA1	:	
		{
			int iRet = RecvUpdateBinaryData1( &(packet->u.server_update_binary_data1)  );	
			if(iRet != 1)
			{
				MyLog(0,"RecvUpdateBinaryData1 Failed");
			}
		}break;
	case  CMD_UPDATE_SCRIPT_DATA	:	
		{
			int iRet = RecvUpdateScriptData( &(packet->u.server_update_script_data)  );	
			if(iRet != 1)
			{
				MyLog(0,"RecvUpdateScriptData Failed");
			}
		}break;
	case  CMD_UPDATE_INV_DATA		:	
		{
			int iRet = RecvUpdateInvData( &(packet->u.server_update_inv_data)  );			
			if(iRet != 1)
			{
				MyLog(0,"RecvUpdateInvData Failed");
			} 
		}break;
	case  CMD_UPDATE_ITEM_DATA		:	
		{
			int iRet = RecvUpdateItemData( &(packet->u.server_update_item_data ) );		
			if(iRet != 1)
			{
				MyLog(0,"RecvUpdateItemData Failed");
			}
		}break;
	case  CMD_UPDATE_BANKITEM_DATA	:	
		{
			int iRet = RecvUpdateBankItemData( c, cn, &(packet->u.server_update_bankitem_data));	
			if(iRet != 1)
			{
				MyLog(0,"RecvUpdateBankItemData Failed");
			}
		}break;

	case CMD_REQ_DELETE_USERID :
		onepass.DeleteUsedID_SQL_ForPay( packet->u.gs_req_delete_userid.mapname, packet->u.gs_req_delete_userid.id, 0 ); 
		break;
			
	case CMD_REQ_INSERT_USERID : 
		{
			if(!::CheckIsRealName(packet->u.gs_req_insert_userid.id, packet->u.gs_req_insert_userid.name ) )
			{
				break;
			}
			
			t_packet tp;
			gs_req_insert_userid* pGRIU = &packet->u.gs_req_insert_userid;
			if( ::UpdateLogintablebyChangeMap( pGRIU->id, pGRIU->mapname ))	// LoginTable俊 绝澜.. 溜, 甸绢哎荐 乐澜..
			{	
				tp.h.header.type = CMD_JOINABLE;
				tp.u.ls_joinable.server_id = packet->u.gs_req_insert_userid.server_id;
				tp.h.header.size = sizeof( t_ls_joinable );
			}	
			else	
			{	
				tp.h.header.type = CMD_UPDATING;
				tp.u.ls_updating.server_id = packet->u.gs_req_insert_userid.server_id;
				tp.h.header.size = sizeof( t_ls_updating );
			}
			::QueuePacket( c, cn, &tp, 1 );
		}break;		
			
	///////////// network2.h阑 困秦..  0224 YGI ///////////////
	case CMD_CREATE_ABILITY :	SendCreateAbility( cn ); break;
	case CMD_THROW_DICE		:	SendThrowDice( packet->u.kein.client_throw_dice.type, cn ); break;
			
	case CMD_HOW_MANY_IN_MAP :	UpdateTotalMapConnections( packet->u.how_many_in_map.map, packet->u.how_many_in_map.how );
		break;
			
	case CMD_UPDATE_VERY_IMPORTANT_STATUS	:	RecvUpdateCharacterVeryImportantStatus( &(packet->u.update_very_important_status) );
		break;
			
	case CMD_UPDATE_VERY_IMPORTANT_TACTICS  :	RecvUpdateTacticSkillExpData( &(packet->u.update_very_important_tactics ));
		break;
			
	case CMD_ITEM_DURATION_CHANGE :
	case CMD_TACTICS_PARRYING_EXP :
	case CMD_REQ_PARTY_MEMBER	  : 
	case CMD_LEVELUP_POINT		  :
	case CMD_DELETE_ITEM		  : 
		
				MyLog( LOG_NORMAL,  "No Useful Protocol...%d from %d", packet->h.header.type, cn) ;
				
		break;
		
	case CMD_SEALSTONEFROMKING	:
				RecvSealStoneFromKing( packet->u.sealstone_fromking.nation );
		break;
		
	case CMD_SEALSTONE_STATUS	:
				RecvSealStoneStatus( packet );
		break;
		
	case CMD_NATION2NATION_RELATION :
				RecvNation2NationRelation( cn, &(packet->u.nation2nation_relation) );
		break;



	case CMD_HACKING_USER :
		{
				t_hacking_user *tp = &(packet->u.hacking_user );
				RecvHackingUser( tp->id, tp->name, tp->type, tp->ip, tp->cause );
		}
		break;

⌨️ 快捷键说明

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