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

📄 skillobjectfactory.cpp

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

#include "stdafx.h"
#include "SkillObjectFactory.h"

#include "SkillInfo.h"

#include "SkillObject_Mine.h"

// terminator
#include "SkillObjectTerminator_Time.h"

// targetlist
#include "SkillObjectTargetList_Area.h"
#include "SkillObjectTargetList_Circle.h"
#include "SkillObjectTargetList_One.h"

// singleunit
#include "SkillObjectSingleUnit_Attack.h"
#include "SkillObjectSingleUnit_Heal.h"
#include "SkillObjectSingleUnit_Recharge.h"

// attachunit
#include "SkillObjectAttachUnit_MaxLife.h"
#include "SkillObjectAttachUnit_Defence.h"
#include "SkillObjectAttachUnit_Attack.h"
#include "SkillObjectAttachUnit_CounterAttack.h"
#include "SkillObjectAttachUnit_Immune.h"
#include "SkillObjectAttachUnit_MoveSpeed.h"
#include "SkillObjectAttachUnit_Dodge1.h"
#include "SkillObjectAttachUnit_Vampiric.h"

// FirstUnit
#include "SkillObjectFirstUnit.h"
#include "SkillObjectFirstUnit_Attack.h"
#include "SkillObjectFirstUnit_Recover.h"

// StateUnit
#include "SkillObjectStateUnit_TieUp.h"
#include "SkillObjectStateUnit_StatusAttach.h"
#include "SkillObjectStateUnit_DummyState.h"
#include "SkillObjectStateUnit_AmplifiedPower.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSkillObjectFactory::CSkillObjectFactory()
{
	
}

CSkillObjectFactory::~CSkillObjectFactory()
{

}

