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

📄 exchangemgr.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if( target->id > 10000 ) 
	{
		MP3( SN_WARNING ); 
		AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,36));//010215 lsw
		return;
	}
	if( target->lv > SCharacterData.nLevel+10 ) 
	{
		MP3( SN_WARNING ); 
		AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,37));//010215 lsw
		return;
	}
	int line_len = (int )( sqrt( pow((target->x - Hero->x), 2)+pow((target->y - Hero->y), 2) ) / TILE_SIZE);
	if( line_len > 5 )
	{
		MP3( SN_WARNING ); 
		AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,38));//010215 lsw
		return;
	}
	ServerConnectMenuClose();		// 汗荤 规瘤

	SMenu[MN_MAN_TO_MAN].key = target->id;
	
	strcpy( SMenu[MN_MAN_TO_MAN].nField[VS_RIGHT_DISPLAY_FIELD_NO].temp, SCharacterData.sCharacterName);
	strcpy( SMenu[MN_MAN_TO_MAN].nField[VS_LEFT_DISPLAY_FIELD_NO].temp, name );
	SMenu[MN_MAN_TO_MAN].work = 0;		// 脚没阑 沁促..
	//////////////////////////////////////////////////////

	t_packet p;		// 辑滚肺 脚没

	p.h.header.type = CMD_REQ_MAN_TO_MAN;
	p.u.kein.default_short_int = target->id;
	p.h.header.size = sizeof( short int );
	QueuePacket( &p, 1 );
}

void RecvReqManToMan( short int target_id )
{
	char *target_name = NULL;
	LPCHARACTER target = ReturnCharacterPoint( target_id );
	if( !target )
	{
		SendReqManToManResult( target_id, 5 );
		return;
	}
	target_name = target->name;
	if( SMenu[MN_MAN_TO_MAN].bActive || IsExchangeNow() )//021014 lsw
	{
		SendReqManToManResult( target_id, 0 );
		return;
	}

	int line_len = (int) (sqrt( pow((target->x - Hero->x), 2)+pow((target->y - Hero->y), 2) ) / TILE_SIZE);
	if( line_len > 5 )
	{
		SendReqManToManResult( target_id, 6 );
		return;
	}
	//	搬捧... 芭何
	AddCurrentStatusMessage( 250, 250, 250, lan->OutputMessage(3,39), target_name );//010215 lsw

	ExchangeMgr.ClearItemData();//021030 lsw

	CallMenu( MN_MAN_TO_MAN );
	SMenu[MN_MAN_TO_MAN].key = target_id;

	strcpy( SMenu[MN_MAN_TO_MAN].nField[VS_LEFT_DISPLAY_FIELD_NO].temp, target_name );
	strcpy( SMenu[MN_MAN_TO_MAN].nField[VS_RIGHT_DISPLAY_FIELD_NO].temp, SCharacterData.sCharacterName);
	SMenu[MN_MAN_TO_MAN].work = 1;		// 脚没阑 罐酒 甸看促...
}

void SendReqManToManResult( short int target_id, int ret )
{
	t_packet p;		// 辑滚肺 脚没

	p.h.header.type = CMD_REQ_MAN_TO_MAN_RESULT;
		p.u.kein.req_man_to_man_result.id = target_id;
		p.u.kein.req_man_to_man_result.ret = ret;
	p.h.header.size = sizeof( k_req_man_to_man_result );
	QueuePacket( &p, 1 );
}

void RecvReqManToManResult( char ret )
{
	bool bCanOpen = false;
	switch( ret )
	{
	case 2:	{::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(3,23)); }break;//010215 lsw
	case 3:	{::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(3,24)); }break;//010215 lsw
	case 4:	{::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(3,25)); }break;//010215 lsw
	case 5: {::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(3,26)); }break;//010215 lsw
	case 6: {::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(3,27)); }break;//010215 lsw
	case 0: {::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(3,22)); }break;//010215 lsw
	case 1: 
		{
			::AddCurrentStatusMessage( 250, 250, 250, lan->OutputMessage(3,21)); 
			bCanOpen = true;
		}break;//010215 lsw
	}

	if(bCanOpen)
	{
		::CallMenu( MN_MAN_TO_MAN );
	}
	else
	{
		::CloseAllMenu();
	}
}

