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

📄 menunetwork.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			SCharacterData.party[i].m_JoinOk = 1;
			SearchMyPartyOfMySight( &SCharacterData.party[i]); // 檬扁 矫具鼻救俊 颇萍 乐绰瘤 眉农..
			return;
		}
	}
}

void RecvPartyJoinRelease( char *name )
{
	for( int i=0; i<6; i++ )
	{
		if( !strcmp(SCharacterData.party[i].m_Name, name) )
		{
			SCharacterData.party[i].m_JoinOk = 0;
			return;
		}
	}
}

void RecvServerEachItem( K_ITEM *item )
{ 
	ItemAttr *target = ::GetItemByPos( item->item_pos );
	if(!target) DropItemOnHero(item->item_attr);
	else *target = item->item_attr;
}

void RecvServerResist( k_server_resist *p )
{
	SCharacterData.naBasicResist[RT_POISON	]	=	p->naBasicResist[RT_POISON	];//030227 lsw
	SCharacterData.naBasicResist[RT_CURSE	]	=	p->naBasicResist[RT_CURSE	];
	SCharacterData.naBasicResist[RT_HOLY 	]	=	p->naBasicResist[RT_HOLY 	];
	SCharacterData.naBasicResist[RT_FIRE	]	=	p->naBasicResist[RT_FIRE	];
	SCharacterData.naBasicResist[RT_ICE		]	=	p->naBasicResist[RT_ICE		];
	SCharacterData.naBasicResist[RT_ELECT	]	=	p->naBasicResist[RT_ELECT	];
	
	SCharacterData.naExtentionResist[RT_POISON	]	=	p->naExtentionResist[RT_POISON	];//030227 lsw
	SCharacterData.naExtentionResist[RT_CURSE	]	=	p->naExtentionResist[RT_CURSE	];
	SCharacterData.naExtentionResist[RT_HOLY 	]	=	p->naExtentionResist[RT_HOLY 	];
	SCharacterData.naExtentionResist[RT_FIRE	]	=	p->naExtentionResist[RT_FIRE	];
	SCharacterData.naExtentionResist[RT_ICE		]	=	p->naExtentionResist[RT_ICE		];
	SCharacterData.naExtentionResist[RT_ELECT	]	=	p->naExtentionResist[RT_ELECT	];
}

void SendBankInfo(int type,  DWORD money )
{
	t_packet	packet;
	
	packet.u.kein.client_bank_deposit.money  = money;
	packet.h.header.type = type;
	packet.h.header.size = sizeof( k_client_bank_deposit );
	QueuePacket( &packet, 1 );
}

void SendCharInfoBasic( int kind, DWORD data )
{
#ifdef _DEBUG
	t_packet p;
	
	p.h.header.type = CMD_CHAR_INFO_BASIC;
	{
		p.u.char_info_basic.password = (char)111;
		p.u.char_info_basic.kind = (char) kind;
		p.u.char_info_basic.data = data;
	}
	p.h.header.size = sizeof( t_char_info_basic );
	QueuePacket( &p, 1 );
#endif
}

extern DWORD g_ClientTimeNoGap;		//011122 lsw