CSkillObject* CSkillObjectFactory::MakeNewSkillObject(CSkillInfo* pSkillInfo)
{
	// 烙矫 窍靛 内爹
	// 唱吝俊 pSkillInfo俊 嘎霸 积己窍绊 悸泼秦林绢具 窃

	CSkillObjectTerminator* pTer;
	CSkillObjectTargetList* pTar;
	CSkillObjectSingleUnit* pSingleUnit;
	CSkillObjectAttachUnit* pAttachUnit;
	CSkillObjectFirstUnit* pFirstUnit;
	CSkillObjectStateUnit* pStateUnit;

	SKILLINFO* pInfo = pSkillInfo->GetSkillInfo();

	// Terminator
	pTer = new CSkillObjectTerminator_Time(pInfo);

	// TargetList
	if(pSkillInfo->IsMultipleTargetSkill() == TRUE)
	{
		if(pInfo->TargetRange == 0)
		{
			ASSERT(pInfo->TargetAreaIdx);
			pTar = new CSkillObjectTargetList_Area(pInfo);
		}
		else
			pTar = new CSkillObjectTargetList_Circle(pInfo);
	}
	else
	{
		pTar = new CSkillObjectTargetList_One(pInfo);
	}

	// firstunit
	if(pInfo->AIObject == 1)
		pFirstUnit = new CSkillObjectFirstUnit(pInfo);
	else if(pInfo->FirstAttAttackMax[11] != 0 || 
			pInfo->FirstAttAttack[11] != 0 || 
			pInfo->FirstPhyAttack[11] != 0)
		pFirstUnit = new CSkillObjectFirstUnit_Attack(pInfo);
	else if(pInfo->FirstRecoverLife[11] != 0 || pInfo->FirstRecoverNaeRyuk[11] != 0)
		pFirstUnit = new CSkillObjectFirstUnit_Recover(pInfo);
	else
		pFirstUnit = new CSkillObjectFirstUnit(pInfo);

	CSkillObject* pSObj;
	if(pInfo->AIObject == 1)	// 瘤汾
		pSObj = new CSkillObject_Mine(pSkillInfo,pTer,pTar,pFirstUnit);
	else
		pSObj = new CSkillObject(pSkillInfo,pTer,pTar,pFirstUnit);

	// SingleUnit
	DWORD SingleUnitNum = 0;
	if(pInfo->ContinueAttAttack[11] != 0 || pInfo->ContinueAttAttackRate[11])
	{
		pSingleUnit = new CSkillObjectSingleUnit_Attack(SingleUnitNum++);
		pSObj->AddSingleUnit(pSingleUnit);
	}
	if(pInfo->ContinueRecoverLife[11] != 0)
	{
		pSingleUnit = new CSkillObjectSingleUnit_Heal(SingleUnitNum++);
		pSObj->AddSingleUnit(pSingleUnit);
	}
	if(pInfo->ContinueRecoverNaeRyuk[11] != 0)
	{
		pSingleUnit = new CSkillObjectSingleUnit_Recharge(SingleUnitNum++);
		pSObj->AddSingleUnit(pSingleUnit);
	}

	// AttachUnit
	if( pInfo->UpMaxLife[11] != 0 || 
		pInfo->UpMaxNaeRyuk[11] != 0 ||
		pInfo->UpMaxShield[11] != 0 )		// 弥措 积疙,郴仿 惑铰
	{
		pAttachUnit = new CSkillObjectAttachUnit_MaxLifeNaeRyukUp();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_POSITIVE);
		pSObj->AddStateUnit(pStateUnit);
	}
	if(pInfo->UpAttDefence[11] != 0 || pInfo->UpPhyDefence[11])		// 规绢仿 惑铰
	{
		pAttachUnit = new CSkillObjectAttachUnit_DefenceUp();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_POSITIVE);
		pSObj->AddStateUnit(pStateUnit);
	}
	if(pInfo->UpPhyAttack[11] != 0)		// 拱府傍拜仿 惑铰
	{
		pAttachUnit = new CSkillObjectAttachUnit_AttackUp();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_POSITIVE);
		pSObj->AddStateUnit(pStateUnit);
	}
	if(pInfo->CounterAttAttack[11] != 0 || pInfo->CounterPhyAttack[11] != 0)	// 馆拜
	{
		pAttachUnit = new CSkillObjectAttachUnit_CounterAttack();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_POSITIVE);
		pSObj->AddStateUnit(pStateUnit);
	}
	if(pInfo->Immune != 0)		// 公利
	{
		pAttachUnit = new CSkillObjectAttachUnit_Immune();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_POSITIVE);
		pSObj->AddStateUnit(pStateUnit);
	}
	if(pInfo->ChangeSpeedType == 1)		// 捞悼加档 函拳
	{
		pAttachUnit = new CSkillObjectAttachUnit_MoveSpeed();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_NEGATIVE);
		pSObj->AddStateUnit(pStateUnit);
	}
	if(pInfo->CounterDodgeKind == 2)		// 雀乔
	{
		pAttachUnit = new CSkillObjectAttachUnit_Dodge();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_POSITIVE);
		pSObj->AddStateUnit(pStateUnit);
	}
	if(pInfo->VampiricLife[11] != 0 || pInfo->VampiricNaeryuk[11] != 0)		// 软扁
	{
		pAttachUnit = new CSkillObjectAttachUnit_Vampiric();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_POSITIVE);
		pSObj->AddStateUnit(pStateUnit);
	}	
	if( pInfo->DownMaxLife[11] != 0 || 
		pInfo->DownMaxNaeRyuk[11] != 0 ||
		pInfo->DownMaxShield[11] != 0 )		// 弥措 积疙,郴仿 皑家
	{
		pAttachUnit = new CSkillObjectAttachUnit_MaxLifeNaeRyukDown();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_NEGATIVE);
		pSObj->AddStateUnit(pStateUnit);
	}
	if(pInfo->DownAttDefence[11] != 0 || pInfo->DownPhyDefence[11])		// 规绢仿 皑家
	{
		pAttachUnit = new CSkillObjectAttachUnit_DefenceDown();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_NEGATIVE);
		pSObj->AddStateUnit(pStateUnit);
	}
	if(pInfo->DownPhyAttack[11] != 0)		// 拱府傍拜仿 皑家
	{
		pAttachUnit = new CSkillObjectAttachUnit_AttackDown();
		pStateUnit = new CSkillObjectStateUnit_StatusAttach();
		((CSkillObjectStateUnit_StatusAttach*)pStateUnit)->SetAttachUnit(pAttachUnit,SKILLRESULTKIND_NEGATIVE);
		pSObj->AddStateUnit(pStateUnit);
	}

	// StateUnit
	if(pInfo->TieUpType != SKILLTIEUP_TYPE_NOTHING)
	{
		pStateUnit = new CSkillObjectStateUnit_TieUp();
		pSObj->AddStateUnit(pStateUnit);
	}
	if( pInfo->ContinueAttAttack[11] != 0 ||
		pInfo->ContinueAttAttackRate[11] != 0 ||
		pInfo->ContinueRecoverLife[11] != 0)
	{
		pStateUnit = new CSkillObjectStateUnit_DummyState();
		pSObj->AddStateUnit(pStateUnit);
	}
	if( pInfo->AmplifiedPowerPhy[11] != 0 || 
		pInfo->AmplifiedPowerAtt[11] != 0 ||
		pInfo->AmplifiedPowerAttRate[11] != 0 )
	{
		pStateUnit = new CSkillObjectStateUnit_AmplifiedPower();
		pSObj->AddStateUnit(pStateUnit);		
	}


	return pSObj;
}

⌨️ 快捷键说明

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