DragonNest/Server/DNGameServer/DnSkillPropComponent.cpp

243 lines
17 KiB
C++
Raw Normal View History

2024-12-20 16:56:44 +08:00
<EFBFBD><EFBFBD>#include "StdAfx.h"
#include "DnSkillPropComponent.h"
#include "DnTableDB.h"
#include "EtMatrixEx.h"
#include "DnWorldProp.h"
#include "DnProjectile.h"
#include "DnMonsterActor.h"
CDnSkillPropComponent::CDnSkillPropComponent(void)
{
}
CDnSkillPropComponent::~CDnSkillPropComponent(void)
{
SAFE_RELEASE_SPTR( m_hSkill );
}
void CDnSkillPropComponent::Initialize( int iSkillID, int iSkillLevel )
{
if( iSkillID == 0 || iSkillLevel == 0 )
return;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>`<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>1<EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
DNTableFileFormat* pSkillTable = GetDNTable( CDnTableDB::TSKILL );
DNTableFileFormat* pSkillLevelTable = GetDNTable( CDnTableDB::TSKILLLEVEL );
vector<int> vlSkillLevelList;
if( pSkillLevelTable->GetItemIDListFromField( "_SkillIndex", iSkillID, vlSkillLevelList ) <= 0 )
{
_ASSERT( !"Ս<>t<EFBFBD> <00><><EFBFBD><EFBFBD><58> <00>¬<EFBFBD><C2AC><EFBFBD><1C> <00>¬<EFBFBD> x<>q<EFBFBD><71><EFBFBD>|<7C> <00>¬<EFBFBD> <08><><EFBFBD> L<>t<EFBFBD><14><><EFBFBD><1C> ><3E>D<EFBFBD> <18> <00><>L<EFBFBD>." );
//return false;
}
int iSkillLevelTableID = -1;
for( int i = 0; i < (int)vlSkillLevelList.size(); ++i )
{
int iNowLevel = pSkillLevelTable->GetFieldFromLablePtr( vlSkillLevelList.at(i), "_SkillLevel" )->GetInteger();
if( iNowLevel == iSkillLevel )
{
iSkillLevelTableID = vlSkillLevelList.at( i );
break;
}
}
_ASSERT( -1 != iSkillLevelTableID && "Ս<>t<EFBFBD> <00><><EFBFBD><EFBFBD><58> <00>¬<EFBFBD>X<EFBFBD> t<><74><EFBFBD> <08><><EFBFBD>t<EFBFBD> <00><>L<EFBFBD>." );
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> \<EFBFBD>)<EFBFBD>
CDnSkill::StateEffectStruct StateEffect;
char caLable[ 64 ];
ZeroMemory( caLable, sizeof(caLable) );
for( int i = 0; i < CDnSkill::MAX_STATE_EFFECT_COUNT; ++i )
{
sprintf_s( caLable, "_EffectClass%d", i + 1 );
StateEffect.nID = pSkillTable->GetFieldFromLablePtr( iSkillID, caLable )->GetInteger();
if( StateEffect.nID < 1 )
continue;
sprintf_s( caLable, "_EffectClass%dApplyType", i + 1 );
StateEffect.ApplyType = (CDnSkill::StateEffectApplyType)pSkillTable->GetFieldFromLablePtr( iSkillID, caLable )->GetInteger();
sprintf_s( caLable, "_EffectClassValue%d", i + 1 );
StateEffect.szValue = pSkillLevelTable->GetFieldFromLablePtr( iSkillLevelTableID, caLable )->GetString();
sprintf_s( caLable, "_EffectClassValue%dDuration", i + 1 );
StateEffect.nDurationTime = pSkillLevelTable->GetFieldFromLablePtr( iSkillLevelTableID, caLable )->GetInteger();
m_vlStateEffectList.push_back( StateEffect );
}
m_SkillInfo.iSkillID = iSkillID;
m_SkillInfo.iSkillLevelID = iSkillLevelTableID;
m_SkillInfo.iLevel = iSkillLevel;
m_SkillInfo.eDurationType = (CDnSkill::DurationTypeEnum)pSkillTable->GetFieldFromLablePtr( iSkillID, "_DurationType" )->GetInteger();
m_SkillInfo.eTargetType = (CDnSkill::TargetTypeEnum)pSkillTable->GetFieldFromLablePtr( iSkillID, "_TargetType" )->GetInteger();
m_SkillInfo.iSkillDuplicateMethod = pSkillTable->GetFieldFromLablePtr( iSkillID, "_SkillDuplicate" )->GetInteger();
m_SkillInfo.iDuplicateCount = pSkillTable->GetFieldFromLablePtr( iSkillID, "_EffectAmassCount" )->GetInteger();
m_SkillInfo.iDissolvable = pSkillTable->GetFieldFromLablePtr( iSkillID, "_Dissolvable" )->GetInteger();
// <EFBFBD><EFBFBD><EFBFBD> Ս<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȴt<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> Ս<EFBFBD><EFBFBD><EFBFBD><EFBFBD> D<EFBFBD>o<EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD>t<EFBFBD>|<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> K<EFBFBD><EFBFBD>.
m_SkillInfo.bFromBuffProp = true;
}
void CDnSkillPropComponent::OnSignal( DnActorHandle hActor, DnPropHandle hProp, SignalTypeEnum Type, void *pPtr, LOCAL_TIME LocalTime,
LOCAL_TIME SignalStartTime, LOCAL_TIME SignalEndTime, int nSignalIndex )
{
switch( Type )
{
case STE_Projectile:
{
ProjectileStruct *pStruct = (ProjectileStruct *)pPtr;
MatrixEx LocalCross = *hProp->GetMatEx();
CDnProjectile *pProjectile = CDnProjectile::CreateProjectile( hProp->GetRoom(), hActor, LocalCross, pStruct );
if( pProjectile == NULL ) break;
pProjectile->SetShooterProp( hProp );
if( m_SkillInfo.iSkillID != 0 )
{
int iNumStateEffect = (int)m_vlStateEffectList.size();
for( int iStateEffect = 0; iStateEffect < iNumStateEffect; ++iStateEffect )
pProjectile->AddStateEffect( m_vlStateEffectList.at(iStateEffect) );
if( !m_hSkill )
m_hSkill = CDnSkill::CreateSkill( hActor, m_SkillInfo.iSkillID, m_SkillInfo.iLevel );
pProjectile->SetParentSkill( m_hSkill );
pProjectile->SetParentSkillInfo( m_SkillInfo );
//bool bActorAttachWeapon = false;
//if( pStruct->nWeaponTableID == 0 && GetWeapon(1) ) bActorAttachWeapon = true;
//OnProjectile( pProjectile, bActorAttachWeapon );
//OnSkillProjectile( pProjectile );
}
}
break;
default:
hActor->OnSignal( Type, pPtr, LocalTime, SignalStartTime, SignalEndTime, nSignalIndex );
break;
}
}
#ifdef PRE_ADD_HIT_PROP_ADD_SE
//void CDnSkillPropComponent::ApplyStateBlowsToTheseTargets( DnActorHandle hPropActor, DNVector(DnActorHandle)& vlhActors )
void CDnSkillPropComponent::ApplyStateBlowsToTheseTargets( DnActorHandle hPropActor, DNVector(DnActorHandle)& vlhActors, HitStruct * pStruct )
{
if( !m_hSkill )
m_hSkill = CDnSkill::CreateSkill( hPropActor, m_SkillInfo.iSkillID, m_SkillInfo.iLevel );
if( !m_hSkill )
return;
int iNumActorApplyStateEffect = (int)vlhActors.size();
for( int i = 0; i < iNumActorApplyStateEffect; ++i )
{
// <EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD>L<EFBFBD><EFBFBD>%<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>|<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD> ȩ<EFBFBD> 4<EFBFBD><EFBFBD><EFBFBD>
if (vlhActors[ i ]->IsAppliedThisStateBlow(STATE_BLOW::BLOW_149))
continue;
// Ս<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>׸<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ō<EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij]<EFBFBD> <EFBFBD>̬<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ј<EFBFBD> <EFBFBD><EFBFBD>tǴŘ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD> ɩ<EFBFBD> <EFBFBD>̬<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD>l<EFBFBD><EFBFBD>t<EFBFBD>
// a<EFBFBD>0<EFBFBD>X<EFBFBD> hit signal <EFBFBD>̬<EFBFBD>@<EFBFBD> ٳ|<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD>8<EFBFBD><EFBFBD>|<EFBFBD> \<EFBFBD><EFBFBD><EFBFBD>.
//// <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> $<EFBFBD><EFBFBD>t<EFBFBD> D<EFBFBD>p<EFBFBD>x<EFBFBD><EFBFBD> <EFBFBD>П<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD> ȩ<EFBFBD>D<EFBFBD> l<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
//switch( m_hSkill->GetTargetType() )
//{
// case CDnSkill::Enemy:
// case CDnSkill::Self:
// if( hPropActor->GetTeam() == vlhActors[ i ]->GetTeam() )
// continue;
// break;
// case CDnSkill::Friend:
// case CDnSkill::Party:
// if( hPropActor->GetTeam() != vlhActors[ i ]->GetTeam() )
// continue;
// break;
// // <EFBFBD>¬<EFBFBD> ȩ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> D<EFBFBD>p<EFBFBD>/<EFBFBD>p<EFBFBD> Ȁ<EFBFBD> <EFBFBD><EFBFBD> |<EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD> ȩ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȩ<EFBFBD> <EFBFBD>ŀ<EFBFBD>|<EFBFBD> l<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>|<EFBFBD> \<EFBFBD><EFBFBD><EFBFBD>.
// case CDnSkill::All:
// break;
//}
// // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD> Add <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ɍ<EFBFBD> l<EFBFBD><EFBFBD><EFBFBD> x<EFBFBD>q<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD> <EFBFBD>.
// // t<EFBFBD><EFBFBD><EFBFBD> ActorX<EFBFBD> <EFBFBD>ɍ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> l<EFBFBD><EFBFBD><EFBFBD> x<EFBFBD>q<EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> l<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> 1<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>´<EFBFBD>.
// map<int, bool> mapDuplicateResult;
// CDnSkill::CanApply eResult = CDnSkill::CanApplySkillStateEffect( vlhActors[i], m_hSkill, mapDuplicateResult );
// if( CDnSkill::CanApply::Fail != eResult )
// {
for( DWORD k = 0; k < m_hSkill->GetStateEffectCount(); k++ )
{
CDnSkill::StateEffectStruct *pLocalStruct = m_hSkill->GetStateEffectFromIndex(k);
//
//#if defined(PRE_ADD_SKIP_STATEBLOW)
// #74389 [p<EFBFBD>ȸ<EFBFBD> ܴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] HitStateEffect <EFBFBD><EFBFBD>1<EFBFBD> Ս<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if( pStruct && pStruct->szSkipStateBlows && CDnSkill::IsSkipStateBlow(pStruct->szSkipStateBlows, (STATE_BLOW::emBLOW_INDEX)pLocalStruct->nID) )
continue;
//#endif // PRE_ADD_SKIP_STATEBLOW
//
// // D<EFBFBD>p<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȕ<EFBFBD> <EFBFBD>¬<EFBFBD>X<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Self <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Target <EFBFBD><EFBFBD> P<EFBFBD> <EFBFBD>X<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ň<EFBFBD><EFBFBD><EFBFBD>.
// // Self <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ō<EFBFBD> t<EFBFBD><EFBFBD><EFBFBD> ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>4<EFBFBD> Hit <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>t<EFBFBD>0<EFBFBD> <EFBFBD><EFBFBD>8<EFBFBD><EFBFBD><EFBFBD> Target ̹ ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// switch( pLocalStruct->ApplyType )
// {
// case CDnSkill::ApplySelf:
// continue;
// break;
//
// case CDnSkill::ApplyTarget:
// break;
//
// case CDnSkill::ApplyEnemy:
// if( hPropActor->GetTeam() == vlhActors[ i ]->GetTeam() )
// continue;
// break;
//
// case CDnSkill::ApplyFriend:
// if( hPropActor->GetTeam() != vlhActors[ i ]->GetTeam() )
// continue;
// break;
// }
//
// // <EFBFBD>@<EFBFBD> <EFBFBD>¬<EFBFBD> ɩ<EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> U<EFBFBD>`<EFBFBD> <EFBFBD><EFBFBD>l<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>@<EFBFBD> t<EFBFBD><EFBFBD><EFBFBD> CanApplySkillStateEffect <EFBFBD><EFBFBD><EFBFBD> U<EFBFBD>`<EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>. 0<EFBFBD>|<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>0<EFBFBD> <EFBFBD> U<EFBFBD>`<EFBFBD> <EFBFBD><EFBFBD>l<EFBFBD> <EFBFBD>t<EFBFBD><EFBFBD><EFBFBD> U<EFBFBD>x<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>p<EFBFBD>|<EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> U<EFBFBD>`<EFBFBD> <EFBFBD><EFBFBD>l<EFBFBD> H<EFBFBD>X<EFBFBD>ij]<EFBFBD> h<EFBFBD><EFBFBD> 8֜<EFBFBD> t<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// bool bAllowAddThisSE = true;
// bool bCheckCanBegin = true;
// if( CDnSkill::ApplyDuplicateSameSkill == eResult )
// {
// map<int, bool>::iterator iter = mapDuplicateResult.find( pLocalStruct->nID );
// // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ŕ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֬<EFBFBD> a<EFBFBD>0<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x<EFBFBD>$<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> J<EFBFBD><<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>‰<EFBFBD>.
// if( mapDuplicateResult.end() != iter )
// {
// // <EFBFBD>@<EFBFBD> <EFBFBD>¬<EFBFBD>X<EFBFBD> U<EFBFBD>`<EFBFBD><EFBFBD>ǔ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֬<EFBFBD> x<EFBFBD>$<EFBFBD><EFBFBD>Ǵ<EFBFBD><EFBFBD> CanAdd |<EFBFBD> 8֜<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><ǘ<EFBFBD> <EFBFBD><EFBFBD>(ӈ<EFBFBD>L<EFBFBD>.
// // t<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.
// if( false == (iter->second) )
// bAllowAddThisSE = false;
// else
// // t<EFBFBD><EFBFBD><EFBFBD> CanAdd |<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> CmdAddStateEffect 8֜<EFBFBD> <EFBFBD><EFBFBD> 0<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD>l<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> J<EFBFBD>ij]<EFBFBD> t<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// bCheckCanBegin = false;
// }
// }
//if( bAllowAddThisSE )
//{
//// <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>]<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ǔ<EFBFBD> <EFBFBD>p<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>|<EFBFBD>`<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ш<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>d<EFBFBD><EFBFBD><EFBFBD>. [2010/12/08 semozz]
//vlhActors[i]->RemoveResetStateBlow();
vlhActors[i]->CmdAddStateEffect( m_hSkill->GetInfo(), (STATE_BLOW::emBLOW_INDEX)pLocalStruct->nID,
pLocalStruct->nDurationTime, pLocalStruct->szValue.c_str()/*, false, bCheckCanBegin*/ );
//}
}
//}
// <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ]<EFBFBD><EFBFBD><EFBFBD><<EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD>K<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD> [2010/12/09 semozz]
//vlhActors[i]->InitStateBlowIDToRemove();
}
}
#endif // #ifdef PRE_ADD_HIT_PROP_ADD_SE