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

📄 menunetwork.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	t_packet p;
	p.h.header.type = CMD_CHANGE_MAP_KEIN;
	{
		p.u.kein.send_game_port.game_port = port;
	}
	p.h.header.size = sizeof( k_send_game_port );
	QueuePacket( &p, 1 );
}

void RecvOpenSupper( char much )
{
	SCharacterData.much_supper = much;
	CallSmallMenu(MN_GOD_SUPPER);
}

void SendIGetItemOfSupper( short int item_no )
{
	t_packet packet;									// 郴啊 啊龙妨绰 酒捞袍 锅龋甫 焊郴绊
	// 牢刘 罐霸 登搁 弊 酒捞袍阑 辑滚俊辑 罐绰促.
	
	packet.h.header.type = CMD_I_GET_ITEM_OF_SUPPER;
	{
		packet.u.kein.i_get_item_of_supper.item_no = item_no;
	}
	packet.h.header.size = sizeof( k_i_get_item_of_supper );
	QueuePacket( &packet, 1 );	
}


extern int g_Note_Meeting;
extern char g_Note_Meeting_message[256];

void RecvSetNoteMeetingMessage( short int god, short int type )
{
	g_Note_Meeting = 1;
	char *god_name = NULL;
	
	switch( god ) 
	{
	case EDELBLHOY	: god_name = "EDELBLHOY"; break;
	case TEFFERY	: god_name = "TEFFERY"; break;
	case LETTY		: god_name = "LETTY"; break;
	case OREM		: god_name = "OREM"; break;
	default : god_name = NULL; break;
	}
	
	switch( type ) 
	{
	case 3:	// 楷 抗硅
		if( !god_name ) return;
		sprintf( g_Note_Meeting_message, lan->OutputMessage(6,26), god_name);//010215 lsw
		break;
		
	case 2:	// 岿 抗硅 
		if( !god_name ) return;
		sprintf( g_Note_Meeting_message, lan->OutputMessage(6,27), god_name );//010215 lsw
		break;
	}
}


void SendReqCharInfo( int id )		// 目辑甫 措绊 乐绰 悼救 某腐磐狼 沥焊甫 啊廉柯促.
{
	t_packet p;
	
	p.h.header.type = CMD_REQ_CHAR_INFO;
	p.u.debug_client_req_char_info.id = id;
	p.h.header.size = sizeof( t_debug_client_req_char_info );
	
	QueuePacket( &p, 1 );
}


void RecvReqCharInfo( k_server_req_char_info *p )
{
	LPCHARACTER ch = ReturnCharacterPoint( p->id );
	if( ch == NULL ) return;
	
	ch->_Hp			=	p->Hp;
	ch->_HpMax		=	p->HpMax;	
	ch->viewdebugcharinfo  =  75;
}			

void SendReqHpOfParty( char *party_name )
{
	t_packet p;
	
	p.h.header.type = CMD_REQ_PARTY_INFO;
	strcpy( p.u.kein.req_party_info.party_name,  party_name );
	p.h.header.size = sizeof( k_req_party_info );
	
	QueuePacket( &p, 1 );
}

void RecvReqPartyInfo( k_rep_party_info *p )
{
	for( int i=0; i<6; i++ )
	{
		if( !strcmp( SCharacterData.party[i].m_Name, p->party_name) )
		{
			SCharacterData.party[i].m_Hp = p->hp;
			SCharacterData.party[i].x = p->x / TILE_SIZE;
			SCharacterData.party[i].y = p->y / TILE_SIZE;
			SCharacterData.party[i].xy_on = 150;
			break;
		}
	}
}

bool recv_learn_item;		// 辑滚俊辑 硅款 酒捞袍阑 傈价 罐绊 胶懦 单捞鸥甫 肺靛秦坷绊 弊繁促澜俊 硅快绊 矫累窍绰 酒捞袍阑 悸泼秦具 茄促.
void RecvLearnedItem( k_server_learn_item *p )
{
	memcpy( SCharacterData.ItemId, p->item, sizeof( short int )*p->item_count );
	SCharacterData.ItemIdCount = p->item_count;
	
	if( recv_learn_item ) SetLearnItem( );
	else recv_learn_item = 1;
}
void RecvPartyNotByLevel( short int type )
{
	switch( type )
	{
	case PARTY		: AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(5,82) ); break;//010215 lsw
	case RELATION	:
	case EMPLOYMENT	: break;
	}	
}

