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

📄 exchangemgr.cpp

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

#include "..\stdafx.h"
#include "CItem.h"
#include "Auction.h"
#include "DefaultHeader.h"
#include "DR_NETWORK.h"
#include "GMMGR.h"
#include "ExchangeMgr.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CExchangeMgr::CExchangeMgr()
{

}

CExchangeMgr::~CExchangeMgr()
{

}


// 011120 YGI
int RecvItemExchange( K_ITEM *k_item, int you_id, int cn , const int iExchangeType)//芭贰甫 窍绊 酵促绰 夸备
{
	//////////////////// exist check //////////////
	CHARLIST *ch	= ::CheckServerId( cn );
	CHARLIST *you	= ::CheckServerId( you_id );
	if( !ch || !you ) {return 0;}

	if( ch->IsDead() || you->IsDead() )//磷菌促搁.
	{
		return 0;
	}

	if (!CanSaveUserData(ch, 6) || !CanSaveUserData(you, 6))
	{	//< CSD-040212
		return 0;
	}	//> CSD-040212

	if(!ch->IsTradeOn() || !you->IsTradeOn())
	{
		if(!ch->IsTradeOn()){::OutMessage(ch,2,920);}//背券 芭何 惑怕 犬牢饶 酒捞袍阑 芭贰 窍绞矫夸.
		else				{::OutMessage(ch,2,921);}//惑措啊 背券阑 芭何

		if(!you->IsTradeOn())	{::OutMessage(you,2,920);}//背券 芭何 惑怕 犬牢饶 酒捞袍阑 芭贰 窍绞矫夸.
		else					{::OutMessage(you,2,921);}//惑措啊 背券阑 芭何
		
		return 0;
	}

	if( EXCHANGE_STATE_READY != you->GetExchangeState() )		// 弊荤恩捞 穿焙啊客 芭贰甫 窍绊 乐栏搁
	{
		SendExchangeItemResult( cn, 0 ); 
		return 0;
	}
	if( EXCHANGE_STATE_READY != ch->GetExchangeState() )	// 郴啊 穿焙啊客 芭贰窍绊 乐栏搁辑 
	{
		SendExchangeItemResult( cn, 1 ); // 促弗 荤恩窍绊 芭贰窍绊 乐促绰 巴~
		return 0;
	}
	if( ch->fight_flag > 0 )
	{
		SendExchangeItemResult( cn, 5 ); // 1:1 搬捧 吝捞促.
		return 0;
	}
	if( you->fight_flag > 0 )
	{
		SendExchangeItemResult( cn, 5 ); // 1:1 搬捧 吝捞促.
		return 0;
	}
	if( !you->IsPlayer())
	{
		SendExchangeItemResult( cn, 3 );		// 牢埃捞 酒衬~
		return 0;
	}
	if(!connections[you_id].dwAgentConnectionIndex || connections[you_id].state < CONNECT_JOIN) // 弊 荤恩篮 泅犁 立加吝捞 酒聪促.	
	{
		SendExchangeItemResult( cn, 4 );
		return 0;
	}

	if( EXCHANGE_STATE_READY != ch->GetExchangeState() 
	&&	you_id == ch->GetExchangeTargetId())	// 弊 荤恩苞 芭贰吝老锭 贸府 皋春俊 棵妨 初绰 芭客 鞍篮 贸府 鞘夸
	{		
		return 0;
	}

	//////////// 背券 矫累 己傍 风凭 ////////////////
	ch->ClearExchangeInfo();//鉴辑 林狼 努府绢 矫虐绊 蔼 悸泼捞聪鳖 郴府瘤 富巴
	you->ClearExchangeInfo();

	switch(iExchangeType)
	{
	case EXCHANGE_TYPE_NORMAL:
		{	//背券阑 贸澜 矫累且 锭绰 沥焊甫 葛滴 努府绢 矫糯
			::memset(k_item,0,sizeof(K_ITEM));
			::memset(ch->give,0,sizeof(K_ITEM)*MAX_EXCHANGE_ITEM);
			::memset(ch->recv,0,sizeof(K_ITEM)*MAX_EXCHANGE_ITEM);
			::memset(you->give,0,sizeof(K_ITEM)*MAX_EXCHANGE_ITEM);
			::memset(you->recv,0,sizeof(K_ITEM)*MAX_EXCHANGE_ITEM);
		}break;
	case EXCHANGE_TYPE_MERCHANT_DIRECT:
		{//八荤啊 绝促. 辑滚郴俊辑 龋免 窍扁 锭巩捞促
			ch->give[0] = *k_item;
			you->recv[0] = *k_item;
		}break;//021121 lsw
	default:
		{
			return 0;
		}break;
	}

	ch->SetExchangeTarget(you_id,you->Name);
	you->SetExchangeTarget(cn,ch->Name);

	ch->SetExchangeType(iExchangeType);//芭贰鸥涝 悸泼
	you->SetExchangeType(iExchangeType);

	ch->SetExchangeState(EXCHANGE_STATE_EXCHANGE_NOW_SIGN_NO);//焊烹 芭贰肺 悸泼
	you->SetExchangeState(EXCHANGE_STATE_EXCHANGE_NOW_SIGN_NO);
	
	::SendExchangeItemOk( you_id, cn, k_item ,iExchangeType);// 己傍 // 皋春甫 剁款促.
	::SendExchangeItemReq( you_id, cn, k_item ,iExchangeType);
	return 1;
}

