#pragma once #include "DnUnknownRenderObject.h" #include "EtMatrixEx.h" #include "DnActionBase.h" #include "DnActor.h" #include "Timer.h" #include "DnWeapon.h" #include "DnCalcCatmullrom.h" #include "DnSkill.h" class CDnProjectile; class CDnWeapon; class IDnOrbitProcessor; class CDnProjectile : public CDnWeapon, public TBoostMemoryPool { public: CDnProjectile( CMultiRoom *pRoom, DnActorHandle hActor, bool bProcess = true, bool bIncreaseUniqueID = true ); virtual ~CDnProjectile(); // ±ËÀû ŸÀÔ enum OrbitTypeEnum { Linear, // µî¼Óµµ SetSpeed Acceleration, // °¡¼Óµµ SetSpeed, SetResistance Homing, // À¯µµ SetSpeed TerrainLinear, // ¹Ù´Ú Ÿ°í µî¼Óµµ SetSpeed Projectile, // Æ÷¹°¼± SetSpeed TerrainHoming, // ¹Ù´Ú Ÿ°í µî¼Óµµ È£¹Ö SetSpeed OrbitTypeCount, }; // ¼Ò¸ê½Ã ŸÀÔ enum DestroyOrbitTypeEnum { Instantly, // Áï½Ã »ç¶óÁü FallGravity, // Á߷°ª ¹ÞÀ¸¸ç ¶³¾îÁü RangeFallGravity, // ±âº»ÀûÀ¸·Î´Â FallGravity ¿Í °°À¸³ª »ç°Å¸® ´Ù µÇ¸é ¹Ù·Î Destroy. (Ŭ¶óÀÌ¾ðÆ®¿¡¼­´Â Destroy ¾×¼Ç ½ÇÇà) }; // ¹ß»çü°¡ ´ë¹ÌÁö¸¦ ÁÙ ¼ö ¾ø°Ô µÇ´Â ŸÀÔ enum ValidTypeEnum { WeaponLength = 0x01, // ¹«±â ±æÀÌ ÀÌ»ó ³¯¾Æ°¬À» °æ¿ì Time = 0x02, // ÀÏÁ¤ ½Ã°£ ÀÌÈÄ Stick = 0x04, // ¶¥À̳ª Prop ¿¡ ¹ÚÈ÷´Â °æ¿ì }; // Ÿ°Ù ŸÀÔ enum TargetTypeEnum { CrossHair = 0, // Å©·Î½º Çì¾î Direction, // Actor ÀÇ View ¹æÇâ TargetPosition, // Ÿ°ÙÀÇ À§Ä¡ Target, // Ÿ°Ù DestPosition, // ¾×¼ÇÅø¿¡¼­ ¹Ú¾Æ³õÀº ¸ñÀûÁö Shooter, // Ÿ°Ù ŸÀÔÀº Target À¸·Î ÁöÁ¤µÇ¸ç ¹ß»çü¸¦ ¹ß»çÇÑ ¾×ÅÍ·Î µÊ. ¿ì¼± ¸ó½ºÅÍ¿¡¼­¸¸ »ç¿ëÇϱ⠶§¹®¿¡ °Å±â±îÁö¸¸ ÀÛ¾÷µÊ. TargetTypeCount, }; // °¡¼Óµµ/µî¼Óµµ ŸÀÔ. Orbit ŸÀÔÀÌ Projectile À̰ųª Homing ÀÎ °æ¿ì¿¡¸¸ À¯È¿. enum VelocityTypeEnum { Constant, // µðÆúÆ®. µî¼Óµµ·Î ÇÁ·ÎÁ§Å¸ÀÏ ³¯¾Æ°¨. Accell, // ÇÁ·ÎÁ§Å¸ÀÏ °¡¼Óµµ ¸ÔÀ½. VelocityTypeCount, }; protected: IDnOrbitProcessor* m_pOrbitProcessor; static int s_iHitUniqueID; int m_iHitUniqueID; DnActorHandle m_hShooter; MatrixEx m_Cross; MatrixEx m_OffsetCross; EtVector3 m_vPrevPos; EtVector3 m_vStartPos; EtVector3 m_vHitPos; LOCAL_TIME m_InvalidLocalTime; LOCAL_TIME m_CreateLocalTime; OrbitTypeEnum m_OrbitType; DestroyOrbitTypeEnum m_DestroyOrbitType; TargetTypeEnum m_TargetType; ValidTypeEnum m_ValidType; CDnDamageBase::SHitParam m_HitParam; bool m_bValidDamage; bool m_bFallGravity; bool m_bStick; float m_fGravity; float m_fSpeed; float m_fResistance; int m_nValidTime; int m_nDestroyOrbitTimeGap; bool m_bFirstProcess; DnSkillHandle m_hParentSkill; std::vector m_VecStateEffectList; std::vector m_ComboLimitStateEffectList; HitStruct m_HitStruct; DnActorHandle m_hTargetActor; EtVector3 m_vTargetPosition; CDnCalcCatmullRom m_CatmullRom; CDnHoming m_Homing; bool m_bOnCollisionCalled; bool m_bPierce; LOCAL_TIME m_LastHitSignalEndTime; // Æø¹ßÇü ÇÁ·ÎÁ§Å¸ÀÏÀÎ °æ¿ì ÇÑ ¹ø hit µÈ ³à¼®¿¡°Õ Æø¹ß µ¥¹ÌÁö¸¦ ÁÖÁö ¾Êµµ·Ï ÇÑ´Ù.. vector m_VecHittedActor; CDnSkill::SkillInfo m_ParentSkillInfo; bool m_bHasHitAction; // hit ¾×¼Ç(Æø¹ß)À» °®°í ÀÖ´Â ÇÁ·ÎÁ§Å¸ÀÏÀÎ bool m_bHasHitSignalInHitAction; // Hit ¾×¼Ç¿¡¼­ Hit ½Ã±×³ÎÀ» °®°í Àִ°¡. bool m_bHasHitSignalInShootAction; // Shoot ¾×¼Ç¿¡¼­ Hit ½Ã±×³ÎÀ» °®°í Àִ°¡. bool m_bHitSignalProcessed; bool m_bBombHitSignalStarted; // 2009.7.29 Çѱâ - Æø¹ß½Ã È÷Æ® ½Ã±×³ÎÀÌ µÚ¿¡ ÀÖ´Â °æ¿ì°¡ ÀÖÀ¸¹Ç·Î µÚ¿¡ ÀÖ´Â ÄÉÀ̽º°¡ À־ È÷Æ® ½Ã±×³Î ½ÃÀÛ ½Ã¿¡ Ç÷¡±× ÄÑÁÜ. bool m_bHitActionStarted; int m_iShootActionIndex; int m_iHitActionIndex; int m_iDestroyActionIndex; bool m_bHasDestroyAction; VelocityTypeEnum m_VelocityType; LOCAL_TIME m_nLastHitSignalIndex; float m_fElapsedTime; int m_nMaxHitCount; // °üÅëÇü(bPierce == true) ÀÎ °æ¿ì¿¡¸¸ À¯È¿ÇÑ ÃÖ´ë È÷Æ® °ª. map m_mapMaxHitCount; // »ý¼º Á¤º¸ÀÇ Æ÷ÀÎÅ͸¦ ¹°°í Àִ´Ù. int m_iShooterShootActionIndex; // ÀÌ ÇÁ·ÎÁ§Å¸ÀÏÀ» ¹ß»çÇÑ ¾×¼Ç À妽º int m_iSignalArrayIndex; // ÀÌ ÇÁ·ÎÁ§Å¸ÀÏ ½Ã±×³ÎÀÇ array index boost::shared_ptr m_pProjectileSignal; boost::shared_ptr m_pShooterState; #ifdef PRE_ADD_PROJECTILE_SE_INFO boost::shared_ptr m_pShooterStateBlow; #endif // üÀÎ °ø°Ý »óÅÂÈ¿°ú¿¡¼­¸¸ ¾²´Â ½ÇÁ¦ »óÅÂÈ¿°ú °É·Á¼­ ÀÌ ÇÁ·ÎÁ§Å¸ÀÏÀ» ½ð ¾×ÅÍ DnActorHandle m_hPrevAttacker; // üÀÎ °ø°Ý »óÅÂÈ¿°ú¿¡¼­ ¾²°í ÀÖ´Â ½ºÅ³ Å×ÀÌºí¿¡ Á¤ÀǵǾîÀÖ´Â hit prob °ª. float m_fHitApplyPercent; // // ÇöÀç Æø¹ßÇÏ´Â ¹ß»çü°¡ ¿µ¿ª hit ½Ã±×³ÎÀ» »ç¿ëÇϰí ÀÖ´ÂÁö. (ex) summon blackhole bool m_bProcessingBombHitSignal; // ÇÁ¶ø¿¡¼­ ½ð ¹ß»çü¶ó¸é ±â¾ïÇØµ×´Ù°¡ Ãæµ¹ üũ¿¡¼­ »«´Ù. DnPropHandle m_hShooterProp; bool m_bFromCharger; float m_fProjectileOrbitRotateZDegree; // ÆÐŶ ´Þ¶ó°í ÇÒ ¶§ ±îÁö ÆÐŶ ½ºÆ®¸² °´Ã¼´Â »ý¼º ¾ÈµÊ. char* m_pPacketBuffer; CPacketCompressStream* m_pPacketStream; // hit µÈ ´ë»óÀ» µû¶ó°¡´Â ±â´É. (#22666) bool m_bTraceHitTarget; bool m_bTraceHitActorHittable; DnActorHandle m_hTraceActor; ////////////////////////////////////////////////////////////////////////// // ¿ÜºÎ¿¡¼­ °­Á¦·Î ÁöÁ¤ÇØÁØ ¹æÇâ. ÇöÀç ´ëÆ÷¿¡¼­ ¾²ÀÓ. (¸ó½ºÅÍÀÇ ¹ß»çü ÆÐŶ¿¡¼­¸¸ ¾²ÀÓ..) EtVector3 m_vForceDir; bool m_bUseForceDir; char m_cShooterType; DWORD m_dwShooterUniqueID; INT64 m_nShooterSerialID; int m_nShooterActionIndex; int m_nShooterSignalIndex; ElementEnum m_eForceHitElement; // #41382 ¸ó½ºÅÍ ¼Òȯ ¹ß»çüÀÎ °æ¿ì 167¹ø »óÅÂÈ¿°ú·Î ¼ÒȯµÈ ¸ó½ºÅÍÀÇ ½ºÅ³·¹º§ °­Á¦ ÁöÁ¤ °ªÀÌ ÀÖ´Ù¸é Àû¿ëÇÑ´Ù. // ÀÌ¹Ì ¹ß»çü°¡ ¶¥¿¡ ¶³¾îÁ® ¼ÒȯµÇ´Â ½ÃÁ¡¿¡¼­´Â 167¹ø »óÅÂÈ¿°ú°¡ Á¦°ÅµÈ »óȲÀÏ ¼ö ÀÖ´Ù. // (À̵¿Çϰųª ¸Â°Å³ªÇϼ­ ½ºÅ³ ¾×¼ÇÀÌ Á¾·áµÇ¾î ÀÚ±â Àڽſ¡°Ô ºÎ¿©ÇÑ »óÅÂÈ¿°ú°¡ Á¦°ÅµÈ °æ¿ì) int m_iSummonMonsterForceSkillLevel; protected: void MakeHitParam( CDnDamageBase::SHitParam &HitParam ); void ProcessOrbit( LOCAL_TIME LocalTime, float fDelta ); void ProcessValid( LOCAL_TIME LocalTime, float fDelta ); bool ProcessDamage( LOCAL_TIME LocalTime, float fDelta, LOCAL_TIME SignalStartTime, LOCAL_TIME SignalEndTime, int nSignalIndex, BOOL bUseHitSignalArea ); DnPropHandle _CheckPropCollision( EtVector3& vCenter, float fLength, float& fPropContactDistance, float& fPropContactTime ); void ProcessDestroyOrbit( LOCAL_TIME LocalTime, float fDelta ); void CheckAndApplyDamage( DnActorHandle hActor, bool bValidDamageGoOn = true, int* nHitCount = NULL ); bool SetTraceActor( DnActorHandle hActor, bool bValidDamageGoOn ); public: OrbitTypeEnum GetOrbitType() { return m_OrbitType; } DestroyOrbitTypeEnum GetDestroyOrbitType() { return m_DestroyOrbitType; } TargetTypeEnum GetTargetType() { return m_TargetType; } MatrixEx *GetMatEx() { return &m_Cross; } void SetSpeed( float fValue ) { m_fSpeed = fValue; } float GetSpeed() { return m_fSpeed; } void SetResistance( float fValue ) { m_fResistance = fValue; } float GetResistance() { return m_fResistance; } void SetValidTime( int nValidTime ) { m_nValidTime = nValidTime; if( 0 < nValidTime ) m_ValidType = (ValidTypeEnum)( m_ValidType | Time ); }; int GetValidTime( void ) { return m_nValidTime; }; EtVector3 *GetTargetPosition() { return &m_vTargetPosition; } DnActorHandle GetTargetActor() { return m_hTargetActor; } void SetTargetActor( DnActorHandle hActor, bool bUpdateTargetPartsIndex = true );// { m_hTargetActor = hActor; }; void SetTargetPosition( EtVector3 &vPos ) { m_vTargetPosition = vPos; } void SetValidType(ValidTypeEnum ValidType) { m_ValidType = ValidType; } void SetDestroyOrbitTime( int nValue ) { m_nDestroyOrbitTimeGap = nValue; } bool Initialize( MatrixEx &Offset, OrbitTypeEnum OrbitType, DestroyOrbitTypeEnum DestroyType, TargetTypeEnum TargetType ); // Á¤Àû ¸â¹ö ÇÔ¼öÀÎ CreateProjectile... ÇÔ¼ö¸¦ ÅëÇØ »ý¼ºÇÑ °ÍÀÌ ¾Æ´Ï¶ó Á÷Á¢ new ·Î »ý¼ºÇؼ­ ½ÇÁ¦·Î ¹ß»çµÇ¾î ³¯¾Æ°¡´Â °æ¿ì, // Initialize ÇÔ¼ö¿Í ¸¶Âù°¡Áö·Î ¹ß»çü »ý¼º ÈÄ ¼³Á¤ ³¡³ª°í ¸¶Áö¸·¿¡ ÀÌ ÇÔ¼ö¸¦ ²À È£ÃâÇØÁÖ¾î¾ß ÇÑ´Ù. bool PostInitialize( void ); void OnDamageSuccess( DnActorHandle hDamagedActor, CDnDamageBase::SHitParam &HitParam ); virtual void Process( LOCAL_TIME LocalTime, float fDelta ); // CDnActionBase virtual void OnSignal( SignalTypeEnum Type, void *pPtr, LOCAL_TIME LocalTime, LOCAL_TIME SignalStartTime, LOCAL_TIME SignalEndTime, int nSignalIndex ); void SetParentSkill( DnSkillHandle hParentSkill ) { m_hParentSkill = hParentSkill; if (hParentSkill) m_ParentSkillInfo = *(hParentSkill->GetInfo()); m_ParentSkillInfo.hSkillUser = m_hShooter; }; void SetParentSkillInfo( CDnSkill::SkillInfo& SkillInfo ) { m_ParentSkillInfo = SkillInfo; m_ParentSkillInfo.hSkillUser = m_hShooter; m_iShooterShootActionIndex = m_ParentSkillInfo.iProjectileShootActionIndex; m_iSignalArrayIndex = m_ParentSkillInfo.iProjectileSignalArrayIndex; m_hPrevAttacker = m_ParentSkillInfo.hPrevAttacker; } void AddStateEffect( CDnSkill::StateEffectStruct &Struct ); void OnCollisionWithActor( void ); void OnCollisionWithGround( void ); void OnCollisionWithProp( void ); void OnChangedNextActionToHit( void ); // ¾×¼Ç Åø¿¡¼­ shoot ¾×¼Ç¿¡¼­ next ¾×¼ÇÀ» hit ·Î ¼³Á¤Çسõ¾Æ¼­ ÀÚµ¿À¸·Î Æø¹ßÇÏ´Â ¹ß»çüÀÎ °æ¿ì¿£ ¾×¼ÇÀÌ ¹Ù²ï ½ÃÁ¡¿¡¼­ ó¸®ÇÒ °Íµé ó¸®ÇØÁØ´Ù. void SetPierce( bool bPierce ) { m_bPierce = bPierce; }; bool GetPierce( void ) { return m_bPierce; }; void FromSkill( bool bFromSkill ) { m_HitParam.bFromProjectileSkill = bFromSkill; }; bool IsFromSkill() { return m_HitParam.bFromProjectileSkill; } void SetVelocityType( VelocityTypeEnum VelocityType ) { m_VelocityType = VelocityType; }; VelocityTypeEnum GetVelocityType( void ) { return m_VelocityType; }; void SetMaxHitCount( int iMaxHitCount ) { m_nMaxHitCount = iMaxHitCount; }; int GetMaxHitCount( void ) { return m_nMaxHitCount; }; virtual void OnChangeAction( const char *szPrevAction ); virtual void OnFinishAction( const char* szPrevAction, LOCAL_TIME time ); void SetProjectileSignal( boost::shared_ptr& pProjectileStruct ) { m_pProjectileSignal = std::move(pProjectileStruct); }; boost::shared_ptr& GetProjectileSignal( void ) { return m_pProjectileSignal; }; void SetShootActionIndex( int iActionIndex ) { m_iShooterShootActionIndex = iActionIndex; }; void SetSignalArrayIndex( int iSignalArrayIndex ) { m_iSignalArrayIndex = iSignalArrayIndex; }; // ½ºÅ³·Î ¹ß»çµÇ´Â °æ¿ì¿¡¸¸ ÀúÀåÇØ µÐ´Ù. void SetShooterStateSnapshot( boost::shared_ptr& pShooterState ) { m_pShooterState = std::move(pShooterState); }; boost::shared_ptr& GetShooterStateSnapshot( void ) { return m_pShooterState; }; #ifdef PRE_ADD_PROJECTILE_SE_INFO void SetShooterStateBlow( boost::shared_ptr& pShooterStateBlow ) { m_pShooterStateBlow = std::move(pShooterStateBlow);}; boost::shared_ptr& GetShooterStateBlow( void ) { return m_pShooterStateBlow; }; #endif void SetHitApplyPercent( float fHitApplyPercent ) { m_fHitApplyPercent = fHitApplyPercent; }; DnActorHandle GetShooterActor( void ) { return m_hShooter; }; DnSkillHandle GetParentSkill( void ) { return m_hParentSkill; }; void SetShooterProp( DnPropHandle hProp ) { m_hShooterProp = hProp; }; void FromCharger( void ) { m_bFromCharger = true; }; bool IsFromCharger( void ) { return m_bFromCharger; }; void SetProjectileOrbitRotateZ( float fProjectileOrbitRotateZ ) { m_fProjectileOrbitRotateZDegree = fProjectileOrbitRotateZ; }; float GetProjectileOrbitRotateZ( void ) { return m_fProjectileOrbitRotateZDegree; }; void SetTraceHitTarget( bool bTraceHitTarget, bool bTraceHitActorHittable ) { m_bTraceHitTarget = bTraceHitTarget; m_bTraceHitActorHittable = bTraceHitActorHittable; }; bool IsTraceHitTarget( void ) { return m_bTraceHitTarget; }; bool IsTraceHitActorHittable( void ) { return m_bTraceHitActorHittable; }; void SetForceDir( const EtVector3& vForceDir ) { m_vForceDir = vForceDir; m_bUseForceDir = true; }; bool IsUsedForceDir( void ) { return m_bUseForceDir; }; const EtVector3& GetForceDir( void ) { return m_vForceDir; }; void SetShooterType( DnActorHandle hActor, int nActionIndex, int nSignalIndex ); void SetShooterType( DnWeaponHandle hWeapon, int nActionIndex, int nSignalIndex ); // ¹ß»çü »ý¼º, ¹ß»çü °´Ã¼·ÎºÎÅÍ Àü¼Û ÆÐŶ ¸¸µé±â.. µîµî.. // ¹ß»çü ½Ã±×³Î¿¡ ³»¿ëÀÌ Ãß°¡µÇ¸é °°ÀÌ ¼öÁ¤ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. static CDnProjectile *CreateProjectile( CMultiRoom *pRoom, DnActorHandle hShooter, MatrixEx &LocalCross, ProjectileStruct *pStruct, EtVector3* pForceTargetPos=NULL, DnActorHandle hForceTarget=CDnActor::Identity(), EtVector3* pForceDir = NULL ); static CDnProjectile* CreatePlayerProjectileFromClientPacket( DnActorHandle hShooter, const BYTE* pPacket ); CPacketCompressStream* GetPacketStream( void ); const std::vector& GetStateEffectList() { return m_VecStateEffectList; } void ApplyParentProjectile(CDnProjectile* pParentProjectile); protected: int m_nTargetPartsIndex; //Parts¸ó½ºÅÍÀϰæ¿ì ¼±ÅÃµÈ partsÀ妽º int m_nTargetPartsBoneIndex; //¼±ÅÃµÈ Parts¿¡¼­ ½ÇÁ¦ BoneÁ¤º¸¸¦ °¡Áø Index..(MonsterParts¸¦ Vector·Î °¡Áö°í, ´Ù½Ã _Info°¡ _PartsInfo¸¦ vector·Î °¡Áü) public: void SetTargetPartsIndex(int nPartsIndex, int nBoneIndex) { m_nTargetPartsIndex = nPartsIndex; m_nTargetPartsBoneIndex = nBoneIndex; } int GetTargetPartsIndex() { return m_nTargetPartsIndex; } int GetTargetPartsBoneIndex() { return m_nTargetPartsBoneIndex; } void UpdateTargetPartsIndex(); void SetForceHitElement( ElementEnum eElement ) { m_eForceHitElement = eElement; }; private: // »óÅÂÈ¿°ú ¼³Á¤°ªÀ» È®ÀÎÇÑ´Ù. void GetChainAttackInfo(const CDnSkill::StateEffectStruct& stateEffectStruct, float& fRange, int& nMaxCount); //´ÙÀ½ »ó´ë¸¦ °Ë»ö DnActorHandle FindNextChainActor(int iRootAttackerTeam, DnActorHandle hActor, DnActorHandle hPrevActor, float fRange); void CreateChainAttackProjectile(DnActorHandle hRootAttacker, DnActorHandle hActor, DnActorHandle hActorToAttack, ProjectileStruct* pProjectileSignalInfo, CDnSkill::SkillInfo& parentSkillInfo); public: void SetSummonMonsterForceSkillLevel( int iLevel ) { m_iSummonMonsterForceSkillLevel = iLevel; }; #if defined(PRE_FIX_52329) protected: int m_nIgnoreHitType; // public: void SetIgnoreHitType(int nType) { m_nIgnoreHitType = nType; } int GetIgnoreHitType() { return m_nIgnoreHitType; } #endif // PRE_FIX_52329 #if defined(PRE_ADD_55295) protected: bool m_bHitActionVectorInit; public: //¹ß»çüÀÇ ¹æÇâÀº À¯ÁöÇÑü Yº¤ÅÍ ÃʱâÈ­ ½ÃŲ´Ù. void ChangeProjectileRotation(); void SetHitActionVectorInit(bool bHitActionVectorInit) { m_bHitActionVectorInit = bHitActionVectorInit; } bool IsHitActionVectorInit() { return m_bHitActionVectorInit; } #endif // PRE_ADD_55295 ////////////////////////////////////////////////////////////////////////// //#56880 //È÷Æ® ¼ö Á¦ÇÑ °ü·Ã ¹ß»çü ½ºÅ³ÀÇ ½ÃÀÛ ½Ã°£À» ¼³Á¤ Çϵµ·Ï ÇÑ´Ù. protected: LOCAL_TIME m_SkillStartTime; public: void SetSkillStartTime(LOCAL_TIME startTime) { m_SkillStartTime = startTime; } LOCAL_TIME GetSkillStartTime() { return m_SkillStartTime; } ////////////////////////////////////////////////////////////////////////// #if defined(PRE_FIX_59238) //¼­¸ÕÆäÆê°ú ÁÖÀÎ ¾×ÅͰ¡ µ¿½Ã¿¡ È÷Æ® µÇÁö ¾Êµµ·Ï Çϱâ À§ÇÑ ÀÛ¾÷ //¹ß»çü¿¡¼­ È÷Æ® µÈ ¾×Å͸¦ ¸®½ºÆ®¿¡ ´ã¾Æ ³õ´Â´Ù. protected: std::map m_HittedActorList; public: void AddHittedActor(DnActorHandle hHittedActor); bool IsHittable(DnActorHandle hActor); #endif // PRE_FIX_59238 #if defined(PRE_FIX_59336) void ApplyComboLimitStateEffect( DnActorHandle hActor ); #endif // PRE_FIX_59336 void ApplySkillStateEffect(DnActorHandle hActor); #if defined(PRE_FIX_65287) //½ºÅ³¿¡¼­ 50¹ø »óÅÂÈ¿°ú¸¦ ½ºÅ³ ½ÃÀüÀÚ Àڽſ¡°Ô Àû¿ë ÇØ ³õÀº »óÅ¿¡¼­ ¹ß»çü°¡ ¹ß»çµÇ°í, //¹ß»çüÀ¯Áö µÇ´Â ½Ã°£ÀÌ ½ºÅ³ À¯Áö ½Ã°£ º¸´Ù ±æ¾î Áú °æ¿ì, ½ºÅ³ ½ÃÀüÀÚÀÇ »óÅÂÈ¿°ú´Â »ç¶óÁö°í, //¹ß»çüÀÇ µ¥¹ÌÁö °è»ê¿¡ ´õ ÀÌ»ó ¿µÇâÀ» ¸ð ÁÖ´Â °æ¿ì°¡ ¹ß»ýµÈ´Ù. //¹ß»çü »ý¼ºÇؼ­ ¹ß»çü ¹ß»ç ¾×ÅÍÀÇ ½ºÅÝ Á¤º¸¸¦ ÀúÀå ÇÏ´Â ½ÃÁ¡¿¡¼­, 50¹ø »óÅÂÈ¿°ú°¡ ÀÖ´Â °æ¿ì //»óÅÂÈ¿°ú ¼³Á¤°ªÀ» ÇÕ»êÇØ¼­ ¹ß»çü¿¡ ¼³Á¤ ÇØ ³õ°í, ¹ß»çü Hitó¸® ½Ã ÀÌ Á¤º¸¸¦ ÀÌ¿ëÇϵµ·Ï ÇÑ´Ù. protected: float m_fShooterFinalDamageRate; public: void SetShooterFinalDamageRate(float fRate) { m_fShooterFinalDamageRate = fRate; } float GetShooterFinalDamageRate() { return m_fShooterFinalDamageRate; } #endif // PRE_FIX_65287 }; // ±ËÀûÀ» °áÁ¤Çϴµ¥ ÇÊ¿äÇÑ Á¤º¸µé. struct S_PROJECTILE_PROPERTY { CDnProjectile::OrbitTypeEnum eOrbitType; CDnProjectile::TargetTypeEnum eTargetType; CDnProjectile::VelocityTypeEnum eVelocityType; float fSpeed; float fResistance; float fProjectileOrbitRotateZ; S_PROJECTILE_PROPERTY( void ) : eOrbitType( CDnProjectile::OrbitTypeCount ), eTargetType( CDnProjectile::TargetTypeCount ), eVelocityType( CDnProjectile::VelocityTypeCount ), fSpeed( 0.0f ), fResistance( 0.0f ), fProjectileOrbitRotateZ( 0.0f ) {} };