void RecvCharInfoBasic( t_char_info_basic *p )
{
	if( p->kind < 0 ) return;
	
	DWORD d = p->data;
	
	switch( p->kind )
	{
	case STR		:
	case CON		:
	case DEX		:
	case WIS		:
	case INT_		:
	case MOVP		:
	case CHA		:	
	case ENDU		:
	case MOR		:	
	case LUCK		:
	case WSPS		:
	case HEALTH		:
	case MOV		:	
	case AC			:
	case FAME		:
	case DAMAGE		:
	case HIT		:	
	case TACTICE	:	SCharacterData.nCharacterAbility[p->kind] = d;
		break;
		
	case MONEY		:	SCharacterData.nMoney = d;				break;
		
	case HP			:	SCharacterData.nCharacterHP	= Hero->hp = d; 	break;				// HP客 MP甫 历厘窍绰 函荐
	case MAX_HP		:	SCharacterData.nCharacterMAXHP	= d;	break;
	case MP			:	SCharacterData.nCharacterMP		= d;	break;				// HP客 MP狼 弥措摹
	case MAX_MP		:	SCharacterData.nCharacterMAXMP	= d;	break;
	case SP			:   SCharacterData.nCharacterSP		= d;	break;	
	case MAX_SP		:  	SCharacterData.nCharacterMAXSP	= d;	break;
	case CP:
		{	//< CSD-TW-030624
			switch (Hero->nRecoveryCombat)
			{
			case BURNING_BLOODY: InsertMagic(Hero, Hero, 659, 0, 0, 0, 0, 0); break;
			case ACUQUIRE_DARK: InsertMagic(Hero, Hero, 660, 0, 0, 0, 0, 0); break;
			}
				
			iCSPNow = d;
			break;	
		}	//> CSD-TW-030624
	case MAX_CP: iCSPMax = d;	 break;
	case BP:     iCSPCNow = d; break;
	case MAX_BP: iCSPCMax = d; break;
	case BANKMONEY	:	SCharacterData.BankMoney		= d;	break;
	case EXP		:	SCharacterData.nExp				= d;	break;
	case FAITH		:	SCharacterData.faith			= d;	break;
		
	case CIB_POTION_BOX: SCharacterData.potion_box1 = d;	break;
		
		//020314 lsw
	case VIEWGHOST	:
		{
			(d)?Hero->bCanViewGhost = true:Hero->bCanViewGhost = false;
			Hero->dwCanViewGhostTime	= g_ClientTimeNoGap +(d*1000);
		}break; 
	case VIEWBOMB	:	
		{
			(d)?Hero->bCanViewBomb	= true:Hero->bCanViewBomb	= false;
			Hero->dwCanViewBombTime		= g_ClientTimeNoGap	+(d*1000);
		}break;
	case VIEWTRAP	:
		{
			(d)?Hero->bCanViewTrap	= true:Hero->bCanViewTrap	= false;
			Hero->dwCanViewTrapTime		= g_ClientTimeNoGap	+(d*1000);	
		}break;
	default			:
		{
			char buf[255];
			sprintf(buf, lan->OutputMessage(7,63), p->kind );//010215 lsw
			JustMsg(buf); 
			break;
		}
	}
}

void RecvItemAttrChange( int type, k_server_item_attr *p )
{
	ItemAttr *item = ::GetItemByPos( p->pos );
	if( !item ) return;		// 促矫 傈价秦 崔扼绊 秦具窍唱?
	
	switch( type )
	{
	case CIA_DURATION	: item->attr[IATTR_DURATION] = p->attr; break;
	case CIA_MUCH		: item->attr[IATTR_MUCH] = p->attr; break;
	}
	return;
}

void RecvOtherGhost( )
{
	memset( You.inv, 0, sizeof( ItemAttr ) * OTHER_INV_MAX );
}

void RecvCreateAbility( )		// 林荤困 倒府扁傈 扁夯荐摹 檬扁拳
{
	int basic_ability[5][11] = {
		{ 50, 10, 30, 10, 10, 10, 10, 10, 10, 10, 10 },
		{ 10, 40, 20, 10, 10, 10, 20, 10, 10, 10, 20 },
		{ 10, 50, 20, 10, 10, 10, 20, 10, 10, 10, 10 },
		{ 10, 10, 15, 10, 40, 10, 10, 20, 10, 25, 10 },
		{ 10, 10, 20, 35, 10, 10, 10, 20, 10, 25, 10 },
	};
	
	for( int i=STR; i<=LUCK; i++ )
		SCharSource.nCharacterAbility[i] = basic_ability[SCharSource.nCharacterData[CLASS]][i];
	
	g_GoDice= true;
}

void RecvServerMagery(char nStep, DWORD magery)
{
	int type;
	if( SCharacterData.nCharacterData[SPELL] == WIZARD_SPELL ) type = MAGERY;
	else if( SCharacterData.nCharacterData[SPELL] == PRIEST_SPELL ) type = ORISON;
	else return;
	
	Hero->aStepInfo[type + TAC_INDEX] = nStep;
	SCharacterData.TacticsExp[type] = magery;
	SCharacterData.SkillId[type+88] = GetLeveByExp(nStep,
		SCharacterData.TacticsExp[type]);
	
	int tac_lv = SCharacterData.SkillId[type+88];
	SCharacterData.TacticsExpNext[type] = NPC_Lev_Ref[tac_lv].nMaxExp;
}

void RecvThrowDice( start_throw_dice *p )
{
	g_GoDiceRecv = true;
	
	static int	class_ability[5][2] = { 
								{ STR,	CON	, },
								{ DEX,	MOVP, },
								{ DEX,	CON, },	
								{ INT_,	WSPS, },
								{ WIS,	WSPS, },	};
								
								int first = SCharSource.nCharacterData[CLASS];
								
								SCharSource.nAbilityMax[class_ability[first][0]] = p->ability1;
								SCharSource.nAbilityMax[class_ability[first][1]] = p->ability2;
}

