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

📄 menunetwork.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#include "stdafx.h"
#include <ddraw.h>
#include "Hangul.h"
#include "dragon.h"
#include "SmallMenuSet.h"
#include "Menu.h"
#include "SmallMenu.h"
#include "Hong_Sprite.h"
#include "stdio.h"
#include "directsound.h"
#include "directinput.h"
#include "Char.h"
#include "Hong_Sub.h"
#include "Effect.h"
#include "map.h"
#include "tool.h"
#include "MenuSet.h"
#include "convert565to555.h"
#include "Math.h"
#include "skill.h"
#include "menunetwork.h"
#include "CharDataTable.h"
#include "gameproc.h"
#include "kh_cpp.h"
#include "chat.h"
#include "item.h"
#include "ExchangeMgr.h"
#include "Battle.h"
using namespace battle;

int g_iScenarioOn = 0;

extern NPC_INFO g_infNpc[MAX_CHARACTER_SPRITE_]; // CSD-030419
extern void	SendReCallItemFromServer(int type);

void SendItemSell( int item_pos, int store_id )
{
	t_packet packet;
	
	packet.h.header.type =  CMD_ITEM_SELL_REQ;
	packet.u.client_item_sell.store_id = (short int) store_id;
	packet.u.client_item_sell.item_position = (short int) item_pos;
	packet.h.header.size = sizeof( t_client_item_sell );
	
	QueuePacket( &packet, 1 );
}

void SendItemRepair( int item_pos, int store_id )
{
	t_packet packet;
	
	packet.h.header.type = CMD_ITEMREPAIR_REQ;
	packet.u.client_item_sell.store_id = (short int) store_id;
	packet.u.client_item_sell.item_position = (short int) item_pos;
	packet.h.header.size = sizeof( t_client_item_sell );
	
	QueuePacket( &packet, 1 );
}

void SendItemBuy( int num, int inv_pos, int store_id )
{
	t_packet packet;
	
	
	packet.h.header.type =  CMD_ITEM_BUY_REQ;
	packet.u.client_item_sell.store_id = (short int) store_id;
	packet.u.client_item_buy.item_no = (short int) num;	
	packet.u.client_item_buy.inv_position = (short int) inv_pos;
	packet.h.header.size = sizeof( t_client_item_buy );
	
	QueuePacket( &packet, 1 );
}

void SendReCallItemFromServer( int type )
{
	t_packet packet;
	{
		packet.h.header.type = type;
		packet.h.header.size = 0;
	}
	QueuePacket( &packet, 1 );
}


void RecvPublicNoticeTitle( t_server_menu_message_title *p )
{
	if( p->no )
	{
		int para = (p->no-1) % 10;
		c_BbsTitle[para].SetBbsTitle( p->no, p->date, (char *)p->name, p->title );		// bbs 悸泼
	}
}

void ReqMessageTitle( int type, int count )
{
	t_packet packet;
	
	int t;
	switch( type )
	{
	case MN_TOWNHALL_PUBLICNOTICE :		t = CMD_PUBLIC_NOTICE_TITLE_REQ	; break;
	case MN_TOWNHALL_FORUM :			t = CMD_FORUM_TITLE_REQ			; break;
	case MN_TOWNHALL_EVENT :			t = CMD_EVENT_TITLE_REQ			; break;
	case MN_TOWNHALL_RANK1 :			t = CMD_RANK_TITLE_REQ			; break;
	default : return;
	}
	packet.h.header.type = t;
	{
		packet.u.kein.req_bbs_title.count = count;
	}
	packet.h.header.size = sizeof( k_req_bbs_title );
	QueuePacket( &packet, 1 );
}

void ReqMessageBbs( int type, int count )
{
	t_packet packet;
	
	int t;
	switch( type )
	{
	case MN_TOWNHALL_PUBLICNOTICE :		t = CMD_PUBLIC_NOTICE_BBS_REQ	; break;
	case MN_TOWNHALL_FORUM :			t = CMD_FORUM_BBS_REQ			; break;
	case MN_TOWNHALL_EVENT :			t = CMD_EVENT_BBS_REQ			; break;
	case MN_TOWNHALL_RANK1 :			t = CMD_RANK_BBS_REQ			; break;
	default : return;
	}
	packet.h.header.type = t;
	{
		packet.u.kein.req_bbs_title.count = count;
	}
	packet.h.header.size = sizeof( k_req_bbs_title );
	QueuePacket( &packet, 1 );
}