void SendManToManRefusal( short int target_id )
{
	t_packet p;		

	p.h.header.type = CMD_REQ_MAN_TO_MAN_REFUSAL;		// 芭例
		p.u.kein.default_short_int = target_id;
	p.h.header.size = sizeof( short int );
	QueuePacket( &p, 1 );
}

void SendManToManStart( short int target_id  )
{
	t_packet p;		// 辑滚肺 脚没

	p.h.header.type = CMD_REQ_MAN_TO_MAN_CONSENT;		// 铰倡
		p.u.kein.default_short_int = target_id;
	p.h.header.size = sizeof( short int );
	QueuePacket( &p, 1 );
}

void RecvStartManToMan( int target_id )
{
	LPCHARACTER target = ReturnCharacterPoint( target_id );
	if( !target ) return;

	int x = Hero->x + ( target->x - Hero->x ) / 2;
	int y = Hero->y + ( target->y - Hero->y ) / 2;

	SmallMenuClose();
	MainMenuClose();

	//SMenu[MN_MAN_TO_MAN].bActive = false;
	///////////////////////
	// start 1:1 窃荐 龋免
	MP3( SN_START_FIGHT );
	man_to_man_start = 80;

	SetFightMode( target_id, x, y );
}

void RecvReqManToManRefusal( )
{
	AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(3,40));//010215 lsw
	MenuSoundClose( MN_MAN_TO_MAN );
}

void SendManToManEachItem( short int target_id )
{
	t_packet p;	

	p.h.header.type = CMD_MAN_TO_MAN_ITEM_EACH;
		p.u.kein.default_short_int = target_id;
	p.h.header.size = sizeof( short int );
	QueuePacket( &p, 1 );
}

void SetExchageItemData(const int iExchangeIndex,ItemAttr &item, POS &pos, const bool bSendToServer)//酒捞袍 单捞鸥 悸泼
{
	if(!IsExchangeNow())
	{
//		return;
	}

	if(ExchangeMgr.GetExchangeType() == EXCHANGE_TYPE_MERCHANT_DIRECT
	&&	ExchangeMgr.m_bIsIAmMerchant )
	{//郴啊 魄概磊搁 酒捞袍 给 棵府霸 贸府 秦具窍绰单..
		return;
	}
	
	if(ExchangeMgr.IsMySideConformStateOk())
	{//if ok state is return
		return;
	}

	int iItemX = 0, iItemY = 0;
	::GetXANDYByExchangeItemIndex(iExchangeIndex,iItemX,iItemY);//初阑锭 沥纺阑 困秦辑
	DefaultItem *pTarget = &item_give[iExchangeIndex];
	pTarget->x = iItemX;
	pTarget->y = iItemY;
	
	::SetRect( &pTarget->rect, 
		pTarget->x-15,pTarget->y-15,
		pTarget->x+15,pTarget->y+15 );

	pTarget->item.item_attr = item;
	pTarget->item.item_pos = pos;		// 牢亥配府 郴狼 厘家甫 扁撅茄促.
	::ItemSoundOfGetItem( item.item_no );
	if(bSendToServer)
	{
		::SendExchangeItemEach( item, pos, ExchangeMgr.GetExchangeTargetId() );
		::CheckFaultExchageItemList();
	}
}

void CheckFaultExchageItemList()//林绰 府胶飘吝俊 捞惑茄 痢捞 乐绰啊.
{
	for( int t=0; t<MAX_EXCHANGE_ITEM; t++ )
	{
	//	if( t != a && item_give[t].item.item_attr.item_no )
		if( item_give[t].item.item_attr.item_no )
		{
			ItemAttr *ii = ::GetItemByPos( item_give[t].item.item_pos );
			if( !ii || !ii->item_no )
			{
				memset( &item_give[t], 0, sizeof( DefaultItem ) );
			}
		}
	}
}

void GetExplainItemCheckGab(int &iX,int &iY,const int iWillDo)
{
	iX = SMenu[MN_EXCHANGE_ITEM].x+15+5+
		((RIGHT==iWillDo)?SMenu[MN_EXCHANGE_ITEM].nField[1].x:SMenu[MN_EXCHANGE_ITEM].nField[2].x);

	iY = SMenu[MN_EXCHANGE_ITEM].y+15+5+
		((RIGHT==iWillDo)?SMenu[MN_EXCHANGE_ITEM].nField[1].y:SMenu[MN_EXCHANGE_ITEM].nField[2].y);
}