void SendExchangeItemOk( int you_id, int cn, const K_ITEM *item , const int iExchangeType)	
{	// 酒捞袍 背券 皋春甫 剁况扼...
	t_packet packet;
	
	packet.h.header.type = CMD_EXCHANGE_ITEM_READY;
	packet.u.kein.exchange_item_start.item = *item;
	packet.u.kein.exchange_item_start.you_id = you_id;
	packet.u.kein.exchange_item_start.iExchangeType = iExchangeType;
	packet.h.header.size = sizeof( k_exchange_item_start );

	::QueuePacket(connections, cn, &packet, 1);
}

void SendExchangeItemReq( int you_id, int cn, const K_ITEM *item , const int iExchangeType)	
{	// cn捞 呈俊霸 酒捞袍阑 背券窍磊绊 夸没沁促.
	t_packet packet;

	packet.h.header.type = CMD_EXCHANGE_ITEM_REQ;
	packet.u.kein.exchange_item_start.item = *item;
	packet.u.kein.exchange_item_start.you_id = cn;
	packet.u.kein.exchange_item_start.iExchangeType = iExchangeType;
	packet.h.header.size = sizeof( k_exchange_item_start );

	::QueuePacket(connections, you_id, &packet, 1);
}

void SendExchangeItemResult( int cn, int result )
{
	t_packet packet;
	packet.h.header.type = CMD_EXCHANGE_ITEM_RESULT;
	packet.u.kein.try_item_trade.result = (char) result;
	packet.h.header.size = sizeof(k_server_money);

	::QueuePacket(connections, cn, &packet, 1);
}