void ReqCharList( )
{
	t_packet packet;
	
	packet.h.header.type = CMD_RESEND_CHARLIST;
	packet.h.header.size = 0;
	QueuePacket( &packet, 1 );
}

void RecvCharInfomation( t_server_user_db_data *p )
{
	SCharacter &ch = SCharacterData;
	
	ch.nCharacterHP	= p->nLife;
	ch.nCharacterMAXHP =  p->nMaxHp;
	ch.nCharacterMP	= p->nMana;
	ch.nCharacterMAXMP = p->nMaxMp;
	ch.nCharacterSP	= p->nHungry;	
	ch.nCharacterMAXSP = p->nMaxHungry;
	// 瓷仿摹 眠啊 ######################################################
	for( int a=0; a<11; a++ )
		ch.nCharacterAbility[a] = p->Avility[a];
	
	ch.nMoney = p->money;
	ch.nLevel = p->lev;
	ch.nExp = p->exp;
	ch.nCharacterData[GENDER] =		p->Attr[0];
	ch.nCharacterData[FACE] =		p->Attr[1];
	//ch.nCharacterData[ARIGEMENT] =	p->Attr[2]; THAI2 YGI
	ch.nCharacterData[CLASS] =		p->Attr[3];
	ch.nCharacterData[SPELL] =		p->Attr[4];
	ch.nCharacterData[TACTICS_WOMAN]=p->Attr[5]; 
	ch.nCharacterData[TACTICS_MAN] = p->Attr[5];
	
	ch.condition = p->condition;
	
	//	#################################################################
}

void SendShowItemOfOtherCh( int ch_id )
{
	t_packet packet;
	
	packet.h.header.type = CMD_OTHER_CH_INV;
	{
		packet.u.kein.client_other_ch_inv.other_ch = ch_id;
	}
	packet.h.header.size = sizeof( kein_client_other_ch_inv );
	QueuePacket( &packet, 1 );
	
	You.id = ch_id;
}

//<soto-tai
void RecvOtherChInv( kein_server_other_ch_inv *inv )
{
	int count = inv->item_count;
	memset( You.inv, 0, sizeof(ItemAttr) * OTHER_INV_MAX  );
	for( int a=0; a<count; a++ )
		You.inv[a] = inv->item[a];
	
	fRMoveMenu = MM_ITEM_OPEN ;
	nItemOther = MN_CHARACTER_ITEM;
	You.id = inv->target_id;
}
//>soto-tai


void SendDivideItem( K_ITEM *item, int much )
{
	t_packet packet;
	
	packet.h.header.type = CMD_DIVIDE_ITEM;
	{
		packet.u.kein.item_attr_pos.item_attr = item->item_attr;
		packet.u.kein.item_attr_pos.item_pos = item->item_pos;
		packet.u.kein.item_attr_pos.much	= much;
	}
	packet.h.header.size = sizeof( kein_item_attr_pos );
	QueuePacket( &packet, 1 );
}

void SendGenrateItemByTool( k_client_create_item p )
{
	t_packet packet;
	
	packet.h.header.type = CMD_CREATE_ITEM;
	{
		packet.u.kein.client_create_item = p;
	}
	packet.h.header.size = sizeof( k_client_create_item );
	QueuePacket( &packet, 1 );
}

void RecvDeleteItem( POS pos, int is_broken )
{
	ItemAttr *temp = ::GetItemByPos( pos );//021121 lsw
	if( !temp ) JustMsg(lan->OutputMessage(6,12) ); //010215 lsw
	else 
	{
		if(pos.type == HAND ) g_MouseItemType = 0;
		if( is_broken )
			AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(6,13), GetItemName( temp->item_no ) );//010215 lsw
		DeleteItem( temp );
	}	
}

void RecvDecreaseItem( k_server_decrease_item *item )
{
	ItemAttr *temp = ::GetItemByPos( item->item_pos );//021121 lsw
	if( !temp ) JustMsg(lan->OutputMessage(6,14) ); //010215 lsw
	else temp->attr[IATTR_DURATION] = item->dur;
}

