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

📄 exchangemgr.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}

	const ItemAttr *target= ::GetItemByPOS( cn, k_item->item_pos );		// 沥富肺 弊 酒捞袍阑 啊瘤绊 乐蠢衬?

	if( !target
	||	!target->item_no 
	|| ::memcmp( target,&k_item->item_attr,sizeof(ITEMATTR) ) )
	{
		return;
	}

	k_item->item_attr = *target;

	for( int i=0; i<MAX_EXCHANGE_ITEM ; i++ )
	{
		if( ::EqualPosByPos(&me_ch->give[i].item_pos, &k_item->item_pos) ) 
		{
			return;// 鞍篮 镑狼 酒捞袍捞 棵扼 吭促.
		}
	}

	if(AUCTION_DB == me_ch->give[0].item_pos.type)
	{
		return;
	}//0锅俊 版概前捞 乐栏搁 酒捞袍 给棵赴促
	
	for( i=0; i<MAX_EXCHANGE_ITEM; i++ )
	{
		if( !me_ch->give[i].item_attr.item_no )
		{
			me_ch->give[i] = *k_item;
			you_ch->recv[i] = *k_item;
			break;
		}
	}
	
	t_packet packet;
	packet.h.header.type = CMD_EXCHANGE_ITEM_EACH;
	packet.u.kein.transfer_item.item = *k_item;//030108 lsw
	packet.h.header.size = sizeof( k_transfer_item );
	::QueuePacket(connections, you_id, &packet, 1);
}

void RecvExchange_Sub(CHARLIST *pCaster,CHARLIST *pTarget,const int i)
{
	if(0 > i || MAX_EXCHANGE_ITEM < i){return;}
	const int iCasterCn = pCaster->GetServerID();
	const int iTargetCn = pTarget->GetServerID();
	if( pCaster->give[i].item_attr.item_no )
	{
		ItemAttr *del_item = ::GetItemByPOS( iCasterCn, pCaster->give[i].item_pos );
		
		if(	AUCTION_DB == pCaster->give[0].item_pos.type)//魄概 拱前吝
		{//背券 己傍 苛记俊 乐绰芭 备概 啊瓷栏肺 棵妨扼
			// 030929 HK YGI
			int iIndex = MAKELONG(pCaster->give[0].item_pos.p1, pCaster->give[0].item_pos.p2 );
			Auction.SendCMD_MERCHANT_ITEM_BUY_COMFORM_RESULT(
				pCaster, iIndex,pCaster->give[0].item_attr,true);
		}

		if( !del_item ) return;

		::SendItemEventLog( del_item, iCasterCn, iTargetCn, SILT_PUT_OTHER_CH, 1 ); //YGI acer
		::SendItemEventLog( del_item, iTargetCn, iCasterCn, SILT_GET_OTHER_CH, 1 ); //YGI acer

		int a, b, c;
		int ret = SearchInv( pTarget->inv, a, b, c );
		if( !ret ) 
		{
			::SendItemEventLog( del_item , iTargetCn, iCasterCn, SILT_PUT_GROUND_MAX_INVEN, 1 ); //YGI acer
			::DropItem( pTarget->X, pTarget->Y, del_item );
		}
		else 
		{
			ItemAttr *recv_item = &pTarget->inv[a][b][c];
			*recv_item = *del_item;
			POS pos;
			::SetItemPos( INV, a, b, c, &pos );
			::SendServerEachItem( &pos, recv_item , iTargetCn );
		}
		::memset( del_item, 0, sizeof( ItemAttr ) );
		::SendServerEachItem( &pCaster->give[i].item_pos, del_item, iCasterCn );
	}
}