void RecvDoPartyOk( char *name, short int type )
{
	switch( type )
	{
	case PARTY		: AddCurrentStatusMessage( 255, 255, 255, lan->OutputMessage(5,83), name ); break;//010215 lsw
	case RELATION	:
	case EMPLOYMENT	: break;
	}	
}



///////////////////////////////////////////////////////////////////////////////////////////////
void SendReqQuestIndex( int page)
{
	if( SysInfo.notconectserver )
	{
		k_rep_quest_index  QUEST_p;
		for (int i = 0 ; i < 14 ; i++){
			QUEST_p.quest[i].index = rand()%13+50;
			QUEST_p.quest[i].ret = 5;
			if( QUEST_p.quest[i].ret == rand()%6 ) QUEST_p.quest[i].ret = 2000;	
		}
		QUEST_p.max = 14;
		
		RecvQuestIndex(&QUEST_p);
	}
	else
	{
		t_packet p;
		
		p.h.header.type = CMD_REQ_QUEST_INDEX;
		p.u.kein.default_char = page;
		p.h.header.size = sizeof( char );
		QueuePacket( &p, 1 );
		
		//		CallServer( CMD_REQ_QUEST_INDEX );
	}
}

void RecvQuestIndex( k_rep_quest_index *p )
{
/*
short int index[6];
short int ret[6];
	*/
	
	int max = p->max;
	for( int i=0; i<max; i++ )
	{
		int ret = 0;
		for( int j=0; j<QUEST_COUNT; j++ )
		{
			if( quest_num[j] == p->quest[i].index-50 ) 
			{
				if( p->quest[i].ret == 2000 ) SetEndQuest(j);
				ret = 1;
				break;
			}
		}
		if( ret ) continue;
		if( p->quest[i].index <= 50 ) continue;
		
		if( p->quest[i].index )	{
			// 惯积茄 涅胶飘 俊促 涅胶飘甫 持绰促.
			if( QUEST_COUNT == 200) return;
			quest_num[QUEST_COUNT++] = p->quest[i].index-50;		// 50何磐 矫累
			
			// 胶跑捞 2000 捞搁 场抄 涅胶飘扼备 龋铰揪啊 弊法澜  
			if( p->quest[i].ret == 2000 ) 
			{
				SetEndQuest(QUEST_COUNT-1);
				// 己傍茄 涅胶飘 
			}
		}
		else	{
			if( QUEST_COUNT == 200) return;
			QUEST_COUNT++;
		}
		
		// 涅胶飘啊 绝备 弊矾搁 滚瓢档 逞绢 啊搁 臼登聪瘪 
	}
	return;
}

///////////////////////////////////////////////////////////////////////////////////////////
void SendPacketDefault(const int type, void *data, const int size )
{
	t_packet p;		// 辑滚肺 脚没
	p.h.header.type = type;		// 铰倡
	p.h.header.size = 0;
	
	if( data && size )
	{
		::memcpy( p.u.data, data, size );
		p.h.header.size = size;
	}
	::QueuePacket( &p, 1 );
}

void SendResetJob( char job, char cls, char *name )
{
	
	if( job < J_FAMER || job > J_MERCHANT ) return;
	
	t_packet p;	
	
	p.h.header.type = CMD_RESET_JOB;
	p.u.kein.reset_job.job= job;
	p.u.kein.reset_job.cls= cls;
	strcpy( p.u.kein.reset_job.name, name );
	p.h.header.size = sizeof( k_reset_job ) - 20+strlen( name )+1;
	QueuePacket( &p, 1 );
}

void SendSelectNation( int nation, char *name )
{
	if( nation <= 0 || nation > N_YILSE ) return;
	
	t_packet p;	
	p.h.header.type = CMD_SELECT_NATION;
	p.u.kein.default_char= nation;
	//		strcpy( p.u.kein.select_nation.name, name );
	p.h.header.size = sizeof( char);
	//	p.h.header.size = sizeof( k_select_nation) - 20+strlen( name )+1;
	QueuePacket( &p, 1 );
}

