661 lines
26 KiB
C++
661 lines
26 KiB
C++
#pragma once
|
|
|
|
#include "DnActor.h"
|
|
#include "DnPlayerState.h"
|
|
|
|
// include Method
|
|
#include "MAPartsBody.h"
|
|
#include "MAWalkMovement.h"
|
|
#include "MACP.h"
|
|
#include "MACP_Renewal.h"
|
|
#include "DNGameRoom.h"
|
|
#include "DnSkillTreeSystem.h"
|
|
|
|
#if defined(_WORK) || defined(_KRAZ)
|
|
#include "DnPlayerTestFlag.h"
|
|
#endif
|
|
#include "DnDropItem.h"
|
|
#include "DnActionSpecificInfo.h"
|
|
#include "MAPlateUser.h"
|
|
#if defined(PRE_ADD_TALISMAN_SYSTEM)
|
|
#include "MATalismanUser.h"
|
|
#endif
|
|
|
|
#include "DnVehicleActor.h"
|
|
#include "DnActorClassDefine.h"
|
|
|
|
#include "DnObservable.h"
|
|
|
|
#ifdef PRE_FIX_GAMESERVER_PERFOMANCE
|
|
#include "FrameSync.h"
|
|
#endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
|
|
#ifdef PRE_FIX_MEMOPT_SIGNALH
|
|
#include "DnCommonUtil.h"
|
|
#endif
|
|
|
|
|
|
namespace BubbleSystem
|
|
{
|
|
class CDnBubbleSystem;
|
|
}
|
|
|
|
// 泅犁 公扁 肮荐绰 林公扁/焊炼公扁 2俺烙.
|
|
const int NUM_WEAPON = 2;
|
|
|
|
|
|
class CDNUserSession;
|
|
class IDnPlayerChecker;
|
|
class CDnVehicleActor;
|
|
|
|
#if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
|
|
class CDnTotalLevelSkillSystem;
|
|
#endif // PRE_ADD_TOTAL_LEVEL_SKILL
|
|
|
|
class CDnPlayerActor : public CDnActor,
|
|
#if defined( PRE_ADD_CP_RENEWAL )
|
|
public MACP_Renewal,
|
|
#else // #if defined( PRE_ADD_CP_RENEWAL )
|
|
public MACP,
|
|
#endif // #if defined( PRE_ADD_CP_RENEWAL )
|
|
public CDnPlayerState,
|
|
#if defined(_WORK) || defined(_KRAZ)
|
|
public CDnPlayerTestFlag,
|
|
#endif
|
|
virtual public MAPartsBody,
|
|
public CDnObservable,
|
|
virtual public MAPlateUser
|
|
#if defined(PRE_ADD_TALISMAN_SYSTEM)
|
|
, virtual public MATalismanUser
|
|
#endif
|
|
{
|
|
public:
|
|
|
|
CDnPlayerActor( CMultiRoom *pRoom, int nClassID );
|
|
virtual ~CDnPlayerActor();
|
|
|
|
virtual MAMovementBase* CreateMovement();
|
|
|
|
private:
|
|
|
|
DWORD m_dwSyncDatumTick;
|
|
DWORD m_dwSyncDatumSendTick;
|
|
UINT m_nVoiceChannelID;
|
|
|
|
IDnPlayerChecker* m_pPlayerSpeedHackChecker;
|
|
IDnPlayerChecker* m_pPlayerDoNotEnterChecker;
|
|
IDnPlayerChecker* m_pPlayerPickupChecker;
|
|
IDnPlayerChecker* m_pPlayerSkillChecker;
|
|
IDnPlayerChecker* m_pPlayerActionChecker;
|
|
|
|
|
|
//rlkt_mastery
|
|
int m_nLastUsedSkill;
|
|
|
|
|
|
#ifdef _USE_VOICECHAT
|
|
int m_nVoiceRotate;
|
|
#endif
|
|
bool _bIsMasterSystemDurabilityReward();
|
|
|
|
protected:
|
|
std::string m_szMaintenanceBoneName;
|
|
std::string m_szActionBoneName;
|
|
char m_cMovePushKeyFlag;
|
|
bool m_bBattleMode;
|
|
int m_nWorldLevel;
|
|
|
|
int m_nComboDelay;
|
|
int m_nComboCount;
|
|
int m_nTotalComboCount;
|
|
|
|
float m_fRecoverySPDelta;
|
|
static float s_fRecoverySPTime;
|
|
|
|
LOCAL_TIME m_nFatigueTick;
|
|
|
|
CDNUserSession * m_pSession;
|
|
CDNGameRoom::PartyStruct *m_pPartyData;
|
|
|
|
bool m_bCompleteCutScene;
|
|
bool m_bCheckCompleteCutScene;
|
|
bool m_bSkipCutScene;
|
|
bool m_bGhost;
|
|
UINT m_uiStateBlowProcessAfterBit;
|
|
|
|
DnWeaponHandle m_hCashWeapon[2];
|
|
bool m_bCashSelfDeleteWeapon[2];
|
|
bool m_bWeaponViewOrder[2];
|
|
|
|
// 公扁 胶懦 醚 肮荐绰 颇明 鸥涝 肮荐+公扁 肮荐烙.
|
|
// 某浆袍篮 辑滚 DB 俊 历厘傍埃捞 歹 鞘夸窍骨肺 眠饶俊 鞘夸窍霸 登搁 夸没且 抗沥.
|
|
// 泅犁绰 巩厘父 厘厚 胶懦 荤侩窃.
|
|
float m_afLastEquipItemSkillDelayTime;
|
|
float m_afLastEquipItemSkillRemainTime;
|
|
DnSkillHandle m_ahEquipSkill;
|
|
|
|
// 滚喉率俊辑 碍拳侩栏肺 眠啊窍绰单 荤侩且 胶懦甸篮 敲饭捞绢啊 流立 积己秦辑 持绢林绢具 茄促.
|
|
map<int, DnSkillHandle> m_mapEnchantSkillFromBubble;
|
|
|
|
// 胶懦 飘府 包访. 角力肺 饭骇 1捞 登绢 裙垫茄 胶懦父 MASkillUser 率栏肺 持绢霖促.
|
|
// (努扼捞攫飘俊辑绰 SkillTask 俊辑 俺牢狼 胶懦 飘府/格废 包访 贸府甫 傈何 钦聪促.)
|
|
vector<int> m_vlUnlockZeroLevelSkills; // 攫遏父 等 饭骇 0惑怕牢 胶懦.
|
|
vector<CDnSkillTreeSystem::S_POSSESSED_SKILL_INFO> m_vlPossessedSkill;
|
|
|
|
// OnChangeAction() 俊辑 琴眉农侩 惯荤眉/咀记 沥焊甫 诀单捞飘 秦林瘤父 菩哦捞 剐府芭唱 辑滚橇饭烙捞 剐妨辑
|
|
// CS_CMDACTION 菩哦苞 惯荤眉 菩哦捞 悼矫俊 贸府登绢 OnChangeAction() 捞 龋免登绢 沥焊啊 诀单捞飘 登扁 傈俊
|
|
// 惯荤眉甫 筋霸 瞪 版快 辑滚俊辑 琴 贸府 登骨肺 快急 CS_CMDACTION 菩哦捞 坷磊付磊 诀单捞飘 秦林绊 捞 敲贰弊甫
|
|
// 难凛聪促. OnChangeAction() 率俊辑绰 捞 敲贰弊啊 波廉乐阑 版快俊父 诀单捞飘甫 荐青钦聪促.
|
|
// 鞍篮 咀记俊辑 茄锅父 诀单捞飘 登绰 巴捞 盔蘑涝聪促. (#21773)
|
|
bool m_bUpdatedProjectileInfoFromCmdAction;
|
|
|
|
int m_iNowMaxProjectileCount; // 泅犁 咀记俊辑 弥措茄 惯荤且 荐 乐绰 惯荤眉 肮荐. 咀记捞 官差搁 秦寸 咀记狼 蔼栏肺 府悸等促.
|
|
int m_iReservedProjectileCount; // 咀记 函版苞 包拌 绝捞 犬焊等 惯荤眉 肮荐. (惯荤眉俊辑 惯荤眉 筋绰 版快)
|
|
multiset<int> m_setWeaponIDUsingProjectileSignal; // 惯荤眉 矫弊澄俊辑 荤侩窍绰 公扁 牢郸胶甸狼 葛澜. 公扁俊辑 惯荤登绰 惯荤眉鳖瘤 器窃.
|
|
deque<int> m_dqProjectileSignalOffset; // 泅犁 敲饭捞绢 咀磐啊 秒窍绊 乐绰 咀记俊辑 惯荤眉 矫弊澄捞 冠囚乐绰 橇饭烙阑 罐酒狄.
|
|
DWORD m_dwLastBasicShootActionTime; // 付瘤阜栏肺 老馆 傍拜 礁 咀记阑 茄 矫埃.
|
|
DWORD m_dwLastBasicShootCoolTime; // 付瘤阜栏肺 诀单捞飘等 老馆 傍拜 礁 咀记狼 酿鸥烙.
|
|
float m_fFrameSpeed; // 泅犁 局聪皋捞记 橇饭烙 犁积 加档. 1.0捞 叼弃飘 蔼. 咀记 酿鸥烙阑 皑救且 锭 荤侩茄促.
|
|
|
|
// 惯荤眉 惯荤 乓阑 眉农茄促. 老馆利牢 版快俊急 true 捞瘤父 敲饭捞芭啊 乔拜矫 酱欺酒赣 锭巩俊 橇饭烙捞 鉴埃利栏肺 割 锅 沥瘤窍搁
|
|
// 辑滚客 橇饭烙 悼扁啊 老沥 蔼 捞惑 哈绢唱绰 版快啊 乐绢 Term 眉农俊辑 吧府骨肺 捞繁 版快浚 眉农甫 窍瘤 臼档废 茄促. (#21133)
|
|
bool m_bCheckProjectileSignalTerm;
|
|
|
|
// Tumble_ 捞 嘿绰 菩矫宏 胶懦 惯悼阑 困秦辑绰 某腐磐啊 Move_ 幅 咀记阑 柳青吝捞绢具 窍绰单
|
|
// 白辑滚俊辑绰 CmdStop() 贸府登绊 Stand 啊 等 抄 饶啊 登绢滚府骨肺 救等促. 蝶扼辑 咯扁辑 流立 咀记 牢郸胶甫 捞绢林档废 茄促.
|
|
// Tumble_Front 啊 吭栏搁 Move_Front 咀记阑 窍绊 乐绢具 窍骨肺 咀记 牢郸胶甫 葛酒狄.
|
|
map<int, int> m_mapTumbleHelper;
|
|
DWORD m_dwLastChargeShootTime; // 瞒瘤鸡篮 扁粮 咀记 矫胶袍苞 促福霸 倒酒埃促. 瞒瘤鸡狼 咀记 酿鸥烙阑 蝶肺 螟沥茄促.
|
|
|
|
|
|
|
|
bool m_bPlayerCannonMode;
|
|
DnActorHandle m_hCannonMonsterActor;
|
|
|
|
int m_nSwapSingleSkinActorID;
|
|
int m_nMonsterMutationTableID;
|
|
EtAniObjectHandle m_hSwapOriginalHandle;
|
|
CDnActionBase *m_pSwapOriginalAction;
|
|
|
|
LOCAL_TIME m_LastEscapeTime;
|
|
int m_nDeathCount; // 阿 胶抛捞瘤喊 磷篮冉荐..捞悼矫 檬扁拳
|
|
|
|
BubbleSystem::CDnBubbleSystem* m_pBubbleSystem;
|
|
|
|
map<DWORD, bool> m_mapIcyFractionHitted;
|
|
|
|
// #26902 烙矫肺 胶懦 眠啊等 惑怕 棺 烙矫肺 眠啊等 流诀 ID.
|
|
bool m_bTempSkillAdded;
|
|
int m_iTempChangedJob;
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
bool m_bForceEnableRideByTrigger;
|
|
UINT m_nVehicleEffectIndex;
|
|
bool m_bVehicleMode;
|
|
DnActorHandle m_hVehicleActor;
|
|
|
|
std::vector<int> m_vecEventEffectList;
|
|
bool m_bDeletedPetSkill[Pet::Skill::Max];
|
|
|
|
int m_nAllowedSkill;
|
|
bool m_bRefreshTransformMode;
|
|
bool m_bTransformMode;
|
|
bool m_bShootMode;
|
|
std::vector<int> m_vecTransformSkillList; // 眠啊等 阁胶磐函脚侩 胶懦府胶飘
|
|
std::string m_strTransformEndAction;
|
|
|
|
#ifdef PRE_ADD_MONSTER_CATCH
|
|
DnActorHandle m_hCatcherMonster; // 朝 棱绊 乐绰 阁胶磐.
|
|
#endif // #ifdef PRE_ADD_MONSTER_CATCH
|
|
int m_nInvalidPlayerCheckCounter;
|
|
|
|
// #32426 家券眉 牧飘费 扁瓷 - 胶抛捞瘤 捞悼 趣篮 粮 捞悼(CmdWarp)甫 且 锭 蝶扼啊具 登绰
|
|
// 捞 敲饭捞绢啊 家券茄 阁胶磐 按眉甸.
|
|
struct S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO
|
|
{
|
|
// 胶抛捞瘤 捞悼阑 窍搁 阁胶磐 按眉啊 昏力登骨肺 蝶肺 单捞磐甫 汗荤秦辑 爱绊 乐促啊
|
|
// 货肺款 胶抛捞瘤肺 捞悼窍搁 促矫 按眉甫 积己窍绊 State 甫 汗荤秦霖 促澜俊 按眉 勤甸阑
|
|
// 货肺 积己等 阁胶磐 按眉肺 拱妨拎辑 单捞磐狼 蜡瓤己阑 蜡瘤矫挪促.
|
|
DnMonsterActorHandle hMonster;
|
|
DWORD dwMonsterClassID;
|
|
SummonMonsterStruct SummonMonsterSignalData;
|
|
LOCAL_TIME iRemainDestroyTime;
|
|
|
|
// 胶抛捞瘤 捞悼栏肺 犁 积己 贸府啊 场抄 阁胶磐绰 敲贰弊 冠酒抵辑 鞍篮 MonsterClassID 啊 犁 积己 夸没捞 甸绢客档
|
|
// 捞 敲贰弊客 鞍捞 厚背秦辑 贸府啊 场抄 阁胶磐 按眉甫 备盒茄促.
|
|
bool bReCreatedFollowStageMonster;
|
|
|
|
S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO( void ) : iRemainDestroyTime( 0 ), dwMonsterClassID( 0 ), bReCreatedFollowStageMonster( false ) {};
|
|
#ifdef PRE_FIX_MEMOPT_SIGNALH
|
|
S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO( const S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO& rhs )
|
|
{
|
|
hMonster = rhs.hMonster;
|
|
dwMonsterClassID = rhs.dwMonsterClassID;
|
|
CopyShallow_SummonMonsterStruct(SummonMonsterSignalData, &rhs.SummonMonsterSignalData);
|
|
iRemainDestroyTime = rhs.iRemainDestroyTime;
|
|
}
|
|
#endif
|
|
};
|
|
std::list<S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO> m_listSummonedMonstersFollowStageInfos;
|
|
|
|
LOCAL_TIME m_MixedActionTimeStamp;
|
|
|
|
#ifdef PRE_FIX_GAMESERVER_PERFOMANCE
|
|
// 霸烙辑滚 欺器刚胶 锭巩俊 敲饭捞绢狼 胶懦 府胶飘喊肺 CDnSkill::Process() 龋免窍绰 巴阑 20橇饭烙 概锅 龋免窍瘤 臼档废 力茄.
|
|
CFrameSkip m_FrameSkipCallSkillProcess;
|
|
#endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
|
|
|
|
#ifdef PRE_ADD_COSTUME_SKILL
|
|
int m_nCostumeSkillID;
|
|
#endif
|
|
|
|
protected:
|
|
// Movement Message
|
|
virtual void OnDrop( float fCurVelocity );
|
|
virtual void OnStop( EtVector3 &vPosition );
|
|
virtual void OnFall( float fCurVelocity );
|
|
|
|
// Actor Message
|
|
virtual void OnStateBlowProcessAfter();
|
|
virtual void OnAddStateBlowProcessAfterType( eStateBlowAfterProcessType Type );
|
|
virtual void OnDie( DnActorHandle hHitter );
|
|
virtual void ProcessDie( LOCAL_TIME LocalTime, float fDelta );
|
|
|
|
virtual void OnHitSuccess( LOCAL_TIME LocalTime, DnActorHandle hActor, HitStruct *pStruct );
|
|
virtual void OnHitFinish( LOCAL_TIME LocalTime, HitStruct *pStruct );
|
|
virtual void OnComboFinish( int nCombo );
|
|
virtual void OnHitProjectile( LOCAL_TIME LocalTime, DnActorHandle hHittedTarget, const CDnDamageBase::SHitParam& HitParam );
|
|
|
|
virtual void OnBreakSkillSuperAmmor( int nIndex, int nOriginalSupperAmmor, int nDescreaseSupperAmmor );
|
|
virtual void OnAirCombo( int nComboCount );
|
|
virtual int OnGetJobClassID(){ return CDnPlayerState::GetJobClassID(); }
|
|
|
|
virtual void PushSummonMonster( DnMonsterActorHandle hMonster, const SummonMonsterStruct* pSummonMonsterStruct, bool bReCreateFollowStageMonster = false );
|
|
|
|
// CDnActorState
|
|
virtual void OnLevelUp( int nLevel, int nLevelUpAmount );
|
|
virtual void OnAddExperience( int nAddExperience, int nLogCode, INT64 biFKey ); // -> nLogCode俊 蝶扼 biFKey蔼档 持绢霖促 (eCharacterExpChangeCode曼炼)
|
|
|
|
// MASkillUser
|
|
virtual bool ExecuteSkill( DnSkillHandle hSkill, LOCAL_TIME LocalTime, float fDelta );
|
|
|
|
void ProcessCombo( LOCAL_TIME LocalTime, float fDelta );
|
|
void ProcessRecoverySP( LOCAL_TIME LocalTime, float fDelta );
|
|
|
|
void OnFinishProcessDie();
|
|
|
|
void OnChangeAction( const char* szPrevAction );
|
|
|
|
void RefreshWeaponViewOrder( int nEquipIndex );
|
|
|
|
void LinkCashWeapon( int nEquipIndex );
|
|
|
|
virtual float PreCalcDamage( CDnDamageBase *pHitter, SHitParam &HitParam, const float fDefenseRate=1.f, float fStateEffectAttackM = -1.0f );
|
|
|
|
// CP
|
|
virtual void OnEventCP( CPTypeEnum Type, int nResult );
|
|
void UpdateAttackedCPPoint( CDnDamageBase *pHitter , CDnWeapon::HitTypeEnum eHitType );
|
|
|
|
void _UpdateMaxProjectileCount( int nActionIndex, bool bUpdateReservedCount = false );
|
|
void _CheckActionWithProcessPassiveActionSkill( const char* szPrevAction );
|
|
void _CheckProcessSkillActioncChange( const char* pAction );
|
|
|
|
public:
|
|
virtual bool Initialize();
|
|
|
|
// Actor Message
|
|
virtual bool SetActionQueue( const char *szActionName, int nLoopCount = 0, float fBlendFrame = 3.f, float fStartFrame = 0.f, bool bCheck = true, bool bCheckStateEffect = true );
|
|
virtual void Process( LOCAL_TIME LocalTime, float fDelta );
|
|
virtual void OnSignal( SignalTypeEnum Type, void *pPtr, LOCAL_TIME LocalTime, LOCAL_TIME SignalStartTime, LOCAL_TIME SignalEndTime, int nSignalIndex );
|
|
|
|
void OrderUseSkillToMySummonedMonster( OrderMySummonedMonsterStruct* pStruct );
|
|
|
|
virtual void OnDamage( CDnDamageBase *pHitter, SHitParam &HitParam, HitStruct *pHitStruct );
|
|
virtual void SyncClassTime( LOCAL_TIME LocalTime );
|
|
virtual void ResetActor();
|
|
virtual void GetBoundingSphere( SSphere &Sphere, bool bActorSize = false );
|
|
virtual void OnBeginStateBlow( DnBlowHandle hBlow );
|
|
|
|
// Quest Callback Message
|
|
virtual void OnKillMonster(DnActorHandle hMonster);
|
|
|
|
//MAPlateUser
|
|
virtual bool AttachGlyph( DnGlyphHandle hGlyph, CDnGlyph::GlyphSlotEnum Index, bool bDelete = false );
|
|
virtual bool DetachGlyph( CDnGlyph::GlyphSlotEnum Index );
|
|
|
|
// Actor Command
|
|
virtual void CmdMove( EtVector3 &vPos, const char *szActionName, int nLoopCount = 0, float fBlendFrame = 3.f );
|
|
virtual void CmdStop( const char *szActionName, int nLoopCount = 0, float fBlendFrame = 3.f, float fStartFrame = 0.f );
|
|
virtual void CmdPassiveSkillAction( int nSkillID, const char *szActionName, int nLoopCount = 0, float fBlendFrame = 3.f, float fStartFrame = 0.0f, bool bChargeKey = false, bool bCheckOverlapAction = true, bool bOnlyCheck = false );
|
|
virtual int CmdAddStateEffect( const CDnSkill::SkillInfo* pParentSkill, STATE_BLOW::emBLOW_INDEX emBlowIndex, int nDurationTime, const char *szParam, bool bOnPlayerInit = false, bool bCheckCanBegin = true, bool bEternity = false );
|
|
virtual void CmdRemoveStateEffect( STATE_BLOW::emBLOW_INDEX emBlowIndex, bool bRemoveFromServerToo = true );
|
|
virtual void SendRemoveStateEffect( STATE_BLOW::emBLOW_INDEX emBlowIndex );
|
|
virtual void SendRemoveStateEffectGraphic( STATE_BLOW::emBLOW_INDEX emBlowIndex );
|
|
virtual void CmdToggleBattle( bool bBattleMode );
|
|
|
|
bool CheckSkillAction( const char *szActionName );
|
|
|
|
virtual void CmdAddExperience( TExpData &ExpData, int nLogCode, INT64 biFKey ); // -> nLogCode俊 蝶扼 biFKey蔼档 持绢霖促 (eCharacterExpChangeCode曼炼)
|
|
virtual void CmdAddCoin( INT64 nCoin, int nLogCode, int nFKey, bool bSync = true );
|
|
|
|
virtual void CmdToggleWeaponViewOrder( int nEquipIndex, bool bShowCash );
|
|
virtual void CmdTogglePartsViewOrder( int nEquipIndex, bool bShowCash );
|
|
virtual void CmdToggleHideHelmet( bool bHideHelmet );
|
|
virtual void CmdChangeJob( int nJobID );
|
|
virtual void CmdPickupItem( PickupItemStruct* pStruct, DnDropItemHandle hDropItem=CDnDropItem::Identity() );
|
|
virtual void CmdEscape( EtVector3 &vPos );
|
|
virtual void CmdWarp( EtVector3 &vPos, EtVector2 &vLook, CDNUserSession* pGameSession=NULL, bool bCheckPlayerFollowSummonedMonster=false );
|
|
|
|
int GetLevelUpSkillPoint( int nPrevLevel, int nCurLevel );
|
|
|
|
// TransAction Message
|
|
virtual void OnDispatchMessage( CDNUserSession *pSession, DWORD dwActorProtocol, BYTE *pPacket );
|
|
|
|
// MASkillUser Message
|
|
// 裙垫窍瘤 臼篮.. 攫遏父 等 胶懦篮 角力肺 MASkillUser 俊霸 持绢林瘤 臼绊 吝埃俊辑 零绊 乐嚼聪促.
|
|
// MASkillUser::AddSkill 狼 啊惑窃荐 惑加阑 蜡瘤窍扁 困秦 iSkillLevelApplyType 鳖瘤 急攫秦初疽瘤父 角力 蔼捞 沥秦瘤绰 巴篮
|
|
// 捞 努贰胶俊辑 坷滚扼捞靛茄 AddSkill 俊辑 pvp/pve 甫 沥秦辑 MASkillUser::AddSkill() 阑 龋免秦凛聪促.
|
|
virtual bool CanAddSkill( int nSkillTableID, int nLevel = 1 );
|
|
virtual bool AddSkill( int nSkillTableID, int nLevel = 1, int iSkillLevelApplyType = CDnSkill::PVE );
|
|
virtual void OnAddSkill( DnSkillHandle hSkill, bool isInitialize = false );
|
|
virtual void OnRemoveSkill( DnSkillHandle hSkill );
|
|
|
|
virtual void OnApplyPassiveSkillBlow( int iBlowID );
|
|
void CheckAndRegisterObserverStateBlow( DnBlowHandle hBlow );
|
|
|
|
void SaveUserData(TUserData &UserData);
|
|
|
|
void SetUserSession(CDNUserSession * pSession);
|
|
CDNUserSession * GetUserSession() { return m_pSession; }
|
|
CDNGameRoom::PartyStruct *GetPartyData() { return m_pPartyData; }
|
|
|
|
bool IsLocalActor() { return false; }
|
|
virtual bool IsDie();
|
|
|
|
void SetBattleMode( bool bEnable );
|
|
bool IsBattleMode() { return m_bBattleMode; }
|
|
bool IsCanBattleMode();
|
|
void OnBattleToggle( bool bBattle );
|
|
|
|
virtual bool IsPlayerActor() { return true; }
|
|
virtual bool IsGMTrace() const;
|
|
virtual UINT GetSessionID();
|
|
virtual int GetMoveSpeed();
|
|
|
|
INT64 GetCharacterDBID();
|
|
int GetComboCount() { return m_nComboCount; }
|
|
int GetComboDelay() { return m_nComboDelay; }
|
|
int GetTotalComboCount() { return m_nTotalComboCount; }
|
|
void ResetTotalComboCount() { m_nTotalComboCount = 0; }
|
|
|
|
void OnRepairEquipDurability( bool bDBSave, INT64 nPriceCoin );
|
|
void OnDecreaseEquipDurability( int nValue, bool bDBSave );
|
|
void OnDecreaseEquipDurability( float fValue, bool bDBSave );
|
|
void OnDecreaseInvenDurability( int nValue, bool bDBSave );
|
|
void OnDecreaseInvenDurability( float fValue, bool bDBSave );
|
|
bool OnStageGiveUp();
|
|
bool IsPenaltyStageGiveUp();
|
|
|
|
bool IsCompleteCutScene() { return m_bCompleteCutScene; }
|
|
void SetCompleteCutScene( bool bValue ) { m_bCompleteCutScene = bValue; }
|
|
void SetCheckCompleteCutScene( bool bValue ){ m_bCheckCompleteCutScene = bValue; }
|
|
bool IsCheckCompleteCutScene(){ return m_bCheckCompleteCutScene; }
|
|
|
|
bool IsSkipCutScene() { return m_bSkipCutScene; }
|
|
void SetSkipCutScene( bool bValue ) { m_bSkipCutScene = bValue; }
|
|
|
|
void ToggleGhostMode( bool bGhost );
|
|
bool IsGhost() { return m_bGhost; }
|
|
void SwapSingleSkin( int nChangeActorTableID);
|
|
bool IsSwapSingleSkin(){ return ( m_nSwapSingleSkinActorID == -1 ) ? false : true; }
|
|
int GetSwapSingleSkinActorID() { return m_nSwapSingleSkinActorID; }
|
|
int GetMonsterMutationTableID() { return m_nMonsterMutationTableID; }
|
|
|
|
void RecvPartyRefreshGateInfo( const EtVector3& Pos );
|
|
|
|
//rlkt_mastery
|
|
int GetLastUsedSkill(void) { return m_nLastUsedSkill; }
|
|
|
|
virtual DnWeaponHandle GetActiveWeapon( int nEquipIndex );
|
|
// 公扁/厩技荤府俊 胶懦捞 崔妨 乐绰 版快 胶懦 眠啊. 狐瘤绰 版快浚 胶懦 力芭.
|
|
virtual bool AttachParts( DnPartsHandle hParts, CDnParts::PartsTypeEnum Index, bool bDelete = false );
|
|
virtual bool DetachParts( CDnParts::PartsTypeEnum Index );
|
|
virtual bool AttachCashParts( DnPartsHandle hParts, CDnParts::PartsTypeEnum Index, bool bDelete = false );
|
|
virtual bool DetachCashParts( CDnParts::PartsTypeEnum Index );
|
|
|
|
virtual void AttachWeapon( DnWeaponHandle hWeapon, int nEquipIndex = 0, bool bDelete = false );
|
|
virtual void DetachWeapon( int nEquipIndex = 0 );
|
|
|
|
// 夸扒 肺拿波.
|
|
virtual void AttachCashWeapon( DnWeaponHandle hWeapon, int nEquipIndex = 0, bool bDelete = false );
|
|
virtual void DetachCashWeapon( int nEquipIndex = 0 );
|
|
virtual DnWeaponHandle GetCashWeapon( int nEquipIndex = 0 ) { return m_hCashWeapon[nEquipIndex]; }
|
|
void ShowCashWeapon( int nEquipIndex, bool bShow );
|
|
void SetWeaponViewOrder( int nEquipIndex, bool bShowCash );
|
|
|
|
// 胶琴包访
|
|
void SetSyncDatumTick(){ m_dwSyncDatumTick = GetTickCount(); }
|
|
void SetSyncDatumSendTick(){ m_dwSyncDatumSendTick = GetTickCount(); }
|
|
DWORD GetSyncDatumGap() const { return GetTickCount()-m_dwSyncDatumTick; }
|
|
DWORD GetSyncDatumSendTick() const { return m_dwSyncDatumSendTick; }
|
|
|
|
// 胶懦 飘府 包访
|
|
vector<CDnSkillTreeSystem::S_POSSESSED_SKILL_INFO>& GetPossessedSkillInfo( void ) { return m_vlPossessedSkill; };
|
|
void UnLockSkill( int nSkillID, INT64 nUnlockPrice=0 );
|
|
// 胶懦合栏肺 攫遏 棺 裙垫鳖瘤 老褒肺 贸府登档废 函版登菌扁 锭巩俊 攫遏等促搁
|
|
// 胶懦阑 裙垫且 荐 乐绰 炼扒捞 登绰瘤 眉农. 角力肺 攫遏登扁 傈俊 龋免登绢 攫遏捞 等促搁 裙垫鳖瘤 啊瓷茄瘤 犬牢茄促.
|
|
int CanAcquireSkillIfUnlock( int nSkillID );
|
|
int AcquireSkill( int nSkillID );
|
|
|
|
void AddNowMaxProjectileCount( int nAddCount ) { m_iNowMaxProjectileCount += nAddCount; };
|
|
|
|
IDnPlayerChecker* GetPlayerSpeedHackChecker( void ) { return m_pPlayerSpeedHackChecker; };
|
|
bool IsInvalidPlayerChecker();
|
|
virtual void OnInvalidPlayerChecker( int nValue );
|
|
|
|
// 惯荤眉 琴包访 肮荐 眉农 矫府令.
|
|
void AddReservedProjectileCount( void ) { ++m_iReservedProjectileCount; };
|
|
bool UseAndCheckAvailProjectileCount( void );
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
// 惯荤眉 矫弊澄俊辑 荤侩窍绰 公扁 抛捞喉 ID 眉农.
|
|
bool CheckAndEraseWeaponIDUsingProjectileSignal( int iWeaponTableID )
|
|
{
|
|
bool bResult = false;
|
|
if( false == m_setWeaponIDUsingProjectileSignal.empty() )
|
|
{
|
|
multiset<int>::iterator iter = m_setWeaponIDUsingProjectileSignal.find( iWeaponTableID );
|
|
if( m_setWeaponIDUsingProjectileSignal.end() != iter )
|
|
{
|
|
// 蔼栏肺 erase 甫 龋免窍搁 鞍篮 蔼 促 瘤况瘤骨肺 窍唱父 瘤快扁.
|
|
m_setWeaponIDUsingProjectileSignal.erase( iter );
|
|
bResult = true;
|
|
}
|
|
}
|
|
|
|
return bResult;
|
|
}
|
|
|
|
void OnChangePlaySpeed( DWORD dwFrame, float fSpeed );
|
|
|
|
bool CheckProjectileSignalFrameTerm( void )
|
|
{
|
|
// 泅犁 惯荤眉 菩哦捞 甸绢柯 矫痢俊 某腐磐狼 惯荤 咀记俊辑 谨瘤绰 惯荤眉狼 橇饭烙苞
|
|
// 泅犁 霸烙辑滚俊辑 秦寸 某腐磐啊 秒窍绊 乐绰 咀记狼 橇饭烙阑 厚背钦聪促.
|
|
// 某腐磐狼 橇饭烙焊促 累篮 惯荤眉 矫弊澄 橇饭烙捞 窍唱档 绝促搁 琴栏肺 埃林钦聪促.
|
|
// 胶懦咀记阑 力寇茄 老馆 傍拜 咀记父 眉农秦档 邓聪促..
|
|
if( m_dqProjectileSignalOffset.empty() )
|
|
return false;
|
|
|
|
// 惑窍眉 盒府咀记 吝捞扼搁
|
|
float fCurrentFrame = 0.0f;
|
|
if( IsCustomAction() )
|
|
{
|
|
fCurrentFrame = GetCustomActionCurrentFrame();
|
|
}
|
|
else
|
|
{
|
|
fCurrentFrame = CDnActionBase::m_fFrame;
|
|
}
|
|
|
|
// 鞍芭唱 累篮 橇饭烙捞 窍唱档 绝栏搁 泅犁 橇饭烙俊 棵 荐 绝绰 惯荤眉 菩哦烙.
|
|
// 沥纺登绢乐栏骨肺 盖 菊狼 巴父 厚背窍搁 等促.
|
|
// 辑滚绰 20橇饭烙栏肺 档骨肺 +6 橇饭烙狼 包侩档 蔼阑 倾侩茄促.
|
|
int iSignalOffset = int((float)m_dqProjectileSignalOffset.front()/* / m_fFrameSpeed*/); // 橇饭烙 扁霖捞骨肺 蠢妨瘤搁 蠢妨瘤绰措肺 橇饭烙档 词霸 疵绢唱骨肺 弊成 厚背茄促.
|
|
|
|
if( m_bCheckProjectileSignalTerm )
|
|
{
|
|
// 橇饭烙 胶乔靛啊 弧扼瘤搁 坷瞒啊 歹 目龙 荐 乐栏骨肺 皑救.
|
|
if( fCurrentFrame+(8.0f*m_fFrameSpeed) < iSignalOffset )
|
|
{
|
|
// TODO: 琴捞促! 立加 谗绢滚啡栏搁 亮摆绰单..
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 惯荤 贸府 登菌栏骨肺 茄惯 哗林绊.
|
|
m_dqProjectileSignalOffset.pop_front();
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CheckSkipAirCondition(int iSkill); // 泅犁啊 Air牢版快 辑滚客 努扼埃 牢侥瞒捞狼 案栏肺 GroundMovable 眉农俊辑 角菩窍绰 版快啊乐促.
|
|
void ReplacementGlyph( DnSkillHandle hNewSkill );
|
|
bool IsExclusiveSkill( int iSkillID, int iExclusiveID );
|
|
int GetAvailSkillPointByJob( int iSkillID );
|
|
int GetUsedSkillPointInThisJob( const int nJobID );
|
|
|
|
// 努扼捞攫飘俊霸 酿鸥烙 菩傅捞 己傍沁澜阑 舅妨淋.
|
|
void RequestCooltimeParrySuccess( int iSkillID );
|
|
|
|
// 乞鸥 嘎疽阑 锭 角青登绢具 且 酒捞袍 立滴绢 胶懦 包访 贸府且 巴捞 乐栏搁 贸府.
|
|
void CheckNormalHitSEProcessor( DnActorHandle hHittedTarget, const CDnDamageBase::SHitParam& HitParam );
|
|
|
|
void AddStageDeathCount() { ++m_nDeathCount; };
|
|
void ClearStageDeathCount() { m_nDeathCount = 0;};
|
|
int GetStageDeathCount() { return m_nDeathCount;};
|
|
|
|
void InitializeEnchantPassiveSkills( void );
|
|
// from MASkillUser
|
|
virtual void OnReplacementSkill( DnSkillHandle hLegacySkill, DnSkillHandle hNewSkill );
|
|
// 秦寸 胶懦 ID 俊 嘎绰 碍拳 胶懦阑 爱绊 乐绰瘤 眉农秦辑 爱绊 乐促搁 利侩矫难 霖促.
|
|
void CheckAndApplyEnchantPassiveSkill( DnSkillHandle hBaseSkill );
|
|
|
|
// 泅犁 郡府膏呕肺靛狼 酒捞矫 橇发记俊辑父 抗寇利栏肺 2啊瘤狼 惑怕瓤苞 鞘磐傅阑 吧绊 乐绰单
|
|
// 笛 吝俊 窍唱父 hit 登辨 盔窍扁 锭巩俊 刚历 眉农等 巴篮 促澜 鞘磐傅俊 吧府瘤 臼档废 茄促. #28747
|
|
// CDnPlayerActor 俊辑 惑加 罐澜.
|
|
virtual void OnHitSignalStateEffectFilterException( DWORD dwTargetActorUniqueID, int iBlowIndex );
|
|
virtual bool CheckHitSignalStateEffectFilterException( DWORD dwTargetActorUniqueID, int iBlowIndex );
|
|
|
|
virtual bool IsMyRelicMonster( DnActorHandle hActor );
|
|
|
|
BubbleSystem::CDnBubbleSystem* GetBubbleSystem( void ) { return m_pBubbleSystem; };
|
|
void RemoveAllBubbles( bool bRemoveEvent );
|
|
|
|
// #26902
|
|
// 2瞒 傈流 胶懦阑 烙矫肺 荤侩秦杭 荐 乐绰 惑怕肺 父甸绢林扁 困秦 涅胶飘俊辑 荤侩登绰 api 俊辑 龋免登绰 窃荐.
|
|
// 荤侩 啊瓷 流诀 棺 荤侩 啊瓷 饭骇阑 泅犁 某腐磐狼 饭骇肺 嘎苗霖促.
|
|
// 努扼捞攫飘 率俊辑父 胶懦 飘府甫 焊咯林扁 困秦 烙矫肺 傈流阑 矫难霖促.
|
|
bool IsTempSkillAdded( void ) { return m_bTempSkillAdded; };
|
|
bool CanChangeJob( int iJobID );
|
|
void SendTempJobChange( int iJobID );
|
|
void EndAddTempSkillAndSendRestoreTempJobChange( void );
|
|
void AddTempSkill( int iSkillID );
|
|
void RemoveAllTempSkill( void );
|
|
|
|
bool IsCannonMode( void ) { return (m_hCannonMonsterActor && m_bPlayerCannonMode); };
|
|
void OnCannonMonsterDie(void );
|
|
void EndCannonMode();
|
|
|
|
// 呕巴 捞棋飘 磊眉啊 胶泡阑 啊瘤芭唱 霸烙俊 康氢阑 尝摹绰版快俊绰 眠啊甫 秦拎具 窍百瘤父 老窜 弊凡版快啊 泅犁绰 绝扁锭巩俊 老窜 酒捞袍 牢郸胶父 啊瘤绊 乐档废 窍摆嚼聪促.
|
|
void SetVehicleEffectIndex(UINT nIndex){m_nVehicleEffectIndex = nIndex;}
|
|
bool IsCanVehicleMode();
|
|
bool IsCanPetMode();
|
|
void RideVehicle(TVehicle *pInfo);
|
|
void UnRideVehicle(bool bForce=true);
|
|
void ForceUnRideVehicle();
|
|
|
|
bool IsVehicleMode(){return m_bVehicleMode;}
|
|
void SetVehicleMode(bool bVehicle){m_bVehicleMode = bVehicle;}
|
|
CDnVehicleActor *GetMyVehicleActor();
|
|
void SetMyVehicleActor(DnActorHandle hVehicleActor){m_hVehicleActor = hVehicleActor;}
|
|
void RemoveVehicleStateEffectImmediately(int nBlowIndex );
|
|
|
|
void SetForceEnableRide( const bool bForceEnableRide );
|
|
|
|
// Pet / Vehicle阑 困秦辑 辑滚俊辑 Process倒妨具 窍绰 版快绰 捞 窃荐 郴何俊 眠啊秦凛矫促.
|
|
// 努扼捞攫飘绰 Task肺 包府凳.
|
|
|
|
void ProcessCompanion( LOCAL_TIME LocalTime, float fDelta );
|
|
|
|
void ApplyEventStateBlow();
|
|
void RemoveEventStateBlow();
|
|
|
|
void CheckPetSatietyPercent();
|
|
bool IsTransformMode(){return m_bTransformMode;}
|
|
bool IsTransformSkill( int nSkillID );
|
|
|
|
virtual void RefreshTransformMode();
|
|
virtual void ToggleTransformMode(bool bTrue, int nMonsterMutationTableID=-1, bool bForce = false, const char* strEndAction = "Stand" );
|
|
virtual void CmdShootMode(bool bTrue);
|
|
virtual const char *GetChangeShootActionName(const char *szActionName);
|
|
virtual void ProcessNonLocalShootModeAction();
|
|
|
|
bool IsSpectatorMode();
|
|
virtual bool OnApplySpectator(bool bEnable);
|
|
|
|
#ifdef PRE_ADD_MONSTER_CATCH
|
|
void SetCatcherMonsterActor( DnActorHandle hActor ) { m_hCatcherMonster = hActor; };
|
|
void ReleaseCatcherMonsterActor( void ) { m_hCatcherMonster.Identity(); };
|
|
bool IsCatchedByMonster( void ) { return m_hCatcherMonster ? true : false; };
|
|
#endif // #ifdef PRE_ADD_MONSTER_CATCH
|
|
|
|
void OnInitializeNextStageFinished( void );
|
|
void OnDieSummonedMonster( DnMonsterActorHandle hSummonedMonster );
|
|
void OnBeforeDestroyStageMonsters( void );
|
|
|
|
bool HasSameGlobalIDSkill( int iSkillID );
|
|
|
|
#ifdef PRE_FIX_GAMESERVER_PERFOMANCE
|
|
virtual bool IsAllowCallSkillProcess( float fDelta );
|
|
#endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
|
|
|
|
void UpdateMissionByMonsterKillCount(int nCount);
|
|
|
|
void ApplyEnchantSkillOnceFromBubble( int iTargetSkillID, int iEnchantSkillID );
|
|
|
|
//#45680
|
|
//胶懦飘府芒俊辑狼 饭骇诀篮 DnSkillTask俊辑 悼累 登绊 乐栏唱
|
|
//辑滚率俊辑 胶懦 饭骇诀 酒捞袍 厘/呕馒矫 巩厘 瓤苞 利侩 何盒 穿遏登绢 乐澜.
|
|
virtual void ChangeSkillLevelUp(int nSkillID, int nOrigLevel);
|
|
|
|
void MakeEquipAndPassiveState( CDnState &State );
|
|
|
|
#ifdef PRE_ADD_COSTUME_SKILL
|
|
void RefreshCostumeSkill( int nSkillIndex , int nSkilllevel);
|
|
#endif
|
|
#ifdef PRE_ADD_VEHICLE_SPECIAL_ACTION
|
|
void ReportInvalidAction();
|
|
#endif
|
|
|
|
#if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
|
|
protected:
|
|
CDnTotalLevelSkillSystem* m_pTotalLevelSkillSystem;
|
|
|
|
public:
|
|
CDnTotalLevelSkillSystem* GetTotalLevelSkillSystem() { return m_pTotalLevelSkillSystem; }
|
|
|
|
virtual void UpdateTotalLevel(int nLevel);
|
|
virtual void UpdateTotalLevelByCharLevel();
|
|
virtual void AddTotalLevelSkill(int nSlotIndex, int nSkillID, bool isInitialize = false);
|
|
virtual void RemoveTotalLevelSkill(int nSlotIndex);
|
|
virtual void ActivateTotalLevelSkillSlot(int nSlotIndex, bool bActivate);
|
|
virtual void ActivateTotalLevelSkillCashSlot(int nSlotIndex, bool bActivate, __time64_t tExpireDate);
|
|
|
|
virtual void RequestAddTotalLevelSkill(int nSlotIndex, int nSkillID) {};
|
|
virtual void RequestRemoveTotalLevelSkill(int nSlotIndex) {};
|
|
|
|
virtual void OnLevelChange();
|
|
#endif // PRE_ADD_TOTAL_LEVEL_SKILL
|
|
|
|
|
|
};
|