68 lines
1.9 KiB
C++
68 lines
1.9 KiB
C++
//------------------------------------------------------------------------------
|
|
// SkillStateDarkForce.cpp
|
|
// (C) 2008 Webzen Sunstudio
|
|
//------------------------------------------------------------------------------
|
|
#include "SunClientPrecompiledHeader.h"
|
|
#include "statebase.h"
|
|
#include "SkillState.h"
|
|
#include "SkillStateDarkForce.h"
|
|
#include "ProjectileManagerEx.h"
|
|
#include "Character.h"
|
|
#include "Hero.h"
|
|
#include "Camera.h"
|
|
#include "SkillInfoParser.h"
|
|
|
|
|
|
BOOL SkillStateDarkForce::OnProcessCustemEvent( int nEventIndex, Object* pOwner, DWORD CurTime,DWORD dwTick )
|
|
{
|
|
if( nEventIndex == 1 )
|
|
{
|
|
Character* pCharacter = (Character*)pOwner;
|
|
SkillScriptInfo* pInfo = GetSkillInfo();
|
|
|
|
if( pCharacter != NULL && pInfo != NULL )
|
|
{
|
|
|
|
BOOL IsHeroCharacter = g_pHero->GetObjectKey() == pCharacter->GetObjectKey();
|
|
|
|
WzVector StartPosition = pCharacter->GetWeaponBonePos(0) + pCharacter->GetDirection() * 1.3f;
|
|
WzVector TargetPosition = pCharacter->GetCurrentAction()->SKILL.vTargePos;
|
|
|
|
float fSkillRange=((float)pInfo->m_wSkillRange / 10.0f);
|
|
float fRate = VectorLength(&(TargetPosition-StartPosition))/fSkillRange;
|
|
DWORD MoveTime = min(220,max(100,(DWORD)(200.f*fRate)) );
|
|
|
|
cProjectileUnit* pProjectile = new cProjectileUnit();
|
|
pProjectile->SetArrowStartPosition( StartPosition );
|
|
pProjectile->SetArrowTargetPosition( TargetPosition );
|
|
pProjectile->SetLifeTime( MoveTime );
|
|
pProjectile->CreateEffect( StrToWzID("K837"), pCharacter->GetObjectKey(), 0 );
|
|
pProjectile->SetHitData( pCharacter->GetObjectKey(), pCharacter->GetCurrentAttackSerial(), StrToWzID("K838"), IsHeroCharacter, 0, TRUE );
|
|
g_ProjectileManagerEx.InsertProjectile( pProjectile );
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|