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

📄 gefficacy.cc

📁 五行MMORPG引擎系统V1.0
💻 CC
📖 第 1 页 / 共 2 页
字号:
	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 + -