DragonNest/Server/DNGameServer/DnPlayerActor.h
2024-12-19 09:48:26 +08:00

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
};