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

📄 ggoods.cc

📁 五行MMORPG引擎系统V1.0
💻 CC
字号:
//GGoods.cc
/*/////////////////////////////////////////////////////////////////
物品管理
	因为不同类型物品,拥有不一样的属性;而同类物品,则拥有类似的属性,
	物品基类
		物品 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-30
/*/////////////////////////////////////////////////////////////////

#include "rpg/gobjects/GGoods.h"
#include "rpg/RPGDataman.h"
#include "console/console.h"
//#include "console/simBase.h"
#include "rpg/gobjects/GNpc.h"
#include "rpg/gobjects/GTask.h"


namespace RPG
{

GGoods*	g_pGGoods = NULL;

IMPLEMENT_CONOBJECT(GGoods);


/////////////////////////////////////////////////////////////////
// class GGoods 构造函数 /析构函数
GGoods::GGoods()
{
	m_dwRPGTypes	|= GOT_GOODS;
	m_pGoodsDefine = NULL;
	m_pRequire		= NULL;
	m_pGEfficacy	= NULL;
	m_pGoodsFromNpc	= NULL;
	m_pGoodsToNpc		= NULL;
}
GGoods::~GGoods()
{
}


#ifdef TGE_RPGCLIENT
void GGoods::ToggleGoods(GGoods* pGoods,BOOL bAssignName)
{
	if(g_pGGoods != pGoods)
	{
		if(pGoods && bAssignName)
			pGoods->assignSoleName(SCRIPT_GGoods);
		g_pGGoods = pGoods;
	}
}
#endif



void GGoods::initPersistFields()
{
	Parent::initPersistFields();
	addField("goodsFromNpc", TypeGNpcPtr, Offset(m_pGoodsFromNpc, GGoods));
	addField("goodsToNpc",	TypeGNpcPtr,  Offset(m_pGoodsToNpc, GGoods));
}

//void GGoods::consoleInit()
//{
//}
bool GGoods::AttachGoodsDefine()
{
	AssertWarn(g_pRPGDataMan,"先创建RPGDataMan实例");
	if(g_pRPGDataMan == NULL)
		return false;

	m_pGoodsDefine = g_pRPGDataMan->GetGoodsDefine(m_dataGoods.dwGoodsId);
	return m_pGoodsDefine != NULL;
}


bool GGoods::SetGoods(U32 nGoodsCode, EGGoodsKind kind, U32 nLevel,GEfficacy* pEfficacy)
{
	m_dataGoods.dwGoodsId	= nGoodsCode;
	m_dataGoods.dwKind		= kind;
	m_dataGoods.dwLevel		= nLevel;
	m_dataGoods.dwWear		= 255;
	m_pGEfficacy				= pEfficacy;

	return AttachGoodsDefine();
}

bool GGoods::SetGoods(const GGOODSREF& ref)
{
	if(!ref.pData)
		return false;

	m_dataGoods.dwGoodsId	= ref.pData->nGoodsCode;
	m_dataGoods.dwKind		= (EGGoodsKind)ref.pData->nGoodsKind;
	m_dataGoods.dwLevel		= ref.pData->nGoodsLevel;
	m_dataGoods.dwWear		= 255;
	m_pGEfficacy				= ref.pEfficacy;
	//pEfficacy = g_pRPGDataMan->GetEfficacy(ref.pData->nGoodsEffID);


	return AttachGoodsDefine();
}


bool GGoods::IsTheSameGoods(GGoods* pGoods)
{
	if(m_pGoodsDefine == NULL || !pGoods)
		return false;

	GGOODSDEFINE* pDefine = pGoods->GetGoodsDefine();
	if(pDefine == NULL)
		return false;

	return m_pGoodsDefine->dwID == pDefine->dwID;
}


bool GGoods::IsTheSameGoods(U32 nGoodsCode, EGGoodsKind kind, U32 nLevel)
{
	if(m_pGoodsDefine == NULL)
		return false;
	BOOL bSame = (m_pGoodsDefine->dwID == nGoodsCode && m_dataGoods.dwKind == kind);
	if(nLevel == -1)
		return bSame;
	return bSame && m_dataGoods.dwLevel == nLevel;
}


//bool GGoods::IsTheSameGoods(const GEFFICACY& ref,GNpc* pNpc,GTaskBase* pTask)
bool GGoods::IsTheSameGoods(const GGOODSREF& ref)//const GEFFICACY& ref,GNpc* pNpc,GTaskBase* pTask)
{
	BOOL	bSame;
	GNpc	*pGoodsTo,
			*pGoodsFrom;

	if(m_pGoodsDefine == NULL || !ref.pData)
		return false;

	bSame = IsTheSameGoods(ref.pData->nGoodsCode,
					(EGGoodsKind) ref.pData->nGoodsKind,
					ref.pData->nGoodsLevel);
	if(!bSame)
		return false;

	ref.GetFromToNpc(m_pGoodsDefine->dwGoodsType, pGoodsFrom,pGoodsTo);
	//GTaskBase::GetFromToNpc(ref.pTask,
	//					ref.pNpc,
	//					m_pGoodsDefine->dwGoodsType,
	//					pGoodsFrom,
	//					pGoodsTo,
	//					!ref.bCreateGoods);

	return m_pGoodsFromNpc == pGoodsFrom && m_pGoodsToNpc == m_pGoodsToNpc;
}



CSTR	GGoods::GetFullName()
{
	if(!m_pGoodsFromNpc && !m_pGoodsToNpc)
	{
		return GetGoodsName();
	}

	char* szBuf = Con::getReturnBuffer(128);
	
	if(m_pGoodsFromNpc && m_pGoodsToNpc)
	{
		dSprintf(szBuf,128,"%s给%s的%s",
					m_pGoodsFromNpc->GetCharName(),
					m_pGoodsToNpc->GetCharName(),
					GetGoodsName());
	}
	else if(m_pGoodsFromNpc)
	{
		dSprintf(szBuf,128,"%s的%s",
					m_pGoodsFromNpc->GetCharName(),
					GetGoodsName());
	}
	else if(m_pGoodsToNpc)
	{
		dSprintf(szBuf,128,"给%s的%s",
					m_pGoodsFromNpc->GetCharName(),
					GetGoodsName());
	}
	return szBuf;
}


bool GGoods::OnGoodsApply(GGoodsArray* pContainer)
{
	if(!dynamic_cast<GPlayer*>(g_pGPlayer))
		return false;

	CSTR	sTag = GetIconLabel();

	//解析表情动作
	if(IsType(GGT_ACTION,GAT_MOTION))
	{
		StringTableEntry pIconTag = StringTable->insert(sTag + LEN_MOTION);
		g_pGPlayer->PlayMotion(pIconTag);
		return true;
	}
	//else if(IsGoodsType(GGT_EQUIP))
	//{
	//	//if(pContainer->IsGoodsBag())
	//	g_pGPlayer->UpdateToTShape(GetSubType());
	//}


	return false;
}


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



/////////////////////////////////////////////////////////////
//CONSOLEMETHOD_GOODS_U32(GoodsName,"GoodsName");