void SendThrowDice( char type )
{
	t_packet p;
	
	p.h.header.type = CMD_THROW_DICE;
	{
		p.u.kein.client_throw_dice.type = type;
	}
	p.h.header.size = sizeof( k_client_throw_dice );
	QueuePacket( &p, 1 );
	
	
	if( SysInfo.notconectserver ) 
	{
		start_throw_dice p;
		p.ability1 = 3;
		p.ability2 = 2;
		RecvThrowDice( &p );
	}
}

void RecvServerMessage( k_get_server_text *p )		// 傍瘤 荤亲
{
	static count = 0;
	int para = p->ct%10 - 1;
	if( c_BbsTitle[para].is_first ) 
	{
		c_BbsTitle[para].m_szMessage = new char[p->len+1];
		memset( c_BbsTitle[para].m_szMessage,0, p->len+1 );
		int max = 512;
		if( p->len < 512 ) max = p->len;
		memcpy( c_BbsTitle[para].m_szMessage, p->text, max );
		c_BbsTitle[para].is_first = false;
		count = 0;
	}
	else
	{
		count++;
		int max = 512;
		if( p->len < (count+1)*512 ) max = p->len % 512;
		memcpy( c_BbsTitle[para].m_szMessage + 512 * count, p->text, max );
	}
}

void SendPreachName( char *name, BYTE god )		// 朝 傈档茄 荤恩捞 乐绰瘤 魄窜 夸没
{
	t_packet p;
	
	p.h.header.type = CMD_PREACH_NAME;
	{
		sprintf(p.u.kein.server_preach_name.name , name );
		p.u.kein.server_preach_name.believe_god = god;
	}
	p.h.header.size = sizeof( k_server_preach_name );
	QueuePacket( &p, 1 );	
}

void SendPreachNameOk( char *name, BYTE god )	 // 啊涝 且 版快 傈档茄 荤恩俊霸 脚居缴狼 +甫 困秦 菩哦 傈价
{
	t_packet p;
	
	p.h.header.type = CMD_PREACH_NAME_OK;
	{
		sprintf(p.u.kein.server_preach_name.name , name );
		p.u.kein.server_preach_name.believe_god = god;
	}
	p.h.header.size = sizeof( k_server_preach_name );
	QueuePacket( &p, 1 );	
}

void SendGodRegistOk( int type )
{
	t_packet p;
	
	p.h.header.type = CMD_GOD_REGIST_OK;
	{
		p.u.kein.client_god_regist_ok.type = (char) type;
	}
	p.h.header.size = sizeof( k_client_god_regist_ok);
	QueuePacket( &p, 1 );	
}

void RecvPreachName(  k_server_client_preach_name *p  )
{
	if( !p->believe_god) JustMsg(lan->OutputMessage(6,21));//010215 lsw
	int pre_menu = GetMenuNumByBelieveGod( p->believe_god);
	
	switch( p->result )
	{
	case 1	:	{	// 己傍
		CallSmallMenu( MN_GOD_PREACH_RESULT, pre_menu );
		sprintf( SMenu[MN_GOD_PREACH_RESULT].nField[2].temp, lan->OutputMessage(6,22), p->name );//010215 lsw
		sprintf(SMenu[MN_GOD_PREACH_RESULT].nField[0].temp, p->name );
		break;
				}
	case 2	:	{	// 弊繁 荤恩 绝促. 
		CallSmallMenu( MN_GOD_PREACH_ERROR1, pre_menu );
		sprintf( SMenu[MN_GOD_PREACH_ERROR1].nField[2].temp, lan->OutputMessage(6,23) );//010215 lsw
		break;
				}
	case 3	:	{	// 弊 荤恩篮 快府 脚傈 荤恩捞 酒聪促.
		CallSmallMenu( MN_GOD_PREACH_ERROR1, pre_menu );
		sprintf( SMenu[MN_GOD_PREACH_ERROR1].nField[2].temp, lan->OutputMessage(6,24) );//010215 lsw
		break;
				}
	case 4	:	{
		;
		CallOkCancelMessageBox( 0,0,0, lan->OutputMessage(6,25) );//010215 lsw
		break;
				}
	default :		break;//
	}
	return;
}

void RecvGodMeetinMainStart( )
{
	g_ServerText.ReSet();
	bCallGodMeetingMenu = true;
}

void RecvGodMeetingMainEnd( )
{
	bCallGodMeetingMenu = false;
	StopWave( SN_GOD_MEETING );
}