void RecvExchange( short int you, short int me )
{
	CHARLIST *me_ch = ::CheckServerId( me );
	CHARLIST *you_ch = ::CheckServerId( you );

	if( !me_ch || !you_ch )			 //  弊繁 仇 绝寸~
	{
		SendExchangeCancel( you, me );
		return;
	}
	const int iExchangeType = me_ch->GetExchangeType();

	if(iExchangeType != you_ch->GetExchangeType())
	{//背券 鸥涝捞 促福搁
		return;
	}
	
	switch(iExchangeType)
	{
	case EXCHANGE_TYPE_NORMAL:
		{
			if( EXCHANGE_STATE_READY != me_ch->GetExchangeState() 
			&&	EXCHANGE_STATE_READY != you_ch->GetExchangeState() 
			&& 	me_ch->GetExchangeTargetId() == you 
			&&	you_ch->GetExchangeTargetId() == me )
			{
				for( int i=0; i<20; i++ )
				{
					RecvExchange_Sub(me_ch,you_ch,i);
					RecvExchange_Sub(you_ch,me_ch,i);
				}
				me_ch->ClearExchangeInfo();
				you_ch->ClearExchangeInfo();
			}
		}break;
	case EXCHANGE_TYPE_MERCHANT_DIRECT:
		{
			if( EXCHANGE_STATE_READY != me_ch->GetExchangeState() 
			&&	EXCHANGE_STATE_READY != you_ch->GetExchangeState() 
			&& 	me_ch->GetExchangeTargetId() == you 
			&&	you_ch->GetExchangeTargetId() == me )
			{
				for( int i=0; i<20; i++ )
				{
					RecvExchange_Sub(me_ch,you_ch,i);
					RecvExchange_Sub(you_ch,me_ch,i);
				}
				me_ch->ClearExchangeInfo();
				you_ch->ClearExchangeInfo();
			}
		}break;
	}
	t_packet packet;
	packet.h.header.type = CMD_EXCHANGE_ITEM;
	packet.h.header.size = sizeof( 0 );
	::QueuePacket(connections, me, &packet, 1);
	::QueuePacket(connections, you, &packet, 1);

	me_ch->Money = ::GetMoneyByItem( me_ch );
	you_ch->Money = ::GetMoneyByItem( you_ch );
}

void RecvExchangeItemDel( POS pos, short int you_id, short int me )
{
	CHARLIST *me_ch	= ::CheckServerId(me);
	CHARLIST *you_ch = ::CheckServerId(you_id);

	if( !me_ch || !you_ch )			 //  弊繁 仇 绝寸~
	{
		::SendExchangeCancel( you_id, me );
		return;
	}

	RecvExchangeStateSign( you_id, me , false);
	RecvExchangeStateSign( me, you_id , false);
	
	if(AUCTION_DB == me_ch->give[0].item_pos.type)//0锅俊 版概前捞 乐栏搁 唱赣瘤档 秒家 且 荐 绝促(甸绢 尘 荐 绝促)
	{
		return;
	}

	for( int i=0; i<20; i++ )
	{
		if( IsEqualPosByPos( me_ch->give[i].item_pos, pos ) )
		{
			::memset( &me_ch->give[i], 0, sizeof( K_ITEM ) );
		}
	}

	
	for( i=0; i<20; i++ )
	{
		if( IsEqualPosByPos( you_ch->recv[i].item_pos, pos ) )
		{
			K_ITEM targetItem = you_ch->recv[i];
			::SendExchangeItemDel( you_id, targetItem );
			::memset( &you_ch->recv[i], 0, sizeof( K_ITEM ) );
		}
	}
	
	
}

void SendExchangeItemDel( const short int you, const K_ITEM item )		// 惑措祈俊霸 逞绢哎 酒捞袍吝 昏力且 酒捞袍..
{
	t_packet packet;
	packet.h.header.type = CMD_EXCHANGE_ITEM_DEL;
	{
		packet.u.kein.transfer_item.item = item;
	}
	packet.h.header.size = sizeof( k_transfer_item );
	QueuePacket(connections, you, &packet, 1);	
}