	CONSOLEMETHOD_GOODS_STE(GoodsName,"GoodsName");
	CONSOLEMETHOD_GOODS_STE(Desc,"Desc");
	CONSOLEMETHOD_GOODS_STE(IconLabel,"IconLabel");
	CONSOLEMETHOD_GOODS_STE(FileTitle,"FileTitle");
	CONSOLEMETHOD_GOODS_STE(KindName,"KindName");

	CONSOLEMETHOD_GOODS_U32(GoodsType,"GoodsType");
	CONSOLEMETHOD_GOODS_U32(SubType,"SubType");

	CONSOLEMETHOD_GOODS_U32(Level,"Level");
	CONSOLEMETHOD_GOODS_U32(Mass,"Mass");
	CONSOLEMETHOD_GOODS_U32(Kind,"Kind");

#ifdef TGE_RPGCLIENT
ConsoleMethod(GGoods,GetEfficacyText,const char*,2,2,".GetEfficacyText()")
{
	return object->GetEfficacyText(g_pGPlayer);
}

ConsoleMethod(GGoods,GetRequireText,const char*,2,2,".GetRequireText()")
{
	return object->GetRequireText(g_pGPlayer);
}

ConsoleFunction(ToggleGoods,void ,2,2,"ToggleGoods(goodsId)")
{
	GGoods* pGoods;
	if(Sim::findObject(argv[1],pGoods))
		GGoods::ToggleGoods(pGoods);
}

ConsoleMethod(GGoods,GetGoodsToNpcName,const char*,2,2,".GetGoodsToNpcName()")
{
	argv;argc;
	GNpc* pNpc = object->GetGoodsToNpc();
	if(pNpc)
		return pNpc->GetCharName();
	return "";
}

ConsoleMethod(GGoods,GetGoodsFromNpcName,const char*,2,2,".GetGoodsFromNpcName()")
{
	argv;argc;
	GNpc* pNpc = object->GetGoodsFromNpc();
	if(pNpc)
		return pNpc->GetCharName();
	return "";
}

ConsoleMethod(GGoods,GetFullName,const char*,2,2,".GetFullName()")
{
	argv;argc;
	return object->GetFullName();
}




#endif

};//namespace RPG

⌨️ 快捷键说明

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