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

📄 ggoods.h

📁 五行MMORPG引擎系统V1.0
💻 H
字号:
//GGoods.h
/*/////////////////////////////////////////////////////////////////
物品管理
	因为不同类型物品,拥有不一样的属性;而同类物品,则拥有类似的属性,
	物品基类
		物品 tagGGoods
	物品超类
		元素			tagGGElement
		材料			tagGGMaterial
		收集			tagGGCollection
		消耗物品		tagGGConsume
		道具			tagGGProperty
		任务物品		tagGGTask
		装备			tagGGEquipment

		技能			tagGSkill


	物品层次类别
		GGK_NORMAL,		//普通型
		GGK_GOOD,		//优良
		GGK_EXCELLENT,	//卓越
		GGK_RARITY,		//珍品
		GGK_NOSUCH,		//极品


   李亦
	liease@163.com 4040719
	2006-7-13
/*/////////////////////////////////////////////////////////////////
#ifndef _RPG__GGOODS_H_
#define _RPG__GGOODS_H_


#ifndef _RPG__RPGDEFINE_H_
#include "rpg/RPGDefine.h"
#endif

#ifndef _RPG__GOBJECT_H_
#include "GObject.h"
#endif

#ifndef _RPG__GGOODSDEFINE_H_
#include "GGoodsDefine.h"
#endif

#ifndef _RPGSETTING_H_
#include "rpg/RPGSetting.h"
#endif

#ifndef _RPG__GEFFICACY_H_
#include "GEfficacy.h"
#endif

