/** @brief 효과 시전 pEffect의 효과를 기준타겟(pBaseTarget)을 기준으로 시전대상을 선정하여 시전한다. 현재 _vPos는 사용하지 않는다 */ xtError XSkillUser::UseEffect( const XSkillDat *pDat, EFFECT *pEffect, int level, XSkillReceiver *pBaseTarget, const XE::VEC2& vBaseTarget, // 기준타겟이 좌표형일경우. ID idCallerSkill ) { // 좌표에 값이 있으면 타겟은 널이어야 한다., XBREAK( vBaseTarget.IsNotZero() && pBaseTarget != nullptr ); XVector<XSkillReceiver*> aryCastTargets; // 시전대상 // 기준타겟이나 기준좌표로 시전대상을 얻는다. XBREAK( pBaseTarget == nullptr && vBaseTarget.IsZero() ); // XE::VEC2 vCastTarget; GetCastingTargetList( &aryCastTargets, &vCastTarget, pEffect->castTarget, pDat, pEffect, level, pBaseTarget, vBaseTarget ); // if( vCastTarget.IsZero() && aryCastTargets.empty() ) { return xERR_NOT_FOUND_CASTING_TARGET; // 시전대상을 찾지 못함 } if( aryCastTargets.size() ) { // 캐스팅 대상들에게 효과를 시전한다. for( auto pCastingTarget : aryCastTargets ) { // 즉시시전 or 버프방식 const XE::VEC2 vZero; CastEffToCastTarget( pDat, pEffect, level, // pBaseTarget, pCastingTarget, vZero, idCallerSkill ); } } else if( vCastTarget.IsNotZero() ) { // 시전대상이 좌표형 CastEffToCastTarget( pDat, pEffect, level, nullptr, vCastTarget, idCallerSkill ); } else { XBREAK(1); } return xOK; }