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

📄 objectactionmanager.cpp

📁 墨香最新私服
💻 CPP
字号:
// CObjectActionManager.cpp: implementation of the CObjectActionManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ObjectActionManager.h"
#include "ObjectStateManager.h"
#include "Object.h"
#include "MoveManager.h"
#include "ObjectManager.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CObjectActionManager);
CObjectActionManager::CObjectActionManager()
{

}

CObjectActionManager::~CObjectActionManager()
{

}

void CObjectActionManager::Die(CObject* pObject,CObject* pAttacker,BOOL bFatalDamage,BOOL bCritical)
{
	if(MOVEMGR->IsMoving(pObject)==TRUE)
		MOVEMGR->MoveStop(pObject);
	if(pObject->GetState() != eObjectState_Die)
	{
		if(pObject->GetState() != eObjectState_None)
			OBJECTSTATEMGR->EndObjectState(pObject,pObject->GetState());

		OBJECTSTATEMGR->StartObjectState(pObject,eObjectState_Die);
		pObject->Die(pAttacker,bFatalDamage,bCritical);
	}
//	else
//	{
//		int a=0;
//	}
}

void CObjectActionManager::Damage(CObject* pObject,CObject* pAttacker,BYTE DamageKind,DWORD Damage,DWORD ShieldDamage,BOOL bCritical)
{
	pObject->Damage(pAttacker,DamageKind,Damage,ShieldDamage,bCritical);
}

void CObjectActionManager::Dodge(CObject* pObject,CObject* pAttacker)
{
	if( pObject == HERO || pAttacker == HERO )
		EFFECTMGR->AddDamageNumberDodge(pObject);
}

void CObjectActionManager::Revive(CObject* pObject,VECTOR3* pRevivePos)
{
	OBJECTSTATEMGR->EndObjectState(pObject,eObjectState_Die);
	pObject->Revive(pRevivePos);
}
	
void CObjectActionManager::Heal(CObject* pObject,CObject* pHealer,BYTE DamageKind,DWORD HealVal)
{
	pObject->Heal(pHealer,DamageKind,HealVal);
}
void CObjectActionManager::Recharge(CObject* pObject,CObject* pRecharger,BYTE RechargeKind,DWORD RechargeVal)
{
	pObject->Recharge(pRecharger,RechargeKind,RechargeVal);
}
void CObjectActionManager::ApplyTargetList(CObject* pOperator,CTargetList* pTList,BYTE DamageKind)
{
	CObject* pTarget;
	RESULTINFO rinfo;
	CTargetListIterator iter(pTList);
	while(iter.GetNextTarget())
	{
		pTarget = OBJECTMGR->GetObject(iter.GetTargetID());
		iter.GetTargetData(&rinfo);
		if(pTarget == NULL)
			continue;
		OBJECTACTIONMGR->ApplyResult(pTarget,pOperator,&rinfo,DamageKind);
	}
	iter.Release();
}
void CObjectActionManager::ApplyResult(CObject* pObject,CObject* pOperator,RESULTINFO* pRInfo,BYTE DamageKind)
{
	if(pRInfo->RealDamage || pRInfo->ShieldDamage)
	{
		Damage(pObject,pOperator,DamageKind,pRInfo->RealDamage,pRInfo->ShieldDamage,pRInfo->bCritical);
		if(pObject->IsDied())
			Die(pObject,pOperator,FALSE,pRInfo->bCritical);
	}
	if(pRInfo->CounterDamage)
	{
		Damage(pOperator,pObject,eDamageKind_Counter,pRInfo->CounterDamage,0,0);
		if(pOperator->IsDied())
			Die(pOperator,pObject,FALSE,FALSE);
	}
	if(pRInfo->HealLife)
		Heal(pObject,pOperator,0,pRInfo->HealLife);
	if(pRInfo->RechargeNaeryuk)
		Recharge(pObject,pOperator,0,pRInfo->RechargeNaeryuk);	
	
	if(pRInfo->StunTime)
		pObject->StartSpecialState(eSpecialState_Stun,pRInfo->StunTime,0,0,0,FindEffectNum("monster_stun_s.beff"),0);
	
	
	if(pRInfo->Vampiric_Life)
	{
		if(pOperator->GetID() == HERO->GetID())
			HERO->ChangeLife(pRInfo->Vampiric_Life);
		else
			pOperator->SetLife(pOperator->GetLife()+pRInfo->Vampiric_Life);
	}
	
	if(pRInfo->Vampiric_Naeryuk)
	{
		pOperator->SetNaeRyuk(pOperator->GetNaeRyuk()+pRInfo->Vampiric_Naeryuk);
	}
}

⌨️ 快捷键说明

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