void RecvReqManToMan( short int target_id, short int cn )
{
	CHARLIST *target= ::CheckServerId(target_id);
	CHARLIST *ch	= ::CheckServerId( cn );
	if(!target || !ch){return;}

	if (target->GetLevel() > ch->GetLevel() + ENABLE_DUEL_LEVEL)
	{	//< CSD-030806
		::SendReqManToManResult(3, cn);
		return;
	}	//> CSD-030806

	if( EXCHANGE_STATE_READY != target->GetExchangeState() 
	||	EXCHANGE_STATE_READY != ch->GetExchangeState() ) // 拱扒 芭贰吝捞促
	{
		::SendReqManToManResult(4, cn);
		return;
	}

	if( target->fight_flag || ch->fight_flag )
	{
		::SendReqManToManResult(4, cn);
		return;
	}
	::SendReqManToManResult(1, cn) ;		// 脚没 己傍	//酒捞袍阑 吧瘤 臼嚼聪促.//021030 lsw

	// 搬捧 矫胶袍 敲饭弊 悸泼
	target->fight_flag	= 2;		// 搬捧 皋春啊 栋乐绰 惑怕 敲饭弊 set
	ch->fight_flag		= 2;		// 搬捧 皋春啊 栋乐绰 惑怕 敲饭弊 set

	t_packet packet;				// 1:1 脚没
	packet.h.header.type = CMD_REQ_MAN_TO_MAN;
	packet.u.kein.req_man_to_man.id = cn;
	packet.h.header.size = sizeof( k_req_man_to_man );
	::QueuePacket(connections, target_id, &packet, 1);
}

////////////////////////////////////////////////////////
void SendReqManToManResult( char ret, short int cn )
{
	t_packet packet;				// 1:1 脚没
	packet.h.header.type = CMD_REQ_MAN_TO_MAN_RESULT;
	packet.u.kein.default_char= ret;
	packet.h.header.size = sizeof( char );
	QueuePacket(connections, cn, &packet, 1);
}

void RecvManToManConsent( short int target_id, short int cn )
{
	CHARLIST *ch = CheckServerId( cn );
	CHARLIST *target = CheckServerId( target_id );
	if( !ch || !target ) return;

	t_packet packet;				// 1:1 矫累
	packet.h.header.type = CMD_REQ_MAN_TO_MAN_CONSENT;
	packet.h.header.size = sizeof( short int );
	packet.u.kein.default_short_int = target_id;
	QueuePacket(connections, cn, &packet, 1);

	packet.u.kein.default_short_int = cn;
	QueuePacket(connections, target_id, &packet, 1);
}

void ResultManToMan( short int cn, short int target_id, int flag )		// 1:1 俊辑 搬苞啊 唱吭阑 版快 酒捞袍 悸泼~
{
	CHARLIST *me = CheckServerId( cn );
	if( !me || me->fight_flag == 0 )
	{
		return;
	}
	
	CHARLIST *you = CheckServerId( target_id );
	if( !you || you->fight_flag == 0 )
	{
		return;
	}

	switch( flag )//历率俊辑 牢磐其捞胶甫 摧阑锭 //030116 lsw
	{
	case 3:					// 厚变版快		// 阿磊 酒捞袍阑 阿磊啊 啊廉埃促.
		{
			::CallClient( target_id, CMD_REQ_MAN_TO_MAN_REFUSAL );
		}break;
	}

	me->fight_id = 0;
	me->fight_flag = 0;
	you->fight_id = 0;
	you->fight_flag = 0;
}

void RecvCMD_TRADE_MODE_CHANGE(const int iCn, t_packet *p)//030127 lsw //Trade On/Off 悸泼
{
	CHARLIST *pCh = ::CheckServerId(iCn);
	const bool bIsTradeOn = p->u.Hwoa.rang.TradeModeChange.bIsTradeOn;
	pCh->SetTradeMode(bIsTradeOn);

	::QueuePacket(connections, iCn, p, 1);
}

⌨️ 快捷键说明

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