void SendChangeScriptValue( int script_num, int value )
{
	t_packet p;	
	p.h.header.type = CMD_SCRIPT_CHANGE;
	p.u.kein.script_change.script_num	= script_num;
	p.u.kein.script_change.value		= value;
	p.h.header.size = sizeof( k_script_change );
	QueuePacket( &p, 1 );
}

void RecvChangeDuration( t_packet *p )
{
	POS *pos = &p->u.kein.change_dur.pos;
	DWORD	dur = p->u.kein.change_dur.dur;
	
	ItemAttr *target = ::GetItemByPos( *pos );
	if( target && target->item_no )
	{
		target->attr[IATTR_DURATION] = dur;
	}
	return;
}

void SendIsThereCharNameForNation( char *name )		// 唱扼 厚背甫 困秦 傈价
{	
	t_packet p;
	p.h.header.type = CMD_ISSAME_MY_NATION;
	strcpy( p.u.kein.default_name, name );
	p.h.header.size = strlen( name )+1;
	QueuePacket( &p, 1 );
}	

int CheckCharNameAndNation( char *name )
{
	if( name == NULL ) 
	{
		return 0;		
	}
	
	if( ::stricmp( name, kein_GetMenuString( 47 ) ) == 0 ) 
	{
		return 1;
	}
	
	double		StartTime, Duration;
	
	SendIsThereCharNameForNation( name );
	
	StartTime = ::timeGetTime( );
	ListenCommand = CMD_NONE;
	while( 1 )			
	{					
		Duration = ::timeGetTime( ) - StartTime;	// 5檬甫 扁促赴促. 
		if ( Duration > 5000 )		
		{				
			return FALSE; 	
		}				
		
		if ( !HandleRunning(&connections ) )
		{					
			Release(&connections );	
			return 0;	
		}				
		else if( ListenCommand == CMD_THEREIS_NO_CHARNAME )
		{	
			if( Hero->IsCounselor() ){return 1;}
			return 0;			// 促弗 唱扼捞促
		}	
		else if( ListenCommand == CMD_THEREIS_CHARNAME )
		{	
			return 1;			// 鞍篮 唱扼捞促
		}	
	}			
}			

void RecvCallRegistCandidate( )
{
	CallSmallMenu( MN_VOTE_REGIST );
}

void RecvRegistCandidateNot()
{
	g_CanRegistCandidate = -1;		// 殿废 且荐 乐绰 荤恩捞 酒聪促..
	SendCheckVote();		// 捧钎 皋春甫 剁匡瘤 酒匆瘤...
}

void RecvCallVoteSupport( t_packet *p )
{
	const int ret = p->u.kein.default_char;
	/*	switch( ret )
	{
	default : break;
	}
	*/	RecvRegistCandidateNot();
}

void RecvCheckVoteOk( t_packet *p )		// 饶焊 沥焊甫 啊瘤绊 客辑 谎妨霖促.
{
	int count = p->u.kein.check_vote_client_ok.candidate_count;
	k_candidate *target = p->u.kein.check_vote_client_ok.candidate;
	
	if( count < 0 || count >=3 ) return;
	int nation = target->nation;
	
	memset( Candidate, 0, sizeof( k_client_candidate )*3 );
	g_Candidate_max = count;
	
	for( int i=0; i<count; i++ )
	{
		Candidate[i].number = target[i].number;
		Candidate[i].lv = target[i].lv;
		Candidate[i].class_type = target[i].class_type;
		Candidate[i].gender = target[i].gender;
		Candidate[i].nation = target[i].nation;
		Candidate[i].guild_code = target[i].guild_code;
		Candidate[i].face = target[i].face;
		strcpy( Candidate[i].name, target[i].name );
	}
	
	CallSmallMenu( MN_VOTE_SUPPORT );
}

int CanVote()
{
	if( !SCharacterData.nation ) return -2;
	return g_CurrVote;
}