void DisplayExchangeItemList(const int iWillDo, const int iIsRectOn)
{
	const DefaultItem *pTarget = ((RIGHT==iWillDo)?item_give:item_recv);
	
	int iGabX = 0, iGabY = 0;
	::GetExplainItemCheckGab(iGabX ,iGabY,iWillDo);
	
	for( int i=0; i<MAX_EXCHANGE_ITEM; i++ )		// 拳搁 嘛扁
	{
		const int iItemNo = pTarget[i].item.item_attr.item_no;
		if( iItemNo )
		{
			::PutItemIcon( iGabX+pTarget[i].x, iGabY+pTarget[i].y, iItemNo );

			if( !g_MouseItemType				
			&&	iIsRectOn
			&&	MouseInRectCheak( iGabX, iGabY, pTarget[i].rect ) )
			{
				::PutItemIcon( iGabX+pTarget[i].x, iGabY+pTarget[i].y, iItemNo, 8);
				::ItemExplain( pTarget[i].item.item_attr );		// 酒捞袍 汲疙
			}
		}
	}
}

void DeleteItemAtExchangeGiveItemList(const int iWillDo)
{//窃何肺 龋免 窍搁 救邓聪促. case FT_EXCHANGE_ITEM : 俊辑 迭 茄锅父 龋免 窍技夸
	if(!IsExchangeNow())
	{
		return;
	}

	if(ExchangeMgr.IsMySideConformStateOk())//My Side Now Ok state
	{
		return;
	}

	if(iWillDo != RIGHT)
	{
		return;
	}

	DefaultItem *pTarget = item_give;
	
	int iGabX = 0,iGabY = 0;
	::GetExplainItemCheckGab(iGabX ,iGabY,iWillDo);

	for( int i=0; i<MAX_EXCHANGE_ITEM; i++ )
	{
		if( !g_MouseItemType//酒捞袍阑 甸绊 乐瘤 臼酒具 窍绊
		&&	pTarget[i].item.item_attr.item_no
		&&	::MouseInRectCheak( iGabX, iGabY, pTarget[i].rect ) 
		)	// 郴啊 霖 酒捞袍
		{
			POS pos_t = pTarget[i].item.item_pos;
			ItemAttr *source = ::GetItemByPos( pos_t );

			if( !source || !source->item_no ){break;}
			g_MouseItemType = 1;//颊俊 甸菌促
			HandItemAttr = *source;
			IP_base = pos_t;

			::SetItemPos(HAND, &pos_t);
			::SendMoveItem( HandItemAttr.item_no, IP_base, pos_t );
			::SendExchangeItemDel( pTarget[i].item.item_pos, ExchangeMgr.GetExchangeTargetId());
			::memset( &pTarget[i], 0, sizeof( DefaultItem ) );
			::DeleteItem( IP_base );
			break;
		}
	}
}

void TradeONOFF( char *t )//020808 YGI 
{
	t_packet p;
	p.h.header.type = CMD_TRADE_MODE_CHANGE;
	p.h.header.size = sizeof(t_TradeModeChange);
	if( _stricmp( t, "ON" ) == 0 )
	{
		g_Menu_Variable.m_bTradeON = false;
		p.u.Hwoa.rang.TradeModeChange.bIsTradeOn = false;
	}
	else if( _stricmp( t, "OFF" ) == 0 )
	{
		g_Menu_Variable.m_bTradeON = true;
		p.u.Hwoa.rang.TradeModeChange.bIsTradeOn = true;
	}
	else
	{
		g_Menu_Variable.m_bTradeON = !g_Menu_Variable.m_bTradeON;
		p.u.Hwoa.rang.TradeModeChange.bIsTradeOn = g_Menu_Variable.m_bTradeON;
	}
	p.u.Hwoa.rang.TradeModeChange.iCn = Hero->id;
	::QueuePacket( &p, 1 );
}

void RecvCMD_TRADE_MODE_CHANGE(t_packet *p)//030127 lsw //Trade On/Off 悸泼
{
	const bool bIsTradeOn = p->u.Hwoa.rang.TradeModeChange.bIsTradeOn;
	Kein_PutMessage( KM_INFO, kein_GetMenuString( 206 ), bIsTradeOn?"OFF":"ON" );
}

⌨️ 快捷键说明

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