📄 ggoods.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 + -