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

📄 vendorslotcontainer.h

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 H
字号:
#pragma once
//=============================================================================================================================
/// VendorSlot class
/**
	@author	Kim Min Wook < taiyo@webzen.com >
	@since	2004. 12. 29
	@remark
		- VendorSlot阑 炼累窍绰 牧抛捞呈 努贰胶
	@note
		- 
	@history 
		- 
*/
//=============================================================================================================================
#include <scslotcontainer.h>
#include <SolarHashTable.h>

struct ESTABLISHER_VENDOR_TOTAL_INFO;

class VendorSlotContainer : public SCSlotContainer
{
public:
	VendorSlotContainer(void);
	virtual ~VendorSlotContainer(void);

	BOOL				CreateVendor( Player * pEstablisher, TCHAR * pszTitle, ESTABLISHER_VENDOR_TOTAL_INFO & IN TotalInfo );
	VOID				DestroyVendor();

	BOOL				ModifySlot( POSTYPE AtPos, VENDOR_ITEMSLOT & IN SlotInfo );

	virtual BOOL		IsLocked( POSTYPE AtPos );
	virtual VOID		SetLock( POSTYPE AtPos, BOOL val );

	Player *			GetEstablisher() { return m_pEstablishedPlayer;	}

	VOID				AddObserver( Player * pPlayer );
	VOID				RemoveObserver( Player * pPlayer );
	VOID				GetTotalInfo( VENDOR_TOTAL_INFO & OUT VendorTotalInfo );
	TCHAR *				GetTitle() { return m_pszVendorTitle;	}

	virtual BOOL		IsEmpty( POSTYPE AtPos );
	template< class ObserverOperator >
	VOID				ForeachObserver( ObserverOperator & Opr );
private:
	virtual VOID		Init( POSTYPE MaxSlotSize, SLOTIDX SlotIdx );

private:
	TCHAR				m_pszVendorTitle[MAX_VENDOR_TITLE_LENGTH];
	Player *			m_pEstablishedPlayer;
	util::SolarHashTable<Player *> m_ObserverPlayerHash;
};

template< class ObserverOperator >
VOID VendorSlotContainer::ForeachObserver( ObserverOperator & Opr )
{
	Player * pObserver = NULL;
	m_ObserverPlayerHash.SetFirst();
	while( (pObserver=m_ObserverPlayerHash.GetNext()) != NULL )
	{
		Opr( pObserver );
	}
}

template <class PACKET_TYPE>
class Send_POS_BRD
{
	POSTYPE m_VendorPos;
public:
	Send_POS_BRD(POSTYPE VendorPos):m_VendorPos(VendorPos){}
	~Send_POS_BRD(){}

	VOID operator()( Player * pObserver )
	{
		PACKET_TYPE bmsg;
		bmsg.m_VendorPos = m_VendorPos;
		pObserver->SendPacket( &bmsg, sizeof(bmsg) );
	}
};

template <class PACKET_TYPE>
class Send_PACKET_BRD
{
	PACKET_TYPE m_bmsg;
public:
	Send_PACKET_BRD(PACKET_TYPE & bmsg):m_bmsg(bmsg){}
	~Send_PACKET_BRD(){}

	VOID operator()( Player * pObserver )
	{
		pObserver->SendPacket( &m_bmsg, sizeof(m_bmsg) );
	}
};

⌨️ 快捷键说明

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