void SendLvUpPointEach( int type )		// 1器牢飘 棵扼 哎锭付促..
{
	t_packet packet;
	
	packet.h.header.type = CMD_LVUP_POINT_EACH;
	{
		packet.u.kein.client_lvup_point_each.type  = ( BYTE ) type;
	}
	packet.h.header.size = sizeof( client_lvup_point_each );
	QueuePacket( &packet, 1 );
}
void SendLvDownPointEach( int type )
{
	t_packet packet;
	
	packet.h.header.type = CMD_LVDOWN_POINT_EACH;
	{
		packet.u.kein.client_lvup_point_each.type  = ( BYTE ) type;
	}
	packet.h.header.size = sizeof( client_lvup_point_each );
	QueuePacket( &packet, 1 );
}

void ReqLvUpPoint( )	// 烙矫 饭骇诀 器牢飘 妮...
{
	t_packet packet;
	
	packet.h.header.type = REQ_LEVELUP_POINT;
	packet.h.header.size = 0;
	QueuePacket( &packet, 1 );
}

void ReqItemInfo0()
{
	t_packet packet;
	
	packet.h.header.type = CMD_CHR_ITEM_INFO_0;
	packet.h.header.size = 0;
	QueuePacket( &packet, 1 );
}

void ReqItemInfo1( )
{
	t_packet packet;
	
	packet.h.header.type = CMD_CHR_ITEM_INFO_1;
	packet.h.header.size = 0;
	QueuePacket( &packet, 1 );
}

void ReqItemInfo2( int count )
{
	t_packet packet;
	
	packet.h.header.type = CMD_CHR_ITEM_INFO_2;
	{
		packet.u.client_item_inv.count = (short int)count;
	}
	packet.h.header.size = sizeof( client_item_inv ) ;
	QueuePacket( &packet, 1 );
}

void ReqMagicInfo()
{
	t_packet packet;
	
	packet.h.header.type = CMD_CHAR_INFO_MAGIC;
	packet.h.header.size = 0;
	QueuePacket( &packet, 1 );
}

void ReqSkillInfo()
{
	t_packet packet;
	
	packet.h.header.type = CMD_CHAR_INFO_SKILL;
	packet.h.header.size = 0;
	QueuePacket( &packet, 1 );
}

void ReqConnectInfo()
{
	t_packet packet;
	
	packet.h.header.type = CMD_CONNECT_INFO1;
	packet.h.header.size = 0;
	QueuePacket( &packet, 1 );
}


void SendLearnSkill( int skill_no, int guild_no )
{
	t_packet packet;
	
	packet.h.header.type = CMD_LEARN_SKILL;
	{
		packet.u.client_learn_skill.skillno = (short int) skill_no;
		packet.u.client_learn_skill.guildindex = (short int) guild_no;
	}
	packet.h.header.size = sizeof( t_client_learn_skill );
	
	QueuePacket( &packet, 1 );
}

void RecvLearnSkill( int s )
{
	MP3( SN_LEARN_SKILL );
	AddCurrentStatusMessage(255,255,0,lan->OutputMessage(2,500));
	SCharacterData.SkillId[s] = true;
}


int SendLearnItem( ItemJoinSelect item )		// 酒捞袍 硅快扁.. 
{
	int is_learned = FindLearnItem( item.item_no );			// 郴啊 硅款 酒捞袍牢瘤 魄窜
	if( is_learned ) return -1;		// 捞固 硅奎澜.
	
	if( SCharacterData.nMoney < (DWORD) item_join[item.join_no].tech_price  ) return -2;	// 捣捞 何练
	if( !CanLearnItemByNeedSkill( item.join_no) ) return -3;
	
	
	t_packet packet;
	packet.h.header.type = CMD_LEARN_ITEM;
	{
		packet.u.kein.client_learn_item.item_no = item.item_no;
		packet.u.kein.client_learn_item.join_no = item.join_no;
	}
	packet.h.header.size = sizeof( k_client_learn_item );
	QueuePacket( &packet, 1 );
	
	return 1;	// 辑滚肺 傈价 沁澜.
}

void RecvLearnItemOk( k_item_no item )
{
	MP3( SN_LEARN_ITEM );
	int pos = SearchLearnItem( item.item_no );			// 郴啊 硅款 酒捞袍牢瘤 魄窜
	if( pos == -1 ) 
	{
		JustMsg( lan->OutputMessage(6,15) );//010215 lsw
		return;
	}
	
	SCharacterData.ItemId[SCharacterData.ItemIdCount] = item.item_no;
	SubtractMoney( GetItemAttr( item.item_no, VALUE )*4 );
	SCharacterData.ItemIdCount++;
	
	MP3( SN_LEARN_ITEM);
	CallOkCancelMessageBox( MN_SKILLGUILD_ITEM, 0, 0,lan->OutputMessage(6,16),0 );//010215 lsw
}


void RecvItemRepar( k_server_item_repair_ok *r )
{
	int pos = r->item_pos;
	int money = r->money;
	DWORD dur = r->dur;
	
	int a = (pos & 0x00000060) >> 5 ;	//0105
	int b = (pos & 0x00000018) >> 3 ;
	int c = (pos & 0x00000007) ;
	
	ItemAttr &item = InvItemAttr[a][b][c];
	item.attr[IATTR_DURATION] = dur;
	SubtractMoney( money );
	MP3( SN_ITEM_REPAR );
}

void RecvServerResult( k_server_result *p )
{
	int type = p->type;
	int result = p->result;
	
	switch( type )
	{
	case CM_REPAIR:
		{
			int menu;
			if( SMenu[MN_SKILLGUILD_REPAIR].bActive ) menu = MN_SKILLGUILD_REPAIR;
			else menu = 0;
			switch( result )
			{
			case 1 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,2),0 );break;//010215 lsw
			case 2 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,3),0 );break;//010215 lsw
			case 3 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,4),0 );break;//010215 lsw
			case 4 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,5),0 );break;//010215 lsw
			default :	JustMsg( lan->OutputMessage(5,6)); break;//010215 lsw
			}
			break;
		}
	case CM_LEARNSKILL : 
		{
			int menu;
			if( SMenu[MN_SKILLGUILD_SKILL].bActive )
			{
				menu = MN_SKILLGUILD_SKILL;
				GetLearnSkillInv( SMenu[menu].nTemp, SMenu[menu].nField[ 6 ].nSHideNomalStart );
			}
			else if( SMenu[MN_HEAL_LEARN].bActive ) menu = MN_HEAL_LEARN;
			else if( SMenu[MN_SKILLGUILD_SKILL].bActive )
			{
				menu = MN_SKILLGUILD_KNOWLAGE;
				GetLearnKnowlageInv( SMenu[menu].nField[ 6 ].nSHideNomalStart );
			}
			else menu = 0;
			switch( result )
			{
			case 1 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,7),0 );break;//010215 lsw
			case 2 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,8),0 );break;//010215 lsw
			case 3 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,9),0 );break;//010215 lsw
			case 4 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,10),0 );break;//010215 lsw
			default :	JustMsg( lan->OutputMessage(5,6)); break;
			}
			break;
		}
	case CM_LEARNMAGIC :
		{
			int menu;
			if( SMenu[MN_LEARN_MAGIC_BOOK].bActive )	menu = MN_LEARN_MAGIC_BOOK;
			else menu = 0;
			switch( result )
			{
			case 2 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,11),0 );break;//010215 lsw
			case 3 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,12),0 );break;//010215 lsw
			case 4 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,13),0 );break;//010215 lsw
				//					case 5 :	CallOkCancelMessageBox( menu, 0, 0, " ",0 );break;
			default :	JustMsg(lan->OutputMessage(5,6) ); break;
			}
			break;
		}
	case CM_PREVENTING :
		{
			int menu = 0;
			if( SMenu[MN_HEAL_MAIN].bActive ) menu = MN_HEAL_MAIN;
			switch( result )
			{
			case 2 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,14),0 );break;//010215 lsw
			default :	JustMsg( lan->OutputMessage(5,6)); break;
			}
			break;
		}
	case CM_CURE_DISEASE :
		{
			int menu = 0;
			if( SMenu[MN_HEAL_MAIN].bActive ) menu = MN_HEAL_MAIN;
			switch( result )
			{
			case 2 :	CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,15),0 );break;//010215 lsw
			default :	JustMsg( lan->OutputMessage(5,6)); break;
			}
			break;
		}
	case CM_INN_SLEEP	:
	case CM_INN_REST	:	switch( result )
							{

⌨️ 快捷键说明

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