DragonNest/GameCommon/DnUsingSkillWhenDieBlow.h
2024-12-19 09:48:26 +08:00

77 lines
2.3 KiB
C++

#pragma once
#include "DnBlow.h"
/*
이슈 #16331
새로운 스킬 효과가 필요해서 요청 드립니다.
<스킬 효과를 필요로 하는 상황>
아사이샤먼이 아군에게 버프를 시전하게 되면
버프를 받은 몬스터들은 체력이0이 될 경우
스킬을 시전하며 죽게 됩니다.(예: 챠지 볼트)
<효과 정의>
버프 형태의 스킬로
해당 버프가 걸린 경우 체력이0이 되면
죽으면서 스킬을 시전하게 됩니다.
<개발요청내역>
1. SkillTable의 효과종류(_EffectClass)에 새로운 효과 추가(예:DieSkill)
2. SKillLevelTable의 효과수치(_EffectClassValue)에 사용할 스킬 인덱스와 스킬의 레벨을 지정할 수 있도록 한다.
기획팀이 구두로 자세히 물어본 내용은 다음과 같습니다.
- 이 상태효과가 걸려있는 몬스터들은 죽을 때 100% 스킬을 사용하면서 죽는다.
- 죽으면서 스킬을 쓸 때는 일반적으로 죽을 때와 마찬가지로 무적 상태가 된다.
- 현재로썬 죽을 때 특정 액션을 하는 스킬은 없으나 추후엔 추가될지도 모른다.
- 현재는 느려짐, 결빙, 챠지볼트 번개 정도가 고려됨.
*/
class CDnInvincibleBlow;
class CDnUsingSkillWhenDieBlow : public CDnBlow
{
private:
bool m_bDead; // 죽은 상태임. OnDie 호출된 상태.
bool m_bUsedDieSkill; // 죽을 때 스킬 사용됐음.
public:
CDnUsingSkillWhenDieBlow( DnActorHandle hActor, const char* szValue );
virtual ~CDnUsingSkillWhenDieBlow( void );
#ifdef _GAMESERVER
virtual bool CanBegin( void );
#endif
virtual void OnBegin( LOCAL_TIME LocalTime, float fDelta );
virtual void Process( LOCAL_TIME LocalTime, float fDelta );
virtual void OnEnd( LOCAL_TIME LocalTime, float fDelta );
void OnDie( void );
// 죽어서 스킬이 나갔는지 안나갔는지.
bool IsUsedSkill( void ) { return m_bUsedDieSkill; };
#if defined(_GAMESERVER)
#else
//#44884 서버/클라이언트 동기화 문제로 서버에서 플래그 설정될때 패킷을 보내서 동기화 시킴.
void ShowGraphicEffect(bool bShow) {
m_bUsedDieSkill = bShow;
}
#endif // _GAMESERVER
#if defined(PRE_FIX_44884)
protected:
DnActorHandle m_FinalHitterActor; //Die 호출한 액터 저장..
public:
void SetFinalHitterActor(DnActorHandle hHitter) { m_FinalHitterActor = hHitter; }
#endif // PRE_FIX_44884
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
public:
static void AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue);
static void RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue);
#endif // PRE_ADD_PREFIX_SYSTE_RENEW
};