DragonNest/Server/DNGameServer/DnAuraProcessor.cpp

365 lines
12 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DnAuraProcessor.h"
#include "DnActor.h"
#include "TaskManager.h"
#include "DnPartyTask.h"
#include "DNUserSession.h"
#include "DnGameRoom.h"
#include "DnBlow.h"
#include "DnGameTask.h"
CDnAuraProcessor::CDnAuraProcessor( DnActorHandle hActor, float fRange ) : IDnSkillProcessor( hActor ),
m_fRange( fRange ),
m_fRangeSQ( fRange*fRange ),
m_LastAuraCheckTime( 0 ),
m_bAuraOff( false )
{
}
CDnAuraProcessor::~CDnAuraProcessor(void)
{
}
void CDnAuraProcessor::OnBegin( LOCAL_TIME LocalTime, float fDelta, DnSkillHandle hParentSkill )
{
m_LastAuraCheckTime = LocalTime;
m_setPartyMemberInAura.clear();
m_mapAuraMemberSEID.clear();
m_bAuraOff = false;
}
void CDnAuraProcessor::Process( LOCAL_TIME LocalTime, float fDelta )
{
CDnGameTask *pGameTask = (CDnGameTask *)CTaskManager::GetInstance(m_hHasActor->GetRoom()).GetTask( "GameTask" );
if( pGameTask && pGameTask->GetGameTaskType() == GameTaskType::Farm )
return;
int nRefreshTime = 30;
#ifdef PRE_ADD_AURA_FOR_MONSTER
if(m_hHasActor->IsMonsterActor()) // <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> <20><>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD> <20><><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<>Ӱ<EFBFBD><D3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD> <20>ϰڴ<CFB0>.
nRefreshTime = 600;
#endif
// <20>ֺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0BCAE> ȿ<><C8BF><EFBFBD><EFBFBD> <20><EFBFBD><E0BCAE> <20><><EFBFBD><EFBFBD>
if( LocalTime - m_LastAuraCheckTime > nRefreshTime )
{
//assert( m_hHasActor->IsEnabledAuraSkill() && "<22><><EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų <20>ߵ<EFBFBD> <20><><EFBFBD>̾<EFBFBD><CCBE><EFBFBD> <20><>" );
DnSkillHandle hAuraSkill = m_hHasActor->GetEnabledAuraSkill();
if( NULL == hAuraSkill )
return;
// <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> <20><><EFBFBD><20><>Ƽ<EFBFBD><C6BC> <20>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD>,
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ScanActor <20><> <20><> <20><> <20>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD>.. (#15461)
DNVector( DnActorHandle ) vlActors;
if( m_hHasActor->IsPlayerActor() )
{
CDnPartyTask* pPartyTask = static_cast<CDnPartyTask*>(CTaskManager::GetInstancePtr(m_hHasActor->GetRoom())->GetTask( "PartyTask" ));
if (pPartyTask)
{
vlActors.reserve( pPartyTask->GetUserCount() );
for( int i = 0; i < (int)pPartyTask->GetUserCount(); ++i )
{
CDNGameRoom::PartyStruct* pPartyData = pPartyTask->GetPartyData( i );
vlActors.push_back( pPartyData->pSession->GetActorHandle() );
}
}
}
else
{
CDnActor::ScanActor( m_hHasActor->GetRoom(), *(m_hHasActor->GetPosition()), m_fRange, vlActors );
}
set<DWORD> setPrevAuraMember = m_setPartyMemberInAura;
m_setPartyMemberInAura.clear();
for( int i = 0; i < (int)vlActors.size(); ++i )
{
DnActorHandle hActor = vlActors.at( i );
// <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD>.
if( !hActor )
continue;
// <20>ڱ<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20>н<EFBFBD>..
if( hActor != m_hHasActor )
{
#if defined(PRE_FIX_55383)
bool bSkip = false;
CDnSkill::TargetTypeEnum skillTargetType = hAuraSkill->GetTargetType();
switch(skillTargetType)
{
case CDnSkill::TargetTypeEnum::Self: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><>ŵ <20>ϴµ<CFB4>. <20>ϴ<EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>س<EFBFBD><D8B3>´<EFBFBD>.
{
bSkip = hActor != m_hHasActor;
}
break;
case CDnSkill::TargetTypeEnum::Enemy: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20>ִµ<D6B4>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD≯<EFBFBD> <20><>ŵ
{
int nMyTeam = m_hHasActor->GetTeam();
if (m_hHasActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nMyTeam = m_hHasActor->GetOriginalTeam();
int nTargetTeam = hActor->GetTeam();
if (hActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nTargetTeam = hActor->GetOriginalTeam();
bSkip = nMyTeam == nTargetTeam;
}
break;
case CDnSkill::TargetTypeEnum::Friend: //<2F>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20>ִµ<D6B4> <20>ٸ<EFBFBD> <20><><EFBFBD≯<EFBFBD> <20><>ŵ
{
int nMyTeam = m_hHasActor->GetTeam();
if (m_hHasActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nMyTeam = m_hHasActor->GetOriginalTeam();
int nTargetTeam = hActor->GetTeam();
if (hActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nTargetTeam = hActor->GetOriginalTeam();
bSkip = nMyTeam != nTargetTeam;
}
break;
case CDnSkill::TargetTypeEnum::Party: //<2F>ϴ<EFBFBD> Friend<6E><64> <20><><EFBFBD><EFBFBD> <20>ϰ<EFBFBD> ó<><C3B3> <20>ϰ<EFBFBD>, <20><><EFBFBD>߿<EFBFBD> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD><EFBFBD> Party<74><79> <20>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3>?
{
int nMyTeam = m_hHasActor->GetTeam();
if (m_hHasActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nMyTeam = m_hHasActor->GetOriginalTeam();
int nTargetTeam = hActor->GetTeam();
if (hActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nTargetTeam = hActor->GetOriginalTeam();
bSkip = nMyTeam != nTargetTeam;
}
break;
case CDnSkill::TargetTypeEnum::All:
bSkip = false;
break;
}
if (bSkip == true)
continue;
#else
// <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> <20><><EFBFBD><EFBFBD>, pvp <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> PartyStruct <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>ϴ<EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>쿣 scanactor <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if( hActor->GetTeam() != m_hHasActor->GetTeam()
#ifdef PRE_ADD_AURA_FOR_MONSTER
&& hAuraSkill->GetTargetType() != CDnSkill::TargetTypeEnum::Enemy
|| (hAuraSkill->GetTargetType() == CDnSkill::TargetTypeEnum::Enemy && hActor->GetTeam() == m_hHasActor->GetTeam())
#endif
)
continue;
#endif // PRE_FIX_55383
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD> <20><EFBFBD><E0BCAE> <20><><EFBFBD><EFBFBD>.
DnSkillHandle hIfNewMemberAuraSkill = hActor->GetEnabledAuraSkill();
if( hIfNewMemberAuraSkill &&
hIfNewMemberAuraSkill->GetClassID() == hAuraSkill->GetClassID() )
continue;
// <20>ٸ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><>ų ȿ<><C8BF><EFBFBD><EFBFBD> <20><>ø<EFBFBD><C3B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// ȿ<><C8BF><EFBFBD><EFBFBD> <20><>ü<EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AuraProcessor <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD>°<EFBFBD> <20>Ǿ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ǯ<><C7AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> ȿ<><C8BF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵȴ<C8B5>.
bool bSameAuraSkillsBlow = false;
DNVector(DnBlowHandle) vlhAppliedBlow;
hActor->GetAllAppliedStateBlow( vlhAppliedBlow );
DNVector(DnBlowHandle)::iterator iter = vlhAppliedBlow.begin();
for( iter; iter != vlhAppliedBlow.end(); ++iter )
{
const CDnSkill::SkillInfo* pParentSkillInfo = (*iter)->GetParentSkillInfo();
if( m_hHasActor != pParentSkillInfo->hSkillUser &&
pParentSkillInfo->iSkillID == hAuraSkill->GetClassID() )
{
bSameAuraSkillsBlow = true;
break;
}
}
if( bSameAuraSkillsBlow )
continue;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>쿣 ScanActor <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ȿ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><20>˻<EFBFBD><CBBB>Ǿ<EFBFBD>
// <20><><EFBFBD><EFBFBD> <20>Ÿ<EFBFBD>üũ<C3BC><C5A9> <20><> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>.
bool bInRange = true;
if( m_hHasActor->IsPlayerActor() )
{
bInRange = false;
const EtVector3* pPos = hActor->GetPosition();
const EtVector3* pMyPos = m_hHasActor->GetPosition();
EtVector3 vDist = *pPos - *pMyPos;
float fDistSQ = EtVec3LengthSq( &vDist );
// <20><><EFBFBD><EFBFBD> <20>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD>,, <20>ϴ<EFBFBD> <20>Ÿ<EFBFBD><C5B8><EFBFBD> <20><><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD> <20><><EFBFBD>س<EFBFBD><D8B3>´<EFBFBD>. (300)
if( fDistSQ < m_fRangeSQ )
bInRange = true;
}
if( bInRange )
m_setPartyMemberInAura.insert( hActor->GetUniqueID() );
}
}
// set <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><EFBFBD><E0BCAE> <20><><EFBFBD><EFBFBD> <20><EFBFBD><E0BCAE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
vector<DWORD> vlNewMember;
set_difference( m_setPartyMemberInAura.begin(), m_setPartyMemberInAura.end(), setPrevAuraMember.begin(), setPrevAuraMember.end(),
back_inserter(vlNewMember) );
vector<DWORD> vlOutMember;
set_difference( setPrevAuraMember.begin(), setPrevAuraMember.end(), m_setPartyMemberInAura.begin(), m_setPartyMemberInAura.end(),
back_inserter(vlOutMember) );
int iNumNewMember = (int)vlNewMember.size();
for( int iMember = 0; iMember < iNumNewMember; ++iMember )
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> target <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20>߰<EFBFBD>.
DnActorHandle hNewMember = CDnActor::FindActorFromUniqueID( m_hHasActor->GetRoom(), vlNewMember.at(iMember) );
if( hNewMember )
{
DWORD dwNumStateEffect = hAuraSkill->GetStateEffectCount();
for( DWORD dwStateEffect = 0; dwStateEffect < dwNumStateEffect; ++dwStateEffect )
{
const CDnSkill::StateEffectStruct* pSE = hAuraSkill->GetStateEffectFromIndex( dwStateEffect );
#if defined(PRE_FIX_55383)
bool bCanApply = false;
switch(pSE->ApplyType)
{
case CDnSkill::ApplySelf: //Self<6C>ΰ<EFBFBD><CEB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD>̾<EFBFBD><CCBE><EFBFBD> <20>Ѵ<EFBFBD>.
{
bCanApply = m_hHasActor == hNewMember;
}
break;
case CDnSkill::ApplyTarget: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20>ƴϸ<C6B4> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
{
bCanApply = m_hHasActor != hNewMember;
}
break;
case CDnSkill::ApplyAll: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
bCanApply = true;
}
break;
case CDnSkill::ApplyEnemy: //<2F><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD>
{
int nMyTeam = m_hHasActor->GetTeam();
if (m_hHasActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nMyTeam = m_hHasActor->GetOriginalTeam();
int nTargetTeam = hNewMember->GetTeam();
if (hNewMember->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nTargetTeam = hNewMember->GetOriginalTeam();
bCanApply = nMyTeam != nTargetTeam;
}
break;
case CDnSkill::ApplyFriend: //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츸..
{
int nMyTeam = m_hHasActor->GetTeam();
if (m_hHasActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nMyTeam = m_hHasActor->GetOriginalTeam();
int nTargetTeam = hNewMember->GetTeam();
if (hNewMember->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
nTargetTeam = hNewMember->GetOriginalTeam();
bCanApply = nMyTeam == nTargetTeam;
}
break;
}
if (bCanApply == true)
{
int iID = hNewMember->CmdAddStateEffect( /*m_hHasActor,*/ hAuraSkill->GetInfo(), (STATE_BLOW::emBLOW_INDEX)pSE->nID, -1/*SE.nDurationTime*/, pSE->szValue.c_str() );
m_mapAuraMemberSEID[ hNewMember->GetUniqueID() ].push_back( iID );
}
#else
if( CDnSkill::ApplyTarget == pSE->ApplyType )
{
int iID = hNewMember->CmdAddStateEffect( /*m_hHasActor,*/ hAuraSkill->GetInfo(), (STATE_BLOW::emBLOW_INDEX)pSE->nID, -1/*SE.nDurationTime*/, pSE->szValue.c_str() );
m_mapAuraMemberSEID[ hNewMember->GetUniqueID() ].push_back( iID );
}
#endif // PRE_FIX_55383
}
}
}
int iNumOutMember = (int)vlOutMember.size();
for( int iMember = 0; iMember < iNumOutMember; ++iMember )
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD>.
DnActorHandle hOutMember = CDnActor::FindActorFromUniqueID( m_hHasActor->GetRoom(), vlOutMember.at(iMember) );
if( hOutMember )
{
//// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD> <20><EFBFBD><E0BCAE> <20>Ű澲<C5B0><E6BEB2> <20>ʴ´<CAB4>.
//DnSkillHandle hIfOutMemberAuraSkill = hOutMember->GetEnabledAuraSkill();
//if( hIfOutMemberAuraSkill &&
// hIfOutMemberAuraSkill->GetClassID() == hAuraSkill->GetClassID() )
// continue;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> <20>ɷ<EFBFBD><C9B7>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɾ<EFBFBD><C9BE><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>
// <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD> <20>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD>.
//DWORD dwNumStateEffect = hAuraSkill->GetStateEffectCount();
//for( DWORD dwStateEffect = 0; dwStateEffect < dwNumStateEffect; ++dwStateEffect )
//{
// const CDnSkill::StateEffectStruct* pSE = hAuraSkill->GetStateEffectFromIndex( dwStateEffect );
// if( CDnSkill::ApplyTarget == pSE->ApplyType )
// hOutMember->CmdRemoveStateEffect( (STATE_BLOW::emBLOW_INDEX)pSE->nID );
//}
vector<int>& vlBlowIDsToRemove = m_mapAuraMemberSEID[ hOutMember->GetUniqueID() ];
for( int i = 0; i < (int)vlBlowIDsToRemove.size(); ++i )
hOutMember->CmdRemoveStateEffectFromID( vlBlowIDsToRemove.at(i) );
m_mapAuraMemberSEID.erase( hOutMember->GetUniqueID() );
}
}
m_LastAuraCheckTime = LocalTime;
}
}
void CDnAuraProcessor::OnEnd( LOCAL_TIME LocalTime, float fDelta )
{
if( m_setPartyMemberInAura.empty() )
return;
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD>.
set<DWORD>::iterator iter = m_setPartyMemberInAura.begin();
//assert( m_hHasActor->IsEnabledAuraSkill() && "<22><><EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų <20>ߵ<EFBFBD> <20><><EFBFBD>̾<EFBFBD><CCBE><EFBFBD> <20><>" );
DnSkillHandle hAuraSkill = m_hHasActor->GetEnabledAuraSkill();
if( hAuraSkill )
{
for( iter; iter != m_setPartyMemberInAura.end(); ++iter )
{
DnActorHandle hMember = CDnActor::FindActorFromUniqueID( m_hHasActor->GetRoom(), *iter );
if( hMember )
{
vector<int>& vlBlowIDsToRemove = m_mapAuraMemberSEID[ hMember->GetUniqueID() ];
for( int i = 0; i < (int)vlBlowIDsToRemove.size(); ++i )
hMember->CmdRemoveStateEffectFromID( vlBlowIDsToRemove.at(i) );
}
}
m_setPartyMemberInAura.clear();
m_mapAuraMemberSEID.clear();
}
m_bAuraOff = true;
}