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

📄 exchangemgr.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ExchangeMgr.cpp: implementation of the CExchangeMgr class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Menu.h"
#include "dragon.h"
#include "gameproc.h"
#include "MenuSet.h"
#include "char.h"
#include "Map.h"
#include "Math.h"
#include "ExchangeMgr.h"
#include "CharDataTable.h"
#include "SmallMenuSet.h"
DefaultItem item_give[MAX_EXCHANGE_ITEM]={0,};
DefaultItem item_recv[MAX_EXCHANGE_ITEM]={0,};

CExchangeMgr ExchangeMgr;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CExchangeMgr::CExchangeMgr()
{
	Clear();
	ClearItemData();
}

CExchangeMgr::~CExchangeMgr()
{
	Clear();
	ClearItemData();
}
void CExchangeMgr::Clear()
{	
	m_iExchageType			 = 0;//芭贰 鸥涝
	m_iExchageTargetId		 = 0;//芭贰吝牢 惑措狼 cn 蔼
	m_bOtherSideConformState = 0;//惑措规捞 芭贰 Ok 荤牢阑 焊陈绰啊.(芭贰牢磐其捞胶 摧洒芭唱 凯副锭 公炼扒 0 栏肺 父甸绢 拎扼.
	m_bMySideConformState	 = 0;//030108 lsw
	m_bIsIAmMerchant		 = false;
	SetExchangeState(EXCHANGE_STATE_READY);
}

void CExchangeMgr::ClearItemData()
{
	::memset( item_recv, 0, sizeof( DefaultItem )*MAX_EXCHANGE_ITEM );
	::memset( item_give, 0, sizeof( DefaultItem )*MAX_EXCHANGE_ITEM );//葛滴 瘤快绊 焊磊
}

bool IsExchangeNow()//背券 何盒
{
	return ( EXCHANGE_STATE_EXCHANGE_NOW == ExchangeMgr.GetExchangeState() )?true:false;
}

