📄 gefficacy.cc
字号:
if(GECheckType(GET_GOODSADD) )
{
//增加物品
if(m_data.nGoodsCode != -1)
{
GEfficacy* pEfficacy = g_pRPGDataMan->GetEfficacy(m_data.nGoodsEffID);
GGOODSREF refNew(m_data,ref,pEfficacy);
bProcess = ref.pGChar->AddGoods(refNew);
//bProcess = ref.pGChar->AddGoods(m_data,ref.pNpc,ref.pTask);
}
if(bProcess)
GEResultType(GET_GOODSADD, GET_MASK_GOODS);
}//if(GECheckType(GET_GOODSADD) )
bProcess = FALSE;
if(GECheckType(GET_MONEYREDUCE) )
{
bProcess = TRUE;
if( ref.pGChar->AddMoney( m_data.nMoney>=0 ? -m_data.nMoney : 0) )
GEResultType(GET_MONEY, GET_MASK_GOODS);
}//if(GECheckType(GET_MONEYADD) )
//物品删除
if(GECheckType(GET_GOODSREDUCE) )
{
if(m_data.nGoodsCode != -1)
{
GGOODSREF refNew(m_data,ref);
bProcess = ref.pGChar->RemoveGoods(refNew);
}
//bProcess = ref.pGChar->RemoveGoods(m_data.nGoodsCode,
// (EGGoodsKind)m_data.nGoodsKind,
// m_data.nGoodsLevel,
// m_data.nAmount);
if(bProcess)
GEResultType(GET_GOODSREDUCE, GET_MASK_GOODS);
}//if(GECheckType(GET_GOODSREDUCE) )
if(GEIsOK())
return TRUE;
else if(GEIsResult(GET_MASK_GOODS))
return FALSE;
//////////////////////////////////////////////////////////////
//移动处理
if(GECheckType(GET_MOVESPEED) )
{
if(ref.pGChar->AffectMoveSpeed( m_data.fMoveSpeed*0.01f))
GEResultType(GET_MOVE, GET_MASK_PRY);
}//if(GECheckType(GET_MOVESPEED) )
else if(GECheckType(GET_MOVERATE) )
{
if(ref.pGChar->AffectMoveSpeed( m_data.fMoveRate*0.01f))
GEResultType(GET_MOVE, GET_MASK_PRY);
}//if(GECheckType(GET_MOVESPEED) )
//去除非GET_MOVE位值
GEResultType(~GET_MOVE, GET_MASK_PRY);
return GEIsOK();
}
#ifdef TGE_RPGCLIENT
#define CHECK_REQUIRE_COLOR(TEST)\
nColor = (TEST)? 0 : 1
#define BEGIN_GEFFICACY_TEXT(TYPE)\
if(GECheckType(TYPE) )
#define BEGIN_GEFFICACY_TEXT2(TYPE)\
if(GECheckType2(TYPE) )
#define UPDATE_GEFFICACY_BUFPOS()\
dwLen = dStrlen(pBuffer);\
dwLeft -= dwLen;\
pBuffer += dwLen
#define ON_GEFFICACY_TEXT(NEXT)\
else if(GECheckType(NEXT) )
CSTR GEfficacy::GetRequireText(const GGOODSREF& ref)
{
char* pText,*pBuffer;
U32 dwResult;
U32 dwLen,dwLeft;
U32 nColor;
static CSTR szColors[] =
{
"/yellow", "/red"
};
if(!ref.pGChar || m_data.dwTypes == GET_NULL)
return "";
nColor = 0;
dwLen = 0;
dwLeft = 1024;
pText = Con::getReturnBuffer(dwLeft);
dwResult = (m_data.dwTypes & GET_MASK_REQUIRE);
if(dwResult == GET_NULL)
return "";
// 双重ParseText格式 =>
pText[0] = '='; pText[1] = '>';
dwLeft -= 2;
pBuffer = pText+2;
BEGIN_GEFFICACY_TEXT(GRT_LEVEL)
{
CHECK_REQUIRE_COLOR( ref.pGChar->GetLevel() >= m_data.dwLevel );
dSprintf(pBuffer,dwLeft,"%s等级:%d/@\n", szColors[nColor] , m_data.dwLevel);
UPDATE_GEFFICACY_BUFPOS();
}
//人物性别 gender
BEGIN_GEFFICACY_TEXT(GRT_GENDER)
{
CHECK_REQUIRE_COLOR(ref.pGChar->GetGender() == m_data.gender);
dSprintf(pBuffer,dwLeft,"%s性别:%s/@\n", szColors[nColor] , ref.pGChar->GetGenderName());
UPDATE_GEFFICACY_BUFPOS();
}
//人物职业 career
BEGIN_GEFFICACY_TEXT(GRT_CAREER)
{
CHECK_REQUIRE_COLOR(ref.pGChar->GetCareer() == m_data.career);
dSprintf(pBuffer,dwLeft,"%s职业:%s/@\n", szColors[nColor] , ref.pGChar->GetCareerName());
UPDATE_GEFFICACY_BUFPOS();
}
//如果结果只余下 Money,则为人物属性检测
BEGIN_GEFFICACY_TEXT(GET_MONEY)
{
CHECK_REQUIRE_COLOR( ref.pGChar->GetMoney() >= m_data.nMoney);
dSprintf(pBuffer,dwLeft,"%s金钱/icon:<money>%d/@\n", szColors[nColor] , m_data.nMoney);
UPDATE_GEFFICACY_BUFPOS();
}
if(m_data.nGoodsCode != -1)
{
BEGIN_GEFFICACY_TEXT2(GET_GOODSCHECK|GET_GOODSREDUCE)
{
GGOODSREF refNew(m_data,ref);
CHECK_REQUIRE_COLOR( ref.pGChar->ExistGoods(refNew) );
//CHECK_REQUIRE_COLOR( ref.pGChar->ExistGoods(m_data.nGoodsCode,
// (EGGoodsKind)m_data.nGoodsKind,
// m_data.nGoodsLevel,
// m_data.nAmount) );
GGOODSDEFINE* pDefine = g_pRPGDataMan->GetGoodsDefine(m_data.nGoodsCode);
dSprintf(pBuffer,dwLeft,"%s", szColors[nColor]);
//dSprintf(pBuffer,dwLeft,"%s需要", szColors[nColor]);
UPDATE_GEFFICACY_BUFPOS();
GetGoodsModName(ref,pDefine,pBuffer,dwLeft);
//GetGoodsModName(ref.pGChar,ref.pNpc,ref.pTask,pDefine,pBuffer,dwLeft);
if(pDefine)
{
if(pDefine->dwGoodsType == GGT_TASK)
dSprintf(pBuffer,dwLeft,"%s/icon:<%s>%d%s/@\n",
pDefine->pGoodsName,
pDefine->pIconLabel ,
m_data.nAmount,
pDefine->sUnit);
else
dSprintf(pBuffer,dwLeft,"%s/icon:<%s>(%s%d级)%d%s/@\n",
pDefine->pGoodsName,
pDefine->pIconLabel ,
g_pRPGSetting->GetGoodsKindName(m_data.nGoodsKind),
m_data.nGoodsLevel,
m_data.nMoney,
pDefine->sUnit);
}
else
dSprintf(pBuffer,dwLeft,"未知物品:(%s%d级)%d/@\n",
g_pRPGSetting->GetGoodsKindName(m_data.nGoodsKind),
m_data.nGoodsLevel,
m_data.nMoney);
UPDATE_GEFFICACY_BUFPOS();
}//BEGIN_GEFFICACY_TEXT2
}//if(m_data.nGoodsCode != -1)
pBuffer[0] = 0;
if(pBuffer > pText && pBuffer[-1] == '\n')
pBuffer[-1] = 0;
return pText;
}
CSTR GEfficacy::GetEfficacyText(const GGOODSREF& ref)
{
char* pText,*pBuffer;
U32 dwResult;
U32 dwLen,dwLeft;
U32 nColor;
static CSTR szColors[] =
{
"/green"
};
if(!ref.pGChar || m_data.dwTypes == GET_NULL)
return "";
nColor = 0;
dwLen = 0;
dwLeft = 1024;
pText = Con::getReturnBuffer(dwLeft);
pBuffer = pText;
dwResult = m_data.dwTypes;// & GET_MASK_PRY);
// 双重ParseText格式 =>
pText[0] = '='; pText[1] = '>';
dwLeft -= 2;
pBuffer = pText+2;
BEGIN_GEFFICACY_TEXT(GET_MOVESPEED)
{
dSprintf(pBuffer,dwLeft,"%s移动:+%.2g/@\n", szColors[0] , m_data.fMoveSpeed*0.01f);
UPDATE_GEFFICACY_BUFPOS();
}
ON_GEFFICACY_TEXT(GET_MOVERATE)
{
dSprintf(pBuffer,dwLeft,"%s移动:+%d%%/@\n", szColors[0] , (S32)mFloor(m_data.fMoveRate)/*0.01f*/);
UPDATE_GEFFICACY_BUFPOS();
}
///////////////////////////////////////
//金钱处理
BEGIN_GEFFICACY_TEXT(GET_MONEYADD)
{
dSprintf(pBuffer,dwLeft,"%s%s金钱/icon:<money>%d/@\n", szColors[0] ,ref.bGoodsDeal?"得到":"", m_data.nMoney);
UPDATE_GEFFICACY_BUFPOS();
}
ON_GEFFICACY_TEXT(GET_MONEYREDUCE)
{
dSprintf(pBuffer,dwLeft,"%s%s金钱%d/icon:<money>/@\n", szColors[0] ,ref.bGoodsDeal?"失去":"", m_data.nMoney);
UPDATE_GEFFICACY_BUFPOS();
}
/////////////////////////////////////////////
//物品处理
if(GECheckType2(GET_MASK_GOODS) && m_data.nGoodsCode != -1)
{
//GNpc *pGoodsTo,
// *pGoodsFrom;
GGOODSDEFINE *pDefine;
BEGIN_GEFFICACY_TEXT(GET_GOODSADD)
{
dSprintf(pBuffer,dwLeft,"%s%s", szColors[0],ref.bGoodsDeal?"得到":"");
UPDATE_GEFFICACY_BUFPOS();
}
ON_GEFFICACY_TEXT(GET_GOODSREDUCE)
{
dSprintf(pBuffer,dwLeft,"%s%s", szColors[0],ref.bGoodsDeal?"失去":"");
UPDATE_GEFFICACY_BUFPOS();
}
pDefine = g_pRPGDataMan->GetGoodsDefine(m_data.nGoodsCode);
GetGoodsModName(ref,pDefine,pBuffer,dwLeft);
//GetGoodsModName(ref.pGChar,ref.pNpc,ref.pTask,pDefine,pBuffer,dwLeft);
BEGIN_GEFFICACY_TEXT2(GET_GOODSADD | GET_GOODSREDUCE)
{
if(pDefine)
{
if(pDefine->dwGoodsType == GGT_TASK)
dSprintf(pBuffer,dwLeft,"%s/icon:<%s>%d%s/@\n",
pDefine->pGoodsName,
pDefine->pIconLabel ,
m_data.nAmount,
pDefine->sUnit);
else
dSprintf(pBuffer,dwLeft,"%s/icon:<%s>(%s%d级)%d%s/@\n",
pDefine->pGoodsName,
pDefine->pIconLabel ,
g_pRPGSetting->GetGoodsKindName(m_data.nGoodsKind),
m_data.nGoodsLevel,
m_data.nAmount,
pDefine->sUnit);
}
else
dSprintf(pBuffer,dwLeft,"未知物品:(%s%d级)%d/@\n",
g_pRPGSetting->GetGoodsKindName(m_data.nGoodsKind),
m_data.nGoodsLevel,
m_data.nAmount);
UPDATE_GEFFICACY_BUFPOS();
}//BEGIN_GEFFICACY_TEXT2
}//if(m_data.nGoodsCode != -1)
pBuffer[0] = 0;
if(pBuffer > pText && pBuffer[-1] == '\n')
pBuffer[-1] = 0;
return pText;
}
void GEfficacy::GetGoodsModName(const GGOODSREF& ref,GGOODSDEFINE* pDefine,char*& pBuffer,U32& dwLeft)
{
GNpc *pGoodsTo,
*pGoodsFrom;
U32 dwLen;
ref.GetFromToNpc(pDefine->dwGoodsType, pGoodsFrom,pGoodsTo);
//GTaskBase::GetFromToNpc(ref.pTask,ref.pNpc, pDefine->dwGoodsType, pGoodsFrom, pGoodsTo,TRUE);
//if(!ref.pTask || pDefine->dwGoodsType != GGT_TASK)
// return;
//if(ref.pTask->IsToNpc(ref.pNpc))
//{
// pGoodsFrom = ref.pTask->GetToNpc();
// pGoodsTo = ref.pTask->GetFromNpc();
//}
//else if(ref.pTask->IsOwnerNpc(ref.pNpc) )
//{
// pGoodsTo = ref.pTask->GetToNpc();
// pGoodsFrom = ref.pTask->GetFromNpc();
//}
if(pGoodsFrom && pGoodsTo)
dSprintf(pBuffer,dwLeft,"[%s给%s的]",pGoodsFrom->GetCharName(),pGoodsTo->GetCharName());
else if(pGoodsTo)
dSprintf(pBuffer,dwLeft,"[给%s的]",pGoodsTo->GetCharName());
else if(pGoodsFrom)
dSprintf(pBuffer,dwLeft,"[%s的]",pGoodsFrom->GetCharName());
UPDATE_GEFFICACY_BUFPOS();
}
#endif
};//namespace RPG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -