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

📄 actionheal.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
////////////////////////////////////////////////////////////////////////////////// Filename    : ActionHeal.cpp// Written By  : // Description : ////////////////////////////////////////////////////////////////////////////////#include "ActionHeal.h"#include "Creature.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "GamePlayer.h"#include "Zone.h"#include "DB.h"#include "LogClient.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCRemoveEffect.h"#include "Gpackets/GCNPCResponse.h"#include "Gpackets/GCStatusCurrentHP.h"#include "EffectAftermath.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void ActionHeal::read (PropertyBuffer & propertyBuffer)    throw (Error){    __BEGIN_TRY    __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void ActionHeal::execute (Creature * pCreature1 , Creature * pCreature2) 	throw (Error){	__BEGIN_TRY	Assert(pCreature1 != NULL);	Assert(pCreature2 != NULL);	Assert(pCreature1->isNPC());	Assert(pCreature2->isPC());	Player* pPlayer = pCreature2->getPlayer();	Zone*   pZone   = pCreature2->getZone();		Assert(pPlayer != NULL);	// 老窜 努扼捞攫飘甫 困秦辑 OK 菩哦阑 窃 朝赴促.	GCNPCResponse okpkt;	okpkt.setCode(NPC_RESPONSE_HEAL);	pPlayer->sendPacket(&okpkt);	// 磷菌芭唱 内付 吧妨乐栏搁 救 摹丰秦霖促.	if ( pCreature2->isDead() || pCreature2->isFlag( Effect::EFFECT_CLASS_COMA ) )	{		return;	}	// 浇饭捞绢扼搁...	if (pCreature2->isSlayer())	{		Slayer*             pSlayer        = dynamic_cast<Slayer*>(pCreature2);		EffectManager*      pEffectManager = pSlayer->getEffectManager();		GCModifyInformation modifyPkt;		GCRemoveEffect      removePkt;		GCStatusCurrentHP   hpPkt;		// 刚历 HP尔 MP甫 钱肺 盲况霖促.		if (pSlayer->getHP(ATTR_CURRENT) < pSlayer->getHP(ATTR_MAX))		{			pSlayer->setHP(pSlayer->getHP(ATTR_MAX), ATTR_CURRENT);			modifyPkt.addShortData(MODIFY_CURRENT_HP, pSlayer->getHP(ATTR_CURRENT));			hpPkt.setObjectID(pSlayer->getObjectID());			hpPkt.setCurrentHP(pSlayer->getHP(ATTR_CURRENT));		}		if (pSlayer->getMP(ATTR_CURRENT) < pSlayer->getMP(ATTR_MAX))		{			pSlayer->setMP(pSlayer->getMP(ATTR_MAX), ATTR_CURRENT);			modifyPkt.addShortData(MODIFY_CURRENT_MP, pSlayer->getMP(ATTR_CURRENT));		}		// 软趋 捞棋飘甫 昏力茄促.		Effect* pBloodDrainEffect = pEffectManager->findEffect(Effect::EFFECT_CLASS_BLOOD_DRAIN);		if (pBloodDrainEffect != NULL)		{			// DB俊辑 昏力窍绊, 捞棋飘 概聪历俊辑 昏力茄促.			pBloodDrainEffect->destroy(pSlayer->getName());			pEffectManager->deleteEffect(pSlayer, Effect::EFFECT_CLASS_BLOOD_DRAIN);			// 软趋 酒福官捞飘甫 规瘤窍扁 困茄 饶蜡刘 捞棋飘甫 嘿咯霖促.			if (pSlayer->isFlag(Effect::EFFECT_CLASS_AFTERMATH))			{				Effect* pEffect = pEffectManager->findEffect(Effect::EFFECT_CLASS_AFTERMATH);				EffectAftermath* pEffectAftermath = dynamic_cast<EffectAftermath*>(pEffect);				pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促.			}			else			{				EffectAftermath* pEffectAftermath = new EffectAftermath(pSlayer);				pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促.				pEffectManager->addEffect(pEffectAftermath);				pSlayer->setFlag(Effect::EFFECT_CLASS_AFTERMATH);				pEffectAftermath->create(pSlayer->getName());			}			// 菩哦俊促 沥焊甫 歹茄促.			removePkt.addEffectList((EffectID_t)Effect::EFFECT_CLASS_BLOOD_DRAIN);			// 软趋阑 摹丰窍搁 瓷仿摹啊 函拳窍霸 等促.			SLAYER_RECORD prev;			pSlayer->getSlayerRecord(prev);			pSlayer->initAllStat();			pSlayer->sendModifyInfo(prev);			pSlayer->sendRealWearingInfo();		}		// 刀 捞棋飘甫 昏力茄促.		Effect* pEffectPoison = pEffectManager->findEffect(Effect::EFFECT_CLASS_POISON);		if (pEffectPoison != NULL)		{			// 捞棋飘 概聪历俊辑 昏力茄促.			pEffectManager->deleteEffect(pSlayer, Effect::EFFECT_CLASS_POISON);			// 菩哦俊促 沥焊甫 歹茄促.			removePkt.addEffectList((EffectID_t)Effect::EFFECT_CLASS_POISON);		}		// 促农喉风 器捞琉 捞棋飘甫 昏力茄促.		Effect* pEffectDarkBluePoison = pEffectManager->findEffect(Effect::EFFECT_CLASS_DARKBLUE_POISON);		if (pEffectDarkBluePoison != NULL)		{			// 捞棋飘 概聪历俊辑 昏力茄促.			pEffectManager->deleteEffect(pSlayer, Effect::EFFECT_CLASS_DARKBLUE_POISON);			// 菩哦俊促 沥焊甫 歹茄促.			removePkt.addEffectList((EffectID_t)Effect::EFFECT_CLASS_DARKBLUE_POISON);		}		// 菩哦 朝妨霖促.		removePkt.setObjectID(pSlayer->getObjectID());		pPlayer->sendPacket(&modifyPkt);		pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &removePkt);		pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &hpPkt, pSlayer);		log(LOG_HEAL, pSlayer->getName(), "");	}	else if (pCreature2->isVampire())	{		Vampire*            pVampire = dynamic_cast<Vampire*>(pCreature2);		//EffectManager*      pEffectManager = pVampire->getEffectManager();		GCModifyInformation modifyPkt;		GCRemoveEffect      removePkt;		GCStatusCurrentHP   hpPkt;		// HP 盲况林绊...		if (pVampire->getHP(ATTR_CURRENT) < pVampire->getHP(ATTR_MAX))		{			pVampire->setHP(pVampire->getHP(ATTR_MAX), ATTR_CURRENT);			modifyPkt.addShortData(MODIFY_CURRENT_HP, pVampire->getHP(ATTR_CURRENT));			hpPkt.setObjectID(pVampire->getObjectID());			hpPkt.setCurrentHP(pVampire->getHP(ATTR_CURRENT));		}		// 菩哦 朝妨霖促.		removePkt.setObjectID(pVampire->getObjectID());		pPlayer->sendPacket(&modifyPkt);		pZone->broadcastPacket(pVampire->getX(), pVampire->getY(), &removePkt);		pZone->broadcastPacket(pVampire->getX(), pVampire->getY(), &hpPkt, pVampire);		log(LOG_HEAL, pVampire->getName(), "");	}	else if (pCreature2->isOusters())	{		Ousters*             pOusters        = dynamic_cast<Ousters*>(pCreature2);		EffectManager*      pEffectManager = pOusters->getEffectManager();		GCModifyInformation modifyPkt;		GCRemoveEffect      removePkt;		GCStatusCurrentHP   hpPkt;		// 刚历 HP尔 MP甫 钱肺 盲况霖促.		if (pOusters->getHP(ATTR_CURRENT) < pOusters->getHP(ATTR_MAX) || pOusters->getSilverDamage() != 0 )		{			Silver_t prev = pOusters->getSilverDamage();			if ( prev != 0 )			{				pOusters->setSilverDamage(0);				modifyPkt.addShortData(MODIFY_SILVER_DAMAGE, pOusters->getSilverDamage());			}			pOusters->setHP(pOusters->getHP(ATTR_MAX), ATTR_CURRENT);			modifyPkt.addShortData(MODIFY_CURRENT_HP, pOusters->getHP(ATTR_CURRENT));			hpPkt.setObjectID(pOusters->getObjectID());			hpPkt.setCurrentHP(pOusters->getHP(ATTR_CURRENT));		}		if (pOusters->getMP(ATTR_CURRENT) < pOusters->getMP(ATTR_MAX))		{			pOusters->setMP(pOusters->getMP(ATTR_MAX), ATTR_CURRENT);			modifyPkt.addShortData(MODIFY_CURRENT_MP, pOusters->getMP(ATTR_CURRENT));		}		// 刀 捞棋飘甫 昏力茄促.		Effect* pEffectPoison = pEffectManager->findEffect(Effect::EFFECT_CLASS_POISON);		if (pEffectPoison != NULL)		{			// 捞棋飘 概聪历俊辑 昏力茄促.			pEffectManager->deleteEffect(pOusters, Effect::EFFECT_CLASS_POISON);			// 菩哦俊促 沥焊甫 歹茄促.			removePkt.addEffectList((EffectID_t)Effect::EFFECT_CLASS_POISON);		}		// 促农喉风 器捞琉 捞棋飘甫 昏力茄促.		Effect* pEffectDarkBluePoison = pEffectManager->findEffect(Effect::EFFECT_CLASS_DARKBLUE_POISON);		if (pEffectDarkBluePoison != NULL)		{			// 捞棋飘 概聪历俊辑 昏力茄促.			pEffectManager->deleteEffect(pOusters, Effect::EFFECT_CLASS_DARKBLUE_POISON);			// 菩哦俊促 沥焊甫 歹茄促.			removePkt.addEffectList((EffectID_t)Effect::EFFECT_CLASS_DARKBLUE_POISON);		}		// 软趋 捞棋飘甫 昏力茄促.		Effect* pBloodDrainEffect = pEffectManager->findEffect(Effect::EFFECT_CLASS_BLOOD_DRAIN);		if (pBloodDrainEffect != NULL)		{			pBloodDrainEffect->setDeadline(0);			// 软趋 酒福官捞飘甫 规瘤窍扁 困茄 饶蜡刘 捞棋飘甫 嘿咯霖促.			if (pOusters->isFlag(Effect::EFFECT_CLASS_AFTERMATH))			{				Effect* pEffect = pEffectManager->findEffect(Effect::EFFECT_CLASS_AFTERMATH);				EffectAftermath* pEffectAftermath = dynamic_cast<EffectAftermath*>(pEffect);				pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促.			}			else			{				EffectAftermath* pEffectAftermath = new EffectAftermath(pOusters);				pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促.				pEffectManager->addEffect(pEffectAftermath);				pOusters->setFlag(Effect::EFFECT_CLASS_AFTERMATH);				pEffectAftermath->create(pOusters->getName());			}			// 菩哦俊促 沥焊甫 歹茄促.			removePkt.addEffectList((EffectID_t)Effect::EFFECT_CLASS_BLOOD_DRAIN);		}		// 菩哦 朝妨霖促.		removePkt.setObjectID(pOusters->getObjectID());		pPlayer->sendPacket(&modifyPkt);		pZone->broadcastPacket(pOusters->getX(), pOusters->getY(), &removePkt);		pZone->broadcastPacket(pOusters->getX(), pOusters->getY(), &hpPkt, pOusters);		log(LOG_HEAL, pOusters->getName(), "");	}	__END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////string ActionHeal::toString () const 	throw (){	__BEGIN_TRY	StringStream msg;	msg << "ActionHeal("	    << ")";	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

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