void SendCheckVote( )
{
	switch( g_CurrVote )
	{
	case -2: AddCurrentStatusMessage( 250, 30, 30, lan->OutputMessage(3,52));MP3( SN_WARNING ); return;//010215 lsw
		//		case -1: 
		//			AddCurrentStatusMessage( 250, 30, 30, "急芭 扁埃捞 酒凑聪促.");MP3( SN_WARNING ); 
		//			g_CurrVote=0;		// 犁瞒 急芭 扁埃牢瘤甫 犬牢且锭甫 措厚秦辑
		//			return;
	case -3: 
		{
			// 捧钎 泅炔魄 焊咯林扁
			SendReqVoteScore();
			return;
		}
	default : CallServer( CMD_CHECK_VOTE ); break;
	}	
}

void RecvCheckVoteNot( t_packet *p )
{
	g_CurrVote = p->u.kein.default_char;
	
	switch( g_CurrVote )
	{
	case -2 : CallOkCancelMessageBox( 0, 0, 0, lan->OutputMessage(3,61), 0 ); break;//010215 lsw
	case -1 : CallOkCancelMessageBox( 0, 0, 0, lan->OutputMessage(3,62), 0 ); break;//010215 lsw
	case -3 : 
		{
			AddCurrentStatusMessage( 240, 60, 60, lan->OutputMessage(3,63));//010215 lsw
			if( SendReqVoteScore() == -1 ) MP3( SN_WARNING );
			break;
		}
	}
}

bool CanVoteSupport( short int num ) 
{
	if( num > g_Candidate_max ) return false;
	//	if( g_CanRegistCandidate < 0 ) return false;
	if( !SCharacterData.nation ) return false;
	
	return true;
}

void SendVoteSupport( short int num )		// 饶焊 锅龋
{
	if( !CanVoteSupport( num ) ) 
		AddCurrentStatusMessage( 240, 60, 60, lan->OutputMessage(3,64));//010215 lsw
	
	t_packet p;	
	p.h.header.type = CMD_VOTE_GAME2LOGIN;
	p.u.kein.default_char	= (char) num;
	p.h.header.size = sizeof( char );
	QueuePacket( &p, 1 );
}

int SendReqVoteScore()
{
	if( !SCharacterData.nation ) g_CurrVote = -2;
	
	switch( g_CurrVote )
	{
	case -2 : AddCurrentStatusMessage( 250, 30, 30, lan->OutputMessage(3,65)); return -1;//010215 lsw
		//case -1 : AddCurrentStatusMessage( 250, 30, 30, "急芭 扁埃捞 酒凑聪促.", 0 ); return -1;
	}
	
	CallServer( CMD_REQ_VOTE_SCORE );
	return 1;
}

int RecvVoteScore( t_packet *p )
{
	int max = p->u.kein.client_rep_vote_score.max;
	k_score_and_name *target = p->u.kein.client_rep_vote_score.name_score;
	
	g_Candidate_max = 0;
	for( int i=0; i<max; i++ )
	{
		Candidate[i].score = target[i].score;
		if( target[i].name[0] )
		{
			strcpy( Candidate[i].name, target[i].name);
			g_Candidate_max ++;
		}
	}
	
	g_VoteSignExist = 400;		// 泅炔魄 焊咯林扁
	return 1;
}

void SendAllMsgNation( char *text )
{
	if( !Hero->name_status.king )
	{
		MP3( SN_WARNING );
		AddCurrentStatusMessage( 220,30,30, lan->OutputMessage(3,66));//010215 lsw
		return;
	}
	
	int len = strlen( text );
	if( len >= MAX_MSG ) AddCurrentStatusMessage( 220,30,30, lan->OutputMessage(3,67));//010215 lsw
	
	if( !text[0] ) return;
	ConvString( text );
	t_packet p;
	
	p.h.header.type = CMD_SEND_ALL_MSG;
	strcpy( p.u.kein.default_msg, text );
	p.h.header.size = len+1  ;
	QueuePacket( &p, 1 );
}

void RecvNationMassage( char *text )
{
	MP3( SN_EAR_MESSAGE_RECV );
	recv_nation_msg_count = 250;
	strcpy( recv_nation_msg_text, text );
}

void RecvYouAreKing( int is_king )

⌨️ 快捷键说明

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