void CExchangeMgr::CallExchangeMenu(const bool bIsRecvSide, const int iExchageType)//郴何俊辑 努府绢 登聪鳖 炼缴窍绊
{
	Clear();
	ClearItemData();
	SetExchangeType(iExchageType);

	::CloseAllMenu();//皋春逢 葛滴 摧绊

	fRMoveMenu = MM_ITEM_OPEN;		// 困狼 if巩阑 父练且 锭父
	nItemOther = MN_EXCHANGE_ITEM;
	y_MenuFocus = 0;
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//秦寸 努扼捞攫飘啊 焊郴绰 巴
void SendExchangeItemWithOtherCh( short int you_id ,const int iExchangeType)
{//背券 窍磊绊 茄促(芭贰)
	t_packet p;
	p.h.header.type = CMD_EXCHANGE_ITEM_READY;
	p.u.kein.exchange_item_start.you_id			= you_id;
	p.u.kein.exchange_item_start.iExchangeType	= iExchangeType;//021030 lsw
	p.h.header.size = sizeof( k_exchange_item_start );
	QueuePacket( &p, 1 );
}

void CExchangeMgr::SendExchangeResult()
{	//背券 搬苞甫 焊辰促
	t_packet p;
	switch(GetExchangeType())
	{
	case EXCHANGE_TYPE_NORMAL:
	case EXCHANGE_TYPE_MERCHANT_DIRECT:
		{
			p.h.header.type = CMD_EXCHANGE_ITEM;
			p.u.kein.client_other_ch_inv.other_ch = ExchangeMgr.GetExchangeTargetId();
			p.h.header.size = sizeof( kein_client_other_ch_inv );
			QueuePacket( &p, 1 );
		}break;
	default:
		{
			return;
		}break;
	}	
}

void CExchangeMgr::SendExchangeStateSign(const bool bOkSign)
{
	t_packet p;

	LPCHARACTER	pCh = ::FindCharacter( &g_CharacterList, GetExchangeTargetId() );
	if( pCh //he is near me
	&&	!strcmp(pCh->name,GetExchangeTargetName()) 	)
	{
		if(bOkSign)
		{
			p.h.header.type = CMD_EXCHANGE_OK_SIGN;
		}
		else
		{
			p.h.header.type = CMD_EXCHANGE_CANCEL_SIGN;
		}
		
		p.u.kein.client_other_ch_inv.other_ch = GetExchangeTargetId();
		p.h.header.size = sizeof( kein_client_other_ch_inv );
		::QueuePacket( &p, 1 );
		return;
	}
	else
	{
		::CallServer( CMD_EXCHANGE_CANCEL );
	}
}

void SendExchangeItemEach( ItemAttr &item, POS &pos, short int you_id )
{
	if( pos.type < HAND && pos.type > BOX ){return;}
	t_packet p;
	p.h.header.type = CMD_EXCHANGE_ITEM_EACH;
	p.u.kein.exchange_item_start.item.item_attr = item;
	p.u.kein.exchange_item_start.item.item_pos = pos;
	p.u.kein.exchange_item_start.you_id = you_id;
	p.h.header.size = sizeof( k_exchange_item_start );
	QueuePacket( &p, 1 );
}

void SendExchangeItemDel( POS pos, short int you_id )
{
	t_packet p;

	p.h.header.type = CMD_EXCHANGE_ITEM_DEL;
	p.u.kein.exchange_item_del.pos = pos;
	p.u.kein.exchange_item_del.you_id = you_id;
	p.h.header.size = sizeof( k_exchange_item_del );
	QueuePacket( &p, 1 );
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//秦寸 努扼捞攫飘啊 罐绰 巴
void RecvExchangeItemOk( k_exchange_item_start *exchange_item )
{
	const int iTargetId = exchange_item->you_id;
	
	if( ::FindCharacter( &g_CharacterList, iTargetId ) )
	{
		ExchangeMgr.CallExchangeMenu(false,EXCHANGE_TYPE_NORMAL);//郴何俊辑 努府绢 登聪鳖 炼缴窍绊
		
		if(EXCHANGE_TYPE_MERCHANT_DIRECT== exchange_item->iExchangeType)
		{//郴何俊辑 努府绢 登绢辑 沥焊 荤扼笼聪促. ExchangeMgr.CallExchangeMenu(false,EXCHANGE_TYPE_NORMAL); 窍窜俊 初栏绞矫夸
			ExchangeMgr.m_bIsIAmMerchant = true;
		}

		::SetExchageItemData(0,exchange_item->item.item_attr,exchange_item->item.item_pos);
		ExchangeMgr.SetExchangeTargetId(iTargetId);//021030 lsw
		ExchangeMgr.SetExchangeState(EXCHANGE_STATE_EXCHANGE_NOW);//021030 lsw
		ExchangeMgr.SetExchangeType(exchange_item->iExchangeType);//021030 lsw
	}
}

void RecvExchangeItemReq( k_exchange_item_start *exchange_item )//背券 夸备
{	
	const int iTargetId = exchange_item->you_id;

	if( ::FindCharacter( &g_CharacterList, iTargetId ) )
	{
		ExchangeMgr.CallExchangeMenu(true,EXCHANGE_TYPE_NORMAL);//郴何俊辑 努府绢 登聪鳖 炼缴窍绊

		::RecvExchangeEach(&exchange_item->item);//酒捞袍 罐篮芭 悸泼 窍绊
		ExchangeMgr.SetExchangeTargetId(iTargetId);//021030 lsw
		ExchangeMgr.SetExchangeState(EXCHANGE_STATE_EXCHANGE_NOW);//021030 lsw
		ExchangeMgr.SetExchangeType(exchange_item->iExchangeType);//021030 lsw
	}
}

void RecvExchangeItemResult( int ret )	// 辑滚 傈价俊 蝶弗 俊矾 皋矫瘤 贸府
{
	ExchangeMgr.ClearItemData();//021030 lsw

	switch( ret )
	{
		case 0:		Kein_PutMessage( KM_FAIL, lan->OutputMessage(5,31)); break;//010215 lsw
		case 1:		Kein_PutMessage( KM_FAIL, lan->OutputMessage(5,32)); break;//
		case 2:		Kein_PutMessage( KM_FAIL, lan->OutputMessage(5,33)); break;//
		case 3:		Kein_PutMessage( KM_FAIL, lan->OutputMessage(5,34)); break;//
		case 4:		Kein_PutMessage( KM_FAIL, lan->OutputMessage(5,35)); break;//
		case 5:		Kein_PutMessage( KM_FAIL, lan->OutputMessage(5,36)); break;//010215 lsw
	}
	// 肯傈洒 秒家 矫挪促.
	::CloseAllMenu();
}

void RecvExchangeCancel()
{
	ExchangeMgr.Clear();
	ExchangeMgr.ClearItemData();
	SMenu[MN_EXCHANGE_ITEM].nField[3].nSHideNomalCount=0;
	SMenu[MN_EXCHANGE_ITEM].nField[4].nSHideNomalCount=0;
	SMenu[MN_EXCHANGE_ITEM].work = 0;
	MenuSoundClose( MN_EXCHANGE_ITEM );

	CallOkCancelMessageBox( 0, 0, 0,lan->OutputMessage(5,37), 0 );//010215 lsw

	if( EXCHANGE_STATE_EXCHANGE_NOW != ExchangeMgr.GetExchangeState() )
	{//哪汽 惑怕啊 酒囱单 捞繁 皋技瘤啊 甸绢柯促??
		COMMENT ::AddCurrentStatusMessage(FONT_COLOR_RED,"Critical Error");
	}
}

// 020320 YGI
void RemoveExchangeItemStatus()
{
	ExchangeMgr.Clear();
	ExchangeMgr.ClearItemData();
	
	SMenu[MN_EXCHANGE_ITEM].nField[3].nSHideNomalCount=0;
	SMenu[MN_EXCHANGE_ITEM].nField[4].nSHideNomalCount=0;
	SMenu[MN_EXCHANGE_ITEM].work = 0;
}

void RecvExchange()		//背券 己傍
{	// 020320 YGI // 技陛棺 酒捞袍 格废篮 捞镑俊辑...
	RemoveExchangeItemStatus();//努府绢甫 矫虐绊
	MenuSoundClose( MN_EXCHANGE_ITEM );
	CallOkCancelMessageBox( 0, 0, 0, lan->OutputMessage(5,38), 0 );//010215 lsw
}

void GetXANDYByExchangeItemIndex(const int iExchangeIndex, int &iX, int &iY)
{
	iX= (iExchangeIndex%5)*32 +(iExchangeIndex%5)*3;
	iY= (iExchangeIndex/5)*32 +(iExchangeIndex/5)*3;//初阑锭 沥纺阑 困秦辑
}

void RecvExchangeEach( const K_ITEM *lpItem )
{
	for( int iExchangeIndex=0; MAX_EXCHANGE_ITEM > iExchangeIndex; iExchangeIndex++)
	{
		DefaultItem *pTarget = &item_recv[iExchangeIndex];
		if( !pTarget->item.item_attr.item_no )//后 傍埃捞备唱
		{
			pTarget->item = *lpItem;//酒捞袍 持绊

			int iItemX = 0, iItemY = 0;
			::GetXANDYByExchangeItemIndex(iExchangeIndex,iItemX,iItemY);//初阑锭 沥纺阑 困秦辑
		
			pTarget->x = iItemX;//谅钎 悸泼
			pTarget->y = iItemY;
			SetRect( &pTarget->rect, 
				pTarget->x-15,	pTarget->y-15,
				pTarget->x+15,	pTarget->y+15 );
			break;
		}
	}
}

void RecvExchangeItemDelWhereRecv( K_ITEM &Item )					// 历率俊辑 酒捞袍阑 哗搁 捞率俊辑档 昏力茄促.
{//030108 lsw
	for( int i=0; i<MAX_EXCHANGE_ITEM; i++)
	{
		if( item_recv[i].item.item_attr.item_no )
		{
			if( !memcmp(&item_recv[i].item,&Item,sizeof(K_ITEM)) )
			{
				::memset( &item_recv[i], 0, sizeof(DefaultItem ) ); 
			}
		}
	}
}

//////////////////////////////////////////////////////////////////////////
// 1:1 搬捧 矫胶袍
void SendReqManToMan( char *name )		// 搬捧 脚没
{//搬捧矫 酒捞袍 官操瘤 臼绰促
	if( MapNumber == 30 )
	{
		AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,28));//010215 lsw
		return;
	}

	if( SMenu[MN_MAN_TO_MAN].bActive ) 
	{
		MP3( SN_WARNING ); 
		if( SMenu[MN_MAN_TO_MAN].work )
				AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,29));//010215 lsw
		else	AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,30));//010215 lsw
		return;
	}
	if( IsDead( Hero ) )
	{
		MP3( SN_WARNING ); 
		AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,31));//010215 lsw
		return;
	}
	if( Hero->fight_flag )
	{
		MP3( SN_WARNING ); 
		AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,32));//010215 lsw
		return;
	}
	if( !strcmp( SCharacterData.sCharacterName, name ) )
	{
		MP3( SN_WARNING ); 
		AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,33));//010215 lsw
		return;
	}
	LPCHARACTER target = ExistHe( name );
	if( !target ) 
	{
		MP3( SN_WARNING ); 
		AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,34));//010215 lsw
		return;
	}
	if( IsDead( target ) )
	{
		MP3( SN_WARNING ); 
		AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(3,35));//010215 lsw
		return;
	}

⌨️ 快捷键说明

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