namespace RPG
{
class GEfficacy;
class GCharacter;
class	GNpc;
class GTaskBase;
class GGoodsArray;

/////////////////////////////////////////////////////////////////
//游戏物品实例
typedef struct tagGGoods
{
	U32	dwGoodsId;	//物品代号
	U32	dwLevel;		//级别
	U32	dwKind;		//层次
	//U16	wGoodsType;	//类型
	//U16	wSubType;	//子类型

	S32	dwWear;		//当前耐久度

	//S32	wLife;		//当前生命值

}GGOODS;




//////////////////////////////////////////////////////////
//属性存取定义宏
#define DELCARE_GOODS_PRY(Name,pre,type)\
inline type Get##Name()\
{\
	AssertWarn(m_pGoodsDefine,"先物品定义为NULL,GoodsDefine");\
	if(m_pGoodsDefine==NULL)\
		return 0;\
	return m_pGoodsDefine->##pre##Name;\
}

#define DELCARE_GOODS_PRY_IN(Name,pre,type)\
inline type Get##Name()\
{\
	return m_dataGoods.##pre##Name;\
}


#define DELCARE_GOODS_U32(Name)	DELCARE_GOODS_PRY(Name,dw,U32)
#define DELCARE_GOODS_S32(Name)	DELCARE_GOODS_PRY(Name,n,S32)
#define DELCARE_GOODS_STE(Name)	DELCARE_GOODS_PRY(Name,p,StringTableEntry)
#define DELCARE_GOODS_STE2(Name)	DELCARE_GOODS_PRY(Name,s,StringTableEntry)

#define DELCARE_GOODS_U32_IN(Name)	DELCARE_GOODS_PRY_IN(Name,dw,U32)
#define DELCARE_GOODS_S32_IN(Name)	DELCARE_GOODS_PRY_IN(Name,n,S32)
#define DELCARE_GOODS_STE_IN(Name)	DELCARE_GOODS_PRY_IN(Name,p,StringTableEntry)



//////////////////////////////////////////////////////////
//属性存取定义宏
#define CONSOLEMETHOD_GOODS_PRY(Name,fName,type)\
ConsoleMethod(GGoods,Get##Name,type, 2, 2, "Object."##fName##"();")\
{\
	argc;argv;\
	return (type)object->Get##Name();\
}


#define CONSOLEMETHOD_GOODS_U32(Name,fName)	CONSOLEMETHOD_GOODS_PRY(Name,fName,S32)
#define CONSOLEMETHOD_GOODS_S32(Name,fName)	CONSOLEMETHOD_GOODS_PRY(Name,fName,S32)
#define CONSOLEMETHOD_GOODS_STE(Name,fName)	CONSOLEMETHOD_GOODS_PRY(Name,fName,const char*)



/////////////////////////////////////////////////////////////////
/// 物品封装
class GGoods: public GObject
{
	typedef  GObject Parent;
	friend class RPGDatabase;
protected:
	GGOODS			m_dataGoods;
	GGOODSDEFINE	*m_pGoodsDefine;
	GEfficacy*		m_pGEfficacy;	//物品功效
	GEfficacy*		m_pRequire;		//物品要求
	GNpc*				m_pGoodsFromNpc;
	GNpc*				m_pGoodsToNpc;	
public:
	//构造/析构函数
	GGoods();
	~GGoods();

public:
	bool AttachGoodsDefine();

	bool SetGoods(U32 nGoodsCode, EGGoodsKind kind, U32 nLevel,GEfficacy* pEfficacy);
	bool SetGoods(const GGOODSREF& ref);
	bool IsTheSameGoods(GGoods* pGoods);
	bool IsTheSameGoods(U32 nGoodsCode, EGGoodsKind kind, U32 nLevel);
	bool IsTheSameGoods(const GGOODSREF& ref);//const GEFFICACY& effData,GNpc* pNpc=NULL,GTaskBase* pTask=NULL);
	//bool IsTheSameGoods(const GEFFICACY& effData,GNpc* pNpc=NULL,GTaskBase* pTask=NULL);

	CSTR	GetFullName();
	virtual bool OnGoodsApply(GGoodsArray* pContainer);

public:
	GGOODSDEFINE*	GetGoodsDefine();
	GEfficacy*		GetEfficacy();
	GEfficacy*		GetRequire();

	CSTR	GetEfficacyText(GCharacter* pChar);
	CSTR	GetRequireText(GCharacter* pChar);


	BOOL IsGoodsType(EGGoodsTypes type);
	BOOL IsSubType(U32 type);
	BOOL IsType(EGGoodsTypes type,U32 sub);

	//StringTableEntry GetGoodsName();
	//StringTableEntry GetDesc();
	//StringTableEntry GetIconLabel();
	//U32 GetGoodsType();
	//U32 GetSubType();

	StringTableEntry GetKindName();
	StringTableEntry GetInstName();

	DELCARE_GOODS_STE(GoodsName);
	DELCARE_GOODS_STE(Desc);
	DELCARE_GOODS_STE2(Unit);
	DELCARE_GOODS_STE(IconLabel);
	DELCARE_GOODS_STE(FileTitle);

	DELCARE_GOODS_U32(GoodsType);
	DELCARE_GOODS_U32(SubType);

	DELCARE_GOODS_U32_IN(Level);
	DELCARE_GOODS_U32(Mass);
	DELCARE_GOODS_U32(Kind);

	inline GNpc* GetGoodsToNpc	( )const{return m_pGoodsToNpc;}
	inline GNpc* GetGoodsFromNpc()const{return m_pGoodsFromNpc;}
	inline void SetGoodsToNpc	(GNpc* pNpc){m_pGoodsToNpc = pNpc;}
	inline void SetGoodsFromNpc(GNpc* pNpc){m_pGoodsFromNpc = pNpc;}
	inline BOOL IsGoodsTo(GNpc* pChar)		const {return pChar != NULL && m_pGoodsToNpc		== pChar;}
	inline BOOL IsGoodsFrom(GNpc* pChar)	const {return pChar != NULL && m_pGoodsFromNpc	== pChar;}
public:
#ifdef TGE_RPGCLIENT
	static void ToggleGoods(GGoods* pGoods,BOOL bAssignName=TRUE);
#endif

	static void initPersistFields();
	//static void consoleInit();

	DECLARE_CONOBJECT(GGoods);
};//class GGoods

//////////////////////////////////////////////////////////////////////////////
//
extern GGoods*	g_pGGoods;




//////////////////////////////////////////////////////////////////////////////
class ToggleGoodsHandle
{
public:
	ToggleGoodsHandle(GGoods* pGoods,BOOL bName=FALSE){GGoods::ToggleGoods(pGoods,bName);}
	~ToggleGoodsHandle(){GGoods::ToggleGoods(NULL);}
	inline GGoods* operator->(){return g_pGGoods;}
};




//////////////////////////////////////////////////////////////////////////////
inline GGOODSDEFINE*	GGoods::GetGoodsDefine()
{
	return m_pGoodsDefine;
}
inline GEfficacy*	GGoods::GetEfficacy()
{
	return m_pGEfficacy;
}
inline GEfficacy*	GGoods::GetRequire()
{
	return m_pRequire;
}

inline CSTR	GGoods::GetEfficacyText(GCharacter* pChar)
{
	if(m_pGEfficacy)
		return m_pGEfficacy->GetEfficacyText(pChar);
	return "";
}
inline CSTR	GGoods::GetRequireText(GCharacter* pChar)
{
	if(m_pRequire)
		return m_pRequire->GetRequireText(pChar);
	return "";
}




inline BOOL GGoods::IsGoodsType(EGGoodsTypes type)		
{
	AssertWarn(m_pGoodsDefine,"先物品定义为NULL,GoodsDefine");
	return m_pGoodsDefine->dwGoodsType == type;
}

inline BOOL GGoods::IsSubType(U32 type)		
{
	AssertWarn(m_pGoodsDefine,"先物品定义为NULL,GoodsDefine");
	return m_pGoodsDefine->dwSubType == type;
}


inline StringTableEntry GGoods::GetKindName()		
{
	AssertWarn(g_pRPGSetting,"先创建RPGSetting实例");
	return g_pRPGSetting->GetGoodsKindName(GetKind());
}


inline BOOL GGoods::IsType(EGGoodsTypes type,U32 sub)	
{
	AssertWarn(m_pGoodsDefine,"先物品定义为NULL,GoodsDefine");
	if(type == GGT_EQUIP)
	{
		if(sub == EQUIP_LACE2)	
			sub = EQUIP_LACE;
		else if(sub == EQUIP_RING2)
			sub = EQUIP_RING;
	}
	return m_pGoodsDefine->dwGoodsType == type && m_pGoodsDefine->dwSubType == sub;
}


inline StringTableEntry GGoods::GetInstName()
{
	AssertWarn(m_pGoodsDefine && g_pRPGSetting,"先物品定义为NULL,GoodsDefine");
	StringTableEntry sSubLabel;
	if(m_pGoodsDefine->dwGoodsType == GGT_EQUIP)
		sSubLabel = g_pRPGSetting->GetEquipTypeLabel(m_pGoodsDefine->dwSubType);
	else
		sSubLabel = "";

	return StringTable->insert( avar("%s_%s",sSubLabel,	m_pGoodsDefine->pFileTitle) );
}






};//namespace RPG
#endif //_GGOODS_H_

⌨️ 快捷键说明

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