void RecvExchangeStateSign( const short int you, const short int me , const bool bIsOkSign)
{//背券 OK 荤牢捞 吭绢
	CHARLIST *me_ch = ::CheckServerId(me);
	CHARLIST *you_ch = ::CheckServerId(you);

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

	if( EXCHANGE_STATE_READY != me_ch->GetExchangeState() 
	&&	EXCHANGE_STATE_READY != you_ch->GetExchangeState() 
	&& 	me_ch->GetExchangeTargetId() == you 
	&& 	you_ch->GetExchangeTargetId() == me )
	{
		int iSendPacketType = 0;
		if(bIsOkSign)
		{
			iSendPacketType = CMD_EXCHANGE_OK_SIGN;
			me_ch->SetExchangeState(EXCHANGE_STATE_EXCHANGE_NOW_SIGN_YES);//Change SignState
			if(EXCHANGE_STATE_EXCHANGE_NOW_SIGN_YES == you_ch->GetExchangeState())
			{// 2 Guys All Yes Sign
				RecvExchange( you, me );//ItemExchange
			}
		}
		else
		{
			iSendPacketType = CMD_EXCHANGE_CANCEL_SIGN;
			me_ch->SetExchangeState(EXCHANGE_STATE_EXCHANGE_NOW_SIGN_NO);//Change SignState
		}
	
		t_packet packet;// 笛捞 芭贰甫 窍绊 乐绰 吝捞具 茄促.
		packet.h.header.type = iSendPacketType;
		packet.h.header.size = sizeof( 0 );
		::QueuePacket(connections, you, &packet, 1);
	}
	else 
	{
		::SendExchangeCancel( you, me );
	}
	return;
}

void ExchangeCancel(CHARLIST *ch)//SendExchangeCancel() 客 悸飘 涝聪促. 冻绢瘤瘤 臼霸 林狼 窍技夸
{
	if(!ch){return;}
	switch(ch->GetExchangeType())
	{
	case EXCHANGE_TYPE_MERCHANT_DIRECT:	//惑牢苞 流立 芭贰
		{//秒家 瞪锭 IS_END_BUYING 甫 钱绢 林磊
			if(	AUCTION_DB == ch->give[0].item_pos.type)//魄概 拱前吝
			{
				// 030929 HK YGI
				int iIndex = MAKELONG( ch->give[0].item_pos.p1, ch->give[0].item_pos.p2 );
				Auction.SendCMD_MERCHANT_ITEM_BUY_COMFORM_RESULT(
					ch,iIndex,ch->give[0].item_attr,false);
			}
			if(	AUCTION_DB == ch->recv[0].item_pos.type)
			{
				// 030929 HK YGI
				int iIndex = MAKELONG( ch->recv[0].item_pos.p1, ch->recv[0].item_pos.p2 );
				Auction.SendCMD_MERCHANT_ITEM_BUY_COMFORM_RESULT(
					ch,iIndex,ch->recv[0].item_attr,false);
			}

		}break;
	default:
		{
		}break;
	}

	ch->ClearExchangeInfo();

	t_packet packet;
	packet.h.header.type = CMD_EXCHANGE_CANCEL;
	packet.h.header.size = sizeof( 0 );
	::QueuePacket(connections, ch->GetServerID(), &packet, 1);
}

void SendExchangeCancel( short int you, short int me)
{//iExchangeType捞 惑牢苞 芭贰老锭 iIndex蔼阑 持绊
	CHARLIST *pChMe		= ::CheckServerId(me);
	CHARLIST *pChYou	= ::CheckServerId(you);

	if( pChMe )		// 酒捞叼啊 0 捞搁 救等促.
	{
		::ExchangeCancel(pChMe); 
	}
	if( pChYou )
	{	
		::ExchangeCancel(pChYou);
	}
}

// 010223 YGI
void RecvExchangeEach( K_ITEM *k_item, int you_id, int cn )		// 棵妨 初扁 矫累茄 拱扒甸
{
	CHARLIST *me_ch	= ::CheckServerId( cn );
	CHARLIST *you_ch = ::CheckServerId( you_id );

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

	switch(k_item->item_pos.type)
	{
	case EQUIP:
		{
			if( k_item->item_pos.type == EQUIP )
			{
				int a, b, c;
				if( ::SearchInv( me_ch->inv, a, b, c ) )
				{
					::SetItemPos( INV, a, b, c, &k_item->item_pos );
				}
				else return;
			}
		}break;
	case GROUND:
	case BOX:
	case OTHER_CH:
	case MAKE:
	case BANK:
		{
			return;
		}break;
	default:
		{
		}break;

⌨️ 快捷键说明

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