📄 exchangemgr.cpp
字号:
// 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 + -