Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
ExchangeRoom.cpp
Package: 200807242224_45z.rar [view]
Upload User: hnnxmgz
Upload Date: 2009-02-28
Package Size: 45474k
Code Size: 11k
Category:
Other systems
Development Platform:
Visual C++
- #include "stdafx.h"
- #include "ExchangeRoom.h"
- #include "ExchangeManager.h"
- #include "mapdbmsgparser.h"
- #include "Player.h"
- #include "ItemManager.h"
- CExchangeRoom::CExchangeRoom()
- {
- }
- CExchangeRoom::~CExchangeRoom()
- {
- }
- void CExchangeRoom::Init( CPlayer* pPlayer1, CPlayer* pPlayer2 )
- {
- sEXCHANGECONTAINER ExchangeContainer;
- m_ExchangeData[0].pPlayer = pPlayer1;
- m_ExchangeData[0].bExchange = FALSE;
- m_ExchangeData[0].bLock = FALSE;
- m_ExchangeData[0].dwMoney = 0;
- m_ExchangeData[0].nAddItemNum = 0;
- ZeroMemory( m_ExchangeData[0].ItemInfo, sizeof(ITEMBASE)*MAX_EXCHANGEITEM );
- m_ExchangeData[1].pPlayer = pPlayer2;
- m_ExchangeData[1].bExchange = FALSE;
- m_ExchangeData[1].bLock = FALSE;
- m_ExchangeData[1].dwMoney = 0;
- m_ExchangeData[1].nAddItemNum = 0;
- ZeroMemory( m_ExchangeData[1].ItemInfo, sizeof(ITEMBASE)*MAX_EXCHANGEITEM );
- ExchangeContainer.pRoom = this;
- ExchangeContainer.nMyIndex = 0;
- ExchangeContainer.pOpPlayer = pPlayer2;
- pPlayer1->SetExchangeContainer( &ExchangeContainer );
- ExchangeContainer.nMyIndex = 1;
- ExchangeContainer.pOpPlayer = pPlayer1;
- pPlayer2->SetExchangeContainer( &ExchangeContainer );
- m_nExchangeState = EXCS_WAITING;
- }
- void CExchangeRoom::Exit()
- {
- //item lock 钱扁
- CItemSlot* pItemSlot = NULL;
- POSTYPE ItemPos;
- for( int j = 0 ; j < 2 ; ++j )
- for( int i = 0 ; i < m_ExchangeData[j].nAddItemNum ; ++i )
- {
- ItemPos = m_ExchangeData[j].ItemInfo[i].Position;
- pItemSlot = m_ExchangeData[j].pPlayer->GetSlot( ItemPos );
- if( pItemSlot )
- pItemSlot->SetLock( ItemPos, FALSE );
- }
- //player data 檬扁拳
- sEXCHANGECONTAINER ExchangeContainer; //檬扁拳窃
- if( m_ExchangeData[0].pPlayer )
- m_ExchangeData[0].pPlayer->SetExchangeContainer( &ExchangeContainer );
- if( m_ExchangeData[1].pPlayer )
- m_ExchangeData[1].pPlayer->SetExchangeContainer( &ExchangeContainer );
- //
- }
- void CExchangeRoom::Lock( int nIndex, BOOL bLock )
- {
- if( bLock )
- m_ExchangeData[nIndex].bLock = TRUE;
- else
- {
- m_ExchangeData[0].bLock = FALSE;
- m_ExchangeData[1].bLock = FALSE;
- m_ExchangeData[0].bExchange = FALSE;
- m_ExchangeData[1].bExchange = FALSE;
- }
- }
- BOOL CExchangeRoom::IsAllLock()
- {
- if( m_ExchangeData[0].bLock && m_ExchangeData[1].bLock )
- return TRUE;
- return FALSE;
- }
- void CExchangeRoom::SetExchange( int nIndex )
- {
- m_ExchangeData[nIndex].bExchange = TRUE;
- }
- BOOL CExchangeRoom::IsAllExchange()
- {
- if( m_ExchangeData[0].bExchange && m_ExchangeData[1].bExchange )
- return TRUE;
- return FALSE;
- }
- BOOL CExchangeRoom::AddItem( int nPlayerIndex, ITEMBASE* pItemInfo )
- {
- if( IsLocked( nPlayerIndex ) ) return FALSE;
- if( m_ExchangeData[nPlayerIndex].nAddItemNum >= MAX_EXCHANGEITEM )
- return FALSE;
- if( pItemInfo->QuickPosition != 0 ) return FALSE;
- //辑滚俊档 酒捞袍 LOCK
- CInventorySlot* pItemSlot = (CInventorySlot*)m_ExchangeData[nPlayerIndex].pPlayer->GetSlot( eItemTable_Inventory );
- if( pItemSlot )
- {
- if( GetItemKind( pItemInfo->wIconIdx ) == eYOUNGYAK_ITEM )
- {
- if( pItemSlot->CheckQPosForItemIdx( pItemInfo->wIconIdx ) == FALSE )
- return FALSE;
- }
- else
- {
- if( pItemSlot->GetItemInfoAbs( pItemInfo->Position )->QuickPosition != 0 )
- return FALSE;
- }
- if( pItemSlot->IsLock( pItemInfo->Position ) ) return FALSE;
- pItemSlot->SetLock( pItemInfo->Position, TRUE );
- }
- //
- m_ExchangeData[nPlayerIndex].ItemInfo[m_ExchangeData[nPlayerIndex].nAddItemNum] = *pItemInfo;
- ++m_ExchangeData[nPlayerIndex].nAddItemNum;
- return TRUE;
- }
- BOOL CExchangeRoom::DelItem( int nPlayerIndex, POSTYPE pos )
- {
- ASSERT( pos >=0 && pos < m_ExchangeData[nPlayerIndex].nAddItemNum );
- if( IsLocked( nPlayerIndex ) ) return FALSE;
- if( m_ExchangeData[nPlayerIndex].nAddItemNum <= 0 )
- return FALSE;
- //辑滚俊档 酒捞袍 UNLOCK
- POSTYPE ItemAbsPos = m_ExchangeData[nPlayerIndex].ItemInfo[pos].Position;
- CItemSlot* pItemSlot = m_ExchangeData[nPlayerIndex].pPlayer->GetSlot( ItemAbsPos );
- if( pItemSlot )
- pItemSlot->SetLock( ItemAbsPos, FALSE );
- //
- --m_ExchangeData[nPlayerIndex].nAddItemNum;
- for( int i = pos ; i < m_ExchangeData[nPlayerIndex].nAddItemNum ; ++i )
- {
- m_ExchangeData[nPlayerIndex].ItemInfo[i] = m_ExchangeData[nPlayerIndex].ItemInfo[i+1];
- }
- return TRUE;
- }
- DWORD CExchangeRoom::InputMoney( int nPlayerIndex, DWORD dwMoney )
- {
- if( dwMoney > m_ExchangeData[nPlayerIndex].pPlayer->GetMoney() )
- dwMoney = m_ExchangeData[nPlayerIndex].pPlayer->GetMoney();
- m_ExchangeData[nPlayerIndex].dwMoney = dwMoney;
- return dwMoney;
- }
- int CExchangeRoom::DoExchange()
- {
- CInventorySlot* pInventory[2];
- pInventory[0] = (CInventorySlot*)m_ExchangeData[0].pPlayer->GetSlot( eItemTable_Inventory );
- pInventory[1] = (CInventorySlot*)m_ExchangeData[1].pPlayer->GetSlot( eItemTable_Inventory );
- if( pInventory[0] == NULL || pInventory[1] == NULL )
- return eEE_ERROR;
- //后磊府眉农 //瘤况龙 磊府档 绊妨茄促?(ok)
- WORD EmptySellPos[2][MAX_EXCHANGEITEM];
- WORD sOut;
- if( m_ExchangeData[1].nAddItemNum > m_ExchangeData[0].nAddItemNum )
- {
- sOut = pInventory[0]->GetEmptyCell( EmptySellPos[0], m_ExchangeData[1].nAddItemNum - m_ExchangeData[0].nAddItemNum );
- if( sOut != m_ExchangeData[1].nAddItemNum - m_ExchangeData[0].nAddItemNum )
- return eEE_NOTENOUGHSPACE;
- }
- if( m_ExchangeData[0].nAddItemNum > m_ExchangeData[1].nAddItemNum )
- {
- sOut = pInventory[1]->GetEmptyCell( EmptySellPos[1], m_ExchangeData[0].nAddItemNum - m_ExchangeData[1].nAddItemNum );
- if( sOut != m_ExchangeData[0].nAddItemNum - m_ExchangeData[1].nAddItemNum )
- return eEE_NOTENOUGHSPACE;
- }
- //捣眉农
- if( m_ExchangeData[0].dwMoney > m_ExchangeData[0].pPlayer->GetMoney() )
- return eEE_NOTENOUGHMONEY;
- if( m_ExchangeData[1].dwMoney > m_ExchangeData[1].pPlayer->GetMoney() )
- return eEE_NOTENOUGHMONEY;
- if( m_ExchangeData[1].dwMoney + m_ExchangeData[0].pPlayer->GetMoney() > MAX_INVENTORY_MONEY )
- return eEE_MAXMONEY;
- if( m_ExchangeData[0].dwMoney + m_ExchangeData[1].pPlayer->GetMoney() > MAX_INVENTORY_MONEY )
- return eEE_MAXMONEY;
- ///////////////////////////////////////////////
- //酒捞袍 八荤 内靛 持磊.. 力磊府俊 促 甸绢乐唱? 抛胶飘 鞘夸.
- int i, j;
- for( j = 0 ; j < 2 ; ++ j )
- {
- for( i = 0 ; i < m_ExchangeData[j].nAddItemNum ; ++i )
- {
- const ITEMBASE* pItemBase = pInventory[j]->GetItemInfoAbs( m_ExchangeData[j].ItemInfo[i].Position );
- if( pItemBase->dwDBIdx != m_ExchangeData[j].ItemInfo[i].dwDBIdx ||
- pItemBase->wIconIdx != m_ExchangeData[j].ItemInfo[i].wIconIdx ||
- pItemBase->Durability != m_ExchangeData[j].ItemInfo[i].Durability ||
- pItemBase->Position != m_ExchangeData[j].ItemInfo[i].Position )
- return eEE_ERROR; //角力 牢亥配府客 背券芒狼 沥焊啊 促福促.
- if( ITEMMGR->IsDupItem(pItemBase->wIconIdx) )
- if( pItemBase->Durability > 5/*MAX_DURABILITY*/ )
- return eEE_ERROR;
- }
- }
- //夯惑怕肺 汗备啊 啊瓷茄啊?
- /////////////
- //EXCHANGE!!!
- for( j = 0 ; j < 2 ; ++ j )
- {
- for( i = 0 ; i < m_ExchangeData[j].nAddItemNum ; ++i )
- {
- ITEMBASE ItemBase;
- pInventory[j]->DeleteItemAbs( NULL, m_ExchangeData[j].ItemInfo[i].Position, &ItemBase, SS_LOCKOMIT ); //吝夸! 眉农.
- //昏力 皋技瘤.. //葛酒辑 茄波锅俊 力芭窍磊.
- MSG_EXCHANGE_REMOVEITEM RemoveMsg;
- RemoveMsg.Category = MP_EXCHANGE;
- RemoveMsg.Protocol = MP_EXCHANGE_REMOVE;
- RemoveMsg.wAbsPosition = m_ExchangeData[j].ItemInfo[i].Position;
- m_ExchangeData[j].pPlayer->SendMsg( &RemoveMsg, sizeof( RemoveMsg ) );
- }
- }
- /*
- sOut = pInventory[0]->GetEmptyCell( EmptySellPos[0], m_ExchangeData[1].nAddItemNum );
- if( sOut != m_ExchangeData[1].nAddItemNum )
- return FALSE;
- sOut = pInventory[1]->GetEmptyCell( EmptySellPos[1], m_ExchangeData[0].nAddItemNum );
- if( sOut != m_ExchangeData[0].nAddItemNum )
- return FALSE;
- */
- for( j = 0 ; j < 2 ; ++ j )
- {
- for( i = 0 ; i < m_ExchangeData[j].nAddItemNum ; ++i )
- {
- POSTYPE EmptyPos;
- if( pInventory[!j]->GetEmptyCell( &EmptyPos ) == 0 ) //后傍埃 绝阑锭 俊矾眉农窍扁
- {
- ASSERT(0);
- continue;
- }
- ItemUpdateToDB( m_ExchangeData[!j].pPlayer->GetID(), m_ExchangeData[j].ItemInfo[i].dwDBIdx,
- m_ExchangeData[j].ItemInfo[i].wIconIdx, m_ExchangeData[j].ItemInfo[i].Durability,
- EmptyPos, 0 );
- m_ExchangeData[j].ItemInfo[i].Position = EmptyPos;
- //itemoption
- if( ITEMMGR->IsOptionItem( m_ExchangeData[j].ItemInfo[i].wIconIdx, m_ExchangeData[j].ItemInfo[i].Durability) )
- {
- m_ExchangeData[!j].pPlayer->AddItemOption(
- m_ExchangeData[j].pPlayer->GetItemOption( m_ExchangeData[j].ItemInfo[i].Durability ) );
- m_ExchangeData[j].pPlayer->RemoveItemOption( m_ExchangeData[j].ItemInfo[i].Durability );
- // ItemOptionUpdateToDB( m_ExchangeData[j].ItemInfo[i].Durability, m_ExchangeData[!j].pPlayer->GetID() );
- }
- /////
- int rt = pInventory[!j]->InsertItemAbs( NULL, EmptyPos, &m_ExchangeData[j].ItemInfo[i], SS_LOCKOMIT ); //Itembase俊辑 position父 官诧促.
- ASSERT( rt == EI_TRUE );
- //眠啊 皋技瘤... //葛酒辑 茄锅俊 焊郴绰 吧肺 背眉窍磊. confirm
- MSG_ITEM InsertMsg;
- InsertMsg.Category = MP_EXCHANGE;
- InsertMsg.Protocol = MP_EXCHANGE_INSERT;
- InsertMsg.ItemInfo = m_ExchangeData[j].ItemInfo[i];
- m_ExchangeData[!j].pPlayer->SendMsg( &InsertMsg, sizeof( MSG_ITEM ) );
- LogItemMoney(m_ExchangeData[j].pPlayer->GetID(), m_ExchangeData[j].pPlayer->GetObjectName(),
- m_ExchangeData[1-j].pPlayer->GetID(), m_ExchangeData[1-j].pPlayer->GetObjectName(),
- eLog_Exchange, m_ExchangeData[j].pPlayer->GetMoney(), m_ExchangeData[1-j].pPlayer->GetMoney(),
- 0, m_ExchangeData[j].ItemInfo[i].wIconIdx, m_ExchangeData[j].ItemInfo[i].dwDBIdx, m_ExchangeData[j].ItemInfo[i].Position, 0, m_ExchangeData[j].ItemInfo[i].Durability,
- m_ExchangeData[j].pPlayer->GetPlayerExpPoint());
- }
- }
- DWORD dwMoney = 0;
- MSG_DWORD MoneyMsg;
- MoneyMsg.Category = MP_EXCHANGE;
- MoneyMsg.Protocol = MP_EXCHANGE_SETMONEY;
- int FromNum =0;
- for( j = 0 ; j < 2 ; ++j )
- {
- if( m_ExchangeData[j].dwMoney > m_ExchangeData[!j].dwMoney ) //郴啊 扒捣捞 歹 腹促.
- {
- dwMoney = m_ExchangeData[j].dwMoney - m_ExchangeData[!j].dwMoney;
- m_ExchangeData[j].pPlayer->SetMoney( dwMoney, MONEY_SUBTRACTION, 0, eItemTable_Inventory, eMoneyLog_LoseExchange, m_ExchangeData[1-j].pPlayer->GetID() );
- FromNum = j;
- }
- else if( m_ExchangeData[j].dwMoney < m_ExchangeData[!j].dwMoney )
- {
- dwMoney = m_ExchangeData[!j].dwMoney - m_ExchangeData[j].dwMoney;
- m_ExchangeData[j].pPlayer->SetMoney( dwMoney, MONEY_ADDITION, 0, eItemTable_Inventory, eMoneyLog_GetExchange, m_ExchangeData[1-j].pPlayer->GetID() );
- }
- else
- {
- continue;
- }
- // MoneyMsg.dwData = m_ExchangeData[j].pPlayer->GetMoney();
- // m_ExchangeData[j].pPlayer->SendMsg( &MoneyMsg, sizeof( MoneyMsg ) );
- }
- LogItemMoney(m_ExchangeData[FromNum].pPlayer->GetID(), m_ExchangeData[FromNum].pPlayer->GetObjectName(),
- m_ExchangeData[!FromNum].pPlayer->GetID(), m_ExchangeData[!FromNum].pPlayer->GetObjectName(),
- eLog_Exchange, m_ExchangeData[FromNum].pPlayer->GetMoney(), m_ExchangeData[!FromNum].pPlayer->GetMoney(),
- dwMoney, 0, 0, 0, 0, 0,
- m_ExchangeData[FromNum].pPlayer->GetPlayerExpPoint());
- return eEE_OK;
- }