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