void SendToolPassword( char *password )
{
	int ret = -1;
	if( !strcmp( password,		"plant")	)	ret = 0;
	else if( !strcmp( password, "mineral") )	ret = 1;
	else if( !strcmp( password, "herb")	)	ret = 2;
	else if( !strcmp( password, "cook")	)	ret = 3;
	else if( !strcmp( password, "potion")	)	ret = 4;
	else if( !strcmp( password, "tool")	)	ret = 5;
	else if( !strcmp( password, "weapon")	)	ret = 6;
	else if( !strcmp( password, "disposable"))	ret = 7;
	else if( !strcmp( password, "armor")	)	ret = 8;
	else if( !strcmp( password, "accessory"))	ret = 9;
	else if( !strcmp( password, "etc" ) )		ret = 10;
	
	
	if( ret != -1 )
	{
		k_client_create_item gener_item;
		
		gener_item.dur = 1000001;
		gener_item.gennum = 1;
		
		for( int j=0; j<Item_Ref.nItem[ret]; j++ )
		{
			gener_item.type = ret;
			gener_item.num = j;
			
			SendGenrateItemByTool( gener_item );
		}
		
		return;
	}
	
	t_packet p;
	p.h.header.type = CMD_TOOL_PASSWORD;
	{
		strcpy( p.u.kein.tool_password.password, password );
	}
	p.h.header.size = sizeof( k_tool_password );
	QueuePacket( &p, 1 );	
}

extern int				ListenCommand;
int SendCheckNewChar( char *name )
{
	t_packet p;
	
	p.h.header.type = CMD_CHECK_NEW_CHAR;
	{
		strcpy( p.u.kein.check_new_char.name, name);
	}
	p.h.header.size = sizeof( k_check_new_char );
	QueuePacket( &p, 1 );
	
	DWORD StartTime = ::timeGetTime( );
	ListenCommand = 0;
	
	while ( 1 )
	{	
		DWORD Duration = ::timeGetTime( ) - StartTime;
		if ( Duration > 10000 )
		{
			return( -2 );
		}
		
		if ( !HandleRunning(&connections ) )
		{
			Release(&connections );
			return( -3 );
		}
		
		if ( ListenCommand == 100 )		// 沥惑 楷搬
		{
			break;
		}
		else if( ListenCommand == 10 )
		{
			return(-4);					// 扁粮狼 某腐磐 捞促
		}
	}
	return 1;
}

void RecvServerMessage( k_get_server_text *p, char *text )		// 脚傈 抗硅
{
	static count = 0;
	int para = p->ct%10 - 1;
	if( c_BbsTitle[para].is_first ) 
	{
		c_BbsTitle[para].m_szMessage = new char[p->len+1];
		memset( c_BbsTitle[para].m_szMessage,0, p->len+1 );
		int max = 512;
		if( p->len < 512 ) max = p->len;
		memcpy( c_BbsTitle[para].m_szMessage, p->text, max );
		c_BbsTitle[para].is_first = false;
		count = 0;
	}
	else
	{
		count++;
		int max = 512;
		if( p->len < (count+1)*512 ) max = p->len % 512;
		memcpy( c_BbsTitle[para].m_szMessage + 512 * count, p->text, max );
	}
}

void RecvServerMessageDefault( k_server_text_default *p, CServerText *text )		// 辑滚肺 夸没且 锭 檬扁拳 鞘夸
{
	static count = 0;
	if( text->is_first )
	{
		text->m_pszMessage= new char[p->len+1];
		memset( text->m_pszMessage,0, p->len+1 );
		int max = 512;
		if( p->len < 512 ) max = p->len;
		memcpy( text->m_pszMessage, p->text, max );
		text->is_first = false;
		count = 0;
	}
	else
	{
		count++;
		int max = 512;
		if( p->len < (count+1)*512 ) max = p->len % 512;
		memcpy( text->m_pszMessage + 512 * count, p->text, max );
	}
}

void RecvCallPublicBbs( k_server_text_default *p )		// 辑滚俊辑 努扼捞攫飘肺 傍瘤荤亲 郴侩阑 焊尘锭..
{
	if( !SMenu[MN_PUBLIC_BBS].bActive ) 
	{
		public_bbs.ReSet();
		CallSmallMenu( MN_PUBLIC_BBS );
	}
	RecvServerMessageDefault( p, &public_bbs );
}

void RecvCharInfoPlus( k_server_to_client_char_info_plus *p )
{
	SCharacterData.believe_god	=	p->believe_god;
	SCharacterData.faith		=	p->faith;
}

void RecvCanMemorizeOk()
{
	if( SCharacterData.nCharacterData[SPELL] == WIZARD_SPELL )		// 困磊靛 胶歧老 版快父...
	{
		InitMemorize();
		MagicSetting();
		
		CallSmallMenu( MN_MEM_BOOK, 0, SN_MAGIC_BOOK_OPEN ); 
	}
}

void SendChangeMap_kein( short int port )	// 甘 傈券 - 梅磊: 捞悼且 霸烙辑滚狼 器飘锅龋
{

⌨️ 快捷键说明

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