📄 vendorslotcontainer.cpp
字号:
#include "StdAfx.h"
#include ".\vendorslotcontainer.h"
#include ".\VendorSlot.h"
#include ".\Player.h"
#include ".\ItemManager.h"
#include <SCItemSlotContainer.h>
#include <StructInPacket.h>
VendorSlotContainer::VendorSlotContainer(void)
{
Init( MAX_PERSONAL_VENDOR_SLOT_NUM, SI_VENDOR_BUY );
m_ObserverPlayerHash.Initialize( MAX_PERSONAL_VENDOR_SLOT_NUM );
}
VendorSlotContainer::~VendorSlotContainer(void)
{
DestroyVendor();
}
VOID VendorSlotContainer::Init( POSTYPE MaxSlotSize, SLOTIDX SlotIdx )
{
m_nSlotNum = 0;
m_SlotIdx = SlotIdx;
m_nMaxSlotNum = MaxSlotSize;
m_ppSlotArray = new SCSlot*[MaxSlotSize];
for(POSTYPE i=0;i<MaxSlotSize;++i)
m_ppSlotArray[i] = new VendorSlot;
ClearAll();
}
VOID VendorSlotContainer::DestroyVendor()
{
Player * pPlayer = NULL;
m_ObserverPlayerHash.SetFirst();
while( (pPlayer = m_ObserverPlayerHash.GetNext()) != NULL )
{
pPlayer->SetVendorContainer(NULL);
pPlayer->SetBehave(PLAYER_BEHAVE_IDLE_STATE);
}
m_ObserverPlayerHash.RemoveAll();
}
BOOL VendorSlotContainer::CreateVendor( Player * pEstablisher, TCHAR * pszTitle, ESTABLISHER_VENDOR_TOTAL_INFO & IN TotalInfo )
{
//檬扁拳
ClearAll();
ASSERT( m_ObserverPlayerHash.GetDataNum() == 0 );
memcpy( m_pszVendorTitle, pszTitle, sizeof(TCHAR)*MAX_VENDOR_TITLE_LENGTH );
// 干滚 檬扁拳
m_pEstablishedPlayer = pEstablisher;
SCSlotContainer * pInventory = pEstablisher->GetItemManager()->GetItemSlotContainer(SI_INVENTORY);
// 惑痢芒俊 VendorSlot Item 盲框
BOOL rt = TRUE;
VendorSlot slot;
POSTYPE orgPos = 0;
POSTYPE vendorPos = 0;
for( POSTYPE i = 0 ; i < TotalInfo.m_Count ; ++i )
{
orgPos = TotalInfo.m_Slot[i].m_OrgPos;
if( !pInventory->ValidPos(orgPos) ) return FALSE;
if( pInventory->IsEmpty(orgPos) ) return FALSE;
SCItemSlot & rItemSlot = (SCItemSlot & )pInventory->GetSlot(orgPos);
if( rItemSlot.GetNum() < TotalInfo.m_Slot[i].m_Dura ) return FALSE;
vendorPos = TotalInfo.m_Slot[i].m_VendorPos;
if( !ValidPos(vendorPos) || !IsEmpty(vendorPos) ) return FALSE;
slot.Create( rItemSlot, TotalInfo.m_Slot[i].m_Dura, TotalInfo.m_Slot[i].m_Money );
rt = InsertSlot( vendorPos, slot );
ASSERT( rt );
}
return rt;
}
BOOL VendorSlotContainer::ModifySlot( POSTYPE AtPos, VENDOR_ITEMSLOT & IN SlotInfo )
{
SCSlotContainer * pInventory = m_pEstablishedPlayer->GetItemManager()->GetItemSlotContainer(SI_INVENTORY);
POSTYPE orgPos = SlotInfo.m_OrgPos;
if( !pInventory->ValidPos(orgPos) ) return FALSE;
if( pInventory->IsEmpty(orgPos) ) return FALSE;
SCItemSlot & rItemSlot = (SCItemSlot & )pInventory->GetSlot(orgPos);
if( rItemSlot.GetNum() < SlotInfo.m_Dura ) return FALSE;
POSTYPE vendorPos = SlotInfo.m_VendorPos;
if( !ValidPos(vendorPos) ) return FALSE;
VendorSlot slot;
slot.Create( rItemSlot, SlotInfo.m_Dura, SlotInfo.m_Money );
if( IsEmpty(vendorPos) )
{
BOOL rt = InsertSlot( vendorPos, slot );
ASSERT( rt );
}
else
UpdateSlot( vendorPos, slot );
return TRUE;
}
VOID VendorSlotContainer::GetTotalInfo( VENDOR_TOTAL_INFO & OUT VendorTotalInfo )
{
VendorTotalInfo.m_Count = 0;
for( POSTYPE i = 0 ; i < GetMaxSlotNum() ; ++i )
{
if( !IsEmpty(i) )
{
VendorSlot & rSlot = (VendorSlot & )GetSlot(i);
rSlot.CopyOut(VendorTotalInfo.m_Slot[VendorTotalInfo.m_Count]);
++VendorTotalInfo.m_Count;
}
}
}
BOOL VendorSlotContainer::IsLocked( POSTYPE AtPos )
{
ASSERT( AtPos < GetMaxSlotNum() );
return ((VendorSlot*)(m_ppSlotArray[AtPos]))->IsLocked();
}
VOID VendorSlotContainer::SetLock( POSTYPE AtPos, BOOL val )
{
ASSERT( AtPos < GetMaxSlotNum() );
((VendorSlot*)(m_ppSlotArray[AtPos]))->SetLock(val);
}
VOID VendorSlotContainer::AddObserver( Player * pPlayer )
{
ASSERT( NULL == m_ObserverPlayerHash.GetData( pPlayer->GetObjectKey() ) );
m_ObserverPlayerHash.Add( pPlayer, pPlayer->GetObjectKey() );
}
VOID VendorSlotContainer::RemoveObserver( Player * pPlayer )
{
ASSERT( NULL != m_ObserverPlayerHash.GetData( pPlayer->GetObjectKey() ) );
m_ObserverPlayerHash.Remove( pPlayer->GetObjectKey() );
}
BOOL VendorSlotContainer::IsEmpty( POSTYPE AtPos )
{
return ( m_ppSlotArray[AtPos]->GetSerial() == 0 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -