#include "StdAfx.h" #include "DnAggroBlow.h" #if defined( _GAMESERVER ) #include "DNAggroSystem.h" #endif // #if defined( _GAMESERVER ) #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif CDnAggroBlow::CDnAggroBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ), m_fRange( 0.0f ), m_fRangeSQ( 0.0f ), m_fRangeAngleByRadian( 0.0f ) { m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_066; SetValue( szValue ); // ÀÎÀÚ°¡ 3°³ÀÓ. value;°Å¸®°ª;ij¸¯ÅÍÀÇ Àü¹æ±âÁØ °¢µµ°ª. string strValue( szValue ); // ½ºÆ®¸µÀ» °ø¹é´ÜÀ§·Î ºÐÇÒÇÑ ÈÄ std::vector vlTokens; TokenizeA( strValue, vlTokens, ";" ); bool bValidArgument = (3 == (int)vlTokens.size()); _ASSERT( bValidArgument && "132¹ø ÇÁ·Îº¸Å© »óÅÂÈ¿°ú ÀÎÀÚ ¼ÂÆÃÀÌ À߸øµÇ¾ú½À´Ï´Ù." ); if( bValidArgument ) { m_fValue = (float)atoi(vlTokens.at( 0 ).c_str()); m_fRange = (float)atof(vlTokens.at( 1 ).c_str()); m_fRangeAngleByRadian = EtToRadian((float)atof(vlTokens.at( 2 ).c_str())) / 2.0f; // Àü¹æ±âÁØ ÁÂ¿ì °¢µµ°ªÀ̹ǷΠ2·Î ³ª´²ÁÜ. m_fRangeSQ = m_fRange * m_fRange; } } CDnAggroBlow::~CDnAggroBlow(void) { } void CDnAggroBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta ) { #if defined( _GAMESERVER ) if( IsPermanent() ) { MatrixEx Cross = *m_hActor->GetMatEx(); EtVector3 vPlayerDir = Cross.m_vZAxis; EtVec3Normalize( &vPlayerDir, &vPlayerDir ); CMultiRoom *pRoom = m_hActor->GetRoom(); for( DWORD i=0; iGetMySmartPtr(); if( hActor && hActor->IsMonsterActor() ) { // ÀÏÁ¤ °Å¸® ¾È¿¡ ÀÖ´Â ¾Öµé¸¸ Àû¿ë½ÃÄÑÁØ´Ù. EtVector3 vDistance = *hActor->GetPosition() - *m_hActor->GetPosition(); float fDistanceSQ = EtVec3LengthSq( &vDistance ); if( fDistanceSQ <= m_fRangeSQ ) { // ij¸¯ÅÍ Àü¹æ ±âÁØ ÀÏÁ¤ °¢µµ°ª ¾È¿¡ µé¾î¿Â ¾Öµé¸¸ Àû¿ë½ÃÄÑÁØ´Ù. EtVector3 vDirToMonster; EtVec3Normalize( &vDirToMonster, &vDistance ); float fDot = EtVec3Dot( &vPlayerDir, &vDirToMonster ); if( fDot <= m_fRangeAngleByRadian ) { m_vlhApplyMonsters.push_back( hActor ); } } } } for( UINT i=0 ; iGetAggroSystem() ) hActor->GetAggroSystem()->AddAggro( m_hActor, static_cast(m_fValue) ); } } #endif // #if defined( _GAMESERVER ) OutputDebug( "CDnAggroBlow::OnBegin\n" ); } void CDnAggroBlow::Process( LOCAL_TIME LocalTime, float fDelta ) { CDnBlow::Process( LocalTime, fDelta ); } void CDnAggroBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta ) { OutputDebug( "CDnAggroBlow::OnEnd\n" ); } #if defined(PRE_ADD_PREFIX_SYSTE_RENEW) void CDnAggroBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue) { char szBuff[128] = {0, }; //ÆÄ½Ì¿¡ ÇÊ¿äÇÑ º¯¼ö ¼±¾ð std::vector vlTokens[2]; string strArgument[2]; //ÇÊ¿äÇÑ º¯¼ö float fValue[2] = {0.0f, }; float fRange[2] = {0.0f, }; float fRangeAngle[2] = {0.0f, }; ////////////////////////////////////////////////////////////////////////// //ù¹øÂ° ¹®ÀÚ¿­ ÆÄ½Ì. strArgument[0] = szOrigValue; TokenizeA( strArgument[0], vlTokens[0], ";" ); if( vlTokens[0].size() == 3 ) { fValue[0] = (float)atof( vlTokens[0][0].c_str() ); fRange[0] = (float)atof( vlTokens[0][1].c_str() ); fRangeAngle[0] = (float)atof( vlTokens[0][2].c_str() ); } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //µÎ¹øÂ° ¹®ÀÚ¿­ ÆÄ½Ì. strArgument[1] = szAddValue; TokenizeA( strArgument[1], vlTokens[1], ";" ); if( vlTokens[1].size() == 3 ) { fValue[1] = (float)atof( vlTokens[1][0].c_str() ); fRange[1] = (float)atof( vlTokens[1][1].c_str() ); fRangeAngle[1] = (float)atof( vlTokens[1][2].c_str() ); } ////////////////////////////////////////////////////////////////////////// float fResultValue = fValue[0] + fValue[1]; float fResultRange = max(fRange[0], fRange[1]); float fResultRangeAngle = fRangeAngle[0] + fRangeAngle[1]; sprintf_s(szBuff, "%f;%f;%f", fResultValue, fResultRange, fResultRangeAngle); szNewValue = szBuff; } void CDnAggroBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue) { char szBuff[128] = {0, }; //ÆÄ½Ì¿¡ ÇÊ¿äÇÑ º¯¼ö ¼±¾ð std::vector vlTokens[2]; string strArgument[2]; //ÇÊ¿äÇÑ º¯¼ö float fValue[2] = {0.0f, }; float fRange[2] = {0.0f, }; float fRangeAngle[2] = {0.0f, }; ////////////////////////////////////////////////////////////////////////// //ù¹øÂ° ¹®ÀÚ¿­ ÆÄ½Ì. strArgument[0] = szOrigValue; TokenizeA( strArgument[0], vlTokens[0], ";" ); if( vlTokens[0].size() == 3 ) { fValue[0] = (float)atof( vlTokens[0][0].c_str() ); fRange[0] = (float)atof( vlTokens[0][1].c_str() ); fRangeAngle[0] = (float)atof( vlTokens[0][2].c_str() ); } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //µÎ¹øÂ° ¹®ÀÚ¿­ ÆÄ½Ì. strArgument[1] = szAddValue; TokenizeA( strArgument[1], vlTokens[1], ";" ); if( vlTokens[1].size() == 3 ) { fValue[1] = (float)atof( vlTokens[1][0].c_str() ); fRange[1] = (float)atof( vlTokens[1][1].c_str() ); fRangeAngle[1] = (float)atof( vlTokens[1][2].c_str() ); } ////////////////////////////////////////////////////////////////////////// float fResultValue = fValue[0] - fValue[1]; float fResultRange = min(fRange[0], fRange[1]); float fResultRangeAngle = fRangeAngle[0] - fRangeAngle[1]; sprintf_s(szBuff, "%f;%f;%f", fResultValue, fResultRange, fResultRangeAngle); szNewValue = szBuff; } #endif // PRE_ADD_PREFIX_SYSTE_RENEW